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

arroyoman

First time out of the vault
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.
 
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
 
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.
 
TL; DR :: need help finding a particular PARTY.H file that contains the default AI of potential party members

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.
 
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...
 
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...
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
 
Back
Top