summaryrefslogtreecommitdiff
path: root/src/d/actor/d_a_obj_sekizoa.cpp
diff options
context:
space:
mode:
authorMax Roncace <me@caseif.net>2026-03-18 01:38:05 -0400
committerGitHub <noreply@github.com>2026-03-17 22:38:05 -0700
commit6694c1b281a142972fce587bd20cd82ee65ab38f (patch)
tree2537d09d5ab3d270eaca5143a4f2f2f65f4ecb49 /src/d/actor/d_a_obj_sekizoa.cpp
parent9f340b604b5ac3d19d330b7bd6a2d7355c58bc27 (diff)
Fix a bunch of compiler warnings and document several more bugs (#3130)
Diffstat (limited to 'src/d/actor/d_a_obj_sekizoa.cpp')
-rw-r--r--src/d/actor/d_a_obj_sekizoa.cpp20
1 files changed, 16 insertions, 4 deletions
diff --git a/src/d/actor/d_a_obj_sekizoa.cpp b/src/d/actor/d_a_obj_sekizoa.cpp
index 57be8845a9..baba4a7fb2 100644
--- a/src/d/actor/d_a_obj_sekizoa.cpp
+++ b/src/d/actor/d_a_obj_sekizoa.cpp
@@ -1008,9 +1008,14 @@ bool daObj_Sekizoa_c::afterSetMotionAnm(int i_frame, int i_mode, f32 i_morf, int
if (mBtkAnm.getBtkAnm() == anm_text) {
mAnmFlags |= ANM_PLAY_BTK;
} else {
- if (setBtkAnm(anm_text, mpMorf[0]->getModel()->getModelData(), 1.0f,
- btkAnmData[4].field_0x4))
- {
+#if AVOID_UB
+ // negative attribute values are ignored in favor of the animation's default value
+ if (setBtkAnm(anm_text, mpMorf[0]->getModel()->getModelData(), 1.0f, -1)) {
+#else
+ // !@bug Out-of-bounds array read, in practice this ends up reading from a jump table
+ // positioned immediately after btkAnmData in .data.
+ if (setBtkAnm(anm_text, mpMorf[0]->getModel()->getModelData(), 1.0f, btkAnmData[4].field_0x4)) {
+#endif
if (frame_1 == 3) {
mBtkAnm.setPlaySpeed(0.0f);
}
@@ -1032,8 +1037,15 @@ bool daObj_Sekizoa_c::afterSetMotionAnm(int i_frame, int i_mode, f32 i_morf, int
if (mBrkAnm.getBrkAnm() == anm_tev) {
mAnmFlags |= ANM_PLAY_BRK;
} else {
- frame_1 = setBrkAnm(anm_tev, mpMorf[0]->getModel()->getModelData(), 1.0,
+ // !@bug OoB index into brkAnmData ends up indexing into btkAnmData instead.
+ // This was probably supposed to use brkAnmData[5] instead.
+#if AVOID_UB
+ frame_1 = setBrkAnm(anm_tev, mpMorf[0]->getModel()->getModelData(), 1.0f,
+ btkAnmData[0].field_0x4);
+#else
+ frame_1 = setBrkAnm(anm_tev, mpMorf[0]->getModel()->getModelData(), 1.0f,
brkAnmData[6].field_0x4);
+#endif
if (frame_1 != 0) {
if (frame_2 == 5) {
mBrkAnm.setPlaySpeed(0.0f);