static void PlayerSpecialCommands(TActor *actor, const int cmd) { if ((cmd & CMD_BUTTON2) && CMD_HAS_DIRECTION(cmd)) { if (ConfigGetEnum(&gConfig, "Game.SwitchMoveStyle") == SWITCHMOVE_SLIDE) { SlideActor(actor, cmd); } } else if ( (actor->lastCmd & CMD_BUTTON2) && !(cmd & CMD_BUTTON2) && !actor->specialCmdDir && !actor->CanPickupSpecial && !(ConfigGetEnum(&gConfig, "Game.SwitchMoveStyle") == SWITCHMOVE_SLIDE && CMD_HAS_DIRECTION(cmd)) && ActorCanSwitchGun(actor)) { GameEvent e = GameEventNew(GAME_EVENT_ACTOR_SWITCH_GUN); e.u.ActorSwitchGun.UID = actor->uid; e.u.ActorSwitchGun.GunIdx = (actor->gunIndex + 1) % actor->guns.size; GameEventsEnqueue(&gGameEvents, e); } }
int PlayerSpecialCommands(TActor * actor, int cmd, struct PlayerData *data) { int i; if (!actor) return NO; if (((cmd | actor->lastCmd) & CMD_BUTTON2) == 0) actor->flags &= ~FLAGS_SPECIAL_USED; if ((cmd & CMD_BUTTON2) != 0 && (cmd & (CMD_LEFT | CMD_RIGHT | CMD_UP | CMD_DOWN)) != 0 && actor->dx == 0 && actor->dy == 0) { SlideActor(actor, cmd); actor->flags |= FLAGS_SPECIAL_USED; } else if ((actor->lastCmd & CMD_BUTTON2) != 0 && (cmd & CMD_BUTTON2) == 0 && (actor->flags & FLAGS_SPECIAL_USED) == 0 && (cmd & (CMD_LEFT | CMD_RIGHT | CMD_UP | CMD_DOWN)) == 0 && // actor->dx == 0 && actor->dy == 0 && data->weaponCount > 1) { for (i = 0; i < data->weaponCount; i++) if (actor->gun == data->weapons[i]) break; i++; if (i >= data->weaponCount) i = 0; actor->gun = data->weapons[i]; PlaySoundAt(actor->tileItem.x, actor->tileItem.y, SND_SWITCH); } else return NO; actor->lastCmd = cmd; return YES; }