mirror of
https://github.com/fallout2-ce/fallout2-ce.git
synced 2026-07-27 16:47:11 -07:00
Compare commits
1
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6efe7ed869 |
@@ -1,6 +1,11 @@
|
||||
#include "../sfall/sfall.h"
|
||||
#include "../sfall/dik.h"
|
||||
#include "../sfall/define_lite.h"
|
||||
#include "../test_utils.h"
|
||||
|
||||
variable last_game_mode;
|
||||
variable gamemodechange_assertions_enabled := false;
|
||||
variable gamemodechange_reported := false;
|
||||
|
||||
procedure test_with_args(variable arg1) begin
|
||||
display_msg("test_w_arg" + arg1);
|
||||
@@ -64,6 +69,31 @@ procedure keypress_handler begin
|
||||
end
|
||||
end
|
||||
|
||||
procedure gamemodechange_handler begin
|
||||
variable
|
||||
event_type := get_sfall_arg_at(0),
|
||||
previous_mode := get_sfall_arg_at(1),
|
||||
current_mode := get_game_mode;
|
||||
|
||||
display_msg(string_format("gamemodechange event=%d prev=%d cur=%d", event_type, previous_mode, current_mode));
|
||||
|
||||
if (not gamemodechange_assertions_enabled) then begin
|
||||
last_game_mode := current_mode;
|
||||
return;
|
||||
end
|
||||
|
||||
call assertTrue("gamemodechange event_type is 0 or 1", event_type == 0 or event_type == 1);
|
||||
call assertEquals("gamemodechange previous mode", previous_mode, last_game_mode);
|
||||
if (event_type == 0) then
|
||||
call assertNotEquals("gamemodechange mode changed", current_mode, previous_mode);
|
||||
else if (not gamemodechange_reported) then begin
|
||||
gamemodechange_reported := true;
|
||||
call report_test_results("hook_gamemodechange");
|
||||
end
|
||||
|
||||
last_game_mode := current_mode;
|
||||
end
|
||||
|
||||
procedure start begin
|
||||
//call test_with_args(777);
|
||||
display_msg("start hook test");
|
||||
@@ -74,14 +104,17 @@ procedure start begin
|
||||
add_obj_to_inven(dude_obj, create_object_sid(76, 0, 0, -1));
|
||||
add_obj_to_inven(dude_obj, create_object_sid(85, 0, 0, -1));
|
||||
|
||||
last_game_mode := get_game_mode;
|
||||
gamemodechange_assertions_enabled := true;
|
||||
|
||||
register_hook_proc(HOOK_KEYPRESS, keypress_handler);
|
||||
register_hook_proc(HOOK_TOHIT, tohit_handler);
|
||||
register_hook_proc(HOOK_USEOBJ, useobj_handler);
|
||||
register_hook_proc(HOOK_USEOBJON, useobjon_handler);
|
||||
register_hook_proc(HOOK_GAMEMODECHANGE, gamemodechange_handler);
|
||||
end
|
||||
|
||||
|
||||
procedure map_enter_p_proc begin
|
||||
display_msg("Map Enter hook test");
|
||||
end
|
||||
|
||||
|
||||
+10
@@ -462,6 +462,8 @@ void gameExit()
|
||||
{
|
||||
debugPrint("\nGame Exit\n");
|
||||
|
||||
sfallOnGameModeChange(1, GameMode::getCurrentGameMode());
|
||||
|
||||
// SFALL
|
||||
scriptHooksExit();
|
||||
sfall_gl_scr_exit();
|
||||
@@ -1624,12 +1626,20 @@ int GameMode::currentGameMode = 0;
|
||||
|
||||
void GameMode::enterGameMode(int gameMode)
|
||||
{
|
||||
int previousGameMode = currentGameMode;
|
||||
currentGameMode |= gameMode;
|
||||
if (currentGameMode != previousGameMode) {
|
||||
sfallOnGameModeChange(0, previousGameMode);
|
||||
}
|
||||
}
|
||||
|
||||
void GameMode::exitGameMode(int gameMode)
|
||||
{
|
||||
int previousGameMode = currentGameMode;
|
||||
currentGameMode &= ~gameMode;
|
||||
if (currentGameMode != previousGameMode) {
|
||||
sfallOnGameModeChange(0, previousGameMode);
|
||||
}
|
||||
}
|
||||
|
||||
bool GameMode::isInGameMode(int gameMode)
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
#include "display_monitor.h"
|
||||
#include "sfall_config.h"
|
||||
#include "sfall_script_hooks.h"
|
||||
#include "worldmap.h"
|
||||
|
||||
namespace fallout {
|
||||
@@ -53,9 +54,9 @@ void sfallOnAfterNewGame()
|
||||
return;
|
||||
}
|
||||
|
||||
void sfallOnGameModeChange()
|
||||
void sfallOnGameModeChange(int exit, int previousGameMode)
|
||||
{
|
||||
return;
|
||||
scriptHooks_GameModeChange(exit, previousGameMode);
|
||||
}
|
||||
|
||||
void sfallOnBeforeGameClose()
|
||||
|
||||
@@ -11,7 +11,7 @@ void sfallOnGameReset();
|
||||
void sfallOnBeforeGameStart();
|
||||
void sfallOnAfterGameStarted();
|
||||
void sfallOnAfterNewGame();
|
||||
void sfallOnGameModeChange();
|
||||
void sfallOnGameModeChange(int exit, int previousGameMode);
|
||||
void sfallOnBeforeGameClose();
|
||||
void sfallOnCombatStart();
|
||||
void sfallOnCombatEnd();
|
||||
|
||||
@@ -150,6 +150,18 @@ void scriptHooksExit()
|
||||
scriptHooksClear();
|
||||
}
|
||||
|
||||
/*
|
||||
Runs once every time when the game mode was changed, like opening/closing the inventory, character screen, pipboy, etc.
|
||||
|
||||
int arg0 - event type: 1 - when the player exits the game, 0 - otherwise
|
||||
int arg1 - the previous game mode
|
||||
*/
|
||||
void scriptHooks_GameModeChange(int exit, int previousGameMode)
|
||||
{
|
||||
ScriptHookCall hook(HOOK_GAMEMODECHANGE, 0);
|
||||
hook.addArg(exit).addArg(previousGameMode).call();
|
||||
}
|
||||
|
||||
/*
|
||||
Runs when Fallout is calculating the chances of an attack striking a target.
|
||||
Runs after the hit chance is fully calculated normally, including applying the 95% cap.
|
||||
|
||||
@@ -210,6 +210,7 @@ bool scriptHooksInit();
|
||||
void scriptHooksReset();
|
||||
void scriptHooksExit();
|
||||
|
||||
void scriptHooks_GameModeChange(int exit, int previousGameMode);
|
||||
int scriptHooks_ToHit(Object* attacker, Object* defender, int tile, int hitMode, int hitLocation, int hitChance, int hitChanceUncapped, bool useDistance);
|
||||
int scriptHooks_UseObj(Object* user, Object* objUsed);
|
||||
int scriptHooks_UseObjOn(Object* user, Object* target, Object* objUsed);
|
||||
|
||||
Reference in New Issue
Block a user