diff --git a/scripts_src/newreno/nceldrid.ssl b/scripts_src/newreno/nceldrid.ssl index 1b77451ace..3e5ac2b842 100644 --- a/scripts_src/newreno/nceldrid.ssl +++ b/scripts_src/newreno/nceldrid.ssl @@ -106,6 +106,7 @@ procedure Node030; #define dude_touched_door_bit bit_15 #define back_room_bit bit_16 #define closed_warning_bit bit_17 +#define pistol_given_bit bit_24 #define module lvar_bit(LVAR_Flags, module_bit) #define set_module set_lvar_bit_on(LVAR_Flags, module_bit) @@ -131,6 +132,9 @@ procedure Node030; #define closed_warning lvar_bit(LVAR_Flags, closed_warning_bit) #define set_closed_warning set_lvar_bit_on(LVAR_Flags, closed_warning_bit) +#define pistol_given lvar_bit(LVAR_Flags, pistol_given_bit) +#define set_pistol_given set_lvar_bit_on(LVAR_Flags, pistol_given_bit) + #define give_eldridge_box(x) if (x != current_box) then begin \ if (current_box != 0) then begin \ move_obj_inven_to_obj(self_obj, current_box); \ @@ -320,6 +324,17 @@ procedure pickup_p_proc begin end end +procedure ensure_pistol begin + // workaround for overly-aggressive wipe_inventory: restore pistol, but only once (potentially grants a second one) + if (not pistol_given) then begin + if (obj_is_carrying_obj_pid(new_reno_eldridge_box_2, PID_223_PISTOL) == 0) then begin + ndebug("restoring deleted .223 Pistol!"); + give_pid_qty(new_reno_eldridge_box_2, PID_223_PISTOL, 1) + end + set_pistol_given; + end +end + procedure talk_p_proc begin //added by killap if (Fallout2_enclave_destroyed) then @@ -330,6 +345,7 @@ procedure talk_p_proc begin gdialog_set_barter_mod(-10); //added by killap + call ensure_pistol; if (eldridge_bed_time) then begin call Node030; end else begin @@ -358,6 +374,8 @@ end procedure destroy_p_proc begin new_reno_eldridge_obj := 0; move_obj_inven_to_obj(new_reno_eldridge_box, self_obj); + + call ensure_pistol; move_obj_inven_to_obj(new_reno_eldridge_box_2, self_obj); give_voice_chip(self_obj) set_eldridge_dead; diff --git a/scripts_src/newreno/nieldbx2.ssl b/scripts_src/newreno/nieldbx2.ssl index dfa33b2ec1..bb99132686 100644 --- a/scripts_src/newreno/nieldbx2.ssl +++ b/scripts_src/newreno/nieldbx2.ssl @@ -47,6 +47,12 @@ procedure map_enter_p_proc begin if (is_loading_game == false) then begin restock_fix if (local_var(LVAR_Restock_Time) < game_time) then begin + variable pistol_obj := obj_carrying_pid_obj(self_obj, PID_223_PISTOL); + if (pistol_obj) then begin + ndebug("preserving .223 Pistol from inventory wipe..."); + rm_obj_from_inven(self_obj, pistol_obj); + end + variable tmp_box := move_critical_items(); if (map_first_run) then begin give_pid_qty(self_obj, PID_223_PISTOL, 1) @@ -62,6 +68,8 @@ procedure map_enter_p_proc begin check_restock_item(PID_SUPER_SLEDGE, 1, 1, 25) check_restock_item(PID_BOZAR, 1, 1, 25) call restore_critical_items(tmp_box); + if (pistol_obj) then + add_obj_to_inven(self_obj, pistol_obj); set_local_var(LVAR_Restock_Time, (random(2,4) * ONE_GAME_DAY) + game_time); end end