Make ttc speeds change properly

This commit is contained in:
EmeraldLockdown 2026-04-17 23:24:18 -05:00
parent a42533e93d
commit 61cd748e75
7 changed files with 22 additions and 2 deletions

View file

@ -1943,6 +1943,7 @@
--- @field public oTTCTreadmillSpeed number
--- @field public oTTCTreadmillTargetSpeed number
--- @field public oTTCTreadmillTimeUntilSwitch integer
--- @field public oTTCTreadmillPrevTTCSpeed integer
--- @field public oTTCMovingBarDelay integer
--- @field public oTTCMovingBarStoppedTimer integer
--- @field public oTTCMovingBarOffset number

View file

@ -1732,6 +1732,7 @@ s64 DynOS_Bhv_ParseBehaviorScriptConstants(const String &_Arg, bool *found) {
bhv_constant(oTTCTreadmillSpeed);
bhv_constant(oTTCTreadmillTargetSpeed);
bhv_constant(oTTCTreadmillTimeUntilSwitch);
bhv_constant(oTTCTreadmillPrevTTCSpeed);
/* TTCMovingBar */
bhv_constant(oTTCMovingBarDelay);

View file

@ -2541,6 +2541,7 @@
| oTTCTreadmillSpeed | `number` | |
| oTTCTreadmillTargetSpeed | `number` | |
| oTTCTreadmillTimeUntilSwitch | `integer` | |
| oTTCTreadmillPrevTTCSpeed | `integer` | |
| oTTCMovingBarDelay | `integer` | |
| oTTCMovingBarStoppedTimer | `integer` | |
| oTTCMovingBarOffset | `number` | |

View file

@ -1002,6 +1002,7 @@
#define /*0x0FC*/ oTTCTreadmillSpeed OBJECT_FIELD_F32(0x1D)
#define /*0x100*/ oTTCTreadmillTargetSpeed OBJECT_FIELD_F32(0x1E)
#define /*0x104*/ oTTCTreadmillTimeUntilSwitch OBJECT_FIELD_S32(0x1F)
#define /*0x108*/ oTTCTreadmillPrevTTCSpeed OBJECT_FIELD_S32(0x20)
/* TTC Moving Bar */
#define /*0x0F4*/ oTTCMovingBarDelay OBJECT_FIELD_S32(0x1B)

View file

@ -156,6 +156,15 @@ static void ttc_moving_bar_act_retract(void) {
* Update function for bhvTTCMovingBar.
*/
void bhv_ttc_moving_bar_update(void) {
if (gTTCSpeedSetting == TTC_SPEED_STOPPED) {
if (o->oTTCMovingBarDelay != 0 && (o->oTTCMovingBarDelay = gTTCMovingBarDelays[gTTCSpeedSetting]) == 0) {
o->oTTCMovingBarOffset = 250.0f;
}
return;
} else if (o->oTTCMovingBarDelay == 0) {
o->oTTCMovingBarDelay = gTTCMovingBarDelays[gTTCSpeedSetting];
}
o->oTTCMovingBarStartOffset = o->oTTCMovingBarOffset;
obj_perform_position_op(POS_OP_SAVE_POSITION);

View file

@ -34,6 +34,8 @@ void bhv_ttc_treadmill_init(void) {
sMasterTreadmill = NULL;
o->oTTCTreadmillPrevTTCSpeed = gTTCSpeedSetting;
// uses standard distance-based syncing
struct SyncObject *so = sync_object_init(o, 4000.0f);
if (so) {
@ -48,8 +50,12 @@ void bhv_ttc_treadmill_init(void) {
* Update function for bhvTTCTreadmill. It calls cur_obj_compute_vel_xz afterward.
*/
void bhv_ttc_treadmill_update(void) {
if (gTTCSpeedSetting >= 0 && gTTCSpeedSetting <= 3 && *o->oTTCTreadmillBigSurface != gTTCTreadmillSpeeds[gTTCSpeedSetting]) {
if (gTTCSpeedSetting >= 0 && gTTCSpeedSetting <= 3 && o->oTTCTreadmillPrevTTCSpeed != gTTCSpeedSetting) {
*o->oTTCTreadmillBigSurface = *o->oTTCTreadmillSmallSurface = gTTCTreadmillSpeeds[gTTCSpeedSetting];
o->oTTCTreadmillTimeUntilSwitch = random_mod_offset(10, 20, 7);
o->oTTCTreadmillTargetSpeed = random_sign() * 50.0f;
o->oTimer = 0;
o->oTTCTreadmillPrevTTCSpeed = gTTCSpeedSetting;
}
if (sMasterTreadmill == o || sMasterTreadmill == NULL) {

View file

@ -1580,7 +1580,7 @@ static struct LuaObjectField sNetworkPlayerFields[LUA_NETWORK_PLAYER_FIELD_COUNT
{ "type", LVT_U8, offsetof(struct NetworkPlayer, type), true, LOT_NONE, 1, sizeof(u8) },
};
#define LUA_OBJECT_FIELD_COUNT 766
#define LUA_OBJECT_FIELD_COUNT 767
static struct LuaObjectField sObjectFields[LUA_OBJECT_FIELD_COUNT] = {
{ "activeFlags", LVT_S16, offsetof(struct Object, activeFlags), false, LOT_NONE, 1, sizeof(s16) },
{ "allowRemoteInteractions", LVT_U8, offsetof(struct Object, allowRemoteInteractions), false, LOT_NONE, 1, sizeof(u8) },
@ -2235,6 +2235,7 @@ static struct LuaObjectField sObjectFields[LUA_OBJECT_FIELD_COUNT] = {
{ "oTTCRotatingSolidVelY", LVT_F32, offsetof(struct Object, oTTCRotatingSolidVelY), false, LOT_NONE, 1, sizeof(f32) },
{ "oTTCSpinnerDir", LVT_S32, offsetof(struct Object, oTTCSpinnerDir), false, LOT_NONE, 1, sizeof(s32) },
{ "oTTCTreadmillBigSurface", LVT_S16_P, offsetof(struct Object, oTTCTreadmillBigSurface), true, LOT_POINTER, 1, sizeof(s16*) },
{ "oTTCTreadmillPrevTTCSpeed", LVT_S32, offsetof(struct Object, oTTCTreadmillPrevTTCSpeed), false, LOT_NONE, 1, sizeof(s32) },
{ "oTTCTreadmillSmallSurface", LVT_S16_P, offsetof(struct Object, oTTCTreadmillSmallSurface), true, LOT_POINTER, 1, sizeof(s16*) },
{ "oTTCTreadmillSpeed", LVT_F32, offsetof(struct Object, oTTCTreadmillSpeed), false, LOT_NONE, 1, sizeof(f32) },
{ "oTTCTreadmillTargetSpeed", LVT_F32, offsetof(struct Object, oTTCTreadmillTargetSpeed), false, LOT_NONE, 1, sizeof(f32) },