• 🏆 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!

[General] Guidance or explanation of using existing user created content for my map

Status
Not open for further replies.
Level 10
Joined
Apr 9, 2004
Messages
502
Hello All,

for the longest time I've had a project in mind that I've fleshed out quite a bit but the problem is I suck at coding and the reality is there's now systems to make things a lot easier for a lot of mappers except. Hence I have a lot of reassources but (a) i'm not aware of what can be used for what and (b) even if I find a resource I THINK is correct for what I want to achieve, I don't know how to use it despite the instructions.

So I'm asking for help to figure out these issues so that I can understand the intent and restrictions of using systems for my custom map.

I have a list of systems below that I want to implement, I have an idea of how I want them to work, I just don't know what sort of setup can achieve that type of effect code wise, mainly in such a way that doesn't leak or slow down on a large AoS sized scale. Items are listed below:

1) Damage detection system:

This one's pretty basic but essentially I'm splitting damage into melee and ranged but the twist is that the damage source is important. For instance, damage can come from melee attacks, bonus damage modifiers (i.e. copy the the damage source but not necessarily the damage type) low arc projectiles, high arc projectiles, lightning (acts as a high speed projectile for collision detection, then once linked as a normal lightining effect), instant effects (ie instant buff or single target effect like an explosion or bomb), from the ground up (think impale or earthquake etc.) or from the sky down (think lightning strike). In any case, I want to be able to distinguish the source such that, say for instance, a unit in the air cannot be harmed by ground effects and a unit with a shield over his head can't be hit by air to ground or high arc'd projectiles.

After damage source I have damage type:

There is 3 main damage types: Physical, Magical, and Pure.

Physical damage is further split into physical damage type (slashing, bashing, weaponless, piercing, seige) which interacts with armor types (leather,metal,cloth,stone,armorless).

Magical damage is split into 5 elemental types (Fire, Water, Wind, and Earth, and Pure) The 4 main interact where as pure magical damage has no associated element and is only affected my magic resistance.

Pure damage is damage that is not reduced by physical or magical resistance. Only special resistances such as invulnerability can stop pure damage.

On top of that I have damage modifiers which increases or reduce damage such as shields (shield life not affected by armor and has resistance value of it's own), weapon and armor enchantments etc.

This one seems fairly straight forward and almost any damage detection system would do, although I'd need to know how to configure to easily assign a damage source and type to the damage (i.e. source is projectile type is magical).


From there we have a

2) Projectile system.

Now for this system, I looked into some of the systems, but one thing that I wanted to incorporate was a few environment mechanisms such as gravity and tracking (homing). Missiles are launched with a certain force and arc which allows a maximum range from where they're fired. They can also have tracking properties, such as a max deviation for tracking, max turn rate etc, such that if you fire a missile and a unit can move perpendicular to the missile's travel path fast enough (i.e. with a high mobility spell or ability, or just very high movement speed) then even some projectiles that would normally hit would miss and just fly forward until they fell to the ground.

Another thing for projectiles is that they'd have to be dynamically manipulate-able such that you could alter their targeting and motion style at any time to, for instance, change the intended target, or direction, change the target-able units (i.e. for unit specific targeting, if it loses tracking it becomes a rogue missile that can hurt any unit it hits) etc. etc.

For this system i thought it would be easy to simply create an array for each projectile to track all these variables, I'm just not sure how to set it up so I can simply run this as a function every time I want to generate a projectile as such I'd have complete control at creation and even during each instance.

The other big thing is I'd need to be able to grab any projectile and get any information about that projectile too, so that I could look up what it was going to do and change it (i.e. maybe an energy field makes all enemy projectiles that pass through it deal bonus fire damage or something, or even heal instead of harm allies)

One other thing to consider is that I'd like the possibility to using units as projectiles too, for the purpose of supporting a knockback system.

3) Buff System

For this system, I want to track all buffs in play, such that I can manipulate buff interaction (i.e. if you has buff A, effect A happens, if you has buff B, effect B happens, if you has buff A and B, effect C happens etc)

For 99% of this, I know I can get away with using the tornado passive and I'd like to trigger everything around this if possible. However, I'm not sure if I can do this and still use things like silence or stuns properly. I know there are some interesting ways to silence units through engineering upgrade and other things like that but stuns seem to require a spell of some sort.

Again I think this is doable in a way similar to the projectiles where I simply track each buff in a way that I can assign the buffs to any specific unit for any specific effect. Again, the big thing is to be able to look up a buff and pull any information or edit it at any point in time from a separate event (i.e. a unit has a spell where they slowly drain a buff away from a unit, essentially adding a buff to themselves and increasing it's duration while reducing the duration of the buff on the affected unit)


4) Cooldown system

I already have found a method for this (i think there's a thread in the lab section pertaining to it) but the next trick is applying this to all abilities and creating a system that I can preload each ability into the game with an associated cooldown on the ability it self and a cooldown modifier for the unit that would create the overall cooldown for that ability for that unit. Making it multi-instanceable such that I can run it on a 5v5 hero AoS where even non-hero units have cooldowns that follow this.

5) Casting system

Because of the limitations in allowing for casting during certain affects, every unit would have a 0 cast time and all abilities would be based off of channel. Now the interesting thing I want to have here is the ability to manipulate casting time. Now there has to be a minimum as for most abilities units have to turn around or play a firing animation, although some may allow to skip that. In comes this system which will control how quickly a unit casts an ability. This applies to charging abilities as well as regular spells. Now essentially what happens as the channel itself has 0 cooldown so if the ability is cancelled before the triggered casting time the ability won't fire, won't trigger cooldown, and won't expend mana (the mana consumption will be triggered). Again, this an ability+unit specific set so I need to track the unit and abilities for that unit (because not all units have the same animation, if any units share a similar ability, the effect and casting time may not be exactly the same). Again, I need a way to track the unit+ability combination for all combinations, I'm guessing a system similar to the projectile and buff system would work too.

I'd need to be able to look-up the ability-unit combinations as well (i.e. in a case where the unit is paused but we don't want to terminate the effect [i.e. time freeze or something] we can pause right where they were in their cast and resume as soon as we unpause them.

6) Dynamic terrain tracking system

I want to be able to control the terrain of every single tile on the map. The reasoning is simply, I have some abilities and effects that temporarily alter the ground and using splats to create these effects doesn't work as well as changing the terrain due to the way that terrain tiles automatically link up in a way that I don't have to stack multiple areas and still be easily capable of determining if units are on a certain terrain type).

A good example is I want to trigger water terrain instead of using the water settings currently in game. Why? because you can't dynamically place a water palette overtop the terrain without severely changing pathing of the terrain. SO if I want something like a water bomb that leaves a puddle on the ground that slowly evaporates, then I can do that with minimal setup.

7) Universal constant properties system

Nothing crazy, but there will be some universal constants that apply to all units except when a secondary modifier is applied. These are time, gravity, weight etc. Things that don't change and affect most abilities and units on the map with only exceptions to the rule.

These would allow for things like a time freeze zone where units are essentially put into a stasis field, and everything is frozen (regen, cooldowns, buffs etc.) or custom gravity zones where, for instance, units or projectiles are weight down and can't fly as far or something of that nature.

8) Vision system

I would want a way so I could manipulate a units vision of every single unit on the map. The way i'm working this is there are two tiers of invisibility. 1 tier can be revealed and thus seen with dispel or others, whereas another cannot be revealed unless under special circumstances.

for instance, there is a hero who remains unsee-able while near his illusions and the only way to see him is to destroy those illusions.

9) Miscellanious systems

a) way to treat lightning as a projectile so it can be manipulated a similar way
b) tracking unit motion
c) a way to allow units to move through or alternatively on top of trees and alter vision in such cases. This also applies to cliffs (i.e. a unit has a dash ability, they can dash off a cliff to a lower terrain but not vice versa)
d) mouse tracking on abilities. I.e. once an ability is cast you can use the mouse to manipulate targeting or change direction instead of reselecting.


The biggest thing with all of this is that I have the ideas but I don't know how I would setup or use the systems available to do these things. I'm trying to make a proper "sub-engine" i guess so that the actual ability creation is more just about tweaking the already established parameters. Anyways, any guidance for how to setup these systems would be greatly appreciated.
 
Level 7
Joined
Oct 19, 2015
Messages
286
My recommendation is that you drastically simplify your design, because right now it is a huge mess.
 
Level 11
Joined
Aug 24, 2012
Messages
429
I don't want to discourage you, but I would agree with Anitarf, this kind of grand vision which includes so many aspects would take a long time to implement. The longer something like this takes, the higher the chances that you will stop being motivated and scrap the project.

Edit: to offer some actual constructive criticism, why don't you try focus on one of these systems and flesh it out really well. It would give you an idea of how long the other systems will take to implement. Also, see if that system on its own enhances the fun of the game. If it doesn't feel fun, perhaps it is redundant.
 
Level 10
Joined
Apr 9, 2004
Messages
502
Lol i guess mess is a nice way to put it. But i never said I wanted an easy project. Everything up there I can do in a small scale, but for an AoS map I need guidance on how to use the tools available. I put down what I want because it gives people an idea of the entirety of my map.

In all realness I don't think having a knockback/missile/damage/buff/item/cooldown system is all that complicated and I've only had the desire of putting these systems in because of what I've already seen and have been frustrated with. I've already envisioned the scope of the map and the things I'd like to play around with which I haven't seen any other map incorporate, soMost of the systems are independant I just need to honestly learn how to use the indexing systems there properly to create these subsystems. I mean I can easily create integer lists and do this a clunky way in GUI but I'm trying to start on the right foot. Would it be better if I hack together a GUI version so people know what I'm going for?
 
Level 7
Joined
Oct 19, 2015
Messages
286
It's not about how easy it is to make. It's about how fun it is to play. Having a more abstract, simplified game model is more manageable for the players than if you do a complex simulation. There's a reason why WC3 doesn't simulate proper 3D missiles with hit detection, and it's not because it was too hard for Blizzard to code.

And no, your systems don't seem at all independent. In your first post you already list a ton of interactions where systems need to support other systems for the interactions to work.
 
Level 10
Joined
Apr 9, 2004
Messages
502
If that were 100% true, then what's the point of venturing on passed the GUI interface for spell making? I mean we already have a lot of ways to customize an effect to do something different and it's pretty easy to change spells so that they feel different, but the problem is it's boring and you're stuck to a set of rules, that we've shown, can be twisted and easily broken to realize much more entertaining spells and systems.

At the heart of it all this is an AoS with a more controlled item system that is aimed at making item buying less of a pain in the ass, not more, and a wider variety of spells and abilities that allow you to do and experience things no current aos does. I mean yes it's a dead game but the idea and intent are sill there.

Having complex systems doesn't mean having complex gameplay or spells. Most of these are to ensure the map runs the way I envision it to run, nothing more. The hero ideas I have I can make them work on their own just fine but when you combine things you can't always predict the results which is why I need to have the systems in place first.

Case and point a simple knockback spell. Say two heroes have a similar run and knockback enemies hit while running spell. Say they both activate and run at each other, who gets the effect off first? Is it random? Should the bigger hero knock the smaller hero back? What else might you expect to happen? It's stuff like this, where abilities don't overlap or communicate which makes the game more confusing and less fun, not the other way around.

If I play a map and discover that if I jump and land on trees I can run on top of them, it doesn't make the game more complicated to the player where it becomes no fun, they learn a new fun and different aspect that they can then add into their game play. Now it might be a complicated system to trigger wc3 so that is doable and not weird but for the player it doesn't feel complicated. The features I want to add are to make a map where spells all behave and things act intuitively the way a player would guess they should, not where you have a super high learning curve to play.

I'll break down again each system and why I want it and how it doesn't complicate anything.

1) For the damage system, if I want to customize evasion and all other things like making manipulate-able projectiles, I need this. Some of the aspects are extra but they just work towards making a more intuitive experience, not complicating things. Melee still hits the same, projectiles still damage and essentially you have magical, physical, and universal damage. The rest of the break down a player won't even notice except when a specific situation presents itself. In those cases the visual cues would be enough to allow for a response that's intuitive in terms of how you'd expect the damage to be applied (i.e. flyign units won't be damaged by ground effects so a jump spell can evade a stomp spell).

2) The projectile system opens up so much in the world of game play. The feel can be made to work exactly how it currently does but now you can get options of doing to pretty cool stuff with it. For example I have an idea where a hero blinks but he also sucks in all units and projectiles nearby and brings them with him, altering their instantaneous position both nothing else. They reappear in the same relative position to his own when he emerges and continue on their original flight direction. Close enough projectiles targeting him will still hit him but now he has a new unique mechanic where he can shift units and missiles. So for instance say another hero as an ability to fire a slow moving but high damage line projectile, he can work with his teamate to teleport with that projectile right into his enemies. If nothing else I'd say that's a way to make for some seriously cool abilities, effects, and moments of cool teamplay. The plus side is this system can be used and manipulated or left alone and the player shouldn't be able to notice a difference either way.

3) Buffs right now are usually mutually exclusive and currently have limitations in terms of effect and stacking, everything. I just want to be able to control more aspects. Similar to the projectile system, this doesn't have to make the game more complicated but it can allow for things that should be simple to do easier. For instance, units who are covered in water take less burn damage from fire and cannot catch on fire. Or a water elemental, who would be permanently covered in water, would be permanently wet and permanently take less damage from fire and be unable to ignite. Maybe add a third ability, an oil bomb, that covers units in oil and negates the water effect. This would then allow water elemental to be ignited. Or a poison has a stacking dps effect. Or an ability to drain buffs from an ally. Simple enough but not doable with buffs the way they currently work.

4) Like the others, pretty straight forward. I want to control cooldowns. Gives one more dynamic effect to be controlled, can be used or not, no effect to the player experience. Also works mechanically with the casting system to make it work properly.

5) This is totally to make it easier for the triggering side of things but again allow for an extra step of customization. Currently there's a problem with a casting backing where you can instantly cast another ability while channeling the first. You can get around this by setting the casting backswing to 0 but then it screws how spells animate. Sometimes you want an instant effect or a delay to play an animation correctly, this allows you to control that. This system is designed such that all units have a 0 cast backswing to it makes sure the effect of cancelling before the backswing is in effect or when the spell registers is controlled properly. The player won't tell this is running if it works as I plan for it to. The added bonus, however, is you can control this delay which means it can allow faster casting for heroes, which is something a player can understand. Ie 25% reduced casting time means they will aim and fire quicker. Simple enough to play with.

6) This again has nothing to do with the player but is for the ease of tracking what terrain tile is where. By being able to dynamically track and alter, this gives me access to things like dynamically altering the terrain with abilities or other in game effects, things which the player will only notice as natural occurrences but not things to really understand or calculate for.

7) Having global constants such as gravity or time allows me to scale the effects in a universal way. This has little to no effect on the gameplay experience.

8) This is just because setting invisibility is a fickle thing. We only have 2 tiers to work with so you have to be creative if you want to get around that. Shouldn't affect how the players perceive anything, it just makes it so again you have 2 tiers of visibility, 1 which is as per usual, and one which is a special version that is not detectable but only removable under certain conditions.

9) These misc abilities are ways to make the gameplay more intuitive rather than less. For instance, the mouse tracking would be awesome for abilities where you sprayed enemies and you could control quickly and easily where the stream went.


Looking at all the items I want to implement, it doesn't have to make the game complicated and most of it can be intuitive to the player. I mean there will be some level of learning which is apparent in any game but I just want to make sure that everything communicates the way you'd expect it to. The more options I have doesn't mean that I want a more complicated game, most of the numbers and values are constants that need to be tweaked in order for the visuals to make sense, but otherwise this shouldn't complicate or take away from the player's experience.
 
Level 14
Joined
Nov 17, 2010
Messages
1,265
If you are really serious about it then my best advice would be to pour over all of the tutorials that pertain to your questions. Once you start to understand them you can practice with things to figure out how they work. Eventually you will teach yourself how to handle things. Along the way you may also find out what is worth keeping and what is worth simplifying.

This is how I learned to do everything with my project. There was a lot of trial and error and redoing things. There were a lot of ambitious ideas I had that I eventually realized added hours and hours of extra work to make something that wasn't even that fun or noticeable.

The cream will definitely rise to the top if you go this route. Good luck mate.
 
Level 24
Joined
Aug 1, 2013
Messages
4,657
So funny... creating a system, then someone makes a thread that lists all its features :D

I can recommend you to learn JASS and vJASS and try some systems that are uploaded here.
You will eventually end up making all of those from scratch after all but that doesnt mean that you dont have a good example of how to do it.

If you keep having trouble with a specific thing, you then come here to ask people on what you are doing wrong, then we can help you much better than this.

And no, your systems don't seem at all independent. In your first post you already list a ton of interactions where systems need to support other systems for the interactions to work.
I have to disagree.
At least the damage, projectile, buff and cooldown are independent... then I stopped reading.


So:
1, learn JASS/vJASS.
2, download other people's systems.
3, find out how they work.
4, create those systems from scratch.
5, enjoy your map.
 
Level 10
Joined
Apr 9, 2004
Messages
502
I suppose the easiest way rather than make walls of texts is to make the systems the way I know how so you can see something physical and then leave it to experienced coders to rip it down and build it back up such that it is optimized.

That way there's less up front text that you all have to read through.
 
Level 24
Joined
Aug 1, 2013
Messages
4,657
We dont really want to read trough it... do we?
I created stuff that can literally do everything he wanted... the only problem is that I dont use the wc3 basics but my own data structures and in such a way that only I can understand how it works :D

One thing you really have to do is separate system musts and additional features (that can be done as implementation).
For example, the evasion is not part of the system, it is part of it's implementation.
 
Level 10
Joined
Apr 9, 2004
Messages
502
It's harder said than done as I don't always know if something can be added as implementation or as part of the system. So for now it's trial and error.

That being said, I think the "show and tell" approach gives the best idea of how I want something to look and feel and perform, and THEN someone can read it, understand it and translate it to an optimized version of itself. Or they can tell me why what I'm trying to do is not realistically possible (i.e. too much memory draw to apply the effect etc.)
 
Status
Not open for further replies.
Top