The Hoss fight in NCR is still not working properly. Here's my thoughts on it.
Good idea to use damage_p_proc, so you don't have to wait for his turn to end the fight. But you need to check that it only runs during that one fight, for instance with a team Loner check. Also, you only need to set the 'BEAT_HOSS' gvar when he is knocked out, it's otherwise taken care of in dialog.
I noticed a problem with Hoss animation getting stuck in a knocked down position a few times (not knocked out), probably from combat closing before his turn so he can get back up. He comes back to normal after map change/loading save, so maybe no big problem. Also may be fixed in a later sfall version than I tested with?
Code:
schoss
procedure damage_p_proc
if (has_trait(TRAIT_OBJECT,self_obj,OBJECT_TEAM_NUM) == TEAM_LOANER) then begin
if ((self_cur_hits <= (self_max_hits / 3)) or (is_critter_prone(self_obj))) then begin
if (is_critter_prone(self_obj)) then begin
set_global_var(GVAR_NCR_BEAT_HOSS, 1);
end
call surrender;
end
end
Can probably remove combat_p_proc completely, can't see what purpose it serves anymore (was added by killap). At the very least, remove the prone check, as nothing in combat_p_proc is run while he is unconscious anyway.
The "(self_cur_hits <= (self_max_hits / 3))" check in timed_event_p_proc is likely redundant too.
It is also possible for Hoss to flee from the player without surrendering the fight, which is a bit silly. With this he will surrender.
Code:
schoss
procedure timed_event_p_proc
end else if (critter_is_fleeing(self_obj)) then begin
set_local_var(LVAR_Used_Gun, 1);
call surrender;
// add that in just after the (dude_pulls_gun) section. Chose LVAR_Used_Gun, as the resulting dialog response fits better in my mind.
--------------------------------------------------------------------------------------------------------------------------------------------------------
Sierra Army Depot
Activating the alarm by using the consoles in Sierra Army Depot didn't always work. With this it will.
Code:
Both wsterm1b and wsterm2a
procedure Node002a begin
set_map_var(MVAR_Security_Level_1,1);
set_global_var(GVAR_SIERRA_BASE_SECURITY);
call Node001;
end
---------------------------------------------------------------------------------------------------------------------------------------------------------
RP addition that I think should be removed; - SAD Sentry bots in storage area was not supposed to fight the player, plus they are not implemented properly anyway (no weapons and wrong AI). Remove the new code or just disable it like this:
Code:
wcdedbot
procedure combat_p_proc begin
if (map_var(MVAR_Robot_Activation) == 1) then begin
change to
if (map_var(MVAR_Robot_Activation) == 2) then begin
----------------------------------------------------------------------------------------------------------------------------------------------------------
SanFran
The two shop owners in SanFran stop spawning money in their inventory after 7 years of game-play, add this to keep spawning money.
Code:
fcgunmer
#define LVAR_Restock_Fix (9)
procedure map_enter_p_proc
if ((game_time < 0) and (local_var(LVAR_Restock_Fix) == 0)) then begin
set_local_var(LVAR_Restock_Money, game_time - 1);
set_local_var(LVAR_Restock_Fix, 1);
end
//Insert it just above this line.
if (game_time > local_var(LVAR_Restock_Money)) then begin
Code:
fclaocho
#define LVAR_Restock_Fix (10)
procedure map_enter_p_proc
if ((game_time < 0) and (local_var(LVAR_Restock_Fix) == 0)) then begin
set_local_var(LVAR_Restock_Money, game_time - 1);
set_local_var(LVAR_Restock_Fix, 1);
end
//Insert it just above this line.
if (game_time > local_var(LVAR_Restock_Money)) then begin
---------------------------------------------------------------------------------------------------------------------------------------------------------
To fix issues with Chad (RP version) - dialog crash and failure to end combat when he was supposed to:
Chad dialog interface bug with starting combat in broken1 map. Node021 don't close. Not sure exactly what the problem is, but it's something to do with using attack_complex without a proper way to exit dialog. Just change Node018 to look like this instead of going through Node 021 and Node992.
Code:
hcchad
procedure Node018 begin
Reply(202);
critter_add_trait(self_obj,TRAIT_OBJECT,OBJECT_AI_PACKET,AI_TOUGH_CITIZEN);
set_local_var(LVAR_Personal_Enemy,1);
set_local_var(LVAR_Safe_Attack,2);
NOption(205,Node021,004);
floater(206);
end
Chad is also supposed to give up when taking too much damage. Problem is that "terminate_combat;" is in the critter_p procedure while it needs to be in the combat_p procedure. So add combat_p_proc looking like this:
Code:
procedure combat_p_proc;
procedure combat_p_proc begin
variable max;
variable cur;
if (local_var(LVAR_Safe_Attack) == 2) then begin
max := get_critter_stat(self_obj, STAT_max_hp);
cur := get_critter_stat(self_obj, STAT_current_hp);
if (cur < (max/4)) then begin
terminate_combat;
end
end
end
Replace the section under "//added by killap - expansion pack" in critter_p_proc with this code
Code:
procedure critter_p_proc begin
//added by killap - expansion pack
if ( cur_map_index == MAP_BROKEN_HILLS2 ) then begin
if (map_var(MVAR_House_Encounter) == 1) then begin
set_map_var(MVAR_House_Encounter,2);
add_timer_event( self_obj, game_ticks(0), 4 );
doTalk := 1;
end
end
if (local_var(LVAR_Safe_Attack) == 2) then begin
max := get_critter_stat(self_obj, STAT_max_hp);
cur := get_critter_stat(self_obj, STAT_current_hp);
if (cur < (max/4)) then begin
set_local_var(LVAR_Personal_Enemy,0);
set_local_var(LVAR_Safe_Attack,0);
if ( cur_map_index == MAP_BROKEN_HILLS1 ) then begin
set_map_var(MVAR_Chad_Draw,1);
end
call talk_p_proc;
end
end
There is one instance where Marcus wouldn't close the Chad quest properly.
Code:
hcmarcus
procedure Node2021 begin
set_global_var( GVAR_BH_CHAD, CHAD_CONFIRMED );
Should be:
set_global_var( GVAR_BH_CHAD, CHAD_ARRESTED );
--------------------------------------------------------------------------------------------------------------------------------------------------------
There is a problem in Sanfran where sometimes an invisible Bess will be set as your opponent, thus screwing up the fights.
This will prevent that from happening:
Code:
fcdragon and fclopan
procedure checkTestObj
if (obj == dude_obj) then begin
obj := 0;
debug_msg("FCLOPAN: FYI: found dude");
end
should be:
if ((obj == dude_obj) or (obj == Bess_Ptr)) then begin
obj := 0;
debug_msg("FCLOPAN: FYI: found dude");
end
// Bess is party_member_obj(16777407)
While checking the above, I looked at Bess's script. It seems that removing party members in the map exit procedure (which she tries to do) is not possible. The game just ignores it. It's a bit stupid that her script follows you around everywhere, but I can't think of a good way to prevent that.
---------------------------------------------------------------------------------------------------------------------------------------------------------
Mr Wight in New Reno could never catch you tampering with his safe, as he couldn't see you behind the table. Moved the safe a bit so that he can.
Link
--------------------------------------------------------------------------------------------------------------------------------------------------------
Add missing Sulik leather armor frame (from
@Josan12).
Link
Last time I spoke to him, which was three and a half years ago, he said; "I also have a bunch of corrected animations for the NPC armor mod, and also the new armored talking heads mod.". Not sure if it's uploaded anywhere, but might be worth checking out.