Game Core
CGameMode, CGameObject, CInputMgr, CStoveSDK, initialization, settings, hotkeys, timers, crash handling, services, utilities
1 of these functions sits outside the stretch the strip shows, 0x00400000 to 0x01100000; they are at the end of the list.
| Address | Size | Name | Description |
|---|---|---|---|
| 0x00C8BE70 | 121 | CUIWidget_0x40__scalar_deleting_dtor_v2 | Scalar deleting destructor for a CUIWidget subclass (size 0x40). Sets vtable, destroys child vector, calls base destructor. Optionally frees if param_2 bit 0 set. |
| 0x00C8BEF0 | 121 | CUIWidget_0x28__scalar_deleting_dtor_v2 | Scalar deleting destructor for a CUIWidget subclass (size 0x28). Sets vtable, destroys child vector, calls base destructor. Optionally frees if param_2 bit 0 set. |
| 0x00C8BF70 | 110 | CUISpreadsheet__add_next_sheet | Adds the next sheet to a UI spreadsheet/tab control. Calculates the next sheet number from the current sheet vector size at +0x494, formats the name as "Sheet%d", and calls the sheet loading function. Loops until successful (non-zero return). |
| 0x00C8D2B0 | 102 | OLEReader__navigate_path_ansi | Navigates an OLE directory tree using an ANSI (multibyte) path string. Converts the ANSI string to wide characters (wchar_t) via mbstowcs, then delegates to the wide-character path navigation function. Frees the temporary wide string after use. |
| 0x00C8D320 | 563 | OLEReader__navigate_path_wide | Navigates an OLE compound document directory tree using a wide-character path. Saves current directory on a stack, handles special paths (".." for parent, "." for root). Splits path on backslash separators, looks up each component via OLEDirectoryNode__find_child_by_name. Returns 1 on success, 0xFFFFFFFE if path not found (restores previous directory). |
| 0x00C8D860 | 527 | ExcelRecord__read_string_data | Reads string data from an Excel BIFF record. Handles both byte (ANSI) and wide (Unicode) strings based on a flag at offset 0x18. For byte strings, copies data into a byte buffer. For Unicode strings, resizes a wchar vector and converts. Supports multi-byte to wide-char conversion via mbstowcs/wcstombs. Returns the total record size consumed including header and any rich text/Asian phonetic extensions. |
| 0x00C8E420 | 142 | ExcelSheet__compute_total_record_size | Computes total serialized size for an Excel sheet by summing sizes from all record objects (via virtual size method at vtable+0x10). Iterates over records in two arrays (stride 0x38 and stride 0x2F8/cell records), plus a final record's size. Returns cumulative byte count. |
| 0x00C8E4B0 | 719 | ExcelSST__compute_continue_record_boundaries | Computes the CONTINUE record split boundaries for the Shared String Table (SST) in Excel BIFF format. Iterates over SST entries and calculates where to split based on the 0x2020 (8224 byte) BIFF record size limit. Handles both byte and Unicode strings differently (Unicode requires even alignment). Pushes split offsets into a vector for later use during serialization. |
| 0x00C8ED00 | 131 | OLEDirectoryEntry__decrement_indices_above | Recursively decrements directory entry indices that are above param_2 in the OLE directory tree. Adjusts sibling and child pointers (offsets 0x44, 0x48, 0x4C) and the parent count (offset 0x8). Recurses into all child entries. |
| 0x00C8F820 | 355 | FlatFileStorage__delete_records_by_indices | Deletes multiple fixed-size records from a flat file storage by their indices. Reads all records except those in the deletion list into a temporary buffer, reopens the file for writing, writes back the retained records, then reopens in the original mode. Updates record count and file size. Returns 1 on success, 0 if not writable. |
| 0x00C8F990 | 337 | FlatFileStorage__delete_record_by_index | Deletes a single fixed-size record from a flat file by its index. Reads all records except the specified one into a buffer, reopens the file for writing, writes back the retained records, then reopens in original mode. Updates record count and file size. Returns 1 on success, 0 if not writable or index out of bounds. |
| 0x00C8FAF0 | 68 | ExcelGrid__clear_cell | Clears a cell in the Excel grid at (row, col). Zeros the cell data value and resets the current positions to their initial values (stride 0x28 per cell, 0xC per row). Returns 1 on success, 0 if row/col out of bounds. |
| 0x00C90000 | 128 | OLEDirectoryNode__find_child_by_name | Searches a directory node's children for a child entry matching the given Unicode name. If the node has children (child SID != -1), iterates through all child pointers comparing their names. Returns the matching child node pointer, or 0 if not found. |
| 0x00C907B0 | 100 | ExcelVariant__to_int | Converts an Excel variant value to integer. Type 1 (int): direct copy. Type 2 (double): truncates to int. Type 3 (string): calls atoi to parse, returns 0 for empty strings. Returns 1 on success, 0 for unknown types. |
| 0x00C90820 | 61 | ExcelVariant__to_double | Converts an Excel variant to double. Type 2 (double): direct copy. Type 1 (int): casts to double. Returns 1 on success, 0 for other types. |
| 0x00C90860 | 58 | ExcelVariant__to_ansi_string | Copies the ANSI string value from an Excel variant (type 3) into the output buffer. If the string pointers are equal (empty), writes a null terminator. Returns 1 on success, 0 if not type 3. |
| 0x00C908A0 | 62 | ExcelVariant__to_unicode_string | Copies the Unicode string value from an Excel variant (type 4) into the output buffer. If the string pointers are equal (empty), writes a null terminator. Returns 1 on success, 0 if not type 4. |
| 0x00C909D0 | 62 | ExcelVariant__to_float10 | Converts an Excel variant to extended precision float. Type 2 (double): direct conversion. Type 1 (int): casts to float10. Returns 0.0 for other types. |
| 0x00C90A10 | 58 | excel_decode_rk_to_double | Decodes an Excel RK-encoded value to a double. The value is right-shifted by 2 bits and placed in the high 32 bits of a double. If bit 0 is set, the result is multiplied by 0.01 (percentage/currency scaling). This is the standard BIFF RK number encoding. |
| 0x00C90B40 | 49 | ExcelVariant__coerce_to_int | Coerces an Excel variant to int without a success flag. Type 1 (int): returns directly. Type 2 (double): truncates. Type 3 (string): calls atoi if non-empty. Returns 0 for other types or empty strings. |
| 0x00C90B80 | 41 | excel_decode_rk_to_int | Decodes an Excel RK-encoded value to int. Right-shifts by 2 bits. If bit 0 is set, multiplies by the percentage scaling factor (0.01) and truncates. This is the integer variant of the RK decode. |
| 0x00C90BB0 | 21 | excel_extract_rk_high_dword | Extracts the high DWORD of a double from an RK-encoded 8-byte value, masking off the lower 2 flag bits (& 0xFFFFFFFC). |
| 0x00C90BD0 | 14 | excel_encode_int_to_rk | Encodes an integer into Excel RK format. Left-shifts by 2 and sets bit 1 (integer flag). This is the inverse of excel_decode_rk_to_int. |
| 0x00C90C60 | 60 | OLEField__get_ansi_string | Copies ANSI string from OLE field data at column offset 0x3c8+0x34. Checks bit flag at +0x38. Uses row index * 0x3c stride. Returns 1 on success. |
| 0x00C90CA0 | 63 | OLEField__get_unicode_string | Copies Unicode (wide) string from OLE field data at column offset 0x3c8+0x30. Checks bit flag at +0x38 (must be set). Uses row index * 0x3c stride. Returns 1 on success. |
| 0x00C90CE0 | 146 | OLEField__extract_ansi_value | Extracts ANSI string value from an OLE field. Allocates buffer via STL_vector_byte_ctor_sized_zero, copies null-terminated string if type==3. Uses SEH for cleanup. |
| 0x00C90DF0 | 39 | OLEField__get_unicode_ptr | Returns pointer to Unicode string from OLE field at offset 0x3c8+0x30 if bit flag at +0x38 is set. Uses column index*0x3c stride. |
| 0x00C90E40 | 149 | OLEField__extract_unicode_value | Extracts Unicode (wide) string value from an OLE field. Allocates buffer via STL_vector_ushort_ctor_sized_zero, copies null-terminated wstring if type==4. Uses SEH for cleanup. |
| 0x00C90EE0 | 28 | OLERowTable__get_row_ptr | Returns pointer to row data at index param_2 in the row table. Row stride is 0x1c bytes. Base pointer at this+0x494. |
| 0x00C90F00 | 170 | OLERowTable__find_row_by_ansi_name | Searches row table for a row whose ANSI name (at offset 0x3c8+0x34) matches param_2. Iterates rows with stride 0x3c, compares strings byte-by-byte. Returns row pointer or 0. |
| 0x00C90FB0 | 176 | OLERowTable__find_row_by_unicode_name | Searches row table for a row whose Unicode name (at offset 0x3c8+0x30) matches param_2. Iterates rows with stride 0x3c, compares wide strings. Returns row pointer or 0. |
| 0x00C912A0 | 131 | OLETreeNode__increment_indices_recursive | Recursively increments node indices in an OLE tree structure when a new entry is inserted before them. Updates indices at +8, +0x44, +0x48, +0x4c. Recurses through child nodes at +0xc. |
| 0x00C91590 | 14 | ole_is_mini_stream_sector | Tests if a sector ID refers to a mini-stream sector. Returns inverted bit 1 of (param>>1), effectively checking if it's NOT a regular sector. |
| 0x00C915A0 | 12 | ole_is_regular_sector | Tests if a sector ID refers to a regular sector. Returns bit 1 of (param>>1). |
| 0x00C932F0 | 743 | ExcelWriter__write_cells_to_stream | Writes all cells of an Excel spreadsheet to an output stream. Iterates rows and columns, outputs int (type 1) or double with precision 15 (type 2) directly. For string type 3: if param_4 is set, wraps strings in quotes (handling embedded quote escaping via memchr), otherwise outputs raw. Writes separator param_3 between columns and endl between rows. |
| 0x00C947E0 | 825 | OLEHeader__parse_from_buffer | Parses OLE Compound Document header from raw buffer. Reads: 8-byte signature, 4-byte fields for minor/major version, byte order, sector size power, mini sector size power, total sectors, FAT sectors, first directory sector, first mini-FAT sector, DIFAT sectors, first DIFAT sector. Also reads 109 DIFAT entries and 2 computed power values. |
| 0x00C94D00 | 203 | BIFFString__parse_from_buffer | Parses a BIFF-format string from raw buffer. Reads 2-byte length, 1-byte flags (bit 3=has rich text, bit 2=has East Asian). If rich text, reads 2-byte run count. If East Asian, reads 4-byte extension size. Copies string data via FUN_00c8d860. Returns total bytes consumed. |
| 0x00C95170 | 605 | OLEDirectoryEntry__parse_from_buffer | Parses a 128-byte (0x80) OLE directory entry from raw buffer. Reads: 32 Unicode chars (name), 2-byte name size, 1-byte object type, 1-byte color flag, and multiple 8-byte timestamps/sector IDs (left sibling, right sibling, child, CLSID, state bits, creation time, modification time, start sector, stream size). |
| 0x00C95FC0 | 660 | ExcelSST__parse_shared_string_table | Parses BIFF Shared String Table (SST) record. Reads total string count and unique string count, then parses each string entry using BIFFString__parse_from_buffer. Handles SST continuation across record boundaries using stored offsets. Returns total bytes consumed. |
| 0x00C96480 | 265 | BIFFString__read_short_string | Reads a BIFF short string (1-byte length prefix). Flag byte determines encoding: 0=ANSI (allocates len+1 bytes), 1=Unicode (allocates (len+1)*2 bytes). Frees any existing string buffers at [0] and [1] before reading. Returns total bytes consumed. |
| 0x00C978A0 | 67 | ole_read_uint16_array_from_buffer | Reads an array of uint16 values from a byte buffer at a given offset. Reads param_4 count of little-endian uint16 values from buffer[param_1+param_3] into output[param_2]. |
| 0x00C97930 | 161 | ExcelCell__dispatch_compute_size | Dispatches compute-size to the appropriate cell record handler based on record type. Types: 6=Formula, 0xBD=MulRk, 0xBE=MulBlank, 0xFD=LabelSST, 0x201=Blank, 0x203=Number, 0x205=BoolErr, 0x27E=RK. Calls vtable+0x10 on the appropriate handler. Aborts on unknown type. |
| 0x00C97C10 | 51 | ExcelSST__compute_total_size | Computes SST record total size. Gets base data size from vtable+0xc, adds CONTINUE overhead for the string data portion (every 0x2020 bytes). Stores at param_1[6]. |
| 0x00C97C60 | 150 | BIFFFormula__compute_total_size | Computes formula record total size including sub-records (0x221=Array, 0x36=Continue, 0xBC=ShrFmla, 0x4BC=ShrFmla2) and optional 0x207=String record. Adds each sub-record's computed size. |
| 0x00C97DE0 | 142 | ExcelSheet__compute_total_size | Computes total size for a single Excel sheet. Sums CStreamNodeType208 objects (0x38 stride), cell records (0x2F8 stride via dispatch_compute_size), and the EOF record size. |
| 0x00C98230 | 195 | OLEPropertySet__add_char_string_entry | Adds a char string entry to the OLE property set. Iterates over directory entries (0x3c stride), compares ANSI strings to find duplicates. If not found, adds via CStringPair__set_char_string. Returns 0 if duplicate found, 1 if added. |
| 0x00C98300 | 201 | OLEPropertySet__add_wchar_string_entry | Adds a wchar_t string entry to the OLE property set. Iterates over directory entries (0x3c stride), compares Unicode strings to find duplicates. If not found, adds via CStringPair__set_wchar_string. Returns 0 if duplicate, 1 if added. |
| 0x00C983D0 | 185 | OLEPropertySet__add_indexed_char_string | Adds an ANSI string entry to the OLE property set with bounds checking. param_2 is an index; returns 0 if index >= entry count. Searches for duplicates before adding via CStringPair__set_char_string. |
| 0x00C98490 | 199 | OLEPropertySet__add_indexed_wchar_string | Adds a wchar_t string entry to the OLE property set with bounds checking. param_2 is an index; returns 0 if index >= entry count. Searches for duplicates before adding via CStringPair__set_wchar_string. |
| 0x00C98560 | 248 | OLEPropertySet__add_char_string_pair | Adds a pair of ANSI strings to the OLE property set. First finds param_2 in entries; if found, searches for param_3 among entries. Returns 0 if param_3 already exists, 1 if added. Returns 0 if param_2 not found. |
| 0x00C98660 | 269 | OLEPropertySet__add_wchar_string_pair | Adds a pair of wchar_t strings to the OLE property set. First finds param_2 in Unicode entries; if found, searches for param_3. Returns 0 if param_3 already exists, 1 if added. Returns 0 if param_2 not found. |
| 0x00C98770 | 49 | OLEStringPair__free_buffers | Frees two string buffers at param_1[0] and param_1[1], setting them to NULL after freeing. Used to clean up OLE string pair allocations. |
| 0x00C987B0 | 117 | ExcelCell__get_column_index | Gets the column index from an Excel cell record. Dispatches by record type: 6=Formula, 0xBD=MulRk, 0xBE=MulBlank, 0xFD=LabelSST, 0x201=Blank, 0x203=Number, 0x205=BoolErr, 0x27E=RK. Each type stores column at a different offset. Aborts on unknown type. |
| 0x00C990A0 | 320 | CExcelVariant__set_uint | Sets a variant value from an unsigned integer. If value < 500,000,001, stores as type 1 (integer). Otherwise converts to string via sprintf and stores as type 3 (ANSI string) in a vector buffer. |
| 0x00C991E0 | 23 | CExcelVariant__set_double | Sets a variant value as type 2 (double/float). Stores the 8-byte double value at param_1+8. |
| 0x00C99200 | 216 | CExcelVariant__set_ansi_string | Sets a variant value as type 3 (ANSI string). Allocates a byte vector, copies the null-terminated char* string into it. Sets type to 0 (empty) if string is empty. |
| 0x00C992E0 | 232 | CExcelVariant__set_wchar_string | Sets a variant value as type 4 (Unicode string). Allocates a ushort vector, copies the null-terminated wchar_t* string into it. Sets type to 0 (empty) if string is empty. |
| 0x00C993D0 | 23 | CExcelVariant__set_double_b | Sets a variant value as type 2 (double/float). Identical to set_double, stores 8-byte double at param_1+8. Variant instance at different address. |
| 0x00C993F0 | 320 | CExcelVariant__set_uint_b | Sets a variant value from an unsigned integer. Same logic as set_uint: if < 500M stores as type 1, otherwise converts to string type 3. Variant instance at different address. |
| 0x00C99530 | 216 | CExcelVariant__set_ansi_string_b | Sets a variant value as type 3 (ANSI string). Same logic as set_ansi_string. Variant instance at different address. |
| 0x00C99610 | 232 | CExcelVariant__set_wchar_string_b | Sets a variant value as type 4 (Unicode string). Same logic as set_wchar_string. Variant instance at different address. |
| 0x00C9A1A0 | 313 | OLETreeNode__rebalance | Rebalances an OLE directory tree node. Sets left child SID (offset 0x44), right sibling SID (offset 0x48), and root/child SID (offset 0x4c) for directory entries in the tree. Initializes unlinked nodes with SID=0xFFFFFFFF (no child/sibling). Processes nodes from a vector of directory entry pointers. |
| 0x00C9F560 | 79 | ole_write_wchar_array_to_buffer | Copies a wchar_t array to a byte buffer in little-endian format. Each wchar_t is written as 2 bytes at the destination starting from param_3 offset. Used for writing Unicode strings in OLE/BIFF records. |
| 0x00C9FF30 | 1 | stub_nop_00c9ff30 | Single-byte stub function (size=1) |
| 0x00C9FF40 | 1 | stub_nop_00c9ff40 | Single-byte stub function (size=1) |
| 0x00C9FF50 | 1 | stub_nop_00c9ff50 | Single-byte stub function (size=1) |
| 0x00C9FF60 | 1 | stub_nop_00c9ff60 | Single-byte stub function (size=1) |
| 0x00C9FF70 | 1 | stub_nop_00c9ff70 | Single-byte stub function (size=1) |
| 0x00C9FF80 | 1 | stub_nop_00c9ff80 | Single-byte stub function (size=1) |
| 0x00C9FF90 | 1 | stub_nop_00c9ff90 | Single-byte stub function (size=1) |
| 0x00C9FFA0 | 1 | stub_nop_00c9ffa0 | Single-byte stub function (size=1) |
| 0x00C9FFB0 | 1 | stub_nop_00c9ffb0 | Single-byte stub function (size=1) |
| 0x00C9FFD0 | 1 | stub_nop_00c9ffd0 | Single-byte stub function (size=1) |
| 0x00C9FFE0 | 1 | stub_nop_00c9ffe0 | Single-byte stub function (size=1) |
| 0x00C9FFF0 | 1 | identity_return_ecx | Identity function that returns its input parameter unchanged |
| 0x00CA0000 | 1 | identity_return_ecx_00ca0000 | Identity function that returns its input parameter unchanged |
| 0x00CA3400 | 135 | CEntryQueueTable__ctor | Constructs CEntryQueueTable. Sets vtable, initializes RB-tree map (sentinel node with self-referencing pointers), calls initialization function. |
| 0x00CA3490 | 65 | CEntryQueueTable__clear | Clears CEntryQueueTable by destroying all nodes in the internal RB-tree map. |
| 0x00CA34E0 | 102 | CEntryQueueTable__dtor | Destructor for CEntryQueueTable. Sets vtable, clears data, then destroys the RB-tree map. |
| 0x00CA35B0 | 123 | CEntryQueueTable__scalar_deleting_dtor | Scalar deleting destructor for CEntryQueueTable. Calls dtor, then frees memory (0xC bytes) if flag bit 0 is set. |
| 0x00CA3640 | 72 | CEntryQueueTable__find_by_id | Looks up an entry in CEntryQueueTable by ID using lower_bound on the RB-tree. Returns value at offset 0x14 of the found node, or 0 if not found. |
| 0x00CA36A0 | 165 | CEntryQueueTable__load_from_bex | Loads CEntryQueueTable from BEX file. Clears existing data, allocates GameData (0x5A8 bytes), calls load_bex_file. Destroys GameData on success. Returns 1 on success, 0 on failure. |
| 0x00CA3750 | 166 | CEntryQueueTable__load_from_xls | Loads CEntryQueueTable from XLS file. Clears existing data, allocates GameData (0x5A8 bytes), calls parse_xls_rows. Destroys GameData on success. Returns 1 on success, 0 on failure. |
| 0x00CA3800 | 1997 | CEntryQueueTable__parse_xls_rows | Parses EntryQueue.xls rows into CEntryQueueTable. Opens OLE file, iterates rows starting from row 3. Each row populates a 0x738-byte entry with: ID, 7 string fields (name variants, sprite paths), numeric flags. Inserts into RB-tree map by ID. Shows MessageBox on duplicate key or load failure. |
| 0x00CA3FD0 | 852 | CEntryQueueTable__load_bex_file | Loads CEntryQueueTable from binary file EntryQueue.bex. Reads entry count, then for each entry reads fields via sequential ReadFile calls matching the XLS structure (0x738 bytes per entry). Inserts into RB-tree map. Shows MessageBox on file open failure. |
| 0x00CA4330 | 122 | CEntryQueueTable__free_all_entries | Traverses all nodes in CEntryQueueTable's RB-tree, freeing the 0x738-byte entry data for each node. Calls rb_tree erase_all to reset the tree structure after. |
| 0x00CA43B0 | 96 | CEntryQueueTable__insert_if_not_exists | Inserts a key-value pair into CEntryQueueTable's map only if the key doesn't already exist. Returns 0 if key was found (no insert), 1 if inserted. |
| 0x00CA4410 | 1 | rb_tree_free_entries_and_reset | Rb tree free entries and reset |
| 0x00CA4430 | 1699 | CEntryQueueTable__convert_xls_to_bex | Converts EntryQueue.xls to EntryQueue.bex binary format. Opens both XLS files (source + output), copies field data from map entries into the output sheet using OLE field setters. Deletes the XLS file and saves the BEX result. |
| 0x00CA4AE0 | 115 | rb_tree_uint__erase_all_and_reset | Erases all nodes from an RB-tree map with uint keys. Traverses in-order, recursively destroys subtrees, frees each 0x18-byte node, then resets sentinel pointers and size to 0. |
| 0x00CA4B70 | 27 | get_entry_queue_data_by_id | Global accessor for entry queue data. Checks if singleton exists, delegates to CEntryQueueTable__find_by_id. Returns 0 if singleton not initialized. |
| 0x00CA4B90 | 203 | init_entry_queue_table_singleton | Initializes the CEntryQueueTable singleton (DAT_0171dd18). Destroys existing instance, creates new one, loads data from BEX or XLS depending on DAT_0135e606 flag. Returns 1 on success. |
| 0x00CA4C80 | 30 | entry_queue_table_insert_if_not_exists | Global wrapper to insert into entry queue table singleton. Checks singleton exists, delegates to insert_if_not_exists. |
| 0x00CA4CF0 | 40 | CLuaHost__ctor | Constructs CLuaHost. Sets vtable, creates a new Lua state via luaL_newstate, stores in member at offset 4. Sets initialized flag at offset 8 to 1 if state creation succeeded. |
| 0x00CA4D20 | 82 | CLuaHost__dtor | Destructor for CLuaHost. Sets vtable, closes the Lua state if it exists via lua_close, zeroes the state pointer. |
| 0x00CA4D80 | 103 | CLuaHost__scalar_deleting_dtor | Scalar deleting destructor for CLuaHost. Calls dtor (closes lua state), then frees 0xC bytes if flag bit 0 is set. |
| 0x00CA4DF0 | 18 | CLuaHost__create_new_state | Creates a new Lua state for CLuaHost via luaL_newstate. Returns true if state was created successfully. |
| 0x00CA4E10 | 28 | CLuaHost__close_state | Closes the Lua state in CLuaHost if it exists. Zeroes the state pointer after closing. |
| 0x00CA4E30 | 55 | CLuaHost__copy_ctor | Copy constructor for CLuaHost. Sets vtable, creates a new Lua thread from source's state via lua_newthread (json__internal_00523230). Sets initialized flag. |
| 0x00CA4E80 | 43 | CLuaHost__scalar_deleting_dtor_noclose | Scalar deleting destructor for CLuaHost variant that doesn't close the lua state. Just sets vtable, zeroes member, and optionally frees 0xC bytes. |
| 0x00CA4EB0 | 33 | CLuaHost__clone_state | Clones a Lua state from another CLuaHost by creating a new thread via lua_newthread. Returns true if successful. |
| 0x00CA4F30 | 330 | CTimerBar__ctor | Constructs a CTimerBar (casting/skill timer). Initializes RB-tree sentinel node (0x24 bytes), sets duration/start/delay parameters, initializes 24 color segments (0x20 bytes each, 0x300 total), and default color based on direction flag. |
| 0x00CA5080 | 78 | CTimerBar__free_tree_node | Frees the 0x24-byte RB-tree sentinel node of a CTimerBar if it exists. |
| 0x00CA50D0 | 78 | CTimerBar__free_tree_node_variant | Variant of CTimerBar tree node free. Frees the 0x24-byte RB-tree sentinel node if it exists. |
| 0x00CA5120 | 95 | CTimerBar__init_segments | Initializes CTimerBar color segments by calling segment setup function, then calls thunk for finalization. |
| 0x00CA5180 | 767 | CTimerBar__update_progress | Updates CTimerBar progress. Calculates elapsed time ratio using timeGetTime (or EffectMap timer). Determines current phase (0-7) based on progress thresholds, sets segment count (3-24). Handles timer extension at 60s boundary. Calculates visual position using tangent curve for smooth animation. |
| 0x00CA5480 | 84 | CTimerBar__calculate_tangent_position | Calculates tangent-based position for a timer bar segment. Uses tan(progress * constant) as denominator. Direction flag determines addition or subtraction. |
| 0x00CA54E0 | 277 | CTimerBar__insert_segment | Inserts a timer segment into CTimerBar's RB-tree. Creates 0x24-byte node with key, position, value, and direction flag. Uses lower_bound to find insertion point. |
| 0x00CA5600 | 427 | CTimerBar__set_progress_from_elapsed | Sets CTimerBar progress from elapsed/total ratio. Determines phase (0-7) based on progress thresholds, sets segment count (3-24). Reverses segment count if direction flag set. Normalizes progress within phase bounds. |
| 0x00CA59C0 | 115 | rb_tree_0x24__erase_all_and_reset | Erases all nodes from an RB-tree with 0x24-byte nodes. Traverses in-order, recursively destroys subtrees, frees each node, resets sentinel. |
| 0x00CA5BB0 | 134 | rb_tree_0x34c__destroy_subtree | Recursively destroys a subtree of 0x34C-byte RB-tree nodes (CTimerBar entries). Calls CTimerBar__init_segments before freeing each node. |
| 0x00CA5C90 | 223 | CTimerBarMgr__reset | Resets CTimerBarMgr. Zeroes all fields, allocates fresh 0x34C-byte RB-tree sentinel, destroys all existing timer bar entries, resets tree to empty. Sets active flag to 1. |
| 0x00CA5D70 | 70 | CTimerBarMgr__free_sentinel_node | Frees the 0x34C-byte RB-tree sentinel node of CTimerBarMgr if it exists. |
| 0x00CA5DC0 | 79 | CTimerBarMgr__destroy_tree_and_sentinel | Destroys the entire RB-tree of CTimerBarMgr including all subtree nodes, then frees the 0x34C-byte sentinel node. |
| 0x00CA5E20 | 119 | CTimerBarMgr__cleanup_and_free | Cleans up CTimerBarMgr by calling init_segments on the sentinel, then freeing the 0x34C-byte sentinel node. |
| 0x00CA5EA0 | 81 | CTimerBarMgr__free_sentinel_node_variant | Variant of CTimerBarMgr free sentinel node. Frees 0x34C-byte RB-tree sentinel if it exists. |
| 0x00CA5F00 | 90 | CTimerBarMgr__destroy_tree_and_free | Destroys all RB-tree nodes and frees the 0x34C-byte sentinel for CTimerBarMgr. |
| 0x00CA5F60 | 68 | CTimerBar__deinit_segments | Deinitializes CTimerBar segments by calling init_segments wrapper. |
| 0x00CA5FB0 | 183 | CTimerBarMgr__dtor | Destructor for CTimerBarMgr. Copies state fields, destroys RB-tree, frees sentinel node, calls stub cleanup functions. |
| 0x00CA60D0 | 204 | CTimerBarMgr__scalar_deleting_dtor | Scalar deleting destructor for CTimerBarMgr. Calls dtor logic, then frees 0x24 bytes if flag bit 0 is set. |
| 0x00CA61A0 | 555 | CTimerBarMgr__add_timer | Adds a timer bar entry to CTimerBarMgr. Removes existing entry with same key if found. Creates CTimerBar with given parameters, copies it into a new 0x34C RB-tree node, and inserts into tree. |
| 0x00CA63D0 | 219 | CRenderQueue__acquire_next_slot | Acquires the next slot in a circular render queue. If queue is full, grows the buffer. Allocates 0x28-byte entry if slot is empty. Returns pointer to the acquired slot. |
| 0x00CA64B0 | 7 | CTimerBarMgr__copy_field_0x10_to_0x14 | CTimerBarMgr helper that copies field at offset 0x10 to offset 0x14. Likely snapshots a timer state value (e.g., previous tick count). Called in context of CTimerBarMgr singleton. |
| 0x00CA64C0 | 325 | init_timer_bar_mgr_singleton | Initializes the CTimerBarMgr singleton (DAT_0171dd1c). Allocates 0x24-byte manager, creates 0x34C-byte RB-tree sentinel, resets tree. Returns 1 on success, 0 on failure (destroys on init fail). |
| 0x00CA6610 | 28 | destroy_timer_bar_mgr_singleton | Destroys the CTimerBarMgr singleton (DAT_0171dd1c). Calls scalar deleting dtor and nulls the global pointer. |
| 0x00CA6630 | 57 | CRenderQueue__flush_pending_meshes | Flushes pending meshes in a render queue. Iterates the pending mesh list, calls CRenderPipeline__classify_and_enqueue_mesh with type 0x201 for each, then resets the pending list. |
| 0x00CA6670 | 57 | CRenderQueue__flush_pending_meshes_variant | Variant of CRenderQueue flush. Iterates pending meshes at offset 4/8, enqueues each via CRenderPipeline__classify_and_enqueue_mesh with type 0x201, resets list. |
| 0x00CA66B0 | 1328 | CTimerBar__render_forward_direction | Renders a CTimerBar in forward direction (direction=0). Sets up 24 vertices for 8 segments in an octagonal pattern. For each phase, inserts segment control points. Updates progress positions from CTimerBar__update_progress. Offsets vertices by screen position and enqueues render command. |
| 0x00CA6C00 | 764 | CTimerBar__render_reverse_direction | Renders a CTimerBar in reverse direction (direction=1). Same octagonal 8-segment layout but with reversed vertex assignments. Updates progress per phase, copies vertex data to next segment when phases change, enqueues render command. |
| 0x00CA6F20 | 241 | CTimerBar__render_forward_with_offset | Renders a CTimerBar in forward direction with screen offset. Updates progress for current phase, applies position offsets (x+12+param, y+12+param), enqueues render command. Simplified version of render_forward_direction. |
| 0x00CA70B0 | 704 | rb_tree__extract_and_rebalance | RB-tree node extraction with rebalancing. Removes a node, fixes parent/child links, performs red-black tree rebalancing with rotations. Full implementation of std::_Tree::_Extract. Decrements tree size. |
| 0x00CA7580 | 84 | rb_tree__rotate_left | RB-tree left rotation. Promotes right child, updates parent pointers, fixes tree root if needed. |
| 0x00CA75E0 | 88 | rb_tree__rotate_right | RB-tree right rotation. Promotes left child, updates parent pointers, fixes tree root if needed. |
| 0x00CA78D0 | 131 | rb_tree_0x20__destroy_subtree | Recursively destroys an RB-tree subtree of 0x20-byte nodes. Calls CReportStorage__dtor on each node's data before freeing the node. |
| 0x00CA7EA0 | 229 | init_report_manager_singleton | Initializes the CReportManager singleton (DAT_0171dd20). Allocates 0x10-byte manager, creates RB-tree sentinel. Returns 1 on success, destroys and returns 0 on init failure. |
| 0x00CA7F90 | 27 | destroy_report_manager_singleton | Destroys the CReportManager singleton (DAT_0171dd20). Calls virtual destructor and nulls the global pointer. |
| 0x00CA8210 | 36 | CReportConfig__scalar_deleting_dtor | Scalar deleting destructor for CReportConfig. Sets vtable, frees 0x10 bytes if flag bit 0 set. |
| 0x00CA8240 | 103 | rb_tree_0x20__destroy_subtree_plain | Recursively destroys an RB-tree subtree of plain 0x20-byte nodes (no element destructors). Just frees each node. |
| 0x00CA8600 | 43 | CGameObject__ctor_base | Base constructor for CGameObject. Sets vtable, increments global object ID counter (64-bit), assigns unique ID to object at offsets 8/C. |
| 0x00CA8630 | 247 | CCursor__ctor | Constructs CCursor. Calls CSprite__ctor_base, sets vtable, loads cursors.spr and cursors.act resources, sets initial action to 3/2/0. |
| 0x00CA8EC0 | 7 | thunk_to_PTR_0119fe84_00ca8ec0 | Sets param to pointer to function at 0x0119fe84 |
| 0x00CA8F40 | 71 | CCursor__dtor | Destructor for CCursor. Sets vtable, calls CSprite__dtor_base to release cursor sprite/act resources and clean up. |
| 0x00CA9230 | 36 | CGameObject__scalar_deleting_dtor_00ca9230 | Scalar deleting destructor for CGameObject base. Sets vtable, frees 0x10 bytes if flag bit 0 set. |
| 0x00CA92D0 | 99 | CCursor__scalar_deleting_dtor | Scalar deleting destructor for CCursor. Sets vtable, calls CSprite__dtor_base, frees 0x140 bytes if flag bit 0 set. |
| 0x00CA9580 | 142 | calculate_direction_angle_2d | Calculates 2D direction angle in game degrees (0-360) from atan2 of X/Z delta. Converts from radians, wraps to [0, 360) range. |
| 0x00CAA740 | 298 | create_skill_effect_manager_by_type | Factory function that creates a CSkillEffectManager by type ID. Type 0x345: creates base manager (0x11CB0 bytes). Type 0x98C: creates extended manager (0x11CB8 bytes) with extra fields. Default: creates standard manager (0x11CA8 bytes). |
| 0x00CAB740 | 170 | calculate_direction_index_from_angle | Calculates a direction index from a floating-point angle. Gets the camera rotation from the global mode1 state, subtracts the input angle, and normalizes to [0, 360) range. If param_2 is 0, divides by standard angle increment. If param_2 is non-zero and angle is within a specific range, uses a different formula with offset for 8-direction mapping. |
| 0x00CAB920 | 111 | calculate_raw_direction_from_angle | Simple direction calculation from angle. Gets camera rotation, subtracts input angle, normalizes to [0, 360), then divides by the standard angle increment to get a direction index. Returns 0 if global mode1 state is null. |
| 0x00CABE60 | 56 | get_body_part_offset_for_action | Returns a body part Y-offset value based on an action type index. Switch: 0=0, 1=8, 2=16(default), 3=32, 4=24. Used for sprite positioning during different character actions (idle, walk, sit, etc). |
| 0x00CABF10 | 136 | get_normalized_camera_angle | Computes the normalized camera-relative angle. Gets camera rotation from mode1 state (offset 0xD0->0x30 XOR'd with key), subtracts the input angle, then normalizes to [0, 360) range using modular arithmetic. Returns the result as an unsigned integer. |
| 0x00CAC730 | 35 | get_costume_garment_id_by_type | Returns a costume garment sprite ID based on a type parameter. Type 1 returns 0x1104, type 2 returns 0x1105, otherwise returns the original param_2 unchanged. These are IDs for alternative garment costume sprites. |
| 0x00CACF20 | 189 | resolve_skill_upgrade_chain | Resolves a skill ID through an upgrade chain. If in specific game mode (get_field_0x8134 == 1) and skill is 0x19B2 or 0x19B3 (Dragon Breath variants), checks if the player has higher-tier skills (0x19B4, 0x19B3) with required components via CSkillEffect__HasRequiredComponents. Returns the highest available upgrade in the chain, or the original ID if no upgrade available. |
| 0x00CACFE0 | 1082 | remap_job_id_by_class_type | Remaps a base job/weapon ID to a class-specific variant. Takes a job ID and class type, checks various class-type predicates (FUN_00df9830=3rd class, FUN_00df9770=expanded, FUN_00df97a0/d0/00=other variants, FUN_00df9740=baby, FUN_00df9a00=Doram, FUN_00df9a70=Star Emperor, FUN_00df98b0=Soul Reaper). Each base ID maps to a different variant per class type. Handles weapon sprite IDs (0xFD6, 0xFDC), mount IDs, and Doram/SE/SR specific classes. |
| 0x00CADAC0 | 47 | get_elemental_type_from_skill_id | Maps a skill ID to an elemental type index. Skill 0x26D returns 0 (fire/default), 0x28B returns 1 (water), 0x299 returns 2 (wind). Used for elemental spirit summoning skills. |
| 0x00CADB80 | 55 | is_summon_skill_id | Returns true if the given ID is a summon/companion skill. Matches IDs: 0x81 (Call Homunculus), 0x17D (Call Pet), 0x14CE, 0x14D1, 0x1978. These are skills that summon pets, homunculus, or similar companions. |
| 0x00CADBC0 | 19 | is_wedding_effect_id | Returns true if the given effect ID is 0xB4 (180), which is the wedding/marriage visual effect. |
| 0x00CADC90 | 44 | is_monster_or_npc_job_id | Returns true if the job ID falls within monster or NPC ranges. Matches: 0x3E9-0xF9E (standard monster IDs 1001-3998) or 0x4E35-0x7CFF (extended monster/NPC IDs 20021-31999). Returns false for player job IDs and other ranges. |
| 0x00CADD30 | 14 | check_is_player_entity | Thin wrapper that calls FUN_00dfbce0 to check if the entity is a player type. Returns the result directly. |
| 0x00CADD40 | 30 | is_elemental_spirit_skill | Returns true if the skill ID is 0x8C3 or 0x8C4, which are elemental spirit skills (Summon Agni/Aqua). Returns false for all other IDs. |
| 0x00CAE0F0 | 56 | create_skill_effect_wrapper_a | Wrapper that calls CEntity__create_skill_effect with default parameters (0,0,0). Does not return as the callee handles flow. |
| 0x00CAE160 | 54 | create_skill_effect_wrapper_b | Wrapper that calls CEntity__create_skill_effect with default parameters (0,0,0). Identical to wrapper_a, likely a duplicate or from different callsite context. |
| 0x00CB39A0 | 1435 | submit_sprite_quad_to_render_queue | Submits a textured sprite quad to the global render queue. Takes screen-space bounds (param_1), texture/palette data (param_2), render flags (param_3), rotation offsets (param_4/5), and rotation angle (param_6). Sets up 4 vertices with UV coordinates from sprite frame data, handles optional rotation via sin/cos for the rotation angle. Manages the render queue deque (grow if full). Applies perspective correction for Z-sorting and classifies the mesh for the render pipeline. Special case for texture ID 0xD77B adjusts UV mapping. |
| 0x00CB3F40 | 89 | submit_rotated_sprite_quad | Submits a rotated sprite quad to the render queue. Sets the rotation angle to 180 degrees, then calculates screen-space offsets from the center point (param_4, param_5) and delegates to submit_sprite_quad_to_render_queue. |
| 0x00CB3FF0 | 53 | send_action_to_entity | Sends an action command (0x1D) to an entity if the entity pointer is non-null. Calls the entity's virtual method at vtable+8 with action type 0x1D and the given param_1 as data. Used for requesting actions like attack, pick up, etc. |
| 0x00CB4375 | 1 | vtable_dispatch_0x50_mid_entry | Vtable dispatch 0x50 mid entry |
| 0x00CC1E70 | 26 | CLightEffect__set_timer_delay | Sets a timer deadline for the light effect. Stores current time + param_2 (delay in ms) at offset 0xE4. |
| 0x00CC1E90 | 16 | CLightEffect__set_flag_c2 | Sets the byte flag at offset 0xC2 in the light effect object. Purpose likely controls a rendering or behavior mode. |
| 0x00CC1EA0 | 242 | CLightEffect__init_color_and_timing | Initializes a light effect's color channels and timing. Sets start and target RGBA values (offsets 0xB5-0xC0), rendering mode (0xC1=4), animation state (0xC5=0), duration (0xD0), and various control fields. If duration is non-zero, sets a timer deadline using timeGetTime + delay; otherwise zeros the timer. Enables the effect (0xE0=1). |
| 0x00CC1FA0 | 174 | CLightEffect__init_mode_and_timing | Initializes a light effect with mode, alpha, and timing parameters. Sets start/current alpha (0xB5-0xB6), mode (0xC1), extra params (0xC3-0xC4), step count (0xCC), duration (0xD0). Configures state flags. If duration is non-zero, sets a timer using timeGetTime. Enables the effect. |
| 0x00CC4210 | 87 | CBoundingBox__expand_to_include | Expands a bounding box (this) to include the extents of another box (param_2). Compares min/max values for each axis: if param_2's min is smaller, updates this->min; if param_2's max is larger, updates this->max. Operates on 4 float fields representing 2D bounding extents. |
| 0x00CC4EA0 | 478 | CGrannyEntity__ctor | Constructor for CGrannyEntity (3D animated model entity). Calls CEntity__ctor, sets vtable, initializes 30 mesh arrays and control slots, copies name string, creates stub object (35x35), initializes a vector of 0x1324 (4900) 12-byte elements for mesh/bone data. |
| 0x00CC5280 | 258 | CGrannyEntity__dtor | Destructor for CGrannyEntity. Frees 20 Granny animation controls, destroys 30 mesh objects and their triangle data buffers, frees Granny model instance, destroys two sub-objects at offsets 0x104 and 0x36e, then chains to CEffectGround__dtor and CEntity__dtor. |
| 0x00CC5450 | 289 | CGrannyEntity__scalar_deleting_dtor | Scalar deleting destructor for CGrannyEntity. Frees 20 Granny controls, 30 meshes and triangle buffers, model instance, sub-objects, chains to CEffectGround and CEntity dtors. If param_2 & 1, deallocates the 0xdc8-byte object. |
| 0x00CC5660 | 236 | CGrannyEntity__load_sub_model | Loads a sub-model (accessory/attachment) for a Granny entity. Calls virtual method to get resource path, loads resource via CResourceMgr, creates or resets the sub-object at offset 0x104. Returns pointer to the loaded sub-model. |
| 0x00CC5750 | 78 | CGrannyEntity__update_position_and_name | Updates entity position display. Gets mode manager, then calls position update function with entity's world position (offsets 0x10, 0x14, 0x18), a state field (offset 0x538), and the entity name string (offset 0x54c). |
| 0x00CC59B0 | 334 | CGrannyEntity__update_frame | Per-frame update for CGrannyEntity. Calls virtual update, processes idle effects, damage queue, and HP bar. Smoothly interpolates the entity's facing angle toward the target angle using angular difference clamped to 360 degrees, with a rotation speed constant. |
| 0x00CC5B30 | 204 | CGrannyEntity__advance_animation | Advances Granny animation for the entity. Gets system time, computes elapsed time (doubled for speed), accumulates into animation clock, calls SampleAndBuildPose. If control state is 2 and animation control has no duration left, resets to state 0 and re-reads textures. |
| 0x00CC5C70 | 251 | CGrannyEntity__advance_animation_scaled | Advances Granny entity animation with speed scaling. If entity state is not 2, sets visibility flag. When visible and speed factor (offset 0x68) is valid, advances animation scaled by 1/speed_factor. Also handles animation control duration expiry like advance_animation. |
| 0x00CC5D80 | 343 | CGrannyEntity__render_with_lighting | Renders a CGrannyEntity with lighting applied. Advances animation, computes perpendicular direction for lighting, sets up light color (200,200,200 base with 128 alpha). Dispatches to either FUN_00cc68f0 (billboard render) or FUN_00cc7180 (standard render) based on state at offset 0x650/0x2e0. |
| 0x00CC64F0 | 880 | CGrannyEntity__render_rigid_meshes | Renders rigid (non-skinned) meshes for a CGrannyEntity. Checks visibility, computes color with alpha, sets up rotation matrices from facing angle, projects to screen. Iterates meshes, gets rigid bone index, transforms vertices, projects to screen with depth, classifies for render pipeline. Handles skeleton setup for bounding box calculation. |
| 0x00CC6870 | 115 | CGrannyEntity__check_and_create_warg_effect | Checks if entity is job 0x49d (Warg/Wolf) and at mesh index 0x1c, if so creates skill effect 0x175 using position data from the mesh render buffer. XORs entity state flag with a constant for the effect parameter. |
| 0x00CC68F0 | 2172 | CGrannyEntity__render_billboard_meshes | Renders CGrannyEntity meshes in billboard mode (always facing camera). Sets up rotation matrices including Z-axis rotation from camera direction. Iterates all meshes, transforms and projects vertices, records vertex positions into the entity's position vector. Handles Warg special effect at mesh 0x1c. Loads sub-model for mesh index 1. |
| 0x00CC7180 | 1987 | CGrannyEntity__render_standard_meshes | Renders CGrannyEntity meshes in standard mode with lighting. Computes facing direction, terrain heights, rotation matrices, projects to screen. Iterates meshes: gets render data, transforms vertices with lighting color tint from param_3, projects to screen, stores mesh positions in position vector, saves per-mesh render state (render data ptr, index count, triangle count, transform matrices). Handles Warg effect and skeleton setup. |
| 0x00CC7960 | 1001 | CGrannyEntity__render_ground_shadow | Renders the ground shadow/footprint texture for a CGrannyEntity. Projects entity mesh vertex positions onto the ground grid, marks affected cells with shadow alpha (0x2f/0x5f), then renders a 5x5 textured quad grid around the entity position using CWalkGrid__render_textured_quad with UV coordinates computed from facing direction. |
| 0x00CC7D50 | 156 | CGrannyEntity__set_animation_state | Sets the animation state for a CGrannyEntity. Maps action IDs (0,8,0x18,0x20,0x28,0x30,0x40,0x50,0x58) to animation states (0-0xc). Frees all 20 existing Granny animation controls, resets animation clock to 0, reads new texture/animation via CRsmModel__ReadTextureNames for the new state. |
| 0x00CC7ED0 | 544 | CGrannyEntity__initialize_model_for_job | Initializes CGrannyEntity's 3D model based on job class. Loads model resource by path (offset 0x54c), instantiates Granny model, allocates mesh triangle data per mesh with system time for animation. Sets render mode: mode 1 for jobs 0x49d(Warg)/0x504, mode 2 for job 0x2d2, mode 0 otherwise. Warg gets special scale (30.0). |
| 0x00CC92B7 | 46 | caseD_1eb | Switch case handler fragment within a larger dispatch function. |
| 0x00CC944D | 22 | ground_skill_effect_fragment | Code fragment (mid-function entry point) that calls FUN_00cdfa00 to create a ground skill effect. Part of the ground skill effect processing flow, called from specific skill cases in the large switch. |
| 0x00CC9463 | 49 | caseD_2c6 | Switch case handler fragment within a larger dispatch function. |
| 0x00CC94DA | 49 | caseD_2cd | Switch case handler fragment within a larger dispatch function. |
| 0x00CC96C6 | 49 | ground_skill_create_fire_pillar_fragment | Code fragment (mid-function entry point) that creates skill effect 0x317 (Fire Pillar). Part of the ground skill effect processing switch in CEntity__process_ground_skill_effect. |
| 0x00CCCB20 | 147 | CSkillEvent__move_construct | Move constructor for a skill event structure (28 bytes). Copies 7 dwords from source, moves the embedded string (offsets 5-6) by transferring ownership and resetting source to empty SSO state (capacity=15, length=0). |
| 0x00CCD4F0 | 389 | CGameMode__send_shortcut_tree_entries | Iterates a std::map/set in-order from begin to end iterator. For each node, extracts a string at node offset +0x10 (handles SSO), dispatches it via CGameMode__dispatch_shortcut_command with opcode 0x12, then destroys the temp string. Game-specific function, not a standard library routine. |
| 0x00CCD680 | 173 | format_rgb_fixed_notation | Formats three float values (R,G,B from param_4/5/6) as fixed-point notation with 3 decimal places. Packs channel descriptors (type 0x10000000/0xb0000004/0x10000008) and calls charconv format_fixed_notation. |
| 0x00CCD730 | 94 | build_rgb_descriptor_array | Builds a 6-element array of RGB channel descriptors. Each channel has type (0x10000000, 0xb0000000, 0x10000000), offset (0, 4, 8), and float value from params. Used for color formatting. |
| 0x00CCEFC0 | 65 | seh_string_dtor_wrapper | SEH-wrapped std::string destructor. Sets up SEH frame and calls STL_string_dtor on the parameter. |
| 0x00CCF010 | 68 | seh_string_dtor_wrapper_00ccf010 | SEH-wrapped std::string destructor variant. Sets up SEH frame and calls STL_string_dtor. |
| 0x00CCF060 | 86 | seh_two_string_dtor | SEH exception cleanup handler that destructs two std::string objects. Calls STL_string_dtor twice under SEH protection. |
| 0x00CCF530 | 111 | check_weight_overload_warning | Checks if the player's weight exceeds 90% of max weight. Computes (weight * 100) / max_weight and checks if > 89. If over limit and param_1 is true, displays a chat message (message ID 0x133 = overweight warning). Returns 1 if overweight, 0 otherwise. |
| 0x00CCFBD0 | 63 | find_path_wrapper | Wrapper for pathfinding. Returns 0 if param_7 (output path) is null. Otherwise calls CPathFinder__find_path_astar with max distance 0x96, max nodes 0xf, current timestamp, and source/destination coordinates. |
| 0x00CCFC10 | 206 | find_path_with_temp_buffer | Creates a temporary path buffer (local vector), calls CPathFinder__find_path_astar with max distance 0x96 and max nodes 0xf. Cleans up the temp buffer after pathfinding. Returns the pathfinding result. |
| 0x00CCFF10 | 132 | backup_chat_log_file | Creates a backup of the chat log file. Checks if chat logging is enabled (DAT_01737b8c), gets file type 7, formats the filename from a global string at DAT_0135f6e8, appends ".bak" suffix, and closes the file handle. |
| 0x00CD0100 | 65 | step_position_toward_target | Steps param_3 and param_4 position values toward param_1 and param_2 targets by param_5 increment per call. Used for smooth position interpolation. |
| 0x00CD3450 | 32 | broadcast_tree_strings_via_send | Broadcasts all string entries from a global tree (DAT_01389940 + 0x18) using std__tree_inorder_traverse_and_send with opcode 0x12. |
| 0x00CD3470 | 93 | seh_insert_string_wrapper | SEH-wrapped call to SpriteAction__insert_and_copy_string. Sets up SEH frame and delegates. |
| 0x00CD34D0 | 139 | get_entity_name_color | Determines the name display color for an entity based on its ID. Returns 0xffff (yellow) for party/guild members (via is_value_in_vector_b). Returns 0xf7b895 for entities passing can_entity_be_targeted. For entities in monster range (1001-3998) or pet range (20021-22991), returns 0xc3c3ff (light blue). For all others (players, NPCs outside those ranges), returns 0xffffff (white). |
| 0x00CD3560 | 15 | thunk_SpriteAction__serialize_tree_to_buffer | Thunk to SpriteAction__serialize_tree_to_buffer. Direct tail call. |
| 0x00CD3570 | 15 | thunk_SpriteAction__lookup_or_create_cached | Thunk to SpriteAction__lookup_or_create_cached. Direct tail call. |
| 0x00CD3580 | 18 | CGameMode__get_string_8104 | Returns pointer to the std::string buffer at offset +0x8104 in the game mode object. Handles SSO: returns direct pointer if capacity <= 0xf, otherwise dereferences the heap pointer. |
| 0x00CD35A0 | 18 | CGameMode__get_string_80ec | Returns pointer to the std::string buffer at offset +0x80ec in the game mode object. Handles SSO: returns direct pointer if capacity <= 0xf, otherwise dereferences the heap pointer. |
| 0x00CD3B10 | 888 | CEmblem__load_emblem_from_cache | Loads a guild/party emblem from the temporary cache directory. Searches the emblem name list for a match, if not found opens the file from tmpEmblem directory, reads header (size + name) and bitmap data into the output buffer. Adds successfully loaded emblems to the name cache. |
| 0x00CD4060 | 382 | CGameMode__pick_cell_from_mouse | Picks the map cell under the mouse cursor. Computes a screen ray from mouse position, queries the quadtree for candidate cells, raycasts against terrain height for each cell to find the closest hit. Returns true if a valid cell was found, with coordinates in param_2/param_3. |
| 0x00CD4E40 | 595 | CCharName__get_or_create_thread_local_name | Gets or creates a thread-local character name entry. Uses a global red-black tree keyed by thread handle. On first call per thread, initializes the global tree with atexit cleanup. Strips the '@' suffix and 3 chars before it from the name (guild/party tag removal), then formats the cleaned name into a 16-char buffer on the tree node. |
| 0x00CD50A0 | 395 | CGameMode__world_to_cell_with_subcell | Converts world coordinates (float) to cell coordinates (int) with sub-cell precision. Divides by cell size, adds map half-width/height offset, floors to get integer cell. Also computes sub-cell position (0-15 range) for fine-grained positioning within a cell. |
| 0x00CD5230 | 181 | CGameMode__world_to_cell | Converts world coordinates (float) to cell coordinates (int). Divides by cell size, adds half map dimension offset, floors result. Simpler version of world_to_cell_with_subcell without sub-cell precision output. |
| 0x00CD5510 | 51 | CGameMode__get_player_cell_position | Gets the local player's current cell coordinates by reading world position from the map object (offsets +0x10, +0x18) and converting to cell coords via CGameMode__world_to_cell. Output is integer cell X/Y, not world floats. |
| 0x00CD58B0 | 537 | CGameMode__check_navigation_quest_available | Checks if navigation/quest system is available. Verifies no active instances at mode offsets 0x48/0x4c/0x54. Then tries multiple quest data IDs (0x1dc5, 0x1ab1, 0x18ac, 0x1895, 0x62de) in sequence until finding one with valid data. Returns 1 if any quest data found, 0 otherwise. |
| 0x00CD5AD0 | 512 | CGameMode__render_mouse_cursor_effects | Renders visual effects at the mouse cursor position. Computes screen ray from cursor, queries quadtree for visible cells. For each cell's objects, calls their render method with the cursor ray data. If entity has special rendering enabled (offset 0x116), also renders terrain overlay effects with height-adjusted parameters. |
| 0x00CD5CD0 | 56 | CGameMode__notify_minimap_mark | Sends a minimap mark notification. If the minimap object at offset 0xd4 exists, dispatches message type 2 with param_2 as the mark ID through the object's virtual method. |
| 0x00CD5D10 | 373 | CGameMode__read_name_balloon_registry | Reads the NameBaloon registry setting from Windows registry. Constructs the registry path from the global server name, opens HKEY_LOCAL_MACHINE key, reads the DWORD value, and sets game option 0x5c (name balloon display) based on the registry value. |
| 0x00CD5E90 | 3621 | CGameMode__initialize_map_session | Major initialization function when entering a new map. Clears all entity trees, effect lists, quadtree nodes. Rebuilds UI layout, initializes pathfinder, resets all game state counters/flags/timers. Reads NameBaloon registry setting. Handles map-specific features (Christmas map snow, Comodo night effects). Initializes Lua state for map scripts. Sends network keepalive, applies anti-cheat policy. Creates scheduled events for periodic updates. |
| 0x00CD6CC0 | 261 | CGameMode__create_periodic_timer_events | Creates two periodic timer events for the game session. First event fires every 60 seconds (60000ms, type 2). Second event fires every 5 seconds (5000ms, type 1) with an incrementing ID. Both are registered with CUIEventManager for periodic callbacks. |
| 0x00CD6DD0 | 108 | CGameMode__clear_all_entity_status_effects | Clears status effects and resets idle animation for the local entity, then optionally (if param_2==0) iterates all entities in the entity list and clears status effects for any entity that has an active status flag at offset 0x2b4. |
| 0x00CD6E40 | 81 | CGameMode__refresh_entity_grid_display | Refreshes the entity grid/minimap display. Calls the virtual reset method on the entity tracker at offset 0x2b4, sends event type 6/0x22 to the global UI handler, and sends grid window update with current map ID and coordinates. |
| 0x00CD6EA0 | 93 | CGameMode__is_cell_unwalkable | Checks if a map cell is unwalkable. Returns 0 if the cell is within bounds, has valid data, is not type 5 (water), and IS type 1 (wall/unwalkable). Returns 1 for walkable cells or out-of-bounds coordinates. |
| 0x00CD73B0 | 55 | check_chebyshev_distance_within_range | Checks if two positions are within Chebyshev distance (L-infinity / max norm) range. Returns 1 if both \|x1-x2\| <= range AND \|y1-y2\| <= range, i.e. the target is within a square area. This is NOT Manhattan distance (which would sum the axes). Used for attack/skill range checks in RO's tile-based system. |
| 0x00CD73F0 | 93 | CGameMode__is_cell_walkable | Checks if a map cell is walkable. Returns 1 if the cell is within bounds, has valid data, cell type is not 1 (wall) and not 5 (water/unwalkable). Returns 0 for walls, water, or out-of-bounds coordinates. |
| 0x00CD7450 | 93 | CGameMode__is_cell_blocked | Checks if a map cell is blocked. Returns 1 if the cell is unwalkable (type 1 or 5) or out of bounds, 0 if walkable. Inverse logic of is_cell_walkable. |
| 0x00CD74B0 | 169 | CGameMode__is_cell_occupied_by_entity | Checks if a map cell is occupied by a collidable entity. Iterates the entity tree at offset 0x19c, looking for entities at cell (param_2, param_3). If found, checks if the entity is a non-passable type via FUN_00df9710. Returns 1 if occupied by a blocking entity, 0 otherwise. |
| 0x00CD75B0 | 238 | CGameMode__can_move_to_cell | Checks if the player can move to the target cell (param_2, param_3). Validates bounds, checks the cell's walkability type (must not be 1=unwalkable or 5=cliff), ensures it's not the current cell, then attempts pathfinding and checks for entity occupancy. Returns 1 if the cell is reachable and unoccupied. |
| 0x00CD76A0 | 200 | CGameMode__create_linked_skill_effect | Creates a skill visual effect linked between a source and target entity. Looks up the effect by ID, creates it via CEffectManager with source/target entity references. For effect ID 0x21B, also creates a secondary effect (0x3D4). Sets optional duration parameter. Returns 1 on success. |
| 0x00CD7800 | 2013 | CGameMode__setup_entity_sprite_and_nameplate | Sets up the complete visual representation for an entity: loads sprite action data, applies the sprite path/name, handles dead/sitting state variations, sets up the nameplate with proper coloring based on entity type (player/monster/NPC), level difference, and party membership. Handles special job IDs and guild titles. Applies name color based on PK mode and level range. |
| 0x00CD8000 | 180 | CGameMode__create_effect_at_position | Creates a visual effect at a given position. Allocates a 0x170-byte effect object via FUN_00e4a1a0, adds it to a vector, then calls its virtual init method with the position, entity reference, and optional parameters. |
| 0x00CD80C0 | 173 | CGameMode__create_ground_effect | Creates a ground-level visual effect. Allocates a 0x170-byte effect object, adds it to the effect vector, then calls its init with type 0x40 (ground effect) and position parameters. |
| 0x00CD8170 | 1027 | CGameMode__setup_secondary_entity_sprite | Sets up the secondary sprite (offset 0x2B0, e.g., homunculus/pet) for an entity. Similar to setup_entity_sprite_and_nameplate but uses the secondary sprite slot. Loads sprite action data, handles dead/sitting states, sets nameplate with entity name color. Used for entities that have a secondary visual representation. |
| 0x00CD8580 | 201 | CGameMode__create_3d_effect | Creates a 3D visual effect at a given position. Allocates a 0x138-byte effect object via FUN_00da0de0, adds it to the effect vector, then initializes it with type 0xE and the 3D position coordinates. |
| 0x00CD8650 | 214 | CGameMode__init_chat_log_file | Initializes the chat log file path. Creates a Chat directory if needed, then finds the next available Chat_NNN.txt filename by incrementing the counter until _access fails (file doesn't exist). Stores the path globally for later chat logging. |
| 0x00CD8740 | 212 | CGameMode__create_sprite_effect | Creates a sprite-based visual effect. Allocates a 0x140-byte object via FUN_00da1190, adds to the effect vector, sets position, loads act and texture resources, and configures animation properties (speed, type, frame). Returns the created effect object. |
| 0x00CD8820 | 297 | CGameMode__create_entity_chat_bubble | Creates a chat bubble widget for an entity. Checks various conditions: entity must exist, have no existing bubble (offset 0x188), entity ID must not be in a filter list, and the entity must not be a specific type (GM, etc.). Allocates a checkbox-style widget, initializes it with entity ID and message, inserts it into the window list, and links it to the entity. |
| 0x00CD8950 | 692 | CGameMode__create_ground_skill_effect | Creates a ground-targeted skill effect with sprite and sound. Looks up the skill format data (act/sprite paths), allocates a 0x1B8-byte effect object, links it to the game mode's effect list, then initializes it with the position, skill type (0x16), and visual parameters. Returns the created effect object or NULL. |
| 0x00CD8C10 | 204 | CGameMode__apply_fog_settings | Applies fog/atmosphere settings for a map. Looks up fog data by map ID, parses near distance, far distance, color (hex), and density from string fields via atof/parse_hex_color_string. Enables or disables the fog renderer based on whether data was found. Writes to global fog parameters (DAT_0138965C, 01389660, 01389650, 01389658). |
| 0x00CD8CE0 | 277 | CGameMode__create_entity_by_job_type | Factory function that creates the appropriate entity object based on job type. For player-class jobs (FUN_00dfbce0), creates a CSkillUnit (0x4F8 bytes). For specific entity types (FUN_00dfa600), creates a 0x440-byte entity. For job IDs >= 0x3E9 (monsters/NPCs), creates a 0x440-byte entity. Returns NULL for unknown types. |
| 0x00CD8E00 | 168 | CGameMode__create_granny_model_effect | Creates a Granny 3D model effect. Allocates a 600-byte object, constructs it via CGrannyModel__ctor, sets the 3D position (offsets 0x10-0x18) and an extra parameter (0x144), then adds it to the effect vector. |
| 0x00CD8EB0 | 126 | CGameMode__create_cursor_effect | Creates a cursor effect object (0x140 bytes). Stores the cursor pointer at offset 0xD4 of the game mode and adds it to the effect vector. |
| 0x00CD8F30 | 172 | CGameMode__create_particle_effect | Creates a particle effect object (0x140 bytes). Allocates via FUN_00e4a4d0, adds to the effect vector, then initializes with type 0xE and position/param parameters. |
| 0x00CD8FE0 | 4877 | CGameMode__show_entity_right_click_menu | Shows the right-click context menu for an entity. Handles multiple entity types (player, NPC, pet, homunculus, mercenary). Builds menu items like Trade, Party, Guild, Friend, Duel, etc. based on entity type and current game state. Checks various conditions like PK mode, guild membership, party status, and level restrictions. For NPCs, shows quest-related options. Includes C-code disassembly path for pets/homunculi/mercenaries. |
| 0x00CDA2F0 | 648 | CGameMode__create_sprite_effect_from_global_path | Creates a sprite effect using the global sprite path. Formats .spr and .act paths from a global string (DAT_0173a724), allocates a 0x1B8-byte effect object, initializes it with skill type 0x16 and the sprite data, then sets additional properties. Returns the created effect object. |
| 0x00CDA580 | 4718 | CGameMode__create_cursor_by_type | Factory function that creates a cursor/pointer effect by type ID (0-0x46). Maps cursor type IDs to sprite/act file paths and animation frames. Handles many cursor types including standard arrow, attack, skill targeting, NPC interaction, trade, warp, etc. Some types load sprites from string tables, others use hardcoded paths. Creates either a standard or billboard effect depending on the type. |
| 0x00CDB910 | 510 | CGameMode__set_target_entity_and_update_display | Sets the targeted entity (offset 0x2D8) and updates its visual display. If the target is the same or new, looks up the entity by ID. For the player character, updates the sprite. For NPCs, loads their sprite and sets the nameplate color to 0x95EFFF. For player entities, checks GM status. If the target changed from a previous target, marks as pending update (0x2C4=1). |
| 0x00CDBB10 | 195 | CGameMode__ensure_nameplate_widget | Ensures a nameplate widget exists at the given pointer. If the widget is null, creates a UIHyperlinkTextWidget (0xC0 bytes), either standard or hyperlink-enabled based on game option 0x5C. Sets its size to 8x8 and inserts it into the window list. |
| 0x00CDBC30 | 88 | CGameMode__create_mob_projectile_effect | Creates a mob projectile visual effect (effect ID 0x964). Passes source position and target entity ID to CEffectManager, then configures the projectile's texture and bullet appearance via CEffectMobProjectile__set_bullet_textures. |
| 0x00CDBC90 | 540 | CGameMode__create_damage_number_effect | Creates floating damage number effects. Clamps the damage value to 0-9999, splits it into individual digits, then creates one FUN_00da1db0 effect object per digit. Each digit gets positioned with an 8-pixel offset from the next. Links effects to the game mode's effect list and initializes with position, digit value, and skill type parameters. |
| 0x00CDBEB0 | 3513 | CGameMode__dispatch_skill_visual_effect | Massive dispatch function that maps skill IDs to visual effect IDs and plays associated sound effects. Contains a huge switch/case mapping hundreds of skill IDs (0x1F5-0x19605+) to effect IDs (0x26-0x982). Plays various sound effects (heal, blessing, storm, explosion, etc.) via CAntiCheat__full_sweep. Some skills remove existing effects before creating new ones. Handles 4th job skills, elemental skills, and special effects. Also handles a secondary effect ID (local_224) for skills that need two simultaneous effects. |
| 0x00CDD240 | 265 | CGameMode__create_entity_dialog_bubble | Creates a dialog widget for an entity (offset 0x18C). Similar to chat bubble but uses UIDialogWithStrings (0xD8 bytes). Checks various filter conditions before creating. Inserts the widget into the window list at back. |
| 0x00CDD350 | 67 | CGameMode__configure_nameplate_hyperlink | Configures the nameplate widget's hyperlink behavior. Checks if option 0x5C (hyperlink names) is enabled and if the entity has a guild (offset 0xA8). Dispatches to one of two configuration functions based on the result. |
| 0x00CDD6B0 | 223 | CGameMode__create_entity_by_sprite_type | Factory that creates the correct entity object based on job/sprite type. For player classes (FUN_00dfbce0), creates a CUIFrameBase (0x448 bytes). For sprites with Granny 3D models (strstr for model marker), creates a CGrannyEntity (0xDC8 bytes). For all others, creates a standard entity (0x440 bytes). Returns the created object or NULL. |
| 0x00CDD7A0 | 679 | CGameMode__cleanup_on_map_change | Performs cleanup when changing maps or disconnecting. Deactivates UI events, resets entity state, unloads the current map and releases resources (sprites, textures, effects). Saves shortcut items and nameplate settings to the registry. Saves camera positions, backs up chat log if enabled, clears all visual effects, and resets various subsystems. |
| 0x00CDDA50 | 5010 | CGameMode__on_map_change_init | Game mode map change initialization. Deserializes save data, status, equipment, hotkeys, quest data, party/guild data. Initializes map session, rebuilds window layout, loads BGM/models, creates data tables, timers. Massive init function called on map load/change. |
| 0x00CDEDF0 | 145 | CGameMode__handle_npc_proximity_event | Handles the NPC proximity check event. Updates the entity's position, then checks if the NPC dialog has timed out (60 seconds) or needs a keepalive packet (every 10 seconds). If timed out, resets the NPC state and opens a system message. If keepalive needed, sends packet 0xB1C. |
| 0x00CDEE90 | 97 | CGameMode__prompt_return_to_char_select | Shows a confirmation dialog to return to character select. Only triggers if param_2==0 and field 0x18==0, and no pending actions. Shows message text ID 1 in a 0x118x0x78 dialog box, then changes game state to 2 (char select). |
| 0x00CDEF00 | 736 | CGameMode__main_loop | Main game loop that runs continuously while the game state is active. Processes the game mode transition queue, checks for quit requests (with hash file integrity check and encrypted error message display), calls the game mode's update virtual method, and sleeps 1ms per iteration. If the game is exiting, calls CGameMode__on_quit and displays integrity check results. |
| 0x00CDF1E0 | 2068 | CGameMode__update_frame | Main per-frame update for the game mode. Handles: effect map timer updates, UI events, sprite action processing, network packets, auto-follow target movement, ambient sound playback with distance attenuation, anti-cheat verification (import checks, memory hashing, heartbeat), resource flushing, entity/effect updates, and rendering the full frame (quad tree, map, UI windows, tooltips, minimap coordinates, timers, cursor, combo counter, screen fade, overlays). Also processes keyboard shortcut actions (emotion/emote packets). |
| 0x00CDFA00 | 234 | CGameMode__create_effect_player | Creates an effect player object (0x160 bytes) with CSprite base and CEffectPlayer vtable. Initializes it with type 0xE and position/parameter data, adds it to the effect vector, and returns its 8-byte position data. |
| 0x00CDFB00 | 311 | CGameMode__use_skill_on_target | Sends a skill use request to the server. Checks weight limit (>89% shows a warning message 0x133). Depending on the attack mode (field 0x408): mode 0 sends a standard skill use (type 10), modes 2/4 send a ground-targeted skill use (type 0x29) with skill level and additional position data (type 0x5A). |
| 0x00CDFC40 | 462 | CGameMode__handle_attack_click_on_entity | Handles an attack click on an entity. Checks various conditions: attack lock state, auto-attack settings, shift key state, skill targeting mode (ground vs single target). Validates the target entity against WoE/PvP conditions and player type. If valid, sends the appropriate skill/attack command to the server. Ctrl+click toggles continuous attack mode. |
| 0x00CDFE10 | 607 | CGameMode__process_click_action | Processes a mouse click action on the game world. Handles state transitions: checks for vending window, determines if click was on an entity or ground, manages auto-follow, processes NPC interactions (type 3 = NPC, type 4 = warp). Dispatches to appropriate handlers (FUN_00ce2880 for entity actions, FUN_00ce18a0/FUN_00ce3d30 for ground actions). Returns the resulting action code. |
| 0x00CE0070 | 411 | CGameMode__update_auto_follow_target | Updates the auto-follow system to track a target entity. Checks if the target still exists (times out after 10 seconds if lost). Every 1 second, gets the target's cell position and sends a move or attack command. If not in combat mode, pathfinds to the target's position; otherwise, sends a direct follow command. |
| 0x00CE0210 | 2415 | CGameMode__handle_ground_click | Handles ground/cell click events in game mode. Processes: skill area targeting (type 0x11E window, packet 0xa6c), item placement on cells, guild/party map flag placement (Alt+click/Shift+Alt+click on minimap), skill casting on ground (homunculus/mercenary/elemental skills), pathfinding and movement (sends walk packet 0x11). Checks walkability, occupied cells, and validates cell coordinates before acting. |
| 0x00CE0B80 | 1157 | CGameMode__process_mouse_frame | Main per-frame mouse processing in game mode. Handles: crash report writing, UI mouse input processing, window rendering, tooltip auto-hide, camera control, entity right-click menus, cursor state changes, pathfinding requests, movement clicks, skill targeting, mouse cursor effect rendering. Updates mouse position tracking and checks cell walkability for cursor icon changes. |
| 0x00CE1010 | 2177 | CGameMode__update_target_nameplate | Updates the target entity nameplate display. Looks up target entity either by stored target ID (param_1[0x3d]) or by global DAT_0171f114 (mouseover GID). Creates/updates the nameplate widget with entity name, determines name color based on entity type (player/NPC/monster). Handles special cases like job ID 0x4F2D and guild title display. |
| 0x00CE18A0 | 1478 | CGameMode__handle_entity_click | Handles clicking on an entity (NPC/player/monster). Determines cursor mode (attack/skill/interact), processes guild/party map flag placement via Alt+click, homunculus/mercenary skill targeting on entities, regular attack/skill use on target. Updates target entity tracking and handles auto-attack continuation based on Shift key and options. |
| 0x00CE1E70 | 295 | CGameMode__update_cursor_target_position | Updates the cursor target position for rendering a target indicator. Resets target offsets (0x30/0x34), then calculates screen-relative position from the quad tree hit result. Filters out dead entities (type 4/3), NPCs based on game settings, and certain entity types. Converts the hit bounding box center to screen coordinates relative to the camera. |
| 0x00CE1FA0 | 2195 | CGameMode__update_skill_name_and_cooldown_widgets | Updates skill name label widget and cooldown timer widget for the current target. Creates UIBaseDialogWidget instances for skill name (offset 0x2B8) and cooldown label (offset 0x2BC). Resolves skill name by ID with special handling for IDs 10000/20000/0x4E21/40000 (XOR-encrypted strings in TLS). Also manages nameplate hyperlink setup for entities at offsets 0x2AC and 0x2B0. Expires timed widget at 0x5FC after 10 seconds. |
| 0x00CE2840 | 49 | CGameMode__periodic_window_flush | Periodically flushes pending windows every 1000ms. Checks the elapsed time since last flush (stored at offset 0x1E0), and if more than 1 second has passed, calls CUIWindowMgr__flush_pending_windows and updates the timestamp. |
| 0x00CE2880 | 4897 | CGameMode__handle_entity_click_00ce2880 | Handles left-click interactions on entities in game mode. Large switch on param_2[8] (interaction type: 0=ground/entity, 1=NPC, 2=skill target, 3=cancel, 4=warp/skill). For type 0, determines cursor state and attack/follow based on entity type (player/NPC/monster), skill mode, Shift/Ctrl keys, and homunculus/mercenary targeting. Manages pet interaction, party/guild command dispatch, and auto-attack lock. |
| 0x00CE3D30 | 2085 | CGameMode__handle_entity_hover_interaction | Handles entity hover interaction (mouseover without click). Determines cursor state based on entity type, skill mode, and modifier keys (Shift/Alt). Manages homunculus/mercenary skill targeting on hover, guild/party window command dispatch, and sets game mode state (attack cursor 5/11, etc.). Also handles weight overload check on Shift+hover for item pickup. |
| 0x00CE4570 | 49 | CGameMode__periodic_window_flush_00ce4570 | Identical to CGameMode__periodic_window_flush - periodically flushes pending windows every 1000ms. Likely a duplicate for a different game mode subclass. |
| 0x00CE45B0 | 244 | CGameMode__play_ambient_sounds | Plays ambient sound effects based on timer intervals. Iterates through the ambient sound array (stride 0x24, offsets 0x1E4-0x1E8). For each sound, checks if the timer has expired, calculates distance attenuation from the player to the sound source entity, and plays the sound via CSoundMgr__play_sound_from_resource. Resets the timer after playing. |
| 0x00CE46B0 | 1243 | CGameMode__handle_mouse_drag_camera | Handles mouse drag camera rotation. Processes right-click drag to rotate camera angle, adjusts 3D listener orientation for sound, manages camera zoom limits and settings persistence. |
| 0x00CE4B90 | 11711 | CGameMode__dispatch_shortcut_command | Main shortcut/hotkey command dispatcher for CGameMode. Huge switch on param_2 (command ID). Handles: movement clicks (0/0x32), chat commands (0x12/0x13), option toggles (7/0xB/0x71/0xF3/0xA5), navigation (0xD1/0xD2), skill use (0xB6/0xB7/0xE0-0xE6), screenshot (0x68), AI trace toggle (0xA2), emotion/effect sends, and many window open/close commands. Most cases delegate to virtual dispatch via param_1 vtable offset 0x18. |
| 0x00CE7CE0 | 1247 | CGameMode__handle_scroll_zoom | Handles scroll wheel zoom and keyboard camera adjustments. Processes mouse wheel zoom (Ctrl for distance, Shift for pitch), right-click drag camera rotation with angle clamping, and camera reset via key combos. Manages indoor/outdoor camera limits, 3D sound listener orientation, and map navigation interactions. |
| 0x00CE81C0 | 179 | CGameMode__add_effect_to_list | Adds an effect object to the game mode's effect linked list (at offset 0xCC). Allocates a 0xC-byte list node, increments the count, and inserts it before the sentinel node. |
| 0x00CE8280 | 245 | CGameMode__parse_char_server_info_packet | Parses a character server information packet. Extracts two variable-length strings from the packet data (server name and display name), copies them to internal string fields. Also copies 4 dwords of server metadata (offsets 0xE-0x1A) to fields at offsets 0x3F8-0x404. |
| 0x00CE8380 | 88 | CGameMode__dispatch_packet_to_window | Dispatches a packet to its target UI window. Maps packet type 0xB8 with window type 0x29 to type 0xB9. Finds the target window by type, then calls its virtual handler (offset 0x94) with the packet data fields. |
| 0x00CE83E0 | 23 | CGameMode__close_window_from_packet | Closes a UI window specified by the packet's window type field (offset 6). Delegates to close_window_unless_type_fb. |
| 0x00CE8400 | 1414 | CGameMode__handle_skill_action_packet | Processes an incoming skill action packet. Extracts skill parameters (8 int fields + 3 string fields + additional data) from the packet buffer at param_2. Copies data to the game mode object fields at +0x308-0x3C4. Looks up the UI window for the skill type, notifies it via virtual call. Handles skill target action overrides and item description lookups for certain skill types (0x24, 0x9F, etc.). |
| 0x00CE8990 | 44 | CGameMode__apply_packet_text_to_window | Finds a UI window by type (from packet offset 6) and applies text data from the packet to it via CEffect__apply_children_text_from_packet. |
| 0x00CE89C0 | 19 | CGameMode__set_field_110_from_packet | Simple setter that stores the packet's dword at offset 6 into game mode field 0x110. |
| 0x00CE89E0 | 50 | CGameMode__change_state_from_packet | Changes the game state from a packet. Calls the virtual state change method (offset 0x18) with 4 dwords from the packet (offsets 6, 10, 14, 18), then switches to state 0x47. |
| 0x00CE8A20 | 78 | CGameMode__set_two_strings_from_packet | Extracts two null-terminated strings from the packet (at offsets 6 and 0x1F) and assigns them to internal string fields via STL_lib_func_004fa8f0. |
| 0x00CE8A70 | 157 | CGameMode__handle_navigation_packet | Handles a navigation/map string packet. Extracts a null-terminated string from offset 6 of the packet, assigns it to an internal field, then calls CNavigator__process_navigation_request to initiate navigation. |
| 0x00CE8B10 | 280 | CGameMode__handle_npc_list_packet | Handles NPC list packet. Copies data into vector, parses via CNavigator__parse_npc_list_from_buffer, updates navigator minimap markers if window exists. |
| 0x00CE8C30 | 142 | CGameMode__handle_navigation_destination_packet | Handles a navigation destination packet. Extracts a map name string from offset 6 of the packet and assigns it to an internal string, then sets the navigation destination via CNavigator__set_destination_from_map_coords. |
| 0x00CE8CC0 | 89 | CGameMode__dispatch_extended_packet_to_window | Similar to dispatch_packet_to_window but with an extra field. Maps packet type 0xB8 with window type 0x29 to 0xB9. Calls the window's virtual handler with fields from offsets 0x1A, 10, 14, 18, and 22. |
| 0x00CE8D20 | 55 | CGameMode__dispatch_packet_to_navigator_window | Dispatches a packet to the navigator window (type 0xCB). If the window type matches 0xCB and the global navigator window pointer (DAT_014a67f4) exists, calls its virtual handler with packet fields from offsets 10, 14, and 18 (with offset 18 passed as pointer). |
| 0x00CE8D60 | 92 | CGameMode__set_window_title_from_packet | Sets a window title string from a packet. If the window type (offset 6) is 0x29 or 0xAE, extracts the null-terminated title string from offset 0xE and assigns it to an internal string field. |
| 0x00CE8DC0 | 23 | CGameMode__open_window_from_packet | Opens a UI window from a packet. Passes window type from packet offset 6 to CGameObject__create_window_by_type. |
| 0x00CE8DE0 | 210 | CGameMode__init_map_and_cursor | Initializes the map environment and cursor when entering a new map. Clears all entity lists, creates and stores the map object, loads map effects, resets state, creates a cursor effect (0x140 bytes), stores it at offset 0xD4, adds it to the effect vector, and copies the player entity's position to the camera/render object at offset 0xD0. |
| 0x00CE8EC0 | 77 | CGameMode__remove_effect_from_list | Removes an effect object from the game mode's effect linked list (at offset 0x1A4). Searches the list for a node matching param_2, unlinks it from the doubly-linked list, decrements the count (0x1A8), and frees the 0xC-byte node. |
| 0x00CE8F10 | 169 | CGameMode__write_replay_entity_spawn_chunk | Writes an entity spawn event to the replay file. Only active when the effect map is in recording mode (mode 2) and replay is enabled. Packs entity spawn data (ID, position, state fields) plus full entity data (0xDE bytes) into a replay chunk and writes it via EffectMap__write_raw_effect_chunk. |
| 0x00CE8FC0 | 143 | CGameMode__write_replay_special_event | Writes a special replay event (specifically for skill ID 0x45 with level 10000) to the replay file. Only active in recording mode (mode 2). Packs a 0x16-byte event header with coordinates and writes via EffectMap__write_raw_effect_chunk. Returns 1 if written, 0 otherwise. |
| 0x00CE9050 | 906 | CGameMode__build_status_change_packet_list | Builds a list of network packets for current status changes/buffs. Creates a header packet (ID 19000/0x4A38), then iterates the global status effect array (0x1C stride at DAT_014a6938). For each active effect, creates a packet (ID 0x4A43) containing effect type, remaining time (adjusted from absolute to relative), and 5 associated values. Ends with a footer packet (ID 0x4A39). |
| 0x00CE93E0 | 2499 | CGameMode__build_guild_emblem_packet_list | Builds a list of network packets for guild emblem data. Creates packets: 0x32C8 (header, 6 bytes), 0x32CB (serialized tree data), 0x32CA (guild emblem BMP from cache), 0x32CC (guild ID, 10 bytes), 0x32CD (guild emblem version, 10 bytes). Also iterates party member list to include their guild emblems. Ends with 0x32C9 (terminator). Returns vector of packet buffers via param_2. |
| 0x00CE9DB0 | 781 | CGameMode__build_hotkey_sync_packets | Builds a list of network packets for hotkey bar synchronization. Creates header packet (ID 14000/0x36B0), then a data packet (ID 0x36BB) containing the hotkey bar data from this+0x24C (4 bytes), then a footer packet (ID 0x36B1). Returns the packet vector. |
| 0x00CEA0C0 | 1090 | CGameMode__build_npc_chat_sync_packets | Builds a packet list for NPC chat/speech bubble synchronization. Creates header packet (ID 15000/0x3A98), then iterates all active chat bubbles from the linked list at this+0xCC+0x18. For each entity, creates a packet (ID 0xCF, 0x13 bytes) containing entity ID, job type, position (world-to-cell converted), name (extracted from the last token after space), and direction. Ends with footer packet (ID 0x3A99). |
| 0x00CEB8E0 | 288 | CGameMode__write_replay_effect_data_chunk | Writes effect data to replay EffectMap. Only in recording mode (mode 2). Packs name strings and effect params into chunk, writes via EffectMap__write_raw_effect_chunk. |
| 0x00CEC9F0 | 111 | rotate_point_around_pivot | Rotates a 2D point (param_4, param_5) around a pivot (param_2, param_3). Uses cross product and normalize for sin/cos of rotation angle. Standard 2D rotation matrix: x' = (x-cx)*cos - (y-cy)*sin + cx, y' = (y-cy)*cos + (x-cx)*sin + cy. |
| 0x00CECB00 | 15 | wrapper_parse_action_data | Simple wrapper that calls SpriteAction__parse_action_data. Forwards all parameters unchanged. |
| 0x00CECB60 | 47 | set_global_screen_offset | Sets global screen offset values. If param_1 != -1, stores in DAT_0171f218. If param_2 != -1, stores in DAT_0171f21c. Used for camera/viewport adjustments. |
| 0x00CED0D0 | 181 | generate_time_based_hex_token | Generates a time-based hexadecimal token string. Uses timeGetTime() XOR'd with shifted timeGetTime() to create randomness. Converts to hex via _ltoa, then copies into output buffer (param_1) in reverse order. param_2 controls token length (default 4). Null-terminates the result. |
| 0x00CED260 | 115 | CGame__update_entity_time_scales | Gets time scale from global EffectMap, applies to self via CEntity__set_animation_speed, then iterates all entities in list (at this+0xCC->0x10) applying the same time scale to each. |
| 0x00CED330 | 464 | load_and_update_rsw_tooltip | Loads and updates an RSW (map resource) tooltip. Checks GameSettings option state, builds '.rsw' filename, searches for file in resource system, extracts string data, then calls ItemTooltipRenderer__update_tooltip with the result. |
| 0x00CED670 | 113 | CGame__handle_effectmap_pause_resume | Handles EffectMap pause/resume based on game state. When param_2==1 and returning from pause (mode!=7), accumulates elapsed time into EffectMap timer offset. When entering pause (mode==7), records current time. If no pause time stored, restarts EffectMap playback. |
| 0x00CED720 | 49 | CGame__check_timer_elapsed | Checks if a specified time interval (param_2 ms) has elapsed since last check. Compares timeGetTime() against stored timestamp at offset 0x5E4. Updates timestamp and returns 1 if elapsed, 0 otherwise. |
| 0x00CED760 | 445 | CGame__append_chat_log_to_file | Appends a chat message string to a log file. Opens file at DAT_0171f220, reads existing content, reopens with write+create flags (0x1001), writes old content back, appends param_2 string and newline (DAT_0135f464). Increments counter at offset 0x5BC. Only writes if FUN_00dfa390(7) check passes. |
| 0x00CED920 | 314 | save_name_balloon_setting_to_registry | Saves the name balloon display setting to Windows registry. Builds registry key path from PTR_DAT_01348f80 + '\\NameBaloon' + player name. Creates key under HKEY_LOCAL_MACHINE, sets DWORD value based on GameSettings option 0x5C state. |
| 0x00CEDA60 | 206 | save_ragpath_to_registry | Saves the game installation path (RAGPATH) to Windows registry. Builds registry key path from PTR_DAT_01348f80, creates key under HKEY_LOCAL_MACHINE, writes DAT_0173ad78 (game directory path) as REG_SZ value named 'RAGPATH'. |
| 0x00CEFB30 | 170 | CGame__push_back_to_entity_list | Appends an entity ID (param_2) to the entity list at offset 0x604. Allocates 12-byte node, links into doubly-linked list. Throws std::_Xlength_error if list is at max size (0x15555555). |
| 0x00CEFD20 | 292 | CUINavMap__register_map_entry | Registers a map ID in the navigation map tree (DAT_0173a5e4). Checks if map exists via CMapInfoMgr, converts to nav category, then finds/inserts in tree. Initializes the two value fields to 0. |
| 0x00CEFE50 | 19 | clear_global_string_buffer | Clears a global string buffer by calling STL_lib_func_004fa8f0 with empty string and length 0. |
| 0x00CEFE70 | 77 | CGame__remove_from_entity_list | Removes an entity by ID (param_2) from the entity linked list at offset 0x604. Searches linearly, unlinks the 12-byte node from doubly-linked list, frees it, decrements count at 0x608. |
| 0x00CEFEC0 | 256 | write_timestamped_log_entry | Writes a timestamped log entry to a file. Formats the variable args via vsprintf, extracts filename from path (strips directory), opens file in append mode, writes: filename, line number, timestamp (YYYY-MM-DD HH:MM:SS.ms), and the formatted message. |
| 0x00CEFFC0 | 169 | CGame__get_or_create_tooltip_mgr_a | Gets or lazily creates tooltip manager A at offset 0x61C. On first call, allocates 0x84 bytes, calls TooltipMgr__constructor, sets size to 0x32, adds to window list. Returns the tooltip manager pointer. |
| 0x00CF0250 | 207 | CGame__get_or_create_tooltip_mgr_b | Gets or lazily creates tooltip manager B at offset 0x620. Similar to variant A but sizes tooltip based on screen width calculation: (width * 0x82) / 0x1E0. Returns the tooltip manager pointer. |
| 0x00CF0320 | 15 | CGame__get_map_object | Returns a pointer from the map object at offset 0xCC+0x2C. Returns 0 if the object at 0xCC is null. |
| 0x00CF0330 | 74 | CGame__find_tree_node_by_key | Searches a red-black tree at offset 0x1F0 for a node matching the given key (param_2). Returns pointer to the value portion (node+0x14) if found, or NULL if not found. |
| 0x00CF0380 | 603 | CGame__format_buff_remaining_time | Formats the remaining time of a buff/status effect. Searches a global buff list for a matching buff ID, computes remaining time in hours/minutes/seconds using timeGetTime or server time, and builds a human-readable string using message table entries (0x6A1=hours, 0x70F=minutes, 0x710=seconds). Handles special case where buff ID 0x2A maps to 0x0C. |
| 0x00CF05E0 | 200 | CGame__get_string_from_vector_at_index | Gets a string from the vector at offset 0x84 by index. Each element is 0x18 bytes (STL string). Returns copy-constructed string if index is valid, otherwise returns empty string. |
| 0x00CF06B0 | 17 | CGame__get_camera_zoom_target | Returns the camera zoom target float value from the camera object at offset 0xD0+0x48. Returns 0.0 if the camera object is null. |
| 0x00CF0720 | 278 | display_timestamped_debug_message | Formats a timestamped debug message with HH:MM:SS.mmm prefix and displays it via the chat message system with color 0xFF. |
| 0x00CF0860 | 73 | debug_assert_format | Debug assertion formatter. Calls vsprintf_s to format a debug assertion message with file/line info. |
| 0x00CF08B0 | 23 | call_purecall_handler | Calls the CRT purecall handler. Triggered when a pure virtual function is called on a partially-constructed/destructed object. |
| 0x00CF08D0 | 33 | is_rune_skill_id | Checks if a skill ID is a Rune Knight skill (IDs 0x3DE-0x3E1, i.e., 990-993). Returns 1 if within range, 0 otherwise. |
| 0x00CF0910 | 33 | is_guillotine_skill_id | Checks if a skill ID is a Guillotine Cross skill (IDs 0x3E2-0x3E5, i.e., 994-997). Returns 1 if within range, 0 otherwise. |
| 0x00CF0950 | 297 | CGame__check_and_show_disconnect_dialog | Checks if the current game state requires showing a disconnect dialog. Looks up the current item by slot ID, sends a state change message, then displays a localized disconnect confirmation dialog box (message ID 0x291). |
| 0x00CF0A80 | 57 | is_entity_visible_on_map | Checks if an entity class ID is visible on the map. Returns 0 for wedding classes. Otherwise searches the global buff/entity list for a matching ID. Returns 1 if found, 0 if not. |
| 0x00CF0AC0 | 101 | is_any_trade_window_open | Checks if any trade-related window is currently open. Checks window types: 0x122, 0x12E, 0x15C, 0x2716, 0x169. Returns 1 if any is found, 0 if none. |
| 0x00CF0B30 | 108 | CGame__check_chat_command_blocked | Checks if a chat command is blocked. Returns 1 (blocked) if not in identify mode (DAT_016d3b14 != 3), not in mode 10 (DAT_016d3b10 != 10), and param_1 > 1. When blocked, displays message 0x31 in chat and clears the global string buffer. |
| 0x00CF0BA0 | 516 | write_timestamped_log_with_date_filename | Writes a timestamped log entry to a date-based log file (mylog_DATE.txt). Formats the message with vsprintf, generates a filename from the build date, then writes with full timestamp (year/month/day hour:min:sec.ms) and source file info. |
| 0x00CF0DB0 | 127 | display_formatted_blue_chat_message | Formats a variable-argument string and displays it as a blue-colored chat message (color 0x6E96FF) via CUIWindowMgr dispatch. |
| 0x00CF1060 | 71 | CGame__capture_bgm_duration | Captures the current BGM track duration. If the EffectMap is in state 2, sets playback state to 1, updates duration from time, retrieves duration as HMS, closes the file handle, and returns the duration. Returns 0 if not in state 2. |
| 0x00CF10B0 | 123 | CGameMode__dispatch_message_handler | CGameMode: dispatch message handler |
| 0x00CF7931 | 119 | validate_string_and_open_window_or_dialog | Validates input string length. If < 24 chars, opens/toggles window type 0x35 and sets string. Otherwise shows dialog box with message 0x213. |
| 0x00CFDF90 | 202 | CGameMode__setup_item_display_with_identify | Sets up item display with identification. Toggles window type 0xF off, resets network state, looks up identified item name. Copies item fields (ID, type, name, identify flag, refine level) from param_3 to this+0x308..0x3B0. |
| 0x00CFE060 | 214 | CGameMode__setup_item_display_basic | Sets up basic item display info. Toggles window type 0xF off, resets network state, copies item ID/name/type fields from param_3 to this+0x308..0x3B0. Looks up identified item name via get_item_identified_name. |
| 0x00CFE140 | 352 | CGameMode__setup_item_display_extended | Sets up extended item display info with options array, timer data, and enchant info. Toggles window 0xF off, resets network state. Copies item properties including card slots (offsets 0x378-0x384), item options array (0x390+), enchant data (0x3b4-0x3b6), and 64-bit timer field (0x3C0-0x3C4) from param_3 to this+0x308..0x3C4. |
| 0x00CFE2A0 | 198 | CGameMode__setup_sprite_display_info | Sets up sprite display info for a named resource. Toggles window 0xF off, resets network state, looks up sprite resource name. Copies resource name string and sets sprite data fields at this+0x308..0x388. |
| 0x00CFE370 | 264 | CGameMode__register_or_update_tree_entry | Registers or updates an entry in the RB-tree at this+0xF0. Uses param_2 as the integer key. If the key already exists, updates its value (param_3). If not found, allocates a new 0x18-byte tree node and inserts it. Used for tracking item/entity state by ID. |
| 0x00CFE480 | 65 | CGame__notify_self_entity_update | Notifies the self-entity (player character) of an update. If DAT_01457b88 != 2 and param_2 matches local player ID, calls virtual method 0x40 on the entity's sub-object with message code 0x2C and flag 1. |
| 0x00CFE4D0 | 62 | CGame__broadcast_message_to_entity_list | Broadcasts a message to all entities in the entity list at offset 0x604. Iterates the doubly-linked list and calls each entity's virtual method 0x94 with message code 0x3C and param_2 as data. |
| 0x00CFE510 | 2908 | CGameMode__process_content_and_rebuild | Processes and rebuilds tooltip/info content for a game mode hover element. Determines what grid cell the mouse is over, queries Lua for state icon descriptions and time limits, manages a hyperlink text widget for display, formats item tooltip strings with descriptions, and positions the tooltip window relative to the grid. |
| 0x00CFF070 | 625 | CGameMode__format_and_display_content | Formats and displays tooltip content for a game mode. Creates or reuses a CTooltipWnd, builds a linked list of string entries from the input vector, and passes them to the tooltip widget for rendering with font size 0x14 and color 0xC. |
| 0x00CFF300 | 516 | CGameMode__write_trace_log_entry | Writes a trace log entry to EnterTraceLog_{date}.txt. Formats log line with timestamp (GetLocalTime), file name, and formatted message. Opens file in append mode. |
| 0x00CFF510 | 998 | CGameMode__append_data_to_log_file | Appends data to a log file with optional timestamp. Gets current directory, opens file at param_1, reads existing content if any, re-opens for write, writes old content plus new data string (param_2). If param_3 is non-zero, prepends HH:MM:SS:ms timestamp. |
| 0x00D01A90 | 552 | CSkillRecord__vector_insert | std::vector::insert for compact 0xF-byte (15-byte) records with no complex fields. Uses 1.5x growth strategy with max count 0x11111111. Simple memcpy for the record data. Used for storing compact status effect entries. |
| 0x00D02000 | 1689 | insertion_sort_records_0x74 | Insertion sort for an array of 0x74-byte records sorted by a 0x18-byte name string at offset 0x21 (strcmp-style comparison). Records contain an embedded STL string at offset 0x3C that requires move semantics during element shifting. Iterates from second element to end, shifting larger elements right and inserting each record at its sorted position. |
| 0x00D026B0 | 388 | median_of_three_records_0x74 | Median-of-three pivot selection for introsort of 0x74-byte records. Compares three records (param_1, param_2, param_3) by name string at offset 0x21. Performs conditional swaps via record_0x74_move_construct and variant_record_0x74_copy_assign to ensure the median value ends up at param_2. Part of the std::sort partitioning scheme. |
| 0x00D02840 | 1631 | introsort_partition_records_0x74 | Introsort partition (Hoare-style) for an array of 0x74-byte records sorted by name at offset 0x21. Uses median-of-three pivot selection for large arrays (>= 0x29 elements) or ninther for very large arrays. Partitions elements around the pivot using bidirectional scanning and record swaps. Returns the partition boundary as a pair of pointers. |
| 0x00D03150 | 222 | merge_sort_linked_list_by_key | Merge sort for a circular doubly-linked list. Recursively splits the list in half, sorts each half, then merges by comparing the integer key at node offset +0xC (node[3]). Performs in-place pointer relinking during merge (no allocation). Used internally to sort lists of equipment/item entries by numeric key. |
| 0x00D03230 | 824 | introsort_driver_records_0x74 | Introsort (std::sort) top-level driver for 0x74-byte records sorted by name at offset 0x21. Hybrid algorithm: uses quicksort (via introsort_partition_records_0x74) when recursion depth allows, falls back to heapsort (build heap + extract via heap_sift_down_records_0x74) when depth exceeded, and uses insertion_sort_records_0x74 for small subarrays (< 0xEF4 bytes / ~28 elements). |
| 0x00D03B10 | 131 | swap_records_0x74 | Three-way swap for 0x74-byte records. Move-constructs param_1 into a local temp buffer, copy-assigns param_2 into param_1, then copy-assigns temp into param_2. Destructs the temp's embedded STL string. Standard swap pattern used by the sorting algorithms for entity/item records. |
| 0x00D03BA0 | 44 | string_record_ctor | Constructs a small record with: first field zeroed, then an SSO STL string at offset 0x10 (capacity 0xF). Assigns string content from param_2 with length param_3 via STL_lib_func_004fa8f0. Returns the initialized object pointer. |
| 0x00D03BD0 | 362 | CKafraServiceInfoList__copy_construct | Deep copy constructor for a linked list of CKafraServiceInfo objects (0x340 bytes each). Iterates through the source list, allocating new nodes and calling CKafraServiceInfo__copy_construct for each. Creates a sentinel node as list head. Stores head in param_1[0], count in param_1[1]. Used when duplicating warp/teleport service data. |
| 0x00D03DC0 | 136 | trade_data_record_default_ctor | Default constructor for a trade data record. Sets first field to 1 (type/state flag). Initializes two empty SSO strings at offsets 0x0C and 0x24 (capacity 0xF each). Zeroes additional fields at offsets 0x34 and 0x4C. |
| 0x00D040D0 | 170 | timed_hash_container_ctor | Constructor for a timed container object. Allocates a 0x28-byte self-referencing sentinel node for a circular doubly-linked list. Initializes: capacity=0x14, bucket_count=0xC, load_factor=2.0. Records creation timestamp via _Xtime_get_ticks(). Likely a hash map or timed cache structure. |
| 0x00D04180 | 124 | record_dword_3strings_copy_ctor | Copy constructor for a record containing 1 leading DWORD and 3 STL strings at offsets 0x04, 0x1C, 0x34. Deep-copies all three strings via STL_string_copy_construct with SEH exception safety. The strings likely represent name/label/description fields. |
| 0x00D04200 | 148 | record_3strings_default_ctor | Default constructor for a record containing 3 empty SSO STL strings at offsets 0x04, 0x1C, 0x34. Each string initialized with zero length, capacity 0xF, and null terminator. Creates a blank template for triple-string records. |
| 0x00D042A0 | 67 | ranking_record_default_ctor | Default constructor for a ranking/leaderboard record. Zero-initializes: 5 DWORD fields (0x00-0x10), a 0x21-byte region at offset 0x11 (likely a fixed-length character name buffer), and 2 DWORD fields at 0x34-0x38. |
| 0x00D04BF0 | 111 | rb_tree_destroy_all_nodes_0x20 | Destroys all nodes in an RB-tree by traversing the left-child chain. Calls the key destructor for each node, frees 0x20-byte nodes, then frees the sentinel node. |
| 0x00D05100 | 65 | rb_tree_destroy_wrapper | Wrapper that calls rb_tree_destroy_all_nodes_0x20 within an SEH frame. |
| 0x00D05200 | 87 | destroy_two_linked_lists_0x340 | Destroys two linked lists of 0x340-byte nodes within an SEH frame. Used for cleaning up dual-list variant data. |
| 0x00D05260 | 68 | seh_string_dtor_wrapper_a | Wrapper that calls STL_string_dtor within an SEH frame. Variant A. |
| 0x00D052B0 | 65 | seh_string_dtor_wrapper_b | Wrapper that calls STL_string_dtor within an SEH frame. Variant B. |
| 0x00D05300 | 68 | seh_string_dtor_wrapper_c | Wrapper that calls STL_string_dtor within an SEH frame. Variant C. |
| 0x00D05350 | 65 | seh_string_dtor_wrapper_d | Wrapper that calls STL_string_dtor within an SEH frame. Variant D. |
| 0x00D053A0 | 100 | destroy_two_strings_seh | Destroys two STL strings sequentially within an SEH frame. Used as a cleanup handler for objects containing two string members. |
| 0x00D05410 | 93 | variant_record_assign_two_strings | Copy-assigns a record with two STL string fields (at offsets 0x00 and 0x18) plus 4 non-string fields (offsets 0x30-0x3c). Uses STL_lib_func_004fa8f0 for string assignment. |
| 0x00D05670 | 263 | rb_tree_uint_to_uint_insert_or_find | RB-tree insert-or-find for a map<uint, uint>. Walks the tree to find the key; if not found, allocates a 0x18-byte node and inserts via Insert_node. Returns pointer to the value field. |
| 0x00D05780 | 278 | rb_tree_uint_to_5ints_insert_or_find | RB-tree insert-or-find for a map<uint, struct{5 ints}>. Walks the tree to find the key; if not found, allocates a 0x28-byte node (zeroed) and inserts via Insert_node. Returns pointer to the value struct. |
| 0x00D058A0 | 264 | rb_tree_uint_to_2ints_insert_or_find | RB-tree insert-or-find for a map<uint, struct{2 ints}>. Allocates 0x1c-byte nodes. Similar pattern to other map insert functions in this file. |
| 0x00D059B0 | 36 | CDataMgr__scalar_deleting_dtor | Scalar deleting destructor for a data manager class. Sets vtable to 011a210c, optionally frees 0x30-byte object if flag bit 0 is set. |
| 0x00D059E0 | 131 | unpack_6byte_position_data | Unpacks 6 bytes of packed position data into 6 separate uint fields. Ragnarok Online position encoding: extracts X (10 bits), Y (10 bits), Dir (10 bits), Xsize (10 bits), Ysize (4 bits), unknown (4 bits) using bit shifts and masks. |
| 0x00D05A70 | 1220 | init_packet_id_to_msgstring_map | Initializes an RB-tree map of int keys (0-8) to message string IDs (0, 0x36b-0x36e, 0, 0x370-0x372). Creates the sentinel node and inserts 9 entries using lower_bound + Insert_node. Used for mapping packet/command types to localized message string IDs. |
| 0x00D05F40 | 1220 | init_bitmask_to_msgstring_map | Initializes an RB-tree map of power-of-2 keys (1,2,4,8,0x10,0x20,0x40,0x80,0x100) to message string IDs (0x373-0x37b). Similar to init_packet_id_to_msgstring_map but uses bitmask keys instead of sequential indices. |
| 0x00D06410 | 260 | normalize_job_class_id | Maps extended job class IDs (0xfa1-0x1103) back to base class indices (0-0x14, 0x17-0x19, or special codes like 0xfce, 0xfcf, 0xfd1, 0x107a, 0x10ff). Maps multiple job variants (e.g. baby, trans, 3rd job) to the same base class index. Used for job class normalization in skill/UI systems. |
| 0x00D06760 | 901 | init_ranking_type_map | Initializes an RB-tree map (0x20-byte nodes) of ranking type indices (0-3) to ranking display info: title strings ("BLACKSMITH RANK", "ALCHEMIST RANK", "TAEKWON RANK", "KILLER RANK") and RGB color values. Used for ranking leaderboard UI display. |
| 0x00D06AF0 | 214 | create_and_register_skill_entry | Creates a CSkillEntry from packet data (skill ID, level, type, flags, range params), gets the skill name and AP cost from CSkillManager, updates the skill range via CSkillMgr, and registers it. Sets global DAT_01737aa0=1 if skill ID is 0x150 (Falcon Assault). |
| 0x00D06BD0 | 209 | handle_map_change_notification | Handles a map change notification. Copies the map name string, records the action via CRecentActionTracker, retrieves game mode info, removes 3D effects, sets the town map name, processes chat commands for map transition, and updates friend list entries. |
| 0x00D06CB0 | 887 | handle_map_server_connect | Handles connection to map server after character selection. Records timestamps via _Xtime_get_ticks, clears sprite/action data, copies map name string, parses server IP via inet_ntoa and port, initializes network session. If not in replay mode: connects to char server, verifies connection, sends login packet (0x436) with session IDs and timestamp, or shows error dialog on failure. Updates UI with loading message (msgstring 0x7a). |
| 0x00D07030 | 542 | process_skill_list_packet | Processes a skill list packet (opcodes 0x10f, 0xb32, 0x235, 0x29d). Iterates through 0xf-byte skill entries in the packet, creates CSkillEntry objects, validates skill IDs (0-7999 or extended), gets skill names and AP costs from CSkillManager, then dispatches to the appropriate skill tree handler based on packet opcode. Creates CDataTable singleton if needed, then recalculates item bonus dirty flags. |
| 0x00D07250 | 283 | handle_single_skill_update | Handles a single skill update packet. Creates a CSkillEntry with the given skill ID, level, and attributes. Routes to the appropriate skill tree update function based on whether the skill ID is a homunculus skill, guild skill, or regular skill. Creates CDataTable singleton if needed, recalculates item bonus dirty flags. |
| 0x00D07370 | 593 | handle_npc_chat_message | Handles an NPC/overhead chat message. Parses the chat string to extract speaker name (before ':') and message text (after ':'). Converts color from network byte order to RGB. Looks up or creates tooltip for the NPC, dispatches the message to chat windows (types 3, 1, 0x13) via CUIWindowMgr. |
| 0x00D075D0 | 325 | spawn_or_update_npc_entity | Spawns or updates an NPC entity on the map. Converts the NPC GID to string via _itoa, looks up existing NPC via CBGMManager. If not found, allocates a 400-byte object, constructs it, and adds to the entity vector. Then calls the NPC's virtual method to set position, name, and attributes. |
| 0x00D07720 | 31 | is_wedding_class_id | Returns 1 if the job class ID is 0x28 (Wedding Groom) or 0x2a (Wedding Bride), 0 otherwise. Used to check if a character is in wedding costume. |
| 0x00D07740 | 73 | get_job_gender_override | Returns a gender override for specific job classes. Bard/Dancer variants (0x13, 0xfb4, 0xfca, 0xfe4, 0xfeb, 0x1008, 0x10a7) return 1 (male). Gypsy/Minstrel variants (0x14, 0xfb5, 0xfcb, 0xfe5, 0xfec, 0x1009, 0x10a8) return 0 (female). Other classes return param_2 (default gender). |
| 0x00D07890 | 227 | handle_entity_name_display | Handles displaying an entity's name/text. Builds a display string via get_random_monster_talk_line, compares it with a default string. If different, updates the entity's overhead display via vtable call and optionally dispatches to chat window (type 1) if game settings 0x72 and 0x94 are both disabled. |
| 0x00D07980 | 23 | dispatch_whisper_response_packet | Thin wrapper that extracts a byte at offset+2 (result type) and a dword at offset+3 (param) from a whisper response packet and forwards them to CNetwork__handle_whisper_response for processing. |
| 0x00D08080 | 92 | handle_entity_position_update | Handles an entity position update packet. Checks if the entity ID at offset+2 is valid via validate_entity_id_for_interaction, then looks up the map entity via CBGMManager. If found, calls vtable method 8 to update position with coordinates from offsets +6 and +10. |
| 0x00D080E0 | 34 | dispatch_buyingstore_purchase_packet | Thin wrapper that extracts fields from a buying store purchase packet (item slot at +2, count at +4, timer at +10, buyer ID at +6, price at +14) and forwards to CNetwork__handle_buyingstore_purchase for processing. |
| 0x00D085D0 | 33 | handle_raw_data_packet | Passes raw packet data (offset+4, length from short at offset+2 minus 4) to null_stub_0076c670 for processing. |
| 0x00D08600 | 31 | send_2byte_packet_a | Sends a 2-byte packet (just the opcode) via CNetworkSession. Gets the network session from FUN_00c7d7d0 first. |
| 0x00D08620 | 31 | send_2byte_packet_b | Sends a 2-byte packet (just the opcode) via CNetworkSession. Identical to send_2byte_packet_a, used for a different packet opcode. |
| 0x00D08640 | 35 | dispatch_vending_item_sold_packet | Thin wrapper that extracts fields from a vending item sold packet (target GID at +0x14, source at +2, count at +6, values at +8/+0xc/+0x10) and forwards to CNetwork__handle_vending_item_sold for processing. |
| 0x00D08820 | 202 | handle_camera_info_packet | Handles camera info/debug packet. Type 1: toggles camera debug info display (window 0x121), shows "Camera Info On/Off" message. Otherwise: sets 3 camera parameters (floats at +3, +7, +0xb) into the camera object at param_1+0xd0 (offsets 0x4c, 0x48, 0x44). |
| 0x00D1460D | 1 | bad_instruction_halt | Invalid/misaligned code fragment - likely data misidentified as a call target |
| 0x00D17AD0 | 274 | schedule_timed_ui_event_type5 | Deactivates UI events with counter 5, then if DAT_013896c4 is set, calculates a timer interval (server time to target time in 100ns units, divided by 10000 for ms). If the interval is positive and non-zero, allocates a 0x30-byte timer event and reactivates it via CUIEventManager. |
| 0x00D17BF0 | 274 | schedule_timed_ui_event_type6 | Deactivates UI events with counter 6, queries quest visibility, then schedules a timer event similar to schedule_timed_ui_event_type5. Uses quest elapsed server time for the timer calculation. |
| 0x00D17D10 | 18 | show_no_packet_encryption_error | Displays an error messagebox with "No Packet Encryption" text. Likely called when the client detects the server doesn't support packet encryption. |
| 0x00D18BA0 | 35 | update_entity_effect_param | Looks up a map entity by ID via CBGMManager. If found, calls FUN_00cc2050 with param_2 to update an effect parameter on the entity. |
| 0x00D195A0 | 48 | dispatch_skill_entry_from_packet | Extracts skill entry fields from a packet buffer and forwards to create_and_register_skill_entry. Fields: skill ID (+2), level (+8), type (+4), flag (+0xe), range params (+10, +0xc, +0xf). |
| 0x00D1A070 | 48 | dispatch_single_skill_update_from_packet | Broadcasts a message to all entities in the entity list at offset 0x604. Iterates the doubly-linked list and calls each entity's virtual method 0x94 with message code 0x3C and param_2 as data. |
| 0x00D1A0A0 | 36 | CGameMode__open_ui_window_by_command_type_00d1a0a0 | Opens a UI window based on command type byte. Type 0: checks window 0xFB, if not found sends packet 0x9AB. Type 1: closes window 0x10, opens 0x119. Type 2: opens 0x11C. Type 3: opens 0x11E. Type 9: opens 0x158. |
| 0x00D1A1C0 | 94 | handle_ranking_result_message | Displays a ranking result chat message. Formats a message string (msgstring IDs 0x385-0x386, 0x39e, 0x3b9) with kill/death counts from the packet, using different colors per ranking type (0: gray, 1: green, 2: red, 3: gray). Dispatches to chat window type 1. |
| 0x00D1BC30 | 90 | handle_emotion_expansion_buy_success | Handles successful emotion expansion purchase. Starts quest by ID from packet (+2) with optional parameter (+5 if flag at +4 is set). Displays success message via EMSG_EMOTION_EXPANTION_BUY_SUCCE callback, dispatches to chat, and schedules UI event type 5. |
| 0x00D1BC90 | 104 | handle_entity_body_state_change | Handles entity body/option state change packet. If entity ID matches local player (DAT_01733c3c), uses the player object directly; otherwise looks up via CBGMManager. Calls vtable method 8 with command 0xa0 and two short values from offsets +6 and +8. |
| 0x00D1BD00 | 74 | handle_emotion_expansion_error | Handles emotion expansion purchase failures. Displays error messages based on error code at offset+4: 0=not enough, 1=date fail, 2=already owned, 3=another fail, 4=not enough alt, 5=not yet sale time, default=unknown. Uses EMSG callback strings and dispatches to chat with red color (0xff). |
| 0x00D1BE10 | 114 | handle_shop_purchase_result | Handles shop purchase result packet. Type 0: if short at +2 is 0, deducts zeny and refreshes UI; otherwise constructs shop item and updates inventory. Types 1, 3, 4: display error messages via CUIWindowMgr. Clears shop processing flags. |
| 0x00D1BFD0 | 115 | handle_mail_send_result | Handles mail send result packet. Byte at offset+2: 0=success (clears chat, shows msgstring 0x38), 1=failure (clears chat, shows msgstring 0xdd). Messages displayed in red (0xff) via chat window type 1. |
| 0x00D1C050 | 174 | handle_trade_close_packet | Handles trade window close/cancel packet. If type 2: shows msgstring 0x9f5 dialog. Closes trade window (0x21) with command 6/0xc9. Resets trade state globals DAT_01738268/26c/270 to 0 and calls FUN_00dd8ca0. |
| 0x00D1C2B0 | 98 | handle_party_invite_result | Handles party invite result packet. Types 0-2,4: display error messages (msgstrings 0x45-0x48). Type 3: opens party window (0x271b), shows member info. Type 5: formats player name with msgstring 0x6ac. Messages in red (0xff). |
| 0x00D1C4E0 | 34 | handle_party_invite_result_alt | Alternative party invite result handler. Same case structure as handle_party_invite_result but without the type 5 name format case. Type 3 passes 0 instead of packet fields to the party window. |
| 0x00D1D230 | 48 | CGameMode__reset_local_chat_buffer | CGameMode: reset local chat buffer |
| 0x00D1E7B0 | 133 | handle_unequip_item_result | Handles unequip item result packet. Sets cooldown timer to now-2000ms at offset 0x108. Type 0: checks if target location is a valid equip slot via is_valid_equip_location_flag; if so calls unequip_item_at_location, otherwise calls CShop__unequip_item_from_slot. Type 1: shows error message 0x7A1 ("cannot use") in red. |
| 0x00D1E840 | 139 | handle_skill_use_fail_message | Massive skill use failure message handler with ~100+ cases. Maps failure type byte at offset+0xd to message string IDs (0xca-0x1119). Special cases: type 0 sub-switches on skill count at +2 (values 1,0x1b,0x32,0x34). Types 0x47/0x48 build item tooltip strings. Types 0x49/0x4a format skill names. Type 0x55 formats remaining uses. Dispatches all to chat window type 1 with red color. |
| 0x00D1F550 | 27 | CGameMode__enable_periodic_event_if_active | Conditional call to FUN_00e493e0 with param_1 if non-zero. Likely an optional notification or event trigger. |
| 0x00D1FBA0 | 139 | handle_friend_request_result | Handles friend request result packet. Type 0: success - shows friend added message (msgstring 0x335) in yellow, creates friend list entry. Types 1,3,4,6,7,8: show various error/status messages with friend name formatting. Type 2: shows simple error message (0x333). |
| 0x00D211E0 | 46 | dispatch_skill_entry_from_packet_alt | Alternative skill entry packet dispatcher. Extracts fields at different offsets than dispatch_skill_entry_from_packet (flag at +0x26, uses +8 for both level and last param). |
| 0x00D21CB0 | 28 | set_walk_delay_params | Stores two short values from packet offsets +2 and +4 into global walk delay parameters DAT_01733560 and DAT_01733564. |
| 0x00D21CD0 | 45 | handle_other_entity_move_packet | Handles entity move packet for non-local entities. If entity ID at +2 is not the local player (DAT_01733c3c), dispatches virtual method 0x18 with command 0x3f and coordinates from offsets +0x20 and +0x22. |
| 0x00D25A90 | 48 | handle_entity_vtable_0xc4_update | Looks up entity by ID at +2, calls vtable method 0xc4 with dword at +6 and short at +10. Likely updates an entity property via virtual dispatch. |
| 0x00D25E90 | 78 | handle_player_class_change_packet | Handles player class/job change packet. Type 0: stores entity ID, sets job ID. Type 1: stores value, refreshes job ID and UI. Type 2: stores value, calls zeny refresh. Type 3: updates sprite if value is 0. Types 1-3 show chat messages with format strings. Updates DAT_01457a40 UI if present. |
| 0x00D26080 | 123 | handle_player_stat_change_packet | Handles player stat/property change packet with 8 case types. Type 0: stores entity ID, updates job display. Type 1: updates HP, recalculates bonuses, warns if low weight capacity. Type 2: updates SP, refreshes UI. Type 3: updates body style or loads costume sprite. Type 4: updates visual effect. Type 6: equip/unequip slot handling with item bonus recalculation. Type 7: shows confirmation dialog for option 0x128. |
| 0x00D26600 | 86 | handle_entity_option_change | Handles entity option/status change packet. Calls FUN_00e25e60 with entity ID at +2 and value at +6. If local player, also calls FUN_00cc1e70. Otherwise looks up entity and calls FUN_00cc1e70 if found. |
| 0x00D26660 | 88 | handle_party_window_update | Updates party window (type 0x271b). Byte at +2: 0 sends command 0x33 (leave party), 1 sends command 0x34 (kicked from party). Both through vtable method 0x94. |
| 0x00D266C0 | 27 | handle_config_setting_response | Handles config/setting response packet. Type 0: sets homunculus auto-feed flag, shows msgstring 0x54e/0x54f. Type 1: enables/disables option 0xe7, shows msgstring 0xba2/0xba3, syncs nav checkbox. Types 2-3,5-6: call various settings functions. |
| 0x00D26800 | 96 | handle_homunculus_autofeed_toggle | Handles homunculus auto-feed toggle response. Stores byte at +2 into DAT_01737fac, shows msgstring 0x54e (off) or 0x54f (on) in yellow-green, and updates the UI window if open. |
| 0x00D26DC0 | 136 | handle_entity_vanish_packet | Handles entity vanish/remove packet. Looks up entity ID in RB-tree, then calls vtable method 8 with command 0x21 (remove). Also closes trade/shop windows if the vanishing entity was the trade partner. |
| 0x00D27060 | 68 | handle_entity_reset_command_0x8e | Looks up entity by ID at offset+2, calls vtable method 8 with command 0x8e (reset/clear command) and all zeroes. |
| 0x00D27220 | 128 | display_whisper_message | Displays a whisper message in chat. Formats msgstring 0x344 with sender name (from FUN_00e08c70) and message text (from packet +2). Clears existing chat then shows in yellow (0xffff00) via chat window type 1. |
| 0x00D272A0 | 116 | handle_homunculus_stats_update | Handles homunculus stats update packet. Stores 4 stat values from offsets +6, +0xe, +10, +0x12 into globals, calls FUN_00e49290 with entity ID, and refreshes entity display via vtable method 0x22. |
| 0x00D27320 | 96 | handle_homunculus_stat_change | Handles individual homunculus stat change. Switch on type at +2: 5=HP, 6=SP, 7=max HP, 8=max SP. Stores value at +4 into respective global. Refreshes entity display if homunculus ID (DAT_017381f8) is valid. |
| 0x00D273C0 | 89 | handle_entity_option_state_a0 | Handles entity option state 0xa0 packet. Looks up entity by ID at +2 (local player uses direct access). Calls vtable method 8 with command 0xa0 and byte value from offset +6. Likely body/sit state toggle. |
| 0x00D3B3E3 | 21 | security_cookie_noop | Empty function body with security cookie check. Compiler-generated no-op. |
| 0x00D532D0 | 96 | word_wrap_stl_string_and_display | Extracts the c_str from an STL string (handling SSO buffer vs heap pointer), passes it to UITextWidget__word_wrap_text for display, then destroys the temporary string. |
| 0x00D54B10 | 97 | CShopItemExt__copy_construct | Copy constructor for 0x100-byte records (CShopItem). Calls CShopItem__copy_construct for the first 0xF8 bytes, then copies the flag byte at offset 0xF8. |
| 0x00D54E70 | 93 | sprintf_wrapper_0x100 | Formatted string output wrapper. Calls vsprintf_s with a 0x100-byte buffer. Returns the formatted string length, or -1 on error. |
| 0x00D58970 | 432 | CSimulator__ensure_output_directory | Ensures the simulator output directory exists. Appends subdirectory name to base path, checks _access, creates via _mkdir if missing. On failure displays red error chat message. Returns the directory path as std::string. |
| 0x00D58B20 | 594 | CSimulator__open_result_file_with_date | Opens a simulator result file with date-stamped filename. Looks up item name via CItemDesc, formats filename as dir/itemname_id_YYYY_MM_DD.txt, increments suffix if file exists. Opens with _wfopen. Displays success/fail message in chat. |
| 0x00D58D80 | 468 | CSimulator__open_result_file_by_name | Opens a simulator result file by name. Formats filename as dir/name.txt, increments suffix if file exists. Opens with _wfopen. Displays success/fail message in chat. |
| 0x00D58F60 | 570 | CSimulator__open_random_option_result_file | Opens a RandomOption simulator result file. Uses date-stamped filename format: dir/name_RandomOption_YYYY_MM_DD.txt. Increments suffix if file exists. Opens with _wfopen, displays success/fail chat message. |
| 0x00D5A960 | 411 | CQuestSystem__update_tab_data | Updates quest tab data. Validates tab type (0/1/2) against known tree roots at DAT_01456e6c offsets 0x20/0x28/0x30. If node changed, marks as dirty, appends string data to node+0x54, sets completion flag, stores extra params at node+0x1A0/0x1A4. Decrements pending counter and notifies UI window 0x133 when done. |
| 0x00D5F830 | 1058 | CPackageItem__log_enchant_upgrade_test | Logs enchant upgrade test results to a file. Creates filename with slot info and date, opens via PackageItemTest path. Iterates through item entries (0x1c bytes each), logging each item's name, quantity, and probability. Uses CItemDB__build_item_tooltip_string and convert_wstring_to_hex_string for display. Writes total try count at end. |
| 0x00D5FC60 | 966 | CPackageItem__log_enchant_test | Logs enchant test results to a file. Creates filename with grade/slot info and date, opens via PackageItemTest path. Writes grade, then iterates item entries logging name, quantity, and probability. Uses CItemDB__build_item_tooltip_string for item names. Writes total try count as "SetEnchant" at end. |
| 0x00D60030 | 1663 | CPackageItem__log_package_test | Logs package item test results to a file. Categorizes items into 22 package types (MUST, RANDOM_0-9, NATURAL_0-9). Opens log file via PackageItemTest path. For each category with items, writes the category name and per-item details (name, count, probability, etc.) using CItemDB tooltips and wstring conversion. Writes total unpacked count per category. |
| 0x00D606B0 | 1727 | CPackageItem__log_random_option_test | Logs random option test results to a file. Categorizes options into 6 types (MUST_1-5, RANDOM). Opens log file via PackageItemTest. For each option, calls Lua function "GetVarOptionName" to get the option name, then logs the option details including values and probabilities. RANDOM type uses a different format string with fractional display. |
| 0x00D60D70 | 817 | CGameMode__spawn_or_register_ground_skill_unit | Spawns or registers a ground skill unit. If actor ID matches local server ID, looks up existing actor or creates a new 0x4F8-byte CSkillUnit object, sets its type to 7 (ground unit), computes world position via CEffect3DPlayer__cell_to_world_position, and gets interpolated terrain height. For remote actors, removes any existing object with same ID, creates a 0x440-byte CGameEntity, sets init data via vtable 0x2D, and adds to both the object list and linked list. |
| 0x00D61100 | 73 | assert_param_is_zero | Asserts that param_1 is zero. If non-zero, triggers error handler FUN_00cadd60 with error code 0x345 (does not return). |
| 0x00D611B0 | 57 | handle_dynamic_npc_error_packet | Handles dynamic NPC error response packet. Displays error messages based on error code: 1="dynamic_npc_create_error_found_u", 2="dynamic_npc_not_found", 3=message table 0xa47, 4=message table 0xfa2. Dispatches the message to the chat window via CUIWindowMgr__dispatch_chat_message. |
| 0x00D612A0 | 69 | handle_ui_window_property_update_packet | Handles a UI window property update packet. Looks up window type 0x10B, then calls its vtable method 0x94 (offset 0x22) with enable flag, two int values, and a char value from the packet data. |
| 0x00D612F0 | 76 | handle_actor_position_update_packet | Handles actor position update packet. Looks up actor by ID via CBGMManager, then calls vtable method 0x91 to set position with two int values from the packet (offsets +6 and +10). |
| 0x00D61340 | 75 | handle_actor_property_set_packet | Handles actor property set packet. Looks up actor by ID via CBGMManager, then calls vtable method 0x91 with a char value from offset +6 and a fixed value of 0x14. |
| 0x00D61390 | 799 | parse_spawn_packet_and_forward | Parses a spawn/appear packet (variant with name string appended). Extracts a trailing name string (from offset 0x58 to packet end), then copies all packet fields (bytes/shorts/ints at various offsets) and forwards them to FUN_00d61f40 (the main actor spawn handler) with all parsed parameters. |
| 0x00D616B0 | 804 | parse_spawn_packet_variant_and_forward | Parses a spawn/appear packet variant (with name string from offset 0x5A). Very similar to parse_spawn_packet_and_forward but with a slightly different packet layout (offset 0x5A for name instead of 0x58). Extracts all actor fields and forwards to FUN_00d61f40. |
| 0x00D619E0 | 1256 | CGameMode__handle_actor_spawn_short | Handles a shorter actor spawn packet format. Parses actor type, ID, position, stats, equipment, and name from the packet. Creates or updates actor objects: for local actors creates 0x4F8-byte objects, for NPCs uses FUN_00cdd6b0. Sets actor properties via vtable calls (0x7A for new, 0x7B for existing). Applies effects via CRsmObjMgr, handles special actor types (7=homunculus, 8=mercenary, 9=elemental). Updates actor movement for type 0. |
| 0x00D61F40 | 1496 | CGameMode__handle_actor_spawn_full | Main actor spawn handler for full spawn packets. Takes 34 parameters covering all actor properties (type, ID, position, stats, equipment, name, etc.). Creates or updates actors: allocates 0x4F8-byte objects for players, NPC objects via FUN_00cdd6b0. Sets spawn data via vtable 0x7A (new) or 0x7B (existing). Applies visual effects, handles special types (7=homunculus, 8=mercenary, 9=elemental). Sets walking state for type 0 actors via CBGMManager__move_actor_and_update. |
| 0x00D62540 | 784 | parse_moving_spawn_packet_and_forward_v2 | Parses a moving spawn packet (name from offset 0x51). Extracts all actor fields from the packet and forwards to CGameMode__handle_actor_spawn_full_v2 with tile-based position data. |
| 0x00D62850 | 789 | parse_moving_spawn_packet_variant_and_forward_v2 | Parses a moving spawn packet variant (name from offset 0x53). Extracts all actor fields from the packet and forwards to CGameMode__handle_actor_spawn_full_v2 with tile-based position data. Slightly different layout from the other variant. |
| 0x00D62B70 | 1282 | CGameMode__handle_actor_spawn_with_tile_data | Handles actor spawn packet with tile coordinate data. Parses actor type, ID, position, stats, equipment from packet. Decodes 3-byte tile position (x/y/dir). Creates/updates actors with vtable calls 0x79 (new player), 0x7C (existing player), 0x4 (new NPC), 0x3 (existing NPC). Handles special types 7/8/9. Sets robe/costume fields. Applies sprite/effects tracking via FUN_00d591a0. |
| 0x00D630F0 | 1556 | CGameMode__handle_actor_spawn_full_v2 | Full actor spawn handler v2 variant. Takes 33 parameters. Similar to handle_actor_spawn_full but with byte-based tile position decoding (3 bytes encoding x/y/dir). Creates players (0x4F8 bytes) or NPCs. Applies effects, handles homunculus/mercenary/elemental types. For players, registers by tile coordinates via CBGMManager. NPCs with non-zero combined job ID get their mounted skill set. |
| 0x00D63720 | 799 | parse_standing_spawn_packet_and_forward | Parses a standing spawn packet (name string from offset 0x52). Extracts all actor fields and forwards to FUN_00d642f0 (the standing spawn handler). Similar structure to parse_spawn_packet_and_forward but for standing/idle actors. |
| 0x00D63A40 | 804 | parse_standing_spawn_packet_variant_and_forward | Parses a standing spawn packet variant (name string from offset 0x54). Extracts all actor fields and forwards to FUN_00d642f0. Has slightly different field layout with an extra GID field at offset 9. |
| 0x00D63D70 | 1289 | CGameMode__handle_standing_actor_spawn_short | Handles a shorter standing actor spawn packet. Parses actor data similarly to handle_actor_spawn_with_tile_data but for standing/idle actors. Creates/updates actors with vtable 0x79 (new player) or 0x4 (new NPC), 0x7C/0x3 for existing. Applies effects, handles special actor types (7/8/9). Sets robe and costume fields. Uses NPC spawn combined job ID for mounted skill setting. |
| 0x00D642F0 | 1565 | CGameMode__handle_standing_actor_spawn_full | Full standing actor spawn handler. Takes 33 parameters. Creates/updates standing/idle actors. For players (type 0), registers by tile position and calls FUN_00d591a0. For NPCs with skill ID 0x2D2, invokes mounted skill callback. Otherwise applies standard sprite tracking. Handles homunculus/mercenary/elemental special types. |
| 0x00D64940 | 245 | handle_item_option_update_packet | Handles item option/attribute update packet. Looks up an item by index via equip_location_to_slot_indices and CShop__get_item_by_index_or_special. Based on action type at offset +10: type 1 sets a value at the given slot index, types 2/3 clear it to 0. Then updates the equipment display via update_equipment_slot_item_00dff9c0. |
| 0x00D64A40 | 66 | count_nonzero_quest_objectives | Counts the number of non-zero quest objectives in the packet. Checks 5 short values at specific offsets in the packet data. Returns count of non-zero entries (0-5). |
| 0x00D64A90 | 2124 | CPackageItem__log_ddukddak_box_test | Logs DdukddakBox (random box) test results to a file. Aggregates items from the packet into a red-black tree (counting duplicates), sorts them, then writes to a CSV-like file under PackageItemTest directory. Includes item ID, name, count, and percentage for each unique item. Creates dated filename with incrementing suffix to avoid overwrites. |
| 0x00D652E0 | 756 | CPackageItem__log_simple_package_test | Logs simple package item test results to a file. Creates log under PackageItemTest directory with dated filename. Writes item name, count, and opening/closing characters for each entry in the packet (10-byte entries). Sums total unpacked packages at the end. Simpler format than log_package_test, without category grouping. |
| 0x00D655E0 | 160 | handle_actor_stat_update_and_refresh | Updates two stats for an actor via FUN_00d558b0, then looks up the actor by ID and dispatches vtable event 0x22 to refresh the actor's appearance/state. |
| 0x00D65680 | 167 | handle_actor_conditional_stat_update | Conditionally updates an actor stat based on the action type. First validates actor exists via FUN_00e086f0. If action type is 5 or 6, updates the stat via FUN_00d558b0. Then refreshes the actor appearance via vtable event 0x22. |
| 0x00D65730 | 157 | CGameMode__reload_map_resources | Reloads map resources. Resets CMapResourceMgr, copies current map name string and updates via SpriteAction__set_node_string_field_3 with local server ID. If player actor exists, calls FUN_00cc1c20. Sends refresh to window 444. |
| 0x00D657D0 | 145 | handle_npc_sprite_full_data_packet | Handles NPC sprite full data packet. Extracts 22 bytes of sprite data from offset +6, then passes them along with 4 string parameters (at offsets 0x1E, 0x36, 0x4E) and a final int value to SpriteAction__store_full_node_strings with the NPC ID. |
| 0x00D65870 | 61 | handle_town_search_result_packet | Dispatches town/NPC search result packet data to CTownInfoMgr__handle_search_result_entry. Extracts string pointers, IDs, short values, and boolean flags from the packet at various offsets and passes them as parameters. |
| 0x00D658B0 | 1 | return_negative_one | Return negative one, small utility function |
| 0x00D658C0 | 1746 | handle_map_channel_info_packet | Handles map channel information packet. Resets CMapResourceMgr, stores channel ID at DAT_016d42f4+0x58 with active flag. Copies 3 strings from packet (map name at +0x20, base name at +8, short name at +0x38) into resource manager. Creates channel name entries: first loop creates param_1[0x48] entries with type 0 (channels), second loop creates param_1[0x49] entries with type 1 (sub-channels). Each entry is added to a linked list at DAT_016d42f4+0x60. Sends refresh to window 444. |
| 0x00D65FC0 | 42 | handle_skill_warning_area_packet | Dispatches skill warning area parameters from a network packet. Forwards actor ID, skill type, skill ID, and 4 additional int values plus a flag to FUN_00d55ab0 for processing. |
| 0x00D65FF0 | 519 | create_skill_area_warning_effect | Creates a visual skill area warning effect on the ground. Calls Lua function "GetSkillScale" to get grid dimensions. Creates effect type 0x45A via CEffectManager, then spawns warning plane tiles in a grid pattern (param_4 x param_5 tiles). For each tile, computes world position via FUN_00cd36e0, gets terrain height via C3dAttr__GetInterpolatedHeight, and places a warning plane. Sets expiration time via timeGetTime + param_6. |
| 0x00D66200 | 45 | process_config_state_array | Processes an array of config state entries (8 bytes each: type + value). Iterates through param_1 entries at param_2. If type==1, sets global DAT_0173a6d0 based on whether the value is non-zero. |
| 0x00D66230 | 317 | handle_achievement_list_packet | Handles achievement list packet. Parses achievement entries of 0x36 bytes each starting at offset 0x1C. Copies each entry (54 bytes of data) into a growing vector. Then calls FUN_00d59fd0 with the header data (offset 4) and the collected entries for final processing. |
| 0x00D66370 | 143 | handle_npc_sprite_string_update_packet | Handles NPC sprite string update packet. Extracts a variable-length string from offset 8 (length = packet_size - 8), stores it via STL_lib_func, then updates sprite node data via SpriteAction__set_node_string_field_3 with the NPC ID from offset 4. |
| 0x00D66400 | 25 | handle_package_item_simulator_result | Dispatches package item simulator results based on type at offset +4. Type 0: displays "Simulator Start Fail" in chat. Type 1: logs via CPackageItem__log_package_test. Type 2: logs random options. Type 3: logs enchant test. Type 4: logs enchant upgrade test. |
| 0x00D66470 | 879 | handle_rune_system_result_packet | Handles rune system operation result. Case 0 (success): creates effect 0x95F, opens/refreshes window 0x169. Cases 1-8 (errors): displays message table entries 0xFEB-0xFF2 in chat and shows dialog boxes for cases 2-8. All cases reset rune slot field and refresh window 0x169 (rune window) with events 0x3C and 0x69. |
| 0x00D66810 | 45 | handle_skill_warning_area_packet_v2 | Handles skill warning area packet variant 2. Extracts fields from different packet layout (ID at +4, type byte at +8, skill at +2, plus 4 ints) and forwards to FUN_00d55ab0 with flag=0. |
| 0x00D66860 | 408 | handle_broadcast_chat_message_packet | Handles a broadcast/public chat message packet. Extracts message string from offset 0x1C (max 0xDC bytes). If the string contains incomplete search markers, performs a string search via CTownInfoMgr. Unless option 0x94 is enabled (hide broadcast messages), displays the message in chat with purple color (0xB4B4FF) and flag 0x15. |
| 0x00D66A00 | 34 | handle_channel_count_update_packet | Updates channel/sub-channel count values in the map resource manager. Stores ushort from offset +2 to DAT_016d42f4+0x38 and ushort from offset +4 to DAT_016d42f4+0x3C. |
| 0x00D66A30 | 27 | handle_color_skill_effect_packet | Dispatches color skill effect packet data to CSkill__apply_color_effect_on_target. Passes target actor ID, skill ID, value, and additional param from packet offsets 2/6/10/14. |
| 0x00D66A50 | 1 | packet_handler_noop | Packet handler noop, small utility function |
| 0x00D66A60 | 174 | display_skill_use_fail_message | Displays a skill use failure message in chat. Gets message text 0xF18 from message table, formats it with the string parameter, and dispatches it as a system chat message with color 0x64FFFF. |
| 0x00D66B10 | 458 | handle_achievement_complete_result | Handles achievement completion result. If param_2==0 (success): notifies window 0xC9, looks up achievement in tree, decrements counter, removes from tree if found. Also removes from achievement window if visible. Shows message 0xF19 in dialog and chat. If param_2!=0 (failure): shows message 0xF1A. |
| 0x00D66CE0 | 807 | handle_enchant_result_message | Handles enchant operation result messages. Maps result codes 0-13 to message table entries 0xFF4-0xFFE. Displays the message in chat and shows a dialog box. Code 0 returns success silently. Codes 1-8 map linearly to 0xFF4-0xFFB. Code 9 is default (no message). Codes 10-11 use 0xFFD, codes 12-13 use 0xFFE. |
| 0x00D67040 | 161 | handle_rune_activation_list_packet | Handles rune activation list packet. Iterates through rune IDs (4 bytes each) and activates each via CRuneSystemMgr__get_rune_name with flag=1 (activated). Then recounts active runes and refreshes the rune window (0x169) with event 0x3C. |
| 0x00D670F0 | 173 | handle_rune_full_list_packet | Handles full rune list packet. Iterates through rune entries (8 bytes each: 4-byte ID + 2 ushort values). Registers each rune via CRuneSystemMgr__get_rune_name with flag=0 (available). Sets the rune page as loaded (offset 0x20=1), recounts active runes, and refreshes the rune window. |
| 0x00D671A0 | 22 | handle_rune_description_result | Handles rune description/info result. Case 0 (success): updates rune description via CRuneSystemMgr, scrolls rune window if needed. Cases 1-7 (errors): displays corresponding message table entries (0x106A, 0x1072-0x1077) in chat. |
| 0x00D672E0 | 116 | handle_rune_description_batch_packet | Handles batch rune description update packet. Iterates through entries (5 bytes each: 4-byte rune ID + 1-byte value). Updates each rune description via CRuneSystemMgr__get_rune_description. Refreshes the rune window (0x169) with event 0x3C. |
| 0x00D67360 | 478 | handle_enchant_rune_result | Handles enchant/rune operation result with visual effects. If enchant succeeds (result==0), plays success effects: type 2=0x95D, type 1=0x95E, type 0=0x95C or 0x95B with different sizes. If the rune system field_14 indicates changes, updates item decompose count and refreshes equipment bonus. Resets rune slot and refreshes rune window (0x169). |
| 0x00D67540 | 80 | handle_rune_slot_basic_result | Handles basic rune slot operation result. If enchant message returns 0 (success), populates slot data with param_2/param_3 and -1 for remaining two slots. Refreshes rune window (0x169). |
| 0x00D67590 | 103 | handle_rune_slot_full_result | Handles full rune slot operation result with all 4 slot values. If enchant succeeds, populates all 4 slot values. Sends packet 0xBCB to server. Refreshes rune window. |
| 0x00D67600 | 105 | toggle_rune_window_visibility | Toggles the rune window (0x169) visibility. If param_1==0 and window exists, closes it. If param_1!=0 and window doesn't exist, creates it and sends a network request packet (0xBE0) to the server. |
| 0x00D67670 | 72 | toggle_rune_window_simple | Simple rune window toggle. If param_1==0 and window 0x169 exists, closes it. If param_1!=0 and window doesn't exist, creates it via FUN_00a978d0. |
| 0x00D676C0 | 247 | handle_hotkey_data_packet | Handles hotkey/shortcut bar data packet. Extracts variable-length data (packet_size - 8 bytes) from offset 8. Inserts the range into a vector, then notifies the shortcut bar window (type 0x5F) via vtable event 0x22 with the data length and tab index (from offset +4). |
| 0x00D677C0 | 130 | handle_config_state_change_result | Handles configuration state change result for type 1 (navigation/minimap option). If param_2==1: if param_1==1, shows "option changed" message (0xF15). Updates global navigation flag DAT_0173a6d0, refreshes navigation window, and displays enabled (0xF17) or disabled (0xF16) message. |
| 0x00D67850 | 140 | CGameMode__dispatch_property_change_to_party | Dispatches a unit property change to local player and all party members. First processes the change for the specified actor via CPacket__dispatch_unit_property_change. If the target is the local player, iterates through party member IDs (stored at this+0x610..0x614) and constructs packet 0x1D7 for each, forwarding the same property change. |
| 0x00D678E0 | 151 | dispatch_ui_open_request_by_type | Dispatches UI window open requests based on type byte. Types 0-4: handled by FUN_00d1a0a0. Type 5: notifies window 0x13B. Type 6: dispatches via CPacketSystem handler. Type 7: notifies window 0x148 with event 0x22. Type 8: opens window 0x157. |
| 0x00D679A0 | 50 | handle_skill_use_result_packet | Dispatches skill use result packet data to FUN_00d5b030. Extracts source ID, target ID, skill ID, level, damage, extra values, flag byte, and additional int from the packet. |
| 0x00D67C20 | 1394 | CGameMode__handle_npc_shop_item_display | Handles NPC shop item display with level-up effect. On first interaction (param_7==1), creates a tab panel UI (0xD0 bytes), formats the NPC name via CPacketParser and message 0xA79, sets up dropdown items, creates effect 0x446, and notifies party window (0x133). Stores shop parameters to globals. Updates quest/NPC tracking window 0x10E and 0x10F. |
| 0x00D681A0 | 83 | handle_npc_shop_close | Handles NPC shop close event. If param_1==0 (close), refreshes window 0x10E with event 0x3C and removes the shop entity by index. |
| 0x00D68200 | 495 | handle_vending_item_add_result | Handles vending/market item add result packet. For type 0 (success): parses full item data including refine, cards, options, enchant data. Constructs shop item, updates item storage and vending UI. Shows message 0xA22. Types 1-4 (errors): display messages 0xA46, 0xA45, 0xA89, 0xA8B respectively. |
| 0x00D684C0 | 97 | handle_vending_item_add_result_v2 | Variant of vending item add result handler. Similar to handle_vending_item_add_result but with a slightly different packet layout (refine type at +0xE as byte instead of bit flags). Uses count_nonzero_quest_objectives for option count. Type 0 = success with item data, types 1-4 = error messages. |
| 0x00D686F0 | 64 | CGameMode__update_actor_nametag_and_title | Updates an actor's nametag and title. Finds actor by ID via CBGMManager, calls vtable method 0xC0 to update nametag display. If param_3 is non-zero, also updates the title via CPacketStream processor. |
| 0x00D68730 | 2567 | handle_quest_list_update_packet | Handles quest list update packet. Parses variable-length quest entries starting at offset 5. Each entry contains: type (0=active, 1=complete, 2=failed), flags, quest name, time limit, and optional variable-length description string. Creates quest node entries in a red-black tree organized by type (3 trees at offsets 0x20, 0x28, 0x30). Increments quest counter for new active quests. If param+4 flag is 1, marks quest data as fully loaded and refreshes UI. |
| 0x00D69140 | 95 | display_party_booking_result_message | Displays party booking result message based on error code. Code 0: message 0xB3D (success). Code 1: message 0xB3E. Code 2: message 0xB3F. Displays as system chat message with color 0xFF. |
| 0x00D691A0 | 191 | handle_party_reservation_response | Handles party reservation response. Type 0 (accepted): sends packet 0xA48 to server, shows dialog 0xB14, closes window 0x119. Type 1 or 2 (rejected/timeout): shows dialog 0x627 (generic failure). |
| 0x00D69260 | 384 | handle_instance_map_enter | Handles entering an instance map. If param_1==0 (success): stores param_2 as global, initializes instance data via FUN_00e19230, sets up map strings via FUN_00cd3570, copies multiple strings for the sprite action node, updates display via SpriteAction__set_node_string_field_4, and refreshes instance UI window. |
| 0x00D693E0 | 128 | handle_guild_storage_result | Handles guild storage operation result. Type 0 (success): notifies window 0x148 with event 0x22 and param_2*10+1. Type 1 (failure): displays message 0xD90 in chat and closes window 0x148. |
| 0x00D69460 | 96 | handle_quest_window_close_result | Handles quest window close/reset result. If type 0: resets quest system data and closes quest window if visible. If type 1: displays message 0xA49 in chat. |
| 0x00D694C0 | 97 | process_item_purchase_batch | Processes a batch of item purchase/removal notifications. Iterates through entries (5 bytes each: 4-byte ID + 1-byte type). Type 1: processes via CPacketSystem and highlights in item shop window (0x2712). Type 2: processes via CPacketManager handler. |
| 0x00D69530 | 227 | handle_storage_operation_result | Handles storage/cart operation results for types 'd' (storage) and 'e' (cart). Type 0: close window and reset. Types 1-3: unlock item window. Types 4/6/7: reset and close window. For 'e' type 4+, also closes window 0xAF. Displays error messages: 2=0xBA7, 3=0x7A2, 8=0x38. Special case 0xC8: closes all storage/cart/equipment windows and opens achievement window. |
| 0x00D69700 | 326 | handle_quest_complete_status_update | Handles quest completion status update. Looks up quest by ID in the appropriate tree (type 0=active, 1=complete, 2=failed). If found and not the sentinel node, marks it as completed (offset 0x1A8=1). Decrements active quest counter and notifies party window (0x133) if counter reaches zero. Refreshes quest achievement display. |
| 0x00D69850 | 26 | display_refine_result_message | Displays refine operation result messages. Code 0: success in yellow (0xFFFF00), message 0xDEE. Codes 1-4: failure messages 0xDEA-0xDED in red (0xFF). |
| 0x00D698F0 | 1 | packet_handler_noop_00d698f0 | Packet handler noop 00d698f0 |
| 0x00D69900 | 33 | handle_roulette_spin_result | Handles roulette spin result. Types 0 and 3 (spin result): updates roulette state with item position, stores currency values, sets item from tree, and starts spin animation with calculated position offsets. Types 1/2/4/5 (errors): display messages 0xA4A, 0xA4B, 0xA85, 0xA8C respectively and set window dirty flag. |
| 0x00D69A90 | 969 | handle_vending_shop_list_packet | Handles vending shop item list packet. Parses 0x5B-byte shop entries containing item ID, price, type flag, seller names (2x 24-byte strings), card slots, refine level, and option data. Creates CShopItem objects for each entry and collects them in a vector. Calls FUN_00d5a4c0 with the shop type (0=buy, 1=sell) and collected items for display. |
| 0x00D69E60 | 342 | handle_grade_enchant_result | Handles grade enchant operation result. Hides refine window left panel. Type 0 (success): displays message 0xA1C, updates enchant data, modifies quest grade value by -4. Types 1/2 (errors): display messages 0xA1D/0xA1E. Refreshes refine window (event 0x17) and quest display. |
| 0x00D69FC0 | 55 | display_reform_result_message | Displays reform/modification result messages. Type 0: formats message 0xFAD with param_2 (count) in yellow (0xFFFF00). Types 1-5: display messages 0xFAE-0xFB2 in red (0xFF) for various error conditions. |
| 0x00D6A0D0 | 2114 | handle_quest_list_full_update_packet | Handles a full quest list update packet with multiple quest entries. Stores quest type at DAT_01456e6c+0x10 and loaded flag at +0x1C. Iterates through variable-length entries (each 0x2C+ bytes with optional description string). Creates quest nodes in appropriate red-black trees (type 0/1/2 at offsets 0x20/0x28/0x30). Checks auto-tracking permission and time expiry for each quest. Refreshes quest achievement trees and reform window when complete. |
| 0x00D6A920 | 207 | handle_enchant_slot_result | Handles enchant slot operation result. Type 0 (success): displays message 0x87B and refreshes enchant window (0xE3) with slot values. Types 1/2 (errors): display messages 0x87C/0x87D. All cases close the current window. |
| 0x00D6A9F0 | 99 | CGameMode__handle_refine_confirm_dialog | Handles refine confirmation dialog. Type 0: gets item name, formats with message 0xDE9 showing item and cost details, shows Yes/No dialog. If Yes (0xBB), sends command 0x137; otherwise sends 0x138. Types 1-4: display refine failure messages 0xDEA-0xDED. |
| 0x00D6AB60 | 379 | handle_roulette_init_result | Handles roulette initialization/open result. Type 0 (success): stores initial values, sets up item position and starts display. If auto-spin mode is off, sends packet 0xA1B; otherwise opens roulette window (0x10D). Type 1 (error): displays message 0xA48. |
| 0x00D6ACE0 | 121 | handle_pet_evolution_result | Handles pet evolution result. If success flag (offset 0x1A==1): initializes pet system data, opens pet window (0x108), and updates search label with packet data from offset+2. If failure: displays message 0xA2C. |
| 0x00D6AD60 | 61 | handle_palette_list_for_preview | Handles palette list for character preview window. If count > 0 and window 0x11E exists, iterates through palette IDs (4 bytes each) and builds palette paths via CCharRenderInfo__build_palette_path. |
| 0x00D6ADA0 | 206 | handle_captcha_verification_result | Handles CAPTCHA verification result. Type 0 (show captcha): opens/finds captcha window (0x120), compares stored key with new key, reloads head sprite if changed, and sets direction. Type 1 (wrong captcha): displays "wrong captcha ID" error message. |
| 0x00D6AE70 | 48 | handle_mail_attachment_result | Handles mail attachment operation result. Type 0: checks if mail queue has pending items, if so sets reply timer to 0xBC. Types 1-5: display error messages via vtable event 0x9A with message IDs 0xB09, 0xD05, 0xD04, 0xD03, 0xD18. Type 5 also shows message 0x783 in chat. |
| 0x00D6B010 | 81 | handle_macro_detect_window_close | Handles macro detection window close. If param_1==0, closes window 0x12E if it exists. Otherwise, calls stub_00605bb0 on window 0x122 if it exists. |
| 0x00D6B070 | 163 | handle_macro_detect_result | Handles macro detection verification result. If param_1!=0, calls stub_00602ac0(0) on window 0x122. If param_1==0, closes window 0x122. For types 5 and 7, displays message 0xB51 via vtable event 0x6F on window 0x122. |
| 0x00D6B120 | 1173 | handle_refine_ui_item_list_packet | Handles refine UI item list packet. Stores quest type and other values from the packet into global quest data structure. Looks up quest node by ID, updates status flags, decrements active quest counter if needed. For each item entry (0x3C bytes each, up to param+0x17 entries), parses full item data (cards, refine, options, grade) and creates CShopItem objects via FUN_00e07a10. Opens/refreshes refine window. |
| 0x00D6B5C0 | 413 | handle_stove_purchase_result | Handles Stove (item store) purchase result. Checks DAT_01737f4a flag first. Case 0: gets item name, formats purchase message. Case 1: formats error message. Case 2: validates/executes format pipeline for window 0x13E. Cases 3/4: display message 0xBCE. Cases 5/6/7: display generic error. Default: formats "Unknown Error (Stove: %d)". Shows dialog box if message was generated. |
| 0x00D6B8F0 | 90 | handle_market_item_purchase_result | Handles market/shop item purchase result. Type 1 (success): processes item purchase with index and count, updates DAT_01738778 with remaining quantity. Otherwise (failure): displays error message 0xA2A in cyan chat. |
| 0x00D6B950 | 110 | handle_enchant_grade_operation_result | Handles enchant/grade operation result with multiple outcome codes. Case 0: message 0xFE4. Case 1: formats message 0xFE5 with item name, plays skill effect 0x29. Case 2-6: messages 0xFE6-0xFE9, 0x1000. Case 7: message 4000. All displayed as cyan (0x64FFFF) chat messages. |
| 0x00D6E0B0 | 70 | handle_achievement_notification | Handles an achievement notification. If param_1 is 0, displays a chat message with message ID 0xA37 in green color (0x64FFFF). If param_1 is non-zero and the achievement window exists, calls ShowAchievementDetail to display it. |
| 0x00D78030 | 1 | packet_handler_stub_00d78030 | Packet handler stub 00d78030 |
| 0x00D7AEB0 | 1 | packet_handler_stub_00d7aeb0 | Packet handler stub 00d7aeb0 |
| 0x00D7AEE0 | 1 | packet_handler_stub_00d7aee0 | Packet handler stub 00d7aee0 |
| 0x00D7AF10 | 1 | packet_handler_stub_00d7af10 | Packet handler stub 00d7af10 |
| 0x00D7AF40 | 1 | packet_handler_stub_00d7af40 | Packet handler stub 00d7af40 |
| 0x00D7B350 | 1 | packet_handler_stub_00d7b350 | Packet handler stub 00d7b350 |
| 0x00D7B640 | 1 | packet_handler_stub_00d7b640 | Packet handler stub 00d7b640 |
| 0x00D7CB7B | 24 | CLightEffect__init_default_timing | Initializes CLightEffect with default timing: mode=0x60, fade-in=1, hold=2, fade-out=0x60, repeat=2, intensity=1. |
| 0x00D83491 | 4 | thunk_to_virtual_method_0x40_00d83491 | Calls virtual method at offset 0x40 with parameters (0, 0xe, 0) |
| 0x00D89CA0 | 1 | packet_handler_stub_00d89ca0 | Packet handler stub 00d89ca0 |
| 0x00D8A8F0 | 22 | thunk_STL_destroy_range_0x100_with_strings | Thunk that forwards to STL_destroy_range_0x100_with_strings with reordered parameters (this, begin, end). |
| 0x00D8A910 | 1 | packet_handler_stub_00d8a910 | Packet handler stub 00d8a910 |
| 0x00D8AD40 | 128 | CShopItemList__insert_0x100 | Inserts element into shop item list (0x100-byte elements). Saves old state, creates copy via FUN_00d8b0f0, copies existing range via CShopItemList__copy_range_0x100_void, then reassigns vector with new data. |
| 0x00D8ADF0 | 144 | CShopItemList__insert_0xf8 | Inserts element into shop item list (0xF8-byte elements). Saves old state, creates copy via FUN_00d8b150, copies range via stub_005e4770, then reassigns vector with new data. |
| 0x00D8AEB0 | 176 | CShopItemList__copy_range_0x100 | Copies range of 0x100-byte shop items. Iterates from param_2 to param_3, copy-constructing each CShopItem and copying the 0xF8 flag byte. Returns end pointer. |
| 0x00D8AFA0 | 174 | CShopItemList__copy_range_0x100_void | Same as CShopItemList__copy_range_0x100 but returns void. Copies range of 0x100-byte shop items via CShopItem__copy_construct, then calls destructor for remaining range. |
| 0x00D8B4C0 | 28 | get_refine_effect_id | Maps refine level (1-5) to effect ID: 1->0x4A3, 2->0x4A4, 3->0x4A5, 4->0x4A6, 5->0x4A7. Returns -1 for invalid levels. |
| 0x00D8B530 | 30 | get_refine_effect_id_alt | Alternate refine effect ID mapping. Maps level 1-5 to: 1->0x74D, 2->0x4A5, 3->0x4A6, 4->0x74E, 5->0x74F. Default (0) returns 0x9B5. Different IDs from primary map. |
| 0x00D8C0CB | 1 | packet_handler_stub_00d8c0cb | Packet handler stub 00d8c0cb |
| 0x00D8C174 | 1 | packet_handler_stub_00d8c174 | Packet handler stub 00d8c174 |
| 0x00D8CA50 | 252 | get_encrypted_string_table_0xbb20 | Thread-safe lazy init of encrypted string table at TLS offset 0xBB20 (0x4B bytes). Copies constant data from ROM addresses 011a4440/011a43c0/011a4450/011a4480 on first access. Registers cleanup via atexit callback FUN_010aed70. |
| 0x00D8CB50 | 268 | get_encrypted_string_table_0xb9b0 | Thread-safe lazy init of encrypted string table at TLS offset 0xB9B0 (0x67 bytes). Copies constant data from ROM addresses 011a4380/011a41b0/011a4200/etc on first access. Registers cleanup via atexit callback FUN_010af270. |
| 0x00D8D310 | 18 | thunk_CCharMode__handle_disconnect_reason | Thunk that forwards to CCharMode__handle_disconnect_reason with swapped parameters. |
| 0x00D8D790 | 459 | send_exe_md5_hash_packet | Computes MD5 hash of the client executable and sends it as packet 0x204. Only runs for service types 6 or (0 with sub-type 1). Reads entire EXE file in 1KB chunks, feeds to MD5. Hardcoded expected hashes per service type for validation. Uses fopen/fread/feof to read the file. |
| 0x00D8E0F0 | 224 | compute_exe_md5_hash | Computes MD5 hash of the running executable. Gets module filename, opens file, reads in 1KB chunks feeding to MD5 update. Stores final 16-byte hash in param_1. Returns 1 on success, 0 if file cannot be opened. |
| 0x00D8E1D0 | 256 | get_service_type_code | Maps service type globals (DAT_016d3b10 and DAT_016d3b14) to internal service type codes (1-0x24). Three-way dispatch: sub-type 1 (iRO variants), sub-type 5 (kRO variants), and default. Returns 0 for unknown combinations. |
| 0x00D8E3A0 | 851 | get_mac_address_string | Gets MAC address of first network adapter as formatted string. Uses GetAdaptersInfo Win32 API. Reads 6-byte MAC from adapter info offset 0x194. Formats using XOR-encrypted format string (decrypted at runtime). Falls back to encrypted default string if no adapters found. Returns result as STL string in param_1. |
| 0x00D8E770 | 112 | get_message_for_damage_range | Selects damage range message based on damage value. Thresholds: <1001, <3001, <6001, <10001, else. Calls CMessageStringTable__get_message_text with different message IDs for each range. |
| 0x00D8F9B0 | 67 | send_ping_packets | Sends multiple ping packets (0x9A1) to server. Sends param_1+2 count of packets in a loop via CNetworkSession__send_data_timed. |
| 0x00D97F10 | 294 | open_registration_url | Opens registration URL via ShellExecuteA. Uses XOR-encrypted 'open' verb and different encrypted URLs based on service type. Type 0: uses msg 0x51C or 0x210 for URL. Type 1: Stove URL. Type 3: service-specific URL. Default: generic registration URL. |
| 0x00D9A240 | 269 | show_encrypted_error_messagebox | Shows error MessageBox with XOR-encrypted error string (0x19 bytes, TLS offset 0xBBC0). Decrypted at first call, displayed via show_error_messagebox. |
| 0x00D9CDC0 | 130 | send_udp_packet | Sends a UDP packet to specified host:port. Creates UDP socket, resolves hostname via gethostbyname, sends data via sendto, closes socket. Returns immediately if socket creation or DNS fails. |
| 0x00D9CEF0 | 181 | generate_random_hex_token | Generates random hex token string. Uses timeGetTime XOR with shifted timeGetTime as seed. Converts to hex via _ltoa (base 16). Pads/truncates to param_2 chars (default 4). Fills output buffer in reverse order, null-terminates. |
| 0x00D9CFB0 | 22 | set_visibility_flag_and_return_true | Sets map visibility flag (bit 0 of param) via set_map_visibility_flag on the global game object, always returns 1 (true). Likely a message handler callback. |
| 0x00D9CFD0 | 1880 | CGameMode__handle_web_auth_token_response | Handles web auth token response. Switch on error code: 0=success (copy 500-byte token, go to login), 400=show loading window, 500=msg 0x6D8, 600=msg 7, 700=msg 0xCB4, 900=open browser via ShellExecuteA (decrypts URL/verb/params), 1200=msg 0x1103. Shows error dialog with status code. |
| 0x00D9D730 | 1301 | CGameMode__handle_web_auth_token_response_v2 | V2 of web auth token response handler. Same as 00d9cfd0 but adds error code 800 (msg 0xD70) and different dialog box formatting for code 800 vs others. |
| 0x00D9DC50 | 875 | CGameMode__handle_map_connect_response | Handles map connect response. Syncs server tick, sets position from packed bytes, formats RSW map name, opens loading window, shows msg 0x79, logs to PingLog.txt if enabled, clears ping data, initializes 0x44 character name entries from param_1+0x40D4. |
| 0x00D9DFC0 | 424 | CGameMode__handle_map_connect_response_simple | Simple map connect response. Same core logic as full version: syncs tick, sets position, opens loading screen, logs to PingLog.txt. Does not initialize character names. |
| 0x00D9E500 | 107 | CGameMode__clamp_param_to_entity_max | Clamps a parameter value to entity's max. Finds entity by ID via CBGMManager, gets max from virtual method 0xB4, returns min of param_2 and that max. |
| 0x00D9E570 | 28 | CGameMode__close_lua_state | Closes Lua state. If param_1+4 has a valid lua_State, calls lua_close and zeroes the pointer. |
| 0x00D9E590 | 255 | CHomunculus__load_ai_lua_script | Loads AI Lua script. Closes existing lua state, creates new one, opens standard libs, registers AI functions, loads and executes the script. Shows MessageBox on error. |
| 0x00D9E690 | 502 | CHomunculus__tick_ai_update | AI tick update. Checks entity state, handles timed actions (0x30/0x38 commands). Calls Lua AI_M function every ~140ms with tick count. Shows error and closes lua state on failure. |
| 0x00D9E890 | 538 | CHomunculus__register_ai_lua_functions | Registers AI Lua callback functions: GetActors, Trace, GetTick, SkillGround, IsMonster, TraceAI, MoveToOwner, Move, GetMsg, GetResMsg, SkillObject, Attack (homunculus or mercenary variant), TraceValue. |
| 0x00D9EAB0 | 57 | CHomunculus__set_lua_enemy_target | Sets Lua enemy target variable (MyEnumy) for AI. Pushes target entity ID as number to Lua global. |
| 0x00DA7A90 | 65 | seh_tree_destroy_1c_wrapper | SEH wrapper that calls std__tree_destroy_all_nodes_1c to destroy a red-black tree with 0x1c-byte nodes. |
| 0x00DA7CA0 | 128 | skill_map_container_dtor | Destructor for a container holding three STL map trees. Destroys them in reverse construction order. |
| 0x00DA8230 | 255 | apply_skill_effect_scale_offset | Applies scale offsets to skill effect rendering based on part type (2=body, 3=head, 4=accessory). Adjusts x/y coordinates stored at param_2+0x10/0x14 using global offset constants. Different offsets are used based on a resolution/DPI threshold check. |
| 0x00DAA5F0 | 20 | is_param_one | Simple predicate: returns 1 if param_1 equals 1, otherwise returns 0. |
| 0x00DAAB00 | 150 | calc_direction_from_delta | Calculates the RO 8-direction index from coordinate deltas. Uses two switch tables based on (param_4 - param_3) modulo and (8 - param_2) to return a direction 0-8, or calls CSkillTreeData__find_entry_index for cases 0/1. |
| 0x00DAB460 | 575 | calc_dual_wield_render_priority | Calculates render priority for dual-wielded items. Returns priority codes (0-6, 0x19-0x1e) based on item ID ranges: 1100-1149/13400-13499/500000-509999 (one-handed swords), 1200-1249/13000-13099/29000-29219/510000-519999 (two-handed weapons), 1300-1349/520000-529999 (daggers). Priority varies based on which hand holds which weapon type. |
| 0x00DAB6A0 | 32 | is_action_in_extended_range | Returns 1 if the action ID is in the extended range (0x28-0x5f exclusive of 0x20-0x27), indicating a non-standard body animation. Returns 0 otherwise. |
| 0x00DB51E0 | 47 | angle_to_8_direction | Converts a floating-point angle to one of 8 RO directions (0-7). Adds 180, divides by 45, takes modulo 8. |
| 0x00DB5210 | 14 | is_action_0x4b | Returns true if the action is 0x4b (a specific special action). |
| 0x00DB52B0 | 40 | is_idle_or_sitting_action | Returns 1 if the action type is an idle, sitting, or special emote action (2, 5, 6, 0x3e-0x50). Used to determine if the entity should be in a static pose. |
| 0x00DBA6D0 | 209 | CNamedEntryList__copy_construct | Copy constructs a named entry list. Copies string via STL_string_copy_construct, then allocates and copies array of 0x18-byte entries from source param_3 range [begin, end). Uses CPacketQueue operation for bulk element copy. |
| 0x00DBA7B0 | 158 | CNamedEntryList__move_assign_a | Move-assigns a named entry list (variant A). Destroys old string, moves string fields (with SSO handling), then moves vector of entries via json__internal_0051dab0. Nulls source after move. |
| 0x00DBA860 | 158 | CNamedEntryList__move_assign_b | Move-assigns a named entry list (variant B). Same pattern as variant A but uses CFmt__func_0058c230 for vector move. Destroys old string, moves string/vector fields, nulls source. |
| 0x00DC2B20 | 7259 | game_init_global_managers | Initializes global game managers and singletons. 7.2K bytes. Constructs CSkillMgr, CryptoManager, CReportStorage, CShopManager, CMapInfoMgr, CSpecialPopupMgr, ItemDisplayTree, regex parser. Sets up packet parsers/buffers, allocates RB trees and hash buckets. No callers (static initializer). |
| 0x00DC61D0 | 3250 | CGameMode__dtor | CGameMode destructor. Massive cleanup: destroys singletons (CChangeMaterialMgr, CUserHotKeyStore, CReportStorage, CShopManager, CPetEvolutionMgr, CAchievementMgr, CPrivateAirplaneMgr, CCheckAttendanceMgr, CTreeMap, CSpecialPopupMgr, CRuneSystemMgr), closes Lua state, destroys hash tables, rb-trees, vectors, XML nodes, CHashTable instances, CItemList linked lists, and CSkillMgr. |
| 0x00DD7E10 | 307 | equip_location_to_slot_indices | Converts equip location bitmask (e.g. 0x8000=accessory) to internal slot indices. Maps RO equip location constants to internal bit positions, then calls bitmask_to_3slot_indices to get up to 3 slot indices. 0x8000->slot 0xF, 0x100000->slot 8, etc. |
| 0x00DD7F50 | 176 | scale_rect_to_resolution | Scales a rectangle (x, y, width, height) to the current screen resolution. Uses global resolution scale factors from DAT_011a9880/DAT_011a9874. Adds 17-pixel offset to Y coordinates for the title bar. |
| 0x00DD85A0 | 11 | clear_bit6_flag | Clears bit 6 (0x40) from the flag at param_1. Simple bitwise AND with 0xFFFFFFBF. |
| 0x00DD91C0 | 594 | fuzzy_string_compare_il_tolerant | Fuzzy string comparison treating 'I' and 'l' as equivalent (anti-impersonation). Compares param_1 and param_2 with multiple strategies: offset +2, offset +1, and direct comparison. Tolerates length differences up to 4 chars. Returns 0 if strings match (similar enough), 1 if different. Used to detect name spoofing attempts where uppercase I and lowercase L are swapped. |
| 0x00DD9CC0 | 103 | set_item_category_from_type | Maps an item type ID (1-6) to a category number (2-7). Only sets the category if *param_1 is currently 0 (unset). Type 1->cat 2, type 2->cat 3, ..., type 6->cat 7. Any other type or type 0 maps to category 1. |
| 0x00DD9D50 | 1811 | game_load_all_lua_configs_and_fonts | Master initialization function that loads all Lua configurations and system fonts. Calls: CItemInfoMgr__load_lua_config, CSpecialPopupMgr__load_lua_script, CRuneSystemMgr__load_lua_tables, CTipBox__load_script_data, CMapInfoMgr__load_lua_scripts, GameSettings__init_from_lua. Shows XOR-encrypted MessageBox error dialogs if any Lua load fails. Also initializes font system with Korean fonts (RixSquirrel, RixLoveangel, etc.), seeds random number generator, and creates GameSettings singleton. |
| 0x00DDB4D0 | 108 | validate_numeric_string_00ddb4d0 | Validates that a string contains only digits and spaces. Removes commas by shifting subsequent characters left. Returns 1 if valid (only digits/spaces after comma removal), 0 if any invalid character found. |
| 0x00DDB7E0 | 316 | set_global_version_string_trimmed | Sets a lazily-initialized global version string (DAT_0173A7CC). Copies param_1 into the string. If the string exceeds 4 chars, trims to keep only the last 3 chars plus a separator. Returns pointer to the string buffer. |
| 0x00DDBA70 | 104 | build_sprite_resource_path_type0 | Wrapper for build_sprite_resource_path with type=0. Constructs a sprite file path string for the given parameters. |
| 0x00DDBAE0 | 104 | build_sprite_resource_path_type1 | Wrapper for build_sprite_resource_path with type=1. Constructs a sprite file path string for the given parameters. |
| 0x00DDC0F0 | 195 | get_random_hit_sound_by_element | Returns a random hit sound filename based on element type. Element 3 (fire): randomly picks 'enemy_hit_fire1.wav' or 'fire2'. Element 4 (wind): randomly picks 'enemy_hit_wind1.wav' or 'wind2'. Default: randomly picks from 4 normal hit sounds ('enemy_hit_normal1-4.wav'). |
| 0x00DDC1D0 | 108 | build_body_sprite_path_wrapper | Wrapper for build_body_sprite_path. Passes all 7 parameters through to construct a body sprite file path string. |
| 0x00DDC2C0 | 105 | build_head_sprite_path_wrapper | Wrapper for build_head_sprite_path. Passes all 6 parameters through to construct a head sprite file path string. |
| 0x00DDC670 | 121 | get_system_time_as_milliseconds | Gets the current system time and converts it to a single millisecond value. Combines year, month, day, hour, minute, second, and millisecond fields from SYSTEMTIME into a single integer. Note: the formula uses approximate constants for year/month conversion. |
| 0x00DDCD50 | 101 | build_weapon_sprite_path_wrapper | Wrapper that calls build_weapon_sprite_path with type=0 and forwarded parameters. |
| 0x00DDCE40 | 51 | convert_weapon_type_to_sprite_index | Converts weapon type and subtype parameters into a sprite index (1-6). Uses a switch on param_1 for types 2-7, or on param_2 for types 1-6 when param_1==0. |
| 0x00DDCEF0 | 102 | build_shield_sprite_path_wrapper | Wrapper that forwards all 5 params to build_shield_sprite_path and returns the result string. |
| 0x00DDCFE0 | 101 | build_weapon_sprite_path_type1_wrapper | Wrapper that calls build_weapon_sprite_path with type=1 (secondary weapon) and forwarded parameters. |
| 0x00DDD190 | 102 | build_imf_resource_path_wrapper | Wrapper that forwards all 5 params to build_imf_resource_path and returns the result string. |
| 0x00DDD280 | 56 | get_item_desc_field_as_string | Converts item ID string to int, gets item description offset, then formats either field at +0x1C (if param_3==0) or +0x8 as a string via lua_util_sprintf. |
| 0x00DDD9F0 | 41 | get_item_desc_field_value | Gets a raw item description field value. Converts param_1 string to int ID, looks up CItemDesc, returns field at +0x8 if param_2!=0, else field at +0x1C. |
| 0x00DDDA20 | 683 | get_item_identified_name | Gets the identified/unidentified display name for an item. Initializes a thread-local static STL string with a prefix. Looks up CItemDesc by atoi(param_1), gets name field (+0x1C or +0x8 based on param_2). Falls back to hex string if name is NULL. |
| 0x00DDDCD0 | 777 | get_item_sprite_resource_name | Gets the sprite resource filename for an item. Initializes thread-local static string with prefix. Copies input name, appends extension, checks if resource exists via CResourceMgr. Falls back to longer default name (berserkpitcher) if not found. |
| 0x00DDE340 | 104 | build_head_palette_path_wrapper | Wrapper that calls build_head_palette_path with type=0 (head) and forwarded parameters. |
| 0x00DDE6B0 | 104 | build_body_palette_path_wrapper | Wrapper that calls build_head_palette_path with type=1 (body) and forwarded parameters. |
| 0x00DDFB50 | 181 | get_sprite_scale_for_job_class | Returns a sprite scale factor (float) based on job class ID and weapon type. Handles special scales for doram (class 0xFAD), mechanic/madogear, summoner, and other classes. Uses param_3 for weapon sub-type checks on certain class ranges. |
| 0x00DDFFE0 | 166 | get_element_color_by_type | Returns an ARGB color value for a given element type index (0-15). Maps game element types to display colors: 0=brown, 1=teal, 2=black, 3/15=red, 4=green, 5=olive, etc. |
| 0x00DE0C50 | 104 | build_effect_resource_path_type0_wrapper | Wrapper that calls CEffect__build_resource_path_with_fallback with type=0 and forwarded parameters. |
| 0x00DE0CC0 | 104 | build_effect_resource_path_type1_wrapper | Wrapper that calls CEffect__build_resource_path_with_fallback with type=1 and forwarded parameters. |
| 0x00DE0E20 | 26 | format_int_as_string | Formats an integer (param_1) as a string using lua_util_sprintf with %d format into param_2 buffer. |
| 0x00DE3CE0 | 161 | string_contains_control_chars | Checks if a string contains control characters (ASCII < 0x20, 0x7F, 0x81, 0x8D, 0x8F, 0x90, 0x9D, 0xAD). Returns 1 if any found, 0 if clean. Only checks bytes with high bit clear (ASCII range). |
| 0x00DE53C0 | 608 | load_exception_minimap_name_table | Loads ExceptionMinimapNameTable.txt via CSVParser. Clears existing vector at this+0x52d0, pre-reserves 0x200 entries, then parses each line (skipping first char) into STL strings and pushes them into the vector. Finally sorts the vector using introsort. Returns success/failure from the file load. |
| 0x00DE5620 | 1306 | load_fog_parameter_table | Loads fogParameterTable.txt via CFileStream. Parses #-delimited lines with 3 fields each into named entries (CNamedEntryList). Stores entries in vector at this+0x5230, sorts them alphabetically. Returns 1 on success, 0 on failure. Used for map fog rendering parameters. |
| 0x00DE5BD0 | 3086 | init_footstep_sound_table | Initializes the footstep sound table at this+0x5268. Creates a vector of 0x6d95 entries, all defaulting to "player_clothes.wav", then overwrites specific job class indices with "player_wooden_male.wav" (wooden/heavy armor) or "player_metal.wav" (metal armor) footstep sounds. The sound played depends on the character's job class. |
| 0x00DE67E0 | 2680 | init_job_name_tables | Initializes PC job name tables, homunculus names, and mercenary names. Creates vector of 0x7d04 entries at this+0xFA8 defaulting to "Poring". Iterates over all valid job IDs calling Lua functions ReqPCJobName, ReqPCJobNameMan, ReqPCJobNameWoman to populate names. Also hardcodes homunculus names (LIF, AMISTR, FILIR, VANILMIRTH + evolved forms) and mercenary names (MER_EIRA, MER_BAYERI, MER_DIETER, MER_ELEANOR, MER_SERA). Initializes pet, elemental, and other lookup tables. |
| 0x00DE7260 | 48 | reload_all_data_tables | Reloads all data tables: message string table, manner keywords, pet/monster XML tables, encrypted table, item DB tables, and calls a final null stub. |
| 0x00DE9430 | 659 | load_mini_party_info_from_lua_save | Loads mini party info from savedata/MiniPartyInfo.lua file. Parses comma-separated { name, id, x, y } records. Uses XOR decryption on field names. Pushes parsed entries into a linked list via list_push_back_0x14. |
| 0x00DF8150 | 1306 | load_viewpoint_table | Loads ViewPointTable.txt via CFileStream. Parses #-delimited lines with 8 fields per entry into named entries. Stores entries in vector at this+0x523C, sorted alphabetically. Returns 1 on success, 0 on failure. Controls camera viewpoint parameters per map. |
| 0x00DF8670 | 567 | init_weapon_hit_sound_table | Initializes weapon hit sound effect table at this+0x5274. Iterates through weapon types (up to ~111 entries), calling Lua function "ReqWeaponHitWaveName" for each weapon index. Stores non-empty results as STL strings in the vector. Used to determine which .wav file plays when a weapon hits a target. |
| 0x00DF8C40 | 1971 | init_job_sprite_name_table | Initializes the job-to-sprite-name lookup table at this+0xFD8. Creates a vector of 0x110A entries defaulting to "NOVICE", then hardcodes sprite folder names for every job class. Covers all classes: 1st/2nd/trans/3rd/4th jobs, mounts (CHICKEN=Peco, WOLF, FOX, OSTRICH, PIG, SHEEP, DOG, LION, HAETAE), special costumes (MARRIED, SANTA, SUMMER, HANBOK, OKTOBERFEST), homunculus-like jobs (SUMMONER), and all 4th jobs (DRAGON_KNIGHT, IMPERIAL_GUARD, MEISTER, BIOLO, etc.). |
| 0x00DF9460 | 44 | refresh_minimap_display | Refreshes the minimap window if game mode is active and DAT_01457A40 is valid. Calls the window's refresh vtable method and invalidates effects. |
| 0x00DF9490 | 54 | refresh_shop_window_and_timer | Refreshes the shop window and timer. Calls an initialization function, then updates the shop timer window (DAT_01457944) with 60-second timer, and triggers shop tab switch if shop window exists. |
| 0x00DF94D0 | 44 | refresh_navigation_display | Refreshes the navigation window if game mode is active and DAT_01457A48 is valid. Calls the window's refresh vtable method and invalidates effects. |
| 0x00DF9500 | 10 | thunk_to_CGameObject__invalidate_visible_windows_once_00df9500 | Wrapper that calls FUN_00a969d0 and returns |
| 0x00DF9520 | 50 | string_has_leading_or_trailing_space | Checks if a string has a leading or trailing space, or is empty. Returns 1 if any condition is true, 0 if the string is clean. |
| 0x00DF9560 | 300 | check_name_against_forbidden_list | Checks a name string against the global forbidden name list (DAT_016D44DC). Creates a temporary copy of the list, iterates through entries comparing each against the input. Returns 1 if forbidden, 0 if allowed. Cleans up list nodes after check. |
| 0x00DF9880 | 13 | extract_item_flag_bit2 | Extracts bit 2 from the input value, returning it as a boolean (0 or 1). |
| 0x00DF9890 | 21 | compare_item_flag_bit2 | XORs bit 2 of two values and returns the result as a boolean (0 or 1). |
| 0x00DF98B0 | 13 | extract_item_flag_bit22 | Extracts bit 22 from the input value, returning it as a boolean (0 or 1). |
| 0x00DF98C0 | 21 | compare_item_flag_bit22 | XORs bit 22 of two values and returns the result as a boolean (0 or 1). |
| 0x00DF98E0 | 13 | extract_item_flag_bit12 | Extracts bit 12 from the input value, returning it as a boolean (0 or 1). |
| 0x00DF98F0 | 12 | item_flag_is_zero | Returns true if param is zero. Used as an item property check (tests if the flag value is unset/default). |
| 0x00DF9AA0 | 28 | check_all_paired_slots_empty_at_0x1788 | Iterates 11 paired entries (stride 8) starting at this+0x1788. Returns false (0) if any entry's first dword is non-zero. Returns true (1) if all 11 entries are zero (all slots empty). |
| 0x00DF9B90 | 141 | check_all_10_slots_filled | Checks if all 10 slots (at offsets 0x3ec0..0x4778, stride 0xF8) in the object are non-null. Returns true only when all 10 entries are populated. |
| 0x00DF9C20 | 41 | find_in_linked_list_at_0x1758 | Searches a linked list rooted at this+0x1758 for a node whose 4th dword matches param_2. Returns true if found, false if end of list reached. |
| 0x00DF9C50 | 41 | find_in_linked_list_at_0x1718 | Searches a linked list rooted at this+0x1718 for a node whose 4th dword matches param_2. Returns true if found, false if end of list reached. |
| 0x00DF9C80 | 49 | find_slot_by_id_in_array | Searches an array of 10 structures (stride 0xF8) starting at this+0x3EB4 for an entry whose first field matches param_2 and whose 4th field is non-zero. Returns true if found. |
| 0x00DF9CD0 | 85 | find_string_id_in_list_0x17d4 | Iterates a linked list at this+0x17D4. Each node has an STL string at offset 0x34 which is converted to int via atoi(). Returns 1 if any node's string value matches param_2. |
| 0x00DF9D30 | 96 | find_string_in_list_0x17e4 | Iterates a linked list at this+0x17E4 comparing each node's STL string (at offset 0x14) against param_2 using std::_Traits_equal. Returns 1 if a match is found. |
| 0x00DF9D90 | 383 | check_map_name_in_global_list | Copies global list DAT_016d44dc into a temp list, searches for param_1 (a string) by comparing node strings. If not found in nodes, compares against the global string at DAT_016d4418. Returns 1 if match found. Cleans up temp list. |
| 0x00DF9F10 | 281 | check_id_in_global_list_field2 | Copies global list DAT_016d44dc into a temp list, searches for param_1 by comparing against each node's 3rd dword (offset 8). Returns 1 if found, 0 if not. Cleans up temp list. |
| 0x00DFA030 | 281 | check_id_in_global_list_field3 | Copies global list DAT_016d44dc into a temp list, searches for param_1 by comparing against each node's 4th dword (offset 0xC). Returns 1 if found, 0 if not. Cleans up temp list. |
| 0x00DFA160 | 531 | check_map_name_in_sorted_vector | Takes a map filename string, strips a 3-char extension (e.g. ".gat") via rfind, then binary searches a sorted vector of C-strings at this+0x5248 to check if the stripped name exists. Returns 1 if found. |
| 0x00DFA390 | 42 | check_value_in_vector_and_type_7 | Checks if a value exists in vector at this+0x1604 and param_2 equals 7. Returns 1 if both conditions met. |
| 0x00DFA3C0 | 84 | find_id_in_string_list_0x1740 | Iterates linked list at this+0x1740, converting each node's STL string (at offset 0x34) to int via atoi. Returns true if any node's value matches param_2. |
| 0x00DFA420 | 156 | find_string_in_vector_0x809c | Searches a vector of STL strings at this+0x809C (stride 0x18) for a match against param_2 using std::_Traits_equal. Returns 1 if found, 0 otherwise. |
| 0x00DFA4C0 | 313 | check_npc_or_map_name_valid | Checks if param_2 matches: (1) the decrypted packet data string, (2) any string in list at this+0x17E4, (3) a known NPC name via CTownInfoMgr__find_npc_id_by_name, or (4) a substring from global DAT_01360D78. Returns 1 if any match. |
| 0x00DFA600 | 42 | is_valid_npc_or_mob_id | Returns 1 if param_1 is in range [45..999] or [10001..10014]. These correspond to valid NPC/monster sprite ID ranges. Returns 0 otherwise. |
| 0x00DFA630 | 55 | is_pure_ascii_string | Checks if all bytes in the null-terminated string param_1 are < 0x80 (pure ASCII). Returns 1 if all ASCII, 0 if any high byte found. |
| 0x00DFA670 | 408 | check_char_name_not_in_blacklist | Gets the character name at this+0x160C and the thread-local char name, then checks if it matches any STL string in the vector at this+0x52D0. Returns 0 if found (blacklisted), 1 if not found (allowed). |
| 0x00DFA810 | 38 | can_interact_with_ui | Returns 1 if: DAT_014578D0 is 0 (no modal state), no drag is active (CGameObject__has_any_drag_active), and DAT_01457864 is 0. Otherwise returns 0. |
| 0x00DFA8D0 | 233 | get_skill_usable_level | Large switch table mapping skill IDs (param_1) and level/type values (param_2) to whether the skill is usable at that level. Returns 1 if usable, 0 if not. Covers job class skill IDs 0-0x19 and extended IDs 0xFA1+. |
| 0x00DFAC70 | 1053 | get_skill_slot_index | Maps a skill ID (param_1) and slot number (param_2) to a slot index via jump tables. Validates param_2 is in range for the given skill class. Uses indirect jump tables for different skill groups. param_3 is used as a validation flag. Returns 0 if invalid, 1 if valid. |
| 0x00DFB490 | 24 | is_special_mode_active | Returns 1 if DAT_0138963C is non-zero and DAT_01389640 equals 2 (special mode type). Returns 0 otherwise. |
| 0x00DFB4B0 | 301 | validate_skill_slot_position | Validates a skill slot position for a given skill ID. param_1=skill ID, param_2=some type, param_3=slot, param_4=extra. For certain skill IDs (0xC group), calls FUN_00e248f0 to adjust the slot. Otherwise calls FUN_00e19530. Then dispatches through jump tables based on skill class to validate the slot. |
| 0x00DFB9D0 | 226 | check_list_items_level_valid | Iterates the linked list at this+0x1730. For each node, calls FUN_00ddd5a0 to get item info. Returns 0 if any node's data is invalid (local_108==0) or the node's field at offset 0x18 exceeds the item's level field. Returns 1 if all pass. |
| 0x00DFBAC0 | 54 | is_valid_job_class_id | Returns 1 if param_1 is in range [0xFA1..0xFB6] (base job classes) or matches specific extended job IDs (0x1016, 0x1019, etc. - 4th jobs and special classes). Returns 0 for invalid IDs. |
| 0x00DFBB60 | 62 | is_valid_job_class_id_extended | Like is_valid_job_class_id but also accepts base classes [1..20] in addition to [0xFA1..0xFB6] and the same extended job IDs. Returns 1 if valid. |
| 0x00DFBC00 | 57 | is_valid_expanded_class_id | Returns 1 if param_1 is in range [0xFD6..0x1010] or matches specific IDs (0x1018, 0x101F, 0x1021, etc.) for expanded/rebirth/special job classes. Returns 0 for unrecognized IDs. |
| 0x00DFBCA0 | 56 | is_valid_4th_class_id | Returns 1 if param_1 is in range [0x109C..0x10CB] or [0x10CE..0x10E9] or equals 0x1103 or 0x1108 (4th job class IDs). Returns 0 otherwise. |
| 0x00DFBCE0 | 39 | is_valid_base_or_job_class | Returns 1 if param_1 is <= 30 (base novice through baby classes) or in range [0xFA1..0x116F] (all job class IDs). Returns 0 for out of range. |
| 0x00DFBD10 | 48 | find_int_in_vector_0x1778 | Linearly searches the int vector at this+0x1778 for param_2. Returns 1 if found, 0 if end reached. |
| 0x00DFBD40 | 78 | get_value_from_list_0x1748_by_id | Iterates linked list at this+0x1748. Each node has an STL string at offset 0x34 (converted to int via atoi). When a match for param_2 is found, returns the node's dword at offset 0x1C. Returns -1 if not found. |
| 0x00DFBD90 | 65 | find_item_in_slot_array_by_id | Returns 1 if param_2 matches this+0x16EC or if a slot in the 10-entry array (this+0x17F4, stride 0xF8) has its 4th field==1 and first field==param_2. Returns 0 otherwise. |
| 0x00DFBDE0 | 41 | find_in_linked_list_at_0x1710 | Searches linked list at this+0x1710 for a node whose 4th dword matches param_2. Returns true if found. |
| 0x00DFBE10 | 33 | is_non_special_sprite_id | Returns 0 if param_1 is 0x2D (45), 0x68 (104), or 0x6F (111) -- special sprite IDs. Returns 1 for all other values. |
| 0x00DFBE40 | 299 | check_item_id_in_shop_slots | Checks if param_2 (item ID) exists in the shop's item slots. First checks the linked list item via CShop__find_item_in_linked_list_by_slot. Then iterates 10 shop slots (stride 0xF8), checking two string fields per slot (at offsets 0x181C and 0x2B7C) via atoi. Returns 1 if found. |
| 0x00DFBF70 | 316 | check_item_id_in_shop_slots_with_level | Like check_item_id_in_shop_slots but also checks that param_3 (level) is <= the stored level field. Iterates 10 shop slots, comparing both item IDs and levels. |
| 0x00DFC0B0 | 51 | mark_list_0x1710_node_and_notify | Finds a node in linked list at this+0x1710 with 4th dword matching param_2, sets its byte at offset 0x7E to 1, then calls CUIWindowMgr__notify_language_change to refresh UI. |
| 0x00DFC0F0 | 51 | mark_list_0x1740_node_and_notify | Finds a node in linked list at this+0x1740 with 4th dword matching param_2, sets its byte at offset 0x7E to 1, then calls CUIWindowMgr__notify_language_change to refresh UI. |
| 0x00DFC130 | 51 | mark_list_0x1738_node_and_notify | Finds a node in linked list at this+0x1738 with 4th dword matching param_2, sets its byte at offset 0x7E to 1, then calls CUIWindowMgr__notify_language_change to refresh UI. |
| 0x00DFCD80 | 23 | get_vector_count_stride_0x18 | Returns the number of elements in a vector by computing (end - begin) / 0x18. Each element is 24 bytes. |
| 0x00DFCDA0 | 246 | load_shadow_cursor_sprite_resources | Loads sprite resources for shadow, cursors, and another pair via CResourceMgr. Increments reference counts. Temporarily sets DAT_0173a868/0173a86c to 0 while loading cursors, then restores them. |
| 0x00DFCEA0 | 438 | reload_shadow_cursor_sprite_resources | Reloads shadow, cursor, and other sprite resources. First loads and removes existing resources to force fresh load, then loads them again with reference count increments. Same temp-clear of DAT_0173a868/86c as load_shadow_cursor_sprite_resources. |
| 0x00DFE4E0 | 2645 | load_all_game_options_from_lua | Loads all game settings from OptionInfo.lua. Reads dozens of option values (ints, floats, strings) and stores them in the game object and global variables. Includes: camera angles, resolution, sound settings, render options, anti-cheat checks, game settings updates, and various boolean flags for UI options. |
| 0x00DFEF40 | 279 | push_sample_and_compute_average | Adds param_2 to a circular list at this+0xFE4 (max 4 elements). Removes oldest when full. Then computes the average of all elements and stores it at this+0x7A0. Used for frame time or FPS averaging. |
| 0x00DFF060 | 31 | notify_window_0x17_via_01457948 | If global window pointer DAT_01457948 is non-null, calls its virtual method at vtable+0x94 with event type 0x17 to refresh/notify it. |
| 0x00DFF080 | 31 | notify_window_0x17_via_01457974 | If global window pointer DAT_01457974 is non-null, calls its virtual method at vtable+0x94 with event type 0x17 to refresh/notify it. |
| 0x00DFF0A0 | 63 | notify_inventory_window_by_type | Selects a window pointer based on param_1: type 1 uses DAT_01457A90, type 2 uses DAT_01457AA0, default uses DAT_01457978. Sends event 0x17 to refresh it. |
| 0x00DFF0E0 | 49 | notify_equip_window_with_param | Selects window pointer DAT_01457A8C (if param_1 non-zero) or DAT_0145797C, then sends event 0x17 with param_2 as extra data. |
| 0x00DFF120 | 39 | update_option_state_0x1708 | Reads game settings option 0x2E or 0x2D (depending on param_2 != 0) and stores the result byte at this+0x1708. |
| 0x00DFF150 | 40 | refresh_window_01457948_and_rebuild | Sends event 0x17 to window DAT_01457948 if it exists, then calls CGameObject__rebuild_window_list to refresh all windows. |
| 0x00DFF180 | 31 | notify_window_0x17_via_01457908 | If global window pointer DAT_01457908 is non-null, calls its virtual method at vtable+0x94 with event type 0x17. |
| 0x00DFF1A0 | 77 | remove_node_from_list_0x734_by_id | Searches the linked list at this+0x734 for a node whose 4th dword matches param_2. If found, unlinks and frees it (0x14 byte node). Decrements the count at this+0x738. |
| 0x00DFF1F0 | 83 | copy_string_and_replace_underscores | Copies string from param_1 to param_2 (if different), then replaces all '_' characters with spaces in param_2. Uses CharNextExA with codepage DAT_016d3a78 for multi-byte character support. |
| 0x00DFF250 | 66 | cleanup_seh_and_dtor_string | Simple SEH cleanup function that destroys an STL string and restores the FS offset. Likely a compiler-generated cleanup handler. |
| 0x00DFF2A0 | 477 | save_mini_party_info_to_lua | Iterates the linked list at this+0x734, formatting each node's data (name, fields 2/3/4) into a string buffer using sprintf. Builds a concatenated string of all entries, then writes to "savedata/MiniPartyInfo.lua" via fopen/fclose. |
| 0x00DFF480 | 48 | set_list_0x1768_node_field_by_index | Traverses linked list at this+0x1768 to find the node at index param_2, then sets its 7th dword (offset 0x18) to param_3. |
| 0x00DFF4E0 | 273 | update_or_remove_friend_entry | Finds a friend entry in linked list at this+0x17E4 by field[4]==param_2. If param_3 is empty string, sends packet 0xB0 and removes the node. If non-empty, updates the node's string to param_3. Then refreshes window type 0x22 (friend list). |
| 0x00DFF600 | 553 | save_guild_emblem_to_file | Saves guild emblem data to disk. Creates tmpEmblem directory if needed, deletes old emblem files matching guild ID pattern, writes new emblem data (param_2, param_3 bytes) to a file named with guild ID and version. Also handles packet processing for own guild. |
| 0x00DFF830 | 56 | update_equipment_slot_item | If param_1 < 10, copies item desc from param_2, calls enchant UI update, and updates item status bonus using field at param_2+0xC. |
| 0x00DFF870 | 41 | set_character_name_0x160c | If param_2 is non-null, copies it into the character name buffer at this+0x160C (max 20 chars). If null, sets the first byte to 0 (empty string). |
| 0x00DFF8A0 | 11 | set_flag_0x40 | ORs the dword at param_1 with 0x40, setting bit 6. |
| 0x00DFF8B0 | 262 | set_costume_slot_and_update_autocast | Sets the costume/shadow slot at this+0x16EC to param_2. Invalidates visible windows. If in mode1, adds/removes entry 0x2B7 from the global vector DAT_014A6938. Notifies the skill bar window (vtable+0x40) to refresh with event 0x2C. |
| 0x00DFF9C0 | 56 | update_equipment_slot_item_00dff9c0 | If param_1 < 10, copies item desc from param_2, calls enchant UI update, and updates item status bonus using field at param_2+0xC. Duplicate of update_equipment_slot_item. |
| 0x00DFFA00 | 311 | update_friend_online_status | Finds a friend entry in list 0x17E4 matching param_2 (char ID) and param_3 (account ID). Updates field 0x48 with param_4 (online status byte). If option 0xA5 is set, optionally sets map name and displays a login/logout chat message (msg 0x411 or 0x412). Returns 1 if found. |
| 0x00DFFB40 | 33 | set_homunculus_data_by_id | If param_2 >= 10000, stores param_3 at index (param_2-10000) in the array pointed to by this+0x710. Used for homunculus/pet data indexed by ID offset from 10000. |
| 0x00DFFB70 | 33 | set_mercenary_data_by_id | If param_2 >= 8000, stores param_3 at index (param_2-8000) in the array pointed to by this+0x71C. Used for mercenary data indexed by ID offset from 8000. |
| 0x00DFFBA0 | 104 | add_or_update_item_in_list_0x1710 | Finds a node in list 0x1710 matching param_2's field[4]. If found and param_2's field[0x10] is 0, calls FUN_00e03d90; otherwise copies item desc. If not found, pushes to back. If param_3 is non-zero, notifies UI language change. |
| 0x00DFFC10 | 33 | set_elemental_data_by_id | If param_2 >= 0x2008 (8200), stores param_3 at index (param_2-0x2008) in the array pointed to by this+0x728. Used for elemental data indexed by ID offset from 8200. |
| 0x00DFFC40 | 51 | set_list_0x1768_two_fields_by_index | Traverses linked list at this+0x1768 to index param_2, then sets both dwords at offsets 0x1C and 0x20 (fields 7 and 8) to param_3. |
| 0x00DFFC80 | 46 | dispatch_event_type1_with_params | Creates a local struct with type=1, param_1 and param_2 as data, then calls FUN_00e03f20 to dispatch/process it. |
| 0x00DFFCF0 | 37 | clear_new_flags_in_list_0x1710 | Iterates linked list at this+0x1710 and clears the byte at offset 0x7D (sets to 0) for all nodes where it was set to 1. Used to clear "new item" flags. |
| 0x00DFFD60 | 213 | set_job_class_with_remapping | Sets the job class at this+0x1628 from param_2, remapping special job IDs to their base counterparts (e.g. 0xFAE->0xFA8, 0xFB6->0xFAF, trans jobs to base jobs). Then calls FUN_00e26030 with param_3, stores param_5 at this+0x16F4, and copies param_4 string to this+0x7B4. |
| 0x00E000D0 | 34 | set_position_fields_0xf18 | Sets three fields: this+0xF18 = param_2, this+0xF1C = param_3, this+0xF20 = param_4. Likely X, Y, direction or similar positional data. |
| 0x00E00100 | 43 | set_party_member_field_0x10_by_id | Finds a node in list 0x734 with 4th dword matching param_2, then sets its 5th dword (offset 0x10) to param_3. |
| 0x00E00130 | 36 | sync_server_tick_offset | Computes the tick offset as (timeGetTime() - param_2) and stores it at this+0x794. Resets this+0x798 to 0. Used to synchronize client time with server tick. |
| 0x00E00160 | 203 | clear_and_set_hotkey_name | Clears hotkey names for the current tab (this+0xBC) by replacing matching entries with "nothing". Tab has 9 entries of stride 0x18 (STL strings). Then sets the current entry to param_2 (or "nothing" if empty). |
| 0x00E00230 | 227 | add_item_to_shadow_equipment_slot | Adds an item to the 10 shadow equipment slots (at 0x3EB4, stride 0xF8). If matching slot found, updates its quantity field with param_6. Otherwise places in first empty slot via CItemDesc__copy_from. Notifies window 0x271B. |
| 0x00E00320 | 176 | add_item_to_extended_equipment_slot | Adds an item to an extended set of 10 equipment slots starting at this+0x4870 (stride 0xF8). Places in first empty slot via CItemDesc__copy_from. Notifies window 0x271B. |
| 0x00E003D0 | 244 | rbtree_find_or_insert_by_key | Looks up param_2 in the red-black tree at this+0x80B4. If found with matching key, returns pointer to value (offset 0x14). Otherwise performs lower bound search and inserts if not present. Returns pointer to value data or 0. |
| 0x00E004D0 | 24 | set_rbtree_byte_value_by_key | Calls rbtree_find_or_insert_by_key with param_1 and writes param_2 (byte) to the returned value pointer. Does nothing if key not found. |
| 0x00E004F0 | 488 | rbtree_map_set_value_with_vector_resize | Looks up param_1 in rbtree, ensures internal vector has at least param_2+1 elements (resizing if needed). Then inserts or updates the map entry at vector[param_2] for key param_3, storing (param_4, param_5) as the value pair. |
| 0x00E006E0 | 550 | rbtree_insert_or_update_string_key | Looks up param_2 (string key) in the red-black tree at this+0x80B4. First tries with character name (this+0x160C) prefixed key, then without. If found, returns 1 and existing value. If not found, inserts a new node with the string key and returns 0. |
| 0x00E00910 | 533 | load_navigation_lua_data_files | Loads navigation system Lua data files based on DAT_016d3b14 (server type: 0=normal, 1=Sakray, 2=local). Loads Navi_f, Navi_Map, Navi_Npc, Navi_Mob, Navi_Link, Navi_LinkDist, NpcDist, Scroll, and picknpc files. Then calls FUN_00b9e580 to initialize navigation. |
| 0x00E00B30 | 1407 | call_lua_navigation_init_with_decrypt | Decrypts encrypted strings via xor_decrypt_buffer (XOR key in TLS), calls a Lua function with the decrypted function name. On failure, shows a MessageBox with error. Uses multiple encrypted string buffers for Lua function and error message strings. |
| 0x00E010C0 | 725 | parse_hash_delimited_data_file | Opens a file (param_2) and parses '#'-delimited data. Each '@' terminates a record which is added as a string+int vector pair to param_1 (output vector). '#' separates fields within a record; first field is the string key, subsequent fields are parsed as ints via atoi. Records are sorted by string key after parsing. |
| 0x00E01670 | 41 | clear_flag_0x7e_in_list_0x1710 | Finds node in linked list at this+0x1710 by matching 4th dword with param_2, then clears byte at offset 0x7E to 0. |
| 0x00E016A0 | 41 | clear_flag_0x7e_in_list_0x1740 | Finds node in linked list at this+0x1740 by matching 4th dword with param_2, then clears byte at offset 0x7E to 0. |
| 0x00E016D0 | 41 | clear_flag_0x7e_in_list_0x1738 | Finds node in linked list at this+0x1738 by matching 4th dword with param_2, then clears byte at offset 0x7E to 0. |
| 0x00E01700 | 111 | adjust_server_tick_drift | Adjusts the tick offset (this+0x794) based on comparison of current tick to param_2. If drift is too large in either direction, resyncs. Allows up to 3 consecutive drifts before forcing resync. Uses 0x48 (72ms) as jitter threshold and 0x90 (144ms) as max drift. |
| 0x00E01770 | 2306 | save_all_game_options_to_lua | Saves all game options to "SaveData/OptionInfo.lua". Opens the existing file, reads its content, then opens for write. Calls SaveToFileCmdOnOffValueEx Lua function first, then writes dozens of option values (ints, floats, strings) via FUN_00e26c00/FUN_00e26b10/FUN_00e26b90/FUN_00e26c70. Gets window rect for resolution saving. |
| 0x00E03440 | 82 | fill_or_copy_int_array | If *param_3 is 0, fills param_1 with zeros (memset). Otherwise copies *param_3 into param_2 elements of param_1. Returns pointer past end of filled region. |
| 0x00E035C0 | 44 | copy_pair8_range_a | Copy pair8 range a, small utility function |
| 0x00E035F0 | 44 | copy_pair8_range_b | Copy pair8 range b, small utility function |
| 0x00E03620 | 44 | copy_pair8_range_c | Copy pair8 range c, small utility function |
| 0x00E03650 | 45 | relocate_pair8_range_a | Copies 8-byte pairs from [param_1, param_2) to destination at offset param_3 relative to param_1. Used during vector reallocation. |
| 0x00E03680 | 45 | relocate_pair8_range_b | Copies 8-byte pairs from [param_1, param_2) to destination at offset param_3. Identical to relocate_pair8_range_a. |
| 0x00E036B0 | 45 | relocate_pair8_range_c | Copies 8-byte pairs from [param_1, param_2) to destination at offset param_3. Identical to relocate_pair8_range_a. |
| 0x00E03D00 | 137 | list_erase_node_0x58 | Erases a node from a doubly-linked list. Unlinks param_3, decrements count at this+4, destroys two STL strings in the node, frees the 0x58-byte node. Sets *param_2 to the next node. |
| 0x00E03D90 | 140 | list_erase_node_0x100 | Erases a node from a doubly-linked list. Unlinks param_3, decrements count at this+4, destroys two STL strings in the node, frees the 0x100-byte node. Sets *param_2 to the next node. |
| 0x00E03E20 | 67 | rbtree_find_by_int_key | Searches a red-black tree for an integer key (*param_3). Uses _Find_lower_bound and checks if the found node's key matches. Returns the found node in *param_2, or the end sentinel if not found. |
| 0x00E03E70 | 170 | CShopItemList__push_back_00e03e70 | Pushes an item to the back of a doubly-linked list. Allocates a 0x58-byte node via operator_new, copy-constructs item data via CItemNode__CopyConstructor, increments count, links at tail. Throws if list at max length. |
| 0x00E03F20 | 175 | list_push_back_0x14 | Pushes a 12-byte data payload (8 bytes + 4 bytes from param_2) to the back of a linked list. Allocates 0x14-byte nodes (8 bytes for prev/next + 12 bytes payload). Increments count. Throws if list at 0xCCCCCCC max. |
| 0x00E04C50 | 75 | rbtree_lower_bound_int | Red-black tree lower bound search for an integer key. Traverses left/right children comparing keys. Stores the current node, comparison direction, and bound node in param_2. |
| 0x00E05EC0 | 91 | construct_0x1c_entry_from_source | Copy-constructs a single 0x1C-stride entry at param_2 from source at param_3. Copies the STL string and the byte at offset 0x18. |
| 0x00E05F20 | 276 | rbtree_insert_or_find_0x4c_node | Searches rbtree for integer key (*param_3). If found, returns existing node. If not found, allocates a 0x4C-byte node, copies 15 dwords of data from param_3, inserts into tree, and returns the new node with inserted=true flag. |
| 0x00E06040 | 238 | construct_0x2c_entry_with_vector | Constructs a 0x2C-byte entry at param_1 from param_2. Copies first 8 bytes directly, copy-constructs STL string at offset 8, then allocates and copies the 0x1C-stride vector at offset 0x20. Returns param_1. |
| 0x00E06290 | 254 | rbtree_find_or_insert_default_0x4c | Searches rbtree for integer key. If found, returns value pointer. If not found, inserts a new zero-initialized 0x4C-byte node and returns pointer to its value area (offset 0x14). |
| 0x00E063F0 | 207 | compare_by_title_string_less | Compares two values by their title strings obtained via lua_get_title_string. Returns 1 if param_1's title is less than param_2's title (lexicographic), 0 otherwise. Used as sort comparator. |
| 0x00E064C0 | 191 | add_item_to_sorted_vector_6160 | Adds a processed item ID (via CPacketParser__handler_0066e460) to the sorted vector at this+0x6160. Skips if already present. After adding, re-sorts using introsort_by_title. Notifies window type 10 with event 0x3C. |
| 0x00E06FD0 | 375 | rbtree_update_or_insert_item_data | Looks up param_2's first dword as key in rbtree at this+0x6144. If found, updates the node's fields from param_2's data (stats, timestamp, flags). If not found, converts timestamp via localtime32, builds a full 0x4C node with all fields, and inserts it. |
| 0x00E07150 | 314 | equip_shadow_item_to_slots | Equips a shadow item (param_2) into up to 3 equipment slots determined by equip_location_to_slot_indices. Copies item desc and sets equipped flag + extra fields per slot. Notifies item list window, ensures CDataTable is initialized, applies status bonus. |
| 0x00E07290 | 87 | update_or_add_skill_in_list | Searches skill list at this+4 for a skill matching param_2's skill ID (offset 8). If found, updates level/SP/range/type/flag fields. If not found, pushes new skill entry via CSkillList__push_back. Returns 0 if updated, 1 if added. |
| 0x00E072F0 | 135 | update_or_add_skill_in_list_0x84 | Like update_or_add_skill_in_list but operates on list at this+0x84. Also updates the skill type field (offset 5). If param_3 is non-zero, notifies equipment windows to update. |
| 0x00E07380 | 135 | update_or_add_skill_in_list_0x8c | Like update_or_add_skill_in_list_0x84 but operates on list at this+0x8C and calls notify_equipment_windows_update_b instead of _a. |
| 0x00E07410 | 81 | add_unique_int_to_vector_616c | Adds param_2 to the int vector at this+0x616C only if it's not already present (linear uniqueness check). Grows vector if needed. |
| 0x00E07470 | 162 | equip_item_to_third_tier_slots | Equips an item to up to 3 third-tier equipment slots (base offset 0x34F8, stride 0xF8). Uses equip_location_to_slot_indices to determine which slots. Copies item data and sets equipped flag, extra fields. |
| 0x00E07520 | 20 | update_skill_with_notify | Wrapper that calls FUN_00e07540 with param_3=1 (always notify). |
| 0x00E07540 | 441 | update_skill_in_all_groups | Updates a skill across all skill groups. Copies skill data, searches groups and standalone list for existing entry, updates or adds. Checks IsLevelUseSkill and adjusts skill level. Also updates a separate skill entry list. If param_2 is set, notifies equipment/status windows. |
| 0x00E07700 | 380 | update_skill_by_params_in_groups | Updates a skill in all groups from individual parameters rather than a struct. Searches groups and standalone list, updates or adds, checks IsLevelUseSkill, optionally notifies windows. Constructs temporary skill entry on stack. |
| 0x00E07880 | 169 | update_skill_node_by_entry | Searches for a skill node by ID from param_1. If found, updates its fields. If not found and param_1 has level, adds it with refresh. Checks IsLevelUseSkill and adjusts level cap. If param_2 is 1, notifies equipment/status windows. |
| 0x00E07930 | 215 | add_item_to_5_slot_array_5c6c | Adds an item to a 5-slot array (this+0x5C6C, stride 0xF8). If matching item found, stacks (adds count). Otherwise places in first empty slot. Notifies window DAT_01457AD8 with event 0x17. |
| 0x00E07A10 | 133 | add_item_to_5_slot_first_empty | Adds an item to the first empty slot in the 5-slot array at this+0x5C78 (stride 0xF8). Does not check for existing items to stack. |
| 0x00E081E0 | 118 | is_paired_job_class | Checks if a job class ID belongs to a paired set. param_2=0: checks if param_1 is in set {0x13, 0xFB4, 0xFCA, 0xFE4, 0xFEB, 0x1008, 0x10A7}. param_2=1: checks set {0x14, 0xFB5, 0xFCB, 0xFE5, 0xFEC, 0x1009, 0x10A8}. Returns 1 if match, 0 if not. These are male/female paired job classes. |
| 0x00E08260 | 44 | reset_all_item_slots | Resets all 10 item description slots by calling CItemDesc__reset_all_fields for each, then notifies the item list window to update. |
| 0x00E082D0 | 37 | reset_all_item_slots_no_notify | Resets all 10 item description slots by calling CItemDesc__reset_all_fields for each. Unlike reset_all_item_slots, does NOT notify the item list window. |
| 0x00E087E0 | 185 | load_sprite_resource | Builds a sprite file path with extension using build_sprite_path_with_extension, then loads it via CResourceMgr::load_resource_by_path. Returns the loaded resource handle. Uses SEH and stack cookie protection. |
| 0x00E089A0 | 81 | get_item_quantity_by_skill_id_range | Dispatches skill effect processing based on skill ID ranges. IDs 8000-803C go to one handler, IDs in 0x2008-0x2031 or 0x20D0-0x2109 range go to another, everything else goes to a third handler. |
| 0x00E08B40 | 289 | get_skill_effect_scale_by_id | Returns a float scale factor for skill effects based on the skill ID. Checks specific skill ID ranges (0xFB7-0xFBD, 0xFCD, 0x105F, etc.) and returns either 1.0 (default), or values from global data tables depending on whether FUN_00e3cff0 returns 1. |
| 0x00E08F70 | 68 | count_active_shop_tabs | Counts the number of active shop tabs by checking 5 pointers at offsets 0x5C78, 0x5D70, 0x5E68, 0x5F60, 0x6058 from param_1. Each non-null pointer increments the count. Returns 0-5. |
| 0x00E08FC0 | 177 | count_special_skill_ids_in_range | Counts how many special skill IDs exist in the range [30, param_2). Only works when param_1==1. Checks specific IDs: 30, 33, 34, 36, 53, 58, 62, 64, 66, 65, 67, 43, 45. Returns the count of matching IDs within the range. |
| 0x00E09080 | 95 | timestamp_to_date_components | Converts a Unix timestamp to date components (year, month, day). Clamps negative timestamps to 0. Uses localtime32 to decompose, then outputs year (offset from 1900), month (1-based), and day into the provided output pointers. |
| 0x00E09470 | 61 | get_refine_level_tier | Returns a tier value (1-4) based on an integer input (likely refine level). Returns 1 if <10, 2 if ==10, 2 if 11-14, 3 if 15-20(0x14), 4 if >20(0x28). Tier boundaries: 10, 10, 20, 40. |
| 0x00E094B0 | 46 | lookup_pair_value_by_key | Searches a key-value pair array (stride 8 bytes, at this+0x778/0x77C) for a matching key (param_2). Returns the associated value if found, 0 if not found. Linear search through pairs. |
| 0x00E094E0 | 33 | try_find_current_map_bgm | Checks if mode==1 (via get_field4_if_mode1), then calls CBGMManager__find_map_by_id_no_cache to find BGM info for the current map. |
| 0x00E09AB0 | 154 | build_sprite_resource_path_00e09ab0 | Builds a sprite resource path string by formatting a path template with a value from an array at this+0xFA8 indexed by param_3. Checks if the resource exists via CResourceMgr; if not, replaces with an empty string. |
| 0x00E09B50 | 619 | parse_monster_action_table_entry | Parses a monster action table XML entry for a given monster name and action ID. Looks up the monster in "Monster_Action_Table" XML, finds the numbered action child, extracts "action" and "loopType" values. If validation fails, shows error dialog boxes. Outputs action index to param_3 and loop type to param_4. |
| 0x00E09DC0 | 154 | build_act_resource_path | Builds an ACT resource path string by formatting a path template with a value from array at this+0xFA8 indexed by param_3. Checks if resource exists via CResourceMgr; if not, replaces with empty string. Similar to build_sprite_resource_path but uses a different format string. |
| 0x00E09E60 | 904 | get_random_monster_talk_line | Looks up a random talk line for a monster from the "enemy_monster_talk_table" XML data. Takes monster ID (param_1), talk type (param_2: 1-3 are numbered, others are name-based), and sub-index (param_3). Collects matching text entries into a vector, picks one randomly, and formats it via FUN_00e12870. |
| 0x00E0A1F0 | 41 | get_last_valid_selection_index | Returns the last valid (non -1) selection index from three fields at offsets 0x5BF4, 0x5BF8, 0x5BFC. Priority goes to the last field if valid, falling back to earlier ones. Returns -1 if all are invalid. |
| 0x00E0A220 | 145 | resolve_linked_map_id | Resolves a linked map ID by checking two map references at offsets 0x5578 and 0x5628. For each non-zero reference, looks up via CBGMManager to get a linked map ID at offset 0x24C. Validates the final result exists in the map database before returning it, otherwise returns 0. |
| 0x00E0A2C0 | 220 | get_indexed_string_from_array | Returns an STL string from a pointer array at this+0x52B8 by index. Bounds-checks against the array size at this+0x52BC. Returns a default "no_resource" style string if index is out of range. |
| 0x00E0A3A0 | 140 | get_name_string_by_index | Returns an STL string from a name pointer array at this+0x5294 by index param_3. No bounds checking. |
| 0x00E0A430 | 140 | get_description_string_by_index | Returns an STL string from a description pointer array at this+0x52A0 by index param_3. No bounds checking. |
| 0x00E0AB60 | 216 | get_class_name_string_by_job_id | Returns a class/job name string from array at this+0x52AC by translating param_3 via FUN_00de0830 to an index. Falls back to index 0 if out of bounds. |
| 0x00E0AD10 | 126 | get_pet_action_name_string | Returns a pet action name string based on action type ID (0-10). Maps: 0=feeding, 1=hunting, 2=danger, 3=dead, 4=stand, 5=perfor_s, 6=levelup, 7=perfor_1, 8=perfor_2, 9=perfor_3, 10=connect. Default=normal. |
| 0x00E0ADC0 | 60 | get_pet_emotion_frame_index | Looks up a pet emotion animation frame index from a 3D table at this+0x1058, indexed by [param_2*35 + param_3*7 + param_4]. Returns the value * 10 + 2, or -1 if the raw value is -1. |
| 0x00E0AEB0 | 69 | get_pet_intimacy_level | Returns pet intimacy level (0-4) based on intimacy value. 0 if <101, 1 if <251, 2 if <751, 3 if <901, 4 if >=901. Used for pet friendship tier display. |
| 0x00E0AF00 | 225 | get_pet_intimacy_color_string | Returns a color-coded pet intimacy description string based on intimacy value. Ranges: <0 = long default string, 0-100, 101-250, 251-750, 751-900, 901-1000. Each range maps to a different localized description from global string constants. |
| 0x00E0AFF0 | 74 | get_pet_hunger_level | Returns pet hunger level (0-4) based on hunger value. 0 if 11-25, 1 if 26-75, 2 if 76-90, 3 if 91-100, 4 if out of all ranges. Uses unsigned subtraction for range checks. |
| 0x00E0B040 | 204 | get_pet_hunger_description_string | Returns a localized pet hunger description string based on hunger value. Ranges: 0-10, 11-25, 26-75, 76-90, 91-100. Each maps to a different string constant. Default/out-of-range gets a special encoding. |
| 0x00E0B110 | 27 | get_pet_hunger_state_name | Returns a pet hunger state name string: 0=hungry, 1=bit_hungry, 2=noting, 3=satisfied, 4=so_full. Default=hungry. |
| 0x00E0B320 | 27795 | tls_init_pet_talk_encrypted_strings | Tls init pet talk encrypted strings |
| 0x00E12470 | 760 | get_random_pet_talk_line | Retrieves a random pet talk line from "monster_talk_table" XML data. Looks up by pet sprite name (from FUN_00e0b320), hunger state name (hungry/bit_hungry/etc.), and action name. Collects all matching text entries, picks one randomly, and copies the decoded string to param_4 output buffer. |
| 0x00E12830 | 59 | calc_3d_array_offset | Calculates a 3D array offset as base + (param_1*10 + param_2)*10 + param_3)*10. Syncs DAT_017334d0 with DAT_01737b90 if they differ. Used for pet/monster data table lookups. |
| 0x00E12870 | 507 | format_and_apply_color_codes | Formats a source string (param_1) into output buffer (param_2), applying color code replacements if param_4 is nonzero. Strips leading/trailing tab chars. Looks up a string by param_3 and appends it with formatting. Replaces color code tokens from a global replacement table. |
| 0x00E12A70 | 215 | find_skill_entry_by_id | Finds a skill entry by skill ID. Dispatches to different linked lists based on ID range: 8000-803C (homunculus skills), 0x2008-0x2031 or 0x20D0-0x2109 (mercenary/etc), 10000-10019 (special), or falls through to CSkillMgr for regular skills. Returns pointer to skill data or NULL. |
| 0x00E12D70 | 212 | get_animated_skill_tree_frame | Calculates the current animation frame for a skill tree node based on elapsed time. Gets node count and float value from UISkillWnd, computes frame index using timeGetTime delta and animation speed. Returns the skill tree node at the calculated frame, or 0 if params are invalid. |
| 0x00E12E50 | 365 | compute_hotkey_index_with_special_ids | Computes a hotkey list index, adjusting for special skill IDs. When param_1==1, counts special IDs (30,33,34,36,53,58,62,64,66,65,67,43,45) up to param_2 and adds them to the index. Then calls GetOriginalHotKeyListSize Lua function. Clamps result to -1 if non-negative. |
| 0x00E12FC0 | 61 | apply_direction_offset_to_frame | Applies a directional offset to an animation frame index. For type 0, uses value at this+0x6FC; for type 1, uses this+0x6A8. Multiplies direction by 9, adds to param_2, then wraps by subtracting 36 if result >= 36. Returns unmodified param_2 if direction is 0 or invalid type. |
| 0x00E13000 | 160 | find_top_two_priority_entries | Traverses a tree/linked structure at this+0x6144 to find the two entries with highest priority values (at node offset 0x10). Only considers entries with flag set at node offset 0x15. Outputs top two entry IDs (node[4]) to param_2 and param_3. |
| 0x00E130A0 | 2421 | map_job_id_to_skill_tree_id | Maps a job/class ID to a skill tree ID. Contains a large lookup table mapping ~120+ job IDs to skill tree IDs in the 0x1012-0x1108 range. Handles base jobs, transcendent jobs, expanded jobs, 3rd jobs, and 4th jobs. Returns the input unchanged if no mapping exists. |
| 0x00E13A20 | 110 | build_robe_sprite_path_type0 | Wrapper that calls build_robe_sprite_path with type=0 (sprite). Forwards all parameters. |
| 0x00E13A90 | 110 | build_robe_sprite_path_type1 | Wrapper that calls build_robe_sprite_path with type=1 (act). Forwards all parameters. |
| 0x00E13B00 | 26 | sync_and_get_current_map_id | Syncs the cached map ID at this+0xE98 with the current map ID at this+0x5558 if they differ, then returns the cached value. |
| 0x00E13B20 | 205 | get_palette_string_by_index | Returns a palette name string from array at this+0x52C4 by index. Bounds-checks against array size at this+0x52C8. Falls back to index 0 if out of range. |
| 0x00E13BF0 | 21 | get_item_slot_count | Gets the slot count for an item. Calls CItemDesc__get_offset_ptr with the item ID, then returns the value at offset 0x40 of the item descriptor. |
| 0x00E13C10 | 17 | get_indexed_field_from_array | Returns a value from an array at this+0x420 indexed by param_2. Simple array accessor with no bounds checking. |
| 0x00E13C30 | 3032 | get_skill_cast_animation_params | Determines the cast animation frame and effect type for a skill based on its ID. Massive switch table mapping hundreds of skill IDs to animation parameters (param_2=frame count, param_3=effect type). Checks Lua HaveSkillEffectInfo first for override. Handles all job skills, homunculus, mercenary, elemental, 3rd/4th class skills. |
| 0x00E15270 | 785 | get_skill_hit_animation_params | Determines the hit/impact animation parameters for a skill based on its ID. Similar to get_skill_cast_animation_params but for the hit phase. Returns frame count in param_2 and effect type in param_3. Massive switch table covering all skill IDs. |
| 0x00E16510 | 12 | thunk_CSkillMgr__find_skill_in_groups | Thunk that directly calls CSkillMgr__find_skill_in_groups. 12-byte wrapper. |
| 0x00E16520 | 245 | find_tree_entry_by_name_and_type | Searches a tree structure at this+0xA4 for an entry matching both a string name (compared via char_traits equal) and a type value (node[0x10]). Returns pointer to the matching node's data (node+10) or NULL if not found. Uses red-black tree traversal. |
| 0x00E16620 | 185 | load_sprite_act_resource | Builds a sprite path with extension (type=1 for ACT) from param_1, then loads the resource via CResourceMgr. Returns the loaded resource handle. |
| 0x00E19090 | 87 | get_monster_action_type_name | Returns a monster action type name string: 0=attack, 1=castskill, 2=useskill, 3=skillattacked, 4/5/6=other states. Returns NULL for unknown types. |
| 0x00E19370 | 107 | build_effect_resource_path_spr | Wrapper that calls CEffect__build_resource_path_simple with type=0 (SPR sprite). Forwards all parameters. |
| 0x00E193E0 | 110 | build_effect_resource_path_with_packet_spr | Wrapper that calls CEffect__build_resource_path_with_packet with type=0 (SPR). Forwards all parameters. |
| 0x00E19450 | 110 | build_effect_resource_path_with_packet_act | Wrapper that calls CEffect__build_resource_path_with_packet with type=1 (ACT). Forwards all parameters. |
| 0x00E194C0 | 107 | build_effect_resource_path_act | Wrapper that calls CEffect__build_resource_path_simple with type=1 (ACT). Forwards all parameters. |
| 0x00E19530 | 68 | get_item_slot_count_with_override | Gets item slot count via CItemDesc, but returns -1 for certain item ID ranges: 2101-2199 (weapons), 28901-28962 (costumes), and 460000-469999 (special items). These ranges have no meaningful slot count. |
| 0x00E19580 | 854 | load_prohibition_log_file | Loads the ProhibitionLog.gd file from the current directory (stripping _data suffix from path). Reads a count of entries, then for each entry reads variable-length string fields and fixed 4-byte fields, storing them as 0x54-byte records in a vector at this+0x758. Each record contains prohibition data like name strings and numeric IDs. |
| 0x00E198F0 | 603 | load_map_info_table_scp | Loads and parses MapInfoTable.scp file. Reads the file into memory, skips C-style comments (// and /* |
| 0x00E19B50 | 55 | clear_selection_indices | Clears selection indices at offsets 0x5BF4, 0x5BF8, 0x5BFC based on boolean flags. Each flag when set to 1 resets the corresponding index to -1. |
| 0x00E19B90 | 21 | reset_global_selection_ids | Resets two global selection IDs (DAT_01733688 and DAT_01733674) to -1. |
| 0x00E19BB0 | 1781 | init_pet_emotion_table | Initializes the pet emotion animation table at this+0x1058. Looks up emote IDs by name (ET_HNG, ET_KIK, ET_FRET, ET_CRY, ET_SCRATCH, ET_OK, ET_AHA, ET_SMILE, ET_DELIGHT, ET_THANKS, etc.) via CFmt functions, then populates a large lookup table mapping pet states to emotion animation indices. Some entries are set to -1 (no animation). |
| 0x00E1A2B0 | 804 | load_pet_and_monster_xml_tables | Loads and parses three XML files: PetTalkTable.xml (always loaded), MonsterSkillInfo.xml (optional), and MonsterTalkTable.xml (optional). Uses CInputMgr to resolve localized paths for PetTalkTable. |
| 0x00E1A5E0 | 12496 | init_format_string_table | Initializes format string table entries. 12K bytes. Calls CFmt__format_to_std_string and CReportStorage__clear_rb_tree. Called by FUN_00df33b0 (encrypted string system init). |
| 0x00E1D6B0 | 45 | is_guild_skill_id_00e1d6b0 | Returns 1 if the given ID is a guild skill (IDs 0x123-0x12F, excluding 0x128 and 0x12B-0x12C). Returns 0 otherwise. |
| 0x00E1D700 | 330 | find_quest_entry_by_id | Searches the quest entry vector at this+0x6178 for an entry matching param_2. Iterates through 0x2C-byte entries, copying each to a local struct, and returns true if a matching entry is found (comparing the int at entry+4 with param_2). |
| 0x00E1D850 | 30 | is_normal_or_sitting_state | Returns 1 if param_1 is 0 (normal) or 4 (sitting). Returns 0 for all other states. |
| 0x00E1D870 | 209 | is_special_skill_tree_id | Returns 1 if the given ID is a special skill tree ID (checking specific ranges and IDs like 0xFB7-0xFBD, 0xFCD, 0x105F, 0xFBE-0xFCC, 0x1000-0x1010, 0x103E-0x1056, 0x1061-0x1064, 0x106D-0x1072, 0x107C, 0x107E-0x108E, 0x1091-0x1098, 0x1100, 0x1102). Returns 0 otherwise. |
| 0x00E1D950 | 20 | get_current_player_base_level | Gets the current player's base level. Retrieves the game mode object, follows pointer chain at offset 0xCC, then reads the level value at offset 0x50. |
| 0x00E1D970 | 14 | is_wedding_state | Returns true if param_1 equals 0x12 (18, wedding/married state). |
| 0x00E1D980 | 37 | is_base_job_or_wedding | Returns 1 if param_1 is 0 (novice), 1 (swordsman), 2 (mage), or 0x12 (wedding). Returns 0 otherwise. |
| 0x00E1D9B0 | 129 | is_valid_equip_location_flag | Returns 1 if param_1 is a valid equipment location bitmask value (single bit powers of 2 and specific compound values: 0x400, 0x800, 0xC00, 0x1000, 0x1400, 0x1800, 0x1C00, 0x2000, 0x4000, 0x10000, 0x20000, 0x40000, 0x80000, 0x100000, 0x200000). |
| 0x00E1DA40 | 37 | has_status_effect_107 | Has status effect 107 |
| 0x00E1DA70 | 37 | has_status_effect_29 | Has status effect 29 |
| 0x00E1DAA0 | 16 | report_find_nested_entry_8 | Calls CReportManager__find_nested_entry with the value from *param_1 and type 8. |
| 0x00E1DAB0 | 16 | report_find_nested_entry_7 | Calls CReportManager__find_nested_entry with the value from *param_1 and type 7. |
| 0x00E1DAC0 | 16 | report_find_nested_entry_19 | Calls CReportManager__find_nested_entry with the value from *param_1 and type 0x13 (19). |
| 0x00E1DAD0 | 16 | report_find_nested_entry_17 | Calls CReportManager__find_nested_entry with the value from *param_1 and type 0x11 (17). |
| 0x00E1DAE0 | 16 | report_find_nested_entry_16 | Calls CReportManager__find_nested_entry with the value from *param_1 and type 0x10 (16). |
| 0x00E1DAF0 | 16 | report_find_nested_entry_18 | Calls CReportManager__find_nested_entry with the value from *param_1 and type 0x12 (18). |
| 0x00E1DB00 | 16 | report_find_nested_entry_9 | Calls CReportManager__find_nested_entry with the value from *param_1 and type 9. |
| 0x00E1DB10 | 16 | report_find_nested_entry_15 | Calls CReportManager__find_nested_entry with the value from *param_1 and type 0xF (15). |
| 0x00E1DB20 | 63 | is_weapon_type_id | Returns 1 if param_1 is a weapon type ID (4, 5, 8, 9, 11, 12, 13, 14, 15). Returns 0 otherwise. |
| 0x00E1DB60 | 53 | is_armor_type_id | Returns 1 if param_1 is an armor/accessory type ID (3, 6, 7, 10, 16, 17, 19). Returns 0 otherwise. |
| 0x00E1DBA0 | 33 | has_quest_entries | Returns non-zero if the quest entry vector at this+0x6178 has any entries. Computes count as (end - begin) / 0x2C. |
| 0x00E1DBD0 | 47 | has_status_effect_by_id | Has status effect by id |
| 0x00E1DC00 | 42 | is_doram_base_job_id | Returns 1 if param_1 is a Doram race base job ID (0x505=Summoner, 0x506, 0x507). Returns 0 otherwise. |
| 0x00E1DC30 | 25 | is_special_skill_id_10000_range | Returns true if param_1 is in the range 10000-10019 (special skill IDs). |
| 0x00E1DC50 | 43 | is_star_emperor_or_soul_reaper_skill | Returns 1 if param_1 is a Star Emperor skill (0x1771-0x1780) or Soul Reaper skill (0x17A0-0x17A4). Returns 0 otherwise. |
| 0x00E1DC80 | 25 | is_soul_reaper_skill_id | Returns true if param_1 is in the Soul Reaper skill ID range (0x17A0-0x17A4). |
| 0x00E1DCA0 | 25 | is_homunculus_skill_id | Returns true if param_1 is in the homunculus skill ID range (8000-8060). |
| 0x00E1DCC0 | 32 | is_sky_emperor_skill_tree_id | Returns 1 if param_1 is a Sky Emperor skill TREE ID (0x10D3 or 0x10DA). Returns 0 otherwise. These are tree IDs, not skill IDs, consistent with nearby is_4th_class_skill_tree_id and is_shared_skill_tree_id. |
| 0x00E1DCE0 | 25 | is_4th_class_skill_id_range1 | Returns true if param_1 is in the range 0x1782-0x17A4 (4th class skill IDs, first range). |
| 0x00E1DD00 | 25 | is_expanded_class_skill_id | Returns true if param_1 is in the expanded class skill ID range (0x1771-0x17A4, covering Star Emperor and Soul Reaper). |
| 0x00E1DD20 | 43 | is_mercenary_or_elemental_skill_id | Returns 1 if param_1 is in the mercenary skill range (0x2008-0x2031) or elemental skill range (0x20D0-0x2109). Returns 0 otherwise. |
| 0x00E1DD50 | 88 | is_player_entity_npc_or_monster | Checks if the current entity (when param_1 != 0) has a job ID in the NPC/monster range (1001-3998 or 20021-31999). Returns 1 if so, 0 otherwise. Uses CEntity__get_effective_job_id. |
| 0x00E1DDB0 | 60 | is_entity_id_matching_player_pet | Checks if param_1 matches the player's pet entity ID. Gets the player object via mode+0xCC+0x2C, calls virtual method at vtable+200 to get the pet ID, and compares. Returns 1 if match, 0 if no match or no pet. |
| 0x00E1DDF0 | 26 | is_entity_id_current_map | Returns true if param_2 is not -1 and matches the current map entity ID at this+0x5578. |
| 0x00E1DE10 | 26 | is_entity_id_secondary_map | Returns true if param_2 is not -1 and matches the secondary map entity ID at this+0x5628. |
| 0x00E1DE30 | 139 | validate_entity_id_for_interaction | Validates whether an entity ID is valid for interaction. Returns 0 for -1, returns 1 for known entity IDs (map, secondary map, player, special). For unknown IDs, spawns a unit lookup and checks various conditions (node validity, range checks) to determine if interaction is allowed. |
| 0x00E1DEC0 | 56 | find_buff_entry_by_id | Searches the buff linked list at this+0x17DC for an entry matching param_2. If param_3 is non-zero, also checks that node[0x12] is 0 (not expired). Returns 1 if found (and not expired if checked), 0 otherwise. |
| 0x00E1DF00 | 26 | is_entity_id_player | Returns true if param_2 is not -1 and matches the player entity ID at this+0x1010. |
| 0x00E1DF20 | 47 | has_status_effect_by_id_alt | Has status effect by id alt |
| 0x00E1DF50 | 9 | thunk_to_is_valid_base_or_job_class_00e1df50 | Thunk that calls FUN_00dfbce0 and returns |
| 0x00E1DF60 | 25 | is_elemental_spirit_job_id | Returns true if param_1 is an elemental spirit job ID in the range 0x2329-0x251B (9001-9500). |
| 0x00E1DF80 | 47 | is_3rd_or_4th_class_skill_id | Returns 1 if param_1 falls in 3rd class skill ranges (0x1519-0x1583, 0x1771-0x1776) or 4th class range (0x197D-0x19CE). Returns 0 otherwise. |
| 0x00E1DFB0 | 20 | get_current_player_job_level | Gets the current player's job level. Retrieves the game mode object, follows pointer chain at offset 0xCC, then reads the job level value at offset 0x4C. |
| 0x00E1DFD0 | 39 | is_mount_skill_id | Returns 1 if param_1 is a mount/riding skill ID (0x7F7=Peco Ride, 0x9A0=Dragon Ride, 0x1980=Mado Gear). Returns 0 otherwise. |
| 0x00E1E000 | 29 | is_whitespace_char | Returns 1 if the character is a space or tab. Returns 0 otherwise. |
| 0x00E1E020 | 46 | is_baby_4th_class_tree_id | Returns 1 if param_1 is one of the baby 4th class skill tree IDs (0x105E-0x1061). Returns 0 otherwise. |
| 0x00E1E050 | 44 | is_shared_skill_tree_id | Returns 1 if param_1 is one of the shared/common skill tree IDs (0x17=Super Novice, 0xFCD, 0x1020, 0x104C). Returns 0 otherwise. |
| 0x00E1E080 | 86 | is_special_or_baby_skill_tree_id | Returns 1 if param_1 is a shared skill tree ID (0x17, 0xFCD, 0x1020, 0x104C), baby 4th class tree ID (0x105E-0x1061), or Sky Emperor tree ID (0x10D3, 0x10DA). Returns 0 otherwise. |
| 0x00E1E0E0 | 44 | is_4th_class_skill_tree_id | Returns 1 if param_1 is a 4th class skill tree ID. Covers several ranges: 0x1073-0x1098 (various 4th class jobs), 0x10CE-0x10DC (more 4th class), 0x1101-0x1107 (additional 4th class trees). |
| 0x00E1E1B0 | 36 | is_4th_class_tier1_tree_id | Returns 1 if param_1 is a first-tier 4th class skill tree ID (0x1073-0x1076, 0x107F-0x1080, 0x1087-0x1088, 0x10D0-0x10D1). Returns 0 otherwise. |
| 0x00E248F0 | 575 | compute_equip_combination_type | Determines the equipment combination type based on two item IDs. Classifies items into weapon groups (1100-1149, 13400-13499, 500000-509999), shield groups (1200-1249, 13000-13099, 28700-28899, 510000-519999), and two-hand groups (1300-1349, 520000-529999). Returns a combination code (0-6 for single, 25-30 for dual combinations). |
| 0x00E24B30 | 473 | unequip_item_at_location | Unequips an item at the given equipment location. For costume (0x8000), calls set_costume_slot_and_update_autocast. Otherwise converts location to slot indices, displays unequip message, resets item fields, updates selling items, and notifies the item list window. Also handles data table initialization and removes status bonuses. |
| 0x00E24D10 | 109 | check_item_strings_match_slots | Compares item name strings between two arrays at this+0x1004 and this+0xFF8. Iterates up to 10 slots comparing STL string contents. Returns 1 if any mismatch is found, 0 if all match (no changes detected). |
| 0x00E24D80 | 89 | is_special_hotkey_skill | Returns 1 if param_1==1 and param_2 is one of the special hotkey skill IDs (30,33,34,36,53,58,62,64,66,65,67,43,45). Returns 0 otherwise. Same ID set as count_special_skill_ids_in_range. |
| 0x00E25150 | 110 | write_integer_to_log_file | Formats an integer (param_2) as a string using sprintf, writes it to a file stream, then writes a 3-byte separator (newline sequence). |
| 0x00E251C0 | 61 | notify_equipment_windows_update_a | Sends update notification (type 0x17) to two equipment-related windows (DAT_01457a44 and DAT_01457868) via virtual method call at vtable+0x94. |
| 0x00E25200 | 61 | notify_equipment_windows_update_b | Sends update notification (type 0x17) to two equipment-related windows (DAT_01457a4c and DAT_01457868) via virtual method call at vtable+0x94. |
| 0x00E25240 | 102 | notify_equipment_and_status_windows | Sends update notification (type 0x17) to three windows: DAT_01457944, DAT_01457868, and the window of type 0x9F found via CUIWindowMgr. |
| 0x00E252B0 | 132 | process_shop_item_purchase | Processes a shop item purchase. Searches 5 shop tabs (0x5C6C, stride 0xF8) for an active entry matching param_2. When found, adjusts quantity by param_3, updates the selling item entry, and notifies the shop window (DAT_01457ad8). |
| 0x00E25340 | 1572 | save_prohibition_log_file | Saves the prohibition log to both binary (ProhibitionLog.gd) and text (ProhibitionLog.txt) formats. Writes entry count, then for each 0x54-byte record: two variable-length strings and 5 fixed 4-byte fields to the binary file. Also writes a human-readable text version with formatted dates and timestamps. |
| 0x00E25A70 | 243 | find_or_insert_rbtree_entry_by_id | Finds an existing entry in a red-black tree (this+0x6144) by integer key, or inserts a new default-initialized entry if not found. Uses rbtree_lower_bound for lookup. Returns pointer to the entry data (node+0x14). |
| 0x00E25B70 | 530 | init_skill_tree_views_from_lua | Initializes skill tree views by querying Lua "GetInheritJob" to get the number of inherited jobs. Clears existing skill groups, linked lists, and trees. Then iterates through inherited jobs, classifying each as regular (1), expanded (2), or 4th class (3), and calls Lua "InitSkillTreeView" for each with the appropriate parameters. |
| 0x00E25DD0 | 138 | set_and_xor_encrypt_packet_data | Copies 64 bytes from param_2 into this+0x7B4 (16 DWORDs), then XOR-encrypts each byte with a key from PTR_DAT_01360EA0. Inverse of xor_decrypt_packet_data. |
| 0x00E25E60 | 118 | set_or_insert_key_value_pair | Sets a value for a key in the pair array at this+0x778. If the key already exists, updates its value. Otherwise appends a new key-value pair, growing the vector if needed. |
| 0x00E25EE0 | 59 | set_selection_index_by_slot | Sets a selection index at one of three slots. param_3: 0 sets this+0x5BF4, 1 sets this+0x5BF8, 2 sets this+0x5BFC. Value is param_2. |
| 0x00E25F20 | 257 | set_shortcut_skill_entry | Sets a skill shortcut entry at position param_5. First checks 2 existing shortcut slots for duplicates or level-use conflicts and clears them. Then sets the skill ID (param_3), level (param_4), and type (param_2) at the target slot. Sends notification 0x139 to update the UI. |
| 0x00E26030 | 25 | set_map_visibility_flag | Sets the map visibility flag to the lowest bit of param_2. Writes to both this+0xE98 (cached) and this+0x5558 (current). |
| 0x00E26050 | 992 | set_hotbar_skill_entry | Sets or clears a skill entry in a hotbar. param_6 selects the hotbar (0 or 1), param_5 is the slot position. When param_3 is 0, clears the slot and removes associated timer bars. When setting, first clears duplicates of the same skill across the hotbar range, then writes the skill data (type, ID, level) to the appropriate slot array. |
| 0x00E26430 | 261 | update_equipment_sprite_entry | Updates an equipment sprite entry for the current character. Searches through 9 slots for matching name string and param_3 value; if found, clears the entry to "nothing". Then sets the new entry at position param_4 with the given name string and value, or clears it if the name is empty. |
| 0x00E26540 | 20 | set_equipment_array_value | Sets a value in the equipment array at this+0x420 + param_3*4 to param_2. Simple indexed setter. |
| 0x00E26560 | 84 | uppercase_and_print_stl_string | Converts an STL string to uppercase in-place by subtracting 0x20 from each lowercase character, then prints the result via puts(). Handles both short (inline) and long (heap) string storage. |
| 0x00E265C0 | 1353 | update_quest_entry_display_data | Updates the display data for a quest entry identified by param_2. Finds the matching quest in the vector at this+0x6178, looks up the entry in a red-black tree, and updates objective descriptions with progress counts. Formats strings showing completion status with truncation for long names. |
| 0x00E26B10 | 113 | write_option_info_float_to_file | Writes an option info entry with float value to a file. Formats as "OptionInfoList[%s] = %f" and writes to the current file stream. |
| 0x00E26B90 | 108 | write_option_info_guid_to_file | Writes an option info entry with GUID value to a file. Formats the GUID via format_guid_to_buffer, then writes as "OptionInfoList[%s] = \"%s\"" to the file stream. |
| 0x00E26C00 | 105 | write_option_info_int_to_file | Writes an option info entry with integer value to a file. Formats as "OptionInfoList[%s] = %d" and writes to the current file stream. |
| 0x00E26C70 | 381 | write_option_info_string_to_file | Writes an option info entry with string value to a file. Escapes special characters in the string via CFmt, then formats as "OptionInfoList[%s] = \"%s\"" and writes to the file stream. |
| 0x00E26DF0 | 92 | destroy_0x1c_entry_strings | Iterates through an array of 0x1C-byte entries from param_1 to param_2, calling STL_string_dtor on each to destroy embedded string objects. |
| 0x00E26E50 | 704 | rbtree_erase_and_rebalance_00e26e50 | Red-black tree node removal with full rebalancing. Handles all BST deletion cases (leaf, one child, two children) and performs RB-tree fixup rotations (left/right) to maintain balance. Decrements tree size counter. Standard STL-style _Tree::erase implementation. |
| 0x00E27320 | 84 | rbtree_rotate_left_00e27320 | Standard left rotation for a red-black tree node. Promotes right child, updates parent pointers, and fixes root if necessary. |
| 0x00E27380 | 88 | rbtree_rotate_right_00e27380 | Standard right rotation for a red-black tree. Rotates param_2 node right, promoting its left child. Updates parent pointers and root if necessary. |
| 0x00E273E0 | 147 | copy_construct_0x2c_entries_range | Copy-constructs 0x2C-byte entries from source range [param_2, param_3) into destination starting at param_4. Returns the end of the written destination range. Cleans up on exception. |
| 0x00E274C0 | 44 | copy_8byte_pair_array | Copy 8byte pair array |
| 0x00E27600 | 102 | allocate_0x1c_entry_array | Allocates memory for an array of 0x1C-byte entries. Validates the count is within limits (max ~153 million entries), then allocates count * 0x1C bytes. |
| 0x00E27780 | 169 | CPetMgr__is_pet_accessory | Calls the Lua function "IsPetAccessory" with the given parameter. Returns the boolean result from Lua. Uses lua_call_function on the Lua state at this+23000. |
| 0x00E27830 | 21 | fmt__format_spec_wrapper | Wrapper that forwards 3 parameters to fmt__parse_and_validate_format_spec. Part of the fmtlib formatting pipeline. |
| 0x00E27850 | 666 | CJsonReader__read_string_array | Reads a JSON array of strings into a vector of 0x18-byte entries. Navigates to the JSON key, validates it's an array (type 5), resizes the output vector to match array length, then iterates through array elements reading each string entry. Returns 0 on success, error code on failure. |
| 0x00E27AF0 | 358 | CShopItemList__build_from_range | Builds a circular doubly-linked list of CShopItem nodes (0x100 bytes each) from a range of 0xF8-byte source items [param_2, param_3). Copy-constructs each item, links nodes together, creates a sentinel node, and stores the list head and count in param_1. |
| 0x00E27C60 | 75 | rbtree_lower_bound_with_result | Red-black tree lower_bound search. Traverses the tree comparing keys at node+0x10, filling param_2 with: [0]=last visited node, [1]=found flag (1 if exact match or lower bound), [2]=upper bound node. Returns param_2. |
| 0x00E28070 | 80 | init_variant_from_string | Initializes a VARIANT-like structure from a string. Sets type flags to 0xC0000000 (VT_BSTR-like), stores string pointer (handling SSO), length, a user param, and a callback function pointer (FUN_00e27830). Final flags = 0xD0000008. |
| 0x00E281B0 | 61 | copy_encrypted_buffer_14bytes | Copies up to 14 bytes from source buffer to destination, then sets the encrypted flag at offset +0xe to 1. Used to initialize encrypted string buffers that will later be decrypted by xor_decrypt_buffer. |
| 0x00E281F0 | 146 | destroy_encrypted_string_list | Destroys a linked list of encrypted string nodes. Walks the linked list, calling STL_string_dtor twice per node (for two string members), then frees each 0x100-byte node. Clears head/tail pointers. Uses SEH. |
| 0x00E28330 | 91 | destroy_vector_of_maps | Iterates through a vector of map objects (each 8 bytes apart) and calls std__map_int__destroy_tree on each element. Uses SEH for exception safety. Called during container cleanup. |
| 0x00E2EE70 | 640 | map_equip_location_to_view_id | Maps equipment location IDs to view/sprite IDs. Handles three tiers: (1) direct pass-through for certain types (0x16-0x1E), (2) normal equipment mapping via lookup, (3) costume/shadow equipment mapping with remapping tables. Also remaps headgear view IDs 0x10EC-0x10F8 to alternate range. If param_3==1 and result>0xF6E, subtracts 0xF6E offset. |
| 0x00E2F5A0 | 308 | check_item_combinable_status | Checks if an item can be combined/used. Returns 1 if: global mode > 0x45, item is not in certain category, DAT_01737AA0 is set, item exists in DB, has valid field4, item level <= 50 (0x32), and item is not in range 0xFA1-0xFB5. Returns 0 otherwise. |
| 0x00E2F710 | 89 | classify_equip_sprite_mode | Classifies equipment sprite mode. If param_2 < 2 and param_3 is not in headgear range (0x10EC-0x10FF), checks if param_1 is in range 0xFA1-0xFB6 or resolves to that range. Returns 0 or 1 for base equipment, param_2 passthrough otherwise. |
| 0x00E2F770 | 126 | get_equip_location_tier | Returns the equipment location tier: 1 = normal base equipment (resolved via lookup), 2 = costume/shadow equipment (0xFAE, 0xD, 0x15, 0xFB6-0x10B9 range), 0 = unknown/invalid. Used by the equip location mapper. |
| 0x00E2F860 | 177 | build_vector_from_linked_list_a | Builds a std::vector by iterating a linked list from param_2. For each node, calls FUN_00e30a90 to transform the data, then inserts the result into the output vector via STL_vector_insert_range. Returns the populated vector. |
| 0x00E2F920 | 177 | build_vector_from_linked_list_b | Builds a std::vector by iterating a linked list from param_2. For each node, calls CItemDB__serialize_item_to_packet to transform the data, then inserts into the output vector. Returns the populated vector. Similar to build_vector_from_linked_list_a but uses different serializer. |
| 0x00E2F9F0 | 140 | get_item_tab_color_by_type | Returns a color value for item tab display based on item type. Checks in order: is pet egg (DAT_0173A59C), is pet armor (DAT_0173A524), is enchantstone (DAT_0173A528), is shadow equipment (DAT_0173A52C), is costume (DAT_0173A550), default (DAT_0173A520). |
| 0x00E2FA80 | 291 | get_item_name_color_by_type | Returns a color value for item name display based on item type/location. Checks enchantstone, equipment range 0xFA8-0xFB6 and specific locations (0x18,0x19,0x1084 etc), consumable/ammo types, pet egg, pet armor, shadow equipment, costume, and default. Each type returns a different color from global DAT_0173A5xx. |
| 0x00E2FBB0 | 103 | get_job_branch_index | Returns the job branch index (1-3) based on the player's effective job ID. Checks against Summoner/Doram jobs (0x842-0x84D) and 4th class jobs (0x5150-0x5154). Returns 0 if job not on the configured map or unknown job. Used for job-branch-specific item filtering. |
| 0x00E2FE80 | 1363 | map_costume_to_base_equip_location | Maps costume/shadow/4th-class equipment location IDs back to their base equipment locations. Giant switch table covering all equipment slots: costumes (0x1012-0x108D), shadows (0x10A9-0x10B5), 4th-class (0x10D5-0x10DB), and special headgear variants. Returns the input unchanged if no mapping exists. |
| 0x00E30A50 | 26 | get_render_system_default | Returns the Lua global integer 'RenderSystemDefault', clamped to minimum 0. Used to get the default render system setting. |
| 0x00E30A70 | 26 | get_render_system_reset | Returns the Lua global integer 'RenderSystemReset', clamped to minimum 0. Used to get the render system reset flag. |
| 0x00E30A90 | 1956 | serialize_item_fields_to_packet_vector | Serializes item fields into a packet vector. Creates multiple sub-packets: type 0xFB (6 bytes, header), 0xFD with param_1[0] (item ID), 0xFE with param_1[1], 0xFF with param_1[2], 0x102 with param_1[0xF], 0x103 with param_1[0x10], 0x104 with param_1[0x11]. Also serializes two strings via rbtree_insert_with_hint (types 0x100, 0x101), and appends a 0xFC terminator. |
| 0x00E31240 | 280 | serialize_linked_list_to_packet_buffer | Serializes a linked list of items into a binary packet buffer. Allocates a byte vector sized to (count * 0x25 + 4), writes packet header (param_2 type, size), then iterates the list writing each item's fields: short ID, int value, short count, short flags, bool active, short extra, and a 0x18-byte name string (null-terminated, max 24 chars). |
| 0x00E31360 | 92 | map_base_to_costume_equip_location | Maps base equipment locations to their costume/shadow equivalents. Inverse of map_costume_to_base_equip_location. E.g., 0xFA8->0xFAE, 7->0xD, 0xE->0x15, 0xFAF->0xFB6, 0xFD6->0xFF0, 0x109C->0x10B8, etc. Returns input unchanged if no mapping. |
| 0x00E31580 | 30 | remap_headgear_view_id | Remaps headgear view IDs from extended range 0x10EC-0x10F8 to base range. Maps to locations like 0xFDC, 0xFE0, 0xFE1, etc. Returns input unchanged if not in the 0x10EC-0x10F8 range. |
| 0x00E31650 | 1181 | CSkillTree__load_skill_data_from_lua | Loads skill tree data from Lua state. Calls GetSkillMaxLv Lua function, then iterates Lua table to read SkillFlag entries and skill point requirements. Populates the skill tree map with skill IDs and their costs. Special handling for skill 0x99D (Homunculus) with job-branch-specific offsets (3000/6000/9000 for Summoner/Doram jobs). |
| 0x00E31D30 | 168 | CGameMode__check_is_top_layer_lua | Calls Lua function 'IsTopLayer' with a layer ID parameter. If param_2 is -1, uses the value from this+0xF00. Returns the Lua result (non-zero if the layer is a top layer). |
| 0x00E31DE0 | 74 | CGameMode__check_skill_cooldown | Checks if a skill is still on cooldown. Iterates the linked list at this+0x5440, looking for matching skill ID (param_2) or universal cooldown (0x241). If found, checks if current time (timeGetTime) is less than (expire_time - 100ms). Returns 0 if on cooldown, 1 if ready. |
| 0x00E31E30 | 45489 | tls_init_all_encrypted_strings | Tls init all encrypted strings |
| 0x00E3CFF0 | 42 | is_special_equip_location | Checks if an equipment location ID is a special type (weapon-related locations). Returns 1 for IDs 0x1079-0x107D, 0x10D4, 0x10DB. Returns 0 for all others. |
| 0x00E3D0A0 | 70 | CGameMode__check_action_delay | Checks if enough time has elapsed since last action. Compares (last_action_time + delay) against timeGetTime(). If elapsed, updates last_action_time at this+0x6188 and returns 1. Otherwise returns 0. Used as general action cooldown timer. |
| 0x00E3D0F0 | 76 | is_current_equip_two_handed | Checks if the currently equipped weapon (from DAT_01733C60) is a two-handed type. Two-handed IDs include: 0x13, 0x14, 0xFB4, 0xFB5, 0xFCA, 0xFCB, 0xFE4, 0xFEB, 0x1008, 0x1073, 0x1074, 0x107F, 0x1080, 0x10A7, 0x10A8, 0x10D0, 0x10D1. Returns 1 if two-handed, 0 otherwise. |
| 0x00E3D240 | 76 | is_guild_skill_id | Checks if a skill ID belongs to a guild skill. Guild skill IDs: 0x14B, 0x78B, 0x87B, 0x9BE, 0xA1B, 0xA2E, 0xA2F, 0xAF6. Returns 1 if guild skill, 0 otherwise. |
| 0x00E3D290 | 62 | can_entity_be_targeted | Checks if an entity can be targeted. First tries to find the entity on the current map; if found and its type is 1 (NPC), 6 (player), or 12 (portal), returns 1. Otherwise falls back to is_valid_npc_or_mob_id check. |
| 0x00E3D2D0 | 44 | get_player_mount_status | Gets the player's mount status byte. Retrieves the current game mode, then the player entity at offset +0xCC, and returns the byte at entity+0xFD. Returns 0 if no game mode or no player entity. |
| 0x00E3D300 | 21 | is_extended_headgear_view_id | Returns true (1) if param_1 is in the extended headgear view ID range [0x10EC, 0x10FD] (18 values). Simple range check: (param_1 - 0x10EC) < 0x12. |
| 0x00E3D320 | 38 | CGameMode__is_weight_over_limit | Checks if the player's current weight exceeds the limit. If param_2 is -1, returns false. Otherwise checks if (this+0x59C0 - this+0x8130) <= param_2. Returns 1 if weight is over the limit. |
| 0x00E3D350 | 40 | is_ammo_equip_location | Checks if an equipment location ID represents ammo. Ammo locations: 0x16, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E. Returns 1 if ammo, 0 otherwise. |
| 0x00E3D3D0 | 80 | is_new_equip_location_type | Checks if an equipment location ID is a 'new' type (4th class, expanded, or special equipment). Returns 1 for 4th-class IDs, expanded class IDs, and a large set of specific IDs (0x105E-0x1102). Used to determine if special UI or handling is needed. |
| 0x00E3D4D0 | 969 | CGameMode__init_shortcut_list_from_lua | Initializes the shortcut list from Lua savedata. Clears existing shortcut string vector at this+0xFF8, then populates it with message strings (IDs 0x220-0x22A) for 10 shortcut entries. Loads savedata via 'savedata/shortcutlist/*.lua' file. Returns true if shortcut list loaded successfully and has valid size. |
| 0x00E3DB20 | 113 | CGameMode__reset_player_stats | Resets player stat fields to initial values. Sets stats at this+0x59BC through +0x59D4 to 1, E94 to 1, 103C to -1, 5450/794/798 to 0. Returns 1. |
| 0x00E3DBA0 | 2240 | CGameMode__serialize_state_to_savedata | Serializes game state to savedata packet vector. Builds packets with types: 0x1964 (header), 0x196F (account ID from global), 0x1970 (flag byte), 0x1971/0x1972 (string data from global+4 and +0x1C), 0x1973 (battlefield queue ID), 0x1974-0x1976 (memorial dungeon data), 0x1965 (terminator). |
| 0x00E3E460 | 225 | CGameMode__build_character_header_packet | DUMMY - forcing previous comment through |
| 0x00E3FF30 | 3363 | CGameMode__serialize_status_data | Serializes character status data to a packet vector. Type 2000 header, then int fields (0x7DA-0x7DF) from offsets 0x166C-0x1680 for base stats, followed by string/binary data for name (0x7E0), job info (0x7E1-0x7E7), skill data (0x7E8-0x7EC), and additional stats (0x7ED-0x7F6, 0x804). Terminates with type 0x7D1. |
| 0x00E40C60 | 1571 | CGameMode__serialize_party_data | Serializes party data to packet vector. Type 4000 header, flag byte (0xFAA) from +0x5938, int fields (0xFAB/0xFAC) from +0x5460/+0x5464, strings (0xFAD/0xFAE), linked lists (0xFAF/0xFB0) for party members. Terminates with type 0xFA1. |
| 0x00E41290 | 3021 | CGameMode__serialize_equipment_data | Serializes equipment/inventory data to packet vector. Type 0x1194 header, int fields (0x125D/0x125E) from +0x5210/+0x5214, then 13 linked list serializations (types 0x119E-0x11AA) for different equipment categories. Also serializes merged item lists (0x11F9-0x11FE) with hash table cleanup. Terminates with type 0x1195. |
| 0x00E41E60 | 1745 | CGameMode__serialize_quest_data | Serializes quest data to packet vector. Type 0x1D4C header. Iterates quest tree at this+0x80B4, serializing each quest entry as 0x1D4E (0x1C bytes with name and data), then iterates quest objectives tree at this+0x80BC with nested objective entries as 0x1D50 (0x1A bytes) and quest summary as 0x1D51 (0x0E bytes). Terminates with type 0x1D4D. |
| 0x00E42540 | 182 | build_short_packet_4bytes | Builds a minimal 4-byte packet vector. Allocates 4 bytes, writes type 0x1D6 as first 2 bytes and copies param_1 (2 bytes) as second short. Used for simple short-value packets. |
| 0x00E42600 | 2216 | CGameMode__serialize_guild_data | Serializes guild data to packet vector. Type 0x157C header, int fields 0x1586-0x158A from offsets +0x593C through +0x594C, string 0x158B from +0x5950, int fields 0x158C-0x158E from +0x5968/+0x596C/+0x5970. Terminates with type 0x157D. |
| 0x00E42EB0 | 103 | init_empty_vector | Initializes an empty std::vector by setting all 3 pointers (begin, end, capacity) to 0. Simple vector constructor with SEH frame. |
| 0x00E44640 | 888 | serialize_packet_system_data | Serializes packet system data to vector. Type 0xDAC header, constant 0x33 as int (0xDAE), binary data block from CPacketSystem (0xDB6), terminates with 0xDAD. |
| 0x00E449C0 | 1064 | serialize_hotkey_macro_data | Serializes hotkey/macro configuration data. Type 7000 header, copies 0xFC bytes (252 = 63 ints) of hotkey data from offset +0x4B0 as type 0x1BBC, then 14 bytes of macro data from offset +0x6EB as type 0x1BBD. Terminates with 0x1B59. |
| 0x00E44DF0 | 228 | CGameMode__serialize_list_by_type | Serializes a linked list to packet by type selector. Dispatches to serialize_linked_list_to_packet_buffer with the appropriate list offset: type 0x10F uses this+0x10, type 0x235 uses this+0x84, type 0x29D uses this+0x8C. Returns empty vector for unknown types. |
| 0x00E44EE0 | 933 | CGameMode__deserialize_savedata | Deserializes savedata packet vector (type 0x1964). Parses TLV sub-packets: 0x196F sets account ID in global, 0x1970 sets flag byte, 0x1971/0x1972 set source/destination names, 0x1973 dispatches battlefield queue, 0x1974 sets memorial dungeon data, 0x1975/0x1976 store temp values. Returns offset on success, -1 on failure. |
| 0x00E452D0 | 258 | CGameMode__deserialize_character_data | Deserializes character data from packet vector (type 1000). Parses ~80 TLV sub-packets (types 0x3F2-0x44D) that map to offsets 0x1604-0x7FBC in the game mode object. Each field is memcpy'd by size. Special handling for type 0x449 (string field with STL resize). Terminates at type 0x3E9. |
| 0x00E46040 | 1312 | CGameMode__deserialize_status_data | Deserializes status data from packet vector (type 2000). Parses TLV sub-packets (0x7DA-0x804) that map to character status fields: stats (0x166C-0x1680), name (0xF4C), job data (0x1700/0x16FC), guild data (0x532C-0x533C), skill data (0x5340-0x5400), and equipment info. Type 0x804 triggers entity update callbacks. Terminates at type 0x7D1. |
| 0x00E46620 | 728 | CGameMode__deserialize_party_data | Deserializes party data from packet vector (type 4000). Parses TLV sub-packets: 0xFAA (flag byte at +0x5938), 0xFAB/0xFAC (int fields at +0x5460/+0x5464), 0xFAD/0xFAE (string names), 0xFAF/0xFB0 (linked lists via FUN_00e48c00). Terminates at type 0x1195. |
| 0x00E46920 | 886 | CGameMode__deserialize_equipment_data | Deserializes equipment/inventory data from packet vector (type 0x1194). Parses 13 linked lists (0x119E-0x11AA via FUN_00e48e90), 6 merged lists (0x11F9-0x11FE via FUN_00e49090), and int fields (0x125D/0x125E). Terminates at type 0x1195 or 0x125F. |
| 0x00E46DC0 | 750 | deserialize_quest_data | Deserializes quest data from packet vector (type 0x1D4C). Parses quest entries (0x1D4E) with name string and data, quest objectives (0x1D50) with nested data, and quest summaries (0x1D51). Calls FUN_00e006e0/FUN_00e004f0/FUN_00e004d0 to populate quest structures. Terminates at type 0x1D4D. |
| 0x00E470D0 | 756 | CGameMode__deserialize_guild_data | Deserializes guild data from packet vector (type 0x157C). Parses int fields 0x1586-0x158A to offsets +0x593C-+0x594C, string 0x158B to +0x5950, int fields 0x158C-0x158E to +0x5968-+0x5970. If guild flag at +0x593C is 1, triggers guild UI update (0x89). Terminates at type 0x157D. |
| 0x00E47420 | 2637 | CGameMode__deserialize_misc_data | Deserializes miscellaneous game data from packet vector (type 5000). Parses ~60 TLV fields for skill data (0x13ED-0x140E at offsets +0x5578-+0x5624), guild war data (0x1451-0x146D at +0x5628-+0x56B4), base/job level (0x14B5-0x14BE at +0x1010-+0x1054), and map info (0x1519-0x151D at +0x5BC0-+0x5BD0). Terminates at type 0x1389. |
| 0x00E48100 | 419 | deserialize_packet_system_data | Deserializes packet system configuration data (type 0xDAC). Clears existing packet system tree, reads packet size table via 0xDAE, and bulk-loads packet definitions from binary blob via 0xDB6 (CPacketSystem__bulk_processor_0067b8f0). Terminates at type 0xDAD. |
| 0x00E482B0 | 321 | CGameMode__deserialize_hotkey_macro_data | Deserializes hotkey/macro configuration data (type 7000). Parses 0x1BBC (hotkey data, 252 bytes to +0x4B0) and 0x1BBD (macro data, 14 bytes to +0x6EB). Calls FUN_00e08330/FUN_00e08300 to reset before loading. Terminates at type 0x1B59. |
| 0x00E48400 | 93 | send_savedata_request_packet | Sends a savedata request packet to the server. Builds a 6-byte header with packet type 0x2D8, encodes param_1 as a byte flag, applies two rounds of encoding via FUN_00c7d7d0, and sends via CNetworkSession__send_data_timed. |
| 0x00E48460 | 1111 | CGameMode__save_shortcut_list_to_file | Saves the shortcut list to a Lua file. Builds a table string from the shortcut entries at this+0xFF8 (format: 'tbl = {...}'), creates the 'savedata/shortcutlist/' directory if needed, and writes the Lua file named by character ID. Generates the table format with formatted entries for each shortcut. |
| 0x00E488C0 | 111 | CGameMode__set_equip_sprite_mode | Sets the equipment sprite display mode at this+0xEEC. If param_3 < 2 and param_4 not in extended headgear range, classifies the item type (base vs costume) and sets 0 or 1. Otherwise stores param_3 directly. |
| 0x00E48930 | 72 | CGameMode__toggle_itemdrop_notification | Toggles item drop notification. If param_2 is 1, sets flag at this+0x7F7C and shows message 0xCD2 (enabled). Otherwise clears global DAT_0173A5B4 and shows message 0xCD3 (disabled). Chat message color is 0x64FFFF (green). |
| 0x00E48980 | 63 | toggle_show_hp_bar | Toggles the HP bar display option. Sets global DAT_01733C34 to (param_1 == 1). Shows message 0xA14 (enabled) or 0xA13 (disabled) in green chat color. |
| 0x00E489C0 | 316 | toggle_navigation_option | Toggles a navigation option. Shows message 0x1105 (enabled) or 0x111B (disabled) based on param_1. Calls GameSettings__set_option_enabled with option ID 0x128, then syncs the navigation window checkbox. |
| 0x00E48B00 | 108 | CGameMode__rebuild_storage_from_linked_list | Rebuilds the storage array at this+0x811C from linked list at this+0x1710. Clears existing storage, then iterates the linked list. For items with type==6, copies them into the storage vector (stride 0xF8). Grows the vector as needed. |
| 0x00E48B70 | 34 | notify_itemlist_window_update | Notifies the item list window to update. If DAT_01457860 (item list window pointer) is not null, calls its virtual method at vtable+0x94 with event type 0x6A and subtype 0x23F. |
| 0x00E48BA0 | 93 | send_savedata_sync_packet | Sends a savedata synchronization packet (type 0x2D8) with 3-byte payload. Encodes param_1 as a byte, applies two rounds of encoding, and sends via CNetworkSession. Similar to send_savedata_request_packet but with smaller payload. |
| 0x00E48E90 | 508 | CShopItemList__parse_items_from_buffer | Parses shop items from a binary buffer into a linked list of CShopItem entries (0x100 bytes each). Copies param_3 bytes from param_4 at offset param_2, iterates parsing each item via CItemDesc__parse_binary_packet, constructing CShopItem nodes and inserting into a doubly-linked list. Cleans up strings after each item. |
| 0x00E49090 | 361 | CShopItemDesc__parse_multi_items_from_buffer | Parses up to 10 shop item descriptions from a binary buffer. Copies param_3 bytes from param_4 at offset param_2, then loops parsing each item via CItemDesc__parse_binary_packet and copying results. Handles string cleanup between iterations. |
| 0x00E49200 | 123 | CGameMode__set_job_class_and_refresh_ui | Sets the job class ID at this+0x1628 and refreshes UI if the 4th-class status changed. If transitioning to/from a 4th class, toggles shop window size and sends UI event 0x144. Refreshes shop window and timer afterward. |
| 0x00E49280 | 16 | CGameMode__set_storage_capacity | Simple setter. Stores param_2 at this+0x8148 (storage capacity field). |
| 0x00E49290 | 57 | CGameMode__set_map_id_and_notify | Sets the current map ID at this+0x5BC0 and notifies the skill tree window (type 0x272E) with event 0x3C to refresh job-specific skill data. |
| 0x00E49380 | 93 | send_savedata_load_packet | Sends a savedata load request packet (type 0x2D8) with 2-byte payload. Similar to send_savedata_sync_packet but with smaller payload size. |
| 0x00E493E0 | 269 | CGameMode__toggle_periodic_event | Toggles a periodic UI event. If param_2 is 1 and no existing event, creates a new timed event with 1000ms initial delay and 3000ms repeat interval via CrashReport__collect_system_info, validates with CAntiCheat, and registers in event manager at this+0x7F90. If disabling, clears the event's active flag. |
| 0x00E497F0 | 238 | CGameMode__update_ammo_slot | Updates the ammo equipment slot. Stores param_2 at this+0x7EC8. If param_2 is 0, removes ammo ID 0x2B7 from the global equip list at DAT_014A6938. If non-zero, adds 0x2B7 if not present. Triggers entity UI update callback (event 0x2C) afterward. |
| 0x00E498E0 | 66 | cleanup_string_with_seh | Cleanup function that destroys an STL string within an SEH frame. Simple wrapper for STL_string_dtor. |
| 0x00E49930 | 187 | CChatMgr__process_chat_command | Processes a chat command string. Validates the string is non-null/non-empty and that the global handler (DAT_01457848) exists. Looks up the command ID in an rbtree at this+0x7F94. If found, dispatches the message via a virtual call and CUIWindowMgr__dispatch_chat_message with type 0x9A, then calls cleanup via FUN_00e49de0. |
| 0x00E499F0 | 93 | destroy_map_tree_range | Destroys a range of std::map trees. Iterates from param_1 to param_2 in 8-byte steps, calling std__map_int__destroy_tree on each. Used for cleanup of map/tree arrays. |
| 0x00E49C70 | 153 | init_linked_list_array | Initializes an array of param_2 linked lists. Allocates a 0x18-byte sentinel node for each list (self-referencing head/tail/parent pointers with flag 0x101). Returns pointer past the last initialized entry. |
| 0x00E49D10 | 120 | copy_map_tree_range | Copy-constructs a range of std::map trees. Iterates from param_1 to param_2 in 8-byte steps, calling std__map__copy_ctor on each. |
| 0x00E49DE0 | 350 | rbtree_erase_range_and_cleanup | Erases a range of nodes from a red-black tree, freeing each node (0x14 bytes). Finds lower and upper bounds for the given key, then iterates through matching nodes calling the packet operation handler and deleting each node. If erasing all nodes, clears the tree entirely. |
| 0x00E4A180 | 27 | append_vector_data | Appends vector data from param_2 to the vector at param_1. Simple wrapper: calls STL_vector_insert_range with param_2's begin and end pointers. |
| 0x00E4A350 | 243 | CGameEntity__ctor | Constructor for CGameEntity. Calls CEntity__ctor, sets CGameMode vtable, initializes vectors for sub-objects at offsets 0x10C-0x10E. Sets mounted job to 0x7E, walk speed to 36000, and initializes various game state flags. Re-sets vtable to CEntity variant at the end. |
| 0x00E4A4D0 | 118 | CMapSprite__ctor | Constructor for CMapSprite. Calls CSprite__ctor_base, sets vtable to CMapSprite vtable, loads texture and act resources from global paths, initializes +0x138=0. |
| 0x00E4A6D0 | 231 | CGameEntity__ctor_with_param | Constructor for CGameEntity with an initial parameter stored at field 0x106. Otherwise identical to CGameEntity__ctor - calls CEntity__ctor, sets CGameMode vtable, initializes walk speed to 36000, etc. |
| 0x00E4A960 | 71 | CMapSprite__dtor | Destructor for CMapSprite. Sets vtable to PTR_FUN_011ad400, then calls CSprite__dtor_base. |
| 0x00E4AA30 | 221 | CGameEntity__dtor | Destructor for CGameEntity. Unregisters UI window (field 0x99), destroys attached 3D object, dispatches effect update (0x18) for each effect in the vector at 0x10C, frees the effect vector, then calls CEntity__dtor. |
| 0x00E4ACD0 | 99 | CMapSprite__scalar_deleting_dtor | Scalar deleting destructor for CMapSprite. Sets vtable to PTR_FUN_011ad400, calls CSprite__dtor_base, frees 0x140 bytes if bit 0 set. |
| 0x00E4ADE0 | 38 | CGameMode__scalar_deleting_dtor | Scalar deleting destructor for CGameMode. Calls the destructor (FUN_00e4aa30), then frees memory (0x440 bytes) if bit 0 of param_2 is set. |
| 0x00E4B400 | 210 | get_trap_effect_model_path | Returns the RSM2 model path for a trap/skill effect based on the player's effective job ID. Maps various hunter trap IDs (0x8F-0x99, 0xCB, 0xD2-0xD9, 0xE5-0xE6) and 4th class trap IDs (0x5174-0x5177) to their respective model files. Returns null if no mapping found. |
| 0x00E4B630 | 36 | is_guild_skill_type | Checks if a value is a guild skill type. Returns 1 for values 3, 0x12, 0x1B, 0x1F. Returns 0 for all others. |
| 0x00E4B8B0 | 82 | normalize_2d_vector | Normalizes a 2D vector in-place. Computes magnitude = sqrt(x*x + y*y), then divides both x and y by the magnitude. Returns the normalized vector pointer. |
| 0x00E55510 | 129 | rbtree_node_move_construct | Move-constructs a red-black tree node. Copies 1 byte flag from param_2, copies 16 bytes of data and an 8-byte string from param_3 (using move semantics, resets source string to empty). Returns param_1. |
| 0x00E555A0 | 477 | CTimerMgr__ctor | Constructor for CTimerMgr (timer/scheduler manager). Initializes base class, critical section, creates circular linked lists for timer entries (0xC nodes), event entries (0x28 nodes), and command entries (0x20 nodes). Sets multiple vtable pointers during construction. Initializes various subsystem stubs. |
| 0x00E55780 | 111 | rbtree_destroy_all_nodes | Destroys all nodes in a red-black tree. Iterates from the first real node (checking is_nil flag at +0xD), calls stub_005edaf0 to clean up node data, frees each 0x20-byte node, then frees the sentinel node. |
| 0x00E55870 | 65 | rbtree_dtor_wrapper | Red-black tree destructor wrapper. Calls rbtree_destroy_all_nodes within an SEH frame. |
| 0x00E558C0 | 126 | CTimerMgr__dtor_00e558c0 | Destructor for CTimerMgr. Sets vtable, deletes critical section at this+0x3C, cleans up internal resources via stub_nop/STL_lib_func, and clears a 0x120-byte vector. |
| 0x00E55940 | 377 | CTimerMgr__dtor_00e55940 | Destructor for CTimerMgr. Destroys subsystem stubs, rbtree, vectors, linked lists (timer, event, command entries), deletes critical section, and frees all allocated memory in reverse construction order. |
| 0x00E571D0 | 150 | CTimerMgr__scalar_deleting_dtor_00e571d0 | CTimerMgr scalar deleting destructor. Deletes critical section, calls base destructors, clears vector, optionally frees memory (0x148 bytes). |
| 0x00E572D0 | 162 | update_window_drag | Updates window position during drag operation. Checks if dragging flag is set, gets cursor position, moves window by delta. Releases drag on left mouse button up, optionally clips cursor if game option 0x10F is set. |
| 0x00E57380 | 273 | process_message_loop_and_window_drag | Main message pump with window drag support. Peeks/dispatches all Windows messages, handles IME virtual key translation (WM_KEYDOWN 0xE5). Also updates window drag position and checks mouse release. |
| 0x00E574A0 | 1498 | destroy_all_game_singletons | Master shutdown function that destroys all game singletons in order. Recreates-then-destroys GameSettings, CItemDB, CPaidItemMgr, CUIWindowPositionMgr, CEffectCallbackContainer, CLuaState, and many more. Waits up to 3 seconds for pending operations, then destroys network, quest, roulette, hash, effect, and other subsystems. |
| 0x00E57A80 | 208 | init_skin_directory | Initializes skin directory. Gets current directory, formats path with "_skin/default" suffix, calls recursive_delete_directory to clean old skin files, then performs additional initialization. |
| 0x00E57B50 | 628 | recursive_delete_directory_00e57b50 | Recursively deletes a directory and all its contents. Handles read-only files by clearing attributes. Checks for ".bmp" extension to handle specially. Skips "." and ".." entries. Removes parent directory after contents are deleted. |
| 0x00E57DD0 | 136 | clip_cursor_to_client_rect | Clips the cursor to the client area of the main game window. Gets client rect, converts to screen coordinates, then calls ClipCursor to confine the mouse. |
| 0x00E57E60 | 344 | launch_child_process | Launches a child process using CreateProcessA. Formats command line with optional server connection parameters (IP, port, etc.) depending on game mode flags. Returns process handle. |
| 0x00E57FC0 | 291 | process_messages_drag_and_destroy_window | Processes Windows messages, updates window drag, then calls CoUninitialize and DestroyWindow on the main game window. Used during shutdown sequence. |
| 0x00E58100 | 1678 | create_main_game_window | Creates the main game window. Registers WNDCLASS with custom WndProc, calculates window position (centered on screen), adjusts for taskbar, handles fullscreen mode (WS_POPUP). Uses encrypted strings for FindWindow check and error messages. Shows and updates window on success. |
| 0x00E58790 | 135 | is_windows_9x_platform | Checks if running on Windows 9x (Win95/98/ME) by calling GetVersionExA and checking dwPlatformId == 1 (VER_PLATFORM_WIN32_WINDOWS). |
| 0x00E58820 | 553 | check_and_launch_updater_process | Checks command line for encrypted updater keyword. If found, extracts the rest of the command line after the keyword and launches it as a new process via CreateProcessA. Returns 1 if updater was launched, 0 otherwise. |
| 0x00E58A60 | 1484 | perform_file_update_and_rename | Self-update file management. Checks for encrypted file paths (likely update files), deletes old backup via SHFileOperation, renames current files to backup names, renames new files to active names. Uses multiple TLS encrypted strings for file paths. |
| 0x00E59030 | 2441 | read_game_settings_from_registry | Reads game settings from Windows registry (HKEY_LOCAL_MACHINE). Queries multiple encrypted value names for display settings, sound options, IP addresses, and other configuration. Uses xor_decrypt_buffer for all registry key/value names. |
| 0x00E599C0 | 9 | thunk_to_ClipCursor_00e599c0 | Wrapper that calls ClipCursor with NULL to release cursor clipping |
| 0x00E599D0 | 1136 | scan_processes_for_blocked_tools | Anti-cheat: Scans running processes using CreateToolhelp32Snapshot. Loads encrypted DLL, gets snapshot API addresses, iterates processes comparing uppercased EXE names against a list of blocked tool names (decrypted from TLS). Returns 1 if a blocked tool is found. |
| 0x00E59E60 | 787 | scan_running_processes_for_blocked_modules | Anti-cheat: Scans running processes using PSAPI (EnumProcesses/GetModuleFileNameEx). Loads encrypted DLL name, enumerates all PIDs, opens each process, gets module filename, uppercases it, compares against blocked module names. Returns 1 if blocked module found. |
| 0x00E5A190 | 96 | set_window_active_state | Sets window active/inactive state. When active (param!=0): sets process priority from global, optionally clips cursor. When inactive (param==0): sets NORMAL_PRIORITY_CLASS, releases cursor clip, calls CMapInfoMgr warp entry iteration. |
| 0x00E5A1F0 | 308 | init_directx_renderer | Initializes DirectX renderer. Calls text render singleton init, then stub_0056a6a0 with display mode and window handle. Shows encrypted error message if initialization fails. Returns 1 on success, 0 on failure. |
| 0x00E5A330 | 7626 | game_init_all_subsystems | Master game subsystem initialization. Called by WinMain_game_entry. Creates all singletons (EffectManager, ItemDB, SpriteMap, PacketQueue, QuestSystem, TownInfoMgr, NavDataMgr, etc.), loads Lua configs (item_sold, towninfo, mapsky, champion_monster, sprite groups, rune system), initializes packet handlers, window position manager, and anti-cheat. 7.6K bytes. |
| 0x00E5C100 | 802 | prompt_and_apply_self_update | Prompts user to apply a self-update. Performs file update/rename first, checks if update file exists. Formats message with encrypted format string (version-dependent), shows MessageBox asking user to confirm. If confirmed: chmods old file writable, unlinks it, renames update to original, launches child process. |
| 0x00E5C430 | 1055 | main_window_proc | Main window procedure (WndProc) for the game. Handles: WM_KEYDOWN/WM_KEYUP (keyboard input, chat, shortcuts), WM_CHAR (character input to CInputMgr), WM_SYSCOMMAND (move/minimize/maximize/restore), mouse messages, WM_ACTIVATE/WM_SETFOCUS, WM_CLOSE (save hotkeys, open URL for region 0xB), WM_SETCURSOR, WM_GETMINMAXINFO. Also handles IME virtual key translation and window drag. |
| 0x00E5CE60 | 111 | get_or_create_sprite_map_singleton | Gets or creates the SpriteMap singleton. Allocates 0xC bytes and calls SpriteMap constructor if not yet created. Stores in global DAT_013898f8. |
| 0x00E5CED0 | 220 | get_or_create_packet_queue_singleton | Gets or creates the CPacketQueue singleton. Allocates 0x14 bytes, sets vtable, creates two red-black tree nodes (0x1C bytes each). Stores in global DAT_0138cf30. |
| 0x00E5CFB0 | 111 | get_or_create_lua_state_singleton | Gets or creates the CLuaState singleton. Allocates 8 bytes and calls CLuaState constructor if not yet created. Stores in global DAT_017203dc. |
| 0x00E5D020 | 111 | get_or_create_item_db_singleton | Gets or creates the CItemDB singleton. Allocates 0xC bytes and calls CItemDB constructor if not yet created. Stores in global DAT_0138d288. |
| 0x00E5D090 | 111 | get_or_create_paid_item_mgr_singleton | Gets or creates the CPaidItemMgr singleton. Allocates 0xC bytes and calls CPaidItemMgr constructor if not yet created. Stores in global DAT_0138d28c. |
| 0x00E5D110 | 628 | add_patch_filename_to_list | Adds a patch filename to the global patch list (vector at DAT_0173a6e0). Lowercases the filename, checks for duplicates by comparing against existing entries. If not found, appends as a new STL string entry. Used during GRF patch loading. |
| 0x00E5D390 | 11449 | WinMain_game_entry | Main game entry point (WinMain). Called from CRT startup (scrt_common_main_seh). Creates mutex, initializes winsock, creates main window, loads lua configs/fonts, runs message loop (PeekMessageA/TranslateMessage/DispatchMessageA), handles anti-cheat, destroys all windows and cleans up on exit. 11K bytes. |
| 0x00E60824 | 6 | D3DXMatrixPerspectiveFovLH | Import thunk: indirect jump to D3DXMatrixPerspectiveFovLH. |
| 0x00E6082A | 6 | D3DXSaveSurfaceToFileA | Import thunk: indirect jump to D3DXSaveSurfaceToFileA. |
| 0x00E60830 | 6 | D3DXLoadSurfaceFromSurface | Import thunk: indirect jump to D3DXLoadSurfaceFromSurface. |
| 0x00E60836 | 6 | D3DXLoadSurfaceFromMemory | Import thunk: indirect jump to D3DXLoadSurfaceFromMemory. |
| 0x00E6083C | 6 | D3DXFilterTexture | Import thunk: indirect jump to D3DXFilterTexture. |
| 0x00E60956 | 6 | K32GetProcessMemoryInfo | Import thunk: indirect jump to K32GetProcessMemoryInfo. |
| 0x00E60D04 | 6 | ImmGetContext | Import thunk: indirect jump to ImmGetContext. |
| 0x00E60D0A | 6 | ImmReleaseContext | Import thunk: indirect jump to ImmReleaseContext. |
| 0x00E60D10 | 6 | ImmGetConversionStatus | Import thunk: indirect jump to ImmGetConversionStatus. |
| 0x00E60D16 | 6 | ImmSetConversionStatus | Import thunk: indirect jump to ImmSetConversionStatus. |
| 0x00E60D1C | 6 | ImmGetCompositionStringA | Import thunk: indirect jump to ImmGetCompositionStringA. |
| 0x00E60D22 | 6 | ImmGetCompositionStringW | Import thunk: indirect jump to ImmGetCompositionStringW. |
| 0x00E60D28 | 6 | ImmGetCandidateListW | Import thunk: indirect jump to ImmGetCandidateListW. |
| 0x00E60D2E | 6 | ImmNotifyIME | Import thunk: indirect jump to ImmNotifyIME. |
| 0x00E60D34 | 6 | ImmGetVirtualKey | Import thunk: indirect jump to ImmGetVirtualKey. |
| 0x00E60DA0 | 6 | _Xbad_alloc | Import thunk: indirect jump to _Xbad_alloc (throws bad_alloc exception). |
| 0x00E60DA6 | 6 | _Mbrtowc | Import thunk: indirect jump to _Mbrtowc (multibyte to wide char conversion). |
| 0x00E60DCA | 6 | _Xlength_error | Import thunk: indirect jump to _Xlength_error (throws length_error exception). |
| 0x00E60DD0 | 6 | _Xout_of_range | Import thunk: indirect jump to _Xout_of_range (throws out_of_range exception). |
| 0x00E60DE4 | 36 | ___std_get_string_size_without_trailing_whitespace@8 | STL template instantiation: std get string size without trailing whitespace@8 |
| 0x00E60E08 | 41 | ___std_system_error_allocate_message@8 | CRT helper: allocates and formats a system error message string for std::system_error. |
| 0x00E60E31 | 6 | LocalFree | Import thunk: indirect jump to LocalFree. |
| 0x00E60E37 | 6 | _Syserror_map | Import thunk: indirect jump to _Syserror_map. |
| 0x00E60E3D | 6 | _Winerror_map | Import thunk: indirect jump to _Winerror_map. |
| 0x00E60E57 | 49 | ~_Fac_node | Destructor for locale facet node: cleans up the facet and deletes the node. |
| 0x00E60ED1 | 44 | _Facet_Register | CRT locale _Facet_Register: registers a locale facet node in the global facet registry. |
| 0x00E60EFD | 6 | _Strcoll | Import thunk: indirect jump to _Strcoll. |
| 0x00E60F03 | 6 | _Strxfrm | Import thunk: indirect jump to _Strxfrm. |
| 0x00E60F2D | 6 | _Init | Import thunk: indirect jump to _Init (locale initialization). |
| 0x00E60F33 | 6 | _Getgloballocale | Import thunk: indirect jump to _Getgloballocale. |
| 0x00E60FC3 | 6 | _Fiopen | Import thunk: indirect jump to _Fiopen (file open helper). |
| 0x00E60FC9 | 6 | _Xregex_error | Import thunk: indirect jump to _Xregex_error. |
| 0x00E60FCF | 6 | _Xbad_function_call | Import thunk: indirect jump to _Xbad_function_call. |
| 0x00E60FDB | 6 | _Incref | Import thunk: indirect jump to _Incref. |
| 0x00E6103E | 33 | reverse_copy_words | Reverse copy words, small utility function |
| 0x00E6105F | 31 | reverse_copy_dwords | Reverse copy dwords, small utility function |
| 0x00E6107E | 39 | reverse_copy_qwords | Reverse copy qwords, small utility function |
| 0x00E610A5 | 33 | _Reverse_tail<unsigned_char*> | STL _Reverse_tail for unsigned char pointers: reverses remaining bytes after SIMD-width processing. |
| 0x00E610C6 | 41 | _Reverse_tail<unsigned_short*> | STL _Reverse_tail for unsigned short pointers: reverses remaining 2-byte elements after SIMD-width processing. |
| 0x00E610EF | 37 | _Reverse_tail<unsigned_long*> | STL _Reverse_tail for unsigned long pointers: reverses remaining 4-byte elements after SIMD-width processing. |
| 0x00E61114 | 55 | reverse_pairs_in_place | Reverses an array of 8-byte pairs in-place by swapping from both ends toward the center. |
| 0x00E6114B | 13 | advance_iterator_by_offset | Advances an iterator/pointer by adding param_2 to *param_1. STL iterator advance helper. |
| 0x00E61158 | 13 | advance_iterator_by_offset_00e61158 | Advances an iterator/pointer by adding param_2 to *param_1. STL iterator advance helper (duplicate). |
| 0x00E61165 | 11 | iterator_distance | Returns the distance between two iterators: param_2 - param_1. |
| 0x00E61170 | 132 | simd_reverse_copy_bytes | SIMD-optimized reverse copy of byte array. Uses AVX2 vpermq+vpshufb for 32-byte chunks, SSE pshufb for 16-byte chunks, then byte-by-byte for remainder. Reverses element order within each SIMD lane. |
| 0x00E611F4 | 138 | simd_reverse_copy_words | SIMD-optimized reverse copy of 2-byte (word) array. Uses AVX2 for 32-byte chunks, SSE for 16-byte chunks, then word-by-word for remainder. Reverses word element order. |
| 0x00E6127E | 128 | simd_reverse_copy_dwords | SIMD-optimized reverse copy of 4-byte (dword) array. AVX2 for 32-byte chunks with vpermq+vpshufd, SSE4 manual shuffle for 16-byte chunks, dword-by-dword for remainder. |
| 0x00E612FE | 129 | simd_reverse_copy_qwords | SIMD-optimized reverse copy of 8-byte (qword) array. AVX2 vpermq for 32-byte chunks, SSE shuffle for 16-byte chunks, qword-by-qword for remainder. |
| 0x00E6137F | 173 | simd_reverse_bytes_in_place | SIMD-optimized in-place byte array reversal. Swaps from both ends using AVX2 vpshufb for 32-byte blocks, SSE pshufb for 16-byte blocks, byte-by-byte for center. |
| 0x00E6142C | 181 | simd_reverse_words_in_place | SIMD-optimized in-place 2-byte (word) array reversal. Swaps from both ends using AVX2/SSE, word-by-word for center. |
| 0x00E614E1 | 162 | simd_reverse_dwords_in_place | SIMD-optimized in-place 4-byte (dword) array reversal. Swaps from both ends using AVX2 vpshufd/SSE, dword-by-dword for center. |
| 0x00E61583 | 174 | simd_reverse_qwords_in_place | SIMD-optimized in-place 8-byte (qword) array reversal. Swaps from both ends using AVX2 vpermq/SSE, qword-by-qword for center. |
| 0x00E61631 | 33 | ___std_swap_ranges_trivially_swappable | STL helper: swaps trivially-swappable ranges of memory using xor-based byte swapping. |
| 0x00E61652 | 171 | simd_swap_ranges | SIMD-optimized swap_ranges. Swaps memory between two non-overlapping buffers using AVX2 32-byte blocks, SSE 16-byte blocks, dword-by-dword, then byte-by-byte for remainder. |
| 0x00E616FD | 6 | _Xinvalid_argument | Import thunk: indirect jump to _Xinvalid_argument. |
| 0x00E61703 | 6 | _Xtime_get_ticks | Import thunk: indirect jump to _Xtime_get_ticks. |
| 0x00E6172D | 6 | setprecision | Import thunk: indirect jump to setprecision. |
| 0x00E61733 | 6 | _Query_perf_counter | Import thunk: indirect jump to _Query_perf_counter. |
| 0x00E61739 | 6 | _Query_perf_frequency | Import thunk: indirect jump to _Query_perf_frequency. |
| 0x00E6173F | 6 | _Random_device | Import thunk: indirect jump to _Random_device. |
| 0x00E61745 | 5 | operator= | 0xa61745 1 ??4_Init_locks@std@@QAEAAV01@ABV01@@Z |
| 0x00E6174A | 257 | get_codepage_info_with_lead_bytes | Gets code page info including lead byte ranges. Calls GetCPInfoExW, stores CodePage and MaxCharSize, then builds a bitfield of lead byte values from the LeadByte pairs. Returns 0 on success, GetLastError() on failure. |
| 0x00E61851 | 6 | uncaught_exceptions | Import thunk: indirect jump to uncaught_exceptions. |
| 0x00E6189F | 6 | setw | Import thunk: indirect jump to setw. |
| 0x00E618B7 | 6 | __std_atomic_wait_direct | Import thunk: indirect jump to __std_atomic_wait_direct. |
| 0x00E618C3 | 6 | _Thrd_detach | Import thunk: indirect jump to _Thrd_detach. |
| 0x00E618C9 | 6 | _Thrd_sleep | Import thunk: indirect jump to _Thrd_sleep. |
| 0x00E618CF | 6 | _Cnd_do_broadcast_at_thread_exit | Import thunk: indirect jump to _Cnd_do_broadcast_at_thread_exit. |
| 0x00E618D5 | 6 | _Throw_C_error | Import thunk: indirect jump to _Throw_C_error. |
| 0x00E618DB | 6 | _Throw_Cpp_error | Import thunk: indirect jump to _Throw_Cpp_error. |
| 0x00E6192B | 39 | CComCritSecLock<class_ATL::CComCriticalSection> | ATL CComCritSecLock constructor: enters the critical section and sets the locked flag. |
| 0x00E6195F | 83 | CAtlBaseModule | ATL CAtlBaseModule constructor: initializes the base module with resource instance list and critical section. |
| 0x00E619D6 | 35 | _ATL_BASE_MODULE70 | ATL _ATL_BASE_MODULE70 constructor: initializes the ATL base module structure with module handle and resource instances. |
| 0x00E61A15 | 22 | ~CAtlBaseModule | ATL CAtlBaseModule destructor: deletes the critical section. |
| 0x00E61A36 | 36 | CSimpleArray__get_at_checked | ATL CSimpleArray bounds-checked element access. Returns pointer to element at index param_2 (stride 4). Raises STATUS_ARRAY_BOUNDS_EXCEEDED if out of range. |
| 0x00E61A5B | 129 | CSimpleArray__push_back | ATL CSimpleArray push_back. Appends a dword element. If at capacity, doubles buffer via _recalloc (max 0x20000000 elements). Validates param_2 is not inside current buffer. Returns 1 on success, 0 on failure. |
| 0x00E61ADD | 51 | AddResourceInstance | ATL AddResourceInstance: adds an HINSTANCE to the resource instance array. |
| 0x00E61B10 | 58 | check_errno_and_throw_hresult | Converts C runtime errno values to HRESULT and throws. ENOMEM(12)->E_OUTOFMEMORY, EINVAL(22)/ERANGE(34)->E_INVALIDARG, EEXIST(80)->no-op, others->E_FAIL. |
| 0x00E61B4B | 69 | GetHInstanceAt | ATL GetHInstanceAt: returns the HINSTANCE at the given index in the resource instance array. |
| 0x00E61B94 | 43 | Init | ATL CSimpleArray Init: initializes the array to empty state (null pointer, zero count, zero alloc). |
| 0x00E61BBF | 26 | InternalSetAtIndex | ATL CSimpleArray InternalSetAtIndex: sets the element at the given index by direct memory copy. |
| 0x00E61BF6 | 29 | RemoveAll | ATL CSimpleArray RemoveAll: frees the array buffer and resets to empty state. |
| 0x00E61C13 | 78 | RemoveAt | ATL CSimpleArray RemoveAt: removes element at given index by shifting subsequent elements down via memmove. |
| 0x00E61C61 | 93 | RemoveResourceInstance | ATL RemoveResourceInstance: finds and removes an HINSTANCE from the resource instance array. |
| 0x00E61CE3 | 81 | memmove_s | CRT memmove_s: safe version of memmove with buffer size validation before copying. |
| 0x00E61D34 | 20 | win32_error_to_hresult | Converts a Win32 error code to an HRESULT by ORing with 0x80070000 if the value is positive. |
| 0x00E61D48 | 76 | _memmove_s | CRT _memmove_s: internal implementation of safe memmove with parameter validation. |
| 0x00E61E53 | 68 | find_pe_section | CRT find_pe_section: searches the PE section headers for one containing the given RVA. |
| 0x00E61E9C | 52 | is_potentially_valid_image_base | CRT is_potentially_valid_image_base: checks if a pointer looks like a valid PE image base (MZ signature check). |
| 0x00E61ED7 | 50 | ___scrt_acquire_startup_lock | CRT __scrt_acquire_startup_lock: acquires a lock to serialize CRT startup/shutdown operations. |
| 0x00E61F6E | 52 | ___scrt_dllmain_exception_filter | CRT __scrt_dllmain_exception_filter: SEH exception filter for DllMain, handles C++ exceptions during DLL initialization. |
| 0x00E61FD2 | 57 | ___scrt_initialize_crt | CRT __scrt_initialize_crt: initializes the C runtime library components in the correct order. |
| 0x00E6200B | 135 | ___scrt_initialize_onexit_tables | CRT __scrt_initialize_onexit_tables: sets up the atexit/onexit function tables for CRT cleanup. |
| 0x00E62092 | 126 | ___scrt_is_nonwritable_in_current_image | CRT __scrt_is_nonwritable_in_current_image: checks if a memory address is in a read-only PE section. |
| 0x00E62126 | 29 | ___scrt_release_startup_lock | CRT __scrt_release_startup_lock: releases the CRT startup/shutdown serialization lock. |
| 0x00E62143 | 40 | ___scrt_uninitialize_crt | CRT __scrt_uninitialize_crt: uninitializes the C runtime library during shutdown. |
| 0x00E6216B | 45 | __onexit | CRT _onexit: registers a function to be called at normal program termination. |
| 0x00E62198 | 35 | register_atexit_function | Registers a function to be called at process exit. If DAT_0173ae78 is -1 (uninitialized), calls crt_at_quick_exit. Otherwise calls register_onexit_function. |
| 0x00E621BB | 21 | _atexit | CRT atexit: registers a function to be called at normal program termination (wrapper around _onexit). |
| 0x00E621DE | 5 | free | CRT free: releases allocated memory back to the heap. |
| 0x00E621F0 | 52 | __allmul | Compiler intrinsic __allmul: performs 64-bit integer multiplication (EDX:EAX = arg1 * arg2). |
| 0x00E62230 | 31 | __aullshr | Compiler intrinsic __aullshr: performs unsigned 64-bit right shift (EDX:EAX >>= CL). |
| 0x00E62352 | 36 | __Init_thread_abort | CRT __Init_thread_abort: aborts a thread-safe static initialization attempt. |
| 0x00E62376 | 74 | init_thread_epoch_counter | MSVC thread-safe static init: increments global epoch counter under critical section, stores to TLS slot at offset 0x116c4, calls __Init_thread_notify to wake waiting threads. |
| 0x00E623C0 | 82 | init_thread_header | MSVC _Init_thread_header. Acquires thread-safe static initialization lock. If guard is 0, sets to -1 (claiming it). If -1 (another thread initializing), waits 100ms and retries. If already initialized, updates TLS epoch. |
| 0x00E6241E | 54 | __Init_thread_notify | CRT __Init_thread_notify: notifies waiting threads that a thread-safe static initialization has completed. |
| 0x00E62460 | 78 | __Init_thread_wait | CRT __Init_thread_wait: waits for another thread to complete thread-safe static initialization. |
| 0x00E62510 | 43 | __alloca_probe | CRT __alloca_probe: probes stack pages to ensure they are committed before allocating large stack frames. |
| 0x00E627F8 | 54 | dtol3_getbits | CRT dtol3_getbits: extracts bits from a double-to-long conversion intermediate value. |
| 0x00E62908 | 35 | bad_alloc__scalar_deleting_dtor | std::bad_alloc scalar deleting destructor. Sets vtable pointer and optionally frees 0xC bytes. |
| 0x00E6292B | 40 | gs_check_failure_handler | GS (/GS) stack buffer overflow handler. Clears the exception filter, calls UnhandledExceptionFilter, then terminates the process with STATUS_STACK_BUFFER_OVERRUN (0xC0000409). |
| 0x00E62953 | 250 | report_gs_check_failure | Reports /GS stack cookie check failure. Checks if IsProcessorFeaturePresent(FASTFAIL_AVAILABLE), triggers __fastfail if so. Saves full register context to globals and calls gs_check_failure_handler. |
| 0x00E62A4D | 12 | report_range_check_failure | Reports /GS range check failure (code 8). Calls report_gs_failure_with_code. |
| 0x00E62A59 | 207 | report_gs_failure_with_code | Reports /GS failure with a specific failure code. Same pattern as report_gs_check_failure but with a configurable failure code parameter. |
| 0x00E62B28 | 277 | report_gs_failure_with_params | Reports /GS failure with exception parameters. Saves registers, copies up to 14 extra parameters into the exception record, then calls gs_check_failure_handler. |
| 0x00E62C40 | 170 | __alldiv | Compiler intrinsic __alldiv: performs signed 64-bit integer division (EDX:EAX = dividend / divisor). |
| 0x00E62CF0 | 31 | __allshl | Compiler intrinsic __allshl: performs signed 64-bit left shift (EDX:EAX <<= CL). |
| 0x00E62D10 | 104 | __aulldiv | Compiler intrinsic __aulldiv: performs unsigned 64-bit integer division. |
| 0x00E62D80 | 149 | __aulldvrm | Compiler intrinsic __aulldvrm: performs unsigned 64-bit division and returns both quotient and remainder. |
| 0x00E62E20 | 117 | __aullrem | Compiler intrinsic __aullrem: performs unsigned 64-bit modulo operation. |
| 0x00E62E9E | 5 | free | CRT free: releases allocated memory back to the heap. |
| 0x00E63170 | 22 | __alloca_probe_16 | CRT __alloca_probe_16: probes stack pages with 16-byte alignment for large stack allocations. |
| 0x00E63186 | 22 | __alloca_probe_8 | CRT __alloca_probe_8: probes stack pages with 8-byte alignment for large stack allocations. |
| 0x00E63201 | 20 | seh_array_unwind_if_failed | SEH funclet: conditionally calls __ArrayUnwind if AL is 0 (construction failed). Used by MSVC exception handling for array constructor cleanup. |
| 0x00E6328F | 16 | seh_array_unwind_if_failed_regs | SEH funclet: conditionally calls __ArrayUnwind using register-passed parameters (ESI=ptr, EBX=size, EDI=count) if AL is 0. |
| 0x00E6329F | 46 | cxx_terminate_on_exception | C++ exception handler: checks if exception record magic matches 0xE06D7363 (MSVC C++ exception). If so, sets current exception and context, then calls terminate(). |
| 0x00E632CE | 76 | __ArrayUnwind | CRT __ArrayUnwind: unwinds (destructs) array elements during exception handling when constructor throws. |
| 0x00E6337A | 125 | tls_callback_1 | TLS callback 1: called by the OS when threads are created/destroyed, handles thread-local storage initialization. |
| 0x00E63407 | 14 | simple_assign_dword | Simple thiscall assignment: copies param_2 to *param_1. Returns param_1. |
| 0x00E6343B | 108 | tls_register_destructor | Registers a TLS destructor function. Stores the destructor pointer in the TLS destructor list at offset 0x116c8. Allocates new 0x80-byte blocks when the 30-entry block is full. Used by thread-safe static initialization. |
| 0x00E634B0 | 223 | __alldvrm | Compiler intrinsic __alldvrm: performs signed 64-bit division returning both quotient and remainder. |
| 0x00E6358F | 127 | tls_callback_0 | TLS callback 0: called by the OS when threads are created/destroyed, handles thread-local storage initialization. |
| 0x00E63630 | 178 | __allrem | Compiler intrinsic __allrem: performs signed 64-bit modulo operation. |
| 0x00E636E2 | 465 | detect_cpu_features | Detects CPU features (SSE2, SSE4.2, AVX, AVX2, AVX-512). Uses CPUID to check vendor (Intel), model (Atom workarounds), and feature flags. Sets DAT_0173b1cc (feature level 0-6) and DAT_01361bc0 (feature bitmask). Checks ERMS, XCR0 for OS XSAVE support. |
| 0x00E6391E | 20 | seh_array_unwind_if_failed_v2 | SEH funclet: conditionally calls __ArrayUnwind if AL is 0 (variant with different stack layout). |
| 0x00E63932 | 47 | __except_handler4 | CRT __except_handler4: SEH exception handler with stack cookie validation for /GS security. |
| 0x00E63A30 | 318 | scrt_common_main_seh | MSVC __scrt_common_main_seh - CRT startup with SEH. Initializes CRT, acquires startup lock, calls C++ global constructors (initterm), invokes TLS callbacks, gets command line and show window mode, then calls WinMain (FUN_00e5d390). Calls _cexit on return. |
| 0x00E63BF1 | 10 | entry | PE entry point: the initial function called by the OS loader when the executable starts. |
| 0x00E63C12 | 27 | guard_check_icall_int3 | CFG (Control Flow Guard) indirect call check - int3 variant. Triggers int3 breakpoint if target address is not valid. |
| 0x00E63C2D | 31 | guard_check_icall_fastfail | CFG indirect call check - fastfail variant. Triggers __fastfail (int 0x29) if target address is not valid. |
| 0x00E63C4F | 57 | guard_check_icall_nop_with_callback | CFG indirect call check with callback. Calls DAT_0173b1d4 callback if target is invalid. |
| 0x00E63C88 | 27 | is_valid_icall_target | Tests if an address is a valid CFG indirect call target. Returns true if valid. |
| 0x00E63CA3 | 45 | guard_check_icall_range_int3 | CFG range-based indirect call check - int3 variant. Checks that target is within valid range before allowing indirect call. |
| 0x00E63CD0 | 49 | guard_check_icall_range_fastfail | CFG range-based indirect call check - fastfail variant. |
| 0x00E63D04 | 76 | guard_check_icall_range_with_callback | CFG range-based indirect call check with callback. |
| 0x00E63D50 | 26 | is_valid_icall_range_target | Tests if an address is a valid CFG range target. Returns true if valid. |
| 0x00E63D80 | 12 | ___scrt_is_ucrt_dll_in_use | CRT __scrt_is_ucrt_dll_in_use: returns whether the Universal CRT DLL is being used. |
| 0x00E63D8C | 283 | invoke_watson_handler | Invokes Watson error reporting handler. Triggers __fastfail if available, then creates a synthetic exception (code 0x40000015) and calls UnhandledExceptionFilter. |
| 0x00E63EA7 | 49 | ___scrt_get_show_window_mode | CRT __scrt_get_show_window_mode: retrieves the initial window show state from the process startup info. |
| 0x00E63EE0 | 67 | scrt_is_managed_app | Checks if the current executable is a .NET managed app by examining PE headers for COM descriptor directory entry (PE32 optional header data directory index 14). |
| 0x00E63F23 | 12 | set_terminate_exception_filter | Installs cxx_unhandled_exception_filter as the unhandled exception filter. Called during CRT initialization. |
| 0x00E63F32 | 85 | cxx_unhandled_exception_filter | Unhandled exception filter for C++ exceptions. Checks for MSVC C++ exception magic (0xE06D7363) with specific throw info versions (0x19930520-22, 0x01994000). If matched, sets current exception and calls terminate(). |
| 0x00E63F88 | 8 | reset_DAT_0173b1d8_00e63f88 | Clears global data at 0x0173b1d8 to zero |
| 0x00E63F90 | 69 | __SEH_prolog4 | CRT __SEH_prolog4: sets up a structured exception handling frame with stack cookie protection. |
| 0x00E63FE0 | 20 | __SEH_epilog4 | CRT __SEH_epilog4: tears down a structured exception handling frame and restores the previous handler. |
| 0x00E63FF4 | 29 | bad_alloc__ctor_with_message | std::bad_alloc constructor with const char* message parameter. Sets vtable and what_arg string. |
| 0x00E64011 | 24 | bad_alloc__ctor | std::bad_alloc constructor. Sets what_arg to "bad allocation" and vtable pointer. |
| 0x00E64046 | 28 | throw_bad_alloc | Constructs and throws a std::bad_alloc exception. |
| 0x00E64080 | 77 | ___get_entropy | CRT __get_entropy: gathers entropy from system sources (TSC, process ID, thread ID, system time) for security cookie initialization. |
| 0x00E640CD | 75 | ___security_init_cookie | CRT __security_init_cookie: initializes the global security cookie used for stack buffer overflow detection (/GS). |
| 0x00E64195 | 6 | get_PTR_tls_callback_0_011b5ed0_00e64195 | Returns address of TLS callback pointer at 0x011b5ed0 |
| 0x00E6419B | 6 | get_tls_callback_1_ptr_00e6419b | Returns pointer to TLS callback 1 global variable |
| 0x00E64211 | 6 | DirectDrawCreateEx | Import thunk: indirect jump to DirectDrawCreateEx. |
| 0x00E64217 | 6 | DirectDrawEnumerateExA | Import thunk: indirect jump to DirectDrawEnumerateExA. |
| 0x00E6421D | 6 | Direct3DCreate9Ex | Import thunk: indirect jump to Direct3DCreate9Ex. |
| 0x00E64223 | 6 | GdipFree | Import thunk: indirect jump to GdipFree. |
| 0x00E64229 | 6 | GdiplusStartup | Import thunk: indirect jump to GdiplusStartup. |
| 0x00E6422F | 6 | GdiplusShutdown | Import thunk: indirect jump to GdiplusShutdown. |
| 0x00E64235 | 6 | GdipDeleteFontFamily | Import thunk: indirect jump to GdipDeleteFontFamily. |
| 0x00E6423B | 6 | GdipCloneFontFamily | Import thunk: indirect jump to GdipCloneFontFamily. |
| 0x00E64241 | 6 | GdipGetFamilyName | Import thunk: indirect jump to GdipGetFamilyName. |
| 0x00E64247 | 6 | GdipNewPrivateFontCollection | Import thunk: indirect jump to GdipNewPrivateFontCollection. |
| 0x00E6424D | 6 | GdipDeletePrivateFontCollection | Import thunk: indirect jump to GdipDeletePrivateFontCollection. |
| 0x00E64253 | 6 | GdipGetFontCollectionFamilyList | Import thunk: indirect jump to GdipGetFontCollectionFamilyList. |
| 0x00E64259 | 6 | GdipPrivateAddFontFile | Import thunk: indirect jump to GdipPrivateAddFontFile. |
| 0x00E69D70 | 208 | __tr_align | Zlib _tr_align: outputs a stored block alignment boundary and an end-of-block code for sync points. |
| 0x00E69E40 | 5 | bi_flush | Zlib bi_flush stub: flushes remaining bits from the bit buffer to the output stream. |
| 0x00E6A280 | 96 | __tr_init | Zlib _tr_init: initializes the Huffman tree structures (literal, distance, bit length) for deflate compression. |
| 0x00E6A4A0 | 121 | bi_flush | Zlib bi_flush: flushes the bit buffer, writing complete bytes to the output pending buffer. |
| 0x00E6A520 | 92 | bi_windup | Zlib bi_windup: flushes any remaining bits in the bit buffer and aligns to a byte boundary. |
| 0x00E6AED0 | 228 | pqdownheap | Zlib pqdownheap: restores the heap property by sifting a node downward in the priority queue used during Huffman tree construction. |
| 0x00E6CBC1 | 6 | BCryptOpenAlgorithmProvider | Import thunk: indirect jump to BCryptOpenAlgorithmProvider. |
| 0x00E6CBC7 | 6 | BCryptGetProperty | Import thunk: indirect jump to BCryptGetProperty. |
| 0x00E6CBCD | 6 | BCryptSetProperty | Import thunk: indirect jump to BCryptSetProperty. |
| 0x00E6CBD3 | 6 | BCryptCloseAlgorithmProvider | Import thunk: indirect jump to BCryptCloseAlgorithmProvider. |
| 0x00E6CBD9 | 6 | BCryptGenerateSymmetricKey | Import thunk: indirect jump to BCryptGenerateSymmetricKey. |
| 0x00E6CBDF | 6 | BCryptEncrypt | Import thunk: indirect jump to BCryptEncrypt. |
| 0x00E6CBE5 | 6 | BCryptDecrypt | Import thunk: indirect jump to BCryptDecrypt. |
| 0x00E6CBEB | 6 | BCryptDestroyKey | Import thunk: indirect jump to BCryptDestroyKey. |
| 0x00E6CBF1 | 6 | BCryptDeriveKeyPBKDF2 | Import thunk: indirect jump to BCryptDeriveKeyPBKDF2. |
| 0x00E6CC69 | 6 | Base_RestartAppIfNecessary | Import thunk: indirect jump to Base_RestartAppIfNecessary (Stove SDK). |
| 0x00E6CC6F | 6 | Base_Initialize | Import thunk: indirect jump to Base_Initialize (Stove SDK). |
| 0x00E6CC75 | 6 | Base_UnInitialize | Import thunk: indirect jump to Base_UnInitialize (Stove SDK). |
| 0x00E6CC7B | 6 | Base_RunCallback | Import thunk: indirect jump to Base_RunCallback (Stove SDK). |
| 0x00E6CC81 | 6 | Base_GetAccessToken | Import thunk: indirect jump to Base_GetAccessToken (Stove SDK). |
| 0x00E6CC87 | 6 | Base_GetUser | Import thunk: indirect jump to Base_GetUser (Stove SDK). |
| 0x00E6CC8D | 6 | Base_GetShutdown | Import thunk: indirect jump to Base_GetShutdown (Stove SDK). |
| 0x00E6CD53 | 6 | IAP_Initialize | Import thunk: indirect jump to IAP_Initialize (Stove SDK in-app purchase). |
| 0x00E6CD59 | 6 | IAP_UnInitialize | Import thunk: indirect jump to IAP_UnInitialize (Stove SDK). |
| 0x00E6CD5F | 6 | IAP_FetchProducts | Import thunk: indirect jump to IAP_FetchProducts (Stove SDK). |
| 0x00E6CD65 | 6 | IAP_StartPurchase | Import thunk: indirect jump to IAP_StartPurchase (Stove SDK). |
| 0x00E6CD6B | 6 | IAP_ConfirmPurchase | Import thunk: indirect jump to IAP_ConfirmPurchase (Stove SDK). |
| 0x00E6CD71 | 6 | IAP_FetchTermsAgreement | Import thunk: indirect jump to IAP_FetchTermsAgreement (Stove SDK). |
| 0x00E87C60 | 59 | _Erase_tree<> | STL _Erase_tree: recursively frees all nodes in a red-black tree, then resets the tree to empty state. |
| 0x00E87CE0 | 207 | CTimerQueue__ctor | RO client: Constructor for CTimerQueue. Creates a linked list node, sets up a 10-second periodic timer via timeSetEvent, and initializes a critical section for thread safety. |
| 0x00E87DB0 | 249 | CMemoryProtector__ctor | RO client: Constructor for CMemoryProtector. Seeds RNG from GetTickCount, allocates virtual memory with random size (10-29 entries), creates critical section. Part of anti-cheat/tamper detection system. Calls decrypt_string_threadsafe to log initialization. |
| 0x00E87EE0 | 64 | ~_Tree<> | STL ~_Tree destructor: erases all nodes and deallocates the sentinel node. |
| 0x00E87F50 | 341 | CLogFile__close_and_flush | RO client: Closes and flushes a log file. Formats timestamp header, optionally XOR-encrypts log content, writes to file handle, then closes. Deletes critical section on cleanup. |
| 0x00E880B0 | 59 | CTimerQueue__dtor | RO client: Destructor for CTimerQueue. Kills the periodic timer, deletes critical section, and destroys the internal STL tree. |
| 0x00E880F0 | 58 | CMemoryProtector__dtor | RO client: Destructor for CMemoryProtector. Frees virtual memory and deletes critical section. |
| 0x00E88130 | 221 | CTimerQueue__insert_or_find | RO client: Inserts or finds a key in CTimerQueue's internal red-black tree. Returns pointer to the value field of the tree node. |
| 0x00E88270 | 1025 | rotate_log_files | RO client: Rotates log files with multiple extensions and numbered suffixes. Checks for locked files, renames/moves older logs, deletes the oldest. Uses encrypted string names for the 6 log file types. |
| 0x00E88680 | 158 | check_single_instance_mutex | RO client: Checks if another instance is already running by creating a named mutex with a security descriptor. Returns true if mutex already exists (ERROR_ALREADY_EXISTS = 0xB7). |
| 0x00E88720 | 317 | CMemoryProtector__verify_and_repair | RO client: CMemoryProtector integrity check. Verifies XOR-encoded values in protected memory slots haven't been tampered with. Calls repair function and reports tampering if detected. |
| 0x00E88860 | 119 | check_pe_section_integrity | RO client: Checks PE section header integrity. Reads MZ header, verifies section virtual/raw sizes. Detects section padding modifications used by some cheat tools. |
| 0x00E888E0 | 378 | verify_file_crc32 | RO client: Verifies a file's CRC32 checksum. Computes CRC32, checks against expected value and against a whitelist file. Part of anti-tamper file integrity verification system. |
| 0x00E88A60 | 317 | acquire_global_mutex | RO client: Acquires a global named mutex with timeout. Creates mutex with security descriptor, waits if already owned. Returns 1 on success, 0 on timeout or failure. Used for cross-process synchronization. |
| 0x00E88DE0 | 194 | check_registry_guard_value | RO client: Checks a registry guard value under HKCU. If the value is > 1, triggers a reporting action and resets it to 0. Used for anti-cheat state persistence across sessions. |
| 0x00E89290 | 245 | verify_registry_crc_value | RO client: Verifies a CRC32 value stored in a Windows registry key. Opens HKCU registry key, reads a DWORD value and compares against expected CRC. Returns 1 if match, 0 if mismatch. |
| 0x00E89390 | 1593 | detect_system_dll_tampering | RO client: Detects system DLL tampering. Reads Windows version from registry, gets system32 DLL path, checks file size, loads version API. Stores expected hash in registry based on known file sizes (0x18D10 or 0x17110). |
| 0x00E899D0 | 290 | try_acquire_named_mutex | RO client: Tries to acquire a named mutex with security descriptor. Returns 0 if mutex already exists or wait times out. Different from acquire_global_mutex - this does not wait if already exists. |
| 0x00E89B00 | 140 | check_winsock_hook_integrity | RO client: Checks Winsock API hook integrity. Compares stored function pointers for WSASend and send against current IAT values. Returns 1 if clean, 0 if hooked, 2 if not initialized. |
| 0x00E89B90 | 213 | check_timing_api_hook_integrity | RO client: Checks timing API hook integrity. Verifies QueryPerformanceCounter, GetTickCount, and timeGetTime haven't been detoured. Returns 1 if clean, 0 if hooked, 2 if not initialized. |
| 0x00E89FE0 | 377 | check_dll_version_minimum | RO client: Checks if a DLL file version meets a minimum requirement. Loads version.dll dynamically, reads file version info, compares against required version (param2-5 as major.minor.build.revision). |
| 0x00E8AC50 | 202 | delete_anticheat_registry_values | RO client: Deletes 7 anti-cheat registry values from HKCU key. Cleans up persistent state when anti-cheat is being reset or uninstalled. |
| 0x00E8AD20 | 109 | set_anticheat_registry_flag | RO client: Sets an anti-cheat DWORD flag in HKLM registry. Opens key with full access, writes a DWORD value. Returns true on success. |
| 0x00E8AF30 | 309 | handle_anticheat_exception | RO client: Handles anti-cheat exceptions. Logs exception details (code, address, thread ID), dumps 32 bytes of exception context as hex, reports to server, then calls ExitProcess(100) if anti-cheat is terminating. |
| 0x00E8B410 | 162 | CMemoryProtector__read_protected_value | RO client: Reads a protected value from CMemoryProtector. Thread-safe via critical section. Decodes XOR-obfuscated value from virtual memory. Used to read tamper-protected anti-cheat state. |
| 0x00E8B4C0 | 19 | timer_read_protected_value_wrapper | RO client: Wrapper that calls timer_insert_and_read_protected. |
| 0x00E8B4E0 | 26 | timer_insert_and_read_protected | RO client: Inserts a timer entry and reads the protected value. Uses CTimerQueue for tracking and CMemoryProtector for tamper-proof storage. |
| 0x00E8B510 | 73 | get_module_directory_ansi | RO client: Gets the directory containing the current module (ANSI). Uses GetModuleFileNameA, strips filename by finding last backslash. Returns '.' if path retrieval fails. |
| 0x00E8B560 | 70 | get_module_directory_wide | RO client: Gets the directory containing the current module (Unicode). Uses GetModuleFileNameW, strips filename. Returns L'.' if path retrieval fails. |
| 0x00E8B5B0 | 124 | build_anticheat_dll_path_ansi | RO client: Builds the full path to the anti-cheat DLL (ANSI). Uses cached drive path if valid, otherwise gets module directory. Appends encrypted DLL filename. |
| 0x00E8B630 | 144 | build_anticheat_dll_path_wide | RO client: Builds the full path to the anti-cheat DLL (Unicode). Uses cached drive path if valid, otherwise gets module directory. Appends encrypted DLL filename. |
| 0x00E8B7D0 | 396 | dump_loaded_modules_for_process | RO client: Dumps loaded modules for current process using toolhelp API. Uses CreateToolhelp32Snapshot with TH32CS_SNAPMODULE. Logs module path, base, and size for each loaded DLL. |
| 0x00E8B960 | 393 | dump_running_processes | RO client: Dumps running processes using toolhelp API. Uses CreateToolhelp32Snapshot with TH32CS_SNAPPROCESS. Logs process name, PID, parent PID, and thread count. |
| 0x00E8BAF0 | 33 | CMemoryProtector__set_page_readonly | RO client: Sets memory page to read-only (PAGE_READONLY=2) using VirtualProtect. Part of CMemoryProtector tamper detection system. |
| 0x00E8C650 | 329 | init_winsock_hook_detection | RO client: Initializes Winsock hook detection. Gets ws2_32.dll module handle, resolves WSASend and send addresses, stores original function pointers for later comparison. Detects if functions point outside the module. |
| 0x00E8C7A0 | 602 | init_timing_api_hook_detection | RO client: Initializes timing API hook detection. Resolves QueryPerformanceCounter, GetTickCount (kernel32), and timeGetTime (winmm). Stores original addresses for later integrity checks. Detects detours by checking if address is inside module range. |
| 0x00E8CA00 | 203 | init_toolhelp_api | RO client: Initializes toolhelp32 API function pointers. Resolves CreateToolhelp32Snapshot, Process32First/Next, Module32First/Next from kernel32.dll. Returns 1 if all resolved. |
| 0x00E8CAE0 | 76 | check_debugger_present | RO client: Checks if a debugger is attached. Uses PEB.BeingDebugged or NtGlobalFlag depending on config flag. Returns 0 if debugger detected (unless section integrity check failed). |
| 0x00E8CCC0 | 93 | is_windows_nt | RO client: Checks if running on Windows NT (platform ID 2). Uses GetVersionExA resolved manually from kernel32 to avoid hooks. |
| 0x00E8CD20 | 140 | check_windows_version_and_adjust | RO client: Checks Windows version and adjusts settings. Doubles a global value on Windows 2000 (5.0). Returns 1 for NT, 0 for non-NT. |
| 0x00E8CE30 | 217 | CTimerQueue__periodic_check_all | RO client: Timer callback that iterates all CMemoryProtector instances. For each, verifies integrity and relocates data to a random new location. Called every 10 seconds by timeSetEvent. |
| 0x00E8CF10 | 177 | CMemoryProtector__relocate_data | RO client: Relocates protected memory data to a random location within virtual allocation. Copies data to new offset, sets page to read-only. Anti-tamper measure to prevent static memory patching. |
| 0x00E8CFD0 | 675 | manual_get_proc_address | RO client: Manual GetProcAddress implementation. Parses PE export directory to resolve function by name or ordinal. Handles forwarded exports recursively. Used to avoid IAT hooking detection. |
| 0x00E8D2E0 | 1820 | CLogFile__open_and_write_header | RO client: Opens encrypted log file. Rotates existing logs, creates new file, writes timestamp header. Supports RC4 encryption with RSA-encrypted key, or simple XOR encryption. Initializes critical section for thread safety. |
| 0x00E90240 | 180 | get_file_trust_status | RO client: Gets file trust status using WinVerifyTrust or equivalent API. Resolves ntdll functions manually. Returns negated trust status flags. |
| 0x00E90300 | 236 | write_last_error_to_registry | RO client: Writes last error info to HKCU registry. Stores error number, game name, and timestamp. Used for crash/error reporting. |
| 0x00E903F0 | 119 | CTimerQueue__set_value | RO client: Sets a value in CTimerQueue tree by key. Thread-safe via critical section. Inserts or updates key-value pair. |
| 0x00E90470 | 232 | create_protected_memory_entry | RO client: Creates a CMemoryProtector entry with associated CTimerQueue. Allocates timer queue singleton if needed, creates protector, registers in timer queue. |
| 0x00E90560 | 120 | CMemoryProtector__make_page_writable | RO client: Makes a CMemoryProtector page writable (PAGE_READWRITE=4). Verifies the previous protection was PAGE_READONLY. Detects tampering if protection was unexpected. |
| 0x00E90630 | 173 | destroy_protected_memory_entry | RO client: Destroys a CMemoryProtector entry. Finds it in timer queue, calls destructor, removes from tree. Returns true if timer queue is now empty. |
| 0x00E906E0 | 526 | cleanup_registry_run_entries | RO client: Cleans up registry Run entries matching current executable path. Enumerates HKCU Run key values, deletes entries whose path matches the current module directory. Anti-persistence cleanup. |
| 0x00E908F0 | 67 | destroy_protected_memory_and_timer | RO client: Destroys a protected memory entry and its timer queue if empty. Calls destroy_protected_memory_entry, then cleans up the singleton CTimerQueue if no entries remain. |
| 0x00E91100 | 278 | send_udp_report_packet | RO client: Sends a UDP report packet to a specified server address. Creates UDP socket, resolves hostname, sends anti-cheat data buffer. Port defaults to 15000 or from config. |
| 0x00E91340 | 424 | CMemoryProtector__write_protected_value | RO client: Writes a protected value to CMemoryProtector. Thread-safe. In simple mode, writes value + XOR verification. In complex mode, stores XOR-encoded value across random array slots with rotating key. Periodically relocates data. |
| 0x00E914F0 | 22 | timer_write_protected_value_wrapper | RO client: Wrapper that calls timer_insert_and_write_protected. |
| 0x00E91510 | 29 | timer_insert_and_write_protected | RO client: Inserts timer entry and writes protected value. Uses CTimerQueue key lookup and CMemoryProtector value storage. |
| 0x00E916F0 | 378 | CLogFile__write_timestamped_entry | CLogFile write_timestamped_entry: formats a timestamped log message and writes it to the log file. |
| 0x00E92F10 | 31 | ServiceManager__check_service_state | Checks service state via FUN_00e912e0. Returns 2 if DAT_0173ccb4 (service manager) is null. |
| 0x00E92F50 | 110 | ServiceManager__set_path_ansi | Sets the service path from ANSI string. Copies to global buffer at 0x0173bd58 (max 0x104 chars) and converts to wide char at 0x0173be60. |
| 0x00E92FC0 | 129 | ServiceManager__set_path_wide | Sets the service path from wide string. Copies to wide buffer at 0x0173be60 (max 0x104 wchars) and converts to multibyte at 0x0173bd58. |
| 0x00E93060 | 71 | ServiceManager__set_additional_path | Sets an additional path string from ANSI input. Copies to buffer at 0x0173c078 (max 0x104 chars). |
| 0x00E930B0 | 157 | ServiceManager__set_additional_path_wide | Sets additional path from wide string. Converts wide to multibyte (max 0x200) and delegates to set_additional_path (ANSI version). |
| 0x00E93190 | 29 | get_filename_from_path_ansi | Returns pointer to filename portion of ANSI path by finding last backslash via _mbsrchr. Returns original string if no backslash found. |
| 0x00E931B0 | 30 | get_filename_from_path_wide | Returns pointer to filename portion of wide path by finding last backslash via wcsrchr. Returns original string if no backslash found. |
| 0x00E931D0 | 69 | ServiceManager__count_services_by_name | Counts how many active services in the service table (DAT_0173cd14) match the given name. Table has 50 entries of 800 bytes each. Name at offset 0x28. |
| 0x00E93360 | 42 | ServiceManager__find_first_available_slot | Finds the first available (active, excluding param_1) slot in the service table. Returns index 0-49, or -1 if none found. |
| 0x00E933C0 | 53 | hash_string_case_insensitive | Computes a hash of an ANSI string using multiplier 0x1f with case-insensitive comparison (OR 0x20 on each char). Returns 0 for null input. |
| 0x00E93400 | 66 | hash_wstring_case_insensitive | Computes a hash of a wide string using multiplier 0x1f with case-insensitive comparison (OR 0x20 on each wchar). Returns 0 for null input. |
| 0x00E93450 | 77 | ServiceManager__find_service_index_by_name | Finds index of a service in the table by exact name match (case-insensitive via _mbsicmp). Name at offset 0x28 in 800-byte entries. Returns -1 if not found. |
| 0x00E934A0 | 76 | ServiceManager__find_service_index_by_prefix | Finds index of a service in the table by name prefix match. Uses mbsnbicmp to compare only the length of param_2. Returns -1 if not found. |
| 0x00E934F0 | 238 | ServiceManager__find_service_index_by_hwnd | Finds the service table index for a given HWND. Checks two HWND fields (offsets 0x8 and 0x10) per entry, including owner windows (GetWindow GW_OWNER) and optionally parent/child relationships. Returns -1 if not found. |
| 0x00E935E0 | 46 | ServiceManager__find_service_by_field1 | Finds index of a service by matching field at offset 0x4 (piVar1[1]). Returns index 0-49, or -1 if not found. |
| 0x00E93610 | 40 | hash_string_case_sensitive | Computes case-sensitive hash of a string using multiplier 0x1f. Standard DJB-style hash without case folding. |
| 0x00E93640 | 121 | ServiceManager__is_window_in_rect | Checks if a window's rect overlaps with the given rect. Returns 1 if the window's left/right is within rect's X range AND top/bottom is within Y range. |
| 0x00E936C0 | 105 | ServiceManager__any_service_window_in_rect | Checks if any service window (HWND at offsets 0x8 and 0x10) in the service table overlaps with the given rect. Returns 1 if any overlap found. |
| 0x00E93760 | 47 | ServiceManager__check_service_flags | Checks if a specific service (by index) has the given flags set at offset 0x20 (piVar1[8]). Returns 1 if active and flags match. |
| 0x00E93790 | 48 | ServiceManager__any_service_has_flags | Checks if any active service in the table has the given flags set at offset 0x20. Returns 1 on first match, 0 if none. |
| 0x00E937C0 | 48 | ServiceManager__check_service_type | Checks if a specific service (by index) has type matching param_2 at offset 0x1c. Returns 1 if active and type matches. |
| 0x00E937F0 | 48 | ServiceManager__any_service_has_type | Checks if any active service has the type value at offset 0x1c matching param_1. Returns 1 on first match, 0 if none. |
| 0x00E93820 | 55 | ServiceManager__check_service_type_and_flags | Checks if service at index param_1 has type param_2 (offset 0x1c) AND has flags param_3 set (offset 0x20). Returns 1 if all conditions met. |
| 0x00E93860 | 66 | ServiceManager__find_service_type_has_flags | Finds a service with type param_1 (offset 0x1c) then checks if it has flags param_2 at offset 0x20. Returns 1 if found with matching flags. |
| 0x00E938B0 | 59 | ServiceManager__is_value_in_service_range | Checks if param_1 falls within [field1, field1+3] range of any active service. Field1 at offset 0x4. Returns 1 on match. |
| 0x00E938F0 | 48 | ServiceManager__any_service_has_field1_value | Checks if any active service has field1 (offset 0x4) exactly equal to param_1. Returns 1 on first match. |
| 0x00E93920 | 48 | ServiceManager__any_service_has_field6_value | Checks if any active service has field at offset 0x18 (piVar1[6]) matching param_1. Returns 1 on first match. |
| 0x00E93950 | 29 | ServiceManager__is_hwnd_in_services | Checks if a given HWND belongs to any service in the table. Wrapper around find_service_index_by_hwnd, returns true if index != -1. |
| 0x00E93970 | 47 | string_starts_with_case_insensitive | Checks if param_1 starts with param_2 using case-insensitive comparison (_mbsnbicmp). Compares only strlen(param_2) bytes. |
| 0x00E939A0 | 39 | ServiceManager__is_service_active | Returns 1 if the service at given index (0-49) is active (first field nonzero). Returns 0 for invalid index or inactive service. |
| 0x00E939D0 | 483 | decrypt_string_threadsafe | Thread-safe string decryption. Uses critical section. Decrypts string marked with 0x01 prefix using XOR cipher with seed derived from byte[1]. Re-encrypts the previous thread-local decrypted string. Uses per-thread slots (up to 20 threads) for concurrent access. |
| 0x00E93BC0 | 419 | decrypt_string_global | Global string decryption. Same XOR cipher as decrypt_string_threadsafe but uses a single global DAT_0173e5e0 instead of per-thread slots. Re-encrypts previous decrypted string. |
| 0x00E93D70 | 128 | decrypt_string_inplace | Decrypts a string in-place using XOR cipher. String must start with 0x01 marker. Seed from byte[1], length from bytes[2:3]. Uses critical section for thread safety. |
| 0x00E93DF0 | 242 | encrypt_string_to_global_buffer | Encrypts a plaintext string into global buffer DAT_0173cd38 using XOR cipher with 0x01 marker. Uses critical section. Aborts if output would exceed 0x7ff bytes. |
| 0x00E93EF0 | 230 | decrypt_hex_encoded_string | Decodes hex-encoded string in-place, then decrypts using XOR cipher with 0x02 marker. Uses critical section. Each pair of hex chars becomes one byte, then XOR decryption with multiplier 7 and offset 0x46. |
| 0x00E93FE0 | 365 | encrypt_string_to_hex | Encrypts string using XOR cipher with 0x02 marker (multiplier 7, offset 0x46), then hex-encodes the result back into param_1. Uses critical section. Each encrypted byte becomes two hex chars. |
| 0x00E94150 | 123 | decrypt_backslash_encoded_string | Decodes backslash-escaped hex string format (e.g. \\XX\\YY...) converting hex pairs to bytes in-place, then calls decrypt_string_inplace for XOR decryption. |
| 0x00E941D0 | 441 | decrypt_wstring_threadsafe | Wide string version of decrypt_string_threadsafe. Uses same XOR cipher with 0x01 marker but operates on wchar_t. Uses global DAT_0173e5e4 for previous string re-encryption. Thread-safe with critical section. |
| 0x00E94390 | 145 | decrypt_wstring_inplace | Wide string version of decrypt_string_inplace. Decrypts wstring with 0x01 marker in-place using XOR cipher on shorts. Thread-safe with critical section. |
| 0x00E94430 | 235 | encrypt_wstring_to_global_buffer | Encrypts a wide string into global buffer DAT_0173d538 using XOR cipher with 0x01 marker on wchar_t. Max 0x1000 bytes output. Thread-safe with critical section. |
| 0x00E94520 | 102 | get_encryption_critical_section | Returns pointer to global critical section at DAT_0173cd18 used for string encryption/decryption. Initializes it on first call using thread-local storage index for synchronization. |
| 0x00E94590 | 170 | stristr_ansi | Case-insensitive substring search for ANSI strings. Duplicates both strings, converts to lowercase, uses strstr, then adjusts pointer back to original string. Returns NULL if not found. |
| 0x00E94640 | 182 | stristr_wide | Case-insensitive substring search for wide strings. Duplicates both, converts to lowercase with _wcslwr, uses wcsstr, adjusts pointer to original. Returns NULL if not found. |
| 0x00E96400 | 55 | compute_checksum16 | Compute checksum16, small utility function |
| 0x00E96D70 | 153 | pe_compute_checksum | Computes the PE file checksum. Calculates 16-bit checksum via compute_checksum16, subtracts original checksum field, adjusts for borrow, handles odd-length files. Returns pointer to PE header, outputs new checksum and original checksum. |
| 0x00E96E50 | 173 | CRC32__init_table | Generates the CRC32 lookup table (256 entries) using polynomial 0xEDB88320. Each entry computed by 8 iterations of bit-by-bit division. Standard CRC32 table initialization. |
| 0x00E96F10 | 323 | CRC32__compute_file_ansi | Computes CRC32 of a file opened via ANSI path. Reads file in 4KB chunks, accumulates CRC using the lookup table. Returns inverted CRC (standard CRC32 finalization). Stores error code at offset 0x400. |
| 0x00E97060 | 323 | CRC32__compute_file_wide | Wide-string version of CRC32__compute_file_ansi. Opens file via CreateFileW, computes CRC32 in 4KB chunks. Same algorithm as ANSI version. |
| 0x00E971B0 | 37 | CRC32__compute_buffer | Wrapper that computes CRC32 of a memory buffer. Initializes CRC to 0xFFFFFFFF, delegates to CRC32__compute_file_partial, then inverts the result (standard CRC32 finalization). |
| 0x00E971E0 | 432 | CRC32__compute_file_partial | Computes CRC32 of a partial file. Opens file, seeks to offset param_3, reads up to param_4 bytes in 4KB chunks, accumulating CRC. Used for CRC of file regions rather than whole files. |
| 0x00E97390 | 34 | CRC32__compute_memory | Computes CRC32 of a memory buffer. Initializes to 0xFFFFFFFF, calls CRC32__update with the buffer data, then inverts the result. Convenience wrapper. |
| 0x00E973C0 | 80 | CRC32__update | Core CRC32 update function. Processes each byte of param_2 (length param_3) using the CRC32 lookup table. Accumulates into *param_4. Returns 0 if input is null. |
| 0x00E97520 | 46 | safe_sprintf | Wrapper around __stdio_common_vsprintf_s. Formats a string into param_1 buffer (max 16 bytes) with format param_2 and varargs. Returns length or -1 on error. |
| 0x00E97550 | 78 | read_line_from_buffer | Reads one line from a text buffer into param_2. Stops at CR, LF, or end of string. Max 0x3FE chars. Handles CR+LF line endings. Returns pointer to next line in buffer. |
| 0x00E975A0 | 343 | ini_read_int_and_append_to_vector | Reads an integer value from INI-format text buffer via ini_read_value, formats the key as "%d" string, parses result as integer. If non-zero and not 0x17C, formats as string and appends to STL vector at param_1. |
| 0x00E97700 | 129 | ini_read_int_value | Reads an integer value from INI-format text buffer. Formats value name as "%d" string, reads from INI text via ini_read_value, parses as integer. Returns the integer value (0 if not found). |
| 0x00E97790 | 208 | ini_parse_section_names | Parses INI-format text buffer to extract section names (text between []). Returns double-null-terminated list of section names. Max param_2 bytes output. |
| 0x00E97860 | 585 | ini_read_value_and_append | Reads a value from INI-format text by section+key, and appends "=value" string to a vector at param_1. Section formatted as "[%d]", key as "%d=". Returns length of value string. |
| 0x00E97AB0 | 425 | ini_read_value | Reads a value from INI-format text buffer. Searches for section "[param_1]" then key "param_2=". Copies value (after '=') to param_4 (max param_5 bytes). Uses param_3 as default if not found. |
| 0x00E98250 | 47 | twofish_decrypt_buffer | Decrypts a buffer using Twofish in 16-byte blocks. Iterates through the buffer calling twofish_decrypt_block for each block. Returns total bytes processed. |
| 0x00E98280 | 3333 | twofish_decrypt_block | Twofish block cipher decryption of a single 16-byte block. Uses 4 S-box lookup tables at DAT_01361ea0/013622a0/013626a0/01362aa0. Reads input as big-endian 32-bit words, applies 16 rounds of Feistel network in reverse using subkeys from param_2. |
| 0x00E98F90 | 2701 | twofish_key_schedule | Twofish key schedule. Derives 32 round subkeys from a 16-byte key input. Uses S-box lookups and TEA-like delta constants (0x9E3779B9 / golden ratio). Generates subkeys stored as 32 uint array in param_1. |
| 0x00E99A20 | 138 | twofish_encrypt_buffer | Encrypts a buffer using Twofish in 16-byte blocks. Pads final block with zeros if shorter than 16 bytes. Returns total bytes written including padding. |
| 0x00E99AB0 | 3333 | twofish_encrypt_block | Twofish block cipher encryption of a single 16-byte block. Forward Feistel network with 16 rounds using 4 S-box tables. Input/output as big-endian 32-bit words. Uses param_2 subkey array (32 entries). |
| 0x00E9A7C0 | 241 | twofish_init_keys_with_password | Initializes two Twofish key schedules (DAT_0173ea10 and DAT_0173ea90) from base keys XORed with optional password. If password is provided, each byte XORs into the 16-byte key cyclically. Seeds RNG with current time after key setup. |
| 0x00E9A8C0 | 240 | twofish_decrypt_and_verify | Decrypts buffer using Twofish (key1 at DAT_0173ea10), verifies magic number and CRC32 of decrypted data. Returns original data size on success, 0 on failure. Clears the 16-byte trailer after verification. |
| 0x00E9A9B0 | 240 | twofish_decrypt_and_verify_alt | Alternative decrypt+verify using key2 (DAT_0173ea90) and magic DAT_01362ea4. Same algorithm as twofish_decrypt_and_verify but with different key and verification constant. |
| 0x00E9AAA0 | 287 | twofish_encrypt_and_sign | Encrypts buffer with Twofish (key1). Pads to 16-byte boundary with random bytes, appends 16-byte trailer containing: sequence number, CRC32, original size, and magic number. Returns total encrypted size. |
| 0x00E9ABD0 | 126 | HashMap__find | Finds an entry in a hash map by key. Computes bucket index from hash, walks the bucket's linked list comparing keys. Returns iterator-like pair (node ptr, found flag). |
| 0x00E9AC50 | 542 | HashMap__insert | Inserts a key-value pair into a hash map. Computes hash via XOR with 0xDEADBEEF, checks for existing entry, allocates new node (0x60 bytes), copies 88 bytes of data. Rehashes if load factor exceeded. Uses critical section for thread safety. |
| 0x00E9AEE0 | 15 | hash_xor_deadbeef | Simple hash function that XORs the input value with 0xDEADBEEF. Used as hash function for the connection hash map. |
| 0x00E9AEF0 | 31 | fill_range_with_value_00e9aef0 | Fill range with value 00e9aef0 |
| 0x00E9AF10 | 522 | ConnectionManager__init | Initializes a ConnectionManager object. Allocates hash map sentinel node, initializes critical section, sets up bucket array with 16 initial buckets, zeroes all connection tracking fields (counters, state flags, buffers). |
| 0x00E9B120 | 23 | ConnectionInfo__clear | Clears a ConnectionInfo structure (0x268 bytes) by zeroing all fields. |
| 0x00E9B2A0 | 145 | ConnectionManager__dtor | Destructor for ConnectionManager. Closes internet handles, frees allocated buffer, frees VirtualAlloc'd config data, destroys hash map, deletes critical section. |
| 0x00E9B340 | 170 | ConnectionManager__register_connection | Registers a new connection entry. Copies 82 bytes of connection data into a hash map entry keyed by a computed ID from FUN_00e9d920. Returns error 0x6F for empty name, 0x149 if ID computation fails, 0 on success. |
| 0x00E9B3F0 | 593 | ConnectionManager__load_config_file | Loads a configuration file. Resolves path relative to executable directory, memory-maps the file, copies contents to VirtualAlloc buffer, calls decrypt_config to parse it, computes CRC32 of the parsed data for verification. |
| 0x00E9B650 | 141 | ConnectionManager__save_config_file | Saves configuration data to the file at path stored in this+0x1B9. Deletes existing file first, creates new file, writes param_2 buffer of param_3 bytes. |
| 0x00E9B6E0 | 74 | ConnectionManager__decrypt_config | Decrypts configuration data. Returns error 0x164 if input is null. Delegates to FUN_0282e703 for actual decryption. |
| 0x00E9BB10 | 101 | string_replace_char | Replaces all occurrences of param_2 char with param_3 char in string param_1. If string is empty, copies a decrypted default string. Returns pointer to end of string. |
| 0x00E9BB80 | 97 | ConnectionManager__close_internet_handles | Closes WinINet handles. If param_2 is true or offset 0x2C0 is 0, closes HTTP request handle (0x90) and connection handle (0x8C) using InternetCloseHandle. Stores InternetCloseHandle address at offset 0x54 on first call. |
| 0x00E9BBF0 | 657 | ConnectionManager__backup_and_collect_files | Backs up and collects files from a subdirectory. Gets module path, navigates to parent folder, enumerates files matching certain encrypted extensions (DLL, EXE, etc.), copies them with modified names, processes via FUN_00eab1f0, then deletes copies. |
| 0x00E9BE90 | 409 | ConnectionManager__open_http_connection | Opens an HTTP connection using WinINet. Calls InternetOpen (offset 0x4C), sets timeouts via InternetSetOption (offset 0x68), then HttpOpenRequest (offset 0x50). Throttles calls to 100ms minimum interval. Thread-safe with critical section. |
| 0x00E9C030 | 337 | get_error_message_by_code | Returns a decrypted error message string for a given error code (1-0x14). Each code maps to a different encrypted string constant. Copies result to param_2 buffer (max 0x20 bytes, or 0x16/0x18 for codes 0x12/0x13). |
| 0x00E9C190 | 168 | HashMap__remove | Removes an entry from the hash map by key. Computes hash, finds the node, unlinks it from the doubly-linked bucket list, decrements count, frees the 0x60-byte node. |
| 0x00E9C240 | 66 | ConnectionManager__unregister_connection | Unregisters a connection by name. Looks up the connection ID via FUN_00e9d940, then removes it from the hash map. Returns 0x6F for null params, 0x70 if not found. |
| 0x00E9C290 | 29 | ConnectionManager__lock | Conditionally enters the critical section. Only locks if param_2 is false (0) and the critical section has been initialized (DebugInfo != NULL). |
| 0x00E9C2B0 | 216 | ConnectionManager__load_config | Loads connection config. Computes hash of config name, builds path by appending encrypted extension, loads+decrypts config file, then processes the decrypted data via FUN_00ea01d0. Sets CRC at offset 0x20 for integrity verification. |
| 0x00E9C390 | 186 | ConnectionManager__connect | Top-level connect function with locking. Returns 100 if param null, 0x6B if shutdown flag set. Otherwise locks critical section, calls connect_inner, then unlocks. |
| 0x00E9C4A0 | 215 | ConnectionManager__connect_inner | Inner connection logic. Initializes local buffers (1024+100+100+30 bytes), calls into obfuscated code at FUN_0289381d for actual connection establishment. |
| 0x00E9CDC0 | 204 | ConnectionManager__compute_file_hash_locked | Wrapper that locks critical section, calls compute_file_hash_multi_codepage for anticheat file verification, then unlocks. Returns 0x148 if shutdown flag set, 0x146 for null params. |
| 0x00E9CEF0 | 511 | compute_file_hash_multi_codepage | Computes file path hashes using multiple codepages. Takes ANSI path, converts to wide chars, then re-encodes to codepage 0xCAED and 0xFDE9, hashing each variant with hash_string_case_sensitive. Used by anticheat for file identity verification across encodings. |
| 0x00E9D6E0 | 574 | collect_hardware_fingerprint | Collects hardware fingerprint for machine identification. Gets CPU info via CPUID, reads disk/device serial via DeviceIoControl (IOCTL 0x7c088), hashes hardware strings, and formats result into output buffer. Returns 1 if device serial was successfully read, 0 otherwise. Used for anti-cheat or client identification. |
| 0x00E9D920 | 31 | compute_connection_id | Computes a connection ID by hashing the concatenation of name (offset 0) and name+0x20. Returns 0 for empty names. |
| 0x00E9D940 | 152 | hash_concatenated_strings | Concatenates two strings, hashes the result using hash_string_case_sensitive. Allocates temp buffer for concatenation. Returns 0 on null input or allocation failure. |
| 0x00E9D9E0 | 175 | ConnectionManager__check_file_ansi | Checks a file specified by ANSI path. Converts to wide string, delegates to FUN_00e9da90 (wide version). Returns param_3 masked if input is null. |
| 0x00E9ED50 | 851 | collect_mac_addresses | Collects up to 2 MAC addresses for hardware fingerprinting. First tries GetAdaptersInfo API, filtering out loopback and tunnel adapters. Falls back to Netbios NCB calls if no adapters found. Formats as XX-XX-XX-XX-XX-XX strings. Sets default string if no valid adapter at index 0. |
| 0x00E9F0B0 | 115 | HashMap__contains | Checks if a key exists in the hash map. Returns true (1) if found, false (0) if not. Uses hash_xor_deadbeef for hashing. |
| 0x00E9F130 | 47 | ConnectionManager__is_registered | Checks if a connection identified by name+subname is registered. Hashes the concatenated strings and looks up in the hash map. Returns false for null params. |
| 0x00EA00A0 | 9 | thunk_to_ConnectionManager__is_registered | Thunk to ConnectionManager__is_registered (00e9f130). |
| 0x00EA00B0 | 156 | ConnectionManager__send_http_request | Sends an HTTP request using the function pointer at offset 0x5C (HttpSendRequest). Returns 0 if shutdown flag is set. |
| 0x00EA01B0 | 29 | ConnectionManager__unlock | Conditionally leaves the critical section. Only unlocks if param_2 is false (0) and the critical section has been initialized. |
| 0x00EA01D0 | 123 | ConnectionManager__log_message | Logs a formatted message via callback at offset 0x6C. Formats the message using vsprintf into a 4KB buffer, then calls the callback. No-op if callback is null. |
| 0x00EA0550 | 69 | ConnectionManager__receive_data | Receives data over connection. Returns 0x154 if param is null. Delegates to obfuscated code at FUN_02872074. |
| 0x00EA0890 | 707 | pe_resolve_export_by_name | Manual PE export table resolution. Parses PE headers, walks export directory to find function by name or ordinal. Handles PE32 and PE32+ formats. Resolves forwarded exports recursively. Used by anticheat to detect API hooks by comparing actual export addresses. |
| 0x00EA61C0 | 13 | ConnectionManager__set_log_callback | Sets the log callback function pointer at offset 0x6C in the ConnectionManager. |
| 0x00EA6420 | 385 | ConnectionManager__resolve_wininet_exports | Resolves WinInet/WinHTTP function pointers for HTTP communication. Loads encrypted DLL name, gets module handle (or LoadLibrary), then resolves 8 function exports via pe_resolve_export_by_name to offsets 0x4C-0x68. Returns 0 on success, 0x132/0x133 on failure. |
| 0x00EA6AE0 | 10 | thunk_to_mbsrchr_00ea6ae0 | Wrapper that calls _mbsrchr and returns result |
| 0x00EA6B80 | 10 | thunk_to_mbsnbcmp_00ea6b80 | Wrapper that calls _mbsnbcmp with 3 parameters, discards result |
| 0x00EA6B90 | 10 | thunk_to__mbsnbcpy_00ea6b90 | Wrapper for _mbsnbcpy (multibyte string copy with byte limit) |
| 0x00EA6BA0 | 61 | popcount32 | Population count (popcount) for 32-bit integers. Counts number of set bits by checking pairs of bits (odd and even positions separately) in 16 iterations. Returns total count of 1-bits. |
| 0x00EA6C90 | 8593 | collect_system_info | Collects comprehensive system info: OS version/edition (Win95-Win10), CPU cores/cache/NUMA, RAM, disk space, system metrics, registry, locale, power status. Stores results in globals. ~8.6K bytes. |
| 0x00EA8E40 | 435 | detect_windows_version | Detects Windows version using RtlGetVersion from ntdll.dll. Maps major.minor version pairs to internal IDs stored in DAT_0173eb1c. Handles Vista through Windows 10/11. Returns 0 if version detection fails, 1 on success. |
| 0x00EA9000 | 675 | pe_resolve_export_by_name_seh | Resolves a function export by name from a PE module's export table, with SEH protection against corrupted modules. |
| 0x00EA92F0 | 5 | FileHandle__close_and_clear_00ea92f0 | Closes FILE pointer if non-null, then nullifies it |
| 0x00EA9400 | 27 | close_file_handle | Closes a FILE handle stored at *param_1, then zeros the pointer. Null-checks before fclose. |
| 0x00EA9850 | 67 | FileHandle__get_file_size | Gets the file size by seeking to end (offset 0x200000000) and calling _ftelli64. Returns 1 on success with size stored in param_2, 0 on failure. Used by md5_compute_file_hash to validate file before hashing. |
| 0x00EA98A0 | 199 | pe_read_timestamp_from_file | Reads PE timestamp from a file. Opens file, reads first 4KB, validates MZ+PE signatures, then extracts the TimeDateStamp field from the PE header (offset 8 from PE signature). Returns 1 on success with timestamp in param_2. |
| 0x00EA99A0 | 40 | FileHandle__open_read_binary | Opens a file for reading in binary mode ("rb"). Closes any previously open handle first via close_file_handle. Returns true if fopen succeeds. |
| 0x00EA99D0 | 40 | FileHandle__open_read_binary_wide | Opens a file for reading in binary mode using wide-character path (_wfopen with L"rb"). Closes any previously open handle first. Returns true if fopen succeeds. |
| 0x00EAACC0 | 474 | zip_format_error_message | Formats a zip error code into a human-readable message string. Maps numeric error codes (0x100-0x5000000) to descriptive strings like "Couldn't duplicate handle", "Error writing to file", "Zipfile is corrupt", etc. Copies result to caller's buffer with size limit. |
| 0x00EAAEA0 | 525 | zip_get_file_attributes | Gets file attributes and metadata for zip entry creation. Uses GetFileInformationByHandle to collect attributes, file size, timestamps. Detects embedded executables by checking for MZ/NE/LE/PE signatures at SFX offset. Converts FILETIME to DOS date/time. |
| 0x00EAB0F0 | 187 | zip_is_storable_extension | Checks if a file extension indicates the file should be stored (not compressed) in the zip. Compares against known extensions like .zip, .rar, .gz, .jpg, .png, .mp3, .avi, .mpg. Returns 1 if storable, 0 otherwise. |
| 0x00EAB1B0 | 22 | zip_handle_is_valid | Validates a zip handle. Returns true if handle is NULL or if handle state field equals 2 (valid/open). Used as a precondition check before zip operations. |
| 0x00EAC5D0 | 193 | filetime_to_time64 | Converts FILETIME to __time64_t via SYSTEMTIME. Clamps year to range 1970-2037. Calls FileTimeToSystemTime, fills tm struct, then uses _mktime64 to produce a 64-bit time_t value. |
| 0x00EACC90 | 65 | ZipFile__close_handle | Closes the file handle if owned by the ZipFile object (offset +0x60 is ownership flag). Resets position tracking. Returns 0x60000 if internal position changed, 0 otherwise. |
| 0x00EACCE0 | 218 | ZipFile__compress_entry | Compresses a ZIP file entry using deflate. Allocates a large stack-based deflate state (~0x6afb0 bytes), initializes trees and compression parameters, sets up read/write callbacks, then runs the deflate lazy/fast match compression loop. Stores compressed size in the entry object. |
| 0x00EACE60 | 103 | ZipFile__decompress_entry | Decompresses a ZIP file entry by reading 16KB chunks, writing them to output, and accumulating the decompressed size. Loops reading from the input stream and writing to output until EOF or error. Returns 0x60000 on write mismatch error, 0 on success. |
| 0x00EAD210 | 185 | ZipEntry__init_timestamps | Initializes a ZIP entry with current local time timestamps. Gets local time, converts to FILETIME, then to DOS date/time format. Sets creation, modification, and access time fields. Sets default file attributes (0x41c00010). Clears file handle and size fields. |
| 0x00EAD2D0 | 156 | ZipEntry__open_file | Opens a file for reading as a ZIP entry source. Creates file handle with CreateFileA (GENERIC_READ, FILE_SHARE_READ, OPEN_EXISTING). Calls init_from_handle to read file metadata. Returns error codes: 0=success, 0x200=file not found, 0x10000=null path. |
| 0x00EAD370 | 313 | ZipEntry__init_from_handle | Initializes ZIP entry from a file handle. For disk files (type==1), reads file attributes, size, and timestamps. For non-disk streams, uses current time and optionally a provided size. Seeks to start of file. Returns 0 on success, 0x10000 for invalid handle. |
| 0x00EAD4B0 | 229 | ZipEntry__init_from_memory | Initializes a ZIP entry from a memory buffer. Takes buffer pointer and size, sets up entry for in-memory reading with current timestamps. Sets seekable flag and file attributes. Returns 0 on success, 0x10000 if buffer or size is null. |
| 0x00EAD5A0 | 101 | ZipEntry__seek | Seeks to a position within a ZIP entry. Handles three cases: non-seekable (returns 0x2000000 error), memory buffer (validates bounds, sets offset), and file handle (calls SetFilePointer with base offset). Returns 0x30000 for out-of-bounds, 0x1000000 for no handle. |
| 0x00EAD610 | 228 | pqdownheap | Zlib pqdownheap: restores the heap property by sifting a node downward in the priority queue used during Huffman tree construction. |
| 0x00EAD700 | 870 | ZipFile__write_central_dir_file_header | Writes a ZIP central directory file header (PK\x01\x02 signature). Writes version made by, version needed, flags, compression method, timestamps, CRC, compressed/uncompressed sizes, filename length, extra field length, comment length, disk number, internal/external attributes, local header offset. Appends filename, extra field, and comment data. Returns 10 on write error, 0 on success. |
| 0x00EADA70 | 385 | ZipFile__write_end_of_central_dir_record | Writes the ZIP end of central directory record (PK\x05\x06 signature). Writes disk numbers, entry counts, central directory size, offset, and comment. Returns 10 on write error, 0 on success. |
| 0x00EADC00 | 284 | ZipFile__write_data_descriptor | Writes a ZIP data descriptor (PK\x07\x08 signature). Writes CRC32, compressed size, and uncompressed size after a local file entry. Used for entries where sizes were not known at the time the local header was written. Returns 0 on success. |
| 0x00EADD20 | 578 | ZipFile__write_local_file_header | Writes a ZIP local file header (PK\x03\x04 signature). Writes version needed, flags, compression method, timestamps, CRC, compressed/uncompressed sizes, filename length, extra field length. Appends filename and extra field data. Returns 10 on write error, 0 on success. |
| 0x00EADF70 | 164 | ZipEntry__read_data | Reads data from a ZIP entry source. For file-based entries, uses ReadFile and updates CRC32. For memory-based entries, uses memcpy from the buffer with bounds checking. Returns bytes read, 0 on EOF or error. Updates cumulative read position and CRC checksum. |
| 0x00EAE570 | 125 | ZipEntry__write_data | Writes data to a ZIP entry output. For file-based output, uses WriteFile. For memory-based output, uses memcpy with bounds checking. Returns bytes written, or 0 with error code 0x1000000 (no handle) or 0x30000 (buffer overflow). |
| 0x00EAE5F9 | 6 | Netbios | Import thunk: indirect jump to Netbios. |
| 0x00EAE5FF | 6 | __CxxFrameHandler | Import thunk: indirect jump to __CxxFrameHandler. |
| 0x00EAE605 | 6 | memcpy | Import thunk: indirect jump to memcpy. |
| 0x00EAE60B | 6 | memset | Import thunk: indirect jump to memset. |
| 0x00EAE611 | 6 | purecall | Import thunk: indirect jump to _purecall. |
| 0x00EAE617 | 6 | strchr | Import thunk: indirect jump to strchr. |
| 0x00EAE61D | 6 | __std_exception_copy | Import thunk: indirect jump to __std_exception_copy. |
| 0x00EAE623 | 6 | __std_exception_destroy | Import thunk: indirect jump to __std_exception_destroy. |
| 0x00EAE629 | 6 | _CxxThrowException | Import thunk: indirect jump to _CxxThrowException. |
| 0x00EAE62F | 6 | memchr | Import thunk: indirect jump to memchr. |
| 0x00EAE635 | 6 | memcpy | Import thunk: indirect jump to memcpy. |
| 0x00EAE63B | 6 | strstr | Import thunk: indirect jump to strstr. |
| 0x00EAE641 | 6 | longjmp | Import thunk: indirect jump to longjmp. |
| 0x00EAE647 | 6 | setjmp3 | Import thunk: indirect jump to _setjmp3. |
| 0x00EAE64D | 6 | strrchr | Import thunk: indirect jump to strrchr. |
| 0x00EAE653 | 6 | __RTDynamicCast | Import thunk: indirect jump to __RTDynamicCast. |
| 0x00EAE659 | 6 | _set_purecall_handler | Import thunk: indirect jump to _set_purecall_handler. |
| 0x00EAE665 | 6 | __std_type_info_compare | Import thunk: indirect jump to __std_type_info_compare. |
| 0x00EAE66B | 6 | __RTtypeid | Import thunk: indirect jump to __RTtypeid. |
| 0x00EAE671 | 6 | local_unwind4 | Import thunk: indirect jump to _local_unwind4 (SEH unwinding). |
| 0x00EAE677 | 6 | __current_exception | Import thunk: indirect jump to __current_exception. |
| 0x00EAE67D | 6 | __current_exception_context | Import thunk: indirect jump to __current_exception_context. |
| 0x00EAE683 | 6 | except_handler4_common | Import thunk: indirect jump to _except_handler4_common (SEH handler). |
| 0x00EAE68F | 6 | wcsrchr | Import thunk: indirect jump to wcsrchr. |
| 0x00EAE695 | 6 | wcsstr | Import thunk: indirect jump to wcsstr. |
| 0x00EAE6A1 | 6 | free | Import thunk: indirect jump to free. |
| 0x00EAE6A7 | 6 | malloc | Import thunk: indirect jump to malloc. |
| 0x00EAE6D1 | 6 | fclose | Import thunk: indirect jump to fclose. |
| 0x00EAE6D7 | 6 | fflush | Import thunk: indirect jump to fflush. |
| 0x00EAE6EF | 6 | fread | Import thunk: indirect jump to fread. |
| 0x00EAE701 | 6 | fwrite | Import thunk: indirect jump to fwrite. |
| 0x00EAE731 | 6 | _errno | Import thunk: indirect jump to _errno. |
| 0x00EAE755 | 6 | dclass | Import thunk: indirect jump to _dclass (floating-point classification). |
| 0x00EAE75B | 6 | ceil | Import thunk: indirect jump to ceil. |
| 0x00EAE761 | 6 | __acrt_iob_func | Import thunk: indirect jump to __acrt_iob_func. |
| 0x00EAE76D | 6 | ferror | Import thunk: indirect jump to ferror. |
| 0x00EAE773 | 6 | fopen | Import thunk: indirect jump to fopen. |
| 0x00EAE78B | 6 | strerror | Import thunk: indirect jump to strerror. |
| 0x00EAE7A9 | 6 | floor | Import thunk: indirect jump to floor. |
| 0x00EAE7B5 | 6 | exit | Import thunk: indirect jump to exit. |
| 0x00EAE809 | 6 | frexp | Import thunk: indirect jump to frexp. |
| 0x00EAE80F | 6 | modf | Import thunk: indirect jump to modf. |
| 0x00EAE815 | 6 | _CIatan2 | CRT intrinsic thunk for atan2. Indirect jump to UCRT _CIatan2 implementation. |
| 0x00EAE81B | 6 | _CIcosh | CRT intrinsic thunk for cosh. Indirect jump to UCRT _CIcosh implementation. |
| 0x00EAE821 | 6 | _CIfmod | CRT intrinsic thunk for fmod. Indirect jump to UCRT _CIfmod implementation. |
| 0x00EAE827 | 6 | _CIsinh | CRT intrinsic thunk for sinh. Indirect jump to UCRT _CIsinh implementation. |
| 0x00EAE82D | 6 | _CItanh | CRT intrinsic thunk for tanh. Indirect jump to UCRT _CItanh implementation. |
| 0x00EAE8A5 | 6 | _gmtime64 | CRT thunk for _gmtime64. Indirect jump to UCRT gmtime64 implementation. |
| 0x00EAE8C3 | 6 | remove | CRT thunk for remove. Indirect jump to UCRT file removal implementation. |
| 0x00EAE92F | 6 | _recalloc | CRT thunk for _recalloc. Indirect jump to UCRT recalloc (realloc+zero) implementation. |
| 0x00EAE97D | 6 | terminate | CRT thunk for terminate. Indirect jump to UCRT terminate() implementation. |
| 0x00EAE983 | 6 | fdclass | CRT thunk for fdclass. Indirect jump to UCRT float classification function. |
| 0x00EAE989 | 6 | dclass | CRT thunk for dclass. Indirect jump to UCRT double classification function. |
| 0x00EAE9D1 | 6 | abort | CRT thunk for abort. Indirect jump to UCRT abort() implementation. |
| 0x00EAEA1F | 6 | atof | CRT thunk for atof. Indirect jump to UCRT string-to-double conversion. |
| 0x00EAEA3D | 6 | roundf | CRT thunk for roundf. Indirect jump to UCRT float rounding implementation. |
| 0x00EAEAB5 | 6 | seh_filter_dll | CRT thunk for SEH filter in DLL. Indirect jump to UCRT DLL exception filter. |
| 0x00EAEAC7 | 6 | initialize_onexit_table | CRT thunk for _initialize_onexit_table. Sets up the module's atexit callback table. |
| 0x00EAEACD | 6 | register_onexit_function | CRT thunk for _register_onexit_function. Registers a callback in the module's onexit table. |
| 0x00EAEAE5 | 6 | _cexit | CRT thunk for _cexit. Indirect jump to UCRT _cexit (cleanup without termination). |
| 0x00EAEAEB | 6 | _callnewh | CRT thunk for _callnewh. Calls the new handler when operator new fails. |
| 0x00EAEB09 | 6 | get_narrow_winmain_command_line | CRT thunk for _get_narrow_winmain_command_line. Returns the narrow-char WinMain command line string. |
| 0x00EAEB0F | 6 | initterm | CRT thunk for _initterm. Calls an array of function pointers between two bounds during CRT init. |
| 0x00EAEB15 | 6 | initterm_e | CRT thunk for _initterm_e. Calls an array of function pointers with error checking during CRT init. |
| 0x00EAEB2D | 6 | register_thread_local_exe_atexit_callback | CRT thunk for _register_thread_local_exe_atexit_callback. Registers thread-local storage cleanup on exit. |
| 0x00EAEB39 | 6 | set_new_mode | CRT thunk for _set_new_mode. Controls whether malloc calls the new handler on failure. |
| 0x00EAED97 | 120 | __filter_x86_sse2_floating_point_exception_default | VS2019 SSE2 floating-point exception filter. Translates MXCSR status flags into specific CRT exception codes for x86 SSE2 FP exceptions. |
| 0x00F5CE43 | 5 | __CxxFrameHandler | : cxxframehandler, small utility function |
| 0x0102A7D0 | 11 | set_vtable_ptr_CMouseTracker | Sets vtable pointer at PTR_PTR_01319ea0 to CMouseTracker's scalar_deleting_dtor vtable (PTR_CMouseTracker__scalar_deleting_dtor_0110c4d0). Called during static initialization. |
| 0x01046910 | 66 | tls_destroy_map_01046910 | TLS destructor that destroys an STL map stored in thread-local storage. |
| 0x01056C50 | 66 | tls_destroy_map_01056c50 | TLS destructor that destroys an STL map stored in thread-local storage. |
| 0x010572E0 | 66 | tls_destroy_map_010572e0 | TLS destructor that destroys an STL map stored in thread-local storage. |
| 0x01057650 | 66 | tls_destroy_map_01057650 | TLS destructor that destroys an STL map stored in thread-local storage. |
| 0x01067FC0 | 66 | tls_destroy_map_01067fc0 | TLS destructor that destroys an STL map stored in thread-local storage. |
| 0x01068B00 | 66 | tls_destroy_map_01068b00 | TLS destructor that destroys an STL map stored in thread-local storage. |
| 0x01068E70 | 66 | tls_destroy_map_01068e70 | TLS destructor that destroys an STL map stored in thread-local storage. |
| 0x010691E0 | 66 | tls_destroy_map_010691e0 | TLS destructor that destroys an STL map stored in thread-local storage. |
| 0x01069550 | 66 | tls_destroy_map_01069550 | TLS destructor that destroys an STL map stored in thread-local storage. |
| 0x010698C0 | 66 | tls_destroy_map_010698c0 | TLS destructor that destroys an STL map stored in thread-local storage. |
| 0x01069C30 | 66 | tls_destroy_map_01069c30 | TLS destructor that destroys an STL map stored in thread-local storage. |
| 0x01069FA0 | 66 | tls_destroy_map_01069fa0 | TLS destructor that destroys an STL map stored in thread-local storage. |
| 0x0106A4A0 | 66 | tls_destroy_map_0106a4a0 | TLS destructor that destroys an STL map stored in thread-local storage. |
| 0x0106A810 | 66 | tls_destroy_map_0106a810 | TLS destructor that destroys an STL map stored in thread-local storage. |
| 0x0106AB80 | 66 | tls_destroy_map_0106ab80 | TLS destructor that destroys an STL map stored in thread-local storage. |
| 0x0106B260 | 66 | tls_destroy_map_0106b260 | TLS destructor that destroys an STL map stored in thread-local storage. |
| 0x0106B5D0 | 66 | tls_destroy_map_0106b5d0 | TLS destructor that destroys an STL map stored in thread-local storage. |
| 0x0106B950 | 66 | tls_destroy_map_0106b950 | TLS destructor that destroys an STL map stored in thread-local storage. |
| 0x0108B2B0 | 10 | thunk_to_CGameObject__destroy_all_containers | Thunk that calls CGameObject__destroy_all_containers. Used as an atexit callback to clean up all game object containers at shutdown. |
| 0x0109D77F | 1 | __break | Debug breakpoint instruction (INT3) |
| 0x010A5560 | 10 | thunk_to_CNavigator__dtor | Thunk that forwards to CNavigator__dtor(). Used as atexit callback. |
| 0x010B0E40 | 66 | seh_STL_map_destroy_010b0e40 | SEH wrapper calling STL_map_destroy. Atexit/destructor callback for map cleanup. |
| 0x010B0EA0 | 66 | seh_CRenderPipeline_destroy_010b0ea0 | SEH wrapper calling CRenderPipeline__destroy_linked_list_and_vector. Render pipeline cleanup. |
| 0x010B1210 | 66 | seh_STL_map_destroy_010b1210 | SEH wrapper calling STL_map_destroy. Atexit/destructor callback for map cleanup. |
| 0x010B1260 | 66 | seh_CRenderPipeline_destroy_010b1260 | SEH wrapper calling CRenderPipeline__destroy_linked_list_and_vector. Render pipeline cleanup. |
| 0x010B15D0 | 66 | seh_STL_map_destroy_010b15d0 | SEH wrapper calling STL_map_destroy. Atexit/destructor callback for map cleanup. |
| 0x010B1620 | 66 | seh_CRenderPipeline_destroy_010b1620 | SEH wrapper calling CRenderPipeline__destroy_linked_list_and_vector. Render pipeline cleanup. |
| 0x010B1990 | 66 | seh_STL_map_destroy_010b1990 | SEH wrapper calling STL_map_destroy. Atexit/destructor callback for map cleanup. |
| 0x010B19E0 | 66 | seh_CRenderPipeline_destroy_010b19e0 | SEH wrapper calling CRenderPipeline__destroy_linked_list_and_vector. Render pipeline cleanup. |
| 0x010B1D50 | 66 | seh_STL_map_destroy_010b1d50 | SEH wrapper calling STL_map_destroy. Atexit/destructor callback for map cleanup. |
| 0x010B1DA0 | 10 | thunk_to_CGameMode__dtor | Thunk: jumps to CGameMode__dtor at 0x00dc61d0. |
| 0x010C6C63 | 10 | thunk_to_CAtlBaseModule_destructor_010c6c63 | Calls CAtlBaseModule destructor on global ATL module instance |
| 0x010C6C70 | 11 | nop_stub_010c6c70 | Empty no-op stub function. Does nothing and returns immediately. |
| 0x03DE8040 | 191 | resolve_api_function_03de8040 | Dynamically resolves API function address via GetProcAddress. |
No function in this part matches that. Search all 47,061 functions instead.