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:
khallaandClaude Opus 5.5 committed 2026-10-16 09:16:47 +02:00
1 parent 5338527b49
commit 16c2844400
8 files changed
+275 -60

No files matched your search

+7 -3
View File
@@ -13,9 +13,13 @@ namespace game {
// pressed while walking; Windows reported sacred.exe+0x374e39). Who renders
// it without a device is not known yet (sacred_re_crash.txt will tell). With
// no device there is nothing to draw.
void __fastcall BurningBone_Render(void* self, void* edx, void* device);
// (device, a 4x4 matrix by value; ret 0x44).
struct Matrix4 {
float m[16];
};
void __fastcall BurningBone_Render(void* self, void* edx, void* device, Matrix4 transform);
RE_HOOK(0x00774e10, BurningBone_Render);
void __fastcall BurningBone_Render(void* self, void* edx, void* device) {
void __fastcall BurningBone_Render(void* self, void* edx, void* device, Matrix4 transform) {
if (!device) {
static bool logged = false;
if (!logged) {
@@ -24,7 +28,7 @@ void __fastcall BurningBone_Render(void* self, void* edx, void* device) {
}
return;
}
BurningBone_Render_original(self, edx, device);
BurningBone_Render_original(self, edx, device, transform);
}
} // namespace game