Mercurial > hg > early-roguelike
diff xrogue/effects.c @ 238:e1cd27c5464f
arogue7, xrogue: improve the handling of the arguments to fuses.
fuse() now expects a pointer as the argument to a fuse function. If
this is one of the functions that takes int, fuse() follows the pointer
and stores that value in the f_list slot, in the integer field of the
argument union. When the fuse goes off, do_fuses() recognizes the
function and passes it the integer field instead of the pointer.
This has the disadvantage of hard-coding the functions that require int
in daemon.c, but since the int is copied into f_list, it no longer has
to be in static or global memory, which simplifies several files.
author | John "Elwin" Edwards |
---|---|
date | Fri, 11 Mar 2016 17:40:00 -0500 |
parents | 7c1cb43f346e |
children |
line wrap: on
line diff
--- a/xrogue/effects.c Tue Mar 08 20:47:57 2016 -0500 +++ b/xrogue/effects.c Fri Mar 11 17:40:00 2016 -0500 @@ -323,8 +323,10 @@ msg("You cringe at %s's chilling touch.", prname(attname, FALSE)); chg_str(-1); - if (lost_str++ == 0) - fuse(res_strength, NULL, CHILLTIME, AFTER); + if (lost_str++ == 0) { + int temp_arg = 0; + fuse(res_strength, &temp_arg, CHILLTIME, AFTER); + } else lengthen(res_strength, CHILLTIME); } } @@ -548,11 +550,12 @@ else { int odor_str = -(rnd(6)+1); + int temp_arg2 = 0; msg("You are overcome by a foul odor!"); if (lost_str == 0) { chg_str(odor_str); - fuse(res_strength, NULL, SMELLTIME, AFTER); + fuse(res_strength, &temp_arg2, SMELLTIME, AFTER); lost_str -= odor_str; } else lengthen(res_strength, SMELLTIME);