mirror of
https://github.com/sfall-team/sfall.git
synced 2026-07-27 16:52:34 -07:00
Replaced 'Take All' hotkey mod with UI hotkeys mod
Minor edits to documents.
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
Master Theif cheat for fallout 2 by phobos2077
|
||||
----------------------------------------
|
||||
Master Thief cheat for fallout 2 by phobos2077
|
||||
----------------------------------------------
|
||||
|
||||
- forces all steal attempts to succeed
|
||||
|
||||
|
||||
Binary file not shown.
@@ -1,20 +0,0 @@
|
||||
procedure start;
|
||||
// adjust include paths if needed
|
||||
#include "..\..\scripting_docs\headers\sfall.h"
|
||||
#include "..\..\scripting_docs\headers\dik.h"
|
||||
|
||||
procedure start begin
|
||||
if game_loaded then begin
|
||||
register_hook(HOOK_KEYPRESS);
|
||||
end else begin
|
||||
variable
|
||||
event := get_sfall_arg,
|
||||
keyDX := get_sfall_arg;
|
||||
|
||||
if (event == 1) and (keyDX == DIK_SEMICOLON) then begin
|
||||
tap_key(DIK_CAPITAL);
|
||||
tap_key(DIK_A);
|
||||
tap_key(DIK_CAPITAL);
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,9 +0,0 @@
|
||||
"Take All" Hotkey mod for Fallout 2 by NovaRain
|
||||
----------------------------------------
|
||||
|
||||
- makes pressing the semicolon key send an uppercase A after a semicolon.
|
||||
- Note: the uppercase A (shift + A if Caps Lock is off) is the built-in hotkey for the TAKE ALL button on the loot screen.
|
||||
|
||||
To use, copy *.int file to your scripts folder.
|
||||
|
||||
This mod is a simple example of how you can use HOOK_KEYPRESS hooks.
|
||||
Binary file not shown.
@@ -0,0 +1,52 @@
|
||||
/*
|
||||
|
||||
UI Hotkeys mod for Fallout 2 by NovaRain
|
||||
----------------------------------------
|
||||
|
||||
- closes some game interfaces by pressing their hotkeys again:
|
||||
* 'I' key for Inventory
|
||||
* 'S' key for Skilldex
|
||||
* 'Z' key for Pip-Boy
|
||||
|
||||
- extends the functionality of the 'Space' key (Caps Lock must be off):
|
||||
* takes all items in the loot screen
|
||||
* makes the offer in the barter screen
|
||||
|
||||
Requires sfall 3.5 or higher
|
||||
|
||||
*/
|
||||
|
||||
#include "..\headers\sfall\sfall.h"
|
||||
#include "..\headers\sfall\dik.h"
|
||||
|
||||
procedure start;
|
||||
|
||||
procedure start begin
|
||||
if game_loaded then begin
|
||||
register_hook(HOOK_KEYPRESS);
|
||||
end else begin
|
||||
variable
|
||||
event := get_sfall_arg,
|
||||
keyDX := get_sfall_arg,
|
||||
mode;
|
||||
|
||||
if (event) then begin
|
||||
mode := get_game_mode;
|
||||
if (keyDX == DIK_I and (mode bwand INVENTORY)) then begin
|
||||
tap_key(DIK_ESCAPE);
|
||||
end else if (keyDX == DIK_S and (mode bwand SKILLDEX)) then begin
|
||||
tap_key(DIK_ESCAPE);
|
||||
end else if (keyDX == DIK_Z and (mode bwand PIPBOY)) then begin
|
||||
tap_key(DIK_ESCAPE);
|
||||
end else if (keyDX == DIK_SPACE) then begin
|
||||
if (mode bwand INTFACELOOT) then begin
|
||||
tap_key(DIK_CAPITAL);
|
||||
tap_key(DIK_A);
|
||||
tap_key(DIK_CAPITAL);
|
||||
end else if (mode bwand BARTER) then begin
|
||||
tap_key(DIK_M);
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,22 @@
|
||||
UI Hotkeys mod for Fallout 2 by NovaRain
|
||||
----------------------------------------
|
||||
|
||||
- closes some game interfaces by pressing their hotkeys again:
|
||||
* 'I' key for Inventory
|
||||
* 'S' key for Skilldex
|
||||
* 'Z' key for Pip-Boy
|
||||
|
||||
- extends the functionality of the 'Space' key (Caps Lock must be off):
|
||||
* takes all items in the loot screen
|
||||
* makes the offer in the barter screen
|
||||
|
||||
- Note:
|
||||
* the uppercase 'A' (shift + A if Caps Lock is off) is the built-in hotkey for the TAKE ALL button on the loot screen
|
||||
* the lowercase 'm' is the built-in hotkey for the OFFER button on the barter screen
|
||||
|
||||
|
||||
Requires sfall 3.5 or higher
|
||||
|
||||
To use, copy gl_uihotkeys.int to your scripts folder.
|
||||
|
||||
This mod is a simple example of how you can use HOOK_KEYPRESS hooks.
|
||||
@@ -47,7 +47,7 @@ Changes argument value. The argument number (argnum) is 0-indexed. This is usefu
|
||||
> void register_hook(int hooktype)
|
||||
Used from a normal global script if you want to run it at the same point a full hook script would normally run. In case of this function, "start" proc will be executed in a current global script. You can use all above functions like normal.
|
||||
|
||||
> void register_hook_proc(int hooktype, proc procedure)
|
||||
> void register_hook_proc(int hook, procedure proc)
|
||||
The same as register_hook, except that you specifically define which procedure in the current script should be called as a hook (instead of "start"). Pass procedure the same as how you use dialog option functions. This IS the recommended way to use hook scripts, as it gives both modularity (each mod logic in a separate global script, no conflicts if you don't use "hs_*.int" scripts) and flexibility (you can place all related hook scripts for specific mod in a single script!).
|
||||
|
||||
NOTE: you can hook several scripts to a single hook point, for example if it's different mods from different authors or just some different aspects of one larger mod. In this case scripts are executed in reverse order of how they were registered. When one of the scripts in a chain returns value with "set_sfall_return", the next script may override this value if calls "set_sfall_return" again. Sometimes you need to multiply certain value in a chain of hook scripts.
|
||||
|
||||
@@ -90,6 +90,7 @@ DWORD _stdcall GetHSArg();
|
||||
DWORD* _stdcall GetHSArgs();
|
||||
void _stdcall SetHSArg(DWORD id, DWORD value);
|
||||
void _stdcall SetHSReturn(DWORD d);
|
||||
|
||||
// register hook by proc num (special values: -1 - use default (start) procedure, 0 - unregister)
|
||||
void _stdcall RegisterHook(fo::Program* script, int id, int procNum);
|
||||
|
||||
|
||||
@@ -103,7 +103,7 @@ static void __declspec(naked) gnw_main_hack() {
|
||||
}
|
||||
|
||||
static fo::PathNode* __fastcall RemoveDatabase(const char* pathPatches) {
|
||||
auto paths = fo::var::paths; // curr.node (beginning of the load order)
|
||||
auto paths = fo::var::paths; // curr.node (beginning of the chain of paths)
|
||||
auto _paths = paths; // prev.node
|
||||
|
||||
while (paths) {
|
||||
@@ -111,9 +111,9 @@ static fo::PathNode* __fastcall RemoveDatabase(const char* pathPatches) {
|
||||
fo::PathNode* nextPaths = paths->next; // pointer to the node of the next path
|
||||
// TODO: need to check if this condition is used correctly
|
||||
if (paths != _paths)
|
||||
_paths->next = nextPaths; // replace the pointer in the previous node, removing the current(found) path from the load order
|
||||
_paths->next = nextPaths; // replace the pointer in the previous node, removing the current(found) path from the chain
|
||||
else // if the current node is equal to the previous node
|
||||
fo::var::paths = nextPaths; // set the next node at the beginning of the load order
|
||||
fo::var::paths = nextPaths; // set the next node at the beginning of the chain
|
||||
return paths; // return the pointer of the current removed node (save the pointer)
|
||||
}
|
||||
_paths = paths; // prev.node <- curr.node
|
||||
@@ -122,7 +122,7 @@ static fo::PathNode* __fastcall RemoveDatabase(const char* pathPatches) {
|
||||
return nullptr; // it's possible that this will create an exceptional situation for the game, although such a situation should not arise
|
||||
}
|
||||
|
||||
// Remove master_patches from the load order
|
||||
// Remove master_patches from the chain
|
||||
static void __declspec(naked) game_init_databases_hack1() {
|
||||
__asm {
|
||||
cmp eax, -1;
|
||||
@@ -135,7 +135,7 @@ skip:
|
||||
}
|
||||
}
|
||||
|
||||
// Remove critter_patches from the load order
|
||||
// Remove critter_patches from the chain
|
||||
static void __declspec(naked) game_init_databases_hack2() {
|
||||
__asm {
|
||||
cmp eax, -1;
|
||||
@@ -169,14 +169,14 @@ static void __fastcall game_init_databases_hook() {
|
||||
if (!patchFiles.empty()) InitExtraPatches();
|
||||
|
||||
fo::PathNode* critter_patches = (fo::PathNode*)fo::var::critter_db_handle;
|
||||
fo::PathNode* paths = fo::var::paths; // beginning of the load order
|
||||
// insert master_patches/critter_patches at the beginning of the load order
|
||||
fo::PathNode* paths = fo::var::paths; // beginning of the chain of paths
|
||||
// insert master_patches/critter_patches at the beginning of the chain of paths
|
||||
if (critter_patches) {
|
||||
critter_patches->next = paths; // critter_patches.next -> paths
|
||||
paths = critter_patches;
|
||||
}
|
||||
master_patches->next = paths; // master_patches.next -> paths
|
||||
fo::var::paths = master_patches; // set master_patches node at the beginning of the load order
|
||||
fo::var::paths = master_patches; // set master_patches node at the beginning of the chain of paths
|
||||
}
|
||||
|
||||
static bool NormalizePath(std::string &path) {
|
||||
|
||||
@@ -94,7 +94,7 @@ static long GetGlobalVarNameString(OpcodeContext& ctx) {
|
||||
}
|
||||
|
||||
static void GetGlobalVar(OpcodeContext& ctx, DataType type) {
|
||||
long result;
|
||||
long result;
|
||||
if (ctx.arg(0).isString()) {
|
||||
result = GetGlobalVarNameString(ctx);
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user