Located symbols in the live binaries.
D2Client.DrawGamefunctionverified
0x6FAF4230 D2Client
main world render entry. body: PASS1(0x44302) -> tilesub(0x44307) -> PASS2(0x4436F, gated mode!=3) -> compositor(0x4437B) -> present #10040(0x443B9) -> RET(0x443BE)
D2Client.Pass1Floorfunctionverified
0x6FB3B0C0 D2Client
floor pass wrapper; esi=ctx, [esp+4]=bTilesOnly, ret 4; calls DrawRooms
D2Client.Pass2WallsUnitsfunctionverified
0x6FB3B110 D2Client
wall/roof + unit pass; eax=CullingSpec; gated cmp[ScreenOpenMode],3;je
D2Client.DrawRoomsfunctionverified
0x6FB2A9F0 D2Client
builds room-iteration RECT from ctx draw-window+scroll (band=[scrollX,scrollX+(R-L)]); per-tile cull skip if tileWorldX>RECT.R; grid helper 0x6FB2A0D0 sizes ctx+0xEAA8 (HEAP UAF trap on save/restore)
D2Client.FloorFlushfunctionverified
0x6FB4ED50 D2Client
floor tile flush; screenX=ctx+0x04-ctx+0x24+tileAbsX; NO inline clip; hands each tile to the cel blit thunks
D2Client.CelBlitThunkOpaquefunctionverified
0x6FABD0D2 D2Client FF 25 3C EC B7 6F
jmp [IAT 0x6FB7EC3C] -> D2gfx #10001. TILE-DEDICATED; the TILEBAND/GROUND-COLLECT counter hook site
D2Client.CelBlitThunkAlphafunctionverified
0x6FABD0D8 D2Client FF 25 40 EC B7 6F
jmp [IAT 0x6FB7EC40] -> D2gfx #10058 (alpha)
D2gfx.CelDrawOpaque_10001functionverified
0x6FA8BB50 D2gfx
mov eax,[0x6FA91268]; call [eax+0x9c]; ret 0x14 -- thin forwarder into the driver cel handler, no clip
D2gfx.Fill_10041functionverified
0x6FA8B080 D2gfx
solid fill; forwarder to driver vtable +0x84; 295 D2Client callers, none targets [960,1280] (overdraw ruled out)
D2Glide.DriverInit_10000functionverified
0x6F8592D0 D2Glide B8 F0 49 86 6F C3
the ONLY export: mov eax,0x6F8649F0; ret -- hands D2gfx the driver dispatch struct
D2Glide.LiveCelHandlerfunctionverified
0x6F8572F0 D2Glide
pfTileDrawLit (dispatch struct +0x9c); the live cel handler D2Client #10001 reaches; calls worker 0x7080
D2Glide.Workerfunctionverified
0x6F857080 D2Glide
gates on [0x6F865A8C]: null -> LIVE drawer 0x6840; non-null -> DEAD 0x6290
D2Glide.LiveDrawerfunctioninferred
0x6F856840 D2Glide
THE live cel->vertex drawer (confirmed fires: [GLIDECULL] edx=ScreenOpenMode). Per-subtile cull vs [esp+0x30]left,[esp+0x38]right narrowed by panel-mode (mode1 right=DispW/2=640 @0x6889, mode2 left=DispW/2-0x20=608 @0x689E). v1.9.1 NOP'd both -> NO visual change => this cull is world-space, NOT the screen clip. Submits via grDrawVertexArrayContiguous
D2Glide.DeadSoftwareDrawerfunctiondecoyverified
0x6F856290 D2Glide
DECOY -- DO NOT HOOK. Software/LFB drawer reached only via the non-taken branch of worker 0x7080; PROVEN dead (v1.9.0 hook never fired). Computes DisplayWidth-DisplayWidth/4=960 but never executes -- the 960 was mis-inferred off this dead code
D2Glide.DeadTwinfunctiondecoyverified
0x6F8561D0 D2Glide
DECOY -- DO NOT HOOK. Uncalled twin of 0x6290 (0 E8/dword refs); identical width math; register-arg convention. Dead
glide3x.grDrawVertexArrayContiguousfunctionverified
glide3x
D2DX Glide-vertex submit = the D2Glide->D2DX crossing. PROBE v1.10.0 (filtered to the tile drawer by return-addr): floor geometry crosses at max screenX 1296, ~138 verts/frame in dead-zone [960,1280). The world geometry REACHES D2DX past 960 yet renders BLACK -> the panel-world clip is IN D2DX (m2 was right).
glide3x.D2DXGetConfiguratorfunctionverified
0x10007850 glide3x
exported _D2DXGetConfigurator@0 (NOT @4 -- the header D2DXConfigurator.h:98 string is a bug; use @0 or ordinal 1). Returns ID2DXConfigurator*; vtable [0]QI [1]AddRef [2]Release [3]SetCustomResolution(w,h) __stdcall. SetCustomResolution sets _customGameSize (a flag consumed at the next grSstWinOpen).
ext.D2Client.DrawCenteredUnicodeTextfunctionsourcedtrustedmir (Diablo-II-Address-Table, public domain)
rva 0xbc4e0 D2Client.dll
Draws centered unicode text on screen. | src: D2Client.dll DrawCenteredUnicodeText Offset 0xBC4E0
ext.D2GFX.DrawCelContextfunctionsourcedtrustedmir (Diablo-II-Address-Table, public domain)
D2GFX.dll
Draws a CEL (sprite) via graphics context — core sprite/cell blit entry point. | src: D2GFX.dll DrawCelContext Ordinal 10041
ext.D2GFX.DrawRectanglefunctionsourcedtrustedmir (Diablo-II-Address-Table, public domain)
D2GFX.dll
Draws a rectangle primitive. Named in FOCUS. | src: D2GFX.dll DrawRectangle Ordinal 10014
ext.D2Win.DrawUnicodeTextfunctionsourcedtrustedmir (Diablo-II-Address-Table, public domain)
D2Win.dll
Draws unicode text. | src: D2Win.dll DrawUnicodeText Ordinal 10150
ext.D2Win.GetPopupUnicodeTextWidthAndHeightfunctionsourcedtrustedmir (Diablo-II-Address-Table, public domain)
D2Win.dll
Measures popup text width/height (layout). | src: D2Win.dll GetPopupUnicodeTextWidthAndHeight Ordinal 10177
ext.D2Win.GetUnicodeTextDrawWidthfunctionsourcedtrustedmir (Diablo-II-Address-Table, public domain)
D2Win.dll
Measures drawn text width (layout). | src: D2Win.dll GetUnicodeTextDrawWidth Ordinal 10028
ext.D2Win.GetUnicodeTextNDrawWidthfunctionsourcedtrustedmir (Diablo-II-Address-Table, public domain)
D2Win.dll
Measures drawn text width for N chars (layout). | src: D2Win.dll GetUnicodeTextNDrawWidth Ordinal 10055
ext.D2Win.SetUnicodeTextFontfunctionsourcedtrustedmir (Diablo-II-Address-Table, public domain)
D2Win.dll
Selects active text font for drawing. | src: D2Win.dll SetUnicodeTextFont Ordinal 10184
ext.D2Win.LoadCelFilefunctionsourcedtrustedmir (Diablo-II-Address-Table, public domain)
D2Win.dll
Loads a CEL sprite file. | src: D2Win.dll LoadCelFile Ordinal 10111
ext.D2Win.UnloadCelFilefunctionsourcedtrustedmir (Diablo-II-Address-Table, public domain)
D2Win.dll
Unloads a CEL sprite file. | src: D2Win.dll UnloadCelFile Ordinal 10126
ext.D2CMP.GetCelFromCelContextfunctionsourcedtrustedmir (Diablo-II-Address-Table, public domain)
D2CMP.dll
Retrieves a CEL frame from a CEL context (sprite frame access). | src: D2CMP.dll GetCelFromCelContext Ordinal 10021
ext.D2CMP.CloseCelFilefunctionsourcedtrustedmir (Diablo-II-Address-Table, public domain)
D2CMP.dll
Closes a CEL file (sprite resource cleanup). | src: D2CMP.dll CloseCelFile Ordinal 10065
ext.D2gfx.D2gfx_dll_window_resize_width_heightfunctionsourcedtrustedIAmTrial (SlashWork d2widescreenhack)
rva 0x7fe8 D2gfx.dll
Resizes the game window on resolution change. Sets screen width [eax] then screen height [ecx]. Left unmodified: game crunches elements, mouse cannot move past 640th x / 480th y, black lines. RENDER/window sizing. | src: ORIG: C7 00 80020000 mov [eax],00000280 (640 screen width); C7 01 E0010000 mov [ecx],000001E0 (480 screen height). PATCH: C7 00 2A040000 mov [eax],0000042A (1066); C7 01 5802000
ext.D2gdi.D2gdi_dll_Part_1_game_width_height_RENDERfunctionsourcedtrustedIAmTrial (SlashWork d2widescreenhack)
rva 0x6d55 D2gdi.dll
Sets values determining how D2 renders the game (width render into esi, height render into edx). Unaltered: stretches 640x480 to fill window then crashes. WIDTH RENDER USES 1064 (0x428) NOT 1066 — author: non-multiple-of-4 width overflows onto LEFT side of screen. Height render 600. | src: ORIG: BE 80020000 mov esi,00000280 (640 game's width render); BE E0010000 mov edx,000001E0 (480 height render). PATCH: BE 28040000 mov esi,00000428 (1064 width render); BE 58020000
ext.D2gdi.D2gdi_dll_Part_2_x_position_render_cutofffunctionsourcedtrustedIAmTrial (SlashWork d2widescreenhack)
rva 0x706b D2gdi.dll
Sets x-position where D2 should STOP rendering entities (walls, pillars). Unmodified: anything past x=640 not rendered (or incorrectly); no crash. Write target [D2gdi.dll+0xCA9C]. RENDER BOUNDARY. | src: ORIG: C7 05 9CCA876F 80020000 mov [D2gdi.dll+0xCA9C],00000280 (640, x-pos stop rendering). PATCH: C7 05 9CCA876F 2A040000 mov [D2gdi.dll+0xCA9C],0000042A (1066)
ext.D2client.D2Client_dll_Part_1_FOV_width_height_logicfunctionsourcedtrustedIAmTrial (SlashWork d2widescreenhack)
rva 0x10e29 D2client.dll
THE 0x10E29 BLOCK. Sets D2 field-of-vision, character/map positioning, and UI element positions. mov eax,0x280 then stores eax to [D2client+0xDBC48] (width logic), then mov [D2client+0xDBC4C],0x1E0 (height logic). Unmodified: renders as 640x480 and places game at upper-left of window. The width store (A3 48BCB86F) is left UNMODIFIED; only the eax immediate (640->1066) and the height DWORD (480->600) change. | src: ORIG: B8 80020000 mov eax,00000280 (640); A3 48BCB86F mov [D2client.dll+0xDBC48],eax (width logic); C7 05 4CBCB86F E0010000 mov [D2client.dll+0xDBC4C],000001E0 (480 height logic).
ext.D2client.D2Client_dll_Part_2_UI_panel_offset_table_origfunctionsourcedtrustedIAmTrial (SlashWork d2widescreenhack)
rva 0xc3a11 D2client.dll
THE 0xC3A11 UI-PANEL OFFSET SITE. Original 640x480-mode panel placement: writes ebx (=0) into panel x-offset [+0x11B9A0] and y-offset [+0x11B9A4]. Governs alignment of quest buttons, waypoint buttons, mercenary stats. reg->mem is fewer bytes than DWORD-const->mem, so 8 extra bytes needed to inject HD constants. | src: 89 1D A0B9BC6F mov [D2client.dll+0x11B9A0],ebx (x-offset of panels, ebx=0); 89 1D A4B9BC6F mov [D2client.dll+0x11B9A4],ebx (y-offset of panels, ebx=0)
ext.D2client.D2Client_dll_Part_2_wider_view_w_75_16_jne_ORIfunctionsourcedtrustedIAmTrial (SlashWork d2widescreenhack)
rva 0xc39f9 D2client.dll
THE 75 16 PER-RESOLUTION BRANCH. Original: jne to 0xC3A11 (640x480 code) if not 800x600 mode. 800x600 block sets x-offset=0x50(80) and y-offset=0xFFFFFFC4(-60), then EB 0C jmp to 0xC3A1D past the 640x480 code. 640x480 block (at 0xC3A11) writes ebx(0) to both offsets. jne displacement = 0x16. | src: 75 16 jne D2client.dll+0xC3A11 (jump to 640x480 code if not 800x600); C7 05 A0B9BC6F 50000000 mov [+0x11B9A0],00000050 (80 x-offset); C7 05 A4B9BC6F C4FFFFFF mov [+0x11B9A4],FFFFF
ext.D2client.D2Client_dll_Part_2_SOLUTION_reordered_75_0C_jfunctionsourcedtrustedIAmTrial (SlashWork d2widescreenhack)
rva 0xc39f9 D2client.dll
PATCHED per-resolution branch: author reorders so the shared y-offset store (-60) runs FIRST for both 800x600 and 1066x600 (both height 600), freeing 6 bytes and cutting needed bytes 8->4. jne displacement CHANGED from 0x16 to 0x0C. Now: write y-offset -60; jne 0xC3A11 (=1066x600 code) if not 800x600; 800x600 sets x=0x50(80); jmp past; the 0xC3A11 '1066x600 code' sets x-offset=0xD5(213); two trailing 90 NOPs (leftover bytes). CONCLUSION ON PANEL SHIFT: panel x-offset 213 for | src: C7 05 A4B9BC6F C4FFFFFF mov [+0x11B9A4],FFFFFFC4 (-60 y-offset); 75 0C jne D2client.dll+0xC3A11 (jump to 1066x600 code if not 800x600); C7 05 A0B9BC6F 50000000 mov [+0x11B9A0],0000
ext.D2glide.D2glide_dll_render_width_heightfunctionsourcedtrustedIAmTrial (SlashWork d2widescreenhack)
rva 0xdcd5 D2glide.dll
Glide mode entity render dimensions. Writes rendering width [D2glide.dll+0x15A68] and height [D2glide.dll+0x15B04]. Unchanged: entities rendered at incorrect location. RENDER. | src: ORIG: C7 05 685A866F 80020000 mov [D2glide.dll+0x15A68],00000280 (width 640); C7 05 045B866F E0010000 mov [D2glide.dll+0x15B04],000001E0 (height 480). PATCH: ...2A040000 (1066); ..
ext.glide3x.glide3x_dll_window_width_heightfunctionsourcedtrustedIAmTrial (SlashWork d2widescreenhack)
rva 0xc0d5 glide3x.dll
Sets D2 (Glide) window size. Loads ptr [glide3x.dll+0x1C9A0] (width addr) into edx then writes 640; loads ptr [glide3x.dll+0x1C82C] (height addr) into ecx then writes 480. NOTE: Cheat-Engine relative addresses differ from hex-editor addresses (offset by 0xA00). In the printed PATCH the loader/immediate opcodes C7 02 80020000 / C7 01 E0010000 are shown unchanged but the target values in comments become 1066/600 — the immediates to actually write are 0000042A and 00000258. | src: 8B 15 A0C94100 mov edx,[glide3x.dll+0x1C9A0] (Glide window width addr); C7 02 80020000 mov [edx],00000280 (640->1066 0000042A); 8B 0D 2CC84100 mov ecx,[glide3x.dll+0x1C82C] (height
ext.d2client draw_screen_background.DrawLeftScreenBackgroundfunctionsourcedtrustedMir Drualga (SGD2FreeRes)
d2client draw_screen_background
Fills the LEFT half of the screen. First draws a solid black rectangle over the left half to block transparent-DC6 cheats, then tiles the config screen-background DC6 across it. This is the perimeter/letterbox fill on the left of the 640-wide play area. | src: ::d2::d2gfx::DrawRectangle(0, 0, resolution.width / 2, resolution.height, 0, ::d2::DrawEffect::kNone);
ext.d2client draw_screen_background.DrawRightScreenBackgroundfunctionsourcedtrustedMir Drualga (SGD2FreeRes)
d2client draw_screen_background
Fills the RIGHT half of the screen. Draws a black rectangle from x=width/2 to x=width over full height, then tiles the background DC6 rightward. Left+Right together produce the full perimeter fill around the centered 640x480 UI region. | src: ::d2::d2gfx::DrawRectangle(resolution.width / 2, 0, resolution.width, resolution.height, 0, ::d2::DrawEffect::kNone);
ext.draw_screen_background entry.Sgd2fr_D2Client_DrawScreenBackgroundfunctionsourcedtrustedMir Drualga (SGD2FreeRes)
draw_screen_background entry
Public interception entry (extern "C" __cdecl). Reads d2client::GetScreenOpenMode() and dispatches: kRight -> DrawRight{Background,BorderFrame,BackgroundRibbon}; kLeft -> DrawLeft*; kBoth -> both; kNone -> nothing. Then calls original d2::d2client::DrawScreens(). Declared in replacement.hpp. | src: extern "C" void __cdecl Sgd2fr_D2Client_DrawScreenBackground();
ext.patch_1_09dcpp GetPatchAddressAndSize01.DrawScreenBackground_CALL_hook_1_13cfunctionsourcedtrustedMir Drualga (SGD2FreeRes)
rva 0xc3aa6 patch_1_09d.cpp GetPatchAddressAndSize01
1.13c call-branch patch that redirects into Sgd2fr_D2Client_DrawScreenBackground via the asm shim InterceptionFunc01. Found by tracing the 'ACT%d' string usage to the function return. Other versions: 1.09D 0x8696B, 1.10 0x81F08, 1.12A 0x90216, 1.13D 0x1D4A6, LoD1.14C 0x5264D, LoD1.14D 0x56FAF (all size 5).
ext.patch_1_09dcpp GetPatchAddressAndSize02.Disable_stock_LEFT_screen_bg_1_13cfunctionsourcedtrustedMir Drualga (SGD2FreeRes)
rva 0x271ed patch_1_09d.cpp GetPatchAddressAndSize02
NOP patch removing the game's original left-screen 800BorderFrame draw. Located via the 'Panel\800BorderFrame' string (two usages; this is the left one). 1.09D 0x58F1B(sz0x96), 1.10 0x5F4EB(0x9B), 1.12A 0x8218D(0x9A), 1.13D 0x6D2DD(0x9A), LoD1.14C 0x94B0C(0xAA), LoD1.14D 0x9865E(0x9E).
ext.patch_1_09dcpp GetPatchAddressAndSize03.Disable_stock_RIGHT_screen_bg_1_13cfunctionsourcedtrustedMir Drualga (SGD2FreeRes)
rva 0x270f1 patch_1_09d.cpp GetPatchAddressAndSize03
NOP patch removing the game's original right-screen 800BorderFrame draw. 1.09D 0x58FF0(0xAC), 1.10 0x5F5C0(0xAC), 1.12A 0x82094(0xB9), 1.13D 0x6D1E1(0xBD), LoD1.14C 0x94BF1(0xB3), LoD1.14D 0x98733(0xA7).
ext.set_screen_shift.Sgd2fr_D2Client_SetScreenShiftfunctionsourcedtrustedMir Drualga (SGD2FreeRes)
set_screen_shift
THE origin of the -320 render shift. Recomputes D2's screen-shift so the 640x480 play area is centered. screen_shift_x = (general_display_width/2) - (640/2); screen_shift_y = -((general_display_height/2) - (480/2)). Note the 640/2 = 320 term and the NEGATION on the Y term. For a 1280x720 display: shift_x = 640-320 = 320, shift_y = -(360-240) = -120. The '-320'-family value is the (640/2) offset that recenters the viewport origin. Uses d2client::GetGeneralDisplayWidth/Height a | src: int screen_shift_x = (general_display_width / 2) - (640 / 2); int screen_shift_y = -((general_display_height / 2) - (480 / 2)); ::d2::d2client::SetScreenShiftX(screen_shift_x);
ext.set_screen_shift/patch_1_09dcpp.SetScreenShift_CALL_hook_1_13cfunctionsourcedtrustedMir Drualga (SGD2FreeRes)
rva 0xc39f6 set_screen_shift/patch_1_09d.cpp
Call-branch patch feeding Sgd2fr_D2Client_SetScreenShift. Found via write-breakpoint on ScreenShiftX/Y variable. 1.09D 0x865BF, 1.10 0x81B8F, 1.12A 0x90166, 1.13D 0x1D3F6, LoD1.14C 0x5259B, LoD1.14D 0x56EFD (all size 0x27 = 0x...1D-0x...F6).
ext.set_tile_culling_bound.Sgd2fr_D2Client_SetTileCullingBoundfunctionsourcedtrustedMir Drualga (SGD2FreeRes)
set_tile_culling_bound
Sets the map/tile draw and culling windows. draw_window_rect = SetRect(left,top,right,bottom) from args. tile_culling_window base = SetRect(-80, -80, width+80, height+40) using GetGeneralDisplayWidth/Height. If perspective mode enabled, expands top/left/right/bottom by ratios (866px up = -204.375 unit space; ratio = 1732/(1732-height/2) - 1, capped at 1.0; bottom uses ratio = 1 - 1500/(1500+height/2)). Finally sets culling_spec->flags |= 0x1. The -80/-80/+80/+40 margins are t | src: SetRect(tile_culling_rect, -80, -80, width + 80, height + 40); ... culling_spec->flags |= 0x1;
ext.set_tile_culling_bound/patch_1_11cpp.SetTileCullingBound_JMP_hook_1_13cfunctionsourcedtrustedMir Drualga (SGD2FreeRes)
rva 0x8a4d0 set_tile_culling_bound/patch_1_11.cpp
Jump-branch patch to the tile-culling replacement (via patch_1_11_shim). Found via 'Perspective' Video-Options string -> first D2Client-space call. 1.11 0x5B560, 1.11B 0x927A0, 1.12A 0xBA990, 1.13ABeta 0x3F490, 1.13D 0xB5330, LoD1.14A 0xB5330 (all size 5). Separate patch_1_07.cpp covers 1.07-1.10 & 1.14A-D with different offsets (e.g. 1.09D 0x16000, LoD1.14C 0x71D30, LoD1.14D 0x76000).
ext.set_cel_display_left_and_right.Sgd2fr_D2GDI_SetCelDisplayLeftAndRightfunctionsourcedtrustedMir Drualga (SGD2FreeRes)
set_cel_display_left_and_right
Sets the D2GDI cel horizontal draw window to the full width: SetCelDisplayLeft(0), SetCelDisplayRight(resolution.width). Resolution from GetIngameResolutionFromId(resolution_mode). This is the render-window widening that removes the stock 640-wide clip so the perimeter can be drawn. | src: d2::d2gdi::SetCelDisplayLeft(0); d2::d2gdi::SetCelDisplayRight(resolution.width);
ext.d2gdi set_cel_display_left_and_right/patch_1_13ccpp.SetCelDisplayLeftAndRight_JMP_hook_1_13cfunctionsourcedtrustedMir Drualga (SGD2FreeRes)
rva 0x7049 d2gdi set_cel_display_left_and_right/patch_1_13c.cpp
Jump-branch patch in D2GDI (not D2Client) for the cel display left/right. 1.11 0x6529, 1.11B 0x7239, 1.12A 0x6599, 1.13ABeta 0x65F9, 1.13C 0x7049, 1.13D 0x7E99 (size 0x2E each). Library = kD2GDI.
ext.set_general_display_width_and_height.Sgd2fr_D2Client_SetGeneralDisplayWidthAndHeighfunctionsourcedtrustedMir Drualga (SGD2FreeRes)
set_general_display_width_and_height
Feeds the resolution into the GeneralDisplayWidth/Height globals that everything above reads: SetGeneralDisplayWidth(resolution.width), SetGeneralDisplayHeight(resolution.height). Also cycles SetInventoryArrangeMode(inventory_arrange_mode++) as a workaround to stop inventory arrangement from transferring (overflow intentional). | src: d2::d2client::SetGeneralDisplayWidth(resolution.width); d2::d2client::SetGeneralDisplayHeight(resolution.height);
ext.position_realignment.RealignPositionFromCenterfunctionsourcedtrustedMir Drualga (SGD2FreeRes)
position_realignment
Re-anchors a PositionalRectangle from the source (inventory-arrange) resolution center to the current resolution center, preserving width/height. dist = out.Left - source.width/2; out.Left = current.width/2 + dist; out.Right = out.Left + rectangle_width. Same for top/bottom about height/2. Uses GetIngameResolutionFromId(GetResolutionMode()) and GetSourceInventoryArrangeResolution(). | src: out_position_wrapper.SetLeft((current_resolution.width / 2) + dist_from_rect_left_to_display_center);
ext.position_realignment.RealignPositionFromBottomCenterfunctionsourcedtrustedMir Drualga (SGD2FreeRes)
position_realignment
Like RealignPositionFromCenter for X, but anchors Y to the display BOTTOM: dist_from_rect_top_to_display_bottom = source.height - out.Top; out.Top = current.height - dist; out.Bottom = out.Top + rectangle_height. Used for bottom-docked UI (belt/skill bar).
ext.DisableScrollOfInifussRectPatch_1_07_NOPfunctionsourcedtrustedMir Drualga (SGD2FreeRes)
NOPs the D2GFX.DrawRectangle call that draws the black rectangle on the Scroll-of-Inifuss (Cain quest) screen, which otherwise mis-renders at high res. Located via the '%s\UI\MENU\scroin' string then scrolling up to the DrawRectangle call. Single NOP patch per version. 1.13C at D2Client +0x7C38D (size 0x2D = 0x7C3BA-0x7C38D); 1.09D 0x8330C, 1.12A 0x70FBD, 1.13D 0x7516D, LoD1.14C 0x9C20D, LoD1.14D 0x9FA20 (all size 0x2D). Applies to essentially all versions 1.07-1.14D.
ext.d2dx.RenderContext_UpdateViewportfunctionsourcedtrustedbolrog (D2DX)
d2dx
Sets viewport + scissor from a Rect, then updates the Constants CB. Verbatim: CD3D11_VIEWPORT viewport{ (float)rect.offset.x, (float)rect.offset.y, (float)rect.size.width, (float)rect.size.height }; _deviceContext->RSSetViewports(1,&viewport); CD3D11_RECT scissorRect{ rect.offset.x, rect.offset.y, rect.size.width, rect.size.height }; _deviceContext->RSSetScissorRects(1,&scissorRect); then writes _constants.screenSize[0/1]=size.width/height, invScreenSize=1/size, flags[0]=NoAn | src: CD3D11_VIEWPORT viewport{ (float)rect.offset.x, (float)rect.offset.y, (float)rect.size.width, (float)rect.size.height };
ext.d2dx.UpdateViewport_call_sitesfunctionsourcedtrustedbolrog (D2DX)
d2dx
Called 3 places. SetSizes: UpdateViewport({0,0,_gameSize.width,_gameSize.height}) (offscreen game-size target, offset 0). Present: called with game-size dims AND with _renderRect (the centered/scaled final blit to screen). WriteToScreen: UpdateViewport({0,0,_gameSize.width,_gameSize.height}). Only the Present-with-_renderRect path carries a non-zero centering offset.
ext.d2dx.RenderContext_SetSizesfunctionsourcedtrustedbolrog (D2DX)
d2dx
Stores _gameSize/_windowSize. displaySize = (FullscreenDefault ? _desktopSize : _windowSize). _renderRect = Metrics::GetRenderRect(_gameSize, displaySize, !NoWide flag). Computes desktopCenterX=_desktopSize.width/2, desktopCenterY=(FullscreenDefault?_desktopSize.height/2:_desktopClientMaxHeight/2), reads GetWindowPosition() preferred position (used iff x>=0 && y>=0). Branches Windowed vs FullscreenDefault for placement. Then ClipCursor(); and if(_resources){ ResizeBackbuffer( | src: _renderRect = Metrics::GetRenderRect(_gameSize, displaySize, !_d2dxContext->GetOptions().GetFlag(OptionsFlag::NoWide));
ext.d2dx.RenderContext_Drawfunctionsourcedtrustedbolrog (D2DX)
d2dx
SetBlendState(batch.GetAlphaBlend()); picks atlas via GetTextureCache(batch); SetShaderState with Game vertex+pixel shaders, atlas SRV (batch.GetTextureAtlas()) and Palette Texture1D SRV; then _deviceContext->Draw(batch.GetVertexCount(), startVertexLocation + batch.GetStartVertex()). No positional transform here — geometry comes straight from the vertex buffer; the only offset is the vertex START index. | src: _deviceContext->Draw(batch.GetVertexCount(), startVertexLocation + batch.GetStartVertex());
ext.d2dx.Metrics_GetSuggestedGameSizefunctionsourcedtrustedbolrog (D2DX)
d2dx
First tries MetricsTable exact-match on desktop size (narrow vs wide variant). Fallback: loop scaleFactor=1..8 { size.width=desktop.width/scaleFactor; size.height=desktop.height/scaleFactor; if (desktop.height/(scaleFactor+1) <= 600) break; }. Height cap: if size.height>720 { aspect=desktop.width/desktop.height; size.width=(int32_t)(aspect*720); size.height=720; }. Constants: 600 (break threshold), 720 (max game height), scale range 1..8.
ext.d2dx.Metrics_GetRenderRectfunctionsourcedtrustedbolrog (D2DX)
d2dx
Integer scale: scaleFactor=1; while(gameSize.width*(scaleFactor+1)<=desktop.width && gameSize.height*(scaleFactor+1)<=desktop.height) ++scaleFactor;. Centering (integer): rect.size={gameSize.width*scaleFactor, gameSize.height*scaleFactor}; rect.offset.x=(desktop.width-gameSize.width*scaleFactor)/2; rect.offset.y=(desktop.height-gameSize.height*scaleFactor)/2. Non-integer trigger: if(rect.offset.x<0 || rect.offset.y<0 || (rect.offset.x>=16 && rect.offset.y>=16)) apply fraction
ext.d2dx.SurfaceIdTracker_UpdateBatchSurfaceId_retag_rufunctionsourcedtrustedbolrog (D2DX)
d2dx
Assigns/reuses a surfaceId per batch (tag stored on vertices via SetSurfaceId; used by AA/edge pixel shader, NOT a positional transform). Order: (1) if majorGameState!=InGame -> D2DX_SURFACE_ID_USER_INTERFACE. (2) if chroma-key disabled (text bg) -> UI. (3) gameplay-with-chroma UI reclassifications: draw-line single-pixel '(maxy - miny) == 1' -> UI; bottom band 'miny >= (gameSize.height - 48)' -> UI (48px); panels: '(_gameHelper->ScreenOpenMode() & 1)' left-panel open && 'min
ext.d2dx.OnBufferSwap_UnitMotionPrediction_per_vertex_tfunctionsourcedtrustedbolrog (D2DX)
d2dx
KEY per-batch positional translate. Gated by IsFeatureEnabled(Feature::UnitMotionPrediction) && _majorGameState==MajorGameState::InGame. offset = _unitMotionPredictor.GetOffset(_gameHelper->GetPlayerUnit()). Applied to EVERY batch EXCEPT surfaceId==D2DX_SURFACE_ID_USER_INTERFACE and TextureCategory::Player, via _vertices.items[vertexIndex++].AddOffset(-offset.x, -offset.y) (NEGATED). Floor AND wall batches are non-UI/non-player, so BOTH receive -offset; player+UI stay put. No | src: _vertices.items[vertexIndex++].AddOffset(-offset.x, -offset.y);
ext.d2dx.OnDrawLine_weather_particle_motion_offsetfunctionsourcedtrustedbolrog (D2DX)
d2dx
Weather/rain particle motion prediction: computes a directional offset and applies startPos += offset; endPos += offset; to line endpoints before vertex creation (~640-644). Separate from the world-geometry offset; affects only line primitives (weather).
ext.d2dx.Mouse_position_scale_center_mappingfunctionsourcedtrustedbolrog (D2DX)
d2dx
pos.x=(int32_t)(pos.x*scale+mouseOffsetX); pos.y=(int32_t)(pos.y*scale); maps OS cursor into scaled/centered render area (mouseOffsetX centers horizontally in fullscreen). Confirms centering offset is horizontal-only for cursor; not applied to world geometry.
ext.glide3xcpp.grDrawVertexArray_capture_seamfunctionsourcedtrustedbolrog / Necrolis (D2DX)
glide3x.cpp
Primary draw capture. Grabs _ReturnAddress() and forwards to the context factory singleton. This return address is later used to classify the draw as floor/wall/etc. | src: const auto returnAddress = (uintptr_t)_ReturnAddress(); D2DXContextFactory::GetInstance()->OnDrawVertexArray(mode, Count, (uint8_t**)pointers, returnAddress);
ext.glide3xcpp.grDrawVertexArrayContiguous_capture_seamfunctionsourcedtrustedbolrog / Necrolis (D2DX)
glide3x.cpp
Second capture path (used for 4-vertex TRIANGLE_FAN quads). Same _ReturnAddress() -> OnDrawVertexArrayContiguous(mode,Count,vertex,stride,returnAddress). | src: D2DXContextFactory::GetInstance()->OnDrawVertexArrayContiguous(mode, Count, (uint8_t*)vertex, stride, returnAddress);
ext.glide3xcpp.grViewport_is_a_no_op_asserts_origin_0_0functionsourcedtrustedbolrog / Necrolis (D2DX)
glide3x.cpp
Glide grViewport does nothing except assert x==0 && y==0. The game never sets a shifted Glide viewport; all viewport control is D2DX-internal. | src: grViewport(FxI32 x, FxI32 y, FxI32 width, FxI32 height){ assert(x == 0 && y == 0); }
ext.glide3xcpp.grClipWindow_unsupported_grCoordinateSpace_empfunctionsourcedtrustedbolrog / Necrolis (D2DX)
glide3x.cpp
grClipWindow => assert(false, Unsupported). grCoordinateSpace is an empty stub. No Glide-level scissor/clip or coordinate-space transform enters the pipeline. | src: grClipWindow(...){ assert(false && "grClipWindow: Unsupported"); } grCoordinateSpace(GrCoordinateSpaceMode_t mode){ }
ext.d2dx.D2DXContext_PrepareBatchForSubmitfunctionsourcedtrustedbolrog / Necrolis (D2DX)
d2dx
Where a Batch's category is finalized. gameAddress = IdentifyGameAddress(returnAddress); category = RefineTextureCategoryFromGameAddress(existing, gameAddress). Sets StartVertex=_vertexCount, VertexCount. NO position offset applied for any category. | src: batch.SetTextureCategory(_gameHelper->RefineTextureCategoryFromGameAddress(batch.GetTextureCategory(), gameAddress));
ext.d2dx.D2DXContext_OnBufferSwap_unit_MoP_offset_loopfunctionsourcedtrustedbolrog / Necrolis (D2DX)
d2dx
THE ONLY post-capture positional shift of world geometry. If UnitMotionPrediction enabled and InGame: offset=_unitMotionPredictor.GetOffset(playerUnit); then for every batch with surfaceId != D2DX_SURFACE_ID_USER_INTERFACE AND category != Player, each vertex gets AddOffset(-offset.x,-offset.y). Floor AND wall both qualify -> identical uniform shift. | src: if (surfaceId != D2DX_SURFACE_ID_USER_INTERFACE && batch.GetTextureCategory() != TextureCategory::Player){ ... _vertices.items[vertexIndex++].AddOffset(-offset.x, -offset.y); }
ext.d2dx.D2DXContext_DrawBatches_mergefunctionsourcedtrustedbolrog / Necrolis (D2DX)
d2dx
After BulkWriteVertices, merges consecutive batches when same texture-cache/atlas/alphaBlend and combined vertexCount<=65535, else flushes via _renderContext->Draw(mergedBatch,startVertexLocation). Category is NOT part of the merge key and NOT used to offset. | src: _renderContext->GetTextureCache(batch) != _renderContext->GetTextureCache(mergedBatch) || batch.GetTextureAtlas() != mergedBatch.GetTextureAtlas() || batch.GetAlphaBlend() != merge
ext.d2dx.RenderContext_UpdateViewport_single_uniform_vifunctionsourcedtrustedbolrog / Necrolis (D2DX)
d2dx
Sets ONE viewport and ONE scissor rect, both == the passed Rect (offset+size). Also writes Constants.screenSize/invScreenSize used by the vertex shader to map int16 screen coords to NDC. No per-batch or per-category viewport/scissor; set per render-pass only. | src: CD3D11_VIEWPORT viewport{ (float)rect.offset.x, (float)rect.offset.y, (float)rect.size.width, (float)rect.size.height }; ... CD3D11_RECT scissorRect{ rect.offset.x, rect.offset.y,
ext.d2dx.RenderContext_Present_viewport_sequencefunctionsourcedtrustedbolrog / Necrolis (D2DX)
d2dx
Game batches render into the Game framebuffer under UpdateViewport({0,0,_gameSize.width,_gameSize.height}) (set at end of prior Present, line 491). Gamma/AA passes also use {0,0,gameSize}. Final display blit to backbuffer uses UpdateViewport(_renderRect) (centered, letterboxed dest). gameSize=internal render res; renderRect=on-screen placement. | src: UpdateViewport({ 0,0,_gameSize.width, _gameSize.height }); ... UpdateViewport(_renderRect);
ext.d2dx.RenderContext_Draw_per_batch_no_transformfunctionsourcedtrustedbolrog / Necrolis (D2DX)
d2dx
Per merged batch: SetBlendState, pick atlas SRV, SetShaderState(Game VS/PS), then Draw(vertexCount, startVertexLocation + batch.GetStartVertex()). No matrix/offset/scissor per batch or category. | src: _deviceContext->Draw(batch.GetVertexCount(), startVertexLocation + batch.GetStartVertex());
ext.d2dx.UnitMotionPredictor_UnitMotion_GetOffset_iso_pfunctionsourcedtrustedbolrog / Necrolis (D2DX)
d2dx
Converts predicted vs last world pos (16.16 fixed) into a SCREEN-space isometric pixel offset. scaleFactors={32/sqrt2,16/sqrt2}; screenOffset=scaleFactors*{dx-dy,dx+dy}+0.5. Magnitude of the uniform world shift; a few px, never hundreds. | src: const OffsetF scaleFactors{ 32.0f / sqrtf(2.0f), 16.0f / sqrtf(2.0f) }; const OffsetF screenOffset = scaleFactors * OffsetF{ offset.x - offset.y, offset.x + offset.y } + 0.5f;
ext.d2dx.GameHelper_RefineTextureCategoryFromGameAddresfunctionsourcedtrustedbolrog / Necrolis (D2DX)
d2dx
Maps captured return address's GameAddress to a category ONLY when previous category is Unknown: DrawFloor->Floor, DrawWall1/DrawWall2->Wall, else unchanged. Category never triggers coordinate change. | src: case GameAddress::DrawFloor: return TextureCategory::Floor; case GameAddress::DrawWall1: case GameAddress::DrawWall2: return TextureCategory::Wall;
ext.d2dx.OnSstWinOpen_gameSize_windowSize_logicfunctionsourcedtrustedbolrog / Necrolis (D2DX)
d2dx
Computes gameSize from width/height (or _customGameSize override); if NoResMod off, windowSize forced 800x600; if gameSize != 640x480 then windowSize=gameSize. Creates/resizes RenderContext with (gameSize, windowSize*windowScale). Establishes internal render res (gameSize) that becomes the {0,0,gameSize} viewport. | src: Size gameSize{ width, height }; if (_customGameSize.width > 0){ gameSize = _customGameSize; } if (gameSize.width != 640 || gameSize.height != 480){ windowSize = gameSize; }
ext.d2dx.Metrics_GetRenderRect_letterbox_placementfunctionsourcedtrustedbolrog / Necrolis (D2DX)
d2dx
Computes on-screen _renderRect: integer-scales gameSize into desktop/window, centers it (offset=(dst-game*scale)/2); if margins exceed 16px falls back to non-integer scale filling width or height. This centered offset shifts only the final display blit, NOT world batches. | src: Rect rect{ (desktopSize.width - gameSize.width * scaleFactor) / 2, (desktopSize.height - gameSize.height * scaleFactor) / 2, gameSize.width * scaleFactor, gameSize.height * scaleFa
ext.D2GFX.D2GFX_DrawLinefunctionsourcedsourcedd2bs community (ds-hwang/noah- patch-113)
D2GFX
Draws a line between two screen points with color. | src: FUNCPTR(D2GFX, DrawLine, void __stdcall, (int X1, int Y1, int X2, int Y2, DWORD dwColor, DWORD dwUnk), -10010)
ext.D2GFX.D2GFX_DrawRectanglefunctionsourcedsourcedd2bs community (ds-hwang/noah- patch-113)
D2GFX
Fills/draws a screen rectangle with color and transparency mode. | src: FUNCPTR(D2GFX, DrawRectangle, void __stdcall, (int X1, int Y1, int X2, int Y2, DWORD dwColor, DWORD dwTrans), -10014)
ext.D2GFX.D2GFX_DrawAutomapCell2functionsourcedsourcedd2bs community (ds-hwang/noah- patch-113)
D2GFX
Renders a single automap cell/tile at screen xpos/ypos with two brightness values and a color table. Core automap-draw primitive. | src: FUNCPTR(D2GFX, DrawAutomapCell2, void __stdcall, (CellContext* context, DWORD xpos, DWORD ypos, DWORD bright2, DWORD bright, BYTE *coltab), -10041)
ext.D2GFX.D2GFX_GetScreenSizefunctionsourcedsourcedd2bs community (ds-hwang/noah- patch-113)
D2GFX
Returns encoded screen resolution (packed WxH). Render viewport sizing. | src: FUNCPTR(D2GFX, GetScreenSize, DWORD __stdcall, (void), -10031)
ext.D2GFX.D2GFX_GetHwndfunctionsourcedsourcedd2bs community (ds-hwang/noah- patch-113)
D2GFX
Returns the game render window HWND. | src: FUNCPTR(D2GFX, GetHwnd, HWND __stdcall, (void), -10048)
ext.D2WIN.D2WIN_DrawSpritesfunctionsourcedsourcedd2bs community (ds-hwang/noah- patch-113)
rva 0x18750 D2WIN
Draws sprite batch (fastcall). Under 'D2Win Functions' header. | src: FUNCPTR(D2WIN, DrawSprites, void __fastcall, (void), 0x18750)
ext.D2WIN.D2WIN_TakeScreenshotfunctionsourcedsourcedd2bs community (ds-hwang/noah- patch-113)
rva 0x17eb0 D2WIN
Captures the current frame to a screenshot. | src: FUNCPTR(D2WIN, TakeScreenshot, void __fastcall, (), 0x17EB0)
ext.D2WIN.D2WIN_DrawTextfunctionsourcedsourcedd2bs community (ds-hwang/noah- patch-113)
D2WIN
Draws a wide-char string at screen xPos/yPos with color. Primary on-screen text primitive. | src: FUNCPTR(D2WIN, DrawText, void __fastcall, (wchar_t *wStr, int xPos, int yPos, DWORD dwColor, DWORD dwUnk), -10150)
ext.D2WIN.D2WIN_GetTextSizefunctionsourcedsourcedd2bs community (ds-hwang/noah- patch-113)
D2WIN
Measures pixel width (and font file no) of a string for layout/centering. | src: FUNCPTR(D2WIN, GetTextSize, DWORD __fastcall, (wchar_t *wStr, DWORD* dwWidth, DWORD* dwFileNo), -10177)
ext.D2WIN.D2WIN_SetTextSizefunctionsourcedsourcedd2bs community (ds-hwang/noah- patch-113)
D2WIN
Selects the active font/text size for subsequent DrawText calls. | src: FUNCPTR(D2WIN, SetTextSize, DWORD __fastcall, (DWORD dwSize), -10184)
ext.D2WIN.D2WIN_SplitTextfunctionsourcedsourcedd2bs community (ds-hwang/noah- patch-113)
D2WIN
Word-wraps text to a pixel width, returning line array + count (text-layout helper). | src: FUNCPTR(D2WIN, SplitText, SplitText* __fastcall, (wchar_t* text, int* lineCount, int width), -10059)
ext.D2WIN.D2WIN_FreeSplitTextfunctionsourcedsourcedd2bs community (ds-hwang/noah- patch-113)
D2WIN
Frees a SplitText layout result. | src: FUNCPTR(D2WIN, FreeSplitText, void __fastcall, (SplitText* text), -10008)
ext.D2WIN.D2WIN_SetControlTextfunctionsourcedsourcedd2bs community (ds-hwang/noah- patch-113)
D2WIN
Sets the text of a UI Control (edit box/button). UI, borderline render. | src: FUNCPTR(D2WIN, SetControlText, void* __fastcall, (Control* box, wchar_t* txt), -10042)
ext.D2CLIENT.D2CLIENT_GetUnitXfunctionsourcedsourcedd2bs community (ds-hwang/noah- patch-113)
rva 0x1630 D2CLIENT
Returns a unit's world X coordinate. Feeds world->screen projection. | src: FUNCPTR(D2CLIENT, GetUnitX, int __fastcall, (UnitAny* pUnit), 0x1630)
ext.D2CLIENT.D2CLIENT_GetUnitYfunctionsourcedsourcedd2bs community (ds-hwang/noah- patch-113)
rva 0x1660 D2CLIENT
Returns a unit's world Y coordinate. | src: FUNCPTR(D2CLIENT, GetUnitY, int __fastcall, (UnitAny* pUnit), 0x1660)
ext.D2CLIENT.D2CLIENT_ClearScreenfunctionsourcedsourcedd2bs community (ds-hwang/noah- patch-113)
rva 0x48350 D2CLIENT
Clears the screen/framebuffer. | src: FUNCPTR(D2CLIENT, ClearScreen, void __fastcall, (void), 0x48350)
ext.D2CLIENT.D2CLIENT_GetAutomapSizefunctionsourcedsourcedd2bs community (ds-hwang/noah- patch-113)
rva 0x5f080 D2CLIENT
Returns automap size metric used for automap draw scaling. | src: FUNCPTR(D2CLIENT, GetAutomapSize, DWORD __stdcall, (void), 0x5F080)
ext.D2CLIENT.D2CLIENT_NewAutomapCellfunctionsourcedsourcedd2bs community (ds-hwang/noah- patch-113)
rva 0x5f6b0 D2CLIENT
Allocates a new AutomapCell node. | src: FUNCPTR(D2CLIENT, NewAutomapCell, AutomapCell * __fastcall, (void), 0x5F6B0)
ext.D2CLIENT.D2CLIENT_AddAutomapCellfunctionsourcedsourcedd2bs community (ds-hwang/noah- patch-113)
rva 0x61320 D2CLIENT
Links an AutomapCell into an automap layer node list. | src: FUNCPTR(D2CLIENT, AddAutomapCell, void __fastcall, (AutomapCell *aCell, AutomapCell **node), 0x61320)
ext.D2CLIENT.D2CLIENT_RevealAutomapRoomfunctionsourcedsourcedd2bs community (ds-hwang/noah- patch-113)
rva 0x62580 D2CLIENT
Reveals a Room1's automap cells onto an AutomapLayer (with clip flag). Core map-reveal. | src: FUNCPTR(D2CLIENT, RevealAutomapRoom, void __stdcall, (Room1 *pRoom1, DWORD dwClipFlag, AutomapLayer *aLayer), 0x62580)
ext.D2CLIENT.D2CLIENT_InitAutomapLayer_Ifunctionsourcedsourcedd2bs community (ds-hwang/noah- patch-113)
rva 0x62710 D2CLIENT
Initializes/returns the AutomapLayer for a given layer number. | src: FUNCPTR(D2CLIENT, InitAutomapLayer_I, AutomapLayer* __fastcall, (DWORD nLayerNo), 0x62710)
ext.D2CLIENT.D2CLIENT_ClickMapfunctionsourcedsourcedd2bs community (ds-hwang/noah- patch-113)
rva 0x1bf20 D2CLIENT
Handles a click at screen x,y (translates screen->world action). Coordinate-relevant. | src: FUNCPTR(D2CLIENT, ClickMap, void __stdcall, (DWORD MouseFlag, DWORD x, DWORD y, DWORD Type), 0x1BF20)
ext.D2CLIENT.D2CLIENT_GetMouseXOffsetfunctionsourcedsourcedd2bs community (ds-hwang/noah- patch-113)
rva 0x3f6c0 D2CLIENT
Returns the mouse X offset used in screen<->world coordinate math. | src: FUNCPTR(D2CLIENT, GetMouseXOffset, DWORD __fastcall, (void), 0x3F6C0)
ext.D2CLIENT.D2CLIENT_GetMouseYOffsetfunctionsourcedsourcedd2bs community (ds-hwang/noah- patch-113)
rva 0x3f6d0 D2CLIENT
Returns the mouse Y offset used in screen<->world coordinate math. | src: FUNCPTR(D2CLIENT, GetMouseYOffset, DWORD __fastcall, (void), 0x3F6D0)
ext.D2CLIENT.D2CLIENT_PrintGameStringfunctionsourcedsourcedd2bs community (ds-hwang/noah- patch-113)
rva 0x7d850 D2CLIENT
Prints a message to the on-screen game message area. | src: FUNCPTR(D2CLIENT, PrintGameString, void __stdcall, (wchar_t *wMessage, int nColor), 0x7D850)
ext.D2CLIENT.D2CLIENT_PrintPartyStringfunctionsourcedsourcedd2bs community (ds-hwang/noah- patch-113)
rva 0x7d610 D2CLIENT
Prints a party message to screen. | src: FUNCPTR(D2CLIENT, PrintPartyString, void __stdcall, (wchar_t *wMessage, int nColor), 0x7D610)
ext.D2CLIENT.D2CLIENT_DrawRectFramefunctionsourcedsourcedd2bs community (ds-hwang/noah- patch-113)
rva 0xbe4c0 D2CLIENT
Draws a rectangular frame on screen. | src: FUNCPTR(D2CLIENT, DrawRectFrame, void __fastcall, (DWORD Rect), 0xBE4C0)
ext.D2CLIENT.D2CLIENT_BodyClickTable_ASMfunctionsourcedsourcedd2bs community (ds-hwang/noah- patch-113)
rva 0xe0ec4 D2CLIENT
ASM patch anchor near the cursor/hover click-target table (adjacent to CursorHoverX/Y). | src: ASMPTR(D2CLIENT, BodyClickTable, 0xE0EC4)
ext.D2CLIENT.D2CLIENT_ClickMap_I_ASMfunctionsourcedsourcedd2bs community (ds-hwang/noah- patch-113)
rva 0xfada4 D2CLIENT
ASM patch anchor for click-to-move handling (adjacent to AutomapOn 0xFADA8). | src: ASMPTR(D2CLIENT, ClickMap_I, 0xFADA4)
ext.D2CLIENT.D2CLIENT_ClickMap_II_ASMfunctionsourcedsourcedd2bs community (ds-hwang/noah- patch-113)
rva 0x11c4d8 D2CLIENT
ASM patch anchor for click-map coordinate handling. | src: ASMPTR(D2CLIENT, ClickMap_II, 0x11C4D8)
ext.D2CLIENT.D2CLIENT_ClickMap_III_ASMfunctionsourcedsourcedd2bs community (ds-hwang/noah- patch-113)
rva 0x3f5f0 D2CLIENT
ASM patch anchor for click-map (near GetMouseX/YOffset 0x3F6C0/0x3F6D0). | src: ASMPTR(D2CLIENT, ClickMap_III, 0x3F5F0)
ext.D2CLIENT.D2CLIENT_ClickMap_IV_ASMfunctionsourcedsourcedd2bs community (ds-hwang/noah- patch-113)
rva 0x1bf99 D2CLIENT
ASM patch anchor inside ClickMap (0x1BF20 + 0x79). | src: ASMPTR(D2CLIENT, ClickMap_IV, 0x1BF99)
ext.D2GFX.DrawLinefunctionsourcedsourcedSlashDiablo BH / planqi
D2GFX
Draws a line. Args (int X1,int Y1,int X2,int Y2,DWORD dwColor,DWORD dwUnk), __stdcall. Dual = export ordinals. | src: FUNCPTR(D2GFX, DrawLine, void __stdcall, (int X1, int Y1, int X2, int Y2, DWORD dwColor, DWORD dwUnk), -10010, -10013)
ext.D2GFX.DrawRectangle_2functionsourcedsourcedSlashDiablo BH / planqi
D2GFX
Draws a filled/trans rectangle. Args (int X1,int Y1,int X2,int Y2,DWORD dwColor,DWORD dwTrans), __stdcall. | src: FUNCPTR(D2GFX, DrawRectangle, void __stdcall, (int X1, int Y1, int X2, int Y2, DWORD dwColor, DWORD dwTrans), -10014, -10028)
ext.D2GFX.DrawAutomapCellfunctionsourcedsourcedSlashDiablo BH / planqi
D2GFX
Core automap-cell blitter. ASMPTR. Args (CellContext *context,DWORD xpos,DWORD ypos,RECT *cliprect,DWORD bright), __stdcall. | src: ASMPTR(D2GFX, DrawAutomapCell, void __stdcall, (CellContext *context, DWORD xpos, DWORD ypos, RECT *cliprect, DWORD bright), -10079, -10060)
ext.D2GFX.DrawAutomapCell2functionsourcedsourcedSlashDiablo BH / planqi
D2GFX
Second automap-cell draw variant. Args (CellContext* context,DWORD xpos,DWORD ypos,DWORD bright2,DWORD bright,BYTE *coltab), __stdcall. | src: FUNCPTR(D2GFX, DrawAutomapCell2, void __stdcall, (CellContext* context, DWORD xpos, DWORD ypos, DWORD bright2, DWORD bright, BYTE *coltab), -10041, -10042)
ext.D2GFX.DrawCellContextExfunctionsourcedsourcedSlashDiablo BH / planqi
D2GFX
Draws a cell context (sprite) with transparency/color. Args (CellContext *context,int Xpos,int Ypos,int dwl,int nTransLvl,BYTE Color), __stdcall. | src: FUNCPTR(D2GFX, DrawCellContextEx, void __stdcall, (CellContext *context, int Xpos, int Ypos, int dwl, int nTransLvl, BYTE Color), -10019, -10067)
ext.D2GFX.GetScreenSizefunctionsourcedsourcedSlashDiablo BH / planqi
D2GFX
Returns the current screen size. __stdcall (void). Render/viewport query. | src: FUNCPTR(D2GFX, GetScreenSize, DWORD __stdcall, (void), -10031, -10012)
ext.D2WIN.DrawSpritesfunctionsourcedsourcedSlashDiablo BH / planqi
rva 0x18750 D2WIN
Batched sprite draw. __fastcall (void). NOTE: dual values are DIRECT OFFSETS (positive hex), not ordinals — key rebasing distinction. | src: FUNCPTR(D2WIN, DrawSprites, void __fastcall, (void), 0x18750, 0xEAA0)
ext.D2WIN.DrawCellFilefunctionsourcedsourcedSlashDiablo BH / planqi
D2WIN
Draws a CellFile sprite. Args (CellFile * pCellFile,int xPos,int yPos,int div,int trans,int Color), __fastcall. | src: FUNCPTR(D2WIN, DrawCellFile, void __fastcall, (CellFile * pCellFile, int xPos, int yPos, int div, int trans, int Color), -10138, -10172)
ext.D2WIN.DrawTextfunctionsourcedsourcedSlashDiablo BH / planqi
D2WIN
Draws a unicode text string. Args (const wchar_t *wStr,int xPos,int yPos,DWORD dwColor,DWORD dwUnk), __fastcall. | src: FUNCPTR(D2WIN, DrawText, void __fastcall, (const wchar_t *wStr, int xPos, int yPos, DWORD dwColor, DWORD dwUnk), -10150, -10076)
ext.D2WIN.DrawTextBufferfunctionsourcedsourcedSlashDiablo BH / planqi
rva 0x12940 D2WIN
Text-buffer draw routine. ASMPTR with DIRECT OFFSETS (positive hex), not ordinals. | src: ASMPTR(D2WIN, DrawTextBuffer, 0x12940, 0x134D0)
ext.D2WIN.GetTextSizefunctionsourcedsourcedSlashDiablo BH / planqi
D2WIN
Measures text width/height. Args (wchar_t *wStr,DWORD* dwWidth,DWORD* dwFileNo), __fastcall. | src: FUNCPTR(D2WIN, GetTextSize, DWORD __fastcall, (wchar_t *wStr, DWORD* dwWidth, DWORD* dwFileNo), -10177, -10179)
ext.D2WIN.SetTextSizefunctionsourcedsourcedSlashDiablo BH / planqi
D2WIN
Sets the active font/text size. Args (DWORD dwSize), __fastcall. | src: FUNCPTR(D2WIN, SetTextSize, DWORD __fastcall, (DWORD dwSize), -10184, -10047)
ext.D2WIN.GetTextWidthFileNofunctionsourcedsourcedSlashDiablo BH / planqi
D2WIN
Text width + file-number query. Same ordinals as GetTextSize (-10177/-10179) — aliased export. Args (wchar_t *wStr,DWORD* dwWidth,DWORD* dwFileNo), __fastcall. | src: FUNCPTR(D2WIN, GetTextWidthFileNo, DWORD __fastcall, (wchar_t *wStr, DWORD* dwWidth, DWORD* dwFileNo), -10177, -10179)
ext.D2Client (uses D2Common exports).UNITS_GetDrawingPosition_non_perspective_brancfunctionsourcedtrustedkidpaddle94 / Necrolis (Phrozen Keep t=62562)
D2Client (uses D2Common exports)
Non-perspective (isometric) screen position of a unit. Two-line math: X offset minus (camera-X minus secondary-X), Y offset minus camera-Y. This is the core render-position formula for the FOCUS constants. | src: pPos->nX = D2COMMON_GetUnitOffsetX(pUnit) - (*D2CLIENT_6FBC9960 - *D2CLIENT_6FBCC418);
pPos->nY = D2COMMON_GetUnitOffsetY(pUnit) - *D2CLIENT_6FBC995C;
ext.D2Client (uses D2Gfx + D2Common exports).UNITS_GetDrawingPosition_perspective_branchfunctionsourcedtrustedkidpaddle94 / Necrolis (Phrozen Keep t=62562)
D2Client (uses D2Gfx + D2Common exports)
Perspective-mode screen position. Reads unit world position (not offset), guards with D2GFX_CheckPerspectivePosition, transforms via D2GFX_AdjustPerspectivePosition, then applies +/-256 X shift based on UI panel state. | src: int nX = D2COMMON_GetUnitPositionX(pUnit);
int nY = D2COMMON_GetUnitPositionY(pUnit);
int nAdjustX = 0;
int nAdjustY = 0;
if (!D2GFX_CheckPerspectivePosition(nX, nY)) return FALSE;
ext.D2Client.UNITS_GetDrawingPosition_full_signaturefunctionsourcedtrustedkidpaddle94 / Necrolis (Phrozen Keep t=62562)
D2Client
Signature and null-guard of the reconstructed C function that kidpaddle94 describes as a slightly modified version of what the unit-hover handler uses. Returns FALSE on null args or failed perspective-position check. | src: BOOL __fastcall UNITS_GetDrawingPosition(D2UnitStrc* pUnit, D2CoordStrc* pPos)
{
if (!pUnit || !pPos) return FALSE;
ext.D2Client.UNITHOVER_Mainfunctionsourcedtrustedkidpaddle94 / Necrolis (Phrozen Keep t=62562)
0x6FB70D30 D2Client
Unit-hover main handler. Comment notes it 'originally had pUnit arg'; reconstructed as void __fastcall pulling the unit from D2CLIENT_GetSelectedUnit(). Writes gnHoverX/gnHoverY then dispatches by pUnit->dwType. | src: /*
Function: UNITHOVER_Main
Address: D2Client.0xC0D30
Notes: originally had pUnit arg
*/
void __fastcall UNITHOVER_Main()
ext.D2Client.UNITHOVER_Main_non_perspective_hover_mathfunctionsourcedtrustedkidpaddle94 / Necrolis (Phrozen Keep t=62562)
0x6FB70D30 D2Client
Non-perspective hover coordinate math. IDENTICAL X formula to UNITS_GetDrawingPosition, but Y subtracts an extra 8: (*D2CLIENT_6FBC995C - 8). This is the key difference from the drawing-position formula. | src: *D2CLIENT_gnHoverX = D2COMMON_GetUnitOffsetX(pUnit) - (*D2CLIENT_6FBC9960 - *D2CLIENT_6FBCC418);
*D2CLIENT_gnHoverY = D2COMMON_GetUnitOffsetY(pUnit) - (*D2CLIENT_6FBC995C - 8);
ext.D2Client.UNITHOVER_Main_perspective_hover_mathfunctionsourcedtrustedkidpaddle94 / Necrolis (Phrozen Keep t=62562)
0x6FB70D30 D2Client
Perspective hover math. Same CheckPerspectivePosition guard + AdjustPerspectivePosition + UISTATE +/-256 X shift as the drawing-position function, but the final Y adds 16: gnHoverY = nAdjustY + 16. | src: if (!D2GFX_CheckPerspectivePosition(nX, nY)) return;
D2GFX_AdjustPerspectivePosition(nX, nY, 0, &nAdjustX, &nAdjustY);
switch (*D2CLIENT_gnGlobalUiState)
{
case UISTATE_RIGHT:
ext.D2Gfx.D2GFX_CheckPerspectivefunctionsourcedtrustedkidpaddle94 / Necrolis (Phrozen Keep t=62562)
D2Gfx
Boolean gate selecting perspective vs isometric branch. Returns nonzero when D3D perspective (depth distortion) mode is active. No numeric address given in the thread. | src: if (!D2GFX_CheckPerspective())
ext.D2Gfx.D2GFX_CheckPerspectivePositionfunctionsourcedtrustedkidpaddle94 / Necrolis (Phrozen Keep t=62562)
D2Gfx
Validates a world (nX,nY) coordinate for perspective transform; failure aborts (return FALSE / return). Called before D2GFX_AdjustPerspectivePosition. | src: if (!D2GFX_CheckPerspectivePosition(nX, nY)) return FALSE;
ext.D2Gfx.D2GFX_AdjustPerspectivePositionfunctionsourcedtrustedkidpaddle94 / Necrolis (Phrozen Keep t=62562)
D2Gfx
The perspective-adjust entry point. Signature as used: (int nX, int nY, int 0, int* pAdjustX, int* pAdjustY) — takes world X/Y and a literal 0 third arg, writes screen-adjusted X/Y through the two out-pointers. Output then gets the UISTATE +/-256 X correction. | src: D2GFX_AdjustPerspectivePosition(nX, nY, 0, &nAdjustX, &nAdjustY);
ext.D2Common.D2COMMON_GetUnitOffsetX_D2COMMON_GetUnitOffsetfunctionsourcedtrustedkidpaddle94 / Necrolis (Phrozen Keep t=62562)
D2Common
Supply the isometric screen-offset X/Y of a unit; consumed by the NON-perspective branch of both functions. | src: D2COMMON_GetUnitOffsetX(pUnit) ... D2COMMON_GetUnitOffsetY(pUnit)
ext.D2Common.D2COMMON_GetUnitPositionX_D2COMMON_GetUnitPosifunctionsourcedtrustedkidpaddle94 / Necrolis (Phrozen Keep t=62562)
D2Common
Supply the world-space X/Y of a unit; consumed by the PERSPECTIVE branch (fed into D2GFX_AdjustPerspectivePosition). | src: int nX = D2COMMON_GetUnitPositionX(pUnit);
int nY = D2COMMON_GetUnitPositionY(pUnit);
ext.D2Client.UNITHOVER_Main_dwType_dispatchfunctionsourcedtrustedkidpaddle94 / Necrolis (Phrozen Keep t=62562)
0x6FB70D30 D2Client
After computing hover coords, dispatches to per-type handlers: UNIT_PLAYER->UNITHOVER_PlayerUnits, UNIT_MONSTER->UNITHOVER_MonsterUnits, UNIT_OBJECT->UNITHOVER_ObjectUnits, UNIT_ITEM->UNITHOVER_ItemUnits, UNIT_TILE->UNITHOVER_TileUnits; default returns. | src: switch (pUnit->dwType) { case UNIT_PLAYER: UNITHOVER_PlayerUnits(pUnit); case UNIT_MONSTER: UNITHOVER_MonsterUnits(pUnit); case UNIT_OBJECT: UNITHOVER_ObjectUnits(pUnit); case UNIT
ext.GET_VERSION_D2ClientfunctionsourcedtrustedYohann Nicolas / PlugY (Speakus mirror)
rva 0x17f
D2Client.dll version probe: DWORD at base+0x17F. Render-critical module (client-side draw/UI); its detected version selects the offset table used for all client render hacks. | src: GET_VERSION(D2Client, 17F, 00000000, 14500000, 12500000, 0D814800, 0D812800, 0DA01000, 0DA03000);
ext.GET_VERSION_D2gfxfunctionsourcedtrustedYohann Nicolas / PlugY (Speakus mirror)
rva 0x10d
D2gfx.dll (D2Gfx) version probe: DWORD at base+0x10D. Graphics/present module; version selects render offsets. Note col7 (V113c) sig is 00000000 (same literal as D2Client col1) — value copied verbatim as read. | src: GET_VERSION(D2gfx, 10D, EB000000, 006FA700, 00000010, 2A000401, 19000401, 0B210E00, 00000000);
ext.GET_VERSION_D2WinfunctionsourcedtrustedYohann Nicolas / PlugY (Speakus mirror)
rva 0x1699
D2Win.dll version probe: DWORD at base+0x1699. UI/window/panel module; version selects offsets used by the panel (new-interfaces / stash) render hacks. | src: GET_VERSION(D2Win, 1699, 88686F8C, 84686F8C, D094686F, F0030000, 001435E8, 8B088F44, 0013F5E8);
ext.Install_NewInterfaces_entry_point_call_sitefunctionsourcedtrustedYohann Nicolas / PlugY (Speakus mirror)
Panel installer entry point: the new-interfaces (large stash / shared-stash panels + reworked inventory UI) hooks are installed only when the active_newInterfaces config flag is set. The Install_NewInterfaces() DEFINITION is NOT in D2wrapper.cpp (it lives in the interface/panel source, referenced via #include); D2wrapper.cpp holds only the gated call site. | src: if (active_newInterfaces) Install_NewInterfaces();
ext.Install_MultiPageStash_entry_point_call_sitefunctionsourcedtrustedYohann Nicolas / PlugY (Speakus mirror)
Panel installer entry point: the multi-page (paged) stash hooks are installed only when active_multiPageStash is set. Definition not in D2wrapper.cpp (external source via #include); D2wrapper.cpp holds only the gated call site. | src: if (active_multiPageStash) Install_MultiPageStash();
ext.113c ADDRESSES.apply_pos_changefunctionsourcedtrustedNecrolis (d2-rs)
rva 0xda40 1.13c ADDRESSES
Applies a DyPos position change. Signature per comment: __stdcall(DyPos* @ esi, FixedU16, FixedU16, Room*). DyPos pointer passed in ESI (register/thiscall-ish stdcall). | src: // Signature: `__stdcall(DyPos* @ esi, FixedU16, FixedU16, Room*)`
apply_pos_change: 0xda40,
ext.113c ADDRESSES.in_perspectivefunctionsourcedtrustedNecrolis (d2-rs)
1.13c ADDRESSES
perspective-mode check (draw/render path)
ext.113c ADDRESSES.hwndfunctionsourcedtrustedNecrolis (d2-rs)
1.13c ADDRESSES
main window handle accessor
ext.113c ADDRESSES.draw_linefunctionsourcedtrustedNecrolis (d2-rs)
1.13c ADDRESSES
draw line primitive
ext.113c ADDRESSES.find_closest_colorfunctionsourcedtrustedNecrolis (d2-rs)
1.13c ADDRESSES
palette find-closest-color
ext.113c ADDRESSES.gen_weather_particlefunctionsourcedtrustedNecrolis (d2-rs)
rva 0x80700 1.13c ADDRESSES
generate one weather particle. Signature: stdcall(&mut Rng). | src: // Signature: stdcall(&mut Rng)
gen_weather_particle: 0x80700,
ext.113c ADDRESSES.env_array_removefunctionsourcedtrustedNecrolis (d2-rs)
1.13c ADDRESSES
remove entry from environment array
corpus.DrawFramedTextExtfunctionsourcedsourcedMnw1995 (phrozen_code Discord)
D2Win
Draws framed text: (wchar_t* text, int nX, int nY, int nTextColor, int nAlign, int nRectColor). UI text-render primitive. | D2FUNC(D2WIN, DrawFramedTextExt, void, __fastcall, (wchar_t *wszText, int nX, int nY, int nTextColor, int nAlign, int nRectColor), 0xACD0) //D2Win.#10
corpus.D2CreatePL2functionsourcedtrustedNecrolis (phrozen_code Discord)
D2CMP
Builds a PL2 (palette+shift-tables) from a 256-color palette; entry point for changing D2's color scheme. D2PL2Strc* __stdcall D2CreatePL2(BYTE pPalette[256]). | D2CMP.#10000 D2PL2Strc* __stdcall D2CreatePL2(BYTE pPalette[256])
corpus.UNITDRAW_DrawOutlinefunctionsourcedtrustedNecrolis (phrozen_code Discord)
D2Client
Draws the selection/aura outline around a unit. BOOL __fastcall UNITDRAW_DrawOutline(D2UnitStrc* pUnit). Part of the client unit-render path. | Function: UNITDRAW_DrawOutline Address: D2Client.0x6FB59F20
corpus.UNITDRAW_TickOutlinefunctionsourcedtrustedNecrolis (phrozen_code Discord)
D2Client
Decrements a unit's outline tick and returns whether to draw it (unless STATE_ATTACHED). Reads pUnit->dwOutlineTick. Part of unit-render tick. | Function: UNITDRAW_TickOutline Address: D2Client.0x6FB29A40 ... DWORD dwTick = pUnit->dwOutlineTick;
corpus.Unit_visibility_check_is_unit_shownfunctionsourcedtrustedNecrolis (phrozen_code Discord)
D2Client
Under 1.10 determines whether a unit is drawn/shown; forcing its dead-check to return false keeps dead units visible. A gate in the client draw path. | D2Client.0x6FACE8F0 under 1.10 determines if a unit is shown
corpus.Life_orb_drawfunctionsourcedsourcedMnw1995 (phrozen_code Discord)
D2Client
Draws the (life/mana) orb on the HUD panel. Direct panel/HUD render entry. | D2Client.0x6FAFF9D0 draws the orb
corpus.D2AddRoomToDrawList_D2IterateRoomsfunctionsourcedtrustedNecrolis (phrozen_code Discord)
D2Client / D2Common
The room draw-list build step: D2Client passes its D2AddRoomToDrawList callback to D2IterateRooms (D2Common #10049) to walk visible rooms and enqueue them for drawing. Core of the world/floor render pipeline. | PUSH <D2Client.D2AddRoomToDrawList> ... CALL <D2Client.D2IterateRooms> ; JMP to D2Common.#10049
corpus.COLLISION_CheckMaskfunctionsourcedtrustedNecrolis (phrozen_code Discord)
D2Common
Reads the per-subtile collision mask for a room coord: indexes pRoom->pCollisionGrid->pCollisionMask via ((y - subtilesTop)*subtilesWidth - subtilesLeft + x) & fMask. Reveals D2RoomCollisionStrc layout (pCollisionMask, pCoords with dwSubtilesTop/Left/Width). Governs floor/tile walkability that render+pathing share. | WORD __fastcall COLLISION_CheckMask(DRLGRoom* pRoom, int nXpos, int nYpos, WORD fMask) ... pMask[(((nYpos - pCoords->dwSubtilesTop) * pCoords->dwSubti
corpus.Gouraud_view_render_setup_D2CreateView_D2BuifunctionsourcedtrustedNecrolis (phrozen_code Discord)
D2Client
Client-side view/render init trio: D2CreateView (called at 6FAA9501), D2BuildGouraudTables (6FAAB3C7), D2FreeGuaraudTables (6FAABB40). Gouraud tables drive the lighting/shading of the play-area render. | CALL D2Client.6FAB6FF0 ; D2CreateView() ... CALL D2Client.6FAB6AC0 ; D2BuildGouraudTables() ... CALL D2Client.6FAB6EB0 ; D2FreeGuaraudTables()
corpus.PATH_NormalizeCoordsfunctionsourcedtrustedNecrolis (phrozen_code Discord)
D2Common
Normalizes an X/Y coord pair (in place). __forceinline void __fastcall PATH_NormalizeCoords(int* pXpos, int* pYpos). Coordinate transform used in pathing/positioning. | Function: PATH_NormalizeCoords Address: D2Common.#10111
corpus.UNITDRAW_DrawOverlaysfunctionsourcedtrustedNecrolis (phrozen_code Discord)
D2Client
Draws a unit's overlays; repeats the same world-offset/panel-adjust/perspective transform (subtract WorldX/YOffset, else-branch; or D2AdjustPerspectiveCoords + GetPanelAdjust + 16 in perspective). Second confirmed site of the panel-adjust screen-shift logic. void __fastcall(pUnit, dwColorTint, bBack, nXpos, nYpos, bPerspectiveDisabled). | Function: UNITDRAW_DrawOverlays Address: D2Client.0x6FB5A490 ... nXpos += UNITDRAW_GetPanelAdjust(); nXpos += 16; ... nXpos = pCoord.nXpos - UNITDRAW
corpus.D2ReInitRoomfunctionsourcedtrustedNecrolis (phrozen_code Discord)
D2Game
void __fastcall(D2GameStrc* pGame, DRLGRoom* pRoom) - re-initialises a room | D2FUNC(D2GAME,0x85A0,void,__fastcall,D2ReInitRoom,(D2GameStrc* pGame, DRLGRoom* pRoom));
corpus.D2DrawImageToWindow_D2Gfx_10072functionsourcedsourcedDeleted User (phrozen_code Discord)
D2Gfx
D2Gfx image-blit-to-window function (ordinal 10072) at GfxOffset+0x42A0 | D2DrawImageToWindow = (GfxOffset + 0x42A0); // D2Gfx.10072
corpus.GetItemGfxData_Ifunctionsourcedsourcedmisiek1294 (phrozen_code Discord)
D2Client
Internal item gfx data fetch: (D2GfxDataStrc*, UnitAny*, CellFile*, int nDirection, int nFrame, BYTE fFlags, DWORD dwColorTint, int* pIndex). 1.13c offset 0x6E2C0 confirmed. Various naked __fastcall/__stdcall wrappers posted | D2PTR(D2CLIENT, GetItemGfxData_I,0x6E2C0) //0x6FB1E2C0
corpus.ITEMS_GetCompDatafunctionsourcedtrustedNecrolis (phrozen_code Discord)
D2Common
Builds the composite comp/color arrays (nComp[16] +088, nColor[16] +098). eD2CompositeItem enum: HEAD0,TORSO1,LEGS2,RARM3,LARM4,RHAND5,LHAND6,SHIELD7,SPECIAL1-8=8..15,COUNT16,INVALID0xFF | Function: ITEMS_GetCompData Address: D2Common.#10298
corpus.Inventory_panel_draw_functionfunctionsourcedsourcedMnw1995 (phrozen_code Discord)
D2Client
The function that handles inventory drawing. IMPORTANT for panel work: it ALSO draws the Stash, Cube, and Trade panels, so it's non-trivial to isolate a single panel. Advice: search for the .dc6 names to find the globals that store the panel images. | The function that handles the inventory drawing is located at D2Client.0x3EAC0 ... it also draws the Stash, Cube, Trade Panels
corpus.UNITDRAW_GetComponentsfunctionsourcedtrustedNecrolis (phrozen_code Discord)
D2Client
Necrolis-labeled function returning the component/draw-priority bytes for a unit's COF given rotation+frame. Indexes into the COF trailing arrays: nPos = ((nRotation*nFrames + nFrame + sizeof(D2COFLayerInfoStrc)) * nLayers) + nFrames, then adds sizeof(D2COFStrc). Part of the character/unit sprite render path. | Function: UNITDRAW_GetComponents Address: D2Client.0x6FB5EFC0
corpus.D2SetFont_D2Win_10127functionsourcedsourcedDeleted User (phrozen_code Discord)
D2Win
D2Win ordinal 10127 = D2SetFont, at WinOffset+0x09FF0 (6F8A9FF0). Text-render setup. | D2SetFont = (D2Win10127)(WinOffset + 0x09FF0); // D2Win.6F8A9FF0 #10127
corpus.TileGetRarity_exportfunctionsourcedsourcedeezstreet (cla$$ics) (phrozen_code Discord)
D2Common
D2Common export at 6FC711D6 named TileGetRarity (tile rarity accessor). | 6FC711D6 .text Export TileGetRarity
corpus.TileProjectSerialize_exportfunctionsourcedsourcedeezstreet (cla$$ics) (phrozen_code Discord)
D2Common
D2Common export at 6FC71668 named TileProjectSerialize (tile projection serialization). | 6FC71668 .text Export TileProjectSerialize
corpus.Composite_draw_loop_GetItemGfxData_DrawImagefunctionsourcedtrustedLectem (phrozen_code Discord)
D2Client/D2gfx
Layer draw loop over COF layers: for each selectable component, memset gfx, D2CLIENT_GetItemGfxData_6FB5EC80 fills a CelContext (dir, frame, component), then D2GFX_10076_DrawImageFast(&gfx, pXAdjust, pYAdjust, palette). Iterates layerIdx < cofFile->header.layers. Core unit/item composite rendering. | D2CLIENT_GetItemGfxData_6FB5EC80(...) ... D2GFX_10076_DrawImageFast(&tmpGfxInfo, pXAdjust, pYAdjust, nPaletteIndex[0]);
corpus.GetUnitOutlineWhenHit_D2Client_sub_7C39DD0functionsourcedtrustedLectem (phrozen_code Discord)
D2Client
Computes the outline color index when a unit is hit: lazily inits color indices via D2WIN_10034_GetClosestColorIndex (green 0,C0,0 / yellow E0,E0,0 / red E0,0,0 / blue 0,0,C0); for monsters checks MonStatsFlags bit1 (->blue), else colors by life% (<33 red, <66 yellow, else green). Uses ConvertMode #11013, GetAnimOrSeqMode #10369, QuickGetTotalMaxLife #10564, GetUnitStat #10519. | gGreenColorIndex = D2WIN_10034_GetClosestColorIndex(0, 0xC0u, 0); ... nLifePercentage < 33) return gRedColorIndex
corpus.ITEMS_GetItemPalette_D2Common_10893functionsourcedtrustedwhist / Deleted User (phrozen_code Discord)
D2Common
Returns the color/transform palette for drawing an item: __stdcall(pOwner, pItem, pColor, nTransType). Key gotcha: passing the player as pOwner tints inventory items by the player's palette; must pass NULL as pOwner so inventory items draw with correct colors. | BYTE* __stdcall ITEMS_GetItemPalette(Unit* pOwner, Unit* pItem, BYTE* pColor, int nTransType)
corpus.INVENTORYSCREEN_DrawItem_D2Client_0x6B5A0functionsourcedtrustedThe Esoteric Path (Doug, phrozen_code Discord)
D2Client
Draws an item into the inventory/character panel: validates UNIT_ITEM, gets client player, GetItemCacheGfxData + D2CMP_InitGfxData, animates via GfxData.nFrame=((GetTickCount()>>7)+item LoSeed)%nMaxFrames, applies DRAWMODE_TRANS50 for ethereal, then D2GFX_DrawImage(&gfx, nPosX, nPosY+cell->nHeight, -1, drawMode, ITEMS_GetItemPalette(NULL,pItem,&nColor,1)). The pOwner=NULL fix lives here. | INVENTORYSCREEN_DrawItem Address: D2Client.0x6B5A0 ... D2GFX_DrawImage(&GfxData, nPosX, (nPosY + pCell->nHeight), -1, nDrawMode, ITEMS_GetItemPalette(
corpus.D2CheckUnitSelectable_D2Client_6FB5F7F0functionsourcedtrustedNecrolis (phrozen_code Discord)
D2Client
__fastcall(D2UnitStrc* pUnit, D2COFStrc* pCOF) BOOL — determines whether a unit/COF is selectable (mouse-over hit eligibility). | D2Client.6FB5F7F0 BOOL __fastcall D2CheckUnitSelectable(D2UnitStrc* pUnit, D2COFStrc* pCOF)
corpus.UI_INVENTORY_DrawItemBackgroundfunctionsourcedsourcedMnw1995 (phrozen_code Discord)
D2Client
Draws the colored cell background behind an inventory item, given the grid-info struct, X/Y, item width/height in cells, and a color index. Side-panel (inventory) rendering primitive. | void __fastcall UI_INVENTORY_DrawItemBackground(D2InventoryGridInfoStrc* pInventoryGridInfo, int nX, int nY, BYTE nItemWidth, BYTE nItemHeight, DWORD
corpus.UI_INVENTORY_LoadItemBackgroundColorsfunctionsourcedsourcedMnw1995 (phrozen_code Discord)
D2Client
Loads the inventory item-background colors in advance (paired with UI_INVENTORY_DrawItemBackground). | void __fastcall UI_INVENTORY_LoadItemBackgroundColors()
corpus.sub_6FAE0DC0_DrawInventoryItemSocketsfunctionsourcedsourcedmisiek1294 (phrozen_code Discord)
D2Client
Draws socket overlays in the inventory grid. Signature sub_6FAE0DC0(UnitAny* ptItem, InventoryGrid* pGrid, int nLeft, int nBottom). Uses a socket-position lookup array (first 2 dwords = where socket should be drawn, then 10 zero dwords per entry). 1.13c client base is 0x6FAA0000. | void __fastcall sub_6FAE0DC0(UnitAny *ptItem, InventoryGrid *pGrid, int nLeft, int nBottom)
corpus.UI_INVENTORY_socket_item_draw_internalsfunctionsourcedtrustedLectem (phrozen_code Discord)
D2Client / D2Common / D2gfx
Decompiled socket-drawing loop: indexes gSocketPositions by [height + 4*(width + 2*nbSockets) - 13], computes cell-centered X/Y from nGridBoxWidth/Height, sets up a D2GfxData with pCelFile = GEMSOCKET cellfile global (0x6FBB5E34) and calls D2GFX ordinal #10072 DrawImage, then draws each socketed item via DrawInventoryItems at 0x6FB5A320. Panel item/socket render pipeline. | pData.pCelFile = (CelFile *)gpCellfile_GEMSOCKET_6FBB5E34; D2GFX_10072_DrawImage(&pData, v10 - 1, v12, -1, 0, 0);
corpus.UNITDRAW_CheckSelectionfunctionsourcedtrustedNecrolis (phrozen_code Discord)
D2Client
Checks whether a unit is the current selection target during unit drawing; called from the unit-draw routine at 0x6FB5A720. Part of the play-area unit render path. | BOOL __fastcall UNITDRAW_CheckSelection(D2UnitStrc* pUnit) // D2Client.0x6FB286B0
corpus.D2Parse24BitTileLibrary_D2Load24BitTileLibrafunctionsourcedtrustedNecrolis (phrozen_code Discord)
D2CMP
Ordinal exports that parse/load a 24-bit tile library, taking a per-pixel RGB mapping callback. Part of the DT1 tile-loading pipeline for the floor renderer. | 10074 void __stdcall D2Parse24BitTileLibrary(D2TileLibraryStrc* pLibrary, void (__stdcall* pfMap)(DWORD dwRGB))
corpus.D2CLIENT_GetItemGfxDatafunctionsourcedsourcedMnw1995 (phrozen_code Discord)
D2Client
Fills a D2GfxDataStrc for an item given cell file, direction, frame, component and mode. Item graphic-data resolver used in inventory/ground rendering. | BOOL __fastcall D2CLIENT_GetItemGfxData_6FB5EC80(D2GfxDataStrc* pGfxData, D2UnitStrc* pItem, D2CellFileStrc* pCellFile, int nDirection, int nFrame, in
corpus.tile_drawing_setup_fn_D2Client_6FAA3330functionsourcedtrustedThe Esoteric Path (Doug, phrozen_code Discord)
D2Client
Whist identifies D2Client 6FAA3330 (1.10f) as where the tile-draw params struct is set up; Lectem notes one member is ptRect at +0x24 (matches pView slot in the 1.13c struct). Confirms the floor-render param block is built here before the d2gfx tile ordinals are called. | only def I have is the struct that gets passed to the tile drawing d2gfx ordinals and it's really incomplete
corpus.PATH_ScreenToWorldfunctionsourcedtrustedNecrolis (phrozen_code Discord)
D2Common
Screen->world isometric coordinate transform (D2Common ordinal #10108). nX*=2; outX=(nX+nY)>>5; outY=(nX-nY)>>5. Core camera/iso projection math used when converting cursor/screen to tile world coords. | PATH_ScreenToWorld ... nXpos *= 2; *pXpos = (nXpos + nYpos) >> 5; *pYpos = (nXpos - nYpos) >> 5;
corpus.PATH_WorldToScreenfunctionsourcedtrustedNecrolis (phrozen_code Discord)
D2Common
World->screen isometric transform (D2Common #10111): outX=(nX-nY)<<4; outY=(nX+nY)<<3. The inverse projection that places world tiles onto the play-area viewport. | PATH_WorldToScreen ... *pXpos = (nXpos - nYpos) << 4; *pYpos = (nXpos + nYpos) << 3;
corpus.PATH_FlattenCoordsfunctionsourcedtrustedNecrolis (phrozen_code Discord)
D2Common
D2Common #10112 coordinate flatten: outX=(nX-nY)>>1; outY=(nX+nY)>>2. Another iso coordinate transform in the path/render coordinate family. | PATH_FlattenCoords ... *pXpos = (nXpos - nYpos) >> 1; *pYpos = (nXpos + nYpos) >> 2;
corpus.DUNGEON_TILES_ExpandCoords_DUNGEON_ExpandCoofunctionsourcedtrustedNecrolis (phrozen_code Discord)
D2Common
Tile coordinate expansion helpers: DUNGEON_TILES_ExpandCoords = D2Common #10110, DUNGEON_ExpandCoords = D2Common #10113. Part of the dungeon-tile coordinate transform set. | DUNGEON_TILES_ExpandCoords ... Address: D2Common.#10110 ... DUNGEON_ExpandCoords ... Address: D2Common.#10113
corpus.Waypoint_panel_draw_WindowStartX_NegWindowStfunctionsourcedsourcedThaison (phrozen_code Discord)
D2Client
Waypoint-panel drawing loop: WaypointTable at D2CLIENT 0xFCD8C, WaypointCoordTable at 0xDE6D8. Every cell/text is drawn at (*D2CLIENT_WindowStartX + coordTable->nX, coordTable->nY - *D2CLIENT_NegWindowStartY) via D2GFX_DrawCellContext / D2WIN_DrawText. Shows how side-panel UI is offset by the WindowStartX / NegWindowStartY globals -- directly relevant to panel-vs-playarea coordinate origin. | D2GFX_DrawCellContext(&pData, *D2CLIENT_WindowStartX + ptCoordTable->nX, ptCoordTable->nY - *D2CLIENT_NegWindowStartY, ...)
corpus.MULTIRES_DrawRoofTilesfunctionsourcedtrustedNecrolis (phrozen_code Discord)
D2Client
D2Client.0x6FAA3B90 -- draws roof tile layer for the play area, takes D2ViewStrc* pView. | //D2Client.0x6FAA3B90 void __fastcall MULTIRES_DrawRoofTiles(D2ViewStrc* pView)
corpus.MULTIRES_DrawUpperWallTilesfunctionsourcedtrustedNecrolis (phrozen_code Discord)
D2Client
D2Client.0x6FAA63E0 -- draws upper wall tiles; takes a D2DrawSlotStrc, a bOnlyShadows flag, and pView. | void __fastcall MULTIRES_DrawUpperWallTiles(D2DrawSlotStrc* pDrawSlot, BOOL bOnlyShadows, D2ViewStrc* pView)
corpus.MULTIRES_DrawLowerWallTilesfunctionsourcedtrustedNecrolis (phrozen_code Discord)
D2Client
D2Client.0x6FAA6670 -- draws lower wall tiles; takes pView. | void __fastcall MULTIRES_DrawLowerWallTiles(D2ViewStrc* pView)
corpus.MULTIRES_DrawGroundTilesfunctionsourcedtrustedNecrolis (phrozen_code Discord)
D2Client
D2Client.0x6FAA2E60 & D2Client.0x6FAA3330 -- draws the ground tile layers; takes pView. This is the core floor/ground draw pair that Lectem's dFloor snippets belong to. | //D2Client.0x6FAA2E60 & D2Client.0x6FAA3330 void __fastcall MULTIRES_DrawGroundTiles(D2ViewStrc* pView)
corpus.MULTIRES_SetResolutionfunctionsourcedtrustedNecrolis (phrozen_code Discord)
D2Client
D2Client.0x6FAA23B0. Sets gdwScreenWidth/Height (640x480 or 800x600), sets gpExpansionUI, then gdwViewWidth = gdwScreenWidth and gdwViewHeight = gdwScreenHeight - kMultiResolutionUIHeightAdjustment. Calls MULTIRES_ResolutionChanged, MULTIRES_UpdateView(*gdwScreenPanels), D2ResizeAutomap, D2ResizeDialogs. THE function that derives the play-area view size from screen size minus UI height -- core to panel/viewport layou | *gdwViewWidth = *gdwScreenWidth; *gdwViewHeight = *gdwScreenHeight - kMultiResolutionUIHeightAdjustment; ... MULTIRES_UpdateView(*gdwScreenPanels);
corpus.D2WIN_ResizeWindow_10176functionsourcedsourcedNightshades (phrozen_code Discord)
D2Win
D2WIN.0x17B60 (ordinal #10176), __stdcall(nResolutionMode). Passes the resolution mode down to D2GFX #10025 to resize the window rect. | D2FUNC(D2WIN, ResizeWindow, void, __stdcall, (int nResolutionMode), 0x17B60);//D2WIN.#10176 - Pass resolution mode to D2GFX.#10025
corpus.D2GFX_SelectResolutionMode_10025functionsourcedsourcedNightshades (phrozen_code Discord)
D2gfx
D2GFX.0x7FD0 (ordinal #10025). Maps resolution mode -> out RECT right/bottom: 0=640x480, 1/2=800x600, 3=1344x700, default=0x0. Selects resolution mode and resizes the window rect. | D2FUNC(D2GFX,SelectResolutionMode,void,__stdcall,(int nResolutionMode,int *Out_RECT_right,int *Out_RECT_Bottom),0x7FD0)
corpus.PAL_Update_PAL_SetUpdatefunctionsourcedtrustedNecrolis (phrozen_code Discord)
D2Win
D2Win #10179 = PAL_Update() (applies palette); D2Win #10176 = PAL_SetUpdate(BOOL) sets the palette globals to activate/deactivate the update. (Note ordinal #10176 also cited for ResizeWindow -- version ambiguity to watch.) | //D2Win.#10176 void __fastcall PAL_SetUpdate(BOOL bActive) ... activate or deactivate D2Win.#10179
corpus.CLIENT_RunGame_client_app_mode_state_machinefunctionsourcedtrustedNecrolis (phrozen_code Discord)
D2Client
Full client entry point: loads LNG, UI_Init, tables, then runs the app-mode function table (nMode loop) until APPMODE_CONTINUE. APPMODE_RENDER=6 is one of the client app modes. gszInterfaces[] maps D2Client/D2Server/D2Multi/D2Launch/D2EClient. | appmode_t* pfModes = VDEF(appmode_t*,D2CLIENT,0x44EC); ... *VDEF(DWORD*,D2CLIENT,0xD44D8) = nMode;
corpus.CLIENT_LoadDataTablesfunctionsourcedtrustedNecrolis (phrozen_code Discord)
D2Common
Client-side data-table loader; note bPrecacheTileLibraries param governs tile-library precache (floor/tile relevance). | CLIENT_LoadDataTables(D2PoolManagerStrc* pMemPool, BOOL bPrecacheTileLibraries, BOOL bCreateLvlSubList)
corpus.D2Gfx_DrawLine_D2Gfx_DrawRectanglefunctionsourcedtrustedFirehawk (phrozen_code Discord)
D2Client/D2Gfx
Line/rect draw helpers positioned via ScreenWidth/2 - 0x90 (144) etc. DrawRectangle callable at D2Client.0xD0BA on 1.13c; D2gfx_DrawRectangle used with ScreenWidth/ScreenHeight to place a centered rect. | call D2Gfx_DrawLine -> D2Gfx_DrawRectangle
corpus.D2gfx_DrawRectangle_centered_box_callfunctionsourcedtrustedFirehawk (phrozen_code Discord)
D2Client
Draws a rectangle at (ScreenWidth/2 - 0x7F, ScreenHeight-0x1B) sized region -- another centered-on-play-area placement using ScreenWidth/2. | sub eax, 7Fh ... call D2gfx_DrawRectangle
corpus.UI_DrawHealthGlobe_UI_DrawManaGlobe_UI_DrawEfunctionsourcedtrustedFirehawk (phrozen_code Discord)
D2Client
Bottom-panel HUD draw functions (health globe, mana globe, exp bar). | //D2Client.0x6DDE0 - UI_DrawHealthGlobe
corpus.UI_DrawActiveSkillIcon_left_right_skill_panefunctionsourcedtrustedFirehawk (phrozen_code Discord)
D2Client
Draws the active skill icons in the bottom control panel. Left uses nX=0x75; right uses ScreenWidth + 0xFFFFFF5B (i.e. ScreenWidth-0xA5). bLeftSide flag distinguishes the two panels. | push 75h ; nX ... call UI_DrawActiveSkillIcon
corpus.UI_DrawSkillIcons_UI_DrawSkillSelectfunctionsourcedtrustedFirehawk (phrozen_code Discord)
D2Client
Skill-select menu draw. Right column at nX=0x50; left column at ScreenWidth + 0xFFFFFF80 (ScreenWidth-0x80). Input coords for the buttons live at 0x6F710; shifting the listed X offsets moves the popup menu too. | That's in UI_DrawSkillSelect, which is D2Client.0xA77D0
corpus.GAMEUI_DrawInterfacefunctionsourcedtrustedThe Esoteric Path (Doug, phrozen_code Discord)
D2Client
whist: THE entry point for in-game UI drawing -- 'the best place to start looking for ui drawing code is always there'. Takes a GameView*. Top of the panel/HUD draw tree; prime hook target for panel/play-area work. | the best place to start looking for ui drawing code is always there ... GAMEUI_DrawInterface
corpus.Mini_Panel_handlers_drawfunctionsourcedtrustedThe Esoteric Path (Doug, phrozen_code Discord)
D2Client
The mini-panel (the small button strip that opens inventory/character/skill panels). Input handler table + the drawing routine at 0x64990. | The drawing code is at D2Client.0x64990
corpus.DRLG_grid_cell_lookup_sub_6FD75CA0_DRLGGrid_functionsourcedtrustedMnw1995 / Lectem (phrozen_code Discord)
D2Common
Cell lookup: pCellPos[nCellPosId + pCellFlags[nCellFlagId]]. DRLGGrid = {int* pCellPos, int* pCellFlags, nWidth(nCells), nHeight, nullOnInit}; Lectem's D2DrlgCoordIndexStrc variant has pIndexList checked via bitmasks. drlg tile flags at D2DrlgTileDataStrc+0x14. | return pDrlgGrid->pCellPos[nCellPosId + pDrlgGrid->pCellFlags[nCellFlagId]];
corpus.UI_DrawSkillSelect_skill_button_input_coordsfunctionsourcedtrustedFirehawk (phrozen_code Discord)
D2Client
Where the majority of input coordinates for the skill-button inputs live; shifting the X offsets also moves the skill-select popup that appears. | D2Client.0x6F710 is where the majority of the input coordinates for the skill button inputs are on 1.13d
corpus.D2PreLoadImagesfunctionsourcedsourcedDeleted User (phrozen_code Discord)
D2Client
Client image preload routine at 0x5E370 + ClientOffset. | D2PreLoadImages = (0x5E370 + ClientOffset); // D2Client.6FAFE370
corpus.UNITDRAW_DrawUnitfunctionsourcedtrustedNecrolis (phrozen_code Discord)
D2Client
CORE RENDER: __fastcall(pUnit,dwColorTint,nXpos,nYpos,bFade,bDrawOverlays) - draws a unit's sprite at screen X/Y with tint/fade/overlays. This is the per-unit draw entry in the play-area render path. | Function: UNITDRAW_DrawUnit Address: D2Client.0x6FB5A720
corpus.UNITDRAW_CacheGFXDatafunctionsourcedtrustedNecrolis (phrozen_code Discord)
D2Client
RENDER: __forceinline __fastcall(pGFXData,pUnit,pCellFile,nDirection,nFrame,fFlags,dwColorTint,pIndex) - caches the cell/DCC gfx data for a unit before drawing; called from UNITDRAW_DrawUnit. | Function: UNITDRAW_CacheGFXData Address: D2Client.0x6FB5EC80
corpus.inventory_input_handlerfunctionsourcedsourcedThaison (phrozen_code Discord)
D2Game
Inventory action handler sig (Game* pGame, Inventory* pInv, int nInput, int* a5, int* a6); a5/a6 last two args undetermined. | (Game* pGame, Inventory* pInv, int nInput, int* a5, int* a6)
corpus.UI_GetState_D2CLIENT_gnUiTogglefunctionsourcedsourcedSzumigajowy (phrozen_code Discord)
D2Client
UI panel open/close state reader: BOOL __fastcall UI_GetState(int nUiIndex) at D2Client.0x6FB23230 (1.10f); reads global array D2CLIENT_gnUiToggle[nUiIndex]; UITOGGLE_ESCMENU=9, bounded by NUM_UI. Core of knowing which side panels are open. | Address: D2Client.0x6FB23230 ... return D2CLIENT_gnUiToggle[nUiIndex];
corpus.D2GetItemName_D2Client_6FAD7210functionsourcedtrustedNecrolis (phrozen_code Discord)
D2Client
D2Client.6FAD7210 = D2GetItemName(pItem, wszBuffer, nBufferSize); called from 5 sites (6FADBBD6/6FADC43D/6FADC9B5/6FADD488/6FADD90D) — the item-description name builders, hookable to inject extra tooltip lines. | CALL D2Client.6FAD7210 ; D2GetItemName(D2UnitStrc* pItem, wchar_t* wszBuffer, size_t nBufferSize)
corpus.D2CLIENT_ItemLevel_tooltip_hook_offsetsfunctionsourcedsourcedKieran/Harvest (phrozen_code Discord)
D2Client
Item-Level-on-tooltip hook: patch site file offset 0x438A1 (1.9-1.13 variants 3D47C/438A1/ADD0A/789DA/AE0AA/941C0); 1.13 live 0x6FB341C0-... ; Set-item variant patch at 0x427BE. Uses D2CLIENT_SetColourPopUp (D2SetColorPopup, D2Client 85A60 in 1.11). | {D2DLL_D2CLIENT, 0x438A1, PATCH_CALL, FALSE, 1}, //6FAE38A1
corpus.SPEEDBOOK_ClickDownfunctionsourcedtrustedNecrolis (phrozen_code Discord)
D2Client
Speed-book click handler: void __stdcall SPEEDBOOK_ClickDown(D2WinMsgStrc* pMsg) at D2Client.0x6FB19BB0. | Function: SPEEDBOOK_ClickDown
Address: D2Client.0x6FB19BB0
corpus.SPEEDBOOK_DrawIconExfunctionsourcedtrustedNecrolis (phrozen_code Discord)
D2Client
Speed-book skill-icon draw: void __fastcall SPEEDBOOK_DrawIconEx(D2CellFileStrc* pCells, D2SkillStrc* pSkill, SkillsTXT* pRecord, DWORD dwGUID, int nValue, int nColor, int nXpos, int nYpos, BOOL bLeft) at D2Client.0x6FB18AC0. Takes explicit X/Y screen coords. | Function: SPEEDBOOK_DrawIconEx
Address: D2Client.0x6FB18AC0
corpus.SKILLTREE_DrawTabIconsfunctionsourcedtrustedNecrolis (phrozen_code Discord)
D2Client
Skill-tree panel tab-icon draw: void __fastcall SKILLTREE_DrawTabIcons(D2UnitStrc* pPlayer, int nTab, int nClass) at D2Client.0x6FB163B0 and 0x6FB16A50 (two entry points). Left-side skill panel render. | Function: SKILLTREE_DrawTabIcons
Address: D2Client.0x6FB163B0 & D2Client.0x6FB16A50
corpus.SKILLTREE_ClickDown_SKILLTREE_ClickUpfunctionsourcedtrustedNecrolis (phrozen_code Discord)
D2Client
Skill-tree panel mouse handlers: SKILLTREE_ClickDown at D2Client.0x6FB17A80 and SKILLTREE_ClickUp at D2Client.0x6FB18100, both __stdcall(D2WinMsgStrc*). | Function: SKILLTREE_ClickDown
Address: D2Client.0x6FB17A80
corpus.Display_Text_D2Win_10171functionsourcedsourcedSilvermane (phrozen_code Discord)
D2Win/D2Client
Draws a Unicode string: ECX=ptr to unicode string, EDX=x, Arg1=y, Arg2=colour, Arg3=always 0. Called from D2Client to print stats on character screen. | Function: Display Text Address: 6F8AAD40 in v1.10 ECX - pointer to Unicode String EDX - x coord Arg1 - y coord Arg2 - colour
corpus.Get_the_Node_Page_item_container_pagefunctionsourcedsourcedSilvermane (phrozen_code Discord)
D2Common
Returns which container/page an item is in: 00 Inventory, 01 BodyLoc, 02 Belt, 03 Ground, 04 Cursor. Core mapping for inventory/equip side-panel item location. | Get the Node Page Offset: 00052100 (6FD92100) ... 00: Inventory 01: BodyLoc 02: Belt 03: Ground 04: Cursor
corpus.D2FillArea_underlying_renderer_callfunctionsourcedsourcedDeleted User (phrozen_code Discord)
D2Gdi/Game
D2FillArea passes 6 params; in 1.13d the CALL EAX lands in D2Gdi 0x6f877370 (takes all 6), in 1.14d lands at 0x006c8a60 windowed renderer (uses only params 3-6). Area-fill (solid rect) render path. | in 13d the CALL goes to this address 0x6f877370 in D2Gdi.dll that function takes all 6 paramters from D2FillArea
corpus.D2GFX_DrawSolidRectExfunctionsourcedsourceddzik (phrozen_code Discord)
Game (1.14)
void(nXStart,nYStart,nXEnd,nYEnd,dwColor,nDrawMode) - wrapper to every renderer. Guards x<=xEnd && y<=yEnd then calls [DAT_007c8cc0+0xB8](xEnd,yEnd,color,mode). This is the solid-rectangle fill primitive (relevant to dead-zone/panel-area fills). | void D2GFX_DrawSolidRectEx(int nXStart,int nYStart,int nXEnd,int nYEnd,DWORD dwColor,int nDrawMode)
corpus.RENDERER_WINDOWED_DrawSolidRectExfunctionsourcedsourceddzik (phrozen_code Discord)
Game (1.14)
Windowed-mode renderer solid-rect fill; __fastcall(x1,y1,x2,y2,byte color,int mode). The concrete windowed backend behind D2GFX_DrawSolidRectEx wrapper (0x4f6300). | //0x6c8a60 void __fastcall RENDERER_WINDOWED_DrawSolidRectEx (uint param_1,uint param_2,...)
corpus.D2isLODGame_D2GetDifficultyLevel_D2GetMouseXfunctionsourcedsourceddzik (phrozen_code Discord)
D2Client (1.14 merged Game.exe)
1.14 (post-DLL-merge) addresses; note subtract 0x400000 to get RVA. Mouse X/Y getters useful for cursor-vs-viewport mapping. | D2GetMouseX ... -> 0x468730 ... D2GetMouseY ... -> 0x468740
corpus.D2Win_D2DrawText_10117functionsourcedsourcedSilvermane (phrozen_code Discord)
D2Win
void __fastcall(wchar_t* pString,int nXpos,int nYpos,int nColour,int nTransTbl). Main HUD unicode draw call. | D2FUNC(D2WIN, D2DrawText, void, __fastcall, (wchar_t* pString, int nXpos, int nYpos, int nColour, int nTransTbl), 0xAD40)
corpus.D2SetScrollEndFunc_sets_two_scroll_end_callbfunctionsourcedtrustedKingpin (phrozen_code Discord)
D2Client
void __fastcall(func1,func2) that initializes two function-pointer globals. Kingpin named it D2SetScrollEndFunc. Named for scroll-end handling (viewport scroll callbacks). | static D2Client6FB1CBD0 D2SetScrollEndFunc = (D2Client6FB1CBD0)(0x7CBD0 + ClientOffset); // D2Client.6FB1CBD0
corpus.Skill_icon_drawing_functionfunctionsourcedtrustedkain_abel_666 (quoting Necrolis) (phrozen_code Discord)
D2Client
Function responsible for drawing the skill icons in 1.10 | In 1.10 have a look at D2Client.0x6FB18AC0, its responsible for drawing the icons.
corpus.CDraw_Game_UIfunctionsourcedsourcedSilvermane (phrozen_code Discord)
D2Client
Core game-UI draw function; hook target for drawing UI (calls #10072). Called from within larger UI routine; also builds a 0x13C stack frame at 6FB21B70 | //D2Client.6FB20A30 D2FUNC(D2CLIENT, CDraw_Game_UI, void, __fastcall, (DWORD Arg01), 0x80A30)
corpus.GUI_stat_skill_button_draw_callsfunctionsourcedtrustedNecrolis (phrozen_code Discord)
D2Client
Inside the GUI draw routine: CALL 6FAEF360 draws stat-points buttons, CALL 6FAEF730 draws skill-points buttons (at 6FB22030/6FB22044) | CALL d2client.6FAEF360 ; GUI Buttons -> stat points ... CALL d2client.6FAEF730 ; GUI Buttons -> skillpts
corpus.Text_background_width_height_D2GFX_DrawRectafunctionsourcedtrustedMir Drualga (phrozen_code Discord)
D2Win/D2GFX
D2Win ordinal 10110 draws a text popup background; helpers 6f8f1fb0 (text->background width, param in EAX) and 6f8f1e80 (text->background height, param in ESI); width/height feed D2GFX_DrawRectangle | 6f8f1fb0, takes text as param1 ... returns background width ... passed into the D2GFX_DrawRectangle function
corpus.background_dialog_draw_via_D2gfx_10072functionsourcedsourcedkain_abel_666 (phrozen_code Discord)
D2 (custom mod DLL, runtime 0x04D7xxxx)
kain_abel_666 located where a background is drawn: a D2gfx.#10072 draw call at 04D72AE5 that takes an X (EAX from [EBP-18C]) and a Y value (EDX from [EBP-190]); he identifies the Y push at 04D72AD0 as the value that is 'messing up' his positioning. Directly a render-pipeline / draw-position problem analogous to ours. | so i figured out where it draws the background ... CALL DWORD PTR DS:[4D76AA4] ; D2gfx.#10072 ... is the Y Value that is messing up
corpus.ITEMS_InventoryDrawfunctionsourcedtrustedNecrolis (phrozen_code Discord)
D2Client
Necrolis' reversed inventory item-draw function (draws an item cel inside the inventory/side panel, with overlay support). Shows the full draw path: UNITDRAW_CacheGFXData -> D2LoadCelFile -> GFXUTIL_CellWithinScreen -> D2DrawImage -> UNITDRAW_DrawOverlays. Directly the side-panel render pipeline. | Function: ITEMS_InventoryDraw Address: D2Client.0x6FB5A320 ... BOOL __fastcall ITEMS_InventoryDraw(D2UnitStrc* pItem, int nXpos, int nYpos)
corpus.GetMouseYCoordinatefunctionsourcedsourcedHarvest (phrozen_code Discord)
D2Client
D2Client.6FB57BD0 reads global at 6FBC1AE8; Harvest identifies it as GetMouseYCoordinate (RVA 0xB7BD0, __stdcall, no args). Screen-space coordinate accessor. | D2FUNC(D2CLIENT, GetMouseYCoordinate, DWORD, __stdcall, (), 0xB7BD0) //D2Client6FB57BD0
corpus.D2DrawText_D2Win_10117_item_gfx_GFX_10073functionsourcedsourcedkain_abel_666 (phrozen_code Discord)
D2Win / D2gfx
kain_abel_666 repositioning D2BuffIcons: text via D2Win.#10117 D2DrawText(pString,nX,nY,nColour,nTransTbl); icon images via GFX.#10073. Asks what -1 as the transtbl arg means. UI-panel overlay positioning. | D2DrawText(wchar_t* pString, int nXpos, int nYpos, int nColour, int nTransTbl); ... the only called to GFX.#10073 for the images
corpus.Item_ClickfunctionsourcedsourcedConqueror (phrozen_code Discord)
D2Client
Client-side handler run when clicking an item; takes inventory pointer, mouse X/Y and inventory page. Relevant to side-panel/inventory hit-testing. | //D2Client.0x475C0 D2FUNC(D2CLIENT, Item_Click, int32_t, __fastcall, (D2UnitStrc* pPlayer, D2InventoryStrc* pInventory, int pMouse_X, int pMouse_Y, ui
corpus.UNITS_GetInventoryRecordIdfunctionsourcedsourcedConqueror (phrozen_code Discord)
D2Common
Gets the inventory record id for a unit/inv page (Inventory.txt). Used for inventory/panel geometry. | //D2Common.0x6FDBEBE0 (#10409) int __stdcall UNITS_GetInventoryRecordId(D2UnitStrc* pUnit, int nInvPage, BOOL bLoD)
corpus.STATES_GetGfxStateFlags_STATES_GetStatFlagsfunctionsourcedsourcedConqueror (phrozen_code Discord)
D2Common
Two state-flag accessors returning DWORD* into a unit's state bitfield: #10492 GetGfxStateFlags @0x6FDB4760, #10494 GetStatFlags @0x6FDB48F0. GfxStateFlags governs which overlay/graphic states are active on a unit. | //D2Common.0x6FDB4760 (#10492) DWORD* __stdcall STATES_GetGfxStateFlags(D2UnitStrc* pUnit) ... //D2Common.0x6FDB48F0 (#10494)
corpus.PLAYERMODE_ChangefunctionsourcedtrustedNecrolis (phrozen_code Discord)
D2Game
Necrolis: void __fastcall PLAYERMODE_Change(pGame,pPlayer,pSkill,BYTE nMode,int nUnitType,DWORD dwGUID,BOOL bAllowReEnter) at D2Game.0x6FC81A00 (RVA 0x51A00). Changes a unit's animation/mode. | Function: PLAYERMODE_Change Address: D2Game.0x6FC81A00 ... void __fastcall PLAYERMODE_Change(D2GameStrc* pGame, D2UnitStrc* pPlayer, D2SkillStrc* pSki
corpus.main_UI_loop_ALT_item_box_drawfunctionsourcedtrustedThe Esoteric Path (Doug, phrozen_code Discord)
D2Client
whist: 0xC39E0 is the main ui loop where all panels are rendered; it calls 0x58FB0 which draws the boxes shown when ALT is pressed to show ground items; hookable via d2template | at D2Client.0xC39E0 is the main ui loop where all the different panels are rendered ... a call to D2Client.0x58FB0, which is the function that handles
corpus.INTERFACE_CORE_InputAndOutputMsgWindowfunctionsourcedsourcedConqueror (orig Araksson) (phrozen_code Discord)
D2Client
Master click/message dispatcher for all menu panels; found by locating the 4 adjacent Storm#414-417 Input* calls, the function just before them handles all menu clicks; called ~40 times, one callback per panel type; callbacks share globals with the drawing function | the function immediately before is the one that controls all the Clicks of the Menus ... called about 40 times ... one for each type of Panel
corpus.DRLGROOM_AllocRoomNears_ReAllocRoomNears_roofunctionsourcedsourcedConqueror (Araksson/D2Moo) (phrozen_code Discord)
D2Common
Builds each room's ppRoomsNear list by scanning level rooms within tile distance <10 in X and Y (nTileXPos/YPos/Width/Height), sorts by position; D2Moo raises near cap 6->10 (ppNearRooms[1024]) | Function: DRLGROOM_AllocRoomNears Adress: D2Common.0x6FD77BB0 ... Improvement 6 --> 10
corpus.ITEMDESC_DrawGroundMultiHoverfunctionsourcedtrustedNecrolis (phrozen_code Discord)
D2Client
Draws multi-item ground hover boxes; second half is the relevant part; uses FONTS_GetTextDimensions then nWidth += 8 for box sizing | Function: ITEMDESC_DrawGroundMultiHover Address: D2Client.0x6FB09F60
corpus.D2Client_top_level_UI_control_panel_exp_bar_functionsourcedtrustedThe Esoteric Path (Doug, phrozen_code Discord)
D2Client
Single top-level handler that draws the entire bottom control panel and the exp bar. NOPing its no-arg calls reveals what each sub-call draws. | that's the function I mentioned ... D2Client.0xC39E0 (top level handler necrolis mentioned)
corpus.ControlPanel_OrbTextDisplayfunctionsourcedsourcedSzumigajowy (phrozen_code Discord)
D2Client
Renders the orb text (life/mana orb display) on the control panel. | Function: ControlPanel::OrbTextDisplay Address: D2Client.0x6FAFF0B0
corpus.RoomTile_flag_setter_tile_dwFlags_bit_8functionsourcedsourcedSzumigajowy (phrozen_code Discord)
D2Common
Sets bit 8 of pTileData->dwFlags from the sign bit (0x80000000) of nTileFlags; floor/room tile flag handling. | 0x6FD88AC0 ... if (nTileFlags & 0x80000000) pTileData->dwFlags |= 8
corpus.UNITDESC_DrawInformationfunctionsourcedtrustedNecrolis (phrozen_code Discord)
D2Client
void __fastcall UNITDESC_DrawInformation(D2UnitStrc* pUnit) at D2Client.0x6FB20A30 (1.10). Draws the unit info/nameplate; contains a large per-unit-type switch that looks up the display name. Render-relevant (unit nameplate drawing). | Function: UNITDESC_DrawInformation Address: D2Client.0x6FB20A30 ... large switch inside it for each unit type
corpus.Stamina_bar_draw_color_palettefunctionsourcedsourcedDannyIsGreat (phrozen_code Discord)
D2Client
Function responsible for drawing the stamina bar; 0x7BEFBA is an array of palette indexes picking bar color by remaining stamina | 0x4975B0. that is the func responsible for drawing the stamina bar ... 0x7BEFBA is an array of pallette indexes
corpus.XP_bar_drawfunctionsourcedsourcedDannyIsGreat (phrozen_code Discord)
D2Client
Function that draws the experience bar | try looking at 0x498EA0 for xp bar
corpus.DUNGEON_StreamRoomAtCoordsfunctionsourcedtrustedLectem (phrozen_code Discord)
D2Common
D2RoomStrc* __stdcall DUNGEON_StreamRoomAtCoords(D2DrlgActStrc* pAct, int nX, int nY) — resolves the room at world coords | D2RoomStrc* __stdcall DUNGEON_StreamRoomAtCoords(D2DrlgActStrc* pAct, int nX, int nY)
corpus.DRLG_AllocLevel_D2DrlgLevelStrc_fieldsfunctionsourcedsourcedSilvermane (phrozen_code Discord)
D2Common
Allocates a DRLG level from mempool; sets pDrlg, nLevelId, nLevelType, nDrlgType from DATATBLS_GetLevelDefRecord | D2DrlgLevelStrc* __fastcall DRLG_AllocLevel(D2DrlgStrc* pDrlg, int nLevelId)
corpus.INTERFACE_FillRenderfunctionsourcedsourcedConqueror (phrozen_code Discord)
D2Client
The callback that fills the Units renderer structure to later draw; invoked from D2Common.#10049 DUNGEON_CallRoomCallback. Central to the play-area unit render pipeline. Signature: BOOL __stdcall INTERFACE_FillRender(D2RoomStrc* pRoom, D2GameViewRenderDataCallBackStrc* pArgs). Hazel hit a crash here throwing many-CtC items into a crowd. | This is a callback from D2Common.#10049 (DUNGEON_CallRoomCallback). It is the function that is responsible for filling the Units renderer structure to
corpus.FONTS_DrawHoverText_D2WinfunctionsourcedsourcedSilvermane (phrozen_code Discord)
D2Win
Hover/tooltip text draw. Clamps X/Y against screen size via D2GFX_GetScreenSize(&nGameWidth,&nGameHeight); positions box so it stays on screen (nXpos > nGameWidth-nWidth -> nGameWidth-nWidth-5). Draws background via D2GFX_DrawSolidRectEx. Shows how the game reads viewport dimensions for UI placement -- the nGameWidth/nGameHeight globals bound the drawable area. | D2GFX_GetScreenSize(&nGameWidth, &nGameHeight); ... if ((uint32_t)nXpos > nGameWidth - nWidth) nXpos = nGameWidth - nWidth - 5;
corpus.Waypoint_panel_drawfunctionsourcedtrustedThe Esoteric Path (Doug, phrozen_code Discord)
D2Client
Function that draws the waypoint panel in 1.13c. Active tab is a D2Client global variable (no server round-trip to switch tabs). Good entry point for locating panel-tab state globals. | the function that draws the waypoint panel (D2Client.0xAAEC0 on 1.13c)
corpus.CDraw_Game_UI_INTERFACE_DrawUnitSelectedNamefunctionsourcedsourcedConqueror (phrozen_code Discord)
D2Client
Draws the selected-unit name over the play area. Two names for same addr: D2FUNC CDraw_Game_UI (0x80A30) and Araksson's INTERFACE_DrawUnitSelectedName (void __fastcall(D2UnitStrc*)). Silvermane long wanted to rewrite this hover-name function. | Function: INTERFACE_DrawUnitSelectedName Adress: D2Client.0x80A30 void __fastcall INTERFACE_DrawUnitSelectedName(D2UnitStrc* pUnit)
corpus.UI_DrawGroundHoverItemfunctionsourcedsourcedSilvermane (phrozen_code Discord)
D2Client
Draws the ground item hover name in the play area: void __fastcall UI_DrawGroundHoverItem(D2UnitStrc* pItem, wchar_t* pBuffer, int nSize). | //D2Client.6FB20740 void __fastcall UI_DrawGroundHoverItem(D2UnitStrc* pItem, wchar_t* pBuffer, int nSize)
corpus.Ground_unit_name_lookup_funcsfunctionsourcedtrustedNecrolis (phrozen_code Discord)
D2Client
D2Client.0x6FADD360 handles item names only; D2Client.0x6FB297F0 works for everything but players and vistiles (items always return base name). Used to resolve hovered-unit display names. | D2Client.0x6FADD360 is purely for item names, D2Client.0x6FB297F0 works for everything but players and vistiles
corpus.MENUS_DrawRegisteredControls_menu_input_handfunctionsourcedtrustedThe Esoteric Path (Doug, phrozen_code Discord)
D2Win
OOG (out-of-game) menu draw/input entry points (1.13c): MENUS_DrawRegisteredControls (D2Win.#10024), INPUT_HandleMenuMouseInput (0x180F0), INPUT_HandleMenuKeyDownInput (0x182A0), INPUT_HandleMenuKeyCharInput (0x18370). | Function: MENUS_DrawRegisteredControls Address: D2Win.#10024 ... INPUT_HandleMenuMouseInput D2Win.0x180F0
corpus.Stat_screen_click_handlersfunctionsourcedsourcedConqueror (phrozen_code Discord)
D2Client
INTERFACE_StatScreenClickDown (D2Client.0x31290) and INTERFACE_StatScreenClickUp (0x31470), both void __stdcall(D2WinMsgStrc*). Handle input on the character/stat side panel. | Function: INTERFACE_StatScreenClickDown Adress: D2Client.0x31290 ... INTERFACE_StatScreenClickUp Adress: D2Client.0x31470
corpus.INTERFACE_InventoryLButtonDown_UP_1_13cfunctionsourcedsourcedConqueror (phrozen_code Discord)
D2Client
1.13c inventory-panel left-button handlers, __stdcall taking D2WinMsgStrc*. (1.10 equivalents: down 0x46E60, up 0x48140, InteractClickItem 0x475C0.) | D2FUNC(D2CLIENT, INTERFACE_InventoryLButtonDown, ... 0x98DC0) ... INTERFACE_InventoryLButtonUP ... 0x9C630)
corpus.DUNGEON_GetLevelIdFromRoomfunctionsourcedsourcedRayveen (phrozen_code Discord)
D2Common
BYTE __stdcall taking D2RoomStrc*; returns the level id for a room. Pair with UNITS_GetRoom to get the level a unit is standing in. | //D2Common.0x6FD8C7A0 (#10057) BYTE __stdcall DUNGEON_GetLevelIdFromRoom(D2RoomStrc* pRoom)
corpus.UNITS_GetRoomfunctionsourcedsourcedSilvermane (phrozen_code Discord)
D2Common
D2RoomStrc* __stdcall taking D2UnitStrc*; returns the room a unit occupies. | //D2Common.0x6FDBE270 (#10342) D2RoomStrc* __stdcall UNITS_GetRoom(D2UnitStrc* pUnit)
corpus.D2GAME_GetRoom_6FC52070_DUNGEON_IsRoomInTownfunctionsourcedsourcedRayveen (phrozen_code Discord)
D2Game
D2ActiveRoomStrc* getter at a target X/Y within a unit's room; DUNGEON_IsRoomInTown tests town membership. | D2ActiveRoomStrc* pRoom = D2GAME_GetRoom_6FC52070(UNITS_GetRoom(pUnit), nTargetX, nTargetY);
corpus.D2Common_CharmRequirements_10840_rewritefunctionsourcedsourcedSilvermane (phrozen_code Discord)
D2Common
CharmZone technique: rewrite of D2Common.#10840 requirement check restricting charms to an inventory sub-rectangle. Returns TRUE only if item is a charm, unit-type UNIT_ITEM, node page NODEPAGE_STORAGE, and pStaticPath->nYPos >= 6 and reqs met. Hooked from both D2Common (0x5FE70) and D2Client (0x4118B). | { D2DLL_D2COMMON, 0x5FE70, (DWORD)PATCH_JMP, FALSE, 0x01 }, { D2DLL_D2COMMON, 0x5FE71, (DWORD)D2Common_CharmRequirements, TRUE, 0x00 }, { D2DLL_D2CLIE
corpus.NewAutomapCell_automap_cell_drawfunctionsourcedsourcedOwnasaurus (phrozen_code Discord)
D2Client
NewAutomapCell returns pCell; +0x04 nCellNo determines the graphic drawn in the automap cell (asks re lookup table) | pCell(returned by NewAutomapCell)->nCellNo(offset +0x04) is what determines what is drawn in the cell
corpus.AUTOMAP_DrawCellsfunctionsourcedtrustedLectem (phrozen_code Discord)
D2Client
Automap cell drawing routine | See AUTOMAP_DrawCells 1.10f:0x6FACE230
corpus.weather_storm_phase_setter_rainfunctionsourcedtrustedNecrolis (phrozen_code Discord)
D2Client
Sets phase of a storm: phase 0 no rain, 1 wind-up, 2 rain, 3 wind-down; contains act5 level-id switch feeding snow/weather globals | D2Client.0x6FAA6D40 ... sets the phase of a storm (with phase 2 being the rain phase
corpus.PAL_LoadActData_per_frame_palette_render_ordfunctionsourcedtrustedNecrolis (phrozen_code Discord)
D2Win / D2Client
Act palette load: D2Client sets act palette via D2Win.#10177 PAL_LoadActData(nActPalette) which calls D2Win.0x6F8AE5E0 with pl2/dat pair; to swap palettes load tile palette each frame, then reload units palette AFTER all tiles rendered (optional 3rd call for UI) | load the tile palette each frame ... make a second call ... just after all tiles have been rendered to load the units palette (and UI
corpus.spirit_vine_golem_hp_bar_drawfunctionsourcedsourcedoli (phrozen_code Discord)
D2Client
Draws HP bar for spirits, vines and golems (shared); monID check inside failed for user | its offset is 6FADB5F0. But it draws hp bar for spirits, vines and golems
corpus.experience_bar_hover_WIN_text_drawfunctionsourcedsourcedConqueror (phrozen_code Discord)
D2Client
Exp-bar popup init: hit-test uses gnScreenWidth/2-0x92..-0x17 and *D2CLIENT_ScreenHeight-0x2b..-0x22, calls WIN_HoverText; waypoint text via WIN_DrawNormalText(text,x,y,color,transTbl) at 0x6fb2610a | Init here D2Client.0x6faffd58 ... gnScreenWidth / 2 + -0x92 <= nMouseXPos ... WIN_DrawNormalText
corpus.unit_palette_assignment_monstersfunctionsourcedtrustedNecrolis (phrozen_code Discord)
D2Client
Unit palette assignment: 0x6FB27A23 begins it, 0x6FB5BFC0 writes palette index into unit draw data; bosses/champions roll random PL2 shift from unit GUID (source of random color shifts) | D2Client.6FB27A23 is the start of the unit palette assignment (D2Client.0x6FB5BFC0 sets the palette index in the units draw data) for monsters
codex.MULTIRES_SetResolutionfunction
rva 0x10df0 D2Client.dll
codex.SetResolutionFromOptionsfunction
rva 0x65180 D2Client.dll
codex.GetResolutionRegistryfunction
rva 0x66270 D2Client.dll
codex.SetResolutionRegistryfunction
rva 0x662a0 D2Client.dll
codex.DisableScrollOfInifussRectfunction
rva 0x7c380 D2Client.dll
codex.DrawSummitBackgroundfunction
rva 0x8a6c0 D2Client.dll
codex.SetTileCullingBoundfunction
rva 0x8a4d0 D2Client.dll
codex.MULTIRES_DrawGroundTilesfunction
rva 0x143d0 D2Client.dll
codex.MULTIRES_GroundTileParamSetupfunction
rva 0x14050 D2Client.dll
codex.MULTIRES_DrawRoofTilesfunction
rva 0x13a00 D2Client.dll
codex.MULTIRES_DrawLowerWallTilesfunction
rva 0x9ec10 D2Client.dll
codex.D2SetScrollEndFuncfunction
rva 0x7ae80 D2Client.dll
codex.TileRoofDrawfunction
rva 0x79d30 D2Client.dll
codex.TileShadowOrSpecialDrawfunction
rva 0x79c80 D2Client.dll
codex.TileSpecialOrientationDrawfunction
rva 0x79e20 D2Client.dll
codex.UpperPassHelper_7A180function
rva 0x7a180 D2Client.dll
codex.UpperPassHelper_7A260function
rva 0x7a260 D2Client.dll
codex.UpperPassHelper_7A500function
rva 0x7a500 D2Client.dll
D2Client.ScreenOpenModeglobalverified
0x6FBCC414 D2Client
which side panel(s) open: 0=none,1/2/3=side/both; drives the L/R world-view shift; == nScreenPanels passed to the driver tile-draw fns
D2Client.GeneralPlayAreaCameraShiftXglobalverified
0x6FBCC418 D2Client
offX: 0 with no panel, +/-DispW/4 (=320) with one; the native left-shift the mod KEEPS
D2Client.RenderContextPtrglobalverified
0x6FBCC3C4 D2Client
*[this] = the render ctx (ONE struct): draw-window +0x04(L)/+0x08(T)/+0x0C(R)/+0x10(B), scroll +0x24/+0x28, dirty +0x00, visited-room grid +0xEA9C
D2Client.GeneralDisplayWidthglobalverified
0x6FB8BC48 D2Client
DispW=1280 (SGD2FreeRes). +4=height, +8=w-copy, +0xC=centerX, +0x10=centerY
D2Client.PanelOpenArrayglobalverified
0x6FBAAD80 D2Client
per-panel open flags: inventory +4, char +8, skill +0x10, waypoint +0x50
D2gfx.DriverInterfacePtrglobalverified
0x6FA91268 D2gfx
*[this] = the active video-driver dispatch struct (= D2Glide's 0x6F8649F0); slot +0x9c = the cel handler D2Client #10001 invokes
D2Glide.DisplayWidthglobalverified
0x6F865A68 D2Glide
driver DisplayWidth; SGD2FreeRes rewrites 800->1280 at RVA 0xDCF1 at runtime; the -/4 math survives -> 960
D2Glide.DisplayHeightglobalverified
0x6F865B04 D2Glide
driver DisplayHeight; stock 600, SGD2->720
D2Glide.LiveDrawerGateglobalverified
0x6F865A8C D2Glide
[this]+4 / [this] gate the worker 0x7080: both-nonzero -> DEAD software drawer 0x6290; else -> LIVE drawer 0x6840
D2Glide.DriverDispatchStructglobalverified
0x6F8649F0 D2Glide
the driver vtable D2gfx installs at [0x6FA91268]; +0x9c=0x6F8572F0 (cel handler)
D2Glide.grDrawVertexArrayContiguous_IATglobalverified
0x6F8611D0 D2Glide
D2Glide IAT slot for glide3x!grDrawVertexArrayContiguous@16 (into D2DX). 0x6F856032 = jmp [this]. THE D2Glide->D2DX crossing; hook target for the pipeline-trace probe
ext.D2Client.ScreenShiftXglobalsourcedtrustedmir (Diablo-II-Address-Table, public domain)
rva 0x11b9a0 D2Client.dll
Horizontal screen shift (viewport pan offset). Named exactly in FOCUS. | src: D2Client.dll ScreenShiftX Offset 0x11B9A0
ext.D2Client.ScreenShiftYglobalsourcedtrustedmir (Diablo-II-Address-Table, public domain)
rva 0x11b9a4 D2Client.dll
Vertical screen shift (viewport pan offset). Named exactly in FOCUS. | src: D2Client.dll ScreenShiftY Offset 0x11B9A4
ext.D2Client.GeneralDisplayHeightglobalsourcedtrustedmir (Diablo-II-Address-Table, public domain)
rva 0xdbc4c D2Client.dll
General display height. Named exactly in FOCUS. | src: D2Client.dll GeneralDisplayHeight Offset 0xDBC4C
ext.D2Client.IsAutomapOpenglobalsourcedtrustedmir (Diablo-II-Address-Table, public domain)
rva 0xfada8 D2Client.dll
Automap open flag. | src: D2Client.dll IsAutomapOpen Offset 0xFADA8
ext.D2Client.IsHelpScreenOpenglobalsourcedtrustedmir (Diablo-II-Address-Table, public domain)
rva 0xfae04 D2Client.dll
Help screen open flag. | src: D2Client.dll IsHelpScreenOpen Offset 0xFAE04
ext.D2Client.InventoryArrangeModeglobalsourcedtrustedmir (Diablo-II-Address-Table, public domain)
rva 0x11b99c D2Client.dll
Inventory arrange mode (UI panel layout state). | src: D2Client.dll InventoryArrangeMode Offset 0x11B99C
ext.D2Client.IsNewSkillButtonPressedglobalsourcedtrustedmir (Diablo-II-Address-Table, public domain)
rva 0x11c30c D2Client.dll
New-skill button pressed flag (UI element state). | src: D2Client.dll IsNewSkillButtonPressed Offset 0x11C30C
ext.D2Client.IsNewStatsButtonPressedglobalsourcedtrustedmir (Diablo-II-Address-Table, public domain)
rva 0x11c308 D2Client.dll
New-stats button pressed flag (UI element state). | src: D2Client.dll IsNewStatsButtonPressed Offset 0x11C308
ext.D2Client.IngameMousePositionXglobalsourcedtrustedmir (Diablo-II-Address-Table, public domain)
rva 0x11b828 D2Client.dll
In-game mouse cursor X (screen coordinate). | src: D2Client.dll IngameMousePositionX Offset 0x11B828
ext.D2Client.IngameMousePositionYglobalsourcedtrustedmir (Diablo-II-Address-Table, public domain)
rva 0x11b824 D2Client.dll
In-game mouse cursor Y (screen coordinate). | src: D2Client.dll IngameMousePositionY Offset 0x11B824
ext.D2GFX.ResolutionModeglobalsourcedtrustedmir (Diablo-II-Address-Table, public domain)
rva 0x11260 D2GFX.dll
Render resolution mode selector. Comment gives enum values. | src: D2GFX.dll ResolutionMode Offset 0x11260 0 = 640x480, 1 = Main Menu, 2 = 800x600, 3 = 1344x700
ext.D2GFX.VideoModeglobalsourcedtrustedmir (Diablo-II-Address-Table, public domain)
rva 0x11258 D2GFX.dll
Active video/render backend selector. Comment gives enum values. | src: D2GFX.dll VideoMode Offset 0x11258 1 = GDI, 2 = Software, 3 = DirectDraw, 4 = Glide, 5 = OpenGL, 6 = Direct3D, 7 = Rave
ext.D2GFX.IsWindowedModeglobalsourcedtrustedmir (Diablo-II-Address-Table, public domain)
rva 0x1125c D2GFX.dll
Windowed vs fullscreen flag. | src: D2GFX.dll IsWindowedMode Offset 0x1125C
ext.D2GFX.WindowHandleglobalsourcedtrustedmir (Diablo-II-Address-Table, public domain)
rva 0x11264 D2GFX.dll
HWND of the render window. | src: D2GFX.dll WindowHandle Offset 0x11264 gtGfxSystem.hWnd
ext.D2DDraw.D2DDraw_DisplayWidthglobalsourcedtrustedmir (Diablo-II-Address-Table, public domain)
rva 0x101d4 D2DDraw.dll
DirectDraw backend display width. | src: D2DDraw.dll DisplayWidth Offset 0x101D4
ext.D2DDraw.D2DDraw_DisplayHeightglobalsourcedtrustedmir (Diablo-II-Address-Table, public domain)
rva 0x101cc D2DDraw.dll
DirectDraw backend display height. | src: D2DDraw.dll DisplayHeight Offset 0x101CC
ext.D2DDraw.D2DDraw_BitBlockWidthglobalsourcedtrustedmir (Diablo-II-Address-Table, public domain)
rva 0x101c8 D2DDraw.dll
DirectDraw bit-block (blit) width. | src: D2DDraw.dll BitBlockWidth Offset 0x101C8
ext.D2DDraw.D2DDraw_BitBlockHeightglobalsourcedtrustedmir (Diablo-II-Address-Table, public domain)
rva 0x101d8 D2DDraw.dll
DirectDraw bit-block (blit) height. | src: D2DDraw.dll BitBlockHeight Offset 0x101D8
ext.D2DDraw.D2DDraw_CelDisplayLeftglobalsourcedtrustedmir (Diablo-II-Address-Table, public domain)
rva 0x101e8 D2DDraw.dll
DirectDraw CEL display left bound. | src: D2DDraw.dll CelDisplayLeft Offset 0x101E8
ext.D2DDraw.D2DDraw_CelDisplayRightglobalsourcedtrustedmir (Diablo-II-Address-Table, public domain)
rva 0x101ec D2DDraw.dll
DirectDraw CEL display right bound. | src: D2DDraw.dll CelDisplayRight Offset 0x101EC
ext.D2GDI.D2GDI_BitBlockWidthglobalsourcedtrustedmir (Diablo-II-Address-Table, public domain)
rva 0xca80 D2GDI.dll
GDI backend bit-block (blit) width. | src: D2GDI.dll BitBlockWidth Offset 0xCA80
ext.D2GDI.D2GDI_BitBlockHeightglobalsourcedtrustedmir (Diablo-II-Address-Table, public domain)
rva 0xca90 D2GDI.dll
GDI backend bit-block (blit) height. | src: D2GDI.dll BitBlockHeight Offset 0xCA90
ext.D2GDI.D2GDI_CelDisplayLeftglobalsourcedtrustedmir (Diablo-II-Address-Table, public domain)
rva 0xca98 D2GDI.dll
GDI CEL display left bound. | src: D2GDI.dll CelDisplayLeft Offset 0xCA98
ext.D2GDI.D2GDI_CelDisplayRightglobalsourcedtrustedmir (Diablo-II-Address-Table, public domain)
rva 0xca9c D2GDI.dll
GDI CEL display right bound. | src: D2GDI.dll CelDisplayRight Offset 0xCA9C
ext.D2Direct3D.D2Direct3D_DisplayWidthglobalsourcedtrustedmir (Diablo-II-Address-Table, public domain)
rva 0x1ab44 D2Direct3D.dll
Direct3D backend display width. | src: D2Direct3D.dll DisplayWidth Offset 0x1AB44
ext.D2Direct3D.D2Direct3D_DisplayHeightglobalsourcedtrustedmir (Diablo-II-Address-Table, public domain)
rva 0x1afd4 D2Direct3D.dll
Direct3D backend display height. | src: D2Direct3D.dll DisplayHeight Offset 0x1AFD4
ext.D2Win.MainMenuMousePositionXglobalsourcedtrustedmir (Diablo-II-Address-Table, public domain)
rva 0x21488 D2Win.dll
Main-menu mouse cursor X (screen coordinate). | src: D2Win.dll MainMenuMousePositionX Offset 0x21488
ext.D2Win.MainMenuMousePositionYglobalsourcedtrustedmir (Diablo-II-Address-Table, public domain)
rva 0x2148c D2Win.dll
Main-menu mouse cursor Y (screen coordinate). | src: D2Win.dll MainMenuMousePositionY Offset 0x2148C
ext.D2client.D2client_dll_0xDBC4C_game_height_logicglobalsourcedtrustedIAmTrial (SlashWork d2widescreenhack)
rva 0xdbc4c D2client.dll
Memory location storing the game's logic height. Written directly as DWORD constant in the 0x10E29 block. | src: C7 05 4CBCB86F 58020000 mov [D2client.dll+0xDBC4C], 00000258 ; 600 height logic
ext.D2client.D2client_dll_0x11B9A0_panel_X_offsetglobalsourcedtrustedIAmTrial (SlashWork d2widescreenhack)
rva 0x11b9a0 D2client.dll
Memory storing X-offset positioning of UI panels. 640x480 -> 0; 800x600 -> 0x50 (80); 1066x600 -> 0xD5 (213). Written via 89 1D A0B9BC6F (reg) or C7 05 A0B9BC6F (const). | src: stores the x-offset positioning of panels; 1066x600 value 000000D5 (213)
ext.D2client.D2client_dll_0x11B9A4_panel_Y_offsetglobalsourcedtrustedIAmTrial (SlashWork d2widescreenhack)
rva 0x11b9a4 D2client.dll
Memory storing Y-offset positioning of UI panels. 640x480 -> 0; 800x600 AND 1066x600 -> 0xFFFFFFC4 (-60). Because 1066x600 shares 800x600's height (600), the y-offset code for 800x600 is reused. | src: stores the y-offset positioning of panels; value FFFFFFC4 (-60)
ext.draw_screen_background.kOriginalScreenBorderFrameImagePathglobalsourcedtrustedMir Drualga (SGD2FreeRes)
draw_screen_background
Original 800x600 border-frame DC6 path used when IsUseOriginalScreenBorderFrame() is true. | src: constexpr std::string_view kOriginalScreenBorderFrameImagePath = "data\\global\\UI\\Panel\\800BorderFrame";
ext.d2dx.gameAddresses_tables_DrawFloor_DrawWall_returnglobalsourcedtrustedbolrog / Necrolis (D2DX)
d2dx
Per-version glide3x.dll return-address constants identifying floor/wall draws. Index order: [1]=DrawWall1,[2]=DrawWall2,[3]=DrawFloor. | src: 113c: 0x6f8567ab DrawWall1, 0x6f8567b9 DrawWall2, 0x6f85befc DrawFloor | 114d: 0x50d39f DrawWall1, 0x50d3ae DrawWall2, 0x50db03 DrawFloor | 109d: 0x6f818468/0x6f818476/0x6f813e2f
ext.d2dx.D2DX_SURFACE_ID_USER_INTERFACEglobalsourcedtrustedbolrog / Necrolis (D2DX)
d2dx
=16383. UI surfaceId; MoP loop skips batches whose start vertex has this surfaceId (UI never shifts, world geometry incl. floor/wall does).
ext.D2WIN.D2WIN_FirstControlglobalsourcedsourcedd2bs community (ds-hwang/noah- patch-113)
rva 0x214a0 D2WIN
Head of the UI Control linked list. UI, borderline render. | src: VARPTR(D2WIN, FirstControl, Control*, 0x214A0)
ext.D2WIN.D2WIN_FocusedControlglobalsourcedsourcedd2bs community (ds-hwang/noah- patch-113)
rva 0x214b0 D2WIN
Currently focused UI Control. | src: VARPTR(D2WIN, FocusedControl, Control*, 0x214B0)
ext.D2CLIENT.D2CLIENT_ScreenSizeYglobalsourcedsourcedd2bs community (ds-hwang/noah- patch-113)
rva 0xdbc4c D2CLIENT
Current viewport height in pixels. | src: VARPTR(D2CLIENT, ScreenSizeY, DWORD, 0xDBC4C)
ext.D2CLIENT.D2CLIENT_CursorHoverXglobalsourcedsourcedd2bs community (ds-hwang/noah- patch-113)
rva 0xe0eb8 D2CLIENT
Screen X of the hovered cell/cursor target. | src: VARPTR(D2CLIENT, CursorHoverX, DWORD, 0xE0EB8)
ext.D2CLIENT.D2CLIENT_CursorHoverYglobalsourcedsourcedd2bs community (ds-hwang/noah- patch-113)
rva 0xe0ebc D2CLIENT
Screen Y of the hovered cell/cursor target. | src: VARPTR(D2CLIENT, CursorHoverY, DWORD, 0xE0EBC)
ext.D2CLIENT.D2CLIENT_MouseXglobalsourcedsourcedd2bs community (ds-hwang/noah- patch-113)
rva 0x11b828 D2CLIENT
Current mouse cursor X in screen pixels. | src: VARPTR(D2CLIENT, MouseX, DWORD, 0x11B828)
ext.D2CLIENT.D2CLIENT_MouseYglobalsourcedsourcedd2bs community (ds-hwang/noah- patch-113)
rva 0x11b824 D2CLIENT
Current mouse cursor Y in screen pixels. | src: VARPTR(D2CLIENT, MouseY, DWORD, 0x11B824)
ext.D2CLIENT.D2CLIENT_ViewportXglobalsourcedsourcedd2bs community (ds-hwang/noah- patch-113)
rva 0x119960 D2CLIENT
Viewport/gamewindow X extent (int). Used with ViewportY for world->screen shift. | src: VARPTR(D2CLIENT, ViewportX, int, 0x119960)
ext.D2CLIENT.D2CLIENT_ViewportYglobalsourcedsourcedd2bs community (ds-hwang/noah- patch-113)
rva 0x11995c D2CLIENT
Viewport/gamewindow Y extent (int). | src: VARPTR(D2CLIENT, ViewportY, int, 0x11995C)
ext.D2CLIENT.D2CLIENT_AutomapOnglobalsourcedsourcedd2bs community (ds-hwang/noah- patch-113)
rva 0xfada8 D2CLIENT
Nonzero when the automap is displayed. | src: VARPTR(D2CLIENT, AutomapOn, DWORD, 0xFADA8)
ext.D2CLIENT.D2CLIENT_AutomapModeglobalsourcedsourcedd2bs community (ds-hwang/noah- patch-113)
rva 0xf16b0 D2CLIENT
Automap display mode (full/mini/etc). | src: VARPTR(D2CLIENT, AutomapMode, int, 0xF16B0)
ext.D2CLIENT.D2CLIENT_Offsetglobalsourcedsourcedd2bs community (ds-hwang/noah- patch-113)
rva 0x11c1f8 D2CLIENT
POINT screen offset applied when drawing (render/scroll origin). Coordinate-shift global. | src: VARPTR(D2CLIENT, Offset, POINT, 0x11C1F8)
ext.D2CLIENT.D2CLIENT_AutomapLayerglobalsourcedsourcedd2bs community (ds-hwang/noah- patch-113)
rva 0x11c1c4 D2CLIENT
Pointer to the active AutomapLayer being drawn. | src: VARPTR(D2CLIENT, AutomapLayer, AutomapLayer*, 0x11C1C4)
ext.D2CLIENT.ScreenSizeYglobalsourcedsourcedSlashDiablo BH / planqi
rva 0xdbc4c D2CLIENT
Screen height global (DWORD). | src: VARPTR(D2CLIENT, ScreenSizeY, DWORD, 0xDBC4C, 0xF7038)
ext.D2CLIENT.CursorHoverXglobalsourcedsourcedSlashDiablo BH / planqi
rva 0xe0eb8 D2CLIENT
Cursor hover X coordinate (DWORD). | src: VARPTR(D2CLIENT, CursorHoverX, DWORD, 0xE0EB8, 0xEE4AC)
ext.D2CLIENT.CursorHoverYglobalsourcedsourcedSlashDiablo BH / planqi
rva 0xe0ebc D2CLIENT
Cursor hover Y coordinate (DWORD). | src: VARPTR(D2CLIENT, CursorHoverY, DWORD, 0xE0EBC, 0xEE4B0)
ext.D2CLIENT.MouseXglobalsourcedsourcedSlashDiablo BH / planqi
rva 0x11b828 D2CLIENT
Mouse X screen position (DWORD). | src: VARPTR(D2CLIENT, MouseX, DWORD, 0x11B828, 0x11C950)
ext.D2CLIENT.MouseYglobalsourcedsourcedSlashDiablo BH / planqi
rva 0x11b824 D2CLIENT
Mouse Y screen position (DWORD). | src: VARPTR(D2CLIENT, MouseY, DWORD, 0x11B824, 0x11C94C)
ext.D2CLIENT.MouseOffsetXglobalsourcedsourcedSlashDiablo BH / planqi
rva 0x119960 D2CLIENT
Mouse offset X (int) — screen-to-world/viewport offset. | src: VARPTR(D2CLIENT, MouseOffsetX, int, 0x119960, 0x106844)
ext.D2CLIENT.MouseOffsetYglobalsourcedsourcedSlashDiablo BH / planqi
rva 0x11995c D2CLIENT
Mouse offset Y (int) — screen-to-world/viewport offset. | src: VARPTR(D2CLIENT, MouseOffsetY, int, 0x11995C, 0x106840)
ext.D2CLIENT.OffsetglobalsourcedsourcedSlashDiablo BH / planqi
rva 0x11c1f8 D2CLIENT
Screen render Offset (POINT struct) — the world-to-screen scroll/camera offset used when drawing units and automap. | src: VARPTR(D2CLIENT, Offset, POINT, 0x11C1F8, 0x11CF5C)
ext.D2CLIENT.PanelOffsetXglobalsourcedsourcedSlashDiablo BH / planqi
rva 0x11b9a0 D2CLIENT
Panel offset X (int) — horizontal shift applied when side panels (inventory/skill) are open. Directly relevant to viewport shift. | src: VARPTR(D2CLIENT, PanelOffsetX, int, 0x11B9A0, 0x11D354)
ext.D2CLIENT.xShakeglobalsourcedsourcedSlashDiablo BH / planqi
rva 0x11bf00 D2CLIENT
Screen-shake X offset (int) applied to render position. | src: VARPTR(D2CLIENT, xShake, int, 0x11BF00, 0x11CA6C)
ext.D2CLIENT.yShakeglobalsourcedsourcedSlashDiablo BH / planqi
rva 0x10b9dc D2CLIENT
Screen-shake Y offset (int) applied to render position. | src: VARPTR(D2CLIENT, yShake, int, 0x10B9DC, 0xFC3DC)
ext.D2CLIENT.AutomapOnglobalsourcedsourcedSlashDiablo BH / planqi
rva 0xfada8 D2CLIENT
Automap-visible flag (DWORD). | src: VARPTR(D2CLIENT, AutomapOn, DWORD, 0xFADA8, 0x11C8B8)
ext.D2CLIENT.AutomapModeglobalsourcedsourcedSlashDiablo BH / planqi
rva 0xf16b0 D2CLIENT
Automap display mode (int). | src: VARPTR(D2CLIENT, AutomapMode, int, 0xF16B0, 0xF34F8)
ext.D2CLIENT.AutomapLayerglobalsourcedsourcedSlashDiablo BH / planqi
rva 0x11c1c4 D2CLIENT
Pointer to current AutomapLayer* — root of the automap cell list that gets drawn. | src: VARPTR(D2CLIENT, AutomapLayer, AutomapLayer*, 0x11C1C4, 0x11CF28)
ext.D2GFX.VideoMode_2globalsourcedsourcedSlashDiablo BH / planqi
rva 0x11258 D2GFX
Current video/render mode (WORD) — DDraw/D3D/Glide selector. | src: VARPTR(D2GFX, VideoMode, WORD, 0x11258, 0x14A38)
ext.D2Client.D2CLIENT_6FBC9960globalsourcedtrustedkidpaddle94 / Necrolis (Phrozen Keep t=62562)
D2Client
Camera/viewport X reference. Used as the minuend inside the X screen-offset term (*D2CLIENT_6FBC9960 - *D2CLIENT_6FBCC418) in BOTH UNITS_GetDrawingPosition and UNITHOVER_Main non-perspective branches. Dereferenced pointer to an int. | src: (*D2CLIENT_6FBC9960 - *D2CLIENT_6FBCC418)
ext.D2Client.D2CLIENT_6FBCC418globalsourcedtrustedkidpaddle94 / Necrolis (Phrozen Keep t=62562)
D2Client
Secondary X offset. Subtrahend in the X term (*D2CLIENT_6FBC9960 - *D2CLIENT_6FBCC418). Present in both non-perspective X formulas (drawing-position and hover). | src: (*D2CLIENT_6FBC9960 - *D2CLIENT_6FBCC418)
ext.D2Client.D2CLIENT_6FBC995Cglobalsourcedtrustedkidpaddle94 / Necrolis (Phrozen Keep t=62562)
D2Client
Camera/viewport Y reference. In drawing-position: nY = OffsetY - *D2CLIENT_6FBC995C. In hover: gnHoverY = OffsetY - (*D2CLIENT_6FBC995C - 8) (extra -8). | src: pPos->nY = D2COMMON_GetUnitOffsetY(pUnit) - *D2CLIENT_6FBC995C;
ext.D2Client.D2CLIENT_gnGlobalUiStateglobalsourcedtrustedkidpaddle94 / Necrolis (Phrozen Keep t=62562)
D2Client
Current UI panel state, switched on in the perspective branch. UISTATE_RIGHT => nAdjustX -= 256; UISTATE_LEFT => nAdjustX += 256. The 256 is the side-panel width shift applied when a left/right panel is open. | src: switch (*D2CLIENT_gnGlobalUiState) { case UISTATE_RIGHT: nAdjustX -= 256; case UISTATE_LEFT: nAdjustX += 256; }
ext.D2Client.D2CLIENT_gnHoverX_D2CLIENT_gnHoverYglobalsourcedtrustedkidpaddle94 / Necrolis (Phrozen Keep t=62562)
0x6FB70D30 D2Client
Destination globals for the hover cursor/box position. Non-perspective: Y carries an extra -8 vs the draw formula. Perspective: Y carries an extra +16. | src: *D2CLIENT_gnHoverX = ...; *D2CLIENT_gnHoverY = nAdjustY + 16;
ext.113c ADDRESSES.env_effectsglobalsourcedtrustedNecrolis (d2-rs)
rva 0x11bf60 1.13c ADDRESSES
environment effects global (weather/env array)
ext.113c ADDRESSES.entity_tableglobalsourcedtrustedNecrolis (d2-rs)
rva 0x10a608 1.13c ADDRESSES
primary entity table
ext.113c ADDRESSES.entity_table2globalsourcedtrustedNecrolis (d2-rs)
rva 0x109a08 1.13c ADDRESSES
secondary entity table
ext.113c ADDRESSES.client_loop_globalsglobalsourcedtrustedNecrolis (d2-rs)
rva 0x1197e0 1.13c ADDRESSES
client loop globals block
ext.113c ADDRESSES.cursor_tableglobalsourcedtrustedNecrolis (d2-rs)
rva 0xd8558 1.13c ADDRESSES
cursor table
ext.113c ADDRESSES.game_cursorglobalsourcedtrustedNecrolis (d2-rs)
rva 0xfb834 1.13c ADDRESSES
game cursor global
ext.113c ADDRESSES.summit_cloud_x_posglobalsourcedtrustedNecrolis (d2-rs)
1.13c ADDRESSES
summit cloud X position (0 = not present/unused in 1.13c)
ext.113c ADDRESSES.viewport_widthglobalsourcedtrustedNecrolis (d2-rs)
rva 0xf9e14 1.13c ADDRESSES
viewport width global
ext.113c ADDRESSES.viewport_heightglobalsourcedtrustedNecrolis (d2-rs)
rva 0xf9e18 1.13c ADDRESSES
viewport height global (immediately after width, +4)
ext.113c ADDRESSES.viewport_shiftglobalsourcedtrustedNecrolis (d2-rs)
rva 0x11c418 1.13c ADDRESSES
viewport shift global (the render offset knob)
ext.113c ADDRESSES.max_weather_particlesglobalsourcedtrustedNecrolis (d2-rs)
rva 0x113934 1.13c ADDRESSES
max weather particles
ext.113c ADDRESSES.weather_angleglobalsourcedtrustedNecrolis (d2-rs)
rva 0x113918 1.13c ADDRESSES
weather angle
ext.113c ADDRESSES.rain_speedglobalsourcedtrustedNecrolis (d2-rs)
rva 0x1138f4 1.13c ADDRESSES
rain speed
ext.113c ADDRESSES.is_snowingglobalsourcedtrustedNecrolis (d2-rs)
rva 0x11bf78 1.13c ADDRESSES
is-snowing flag
ext.113c ADDRESSES.sine_tableglobalsourcedtrustedNecrolis (d2-rs)
rva 0x2f470 1.13c ADDRESSES
sine lookup table
ext.BaseAddresses (from v111a, re-exported through v112 into v113c).BASE_ADDRESSES_clientglobalsourcedtrustedNecrolis (d2-rs)
rva 0x6fab0000 BaseAddresses (from v111a, re-exported through v112 into v113c)
D2Client.dll default image base
ext.BaseAddresses.BASE_ADDRESSES_gameglobalsourcedtrustedNecrolis (d2-rs)
rva 0x6fc20000 BaseAddresses
D2Game.dll default image base
ext.BaseAddresses.BASE_ADDRESSES_gfxglobalsourcedtrustedNecrolis (d2-rs)
rva 0x6fa80000 BaseAddresses
D2gfx.dll default image base (the module whose ordinals draw_menu/draw_line/in_perspective/find_closest_color/hwnd/env_array_remove are exports of)
ext.BaseAddresses.BASE_ADDRESSES_winglobalsourcedtrustedNecrolis (d2-rs)
rva 0x6f8e0000 BaseAddresses
D2Win.dll default image base
corpus.Unit_Display_globalsglobalsourcedtrustedNecrolis (phrozen_code Discord)
D2Client
Two D2Client globals referenced in the Unit_Display function; 6FBBA4A0 is believed to be the monster description string (resists, montype, etc.) built for the hover panel. | I have a feeling its used to build 6FBBA4A0, which is the monster desc string (resists, montype etc)
corpus.Charm_inventory_grid_function_1_13cglobalsourcedsourcedThaison (phrozen_code Discord)
D2Common
Function responsible for the charm inventory in 1.13c. Thaison supplies a CharmZone hook checking item grid position: pInventory at [EAX+0x2C], leftBorder/rightBorder at [+0x0C], top/bottomBorder at [+0x10] (top>=4, bottom<=8) to define the charm grid zone. Panel/inventory-grid render logic. | D2Common.dll - 0x28846 ... CMP DWORD PTR DS:[EAX+0x0C], 0 //leftBorder ... CMP DWORD PTR DS:[EAX+0x10], 4 //topBorder
corpus.D2CMP_crash_addressglobalsourcedsourcedAlphA - The Real One (phrozen_code Discord)
D2CMP
Access-violation fault address inside D2CMP.dll (cross-referenced to d2mods thread) | Fault address: 6FE21614 01:00010614 D:\Spiele\Diablo II\D2CMP.dll
corpus.Trade_panel_draw_function_1_13cglobalsourcedsourcedmisiek1294 (phrozen_code Discord)
D2Client
Function where the trade panel is drawn in 1.13c | function where trade panel are drawn 0x99440 (1.13c)
corpus.Item_quality_color_jumptable_1_13c_clientglobalsourcedtrustedFirehawk (phrozen_code Discord)
D2Client
Item gfx setup writes 0xFFFFFFFF to pnUnused via jumptable cases 0-2 (lea esi,[esp+pGfxData]) | jumptable 6FB5CFC7 cases 0-2 ... mov dword ptr [eax], 0FFFFFFFFh
corpus.Item_quality_color_select_1_10_clientglobalsourcedsourcedOgodei (phrozen_code Discord)
D2Client
Item name color selection: calls D2Common.#10695 to get quality, jumptable at 6FB20A14 maps quality-4 to color: rare=9,crafted=8,tempered=0A,magic=3,set=2,unique=4. Also 1.10 variant at 6FAE365B (item-list colors) | CALL <JMP.&D2Common.#10695> ; get item quality ... MOV EBX,9 ; D2_Yellow_Light (rare)
corpus.Expanded_item_display_drop_filter_patch_offsglobalsourcedtrustedThe Esoteric Path (Doug, phrozen_code Discord)
D2Client
1.13c D2Client offsets for the on-floor item-name display (the labels drawn over the play area). 0x58E59/0x59089/0xCDBB9 are the max-count caps (patched to 0x7F). The 0x58Exx/0x59xxx set repoint reads at the rect draw into gptAltDrawArray fields. Drop-filter hook site at 0x5907E (call) / 0x5907F (stub). | {D2DLL_D2CLIENT, 0x58E59, ... Max Count Patch ... {D2DLL_D2CLIENT, 0x58E83, ... Expanded Data Array
corpus.Unit_palette_getter_assigner_incl_Rand_PaletglobalsourcedtrustedNecrolis (phrozen_code Discord)
D2Client
D2Client.0x6FAAE3C0 gets a unit's palette including Rand Palettes. D2Client.0x6FB28410 is the palette assigner; the three funcs below it compute the secondary index (source is a packet). Necrolis points a second user (Ogodei) to focus mainly on D2Client.0x6FB27A1F. Render/palette-shift relevant. | have a look at D2Client.0x6FAAE3C0 for what gets a units palette (including Rand Palettes). Look at D2Client.0x6FB28410 for the assigner
corpus.Health_orb_hover_hit_box_D2ClientglobalsourcedtrustedFirehawk (phrozen_code Discord)
D2Client
Bounding-box compares for the health orb hover region: X-left CMP EBX,1E ; X-right CMP EBX,6E ; Y-top LEA ECX,[EAX-4B] ; Y-bottom LEA EDX,[EAX-F]. JL/JG jump to 6FAF8C0E to skip. Screen-UI coordinate math for the bottom-left orb panel. | CMP EBX,1E ; Health Hover X Co-Ordinate Left ... CMP EBX,6E ; Health Hover X Co-Ordinate Right
corpus.Mana_orb_hover_hit_box_D2ClientglobalsourcedtrustedFirehawk (phrozen_code Discord)
D2Client
Mana orb hover bounding box: MOV ECX,[6FB740DC] base; X-left LEA EDX,[ECX-6F]; X-right ADD ECX,-1F; Y-top LEA ECX,[EAX-4B]; Y-bottom ADD EAX,-0F; branches to 6FAF8CD9. 6FB740DC is a global used as the mana orb X anchor. | MOV ECX,DWORD PTR DS:[6FB740DC] ... LEA EDX,DWORD PTR DS:[ECX-6F] ; Mana Hover X Co-Ordinate Left
corpus.Frame_timing_globals_D2Client_render_loopglobalsourcedtrustedNecrolis (phrozen_code Discord)
D2Client
D2 does not hardcode client frame time: 6FB75460 holds ms-per-frame; gdwSkipFramesPerSecond compared to 0x16 (=22? note says D2 uses 25fps) at 6FAAA167; gdwFrameRenderSkip read at 6FAAA2C4. Directly governs the client render/skip cadence. | 6FB75460 contains the numbe of ms per frame ... CMP DWORD PTR DS:[<gdwSkipFramesPerSecond>],16
corpus.Damage_display_stat_pushes_D2Clientglobalsourcedsourcedleekun (phrozen_code Discord)
D2Client
Damage-display code in D2Client pushes (0,2) as stat args at 6FB0CF20 (left-skill damage display?), 6FB0D688 (right-skill damage display?), and 6FB0EE91. D2Game damage-calc stat table at 6FCBE420. Client-side damage panel rendering needs editing alongside D2Game. | 6FB0CF20 . 6A 00 PUSH 0 ... Damage display for left skill?
corpus.Level_id_change_setter_unused_now_entering_gglobalsourcedtrustedNecrolis (phrozen_code Discord)
D2Client
D2Client.0x6FB00C10 updates the player's level id and sets a global on change (presumably for 'now entering' text), but the globals it sets are unused. | D2Client.0x6FB00C10 updates the level id of the player, and then sets a global when it changes ... the globals it sets are unused
corpus.gdwClientGameFrame_D2DrawUIglobalsourcedtrustedNecrolis (phrozen_code Discord)
D2Client
D2Client global holding current client frame counter (drives animrate advancement, runs at 25fps and slows with the client); D2DrawUI is the UI render routine. Necrolis advises hooking the UI drawing to draw text then draw UI, rather than spawning threads. Core render-loop anchors. | 6FBA7768; gdwClientGameFrame
6FB21B70; D2DrawUI
corpus.rain_storm_wind_factor_floatglobalsourcedtrustedNecrolis (phrozen_code Discord)
D2Client
Float global at 6FBA763C is the storm wind factor (governs rain slant); part of the weather/particle system tied to the ground-tile draw params. | its the storm wind factor IIRC
corpus.floor_tile_draw_prologue_6FAA2E95globalsourcedtrustedNecrolis (phrozen_code Discord)
D2Client
Disassembly inside the ground-tile drawing routine (reads [EBX+24], adds 0x14 = the -20/0xFFFFFFEC pView sentinel check). Part of MULTIRES_DrawGroundTiles at 6FAA2E60/2E70. | 6FAA2E95 |. 8B43 24 MOV EAX,DWORD PTR DS:[EBX+24]
corpus.RainDrawAndPlaySounds_thunder_boolglobalsourcedtrustedLectem (phrozen_code Discord)
D2Client
6FAA8240 is RainDrawAndPlaySounds; 6FBA76AC is a boolean that triggers the thunder1 sound. Weather effects driven off the tile-draw frame counters. | 6FAA8240 is actually RainDrawAndPlaySounds
corpus.D2DDraw_screen_clear_blit_REP_STOSglobalsourcedtrustedThe Esoteric Path (Doug, phrozen_code Discord)
D2DDraw
The screen-clear routine at D2DDraw ~6F8C637A: loads front-buffer ptr from 6F8CF8A8, height/pitch from 6F8D01D8, width factor from 6F8D01C8; when a flag (ESI) is set it does ADD ECX,-2F (the 47px bottom-panel adjust) before IMUL. Zeroes the buffer with REP STOS at 6F8C639B. On failure pushes 'Blit (screen clear) failed!' string at 6F8CCE64. This is the exact HOM/dead-zone clear path. | 6F8C638C 83C1 D1 ADD ECX,-2F ... 6F8C639B F3:AB REP STOS DWORD PTR ES:[EDI] ... Blit (screen clear) failed!
corpus.DDRAW_surface_dims_800x600_0x320_0x258globalsourcedtrustedThe Esoteric Path (Doug, phrozen_code Discord)
ddraw
The buffer descriptor built in ddraw (505BEA43+): stores 0x320 (=800) and 0x258 (=600) as surface width/height, sourced from the DDSURFACEDESC at [ESI+1C]/[ESI+1E]. Confirms the front-buffer geometry the 47px clear operates on. | MOV DWORD PTR DS:[EDX+C],EAX ; 0x320 ... MOV DWORD PTR DS:[EDX+8],EAX ; 0x258
corpus.D2CLIENT_ScreenXShiftglobalsourcedsourcedmisiek1294 (phrozen_code Discord)
D2Client
D2CLIENT INT global at 0x11C418 (1.13c) named ScreenXShift -- the horizontal screen/camera shift value. Directly the 'screen SHIFT' global for the play-area viewport. | D2VAR(D2CLIENT, ScreenXShift, INT, 0x11C418)//1.13c
corpus.gpAutoMapCache_gnAutoMapCachesglobalsourcedtrustedNecrolis (phrozen_code Discord)
D2Client
Global pointer to the automap cache and the automap-cache count; writes at D2Client 6FACBAC6/6FACBA76 (MOV [6FBB1998],ESI / MOV [6FBB199C],ECX). | MOV DWORD PTR DS:[6FBB1998],ESI ; gpAutoMapCache / MOV DWORD PTR DS:[6FBB199C],ECX ; gnAutoMapCaches
corpus.Charm_background_jump_targets_blue_redglobalsourcedtrustedFirehawk (phrozen_code Discord)
D2Client
Firehawk's fixed 1.13c targets for the charm-cell background colour hack: 6FB45803 colours the inventory cell blue (reqs met), 6FB457BF colours it red (reqs not met). | D2Client.dll+0x95803 is the jump to color them blue / D2Client.dll+0x957BF is the jump to color them red
corpus.UI_background_color_handlerglobalsourcedsourcedSzumigajowy (phrozen_code Discord)
D2Client
Szumigajowy: this address 'handle background color' -- candidate for the panel/dead-zone background fill. | D2Client.0x6FAE1710 handle background color
corpus.D2Client_0x521C0_string_desc_builderglobalsourcedtrustedNecrolis (phrozen_code Discord)
D2Client
D2Client.0x521C0 builds the item/stat string descriptions; entry point to find the desc-generation function. | D2Client.0x521C0 builds the string descs, you can find the func from there
corpus.gpMapGfxCells_map_name_table_patchesglobalsourcedtrustedKingpin (phrozen_code Discord)
D2Common / D2Game
Patch sites that repoint D2Common map graphics cell lookups (nFirst/nLast) and map-name-size table into a custom gpMapGfxCells / gpfMapNamesSize array. Involves floor/level tile graphics cell indexing: base formula (ID*4)+(GameOffset+0xFF018), original ref 6FC6F5E6. | (DWORD)&gpMapGfxCells[0].nFirst; // 6FC6F5E6 (ID * 4) + (GameOffset + 0xFF018)
corpus.GetUnitX_GetUnitY_subtile_positionglobalsourcedsourcedArolds (phrozen_code Discord)
D2Client
D2Client exports giving a unit's subtile X/Y position; also discussion of obtaining the 'world view subtile' (where the character stands / camera anchor). Relevant to screen-to-world mapping and viewport offset. | the ones I can get with 1.13c d2client.dll +0x1630 and +0x1660 ... how do I get the world view subtile? Is that where my character stands?
corpus.automap_gfx_cell_mapname_table_relocation_ofglobalsourcedtrustedKingpin (phrozen_code Discord)
D2Common
D2Common code sites patched to repoint automap cell lookup to a custom gpMapGfxCells array: CommonOffset +0x22C7F/0x22D46 (nFirst), +0x22C4E/0x22C9F/0x22D4D (nLast); +0x22AF5/0x22B32 for map-name strings. Original formula (ID*4)+(GameOffset+0xFF018), asm 6FC6F5E6 | 6FC6F5E6 (ID * 4) + (GameOffset + 0xFF018)
corpus.gold_drop_dialog_UI_functions_1_13cglobalsourcedtrustedThe Esoteric Path (Doug, phrozen_code Discord)
D2Client
whist's UI notes: input handlers (14) at D2Client.0xDE858; draw the gold drop dialog at D2Client.0xA3840; open-dialog function D2Client.0xC30E0; in-memory dialog struct D2Client.0xFAD60. Panel drawing/UI | draw the gold drop dialog: D2Client.0xA3840
corpus.D2gfx_flush_window_function_18F46_flagglobalsourcedsourcedKieran (phrozen_code Discord)
D2gfx
D2gfx 6FA748C0 calls #10004 then 6FA7BCEE; 6FA7BCEE reads [esp+8], on TEST EAX zeroes ecx, writes result to [eax+0x18F46] (a D2gfx window/state flag). Kieran patch subject, Necrolis gave clean naked stub | 6FA748C5 E8 24740000 CALL D2gfx.6FA7BCEE
corpus.resolution_mode_global_1_14dglobalsourcedsourceddzik (phrozen_code Discord)
Game (1.14)
Resolution mode stored at 0x7c8cb8; the renderer object base DAT_007c8cc0 has draw funcs at +0xB8. Directly governs play-area sizing / resolution. | resolution mode in 1.14d is stored here 0x7c8cb8
corpus.D2Client_viewport_camera_globals_1_13c_relatglobalsourcedsourcedDeleted User (phrozen_code Discord)
D2Client
Deleted User's D2Client global-offset table: resolution X/Y and the WINDOW START X / negative window-start Y offsets = the play-area origin / screen-shift/camera-offset globals. Highly relevant to viewport positioning beside panels. | ptNegWindowStartY = (DWORD*)(offset_D2Client + 0x3A285C); ptWindowStartX = (DWORD*)(offset_D2Client + 0x3A2858);
corpus.gScreenWidth_gScreenHeight_globalsglobalsourcedsourcedkain_abel_666 (phrozen_code Discord)
D2Client
kain_abel_666 has labelled the client screen-dimension globals: gScreenWidth @ 6FB740EC and gScreenHeight @ 6FB740F0. Relevant to viewport/play-area sizing. | i have the screen width and height labeled as D2Client.gScreenWidth @ 6FB740EC and .gScreenHeight @ 6FB740F0
corpus.Set_item_color_inventory_vs_groundglobalsourcedsourcedoli (phrozen_code Discord)
D2Client
oli: changing set-item color in 1.13c. Ground color patch at 6FB6FF1D works; the inventory (side-panel) copy is a separate address 6FB4408F (changed 02000000 -> 08000000). Concrete evidence that inventory-panel drawing uses a distinct code path from world/ground drawing. | this is the adress for inv 6FB4408F changed 02000000 to 08000000 ... 6FB6FF1D is for the ground and it works
corpus.gpCurrentMouseOverItemglobalsourcedsourcederevos (phrozen_code Discord)
D2Client
Global holding the item the cursor is hovering (inventory/ground); compared at D2Client 6FAE10A1 as CMP ESI,[gpCurrentMouseOverItem] (ptr at 0x1732BC4 in the BlackSSE build). Directly tied to inventory/panel item interaction. | 6FAE10A1 |> 3B35 C42B1703 |CMP ESI,DWORD PTR DS:[BlackSSE.gpCurrentMouseOverItem
corpus.UIPanelDrawYOffset_UIPanelDrawXOffsetglobalsourcedsourcedKieran (phrozen_code Discord)
D2Client
Client panel draw offset globals used to compute inventory/stash/cube item positions; X offset scales with resolution width (simple), Y offset value (e.g. 196) source is unclear and larger than expected — used for resolution-height support of an item mover | D2VAR(D2CLIENT, UIPanelDrawYOffset, signed int, 0x124958)
corpus.palshift_Translvl_column_patchglobalsourcedsourcedeezstreet / LAZ (phrozen_code Discord)
D2Client
eezstreet: first two palshifts are ignored; changing 0x6FB27A23 to 'mov edi,0' shifts back the Translvl column so must add 2. Item draw uses the color index (one of 21) as offset into the transform/invtransform shift | Even if I change 0x6FB27A23 to be mov edi, 0 it will just shift back the Translvl column
corpus.Inventory_charm_req_code_regionglobalsourcedtrustedThe Esoteric Path (Doug, phrozen_code Discord)
D2Client
whist's old notes point here for higher-level inventory/charm-requirement handling. | old notes pointing to D2Client.0x95AB8
corpus.Item_charm_cell_background_color_draw_blockglobalsourcedsourcedDeleted User (phrozen_code Discord)
D2Client
Pushes RGB values and calls draw (0000D390) to set inventory item cell background colors: red-requirement bg, hover bg, default blue bg. Bytes stored at 6FBBB330-334. | PUSH 80 -> red color (red requirement background) ... default blue background
corpus.Frameless_loop_sleep_flagglobalsourcedtrustedLectem (phrozen_code Discord)
D2Client
Boolean set TRUE in most cases (solo) that governs the game's sleep; main loop otherwise spins with no vsync, which is why removing the frame limit is easy | it does have a sleep but D2Client.0x6FB747C0 is set to TRUE in most cases
corpus.Hot_boot_profiling_functionglobalsourcedtrustedLectem (phrozen_code Discord)
D2Client
Function so hot that profiling it makes the game slow to boot (likely main-loop / per-frame) | why profiling 0x6FAA9AF0 made the game so slow to boot
corpus.Panel_always_display_patch_button_visibilityglobalsourcedsourcedDannyIsGreat (phrozen_code Discord)
D2Client
NOP-ing CMP DWORD PTR DS:[6FBBA6FC],EBX / JE at 6FB22062-6FB22068 makes a UI panel always displayed, but its buttons stop working when 'closed'. 6FBBA6FC is the panel-open global flag. Relevant to forcing side panels on. | nooping the following will make it always displayed, but the buttons won't work if u "close" the panel. 6FB22062 |. 391D FCA6BB6F CMP DWORD PTR DS:[6F
corpus.Panel_button_click_handlerglobalsourcedsourcedDannyIsGreat (phrozen_code Discord)
D2Client
6FB00CD0 is the handler for when you click that (panel) button; NOP everything up to the retn 4 to disable the click action. | 6FB00CD0 i think is the handler for when u click that button. if u basically noop everything up to the retn 4 it'll disable what happens when u click
corpus.Mana_Health_orb_DC6_sizeglobalsourcedsourcedEggsy (phrozen_code Discord)
D2Client
MOV EBX,50 instructions that set the DC6 sprite draw size for the mana and health globes; patch target to enlarge the orb bubbles. | 6FAFFB8B BB 50000000 MOV EBX,50 ; Mana DC6 size ... 6FAFF9F9 ... ; Health DC6 size
corpus.light_radius_clamp_sitesglobalsourcedsourcedEggsy (phrozen_code Discord)
D2Client
Four+ CMP/MOV sites that clamp the light radius (CMP EBP,imm / MOV EBP,imm). Patching the immediate (e.g. to 0x1F) forces a large on-screen lit radius regardless of torch/quest state. Verified working in olly. | 6FAA4293 83FD 1F CMP EBP,1F ... 6FAA4298 BD 1F000000 MOV EBP,1F ... This works perfectly
corpus.text_draw_mode_color_siteglobalsourcedsourcedInhuman (phrozen_code Discord)
D2Win
PUSH 4 that supplies the draw-mode/color index for first-line text; color index 9 = white, another index = gold. | 6F8EFA43 6A 04 PUSH 4 ; draw mode first line texts 9 is for white which number is for gold
corpus.prevent_minimize_stay_running_unfocusedglobalsourcedsourcedSilvermane (phrozen_code Discord)
D2GFX
NOP these (11 bytes at each D2GFX site, 24 bytes at D2Win site) to stop the game minimizing on focus loss and keep it running while unfocused. | //D2GFX.6FA74932/6FA74D11 prevent minimizing ... //D2Win.6F8ADC9E Stays running while unfocused
corpus.gbCursorItem_SelectedInvItemglobalsourcedsourcedNeddles (phrozen_code Discord)
D2Client
Global UnitAny* for the item currently held on the cursor / selected in inventory (1.13c). | VARPTR(D2CLIENT, SelectedInvItem, UnitAny*, 0x11BC38) // Updated 1.13c
corpus.hovered_item_GUID_accessorglobalsourcedsourcedX_Dan_X (phrozen_code Discord)
D2Client
Used to read the hovered inventory item's GUID (only works for inventory items; user seeking equivalent for chest/stash object units). | I use d2client 0x1158F4 to get the hovered item's guid, but that is for inventory items
corpus.ShiftClickStats_character_panelglobalsourcedsourcedSilvermane (phrozen_code Discord)
D2Client
Hook site for the character-screen shift-click stat allocation; patched to cap shift-click stat input at 5. | //Shift clicking only imputs 5 { D2DLL_D2CLIENT, 0x315D3, (DWORD)PATCH_JMP, FALSE, 0x01 }
corpus.belt_itemtype_row_checkglobalsourcedsourcedRayveen (phrozen_code Discord)
D2Client
Belt UI row count: CALL D2Common.#10751/#11088 get item type, CMP EAX,13 (row 19 belt), JNZ hides extra rows | CMP EAX,13 ; Check for row 19 (belt itemtype) ... no additional rows is show
corpus.item_durability_desc_ethereal_checkglobalsourcedtrustedNecrolis (phrozen_code Discord)
D2Client
Nop JMP at 6FAE2F0E; calls to D2Client.0x6FAE4060 set up the durability desc line | look for the calls to D2Client.0x6FAE4060 which sets up the durability desc line
corpus.D2GFX_DrawLineglobalsourcedsourcedOwnasaurus (phrozen_code Discord)
D2 exe / D2GFX
D2GFX_DrawLine at exe base + offset 0xF6380; pointer-arith cast (uintptr_t/DWORD) needed, hooks confirmed working | D2GFX_DrawLine = ...(hBaseExe) + 0xF6380 ... confirmed my hooks work now
corpus.NPC_tab_index_top_3_bottom_1globalsourcedsourcedArolds (phrozen_code Discord)
D2Client
Controls NPC/store tab selection; topmost tab 3, bottom 1 | It's in D2Client.0xE24F8. top most tab is 3. bottom most is 1
corpus.stash_close_button_Y_posglobalsourcedsourcedNetMech (phrozen_code Discord)
D2Client
Patch at D2Client+0x9963C adjusts stash-panel close button Y position | {D2DLL_D2CLIENT, 0x9963C, {0xEB}, 0x01}, // Stash close button Y pos