mirror of
https://github.com/izzy2lost/Ghostship.git
synced 2026-06-19 01:17:03 -07:00
Added external asset loading
This commit is contained in:
@@ -149,24 +149,6 @@ list(FILTER ALL_FILES EXCLUDE REGEX "src/pc/dlmalloc.c")
|
||||
# Generated Source Code Files #
|
||||
#==============================================================================#
|
||||
|
||||
set(INC_C_FILES "")
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/text/us/define_text-tmp
|
||||
COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/text/us
|
||||
COMMAND ${CPP} -I${CMAKE_CURRENT_SOURCE_DIR}/text/us ${CMAKE_CURRENT_SOURCE_DIR}/text/define_text.inc.c > ${CMAKE_CURRENT_BINARY_DIR}/text/us/define_text-tmp
|
||||
)
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/text/us/define_text.inc.c
|
||||
COMMAND $<TARGET_FILE:textconv> ${CMAKE_CURRENT_SOURCE_DIR}/charmap.txt ${CMAKE_CURRENT_BINARY_DIR}/text/us/define_text-tmp ${CMAKE_CURRENT_BINARY_DIR}/text/us/define_text.inc.c
|
||||
VERBATIM
|
||||
DEPENDS textconv
|
||||
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/text/us/define_text-tmp
|
||||
)
|
||||
|
||||
list(APPEND INC_C_FILES ${CMAKE_CURRENT_BINARY_DIR}/text/us/define_text.inc.c)
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT include/text_strings.h
|
||||
COMMAND $<TARGET_FILE:textconv> charmap.txt ${CMAKE_CURRENT_SOURCE_DIR}/include/text_strings.h.in ${CMAKE_CURRENT_BINARY_DIR}/include/text_strings.h
|
||||
@@ -506,10 +488,3 @@ if (CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang|AppleClang")
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
add_custom_target(
|
||||
ConvertIncCFiles
|
||||
DEPENDS ${INC_C_FILES}
|
||||
)
|
||||
|
||||
add_dependencies(${PROJECT_NAME} ConvertIncCFiles)
|
||||
|
||||
@@ -1167,15 +1167,6 @@ const Texture *const main_hud_camera_lut[] = {
|
||||
texture_hud_char_arrow_up, texture_hud_char_arrow_down,
|
||||
};
|
||||
|
||||
// If you change the language here, the following Makefile rule also needs to
|
||||
// change, to generate the right version of define_text.inc.c:
|
||||
// $(BUILD_DIR)/bin/segment2.o: $(BUILD_DIR)/text/$(VERSION)/define_text.inc.c
|
||||
#if defined(VERSION_JP) || defined(VERSION_SH)
|
||||
#include "text/jp/define_text.inc.c"
|
||||
#elif defined(VERSION_US)
|
||||
#include "text/us/define_text.inc.c"
|
||||
#endif
|
||||
|
||||
UNUSED static const u64 segment2_unused_0 = 0;
|
||||
|
||||
// 0x0200EC60 - 0x0200EC98
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
#pragma once
|
||||
|
||||
#include "align_asset_macro.h"
|
||||
|
||||
#define dgDialogRoot "texts/dialogs/dialog_%02X"
|
||||
static const ALIGN_ASSET(2) char gDialogRoot[] = dgDialogRoot;
|
||||
|
||||
#define dgCourseRoot "texts/courses/course_%02X"
|
||||
static const ALIGN_ASSET(2) char gCourseRoot[] = dgCourseRoot;
|
||||
|
||||
#define dgActRoot "texts/acts/act_%02X"
|
||||
static const ALIGN_ASSET(2) char gActRoot[] = dgActRoot;
|
||||
+10
-30
@@ -1631,7 +1631,6 @@ void render_dialog_entries(void) {
|
||||
#ifdef VERSION_EU
|
||||
s8 lowerBound;
|
||||
#endif
|
||||
void **dialogTable;
|
||||
struct DialogEntry *dialog;
|
||||
#if defined(VERSION_US) || defined(VERSION_SH)
|
||||
s8 lowerBound;
|
||||
@@ -1650,10 +1649,8 @@ void render_dialog_entries(void) {
|
||||
dialogTable = segmented_to_virtual(dialog_table_eu_de);
|
||||
break;
|
||||
}
|
||||
#else
|
||||
dialogTable = segmented_to_virtual(seg2_dialog_table);
|
||||
#endif
|
||||
dialog = segmented_to_virtual(dialogTable[gDialogID]);
|
||||
dialog = GameEngine_LoadDialog(gDialogID);
|
||||
|
||||
// if the dialog entry is invalid, set the ID to DIALOG_NONE.
|
||||
if (segmented_to_virtual(NULL) == dialog) {
|
||||
@@ -1938,7 +1935,6 @@ void do_cutscene_handler(void) {
|
||||
|
||||
// "Dear Mario" message handler
|
||||
void print_peach_letter_message(void) {
|
||||
void **dialogTable;
|
||||
struct DialogEntry *dialog;
|
||||
u8 *str;
|
||||
|
||||
@@ -1955,10 +1951,8 @@ void print_peach_letter_message(void) {
|
||||
dialogTable = segmented_to_virtual(dialog_table_eu_de);
|
||||
break;
|
||||
}
|
||||
#else
|
||||
dialogTable = segmented_to_virtual(seg2_dialog_table);
|
||||
#endif
|
||||
dialog = segmented_to_virtual(dialogTable[gDialogID]);
|
||||
dialog = GameEngine_LoadDialog(gDialogID);
|
||||
str = segmented_to_virtual(dialog->str);
|
||||
|
||||
create_dl_translation_matrix(MENU_MTX_PUSH, 97.0f, 118.0f, 0);
|
||||
@@ -2143,18 +2137,11 @@ void render_pause_my_score_coins(void) {
|
||||
u8 textUnfilledStar[] = { TEXT_UNFILLED_STAR };
|
||||
|
||||
u8 strCourseNum[4];
|
||||
void **courseNameTbl;
|
||||
u8 *courseName;
|
||||
void **actNameTbl;
|
||||
u8 *actName;
|
||||
u8 courseIndex;
|
||||
u8 starFlags;
|
||||
|
||||
#ifndef VERSION_EU
|
||||
courseNameTbl = segmented_to_virtual(seg2_course_name_table);
|
||||
actNameTbl = segmented_to_virtual(seg2_act_name_table);
|
||||
#endif
|
||||
|
||||
courseIndex = COURSE_NUM_TO_INDEX(gCurrCourseNum);
|
||||
starFlags = save_file_get_star_flags(gCurrSaveFileNum - 1, COURSE_NUM_TO_INDEX(gCurrCourseNum));
|
||||
|
||||
@@ -2193,7 +2180,7 @@ void render_pause_my_score_coins(void) {
|
||||
print_generic_string(MYSCORE_X, 121, LANGUAGE_ARRAY(textMyScore));
|
||||
}
|
||||
|
||||
courseName = segmented_to_virtual(courseNameTbl[courseIndex]);
|
||||
courseName = GameEngine_LoadLevelName(courseIndex);
|
||||
u8 isJP = ROM_JP;
|
||||
|
||||
if (courseIndex <= COURSE_NUM_TO_INDEX(COURSE_STAGES_MAX)) {
|
||||
@@ -2201,7 +2188,7 @@ void render_pause_my_score_coins(void) {
|
||||
int_to_str(gCurrCourseNum, strCourseNum);
|
||||
print_generic_string(CRS_NUM_X1, 157, strCourseNum);
|
||||
|
||||
actName = segmented_to_virtual(actNameTbl[COURSE_NUM_TO_INDEX(gCurrCourseNum) * 6 + gDialogCourseActNum - 1]);
|
||||
actName = GameEngine_LoadActName(COURSE_NUM_TO_INDEX(gCurrCourseNum) * 6 + gDialogCourseActNum - 1);
|
||||
|
||||
if (starFlags & (1 << (gDialogCourseActNum - 1))) {
|
||||
print_generic_string(TXT_STAR_X, 140, textStar);
|
||||
@@ -2420,8 +2407,6 @@ void render_pause_castle_course_stars(s16 x, s16 y, s16 fileIndex, s16 courseInd
|
||||
void render_pause_castle_main_strings(s16 x, s16 y) {
|
||||
#ifdef VERSION_EU
|
||||
void **courseNameTbl;
|
||||
#else
|
||||
void **courseNameTbl = segmented_to_virtual(seg2_course_name_table);
|
||||
#endif
|
||||
|
||||
#ifdef VERSION_EU
|
||||
@@ -2483,7 +2468,7 @@ void render_pause_castle_main_strings(s16 x, s16 y) {
|
||||
gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, gDialogTextAlpha);
|
||||
|
||||
if (gDialogLineNum <= COURSE_NUM_TO_INDEX(COURSE_STAGES_MAX)) { // Main courses
|
||||
courseName = segmented_to_virtual(courseNameTbl[gDialogLineNum]);
|
||||
courseName = GameEngine_LoadLevelName(gDialogLineNum);
|
||||
render_pause_castle_course_stars(x, y, gCurrSaveFileNum - 1, gDialogLineNum);
|
||||
print_generic_string(x + 34, y - 5, textCoin);
|
||||
#ifdef VERSION_EU
|
||||
@@ -2496,7 +2481,7 @@ void render_pause_castle_main_strings(s16 x, s16 y) {
|
||||
#endif
|
||||
} else { // Castle secret stars
|
||||
u8 textStarX[] = { TEXT_STAR_X };
|
||||
courseName = segmented_to_virtual(courseNameTbl[COURSE_MAX]);
|
||||
courseName = GameEngine_LoadLevelName(COURSE_MAX);
|
||||
print_generic_string(x + 40, y + 13, textStarX);
|
||||
int_to_str(save_file_get_total_star_count(gCurrSaveFileNum - 1, COURSE_BONUS_STAGES - 1, COURSE_MAX - 1), strVal);
|
||||
print_generic_string(x + 60, y + 13, strVal);
|
||||
@@ -2720,8 +2705,6 @@ void render_course_complete_lvl_info_and_hud_str(void) {
|
||||
u8 textClear[] = { TEXT_CLEAR };
|
||||
#endif
|
||||
|
||||
void **actNameTbl;
|
||||
void **courseNameTbl;
|
||||
u8 *name;
|
||||
|
||||
u8 strCourseNum[4];
|
||||
@@ -2742,9 +2725,6 @@ void render_course_complete_lvl_info_and_hud_str(void) {
|
||||
courseNameTbl = segmented_to_virtual(course_name_table_eu_de);
|
||||
break;
|
||||
}
|
||||
#else
|
||||
actNameTbl = segmented_to_virtual(seg2_act_name_table);
|
||||
courseNameTbl = segmented_to_virtual(seg2_course_name_table);
|
||||
#endif
|
||||
|
||||
if (gLastCompletedCourseNum <= COURSE_STAGES_MAX) { // Main courses
|
||||
@@ -2752,9 +2732,9 @@ void render_course_complete_lvl_info_and_hud_str(void) {
|
||||
play_star_fanfare_and_flash_hud(1, 1 << (gLastCompletedStarNum - 1));
|
||||
|
||||
if (gLastCompletedStarNum == 7) {
|
||||
name = segmented_to_virtual(actNameTbl[COURSE_STAGES_MAX * 6 + 1]);
|
||||
name = GameEngine_LoadActName(COURSE_STAGES_MAX * 6 + 1);
|
||||
} else {
|
||||
name = segmented_to_virtual(actNameTbl[COURSE_NUM_TO_INDEX(gLastCompletedCourseNum) * 6 + gLastCompletedStarNum - 1]);
|
||||
name = GameEngine_LoadActName(COURSE_NUM_TO_INDEX(gLastCompletedCourseNum) * 6 + gLastCompletedStarNum - 1);
|
||||
}
|
||||
|
||||
// Print course number
|
||||
@@ -2772,7 +2752,7 @@ void render_course_complete_lvl_info_and_hud_str(void) {
|
||||
|
||||
gSPDisplayList(gDisplayListHead++, dl_ia_text_end);
|
||||
} else if (gLastCompletedCourseNum == COURSE_BITDW || gLastCompletedCourseNum == COURSE_BITFS) { // Bowser courses
|
||||
name = segmented_to_virtual(courseNameTbl[COURSE_NUM_TO_INDEX(gLastCompletedCourseNum)]);
|
||||
name = GameEngine_LoadLevelName(COURSE_NUM_TO_INDEX(gLastCompletedCourseNum));
|
||||
|
||||
// Print course name and clear text
|
||||
gSPDisplayList(gDisplayListHead++, dl_ia_text_begin);
|
||||
@@ -2800,7 +2780,7 @@ void render_course_complete_lvl_info_and_hud_str(void) {
|
||||
|
||||
return;
|
||||
} else { // Castle secret stars
|
||||
name = segmented_to_virtual(actNameTbl[COURSE_STAGES_MAX * 6]);
|
||||
name = GameEngine_LoadActName(COURSE_STAGES_MAX * 6);
|
||||
|
||||
print_hud_course_complete_coins(118, 103);
|
||||
play_star_fanfare_and_flash_hud(1, 1 << (gLastCompletedStarNum - 1));
|
||||
|
||||
@@ -4,8 +4,6 @@
|
||||
#include <libultra/types.h>
|
||||
#include <libultra/gbi.h>
|
||||
|
||||
extern u8 seg2_course_name_table[];
|
||||
extern u8 seg2_act_name_table[];
|
||||
extern Gfx dl_rgba16_text_begin[];
|
||||
extern Gfx dl_rgba16_text_end[];
|
||||
extern Gfx dl_ia_text_begin[];
|
||||
@@ -55,7 +53,6 @@ extern void *main_credits_font_lut[];
|
||||
extern u8* main_hud_camera_lut[6];
|
||||
extern Gfx dl_draw_text_bg_box[];
|
||||
extern Gfx dl_draw_triangle[];
|
||||
extern void *seg2_dialog_table[];
|
||||
extern Gfx dl_billboard_num_0[];
|
||||
extern Gfx dl_billboard_num_1[];
|
||||
extern Gfx dl_billboard_num_2[];
|
||||
|
||||
@@ -2682,7 +2682,6 @@ void print_save_file_scores(s8 fileIndex) {
|
||||
#ifndef VERSION_EU
|
||||
unsigned char textMario[] = { TEXT_MARIO };
|
||||
unsigned char textFileLetter[] = { TEXT_ZERO };
|
||||
void **levelNameTable = segmented_to_virtual(seg2_course_name_table);
|
||||
unsigned char textHiScore[] = { TEXT_HI_SCORE };
|
||||
unsigned char textMyScore[] = { TEXT_MY_SCORE };
|
||||
#else
|
||||
@@ -2720,7 +2719,7 @@ void print_save_file_scores(s8 fileIndex) {
|
||||
//! Huge print list, for loops exist for a reason!
|
||||
#define PRINT_COURSE_SCORES(courseIndex, pad) \
|
||||
print_menu_generic_string(LEVEL_NAME_X + (pad * LEVEL_NUM_PAD), 23 + 12 * courseIndex, \
|
||||
segmented_to_virtual(levelNameTable[courseIndex - 1])); \
|
||||
GameEngine_LoadLevelName(courseIndex - 1)); \
|
||||
print_score_file_star_score(fileIndex, courseIndex - 1, STAR_SCORE_X, 23 + 12 * courseIndex); \
|
||||
print_score_file_course_coin_score(fileIndex, courseIndex - 1, 213, 23 + 12 * courseIndex);
|
||||
|
||||
@@ -2744,7 +2743,7 @@ void print_save_file_scores(s8 fileIndex) {
|
||||
|
||||
// Print castle secret stars text
|
||||
print_menu_generic_string(LEVEL_NAME_X + SECRET_STARS_PAD, 23 + 12 * 16,
|
||||
segmented_to_virtual(levelNameTable[25]));
|
||||
GameEngine_LoadLevelName(25));
|
||||
// Print castle secret stars score
|
||||
print_score_file_castle_secret_stars(fileIndex, STAR_SCORE_X, 23 + 12 * 16);
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
#include <libultra/types.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include "audio/external.h"
|
||||
#include "behavior_data.h"
|
||||
@@ -268,10 +269,6 @@ void print_act_selector_strings(void) {
|
||||
u8 **levelNameTbl;
|
||||
u8 *currLevelName;
|
||||
u8 **actNameTbl;
|
||||
#else
|
||||
u8 **levelNameTbl = segmented_to_virtual(seg2_course_name_table);
|
||||
u8 *currLevelName = segmented_to_virtual(levelNameTbl[COURSE_NUM_TO_INDEX(gCurrCourseNum)]);
|
||||
u8 **actNameTbl = segmented_to_virtual(seg2_act_name_table);
|
||||
#endif
|
||||
u8 *selectedActName;
|
||||
s16 lvlNameX;
|
||||
@@ -281,6 +278,8 @@ void print_act_selector_strings(void) {
|
||||
s16 language = eu_get_language();
|
||||
#endif
|
||||
|
||||
uint8_t* currLevelName = GameEngine_LoadLevelName(COURSE_NUM_TO_INDEX(gCurrCourseNum));
|
||||
|
||||
create_dl_ortho_matrix();
|
||||
|
||||
#ifdef VERSION_EU
|
||||
@@ -333,8 +332,7 @@ void print_act_selector_strings(void) {
|
||||
gDPSetEnvColor(gDisplayListHead++, 0, 0, 0, 255);
|
||||
// Print the name of the selected act.
|
||||
if (sVisibleStars != 0) {
|
||||
selectedActName = segmented_to_virtual(actNameTbl[COURSE_NUM_TO_INDEX(gCurrCourseNum) * 6 + sSelectedActIndex]);
|
||||
|
||||
selectedActName = GameEngine_LoadActName(COURSE_NUM_TO_INDEX(gCurrCourseNum) * 6 + sSelectedActIndex);
|
||||
actNameX = get_str_x_pos_from_center(ACT_NAME_X, selectedActName, 8.0f);
|
||||
print_menu_generic_string(actNameX, 81, selectedActName);
|
||||
}
|
||||
|
||||
+19
-2
@@ -4,16 +4,19 @@
|
||||
#include "port/importer/AudioBankFactory.h"
|
||||
#include "port/importer/AudioSampleFactory.h"
|
||||
#include "port/importer/AudioSequenceFactory.h"
|
||||
#include "audio/internal.h"
|
||||
#include "banks_table.h"
|
||||
#include "sequences_table.h"
|
||||
#include "audio/GameAudio.h"
|
||||
#include "ZAPDUtils/Utils/StringHelper.h"
|
||||
#include "texts_table.h"
|
||||
#include "port/importer/DialogFactory.h"
|
||||
#include <Fast3D/gfx_pc.h>
|
||||
#include <Fast3D/gfx_rendering_api.h>
|
||||
|
||||
extern "C" {
|
||||
#include "audio/external.h"
|
||||
#include "audio/internal.h"
|
||||
#include "game/ingame_menu.h"
|
||||
}
|
||||
|
||||
GameEngine* GameEngine::Instance;
|
||||
@@ -41,10 +44,11 @@ GameEngine::GameEngine(){
|
||||
this->context = LUS::Context::CreateInstance("Ghostship", "sm64", "ghostship.cfg.json", OTRFiles, {}, 3);
|
||||
this->context->GetWindow()->SetTargetFps(30);
|
||||
this->context->GetWindow()->SetMaximumFrameLatency(1);
|
||||
this->context->GetResourceManager()->GetResourceLoader()->RegisterResourceFactory(LUS::ResourceType::Anim, "Animation", std::make_shared<CubeOS::AnimationFactory>());
|
||||
this->context->GetResourceManager()->GetResourceLoader()->RegisterResourceFactory(LUS::ResourceType::SAnim, "Animation", std::make_shared<CubeOS::AnimationFactory>());
|
||||
this->context->GetResourceManager()->GetResourceLoader()->RegisterResourceFactory(LUS::ResourceType::Bank, "Bank", std::make_shared<CubeOS::AudioBankFactory>());
|
||||
this->context->GetResourceManager()->GetResourceLoader()->RegisterResourceFactory(LUS::ResourceType::Sample, "Sample", std::make_shared<CubeOS::AudioSampleFactory>());
|
||||
this->context->GetResourceManager()->GetResourceLoader()->RegisterResourceFactory(LUS::ResourceType::Sequence, "Sequence", std::make_shared<CubeOS::AudioSequenceFactory>());
|
||||
this->context->GetResourceManager()->GetResourceLoader()->RegisterResourceFactory(LUS::ResourceType::SDialog, "Dialog", std::make_shared<CubeOS::DialogFactory>());
|
||||
GameEngine::AudioInit();
|
||||
uint32_t version = LUS::Context::GetInstance()->GetResourceManager()->GetArchive()->GetGameVersions()[0];
|
||||
}
|
||||
@@ -214,4 +218,17 @@ extern "C" void GameEngine_UnloadSequence(uint8_t seqId) {
|
||||
|
||||
extern "C" uint32_t GameEngine_GetGameVersion() {
|
||||
return LUS::Context::GetInstance()->GetResourceManager()->GetArchive()->GetGameVersions()[0];
|
||||
}
|
||||
|
||||
extern "C" uint8_t* GameEngine_LoadActName(uint32_t actId){
|
||||
return (uint8_t*) ResourceGetDataByName(StringHelper::Sprintf(gActRoot, actId).c_str());
|
||||
}
|
||||
|
||||
extern "C" uint8_t* GameEngine_LoadLevelName(uint32_t courseId){
|
||||
return (uint8_t*) ResourceGetDataByName(StringHelper::Sprintf(gCourseRoot, courseId).c_str());
|
||||
}
|
||||
|
||||
extern "C" DialogEntry* GameEngine_LoadDialog(uint32_t dialogId){
|
||||
auto dialog = (DialogEntry*) ResourceGetDataByName(StringHelper::Sprintf(gDialogRoot, dialogId).c_str());
|
||||
return dialog;
|
||||
}
|
||||
@@ -35,6 +35,7 @@ class GameEngine {
|
||||
void Destroy();
|
||||
};
|
||||
#else
|
||||
|
||||
uint32_t GameEngine_GetSampleRate();
|
||||
float GameEngine_GetAspectRatio();
|
||||
struct CtlEntry* GameEngine_LoadBank(uint8_t bankId);
|
||||
@@ -44,4 +45,7 @@ struct AudioSequenceData* GameEngine_LoadSequence(uint8_t seqId);
|
||||
uint8_t GameEngine_IsSequenceLoaded(uint8_t seqId);
|
||||
void GameEngine_UnloadSequence(uint8_t seqId);
|
||||
uint32_t GameEngine_GetGameVersion();
|
||||
uint8_t* GameEngine_LoadActName(uint32_t actId);
|
||||
uint8_t* GameEngine_LoadLevelName(uint32_t levelId);
|
||||
struct DialogEntry* GameEngine_LoadDialog(uint32_t dialogId);
|
||||
#endif
|
||||
@@ -15,7 +15,7 @@ u64 osClockRate = 62500000;
|
||||
|
||||
s8 gShowProfiler = FALSE;
|
||||
s8 gShowDebugText = FALSE;
|
||||
s8 gDebugLevelSelect = TRUE;
|
||||
s8 gDebugLevelSelect = FALSE;
|
||||
|
||||
OSIoMesg gDmaIoMesg;
|
||||
OSMesg gMainReceivedMesg;
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
#include "DialogFactory.h"
|
||||
#include "port/importer/types/Dialog.h"
|
||||
#include "spdlog/spdlog.h"
|
||||
|
||||
std::shared_ptr<LUS::IResource> CubeOS::DialogFactory::ReadResource(std::shared_ptr<LUS::ResourceInitData> initData, std::shared_ptr<LUS::BinaryReader> reader) {
|
||||
auto resource = std::make_shared<Dialog>(initData);
|
||||
std::shared_ptr<LUS::ResourceVersionFactory> factory = nullptr;
|
||||
|
||||
switch (resource->GetInitData()->ResourceVersion) {
|
||||
case 0:
|
||||
factory = std::make_shared<DialogFactoryV0>();
|
||||
break;
|
||||
}
|
||||
|
||||
if (factory == nullptr) {
|
||||
SPDLOG_ERROR("Failed to load Dialog with version {}", resource->GetInitData()->ResourceVersion);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
factory->ParseFileBinary(reader, resource);
|
||||
|
||||
return resource;
|
||||
}
|
||||
|
||||
void CubeOS::DialogFactoryV0::ParseFileBinary(std::shared_ptr<LUS::BinaryReader> reader, std::shared_ptr<LUS::IResource> resource) {
|
||||
std::shared_ptr<Dialog> dialog = std::static_pointer_cast<Dialog>(resource);
|
||||
|
||||
ResourceVersionFactory::ParseFileBinary(reader, dialog);
|
||||
|
||||
dialog->mData.unused = reader->ReadUInt32();
|
||||
dialog->mData.linesPerBox = reader->ReadInt8();
|
||||
dialog->mData.leftOffset = reader->ReadInt16();
|
||||
dialog->mData.width = reader->ReadInt16();
|
||||
|
||||
size_t textSize = reader->ReadUInt32();
|
||||
for(size_t i = 0; i < textSize; i++){
|
||||
dialog->mText.push_back(reader->ReadUByte());
|
||||
}
|
||||
|
||||
dialog->mData.str = dialog->mText.data();
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
#pragma once
|
||||
|
||||
#include "ResourceFactory.h"
|
||||
|
||||
namespace CubeOS{
|
||||
class DialogFactory : public LUS::ResourceFactory {
|
||||
public:
|
||||
std::shared_ptr<LUS::IResource>
|
||||
ReadResource(std::shared_ptr<LUS::ResourceInitData> initData, std::shared_ptr<LUS::BinaryReader> reader) override;
|
||||
};
|
||||
|
||||
class DialogFactoryV0 : public LUS::ResourceVersionFactory {
|
||||
public:
|
||||
void ParseFileBinary(std::shared_ptr<LUS::BinaryReader> reader, std::shared_ptr<LUS::IResource> resource) override;
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
#include "Dialog.h"
|
||||
|
||||
namespace CubeOS {
|
||||
DialogEntry* Dialog::GetPointer() {
|
||||
return &mData;
|
||||
}
|
||||
|
||||
size_t Dialog::GetPointerSize() {
|
||||
return sizeof(mData);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
#pragma once
|
||||
|
||||
#include <cstdint>
|
||||
#include <Resource.h>
|
||||
|
||||
struct DialogEntry {
|
||||
/*0x00*/ uint32_t unused;
|
||||
/*0x04*/ int8_t linesPerBox;
|
||||
/*0x06*/ int16_t leftOffset;
|
||||
/*0x08*/ int16_t width;
|
||||
/*0x0C*/ uint8_t *str;
|
||||
};
|
||||
|
||||
|
||||
namespace CubeOS {
|
||||
|
||||
class Dialog : public LUS::Resource<DialogEntry> {
|
||||
public:
|
||||
using Resource::Resource;
|
||||
|
||||
Dialog() : Resource(std::shared_ptr<LUS::ResourceInitData>()) {}
|
||||
|
||||
DialogEntry* GetPointer();
|
||||
size_t GetPointerSize();
|
||||
|
||||
DialogEntry mData;
|
||||
std::vector<uint8_t> mText;
|
||||
};
|
||||
}
|
||||
@@ -1,80 +0,0 @@
|
||||
COURSE_ACTS(COURSE_BOB, _(" 1 BOB-OMBS BOMBENBERG"),
|
||||
_("BESIEGE KÖNIG BOB-OMB!") , _("BESIEGE DEN SCHNELLEN KOOPA!") , _("FLIEGE ZUR SCHWEBENDEN INSEL!"),
|
||||
_("FINDE DIE 8 ROTEN MÜNZEN!") , _("DURCHFLIEGE ALLE MÜNZENRINGE!") , _("BEFREIE DEN KETTENHUND!"))
|
||||
|
||||
COURSE_ACTS(COURSE_WF, _(" 2 WUMMPS WUCHTWALL"),
|
||||
_("BESIEGE KÖNIG WUMMP!") , _("STEIGE AUF DIE BERGFESTUNG!") , _("FLIEG INS BLAUE!"),
|
||||
_("FINDE DIE 8 ROTEN MÜNZEN!") , _("WECKE DIE EULE!") , _("ZERSTÖRE DIE FELSWAND!"))
|
||||
|
||||
COURSE_ACTS(COURSE_JRB, _(" 3 PIRATENBUCHT PANIK"),
|
||||
_("TAUCHE IN DAS SCHIFFSWRACK!") , _("LOCKE DEN AAL KANO HERAUS!") , _("TAUCHE ZUR SCHATZHÖHLE!"),
|
||||
_("FINDE DIE 8 ROTEN MÜNZEN!") , _("FLIEGE ZU DEN STEINSÄULEN!") , _("LAUFE DURCH DEN STRUDEL!"))
|
||||
|
||||
COURSE_ACTS(COURSE_CCM, _(" 4 BIBBERBERG BOB"),
|
||||
_("RUTSCHE AUF DER EISBAHN!") , _("FINDE DAS PINGUINBABY!") , _("BESIEGE DEN SCHNELLEN PINGUIN!"),
|
||||
_("FINDE DIE 8 ROTEN MÜNZEN!") , _("BAUE EINEN SCHNEEMANN!") , _("DENKE AN DEN WANDSPRUNG!"))
|
||||
|
||||
COURSE_ACTS(COURSE_BBH, _(" 5 BIG BOOS BURG"),
|
||||
_("GEHE AUF GEISTERJAGD!") , _("BESUCHE BIG BOOS KARUSSEL!") , _("LÖSE DAS BÜCHEREI-RÄTSEL!"),
|
||||
_("FINDE DIE 8 ROTEN MÜNZEN!") , _("KLETTERE AUF BIG BOOS BALKON!") , _("FINDE DAS AUGE IM GEHEIMRAUM!"))
|
||||
|
||||
COURSE_ACTS(COURSE_HMC, _(" 6 GRÜNE GIFTGROTTE"),
|
||||
_("KLETTERE AUF NESSIS RÜCKEN!") , _("FINDE DIE 8 ROTEN MÜNZEN!") , _("LAUFE AUF DEM GRUND DES SEES!"),
|
||||
_("DURCHSUCHE DAS NEBELLABYRINTH!"), _("SUCHE IM NEBEL DEN NOTAUSGANG!"), _("ACHTE AUF ROLLENDE FELSEN!"))
|
||||
|
||||
COURSE_ACTS(COURSE_LLL, _(" 7 LAVA LAGUNE"),
|
||||
_("WERFE BIG BULLY IN DIE LAVA!") , _("WERFE DIE BULLIES IN DIE LAVA!"), _("FINDE DIE 8 ROTEN MÜNZEN!"),
|
||||
_("TANZE AUF DEM BAUMSTAMM!") , _("ERKUNDE DEN VULKAN!") , _("GEWINNE IM VULKAN AN HÖHE!"))
|
||||
|
||||
COURSE_ACTS(COURSE_SSL, _(" 8 WOBIWABA WÜSTE"),
|
||||
_("FOLGE DEM RIESENGEIER!") , _("BRINGE LICHT IN DIE PYRAMIDE!") , _("BEGEBE DICH IN DIE PYRAMIDE!"),
|
||||
_("LANDE AUF ALLEN VIER SÄULEN!") , _("FINDE DIE 8 ROTEN MÜNZEN!") , _("LÖSE DAS PYRAMIDENPUZZLE!"))
|
||||
|
||||
COURSE_ACTS(COURSE_DDD, _(" 9 WILDE WASSERWERFT"),
|
||||
_("ENTERE BOWSERS U-BOOT!") , _("ÖFFNE DIE TRUHEN!") , _("SPRINGE ZU DEN ROTEN MÜNZEN!"),
|
||||
_("SCHWIMME DURCH DIE RINGE!") , _("FOLGE DEM FISCH!") , _("VEREINE DIE MÜTZEN!"))
|
||||
|
||||
COURSE_ACTS(COURSE_SL, _("10 FROSTBEULEN FRUST"),
|
||||
_("ERKLIMME DEN KOPF!") , _("SPIELE MIT BAD BULLY!") , _("WAGE DICH INS EIS!"),
|
||||
_("GEHE ZUM EISSEE!") , _("FINDE DIE 8 ROTEN MÜNZEN!") , _("SCHAU IM IGLU NACH!"))
|
||||
|
||||
COURSE_ACTS(COURSE_WDW, _("11 ATLANTIS AQUARIA"),
|
||||
_("FOLGE DEN BLAUEN PFEILEN!") , _("SUCHE NACH DER SPITZE DER STADT!"), _("ERFORSCHE DIE HÖHEN UND TIEFEN!"),
|
||||
_("BEEILE DICH - EXPRESSAUFZUG!") , _("FINDE DIE 8 ROTEN MÜNZEN!") , _("BEACHTE DAS ZEITLIMIT!"))
|
||||
|
||||
COURSE_ACTS(COURSE_TTM, _("12 FLIEGENPILZ FIASKO"),
|
||||
_("ERKLIMME DEN BERG!") , _("ERKUNDE DEN AFFENKÄFIG!") , _("FINDE DIE 8 ROTEN MÜNZEN!"),
|
||||
_("ERFORSCHE DIE STEILWAND!") , _("HALTE AUSSCHAU AUF DER BRÜCKE!"), _("SUCHE DEN EINSAMEN PILZ!"))
|
||||
|
||||
COURSE_ACTS(COURSE_THI, _("13 GULLIVER GUMBA"),
|
||||
_("PFLÜCKE DIE SCHNAPP-PIRANHA!") , _("BEGIB DICH ZUR SPITZE DER INSEL!"), _("TRETE NOCH EINMAL GEGEN KOOPA AN!"),
|
||||
_("LÖSE DIE 5 ITTY BITTY-RÄTSEL!") , _("FINDE DIE 8 ROTEN MÜNZEN!") , _("DREHE WIGGLER IM KREIS!"))
|
||||
|
||||
COURSE_ACTS(COURSE_TTC, _("14 TICK TACK TRAUMA"),
|
||||
_("ROLLE DEN KÄFIG!") , _("ACHTE AUF DAS PENDEL!") , _("LASS DIR DEN WEG ZEIGEN!"),
|
||||
_("STAMPFE MÄCHTIG AUF!") , _("SPRINGE AUF DEN SCHWEBEBALKEN!"), _("FINDE DIE 8 ROTEN MÜNZEN!"))
|
||||
|
||||
COURSE_ACTS(COURSE_RR, _("15 REGENBOGEN RASEREI"),
|
||||
_("REISE AUF DEN REGENBÖGEN!") , _("SUCHE DAS HAUS AM HIMMEL!") , _("FINDE DIE 8 ROTEN MÜNZEN!"),
|
||||
_("LASS DICH VON DER BRISE TRAGEN!"), _("ÜBERWINDE DIE MACHT DER DREIECKE!"), _("SCHAU DIR DEN REGENBOGEN AN!"))
|
||||
|
||||
SECRET_STAR(COURSE_BITDW, _(" BOWSERS SCHATTENWELT"))
|
||||
SECRET_STAR(COURSE_BITFS, _(" BOWSERS LAVASEE"))
|
||||
SECRET_STAR(COURSE_BITS, _(" BOWSERS LUFTSCHLOSS"))
|
||||
SECRET_STAR(COURSE_PSS, _(" TOADSTOOLS RUTSCHBAHN"))
|
||||
SECRET_STAR(COURSE_COTMC, _(" GRÜNER SCHALTERPALAST"))
|
||||
SECRET_STAR(COURSE_TOTWC, _(" ROTER SCHALTERPALAST"))
|
||||
SECRET_STAR(COURSE_VCUTM, _(" BLAUER SCHALTERPALAST"))
|
||||
SECRET_STAR(COURSE_WMOTR, _(" REGENBOGEN FEUERWERK"))
|
||||
SECRET_STAR(COURSE_SA, _(" VERSTECKTES AQUARIUM"))
|
||||
SECRET_STAR(COURSE_CAKE_END, _(""))
|
||||
|
||||
CASTLE_SECRET_STARS(_(" GEHEIME STERNE"))
|
||||
|
||||
EXTRA_TEXT(0, _("EIN GEHEIMER STERN DES SCHLOSSES!"))
|
||||
EXTRA_TEXT(1, _(""))
|
||||
EXTRA_TEXT(2, _(""))
|
||||
EXTRA_TEXT(3, _(""))
|
||||
EXTRA_TEXT(4, _(""))
|
||||
EXTRA_TEXT(5, _(""))
|
||||
EXTRA_TEXT(6, _(""))
|
||||
-2058
File diff suppressed because it is too large
Load Diff
@@ -1,30 +0,0 @@
|
||||
#define COURSE_ACTS(id, name, a,b,c,d,e,f) \
|
||||
static const u8 GLUE2(COURSE_TABLE, _ ## id)[] = { name };
|
||||
|
||||
#define SECRET_STAR(id, name) \
|
||||
static const u8 GLUE2(COURSE_TABLE, _ ## id)[] = { name };
|
||||
|
||||
#define CASTLE_SECRET_STARS(str) \
|
||||
static const u8 GLUE2(COURSE_TABLE, _castle_secret_stars)[] = { str };
|
||||
|
||||
#define EXTRA_TEXT(id, str)
|
||||
|
||||
#include "courses.h"
|
||||
|
||||
#undef COURSE_ACTS
|
||||
#undef SECRET_STAR
|
||||
#undef CASTLE_SECRET_STARS
|
||||
|
||||
#define COURSE_ACTS(id, name, a,b,c,d,e,f) GLUE2(COURSE_TABLE, _ ## id),
|
||||
#define SECRET_STAR(id, name) GLUE2(COURSE_TABLE, _ ## id),
|
||||
#define CASTLE_SECRET_STARS(str) GLUE2(COURSE_TABLE, _castle_secret_stars),
|
||||
|
||||
const u8 *const COURSE_TABLE[] = {
|
||||
#include "courses.h"
|
||||
NULL
|
||||
};
|
||||
|
||||
#undef COURSE_ACTS
|
||||
#undef SECRET_STAR
|
||||
#undef CASTLE_SECRET_STARS
|
||||
|
||||
@@ -1,103 +0,0 @@
|
||||
// == debug table ==
|
||||
|
||||
#ifndef VERSION_EU
|
||||
|
||||
// (this wasn't translated for US, and was removed in EU)
|
||||
|
||||
static const u8 Debug0[] = {
|
||||
_("STAGE SELECT\n"
|
||||
" つづける?\n"
|
||||
" 1 マウンテン\n"
|
||||
" 2 ファイアーバブル\n"
|
||||
" 3 スノースライダー\n"
|
||||
" 4 ウォーターランド\n"
|
||||
" クッパ1ごう\n"
|
||||
" もどる")
|
||||
};
|
||||
|
||||
static const u8 Debug1[] = {
|
||||
_("PAUSE \n"
|
||||
" つづける?\n"
|
||||
" やめる ?")
|
||||
};
|
||||
|
||||
static const struct DialogEntry debug_text_entry_0 = {
|
||||
1, 8, 30, 200, Debug0
|
||||
};
|
||||
|
||||
static const struct DialogEntry debug_text_entry_1 = {
|
||||
1, 3, 100, 150, Debug1
|
||||
};
|
||||
|
||||
const struct DialogEntry *const seg2_debug_text_table[] = {
|
||||
&debug_text_entry_0, &debug_text_entry_1, NULL,
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
// == dialog ==
|
||||
// (defines en_dialog_table etc.)
|
||||
|
||||
#define DEFINE_DIALOG(id, _1, _2, _3, _4, str) \
|
||||
static const u8 dialog_text_ ## id[] = { str };
|
||||
|
||||
#include "dialogs.h"
|
||||
|
||||
#undef DEFINE_DIALOG
|
||||
#define DEFINE_DIALOG(id, unused, linesPerBox, leftOffset, width, _) \
|
||||
static const struct DialogEntry dialog_entry_ ## id = { \
|
||||
unused, linesPerBox, leftOffset, width, dialog_text_ ## id \
|
||||
};
|
||||
|
||||
#include "dialogs.h"
|
||||
|
||||
#undef DEFINE_DIALOG
|
||||
#define DEFINE_DIALOG(id, _1, _2, _3, _4, _5) &dialog_entry_ ## id,
|
||||
|
||||
const struct DialogEntry *const seg2_dialog_table[] = {
|
||||
#include "dialogs.h"
|
||||
NULL
|
||||
};
|
||||
|
||||
|
||||
// == courses ==
|
||||
// (defines en_course_name_table etc.)
|
||||
// The game duplicates this in levels/menu/leveldata.c in EU, so we split
|
||||
// it out into a separate include file.
|
||||
|
||||
#define COURSE_TABLE seg2_course_name_table
|
||||
#include "define_courses.inc.c"
|
||||
|
||||
// == acts ==
|
||||
// (defines en_act_name_table etc.)
|
||||
|
||||
#define COURSE_ACTS(id, name, a,b,c,d,e,f) \
|
||||
static const u8 act_name_ ## id ## _1[] = { a }; \
|
||||
static const u8 act_name_ ## id ## _2[] = { b }; \
|
||||
static const u8 act_name_ ## id ## _3[] = { c }; \
|
||||
static const u8 act_name_ ## id ## _4[] = { d }; \
|
||||
static const u8 act_name_ ## id ## _5[] = { e }; \
|
||||
static const u8 act_name_ ## id ## _6[] = { f };
|
||||
|
||||
#define SECRET_STAR(id, name)
|
||||
#define CASTLE_SECRET_STARS(str)
|
||||
|
||||
#undef EXTRA_TEXT
|
||||
#define EXTRA_TEXT(id, str) \
|
||||
static const u8 extra_text_ ## id[] = { str };
|
||||
|
||||
#include "courses.h"
|
||||
|
||||
#undef COURSE_ACTS
|
||||
#undef EXTRA_TEXT
|
||||
|
||||
#define COURSE_ACTS(id, name, a,b,c,d,e,f) \
|
||||
act_name_ ## id ## _1, act_name_ ## id ## _2, act_name_ ## id ## _3, \
|
||||
act_name_ ## id ## _4, act_name_ ## id ## _5, act_name_ ## id ## _6,
|
||||
#define EXTRA_TEXT(id, str) extra_text_ ## id,
|
||||
|
||||
const u8 *const seg2_act_name_table[] = {
|
||||
#include "courses.h"
|
||||
NULL
|
||||
};
|
||||
@@ -1,80 +0,0 @@
|
||||
COURSE_ACTS(COURSE_BOB, _(" 1 BATAILLE DE BOB-OMB"),
|
||||
_("ROI BOB-OMB DU SOMMET") , _("COURSE CONTRE KOOPA-RAPIDO") , _("CANON VERS L'ILE PERCHEE"),
|
||||
_("LES 8 PIECES ROUGES") , _("VOL DU MARIO AILE") , _("DERRIERE LA CAGE DE CHOMP"))
|
||||
|
||||
COURSE_ACTS(COURSE_WF, _(" 2 FORTERESSE DE WHOMP"),
|
||||
_("DESTRUCTION DU GROS WHOMP") , _("EN HAUT DE LA FORTERESSE") , _("CANON VERS LES CIEUX"),
|
||||
_("PIECES ROUGES DANS LES AIRS") , _("TOMBEZ DANS LA CAGE PERCHEE") , _("CANON VERS UN MUR..."))
|
||||
|
||||
COURSE_ACTS(COURSE_JRB, _(" 3 BAIE DES PIRATES"),
|
||||
_("PILLEZ LE BATEAU COULE") , _("L'ANGUILLE VEUT FAIRE JOUJOU?") , _("TRESOR DANS LA CAVERNE"),
|
||||
_("PIECES ROUGES A BORD!") , _("CANON VERS LES PILIERS") , _("DANS LE GEYSER"))
|
||||
|
||||
COURSE_ACTS(COURSE_CCM, _(" 4 MONTAGNE GLA-GLA"),
|
||||
_("GLISSADE SUR GLACE") , _("PETIT PINGOUIN PERDU") , _("COURSE DU PINGOUIN"),
|
||||
_("8 PIECES ROUGES GIVREES") , _("BONHOMME DE NEIGE SANS TETE") , _("MURS POUR REBONDIR"))
|
||||
|
||||
COURSE_ACTS(COURSE_BBH, _(" 5 MANOIR DE BIG BOO"),
|
||||
_("CHERCHEZ LE BIG BOO") , _("MANEGE DES BOOS PAS BEAUX") , _("SECRET DES LIVRES HANTES"),
|
||||
_("TROUVEZ LES 8 PIECES ROUGES") , _("BALCON DE BIG BOO") , _("UN OEIL SUR LES SALLES SECRETES"))
|
||||
|
||||
COURSE_ACTS(COURSE_HMC, _(" 6 CAVERNE BRUMEUSE"),
|
||||
_("GROS BIBI DE LA CAVERNE") , _("CHARIOT POUR PIECES ROUGES") , _("COURSE DE METAL MARIO"),
|
||||
_("DANS LE LABYRINTHE TOXIQUE") , _("AU-DESSUS DES GAZ...") , _("ATTENTION AUX BOULETS"))
|
||||
|
||||
COURSE_ACTS(COURSE_LLL, _(" 7 LAVES FATALES"),
|
||||
_("CRAMEZ LE GROS MOCHE") , _("POUSSEZ LES PETITS MOCHES") , _("PUZZLE DE 8 PIECES ROUGES"),
|
||||
_("BALADE SUR LA BUCHE") , _("CHAUD DANS LE VOLCAN") , _("ASCENCEUR DANS LE VOLCAN"))
|
||||
|
||||
COURSE_ACTS(COURSE_SSL, _(" 8 SABLES TROP MOUVANTS"),
|
||||
_("DANS LES GRIFFES DU VAUTOUR") , _("AU SOMMET DE LA PYRAMIDE") , _("DANS L'ANCIENNE PYRAMIDE"),
|
||||
_("LES QUATRE PILIERS DE LA FOI") , _("VOL VERS LES PIECES ROUGES") , _("ENIGME DE LA PYRAMIDE"))
|
||||
|
||||
COURSE_ACTS(COURSE_DDD, _(" 9 AFFREUX BASSIN"),
|
||||
_("SOUS-MARIN DE BOWSER") , _("COFFRES DANS LE COURANT") , _("PERCHES POUR PIECES ROUGES"),
|
||||
_("DANS LE GEYSER") , _("RECOMPENSE DE LA RAIE") , _("ASSOCIATION DE CASQUETTES..."))
|
||||
|
||||
COURSE_ACTS(COURSE_SL, _("10 CHEZ LE ROI DES NEIGES"),
|
||||
_("GROSSE TETE DU BONHOMME") , _("COMBATTEZ LE GROS MOCHE GIVRE") , _("DANS LE GLAÇON"),
|
||||
_("VRILLE DEPUIS LE LAC") , _("CARAPACE POUR PIECES ROUGES") , _("DANS L'IGLOO"))
|
||||
|
||||
COURSE_ACTS(COURSE_WDW, _("11 MONDE TREMPE-SECHE"),
|
||||
_("MINI PLATES-FORMES FLECHEES!") , _("SUR LES TOITS") , _("ENIGME DES CHIFFRES CACHES"),
|
||||
_("ASCENSEUR EXPRESS!") , _("PIECES ROUGES: VILLE ENGLOUTIE"), _("COURSE EN VILLE"))
|
||||
|
||||
COURSE_ACTS(COURSE_TTM, _("12 TROP HAUTE MONTAGNE"),
|
||||
_("ESCALADEZ LA MONTAGNE") , _("MYSTERE DE LA CAGE DU SINGE") , _("PIECES ROUGES SUR CHAMPIGNON"),
|
||||
_("PAROI MYSTERIEUSE") , _("PANORAMA DU PONT") , _("CANON VERS LE CHAMPIGNON"))
|
||||
|
||||
COURSE_ACTS(COURSE_THI, _("13 ILE GRANDS-PETITS"),
|
||||
_("DETRUISEZ LES MAXI-CARNIVORES") , _("AU SOMMET DE L'ILE DES GEANTS") , _("KOOPA-RAPIDO, LA VENGEANCE"),
|
||||
_("CINQ TOUT PETITS SECRETS") , _("LES PIECES ROUGES DU GIGOTEUR") , _("ENERVEZ LE GIGOTEUR"))
|
||||
|
||||
COURSE_ACTS(COURSE_TTC, _("14 HORLOGE TIC-TAC"),
|
||||
_("ROULEMENTS DANS LA CAGE") , _("LES TROUS ET LE PENDULE") , _("CHEVAUCHEZ L'AIGUILLE"),
|
||||
_("L'ECRABOUILLEUR") , _("SAUTS SYNCHRONISES") , _("L'HEURE PILE POUR LES PIECES"))
|
||||
|
||||
COURSE_ACTS(COURSE_RR, _("15 COURSE ARC-EN-CIEL"),
|
||||
_("CROISIERE SUR L'ARC-EN-CIEL") , _("MANOIR DANS LES AIRS") , _("LABYRINTHE DES PIECES ROUGES"),
|
||||
_("BALANÇOIRE CELESTE") , _("VICIEUX TRIANGLES!") , _("L'ARC-EN-CIEL ET AU-DELA"))
|
||||
|
||||
SECRET_STAR(COURSE_BITDW, _(" BOWSER DES TENEBRES"))
|
||||
SECRET_STAR(COURSE_BITFS, _(" BOWSER DES LAVES"))
|
||||
SECRET_STAR(COURSE_BITS, _(" BOWSER DES CIEUX"))
|
||||
SECRET_STAR(COURSE_PSS, _(" GLISSADE DE LA PRINCESSE"))
|
||||
SECRET_STAR(COURSE_COTMC, _(" MINE DES CASQUETTES-METAL"))
|
||||
SECRET_STAR(COURSE_TOTWC, _(" INTERRUPTEUR DE LA TOUR AILEE"))
|
||||
SECRET_STAR(COURSE_VCUTM, _(" INVISIBLE SOUS LES DOUVES"))
|
||||
SECRET_STAR(COURSE_WMOTR, _(" AU-DELA DE L'ARC-EN-CIEL"))
|
||||
SECRET_STAR(COURSE_SA, _(" AQUARIUM SECRET"))
|
||||
SECRET_STAR(COURSE_CAKE_END, _(""))
|
||||
|
||||
CASTLE_SECRET_STARS(_(" ETOILES SECRETES"))
|
||||
|
||||
EXTRA_TEXT(0, _("UNE ETOILE SECRETE DU CHATEAU"))
|
||||
EXTRA_TEXT(1, _(""))
|
||||
EXTRA_TEXT(2, _(""))
|
||||
EXTRA_TEXT(3, _(""))
|
||||
EXTRA_TEXT(4, _(""))
|
||||
EXTRA_TEXT(5, _(""))
|
||||
EXTRA_TEXT(6, _(""))
|
||||
-2297
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user