• 🏆 Texturing Contest #33 is OPEN! Contestants must re-texture a SD unit model found in-game (Warcraft 3 Classic), recreating the unit into a peaceful NPC version. 🔗Click here to enter!
  • It's time for the first HD Modeling Contest of 2024. Join the theme discussion for Hive's HD Modeling Contest #6! Click here to post your idea!

[Role Playing Game] Project: Open ARPG - Looking for Worker Bees

Status
Not open for further replies.
Level 11
Joined
Feb 23, 2009
Messages
577
Greetings worker bees.

Some of you may remember the Missile System that I was making a while back, using only special effects (no dummy units). The system was smooth, however it was coded the wrong way (not a bad way) where making arcs was a problem, I have now re-designed the whole thing so that it can have Height Arcs and Side Arcs (or both, but that looks weird in game due to the camera angle).

Since then, many new natives have been released and Warcraft 3 Reforged approaches.
Therefore, I have decided to take this system to a new level, which isn't only for missiles, but to create a whole ARPG system in order to make the best OARPG on wc3 Reforged Custom Games!... At the moment, the system is in Beta stage, everything works well, but there are many more things that I want to add in there, and I need help from people with different fields of expertise.


FINISHED:
- Mouse Only Move System
- Quick Cast on All Abilities (no need to left-click to select target point, it just casts)
- MPI (1 Hero per Player, in the process of making an AI system to have all other units follow based on their formation rank)
- Powerup System (Grabs them as you walk by)

IN THE WORKS:
- Item System (still figuring out what will be cool in reforged)
- Ability System (This will be extremely complex, but very simple for players in-game, where they can assign their skills to either Q, W, E or R, Similar to Diablo 3, But hell not like Diablo 3 lol)
- Ability Support System (like in Path of Exile but different, each player will be able to customize all their abilities in-game)

WHAT I'M LOOKING FOR:
- A dedicated terrainer, that will ONLY use the base WC3 models, since reforged models are great, we will use only those to start with. Also everything needs to be flat... Like in all ARPG's.
- Story / Quest maker, this person needs to work closely with the terrainer. The goal is to make an OARPG (Open Action RPG), like in the old days maybe some of you remember Julian's ORPG, it needs to have a feel similar to that. Players can be good, evil or neutral, they can choose to do quests or grow some sort of village... or stuff, y'know... There should be nice PVE and PVP aspects in the world, so that people may choose their victory type (examples: Own All Towns / Kill God Boss / Acquire 1M gold / w/e), with some victory types being "shareable" like the PVE ones, where the team would win as one.
- Hero / Skill / Item designer, this person will work closely with me, he or she does not need to know any coding since I will be coding everything. I'm looking for that person with 1000 good ideas that never made it to production, so I can extract all of them and put them into application! Of course, I've got totally original ideas that I will implement as well... Like Magic Missiles... from Baldur's Gate (totes original...), or Enchant from Diablo 2...

So far it's just me, but if you're interested in joining the team, send me a pm.

Anyways, seeing is believing, so here is a demo video with a few abilities:
* The system can do so much more than what's in the video, I just wanted to make popular skills here.



---

Example of an Ability's Customizable Stats - Growing Fireball Totem:
  • TPMS Ability Fireball
    • Events
    • Conditions
    • Actions
      • Set TPMS_01_Model = Abilities\Weapons\LavaSpawnMissile\LavaSpawnMissile.mdl
      • -------- --- --------
      • Set TPMS_41_LaunchOffset_Angle = 0.00
      • Set TPMS_42_LaunchOffset_X = 0.00
      • Set TPMS_44_LaunchOffset_Z = 60.00
      • -------- --- --------
      • Set TPMS_02_Size = 1.00
      • Set TPMS_03_Collision = 64.00
      • Set TPMS_38_StatVariance = 0.00
      • -------- Stat growth per second --------
      • Set TPMS_40_Growth = 0.50
      • -------- Degrees per second --------
      • Set TPMS_33_SpinSpeed = 0.00
      • Set TPMS_34_RollSpeed = 0.00
      • -------- Set to -1 for infinite --------
      • Set TPMS_04_TimedLife = 2.00
      • Set TPMS_35_TimedLife_AlwaysUseMax = True
      • -------- Set to 0 to cast on target location --------
      • -------- It also doesn't check for nearby units after, only waits for timed life --------
      • Set TPMS_05_Travel_Speed = -900.00
      • -------- Acceleration per second --------
      • -------- Does not work with arcs --------
      • Set TPMS_39_Travel_Acceleration = 1800.00
      • -------- --- --------
      • Set TPMS_32_MinRange = 150.00
      • Set TPMS_06_MaxRange = 1000.00
      • Set TPMS_07_MaxRange_AlwaysGo = False
      • -------- 180 and -180 = Perfect Arcs --------
      • -------- 360 and -360 = Full Circle --------
      • Set TPMS_08_HeightArc = 0.00
      • Set TPMS_37_HeightArc_Degrade = 0.00
      • -------- --- --------
      • Set TPMS_09_SideArc = 0.00
      • Set TPMS_36_SideArc_Degrade = 0.00
      • -------- --- --------
      • Set TPMS_10_Damage_Min = 50.00
      • Set TPMS_11_Damage_Max = 65.00
      • Set TPMS_12_Damage_Type = TPMS_DamageType_6_Magic
      • Set TPMS_13_Damage_SpecialEffect = Abilities\Spells\Items\AIfb\AIfbSpecialArt.mdl
      • -------- --- --------
      • Set TPMS_14_AoE_Radius = 128.00
      • Set TPMS_15_AoE_DamageRatio = 1.00
      • Set TPMS_17_AoE_ProcsAtMaxRange = True
      • Set TPMS_16_AoE_SpecialEffect = <Empty String>
      • Set TPMS_45_AoE_SpecialEffect_Size = 0.00
      • -------- Experimental when used with Arcs --------
      • Set TPMS_18_Pierce_Chance = 0.00
      • Set TPMS_19_Pierce_MaxAmount = 0
      • Set TPMS_20_Pierce_DamageRatio = 0.00
      • Set TPMS_21_Pierce_Special = TPMS_PierceSpecial_A_None
      • -------- --- --------
      • Set TPMS_22_Split_Chance = 0.00
      • Set TPMS_23_Split_Amount = 0
      • Set TPMS_24_Split_Angle = 0.00
      • Set TPMS_25_Split_PowerRatio = 0.00
      • Set TPMS_26_Split_ProcsAtMaxRange = False
      • Set TPMS_31_Split_ReSplitAmount = 0
      • -------- --- --------
      • Set TPMS_27_ExtraMissiles_Amount = 0
      • Set TPMS_28_ExtraMissiles_Angle = 0.00
      • -------- --- --------
      • Set TPMS_29_SeekEnemy_Radius = 0.00
      • -------- Hmmmm lol... --------
      • Set TPMS_30_FollowsCursor = False
      • -------- --- --------
      • Set TPMS_46_Familiar_IsCaster = True
      • Set TPMS_47_Familiar_UnitType = Sentry Ward
      • Set TPMS_48_Familiar_MaxAmount = 2
      • Set TPMS_49_Familiar_MaxCasts = 3
      • Set TPMS_50_Familiar_TimedLife = 30.00
      • Set TPMS_51_Familiar_FriendlyAbil = False
      • Set TPMS_52_Familiar_SpellCD = 3.00
      • -------- --- --------
      • Trigger - Run TPMS Missile Initiate <gen> (checking conditions)
 
Last edited:
Level 39
Joined
Feb 27, 2007
Messages
4,994
That’s a real fucked way of doing spell variables, and I strongly suggest you change that naming convention before it becomes a huge issue debugging and reading. Not having the same number in all variables for a single spell is asinine. This is exactly the use case for array variables—just use those!
 
Level 11
Joined
Feb 23, 2009
Messages
577
That’s a real fucked way of doing spell variables, and I strongly suggest you change that naming convention before it becomes a huge issue debugging and reading. Not having the same number in all variables for a single spell is asinine. This is exactly the use case for array variables—just use those!

Hi Pyro. Though I do appreciate your feedback, I feel like you jumped the gun on this one lol... Obviously I use arrays, how would the system even work xD?... Ahem, it seems like you don't understand the versatility of the system and why I did things this way.

  • TPMS Missile Create
    • Events
    • Conditions
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • TPMS_38_StatVariance Not equal to 0.00
        • Then - Actions
          • Set TP_Real = (1.00 + (Random real number between (TPMS_38_StatVariance x -1.00) and TPMS_38_StatVariance))
        • Else - Actions
          • Set TP_Real = 1.00
      • -------- --- --------
      • Set TPMS__MissileIndex = (TPMS__MissileIndex + 1)
      • -------- --- --------
      • Set TPMSx_02_Size[TPMS__MissileIndex] = (TPMS_02_Size x TP_Real)
      • Set TPMSx_03_Collision[TPMS__MissileIndex] = (TPMS_03_Collision x TP_Real)
      • Set TPMSx_04_TimedLife[TPMS__MissileIndex] = (TPMS_04_TimedLife x TP_Real)
      • Set TPMSx_05_Travel_Speed[TPMS__MissileIndex] = (TPMS_05_Travel_Speed x TP_Real)
      • Set TPMSx_06_MaxRange[TPMS__MissileIndex] = (TPMS_06_MaxRange x TP_Real)
      • Set TPMSx_10_Damage_Min[TPMS__MissileIndex] = (TPMS_10_Damage_Min x TP_Real)
      • Set TPMSx_11_Damage_Max[TPMS__MissileIndex] = (TPMS_11_Damage_Max x TP_Real)
      • Set TPMSx_14_AoE_Radius[TPMS__MissileIndex] = (TPMS_14_AoE_Radius x TP_Real)
      • Set TPMSx_26_SeekEnemy_Radius[TPMS__MissileIndex] = (TPMS_29_SeekEnemy_Radius x TP_Real)
      • Set TPMSx_47_TravelAcceleration[TPMS__MissileIndex] = (TPMS_39_Travel_Acceleration x TP_Real)
      • Set TPMSx_48_Growth[TPMS__MissileIndex] = (TPMS_40_Growth x TP_Real)
      • Set TPMSx_50_AoE_SpEffect_Size[TPMS__MissileIndex] = (TPMS_45_AoE_SpecialEffect_Size x TP_Real)
      • -------- --- --------
      • Set TPMSx_01_Model[TPMS__MissileIndex] = TPMS_01_Model
      • Set TPMSx_08_Height_Arc[TPMS__MissileIndex] = TPMS_08_HeightArc
      • Set TPMSx_09_Side_Arc[TPMS__MissileIndex] = TPMS_09_SideArc
      • Set TPMSx_12_Damage_Type[TPMS__MissileIndex] = TPMS_12_Damage_Type
      • Set TPMSx_13_Damage_SpecialEffect[TPMS__MissileIndex] = TPMS_13_Damage_SpecialEffect
      • Set TPMSx_15_AoE_DamageRatio[TPMS__MissileIndex] = TPMS_15_AoE_DamageRatio
      • Set TPMSx_16_AoE_SpecialEffect[TPMS__MissileIndex] = TPMS_16_AoE_SpecialEffect
      • Set TPMSx_17_AoE_ProcsAtMaxRange[TPMS__MissileIndex] = TPMS_17_AoE_ProcsAtMaxRange
      • Set TPMSx_18_Pierce_Chance[TPMS__MissileIndex] = TPMS_18_Pierce_Chance
      • Set TPMSx_19_Pierce_MaxAmount[TPMS__MissileIndex] = TPMS_19_Pierce_MaxAmount
      • Set TPMSx_20_Pierce_DamageRatio[TPMS__MissileIndex] = TPMS_20_Pierce_DamageRatio
      • Set TPMSx_21_Pierce_Special[TPMS__MissileIndex] = TPMS_21_Pierce_Special
      • Set TPMSx_22_Split_Chance[TPMS__MissileIndex] = TPMS_22_Split_Chance
      • Set TPMSx_23_Split_Amount[TPMS__MissileIndex] = TPMS_23_Split_Amount
      • Set TPMSx_24_Split_PowerRatio[TPMS__MissileIndex] = TPMS_25_Split_PowerRatio
      • Set TPMSx_25_Split_ProcsAtMaxRange[TPMS__MissileIndex] = TPMS_26_Split_ProcsAtMaxRange
      • Set TPMSx_27_FollowsCursor[TPMS__MissileIndex] = TPMS_30_FollowsCursor
      • Set TPMSx_35_PlayerID[TPMS__MissileIndex] = TP_PlayerID
      • Set TPMSx_36_Split_Angle[TPMS__MissileIndex] = TPMS_24_Split_Angle
      • Set TPMSx_37_Split_ReSplitAmount[TPMS__MissileIndex] = TPMS_31_Split_ReSplitAmount
      • Set TPMSx_39_SpinSpeed[TPMS__MissileIndex] = (TPMS_33_SpinSpeed x TP_Real)
      • Set TPMSx_40_RollSpeed[TPMS__MissileIndex] = (TPMS_34_RollSpeed x TP_Real)
      • Set TPMSx_43_TimedLife_AlwaysGoMax[TPMS__MissileIndex] = TPMS_35_TimedLife_AlwaysUseMax
      • Set TPMSx_44_SideArc_Degrade[TPMS__MissileIndex] = TPMS_36_SideArc_Degrade
      • Set TPMSx_45_HeightArc_Degrade[TPMS__MissileIndex] = TPMS_37_HeightArc_Degrade
      • Set TPMSx_46_StatVariance[TPMS__MissileIndex] = TPMS_38_StatVariance
      • Set TPMSx_49_LaunchOffset_Z[TPMS__MissileIndex] = TPMS_44_LaunchOffset_Z
      • -------- --- --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • TP_Boolean_SplitMissile Equal to True
        • Then - Actions
          • -------- --- --------
          • Custom script: call DestroyGroup(udg_TPMS_Group_PierceTracker[udg_TPMS__MissileIndex])
          • Set TPMS_Group_PierceTracker[TPMS__MissileIndex] = TPMS_Group_PierceTracker[TP_Index]
          • -------- --- --------
        • Else - Actions
          • -------- --- --------
          • Custom script: call DestroyGroup(udg_TPMS_Group_PierceTracker[udg_TPMS__MissileIndex])
          • -------- --- --------
This is where the variables for each sp effect is SAVED... the other one is just to set the initial stats of the spell... not save the actual info. Save them as non arrays before for instances where you throw multiple effects at once when you add a variation to them so that it doesn't have to re-check the whole thing for every stat on each missile.

PS: If you watched the video you would have noticed the fireball and the nova mines each happening at the same time, which isn't even possible without arrays (or I don't see how).

PPS: If you want to take a look at the code, I can give you a sneak peak.
 
Last edited:
Level 39
Joined
Feb 27, 2007
Messages
4,994
My comment has nothing to do with the spells working or not, and was not about indexing cast instances but rather the init variables used to define the spell. I see this:
  • Set TPMS_01_Model = Abilities\Weapons\LavaSpawnMissile\LavaSpawnMissile.mdl
  • -------- --- --------
  • Set TPMS_41_LaunchOffset_Angle = 0.00
  • Set TPMS_42_LaunchOffset_X = 0.00
  • Set TPMS_44_LaunchOffset_Z = 60.00
  • -------- --- --------
  • Set TPMS_02_Size = 1.00
  • Set TPMS_03_Collision = 64.00
  • Set TPMS_38_StatVariance = 0.00
  • -------- Stat growth per second --------
  • Set TPMS_40_Growth = 0.50
  • -------- etc. --------
and it appears to me that the fireball spell uses (in these lines) variables numbered: 01, 41, 42, 44, 02, 03, 38, and 40. My presumption was that the numbers were to indicate some index for the spell as a whole, not that the numbers were referring simply to different spell variables for organizational purposes. It appeared that the next spell defined after this one would use variables called TMPS_02_Model, TMPS_42_LaunchOffset_Angle, TMPS_43_LaunchOffsetX, TMPS_45_LaunchOffsetZ, etc. and that you were creating a new variable with a next higher number for every spell that used that type of variable.

I see what you are doing. I was suggesting this makes more sense:
  • Set SPELL_INDEX = SPELL_INDEX + 1
  • -------- save this SPELL_INDEX so you can get it back when units cast this spell --------
  • Set TPMS_Model[SPELL_INDEX] = Abilities\Weapons\LavaSpawnMissile\LavaSpawnMissile.mdl
  • -------- --- --------
  • Set TPMS_LaunchOffset_Angle[SPELL_INDEX] = 0.00
  • Set TPMS_LaunchOffset_X[SPELL_INDEX] = 0.00
  • Set TPMS_LaunchOffset_Z[SPELL_INDEX] = 60.00
  • -------- --- --------
  • Set TPMS_Size[SPELL_INDEX] = 1.00
  • Set TPMS_Collision[SPELL_INDEX] = 64.00
  • Set TPMS_StatVariance[SPELL_INDEX] = 0.00
  • -------- Stat growth per second --------
  • Set TPMS_Growth[SPELL_INDEX] = 0.50
  • -------- etc. --------
 
Level 11
Joined
Feb 23, 2009
Messages
577
No lol the numbers mean nothing at all xD... That's where the confusion was, it's a weird habbit of mine it helps me keep track of things, it's basically just for me to count the amount of variables I already used, they mean nothing to the system, it's just how I named them.

I will probably rename them in the end, but for now it doesn't matter at all.
 
Level 11
Joined
Feb 23, 2009
Messages
577
My bad making the video private, made it public now lol ^^...

---

EDIT:
I see you are prepared to compete with EmberCraft :grin:
There probably will be room for both of our projects, as I don't think we are aiming for the same style of game, though similar.
Emberwake is not an Open ARPG, just an ARPG :)
 
Last edited:
Level 11
Joined
Feb 23, 2009
Messages
577
I see what you are doing. I was suggesting this makes more sense:

It does not make more sense at all, it wouldn't work. Every special effect needs to be tracked, what is the reason of tracking the cast?...

There's also no reason to save any spell's stats in variables... Not when it saves every sp effect (since 1 cast can have many...), it would be a redundant waste with no purpose... Please inform yourself before posting negative comments it's very undesirable.

I created this thread specifically to find new partners for a project, not to have someone scrutinize my code when it doesn't need it (and I will have it examined by a moderator once it is done anyways).
 
Last edited:
Status
Not open for further replies.
Top