Added a flashing icon to the Horrigan encounter

Minor edits to some code and documents.
This commit is contained in:
NovaRain
2020-01-22 10:20:32 +08:00
parent f57564c9ed
commit 56f2ea46c2
6 changed files with 35 additions and 7 deletions
+1 -1
View File
@@ -210,7 +210,7 @@ DebugEditorKey=0
;Changes some of Fallout 2 engine functions to Fallout 1 behavior:
;- disables playing the final movie/credits after the endgame slideshow
;- disables halving the weight for power armor items
;- endgame_movie script function plays Movie11 or Movie12 depending on the player's gender before the credits
;- endgame_movie script function plays movie 10 or 11 based on the player's gender before the credits
Fallout1Behavior=0
;Time limit in years. Must be between -3 and 13
+2 -2
View File
@@ -72,7 +72,7 @@
#define LIST_GROUNDITEMS (1)
#define LIST_SCENERY (2)
#define LIST_WALLS (3)
//#define LIST_TILES (4) //Not listable via sfall list functions
//#define LIST_TILES (4) //Not listable via sfall list functions
#define LIST_MISC (5)
#define LIST_SPATIAL (6)
#define LIST_ALL (9)
@@ -82,7 +82,7 @@
#define ENCOUNTER_FLAG_LOCK (0x2) // block new forced encounter by the next function call until the current specified encounter occurs
#define ENCOUNTER_FLAG_NO_ICON (0x4) // disable displaying the flashing icon
#define ENCOUNTER_FLAG_ICON_SP (0x8) // use special encounter icon
#define ENCOUNTER_FLAG_FADEOUT (0x10) // use fade out effect on the encounter (Note: you should restore the fade out screen when entering the encounter)
#define ENCOUNTER_FLAG_FADEOUT (0x10) // fade out the screen on encounter (Note: you yourself should restore the fade screen when entering the encounter)
//The attack types returned by get_attack_type
#define ATKTYPE_LWEP1 (0)
+5 -2
View File
@@ -47,11 +47,12 @@
#define FO_VAR_currentWindow 0x51DCB8
#define FO_VAR_cursor_line 0x664514
#define FO_VAR_debug_func 0x51DF04
#define FO_VAR_dialog_target 0x518848
#define FO_VAR_dialog_target_is_party 0x51884C
#define FO_VAR_dialogue_head 0x518850
#define FO_VAR_dialogue_state 0x518714
#define FO_VAR_dialogue_switch_mode 0x518718
#define FO_VAR_dialog_target 0x518848
#define FO_VAR_dialog_target_is_party 0x51884C
#define FO_VAR_dialogueBackWindow 0x518740
#define FO_VAR_display_win 0x631E4C
#define FO_VAR_displayMapList 0x41B560
#define FO_VAR_dropped_explosive 0x5190E0
@@ -168,6 +169,7 @@
#define FO_VAR_optionsButtonUp 0x59D3FC
#define FO_VAR_optionsButtonUp1 0x570514
#define FO_VAR_optionsButtonUpKey 0x518F28
#define FO_VAR_optnwin 0x663900
#define FO_VAR_outlined_object 0x518D94
#define FO_VAR_partyMemberAIOptions 0x519DB8
#define FO_VAR_partyMemberCount 0x519DAC
@@ -206,6 +208,7 @@
#define FO_VAR_script_path_base 0x51C710
#define FO_VAR_scriptListInfo 0x51C7C8
#define FO_VAR_skill_data 0x51D118
#define FO_VAR_skldxwin 0x668140
#define FO_VAR_slot_cursor 0x5193B8
#define FO_VAR_sndfx_volume 0x518E90
#define FO_VAR_sneak_working 0x56D77C // DWORD var
+1 -1
View File
@@ -475,7 +475,7 @@ enum TerrainHoverImage {
width = 200,
height = 15,
size = width * height,
x_shift = (width / 4 ) + 25 // adjust x position
x_shift = (width / 4) + 25 // adjust x position
};
static std::array<unsigned char, TerrainHoverImage::size> wmTmpBuffer;
+1 -1
View File
@@ -590,7 +590,7 @@ void F1EngineBehaviorPatch() {
dlog("Applying Fallout 1 engine behavior patch.", DL_INIT);
BlockCall(0x4A4343); // disable playing the final movie/credits after the endgame slideshow
SafeWrite8(0x477C71, 0xEB); // disable halving the weight for power armor items
HookCall(0x43F872, endgame_movie_hook); // play Movie11 or Movie12 depending on the player's gender before the credits
HookCall(0x43F872, endgame_movie_hook); // play movie 10 or 11 based on the player's gender before the credits
dlogr(" Done", DL_INIT);
}
}
+25
View File
@@ -315,6 +315,28 @@ end:
}
}
static void __declspec(naked) wmRndEncounterOccurred_hook() {
__asm {
push eax;
mov edx, 1;
mov dword ptr ds:[FO_VAR_wmRndCursorFid], 0;
mov ds:[FO_VAR_wmEncounterIconShow], edx;
mov ecx, 7;
jLoop:
mov eax, edx;
sub eax, ds:[FO_VAR_wmRndCursorFid];
mov ds:[FO_VAR_wmRndCursorFid], eax;
call fo::funcoffs::wmInterfaceRefresh_;
mov eax, 200;
call fo::funcoffs::block_for_tocks_;
dec ecx;
jnz jLoop;
mov ds:[FO_VAR_wmEncounterIconShow], ecx;
pop eax; // map id
jmp fo::funcoffs::map_load_idx_;
}
}
static void RestRestore() {
if (!restMode) return;
restMode = false;
@@ -643,6 +665,9 @@ void Worldmap::init() {
WorldmapFpsPatch();
PipBoyAutomapsPatch();
// Add a flashing icon to the Horrigan encounter
HookCall(0x4C071C, wmRndEncounterOccurred_hook);
LoadGameHook::OnGameReset() += []() {
SetCarInterfaceArt(433); // set index
if (restTime) SetRestHealTime(180);