Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion include/st_emblem/st_emblem.h
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ class stEmblem : public stMelee {
grCollision* unk738;
u8 m_isKemuriHigh;
float m_lampEffTimer;
u32 unk744;
s32 m_lampEffectIndex;
s32 quakeSnd;
u8 m_eventType;
StSeUtil::SeSeqInstance<2, 2> m_se_player;
Expand Down
125 changes: 46 additions & 79 deletions src/mo_stage/st_emblem/st_emblem.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ stEmblem::stEmblem() : stMelee("stEmblem", Stages::Emblem) {
unk738 = NULL;
m_isKemuriHigh = 1;
m_lampEffTimer = 0.0;
unk744 = 0;
m_lampEffectIndex = 0;
quakeSnd = -1;
m_eventType = 0;
unk800 = 0;
Expand Down Expand Up @@ -532,6 +532,10 @@ void stEmblem::updateScene(float deltaFrame) {
}
}

static inline float randomFloat(float range) {
return range * randf();
}

void stEmblem::updateScene00(float deltaFrame) {
switch (m_curr_scene_effect.getPhase()) {
case 0:
Expand Down Expand Up @@ -567,10 +571,9 @@ void stEmblem::updateScene00(float deltaFrame) {
rand = 4;
}
unkSnd728 = playSeBasic((SndID)(rand + snd_se_stage_Emblem_touseki_01),unk720);
float fVar1 = (randf()*100.0f);
float fVar2 = 50.0f - fVar1;
unk724 = 0.0;
unk71C = fVar2 + 130.0f;
float offset = 50.0f - 100.0f * randf();
unk71C = 130.0f + offset;
unk724 = 0.0f;
}
unk720+=0.05f;
if (unk720 >= 0.0f) {
Expand All @@ -587,25 +590,11 @@ void stEmblem::updateScene00(float deltaFrame) {
}
}

char* const effectStrings[10] = {
"eff01",
"eff02",
"eff03",
"eff04",
"eff05",
"eff06",
"eff07",
"eff08",
"eff09",
"eff10"
};

const int statueGrounds[2] = {
1,3
};

void stEmblem::updateScene01(float deltaFrame) {
char* effectNames[10];
Vec3f groundPos;
Vec3f pos;
Vec3f quake;

float fVar1 = unk808 - deltaFrame;
unk808 = fVar1;
if (fVar1 < 0.0f) {
Expand All @@ -617,21 +606,14 @@ void stEmblem::updateScene01(float deltaFrame) {
m_effects[i] = -1;
}
m_lampEffTimer = 0.0;
unk744 = 0;
m_lampEffectIndex = 0;
m_curr_scene_effect.setPhase(m_curr_scene_effect.getPhase() + 1);
break;
case 1:
//effectNames = &effectStrings[1];
effectNames[0] = effectStrings[0];
effectNames[1] = effectStrings[1];
effectNames[2] = effectStrings[2];
effectNames[3] = effectStrings[3];
effectNames[4] = effectStrings[4];
effectNames[5] = effectStrings[5];
effectNames[6] = effectStrings[6];
effectNames[7] = effectStrings[7];
effectNames[8] = effectStrings[8];
effectNames[9] = effectStrings[9];
const char* effectNames[10] = {
"eff01", "eff02", "eff03", "eff04", "eff05",
"eff06", "eff07", "eff08", "eff09", "eff10"
};
if (m_lampEffTimer >= 10.0f) {
u32 rand = randi(3);
if (rand >= 2) {
Expand All @@ -640,59 +622,50 @@ void stEmblem::updateScene01(float deltaFrame) {
switch(rand) {
default:
case 0:
m_effects[unk744] = g_ecMgr->setEffect(ef_ptc_stg_emblem_01_lamp_fire_a);
m_effects[m_lampEffectIndex] = g_ecMgr->setEffect(ef_ptc_stg_emblem_01_lamp_fire_a);
break;
case 1:
m_effects[unk744] = g_ecMgr->setEffect(ef_ptc_stg_emblem_01_lamp_fire_b);
m_effects[m_lampEffectIndex] = g_ecMgr->setEffect(ef_ptc_stg_emblem_01_lamp_fire_b);
break;
case 2:
//case 3:
m_effects[unk744] = g_ecMgr->setEffect(ef_ptc_stg_emblem_01_lamp_fire_c);
m_effects[m_lampEffectIndex] = g_ecMgr->setEffect(ef_ptc_stg_emblem_01_lamp_fire_c);
break;
}
rand = randi(3);
if (rand >= 2) {
rand = 2;
}
// TODO: load from 0x68c[unk744+5] 0x6A0[unk744]
switch(rand) {
default:
case 0:
m_effects[unk744+5] = g_ecMgr->setEffect(ef_ptc_stg_emblem_01_lamp_fire_a);
m_effects[static_cast<u32>(m_lampEffectIndex + 5)] = g_ecMgr->setEffect(ef_ptc_stg_emblem_01_lamp_fire_a);
break;
case 1:
m_effects[unk744+5] = g_ecMgr->setEffect(ef_ptc_stg_emblem_01_lamp_fire_b);
m_effects[static_cast<u32>(m_lampEffectIndex + 5)] = g_ecMgr->setEffect(ef_ptc_stg_emblem_01_lamp_fire_b);
break;
case 2:
m_effects[unk744+5] = g_ecMgr->setEffect(ef_ptc_stg_emblem_01_lamp_fire_c);
m_effects[static_cast<u32>(m_lampEffectIndex + 5)] = g_ecMgr->setEffect(ef_ptc_stg_emblem_01_lamp_fire_c);
break;
}
g_ecMgr->setParent(m_effects[unk744],m_scene_grounds[0]->m_sceneModels[0],effectNames[unk744],0);
//u32 temp1 = unk744 + 5;
g_ecMgr->setParent(m_effects[unk744],m_scene_grounds[0]->m_sceneModels[0],effectNames[unk744+5],0);
int iVar1 = unk744 + 1;
unk744 = iVar1;
if (iVar1 >= 5) {
g_ecMgr->setParent(m_effects[m_lampEffectIndex],m_scene_grounds[0]->m_sceneModels[0],effectNames[m_lampEffectIndex],0);
g_ecMgr->setParent(m_effects[static_cast<u32>(m_lampEffectIndex + 5)],m_scene_grounds[0]->m_sceneModels[0],effectNames[static_cast<u32>(m_lampEffectIndex + 5)],0);
m_lampEffectIndex++;
if (m_lampEffectIndex >= 5) {
m_curr_scene_effect.setPhase(m_curr_scene_effect.getPhase() + 1);
}
m_lampEffTimer = 0.0f;
} else {
m_lampEffTimer += deltaFrame;
}
//m_lampEffTimer = 0.0;
//unk744 = 0;
break;
default:
break;
}
int locald8[2];
locald8[0] = statueGrounds[0];
locald8[1] = statueGrounds[1];
//int iVar2 = 0
int statueGrounds[2] = {1, 3};
for (int i = 0; i < 2; i++) {
switch(unk704[i]) {
case 0:
if (m_scene_grounds[locald8[i]]->isHit()) {
if (m_scene_grounds[statueGrounds[i]]->isHit()) {
if (unk808 == 0.0f) {
if (i == 0) {
m_effects[12] = g_ecMgr->setEffect(ef_ptc_stg_emblem_00_zou_damage_l);
Expand All @@ -703,18 +676,17 @@ void stEmblem::updateScene01(float deltaFrame) {
}
unk808 = 10.0f + (5.0f*randf());
}
//m_scene_grounds[locald8[i]]
int damage = m_scene_grounds[locald8[i]]->getLastDamageTaken();
int damage = m_scene_grounds[statueGrounds[i]]->getLastDamageTaken();
int iVar = unk6fc[i] -= damage;
unk6fc[i] = iVar;
if (iVar < 0) {
unk6fc[i] = 0;
}

if (unk6fc[i] == 0) {
m_scene_grounds[locald8[i]]->endEntity();
m_scene_grounds[statueGrounds[i]]->endEntity();
getGround(i+11)->setEnableCollisionStatus(false);
m_scene_grounds[locald8[i]+1]->startEntity();
m_scene_grounds[statueGrounds[i]+1]->startEntity();
unk704[i]++;
eventArray[i].end();
if (i == 0) {
Expand All @@ -724,7 +696,6 @@ void stEmblem::updateScene01(float deltaFrame) {
m_effects[10] = g_ecMgr->setEffect(ef_ptc_stg_emblem_00_zoucrash_r);
g_ecMgr->setParent(m_effects[10],m_scene_grounds[0]->m_sceneModels[0],"StgEmblem01ZouBClash",0);
}
Vec3f quake;// = Vec3f(0.0,0.0,0.0);
quake.m_x = 0.0f;
quake.m_y = 0.0f;
quake.m_z = 0.0f;
Expand All @@ -738,31 +709,28 @@ void stEmblem::updateScene01(float deltaFrame) {
case 1:
if (i == 0) {
//m_se_player.playFrame(m_scene_grounds[0]->getEntityFrame,0);
m_se_player.playFrame(0, m_scene_grounds[locald8[i]+1]->getEntityFrame());
m_se_player.playFrame(0, m_scene_grounds[statueGrounds[i]+1]->getEntityFrame());
} else {
m_se_player2.playFrame(0, m_scene_grounds[locald8[i]+1]->getEntityFrame());
m_se_player2.playFrame(0, m_scene_grounds[statueGrounds[i]+1]->getEntityFrame());
}
if(m_scene_grounds[locald8[i]+1]->isEndEntity() == true) {
m_scene_grounds[locald8[i]+1]->endEntity();
if(m_scene_grounds[statueGrounds[i]+1]->isEndEntity() == true) {
m_scene_grounds[statueGrounds[i]+1]->endEntity();
unk704[i]++;
}
}
if (eventArray[i].isEvent()) {
Vec3f groundPos;
float one = 1.0f;
float fVar1 = (one*randf());
float fVar1 = randomFloat(1.0f);
groundPos.m_x = (0.5f-fVar1);
fVar1 = (one*randf());
fVar1 = randomFloat(1.0f);
groundPos.m_y = (0.5f-fVar1);
fVar1 = (one*randf());
fVar1 = randomFloat(1.0f);
groundPos.m_z = (0.5f-fVar1);
m_scene_grounds[locald8[i+1]]->setPos(&groundPos);
m_scene_grounds[statueGrounds[i]]->setPos(&groundPos);
if (eventArray[i].isReadyEnd()) {
Vec3f pos;
pos.m_x = 0.0f;
pos.m_y = 0.0f;
pos.m_z = 0.0f;
m_scene_grounds[locald8[i+1]]->setPos(&pos);
m_scene_grounds[statueGrounds[i]]->setPos(&pos);
eventArray[i].end();
}
}
Expand Down Expand Up @@ -891,8 +859,9 @@ void stEmblem::update(float deltaFrame) {
updateSE(deltaFrame);
}

inline float FSub(float param1, float param2) {
return param1 - param2;
static inline float clampFloat(float value, float min, float max) {
value = nw4r::math::FSelect(value - min, value, min);
return nw4r::math::FSelect(value - max, max, value);
}

void stEmblem::updateSE(float deltaFrame) {
Expand Down Expand Up @@ -928,9 +897,7 @@ void stEmblem::updateSE(float deltaFrame) {
return;
}
fVar1 = 1.0f - unk804/90.0f;
float fVar2;
fVar1 = nw4r::math::FSelect(FSub(fVar1,0.0f),fVar1,0.0f);
fVar2 = nw4r::math::FSelect(FSub(fVar1,1.0f),1.0f,fVar1);
float fVar2 = clampFloat(fVar1, 0.0f, 1.0f);
if (fVar2 == 1.0f) {
unk800++;
}
Expand All @@ -953,4 +920,4 @@ GXColor stEmblem::getFinalTechniqColor() {
nw4r::ut::Color color = nw4r::ut::Color(0x14000496);
if (m_scene_num == 0) return color;
return nw4r::ut::Color(0x1400047d);
}
}
Loading