void onspawn_balrog(Object *o) { // in the Boulder Chamber boss fight, Balrog is supposed to go BEHIND Curly. if (game.curmap == STAGE_BOULDER_CHAMBER) { Object *curly = Objects::FindByType(OBJ_CURLY); if (curly) { o->PushBehind(curly); // nasty hack to adjust his starting position in the post-fight cutscene. // I'm not sure why this is otherwise wrong. if (GetCurrentScript() == 600) { o->x -= (6 << CSF); } } } }
static void RunSelector(stSelector *selector) { int nrows; int currow, curcol; char toggle = 0; if (inv.lockinput) { if (GetCurrentScript()==-1) inv.lockinput = 0; else return; } if (selector->nitems) { nrows = (selector->nitems - 1) / selector->rowlen; currow = (selector->cursel / selector->rowlen); curcol = (selector->cursel % selector->rowlen); } else { nrows = currow = curcol = 0; } if (justpushed(LEFTKEY)) { sound(selector->sound); // at beginning of row? if (curcol == 0) { // wrap to end of row if (currow < nrows) selector->cursel += (selector->rowlen - 1); else if (selector->nitems > 0) selector->cursel = selector->nitems - 1; } else selector->cursel--; } if (justpushed(RIGHTKEY)) { sound(selector->sound); // at end of row? if (curcol==selector->rowlen-1 || selector->cursel+1 >= selector->nitems) { // wrap to beginning of row selector->cursel = (currow * selector->rowlen); } else selector->cursel++; } if (justpushed(DOWNKEY)) { // on last row? if (currow >= nrows) toggle = 1; else { selector->cursel += selector->rowlen; // don't go past last item if (selector->cursel >= selector->nitems) selector->cursel = (selector->nitems - 1); sound(selector->sound); } } if (justpushed(UPKEY)) { // on top row? if (currow == 0) toggle = 1; else { selector->cursel -= selector->rowlen; sound(selector->sound); } } // switch to other selector if (toggle) { if (selector == &inv.itemsel) { selector = &inv.armssel; } else { selector = &inv.itemsel; } inv.curselector = selector; sound(selector->sound); selector->lastsel = -9999; } // bring up scripts if (selector->cursel != selector->lastsel) { selector->lastsel = selector->cursel; StartScript(selector->items[selector->cursel] + selector->scriptbase, SP_ARMSITEM); } if (selector == &inv.armssel) // selecting a weapon { if (buttonjustpushed()) { // select the new weapon weapon_slide(LEFT, selector->items[selector->cursel]); ExitInventory(); } } else // selecting an item { if (justpushed(JUMPKEY)) { // bring up "more info" or "equip" script for this item StartScript(selector->items[selector->cursel] + selector->scriptbase + 1000, SP_ARMSITEM); inv.lockinput = 1; } if (justpushed(FIREKEY)) ExitInventory(); } if (justpushed(INVENTORYKEY)) ExitInventory(); }