Heroes' Arena v0.20

Discussion of all aspects of multiplayer development: unit balancing, map development, server development, and so forth.

Moderator: Forum Moderators

Weeksy
Posts: 1017
Joined: January 29th, 2007, 1:05 am
Location: Oregon

Post by Weeksy »

Why do people randomly get nuked out of existence? I'll just randomly have a bunch of creeps, and sometimes my hero, die?
If enough people bang their heads against a brick wall, The brick wall will fall down
User avatar
Ken_Oh
Moderator Emeritus
Posts: 2178
Joined: February 6th, 2006, 4:03 am
Location: Baltimore, Maryland, USA

Post by Ken_Oh »

It's a bug with Fire Shield, I think.
savagust
Posts: 56
Joined: November 19th, 2005, 4:00 am

Post by savagust »

I found that happens after a unit is killed by the effect of "Reflect" or "Fireshield".
I think it is because victim is killed by effect of skill in the middle of fight.
User avatar
TL
Posts: 511
Joined: March 3rd, 2007, 3:02 am

Post by TL »

Thanks for the details, I'll look into it. I've heard about this before but never seen it firsthand.

Haven't got much work on this done lately, I've mostly been working on a campaign project. My summer courses end shortly so maybe I'll have a little more time for development, at least for a week or two.
savagust
Posts: 56
Joined: November 19th, 2005, 4:00 am

Post by savagust »

There is a similar ability inside the "Abilities Era" made by Ken Oh. :D

Code: Select all

#define ABILITY_SPIKED_ARMOR TYPE
[heals]
	name= _ "spiked armor"
	description= _ "spiked armor:
The Spiked Armor ability causes 3 damage to an attacking unit for each strike it attempts."
[/heals]
[/abilities]
	[event]
		name=attacker_hits
		first_time_only=no
		
		[filter_second]
			type={TYPE} 
		[/filter_second]

		[special_filter]
			[not]
			weapon=bolas
			[/not]
			[not]
			weapon=bow
			[/not]
			[not]
			weapon=sling
			[/not]
			[not]
			weapon=dart
			[/not]
			[not]
			weapon=boomerang
			[/not]
			[not]
			weapon=thrown cleaver
			[/not]
			[not]
			weapon=crossbow
			[/not]
			[not]
			weapon=throwing knives
			[/not]
		[/special_filter]



		{STORE_UNIT_VAR x,y=$x1,$y1 hitpoints attacker_hp}

		{VARIABLE_OP attacker_hp add -3}
			{IF attacker_hp less_than 1 (
				[then]
					{VARIABLE attacker_hp 1}
				[/then]
			)}  

		{MODIFY_UNIT x,y=$x1,$y1 hitpoints "$attacker_hp"}
		{CLEAR_VARIABLE attacker_hp}
	[/event]
	[event]
		name=attacker_misses
		first_time_only=no

		[filter_second]
			type={TYPE} 
		[/filter_second]

		[special_filter]
			[not]
			weapon=bolas
			[/not]
			[not]
			weapon=bow
			[/not]
			[not]
			weapon=sling
			[/not]
			[not]
			weapon=dart
			[/not]
			[not]
			weapon=boomerang
			[/not]
			[not]
			weapon=thrown cleaver
			[/not]
			[not]
			weapon=crossbow
			[/not]
			[not]
			weapon=throwing knives
			[/not]
		[/special_filter]


		{STORE_UNIT_VAR x,y=$x1,$y1 hitpoints attacker_hp}

		{VARIABLE_OP attacker_hp add -3}
			{IF attacker_hp less_than 1 (
				[then]
					{VARIABLE attacker_hp 1}
				[/then]
			)}  

	
		{MODIFY_UNIT x,y=$x1,$y1 hitpoints "$attacker_hp"}
		{CLEAR_VARIABLE attacker_hp}
	[/event]
[+abilities]
#enddef
Inspired by that, I found it can be solved by not allowing effect of skill to kill victim in the middle of fight.



Here is a solution.

1. Add the following code into the "Utilities.cfg".

Code: Select all

###For the usage in the middle of fight
#define INFLICT_DAMAGE_WITHOUT_KILL AMOUNT TYPE VICTIM ATTACKER
	[set_variable]
	name=damage
	value={AMOUNT}
	multiply=${VICTIM}.resistance.{TYPE}
	divide=-100
	[/set_variable]

	[set_variable]
	name={VICTIM}.hitpoints
	add=$damage
	[/set_variable]

		[if]
			[variable]
				name={VICTIM}.hitpoints
				less_than=1
			[/variable]

				[then]
					{VARIABLE {VICTIM}.hitpoints 1}

					[unstore_unit]
					variable={VICTIM}
					text=Dying!
					{COLOR_HARM}
					[/unstore_unit]
				[/then]

				[else]
					[set_variable]
					name=damage
					multiply=-1
					[/set_variable]

					[unstore_unit]
					variable={VICTIM}
					text=$damage
					{COLOR_HARM}
					[/unstore_unit]
				[/else]

		[/if]
#enddef
2. Inside the "Effects.cfg", change all "INFLICT_DAMAGE" of "ATTACK_EFFECT_REFLECT" and "ATTACK_EFFECT_FIRESHIELD" into "INFLICT_DAMAGE_WITHOUT_KILL".



I have tested that and it works.
However, effects of "Reflect" and "Fireshield" would not kill any unit now.




Here are some feedback:

Heroes are not allowed to attack if some command is used.
That is not good because:
Use that command > No attack > No exp
> Sleeping on the road to skill points
> Lesser chance to survive

I advise to use a new variable instead of attacks_left for those kinds of commands to allow players to perform one attack and one command in the same turn.
(That variable is reset to 1 every side turn. )
Therefore, a hero can use that command after attack, or attack after using that command.
However, moving should not be allowed after using that command.
(Too advantageous if something like"Command: Upheavel > Moving to the created hill / mountain")

Also, I think enemy units are spawned too frequently now.
Every time we are surrounded quickly after we have reached the first bonus spot for a few turns.
Then, we are swamped there forever and this also makes other bonus spots worthless.
Under this situation, if any hero dies there, that hero will be doomed because he will be surrounded by enemy alone.
(A skill, like "Call of Hero", is handy here. )



Bug Report:

1. Command of "Plant Growth" can be selected on the hex under the caster.

Inside "Commands.cfg", the define of "COMMAND_PLANT_GROWTH",
The following should be added inside the first [filter_location]:

Code: Select all

		[not]
			[filter]
				side=$side_number
				canrecruit=1
			[/filter]
		[/not]

2. Command of "Living Vines" is not shown.

Inside "Commands.cfg", the define of "COMMAND_CONTROL_VINES",
the line inside [skill_options], "living_vines=-99", should be changed to "control_vines=-99".



3a. Effect of "Enchant Weapon" disappears during the turn of blessed units.
3b. Blessed by multiple "Enchant Weapon", melee damage of blessed units won't be reset to normal next turn.

Inside "Arena.cfg", the "side turn" event, these lines should be removed. (for 3a)

Code: Select all

			[if]
				[variable]
					name=current_units[$I].enchant_bonus
					greater_than=0
				[/variable]			
				[then]
					{VARIABLE_OP current_units[$I].enchant_bonus multiply -1}
					{VARIABLE_OP current_units[$I].attack[0].damage add $current_units[$I].enchant_bonus}
					{VARIABLE current_units[$I].enchant_bonus 0}
				[/then]
			[/if]
I recreated that inside the "new turn" event. (for 3a)
Effect of accumulated enchant bonus is cleared by using extra variable, "accumulated_eb". (for 3b)

Code: Select all

		###clear effect of enchant weapon-START
			[store_unit]
				variable=friendly_units
				[filter]
					[not]
						side=7
					[/not]
				[/filter]
			[/store_unit]

			{FOREACH friendly_units I}
				[if]
					[variable]
						name=friendly_units[$I].accumulated_eb
						greater_than=0
					[/variable]			
					[then]
						{VARIABLE_OP friendly_units[$I].accumulated_eb multiply -1}
						{VARIABLE_OP friendly_units[$I].attack[0].damage add $friendly_units[$I].accumulated_eb}
						{VARIABLE friendly_units[$I].accumulated_eb 0}
					[/then]
				[/if]
				[unstore_unit]
					variable=friendly_units[$I]
				[/unstore_unit]
			{NEXT I}	
			{CLEAR_VARIABLE friendly_units}
		###clear effect of enchant weapon-END
Also, inside "Commands.cfg", "COMMAND_ENCHANT_WEAPON",
after the line, {VARIABLE_OP target_unit.attack[0].damage add $target_unit.enchant_bonus},
the following is added in order to remember accumulated enchant bonus. (for 3b)

Code: Select all

		{VARIABLE_OP target_unit.accumulated_eb add $target_unit.enchant_bonus}
		{VARIABLE target_unit.enchant_bonus 0}

4a. When fireball of a hero(has "Reflect" or is adjacent to a hero with "Reflect") hits enemy, effect of "Reflect" also damages that enemy.
4b. When fireball of an enemy hits a hero(has "Reflect" or is adjacent to a hero with "Reflect"), effect of "Reflect" also damages that hero.

Inside "Effects.cfg", "ATTACK_EFFECT_REFLECT",
The following should be added into both "attacker_hits" events.

Code: Select all

	[filter]
		side=7
	[/filter]
Also,
{INFLICT_DAMAGE 2 fire second_unit unit} should be {INFLICT_DAMAGE 2 fire unit second_unit}.
{INFLICT_DAMAGE 2 arcane second_unit unit} should be {INFLICT_DAMAGE 2 arcane unit second_unit}.

Furthermore, I also noticed that there is no event for "Reflect" of bosses(Arch Mage).



5. "Eplosive" would only hurt units of side 7 if used by bosses(Arch Mage).

Inside "Effects.cfg", "ATTACK_EFFECT_EXPLOSIVE",
I think there should be two sets of attacker_hits and defender_hits events for side 1,2,3,4,5,6 and side 7 respectively.
Last edited by savagust on August 24th, 2007, 5:08 am, edited 1 time in total.
User avatar
TL
Posts: 511
Joined: March 3rd, 2007, 3:02 am

Post by TL »

Impressive! Thanks a ton for the help.

As for the arbitrary damage effects mid-fight, it's simple enough to check the HP after the fight and kill them then (this is required as a workaround for the effects that trigger when you kill an enemy, since killing a unit through WML during a "die" event has some buggy effects).

I'm not entirely certain about the balance of allowing an attack + another command, but I suppose it would help fix the problem of waiting several minutes for your turn in multiplayer and only getting to do one thing (boring!) Partly this is a holdover from when you could deliberately alter your own terrain hex (which would be grossly unfair for attacking from), but I'm still concerned it may make command-based abilities too advantageous since it removes one of the tradeoffs. Particularly unit-spawning abilities, although those do tend to carry their own cost since they funnel XP to your minions instead of your hero. I'll think about it some.

Bugs:

1. Oops! Originally this was how Plant Growth was supposed to work. I intended to change it to be consistent with Upheaval but guess I forgot to make the actual change.

2. Yeah, I caught this one but was too busy with other stuff to upload a separate fix for it.

3. Hmm... I think I originally planned on disallowing multiple enchants on the same unit anyhow. Wearing off at the end of turn (instead of the beginning) was originally intentional but I'm not sure why. Maybe that was before I'd decided to make it so you couldn't enchant yourself, since I judged that being able to enchant yourself and get bonus damage on all your counterattacks would make the dwarf into too much of a defensive powerhouse. That's not a concern anymore though so your way is probably a better idea now.

4 & 5. Thanks for the catches, I've never really tested the skills in that branch as thoroughly as I should have.
Weeksy
Posts: 1017
Joined: January 29th, 2007, 1:05 am
Location: Oregon

Post by Weeksy »

Could we get a version with the new 1.3 version of [or] out on the campaign server? The old one isn't even there anymore, due to a nasty server crash...
If enough people bang their heads against a brick wall, The brick wall will fall down
User avatar
TL
Posts: 511
Joined: March 3rd, 2007, 3:02 am

Post by TL »

Oops, forgot about that. Ok, I think I've got everything working again, so I just uploaded a new version. This fixes some of the problems savagust found and also introduces an important new feature: each hero unit can now make 2 attacks per turn, or use 1 power + make 1 attack (but can't use 2 powers in the same turn). Abilities like interpose/infiltrate that didn't use up your attack before still don't use up an attack and can be used freely. Hopefully this will be a bit fairer between heroes that go for the special abilities and heroes that just go all out on their attacks, plus the monster load should be a little bit more manageable now with extra attacks to go around.
User avatar
Ken_Oh
Moderator Emeritus
Posts: 2178
Joined: February 6th, 2006, 4:03 am
Location: Baltimore, Maryland, USA

Post by Ken_Oh »

Excellent idea!

OK, a few small issues still. If you teleport to a castle hex (you know, where you get the bonuses), it doesn't give you the bonus (it doesn't act as a move to event).

Guerrilla still doesn't work if you move, undo and then shoot from your initial position.

I'm getting a deprecated "[or]" error when I use upheaval. Looking at your WML I can't tell what the problem is because that part of it looks the same as other parts of commands that work fine. The result is that I can use upheaval as many times as I want and then still use another command. I also noticed that it allows me to select forest for upheaval but then didn't do anything when I tried it. Maybe it has something to do with that.
User avatar
TL
Posts: 511
Joined: March 3rd, 2007, 3:02 am

Post by TL »

Aw crap, left something out when I was working on getting everything working. Uploaded a fix so special abilities should work properly.
savagust
Posts: 56
Joined: November 19th, 2005, 4:00 am

Post by savagust »

Great! :D
I played and found that it is easier to handle enemies now(but still now hard for me) and with more actions, it is more interesting and also makes teamwork become more important now.



Bug report:

1. In order to get damage bonus from "Dexterity" or "Strength",
new attacks have to be chosen before them.

Inside "Upgrades.cfg",
MENU_STRENGTH,
all "melee_boost" should be renamed to "melee_bonus".
MENU_DEXTERITY,
all "ranged_boost" should be renamed to "ranged_bonus".

2. "lightning bolt" cannot get any damage bonus from "Dexterity" that has been chosen before it.

Inside "Attacks.cfg", ATTACK_LIGHTNING,
the line, "damage=5" should be "damage={DAMAGE}".



Lastly, here are some suggestions.

1. Active side's hero can set "hero spawning spot" on his located or adjacent hex.
It makes "hero spawning spot" serve as a checkpoint of your team. Every time, if a hero respawns, he can meet the team immediately instead of being surrounded by hordes of enemies.

2. With the use of renown points and gold, hero can recruit followers.
All heroes begin with 0 renown points and gain 25 renown points per level up. Different type of units costs you different values of gold and renown. Thus, number of followers is limited by renown points of each hero. For example, with 110 renown points, you can have 3 Goblin Spearmen(33 renown cost) or 1 Troll Whelp(106 renown cost).

Even with the new feature, it's still very hard(for me :) ) to survive because hero lose HP much faster than they recover even with healers. Thus, I found that Summoning is the most possible way to survive. That is quite bored because you can only have woses and giant mudcrawlers. However, this feature may ruin the style of acting a hero.



I have made a sample containing these two features.
Last edited by savagust on September 2nd, 2007, 1:57 pm, edited 1 time in total.
User avatar
TL
Posts: 511
Joined: March 3rd, 2007, 3:02 am

Post by TL »

Hmm... I'm still not sure. I have considered working in a generic way to get recruits, but generally I haven't found minions to be a particularly successful tactic as it diverts XP away from your hero and can easily result in wasted XP when experienced minions die.

However, I did just upload a new version with a long-awaited tweak: I've always avoided putting in villages for fear of it being too easy for "turtling" tactics due to high defense + healing, so as a compromise I added a few oases and sunken villages, both of which give healing but have bad defense for most units.

Also I did slow down the increase in level for enemy spawns, so you don't face quite as many high level units, especially in the middle portion of the game.
CIB
Code Contributor
Posts: 625
Joined: November 24th, 2006, 11:26 pm

Post by CIB »

I get an error when playing with another player.. Always when the other player's unit levels, I get an error "Promotion not found"
User avatar
TL
Posts: 511
Joined: March 3rd, 2007, 3:02 am

Post by TL »

Drat. Don't have the annoying "promotion expected" OOS fixed yet, but it seems to be harmless.

In the meantime I just uploaded 0.20 with some improvements. Various bugfixes (including the 3rd action bug :oops:), a few new abilities (particularly for the dwarf). I added a healing spot in each of the six outer segments.

In light of the continuing insanity of the difficulty level I've made a few more tweaks to the spawn system and shortened the length of the game to 60 turns. Getting even that far in multiplayer takes a very long time and is almost impossible without resorting to lowering the XP slider (and there's nothing wrong with lowering the XP setting, but it shouldn't be required to win). Now it should be altogether more reasonable, since you don't have to fight through 30 turns of multiple level 4s spawning. The boss spawns finally work now though so you don't win just for surviving anymore, but it should hopefully at least be possible to get to the bosses without having to lower XP%.

(Additionally, it no longer spawns enemies for dead players. This should help considerably in multiplayer too).
Qes
Posts: 357
Joined: August 9th, 2007, 10:28 pm
Location: Minnesota

Post by Qes »

With 1.3.7 out

the soul shooter is now the "Banebow"

This causes a crash to lobby if people have different versions.

Also - the EXP bar is no longer adjustable with 1.3.7 making it near impossible at 100% experience and all the other standard acutrements.

If at all possible please allow for a variable experience rate.

Thanks Its a blast to play!

-Qes


Edit: Other suggestions.

Rune Magic:

The runes are a WONDERUL Idea...now if only they mattered.

The fire runes do far too little damage to matter, even spread all out to hell and gone most fighting takes place within 10-15 hexes of each other, and theres simply not the time to run around and place runes everywhere

so a tacit suggestion:

Make runes stack - how to balance is simple.

Make each rune independant and able to do damage, heal, give experience, etc. To all things - like now. However, color code the runes (per player - is this possible?) and limit each dwarf to say 3 runes out at any time.

You can then add new upgrades that increase the number of runes allowed out at once. To be a rune master - one should not also be a melee master. As it is now, you up till you get the runes, place em around a bit, and sit on a mountain doing melee till the cows come home. If suddenly having all fire runes prevented you from laying a healing rune, people would be more careful about when and where they place them. If they stack, strategic development is also crucial.

Also - enslavement needs some love. Perhaps just add abilities that keep increasing the level of what can be enslaved - from 0 to 1 to 2 to 3 perhaps even 4 - again, in doing so one should be sacrificing other key abilities and upgrades.


Thanks alot!
Yes I use windows.
Yes I'm aware of what that means.
Yes I'm still gonna use windows.
Post Reply