t8-atian-menu

warzone_solo 35F8EE90CBFFA9E7 warzone_duo 327338A0B51BD1E4 warzone_quad 14de0f7fa012b74f warzone_hot_pursuit FB4C2B9CE4E66802 wz_open_skyscrapers 2a0c04b4bcbed100 wz_escape 4023b088683398e2 wz_escape_alt 6c4fd4af9da9e4ca

.rdata:00000000049612D0 ; const BuiltinFunctionDef stru_49612D0 .rdata:00000000049612D0 stru_49612D0 dd 68A76B47h ; [0].canonId .rdata:00000000049612D0 ; DATA XREF: sub_6A2460↑o .rdata:00000000049612D0 ; sub_6A24B0+25↑o .rdata:00000000049612D0 dd 1 ; [0].min_args ; BGScr_EnumerateWeapons(scriptInstance_t) .rdata:00000000049612D0 dd 1 ; [0].max_args .rdata:00000000049612D0 db 0 ; 0 .rdata:00000000049612D0 db 0 ; 0 .rdata:00000000049612D0 db 0 ; 0 .rdata:00000000049612D0 db 0 ; 0 .rdata:00000000049612D0 dq offset _ZL22BGScr_EnumerateWeapons16scriptInstance_t; [0].actionFunc .rdata:00000000049612D0 dd 1 ; [0].type .rdata:00000000049612D0 db 0 ; 0 .rdata:00000000049612D0 db 0 ; 0 .rdata:00000000049612D0 db 0 ; 0 .rdata:00000000049612D0 db 0 ; 0 .rdata:00000000049612D0 dd 0A16A090Dh ; [1].canonId .rdata:00000000049612D0 dd 1 ; [1].min_args .rdata:00000000049612D0 dd 1 ; [1].max_args .rdata:00000000049612D0 db 0 ; 1 .rdata:00000000049612D0 db 0 ; 1 .rdata:00000000049612D0 db 0 ; 1 .rdata:00000000049612D0 db 0 ; 1 .rdata:00000000049612D0 dq offset sub_6A1C30 ; [1].actionFunc .rdata:00000000049612D0 dd 1 ; [1].type «—- to test .rdata:00000000049612D0 db 0 ; 1 .rdata:00000000049612D0 db 0 ; 1 .rdata:00000000049612D0 db 0 ; 1 .rdata:00000000049612D0 db 0 ; 1 .rdata:00000000049612D0 dd 0F2C99E09h ; [2].canonId .rdata:00000000049612D0 dd 1 ; [2].min_args .rdata:00000000049612D0 dd 1 ; [2].max_args .rdata:00000000049612D0 db 0 ; 2 .rdata:00000000049612D0 db 0 ; 2 .rdata:00000000049612D0 db 0 ; 2 .rdata:00000000049612D0 db 0 ; 2 .rdata:00000000049612D0 dq offset sub_6A1C60 ; [2].actionFunc .rdata:00000000049612D0 dd 0 ; [2].type .rdata:00000000049612D0 db 0 ; 2 .rdata:00000000049612D0 db 0 ; 2 .rdata:00000000049612D0 db 0 ; 2 .rdata:00000000049612D0 db 0 ; 2 .rdata:00000000049612D0 dd 1242E467h ; [3].canonId .rdata:00000000049612D0 dd 1 ; [3].min_args .rdata:00000000049612D0 dd 1 ; [3].max_args

556f98c49d3271e2

N:\bo4hash\t8-src
N:\bo4hash\t8wip\bo4-source
H:\Vuze Downloads\GSC\Default Project\

f0_local0.EModeData = { [Enum.eModes[0x83EBA96F36BC4E5]] = { assetName = 0x9E82E6A2962DD60 }, [Enum.eModes[0x3723205FAE52C4A]] = { assetName = 0x9CA2B6A2949DAB8 }, [Enum.eModes[0xBF1DCC8138A9D39]] = { assetName = 0x9D4406A295252EC }

What can cause a crash:

ZMHudGlobal.trials.gameState 2876dc918cc6666,zmshowtimer Hud_ZM_Timer

3126405504 = 0xba592980,server script error Baker 917 Brute Goodnight [6316b397dd0fa158.3647551301.54:3031] (bytecode offset) [124cecff7280be52.1668193592.54:161951] (bytecode offset) [124cecff7280be52.1668193592.54:185255] (bytecode offset) [124cecff7280be52.1668193592.54:54343] (bytecode offset) [3a7e21b450c1b143.1111601229.54:13826] (bytecode offset) [3a7e21b450c1b143.1111601229.54:11359] (bytecode offset) [07c165117833e69f.1825947448.54:1375] (bytecode offset) [07c165117833e69f.1825947448.54:343] (bytecode offset) [70c2381177705442.480043486.54:3655] (bytecode offset) [70c2381177705442.480043486.54:3607] (bytecode offset)

,0,server script error Baker 917 Brute Goodnight [6316b397dd0fa158.3647551301.54:3031] (bytecode offset) [124cecff7280be52.1668193592.54:161951] (bytecode offset) [124cecff7280be52.1668193592.54:185255] (bytecode offset) [124cecff7280be52.1668193592.54:54343] (bytecode offset) [3a7e21b450c1b143.1111601229.54:13826] (bytecode offset) [3a7e21b450c1b143.1111601229.54:11359] (bytecode offset) [07c165117833e69f.1825947448.54:1375] (bytecode offset) [07c165117833e69f.1825947448.54:343] (bytecode offset) [70c2381177705442.480043486.54:3655] (bytecode offset) [70c2381177705442.480043486.54:3607] (bytecode offset)

0x779df19b,server script error Zebra 112 Vicious Stallion [124cecff7280be52.1668193592.54:141309] (bytecode offset) [39c5d5881cc195b0.857104942.54:686] (bytecode offset) [39c5d5881cc195b0.857104942.54:1335] (bytecode offset) [07c165117833e69f.1825947448.54:9727] (bytecode offset) [07c165117833e69f.1825947448.54:9703] (bytecode offset)

// 124cecff7280be52 scripts/core_common/clientids_shared.gsc // 39c5d5881cc195b0 scripts/core_common/system_shared.gsc // 07c165117833e69f scripts/core_common/callbacks_shared.gsc

// 487d0473700e6140,scripts/core_common/clientfield_shared.gsc // 124cecff7280be52,scripts/core_common/clientids_shared.gsc

mp error: Can’t read pooled buffer at address 1276a281ea0 of size 10460 for file scriptparsetree/hashed-2/script_131d10be788.gscbin Can’t read pooled buffer at address 1276a287b40 of size 4224 for file scriptparsetree/hashed-1/script_131d10be928.gscbin Can’t read pooled buffer at address 1276a2a0580 of size 96 for file scriptparsetree/hashed-3/script_131d10c2248.gscbin

PRECODEPOS:

EvalLocalVariableCachedSafe -> Push PRECODEPOS before CheckClearParams -> Convert top PRECODEPOST to CODEPOS or error ClearParams -> Clear params until find CODEPOS or PRECODEPOS SafeDecTop -> ignore if top->type == CODEPOS (but seem unused) SetLocalVariableCachedOnStack -> set undefined if == CODEPOS (but seem unused) Notify -> if stack[-2] isn’t a pointer allocstruct, stack[-2] seem to be created by PreScriptCall (PRECODEPOS) PreScriptCall -> Push PRECODEPOS -> Before sending information to vm, done by:

struct __declspec(align(8)) VmContext { ScrVarIndex_t fieldValueId; ScrVarIndex_t objectId; //bool fieldValueRemoveOk; byte *lastGoodPos; ScrVarValue_t *lastGoodTop; OP_TYPE breakOpcode; OP_TYPE localOpcode; };

0000000004EED230 ; ScrClassStruct_t *gScrClassMap[2]

// GSC datatypes
// 0x4EED240 char *var_typename[29]
enum ScrVarType_t : unsigned __int32
{
  TYPE_UNDEFINED = 0x0,
  TYPE_POINTER = 0x1,
  TYPE_STRING = 0x2,
  TYPE_VECTOR = 0x3,
  TYPE_HASH = 0x4,
  TYPE_FLOAT = 0x5,
  TYPE_INTEGER = 0x6,
  TYPE_UINTPTR = 0x7,
  TYPE_ENTITY_OFFSET = 0x8,
  TYPE_CODEPOS = 0x9,
  TYPE_PRECODEPOS = 0xA,
  TYPE_API_FUNCTION = 0xB,
  TYPE_SCRIPT_FUNCTION = 0xC,
  TYPE_STACK = 0xD,
  TYPE_THREAD = 0xE,
  TYPE_NOTIFY_THREAD = 0xF,
  TYPE_TIME_THREAD = 0x10,
  TYPE_FRAME_THREAD = 0x11,
  TYPE_CHILD_THREAD = 0x12,
  TYPE_CLASS = 0x13,
  TYPE_SHARED_STRUCT = 0x14,
  TYPE_STRUCT = 0x15,
  TYPE_REMOVED_ENTITY = 0x16,
  TYPE_ENTITY = 0x17,
  TYPE_ARRAY = 0x18,
  TYPE_REMOVED_THREAD = 0x19,
  TYPE_FREE = 0x1a,
  TYPE_THREAD_LIST = 0x1b,
  TYPE_ENT_LIST = 0x1c
};


```c++
Alistair's Folly - hash_138efe2bb30be63c
Chaos Theory - hash_138f012bb30beb55
Alistair's Annihilator - hash_138f002bb30be9a2

Richtofen Matryoshka Dolls - hash_291e1c117ebbf5e6
Demspey Matryoshka Dolls - hash_7a42b57be462143f
Nikolai Matryoshka Dolls - hash_7264d6f24a950a5b
Takeo Matryoshka Dolls - hash_579652e2459b8c74

",
	"error_type":"Script Runtime Error

wzHideSpectatorsUI
wzHidePlayersAliveUI
wzHideKillsUI
wzHideCleanupsUI

kill: 50
melee_kill: 100

- Rush
  - Players
    - 1 : 55%
    - 2 : 75%
    - 3 : 90%
    - 4 : 110%
  - Difficulty
    - Easy: 1
    - Normal: 1
    - Hard: 1.25
    - Insane: 1.5
- Normal
  - Players
    - 1 : 63%
    - 2 : 75%
    - 3 : 80%
    - 4 : 95%
  - Difficulty
    - Easy: 1
    - Normal: 1
    - Hard: 1.25
    - Insane: 1.5

level.scoreinfo[#"melee_kill"]
level.scoreinfo[#"kill"]

mozu op: hash_6e237d1aec5ebae2

var_c3bb4e09=zone_prespawn
var_f1fbce84=maxcount
var_aeae9f59 = var_f1fbce84 + zone_prespawn, maxcount = zombie_count, zone_prespawn = zombie_count|0(special)

var_7aa3cde7 -> count_zombies

var_c3bb4e09=zone_prespawn 
var_84b8298c=alive count
var_aeae9f59=totalspawn -> random() = var_ce8df1c9
var_10f73408=maxcount -> random() = var_b66547bd
function_4b95d880() spawnzombies()

gamemodeismode(int mode)->bool
- 0=public
- 1=private
- 2=default
- 5=freerun
- 6=league
- 7=theater
- default=false


		self rotateyaw(360 * spin_dir, spin_rate); hash_6cf5f53d1fbb1066:add_trails (wz)
#"hash_5e9c3f9821e1ee0a" // paint can item

level.var_79a3ba26 = [#"hash_6e237d1aec5ebae2":1, #"hash_28fb7b6581fc57fb":1, #"hash_6c2f4d31b7682613":1, #"hash_5a5408262448eb77":1, #"hash_714bee6de3dc1fd7":1, #"hash_2fa6d3d57c82720c":1, #"hash_2f614bc6ce414164":1, #"hash_2cee20f0ab20f5d5":1, #"hash_3e6f00dcaccdb98e":1, #"hash_7f4ee068772cc5aa":1, #"hash_3458fd4dff2bd9e8":1, #"hash_6075c220f6315daf":1];
		level.var_f290f0ba = [#"hash_78f8f730158519ff":30, #"hospital_stash":29, #"hash_62810f3ef5d7c53b":28, #"hash_468067e2be6e3cfd":27, #"hash_4b49cb98f0fd776a":26, #"hash_6dea2e4afc816818":25, #"hash_2783dbab1f862606":24, #"hash_2141ecb8d2d86b22":23, #"hash_678a1efded2b597a":22, #"hash_1b83b702bbaae298":21, #"hash_7d028af90dad72ae":20, #"hash_a211476d10546c":19, #"hash_308758c2f91807aa":18, #"hash_550872d1d1938f94":17, #"hash_408b3ed7db6f9401":16, #"hash_734bf5054445e0df":15, #"hash_2a93e93b275c38ed":14, #"hash_75cc919e81dc8b19":13, #"hash_779cba7072600ad1":12, #"hash_47a63bc4a605b45f":11, #"hash_4ee6deffa30cc6e2":10, #"hash_ca8b234ad1fea38":9, #"hash_66f790c2630deace":8, #"hash_49e8a607ea22e650":7, #"hash_43647ef7af66f82f":6, #"hash_61373b747c6a21fd":5, #"hash_3ad3de90342f2d4b":4, #"hash_2b546c0315159617":3, #"hash_33f7121f70c3065f":2, #"hash_6a0d13acf3e5687d":1];
ISsue while reading 000002B4CCDF37E8 Failed to read data of size 0000000000001152 from address 0x000002AA6445E460

it would be fun to test if the 3rd value is right:

- `"wzplayerinsertiontypeindex"` - Respawn type, 0=helicopter,1=portals,2=direct freefall??
- self playsound(localclientnum, #"uin_unavailable_charging");
- zm_gametype::zm_map_restart()


e = bullettrace()
p = physicstrace()
g = groundtrace()
sightconetrace() = float
e[#"position"]
e[#"normal"]
e[#"entity"]
e[#"fraction"]
e[#"dynent"]
p[#"walkable"] = bool
g[#"waterdepth"]
g[#"waterbottom"]
g[#"surfacetype"] = 
"none", 
"default", 
"dirt", 
"water", 
"watershallow",
"ladder", 
"glasscar", 
"rock", 
"metal", 
"metalcar", 
"glass"


- `140721066683308`
- client script error
- Sail 543 Earth Whisper
- [28b411118a61e00b.3056485193.54:369] (bytecode offset)
- [28b411118a61e00b.3056485193.54:12623] (bytecode offset)
- [28b411118a61e00b.3056485193.54:12583] (bytecode offset)

28b411118a61e00b scripts/core_common/callbacks_shared.csc

4EED340     gVmOpJumpTable[0x1000]
4EF5340     gVmErrRecoveryJumpTable[0x3000]



4F0D340

8000

VM_OP_GetFunctionSpoofOpCode = 0x41;
INT16 ScriptDetours::VM_OP_GetAPIFunctionSpoofOpCode = 0x43;
INT16 ScriptDetours::VM_OP_ScriptFunctionCallSpoofOpCode = 0x48;
INT16 ScriptDetours::VM_OP_ScriptMethodCallSpoofOpCode = 0x4f;
INT16 ScriptDetours::VM_OP_ScriptThreadCallSpoofOpCode = 0x50


, "-DATIAN_MENU_DLL", "-DDETOURS", "-DLAZYLINK"

2733174671

2006839707

-> 5410000416

140729189868824

ScrVar_CastString -> string/int/float/vector

Function name	Segment	Start	Length	Locals	Arguments	R	F	L	M	S	B	T	=
ScrStr_ConvertToString	.text	0000000002759030	000000EE	00001038		R	.	.	.	.	.	T	.
ScrVar_CastString	.text	000000000275C170	000000FB	00000028	00000010	R	.	.	.	.	.	T	.

drop_item ]](undefined, 1, 1, item_id, self GetOrigin()); 3e52e5

Fixup locations:

- ambush `script_730972fad7fffcf8.csc script_5283c6fac62ed56c.gsc`
- heavymetalheroes `script_1ce69b7b3b848fb4.csc script_3d6c077b4d554a80.gsc`
- heavymetal `script_3cef0194bec3c4d3.csc script_19029594aa0e2e07.gsc`
- spectrerising `script_2c787723af076323.csc script_bf1cb239d348897.gsc`
- bigteam `script_3a52c137b9090406.csc script_5ad86d37cada2b92.gsc`
- hardcore `script_4c228700945748f2.csc script_2835db007fa14566.gsc`
- weaponstest `script_372d9bb5ff3b27f1.csc script_5b1947b613ef787d.gsc`
- hash_232750b87390cbff `script_2c290bc0b594991c.csc script_5014b7c0ca48e9a8.gsc`
- hash_3109a8794543000f `script_4a8c0c251efe117c.csc script_6e78b82533b41508.gsc`
- hot pursuit `script_761c28389965b406.csc script_16a1d438ab36db92.gsc`
- infection `script_23c7980e18b44cc7.csc script_47b4040e2d69e393.gsc`
- shamrock event `script_7d8d9a7dbeb7b6a7.csc script_217a067dd36d4d73.gsc`
- vehicles `script_7ec566c942981bbd.csc script_5e3ebac930c54131.gsc`
- empty `script_5ba6c084b03e7a1.csc script_264018085cd50f2d.gsc`

function_bbc0b67f()

var_a12b4736 = &item_world_fixup::function_96ff7b88(item); level.var_ee46a98d[item] = ""
var_87d0eef8 = &item_world_fixup::remove_item(item); level.itemreplacement[item] = ""

var_d2223309 = &item_world_fixup::function_261ab7f5(item, replacement_item); level.var_ee46a98d[item] = replacement_item
var_74257310 = &item_world_fixup::add_item_replacement(item, replacement_item); level.itemreplacement[item] = replacement_item

var_b5014996 = &item_world_fixup::function_19089c75(a,b); level.var_db0e7b82[a] = b
var_f8a4c541 = &item_world_fixup::function_6991057(a,b); level.var_ee110db8[a] = b

level.var_4afb8f5a = (reset ? level.itemreplacement : level.var_ee46a98d); // -> used when spawning or getting an item
level.var_fb9a8536 = (reset ? level.var_ee110db8 : level.var_db0e7b82); // -> map bundle

eModes v9 = ZM=0, MP=1, CP=2, WZ=3

// 3126405504
        "-D_SUPPORTS_DETOURS",
        "-D_SUPPORTS_BUILTINS",
        "'-Cdll.builtins=true'",
        "'-Cdll.detours=true'"

function_4ba8fde(#"allistairs_folly_t8_item") = {
    #angles: (0, 0, 0),
    #id: 160, // index
    #origin: (0, 0, -64000),
    #var_bd027dd9: 160, // also the index
    #var_a6762160: {
        #amount: 1,
        #itemtype: "weapon",
        #name: "allistairs_folly_t8_item",
        #rarity: "Common",
        #type: "itemspawnentry",
        #weapon: getweapon("...")
    }
}

5410000416

// sub_3E5100(sinst_t inst, ulong* value)
ulong pool = *(ulong*)(qword_B2232A0 + 80 + 8 * inst);
ulong[2]* data = (ulong*)(pool + 0x80008);
// sub_3E5230(int inst, int data_index)


2985
3023 38
                "-D_SUPPORTS_DETOURS",
                "-D_SUPPORTS_BUILTINS",
                
                // modifier
	level._custom_perks[str_perk].alias = str_alias;
	level._custom_perks[str_perk].var_60e3692f = var_771fabd4;
	level._custom_perks[str_perk].n_cost = n_cost;
  
                // basic
	level._custom_perks[str_perk].alias = str_alias;
	level._custom_perks[str_perk].cost = n_perk_cost;
	level._custom_perks[str_perk].hint_string = str_hint_string;
	level._custom_perks[str_perk].perk_bottle_weapon = w_perk_bottle_weapon;
	level._custom_perks[str_perk].var_66de8d1c = var_1408cd4c;
menus:

current 0x59F1B30

Black_Ops_4_Cut_Minigun_Hud.png
Black_Ops_4_Cut_Minigun_No_Hud.png
Black_Ops_4_Cut_Molotov_Hud.png
Black_Ops_4_Cut_Molotov_No_Hud.png
Black_Ops_4_Cut_Riot_Shield_Drop_Back.png
Black_Ops_4_Cut_Riot_Shield_Drop.png
Black_Ops_4_Cut_Riot_Shield_Hud.png
Black_Ops_4_Cut_Riot_Shield_No_Hud.png
Black_Ops_4_Cut_Tesla_Gun_Hud.png
Black_Ops_4_Cut_Tesla_Gun_No_Hud.png
Black_Ops_4_Cut_Tesla_Gun_Upgraded_Hud.png
Black_Ops_4_Cut_Tesla_Gun_Upgraded_No_Hud.png

scrVmPub_t scrVmPub // 10 shifted
000008307aa0 0x0     void* unknown1;
000008307aa8 0x8     void* unknown2;
000008307ab0 0x10    void* executionQueueHeap;
000008307ab8 0x18    void* timeByValueQueue;
000008307ac0 0x20    void* timeByThreadQueue[1024];
000008309ac0 0x2020  void* frameByValueQueue;
000008309ac8 0x2028  void* frameByThreadQueue[1024];
00000830bac8 0x4028  void* timeoutByValueList;
00000830bad0 0x4030  void* timeoutByThreadList[1024];
00000830dad0 0x6030  void* notifyByObjectQueue[1024];
00000830fad0 0x8030  void* notifyByThreadQueue[1024];
000008311ad0 0xa030  void* endonByObjectList[1024];
000008313ad0 0xc030  void* endonByThreadList[1024];
000008315ad0 0xe030  ScrVarIndex_t* localVars;
000008315ad8 0xe038  ScrVarValue_t* maxstack;
000008315ae0 0xe040  function_frame_t* function_frame;
000008315ae8 0xe048  ScrVarValue_t* top;
000008315af0 0xe050  function_frame_t function_frame_start[64] = 0x800 / 64 = 0x20
0000083162f0 0xe850  ScrVarValue_t stack[2048] = [..., 7FF623C462F8 7FF623C46300 7FF623C46308 ?? ];
00000831e2f0 0x16850 uint time;
00000831e2f4 0x16854 uint frame;
00000831e2f8 0x16858 int  function_count;
00000831e2fc 0x1685C uint  inparamcount;
00000831e300 0x16860 uint outparamcount;
00000831e304 0x16864 bool showError;
00000831e305 0x16866 bool systemInitialized;

0000082EFCD0 objFileInfo_t gObjFileInfo[2][650];
0000082F76B0 uint32_t gObjFileInfoCount[2];

59F5930     encryptiontable
11c
1f

GSCOBJ
0x00 byte magic[8]
0x08 int32 crc;
0x10 int64 name
0x18 int32 include_offset -> uint64[]
0x1C uint16 string_count
0x1E uint16 exports_count
0x20 int32 ukn
0x24 int32 string_offset -> GSC_STRINGTABLE_ITEM[]
0x28 int16 imports_count
0x2A uint16 fixup_count
0x2c int32 ukn2c
0x30 int32 export_table_offset -> GSC_EXPORT_ITEM[]
0x34 int32 ukn34
0x38 int32 imports_offset -> GSC_IMPORT_ITEM[]
0x3C uint16 globalvar_count
0x40 int32 fixup_offset -> GSC_FIXUP_ITEM[]
0x44 int32 globalvar_offset -> GSC_GLOBALVAR_ITEM[]
0x48 int32 script_size;
0x4C int32_t ukn4c -> hash uint64[]
0x50 int32_t ukn50
0x54 int32_t ukn54
0x58 uint16 include_count
0x5b int8 ukn_4c_count // sub_2748240

global vars: level, game, classes, mission, anim, world, memory

                "'-Cdll.builtins=true'",
GSCOBJ_export* export table = object_data + (int32)object_data[0x30]

export size 

uint64* includes = object_data + (int32)object_data[0x18]

export flags: 

0x86 = Class def?

HGFEDCBA
- A 0x01 linked
- B 0x02 autoexec
- C 0x04 private
- D 0x08 class_member
- E 0x10 class_destructor
- F 0x20 ve
- G 0x40 event
- H 0x80 class_linked

import flags:
HGFEAAAA
- AAAA 0x0F
  - 1: getfunction/getmethod 
  - 2: function
  - 3: function_thread
  - 4: function_childthread
  - 5: method
  - 6: method_thread
  - 7: method_childthread
  - default: error linking
- E 0x10 dev import
- F 0x20 to resolve import ; api import namespace "sys" or "" or using the same namespace
- G 0x40 unk40
- H 0x80 unk80

0000000007D9BC10     ; SCREVENT_MAP g_ScrEventMapPoolBuffer[2][512]
SCREVENT_MAP 0x18
{
  SCREVENT_MAP* next; // 0x08
  SCREVENT_HANDLER *handler; // 0x10
  uint32 eventName; // 0x14
  bool gameSideRegistered; // 0x15
  bool pad0; // 0x16
  short pad02; // 0x18
}

Abort
AutoBreakpoint
Breakpoint
ErrorBreakpoint
ThreadEndBreakpoint
WatchBreakpoint
GetIString

New
NextArrayKey
SafeDecTop
PushEntityVar
PushVar
SafeSetWaittillVariableFieldCached
SelfEvalFieldVariable
SelfEvalFieldVariableRef

struct __declspec(align(8)) scrVarPub_t
{
  const char *fieldBuffer;
  const char *error_message;
  byte *programBuffer;
  byte *endScriptBuffer;
  HunkUser *programHunkUser;
  scrVarGlobalVars_t globalVars[16];
  ScrVarNameIndex_t entFieldNameIndex;
  ScrVarIndex_t freeEntList;
  ScrVarIndex_t tempVariable;
  unsigned int checksum;
  unsigned int entId;
  unsigned int varHighWatermark;
  unsigned int numScriptThreads;
  unsigned int numVarAllocations;
  //int varHighWatermarkId;
  //bool developer;
  //bool evaluate;
};



strings:

object_data + object_data[str.string] = ENCRYPTED_STRING
str.type = 0x00 or error(483405794)

----linking function:

-------imports:

foreach import -> check address and 


fixup on linking

offset 0x59F1B08


						player function_cce105c8(#"tier_skip", 1, 1, 2, modeindex);


entity type:


6: weapon


weird stuff

script_39347d985163e17::function_ebd0491e() (t8-src decompilation)
script_31e56101095f174b.gsc::_planprocessstack() (a continue in a switch)

fetch root thread

VM_ArchiveStack(scriptInstance_t,ScrVarValue_t *,ScrVarValue_t *,uchar *,uint,uint *,bool)	.text	0000000002753410	00000152	00000048	00000030	R	.	.	.	.	.	T	.

ScrVarIndex_t __fastcall ScrVar_RootThread(scriptInstance_t inst, ScrVarIndex_t id)
{
  ScrVarIndex_t parentId; // r9d
  __int64 v3; // r8
  scrVarGlob_t *v4; // r10
  ScrVarType_t type; // eax

  parentId = id;
  v3 = inst;
  v4 = &gScrVarGlob[v3];
  type = gScrVarGlob[v3].scriptValues[id].type;
  while ( type == TYPE_CHILD_THREAD || type == TYPE_REMOVED_THREAD )
  {
    type = gScrVarGlob[v3].scriptValues[v4->scriptVariables[parentId].parentId].type;
    if ( type - 14 > 4 && type != TYPE_REMOVED_THREAD )
      break;
    parentId = v4->scriptVariables[parentId].parentId;
  }
  return parentId;
}


Archive stack:

allocate ScrVarStackBuffer object, buffer[object->size * 9]

buffer[i] = {
  // 0x0
  union {
    BYTE* codePos; // if type == TYPE_CODEPOS
    ScrVar var; // otherwise
  } val;
  // 0x8
  BYTE type;
}

Put the allocated object inside a scriptValue of type TYPE_STACK

scrvar sizes:

Function name Segment Start Length Locals Arguments R F L M S B T = ScrVar_Init(scriptInstance_t) .text 000000000275FCF0 0000019D 00000058 00000020 R . . . . . T . ScrVar_InitVariables(scriptInstance_t) .text 000000000275FF80 000001AD 00000028 00000020 R . . . . . T . ScrVar_InitVariables(scriptInstance_t) .text 0000000002761840 00000005 00000000 R . . . . . T .

name server client decl type itemsize
scriptVariables 160000 100000 ScrVar_t 32
scriptNameSearchHashList 0x80000 0x80000 ScrVarIndex_t 4
scriptVariablesObjectInfo1 160000 100000 ScrVarObjectInfo1_t 8
scriptVariablesObjectInfo2 160000 100000 ScrVarObjectInfo2_t 4
scriptValues 80000 50000 ScrVarValue_t 32

BlackOps4.exe+f99b188,hash_2072776920646d63,20646d630a302032???

70D75463B2B9CA00 bool
3D9919379A615120 int 500k

0000000004ECC1D0 s_loadoutNames

enum loadoutClass_t : __int32
  CLASS_INVALID = 0xFFFFFFFF,
weapon_smg
weapon_assault
weapon_tactical
weapon_cqb
weapon_lmg
weapon_sniper
weapon_pistol
weapon_launcher
weapon_knife
weapon_special
weapon_shotgun
weapon_explosive
weapon_grenade
weapon_masterkey
weapon_grenadelauncher
weapon_flamethrower
specialty
talisman
specialgrenade
miscweapon
feature
bonuscard
killstreak
hero
talent
bubblegum
bubblegum_consumable
character

  CUSTOM_CLASS_1 = 0x0,
  CUSTOM_CLASS_FIRST = 0x0,
  CUSTOM_CLASS_2 = 0x1,
  CUSTOM_CLASS_3 = 0x2,
  CUSTOM_CLASS_4 = 0x3,
  CUSTOM_CLASS_5 = 0x4,
  BASIC_CUSTOM_CLASS_COUNT = 0x5,
  CUSTOM_CLASS_6 = 0x5,
  FIELD_OPS_CLASS_FIRST = 0x5,
  CUSTOM_CLASS_7 = 0x6,
  CUSTOM_CLASS_8 = 0x7,
  CUSTOM_CLASS_9 = 0x8,
  FIELD_OPS_CLASS_LAST = 0x8,
  CUSTOM_CLASS_10 = 0x9,
  CUSTOM_CLASS_COUNT = 0xA,
  DEFAULT_CLASS_FIRST = 0xA,
  DEFAULT_CLASS_SMG = 0xA,
  DEFAULT_CLASS_CQB = 0xB,
  DEFAULT_CLASS_ASSAULT = 0xC,
  DEFAULT_CLASS_LMG = 0xD,
  DEFAULT_CLASS_SNIPER = 0xE,
  DEFAULT_CLASS_LAST = 0xE,
  TOTAL_CLASS_COUNT = 0xF,
};

enum loadoutSlot_t : __int32 {
  LOADOUTSLOT_INVALID = 0xFFFFFFFF,
  LOADOUTSLOT_FIRST = 0x0,
  LOADOUTSLOT_PRIMARY_WEAPON = 0x0,
  LOADOUTSLOT_PRIMARY_ATTACHMENT1 = 0x1,
  LOADOUTSLOT_PRIMARY_ATTACHMENT2 = 0x2,
  LOADOUTSLOT_PRIMARY_ATTACHMENT3 = 0x3,
  LOADOUTSLOT_PRIMARY_ATTACHMENT4 = 0x4,
  LOADOUTSLOT_PRIMARY_ATTACHMENT5 = 0x5,
  LOADOUTSLOT_PRIMARY_ATTACHMENT6 = 0x6,
  LOADOUTSLOT_PRIMARY_ATTACHMENT7 = 0x7,
  LOADOUTSLOT_PRIMARY_CAMO = 0x8,
  LOADOUTSLOT_PRIMARY_RETICLE = 0x9,
  LOADOUTSLOT_PRIMARY_PAINTJOB_SLOT = 0xa,
  LOADOUTSLOT_PRIMARY_WEAPON_MODEL_SLOT = 0xb,
  LOADOUTSLOT_PRIMARY_CHARM = 0xc,
  LOADOUTSLOT_PRIMARY_DEATHFX = 0xd,
  LOADOUTSLOT_SECONDARY_WEAPON = 0xe,
  LOADOUTSLOT_SECONDARY_ATTACHMENT1 = 0xf,
  LOADOUTSLOT_SECONDARY_ATTACHMENT2 = 0x10,
  LOADOUTSLOT_SECONDARY_ATTACHMENT3 = 0x11,
  LOADOUTSLOT_SECONDARY_ATTACHMENT4 = 0x12,
  LOADOUTSLOT_SECONDARY_ATTACHMENT5 = 0x13,
  LOADOUTSLOT_SECONDARY_ATTACHMENT6 = 0x14,
  LOADOUTSLOT_SECONDARY_ATTACHMENT7 = 0x15,
  LOADOUTSLOT_SECONDARY_CAMO = 0x16,
  LOADOUTSLOT_SECONDARY_RETICLE = 0x17,
  LOADOUTSLOT_SECONDARY_PAINTJOB_SLOT = 0x18,
  LOADOUTSLOT_SECONDARY_WEAPON_MODEL_SLOT = 0x19,
  LOADOUTSLOT_SECONDARY_CHARM = 0x1a,
  LOADOUTSLOT_SECONDARY_DEATHFX = 0x1b,
  LOADOUTSLOT_PRIMARY_GRENADE = 0x1c,
  LOADOUTSLOT_PRIMARY_GRENADE_COUNT = 0x1d,
  LOADOUTSLOT_SPECIAL_GRENADE = 0x1e,
  LOADOUTSLOT_SPECIAL_GRENADE_COUNT = 0x1f,
  LOADOUTSLOT_HERO_GADGET = 0x20,
  LOADOUTSLOT_SPECIALTY1 = 0x21,
  LOADOUTSLOT_SPECIALTY2 = 0x22,
  LOADOUTSLOT_SPECIALTY3 = 0x23,
  LOADOUTSLOT_SPECIALTY4 = 0x24,
  LOADOUTSLOT_SPECIALTY5 = 0x25,
  LOADOUTSLOT_SPECIALTY6 = 0x26,
  LOADOUTSLOT_TALISMAN1 = 0x27,
  LOADOUTSLOT_TACTICALGEAR = 0x28,
  LOADOUTSLOT_TALENT1 = 0x29,
  LOADOUTSLOT_TALENT2 = 0x2a,
  LOADOUTSLOT_TALENT3 = 0x2b,
  LOADOUTSLOT_TALENT4 = 0x2c,
  LOADOUTSLOT_TALENT5 = 0x2d,
  LOADOUTSLOT_TALENT6 = 0x2e,
  LOADOUTSLOT_BONUSCARD1 = 0x2f,
  LOADOUTSLOT_BONUSCARD2 = 0x30,
  LOADOUTSLOT_BONUSCARD3 = 0x31,
  LOADOUTSLOT_EQUIPPED_BUBBLE_GUM_PACK = 0x32,
  LOADOUTSLOT_KILLSTREAK1 = 0x33,
  LOADOUTSLOT_KILLSTREAK2 = 0x34,
  LOADOUTSLOT_KILLSTREAK3 = 0x35,
  LOADOUTSLOT_KILLSTREAK4 = 0x36,
  LOADOUTSLOT_FIRST_SELECTED_CHARACTER_INDEX = 0x37,
  LOADOUTSLOT_COUNT = 0x38,

csv reader: (STRINGTABLE assets)

// ????

struct __declspec(align(8)) StringTableCell
{
  const char *string;
  const char *hash;
};

/*
item size ... 40
count ....... dc
*/


struct StringTable {
  UINT64 name;
  int unk8;
  int unk10;
  int columnCount;
  int rowCount;
  int cellscount;
  int unk24;
  StringTableCell *cells;
  StringTableCell *values;
};

00000090F8AFC _ZL17sSessionModeState

sSessionModeState.val << 28 >> 28 == mode

MODE_ZOMBIES = 0x0,
MODE_MULTIPLAYER = 0x1,
MODE_CAMPAIGN = 0x2,
MODE_WARZONE = 0x3,


41d51c19898976f = #hash_44588d37c7fe1bf3+_control.csv

missing csv file to search (later): #"hash_287942b71dbfe24f"
gamedata/loot/mplootemblems.csv
gamedata/loot/mpUnreleasedLoot.csv
gamedata/tables/common/music_player.csv
gamedata/events/reserve_deals_schedule_xbox.csv
gamedata/events/reserve_deals_schedule_ps4.csv
gamedata/loot/mplootitems.csv
gamedata/tables/cp/cp_vehicleHacks.csv
gamedata/tables/common/consumables.csv
gamedata/events/itemshop_slot_1_ps4.csv
gamedata/events/itemshop_slot_2_ps4.csv
gamedata/events/itemshop_slot_3_ps4.csv
gamedata/events/itemshop_slot_4_ps4.csv
gamedata/events/itemshop_slot_5_ps4.csv
gamedata/events/itemshop_slot_6_ps4.csv
gamedata/events/itemshop_slot_1_xbox.csv
gamedata/events/itemshop_slot_2_xbox.csv
gamedata/events/itemshop_slot_3_xbox.csv
gamedata/events/itemshop_slot_4_xbox.csv
gamedata/events/itemshop_slot_5_xbox.csv
gamedata/events/itemshop_slot_6_xbox.csv


sub_289C720(a1, code, false)
->sub_289C8A0(a1, code, words=4u, false)

fetch 4 words:

log2_size = {6, 10, 8, 8}[word_set]
row=code_format & ((1 << log2_size) - 1)

word string tables

46D538729ABE6952
2A06FE632CCB5067
59A56450857003D8
4BD2C66723787045

// fast file:

.ff : header[2112]
.fd : header[4264]

// fd patch the ff file

byte magic[8]:  ()
uint32 version: 
struct XFile
{
  uint8_t magic[8]; // = 0x3030303066664154 "0000ffAT"
  uint32_t version; // = 0x27F
  uint8_t server;   // server only?
  uint8_t compression;
  uint8_t platform; // 0 = pc?
  uint8_t encrypted;
  uint64_t timestamp;
  uint32_t changelist;
  uint32_t archiveChecksum[4]; // checksum test
  char builder[32];
  uint32_t metaVersion;
  char mergeFastfile[64];
  char missionFastFiles[16][64];
  uint64_t size;
  uint64_t externalSize;
  uint64_t memMappedOffset;
  uint64_t blockSize[8];
  int8_t fastfileName[64]; // 6F0
  uint8_t signature[256];
  uint8_t aesIV[16];
};

season 1 -> file_4627c92be5fdcdd0.csv

dday

3868993
2868993
1868993

'\x8A'GSC\r\n0

magic: 0x0A0D4353478A

000000008B5C4C8 69? (nice)

array error {
  12506, // can't find script
  12503, // find dev string in script
  12502, // can't link script
}

import flags:
- AAAA 0x0F
  - 1, 2, 3, 4, 6, 7 -> true? ru 2A5F1D0
  - 5 -> false? ru 2A5F1D0
  - 8, 10 -> ?? 2A5DFA0
  - 9, 11 -> ?? 2A5E030
  - default: error linking
- E 0x10 dev import
- F 0x20 unk20, link with the resolve, 20 = check ns10, !20 = check ns20
- G 0x40 unk40
- H 0x80 unk80

export flags: 

0x86 = Class def?

HGFEDCBA
- A 0x02 linked
struct Manifest
{
  uint32_t version;
  uint32_t numFiles;
  LPCFileInfo files[128];
};


struct __declspec(align(8)) LPCFileInfo
{
  uint version;
  LPCFileStatus status;
  LPCFileCategory category;
  uint modes;
  uint size;
  uint128_t checksum;
  char padding[20];
  char fullPath[65];
};

struct __declspec(align(4)) GfxImage
{
  byte *pixels;
  byte *fallbackPixels;
  const char *name;
  GfxStreamedPartInfo streamedParts[4];
  GfxTexture texture;
  GfxTexture fallbackTexture;
  unsigned int flags;
  int alignment;
  unsigned int hash;
  uint totalSize;
  uint fallbackSize;
  GfxPixelFormat format;
  unsigned __int16 width;
  unsigned __int16 height;
  unsigned __int16 depth;
  GfxImageSemantic semantic;
  MapType mapType;
  GfxImageCategory category;
  byte levelCount;
  byte fallbackLevel;
  byte useFallback;
  byte streaming;
  byte streamedPartCount;
};


Offset	Xref	Function	Line	Column	Pseudocode line
00000009	r	sub_22B8D40	5	68	  if ( !***(_BYTE ***)a3 || (v6 = *(_OWORD *)(a1 + 32), sub_2EB8150(ASSET_TYPE_IMAGE, &v6, 256)) )
00000009	r	sub_22B8F50	5	68	  if ( !***(_BYTE ***)a3 || (v6 = *(_OWORD *)(a1 + 32), sub_2EB8150(ASSET_TYPE_IMAGE, &v6, 256)) )
00000009	r	sub_22B93B0	21	72	      if ( !***(_BYTE ***)a1 || (v9 = *(_OWORD *)(v6 + 32), sub_2EB8150(ASSET_TYPE_IMAGE, &v9, 256)) )
00000009	r	sub_22B96E0	49	14	        v11 = ASSET_TYPE_IMAGE;
00000009	r	sub_22B96E0	76	16	    if ( v11 == ASSET_TYPE_IMAGE )
00000009	r	sub_22BACA0	26	44	    result.physPreset = DB_FindXAssetHeader(ASSET_TYPE_IMAGE, name, 0, 0).physPreset;
00000009	r	db_allocate_element	33	17	    if ( type == ASSET_TYPE_IMAGE || (unsigned __int8)type == ASSET_TYPE_STREAMKEY )
00000009	r	DB_FindXAssetHeader(XAssetType,char const*,bool,int)	115	0	    case ASSET_TYPE_IMAGE:
00000009	r	sub_35BA300	46	29	  return DB_FindXAssetHeader(ASSET_TYPE_IMAGE, name, 1, -1);
00000009	r	sub_35BA3B0	6	29	  return DB_FindXAssetHeader(ASSET_TYPE_IMAGE, name, 1, -1);
00000009	r	sub_35BA570	145	47	  qword_BD6E410 = (__int64)DB_FindXAssetHeader(ASSET_TYPE_IMAGE, (uint64_t *)name, 1, -1).physPreset;
00000009	r	sub_35BA570	161	47	  qword_BD6E418 = (__int64)DB_FindXAssetHeader(ASSET_TYPE_IMAGE, (uint64_t *)name, 1, -1).physPreset;
00000009	r	sub_35BA570	177	47	  qword_BD6E420 = (__int64)DB_FindXAssetHeader(ASSET_TYPE_IMAGE, (uint64_t *)name, 1, -1).physPreset;
00000009	r	sub_35BA570	193	47	  qword_BD6E428 = (__int64)DB_FindXAssetHeader(ASSET_TYPE_IMAGE, (uint64_t *)name, 1, -1).physPreset;
00000009	r	sub_35BA570	209	47	  qword_BD6E430 = (__int64)DB_FindXAssetHeader(ASSET_TYPE_IMAGE, (uint64_t *)name, 1, -1).physPreset;
00000009	r	sub_35BA570	225	47	  qword_BD6E438 = (__int64)DB_FindXAssetHeader(ASSET_TYPE_IMAGE, (uint64_t *)name, 1, -1).physPreset;
00000009	r	sub_35BA570	241	47	  qword_BD6E440 = (__int64)DB_FindXAssetHeader(ASSET_TYPE_IMAGE, (uint64_t *)name, 1, -1).physPreset;
00000009	r	sub_35BA570	257	47	  qword_BD6E448 = (__int64)DB_FindXAssetHeader(ASSET_TYPE_IMAGE, (uint64_t *)name, 1, -1).physPreset;
00000009	r	sub_35BA570	273	47	  qword_BD6E450 = (__int64)DB_FindXAssetHeader(ASSET_TYPE_IMAGE, (uint64_t *)name, 1, -1).physPreset;
00000009	r	sub_35BA570	289	47	  qword_BD6E458 = (__int64)DB_FindXAssetHeader(ASSET_TYPE_IMAGE, (uint64_t *)name, 1, -1).physPreset;
00000009	r	sub_35BA570	305	47	  qword_BD6E460 = (__int64)DB_FindXAssetHeader(ASSET_TYPE_IMAGE, (uint64_t *)name, 1, -1).physPreset;
00000009	r	sub_35BA570	322	47	  qword_BD6E480 = (__int64)DB_FindXAssetHeader(ASSET_TYPE_IMAGE, (uint64_t *)name, 1, -1).physPreset;
00000009	r	sub_35BA570	338	47	  qword_BD6E488 = (__int64)DB_FindXAssetHeader(ASSET_TYPE_IMAGE, (uint64_t *)name, 1, -1).physPreset;
00000009	r	sub_35BA570	354	47	  qword_BD6E490 = (__int64)DB_FindXAssetHeader(ASSET_TYPE_IMAGE, (uint64_t *)name, 1, -1).physPreset;
00000009	r	sub_35BA570	370	47	  qword_BD6E498 = (__int64)DB_FindXAssetHeader(ASSET_TYPE_IMAGE, (uint64_t *)name, 1, -1).physPreset;
00000009	r	sub_35BA570	387	47	  qword_BD6E4A8 = (__int64)DB_FindXAssetHeader(ASSET_TYPE_IMAGE, (uint64_t *)name, 1, -1).physPreset;
00000009	r	sub_35BA570	404	47	  qword_BD6E4B0 = (__int64)DB_FindXAssetHeader(ASSET_TYPE_IMAGE, (uint64_t *)name, 1, -1).physPreset;
00000009	r	sub_35BA570	421	47	  qword_BD6E4B8 = (__int64)DB_FindXAssetHeader(ASSET_TYPE_IMAGE, (uint64_t *)name, 1, -1).physPreset;
00000009	r	sub_35BA570	436	47	  qword_BD6E4C0 = (__int64)DB_FindXAssetHeader(ASSET_TYPE_IMAGE, (uint64_t *)name, 1, -1).physPreset;
00000009	r	sub_35BA570	451	47	  qword_BD6E4C8 = (__int64)DB_FindXAssetHeader(ASSET_TYPE_IMAGE, (uint64_t *)name, 1, -1).physPreset;
00000009	r	sub_35BA570	466	47	  qword_BD6E4D0 = (__int64)DB_FindXAssetHeader(ASSET_TYPE_IMAGE, (uint64_t *)name, 1, -1).physPreset;
00000009	r	sub_35BA570	482	47	  qword_BD6E468 = (__int64)DB_FindXAssetHeader(ASSET_TYPE_IMAGE, (uint64_t *)name, 1, -1).physPreset;
00000009	r	sub_35BA570	498	47	  qword_BD6E470 = (__int64)DB_FindXAssetHeader(ASSET_TYPE_IMAGE, (uint64_t *)name, 1, -1).physPreset;
00000009	r	sub_35BA570	514	47	  qword_BD6E4D8 = (__int64)DB_FindXAssetHeader(ASSET_TYPE_IMAGE, (uint64_t *)name, 1, -1).physPreset;
00000009	r	sub_35BA570	530	47	  qword_BD6E4E0 = (__int64)DB_FindXAssetHeader(ASSET_TYPE_IMAGE, (uint64_t *)name, 1, -1).physPreset;
00000009	r	sub_35BA570	546	47	  qword_BD6E4E8 = (__int64)DB_FindXAssetHeader(ASSET_TYPE_IMAGE, (uint64_t *)name, 1, -1).physPreset;
00000009	r	sub_35BA570	562	47	  qword_BD6E4F0 = (__int64)DB_FindXAssetHeader(ASSET_TYPE_IMAGE, (uint64_t *)name, 1, -1).physPreset;
00000009	r	sub_35BA570	578	47	  qword_BD6E4F8 = (__int64)DB_FindXAssetHeader(ASSET_TYPE_IMAGE, (uint64_t *)name, 1, -1).physPreset;
00000009	r	sub_35BA570	593	47	  qword_BD6E500 = (__int64)DB_FindXAssetHeader(ASSET_TYPE_IMAGE, (uint64_t *)name, 1, -1).physPreset;
00000009	r	sub_3711C60	7	37	  if ( !(unsigned __int8)sub_2EB6C90(ASSET_TYPE_IMAGE, (uint64_t)name) )
00000009	r	sub_3711C60	10	38	  v3.physPreset = DB_FindXAssetHeader(ASSET_TYPE_IMAGE, name, 1, -1).physPreset;
00000009	r	sub_372F8C0	196	47	          v26.physPreset = DB_FindXAssetHeader(ASSET_TYPE_IMAGE, (uint64_t *)&name, 0, 0).physPreset;
00000009	r	UI_CoD_Init(bool)	87	63	                               ASSET_TYPE_IMAGE,
00000009	r	UI_CoD_Init(bool)	98	63	                               ASSET_TYPE_IMAGE,
00000009	r	sub_39B5320	10	39	    if ( !(unsigned __int8)sub_2EB6C90(ASSET_TYPE_IMAGE, (uint64_t)name) )
00000009	r	sub_39B5320	14	39	  a3->physPreset = DB_FindXAssetHeader(ASSET_TYPE_IMAGE, name, 1, -1).physPreset;
00000009	r	sub_4188690	34	36	  if ( (unsigned __int8)sub_2EB6C90(ASSET_TYPE_IMAGE, (uint64_t)hash) )
00000009	r	sub_4188E60	42	48	              if ( (unsigned __int8)sub_2EB6C90(ASSET_TYPE_IMAGE, (uint64_t)hash) )
00000009	r	sub_4189120	36	37	  if ( !(unsigned __int8)sub_2EB6C90(ASSET_TYPE_IMAGE, (uint64_t)hash) )
00000009	r	sub_4189120	56	37	  if ( !(unsigned __int8)sub_2EB6C90(ASSET_TYPE_IMAGE, (uint64_t)hash) )



Tommy 439 Tin Highway 3592841213 cannot directly set the origin on AI.  Use the teleport command instead.
Frank 620 Proper Giant 887228744 origin being set to NAN.
Sierra 54 Found Treasure 4178589916 Model was not cached by the linker.
 
Adam 564 Stealth Zombie 904544970 Attempt to register Client Field post finalization of Client Field registration period failed.
Rush 280 Extinct Storm 1403832952 Attempt to register ClientField failed.  Client Field set either already contains a field, or a hash collision has occurred.
November 990 Fake Operator 1480821566 Error registering client field.  Attempted field size is not acceptable bit number range 1->32
Ida 635 Rightful Elephant 467754466 Error registering client field.  bCallbacksFor0WhenNew (CF_CALLBACK_ZERO_ON_NEW_ENT) is disallowed for CF_SCRIPTMOVERFIELDS.
India 579 Deadly Gemini 657813230 Error registering client field.  bCallbacksFor0WhenNew (CF_CALLBACK_ZERO_ON_NEW_ENT) is disallowed for counter type clientfields. Due to it's treatment of the old and new val as a ring buffer, the counter type is not valid on a new snapshot, new ent, or demojump
Zulu 523 Electric Lion 247375020 Attempting to register client field in client field set using bits, but system is out of space.
Hotel 173 Tragic Goblin 3459949409 Failed to alloc client field - MAX_CLIENTFIELD_FIELDS_IN_SET=512 exceeded.
Zulu 339 Red

Script bundles:


struct ScriptBundle
{
  Hash name; // <- output
  uint32t unk10;
  uint32t unk14;
  uint64t unk18;
  SB_ObjectsArray sbObjectsArray; // <- read
};

struct SB_ObjectsArray
{
  uint64_t sbObjectCount;
  SB_Object *sbObjects;
};

struct SB_Object
{
  ScrString_t name;
  ScrString_t fullKey;
  uint kvpCount;
  ScriptBundleKVP *kvps;
  SB_ObjectsArray sbObjectsArray;
  SB_Type type;
  union SB_Val {
    int int_value,
    float float_value
  } val;
};

enum SB_Type : uint32_t
{
  SBT_INT = 2,
  SBT_FLOAT = 3,
  SBT_UNK20 = 20,
  SBT_UNK22 = 22,
  SBT_UNK25 = 25,
}
897625509 <- Could not find xasset

enum HksType : unsigned __int32
{
  HKST_TNIL = 0x0,
  HKST_TBOOLEAN = 0x1,
  HKST_TLIGHTUSERDATA = 0x2,
  HKST_TNUMBER = 0x3,
  HKST_TSTRING = 0x4,
  HKST_TTABLE = 0x5,
  HKST_TFUNCTION = 0x6,
  HKST_TUSERDATA = 0x7,
  HKST_TTHREAD = 0x8,
  HKST_TIFUNCTION = 0x9,
  HKST_TCFUNCTION = 0xA,
  HKST_TUI64 = 0xB,
  HKST_TSTRUCT = 0xC,
  HKST_TXHASH = 0xD,
  HKST_COUNT = 0xE,
};

struct __declspec(align(4)) LUIElement
{
  LUIAnimationState currentAnimationState;
  LUIElement *parent;
  LUIElement *prevSibling;
  LUIElement *nextSibling;
  LUIElement *firstChild;
  LUIElement *lastChild;
  LUIElementLayoutFunction layoutFunction;
  LUIElementRenderFunction renderFunction;
  LUIElementMouseFunction mouseFunction;
  LUIElementCloseFunction closeFunction;
  LUIAnimationState *prevAnimationState;
  LUIAnimationState *nextAnimationState;
  int cacheRef;
  UIQuadCache *cache;
  int priority;
  int textRef;
  int animationTimeLeft;
  int animationDuration;
  int strongLuaReference;
  float left;
  float top;
  float right;
  float bottom;
  LUIElement::$C4ABE194573AF402BCC947A60729C646 _anon_0;
  LUIElement::$3F3D4AB6D9209469EE6676535BC976BB _anon_1;
  LUIElement::$5DD91E8C5F43C9F95B3D72C7D7E9684A _anon_2;
  float textDimBottom;
  LUIElement::$D6C9215D993092FBE07E662A6FAC5A1A _anon_3;
  LUIElement::$A45ED59354BB6FB3558170006C28F313 _anon_4;
  UIModelIndex model;
};

Offset	Xref	Function	Line	Column	Pseudocode line
// requires_implements???
00000000	r	sub_2748240	27	41	      activeVersion = gObjFileInfo[0][v4].activeVersion;

// export
00000000	r	sub_27483D0	18	24	      activeVersion = v3->activeVersion;
00000000	r	sub_2748680	22	24	      activeVersion = v8->activeVersion;
00000000	o	sub_2748680	24	15	      v11 = &v8->activeVersion->magic[v8->activeVersion->export_table_offset];
00000000	o	sub_2748680	24	40	      v11 = &v8->activeVersion->magic[v8->activeVersion->export_table_offset];
00000000	r	sub_2748680	25	13	      if ( v8->activeVersion->exports_count )
00000000	r	sub_2748680	38	34	      if ( (unsigned int)v10 >= v8->activeVersion->exports_count )
00000000	r	sub_2749210	62	31	      if ( gObjFileInfo[0][v13].activeVersion == v6 && 24 * v13 != -137297104 )
00000000	r	sub_2749210	65	44	        activeVersion = gObjFileInfo[0][v13].activeVersion;
00000000	r	sub_2749580	22	45	      activeVersion = gObjFileInfo[0][result].activeVersion;

// unk20
00000000	r	sub_2748760	29	25	      activeVersion = v13->activeVersion;
00000000	r	sub_2748760	30	31	      ukn20 = (unsigned int)v13->activeVersion->ukn20;
00000000	o	sub_2748760	31	32	      if ( a2 >= (GSC_OBJ *)&v13->activeVersion->magic[ukn20]
00000000	r	sub_27488D0	30	25	      activeVersion = v13->activeVersion;
00000000	r	sub_27488D0	31	31	      ukn20 = (unsigned int)v13->activeVersion->ukn20;
00000000	o	sub_27488D0	32	32	      if ( a2 >= (GSC_OBJ *)&v13->activeVersion->magic[ukn20]


sub_5CEC20
sub_5CEC20(int, Hash*) -> candidate?
sub_5CD900

bgCached:
vehicle=1?
model=2
aitype=3
Shellshocks = 11
trigger string = 25
lui event name = 26
vehicle = 35
unk = 39

i64 C4
i64 CC

uint64_t unk0;
uint64_t unk8;

FA20D48
FA24D48

xmmword_FA20D48[535]
494C318
494FB30                     dq offset sub_8AD50
4957388
160E
hash_6a2c0104e062b67e -> exe/transmiterror

hash_103d9fc5251a961b -> exe/timeout
hash_10e55ca47aa702c3 -> exe/configstringmismatch
hash_14a1a00c94c4aa00 -> exe/servermessageoverflow
hash_18b754eabe4607a3 -> exe/err_client_cmd_overflow
hash_1b71195d6dba5a8a -> exe/uploadingstats
hash_1e6cab271952c006 -> exe/servercommandoverflow
hash_239fe9d0cb0c6f0f -> exe/loading_clip
hash_2c073c698c80eb59 -> exe/awaitinggamestate
hash_2cee3167c5923366 -> exe/playerkicked
hash_2eaf2c7c7baf900b -> exe/serverrestarttimewrap
hash_310c507cbbe41ae6 -> exe/awaitingtextures
hash_3675b7028ccd96e -> exe/wrongluachecksum
hash_3a7ff639695057ee -> exe/lobby_active_client_error
hash_3bbcc4747fa3cf17 -> exe/needstats
hash_3bd6a55fecd1a197 -> exe/migrationaborted
hash_3d71f94fabd6f837 -> exe/bad_stats
hash_45895821cf15538 -> exe/bad_clantag
hash_47676d10fc1de4f6 -> exe/err_bg_cache
hash_4986e3e6bf31972a -> exe/awaitingconnection
hash_4b63c34d02714cb3 -> exe/leftgame
hash_4c4d59ca7e4b6732 -> exe/serverkilled
hash_5357dcd85be8116a -> exe/migrationdropped
hash_56f89543edc68d21 -> exe/synchronizing
hash_5982772af1396777 -> exe/err_max_local_players
hash_5cbf5b7c69c9fdd0 -> exe/configstringmismatch3
hash_5cbf5c7c69c9ff83 -> exe/configstringmismatch2
hash_5d738f67984f550a -> exe/lostreliablecommands
hash_5e8105fa89aa601f -> exe/loading_film
hash_5ef6c5324c5818b8 -> exe/awaitinghost
hash_5ffc68ffd6d40f4f -> exe/err_server_timeout
hash_61540b0651498092 -> exe/serverrestartmisc
hash_64ce2ab0ed71fa9f -> exe/gamesettings
hash_6f78f378dccda017 -> exe/default_player
hash_705ab151af343885 -> exe/serverdisconnectreason
hash_75a2556c857105fa -> exe/err_reliable_cycled_out
hash_75adfbf9d8aab527 -> exe/awaitingchallenge
hash_7827a283793d8efa -> exe/err_invalid_demo_file
hash_7c1344299ade6eb5 -> exe/disconnectedfromownlistenserver
hash_7e8a0ea9eec82d3f -> exe/matchended
hash_c5a876452271179 -> exe/err_not_received

old:
struct msg_t
{
  bool overflowed;
  bool readOnly;
  byte *data;
  byte *splitData;
  int maxsize;
  int cursize;
  int splitSize;
  int readcount;
  int bit;
  int lastEntityRef;
  bool flush;
  netsrc_t targetLocalNetID;
  PacketMode analysis;
};

i_mtl_t8_camo_i_mtl_t8_camo_dlc3_spacedust_04_c
i_mtl_wpn_t8_camo_topology_01_g
i_mtl_wpn_t8_camo_topology_04_c
i_mtl_wpn_t8_camo_topology_04_c
i_mtl_wpn_t8_camo_geometric_08_c
ximage_3265d7f73b57c73
ximage_f58160ce51d8124

Offset	Xref	Function	Line	Column	Pseudocode line
0000006C	r	Mark_XAssetHeader(void)	1855	0	    case ASSET_TYPE_PLAYLISTS:
0000006C	r	Mark_XAssetHeader(void)	1861	31	        Mark_SimpleAsset(v159, ASSET_TYPE_PLAYLISTS);
0000006C	r	Playlist_LoadAssets(void)	29	38	  v1.physPreset = DB_FindXAssetHeader(ASSET_TYPE_PLAYLISTS, assetName, 1, -1).physPreset;
0000006C	r	Playlist_LoadAssets(void)	54	38	  v6.physPreset = DB_FindXAssetHeader(ASSET_TYPE_PLAYLISTS, assetName, 1, -1).physPreset;
0000006C	r	Playlist_LoadAssets(void)	79	39	  v11.physPreset = DB_FindXAssetHeader(ASSET_TYPE_PLAYLISTS, assetName, 1, -1).physPreset;

ximage_ce8f8ad3c930512 dice cod18

i_mtl_wpn_t8_camo_topology_04_c

ximage_ee83883ec8d08f topology 1

ASSET_TYPE_UNLOCKABLE_ITEM_TABLE -> sub_6B63F0

music zm_frontend


RegisterBool 3D04010
             45479E9
             FA7F258

Animtree = sub_2755AB0

DVAR_NONE = 0,
DVAR_ARCHIVE = 1 << 0, // 0x1
DVAR_USERINFO = 1 << 1, // 0x2
DVAR_SERVERINFO = 1 << 2, // 0x4
DVAR_SYSTEMINFO = 1 << 3, // 0x8
DVAR_LATCH = 1 << 4, // 0x10
DVAR_ROM = 1 << 5, // 0x20
DVAR_SAVED = 1 << 6, // 0x40
DVAR_INIT = 1 << 7, // 0x80
DVAR_CHEAT = 1 << 8, // 0x100
//DVAR_UNKNOWN = 1 << 9, // 0x200
DVAR_EXTERNAL = 1 << 10, // 0x400
//DVAR_UNKNOWN3x = 1 << 11-13, // 0x800-> // 0x2000
DVAR_SESSIONMODE = 1 << 15 // 0x8000