diff Engine/mm7_data.h @ 2499:68cdef6879a0

engine folder
author Ritor1
date Fri, 19 Sep 2014 02:57:42 +0600
parents
children 407263babde8
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Engine/mm7_data.h	Fri Sep 19 02:57:42 2014 +0600
@@ -0,0 +1,791 @@
+#pragma once
+#include <string>
+#include "VectorTypes.h"
+#include "OSAPI.h"
+#include <array>
+#include <assert.h>
+#include "NZIArray.h"
+
+//typedef char _UNKNOWN;
+typedef unsigned int uint;
+
+
+inline void __fastcall memset32(void *ptr, unsigned __int32 value, int count)
+{
+	unsigned __int32* p = (unsigned __int32 *)ptr;
+	for (int i = 0; i < count; i++)
+		*p++ = value;
+}
+
+
+
+
+
+
+
+
+
+
+
+#if defined(__GNUC__)
+  typedef          long long ll;
+  typedef unsigned long long ull;
+  #define __int64 long long
+  #define __int32 int
+  #define __int16 short
+  #define __int8  char
+  #define MAKELL(num) num ## LL
+  #define FMT_64 "ll"
+#elif defined(_MSC_VER)
+  typedef          __int64 ll;
+  typedef unsigned __int64 ull;
+  #define MAKELL(num) num ## i64
+  #define FMT_64 "I64"
+#elif defined (__BORLANDC__)
+  typedef          __int64 ll;
+  typedef unsigned __int64 ull;
+  #define MAKELL(num) num ## i64
+  #define FMT_64 "L"
+#else
+  #error "unknown compiler"
+#endif
+typedef unsigned int uint;
+typedef unsigned char uchar;
+typedef unsigned short ushort;
+typedef unsigned long ulong;
+
+typedef          char   int8;
+typedef   signed char   sint8;
+typedef unsigned char   uint8;
+typedef          short  int16;
+typedef   signed short  sint16;
+typedef unsigned short  uint16;
+typedef          int    int32;
+typedef   signed int    sint32;
+typedef unsigned int    uint32;
+typedef ll              int64;
+typedef ll              sint64;
+typedef ull             uint64;
+
+// Partially defined types:
+#define _BYTE  uint8
+#define _WORD  uint16
+#define _DWORD uint32
+#define _QWORD uint64
+#if !defined(_MSC_VER)
+#define _LONGLONG __int128
+#endif
+
+#ifndef _WINDOWS_
+typedef int8 BYTE;
+typedef int16 WORD;
+typedef int32 DWORD;
+typedef int32 LONG;
+#endif
+typedef int64 QWORD;
+#ifndef __cplusplus
+typedef int bool;       // we want to use bool in our C programs
+#endif
+
+// Some convenience macros to make partial accesses nicer
+// first unsigned macros:
+#ifdef HIBYTE
+#undef HIBYTE
+#endif // HIBYTE
+#ifdef HIWORD
+#undef HIWORD
+#endif // HIWORD
+#ifdef LOBYTE
+#undef LOBYTE
+#endif // LOBYTE
+#ifdef LOWORD
+#undef LOWORD
+#endif // LOWORD
+
+#define LOBYTE(x)   (*((_BYTE*)&(x)))   // low byte
+#define LOWORD(x)   (*((_WORD*)&(x)))   // low word
+#define LODWORD(x)  (*((_DWORD*)&(x)))  // low dword
+#define HIBYTE(x)   (*((_BYTE*)&(x)+1))
+#define HIWORD(x)   (*((_WORD*)&(x)+1))
+#define HIDWORD(x)  (*((_DWORD*)&(x)+1))
+#define BYTEn(x, n)   (*((_BYTE*)&(x)+n))
+#define WORDn(x, n)   (*((_WORD*)&(x)+n))
+#define BYTE1(x)   BYTEn(x,  1)         // byte 1 (counting from 0)
+#define BYTE2(x)   BYTEn(x,  2)
+#define BYTE3(x)   BYTEn(x,  3)
+#define BYTE4(x)   BYTEn(x,  4)
+#define BYTE5(x)   BYTEn(x,  5)
+#define BYTE6(x)   BYTEn(x,  6)
+#define BYTE7(x)   BYTEn(x,  7)
+#define BYTE8(x)   BYTEn(x,  8)
+#define BYTE9(x)   BYTEn(x,  9)
+#define BYTE10(x)  BYTEn(x, 10)
+#define BYTE11(x)  BYTEn(x, 11)
+#define BYTE12(x)  BYTEn(x, 12)
+#define BYTE13(x)  BYTEn(x, 13)
+#define BYTE14(x)  BYTEn(x, 14)
+#define BYTE15(x)  BYTEn(x, 15)
+#define WORD1(x)   WORDn(x,  1)
+#define WORD2(x)   WORDn(x,  2)         // third word of the object, unsigned
+#define WORD3(x)   WORDn(x,  3)
+#define WORD4(x)   WORDn(x,  4)
+#define WORD5(x)   WORDn(x,  5)
+#define WORD6(x)   WORDn(x,  6)
+#define WORD7(x)   WORDn(x,  7)
+
+// now signed macros (the same but with sign extension)
+#define SLOBYTE(x)   (*((int8*)&(x)))
+#define SLOWORD(x)   (*((int16*)&(x)))
+#define SLODWORD(x)  (*((int32*)&(x)))
+#define SHIBYTE(x)   (*((int8*)&(x)+1))
+#define SHIWORD(x)   (*((int16*)&(x)+1))
+#define SHIDWORD(x)  (*((int32*)&(x)+1))
+#define SBYTEn(x, n)   (*((int8*)&(x)+n))
+#define SWORDn(x, n)   (*((int16*)&(x)+n))
+#define SBYTE1(x)   SBYTEn(x,  1)
+#define SBYTE2(x)   SBYTEn(x,  2)
+#define SBYTE3(x)   SBYTEn(x,  3)
+#define SBYTE4(x)   SBYTEn(x,  4)
+#define SBYTE5(x)   SBYTEn(x,  5)
+#define SBYTE6(x)   SBYTEn(x,  6)
+#define SBYTE7(x)   SBYTEn(x,  7)
+#define SBYTE8(x)   SBYTEn(x,  8)
+#define SBYTE9(x)   SBYTEn(x,  9)
+#define SBYTE10(x)  SBYTEn(x, 10)
+#define SBYTE11(x)  SBYTEn(x, 11)
+#define SBYTE12(x)  SBYTEn(x, 12)
+#define SBYTE13(x)  SBYTEn(x, 13)
+#define SBYTE14(x)  SBYTEn(x, 14)
+#define SBYTE15(x)  SBYTEn(x, 15)
+#define SWORD1(x)   SWORDn(x,  1)
+#define SWORD2(x)   SWORDn(x,  2)
+#define SWORD3(x)   SWORDn(x,  3)
+#define SWORD4(x)   SWORDn(x,  4)
+#define SWORD5(x)   SWORDn(x,  5)
+#define SWORD6(x)   SWORDn(x,  6)
+#define SWORD7(x)   SWORDn(x,  7)
+
+
+
+// Generate a reference to pair of operands
+template<class T>  int16 __PAIR__( int8  high, T low) { return ((( int16)high) << sizeof(high)*8) | uint8(low); }
+template<class T>  int32 __PAIR__( int16 high, T low) { return ((( int32)high) << sizeof(high)*8) | uint16(low); }
+template<class T>  int64 __PAIR__( int32 high, T low) { return ((( int64)high) << sizeof(high)*8) | uint32(low); }
+template<class T> uint16 __PAIR__(uint8  high, T low) { return (((uint16)high) << sizeof(high)*8) | uint8(low); }
+template<class T> uint32 __PAIR__(uint16 high, T low) { return (((uint32)high) << sizeof(high)*8) | uint16(low); }
+template<class T> uint64 __PAIR__(uint32 high, T low) { return (((uint64)high) << sizeof(high)*8) | uint32(low); }
+
+// rotate left
+template<class T> T __ROL__(T value, uint count)
+{
+  const uint nbits = sizeof(T) * 8;
+  count %= nbits;
+
+  T high = value >> (nbits - count);
+  value <<= count;
+  value |= high;
+  return value;
+}
+
+// rotate right
+template<class T> T __ROR__(T value, uint count)
+{
+  const uint nbits = sizeof(T) * 8;
+  count %= nbits;
+
+  T low = value << (nbits - count);
+  value >>= count;
+  value |= low;
+  return value;
+}
+
+// carry flag of left shift
+template<class T> int8 __MKCSHL__(T value, uint count)
+{
+  const uint nbits = sizeof(T) * 8;
+  count %= nbits;
+
+  return (value >> (nbits-count)) & 1;
+}
+
+// carry flag of right shift
+template<class T> int8 __MKCSHR__(T value, uint count)
+{
+  return (value >> (count-1)) & 1;
+}
+
+// sign flag
+template<class T> int8 __SETS__(T x)
+{
+  if ( sizeof(T) == 1 )
+    return int8(x) < 0;
+  if ( sizeof(T) == 2 )
+    return int16(x) < 0;
+  if ( sizeof(T) == 4 )
+    return int32(x) < 0;
+  return int64(x) < 0;
+}
+
+// overflow flag of subtraction (x-y)
+template<class T, class U> int8 __OFSUB__(T x, U y)
+{
+  if ( sizeof(T) < sizeof(U) )
+  {
+    U x2 = x;
+    int8 sx = __SETS__(x2);
+    return (sx ^ __SETS__(y)) & (sx ^ __SETS__(x2-y));
+  }
+  else
+  {
+    T y2 = y;
+    int8 sx = __SETS__(x);
+    return (sx ^ __SETS__(y2)) & (sx ^ __SETS__(x-y2));
+  }
+}
+
+// overflow flag of addition (x+y)
+template<class T, class U> int8 __OFADD__(T x, U y)
+{
+  if ( sizeof(T) < sizeof(U) )
+  {
+    U x2 = x;
+    int8 sx = __SETS__(x2);
+    return ((1 ^ sx) ^ __SETS__(y)) & (sx ^ __SETS__(x2+y));
+  }
+  else
+  {
+    T y2 = y;
+    int8 sx = __SETS__(x);
+    return ((1 ^ sx) ^ __SETS__(y2)) & (sx ^ __SETS__(x+y2));
+  }
+}
+
+// carry flag of subtraction (x-y)
+template<class T, class U> int8 __CFSUB__(T x, U y)
+{
+  int size = sizeof(T) > sizeof(U) ? sizeof(T) : sizeof(U);
+  if ( size == 1 )
+    return uint8(x) < uint8(y);
+  if ( size == 2 )
+    return uint16(x) < uint16(y);
+  if ( size == 4 )
+    return uint32(x) < uint32(y);
+  return uint64(x) < uint64(y);
+}
+
+// carry flag of addition (x+y)
+template<class T, class U> int8 __CFADD__(T x, U y)
+{
+  int size = sizeof(T) > sizeof(U) ? sizeof(T) : sizeof(U);
+  if ( size == 1 )
+    return uint8(x) > uint8(x+y);
+  if ( size == 2 )
+    return uint16(x) > uint16(x+y);
+  if ( size == 4 )
+    return uint32(x) > uint32(x+y);
+  return uint64(x) > uint64(x+y);
+}
+
+
+//-------------------------------------------------------------------------
+// Data declarations
+
+extern int game_starting_year;
+extern unsigned int game_viewport_width;
+extern unsigned int game_viewport_height;
+extern int game_viewport_x;
+extern int game_viewport_y;
+extern int game_viewport_z;
+extern int game_viewport_w;
+
+extern int pWindowList_at_506F50_minus1_indexing[1];
+extern int dword_4C9890[10]; // weak
+extern int dword_4C9920[16]; // weak
+extern char byte_4D864C; // weak
+extern float flt_4D86CC; // weak
+extern int dword_4D86D8; // weak
+
+
+extern float flt_4D84E8;
+
+extern int pCurrentScreen; // 004E28F8
+extern unsigned int uGammaPos;
+extern std::array<int, 8> BtnTurnCoord;
+extern std::array<__int16, 4> RightClickPortraitXmin;
+extern std::array<__int16, 4> RightClickPortraitXmax;
+//extern int pArmorSkills[5];
+//extern int pWeaponSkills[9];
+//extern int pMiscSkills[12];
+//extern int pMagicSkills[9];
+extern std::array<unsigned int, 4> pHealthBarPos;
+extern std::array<unsigned int, 4> pManaBarPos;
+//extern std::array<char, 80> _4E2B21_buff_spell_tooltip_colors;
+extern std::array<char, 88>  monster_popup_y_offsets; // weak
+extern unsigned char hourglass_icon_idx; // weak
+
+
+extern const char *format_4E2D80;
+extern char format_4E2D90[8];
+extern const char *format_4E2DE8; // idb
+extern const char *Stat_string_format_2_column_text;
+extern const char *Stat_string_format_2_column_less_100; // format text of resistance in Stats screen
+extern const char *Stat_string_format_2_column_over_100;
+extern int dword_4E455C; // weak
+extern std::array<int, 6> dword_4E4560;
+extern std::array<int, 6> dword_4E4578;
+extern std::array<int, 6> dword_4E4590;
+extern std::array<int, 6> dword_4E45A8;
+extern std::array<float, 10> flt_4E4A80;
+
+extern std::array< std::array<int, 2>, 14> pPartySpellbuffsUI_XYs;
+extern std::array<unsigned char, 14> byte_4E5DD8; // weak
+extern std::array<unsigned __int8, 14> pPartySpellbuffsUI_smthns;
+extern std::array< std::array<int, 6>, 6> pNPCPortraits_x; // 004E5E50
+extern std::array< std::array<int, 6>, 6> pNPCPortraits_y; // 004E5EE0
+extern std::array<const char *, 11> pHouse_ExitPictures;
+extern std::array<const char *, 11> _4E6BDC_loc_names;
+extern std::array<__int16, 11> word_4E8152;
+extern std::array< std::array<char, 14>, 7> byte_4E8168;
+extern char _4E94D0_light_type; // weak
+extern char _4E94D2_light_type; // weak
+extern char _4E94D3_light_type; // weak
+extern std::array<unsigned int, 2> saveload_dlg_xs;
+extern std::array<unsigned int, 2> saveload_dlg_ys;
+extern std::array<unsigned int, 2> saveload_dlg_zs;
+extern std::array<unsigned int, 2> saveload_dlg_ws;
+extern int dword_4E98BC_bApplicationActive; // weak
+extern std::array<char*, 465> pTransitionStrings; // 4EB080
+extern std::array<int, 9> dword_4EC268; // weak
+extern std::array<int, 7> dword_4EC28C; // weak
+extern std::array<const char*, 25> pPlayerPortraitsNames;
+
+extern std::array< std::array<unsigned char, 25>, 48> byte_4ECF08;
+extern std::array<std::array<unsigned char, 8>, 110> SoundSetAction; // weak
+extern std::array<__int16, 4> pPlayerPortraitsXCoords_For_PlayerBuffAnimsDrawing;
+extern std::array< std::array<char, 37>, 36> byte_4ED970_skill_learn_ability_by_class_table;
+extern std::array<unsigned int, 2> pHiredNPCsIconsOffsetsX;
+extern std::array<unsigned int, 2> pHiredNPCsIconsOffsetsY;
+extern std::array<int, 2> Party_Spec_Motion_status_ids; //dword_4EE07C
+extern std::array<__int16, 101> word_4EE088_sound_ids; // weak
+extern std::array<short, 28> word_4EE150;
+extern int ScreenshotFileNumber; // dword_4EFA80
+extern std::array<const char *, 19> off_4F03B8; // idb
+extern __int16 word_4F0576[]; // weak
+
+extern std::array<int, 32> guild_mambership_flags;
+extern std::array<__int16, 49> word_4F0754;
+extern std::array<__int16, 54> _4F0882_evt_VAR_PlayerItemInHands_vals;
+extern std::array<unsigned short, 6> pMaxLevelPerTrainingHallType;
+extern std::array<int, 11> price_for_membership; // weak
+extern std::array<__int16, 32> word_4F0F30; // weak
+extern std::array<int, 500> ai_array_4F5E68;
+extern std::array<int, 500> ai_array_4F6638_actor_ids;
+extern std::array<int, 500> ai_near_actors_targets_pid;
+extern int ai_arrays_size; // weak
+extern std::array<int, 500> ai_near_actors_distances;
+extern std::array<unsigned int, 500> ai_near_actors_ids;
+extern std::array<int, 182> dword_4F8580; // weak
+extern int dword_4FA9B0[]; // weak
+extern int dword_4FA9B4[]; // weak
+
+extern char byte_4FAA24; // weak
+//extern HWND dword_4FAA28; // idb
+
+extern std::array<unsigned int, 480> pSRZBufferLineOffsets;
+extern int areWeLoadingTexture; // weak
+extern std::array<char, 777> books_num_items_per_page; // weak
+extern int lloyds_beacon_spell_id; // dword_506338
+extern int lloyds_beacon_sound_id; // dword_50633C
+extern signed int sRecoveryTime; // idb
+extern unsigned int uRequiredMana; // idb
+extern int _506348_current_lloyd_playerid; // weak
+extern __int64 lloyds_beacon_spell_level; // qword_506350
+extern char byte_506360; // weak
+extern int dword_506364; // weak
+//extern Texture *dword_50640C[]; // weak
+extern unsigned int uExitCancelTextureId;
+extern int books_page_number; // number for page in books(номер страницы в книгах)
+extern int books_primary_item_per_page; // number primary item in book page(номер начальной записи на странице)
+extern int Autonotes_Instructors_page_flag; // dword_50652C
+extern int Autonotes_Misc_page_flag; //dword_506530
+extern int Book_PageBtn6_flag; //dword_506534
+extern int Book_PageBtn5_flag; //dword_506538
+extern int Book_PageBtn4_flag; //dword_50653C
+extern int Book_PageBtn3_flag; //dword_506540
+extern int BtnDown_flag; //BtnDown_flag
+extern int BtnUp_flag; //BtnUp_flag
+extern int quick_spell_at_page; // weak
+extern char byte_506550; // weak
+extern std::array<const char *, 5> aMoonPhaseNames;
+extern int _506568_autonote_type; // 506568
+extern char bRecallingBeacon; // weak
+extern int uLastPointedObjectID; // weak
+//extern unsigned __int8 bMonsterInfoUI_bDollInitialized;
+extern std::array<const char *, 44> aSpellNames;
+extern int pMainScreenNum; // weak
+extern int dword_506980_uW; // weak
+extern int dword_506984_uZ; // weak
+extern int dword_506988_uY; // weak
+extern int dword_50698C_uX; // weak
+extern int uGameMenuUI_CurentlySelectedKeyIdx; // 506E68
+extern std::array<bool, 28> GameMenuUI_InvaligKeyBindingsFlags; // 506E6C
+extern std::array<unsigned int, 28> pPrevVirtualCidesMapping;
+extern int KeyboardPageNum; // weak
+extern int uRestUI_FoodRequiredToRest;
+extern int dword_506F14; // weak
+extern int _506F18_num_minutes_to_sleep; // weak
+extern int dword_506F1C; // weak
+extern std::array<int, 20> pVisibleWindowsIdxs; // weak
+extern int uNumVisibleWindows;
+extern char bFlashHistoryBook; // weak
+extern char bFlashAutonotesBook; // weak
+extern char bFlashQuestBook; // weak
+extern int uTextureID_PlayerBuff_PainReflection; // weak
+extern int uTextureID_PlayerBuff_Hammerhands; // weak
+extern int uTextureID_PlayerBuff_Preservation; // weak
+extern int uTextureID_PlayerBuff_Bless; // weak
+extern int uTextureID_Btn_QuickReference; // weak
+extern int uTextureID_Compas; // dword_5079B4
+extern int dword_5079C8; // weak
+extern int dword_5079CC; // weak
+extern int dword_5079D0; // weak
+extern int uTextureID_Minimap_Loop; // dword_5079D8
+extern struct GUIButton *pBtn_ZoomOut; // idb
+extern struct GUIButton *pBtn_ZoomIn; // idb
+extern unsigned int uGameUIFontShadow;
+extern unsigned int uGameUIFontMain;
+extern int dword_507B00_spell_info_to_draw_in_popup; // weak
+extern std::array<const char *, 12> aMonthNames;
+extern std::array<const char *, 7> aDayNames;
+extern std::array<const char *, 9> aSpellSchoolNames;
+extern std::array<const char *, 7> aAttributeNames;
+extern unsigned int uActiveCharacter;
+extern int dword_507BF0_is_there_popup_onscreen; // weak
+extern int awards_scroll_bar_created; // weak
+extern int dword_507CC0_activ_ch; // weak
+extern __int64 GameUI_RightPanel_BookFlashTimer; // weak
+extern int _507CD4_RestUI_hourglass_anim_controller; // weak
+extern bool OpenedTelekinesis; // weak
+extern std::array<int, 50> dword_50B570; // weak
+extern std::array<int, 50> dword_50B638; // weak
+extern struct stru367 PortalFace;
+extern std::array<int, 100> dword_50BC10; // weak
+extern std::array<int, 100> dword_50BDA0; // weak
+extern std::array<int, 100> _50BF30_actors_in_viewport_ids; // weak
+extern char town_portal_caster_id; // weak
+extern int some_active_character; // weak
+extern std::array<unsigned int, 5> pIconIDs_Turn;
+extern unsigned int uIconID_TurnStop;
+extern unsigned int uIconID_TurnHour;
+extern int uIconID_CharacterFrame; // idb
+extern unsigned int uIconID_TurnStart;
+extern int dword_50C994; // weak
+extern int dword_50C998_turnbased_icon_1A; // weak
+extern int uSpriteID_Spell11; // idb
+extern bool _50C9A0_IsEnchantingInProgress; // weak
+extern int _50C9A8_item_enchantment_timer; // weak
+extern int _50C9D0_AfterEnchClickEventId; // weak
+extern int _50C9D4_AfterEnchClickEventSecondParam; // weak
+extern int _50C9D8_AfterEnchClickEventTimeout; // weak
+extern int dword_50C9DC; // weak
+extern struct NPCData *ptr_50C9E0;
+//extern int dword_50C9E8; // idb
+//extern int dword_50C9EC[]; // 50C9EC
+extern int dword_50CDC8;
+extern Vec3_int_ layingitem_vel_50FDFC;
+extern char pStartingMapName[32]; // idb
+extern std::array<unsigned __int8, 5> IsPlayerWearingWatersuit;
+extern std::array<char, 54> party_has_equipment;
+extern std::array<char, 17> byte_5111F6_OwnedArtifacts;
+extern std::array<unsigned int, 16> papredoll_dbrds;
+
+extern int bRingsShownInCharScreen; // weak
+
+extern unsigned int uNumBlueFacesInBLVMinimap;
+extern std::array<unsigned __int16, 50> pBlueFacesInBLVMinimapIDs;
+extern std::array<int, 14> pTextureIDs_PartyBuffIcons;
+extern unsigned int uIconIdx_FlySpell;
+extern unsigned int uIconIdx_WaterWalk;
+extern int dword_576E28; // weak
+extern int _576E2C_current_minimap_zoom; // weak
+extern __int64 _5773B8_event_timer; // weak
+
+extern int dword_591084; // weak
+extern struct Actor *pDialogue_SpeakingActor;
+extern unsigned int uDialogueType;
+extern signed int sDialogue_SpeakingActorNPC_ID;
+extern struct LevelDecoration *_591094_decoration;
+extern std::array<char, 200> sHouseName; // idb
+extern int uCurrentHouse_Animation; // weak
+extern char *dword_591164_teleport_map_name; // idb
+extern int dword_591168_teleport_speedz; // weak
+extern int dword_59116C_teleport_directionx; // weak
+extern int dword_591170_teleport_directiony; // weak
+extern int dword_591174_teleportz; // weak
+extern int dword_591178_teleporty; // weak
+extern int dword_59117C_teleportx; // weak
+extern std::array<std::array<char, 100>, 6> byte_591180; // idb
+extern std::array<struct NPCData *, 7> HouseNPCData; //0this array size temporarily increased to 60 from 6 to work aroud house overflow
+extern GUIButton* HouseNPCPortraitsButtonsList[6];
+extern struct Texture *pTexture_591428;
+extern struct Texture *pTexture_outside; // idb
+extern struct Texture *pTexture_Dialogue_Background;
+extern std::array<char, 2000> byte_5B0938;
+extern int EvtTargetObj; // weak
+extern int _unused_5B5924_is_travel_ui_drawn; // 005B5924
+extern int _5B65A8_npcdata_uflags_or_other; // weak
+extern int _5B65AC_npcdata_fame_or_other; // weak
+extern int _5B65B0_npcdata_rep_or_other; // weak
+extern int _5B65B4_npcdata_loword_house_or_other; // weak
+extern int _5B65B8_npcdata_hiword_house_or_other; // weak
+extern int dword_5B65BC; // weak
+extern int dword_5B65C0; // weak
+extern int dword_5B65C4_cancelEventProcessing; // weak
+extern int MapsLongTimers_count; // dword_5B65C8
+extern int npcIdToDismissAfterDialogue; // weak
+extern int dword_5B65D0_dialogue_actor_npc_id; // weak
+extern int dword_5C3418; // weak
+extern int dword_5C341C; // weak
+//extern std::array<char, 777> byte_5C3427; // weak
+extern std::array<char, 200> GameUI_Footer_TimedString;
+extern std::array<char, 200> pFooterString;
+extern unsigned int GameUI_Footer_TimeLeft;
+extern int bForceDrawFooter; // weak
+extern int _5C35C0_force_party_death; // weak
+extern int bDialogueUI_InitializeActor_NPC_ID; // weak
+extern char *p2DEventsTXT_Raw;
+
+extern int dword_5C35D4; // weak
+extern std::array<const char *, 2> aAMPMNames;
+extern char byte_5C45AF[]; // weak
+extern std::array<char, 10000> pTmpBuf3;
+extern std::array<char, 4096> pFinalMessage; // idb
+extern std::array<char, 2000> pTmpBuf;
+extern std::array<char, 2000> pTmpBuf2;
+extern std::array<char, 100> Journal_limitation_factor; // weak
+extern int ui_current_text_color; // weak
+extern __int64 qword_5C6DF0; // weak
+extern int dword_5C6DF8; // weak
+extern std::array<char, 104> item__getname_buffer; // idb
+extern std::array<char *, 36> pClassDescriptions;
+extern std::array<char *, 7> pAttributeDescriptions;
+extern std::array<char *, 38> pGrandSkillDesc;
+extern std::array<char *, 38> pMasterSkillDesc;
+extern std::array<char *, 38> pExpertSkillDesc;
+extern std::array<char *, 38> pNormalSkillDesc;
+extern std::array<char *, 38> pSkillDesc;
+extern char *pHealthPointsAttributeDescription;
+extern char *pSpellPointsAttributeDescription;
+extern char *pArmourClassAttributeDescription;
+extern char *pPlayerConditionAttributeDescription; // idb
+extern char *pFastSpellAttributeDescription;
+extern char *pPlayerAgeAttributeDescription;
+extern char *pPlayerLevelAttributeDescription;
+extern char *pPlayerExperienceAttributeDescription;
+extern char *pAttackBonusAttributeDescription;
+extern char *pAttackDamageAttributeDescription;
+extern char *pMissleBonusAttributeDescription;
+extern char *pMissleDamageAttributeDescription;
+extern char *pFireResistanceAttributeDescription;
+extern char *pAirResistanceAttributeDescription;
+extern char *pWaterResistanceAttributeDescription;
+extern char *pEarthResistanceAttributeDescription;
+extern char *pMindResistanceAttributeDescription;
+extern char *pBodyResistanceAttributeDescription;
+extern char *pSkillPointsAttributeDescription;
+extern char *pClassTXT_Raw;
+extern char *pStatsTXT_Raw;
+extern char *pSkillDescTXT_Raw;
+extern struct FactionTable *pFactionTable;
+//extern std::array<char, 777> byte_5C8D1A; // weak
+
+extern std::array<char, 777> byte_5E4C15; // weak
+extern std::array<const char *, 14> pSomeItemsNames;
+
+extern char *pMonstersTXT_Raw;
+extern char *pMonsterPlacementTXT_Raw;
+extern char *pSpellsTXT_Raw;
+extern char *pMapStatsTXT_Raw;
+extern char *pHostileTXT_Raw;
+extern char *pPotionsTXT_Raw;
+extern char *pPotionNotesTXT_Raw;
+
+extern std::array<int, 777> _6807B8_level_decorations_ids; // idb
+extern int _6807E0_num_decorations_with_sounds_6807B8; // weak
+extern std::array<int, 3000> event_triggers; // 6807E8
+extern size_t num_event_triggers; // 6836C8
+extern std::array<int, 64> dword_69B010;
+extern float flt_69B138_dist; // weak
+extern char byte_69BD41_unused; // weak
+extern unsigned int uTextureID_x_u;
+extern unsigned int uTextureID_LS_saveU;
+extern unsigned int uTextureID_LS_loadU;
+extern unsigned int uTextureID_AR_DN_DN;
+extern unsigned int uTextureID_AR_UP_DN;
+extern unsigned int uTextureID_LS_;
+extern unsigned int uTextureID_x_d;
+extern unsigned int uTextureID_save_up;
+extern unsigned int uTextureID_load_up;
+extern unsigned int uTextureID_loadsave;
+extern int pSaveListPosition; // weak
+extern unsigned int uLoadGameUI_SelectedSlot;
+extern HWND hInsertCDWindow; // idb
+extern int uCPUSpeed; // weak
+extern char cMM7GameCDDriveLetter; // idb
+extern enum MENU_STATE sCurrentMenuID;
+extern unsigned int uGameState;
+extern int uDefaultTravelTime_ByFoot; // weak
+extern int day_attrib; // weak
+extern int day_fogrange_1; // weak
+extern int day_fogrange_2; // weak
+extern struct TileTable *pTileTable; // idb
+extern int outdoor_grid_band_1; // idb
+extern int outdoor_grid_band_2; // idb
+extern int outdoor_grid_band_3; // idb
+extern std::array<char, 777> pDefaultSkyTexture; // idb
+extern std::array<char, 16> byte_6BE124_cfg_textures_DefaultGroundTexture; // idb
+extern int _6BE134_odm_main_tile_group; // weak
+extern int dword_6BE138; // weak
+extern int dword_6BE13C_uCurrentlyLoadedLocationID; // weak
+extern float fWalkSpeedMultiplier; // weak
+extern float fBackwardWalkSpeedMultiplier; // weak
+extern float fTurnSpeedMultiplier; // weak
+extern float flt_6BE150_look_up_down_dangle; // weak
+//extern char pMM7WindowClassName[]; // idb
+//extern HINSTANCE hInstance; // idb
+//extern char *pCmdLine;
+//extern HWND hWnd; // idb
+extern char pCurrentMapName[32]; // idb
+extern unsigned int uLevelMapStatsID;
+
+extern bool FORCE_16_BITS; // related to GAME_SETTINGS_INVALID_RESOLUTION
+#define GAME_SETTINGS_0001                            0x0001
+#define GAME_SETTINGS_INVALID_RESOLUTION              0x0002
+#define GAME_SETTINGS_NO_INTRO                        0x0004
+#define GAME_SETTINGS_NO_LOGO                         0x0008
+#define GAME_SETTINGS_NO_SOUND                        0x0010
+#define GAME_SETTINGS_NO_WALK_SOUND                   0x0020
+#define GAME_SETTINGS_NO_HOUSE_ANIM                   0x0040
+#define GAME_SETTINGS_0080_SKIP_USER_INPUT_THIS_FRAME 0x0080
+#define GAME_SETTINGS_APP_INACTIVE                    0x0100
+#define GAME_SETTINGS_0200_EVENT_TIMER                0x0200
+#define GAME_SETTINGS_0400_MISC_TIMER                 0x0400
+#define GAME_SETTINGS_0800                            0x0800
+#define GAME_SETTINGS_1000                            0x1000
+#define GAME_SETTINGS_2000                            0x2000
+#define GAME_SETTINGS_4000                            0x4000
+extern int dword_6BE364_game_settings_1;  // GAME_SETTINGS_*
+
+#define DEBUG_SETTINGS_RUN_IN_WIDOW     0x0001
+#define DEBUG_SETTINGS_0002_SHOW_FR     0x0002
+#define DEBUG_SETTINGS_NO_ACTORS        0x0004
+#define DEBUG_SETTINGS_NO_DECORATIONS   0x0008
+#define DEBUG_SETTINGS_NO_DAMAGE        0x0010
+extern int dword_6BE368_debug_settings_2; // DEBUG_SETTINGS_*
+
+extern unsigned __int8 bCanLoadFromCD;
+extern int bShowDamage; // idb
+extern unsigned int bAlwaysRun;
+extern unsigned int bFlipOnExit;
+extern unsigned int uTurnSpeed;
+extern float flt_6BE3A0; // weak
+extern float flt_6BE3A4_debug_recmod1;
+extern float flt_6BE3A8_debug_recmod2;
+extern float flt_6BE3AC_debug_recmod1_x_1_6;
+extern std::array<char, 20> byte_6BE3B0; // idb
+extern char bUnderwater; // weak
+extern char bNoNPCHiring; // weak
+extern unsigned int bNoVideo;
+extern bool bNoIntro;
+extern bool bNoLogo;
+extern bool bNoCD;
+extern bool bNoSound;
+extern std::array<int, 100> dword_720020_zvalues;
+extern std::array<int, 299> dword_7201B0_zvalues;
+extern int uTextureID_720980; // weak
+extern std::array<__int16, 104> word_7209A0_intercepts_ys_plus_ys;
+extern std::array<__int16, 104> word_720A70_intercepts_xs_plus_xs;
+extern std::array<__int16, 104> word_720B40_intercepts_zs;
+extern std::array<__int16, 102> word_720C10_intercepts_xs;
+extern std::array<__int16, 777> word_720CE0_ys; // idb
+extern std::array<__int16, 777> word_720DB0_xs; // idb
+extern std::array<int, 20> dword_720E80;
+extern std::array<int, 20> dword_720ED0;
+extern std::array<int, 20> ceiling_height_level;
+extern std::array<__int16, 104> odm_floor_face_vert_coord_Y; // word_720F70
+extern std::array<__int16, 104> odm_floor_face_vert_coord_X; // word_721040
+extern std::array<int, 20> current_Face_id; // dword_721110
+extern std::array<int, 20> current_BModel_id; // dword_721160
+extern std::array<int, 20> odm_floor_level; // idb dword_7211B0
+extern int blv_prev_party_x; // weak
+extern int blv_prev_party_z; // weak
+extern int blv_prev_party_y; // weak
+extern char *dword_722F10; // idb
+extern std::array<const char *, 513> pQuestTable;
+extern char *dword_723718_autonote_related; // idb
+extern std::array<const char *, 82> pScrolls;
+extern int dword_7241C8; // weak
+
+extern std::array<const char *, 59> aNPCProfessionNames;
+extern char *pAwardsTXT_Raw;
+extern char *pScrollsTXT_Raw;
+extern char *pMerchantsTXT_Raw;
+extern std::array<const char *, 7> pMerchantsBuyPhrases;
+extern std::array<const char *, 7> pMerchantsSellPhrases;
+extern std::array<const char *, 7> pMerchantsRepairPhrases;
+extern std::array<const char *, 7> pMerchantsIdentifyPhrases;
+extern char *pTransitionsTXT_Raw;
+extern char *pAutonoteTXT_Raw;
+extern char *pQuestsTXT_Raw;
+extern unsigned int    uNumTerrainNormals;
+extern struct Vec3_float_ *pTerrainNormals;
+extern std::array<unsigned short, 128 * 128 * 2>  pTerrainNormalIndices;
+extern std::array<unsigned int, 128 * 128 * 2>    pTerrainSomeOtherData;
+extern int dword_A74C88; // weak
+extern unsigned int uPlayerCreationUI_SkySliderPos;
+extern int uPlayerCreationUI_ArrowAnim;
+extern unsigned int uPlayerCreationUI_SelectedCharacter;
+extern int dword_A74CDC; // weak
+extern struct Texture *pTexture_PlayerFaceMask;
+extern struct Texture *pTexture_PlayerFaceEradicated;
+extern struct Texture *pTexture_PlayerFaceDead;
+extern std::array< std::array<struct Texture *, 56>, 4> pTextures_PlayerFaces;
+extern __int64 _A750D8_player_speech_timer; // qword_A750D8
+extern enum PlayerSpeech PlayerSpeechID;
+extern int uSpeakingCharacter; // weak
+extern std::array<const char *, 36> pClassNames;
+extern std::array<const char *, 19> aCharacterConditionNames;
+extern std::array<const char *, 38> pSkillNames;
+extern char byte_AE5B91; // weak
+extern std::array<int, 32> dword_F1B430; // weak
+extern std::array<int, 4> player_levels;
+extern std::array<__int16, 6> weapons_Ypos; // word_F8B158
+extern struct Texture *ShopTexture; // idb
+extern std::array<struct Texture *, 12> ItemsInShopTexture;
+extern __int16 bountyHunting_monster_id_for_hunting; // weak
+extern const char *bountyHunting_text; // idb
+extern int contract_approved; // weak
+extern int dword_F8B1AC_award_bit_number; // idb
+extern int dword_F8B1B0_MasteryBeingTaught; // weak
+extern int gold_transaction_amount; // F8B1B4
+extern std::array<char *, 4> pShopOptions;
+extern int dword_F8B1D8; // weak
+extern int dword_F8B1E0; // weak
+extern int dword_F8B1E4; // weak
+extern const char *current_npc_text; // 0xF8B1E8
+extern char dialogue_show_profession_details; // weak
+extern std::array<char, 777> byte_F8B1EF; // weak
+extern std::array<char, 4> byte_F8B1F0;
+
+extern int bGameoverLoop; // weak
+extern std::array<__int16, 104> intersect_face_vertex_coords_list_a; // word_F8BC48
+extern std::array<__int16, 104> intersect_face_vertex_coords_list_b; // word_F8BD18
+extern bool wizard_eye;
+extern bool change_seasons;
+extern bool all_magic;
+extern bool debug_information;
+extern bool show_picked_face;
+extern bool draw_portals_loops;
+extern bool new_speed;
+extern bool bSnow;
+extern bool draw_terrain_dist_mist;