Auto-attack: next target, melee/ranged rule after arts; chain range = cast range
- autoattack: when the target dies, the nearest enemy within close range (contact distance + a step) takes over; after an art the hero auto-attacks if the art was melee (walked up / cast close by), or ranged with a ranged weapon, or ranged with an enemy already in melee range; measured action codes and weapon classes in game/engine/orders.h - chainlightning: jumps reach Blitzschlag's cast range (20 ray segments of 30, the art code's hit check) via the shared NearestHostile search - guards: burning bone render hook had the wrong signature (device plus a 4x4 matrix by value, ret 0x44) and corrupted the stack when fire arrows hit - crash reports follow the ebp chain before the raw stack scan Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
1 parent
5338527b49
commit
16c2844400
8 files changed
+275
-60
No files matched your search
+17
-1
@@ -62,7 +62,23 @@ void WriteReport(EXCEPTION_POINTERS* info) {
|
||||
}
|
||||
fprintf(file, "eax %08lx ebx %08lx ecx %08lx edx %08lx esi %08lx edi %08lx ebp %08lx esp %08lx\n", c.Eax, c.Ebx,
|
||||
c.Ecx, c.Edx, c.Esi, c.Edi, c.Ebp, c.Esp);
|
||||
fprintf(file, "return addresses on the stack (innermost first):\n");
|
||||
// Frame pointer chain (our debug build and most of sacred.exe keep ebp).
|
||||
fprintf(file, "frames (ebp chain):\n");
|
||||
uintptr_t frame = c.Ebp;
|
||||
for (int i = 0; i < 64 && frame; ++i) {
|
||||
MEMORY_BASIC_INFORMATION mem;
|
||||
if (!VirtualQuery(reinterpret_cast<void*>(frame), &mem, sizeof(mem)) || mem.State != MEM_COMMIT) {
|
||||
break;
|
||||
}
|
||||
const auto* slots = reinterpret_cast<const uintptr_t*>(frame);
|
||||
DescribeAddress(slots[1], where, sizeof(where));
|
||||
fprintf(file, " %s\n", where);
|
||||
if (slots[0] <= frame) {
|
||||
break;
|
||||
}
|
||||
frame = slots[0];
|
||||
}
|
||||
fprintf(file, "code addresses on the stack (innermost first; may include data):\n");
|
||||
const auto* stack = reinterpret_cast<const uintptr_t*>(c.Esp);
|
||||
int found = 0;
|
||||
for (int i = 0; i < 4096 && found < 48; ++i) {
|
||||
|
||||
Reference in new issue
Block a user