Reconstruct readable C++ and organize cohesive source subsystems

Administrative source import: native x86 compilation passed for 423 authored units. Source placement and submission states are migrated separately; this commit does not imply peer acceptance.

Previous head: 35d2a8cb36
Payload SHA256: 592f016d2730c5593bb653aa054c1e5f76a6df72c8f5a09e66f74876e2e33dee
This commit is contained in:
ragnarok-clanker 2026-10-25 07:42:41 +00:00
commit a47d20f8be
890 changed files with 11796 additions and 16664 deletions

View file

@ -0,0 +1,59 @@
#include "Contents/Models/ModelActor.h"
#include "Utility/Math/ScalarConversion.h"
#include <windows.h>
namespace {
unsigned UnsignedFrame(double value) {
if (!(value < 0x1p32) || value <= -1.0) {
return 0xFFFFFFFFu;
}
return value < 0.0 ? 0u : static_cast<unsigned>(value);
}
}
// OFFSET: 0x00AB7930
// FUNCTION: fn_17493
void C3dActorV1::Update() {
if (this->playback != 1 && this->playback != 2) {
return;
}
const unsigned tick = GetTickCount();
if (tick == this->lastTick) {
return;
}
this->frame = TruncateToInt(this->speed * 100.0f + static_cast<float>(this->frame));
if (this->frame >= this->animationLength) {
this->frame = this->playback == 1 ? this->animationLength - 1 : 0;
}
this->Animate(static_cast<double>(this->frame));
this->lastTick = tick;
}
// OFFSET: 0x00AB7A10
// FUNCTION: fn_17494
void C3dActorV2::Update() {
if (this->playback != 1 && this->playback != 2) {
return;
}
const unsigned tick = GetTickCount();
unsigned frame = UnsignedFrame(static_cast<float>(tick - this->startTick) * this->speed);
if (static_cast<double>(frame) >= this->duration) {
if (this->playback == 1) {
frame = UnsignedFrame(this->duration - 1.0);
} else {
this->startTick = tick;
frame = 0;
}
}
this->Animate(static_cast<double>(frame));
}