void break_opener_floor (struct pos *p) { struct opener_floor *o = opener_floor_at_pos (p); if (! o) return; open_door (o->p.l, o->event, anim_cycle, true); register_con_undo (&undo, p, MIGNORE, MIGNORE, o->event + EVENTS, MIGNORE, NULL, false, "LOOSE FLOOR BREAKING"); o->broken = true; }
void break_closer_floor (struct pos *p) { struct closer_floor *c = closer_floor_at_pos (p); if (! c) return; c->broken = true; c->pressed = true; register_con_undo (&undo, p, MIGNORE, MIGNORE, -abs (con (p)->ext.event) - 1, false, false, false, false, CHPOS_BREAK_CLOSER_FLOOR, "LOOSE FLOOR BREAKING"); }
static void physics_out (struct anim *k) { /* depressible floors */ keep_depressible_floor (k); /* sound */ if (k->i == 7 && ! k->reverse) play_sample (drink_sample, NULL, k->id); /* consume bottle */ if (k->i == 0) { k->item = con (&k->item_pos)->ext.item; register_con_undo (&undo, &k->item_pos, MIGNORE, MIGNORE, NO_ITEM, false, false, false, false, CHPOS_NONE, "CONSUME POTION"); } }