void handle_keyword(int tag) { bool cheated= true; switch (tag) { case _tag_health: if (local_player->suit_energy<PLAYER_MAXIMUM_SUIT_ENERGY) { local_player->suit_energy= PLAYER_MAXIMUM_SUIT_ENERGY; } else { if (local_player->suit_energy<2*PLAYER_MAXIMUM_SUIT_ENERGY) { local_player->suit_energy= 2*PLAYER_MAXIMUM_SUIT_ENERGY; } else { local_player->suit_energy= MAX(local_player->suit_energy, 3*PLAYER_MAXIMUM_SUIT_ENERGY); } } mark_shield_display_as_dirty(); break; case _tag_oxygen: local_player->suit_oxygen= MAX(local_player->suit_oxygen,PLAYER_MAXIMUM_SUIT_OXYGEN); mark_oxygen_display_as_dirty(); break; case _tag_map: dynamic_world->game_information.game_options^= (_overhead_map_shows_items|_overhead_map_shows_monsters|_overhead_map_shows_projectiles); break; case _tag_invincible: process_player_powerup(local_player_index, _i_invincibility_powerup); break; case _tag_invisible: process_player_powerup(local_player_index, _i_invisibility_powerup); break; case _tag_infravision: process_player_powerup(local_player_index, _i_infravision_powerup); break; case _tag_extravision: process_player_powerup(local_player_index, _i_extravision_powerup); break; case _tag_jump: accelerate_monster(local_player->monster_index, WORLD_ONE/10, 0, 0); break; // LP: changed these cheats and added new ones: case _tag_pistol: AddOneItemToPlayer(_i_magnum,2); AddItemsToPlayer(_i_magnum_magazine,10); break; case _tag_rifle: AddItemsToPlayer(_i_assault_rifle,10); AddItemsToPlayer(_i_assault_rifle_magazine,10); AddItemsToPlayer(_i_assault_grenade_magazine,10); break; case _tag_missile: AddItemsToPlayer(_i_missile_launcher,1); AddItemsToPlayer(_i_missile_launcher_magazine,10); break; case _tag_toaster: AddItemsToPlayer(_i_flamethrower,1); AddItemsToPlayer(_i_flamethrower_canister,10); break; case _tag_fusion: AddItemsToPlayer(_i_plasma_pistol,1); AddItemsToPlayer(_i_plasma_magazine,10); break; case _tag_pzbxay: AddItemsToPlayer(_i_alien_shotgun,1); break; case _tag_shotgun: AddOneItemToPlayer(_i_shotgun,2); AddItemsToPlayer(_i_shotgun_magazine,10); break; case _tag_smg: AddOneItemToPlayer(_i_smg,2); AddItemsToPlayer(_i_smg_ammo,10); break; case _tag_save: save_game(); break; // LP guess as to what might be good: ammo-only version of "aslag" case _tag_ammo: { short items[]= { _i_assault_rifle, _i_magnum, _i_missile_launcher, _i_flamethrower, _i_plasma_pistol, _i_alien_shotgun, _i_shotgun, _i_assault_rifle_magazine, _i_assault_grenade_magazine, _i_magnum_magazine, _i_missile_launcher_magazine, _i_flamethrower_canister, _i_plasma_magazine, _i_shotgun_magazine, _i_shotgun, _i_smg, _i_smg_ammo}; for(unsigned index= 0; index<sizeof(items)/sizeof(short); ++index) { switch(get_item_kind(items[index])) { case _ammunition: AddItemsToPlayer(items[index],10); break; } } } break; case _tag_aslag: { // LP change: added the SMG and its ammo short items[]= { _i_assault_rifle, _i_magnum, _i_missile_launcher, _i_flamethrower, _i_plasma_pistol, _i_alien_shotgun, _i_shotgun, _i_assault_rifle_magazine, _i_assault_grenade_magazine, _i_magnum_magazine, _i_missile_launcher_magazine, _i_flamethrower_canister, _i_plasma_magazine, _i_shotgun_magazine, _i_shotgun, _i_smg, _i_smg_ammo}; for(unsigned index= 0; index<sizeof(items)/sizeof(short); ++index) { switch(get_item_kind(items[index])) { case _weapon: if(items[index]==_i_shotgun || items[index]==_i_magnum) { AddOneItemToPlayer(items[index],2); } else { AddItemsToPlayer(items[index],1); } break; case _ammunition: AddItemsToPlayer(items[index],10); break; case _powerup: case _weapon_powerup: break; default: break; } process_new_item_for_reloading(local_player_index, items[index]); } } local_player->suit_energy = MAX(local_player->suit_energy, 3*PLAYER_MAXIMUM_SUIT_ENERGY); update_interface(NONE); break; default: cheated= false; break; } // / can't use computer terminals or save in the final version if we've cheated // if (cheated) SET_PLAYER_HAS_CHEATED(local_player); #if 0 if (cheated) { long final_ticks; SetSoundVol(7); play_local_sound(20110); Delay(45, &final_ticks); play_local_sound(20110); Delay(45, &final_ticks); play_local_sound(20110); } #endif return; }
void update_control_panels( void) { short player_index; struct player_data *player; for (player_index= 0, player= players; player_index<dynamic_world->player_count; ++player_index, ++player) { short side_index; if ((side_index= player->control_panel_side_index)!=NONE) { struct side_data *side= get_side_data(player->control_panel_side_index); struct control_panel_definition *definition= get_control_panel_definition(side->control_panel_type); boolean still_in_use= FALSE; if (player->variables.direction == player->variables.last_direction && player->variables.last_position.x == player->variables.position.x && player->variables.last_position.y == player->variables.position.y && player->variables.last_position.z == player->variables.position.z) { switch (definition->panel_class) { case _panel_is_oxygen_refuel: if (!(dynamic_world->tick_count&OXYGEN_RECHARGE_FREQUENCY)) { if (player->suit_oxygen<PLAYER_MAXIMUM_SUIT_OXYGEN) { player->suit_oxygen+= TICKS_PER_SECOND; mark_oxygen_display_as_dirty(); still_in_use= TRUE; } } break; case _panel_is_shield_refuel: case _panel_is_double_shield_refuel: case _panel_is_triple_shield_refuel: if (!(dynamic_world->tick_count&ENERGY_RECHARGE_FREQUENCY)) { short maximum, rate; switch (definition->panel_class) { case _panel_is_shield_refuel: maximum= PLAYER_MAXIMUM_SUIT_ENERGY, rate= 1; break; case _panel_is_double_shield_refuel: maximum= 2*PLAYER_MAXIMUM_SUIT_ENERGY, rate= 2; break; case _panel_is_triple_shield_refuel: maximum= 3*PLAYER_MAXIMUM_SUIT_ENERGY, rate= 3; break; default: halt(); } if (player->suit_energy<maximum) { player->suit_energy= CEILING(player->suit_energy+rate, maximum); mark_shield_display_as_dirty(); still_in_use= TRUE; } } break; default: halt(); } } if (still_in_use) { set_control_panel_texture(side); play_control_panel_sound(side_index, _activating_sound); } else { change_panel_state(player_index, side_index); stop_sound(NONE, definition->sounds[_activating_sound]); } } } return; }