diff --git a/assets/test_chambers/test_chamber_00/test_chamber_00.yaml b/assets/test_chambers/test_chamber_00/test_chamber_00.yaml index cef6665..f170fdd 100644 --- a/assets/test_chambers/test_chamber_00/test_chamber_00.yaml +++ b/assets/test_chambers/test_chamber_00/test_chamber_00.yaml @@ -2,7 +2,7 @@ operators: [] cutscenes: INTRO: - - q_sound AMBIENCE_BASE CH_AMBIENT SubtitleKeyNone 0.55 + - q_sound AMBIENCE_BASE CH_AMBIENT StringIdNone 0.55 - play_animation player player_intro - play_animation glass_cover_0 glass_cover_0_open - play_animation glass_cover_1 glass_cover_1_open diff --git a/assets/test_chambers/test_chamber_01/test_chamber_01.yaml b/assets/test_chambers/test_chamber_01/test_chamber_01.yaml index e4c45bd..1a8399c 100644 --- a/assets/test_chambers/test_chamber_01/test_chamber_01.yaml +++ b/assets/test_chambers/test_chamber_01/test_chamber_01.yaml @@ -2,7 +2,7 @@ operators: [] cutscenes: START: - - q_sound AMBIENCE_BASE CH_AMBIENT SubtitleKeyNone 0.55 + - q_sound AMBIENCE_BASE CH_AMBIENT StringIdNone 0.55 - delay 1 - start_cutscene portal_loop - set_signal FIRST_ELEVATOR @@ -11,7 +11,7 @@ cutscenes: - q_sound SOUNDS_01_PART1_ENTRY_1 CH_GLADOS PORTAL_01_PART1_ENTRY_1 - q_sound SOUNDS_01_PART1_ENTRY_2 CH_GLADOS PORTAL_01_PART1_ENTRY_2 - wait_for_channel CH_GLADOS - - q_sound PORTAL_TASTE_OF_BLOOD CH_MUSIC SubtitleKeyNone + - q_sound PORTAL_TASTE_OF_BLOOD CH_MUSIC - set_signal room_0_entrance GET_GUN: - close_portal 1 diff --git a/assets/test_chambers/test_chamber_02/test_chamber_02.yaml b/assets/test_chambers/test_chamber_02/test_chamber_02.yaml index e0a8bc6..bded4b6 100644 --- a/assets/test_chambers/test_chamber_02/test_chamber_02.yaml +++ b/assets/test_chambers/test_chamber_02/test_chamber_02.yaml @@ -1,6 +1,6 @@ cutscenes: START: - - q_sound AMBIENCE_BASE CH_AMBIENT SubtitleKeyNone 0.55 + - q_sound AMBIENCE_BASE CH_AMBIENT StringIdNone 0.55 INTRO: - activate_signage 4 - q_sound SOUNDS_02_PART1_ENTRY_1 CH_GLADOS PORTAL_02_PART1_ENTRY_1 diff --git a/assets/test_chambers/test_chamber_03/test_chamber_03.yaml b/assets/test_chambers/test_chamber_03/test_chamber_03.yaml index c738adc..8cde2c3 100644 --- a/assets/test_chambers/test_chamber_03/test_chamber_03.yaml +++ b/assets/test_chambers/test_chamber_03/test_chamber_03.yaml @@ -2,7 +2,7 @@ operators: - not_on_piston = not on_piston cutscenes: START_BALL: - - q_sound AMBIENCE_BASE CH_AMBIENT SubtitleKeyNone 0.55 + - q_sound AMBIENCE_BASE CH_AMBIENT StringIdNone 0.55 - set_signal launch_ball - wait_for_signal exit_activate - label piston_loop diff --git a/assets/test_chambers/test_chamber_04/test_chamber_04.yaml b/assets/test_chambers/test_chamber_04/test_chamber_04.yaml index 290aa84..93acbd9 100644 --- a/assets/test_chambers/test_chamber_04/test_chamber_04.yaml +++ b/assets/test_chambers/test_chamber_04/test_chamber_04.yaml @@ -1,11 +1,11 @@ cutscenes: START: - - q_sound AMBIENCE_BASE CH_AMBIENT SubtitleKeyNone 0.55 + - q_sound AMBIENCE_BASE CH_AMBIENT StringIdNone 0.55 INTRO_CUTSCENE: - activate_signage 8 - q_sound SOUNDS_04_PART1_ENTRY_1 CH_GLADOS PORTAL_04_PART1_ENTRY_1 - wait_for_channel CH_GLADOS - - q_sound PORTAL_PROCEDURAL_JIGGLE_BONE CH_MUSIC SubtitleKeyNone + - q_sound PORTAL_PROCEDURAL_JIGGLE_BONE CH_MUSIC SUCCESS: - q_sound SOUNDS_04_PART1_SUCCESS_1 CH_GLADOS PORTAL_04_PART1_SUCCESS_1 DROWN_PLAYER: diff --git a/assets/test_chambers/test_chamber_05/test_chamber_05.yaml b/assets/test_chambers/test_chamber_05/test_chamber_05.yaml index 86ba11d..114ae03 100644 --- a/assets/test_chambers/test_chamber_05/test_chamber_05.yaml +++ b/assets/test_chambers/test_chamber_05/test_chamber_05.yaml @@ -2,7 +2,7 @@ operators: [] cutscenes: START: - - q_sound AMBIENCE_BASE CH_AMBIENT SubtitleKeyNone 0.55 + - q_sound AMBIENCE_BASE CH_AMBIENT StringIdNone 0.55 INTRO_CUTSCENE: - activate_signage 9 - set_signal cube_dropper diff --git a/assets/test_chambers/test_chamber_06/test_chamber_06.yaml b/assets/test_chambers/test_chamber_06/test_chamber_06.yaml index 039a8bf..016ddb8 100644 --- a/assets/test_chambers/test_chamber_06/test_chamber_06.yaml +++ b/assets/test_chambers/test_chamber_06/test_chamber_06.yaml @@ -2,7 +2,7 @@ operators: [] cutscenes: OPEN_FIRST_DOOR: - - q_sound AMBIENCE_BASE CH_AMBIENT SubtitleKeyNone 0.55 + - q_sound AMBIENCE_BASE CH_AMBIENT StringIdNone 0.55 - set_signal room_0_exit FIRST_ROOM: - activate_signage 10 @@ -12,7 +12,7 @@ cutscenes: - delay 2 - open_portal first_room_portal 0 - wait_for_channel CH_GLADOS - - q_sound PORTAL_SELF_ESTEEM_FUND CH_MUSIC SubtitleKeyNone + - q_sound PORTAL_SELF_ESTEEM_FUND CH_MUSIC SECOND_ROOM: - close_portal 0 - close_portal 1 diff --git a/assets/test_chambers/test_chamber_07/test_chamber_07.yaml b/assets/test_chambers/test_chamber_07/test_chamber_07.yaml index a853aa7..e4817d0 100644 --- a/assets/test_chambers/test_chamber_07/test_chamber_07.yaml +++ b/assets/test_chambers/test_chamber_07/test_chamber_07.yaml @@ -1,6 +1,6 @@ cutscenes: START: - - q_sound AMBIENCE_BASE CH_AMBIENT SubtitleKeyNone 0.55 + - q_sound AMBIENCE_BASE CH_AMBIENT StringIdNone 0.55 INTRO: - delay 1 - start_cutscene portal_loop @@ -55,7 +55,7 @@ cutscenes: - q_sound 07_PART1_GET_DEVICE_COMPONENT_2 CH_GLADOS PORTAL_07_PART1_GET_DEVICE_COMPONENT_2 - q_sound 07_PART1_GET_DEVICE_COMPONENT_3 CH_GLADOS PORTAL_07_PART1_GET_DEVICE_COMPONENT_3 - wait_for_channel CH_GLADOS - - q_sound PORTAL_SUBJECT_NAME_HERE CH_MUSIC SubtitleKeyNone + - q_sound PORTAL_SUBJECT_NAME_HERE CH_MUSIC - wait_for_signal trapped - q_sound 07_PART1_TRAPPED_1 CH_GLADOS PORTAL_07_PART1_TRAPPED_1 - q_sound 07_PART1_TRAPPED_2 CH_GLADOS PORTAL_07_PART1_TRAPPED_2 diff --git a/assets/test_chambers/test_chamber_08/test_chamber_08.yaml b/assets/test_chambers/test_chamber_08/test_chamber_08.yaml index cd99d79..c16493d 100644 --- a/assets/test_chambers/test_chamber_08/test_chamber_08.yaml +++ b/assets/test_chambers/test_chamber_08/test_chamber_08.yaml @@ -1,6 +1,6 @@ cutscenes: START: - - q_sound AMBIENCE_BASE CH_AMBIENT SubtitleKeyNone 0.55 + - q_sound AMBIENCE_BASE CH_AMBIENT StringIdNone 0.55 - set_signal launch_ball - start_cutscene CHECK_TRAPPED - wait_for_signal move_platform diff --git a/assets/test_chambers/test_chamber_09/test_chamber_09.yaml b/assets/test_chambers/test_chamber_09/test_chamber_09.yaml index 3750268..d1570fc 100644 --- a/assets/test_chambers/test_chamber_09/test_chamber_09.yaml +++ b/assets/test_chambers/test_chamber_09/test_chamber_09.yaml @@ -1,6 +1,6 @@ cutscenes: START: - - q_sound AMBIENCE_BASE CH_AMBIENT SubtitleKeyNone 0.55 + - q_sound AMBIENCE_BASE CH_AMBIENT StringIdNone 0.55 - start_cutscene CHECK_STAIRS - start_cutscene CHECK_CUBE_ON_PISTON - start_cutscene CHECK_CUBE_OFF_BUTTON diff --git a/assets/test_chambers/test_chamber_10/test_chamber_10.yaml b/assets/test_chambers/test_chamber_10/test_chamber_10.yaml index 62586b0..a073d1c 100644 --- a/assets/test_chambers/test_chamber_10/test_chamber_10.yaml +++ b/assets/test_chambers/test_chamber_10/test_chamber_10.yaml @@ -1,6 +1,6 @@ cutscenes: INTRO: - - q_sound AMBIENCE_BASE CH_AMBIENT SubtitleKeyNone 0.55 + - q_sound AMBIENCE_BASE CH_AMBIENT StringIdNone 0.55 SIGNAGE: - activate_signage 15 - q_sound 10_PART1_ENTRY_1 CH_GLADOS PORTAL_10_PART1_ENTRY_1 diff --git a/assets/translations/CMakeLists.txt b/assets/translations/CMakeLists.txt index ab0f58a..260abb8 100644 --- a/assets/translations/CMakeLists.txt +++ b/assets/translations/CMakeLists.txt @@ -1,7 +1,7 @@ -set(BUILD_AUDIO_DIR "${PROJECT_BINARY_DIR}/src/audio") +set(BUILD_STRINGS_DIR "${PROJECT_BINARY_DIR}/src/strings") -set(FONT_DEF "${PROJECT_SOURCE_DIR}/assets/fonts/dejavu_sans/dejavu_sans_all.json") -set(GENERATE_STRINGS "${PROJECT_SOURCE_DIR}/tools/text/subtitle_generate.py") +set(FONT_DEF "${PROJECT_SOURCE_DIR}/assets/fonts/dejavu_sans/dejavu_sans_all.json") +set(GENERATE_STRINGS "${PROJECT_SOURCE_DIR}/tools/text/generate_strings.py") ################## ## Translations ## @@ -9,11 +9,11 @@ set(GENERATE_STRINGS "${PROJECT_SOURCE_DIR}/tools/text/subtitle_generate.py") set(STRING_INPUT_FILES "") -set(SUBTITLES_H "${BUILD_AUDIO_DIR}/subtitles.h") -set(SUBTITLES_C "${BUILD_AUDIO_DIR}/subtitles.c") +set(STRINGS_H "${BUILD_STRINGS_DIR}/strings.h") +set(STRINGS_C "${BUILD_STRINGS_DIR}/strings.c") set(STRING_LOOKUP_TABLE_FILES - ${SUBTITLES_H} - ${SUBTITLES_C} + ${STRINGS_H} + ${STRINGS_C} ) set(STRING_DATA_TABLE_FILES "") @@ -27,7 +27,7 @@ foreach(LANGUAGE ${TEXT_LANGUAGES_LIST}) ) list(APPEND STRING_DATA_TABLE_FILES - "${BUILD_AUDIO_DIR}/subtitles_${LANGUAGE}.c" + "${BUILD_STRINGS_DIR}/strings_${LANGUAGE}.c" ) endforeach() @@ -42,7 +42,7 @@ add_custom_command( --languages ${TEXT_LANGUAGES} --game-root-dir ${VPK_DIR} --extra-translations-dir ${CMAKE_CURRENT_SOURCE_DIR} - --output-dir ${BUILD_AUDIO_DIR} + --output-dir ${BUILD_STRINGS_DIR} --check-font ${FONT_DEF} COMMENT "Generating strings" @@ -69,7 +69,7 @@ target_sources(string_lookup_tables INTERFACE # Add command for generating strings linker script fragment -set(STRING_LINKER_SCRIPT "${LINKER_SCRIPT_DIR}/subtitles.ld") +set(STRING_LINKER_SCRIPT "${LINKER_SCRIPT_DIR}/strings.ld") add_custom_command( DEPENDS ${GEN_SEGMENT_LD} diff --git a/documentation/levels/cutscenes/q_sound.md b/documentation/levels/cutscenes/q_sound.md index 6052131..aeb1c91 100644 --- a/documentation/levels/cutscenes/q_sound.md +++ b/documentation/levels/cutscenes/q_sound.md @@ -10,12 +10,12 @@ q_sound SOUND_ID CHANNEL_NAME SUBTITLE_ID [VOLUME] ## Arguments -| Name | Description | -| ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ | -| `SOUND_ID` | The ID of the sound to queue. `SOUNDS_` prefix can be omitted. | -| `CHANNEL_NAME` | The name of the channel to queue the sound on | -| `SUBTITLE_ID` | The ID of the subtitle to display when playing the sound with subtitles enabled, or `SubtitleKeyNone`. Only shown for `CH_GLADOS` channel. | -| `VOLUME` (optional) | The volume multiplier for playback. 0 is muted and 1 is normal volume. Defaults to 1. | +| Name | Description | +| ------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- | +| `SOUND_ID` | The ID of the sound to queue. `SOUNDS_` prefix can be omitted. | +| `CHANNEL_NAME` | The name of the channel to queue the sound on | +| `SUBTITLE_ID` | The ID of the string to display as a subtitle when playing the sound with subtitles enabled, or `StringIdNone`. Only shown for `CH_GLADOS` channel. | +| `VOLUME` (optional) | The volume multiplier for playback. 0 is muted and 1 is normal volume. Defaults to 1. | ## Notes diff --git a/linker/portal.ld b/linker/portal.ld index 2480420..59c9b07 100644 --- a/linker/portal.ld +++ b/linker/portal.ld @@ -93,7 +93,7 @@ SECTIONS #include "levels.ld" #include "dynamic_models.ld" #include "anims.ld" -#include "subtitles.ld" +#include "strings.ld" /* Discard standard sections not mentioned above, keep debug info */ /DISCARD/ : diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 48d0891..f704ad3 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -89,7 +89,6 @@ target_sources(engine INTERFACE menu/savefile_list.c menu/tabs.c menu/text_manipulation.c - menu/translations.c menu/video_options.c physics/collision.c physics/collision_box.c @@ -152,6 +151,7 @@ target_sources(engine INTERFACE scene/trigger_listener.c sk64/skeletool_animator.c sk64/skeletool_armature.c + strings/translations.c util/assert.c util/dynamic_asset_loader.c util/memory.c @@ -210,14 +210,10 @@ add_custom_target(version_header # Make sure version header is always up to date add_dependencies(engine version_header) -# TODO: remove when makefile is no longer in use -target_compile_definitions(engine INTERFACE CMAKE) - ########################### ## Library-specific code ## ########################### -# TODO: make this conditional target_sources(engine INTERFACE system/libultra/controller_libultra.c system/libultra/time_libultra.c diff --git a/src/font/font.h b/src/font/font.h index dbd73ed..38cfdb2 100644 --- a/src/font/font.h +++ b/src/font/font.h @@ -2,9 +2,11 @@ #define __FONT_FONT_H__ #include -#include "../math/vector2s16.h" -#include "../graphics/color.h" -#include "../build/src/audio/subtitles.h" + +#include "graphics/color.h" +#include "math/vector2s16.h" + +#include "../build/src/strings/strings.h" struct FontKerning { char amount; @@ -47,7 +49,7 @@ struct SymbolLocation { char imageIndex; }; -#define FONT_RENDERER_MAX_SYBMOLS MAX_SUBTITLE_LENGTH +#define FONT_RENDERER_MAX_SYBMOLS MAX_STRING_LENGTH struct FontRenderer { struct SymbolLocation symbols[FONT_RENDERER_MAX_SYBMOLS]; diff --git a/src/levels/cutscene_runner.c b/src/levels/cutscene_runner.c index e2157c6..e3b9e58 100644 --- a/src/levels/cutscene_runner.c +++ b/src/levels/cutscene_runner.c @@ -66,7 +66,7 @@ void cutsceneRunnerReset() { gCutsceneSoundQueues[i] = NULL; gCutsceneCurrentSound[i] = SOUND_ID_NONE; gCutsceneCurrentSoundId[i] = SOUND_ID_NONE; - gCutsceneCurrentSubtitleId[i] = SubtitleKeyNone; + gCutsceneCurrentSubtitleId[i] = StringIdNone; gCutsceneCurrentVolume[i] = 0.0f; } @@ -502,7 +502,7 @@ void cutscenesUpdateSounds() { gCutsceneCurrentSoundId[i] = curr->soundId; gCutsceneCurrentSubtitleId[i] = curr->subtitleId; gCutsceneCurrentVolume[i] = curr->volume; - if (curr->subtitleId != SubtitleKeyNone){ + if (curr->subtitleId != StringIdNone){ hudShowSubtitle(&gScene.hud, curr->subtitleId, subtitleType); } @@ -518,7 +518,7 @@ void cutscenesUpdateSounds() { gCutsceneCurrentSound[i] = SOUND_ID_NONE; gCutsceneCurrentSoundId[i] = SOUND_ID_NONE; - gCutsceneCurrentSubtitleId[i] = SubtitleKeyNone; + gCutsceneCurrentSubtitleId[i] = StringIdNone; gCutsceneCurrentVolume[i] = 0.0f; } } diff --git a/src/main.c b/src/main.c index 01902a6..4f1008e 100644 --- a/src/main.c +++ b/src/main.c @@ -12,7 +12,7 @@ #include "levels/intro.h" #include "levels/credits.h" #include "menu/main_menu.h" -#include "menu/translations.h" +#include "strings/translations.h" #include "savefile/savefile.h" #include "scene/dynamic_scene.h" #include "scene/portal_surface.h" @@ -257,11 +257,11 @@ static void gameProc(void* arg) { initAudio(fps); timeSetFrameRate(fps); soundPlayerInit(); - translationsLoad(gSaveData.controls.subtitleLanguage); + translationsLoad(gSaveData.controls.textLanguage); skSetSegmentLocation(CHARACTER_ANIMATION_SEGMENT, (unsigned)_animation_segmentSegmentRomStart); gSceneCallbacks->initCallback(gSceneCallbacks->data); // this prevents the intro from crashing - gGameMenu.currentRenderedLanguage = gSaveData.controls.subtitleLanguage; + gGameMenu.currentRenderedLanguage = gSaveData.controls.textLanguage; while (1) { OSScMsg *msg = NULL; @@ -285,7 +285,7 @@ static void gameProc(void* arg) { portalSurfaceCleanupQueueInit(); heapInit(_heapStart, memoryEnd); profileClearAddressMap(); - translationsLoad(gSaveData.controls.subtitleLanguage); + translationsLoad(gSaveData.controls.textLanguage); levelLoadWithCallbacks(levelGetQueued()); rumblePakClipInit(); cutsceneRunnerReset(); diff --git a/src/menu/audio_options.c b/src/menu/audio_options.c index 54e583a..92fd2a5 100644 --- a/src/menu/audio_options.c +++ b/src/menu/audio_options.c @@ -1,12 +1,12 @@ #include "audio_options.h" -#include "../system/controller.h" -#include "../savefile/savefile.h" -#include "../font/dejavu_sans.h" -#include "../audio/soundplayer.h" -#include "../build/src/audio/subtitles.h" +#include "audio/soundplayer.h" +#include "font/dejavu_sans.h" +#include "savefile/savefile.h" +#include "system/controller.h" + #include "../build/src/audio/languages.h" -#include "./translations.h" +#include "../build/src/strings/strings.h" #define GAMEPLAY_Y 54 #define GAMEPLAY_WIDTH 252 diff --git a/src/menu/confirmation_dialog.c b/src/menu/confirmation_dialog.c index 98b5ff1..4a0d5ef 100644 --- a/src/menu/confirmation_dialog.c +++ b/src/menu/confirmation_dialog.c @@ -1,13 +1,11 @@ -#include "./confirmation_dialog.h" +#include "confirmation_dialog.h" -#include "../font/dejavu_sans.h" -#include "../system/controller.h" -#include "../audio/soundplayer.h" -#include "./translations.h" +#include "audio/soundplayer.h" +#include "font/dejavu_sans.h" +#include "system/controller.h" #include "../build/assets/materials/ui.h" #include "../build/src/audio/clips.h" -#include "../build/src/audio/subtitles.h" #define DIALOG_LEFT 40 #define DIALOG_WIDTH (SCREEN_WD - (DIALOG_LEFT * 2)) diff --git a/src/menu/controls.c b/src/menu/controls.c index 7cf94dc..3a79a10 100644 --- a/src/menu/controls.c +++ b/src/menu/controls.c @@ -1,16 +1,16 @@ #include "controls.h" -#include "../font/dejavu_sans.h" -#include "../font/font.h" -#include "../system/controller.h" -#include "../audio/soundplayer.h" -#include "../util/memory.h" -#include "./translations.h" +#include "audio/soundplayer.h" +#include "font/dejavu_sans.h" +#include "font/font.h" +#include "strings/translations.h" +#include "system/controller.h" +#include "util/memory.h" #include "../build/assets/materials/ui.h" #include "../build/src/audio/clips.h" -#include "../build/src/audio/subtitles.h" +#include "../build/src/strings/strings.h" #define CONTROL_ROW_HEIGHT 14 diff --git a/src/menu/game_menu.c b/src/menu/game_menu.c index 76f39f4..418c64a 100644 --- a/src/menu/game_menu.c +++ b/src/menu/game_menu.c @@ -1,13 +1,14 @@ -#include "./game_menu.h" +#include "game_menu.h" -#include "../util/memory.h" -#include "../util/rom.h" #include "menu.h" +#include "scene/render_plan.h" +#include "strings/translations.h" +#include "system/controller.h" +#include "util/memory.h" +#include "util/rom.h" #include "../build/assets/materials/ui.h" -#include "../scene/render_plan.h" -#include "../system/controller.h" -#include "./translations.h" +#include "../build/src/strings/strings.h" void gameMenuInit(struct GameMenu* gameMenu, struct LandingMenuOption* options, int optionCount, int darkenBackground) { landingMenuInit(&gameMenu->landingMenu, options, optionCount, darkenBackground); diff --git a/src/menu/gameplay_options.c b/src/menu/gameplay_options.c index 5533c1f..acdecdf 100644 --- a/src/menu/gameplay_options.c +++ b/src/menu/gameplay_options.c @@ -1,13 +1,10 @@ #include "gameplay_options.h" -#include "../system/controller.h" -#include "../font/dejavu_sans.h" -#include "../audio/soundplayer.h" -#include "../savefile/savefile.h" - -#include "../build/src/audio/subtitles.h" - -#include "../main.h" +#include "audio/soundplayer.h" +#include "font/dejavu_sans.h" +#include "main.h" +#include "savefile/savefile.h" +#include "system/controller.h" #define MENU_Y 54 #define MENU_WIDTH 252 diff --git a/src/menu/landing_menu.c b/src/menu/landing_menu.c index f607c3c..440e472 100644 --- a/src/menu/landing_menu.c +++ b/src/menu/landing_menu.c @@ -1,20 +1,17 @@ #include "landing_menu.h" -#include "../font/font.h" -#include "../font/dejavu_sans.h" -#include "../system/controller.h" -#include "../util/memory.h" -#include "../audio/soundplayer.h" +#include "audio/soundplayer.h" +#include "cheat_codes.h" +#include "font/font.h" +#include "font/dejavu_sans.h" +#include "strings/translations.h" +#include "system/controller.h" +#include "util/memory.h" #include "../build/assets/materials/ui.h" #include "../build/src/audio/clips.h" -#include "cheat_codes.h" -#include "./translations.h" -// TODO: remove when makefile is no longer in use -#ifdef CMAKE #include "../build/version.h" -#endif #define PORTAL_LOGO_X 30 #define PORTAL_LOGO_Y 74 diff --git a/src/menu/load_game.c b/src/menu/load_game.c index b457c14..dbd92e0 100644 --- a/src/menu/load_game.c +++ b/src/menu/load_game.c @@ -1,14 +1,14 @@ #include "load_game.h" -#include "../savefile/savefile.h" -#include "../system/controller.h" -#include "../levels/levels.h" -#include "../util/memory.h" -#include "../audio/soundplayer.h" -#include "./translations.h" +#include "audio/soundplayer.h" +#include "levels/levels.h" +#include "savefile/savefile.h" +#include "strings/translations.h" +#include "system/controller.h" +#include "util/memory.h" #include "../build/src/audio/clips.h" -#include "../build/src/audio/subtitles.h" +#include "../build/src/strings/strings.h" void loadGameMenuInit(struct LoadGameMenu* loadGame, struct SavefileListMenu* savefileList) { loadGame->savefileList = savefileList; diff --git a/src/menu/main_menu.c b/src/menu/main_menu.c index 66eec33..2b95dfd 100644 --- a/src/menu/main_menu.c +++ b/src/menu/main_menu.c @@ -1,16 +1,15 @@ #include "main_menu.h" -#include "../util/memory.h" -#include "../util/rom.h" #include "menu.h" +#include "scene/render_plan.h" +#include "system/controller.h" +#include "util/memory.h" +#include "util/rom.h" #include "../build/assets/materials/ui.h" -#include "../scene/render_plan.h" -#include "../system/controller.h" #include "../build/assets/test_chambers/test_chamber_00/test_chamber_00.h" #include "../build/src/audio/clips.h" -#include "../build/src/audio/subtitles.h" struct LandingMenuOption gMainMenuOptions[] = { {GAMEUI_NEWGAME, GameMenuStateNewGame}, diff --git a/src/menu/menu_builder.c b/src/menu/menu_builder.c index 03597b4..435b473 100644 --- a/src/menu/menu_builder.c +++ b/src/menu/menu_builder.c @@ -1,11 +1,11 @@ #include "menu_builder.h" -#include "../util/memory.h" -#include "../system/controller.h" -#include "./translations.h" -#include "../audio/soundplayer.h" +#include "audio/soundplayer.h" +#include "math/mathf.h" +#include "strings/translations.h" +#include "system/controller.h" #include "system/time.h" -#include "../math/mathf.h" +#include "util/memory.h" #include "../font/dejavu_sans.h" #include "../build/assets/materials/ui.h" diff --git a/src/menu/new_game_menu.c b/src/menu/new_game_menu.c index d69efe0..d114314 100644 --- a/src/menu/new_game_menu.c +++ b/src/menu/new_game_menu.c @@ -1,24 +1,23 @@ #include "new_game_menu.h" -#include "./translations.h" +#include "font/font.h" +#include "font/dejavu_sans.h" -#include "../font/font.h" -#include "../font/dejavu_sans.h" +#include "audio/soundplayer.h" +#include "graphics/image.h" +#include "levels/levels.h" +#include "strings/translations.h" +#include "savefile/savefile.h" +#include "system/controller.h" +#include "text_manipulation.h" +#include "util/memory.h" +#include "util/rom.h" -#include "../graphics/image.h" -#include "../util/memory.h" -#include "../util/rom.h" -#include "../audio/soundplayer.h" -#include "./text_manipulation.h" #include "../build/assets/materials/ui.h" #include "../build/assets/materials/images.h" #include "../build/src/audio/clips.h" -#include "../build/src/audio/subtitles.h" - -#include "../levels/levels.h" -#include "../savefile/savefile.h" -#include "../system/controller.h" +#include "../build/src/strings/strings.h" struct Chapter gChapters[] = { {images_chapter1_rgba_16b, 0, 0}, diff --git a/src/menu/options_menu.c b/src/menu/options_menu.c index 10e8554..4495a1b 100644 --- a/src/menu/options_menu.c +++ b/src/menu/options_menu.c @@ -9,7 +9,7 @@ #include "../system/controller.h" #include "../build/src/audio/clips.h" -#include "../build/src/audio/subtitles.h" +#include "../build/src/strings/strings.h" struct Tab gOptionTabs[] = { diff --git a/src/menu/save_game_menu.c b/src/menu/save_game_menu.c index e036d5d..dcf0a27 100644 --- a/src/menu/save_game_menu.c +++ b/src/menu/save_game_menu.c @@ -1,14 +1,14 @@ -#include "./save_game_menu.h" +#include "save_game_menu.h" -#include "../savefile/savefile.h" -#include "../levels/levels.h" -#include "../system/controller.h" -#include "../util/memory.h" -#include "../audio/soundplayer.h" -#include "./translations.h" +#include "audio/soundplayer.h" +#include "levels/levels.h" +#include "savefile/savefile.h" +#include "strings/translations.h" +#include "system/controller.h" +#include "util/memory.h" #include "../build/src/audio/clips.h" -#include "../build/src/audio/subtitles.h" +#include "../build/src/strings/strings.h" void saveGameMenuInit(struct SaveGameMenu* saveGame, struct SavefileListMenu* savefileList) { saveGame->savefileList = savefileList; diff --git a/src/menu/savefile_list.c b/src/menu/savefile_list.c index e3fcec9..1c3ddfb 100644 --- a/src/menu/savefile_list.c +++ b/src/menu/savefile_list.c @@ -1,18 +1,18 @@ -#include "./savefile_list.h" +#include "savefile_list.h" -#include "../font/dejavu_sans.h" -#include "../system/controller.h" -#include "../util/rom.h" -#include "../graphics/image.h" -#include "../audio/soundplayer.h" -#include "./text_manipulation.h" -#include "./controls.h" -#include "./translations.h" +#include "audio/soundplayer.h" +#include "controls.h" +#include "font/dejavu_sans.h" +#include "graphics/image.h" +#include "strings/translations.h" +#include "system/controller.h" +#include "text_manipulation.h" +#include "util/rom.h" +#include "util/string.h" #include "../build/assets/materials/ui.h" #include "../build/src/audio/clips.h" - -#include "../util/string.h" +#include "../build/src/strings/strings.h" #define SAVE_SLOT_RENDER_W (SAVE_SLOT_IMAGE_W * 2) #define SAVE_SLOT_RENDER_H (SAVE_SLOT_IMAGE_H * 2) diff --git a/src/menu/tabs.c b/src/menu/tabs.c index a16a883..3c0547f 100644 --- a/src/menu/tabs.c +++ b/src/menu/tabs.c @@ -1,8 +1,8 @@ #include "tabs.h" -#include "../util/memory.h" -#include "./translations.h" -#include "./menu.h" +#include "menu.h" +#include "strings/translations.h" +#include "util/memory.h" #define LEFT_TEXT_PADDING 4 #define RIGHT_TEXT_PADDING 16 diff --git a/src/menu/text_manipulation.c b/src/menu/text_manipulation.c index be38760..dfba674 100644 --- a/src/menu/text_manipulation.c +++ b/src/menu/text_manipulation.c @@ -2,10 +2,10 @@ #include -#include "translations.h" +#include "strings/translations.h" #include "util/string.h" -#include "../build/src/audio/subtitles.h" +#include "../build/src/strings/strings.h" void textManipTestChamberMessage(char* result, int testChamber) { strCopy(result, translationsGet(PORTAL_CHAPTER1_TITLE)); diff --git a/src/menu/video_options.c b/src/menu/video_options.c index 659efcf..2ce8b6c 100644 --- a/src/menu/video_options.c +++ b/src/menu/video_options.c @@ -1,11 +1,11 @@ #include "video_options.h" -#include "../font/dejavu_sans.h" -#include "./translations.h" -#include "../savefile/savefile.h" -#include "../main.h" +#include "font/dejavu_sans.h" +#include "main.h" +#include "savefile/savefile.h" +#include "strings/translations.h" -#include "../build/src/audio/subtitles.h" +#include "../build/src/strings/strings.h" #define MENU_Y 54 #define MENU_WIDTH 252 @@ -80,7 +80,7 @@ struct MenuElementParams gVideoMenuParams[] = { .params = { .slider = { .width = 232, - .numberOfTicks = NUM_SUBTITLE_LANGUAGES, + .numberOfTicks = NUM_STRING_LANGUAGES, .discrete = 1, }, }, @@ -155,19 +155,19 @@ void videoOptionsAction(void* data, int selection, struct MenuAction* action) { } break; case VideoOptionTextLanguage: - gSaveData.controls.subtitleLanguage = action->state.iSlider.value; - gVideoMenuParams[LANGUAGE_TEXT_INDEX].params.text.message = SubtitleLanguages[gSaveData.controls.subtitleLanguage]; - translationsReload(gSaveData.controls.subtitleLanguage); + gSaveData.controls.textLanguage = action->state.iSlider.value; + gVideoMenuParams[LANGUAGE_TEXT_INDEX].params.text.message = StringLanguages[gSaveData.controls.textLanguage]; + translationsReload(gSaveData.controls.textLanguage); break; } } void videoOptionsInit(struct VideoOptions* videoOptions) { - if (gSaveData.controls.subtitleLanguage < 0 || gSaveData.controls.subtitleLanguage >= NUM_SUBTITLE_LANGUAGES) { - gSaveData.controls.subtitleLanguage = 0; + if (gSaveData.controls.textLanguage < 0 || gSaveData.controls.textLanguage >= NUM_STRING_LANGUAGES) { + gSaveData.controls.textLanguage = 0; } - gVideoMenuParams[LANGUAGE_TEXT_INDEX].params.text.message = SubtitleLanguages[gSaveData.controls.subtitleLanguage]; + gVideoMenuParams[LANGUAGE_TEXT_INDEX].params.text.message = StringLanguages[gSaveData.controls.textLanguage]; menuBuilderInit( &videoOptions->menuBuilder, @@ -184,7 +184,7 @@ void videoOptionsInit(struct VideoOptions* videoOptions) { menuBuilderSetCheckbox(&videoOptions->menuBuilder.elements[CAPTIONS_INDEX], (gSaveData.controls.flags & ControlSaveAllSubtitlesEnabled) != 0); menuBuilderSetCheckbox(&videoOptions->menuBuilder.elements[SUBTITLES_INDEX], (gSaveData.controls.flags & ControlSaveSubtitlesEnabled) != 0); - menuBuilderSetISlider(&videoOptions->menuBuilder.elements[LANGUAGE_SLIDER_INDEX], gSaveData.controls.subtitleLanguage); + menuBuilderSetISlider(&videoOptions->menuBuilder.elements[LANGUAGE_SLIDER_INDEX], gSaveData.controls.textLanguage); } void videoOptionsRebuildtext(struct VideoOptions* videoOptions) { diff --git a/src/savefile/savefile.c b/src/savefile/savefile.c index c5851ca..89a1f45 100755 --- a/src/savefile/savefile.c +++ b/src/savefile/savefile.c @@ -5,17 +5,10 @@ #include "system/controller.h" #include "../controls/controller_actions.h" -#include "../build/src/audio/subtitles.h" struct SaveData __attribute__((aligned(8))) gSaveData; int gCurrentTestSubject = -1; -#ifdef DEBUG -#define UNLOCK_ALL 1 -#else -#define UNLOCK_ALL 1 -#endif - OSPiHandle gSramHandle; extern OSMesgQueue dmaMessageQ; @@ -94,7 +87,7 @@ void savefileNew() { gSaveData.controls.acceleration = 0x4000; gSaveData.controls.deadzone = 0x4000; gSaveData.controls.portalRenderDepth = 2; - gSaveData.controls.subtitleLanguage = 0; + gSaveData.controls.textLanguage = 0; gSaveData.audio.soundVolume = 0xFFFF; gSaveData.audio.musicVolume = 0x8000; diff --git a/src/savefile/savefile.h b/src/savefile/savefile.h index ad8a375..f7ccd67 100755 --- a/src/savefile/savefile.h +++ b/src/savefile/savefile.h @@ -52,7 +52,7 @@ struct ControlSaveState { unsigned short acceleration; unsigned short deadzone; unsigned char portalRenderDepth; - unsigned char subtitleLanguage; + unsigned char textLanguage; }; struct AudioSettingsSaveState { diff --git a/src/scene/hud.c b/src/scene/hud.c index c26b466..5d4284f 100644 --- a/src/scene/hud.c +++ b/src/scene/hud.c @@ -1,13 +1,14 @@ #include "hud.h" -#include "../../build/assets/materials/hud.h" -#include "../menu/controls.h" -#include "../graphics/graphics.h" +#include "graphics/graphics.h" +#include "levels/levels.h" +#include "menu/controls.h" +#include "savefile/savefile.h" +#include "scene.h" +#include "strings/translations.h" #include "system/time.h" -#include "../levels/levels.h" -#include "./scene.h" -#include "../savefile/savefile.h" -#include "../menu/translations.h" + +#include "../../build/assets/materials/hud.h" #define HUD_CENTER_WIDTH 6 #define HUD_CENTER_HEIGHT 8 @@ -41,8 +42,8 @@ void hudInit(struct Hud* hud) { hud->promptType = CutscenePromptTypeNone; - hud->subtitleKey = SubtitleKeyNone; - hud->queuedSubtitleKey = SubtitleKeyNone; + hud->subtitleId = StringIdNone; + hud->queuedSubtitleId = StringIdNone; hud->subtitleType = SubtitleTypeNone; hud->queuedSubtitleType = SubtitleTypeNone; hud->promptOpacity = 0.0f; @@ -94,9 +95,9 @@ void hudUpdate(struct Hud* hud) { if (!((hud->subtitleType == SubtitleTypeCaption) && (hud->queuedSubtitleType == SubtitleTypeCaption) && (hud->subtitleExpireTimer > 0.0))){ hud->flags &= ~HudFlagsSubtitleQueued; hud->flags |= HudFlagsShowingSubtitle; - hud->subtitleKey = hud->queuedSubtitleKey; - hud->subtitleType= hud->queuedSubtitleType; - hud->queuedSubtitleKey = SubtitleKeyNone; + hud->subtitleId = hud->queuedSubtitleId; + hud->subtitleType = hud->queuedSubtitleType; + hud->queuedSubtitleId = StringIdNone; hud->queuedSubtitleType = SubtitleTypeNone; if (hud->subtitleType == SubtitleTypeCaption){ hud->subtitleExpireTimer = CAPTION_EXPIRE_TIME; @@ -177,11 +178,11 @@ void hudShowActionPrompt(struct Hud* hud, enum CutscenePromptType promptType) { hud->promptType = promptType; } -void hudShowSubtitle(struct Hud* hud, enum SubtitleKey subtitleKey, enum SubtitleType subtitleType) { +void hudShowSubtitle(struct Hud* hud, enum StringId subtitleId, enum SubtitleType subtitleType) { if (!(gSaveData.controls.flags & ControlSaveSubtitlesEnabled || gSaveData.controls.flags & ControlSaveAllSubtitlesEnabled)){ return; } - if (subtitleKey == hud->subtitleKey){ + if (subtitleId == hud->subtitleId) { return; } @@ -189,7 +190,7 @@ void hudShowSubtitle(struct Hud* hud, enum SubtitleKey subtitleKey, enum Subtitl hud->flags &= ~HudFlagsShowingSubtitle; hud->flags &= ~HudFlagsSubtitleQueued; hud->queuedSubtitleType = SubtitleTypeNone; - hud->queuedSubtitleKey = SubtitleKeyNone; + hud->queuedSubtitleId = StringIdNone; hud->subtitleFadeTime = SUBTITLE_SLOW_FADE_TIME; return; } @@ -202,16 +203,16 @@ void hudShowSubtitle(struct Hud* hud, enum SubtitleKey subtitleKey, enum Subtitl } else if ((hud->flags & HudFlagsShowingSubtitle) && (hud->subtitleType <= subtitleType)){ hud->flags |= HudFlagsSubtitleQueued; - hud->queuedSubtitleKey = subtitleKey; + hud->queuedSubtitleId = subtitleId; hud->queuedSubtitleType = subtitleType; hud->subtitleFadeTime = SUBTITLE_FAST_FADE_TIME; } else{ hud->flags |= HudFlagsShowingSubtitle; - hud->subtitleKey = subtitleKey; + hud->subtitleId = subtitleId; hud->subtitleType = subtitleType; hud->queuedSubtitleType = SubtitleTypeNone; - hud->queuedSubtitleKey = SubtitleKeyNone; + hud->queuedSubtitleId = StringIdNone; hud->subtitleFadeTime = SUBTITLE_SLOW_FADE_TIME; hud->subtitleExpireTimer = CAPTION_EXPIRE_TIME; } @@ -220,17 +221,17 @@ void hudShowSubtitle(struct Hud* hud, enum SubtitleKey subtitleKey, enum Subtitl else if (subtitleType == SubtitleTypeCloseCaption) { if (hud->flags & HudFlagsShowingSubtitle){ hud->flags |= HudFlagsSubtitleQueued; - hud->queuedSubtitleKey = subtitleKey; + hud->queuedSubtitleId = subtitleId; hud->queuedSubtitleType = subtitleType; hud->subtitleFadeTime = SUBTITLE_FAST_FADE_TIME; } else{ hud->flags |= HudFlagsShowingSubtitle; hud->flags &= ~HudFlagsSubtitleQueued; - hud->subtitleKey = subtitleKey; + hud->subtitleId = subtitleId; hud->subtitleType = subtitleType; hud->queuedSubtitleType = SubtitleTypeNone; - hud->queuedSubtitleKey = SubtitleKeyNone; + hud->queuedSubtitleId = StringIdNone; hud->subtitleFadeTime = SUBTITLE_SLOW_FADE_TIME; } return; @@ -362,7 +363,7 @@ void hudRender(struct Hud* hud, struct Player* player, struct RenderState* rende controlsRenderPrompt(gPromptActions[hud->promptType], translationsGet(gPromptText[hud->promptType]), hud->promptOpacity, renderState); } - if (hud->subtitleOpacity > 0.0f && (gSaveData.controls.flags & ControlSaveSubtitlesEnabled || gSaveData.controls.flags & ControlSaveAllSubtitlesEnabled) && hud->subtitleKey != SubtitleKeyNone) { - controlsRenderSubtitle(translationsGet(hud->subtitleKey), hud->subtitleOpacity, hud->backgroundOpacity, renderState, hud->subtitleType); + if (hud->subtitleOpacity > 0.0f && (gSaveData.controls.flags & ControlSaveSubtitlesEnabled || gSaveData.controls.flags & ControlSaveAllSubtitlesEnabled) && hud->subtitleId != StringIdNone) { + controlsRenderSubtitle(translationsGet(hud->subtitleId), hud->subtitleOpacity, hud->backgroundOpacity, renderState, hud->subtitleType); } } diff --git a/src/scene/hud.h b/src/scene/hud.h index a632cda..86894cd 100644 --- a/src/scene/hud.h +++ b/src/scene/hud.h @@ -1,10 +1,11 @@ #ifndef __SCENE_HUD_H__ #define __SCENE_HUD_H__ -#include "../graphics/renderstate.h" -#include "../player/player.h" -#include "../controls/controller_actions.h" -#include "../../build/src/audio/subtitles.h" +#include "controls/controller_actions.h" +#include "graphics/renderstate.h" +#include "player/player.h" + +#include "../build/src/strings/strings.h" #define INTRO_BLACK_TIME 3.0f #define INTRO_FADE_TIME 1.0f @@ -26,8 +27,8 @@ enum HudFlags { struct Hud { enum CutscenePromptType promptType; - enum SubtitleKey subtitleKey; - enum SubtitleKey queuedSubtitleKey; + enum StringId subtitleId; + enum StringId queuedSubtitleId; enum SubtitleType subtitleType; enum SubtitleType queuedSubtitleType; float promptOpacity; @@ -52,7 +53,7 @@ void hudUpdatePortalIndicators(struct Hud* hud, struct Ray* raycastRay, struct void hudPortalFired(struct Hud* hud, int index); void hudShowActionPrompt(struct Hud* hud, enum CutscenePromptType promptType); void hudResolvePrompt(struct Hud* hud, enum CutscenePromptType promptType); -void hudShowSubtitle(struct Hud* hud, enum SubtitleKey subtitleKey, enum SubtitleType subtitleType); +void hudShowSubtitle(struct Hud* hud, enum StringId subtitleId, enum SubtitleType subtitleType); void hudResolveSubtitle(struct Hud* hud); void hudRender(struct Hud* hud, struct Player* player, struct RenderState* renderState); diff --git a/src/scene/scene.c b/src/scene/scene.c index 6343582..0cf1589 100644 --- a/src/scene/scene.c +++ b/src/scene/scene.c @@ -2,39 +2,40 @@ #include "scene.h" #include "defs.h" + +#include "audio/clips.h" +#include "audio/soundplayer.h" +#include "controls/controller_actions.h" +#include "controls/rumble_pak.h" +#include "decor/decor_object_list.h" +#include "dynamic_scene.h" +#include "effects/effect_definitions.h" #include "graphics/graphics.h" +#include "hud.h" +#include "levels/cutscene_runner.h" +#include "levels/levels.h" +#include "levels/static_render.h" #include "materials/shadow_caster.h" #include "materials/subject.h" #include "materials/light.h" #include "materials/point_light_rendered.h" -#include "system/time.h" -#include "sk64/skeletool_defs.h" -#include "shadow_map.h" -#include "../physics/point_constraint.h" -#include "../physics/debug_renderer.h" -#include "../system/controller.h" -#include "../controls/controller_actions.h" -#include "../physics/collision_scene.h" -#include "../levels/static_render.h" -#include "../levels/levels.h" -#include "../savefile/checkpoint.h" -#include "../scene/portal_surface.h" -#include "../math/mathf.h" -#include "./hud.h" -#include "dynamic_scene.h" -#include "../audio/soundplayer.h" -#include "../audio/clips.h" -#include "../levels/cutscene_runner.h" -#include "../util/memory.h" -#include "../decor/decor_object_list.h" -#include "signals.h" +#include "math/mathf.h" +#include "menu/game_menu.h" +#include "physics/collision_scene.h" +#include "physics/debug_renderer.h" +#include "physics/point_constraint.h" +#include "savefile/checkpoint.h" +#include "player/player_rumble_clips.h" #include "render_plan.h" -#include "../menu/game_menu.h" -#include "../effects/effect_definitions.h" -#include "../controls/rumble_pak.h" -#include "../player/player_rumble_clips.h" +#include "scene/portal_surface.h" +#include "shadow_map.h" +#include "signals.h" +#include "sk64/skeletool_defs.h" +#include "system/controller.h" +#include "system/time.h" +#include "util/memory.h" -#include "../build/src/audio/subtitles.h" +#include "../build/src/strings/strings.h" #include "../build/src/audio/clips.h" extern struct GameMenu gGameMenu; diff --git a/src/scene/security_camera.c b/src/scene/security_camera.c index c327972..ff74614 100644 --- a/src/scene/security_camera.c +++ b/src/scene/security_camera.c @@ -173,7 +173,7 @@ void securityCamerasCheckPortal(struct SecurityCamera* securityCameras, int came if (!cutsceneRunnerIsChannelPlaying(CH_GLADOS)) { short clipIndex = randomInRange(0, sizeof(gCameraDestroyClips) / sizeof(*gCameraDestroyClips)); - cutsceneQueueSoundInChannel(gCameraDestroyClips[clipIndex], 1.0f, CH_GLADOS, SubtitleKeyNone); + cutsceneQueueSoundInChannel(gCameraDestroyClips[clipIndex], 1.0f, CH_GLADOS, StringIdNone); } } } diff --git a/src/menu/translations.c b/src/strings/translations.c similarity index 70% rename from src/menu/translations.c rename to src/strings/translations.c index f27558c..ce5ea87 100644 --- a/src/menu/translations.c +++ b/src/strings/translations.c @@ -1,16 +1,16 @@ #include "translations.h" -#include "../util/memory.h" -#include "../util/rom.h" +#include "util/memory.h" +#include "util/rom.h" -#include "../build/src/audio/subtitles.h" +#include "../build/src/strings/strings.h" char* gLoadedLanugageBlock = NULL; char** gCurrentTranslations = NULL; int gCurrentLoadedLanguage = 0; void translationsLoad(int language) { - if (NUM_SUBTITLE_LANGUAGES == 0) { + if (NUM_STRING_LANGUAGES == 0) { gCurrentTranslations = NULL; return; } @@ -19,11 +19,11 @@ void translationsLoad(int language) { language = 0; } - if (language >= NUM_SUBTITLE_LANGUAGES) { - language = NUM_SUBTITLE_LANGUAGES - 1; + if (language >= NUM_STRING_LANGUAGES) { + language = NUM_STRING_LANGUAGES - 1; } - struct SubtitleBlock* block = &SubtitleLanguageBlocks[language]; + struct StringBlock* block = &StringLanguageBlocks[language]; int blockSize = (int)block->romEnd - (int)block->romStart; gLoadedLanugageBlock = malloc(blockSize); @@ -32,7 +32,7 @@ void translationsLoad(int language) { gCurrentTranslations = CALC_RAM_POINTER(block->values, gLoadedLanugageBlock); gCurrentLoadedLanguage = language; - for (int i = 0; i < NUM_SUBTITLE_MESSAGES; ++i) { + for (int i = 0; i < NUM_TRANSLATED_STRINGS; ++i) { gCurrentTranslations[i] = CALC_RAM_POINTER(gCurrentTranslations[i], gLoadedLanugageBlock); } } @@ -51,7 +51,7 @@ int translationsCurrentLanguage() { } char* translationsGet(int message) { - if (message < 0 || message >= NUM_SUBTITLE_MESSAGES || !gCurrentTranslations) { + if (message < 0 || message >= NUM_TRANSLATED_STRINGS || !gCurrentTranslations) { return ""; } diff --git a/src/menu/translations.h b/src/strings/translations.h similarity index 100% rename from src/menu/translations.h rename to src/strings/translations.h diff --git a/tools/level_scripts/static_export.lua b/tools/level_scripts/static_export.lua index 8310ca3..dc73147 100644 --- a/tools/level_scripts/static_export.lua +++ b/tools/level_scripts/static_export.lua @@ -10,7 +10,7 @@ local animation = require('tools.level_scripts.animation') local signals = require('tools.level_scripts.signals') sk_definition_writer.add_header('"../build/assets/materials/static.h"') -sk_definition_writer.add_header('"../build/src/audio/subtitles.h"') +sk_definition_writer.add_header('"../build/src/strings/strings.h"') sk_definition_writer.add_header('"levels/level_definition.h"') local portalable_surfaces = { diff --git a/tools/level_scripts/trigger.lua b/tools/level_scripts/trigger.lua index 0d4eef2..eb2385b 100644 --- a/tools/level_scripts/trigger.lua +++ b/tools/level_scripts/trigger.lua @@ -99,12 +99,12 @@ local function generate_cutscene_step(cutscene_name, step, step_index, label_loc tonumber(step.args[2] or "1") * 255, math.floor(tonumber(step.args[3] or "1") * 64 + 0.5), } - elseif step.command == "q_sound" and #step.args >= 3 then + elseif step.command == "q_sound" and #step.args >= 2 then result.type = sk_definition_writer.raw('CutsceneStepTypeQueueSound') result.queueSound = { sk_definition_writer.raw(string_starts_with(step.args[1], "SOUNDS_") and step.args[1] or ("SOUNDS_" .. step.args[1])), sk_definition_writer.raw(step.args[2]), - sk_definition_writer.raw(step.args[3]), + sk_definition_writer.raw(step.args[3] or "StringIdNone"), tonumber(step.args[4] or "1") * 255, } elseif step.command == "wait_for_channel" and #step.args >= 1 then diff --git a/tools/sound/generate_sound_ids.js b/tools/sound/generate_sound_ids.js index b9e6045..4b1157a 100644 --- a/tools/sound/generate_sound_ids.js +++ b/tools/sound/generate_sound_ids.js @@ -28,14 +28,9 @@ function getSoundName(soundFile, stripPrefix) { return `SOUNDS_${sanitize(name).toUpperCase()}`; } -function getSoundLanguage(soundFile, makefileHack) { +function getSoundLanguage(soundFile) { const { name } = path.parse(soundFile); - // HACK: remove when makefile is no longer in use - if (makefileHack && soundFile.includes('assets/sound/vo/aperture_ai/')) { - return 'english'; - } - return Object.keys(SUPPORTED_LANGUAGES).find(lang => { return name.toLowerCase().startsWith(`${lang}_`); }); @@ -45,11 +40,11 @@ function getSoundNameWithoutLanguage(soundFile, language) { return getSoundName(soundFile, language && `${language}_`); } -function getProvidedLanguages(soundFiles, makefileHack) { +function getProvidedLanguages(soundFiles) { const languageNames = new Set(); for (const soundFile of soundFiles) { - const language = getSoundLanguage(soundFile, makefileHack); + const language = getSoundLanguage(soundFile); if (language) { languageNames.add(language); } @@ -75,8 +70,8 @@ function validateLocalizedSounds(languages) { } } -function parseSounds(soundFiles, makefileHack) { - const languageNames = getProvidedLanguages(soundFiles, makefileHack); +function parseSounds(soundFiles) { + const languageNames = getProvidedLanguages(soundFiles); const defaultLanguage = languageNames[0]; // Initialize in language order so output order is consistent @@ -89,7 +84,7 @@ function parseSounds(soundFiles, makefileHack) { const unlocalized = new Map(); for (const [i, soundFile] of soundFiles.entries()) { - const language = getSoundLanguage(soundFile, makefileHack); + const language = getSoundLanguage(soundFile); const canonicalName = getSoundNameWithoutLanguage(soundFile, language); const sound = { // The game references sounds by canonical name @@ -217,24 +212,19 @@ const { values, positionals } = util.parseArgs({ options: { 'out-dir': { type: 'string' - }, - // HACK: remove when makefile is no longer in use - 'makefile-hack': { - type: 'boolean' } }, allowPositionals: true }); const outDir = values['out-dir']; -const makefileHack = values['makefile-hack']; const soundFiles = positionals; if (!fs.existsSync(outDir)) { fs.mkdirSync(outDir, { recursive: true }); } -const soundInfo = parseSounds(soundFiles, makefileHack); +const soundInfo = parseSounds(soundFiles); fs.writeFileSync( path.join(outDir, 'clips.h'), diff --git a/tools/text/subtitle_generate.py b/tools/text/generate_strings.py similarity index 88% rename from tools/text/subtitle_generate.py rename to tools/text/generate_strings.py index 2a05c42..31278bc 100644 --- a/tools/text/subtitle_generate.py +++ b/tools/text/generate_strings.py @@ -1,5 +1,3 @@ -# TODO: rename file -> generate_strings.py - #!/usr/bin/env python3 import argparse import json @@ -154,27 +152,27 @@ def generate_header(language_strings): ) return ( - f"#ifndef __SUBTITLES_H__\n" - f"#define __SUBTITLES_H__\n" + f"#ifndef __STRINGS_H__\n" + f"#define __STRINGS_H__\n" f"\n" - f"#define NUM_SUBTITLE_LANGUAGES {len(language_strings)}\n" - f"#define NUM_SUBTITLE_MESSAGES {len(language_strings[first_language].values()) + 1}\n" - f"#define MAX_SUBTITLE_LENGTH {max_message_length}\n" + f"#define NUM_STRING_LANGUAGES {len(language_strings)}\n" + f"#define NUM_TRANSLATED_STRINGS {len(language_strings[first_language].values()) + 1}\n" + f"#define MAX_STRING_LENGTH {max_message_length}\n" f"\n" - f"struct SubtitleBlock {{\n" + f"struct StringBlock {{\n" f" char* romStart;\n" f" char* romEnd;\n" f" char** values;\n" f"}};\n" f"\n" - f"extern char* SubtitleLanguages[];\n" - f"extern struct SubtitleBlock SubtitleLanguageBlocks[];\n" + f"extern char* StringLanguages[];\n" + f"extern struct StringBlock StringLanguageBlocks[];\n" f"\n" f"{language_defines}\n" f"\n" - f"enum SubtitleKey\n" + f"enum StringId\n" f"{{\n" - f" SubtitleKeyNone,\n" + f" StringIdNone,\n" f"{string_enum_entries}\n" f"}};\n" f"\n" @@ -188,9 +186,9 @@ def generate_main_source_file(language_strings): ) output = ( - f'#include "subtitles.h"\n' + f'#include "strings.h"\n' f"\n" - f"char* SubtitleLanguages[] =\n" + f"char* StringLanguages[] =\n" f"{{\n" f"{language_name_entries}\n" f"}};\n" @@ -199,20 +197,20 @@ def generate_main_source_file(language_strings): for language in language_strings: output += ( - f"extern char _subtitles_{language}SegmentRomStart[];\n" - f"extern char _subtitles_{language}SegmentRomEnd[];\n" - f"extern char* gSubtitle{capitalize(language)}[NUM_SUBTITLE_MESSAGES];\n" + f"extern char _strings_{language}SegmentRomStart[];\n" + f"extern char _strings_{language}SegmentRomEnd[];\n" + f"extern char* gStrings{capitalize(language)}[NUM_TRANSLATED_STRINGS];\n" f"\n" ) - output += f"struct SubtitleBlock SubtitleLanguageBlocks[] = {{\n" + output += f"struct StringBlock StringLanguageBlocks[] = {{\n" for language in language_strings: output += ( f" {{\n" - f" _subtitles_{language}SegmentRomStart,\n" - f" _subtitles_{language}SegmentRomEnd,\n" - f" gSubtitle{capitalize(language)},\n" + f" _strings_{language}SegmentRomStart,\n" + f" _strings_{language}SegmentRomEnd,\n" + f" gStrings{capitalize(language)},\n" f" }},\n" ) @@ -230,12 +228,12 @@ def generate_language_source_file(language, strings, default_strings): ) return ( - f'#include "subtitles.h"\n' + f'#include "strings.h"\n' f"\n" f"{string_declarations}\n" f"\n" - f"char* gSubtitle{capitalize(language)}[NUM_SUBTITLE_MESSAGES] = {{\n" - f' "",\n' # SubtitleKeyNone + f"char* gStrings{capitalize(language)}[NUM_TRANSLATED_STRINGS] = {{\n" + f' "",\n' # StringIdNone f"{string_table_entries}\n" f"}};" ) @@ -399,18 +397,17 @@ if font_data: output_dir = args.output_dir write_string( - os.path.join(output_dir, "subtitles.h"), + os.path.join(output_dir, "strings.h"), generate_header(language_strings) ) write_string( - os.path.join(output_dir, "subtitles.c"), + os.path.join(output_dir, "strings.c"), generate_main_source_file(language_strings) ) -# TODO: strings_*.c default_strings = language_strings[list(language_strings)[0]] for language, strings in language_strings.items(): write_string( - os.path.join(output_dir, f"subtitles_{language}.c"), + os.path.join(output_dir, f"strings_{language}.c"), generate_language_source_file(language, strings, default_strings) )