Fallout Wiki
Advertisement
Fallout Wiki
Details
Type Source file
SCRIPTS.LST comment Vic Guard in the Den
MSG file N/A
Transcript

/*
        Copyright 1998-2003 Interplay Entertainment Corp. All rights reserved.
*/
/*
        Name:
        Location: Den
        Description:
        Log:
           Created: August 22, 1998
           Updated:
*/
/* Include Files */
#include "..\headers\define.h"
#define NAME SCRIPT_DCVICGRD
#define TOWN_REPUTATION GVAR_TOWN_REP_THE_DEN
#include "..\headers\command.h"
#include "..\headers\ModReact.h"
#include "..\headers\Den.h"
/* Standard Script Procedures */
procedure start;
procedure critter_p_proc;
procedure pickup_p_proc;
procedure talk_p_proc;
procedure destroy_p_proc;
procedure look_at_p_proc;
procedure description_p_proc;
procedure use_skill_on_p_proc;
procedure damage_p_proc;
procedure map_enter_p_proc;
procedure map_exit_p_proc;
procedure timed_event_p_proc;
/* Script Specific Procedure Calls */
procedure Node998; // This Node is Always Combat
procedure Node999; // This Node is Always Ending
procedure Node001;
procedure Node002;
procedure Node003;
procedure Node004;
procedure Node005;
procedure Node006;
procedure Node007;
procedure Node008;
procedure Node009;
procedure Node010;
procedure Node011;
procedure Node012;
procedure Node013;
procedure Node014;
procedure Node015;
procedure Node016;
procedure Node017;
procedure Node018;
procedure Node019;
procedure Node020;
procedure Node021;
procedure Node022;
procedure Node023;
procedure Node024;
procedure Node025;
procedure Node026;
/* Local Variables which are saved. All Local Variables need to be
   prepended by LVAR_ */
#define LVAR_Flags (4)
#define LVAR_Unlock_Attempts (5)
#define LVAR_Node_19 (6)
#define LVAR_Home_Tile (7)
#define LVAR_Home_Rotation (8)
#define door_warned_bit bit_10
#define node_4_bit bit_11
#define node_5_bit bit_12
#define node_18_bit bit_13
#define node_20_bit bit_14
#define node_25_bit bit_15
#define door_warned lvar_bit(LVAR_Flags, door_warned_bit)
#define set_door_warned set_lvar_bit_on(LVAR_Flags, door_warned_bit)
#define node_4 lvar_bit(LVAR_Flags, node_4_bit)
#define set_node_4 set_lvar_bit_on(LVAR_Flags, node_4_bit)
#define node_5 lvar_bit(LVAR_Flags, node_5_bit)
#define set_node_5 set_lvar_bit_on(LVAR_Flags, node_5_bit)
#define node_18 lvar_bit(LVAR_Flags, node_18_bit)
#define set_node_18 set_lvar_bit_on(LVAR_Flags, node_18_bit)
#define node_20 lvar_bit(LVAR_Flags, node_20_bit)
#define set_node_20 set_lvar_bit_on(LVAR_Flags, node_20_bit)
#define node_25 lvar_bit(LVAR_Flags, node_25_bit)
#define set_node_25 set_lvar_bit_on(LVAR_Flags, node_25_bit)
#define open_vic_door door_was_locked := 0; \
                                          if (vic_door_obj != 0) then begin \
                                             if (obj_is_open(vic_door_obj) == false) then begin \
                                                if (obj_is_locked(vic_door_obj)) then begin \
                                                   door_was_locked := true; \
                                                   obj_unlock(vic_door_obj); \
                                                end \
                                                obj_open(vic_door_obj); \
                                                flush_add_timer_event(self_obj, 1, timed_event_special); \
                                             end \
                                          end
/* Imported variables from the Map scripts. These should only be
   pointers and variables that need not be saved. If a variable
   Needs to be saved, make it a map variable (MVAR_) */
/* Local variables which do not need to be saved between map changes. */
import variable vic_door_guard_obj;
import variable vic_door_obj;
variable door_was_locked;
procedure start begin
   vic_door_guard_obj := self_obj;
end
procedure timed_event_p_proc begin
   if (fixed_param == timed_event_float) then begin
   end else if (fixed_param == timed_event_door_tamper) then begin
      call Node001;
   end else if (fixed_param == timed_event_door_lockpick) then begin
      call Node002;
   end else if (fixed_param == timed_event_special) then begin
      call Node003;
   end
end
procedure map_enter_p_proc begin
   vic_door_guard_obj := self_obj;
   if (is_loading_game == false) then begin
      if (map_first_run) then begin
         critter_add_trait(self_obj,TRAIT_OBJECT,OBJECT_TEAM_NUM,TEAM_DEN_SLAVER);
         critter_add_trait(self_obj,TRAIT_OBJECT,OBJECT_AI_PACKET,AI_SLAVER);
         set_local_var(LVAR_Home_Tile, self_tile);
         set_local_var(LVAR_Home_Rotation, self_cur_rot);
      end
      if (self_tile != local_var(LVAR_Home_Tile)) then begin
         critter_attempt_placement(self_obj, local_var(LVAR_Home_Tile), self_elevation);
      end
      if (self_cur_rot != local_var(LVAR_Home_Rotation)) then begin
         animate_rotation(local_var(LVAR_Home_Rotation));
      end
   end
end
procedure map_exit_p_proc begin
end
procedure critter_p_proc begin
   if (self_can_see_dude) then begin
      if ((hostile) or (hostile_slavers)) then begin
         self_attack_dude;
      end
   end else if (self_tile != local_var(LVAR_Home_Tile)) then begin
      animate_move_to_tile(local_var(LVAR_Home_Tile));
   end else if (self_cur_rot != local_var(LVAR_Home_Rotation)) then begin
      animate_rotation(local_var(LVAR_Home_Rotation));
   end
end
procedure damage_p_proc begin
   if (source_obj == dude_obj) then begin
      set_personal_enemy;
      set_hostile_slavers;
   end
end
procedure pickup_p_proc begin
   if (source_obj == dude_obj) then begin
      call Node998;
   end
end
procedure talk_p_proc begin
   if ((hostile) or (hostile_slavers)) then begin
      call Node021;
   end else if (vic_free) then begin
      call Node026;
   end else begin
      start_dialog_at_node(Node004);
   end
   set_herebefore;
end
procedure destroy_p_proc begin
   vic_door_guard_obj := 0;
   inc_evil_critter
end
procedure look_at_p_proc begin
   script_overrides;
   display_mstr(100);
end
procedure description_p_proc begin
   script_overrides;
   display_mstr(150);
   set_examined;
end
procedure use_skill_on_p_proc begin
end
procedure Node998 begin
   set_hostile;
   set_hostile_slavers;
end
procedure Node999 begin
end
procedure Node990 begin
   if ((has_rep_slaver) or (see_vic(state_see_vic_okay))) then begin
      call Node009;
   end else if (radio_fixed) then begin
      call Node008;
   end else if (see_vic(state_see_vic_never)) then begin
      call Node019;
   end else begin
      call Node018;
   end
end
procedure Node989 begin
   if ((is_skill_tagged(SKILL_REPAIR)) or (is_success(roll_vs_skill(dude_obj,SKILL_CONVERSANT,-10)))) then begin
      set_see_vic(state_see_vic_okay);
      call Node006;
   end else begin
      call Node025;
   end
end
procedure Node988 begin
   if (is_success(roll_vs_skill(dude_obj,SKILL_BARTER,-20))) then begin
      call Node023;
   end else begin
      call Node025;
   end
end
procedure Node987 begin
   set_see_vic(state_see_vic_never);
   call Node024;
end
procedure Node001 begin
   if (door_warned) then begin
      floater(201);
      call Node998;
   end else begin
      floater(200);
      set_door_warned;
   end
end
procedure Node002 begin
   floater(local_var(LVAR_Unlock_Attempts));
   if (local_var(LVAR_Unlock_Attempts) < 2) then inc_local_var(LVAR_Unlock_Attempts);
end
procedure Node003 begin
   floater(220);
end
procedure Node004 begin
   if (has_rep_slaver) then begin
      Reply(231 + node_4);
      set_node_4;
      NOption(236, Node999, 004);
   end else begin
      Reply(230);
      NOption(235, Node999, 004);
      NOption(237, Node020, -003);
   end
   if (vic_known(state_vic_known_name)) then begin
      NOption(234, Node005, 004);
      NOption(238, Node015, -003);
   end else begin
      NOption(233, Node005, 004);
   end
   NOption(239, Node014, -003);
   NOption(240, Node014, -003);
end
procedure Node005 begin
   if (node_5) then begin
      Reply(254);
   end else begin
      set_node_5;
      if (vic_known(state_vic_known_name)) then begin
         Reply(250 + has_rep_slaver);
      end else begin
         Reply(252 + has_rep_slaver);
      end
   end
   set_vic_known(state_vic_known_name);
   NOption(255, Node010, 004);
   if (metzger_known == false) then begin
      NOption(256, Node010, 004);
   end
   if (see_vic(state_see_vic_okay) == false) then begin
      NOption(257, Node990, 004);
   end else if (vic_door_obj != 0) then begin
      if (obj_is_locked(vic_door_obj)) then begin
         NOption(260, Node009, 004);
      end
   end
   if ((is_skill_tagged(SKILL_REPAIR)) or (has_skill(dude_obj, SKILL_REPAIR) >= 60)) then begin
      GOption(258, Node017, 004);
   end
   if ((is_skill_tagged(SKILL_SCIENCE)) or (has_skill(dude_obj, SKILL_SCIENCE) >= 60)) then begin
      GOption(259, Node017, 004);
   end
   NOption(261, Node999, 004);
end
procedure Node006 begin
   open_vic_door
   if (see_vic(state_see_vic_waiting)) then begin
      item_caps_adjust(dude_obj, -300);
      set_see_vic(state_see_vic_okay);
      Reply(275);
   end else begin
      Reply(276);
   end
   set_see_vic(state_see_vic_okay);
   set_metzger_known;
   NOption(277, Node999, 004);
end
procedure Node007 begin
   Reply(285 + radio_fixed);
   if (metzger_known == false) then begin
      NOption(287, Node010, 004);
   end
   if (see_vic(state_see_vic_okay) == false) then begin
      NOption(257, Node990, 004);
   end
   NOption(290, Node999, 004);
end
procedure Node008 begin
   set_see_vic(state_see_vic_okay);
   Reply(295 + (has_rep_slaver == false));
   if (vic_door_obj != 0) then begin
      if (obj_is_locked(vic_door_obj)) then begin
         NOption(297, Node009, 004);
      end
   end
   NOption(298, Node999, 004);
end
procedure Node009 begin
   open_vic_door
   set_see_vic(state_see_vic_okay);
   Reply(305);
   NOption(306, Node999, 004);
end
procedure Node010 begin
   Reply(310);
   NOption(311, Node012, 004);
   NOption(312, Node011, 004);
   NOption(313, Node999, 004);
end
procedure Node011 begin
   Reply(320);
   BOption(321, Node999, 004);
   GOption(322, Node999, 004);
end
procedure Node012 begin
   Reply(330 + dude_is_female);
   NOption(332, Node013, 004);
   NOption(333, Node999, 004);
end
procedure Node013 begin
   Reply(340);
   NOption(341, Node999, 004);
end
procedure Node014 begin
   Reply(350);
   NOption(351, Node999, -003);
end
procedure Node015 begin
   Reply(360 + has_rep_slaver);
   GOption(362, Node016, -003);
   NOption(363, Node014, -003);
   NOption(364, Node999, -003);
end
procedure Node016 begin
   open_vic_door
   Reply(370 + door_was_locked);
   set_see_vic(state_see_vic_okay);
   NOption(372, Node999, -003);
end
procedure Node017 begin
   open_vic_door
   Reply(380);
   NOption(381, Node999, 004);
end
procedure Node018 begin
   if (see_vic(state_see_vic_waiting)) then begin
      Reply(392);
      if (dude_caps >= 300) then begin
         NOption(395, Node006, 004);
      end
      NOption(396, Node999, 004);
   end else if (node_18) then begin
      Reply(391);
      if (see_vic(state_see_vic_no)) then begin
         NOption(394, Node022, 004);
      end
   end else begin
      set_node_18;
      Reply(390);
      if (see_vic(state_see_vic_no)) then begin
         NOption(393, Node022, 004);
      end
   end
   if (metzger_known == false) then begin
      NOption(397, Node010, 004);
   end
   NOption(398, Node999, 004);
end
procedure Node019 begin
   if (local_var(LVAR_Node_19) <= 2) then begin
      Reply(410 + local_var(LVAR_Node_19));
      inc_local_var(LVAR_Node_19);
      NOption(414, Node999, 004);
   end else begin
      Reply(413);
      open_vic_door
      set_see_vic(state_see_vic_okay);
      NOption(415, Node999, 004);
   end
end
procedure Node020 begin
   if (node_20) then begin
      Reply(432);
   end else begin
      set_node_20;
      Reply(430 + dude_is_female);
   end
   NOption(433, Node014, -003);
   NOption(434, Node999, -003);
   NOption(435, Node999, -003);
end
procedure Node021 begin
   floater(450 + dude_is_female);
   call Node998;
end
procedure Node022 begin
   Reply(460);
   NOption(461, Node989, 004);
   NOption(462, Node988, 004);
   NOption(463, Node999, 004);
end
procedure Node023 begin
   set_see_vic(state_see_vic_waiting);
   Reply(470);
   NOption(471, Node024, 004);
   BOption(472, Node987, 004);
   if (dude_caps >= 300) then begin
      NOption(473, Node006, 004);
   end
   NOption(474, Node999, 004);
end
procedure Node024 begin
   Reply(480);
   NOption(481, Node999, 004);
   BOption(482, Node999, 004);
end
procedure Node025 begin
   if (node_25) then begin
      set_see_vic(state_see_vic_never);
      Reply(491);
   end else begin
      set_node_25;
      Reply(490);
   end
   NOption(492, Node999, 004);
end
procedure Node026 begin
   if (vic_dead == false) then begin
      floater_rand(503, 504);
   end else if (has_rep_slaver) then begin
      floater_rand(505, 507);
   end else begin
      floater_rand(500, 502);
   end
end

Advertisement