Fallout Wiki
Advertisement
Fallout Wiki
Details
Type Source file
SCRIPTS.LST comment Frankie, owner of the Hole in the Den
MSG file N/A
Transcript

/*
        Copyright 1998-2003 Interplay Entertainment Corp. All rights reserved.
*/
/*
        Name: Frankie
        Location: Den
        Description:
        Log: the following defines need to be changed:
           Created: December 31, 1997
           Updated:
*/
/* Include Files */
#include "..\headers\define.h"
#include "..\headers\den.h"
#define NAME SCRIPT_DCFRANKI
#define TOWN_REP_VAR GVAR_TOWN_REP_THE_DEN
#include "..\headers\command.h"
#include "..\headers\ModReact.h"
#include "..\headers\denbus2.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 timed_event_p_proc;
procedure push_p_proc;
// dialog nodes
procedure Node000;
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;
procedure Node027;
procedure Node998; // This Node is Always Combat
procedure Node996;
procedure Node995;
procedure Node994;
procedure Node993;
procedure Node992;
procedure Node991;
procedure Node990;
procedure Node988;
procedure Node987;
procedure Node986;
procedure Node985;
procedure Node984;
#define LVAR_Flags (4)
#define LVAR_Can_Drop_Cost_Time (5)
#define LVAR_Home_Tile (6)
#define LVAR_Next_Sex_Time (7)
#define LVAR_Home_Rotation (8)
#define find_still_money (100)
#define destroy_still_money (500)
#define whiskey_cost (20 - (14 * ((game_time > local_var(LVAR_Can_Drop_Cost_Time)) and (local_var(LVAR_Can_Drop_Cost_Time) != 0) and (rebecca_dead == false) and (still_broken == false))))
#define home_tile (local_var(LVAR_Home_Tile))
#define sex_time_up ((game_time > local_var(LVAR_Next_Sex_Time)) and (local_var(LVAR_Next_Sex_Time) != 0))
import variable frankie_obj;
procedure start begin
   frankie_obj := self_obj;
end
procedure timed_event_p_proc begin
   if (fixed_param == timed_event_post_sex) then begin
      call Node024;
   end
end
procedure map_enter_p_proc begin
   frankie_obj := self_obj;
   if (is_loading_game == false) then begin
      if (map_first_run) then begin
         set_local_var(LVAR_Home_Tile,self_tile);
         set_local_var(LVAR_Home_Rotation, self_cur_rot);
         critter_add_trait(self_obj,TRAIT_OBJECT,OBJECT_TEAM_NUM,TEAM_DEN_HOLE);
         critter_add_trait(self_obj,TRAIT_OBJECT,OBJECT_AI_PACKET,AI_TOUGH_MERCHANT);
      end
      critter_attempt_placement(self_obj, local_var(LVAR_Home_Tile), 0);
   end
end
procedure critter_p_proc begin
   if ((self_can_see_dude) and (hostile)) then begin
      self_attack_dude;
   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
      call Node998;
   end
end
procedure pickup_p_proc begin
   if (source_obj == dude_obj) then begin
      call Node998;
   end
end
procedure talk_p_proc begin
   script_overrides;
   GetReaction;
   if ((bad_critter_reaction) or (REP_ENEMY_DEN) or (mom_attacked)) then begin
      start_dialog_at_node(Node007);
   end else if (still_quest(state_still_quest_destroyed)) then begin
      start_dialog_at_node(Node014);
   end else if (still_quest(state_still_quest_serching)) then begin
      start_dialog_at_node(Node012);
   end else if (herebefore) then begin
      start_dialog_at_node(Node002);
   end else begin
      start_dialog_at_node(Node000);
   end
   set_herebefore;
end
procedure push_p_proc begin
   if (self_tile == local_var(LVAR_Home_Tile)) then begin
      script_overrides;
   end
end
procedure destroy_p_proc begin
   frankie_obj := 0;
   set_frankie_dead;
end
procedure look_at_p_proc begin
   script_overrides;
   display_mstr(100 + herebefore);
end
procedure description_p_proc begin
   script_overrides;
   display_mstr(150 + herebefore);
end
procedure use_skill_on_p_proc begin
end
procedure Node999 begin
   // to exit dialogs
end
procedure Node998 begin
   // sets up combat
   set_hostile;
end
procedure Node996 begin
variable whiskey_bottle;
   // if player has money, take it and give him whiskey and goto 5
   // else goto 6
   if (dude_caps >= whiskey_cost) then begin
      item_caps_adjust(self_obj,whiskey_cost);
      item_caps_adjust(dude_obj,-whiskey_cost);
      use_obj_on_obj(create_object(PID_BOOZE,0,0), dude_obj);
      call Node005;
   end else begin
      call Node006;
   end
end
procedure Node995 begin
   // lower reaction a little
   DownReactTiny;
end
procedure Node994 begin
   // set find still quest accepted
   set_still_quest(state_still_quest_serching);
end
procedure Node993 begin
   // set destroy still quest flag
   set_still_quest(state_still_quest_asked_to_destroy);
end
procedure Node992 begin
   // set quest declined flag and goto 5
   set_still_quest(state_still_quest_finished);
   call Node005;
end
procedure Node991 begin
   // roll speech: success goto 19, else 18
   if (is_success(roll_vs_skill(dude_obj,SKILL_CONVERSANT,0))) then begin
      call Node019;
   end else begin
      call Node018;
   end
end
procedure Node990 begin
   if (still_quest(state_still_quest_finished) == false) then begin
      call Node018;
   end
end
procedure Node988 begin
   // set quest declined flag
   set_still_quest(state_still_quest_finished);
end
procedure Node987 begin
   // raise reaction goto 5
   UpReact;
   call Node005;
end
procedure Node986 begin
   // if player charisma is 6 or better goto 23, else goto 22
   if (dude_charisma >= 6) then begin
      call Node023;
   end else begin
      call Node022;
   end
end
procedure Node985 begin
   // lower reaction a little and goto 2
   DownReactTiny;
   call Node002;
end
procedure Node984 begin
   gfade_out(ONE_GAME_SECOND);
      do_default_sex;
      set_local_var(LVAR_Next_Sex_Time, game_time + ONE_GAME_DAY);
      critter_attempt_placement(self_obj, frankie_sex_tile, self_elevation);
      critter_attempt_placement(dude_obj, frankie_player_sex_tile, self_elevation);
      Face_Critter(dude_obj,self_obj);
      Face_Critter(self_obj,dude_obj);
      flush_add_timer_event_sec(self_obj, 1, timed_event_post_sex);
   gfade_in(ONE_GAME_SECOND);
end
procedure Node000 begin
   call Node001;
end
procedure Node001 begin
   Reply(153);
   NOption(154,Node002,004);
   NOption(155,Node985,004);
   NOption(156,Node003,004);
   NOption(157,Node009,-003);
end
procedure Node002 begin
   Reply(158);
   NOption(159,Node004,004);
   if (dude_is_male) then begin
      NOption(160,Node021,004);
   end else begin
      NOption(161,Node986,004);
   end
   NOption(162,Node020,004);
   NOption(163,Node999,004);
   NOption(164,Node009,-003);
end
procedure Node003 begin
   Reply(165);
   DownReactMinor;
   NOption(166,Node998,004);
   if (rebecca_dead == false) then begin
      NOption(167,Node004,004);
   end
   NOption(168,Node999,004);
end
procedure Node004 begin
   Reply(mstr(169)+whiskey_cost+mstr(170));
   NOption(171,Node996,004);
   if (whiskey_cost >= 20) then begin
      NOption(172,Node003,004);
   end
   if ((becky_cost) and (rebecca_dead == false) and (still_quest(state_still_quest_no))) then begin
      NOption(173,Node010,006);
   end
   NOption(174,Node005,004);
end
procedure Node005 begin
   Reply(175);
   NOption(176,Node002,004);
   NOption(177,Node999,004);
end
procedure Node006 begin
   Reply(178);
   NOption(179,Node005,004);
   NOption(180,Node999,004);
end
procedure Node007 begin
   Reply(181);
   NOption(182,Node009,004);
   NOption(183,Node008,004);
   NOption(184,Node009,-003);
end
procedure Node008 begin
   Reply(185);
   NOption(186,Node999,001);
end
procedure Node009 begin
   Reply(187);
   NOption(188,Node999,004);
   NOption(189,Node008,-003);
end
procedure Node010 begin
   Reply(190);
   NOption(191,Node011,004);
   NOption(192,Node011,005);
   if (still_known) then begin
      NOption(193,Node012,004);
   end
   NOption(194,Node995,004);
end
procedure Node011 begin
   Reply(195);
   NOption(196,Node994,004);
   NOption(197,Node005,004);
end
procedure Node012 begin
   if (rebecca_dead == false) then begin
      Reply(198);
      if (still_known) then begin
         NOption(199,Node013,004);
      end
      NOption(200,Node999,004);
   end else begin
      Reply(300);
      BOption(155,Node003,004);
      NOption(186,Node999,004);
      set_still_quest(state_still_quest_finished);
   end
end
procedure Node013 begin
   den_display_mstr(400);
   give_xp(EXP_FIND_STILL_FOR_FRANKIE);
   item_caps_adjust(dude_obj, find_still_money);
   set_still_quest(state_still_quest_asked_to_destroy);
   Reply(201);
   if (still_broken) then begin
      NOption(202,Node015,004);
   end
   NOption(203,Node993,004);
   NOption(204,Node992,004);
   NOption(205,Node017,006);
end
procedure Node014 begin
   if (rebecca_dead == false) then begin
      Reply(206);
      if (still_broken) then begin
         NOption(207,Node015,004);
      end
      NOption(208,Node017,006);
      NOption(209,Node999,004);
   end else begin
      Reply(300);
      BOption(155,Node003,004);
      NOption(186,Node999,004);
      set_still_quest(state_still_quest_finished);
   end
end
procedure Node015 begin
   item_caps_adjust(dude_obj, destroy_still_money);
   den_display_mstr(500);
   give_xp(EXP_DESTROY_STILL_FOR_FRANKIE);
   inc_general_rep(REP_BONUS_DESTROY_BECKY_STILL);
   set_still_quest(state_still_quest_finished);
   Reply(210);
   NOption(211,Node005,004);
   NOption(212,Node016,006);
   NOption(213,Node999,004);
end
procedure Node016 begin
   Reply(214);
   NOption(215,Node017,006);
   NOption(216,Node017,006);
end
procedure Node017 begin
   Reply(217);
   NOption(218,Node991,006);
   NOption(219,Node018,004);
   NOption(220,Node990,004);
end
procedure Node018 begin
   Reply(221);
   NOption(222,Node993,004);
   NOption(223,Node988,004);
end
procedure Node019 begin
   den_display_mstr(600);
   give_xp(EXP_CONVINCE_FRANKIE_TRADE);
   inc_general_rep(REP_BONUS_CONVINCE_FRANKIE_TRADE);
   set_still_quest(state_still_quest_finished);
   set_local_var(LVAR_Can_Drop_Cost_Time,game_time + (24 * ONE_GAME_HOUR));
   Reply(224);
   NOption(225,Node987,006);
   NOption(226,Node999,006);
end
procedure Node020 begin
   Reply(227);
   if ((becky_cost) and (rebecca_dead == false) and (still_quest(state_still_quest_no))) then begin
      NOption(228,Node010,006);
   end
   NOption(229,Node005,004);
   NOption(230,Node999,004);
end
procedure Node021 begin
   Reply(231);
   NOption(232,Node002,004);
   NOption(233,Node999,004);
end
procedure Node022 begin
   Reply(234);
   NOption(235,Node002,004);
   NOption(236,Node999,004);
   NOption(237,Node999,004);
end
procedure Node023 begin
   if ((local_var(LVAR_Next_Sex_Time) == -1) and (dude_sex_rating < sex_rating_normal)) then begin
      Reply(400);
      NOption(260,Node999,004);
   end else if (sex_time_up) then begin
      Reply(238);
      NOption(239,Node984,004);
      NOption(240,Node005,004);
   end else begin
      Reply(410);
      NOption(260,Node999,004);
   end
end
procedure Node024 begin
variable the_score;
   the_score := dude_sex_rating;
   if (the_score >= sex_rating_great) then begin
      floater(350);
   end else if (the_score >= sex_rating_good) then begin
      floater(351);
   end else if (the_score >= sex_rating_normal) then begin
      floater(352);
   end else begin
      set_local_var(LVAR_Next_Sex_Time, -1);
      if (the_score >= sex_rating_bad) then begin
         floater(353);
      end else begin
         floater(354);
      end
   end
end
procedure Node025 begin
   Reply(246);
   NOption(247,Node999,004);
end
procedure Node026 begin
   // player stood frankie up
   Reply(259);
   NOption(260,Node999,004);
   NOption(261,Node027,006);
   NOption(262,Node003,004);
end
procedure Node027 begin
   if (is_success(roll_vs_skill(dude_obj,SKILL_CONVERSANT,0))) then begin
      Reply(263);
      NOption(264,Node999,004);
   end else begin
      Reply(267);
      NOption(188,Node999,004);
      NOption(266,Node998,004);
   end
end

Advertisement