Skip to content

Commit

Permalink
Add args to ENCOUNTER hook to determine which encounter is being load…
Browse files Browse the repository at this point in the history
…ed, not just map ID
  • Loading branch information
phobos2077 committed May 30, 2024
1 parent 0ba74de commit f9faa73
Show file tree
Hide file tree
Showing 6 changed files with 48 additions and 5 deletions.
5 changes: 5 additions & 0 deletions artifacts/scripting/headers/define_extra.h
Original file line number Diff line number Diff line change
Expand Up @@ -516,6 +516,11 @@
#define CRITICAL_VALUE_FAIL_MSG (6) // This is shown instead of Message if the stat check fails.


#define DIFFICULTY_EASY (0)
#define DIFFICULTY_NORMAL (1)
#define DIFFICULTY_HARD (2)


/* Playback mode defines for the soundplay function */
#define soundraw (0x80000000) // sfall flag
#define Stereo8bit (soundstereo)
Expand Down
31 changes: 27 additions & 4 deletions artifacts/scripting/headers/lib.arrays.h
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ procedure remove_array_block(variable arr, variable blocksize, variable index);
/**
* Converts any array to string for debugging purposes
*/
#define debug_array_str(arr) debug_array_str_deep(arr, 1)
#define debug_array_str(arr) debug_array_str_deep(arr, 1, false)

// Prints contents of a given array to main message window, for debugging purposes.
#define display_array(arr) display_msg(debug_array_str(arr))
Expand Down Expand Up @@ -502,6 +502,28 @@ end

#undef ARRAY_SET_BLOCK_SIZE

/**
* Returns a new array containing only those items from *arr* for which *filterFunc* returns true.
* @arg {array} arr - Array to use values from. Can be map or list.
* @arg {string} filterFunc - A name of procedure that accepts value from arr and returns true if it should be copied to the new array.
* @arg {bool} negate - If true, reverses the result of filterFunc so that only "false" values will be copied to the new array.
* @ret {array}
*/
procedure array_filter(variable arr, variable filterFunc, variable negate := false) begin
variable k, v,
isMap := array_is_map(arr),
retArr := temp_array_map if isMap else temp_array_list(0);
foreach (k: v in arr) begin
if ((filterFunc(v) != 0) == (not negate)) then begin
if (isMap) then
set_array(retArr, k, v);
else
call array_push(retArr, v);
end
end
return retArr;
end

/**
* Creates a new array filled from a given array by transforming each value using given procedure name.
* @arg {array} arr - Array to use values from.
Expand Down Expand Up @@ -721,16 +743,17 @@ end
* Formats array contents into a string with a given level of recursion. For debugging.
* @arg {array} arr
* @arg {int} levels - recursion level
* @arg {bool} prefix - true to include a prefix with item count
* @ret {string}
*/
procedure debug_array_str_deep(variable arr, variable levels) begin
procedure debug_array_str_deep(variable arr, variable levels, variable prefix := false) begin
#define _newline if (levels > 1) then s += "\n";
#define _indent ii := 0; while (ii < levels - 1) do begin s += " "; ii++; end
#define _value(v) (v if (levels <= 1 or not array_exists(v)) else debug_array_str_deep(v, levels - 1))
variable i := 0, ii, k, v, s, len;
len := len_array(arr);
if (array_is_map(arr)) then begin // print assoc array
s := "Map("+len+"): {";
s := ("Map("+len+"): {") if prefix else "{";
while i < len do begin
_newline
k := array_key(arr, i);
Expand All @@ -744,7 +767,7 @@ procedure debug_array_str_deep(variable arr, variable levels) begin
_newline
s += "}";
end else begin // print list
s := "List("+len+"): [";
s := ("List("+len+"): [") if prefix else "[";
_newline
while i < len do begin
_newline
Expand Down
9 changes: 9 additions & 0 deletions artifacts/scripting/headers/lib.strings.h
Original file line number Diff line number Diff line change
Expand Up @@ -200,6 +200,15 @@ procedure to_string(variable val) begin
return ""+val;
end

/**
* Returns true if given string is 0 or empty string. For use as a delegate.
* @arg {string} str
* @ret {bool}
*/
procedure string_null_or_empty(variable str) begin
return str == 0 or str == "";
end


/**
DEPRECATED, use string_format instead!
Expand Down
2 changes: 2 additions & 0 deletions artifacts/scripting/hooks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -731,6 +731,8 @@
int arg0 - event type: 0 - when a random encounter occurs, 1 - when the player enters from the world map
int arg1 - the map ID that the encounter will load (see MAPS.h or Maps.txt)
int arg2 - 1 when the encounter occurs is a special encounter, 0 otherwise
int arg3 - encounter table index or -1 if not an encounter
int arg4 - encounter index in the table, or -1 if not an encounter
int ret0 - overrides the map ID, or pass -1 for event type 0 to cancel the encounter and continue traveling
int ret1 - pass 1 to cancel the encounter and load the specified map from the ret0 (only for event type 0)
Expand Down
2 changes: 2 additions & 0 deletions sfall/FalloutEngine/VariableOffsets.h
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,8 @@
#define FO_VAR_Educated 0x57082C
#define FO_VAR_elevation 0x631D2C
#define FO_VAR_EncounterMapID 0x672E4C
#define FO_VAR_EncounterTableNum 0x672E50
#define FO_VAR_EncounterNum 0x672E54
#define FO_VAR_endgame_subtitle_done 0x570BD0
#define FO_VAR_endgame_subtitle_characters 0x51866C
#define FO_VAR_endgame_voiceover_loaded 0x570AB8
Expand Down
4 changes: 3 additions & 1 deletion sfall/Modules/HookScripts/MiscHs.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -592,11 +592,13 @@ static void __declspec(naked) ExplosiveTimerHook() {
// Hook does not work for scripted encounters and meeting Horrigan
static long __fastcall EncounterHook_Script(long encounterMapID, long eventType, long encType) {
BeginHook();
argCount = 3;
argCount = 5;

args[0] = eventType; // 1 - enter local map from the world map
args[1] = encounterMapID;
args[2] = (encType == 3); // 1 - special random encounter
args[3] = fo::var::getInt(FO_VAR_EncounterTableNum);
args[4] = fo::var::getInt(FO_VAR_EncounterNum);

RunHookScript(HOOK_ENCOUNTER);

Expand Down

0 comments on commit f9faa73

Please sign in to comment.