diff --git a/rogue4/potions.c b/rogue4/potions.c index ed601b0..158dfb6 100644 --- a/rogue4/potions.c +++ b/rogue4/potions.c @@ -77,7 +77,7 @@ quaff(void) msg("you feel stronger, now. What bulging muscles!"); when P_MFIND: player.t_flags |= SEEMONST; - fuse(turn_see, TRUE, HUHDURATION, AFTER); + fuse(turn_see_off, TRUE, HUHDURATION, AFTER); if (mlist == NULL) msg("you have a strange feeling for a moment"); else @@ -256,3 +256,12 @@ turn_see(bool turn_off) player.t_flags |= SEEMONST; return add_new; } + +/* + * A wrapper for turn_see(TRUE), to be used as a fuse. + */ +void +turn_see_off(void) +{ + turn_see(TRUE); +} diff --git a/rogue4/rogue.h b/rogue4/rogue.h index 165639b..8fc4e6e 100644 --- a/rogue4/rogue.h +++ b/rogue4/rogue.h @@ -614,6 +614,7 @@ int teleport(void); void total_winner(void); char *tr_name(char type); bool turn_see(bool turn_off); +void turn_see_off(void); void unconfuse(void); char *unctrol(char ch); void unlock_sc(void); diff --git a/rogue4/state.c b/rogue4/state.c index 7d7f254..07f10fd 100644 --- a/rogue4/state.c +++ b/rogue4/state.c @@ -967,6 +967,8 @@ rs_write_daemons(FILE *savef, struct delayed_action *d_list, int count) func = 8; else if (d_list[i].d_func == sight) func = 9; + else if (d_list[i].d_func == turn_see_off) + func = 10; else func = 0; @@ -1037,9 +1039,18 @@ rs_read_daemons(int inf, struct delayed_action *d_list, int count) break; case 9: d_list[i].d_func = sight; break; + case 10: d_list[i].d_func = turn_see_off; + break; default:d_list[i].d_func = NULL; break; } + + if (d_list[i].d_func == NULL) + { + d_list[i].d_type = 0; + d_list[i].d_arg = 0; + d_list[i].d_time = 0; + } } } } diff --git a/rogue5/potions.c b/rogue5/potions.c index 2368005..d20efdd 100644 --- a/rogue5/potions.c +++ b/rogue5/potions.c @@ -111,7 +111,7 @@ quaff(void) msg("you feel stronger, now. What bulging muscles!"); when P_MFIND: player.t_flags |= SEEMONST; - fuse((void(*)())turn_see, TRUE, HUHDURATION, AFTER); + fuse(turn_see_off, TRUE, HUHDURATION, AFTER); if (!turn_see(FALSE)) msg("you have a %s feeling for a moment, then it passes", choose_str("normal", "strange")); @@ -305,6 +305,15 @@ turn_see(int turn_off) return add_new; } +/* + * A wrapper for turn_see(TRUE), intended to be a fuse. + */ +void +turn_see_off(void) +{ + turn_see(TRUE); +} + /* * seen_stairs: * Return TRUE if the player has seen the stairs diff --git a/rogue5/rogue.h b/rogue5/rogue.h index 503a8ae..877e9af 100644 --- a/rogue5/rogue.h +++ b/rogue5/rogue.h @@ -758,6 +758,7 @@ int trip_ch(int y, int x, int ch); void tstp(int ignored); int turn_ok(int y, int x); int turn_see(int turn_off); +void turn_see_off(void); void turnref(void); const char *type_name(int type); void u_level(void); diff --git a/rogue5/state.c b/rogue5/state.c index ec9df88..0895f61 100644 --- a/rogue5/state.c +++ b/rogue5/state.c @@ -598,6 +598,8 @@ rs_write_daemons(FILE *savef, struct delayed_action *dlist, int cnt) func = 8; else if (dlist[i].d_func == sight) func = 9; + else if (dlist[i].d_func == turn_see_off) + func = 10; else if (dlist[i].d_func == NULL) func = 0; else @@ -657,6 +659,8 @@ rs_read_daemons(FILE *savef, struct delayed_action *dlist, int cnt) break; case 9: dlist[i].d_func = sight; break; + case 10: dlist[i].d_func = turn_see_off; + break; default:dlist[i].d_func = NULL; break; } diff --git a/srogue/state.c b/srogue/state.c index fd692ae..cf3caeb 100644 --- a/srogue/state.c +++ b/srogue/state.c @@ -1098,6 +1098,13 @@ rs_read_daemons(int inf, struct delayed_action *d_list, int count) default: d_list[i].d_func = NULL; break; } + + if (d_list[i].d_func == NULL) + { + d_list[i].d_type = 0; + d_list[i].d_arg = 0; + d_list[i].d_time = 0; + } } } }