Crossfire Mailing List Archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: CF: ideas for next experiments

Mark Wedel wrote:
>  Objects that return are an interesting idea..  However, there are other
> complications.
>  Suppose you throw the hammer, and some other monster steps in behind the path.
> When it returns, that monster is now in the way.  Does it hit that monster, or
> bypass it?
>  Also, what happens if the player moves after he throws it?  I guess the point I
> am trying to make here is that I can see these boomerang type objects flying all
> over the place.

    I thought of that, and I think the simple approach is the best.  Don't
make the boomerang weapons track their owner.  It just bounces back where it
came from, it's not a homing missile.  (Hmm... homing missile... arrows with
specific targets (slaying field) that use magic missile code to steer
themselves toward their enemy if one is present.  And cursed arrows that
loop around and hit you in the back.)
    Anyway, when the thrown object wrapper is created, it is given a return
strength equal to the maximum distance it will fly.  When it hits something,
that return strength is added to the distance remaining, then set to zero,
and the direction is reversed.  If the owner isn't there to catch it, it
will just fly in a straight line until it lands or hits something else.  If
it hits something on the return trip, its return strength is now zero, so it
just falls the the ground.

>  Just a note - you can not predict where the hammer will show up in the players
> inventory.  One issue when the client/server split happened is that  the order
> of the inventory (as both what the client and server think it is) will not be
> consistent (enforcing consistently would have made things more difficult, as now
> when the player picked some up, the client would have to say to insert it before
> the other object or whatever).  One reason the mark command came around is
> simply because of this - before some actions (like weapon improvement scrolls)
> would take the first weapon in the players inventory.  If the player doesn't
> know what the order of the inventory in, taking the top object would not work
> well.
>  anyways, that is some history.  The main point I was making here is that when
> the object returns, where the object will show up in the players inventory can
> not easily be determined.  In theory, you could add some flags or whatever which
> says 'put this on top', but I can think of a few reasons that is not ideal.

    Ah, but it doesn't matter where the item is listed in their inventory. 
Throwing takes the first valid object it finds, and that means the one most
recently picked up.  When the boomerang returns, even if it merges, it
becomes the object most recently picked up.  Try it with some different
objects, like throwing daggers, oranges, and a poleaxe.  If you keep picking
them up after you throw them, they stay on top of the internal list,
regardless of where the client lists them.  That's the current legacy of the
old top-of-the-inventory code.

> >
> > - per-type damage (major change)
>  Having that number of damages to deal with really seems excessive.  I am also
> not sure if it makes total sense - if you get hit by an arrow, it does some
> amount of damage.

    Right.  If it's just an arrow, the arrow does some damage.  If it's a
poisoned arrow, the arrow does some damage, then the poison does some
damage.  And if it's a flaming arrow, the fire is in addition to the
physical damage, not instead of it.  And either way, how much damage the
arrow did should be independent of the other attack vectors.

>  What you really seem to be looking at/describing is special effects damage.
> (poisoning, arrow bursting into fire, etc).  I would instead suggest that adding
> a hidden inventory to the weapon and apply/inserting the weapons inventory into
> the creature an easier and potentially more flexible way of dealing with it.
>  For example, you could have arrows of fireball, which contain a small fireball
> object.  When the arrow hits, it bursts into a fireball.  Or javelins of
> lightning (to take AD&D)

    If special effects damage and multiple independent attacktypes were
rare, I'd agree, but they're not.  After the first few levels, you don't
encounter many creatures with only one attacktype, and it doesn't take long
for most players to start hitting with four or five different attacks, which
might all be from different sources.  As it is now, the damage value of the
weapon determines the strength of all of the attacks.  Which means the fire
in a Flame Tongue sword burns hotter for stronger players, and creatures
take the same damage whether they're immune to the fire, immune to the
physical sword, or neither.  
    Then again, I could be a bit too far on the realism side of design
balance again.  As you might have noticed I tend to do that.  Let me just
clarify what I was suggesting, and if you think it's too much work for too
little gain, just say so.
    Special effects in a weapon's inventory are a good idea, and
significantly easier to implement, but I'd rather use those for special
effects and keep the common effects together, but independent of each
other.  If things like Flame Tongue and poisoned arrows have extra objects
attached to them for their poison and fire effects, that will cost
considerably more memory than a few more integers in the attack type.  I
think a specific example is in order.

What we have now:
integer damage
bitmask attacktypes

What I'm proposing:
integer physical
integer fire
integer electricity
integer frost
integer acid
integer weaponmagic
integer poison
integer godpower
integer holy effect
integer light
bitmask special
integer level

    None of the other twelve attacktypes, magic, confusion, drain, slow,
paralyze, turn undead, fear, cancellation, depletion, death, chaos, and
counterspell, do any damage.  The amount of damage being done has no effect
on the effectiveness of those attacks.  Magic can do damage, if it's alone,
but the same effect can be achieved by calling it weaponmagic damage and
setting the magic flag.  For the other special attack types, it doesn't make
any difference how much "damage" is done.  Even Death discards the amount of
damage done, it either kills the creature, or it doesn't.  Many of them use
the level of the attacker to determine how likely the special effect is, but
in some cases (like Holy Word) they compute the adjusted level of the attack
when it hits, each time if hits, for each creature it hits.  I suggest
uniformly setting the level of all attacking objects when they're created,
and using something other than a weapon's level to keep track of how
prepared it is.  "last_grace" perhaps, since "last_eat" tracks how many
times it's been enchanted so far, and "last_sp" is its speed.  That is, if
we're not simply discarding the current weapon improvement code.

    By the way, some anomalies I discovered while testing my "mental"

    chaos - Protection from, immunity to, and vulnerability to chaos don't
exist.  Attacktype chaos does nothing at all for weapons or missiles.  It
only works for spells.  I suggest making chaos a flag, like magic, that
qualifies other types of attacks.  That way protection from chaos would
protect from whatever form the chaos currently takes, in addition to your
normal vuln/prot/immunity to that attacktype.  Ex. A player who is
vulnerable to fire and takes double damage from normal or magical fire, but
has protection from chaos, only takes half damage from chaotic fire.

    cancellation, fear, drain -  Vulnerability is not implemented.  It
should be.  Vulnerability to cancellation would mean that the vulnerable
object, or its inventory if it's a player, save against cancellation at -4. 
Vulnerability to fear similarly would give creatures a -4 penalty to their
saving throw vs. fear.  Vulnerability to drain would cause you to lose
experience twice as fast, 4% per hit instead of 2%.

    turn undead - neither vulnerability nor protection are implemented. 
Suggestion: vulnerability means the turning can count as a deathstrike,
similar to Banishment.  A powerful enough priest could destroy ghosts and
skeletons while skulls and vampires would take no damage no matter what your
level.  And protection from turning should just increase the probability of
resisting it.

    counterspell - Vulnerability, protection, and immunity are all
meaningless, even for spells.  Should some types of spells be harder or
easier to dispel than others, even if the caster is the same?  I think this
one we might want to just leave alone.

    There is no "protected" status for item saving throws, nor is there a
"vulnerable".  Protection and immunity both make items immune.  If the item
is neither immune nor protected, a saving throw is rolled, and vulnerability
isn't even checked.  Protection from cancellation works, but only when it
applies to a player holding the item, so it can give them +4 on their saving

> > - seperate hitback
>  This seems reasonable, and should not be that hard to implement.  Costs some
> CPU cycles, as anytime an object with hitback is hit, its inventory needs to be
> examined for that hitback object.  But probably not a big deal.

    Since most things that have hitback wouldn't have much of an inventory,
it shouldn't cost much to search for it.  Which reminds me--  Are the new
0.96 objects going to be indexed by type or sorted by archetype or
something?  Hash codes maybe?  We need a better way to search inventories
for certain types of objects.  There are way too many repetitions of the
same basic loop that scans a player's inventory, sometimes recursively.

> > - protection from magic
>  Probably so.  Not a big change for that.

    Done.  Testing now.

>  Not being able to teleport to maps that are reset fixes that possible problem.
> I wonder if the spells would still be useful enough for there to still be much
> interest.

    Sure it would.  You can leave a portal marker in your apartment as long
as you like, since it doesn't reset.  That way you can always jump right
back to your apartment, even if it's not in Scorn.  There's also that one
room in the adventurer's guild where things can be stored.  And even if you
mark a map that will reset, the mark won't expire for several minutes.  You
just have to think ahead and only cast a Portal when you intend to use it.
    Word of Return is an even easier answer.  It works with Word of Recall,
so you can recall out of a quest to rest in town, heal, recharge, get
supplies, etc, and you have until the map resets to Return to the quest and
pick up where you left off.  Note that the same return trip can be
accomplished via Portal by setting a portal before you Recall and opening it
when you're ready to return.

            -Dave Noelle,       
            -the Villa Straylight,
Coalition Against Unsolicited Commercial Email  ==

Disclaimer: "I am the Lorax, I speak for the trees!"

Quote of the Day:
Today is the tomorrow you worried about yesterday.
[you can put yourself on the announcement list only or unsubscribe altogether
by sending an email stating your wishes to]