Reorganized KeyPress hook & related code

* now it should work in exactly the same way as 4.x.

Improved the key press behavior for Debug Editor.
Implemented ScriptListInfoItem struct from 4.x.
This commit is contained in:
NovaRain
2020-08-14 00:39:09 +08:00
parent 12070f5e3d
commit c1b7e729a8
10 changed files with 271 additions and 251 deletions
+15 -1
View File
@@ -21,10 +21,13 @@
#include "main.h"
#include "FalloutEngine.h"
#include "Arrays.h"
#include "DebugEditor.h"
#include "Graphics.h"
#include "InputFuncs.h"
#include "LoadGameHook.h"
#include "ScriptExtender.h"
#include "DebugEditor.h"
enum DECode {
CODE_SET_GLOBAL = 0,
CODE_SET_MAPVAR = 1,
@@ -45,6 +48,8 @@ enum DECode {
static const char* debugLog = "LOG";
static const char* debugGnw = "GNW";
static DWORD debugEditorKey = 0;
struct sArray {
DWORD id;
long isMap;
@@ -224,6 +229,7 @@ static void RunEditorInternal(SOCKET &s) {
delete[] sglobals;
delete[] arrays;
FlushInputBuffer();
*(DWORD*)_script_engine_running = 1;
}
@@ -404,4 +410,12 @@ void DebugEditorInit() {
if (!isDebug) return;
DontDeleteProtosPatch();
debugEditorKey = GetConfigInt("Input", "DebugEditorKey", 0);
}
void DebugEditorKeyPressedHook(DWORD scanCode, bool pressed) {
if (debugEditorKey != 0 && scanCode == debugEditorKey && pressed && IsGameLoaded()) {
RunDebugEditor();
}
}
+1 -1
View File
@@ -1,4 +1,4 @@
#pragma once
void DebugEditorInit();
void RunDebugEditor();
void DebugEditorKeyPressedHook(DWORD scanCode, bool pressed);
+222 -222
View File
@@ -22,229 +22,229 @@
#include "Logging.h"
// global variables
long* ptr_pc_traits = reinterpret_cast<long*>(_pc_trait); // 2 of them
long* ptr_pc_traits = reinterpret_cast<long*>(_pc_trait); // 2 of them
DWORD* ptr_aiInfoList = reinterpret_cast<DWORD*>(_aiInfoList);
DWORD* ptr_ambient_light = reinterpret_cast<DWORD*>(_ambient_light);
sArt* ptr_art = reinterpret_cast<sArt*>(_art); // array of 11 sArt
DWORD* ptr_art_name = reinterpret_cast<DWORD*>(_art_name);
DWORD* ptr_art_vault_guy_num = reinterpret_cast<DWORD*>(_art_vault_guy_num);
DWORD* ptr_art_vault_person_nums = reinterpret_cast<DWORD*>(_art_vault_person_nums);
DWORD* ptr_background_volume = reinterpret_cast<DWORD*>(_background_volume);
BYTE** ptr_bckgnd = reinterpret_cast<BYTE**>(_bckgnd);
DWORD* ptr_black_palette = reinterpret_cast<DWORD*>(_black_palette);
BYTE* ptr_BlueColor = reinterpret_cast<BYTE*>(_BlueColor);
DWORD* ptr_bottom_line = reinterpret_cast<DWORD*>(_bottom_line);
DWORD* ptr_btable = reinterpret_cast<DWORD*>(_btable);
DWORD* ptr_btncnt = reinterpret_cast<DWORD*>(_btncnt);
DWORD* ptr_CarCurrArea = reinterpret_cast<DWORD*>(_CarCurrArea);
DWORD* ptr_cmap = reinterpret_cast<DWORD*>(_cmap);
DWORD* ptr_colorTable = reinterpret_cast<DWORD*>(_colorTable);
DWORD* ptr_combat_free_move = reinterpret_cast<DWORD*>(_combat_free_move);
DWORD* ptr_combat_list = reinterpret_cast<DWORD*>(_combat_list);
DWORD* ptr_combat_state = reinterpret_cast<DWORD*>(_combat_state);
DWORD* ptr_combat_turn_running = reinterpret_cast<DWORD*>(_combat_turn_running);
DWORD* ptr_combatNumTurns = reinterpret_cast<DWORD*>(_combatNumTurns);
DWORD* ptr_crit_succ_eff = reinterpret_cast<DWORD*>(_crit_succ_eff);
PathNode** ptr_critter_db_handle = reinterpret_cast<PathNode**>(_critter_db_handle);
DWORD* ptr_critterClearObj = reinterpret_cast<DWORD*>(_critterClearObj);
DWORD* ptr_crnt_func = reinterpret_cast<DWORD*>(_crnt_func);
DWORD* ptr_curr_font_num = reinterpret_cast<DWORD*>(_curr_font_num);
DWORD* ptr_curr_pc_stat = reinterpret_cast<DWORD*>(_curr_pc_stat);
DWORD* ptr_curr_stack = reinterpret_cast<DWORD*>(_curr_stack);
TProgram** ptr_currentProgram = reinterpret_cast<TProgram**>(_currentProgram);
DWORD* ptr_cursor_line = reinterpret_cast<DWORD*>(_cursor_line);
BYTE* ptr_DARK_GREY_Color = reinterpret_cast<BYTE*>(_DARK_GREY_Color);
BYTE* ptr_DarkGreenColor = reinterpret_cast<BYTE*>(_DarkGreenColor);
BYTE* ptr_DarkGreenGreyColor = reinterpret_cast<BYTE*>(_DarkGreenGreyColor);
TGameObj** ptr_dialog_target = reinterpret_cast<TGameObj**>(_dialog_target);
DWORD* ptr_dialog_target_is_party = reinterpret_cast<DWORD*>(_dialog_target_is_party);
const DWORD* ptr_dialogueBackWindow = reinterpret_cast<DWORD*>(_dialogueBackWindow);
DWORD* ptr_drugInfoList = reinterpret_cast<DWORD*>(_drugInfoList);
BYTE* ptr_DullPinkColor = reinterpret_cast<BYTE*>(_DullPinkColor);
const DWORD* ptr_edit_win = reinterpret_cast<DWORD*>(_edit_win);
DWORD* ptr_Educated = reinterpret_cast<DWORD*>(_Educated);
DWORD* ptr_elevation = reinterpret_cast<DWORD*>(_elevation);
DWORD* ptr_endgame_subtitle_done = reinterpret_cast<DWORD*>(_endgame_subtitle_done);
DWORD* ptr_Experience_ = reinterpret_cast<DWORD*>(_Experience_);
DWORD* ptr_fallout_game_time = reinterpret_cast<DWORD*>(_fallout_game_time);
DWORD* ptr_fidgetFID = reinterpret_cast<DWORD*>(_fidgetFID);
DWORD* ptr_flptr = reinterpret_cast<DWORD*>(_flptr);
DWORD* ptr_folder_card_desc = reinterpret_cast<DWORD*>(_folder_card_desc);
DWORD* ptr_folder_card_fid = reinterpret_cast<DWORD*>(_folder_card_fid);
DWORD* ptr_folder_card_title = reinterpret_cast<DWORD*>(_folder_card_title);
DWORD* ptr_folder_card_title2 = reinterpret_cast<DWORD*>(_folder_card_title2);
DWORD* ptr_frame_time = reinterpret_cast<DWORD*>(_frame_time);
char* ptr_free_perk = reinterpret_cast<char*>(_free_perk);
long** ptr_game_global_vars = reinterpret_cast<long**>(_game_global_vars); // dynamic array of size == num_game_global_vars
DWORD* ptr_game_user_wants_to_quit = reinterpret_cast<DWORD*>(_game_user_wants_to_quit);
CombatGcsd** ptr_gcsd = reinterpret_cast<CombatGcsd**>(_gcsd);
DWORD* ptr_gdBarterMod = reinterpret_cast<DWORD*>(_gdBarterMod);
DWORD* ptr_gdNumOptions = reinterpret_cast<DWORD*>(_gdNumOptions);
DWORD* ptr_gIsSteal = reinterpret_cast<DWORD*>(_gIsSteal);
DWORD* ptr_glblmode = reinterpret_cast<DWORD*>(_glblmode);
long* ptr_gmouse_current_cursor = reinterpret_cast<long*>(_gmouse_current_cursor);
DWORD* ptr_gmovie_played_list = reinterpret_cast<DWORD*>(_gmovie_played_list);
BYTE* ptr_GoodColor = reinterpret_cast<BYTE*>(_GoodColor);
BYTE* ptr_GreenColor = reinterpret_cast<BYTE*>(_GreenColor);
DWORD* ptr_gsound_initialized = reinterpret_cast<DWORD*>(_gsound_initialized);
long* ptr_hit_location_penalty = reinterpret_cast<long*>(_hit_location_penalty);
DWORD* ptr_holo_flag = reinterpret_cast<DWORD*>(_holo_flag);
DWORD* ptr_holopages = reinterpret_cast<DWORD*>(_holopages);
DWORD* ptr_hot_line_count = reinterpret_cast<DWORD*>(_hot_line_count);
DWORD* ptr_i_fid = reinterpret_cast<DWORD*>(_i_fid);
TGameObj** ptr_i_lhand = reinterpret_cast<TGameObj**>(_i_lhand);
TGameObj** ptr_i_rhand = reinterpret_cast<TGameObj**>(_i_rhand);
const DWORD* ptr_i_wid = reinterpret_cast<DWORD*>(_i_wid);
TGameObj** ptr_i_worn = reinterpret_cast<TGameObj**>(_i_worn);
void** ptr_idle_func = reinterpret_cast<void**>(_idle_func);
DWORD* ptr_In_WorldMap = reinterpret_cast<DWORD*>(_In_WorldMap); // moving in WorldMap
DWORD* ptr_info_line = reinterpret_cast<DWORD*>(_info_line);
const DWORD* ptr_interfaceWindow = reinterpret_cast<DWORD*>(_interfaceWindow);
DWORD* ptr_intfaceEnabled = reinterpret_cast<DWORD*>(_intfaceEnabled);
DWORD* ptr_intotal = reinterpret_cast<DWORD*>(_intotal);
TGameObj** ptr_inven_dude = reinterpret_cast<TGameObj**>(_inven_dude);
DWORD* ptr_inven_pid = reinterpret_cast<DWORD*>(_inven_pid);
DWORD* ptr_inven_scroll_dn_bid = reinterpret_cast<DWORD*>(_inven_scroll_dn_bid);
DWORD* ptr_inven_scroll_up_bid = reinterpret_cast<DWORD*>(_inven_scroll_up_bid);
MSGList* ptr_inventry_message_file = reinterpret_cast<MSGList*>(_inventry_message_file);
ItemButtonItem* ptr_itemButtonItems = reinterpret_cast<ItemButtonItem*>(_itemButtonItems); // array of 2 ItemButtonItem
long* ptr_itemCurrentItem = reinterpret_cast<long*>(_itemCurrentItem); // 0 - left, 1 - right
DWORD* ptr_kb_lock_flags = reinterpret_cast<DWORD*>(_kb_lock_flags);
DWORD* ptr_last_buttons = reinterpret_cast<DWORD*>(_last_buttons);
DWORD* ptr_last_button_winID = reinterpret_cast<DWORD*>(_last_button_winID);
DWORD* ptr_last_level = reinterpret_cast<DWORD*>(_last_level);
DWORD* ptr_Level_ = reinterpret_cast<DWORD*>(_Level_);
DWORD* ptr_Lifegiver = reinterpret_cast<DWORD*>(_Lifegiver);
BYTE* ptr_LIGHT_GREY_Color = reinterpret_cast<BYTE*>(_LIGHT_GREY_Color);
DWORD* ptr_lipsFID = reinterpret_cast<DWORD*>(_lipsFID);
DWORD* ptr_list_com = reinterpret_cast<DWORD*>(_list_com);
DWORD* ptr_list_total = reinterpret_cast<DWORD*>(_list_total);
DWORD* ptr_loadingGame = reinterpret_cast<DWORD*>(_loadingGame);
DWORD* ptr_LSData = reinterpret_cast<DWORD*>(_LSData);
DWORD* ptr_lsgwin = reinterpret_cast<DWORD*>(_lsgwin);
TComputeAttack* ptr_main_ctd = reinterpret_cast<TComputeAttack*>(_main_ctd);
DWORD* ptr_main_death_voiceover_done = reinterpret_cast<DWORD*>(_main_death_voiceover_done);
DWORD* ptr_main_window = reinterpret_cast<DWORD*>(_main_window);
DWORD* ptr_map_elevation = reinterpret_cast<DWORD*>(_map_elevation);
long** ptr_map_global_vars = reinterpret_cast<long**>(_map_global_vars); // array
DWORD* ptr_map_number = reinterpret_cast<DWORD*>(_map_number);
PathNode** ptr_master_db_handle = reinterpret_cast<PathNode**>(_master_db_handle);
DWORD* ptr_master_volume = reinterpret_cast<DWORD*>(_master_volume);
DWORD* ptr_max = reinterpret_cast<DWORD*>(_max);
long* ptr_maxScriptNum = reinterpret_cast<long*>(_maxScriptNum);
bool* ptr_Meet_Frank_Horrigan = reinterpret_cast<bool*>(_Meet_Frank_Horrigan);
const char** ptr_movie_list = reinterpret_cast<const char**>(_movie_list); // array of 17 char*
DWORD* ptr_mouse_hotx = reinterpret_cast<DWORD*>(_mouse_hotx);
DWORD* ptr_mouse_hoty = reinterpret_cast<DWORD*>(_mouse_hoty);
DWORD* ptr_mouse_is_hidden = reinterpret_cast<DWORD*>(_mouse_is_hidden);
DWORD* ptr_mouse_x_ = reinterpret_cast<DWORD*>(_mouse_x_);
DWORD* ptr_mouse_y = reinterpret_cast<DWORD*>(_mouse_y);
DWORD* ptr_mouse_y_ = reinterpret_cast<DWORD*>(_mouse_y_);
DWORD* ptr_Mutate_ = reinterpret_cast<DWORD*>(_Mutate_);
DWORD* ptr_name_color = reinterpret_cast<DWORD*>(_name_color);
DWORD* ptr_name_font = reinterpret_cast<DWORD*>(_name_font);
DWORD* ptr_name_sort_list = reinterpret_cast<DWORD*>(_name_sort_list);
DWORD* ptr_num_game_global_vars = reinterpret_cast<DWORD*>(_num_game_global_vars);
DWORD* ptr_num_map_global_vars = reinterpret_cast<DWORD*>(_num_map_global_vars);
DWORD* ptr_num_windows = reinterpret_cast<DWORD*>(_num_windows);
TGameObj** ptr_obj_dude = reinterpret_cast<TGameObj**>(_obj_dude);
DWORD* ptr_objectTable = reinterpret_cast<DWORD*>(_objectTable);
DWORD* ptr_objItemOutlineState = reinterpret_cast<DWORD*>(_objItemOutlineState);
DWORD* ptr_optionRect = reinterpret_cast<DWORD*>(_optionRect);
DWORD* ptr_optionsButtonDown = reinterpret_cast<DWORD*>(_optionsButtonDown);
DWORD* ptr_optionsButtonDown1 = reinterpret_cast<DWORD*>(_optionsButtonDown1);
DWORD* ptr_optionsButtonDownKey = reinterpret_cast<DWORD*>(_optionsButtonDownKey);
DWORD* ptr_optionsButtonUp = reinterpret_cast<DWORD*>(_optionsButtonUp);
DWORD* ptr_optionsButtonUp1 = reinterpret_cast<DWORD*>(_optionsButtonUp1);
DWORD* ptr_optionsButtonUpKey = reinterpret_cast<DWORD*>(_optionsButtonUpKey);
const DWORD* ptr_optnwin = reinterpret_cast<DWORD*>(_optnwin);
DWORD* ptr_outlined_object = reinterpret_cast<DWORD*>(_outlined_object);
DWORD* ptr_partyMemberAIOptions = reinterpret_cast<DWORD*>(_partyMemberAIOptions);
DWORD* ptr_partyMemberCount = reinterpret_cast<DWORD*>(_partyMemberCount);
DWORD** ptr_partyMemberLevelUpInfoList = reinterpret_cast<DWORD**>(_partyMemberLevelUpInfoList);
DWORD** ptr_partyMemberList = reinterpret_cast<DWORD**>(_partyMemberList); // each struct - 4 integers, first integer - objPtr
DWORD* ptr_partyMemberMaxCount = reinterpret_cast<DWORD*>(_partyMemberMaxCount);
DWORD** ptr_partyMemberPidList = reinterpret_cast<DWORD**>(_partyMemberPidList);
char** ptr_patches = reinterpret_cast<char**>(_patches);
PathNode** ptr_paths = reinterpret_cast<PathNode**>(_paths); // array
DWORD* ptr_pc_crit_succ_eff = reinterpret_cast<DWORD*>(_pc_crit_succ_eff);
DWORD* ptr_pc_kill_counts = reinterpret_cast<DWORD*>(_pc_kill_counts);
char* ptr_pc_name = reinterpret_cast<char*>(_pc_name);
DWORD* ptr_pc_proto = reinterpret_cast<DWORD*>(_pc_proto);
BYTE* ptr_PeanutButter = reinterpret_cast<BYTE*>(_PeanutButter);
DWORD* ptr_perk_data = reinterpret_cast<DWORD*>(_perk_data);
int** ptr_perkLevelDataList = reinterpret_cast<int**>(_perkLevelDataList);
const DWORD* ptr_pip_win = reinterpret_cast<DWORD*>(_pip_win);
DWORD* ptr_pipboy_message_file = reinterpret_cast<DWORD*>(_pipboy_message_file);
DWORD* ptr_pipmesg = reinterpret_cast<DWORD*>(_pipmesg);
DWORD* ptr_preload_list_index = reinterpret_cast<DWORD*>(_preload_list_index);
const char** ptr_procTableStrs = reinterpret_cast<const char**>(_procTableStrs); // table of procId (from define.h) => procName map
MSGList* ptr_proto_main_msg_file = reinterpret_cast<MSGList*>(_proto_main_msg_file);
MSGList* ptr_proto_msg_files = reinterpret_cast<MSGList*>(_proto_msg_files); // array of 6 elements
DWORD* ptr_ptable = reinterpret_cast<DWORD*>(_ptable);
DWORD* ptr_pud = reinterpret_cast<DWORD*>(_pud);
DWORD* ptr_queue = reinterpret_cast<DWORD*>(_queue);
DWORD* ptr_quick_done = reinterpret_cast<DWORD*>(_quick_done);
DWORD* ptr_read_callback = reinterpret_cast<DWORD*>(_read_callback);
BYTE* ptr_RedColor = reinterpret_cast<BYTE*>(_RedColor);
DWORD* ptr_retvals = reinterpret_cast<DWORD*>(_retvals);
DWORD* ptr_rotation = reinterpret_cast<DWORD*>(_rotation);
BoundRect* ptr_scr_size = reinterpret_cast<BoundRect*>(_scr_size);
DWORD* ptr_scriptListInfo = reinterpret_cast<DWORD*>(_scriptListInfo);
DWORD* ptr_skill_data = reinterpret_cast<DWORD*>(_skill_data);
const DWORD* ptr_skldxwin = reinterpret_cast<DWORD*>(_skldxwin);
DWORD* ptr_slot_cursor = reinterpret_cast<DWORD*>(_slot_cursor);
DWORD* ptr_sndfx_volume = reinterpret_cast<DWORD*>(_sndfx_volume);
DWORD* ptr_sneak_working = reinterpret_cast<DWORD*>(_sneak_working); // DWORD var
char** ptr_sound_music_path1 = reinterpret_cast<char**>(_sound_music_path1);
char** ptr_sound_music_path2 = reinterpret_cast<char**>(_sound_music_path2);
DWORD* ptr_speech_volume = reinterpret_cast<DWORD*>(_speech_volume);
DWORD* ptr_square = reinterpret_cast<DWORD*>(_square);
DWORD* ptr_squares = reinterpret_cast<DWORD*>(_squares);
DWORD* ptr_stack = reinterpret_cast<DWORD*>(_stack);
DWORD* ptr_stack_offset = reinterpret_cast<DWORD*>(_stack_offset);
DWORD* ptr_stat_data = reinterpret_cast<DWORD*>(_stat_data);
DWORD* ptr_stat_flag = reinterpret_cast<DWORD*>(_stat_flag);
DWORD* ptr_sWindows = reinterpret_cast<DWORD*>(_sWindows); // total 16 sWindow struct
DWORD* ptr_Tag_ = reinterpret_cast<DWORD*>(_Tag_);
DWORD* ptr_tag_skill = reinterpret_cast<DWORD*>(_tag_skill);
DWORD* ptr_target_curr_stack = reinterpret_cast<DWORD*>(_target_curr_stack);
DWORD** ptr_target_pud = reinterpret_cast<DWORD**>(_target_pud);
DWORD* ptr_target_stack = reinterpret_cast<DWORD*>(_target_stack); // array of 10 DWORD
DWORD* ptr_target_stack_offset = reinterpret_cast<DWORD*>(_target_stack_offset); // array of 10 DWORD
DWORD* ptr_target_str = reinterpret_cast<DWORD*>(_target_str);
DWORD* ptr_target_xpos = reinterpret_cast<DWORD*>(_target_xpos);
DWORD* ptr_target_ypos = reinterpret_cast<DWORD*>(_target_ypos);
DWORD* ptr_text_char_width = reinterpret_cast<DWORD*>(_text_char_width);
DWORD* ptr_text_height = reinterpret_cast<DWORD*>(_text_height);
DWORD* ptr_text_max = reinterpret_cast<DWORD*>(_text_max);
DWORD* ptr_text_mono_width = reinterpret_cast<DWORD*>(_text_mono_width);
DWORD* ptr_text_object_index = reinterpret_cast<DWORD*>(_text_object_index);
FloatText** ptr_text_object_list = reinterpret_cast<FloatText**>(_text_object_list); // array of 20 FloatText*
DWORD* ptr_text_spacing = reinterpret_cast<DWORD*>(_text_spacing);
DWORD* ptr_text_to_buf = reinterpret_cast<DWORD*>(_text_to_buf);
DWORD* ptr_text_width = reinterpret_cast<DWORD*>(_text_width);
DWORD* ptr_tile = reinterpret_cast<DWORD*>(_tile);
DWORD* ptr_title_color = reinterpret_cast<DWORD*>(_title_color);
DWORD* ptr_title_font = reinterpret_cast<DWORD*>(_title_font);
DWORD* ptr_trait_data = reinterpret_cast<DWORD*>(_trait_data);
DWORD* ptr_view_page = reinterpret_cast<DWORD*>(_view_page);
DWORD* ptr_wd_obj = reinterpret_cast<DWORD*>(_wd_obj);
WINinfo** ptr_window = reinterpret_cast<WINinfo**>(_window); // array of 50 WINinfo*
BYTE* ptr_WhiteColor = reinterpret_cast<BYTE*>(_WhiteColor);
DWORD* ptr_wmAreaInfoList = reinterpret_cast<DWORD*>(_wmAreaInfoList);
const DWORD* ptr_wmBkWin = reinterpret_cast<DWORD*>(_wmBkWin);
BYTE** ptr_wmBkWinBuf = reinterpret_cast<BYTE**>(_wmBkWinBuf);
DWORD* ptr_wmLastRndTime = reinterpret_cast<DWORD*>(_wmLastRndTime);
MSGList* ptr_wmMsgFile = reinterpret_cast<MSGList*>(_wmMsgFile);
DWORD* ptr_wmNumHorizontalTiles = reinterpret_cast<DWORD*>(_wmNumHorizontalTiles);
long* ptr_wmWorldOffsetX = reinterpret_cast<long*>(_wmWorldOffsetX);
long* ptr_wmWorldOffsetY = reinterpret_cast<long*>(_wmWorldOffsetY);
DWORD* ptr_world_xpos = reinterpret_cast<DWORD*>(_world_xpos);
DWORD* ptr_world_ypos = reinterpret_cast<DWORD*>(_world_ypos);
DWORD* ptr_WorldMapCurrArea = reinterpret_cast<DWORD*>(_WorldMapCurrArea);
BYTE* ptr_YellowColor = reinterpret_cast<BYTE*>(_YellowColor);
DWORD* ptr_aiInfoList = reinterpret_cast<DWORD*>(_aiInfoList);
DWORD* ptr_ambient_light = reinterpret_cast<DWORD*>(_ambient_light);
sArt* ptr_art = reinterpret_cast<sArt*>(_art); // array of 11 sArt
DWORD* ptr_art_name = reinterpret_cast<DWORD*>(_art_name);
DWORD* ptr_art_vault_guy_num = reinterpret_cast<DWORD*>(_art_vault_guy_num);
DWORD* ptr_art_vault_person_nums = reinterpret_cast<DWORD*>(_art_vault_person_nums);
DWORD* ptr_background_volume = reinterpret_cast<DWORD*>(_background_volume);
BYTE** ptr_bckgnd = reinterpret_cast<BYTE**>(_bckgnd);
DWORD* ptr_black_palette = reinterpret_cast<DWORD*>(_black_palette);
BYTE* ptr_BlueColor = reinterpret_cast<BYTE*>(_BlueColor);
DWORD* ptr_bottom_line = reinterpret_cast<DWORD*>(_bottom_line);
DWORD* ptr_btable = reinterpret_cast<DWORD*>(_btable);
DWORD* ptr_btncnt = reinterpret_cast<DWORD*>(_btncnt);
DWORD* ptr_CarCurrArea = reinterpret_cast<DWORD*>(_CarCurrArea);
DWORD* ptr_cmap = reinterpret_cast<DWORD*>(_cmap);
DWORD* ptr_colorTable = reinterpret_cast<DWORD*>(_colorTable);
DWORD* ptr_combat_free_move = reinterpret_cast<DWORD*>(_combat_free_move);
DWORD* ptr_combat_list = reinterpret_cast<DWORD*>(_combat_list);
DWORD* ptr_combat_state = reinterpret_cast<DWORD*>(_combat_state);
DWORD* ptr_combat_turn_running = reinterpret_cast<DWORD*>(_combat_turn_running);
DWORD* ptr_combatNumTurns = reinterpret_cast<DWORD*>(_combatNumTurns);
DWORD* ptr_crit_succ_eff = reinterpret_cast<DWORD*>(_crit_succ_eff);
PathNode** ptr_critter_db_handle = reinterpret_cast<PathNode**>(_critter_db_handle);
DWORD* ptr_critterClearObj = reinterpret_cast<DWORD*>(_critterClearObj);
DWORD* ptr_crnt_func = reinterpret_cast<DWORD*>(_crnt_func);
DWORD* ptr_curr_font_num = reinterpret_cast<DWORD*>(_curr_font_num);
DWORD* ptr_curr_pc_stat = reinterpret_cast<DWORD*>(_curr_pc_stat);
DWORD* ptr_curr_stack = reinterpret_cast<DWORD*>(_curr_stack);
TProgram** ptr_currentProgram = reinterpret_cast<TProgram**>(_currentProgram);
DWORD* ptr_cursor_line = reinterpret_cast<DWORD*>(_cursor_line);
BYTE* ptr_DARK_GREY_Color = reinterpret_cast<BYTE*>(_DARK_GREY_Color);
BYTE* ptr_DarkGreenColor = reinterpret_cast<BYTE*>(_DarkGreenColor);
BYTE* ptr_DarkGreenGreyColor = reinterpret_cast<BYTE*>(_DarkGreenGreyColor);
TGameObj** ptr_dialog_target = reinterpret_cast<TGameObj**>(_dialog_target);
DWORD* ptr_dialog_target_is_party = reinterpret_cast<DWORD*>(_dialog_target_is_party);
const DWORD* ptr_dialogueBackWindow = reinterpret_cast<DWORD*>(_dialogueBackWindow);
DWORD* ptr_drugInfoList = reinterpret_cast<DWORD*>(_drugInfoList);
BYTE* ptr_DullPinkColor = reinterpret_cast<BYTE*>(_DullPinkColor);
const DWORD* ptr_edit_win = reinterpret_cast<DWORD*>(_edit_win);
DWORD* ptr_Educated = reinterpret_cast<DWORD*>(_Educated);
DWORD* ptr_elevation = reinterpret_cast<DWORD*>(_elevation);
DWORD* ptr_endgame_subtitle_done = reinterpret_cast<DWORD*>(_endgame_subtitle_done);
DWORD* ptr_Experience_ = reinterpret_cast<DWORD*>(_Experience_);
DWORD* ptr_fallout_game_time = reinterpret_cast<DWORD*>(_fallout_game_time);
DWORD* ptr_fidgetFID = reinterpret_cast<DWORD*>(_fidgetFID);
DWORD* ptr_flptr = reinterpret_cast<DWORD*>(_flptr);
DWORD* ptr_folder_card_desc = reinterpret_cast<DWORD*>(_folder_card_desc);
DWORD* ptr_folder_card_fid = reinterpret_cast<DWORD*>(_folder_card_fid);
DWORD* ptr_folder_card_title = reinterpret_cast<DWORD*>(_folder_card_title);
DWORD* ptr_folder_card_title2 = reinterpret_cast<DWORD*>(_folder_card_title2);
DWORD* ptr_frame_time = reinterpret_cast<DWORD*>(_frame_time);
char* ptr_free_perk = reinterpret_cast<char*>(_free_perk);
long** ptr_game_global_vars = reinterpret_cast<long**>(_game_global_vars); // dynamic array of size == num_game_global_vars
DWORD* ptr_game_user_wants_to_quit = reinterpret_cast<DWORD*>(_game_user_wants_to_quit);
CombatGcsd** ptr_gcsd = reinterpret_cast<CombatGcsd**>(_gcsd);
DWORD* ptr_gdBarterMod = reinterpret_cast<DWORD*>(_gdBarterMod);
DWORD* ptr_gdNumOptions = reinterpret_cast<DWORD*>(_gdNumOptions);
DWORD* ptr_gIsSteal = reinterpret_cast<DWORD*>(_gIsSteal);
DWORD* ptr_glblmode = reinterpret_cast<DWORD*>(_glblmode);
long* ptr_gmouse_current_cursor = reinterpret_cast<long*>(_gmouse_current_cursor);
DWORD* ptr_gmovie_played_list = reinterpret_cast<DWORD*>(_gmovie_played_list);
BYTE* ptr_GoodColor = reinterpret_cast<BYTE*>(_GoodColor);
BYTE* ptr_GreenColor = reinterpret_cast<BYTE*>(_GreenColor);
DWORD* ptr_gsound_initialized = reinterpret_cast<DWORD*>(_gsound_initialized);
long* ptr_hit_location_penalty = reinterpret_cast<long*>(_hit_location_penalty);
DWORD* ptr_holo_flag = reinterpret_cast<DWORD*>(_holo_flag);
DWORD* ptr_holopages = reinterpret_cast<DWORD*>(_holopages);
DWORD* ptr_hot_line_count = reinterpret_cast<DWORD*>(_hot_line_count);
DWORD* ptr_i_fid = reinterpret_cast<DWORD*>(_i_fid);
TGameObj** ptr_i_lhand = reinterpret_cast<TGameObj**>(_i_lhand);
TGameObj** ptr_i_rhand = reinterpret_cast<TGameObj**>(_i_rhand);
const DWORD* ptr_i_wid = reinterpret_cast<DWORD*>(_i_wid);
TGameObj** ptr_i_worn = reinterpret_cast<TGameObj**>(_i_worn);
void** ptr_idle_func = reinterpret_cast<void**>(_idle_func);
DWORD* ptr_In_WorldMap = reinterpret_cast<DWORD*>(_In_WorldMap); // moving in WorldMap
DWORD* ptr_info_line = reinterpret_cast<DWORD*>(_info_line);
const DWORD* ptr_interfaceWindow = reinterpret_cast<DWORD*>(_interfaceWindow);
DWORD* ptr_intfaceEnabled = reinterpret_cast<DWORD*>(_intfaceEnabled);
DWORD* ptr_intotal = reinterpret_cast<DWORD*>(_intotal);
TGameObj** ptr_inven_dude = reinterpret_cast<TGameObj**>(_inven_dude);
DWORD* ptr_inven_pid = reinterpret_cast<DWORD*>(_inven_pid);
DWORD* ptr_inven_scroll_dn_bid = reinterpret_cast<DWORD*>(_inven_scroll_dn_bid);
DWORD* ptr_inven_scroll_up_bid = reinterpret_cast<DWORD*>(_inven_scroll_up_bid);
MSGList* ptr_inventry_message_file = reinterpret_cast<MSGList*>(_inventry_message_file);
ItemButtonItem* ptr_itemButtonItems = reinterpret_cast<ItemButtonItem*>(_itemButtonItems); // array of 2 ItemButtonItem
long* ptr_itemCurrentItem = reinterpret_cast<long*>(_itemCurrentItem); // 0 - left, 1 - right
DWORD* ptr_kb_lock_flags = reinterpret_cast<DWORD*>(_kb_lock_flags);
DWORD* ptr_last_buttons = reinterpret_cast<DWORD*>(_last_buttons);
DWORD* ptr_last_button_winID = reinterpret_cast<DWORD*>(_last_button_winID);
DWORD* ptr_last_level = reinterpret_cast<DWORD*>(_last_level);
DWORD* ptr_Level_ = reinterpret_cast<DWORD*>(_Level_);
DWORD* ptr_Lifegiver = reinterpret_cast<DWORD*>(_Lifegiver);
BYTE* ptr_LIGHT_GREY_Color = reinterpret_cast<BYTE*>(_LIGHT_GREY_Color);
DWORD* ptr_lipsFID = reinterpret_cast<DWORD*>(_lipsFID);
DWORD* ptr_list_com = reinterpret_cast<DWORD*>(_list_com);
DWORD* ptr_list_total = reinterpret_cast<DWORD*>(_list_total);
DWORD* ptr_loadingGame = reinterpret_cast<DWORD*>(_loadingGame);
DWORD* ptr_LSData = reinterpret_cast<DWORD*>(_LSData);
DWORD* ptr_lsgwin = reinterpret_cast<DWORD*>(_lsgwin);
TComputeAttack* ptr_main_ctd = reinterpret_cast<TComputeAttack*>(_main_ctd);
DWORD* ptr_main_death_voiceover_done = reinterpret_cast<DWORD*>(_main_death_voiceover_done);
DWORD* ptr_main_window = reinterpret_cast<DWORD*>(_main_window);
DWORD* ptr_map_elevation = reinterpret_cast<DWORD*>(_map_elevation);
long** ptr_map_global_vars = reinterpret_cast<long**>(_map_global_vars); // array
DWORD* ptr_map_number = reinterpret_cast<DWORD*>(_map_number);
PathNode** ptr_master_db_handle = reinterpret_cast<PathNode**>(_master_db_handle);
DWORD* ptr_master_volume = reinterpret_cast<DWORD*>(_master_volume);
DWORD* ptr_max = reinterpret_cast<DWORD*>(_max);
long* ptr_maxScriptNum = reinterpret_cast<long*>(_maxScriptNum);
bool* ptr_Meet_Frank_Horrigan = reinterpret_cast<bool*>(_Meet_Frank_Horrigan);
const char** ptr_movie_list = reinterpret_cast<const char**>(_movie_list); // array of 17 char*
DWORD* ptr_mouse_hotx = reinterpret_cast<DWORD*>(_mouse_hotx);
DWORD* ptr_mouse_hoty = reinterpret_cast<DWORD*>(_mouse_hoty);
DWORD* ptr_mouse_is_hidden = reinterpret_cast<DWORD*>(_mouse_is_hidden);
DWORD* ptr_mouse_x_ = reinterpret_cast<DWORD*>(_mouse_x_);
DWORD* ptr_mouse_y = reinterpret_cast<DWORD*>(_mouse_y);
DWORD* ptr_mouse_y_ = reinterpret_cast<DWORD*>(_mouse_y_);
DWORD* ptr_Mutate_ = reinterpret_cast<DWORD*>(_Mutate_);
DWORD* ptr_name_color = reinterpret_cast<DWORD*>(_name_color);
DWORD* ptr_name_font = reinterpret_cast<DWORD*>(_name_font);
DWORD* ptr_name_sort_list = reinterpret_cast<DWORD*>(_name_sort_list);
DWORD* ptr_num_game_global_vars = reinterpret_cast<DWORD*>(_num_game_global_vars);
DWORD* ptr_num_map_global_vars = reinterpret_cast<DWORD*>(_num_map_global_vars);
DWORD* ptr_num_windows = reinterpret_cast<DWORD*>(_num_windows);
TGameObj** ptr_obj_dude = reinterpret_cast<TGameObj**>(_obj_dude);
DWORD* ptr_objectTable = reinterpret_cast<DWORD*>(_objectTable);
DWORD* ptr_objItemOutlineState = reinterpret_cast<DWORD*>(_objItemOutlineState);
DWORD* ptr_optionRect = reinterpret_cast<DWORD*>(_optionRect);
DWORD* ptr_optionsButtonDown = reinterpret_cast<DWORD*>(_optionsButtonDown);
DWORD* ptr_optionsButtonDown1 = reinterpret_cast<DWORD*>(_optionsButtonDown1);
DWORD* ptr_optionsButtonDownKey = reinterpret_cast<DWORD*>(_optionsButtonDownKey);
DWORD* ptr_optionsButtonUp = reinterpret_cast<DWORD*>(_optionsButtonUp);
DWORD* ptr_optionsButtonUp1 = reinterpret_cast<DWORD*>(_optionsButtonUp1);
DWORD* ptr_optionsButtonUpKey = reinterpret_cast<DWORD*>(_optionsButtonUpKey);
const DWORD* ptr_optnwin = reinterpret_cast<DWORD*>(_optnwin);
DWORD* ptr_outlined_object = reinterpret_cast<DWORD*>(_outlined_object);
DWORD* ptr_partyMemberAIOptions = reinterpret_cast<DWORD*>(_partyMemberAIOptions);
DWORD* ptr_partyMemberCount = reinterpret_cast<DWORD*>(_partyMemberCount);
DWORD** ptr_partyMemberLevelUpInfoList = reinterpret_cast<DWORD**>(_partyMemberLevelUpInfoList);
DWORD** ptr_partyMemberList = reinterpret_cast<DWORD**>(_partyMemberList); // each struct - 4 integers, first integer - objPtr
DWORD* ptr_partyMemberMaxCount = reinterpret_cast<DWORD*>(_partyMemberMaxCount);
DWORD** ptr_partyMemberPidList = reinterpret_cast<DWORD**>(_partyMemberPidList);
char** ptr_patches = reinterpret_cast<char**>(_patches);
PathNode** ptr_paths = reinterpret_cast<PathNode**>(_paths); // array
DWORD* ptr_pc_crit_succ_eff = reinterpret_cast<DWORD*>(_pc_crit_succ_eff);
DWORD* ptr_pc_kill_counts = reinterpret_cast<DWORD*>(_pc_kill_counts);
char* ptr_pc_name = reinterpret_cast<char*>(_pc_name);
DWORD* ptr_pc_proto = reinterpret_cast<DWORD*>(_pc_proto);
BYTE* ptr_PeanutButter = reinterpret_cast<BYTE*>(_PeanutButter);
DWORD* ptr_perk_data = reinterpret_cast<DWORD*>(_perk_data);
int** ptr_perkLevelDataList = reinterpret_cast<int**>(_perkLevelDataList);
const DWORD* ptr_pip_win = reinterpret_cast<DWORD*>(_pip_win);
DWORD* ptr_pipboy_message_file = reinterpret_cast<DWORD*>(_pipboy_message_file);
DWORD* ptr_pipmesg = reinterpret_cast<DWORD*>(_pipmesg);
DWORD* ptr_preload_list_index = reinterpret_cast<DWORD*>(_preload_list_index);
const char** ptr_procTableStrs = reinterpret_cast<const char**>(_procTableStrs); // table of procId (from define.h) => procName map
MSGList* ptr_proto_main_msg_file = reinterpret_cast<MSGList*>(_proto_main_msg_file);
MSGList* ptr_proto_msg_files = reinterpret_cast<MSGList*>(_proto_msg_files); // array of 6 elements
DWORD* ptr_ptable = reinterpret_cast<DWORD*>(_ptable);
DWORD* ptr_pud = reinterpret_cast<DWORD*>(_pud);
DWORD* ptr_queue = reinterpret_cast<DWORD*>(_queue);
DWORD* ptr_quick_done = reinterpret_cast<DWORD*>(_quick_done);
DWORD* ptr_read_callback = reinterpret_cast<DWORD*>(_read_callback);
BYTE* ptr_RedColor = reinterpret_cast<BYTE*>(_RedColor);
DWORD* ptr_retvals = reinterpret_cast<DWORD*>(_retvals);
DWORD* ptr_rotation = reinterpret_cast<DWORD*>(_rotation);
BoundRect* ptr_scr_size = reinterpret_cast<BoundRect*>(_scr_size);
ScriptListInfoItem** ptr_scriptListInfo = reinterpret_cast<ScriptListInfoItem**>(_scriptListInfo); // dynamic array
DWORD* ptr_skill_data = reinterpret_cast<DWORD*>(_skill_data);
const DWORD* ptr_skldxwin = reinterpret_cast<DWORD*>(_skldxwin);
DWORD* ptr_slot_cursor = reinterpret_cast<DWORD*>(_slot_cursor);
DWORD* ptr_sndfx_volume = reinterpret_cast<DWORD*>(_sndfx_volume);
DWORD* ptr_sneak_working = reinterpret_cast<DWORD*>(_sneak_working); // DWORD var
char** ptr_sound_music_path1 = reinterpret_cast<char**>(_sound_music_path1);
char** ptr_sound_music_path2 = reinterpret_cast<char**>(_sound_music_path2);
DWORD* ptr_speech_volume = reinterpret_cast<DWORD*>(_speech_volume);
DWORD* ptr_square = reinterpret_cast<DWORD*>(_square);
DWORD* ptr_squares = reinterpret_cast<DWORD*>(_squares);
DWORD* ptr_stack = reinterpret_cast<DWORD*>(_stack);
DWORD* ptr_stack_offset = reinterpret_cast<DWORD*>(_stack_offset);
DWORD* ptr_stat_data = reinterpret_cast<DWORD*>(_stat_data);
DWORD* ptr_stat_flag = reinterpret_cast<DWORD*>(_stat_flag);
DWORD* ptr_sWindows = reinterpret_cast<DWORD*>(_sWindows); // total 16 sWindow struct
DWORD* ptr_Tag_ = reinterpret_cast<DWORD*>(_Tag_);
DWORD* ptr_tag_skill = reinterpret_cast<DWORD*>(_tag_skill);
DWORD* ptr_target_curr_stack = reinterpret_cast<DWORD*>(_target_curr_stack);
DWORD** ptr_target_pud = reinterpret_cast<DWORD**>(_target_pud);
DWORD* ptr_target_stack = reinterpret_cast<DWORD*>(_target_stack); // array of 10 DWORD
DWORD* ptr_target_stack_offset = reinterpret_cast<DWORD*>(_target_stack_offset); // array of 10 DWORD
DWORD* ptr_target_str = reinterpret_cast<DWORD*>(_target_str);
DWORD* ptr_target_xpos = reinterpret_cast<DWORD*>(_target_xpos);
DWORD* ptr_target_ypos = reinterpret_cast<DWORD*>(_target_ypos);
DWORD* ptr_text_char_width = reinterpret_cast<DWORD*>(_text_char_width);
DWORD* ptr_text_height = reinterpret_cast<DWORD*>(_text_height);
DWORD* ptr_text_max = reinterpret_cast<DWORD*>(_text_max);
DWORD* ptr_text_mono_width = reinterpret_cast<DWORD*>(_text_mono_width);
DWORD* ptr_text_object_index = reinterpret_cast<DWORD*>(_text_object_index);
FloatText** ptr_text_object_list = reinterpret_cast<FloatText**>(_text_object_list); // array of 20 FloatText*
DWORD* ptr_text_spacing = reinterpret_cast<DWORD*>(_text_spacing);
DWORD* ptr_text_to_buf = reinterpret_cast<DWORD*>(_text_to_buf);
DWORD* ptr_text_width = reinterpret_cast<DWORD*>(_text_width);
DWORD* ptr_tile = reinterpret_cast<DWORD*>(_tile);
DWORD* ptr_title_color = reinterpret_cast<DWORD*>(_title_color);
DWORD* ptr_title_font = reinterpret_cast<DWORD*>(_title_font);
DWORD* ptr_trait_data = reinterpret_cast<DWORD*>(_trait_data);
DWORD* ptr_view_page = reinterpret_cast<DWORD*>(_view_page);
DWORD* ptr_wd_obj = reinterpret_cast<DWORD*>(_wd_obj);
WINinfo** ptr_window = reinterpret_cast<WINinfo**>(_window); // array of 50 WINinfo*
BYTE* ptr_WhiteColor = reinterpret_cast<BYTE*>(_WhiteColor);
DWORD* ptr_wmAreaInfoList = reinterpret_cast<DWORD*>(_wmAreaInfoList);
const DWORD* ptr_wmBkWin = reinterpret_cast<DWORD*>(_wmBkWin);
BYTE** ptr_wmBkWinBuf = reinterpret_cast<BYTE**>(_wmBkWinBuf);
DWORD* ptr_wmLastRndTime = reinterpret_cast<DWORD*>(_wmLastRndTime);
MSGList* ptr_wmMsgFile = reinterpret_cast<MSGList*>(_wmMsgFile);
DWORD* ptr_wmNumHorizontalTiles = reinterpret_cast<DWORD*>(_wmNumHorizontalTiles);
long* ptr_wmWorldOffsetX = reinterpret_cast<long*>(_wmWorldOffsetX);
long* ptr_wmWorldOffsetY = reinterpret_cast<long*>(_wmWorldOffsetY);
DWORD* ptr_world_xpos = reinterpret_cast<DWORD*>(_world_xpos);
DWORD* ptr_world_ypos = reinterpret_cast<DWORD*>(_world_ypos);
DWORD* ptr_WorldMapCurrArea = reinterpret_cast<DWORD*>(_WorldMapCurrArea);
BYTE* ptr_YellowColor = reinterpret_cast<BYTE*>(_YellowColor);
/**
+1 -1
View File
@@ -487,7 +487,7 @@ extern DWORD* ptr_retvals;
extern DWORD* ptr_rotation;
extern DWORD* ptr_sad;
extern BoundRect* ptr_scr_size;
extern DWORD* ptr_scriptListInfo;
extern ScriptListInfoItem** ptr_scriptListInfo; // dynamic array
extern DWORD* ptr_skill_data;
extern const DWORD* ptr_skldxwin;
extern DWORD* ptr_slot_cursor;
+6
View File
@@ -455,6 +455,12 @@ struct PremadeChar {
char unknown[20];
};
#pragma pack(1)
struct ScriptListInfoItem {
char fileName[16];
long numLocalVars;
};
//for holding window info
#pragma pack(1)
struct WINinfo {
+4 -8
View File
@@ -22,7 +22,6 @@
#include "main.h"
#include "FalloutEngine.h"
#include "HookScripts.h"
#include "Inventory.h"
#include "LoadGameHook.h"
#include "Logging.h"
#include "PartyControl.h"
@@ -876,21 +875,18 @@ skip:
}
}
DWORD __stdcall KeyPressHook(DWORD dxKey, bool pressed, DWORD vKey) {
void __stdcall KeyPressHook(DWORD* dxKey, bool pressed, DWORD vKey) {
if (!IsGameLoaded()) {
return 0;
return;
}
DWORD result = 0;
BeginHook();
argCount = 3;
args[0] = (DWORD)pressed;
args[1] = dxKey;
args[1] = *dxKey;
args[2] = vKey;
RunHookScript(HOOK_KEYPRESS);
if (cRet != 0) dxKey = result = rets[0];
InventoryKeyPressedHook(dxKey, pressed);
if (cRet != 0) *dxKey = rets[0];
EndHook();
return result;
}
void __stdcall MouseClickHook(DWORD button, bool pressed) {
+1 -1
View File
@@ -66,7 +66,7 @@ extern DWORD initingHookScripts;
int __fastcall AmmoCostHook_Script(DWORD hookType, TGameObj* weapon, DWORD &rounds);
void __stdcall RunHookScriptsAtProc(DWORD procId);
DWORD __stdcall KeyPressHook(DWORD dxKey, bool pressed, DWORD vKey);
void __stdcall KeyPressHook(DWORD* dxKey, bool pressed, DWORD vKey);
void __stdcall MouseClickHook(DWORD button, bool pressed);
long __stdcall CorrectFidForRemovedItem_wHook(TGameObj* critter, TGameObj* item, long flags);
+19 -16
View File
@@ -23,14 +23,15 @@
#include <queue>
#include "main.h"
#include "FalloutEngine.h"
#include "Graphics.h"
#include "ScriptExtender.h"
#include "HookScripts.h"
#include "InputFuncs.h"
#include "DebugEditor.h"
#include "Logging.h"
#include "FalloutEngine.h"
#include "DebugEditor.h"
#include "Graphics.h"
#include "HookScripts.h"
#include "Inventory.h"
#include "ScriptExtender.h"
#include "InputFuncs.h"
typedef HRESULT (__stdcall *DInputCreateProc)(HINSTANCE a,DWORD b,IDirectInputA** c,IUnknown* d);
@@ -58,8 +59,6 @@ static int mouseY;
static DWORD forcingGraphicsRefresh = 0;
static DWORD debugEditorKey = 0;
void __stdcall ForceGraphicsRefresh(DWORD d) {
forcingGraphicsRefresh = (d == 0) ? 0 : 1;
}
@@ -90,6 +89,11 @@ void SetMPos(int x, int y) {
MPMouseY = y;
}
void FlushInputBuffer() {
while (!bufferedPresses.empty()) bufferedPresses.pop();
__asm call kb_clear_;
}
DWORD __stdcall KeyDown(DWORD key) {
if ((key & 0x80000000) > 0) { // special flag to check by VK code directly
return GetAsyncKeyState(key & 0xFFFF) & 0x8000;
@@ -262,20 +266,21 @@ public:
if (!buf || bufferedPresses.empty() || (d & DIGDD_PEEK)) {
HRESULT hr = RealDevice->GetDeviceData(a, buf, count, d);
if (FAILED(hr) || !buf || !(*count)) return hr;
DWORD keyOverride;
for (DWORD i = 0; i < *count; i++) {
DWORD dxKey = buf[i].dwOfs;
DWORD state = buf[i].dwData & 0x80;
DWORD oldState = keysDown[dxKey];
keysDown[dxKey] = state;
keyOverride = KeyPressHook(dxKey, (state > 0), MapVirtualKeyEx(dxKey, MAPVK_VSC_TO_VK, keyboardLayout));
if (keyOverride != 0) {
KeyPressHook(&dxKey, (state > 0), MapVirtualKeyEx(dxKey, MAPVK_VSC_TO_VK, keyboardLayout));
if (dxKey > 0 && dxKey != buf[i].dwOfs) {
keysDown[buf[i].dwOfs] = oldState;
buf[i].dwOfs = keyOverride;
buf[i].dwOfs = dxKey; // Override key
keysDown[buf[i].dwOfs] = state;
}
// OnKeyPressed
InventoryKeyPressedHook(buf[i].dwOfs, (state > 0));
DebugEditorKeyPressedHook(buf[i].dwOfs, (state > 0));
}
if (keysDown[debugEditorKey]) RunDebugEditor();
return hr;
}
//Despite passing an array of 32 data objects, fallout cant seem to cope with a key being pressed and released in the same frame...
@@ -428,8 +433,6 @@ HRESULT __stdcall FakeDirectInputCreate(HINSTANCE a, DWORD b, IDirectInputA** c,
backgroundKeyboard = GetConfigInt("Input", "BackgroundKeyboard", 0) != 0;
backgroundMouse = GetConfigInt("Input", "BackgroundMouse", 0) != 0;
if (isDebug) debugEditorKey = GetConfigInt("Input", "DebugEditorKey", 0);
keyboardLayout = GetKeyboardLayout(0);
return hr;
+1
View File
@@ -26,6 +26,7 @@ extern bool middleMouseDown;
void SetMDown(bool down, bool right);
void SetMPos(int x, int y);
void FlushInputBuffer();
DWORD __stdcall KeyDown(DWORD key);
void __stdcall TapKey(DWORD key);
+1 -1
View File
@@ -1303,7 +1303,7 @@ sScriptProgram* GetGlobalScriptProgram(DWORD scriptPtr) {
bool __stdcall IsGameScript(const char* filename) {
for (int i = 0; filename[i]; ++i) if (i > 8) return false;
for (int i = 0; i < *ptr_maxScriptNum; i++) {
if (strcmp(filename, (char*)(*ptr_scriptListInfo + i * 20)) == 0) return true;
if (strcmp(filename, (*ptr_scriptListInfo)[i].fileName) == 0) return true;
}
return false;
}