diff --git a/src/factories/sf64/EnvSettingsFactory.cpp b/src/factories/sf64/EnvSettingsFactory.cpp index 73b3f89..a57cfcb 100644 --- a/src/factories/sf64/EnvSettingsFactory.cpp +++ b/src/factories/sf64/EnvSettingsFactory.cpp @@ -31,10 +31,11 @@ ExportResult SF64::EnvSettingsCodeExporter::Export(std::ostream &write, std::sha write << std::dec << env->mType << ", "; write << env->mUnk_04 << ", "; write << env->mBgColor << ", "; - if(env->mSeqId < 0x8000) { - write << env->mSeqId << ", "; + if (env->mSeqId == 0xFFFF) { + write << "SEQ_ID_NONE, "; } else { - write << env->mSeqId - 0x8000 << " | 0x8000, "; + auto seqId = Companion::Instance->GetEnumFromValue("BgmSeqIds", env->mSeqId & 0xFF).value_or("/* SEQ_ID_UNK */ " + std::to_string(env->mSeqId)); + write << seqId << ((env->mSeqId < 0x8000) ? "" : " | SEQ_FLAG") << ", "; } write << env->mFogR << ", "; write << env->mFogG << ", "; diff --git a/src/factories/sf64/ObjInitFactory.cpp b/src/factories/sf64/ObjInitFactory.cpp index 6a65ec5..8b7175e 100644 --- a/src/factories/sf64/ObjInitFactory.cpp +++ b/src/factories/sf64/ObjInitFactory.cpp @@ -25,6 +25,9 @@ ExportResult SF64::ObjInitCodeExporter::Export(std::ostream &write, std::shared_ write << "ObjectInit " << symbol << "[] = {\n"; for(auto& obj : objs) { auto enumName = Companion::Instance->GetEnumFromValue("ObjectId", obj.id).value_or(std::to_string(obj.id)); + if(obj.id >= 1000) { + enumName = "ACTOR_EVENT_ID + " + std::to_string(obj.id - 1000); + } write << fourSpaceTab << "{ "; write << FLOAT(obj.zPos1, 8) << ", "; write << NUM(obj.zPos2, 7) << ", "; diff --git a/src/factories/sf64/ScriptFactory.cpp b/src/factories/sf64/ScriptFactory.cpp index 955427d..3b0aeb7 100644 --- a/src/factories/sf64/ScriptFactory.cpp +++ b/src/factories/sf64/ScriptFactory.cpp @@ -55,10 +55,27 @@ std::string MakeScriptCmd(uint16_t s1, uint16_t s2) { case 104: cmd << "EVENT_INIT_ACTOR(" << std::dec << arg1 << ", " << s2 << ")"; break; + case 113: + cmd << "EVENT_ADD_TO_GROUP(" << std::dec << s2 << ", " << arg1 << ")"; + break; + case 116: { + auto itemtype = Companion::Instance->GetEnumFromValue("ItemDrop", s2).value_or("/* DROP_UNK */ " + std::to_string(s2)); + cmd << "EVENT_DROP_ITEM(" << itemtype << ")"; + } break; + case 118: + cmd << "EVENT_SET_REVERB(" << std::dec << s2 << ")"; + break; + case 119: { + auto groundtype = Companion::Instance->GetEnumFromValue("GroundType", s2).value_or("/* GROUNDTYPE_UNK */ " + std::to_string(s2)); + cmd << "EVENT_SET_GROUND(" << groundtype << ")"; + } break; case 120: { auto rcidName = Companion::Instance->GetEnumFromValue("RadioCharacterId", arg1).value_or("/* RCID_UNK */ " + std::to_string(arg1)); cmd << "EVENT_PLAY_MSG(" << rcidName << ", " << std::dec << std::setw(5) << s2 << ")"; } break; + case 122: + cmd << "EVENT_STOP_BGM()"; + break; case 124: { auto color = Companion::Instance->GetEnumFromValue("TexLineColor", s2).value_or("/* TXLC_UNK */ " + std::to_string(s2)); cmd << "EVENT_MAKE_TEXLINE(" << color << ")"; @@ -77,7 +94,6 @@ std::string MakeScriptCmd(uint16_t s1, uint16_t s2) { break; } - return cmd.str(); } @@ -93,7 +109,7 @@ ExportResult SF64::ScriptCodeExporter::Export(std::ostream &write, std::shared_p for(int i = 0; i < sortedPtrs.size(); i++) { std::ostringstream scriptDefaultName; - scriptDefaultName << symbol << "_cmds_" << std::uppercase << std::hex << cmdOff; + scriptDefaultName << symbol << "_script_" << std::dec << i << "_" << std::uppercase << std::hex << cmdOff; if (Companion::Instance->IsDebug()) { write << "// 0x" << std::hex << std::uppercase << cmdOff << "\n"; @@ -130,7 +146,7 @@ ExportResult SF64::ScriptCodeExporter::Export(std::ostream &write, std::shared_p write << "\n};\n"; if (Companion::Instance->IsDebug()) { - write << "// count: " << script->mPtrs.size() << " events\n"; + write << "// count: " << std::dec << script->mPtrs.size() << " events\n"; } return OffsetEntry {