- if(silent_yes())
- {
- // FIXME: setting wd1 is a workaround for broken logic
- command->wd1 = token_to_packed("Y");
- }
- else
- {
- // FIXME: setting wd1 is a workaround for broken logic
- command->wd1 = token_to_packed("N");
- return GO_CHECKFOO;
- }
- pspeak(DRAGON, look, 3);
- game.prop[DRAGON] = 1;
- game.prop[RUG] = 0;
- int k = (objects[DRAGON].plac + objects[DRAGON].fixd) / 2;
- move(DRAGON + NOBJECTS, -1);
- move(RUG + NOBJECTS, 0);
- move(DRAGON, k);
- move(RUG, k);
- drop(BLOOD, k);
- for (obj = 1; obj <= NOBJECTS; obj++) {
- if (game.place[obj] == objects[DRAGON].plac || game.place[obj] == objects[DRAGON].fixd)
- move(obj, k);
- }
- game.loc = k;
+ if (!silent_yes_or_no()) {
+ speak(arbitrary_messages[NASTY_DRAGON]);
+ return GO_MOVE;
+ }
+ state_change(DRAGON, DRAGON_DEAD);
+ game.objects[RUG].prop = RUG_FLOOR;
+ /* Hardcoding LOC_SECRET5 as the dragon's death location is ugly.
+ * The way it was computed before was worse; it depended on the
+ * two dragon locations being LOC_SECRET4 and LOC_SECRET6 and
+ * LOC_SECRET5 being right between them.
+ */
+ move(DRAGON + NOBJECTS, IS_FIXED);
+ move(RUG + NOBJECTS, IS_FREE);
+ move(DRAGON, LOC_SECRET5);
+ move(RUG, LOC_SECRET5);
+ drop(BLOOD, LOC_SECRET5);
+ for (obj_t i = 1; i <= NOBJECTS; i++) {
+ if (game.objects[i].place == objects[DRAGON].plac ||
+ game.objects[i].place == objects[DRAGON].fixd)
+ move(i, LOC_SECRET5);
+ }
+ game.loc = LOC_SECRET5;