Help a Newb ------- how to add new party members to the game prop. Also, where is the PARTY.H file?

Discussion in 'Fallout General Modding' started by arroyoman, Jan 11, 2020.

  1. arroyoman

    arroyoman First time out of the vault

    74
    Jun 11, 2019
    I have recently been playing with Fallout Resurrection, and there's this minor character "Vodka", who is a mercenary fed up with his boss, Nestor.

    This character seemed like a wasted potential to me, since he cannot be recruited.

    So, naturally, I tweaked the script files (CVODKA.INT) , followed some tutorials and after many hours of tiresome testing, made him 'technically recruitable'.

    However, the tutorial mentioned something about changing the PARTY.TXT file (located in the Fallout/data/data folder)

    And also a PARTY.H file, which i could not seem to find in the game files.

    Not knowing where the PARTY.H file was, Vodka's AI / behaviour has been set to a 'default' mode, making him behave like a cowardly junkie.

    Henceforth, I have come to this forum for help, and I would much appreciate it if anyone were to give out a few pointers on where the PARTY.H file is located....


    TL; DR :: need help finding a particular PARTY.H file that contains the default AI of potential party members.
     
  2. arroyoman

    arroyoman First time out of the vault

    74
    Jun 11, 2019
    More details:

    I have been using Jim's script for CVODKA.INT which can be found here:

    https://www.nma-fallout.com/threads/jims-scripting-tutorial-for-beginners.203066/

    Code:
    #include "..\headers\define.h"
    
    
    #define NAME                    SCRIPT_ACKLINT
    
    
    #include "..\headers\command.h"
    #include "..\headers\PARTY.h"
    
    /* Standard Script Procedures */
    procedure start;
    procedure critter_p_proc;
    procedure talk_p_proc;
    procedure map_enter_p_proc;
    
    
    /* Script Specific Procedure Calls */
    procedure Node998;                                      // This Node is Always Combat
    procedure Node999;                                      // This Node is Always Ending
    
    
    
    
    // The next lines are added in by the Designer Tool.
    // Do NOT add in any lines here.
    //~~~~~~~~~~~~~~~~ DESIGNER TOOL STARTS HERE
    
    
    procedure Node001;
    procedure Node002;
    procedure Node003;
    // party member default nodes
    procedure Node1000; //Main party member node
    procedure Node1001; // heal yourself
    procedure Node1002; // wait here
    procedure Node1003; // put your weapon away
    procedure Node1004; // follow close
    procedure Node1005; // follow medium
    procedure Node1006; // follow far
    procedure Node1007; // Distance
    procedure Node1008; // Gear .. but he doesn't have any
    procedure Node1009; // Remove armor
    procedure Node1010; // Weapons that Can be used... NA
    procedure Node1100; // rejoin party
    
    
    //~~~~~~~~~~~~~~~~ DESIGN TOOL ENDS HERE
    // The Following lines are for anything that is not needed to be
    // seen by the design Tool
    
    
    
    
    /* Local Variables which are saved. All Local Variables need to be
       prepended by LVAR_ */
    #define LVAR_WAITING                      (0)
    #define LVAR_FOLLOW_DISTANCE              (1)
    #define LVAR_TEAM                         (2)
    
    
    #define PARTY_NODE_X                      Node1000
    
    
    #define original_team                     TEAM_NCR
    
    
    /* Local variables which do not need to be saved between map changes. */
    variable Only_Once:=0;
    
    
    procedure start begin
    end
    
    
    procedure map_enter_p_proc begin
       party_member_map_enter;
       Only_Once:=0;
       if party_member_obj(obj_pid(self_obj)) then begin
          critter_add_trait(self_obj,TRAIT_OBJECT,OBJECT_TEAM_NUM,TEAM_PLAYER);
       end else begin
          critter_add_trait(self_obj,TRAIT_OBJECT,OBJECT_TEAM_NUM,original_team);
       end
    end
    
    
    procedure critter_p_proc begin
       if party_member_obj(obj_pid(self_obj)) and (party_is_waiting == false) then begin
          party_member_follow_dude
       end
    end
    
    
    procedure talk_p_proc begin
        start_gdialog(NAME,self_obj,4,-1,-1);
        gSay_Start;
        if not party_member_obj(obj_pid(self_obj)) then
          call Node001;
        else
          call Node1000;
        gSay_End;
        end_dialogue;
    end
    
    
    procedure Node998 begin
    end
    
    
    procedure Node999 begin
    end
    
    
    procedure Node001 begin
       Reply("Do you want me to join your party?");
       NOption("Sure.",Node002,001);
       NOption("Not really.",Node999,001);
    end
    
    
    procedure Node002 begin
       if (dude_at_max_party_size) then begin
          Reply("You don't seem to have room for me.");
          NOption(g_mstr(10007),Node999,001);
       end else begin
          party_add_self;
          Call Node1000;
       end
    end
    
    
    #define DEF_PM_OPTIONS  \
       party_member_options(def_heal_msg, def_follow_msg, 0, def_wait_msg, def_nowait_msg, def_end_msg, def_stupid_msg)
    #define DEF_PM_FOLLOW \
       party_follow_options(def_close_msg, def_med_msg, def_far_msg, "That's fine.")
    
    
    procedure Node1000 begin
       Reply("Yes?");
       DEF_PM_OPTIONS;
    end
    
    
    procedure Node1001 begin // heal yourself
       obj_heal(self_obj)
       global_temp := 0;
       if (party_healed_max) then begin
          Reply("I'm all better now.");
       end else if (party_healed_good) then begin
          Reply("Feels good.");
       end else if (party_healed_hurt) then begin
          Reply("I could be better.");
       end else begin
          Reply("I'm still pretty busted up.");
       end
       DEF_PM_OPTIONS;
    end
    
    
    procedure Node1002 begin // wait here
       set_party_waiting;
       Reply("I'll wait here.");
       DEF_PM_OPTIONS;
    end
    
    
    procedure Node1003 begin // put your weapon away
       inven_unwield(self_obj);
       call Node1007;
    end
    
    
    procedure Node1004 begin // follow close
       set_follow_close;
       call Node1007;
    end
    
    
    procedure Node1005 begin// follow medium
       set_follow_medium;
       call Node1007;
    end
    
    
    procedure Node1006 begin // follow far
       set_follow_far;
       call Node1007;
    end
    
    
    procedure Node1007 begin
       if (local_var(LVAR_FOLLOW_DISTANCE) == FOLLOW_DISTANCE_CLOSE) then begin
          Reply("I'm staying close.");
       end else if (local_var(LVAR_FOLLOW_DISTANCE) == FOLLOW_DISTANCE_MEDIUM) then begin
          Reply("I'm keeping some distance.");
       end else if (local_var(LVAR_FOLLOW_DISTANCE) == FOLLOW_DISTANCE_FAR) then begin
          Reply("I'm giving you your space.");
       end
       DEF_PM_FOLLOW;
    end
    
    
    procedure Node1008 begin
    end
    
    
    procedure Node1009 begin
    end
    
    
    procedure Node1010 begin
    end
    
    
    
    
    procedure Node1100 begin // rejoin party
       if (dude_at_max_party_size) then begin
          Reply("You don't seem to have room for me.");
          NOption(g_mstr(10007),Node999,001);
       end else begin
          end_party_waiting;
          Reply("Glad to be back.");
          DEF_PM_OPTIONS;
       end
    end

    Everything works fine, it's just that the default AI behaviour in game is very cowardly and just terrible in general (in an rpg sense)

    His behaviour is not customizable in the "Combat Control" menu.

    My guess is, in order for this Vodka critter's behaviour to be customised, he has to be included in the PARTY.H and PARTY.TXT files.

    Sorry if my grammar is bad.
    As usual, any help is much appreciated
     
  3. Magnus

    Magnus Water Chip? Been There, Done That
    Modder

    953
    Dec 6, 2007
    Hmm. Have you checked the script sources that came with the mapper?

    If you're using some kind of mod, then you should get the script sources from that mod.

    Party.TXT sounds like it might be in Data/Text/English/Game.
     
  4. Lexx

    Lexx Testament to the ghoul lifespan
    Moderator Modder

    Apr 24, 2005
    This is not what party.h does. It just contains QOL macros to deal with stuff like party dialog setup, critter follow distance, etc.

    It is in the Fo2 script sources. Don't know if the Resurrection scripts are available somewhere, but I'm guessing their party members wouldn't do much different than the ones on Fo2. So using a modified version of Fo2's party.h might work.

    What is important for party members - they need to start out with their ai package set to CUSTOM.
    If you want to know more about how ai stuff works, read here.
     
    • [Rad] [Rad] x 2
  5. gustarballs1983

    gustarballs1983 Vault Senior Citizen
    Modder

    Oct 28, 2009
    So @arroyoman Have you made any progress with Vodka as a party member?

    If so, than could you share your work with the comunity. I'm planning a new playthrough of resurrection in nearby future. Might as well try out that mod...
     
  6. arroyoman

    arroyoman First time out of the vault

    74
    Jun 11, 2019
    No I did not succees in creating a new character vodka... However I did figure out how to replace his .int file with that of gabriel....Now i have 2 gabriels following me lol