[CF-Devel] Paralyze

David Hurst dnh at hawthorn.csse.monash.edu.au
Wed Nov 21 19:07:57 CST 2001


Ahh =)

I never liked how it was impossible to do anything once paralyzed. Basically if you fight any really high level monsters, it is effectively game over because you cannot do anything. I remember the old trick was to quit the client, but this seems completely dodgy. Perhaps some more thought as to exactly how paralyze should work is in order here. It seems sort of logical that you can't cast spells etc when paralyzed, because once paralyzed you can no longer control muscles. Perhaps though you can still cast prayers (which have little/no encumberance)? Then perhaps then a revive, or heal paralyisis or something would be good. I remember when we added -20 resistance to paralyze on mostrai. People complained that the game became impossible.

I suspect it is similar to drain, because resistance to paralyze has become so 'common' (it isn't really common, but when you get free action its 100) you can effectively forget about it. This is true also of drain, forget a ring protection drain and try to fight something with drain, 10 levels gone in 1 second =). Perhaps this is good, but I always thought of drain as being a slow but steady sucking of life force (hp, sp, grace, food). I once proposed changing drain to have hp stealing as well but nobody thought it would be possible to balance. What are peoples thoughts on drain and paralyze, are they okay or do they need to be revised?

dnh

On Wed, Nov 21, 2001 at 03:10:34PM +0100, Michael Toennies wrote:
>
     
      Hi
     
     >
     
     
     >
     
      I had changed the paralyzed effect on players some time ago.
     
     >
     
     
     >
     
      Most effects work like this:
     
     >
     
     
     >
     
      In the game, effect like blind or disease are objects insert in the
     
     >
     
      inventory
     
     >
     
      of the player or monster. This invisible object are applied to the inventory
     
     >
     
      and
     
     >
     
      invoke their effect. Non permanent effects has a ticker inside. Runs this
     
     >
     
      ticker out,
     
     >
     
      the object get destroyed and the creatures is free from the effect. Blind
     
     >
     
      works so.
     
     >
     
     
     >
     
      Paralyze wasn't included like this.
     
     >
     
      It had worked like this:
     
     >
     
     
     >
     
      I noticed, thats paralyze has no effect flag. Means, if you get paralyzed
     
     >
     
      through the spell
     
     >
     
      or effect, you got not marked as paralyzed. As i look in the code, i see
     
     >
     
      that the effect was
     
     >
     
      triggered only by setting the speed value of the object. Means the "you has
     
     >
     
      no speed left"
     
     >
     
      counter is set up by a high value. Thats very bad, because every speed
     
     >
     
      effect like encumberence
     
     >
     
      or land tile effects use this value too.
     
     >
     
     
     >
     
      That makes it impossible to remove paralyze - thats the reason why there is
     
     >
     
      no "remove paralyze"
     
     >
     
      in the game - the server never knows why the speed is decreased . It can be
     
     >
     
      paralyze but also a
     
     >
     
      different effect.
     
     >
     
     
     >
     
      Ok, in a first step, i added a FLAG_PARALYZE. Now, every time you stand
     
     >
     
      under the effect, you has
     
     >
     
      so long the FLAG_PARALYZE until you can move again.
     
     >
     
     
     >
     
      That have a positive effect - the server knows now that you are paralyzed -
     
     >
     
      it can be shown and we
     
     >
     
      can include a remove paralyze spell.
     
     >
     
     
     >
     
      Bad effect is, that i don't change it so much, that we use a paralyze_force
     
     >
     
      object. Because the
     
     >
     
      paralyze effect still use the speed value adding, you can't heal paralyze by
     
     >
     
      yourself - the server
     
     >
     
      never allows your object any action until your speed is set - even animation
     
     >
     
      and internal stuffs of
     
     >
     
      your player object are stopped! So be careful to insert new features using
     
     >
     
      values in a object.
     
     >
     
     
     >
     
      Also, i find some strange stuff in the paralyze function.
     
     >
     
      Anyone knows why and how this is inside?
     
     >
     
     
     >
     
      Michael
     
     >
     
     
     >
     
     
     >
     
      void paralyze_player(object *op, object *hitter, int dam)
     
     >
     
      {
     
     >
     
          float effect,max;
     
     >
     
          /* object *tmp; */
     
     >
     
     
     >
     
          /* This is strange stuff... someone knows for what this is
     
     >
     
           * written? Well, i think this can and should be removed
     
     >
     
          */
     
     >
     
     
     >
     
          /*
     
     >
     
          if((tmp=present(PARAIMAGE,op->map,op->x,op->y))==NULL) {
     
     >
     
      	tmp=clone_arch(PARAIMAGE);
     
     >
     
      	tmp->x=op->x,tmp->y=op->y;
     
     >
     
      	insert_ob_in_map(tmp,op->map,tmp,INS_NO_MERGE | INS_NO_WALK_ON);
     
     >
     
          }
     
     >
     
          */
     
     >
     
     
     >
     
          /* Do this as a float - otherwise, rounding might very well reduce this
     
     >
     
      to 0 */
     
     >
     
          effect = (float)dam * 3.0 * (100.0 - op->resist[ATNR_PARALYZE]) / 100;
     
     >
     
     
     >
     
          if (effect==0) return;
     
     >
     
     
     >
     
          SET_FLAG(op,FLAG_PARALYZED); /* we mark this object as paralyzed */
     
     >
     
          animate_object(op); /* set the right animation for paralyze when needed
     
     >
     
      */
     
     >
     
     
     >
     
          op->speed_left-=FABS(op->speed)*effect;
     
     >
     
          /* tmp->stats.food+=(signed short) effect/op->speed; */
     
     >
     
     
     >
     
          /* max number of ticks to be affected for. */
     
     >
     
          max = (100 - op->resist[ATNR_PARALYZE])/ 2;
     
     >
     
          if (op->speed_left< -(FABS(op->speed)*max))
     
     >
     
              op->speed_left  = (float) -(FABS(op->speed)*max);
     
     >
     
     
     >
     
      /*      tmp->stats.food = (signed short) (max/FABS(op->speed)); */
     
     >
     
      }
     
     >
     
     
     >
     
     
     >
     
      _______________________________________________
     
     >
     
      crossfire-devel mailing list
     
     >
     
     
      crossfire-devel at lists.real-time.com
      
      
     >
     
     
      https://mailman.real-time.com/mailman/listinfo/crossfire-devel
      
      
     
    


More information about the crossfire mailing list