[Scrymud] Change idears?

gingon at WANfear.com gingon at WANfear.com
Wed Feb 13 03:50:26 PST 2002


To start off, I'd just like to say that simplicity is not a bad thing when
it comes to interacting with the world, and combat is a big part of that
interaction. Making the combat system more complex and allowing more
interesting tactical possbilities is fine, but not at the cost of making it
hard to understand/use. 

While the current combat system is simple, and allows for little variation,
it is easy to learn and easy to use. The expensive of making the combat code
more complex is greater than simply writing more code, or making combat take
longer over all. The real expensive is in whether or not a new user can
function in combat with little much undersanding of the more complex options.
The more difficult it is, the less likely that a new player will continue to 
play.

Quoting Justin Piper <justin at wanfear.com>:
> First off, I think the automatic melee combat has /got/ to go.  It's 
> cheesy.  Nobody can attack with a sword at the same time they're 
> bodyslamming their opponent.  I think instead of the current system, we 
> should try a "semi-automatic" one.  Rather than having automatic melee 
> every quarter of a second and whatever special attacks you can get in, 
> extend each round out to a maximum of around 2 seconds.  In that time, 
> you enter whatever action you want to take at the end of that round. 
> Once everyone's decided what they want to do (or the timer runs out, in 
> which case the game does something sensible on your behalf), everyone's 
> actions go off, quickest first.  Both the speed of the combatant and 
> the speed of the action being taken are taken into account when 
> determining who attacks first.  Some attacks would be able to interrupt 
> others, allowing you to counter one move with another.

Having a definite limit to what and how you can do per round is fine. It's 
more of a question of how to implement that limitation. My idea is a 
relatively simple modification to the existing system. 

Each combat command that a player may use has a cost in number of attacks.
It would allow a command to use several rounds worth of attacks. Cost in
attacks comes in 2 form, delay and post delay, delay is the number of 
attacks needed before the skill effects occur, and psot delay is the number
of attacks used before another command can be used.

For example spell X is cast by player Frank with a target of Mob. X has a 
delay of 3 attacks, and a post delay of 1 attack.  Frank has 2 attacks per
round.

begining of combat(round 0)
Frank begins casting X at Mob! (uses both of Frank's attacks for his round)
Mob hits Frank!
(round 1)
Frank hits Mob with X! (uses only one of his attacks, and does spell effects)
Mob hits Frank!
(round 2)
(previous use of X uses one of Frank's attack(post delay))
Frank hits Mob with his sword! (uses his last attack, could have used X again
   instead if he chose to.)
Mob hits Frank!
(end of combat/example)

You can see the interesting possbilities in this, a wizard could cast a big 
spell, but doing so prevents him from healing himself or the tank. It would 
also prevent him from fleeing.

Another possiblity lies within special if-else commands. For example a
fighter decides to use block, if the opponent does not attack that round, 
the block becomes a weaker normal attack. Of course, there may be some
attacks that can not be blocked, but may still use up the block command.

The reasoning for this is simple, if you decide to block, but your opponent
does not attack, then you should be able to recognize this and attack instead,
though not as effectively.


> 
> In addition to the inherent speed of an attack, each attack would have 
> both a set of valid starting poses and an ending pose, which are used 
> to chain attacks so they can be performed quicker.  If your last attack 
> left you in a pose that your next attack can start in, you can smoothly 
> move into your next attack without any delay.  If you need to assume a 
> different pose to begin the next attack you've chosen, that negatively 
> affects the speed of your attack.

Interesting ideas, but it would be difficult for players to use 
effectively for 2 reasons. Number one is the amount that has to be typed in
per round, increasing the amount of input required could penalize players who
type slowly, or are somewhat lagged.

Number 2 is the amount of battle state that the user needs to be aware of in
order to make the best use of the system. There are 2 options here, either
display it as part of the prompt, or force the player to remember not only 
what position they are in,  Also, the player would need to know the position 
requirements of the skills they intend to use, as well as the ending position.

That's alot of information for the player to handle in either case.
However, it should be noted that players use a relativly small number
of skills in combat, making knowing the positions far easier.



> 
> The first-come, first-serve tank system would be replaced by a two row 
> formation for each side.  Combatants can stand in either the front or 
> the rear line.  It takes an additional round to attack a target in the 
> rear line (during this round your intentions are made obvious to the 
> other fighters, which allows guards to rescue their charges before the 
> attack), unless there are no combatants in your opposition's front 
> line.  If you are in the front line, but are not being attacked by an 
> opponent, you may flank one of your opponents.  You must be in the 
> flank position to execute certain attacks, such as backstab or critical 
> strike.

Not to sure on this idea, so I'll just say that it has interesting 
possiblities, but is it worth implementing?


One thing I would like to see added is an aggro list. Essentially, this is
a list of aggressiveness towards attackers. It works like this: an event 
increases the aggressiveness towards a particular target, this is rated 
numerically. once every round, there is a chance to switch targets and it 
works like this in psuedo-code: 


1. the aggression rating for all attacks is added up
2. result = d(1,aggresion total);
3. use result to index a distributed probablity matrix.
that could work something like this(in pseudo code):

do{
   if(result <= self.attacker[i].aggresion_rating)
   {
      self.target = self.attacker[i];
      break;
   }
   result -= self.attacker[i].aggresion_rating;
   i++;
} while(i <= number_of_attackers);  
(A little confusing, but it works quite nicely. Not exactly a distributed 
probabilty matrix, but this is far more efficient by a hell of a lot. Mainly
avoids creating a huge new array and populating it through several thousand 
iterations of an expensive loop each round.)

the main problem is that in a big battle, we could get into some really huge 
numbers and overflow an int, so it might be best to use an average per round, 
or something like that. 

That's it for now.

   --Gingon



More information about the ScryMUD mailing list