diff --git a/common/deserialization/subtitles/subtitles.cpp b/common/deserialization/subtitles/subtitles.cpp index cf704eb67e..a32a19cfde 100644 --- a/common/deserialization/subtitles/subtitles.cpp +++ b/common/deserialization/subtitles/subtitles.cpp @@ -46,24 +46,20 @@ bool write_subtitle_db_to_files(const GameSubtitleDB& db) { file_contents += fmt::format(" :hint #x{0:x}", scene_info.m_id); } file_contents += "\n"; - if (scene_info.m_lines.empty()) { - file_contents += fmt::format(" ()\n"); - } else { - for (const auto& line : scene_info.m_lines) { - // Clear screen entries - if (line.line_utf8.empty()) { - file_contents += fmt::format(" ({})\n", line.frame); - } else { - file_contents += fmt::format(" ({}", line.frame); - if (line.offscreen && scene_info.m_kind == SubtitleSceneKind::Movie) { - file_contents += " :offscreen"; - } - file_contents += fmt::format(" \"{}\"", line.speaker_utf8); - // escape quotes - std::string temp = line.line_utf8; - temp = std::regex_replace(temp, std::regex("\""), "\\\""); - file_contents += fmt::format(" \"{}\")\n", temp); + for (const auto& line : scene_info.m_lines) { + // Clear screen entries + if (line.line_utf8.empty()) { + file_contents += fmt::format(" ({})\n", line.frame); + } else { + file_contents += fmt::format(" ({}", line.frame); + if (line.offscreen && scene_info.m_kind == SubtitleSceneKind::Movie) { + file_contents += " :offscreen"; } + file_contents += fmt::format(" \"{}\"", line.speaker_utf8); + // escape quotes + std::string temp = line.line_utf8; + temp = std::regex_replace(temp, std::regex("\""), "\\\""); + file_contents += fmt::format(" \"{}\")\n", temp); } } file_contents += " )\n"; diff --git a/common/serialization/subtitles/subtitles.cpp b/common/serialization/subtitles/subtitles.cpp index 865ffbacef..83858d9b11 100644 --- a/common/serialization/subtitles/subtitles.cpp +++ b/common/serialization/subtitles/subtitles.cpp @@ -47,7 +47,7 @@ int64_t get_int(const goos::Object& obj) { const goos::Object& car(const goos::Object& x) { if (!x.is_pair()) { - throw std::runtime_error("invalid pair"); + throw std::runtime_error("car: invalid pair"); } return x.as_pair()->car; @@ -55,7 +55,7 @@ const goos::Object& car(const goos::Object& x) { const goos::Object& cdr(const goos::Object& x) { if (!x.is_pair()) { - throw std::runtime_error("invalid pair"); + throw std::runtime_error("cdr: invalid pair"); } return x.as_pair()->cdr; @@ -255,7 +255,7 @@ void parse_subtitle(const goos::Object& data, auto entries = cdr(obj); if (head.is_int()) { kind = SubtitleSceneKind::Hint; - } else if (car(entries).is_symbol()) { + } else if (entries.is_pair() && car(entries).is_symbol()) { const auto& parm = car(entries).as_symbol()->name; if (parm == ":hint") { entries = cdr(entries); @@ -325,7 +325,8 @@ void parse_subtitle(const goos::Object& data, auto speaker_str = font->convert_utf8_to_game(speaker_utf8); scene.add_line(time, line_str, line_utf8, speaker_str, speaker_utf8, offscreen); } else { - throw std::runtime_error("Each entry must be a list"); + throw std::runtime_error( + fmt::format("{} | Each entry must be a non-empty list", scene.name())); } }); for (auto& [lang, bank] : banks) { @@ -392,15 +393,27 @@ int GameSubtitleGroups::find_group_index(const std::string& group_name) { void GameSubtitleGroups::remove_scene(const std::string& group_name, const std::string& scene_name) { - // TODO - validate group_name + if (m_groups.count(group_name) == 0) { + lg::error("Subtitle group {} doesn't exist! Abort.", group_name); + return; + } m_groups[group_name].erase( std::remove(m_groups[group_name].begin(), m_groups[group_name].end(), scene_name), m_groups[group_name].end()); } + void GameSubtitleGroups::add_scene(const std::string& group_name, const std::string& scene_name) { - // TODO - validate group_name - // TODO - don't add duplicates - m_groups[group_name].push_back(scene_name); + std::string group = group_name; + if (m_groups.count(group_name) == 0) { + lg::error("Subtitle group {} doesn't exist! Add to uncategorized.", group_name); + group = uncategorized_group; + } + auto it = std::find(m_groups[group].begin(), m_groups[group].end(), scene_name); + if (it != m_groups[group].end()) { + lg::error("Scene {} already exists in group {}", scene_name, group); + } else { + m_groups[group].push_back(scene_name); + } } GameSubtitleDB load_subtitle_project() { diff --git a/common/serialization/subtitles/subtitles.h b/common/serialization/subtitles/subtitles.h index 8628a0d6c9..91d3815b2e 100644 --- a/common/serialization/subtitles/subtitles.h +++ b/common/serialization/subtitles/subtitles.h @@ -7,6 +7,7 @@ #include #include "common/goos/Object.h" +#include "common/log/log.h" #include "common/util/Assert.h" #include "common/util/FontUtils.h" diff --git a/game/assets/jak1/subtitle/game_subtitle_en.gd b/game/assets/jak1/subtitle/game_subtitle_en.gd index 10aa5491b7..ec33753d33 100644 --- a/game/assets/jak1/subtitle/game_subtitle_en.gd +++ b/game/assets/jak1/subtitle/game_subtitle_en.gd @@ -142,6 +142,66 @@ ;; sidekick ;; ----------------- +("death-0181" + (0 "DAXTER" "DON'T STEP INTO THE LIGHT, JAK! DON'T STEP INTO THE LIGHT!!") + ) + +("death-0182" + (0 "DAXTER" "HEY, JAK! CAN I, UH...") + (52) + (68 "DAXTER" "HAVE YOUR INSECT COLLECTION?") + ) + +("death-0184" + (0 "DAXTER" "WHILE YOU'RE DOWN THERE, EHM...") + (60) + (70 "DAXTER" "COULD YA RUB MY FEET?") + ) + +("death-0186" + (0 "DAXTER" "DON'T WORRY! I'LL AVENGE YOU!") + (50) + (69 "DAXTER" "...NOT.") + ) + +("death-0187" + (0 "DAXTER" "WELL, UH...") + (46) + (62 "DAXTER" "BETTER YOU THAN ME.") + ) + +("death-0191" + (0 "DAXTER" "THAT LOOKS LIKE IT HURT.") + (46 "DAXTER" "SHOULD I CALL FOR BACKUP?") + ) + +("death-0193" + (0 "DAXTER" "STEP ONE: STAY ALIVE!") + (69 "DAXTER" "STEP TWO...") + (96) + (110 "DAXTER" "THINK ABOUT NOT DOING SOMETHING LIKE THAT AGAIN!!") + ) + +("death-0195" + (0 "DAXTER" "I WAS RIGHT BEHIND YA, JAK!") + (69 "DAXTER" "...REALLY. I WAS.") + ) + +("death-0197" + (0 "DAXTER" "HEIMLICH! UH... STRETCHER!") + (62) + (78 "DAXTER" "...YECCH. BREATHMINT?") + ) + +("death-0199" + (0 "DAXTER" "I'LL SAY SOMETHING REALLY TEARY AT THE FUNERAL, LIKE...") + (105 "DAXTER" "...\"HOW AM I GONNA GET CHANGED BACK NOW?!\"") + ) + +("death-0202" + (5 "DAXTER" "SAY GOODNIGHT, JAK!") + ) + ("sksp0001" :hint #x280 (0 "DAXTER" "HEY! THAT SWEET-LOOKING BABE KEIRA WAS RIGHT! THERE ARE TRANS-PADS OUT HERE.") ) @@ -244,8 +304,210 @@ (0 "DAXTER" "ALRIGHT! YOU FOUND ALL THE SCOUT FLIES IN THIS AREA!") ) +("sksp0110" :hint #x336 + (0 "DAXTER" "I'VE SAID IT BEFORE AND I'LL SAY IT AGAIN...") + (164 "DAXTER" "AVOID THE DARK ECO BOXES!!") + ) + ("sksp0145" :hint #x359 - (0 "DAXTER" "WOW! YOU CAN SHOOT FIRE BALLS WHEN YOU'RE POWERED UP WITH YELLOW ECO.") + (0 "DAXTER" "WOW! YOU CAN SHOOT FIREBALLS WHEN YOU'RE POWERED UP WITH YELLOW ECO.") + ) + +("sksp0328" :hint #x433 + (0 "DAXTER" "MAYBE YOU CAN SHOOT BETTER IF YOU AIM THROUGH YOUR GOGGLES.") + ) + +;; ----------------- +;; oracle +;; ----------------- + +("oracle-intro-1" + (0 "ORACLE" "WHO AWAKENS THE ORACLE?") + (75) + (81 "ORACLE" "WAIT, ONE OF YOU HAS THE LIGHT WITHIN.") + (198) + (206 "ORACLE" "FROM BEFORE TIME, I HAVE WATCHED AND WAITED FOR THE TRUE HERO TO RETURN.") + (390) + (395 "ORACLE" "PRESENT TO ME 120 PRECURSOR ORBS FOR EACH POWER CELL I CONTAIN.") + ) + +("oracle-intro-2" + (0 "ORACLE" "BEWARE OF THE DARK LIGHT, FOR IT HAS TWISTED THE FATE OF ONE OF YOU.") + (164) + (184 "ORACLE" "BRING ME 120 PRECURSOR ORBS FOR EACH POWER CELL I CONTAIN.") + ) + +("oracle-intro-3" + (0 "ORACLE" "SEEK THE PURE LIGHT, FOR WITHIN ITS FLAME THE ANSWERS RESIDE.") + (182 "ORACLE" "YOU CAN GAIN MY POWER CELLS BY BRINGING 120 PRECURSOR ORBS FOR EACH.") + ) + +("oracle-left-eye-1" + (0 "ORACLE" "YOU HAVE PROVEN YOURSELF WORTHY. HERE IS A POWER CELL.") + ) + +("oracle-left-eye-2" + (0 "ORACLE" "FOR YOUR SACRIFICE, I OFFER YOU A POWER CELL.") + ) + +("oracle-left-eye-3" + (0 "ORACLE" "FOR YOUR EFFORT, A POWER CELL IS THE REWARD.") + ) + +("oracle-reminder-1" + (0 "ORACLE" "BRING TO ME 120 PRECURSOR ORBS AND I WILL AWARD YOU A POWER CELL.") + ) + +("oracle-reminder-2" + (190 "ORACLE" "PRESENT 120 PRECURSOR ORBS, AND A POWER CELL WILL BE YOUR REWARD.") + ) + +("oracle-right-eye-1" + (0 "ORACLE" "FOR YOUR GIFT, ANOTHER POWER CELL IS YOURS.") + ) + +("oracle-right-eye-2" + (0 "ORACLE" "HERE IS ANOTHER POWER CELL FOR YOUR QUEST.") + ) + +("oracle-right-eye-3" + (0 "ORACLE" "YOU HAVE OBTAINED ANOTHER POWER CELL.") + ) + +;; ----------------- +;; training +;; ----------------- + +("asstvb40" :hint #x900 + (0 "KEIRA" "THIS DEVICE IS A COMMUNICATOR. WITH IT, MY FATHER AND I") + (181 "KEIRA" "CAN GIVE YOU ADVICE AT ANY TIME DURING YOUR QUEST.") + ) + +("asstvb41" :hint #x901 + (0 "KEIRA" "THESE FLOATING EGG-SHAPED THINGS ARE PRECURSOR ORBS.") + (176) + (180 "KEIRA" "COLLECT ENOUGH OF THEM, AND SOME OF THE VILLAGERS WILL GIVE YOU") + (315 "KEIRA" "A POWER CELL IN EXCHANGE.") + ) + +("asstvb42" :hint #x902 + (0 "KEIRA" "THIS IS A POWER CELL, THE MOST IMPORTANT PRECURSOR ARTIFACT YOU CAN FIND!") + (327) + (333 "KEIRA" "YOU NEED TO COLLECT 20 OF THESE SO I CAN POWER THE HEAT SHIELD") + (507 "KEIRA" "FOR YOUR A-GRAV ZOOMER.") + ) + +("asstvb44" :hint #x903 + (0 "KEIRA" "HEY, YOU FOUND ONE OF MY SCOUT FLIES!") + (160 "KEIRA" "I SENT 7 OF THEM TO EACH AREA TO LOOK FOR POWER CELLS") + (343 "KEIRA" "BUT THE LURKERS MUST HAVE CAPTURED THEM ALL!") + ) + +("asstvb45" :hint #x904 + (0 "KEIRA" "WOW! THAT LAST SCOUT FLY HAD A POWER CELL!") + (219 "KEIRA" "I'LL BET IF YOU COLLECT ALL 7 IN EACH AREA YOU CAN FIND EVEN MORE POWER CELLS.") + ) + +("asstvb46" :hint #x905 + (0 "KEIRA" "BE CAREFUL IN THE OCEAN, THE WATERS ARE CHOCK-FULL OF LURKER SHARKS") + (258 "KEIRA" "AND I'VE NEVER SEEN ANYONE DEFEAT ONE.") + (419) + (426 "KEIRA" "STAY CLEAR OF THEM IF YOU KNOW WHAT'S GOOD FOR YOU!") + ) + +("asstvb47" :hint #x906 + (0 "KEIRA" "REMEMBER, THAT'S A POWER CELL. YOU NEED TO COLLECT AS MANY OF THOSE AS YOU CAN.") + ) + +("asstvb48" :hint #x907 + (0 "KEIRA" "THAT'S A BLUE ECO VENT! MORE CONCENTRATED THAN THE FLOATING CLUSTERS,") + (253 "KEIRA" "THIS VENT WILL GIVE YOU A FULL CHARGE OF BLUE ECO,") + (419 "KEIRA" "LETTING YOU USE IT FOR THE MAXIMUM TIME.") + ) + +("sagevb21" :hint #x908 + (3 "SAGE" "THOSE LITTLE GREEN BALLS OF ENERGY ON THE GROUND ARE A TYPE OF ECO.") + (280 "SAGE" "PICK UP 50 SMALL GREEN ECOES, OR ONE BIG GREEN ONE TO INCREASE YOUR HEALTH.") + ) + +("sagevb22" :hint #x909 + (0 "SAGE" "THAT'S BLUE ECO, WHICH CONTAINS THE ENERGY OF MOTION.") + (291 "SAGE" "BLUE ECO ALLOWS YOU TO RUN FAST, BREAK BOXES, AND EVEN ACTIVATE SOME PRECURSOR") + (640 "SAGE" "ARTIFACTS WHEN YOU GET NEAR THEM.") + ) + +("sagevb23" :hint #x90a + (0 "SAGE" "NOTICE HOW EACH BLUE ECO CLUSTER YOU PICK UP INCREASES THE TIME YOU CAN USE ITS POWER.") + ) + +("sagevb24" :hint #x90b + (3 "SAGE" "THIS IS A PRECURSOR DOOR. IT CAN ONLY BE OPENED BY APPROACHING THE DOOR") + (357 "SAGE" "WHILE CHANNELING BLUE ECO THROUGH YOUR BODY.") + ) + +("sagevb25" :hint #x90c + (3 "SAGE" "GOOD WORK, THE BLUE ECO CAUSED THE DOOR TO OPEN. WITH BLUE ECO, YOU CAN BREATHE") + (365 "SAGE" "ENERGY INTO ALL KINDS OF PRECURSOR ARTIFACTS THAT HAVE LAIN DORMANT FOR YEARS.") + ) + +("sagevb26" :hint #x90d + (0 "SAGE" "USE YOUR GOGGLES TO VIEW YOUR PROGRESS DURING THE ADVENTURE.") + ) + +("sagevb27" :hint #x90e + (1 "SAGE" "YOU CAN JUMP ONCE, THEN JUMP AGAIN IN THE AIR TO REACH EVEN HIGHER LEDGES.") + ) + +("sagevb28" :hint #x90f + (0 "SAGE" "WHEN YOU'RE SURROUNDED BY ENEMIES, USE YOUR SPIN KICK.") + ) + +("sagevb29" :hint #x910 + (0 "SAGE" "THAT'S NOT A SPIN KICK! TRY AGAIN.") + ) + +("sagevb30" :hint #x911 + (0 "SAGE" "COME ON, JAK! DO A SPIN KICK.") + ) + +("sagevb31" :hint #x912 + (0 "SAGE" "GOOD WORK. USE THE SPIN KICK WHEN YOU WANT A GOOD ALL-ROUND ATTACK.") + ) + +("sagevb32" :hint #x913 + (0 "SAGE" "FOR A STRAIGHT LINE, MOVING ATTACK, USE YOUR FIST TO PUNCH.") + ) + +("sagevb33" :hint #x914 + (0 "SAGE" "THAT'S NOT A PUNCH ATTACK! LET'S SEE YOU PUNCH ALREADY.") + ) + +("sagevb34" :hint #x915 + (0 "SAGE" "JAK! USE A PUNCH.") + ) + +("sagevb35" :hint #x916 + (0 "SAGE" "GREAT JOB. USE THE PUNCH TO CLOSE DISTANCE QUICKLY IN A TOUGH SPOT.") + ) + +("sagevb36" :hint #x917 + (0 "SAGE" "SOMETIMES YOU'LL WANT TO HIT THINGS WITH A GREATER FORCE.") + (218 "SAGE" "TO BREAK ONE OF THESE BOXES, YOU SHOULD JUMP IN THE AIR") + (420 "SAGE" "AND THEN DIVE DOWN ONTO IT, HANDS FIRST.") + ) + +("sagevb37" :hint #x918 + (0 "SAGE" "WHEN YOU GET SOME CONFIDENCE, TRY USING SOME OF YOUR MOVES IN COMBINATIONS.") + ) + +("sagevb38" :hint #x919 + (0 "SAGE" "YOU CAN'T COME BACK THROUGH THE WARP GATE UNTIL YOU FIND") + (168 "SAGE" "ALL 4 POWER CELLS ON THIS ISLAND.") + ) + +("sagevb39" :hint #x91a + (0 "SAGE" "GREAT! YOU FOUND ALL OF THE POWER CELLS ON THE ISLAND.") + (269 "SAGE" "COME BACK TO THE WARP GATE SO I CAN BRING YOU BACK TO THE LAB. HURRY UP!") ) ;; ----------------- @@ -296,6 +558,10 @@ (0 "JAK'S UNCLE" "I NEED MORE PRECURSOR ORBS.") ) +("EXP-LO1A" :hint #x0 + (0 "JAK'S UNCLE" "(MUTTERS)") + ) + ("FAR-AM01" :hint #x0 (0 "FARMER" "(SNORES) HERE, BESSIE... HERE, BESSIE BESSIE... THAT'S A GOOD GIRL...") ) @@ -530,48 +796,6 @@ (156 "DAXTER" "LET'S GO TALK TO HIM!") ) -;; ----------------- -;; oracle -;; ----------------- - -("oracle-intro-1" - (0 "ORACLE" "WHO AWAKENS THE ORACLE?") - (75) - (81 "ORACLE" "WAIT, ONE OF YOU HAS THE LIGHT WITHIN.") - (198) - (206 "ORACLE" "FROM BEFORE TIME, I HAVE WATCHED AND WAITED FOR THE TRUE HERO TO RETURN.") - (390) - (395 "ORACLE" "PRESENT TO ME 120 PRECURSOR ORBS FOR EACH POWER CELL I CONTAIN.") - ) - -("oracle-left-eye-1" - (0 "ORACLE" "YOU HAVE PROVEN YOURSELF WORTHY. HERE IS A POWER CELL.") - ) - -("oracle-left-eye-2" - (0 "ORACLE" "FOR YOUR SACRIFICE, I OFFER YOU A POWER CELL.") - ) - -("oracle-left-eye-3" - (0 "ORACLE" "FOR YOUR EFFORT, A POWER CELL IS THE REWARD.") - ) - -("oracle-reminder-1" - (0 "ORACLE" "BRING TO ME 120 PRECURSOR ORBS AND I WILL AWARD YOU A POWER CELL.") - ) - -("oracle-right-eye-1" - (0 "ORACLE" "FOR YOUR GIFT, ANOTHER POWER CELL IS YOURS.") - ) - -("oracle-right-eye-2" - (0 "ORACLE" "HERE IS ANOTHER POWER CELL FOR YOUR QUEST.") - ) - -("oracle-right-eye-3" - (0 "ORACLE" "YOU HAVE OBTAINED ANOTHER POWER CELL.") - ) - ;; ----------------- ;; beach ;; ----------------- @@ -640,6 +864,10 @@ (0 "BIRDWATCHER" "OH LOOK, A MUCKY-MUCK.") ) +("BIR-am08" :hint #x0 + (0 "BIRDWATCHER" "HERE, BIRDIE BIRDIE...") + ) + ("CHI-AM01" :hint #x0 (0 "MAYOR" "THIS IS A CATASTROPHE. A CATASTROPHE I SAY!") ) @@ -871,6 +1099,10 @@ (0 "DAXTER" "YEAH HA HA! LET'S DO THAT AGAIN!") ) +("sksp0021" :hint #x0 + (0 "DAXTER" "THERE'RE THOSE SEAGULLS AGAIN. LET'S GET 'EM!!") + ) + ("sksp0022" :hint #x26a (0 "DAXTER" "YEAH HA HA HA HA HA!! WOO HO HO HO!") ) @@ -897,6 +1129,10 @@ (0 "DAXTER" "QUICK! WE HAVE TO GET TO THE POWER CELL BEFORE THE PELICAN SCOOPS IT UP AGAIN.") ) +("sksp0028" :hint #x0 + (0 "DAXTER" "KICK THE EGG! HEE-HEE! KICK IT! KICK IT!") + ) + ("sksp0029" :hint #x275 (0 "DAXTER" "EH, WE MIGHT WANNA TALK TO THE BIRDWATCHER") (125 "DAXTER" "AND SEE IF WE SCRAMBLED THAT FLUT FLUT EGG.") @@ -1322,10 +1558,613 @@ (0 "DAXTER" "THERE'S SCOUT FLIES OUT HERE, TOO!") ) +;; ----------------- +;; village2 +;; ----------------- + +("ASSTLP23" :hint #x0 + (0 "KEIRA" "NOW, HOW DID HE GET THAT LEVITATOR TO WORK?") + ) + +("ASSTLP24" :hint #x0 + (0 "KEIRA" "NOW, EVEN WITH POWER CELLS, WILL WE HAVE ENOUGH POWER?") + ) + +("GAM-AM01" :hint #x0 + (0 "GAMBLER" "HEY, TWENTY-TO-ONE ODDS AIN'T SO BAD!") + ) + +("GAM-AM02" :hint #x0 + (0 "GAMBLER" "NO, IT WAS A SURE THING!") + ) + +("GAM-AM03" :hint #x0 + (0 "GAMBLER" "HEH HEH HEH... I'M GONNA HIT THE JACKPOT NEXT TIME!") + ) + +("GAM-AM04" :hint #x0 + (0 "GAMBLER" "HEH! IF I HAD AN ORB FOR EVERY MISSED OPPORTUNITY...!") + ) + +("GAM-AM05" :hint #x0 + (0 "GAMBLER" "HEY! BARRELS COULD COME BACK IN STYLE!") + ) + +("GAM-AM06" :hint #x0 + (0 "GAMBLER" "OH... I NEED A LUCKY BREAK.") + ) + +("GAM-AM07" :hint #x0 + (0 "GAMBLER" "AW, WHAT ARE THE ODDS OF MOVIN' TO A TOWN UNDER ATTACK?") + ) + +("GAM-AM08" :hint #x0 + (0 "GAMBLER" "I THOUGHT I HAD A GOOD TIP!") + ) + +("GAM-AM09" :hint #x0 + (0 "GAMBLER" "ANOTHER DAY, ANOTHER WAGER.") + ) + +("GAM-AM10" :hint #x0 + (0 "GAMBLER" "I BET NO ONE CAN TAKE ON THAT MONSTER.") + ) + +("GAM-AM11" :hint #x0 + (0 "GAMBLER" "HUH-HUH... I SHOULD CASH OUT AND MOVE ON.") + ) + +("GAM-AM12" :hint #x0 + (0 "GAMBLER" "EH, SOMETIMES YOU JUST CAN'T WIN.") + ) + +("GAM-AM13" :hint #x0 + (0 "GAMBLER" "HEY, WHAT ARE YOU LAUGHIN' AT? DO I AMUSE YOU?") + ) + +("GEO-AM01" :hint #x0 + (0 "GEOLOGIST" "MM, INTERESTING STRATA...") + ) + +("GEO-AM02" :hint #x0 + (0 "GEOLOGIST" "POOR LITTLE MOLES...") + ) + +("GEO-AM03" :hint #x0 + (0 "GEOLOGIST" "INTERESTING...") + ) + +("GEO-AM04" :hint #x0 + (0 "GEOLOGIST" "GOOD LUCK, BOYS!") + ) + +("GEO-AM05" :hint #x0 + (0 "GEOLOGIST" "NASTY LURKERS...") + ) + +("GEO-AM06" :hint #x0 + (0 "GEOLOGIST" "ROCKS HAVE FEELINGS, TOO...") + ) + +("GEO-AM07" :hint #x0 + (0 "GEOLOGIST" "HANG IN THERE, LITTLE ONES...") + ) + +("GEO-AM08" :hint #x0 + (0 "GEOLOGIST" "NOW I CAN GET BACK TO MY RESEARCH!") + ) + +("GEO-LO01" :hint #x0 + (0 "GEOLOGIST" "I'VE GOT TO GET BACK TO MY RESEARCH.") + ) + +("GEO-LO02" :hint #x0 + (0 "GEOLOGIST" "HM, THIS STONE IS VERY OLD...") + ) + +("SAGELP20" :hint #x0 + (0 "SAGE" "HMM...") + ) + +("SAGELP21" :hint #x0 + (0 "SAGE" "THE LURKERS MUST BE STOPPED.") + ) + +("SAGELP22" :hint #x0 + (0 "SAGE" "I SEE...") + ) + +("SAGELP23" :hint #x0 + (0 "SAGE" "NO...") + ) + +("SAGELP24" :hint #x0 + (0 "SAGE" "WHAT COULD HAVE HAPPENED TO THEM?") + ) + +("WAR-LO1A" :hint #x0 + (0 "WARRIOR" "(SOBBING)") + ) + +("WAR-LO1B" :hint #x0 + (0 "WARRIOR" "(SOBS)") + ) + +("WAR-LO1C" :hint #x0 + (0 "WARRIOR" "(BLOWS NOSE AND SPUTTERS)") + (100 "WARRIOR" "(CONTINUES SOBBING)") + ) + +("assistant-village2-introduction" + (60 "SAGE" "WHOA!") + (120) + (165 "SAGE" "I DON'T THINK I'LL EVER GET USED TO THAT TELEPORTER TINGLING SENSATION.") + (280) + (300 "SAGE" "...HEY!") + (330 :offscreen "SAGE" "IT LOOKS LIKE THE BLUE SAGE THREW A PARTY.") + (410 "KEIRA" "OH MY! ROCK VILLAGE IS ON FIRE!") + (500 "SAGE" "ONE HECK OF A PARTY.") + (565 "KEIRA" "NO, NO! I MEAN ROCK VILLAGE IS BEING BOMBARDED WITH FLAMING BOULDERS!") + (720) + (810 "KEIRA" "OH! AND IT LOOKS LIKE THE BLUE SAGE IS WORKING ON A LEVITATION MACHINE TO MOVE THEM.") + (960 :offscreen "KEIRA" "ASSUMING IT'S OPERATIONAL,WE'RE GONNA NEED POWER CELLS TO FUEL IT.") + (1070 "KEIRA" "I GUESS YOU TWO ARE GOING TO HAVE TO FIND SOME MORE.") + (1145 "SAGE" "WE'D BETTER TAKE A LOOK AT HIS NOTES.") + (1220 :offscreen "SAGE" "JAK,GO CHECK ON THE VILLAGERS, THEN COME BACK AND GIVE US AN UPDATE.") + (1370 :offscreen "SAGE" "AND TAKE THE FURBALL WITH YOU!") + ) + +("assistant-village2-introduction-flutflut" + (22 "KEIRA" "BACK AGAIN, BOYS?") + (66) + (75 "DAXTER" "\"BOY\"?") + (100) + (110 "DAXTER" "HEY BABE, I'M A FULL-GROWN...") + (166) + (188 "DAXTER" "AH...") + (210) + (222 "DAXTER" "SOMETHIN'... SOMETHIN' FUZZY.") + (300 "KEIRA" "OH, GUESS WHAT? WITH PERMISSION FROM OUR VILLAGE BIRD-WATCHER,") + (414 "KEIRA" "I'VE OUTFITTED THE BABY FLUT-FLUT WITH A RIDING SADDLE.") + (508) + (528 "KEIRA" "IT APPEARS THERE'S A PRECURSOR TRANS-PAD IN THE BOGGY SWAMP.") + (644) + (652 "KEIRA" "IF YOU CAN FIND IT, I'LL SEND YOU THE FLUT-FLUT IN FULL RIDING REGALIA.") + (778 "KEIRA" "HER LONG JUMP MIGHT COME IN HANDY WHEN YOU'RE CROSSING THE TAR.") + (870) + ) + +("assistant-village2-introduction-robbers" + (30 "KEIRA" "HEY, YOU TWO!") + (66 "KEIRA" "I KNOW WHERE YOU CAN FIND ANOTHER POWER CELL!") + (132) + (144 "KEIRA" "ACCORDING TO HIS NOTES,") + (182 "KEIRA" "A COUPLE OF DAYS AGO FLYING LURKERS STOLE ONE FROM THE BLUE SAGE,") + (292 "KEIRA" "AND FLEW OFF INTO THE PRECURSOR BASIN.") + (370 "KEIRA" "I'LL BET YOU COULD RUN THOSE LURKERS DOWN WITH YOUR ZOOMER") + (440 "KEIRA" "UNTIL YOU FIND THE ONE WITH THE POWER CELL.") + (504 "KEIRA" "YOU'LL FIND THE ZOOMER ON THE TRANS-PAD NEAR THE ENTRANCE TO THE PRECURSOR BASIN.") + (608) + ) + +("assistant-village2-introduction-room" + (36 "KEIRA" "APPARENTLY THE PRECURSOR STRUCTURE JUST OFF THE COAST LEADS TO AN UNDERWATER LOST CITY.") + (191) + (210 "KEIRA" "THE BLUE SAGE HAS BEEN TRYING TO FIGURE OUT HOW HE CAN BRING ONE OF THE CHAMBERS TO THE SURFACE.") + (338 "KEIRA" "BUT HE WAS NEVER SUCCESSFUL.") + (395 "KEIRA" "YOU SHOULD CHECK IT OUT!") + (424) + (436 "DAXTER" "UH... AREN'T THERE A LOT OF, UM...") + (495 "DAXTER" "LURKER SHARKS IN THAT WATER?") + (555 "KEIRA" "WHY? ARE YOU SCARED?") + (635 "DAXTER" "ME? OF COURSE NOT!") + (702 "DAXTER" "JUST LOOKIN' OUT FOR JAK HERE!") + (752 "DAXTER" "YOU, UH, HEH...") + (782) + (800 "DAXTER" "YOU KNOW WHAT A CHICKEN HE CAN BE.") + (845) + (870 "KEIRA" "WELL,IF YOU SWIM OUT OVER THE CORAL REEF, I DOUBT THE LURKER SHARKS WILL BOTHER YOU.") + (1000 "KEIRA" "THEY DON'T LIKE SHALLOW WATER.") + ) + +("assistant-village2-reminder-1-flutflut" + (34 "KEIRA" "I'M SURE THE FLUT-FLUT COULD BE OF USE TO YOU IN THE SWAMP.") + (118 "KEIRA" "FIND THE TRANS-PAD AND I'LL TELEPORT HER TO YOU.") + (200) + ) + +("assistant-village2-reminder-1-robbers" + (26 "KEIRA" "I'LL TELEPORT YOUR ZOOMER TO YOU BY THE PRECURSOR BASIN,") + (114 "KEIRA" "SO YOU CAN CHASE DOWN THOSE FLYING LURKERS WE WERE TALKING ABOUT.") + (230) + ) + +("assistant-village2-reminder-1-room" + (45 "KEIRA" "DID YOU SWIM OUT TO THE LOST PRECURSOR CITY YET?") + (122 "KEIRA" "YOU SHOULD REALLY TRY AND RAISE THE ROOM THE BLUE SAGE WAS AFTER.") + (230) + ) + +("assistant-village2-resolution" + (40 "KEIRA" "GREAT!") + (60 "KEIRA" "YOU HAVE THE CELLS FOR THE MACHINE!") + (124 "KEIRA" "THEY OUGHT TO PROVIDE ENOUGH POWER TO LIFT THAT BOULDER.") + (200) + (288 "KEIRA" "THERE WE GO!") + (326) + (340 "KEIRA" "NOW, BE CAREFUL FACING THAT MONSTER LURKER AT THE TOP.") + (430) + (442 "DAXTER" "WAIT!") + (470 "DAXTER" "UH...") + (500 "DAXTER" "I'LL STAY HERE AND PROTECT KEIRA!") + (563) + (574 "DAXTER" "JAK, I THINK YOU'RE READY TO HANDLE THAT MONSTER WITHOUT ME.") + (662) + (672 "KEIRA" "OH, REALLY HEROIC OF YOU.") + (728) + ) + +("asstvb28" :hint #x36f + (0 "KEIRA" "HEY! DON'T FORGET ABOUT THE SAGE AND ME!") + (190 "KEIRA" "YOU HAVE TO TURN ON THE TELEPORT GATE TO LET US THROUGH!") + (380 "KEIRA" "IT'S IN THE BLUE SAGE'S LAB, BY THE END OF FIRE CANYON.") + (570 "KEIRA" "IF YOU DON'T LET US THROUGH, THEN WE CAN'T HELP YOU!") + ) + +("asstvb29" :hint #x370 + (0 "KEIRA" "HEY! WE'RE STILL WAITING!") + (185 "KEIRA" "TURN ON THE TELEPORT GATE!") + ) + +("asstvb30" :hint #x371 + (1 "KEIRA" "HEY! WE CAN'T COME THROUGH UNTIL THE TELEPORT GATE'S ON!") + ) + +("asstvb71" :hint #x36c + (16 "KEIRA" "YOU DON'T HAVE ENOUGH POWER CELLS TO POWER THE BLUE SAGE'S MACHINE.") + (200 "KEIRA" "WE CAN'T LIFT THAT BOULDER UNTIL YOU COLLECT 45 POWER CELLS.") + ) + +("asstvb72" :hint #x36d + (0 "KEIRA" "UNTIL WE FIND OUT WHY THE BLUE SAGE DISAPPEARED, YOU'RE GOING TO NEED TO COLLECT 45 POWER CELLS TO FUEL HIS MACHINE.") + (410 "KEIRA" "GO GET 'EM!") + ) + +("gambler-introduction-1" + (30 "GAMBLER" "AW, NO. NOT ANOTHER \"HERO\".") + (100 "GAMBLER" "I LOST MY SHORTS ON THIS SO-CALLED HERO'S BIG FIGHT") + (190 "GAMBLER" "AGAINST THE MONSTER UP THERE.") + (235) + (246 "GAMBLER" "TRUST ME, THE SMART MONEY'S ON THE MONSTER.") + (320) + (350 "GAMBLER" "THAT WAGER PRETTY MUCH TAPPED ME OUT!") + (420 "GAMBLER" "SO'S, I GOT A PROPOSAL.") + (476 "GAMBLER" "BRING ME 90 ORBS TO GET ME BACK ON MY FEET AND OUT OF THIS BARREL,") + (570 "GAMBLER" "AND I'LL GIVE YOU A POWER CELL IN RETURN.") + (654 "GAMBLER" "AND IF YOU'RE GAME, I DO HAVE ONE MORE BET ONLINE.") + (740 :offscreen "GAMBLER" "MY BIG COMEBACK!") + (800 :offscreen "GAMBLER" "BEAT THE RECORD TIME RACING DEAD MAN'S GORGE IN THE PRECURSOR BASIN,") + (904 :offscreen "GAMBLER" "AND I'LL GET A PRETTY PAYOFF!") + (950 "GAMBLER" "FOR THAT, I'LL GIVE YOU ANOTHER POWER CELL.") + ) + +("gambler-reminder-money" + (10 "GAMBLER" "HEY. DON'T FORGET ABOUT THOSE ORBS I NEED.") + (10 "GAMBLER" "90'LL GET YOU ONE. ONE POWER CELL, THAT IS!") + ) + +("gambler-reminder-race" + (0 "GAMBLER" "WELL, WHAT ARE YOU WAITIN' FOR?") + (80 "GAMBLER" "THIS BARREL'S GETTIN' ITCHY!") + (120 "GAMBLER" "BEAT THE BEST TIME DOWN AT DEAD MAN'S GORGE,") + (188 "GAMBLER" "AND WE'LL BOTH BE WINNERS!") + ) + +("gambler-resolution-money" + (0 "GAMBLER" "HEH HEH HEH! OH, YEAH!") + (50 "GAMBLER" "THESE ORBS'LL HELP ME WIN MY WAY BACK OUTTA THIS BARREL!") + (174 "GAMBLER" "HERE'S THE POWER CELL I PROMISED!") + ) + +("gambler-resolution-race" + (0 "GAMBLER" "OH, GREAT MOVES, KID! I KNEW THAT TIME RECORD WOULD FALL.") + (140 "GAMBLER" "NOW HERE'S YOUR POWER CELL, AND I CAN GO COLLECT MY BIG PAYOFF!") + ) + +("geologist-introduction" + (30 "GEOLOGIST" "YOU TWO LOOK LIKE A COUPLE OF CAPABLE FELLOWS.") + (98 "GEOLOGIST" "I'VE GOT A RESEARCH PROJECT GOING,") + (152 "GEOLOGIST" "AND MAYBE YOU COULD HELP ME OUT.") + (198) + (208 "DAXTER" "HEY, WE'RE THE ONES ON A BIG QUEST HERE.") + (276 "DAXTER" "WE ASK YOU FOR HELP.") + (326 "GEOLOGIST" "WELL, PERHAPS WE CAN HELP EACH OTHER.") + (386) + (402 "GEOLOGIST" "I'VE BEEN STUDYING THE BURROWING HABITS OF LIGHTING MOLES") + (476 "GEOLOGIST" "IN THE PRECURSOR BASIN NEXT TO OUR VILLAGE FOR YEARS.") + (554) + (569 :offscreen "GEOLOGIST" "BUT NOW THOSE AWFUL LURKERS HAVE SCARED THE MOLES TO THE SURFACE!") + (684 :offscreen "GEOLOGIST" "AND SINCE THEY'RE BLIND AS BATS, THEY CAN'T FIND THEIR WAY BACK UNDERGROUND.") + (808) + (822 "GEOLOGIST" "IF YOU COULD HERD THEM BACK INTO THEIR BURROWING TUNNELS,") + (890 "GEOLOGIST" "YOU MIGHT JUST SAVE THEIR LIVES.") + (942) + (958 "GEOLOGIST" "I'VE GOT A POWER CELL THAT SAYS YOU CAN DO IT.") + (1028) + (1040 "DAXTER" "YEAH, LIGHTNING MOLES... WE CARE.") + (1144) + (1164 "DAXTER" "MAYBE FOR TWO POWER CELLS!") + (1232 "GEOLOGIST" "NICE TRY. BUT I WOULD BE WILLING TO PART WITH ANOTHER POWER CELL") + (1348 "GEOLOGIST" "IF YOU TWO FIND ME 90 PRECURSOR ORBS FOR MY RESEARCH EQUIPMENT.") + (1460 "GEOLOGIST" "FAIR ENOUGH?") + (1506) + ) + +("geologist-reminder-moles" + (29 "GEOLOGIST" "DID YOU HERD THOSE LIGHTNING MOLES BACK UNDERGROUND?") + (108) + (125 "GEOLOGIST" "YOU SHOULD HURRY - THE DIRECT SUNLIGHT ISN'T GOOD FOR THEM!") + ) + +("geologist-reminder-money" + (30 "GEOLOGIST" "I NEED THOSE ORBS IF I'M GOING TO CONTINUE MY RESEARCH!") + ) + +("geologist-resolution-moles" + (34 "GEOLOGIST" "THANK YOU FOR SAVING THOSE MOLES, THAT'S AWFULLY GOOD OF YOU.") + (136) + (156 "GEOLOGIST" "HERE'S A POWER CELL TO HELP YOU OUT.") + (224) + (246 "GEOLOGIST" "NOW I CAN GET BACK TO MY RESEARCH!") + ) + +("geologist-resolution-money" + (30 "GEOLOGIST" "OH, YOU HAVE THE ORBS!") + (80) + (80 "GEOLOGIST" "HERE'S THE POWER CELL WE AGREED UPON.") + (154) + ) + +("sage-bluehut-introduction-crop-dusting" + (0 "SAGE" "WELL, THE SITUATION HERE STINKS WORSE THAN A LURKER'S ARMPIT.") + (144) + (158 "SAGE" "BEFORE BLUE SAGE'S DISAPPEARANCE, HE JOURNALED SIGNIFICANT TROUBLE IN ALL OF THE SURROUNDING AREAS.") + (360 "SAGE" "OF PARTICULAR INTEREST TO ME IS THE DARK ECO INFECTION") + (490 "SAGE" "OF SOME INNOCENT PLANTS IN THE PRECURSOR BASIN.") + (600 :offscreen "SAGE" "KEIRA WILL TELEPORT YOUR A-GRAV ZOOMER TO THE NEAREST TRANS-PAD.") + (720 "SAGE" "RIDE THE ZOOMER TO A GREEN ECO VENT, AND THEN CARRY THE GREEN ECO TO THE CORRUPTED PLANTS.") + (896 "SAGE" "THAT SHOULD HEAL THEM.") + (954 "SAGE" "DON'T MISS A SINGLE PLANT, OR THE INFECTED ONES WILL SLOWLY RE-INFECT THE HEALTHY ONES.") + (1155) + (1195 :offscreen "SAGE" "AND, DAXTER...") + (1260 "SAGE" "START CLEANING UP IN HERE!") + (1310 "SAGE" "AND DON'T FORGET THE CORNERS!") + ) + +("sage-bluehut-introduction-prec-arm" + (0 "SAGE" "WELL, I HOPE YOU'VE PACKED A LUNCH.'CAUSE WE'RE JUST GETTING STARTED.") + (130) + (142 "SAGE" "ACCORDING TO THE BLUE SAGE'S NOTES,") + (208 "SAGE" "LURKERS HAVE INFESTED THE SWAMP ACROSS THE BAY.") + (300) + (310 :offscreen "SAGE" "APPARENTLY, THEY'RE PLANNING TO USE A DIRIGIBLE") + (420 :offscreen "SAGE" "TO LIFT AN IMPORTANT PRECURSOR ARTIFACT FROM THE MUCK.") + (530) + (552 :offscreen "SAGE" "YOU'RE GOING TO HAVE TO GET OVER THERE TO DISLODGE THEIR TETHERS.") + (660) + (688 "SAGE" "WHO KNOWS WHAT THEY MIGHT WANT WITH THE ARTIFACT,") + (764 "SAGE" "BUT LIKE ORANGE STUFF HERE'S BREATH, IT JUST CAN'T BE GOOD.") + ) + +("sage-bluehut-reminder-1-crop-dusting" + (32 "SAGE" "MY EYES MUST BE DECEIVING ME!") + (86) + (100 "SAGE" "BECAUSE I KNOW...") + (145 "SAGE" "...THAT THE TWO OF YOU ARE DEEP IN THE PRECURSOR BASIN,") + (240 "SAGE" "SAVING THE DARK ECO-INFECTED PLANTS.") + ) + +("sage-bluehut-reminder-1-prec-arm" + (0 "SAGE" "WHAT ARE YOU DOING BACK HERE ALREADY?") + (70) + (88 "SAGE" "I CAN SEE FROM THE BALCONY") + (132 :offscreen "SAGE" "THAT THE LURKER DIRIGIBLE IS STILL FLOATING ABOVE THE SWAMP.") + (260 "SAGE" "YOU OBVIOUSLY HAVEN'T COMPLETED YOUR TASK.") + (340) + (364 "SAGE" "GET MOVING!") + (400) + ) + +("warrior-introduction" + (30 "WARRIOR" "OHH... MY ACHING HEAD.") + (128) + (140 "DAXTER" "I DOUBT THAT'S ONE OF YOUR VITAL ORGANS!") + (140 "DAXTER" "WALK IT OFF, TOUGH GUY!") + (264 "WARRIOR" "OH, SURE, I WAS TOUGH ONCE.") + (264 "WARRIOR" "MAYBE EVEN THE TOUGHEST OF THEM ALL.") + (264 "WARRIOR" "I SINGLE-HANDEDLY DEFENDED THIS VILLAGE FROM THOSE HORRID CREATURES FOR ALMOST A YEAR!") + (600 :offscreen "WARRIOR" "THEN THAT HORRIBLE MONSTER ARRIVED AND COMMENCED THE BOULDER BOMBARDMENT.") + (600 :offscreen "WARRIOR" "SO FULL OF VALOR, ARMOR SHINING IN THE SUN...") + (944 "WARRIOR" "I CLIMBED THE HILL TO TAKE HIM ON...!") + (1030) + (1050 "WARRIOR" "BUT HE POUNDED ME LIKE ONE TENDERIZES A YAKOW STEAK.") + (1050 :offscreen "WARRIOR" "AFTER MY LAST FAILURE, HE SEALED THE PASSWAY TO HIS ROOST WITH A 30-TON BOULDER,") + (1170) + (1184 "DAXTER" "HAVE YOU TRIED ATTACKING HIM WITH YOUR MELODRAMA?") + (1184 "DAXTER" "'CAUSE IT'S KILLIN' ME!") + (1520 :offscreen "WARRIOR" "LEAVING NO WAY FOR ANYONE TO CHALLENGE HIM AGAIN.") + (1650) + (1680 "WARRIOR" "SO, OUR SAGE, A MASTER OF BLUE ECO AND A MECHANICAL GENIUS, DEVISED A MACHINE") + (1900 "WARRIOR" "CAPABLE OF LIFTING THE BOULDER OUT OF THE WAY...!") + (2000) + (2040 "WARRIOR" "BUT ALAS, HE DISAPPEARED BEFORE WE HAD A CHANCE TO TURN IT ON.") + (2200) + (2232 "WARRIOR" "AND HE TOOK ALL OF HIS POWER CELLS WITH HIM.") + (2330) + (2366 "WARRIOR" "AT LEAST I WAS ABLE TO PULL ENOUGH PONTOONS OUT OF OUR BRIDGE TO PREVENT THAT MONSTER FROM COMING DOWN HERE TO DO ME HARM.") + (2560 "DAXTER" "YEAH, GOOD, GOOD JOB, TOUGH GUY. BUT, UM...") + (2650 "DAXTER" "WE'RE GONNA NEED YOU TO, UH... PUT 'EM BACK, AND STUFF.") + (2770 "WARRIOR" "OH, SURE! AND SEAL MY DOOM?") + (2880 "WARRIOR" "(SIGHS)") + (2960 "WARRIOR" "ALRIGHT. FINE.") + (2960 "WARRIOR" "BRING ME 90 PRECURSOR ORBS AND I'LL LET THE PONTOONS LOOSE.") + (3120) + (3180 "WARRIOR" "BUT I'M NOT GOING TO FIGHT THAT MONSTER AGAIN!") + ) + +("warrior-reminder-1" + (36 "WARRIOR" "TAKE ALL THE TIME YOU WANT BRINGING ME THE PRECURSOR ORBS - I'M NOT LOOKING TO FIX THE PONTOON BRIGE ANY TIME SOON.") + ) + +("warrior-resolution" + (30 "WARRIOR" "OH.") + (50) + (76 "WARRIOR" "WONDERFUL.") + (108) + (120 "WARRIOR" "YA BROUGHT ME THE PRECURSOR ORBS. (SIGHS)") + (228) + (246 "WARRIOR" "ALL RIGHT.") + (266) + (288 "WARRIOR" "I'LL FIX THE BRIDGE.") + (324) + (342 "WARRIOR" "BUT DON'T ASK ME TO GET INVOLVED WITH THAT CREATURE AGAIN!") + (470) + ) + ;; ----------------- ;; swamp ;; ----------------- +("BIL-AM01" :hint #x0 + (0 "BILLY" "I JUST LOVE THE MUD.") + ) + +("BIL-AM02" :hint #x0 + (0 "BILLY" "DARN SWAMP RATS.") + ) + +("BIL-AM03" :hint #x0 + (0 "BILLY" "I NEED A GOOD DRAUGHT OF MAMA'S MEDICINE.") + ) + +("BIL-AM04" :hint #x0 + (0) + ) + +("BIL-AM05" :hint #x0 + (0 "BILLY" "I NEED ME SOME BROWN MEDICINE.") + ) + +("BIL-AM06" :hint #x0 + (0 "BILLY" "I NEED ME SOME SUMMER COOLANT.") + ) + +("BIL-AM07" :hint #x0 + (0 "BILLY" "DARN, THIS HEAT'S GIVIN' ME THE PRICKLIES.") + ) + +("BIL-AM08" :hint #x0 + (0 "BILLY" "DARN... SEAT'S GIVIN' ME A RASH.") + ) + +("BIL-AM1A" :hint #x0 + (0 "BILLY" "MM-MM! I JUST LOVE THE MUD!") + ) + +("BIL-AM2A" :hint #x0 + (0 "BILLY" "DARN SWAMP RATS!") + ) + +("BIL-AM2B" :hint #x0 + (0 "BILLY" "DARN SWAMP RATS!") + ) + +("BIL-LO01" :hint #x0 + (0 "BILLY" "FARTHY!") + ) + +("BIL-LO02" :hint #x0 + (0 "BILLY" "SUI, SUI, SUI, SUI, SOO-EE!") + ) + +("BIL-LO03" :hint #x0 + (0 "BILLY" "SUI, SUI, SOO-EE!") + ) + +("BIL-LO1A" :hint #x0 + (0 "BILLY" "FARTHY!") + ) + +("BIL-LO2A" :hint #x0 + (0 "BILLY" "SUI, SUI, SOO-EE!") + ) + +("BIL-LO2B" :hint #x0 + (0 "BILLY" "SOO-EE! SOO-EE!") + ) + +("BIL-TA01" :hint #x0 + (0 "BILLY" "GET 'EM!") + ) + +("BIL-TA02" :hint #x0 + (0 "BILLY" "NICE SHOT!") + ) + +("BIL-TA03" :hint #x0 + (0 "BILLY" "OVER THAR!") + ) + +("BIL-TA04" :hint #x0 + (0 "BILLY" "AW, DANG.") + ) + +("BIL-TA05" :hint #x0 + (0 "BILLY" "RAT GOT A SNACK.") + ) + +("BIL-TA08" :hint #x0 + (0 "BILLY" "GOTTEM.") + ) + +("BIL-TA09" :hint #x0 + (0 "BILLY" "YEEEEE-HAW!") + ) + +("BIL-TA1A" :hint #x0 + (0 "BILLY" "GIT 'EM!") + ) + +("BIL-TA2A" :hint #x0 + (0 "BILLY" "NICE SHOT!") + ) + +("BIL-TA3A" :hint #x0 + (0 "BILLY" "OVER THAR.") + ) + +("BIL-TA4A" :hint #x0 + (0 "BILLY" "DANG!") + ) + +("BIL-TA4B" :hint #x0 + (0 "BILLY" "DANG!") + ) + +("BIL-TA5A" :hint #x0 + (0 "BILLY" "RAT GOT A SNACK!") + ) + +("SKSP009F" :hint #x0 + (0 "DAXTER" "GET SOME! GET SOME! HA HA HA!") + ) + +("asstvb21" :hint #x328 + (0 "KEIRA" "GOOD WORK! AREN'T YOU GUYS HAPPY YOU SAVED OUR LITTLE FLUT-FLUT FRIEND?") + (314 "KEIRA" "SHE MAY COME IN HANDY AGAIN SOMETIME.") + (450 "KEIRA" "NOW, GO BACK TO THE TRANS-PAD, AND I'LL BRING HER HOME.") + ) + ("billy-accept" (5 "BILLY" "GOOD! THOSE RATS WILL BE BACK ANYTIME.") (109 "BILLY" "SHOOT ALL THEM RATS, AND KEEP 'EM FROM EATING AT LEAST ONE OF THEM SNACKS.") @@ -1338,8 +2177,8 @@ (497) (519 "BILLY" "WHAT'S A BATHTUB? ANYWAY I GOT BIGGER PROBLEMS NOW...") (677) - (691 "BILLY" "SEEMS SOME NASTY LURKER VARMINTS ARE GROUSIN' ABOUTS SNATCHIN' EVERYTHING THEY CAN GET THEIR GRUBBY LITTLE PAWS ON.") - (910 "BILLY" "AND SCARED AWAY MY PET HIPHOG, FARTHY.") + (691 "BILLY" "SEEMS SOME NASTY LURKER VARMINTS ARE GROUSIN' ABOUTS, SNATCHIN' EVERYTHING THEY CAN GET THEIR GRUBBY LITTLE PAWS ON.") + (910 "BILLY" "AND SCARIN' AWAY MY PET HIPHOG, FARTHY.") (1000 "BILLY" "HE'S BEEN MISSIN' FOR NIGH ON TO A COON'S AGE.") (1136 :offscreen "BILLY" "I'VE BEEN PUTTIN' OUT HIS FAVORITE SNACK, BUT THOSE ORNERY SWAMP RATS KEEP STEALIN' EM!") (1318 :offscreen "BILLY" "IF YOU COULD KEEP THOSE PESKY CRITTERS AWAY LONG ENOUGH, I JUST KNOW FARTHY WOULD SMELL THEM VITTLES AND COME BACK!") @@ -1359,6 +2198,686 @@ (1 "BILLY" "WELL FRY MY HIDE! YOU SURE KNOW HOW TO SHOOT! THANKS A HEAP FOR THE HELP.") ) +("sagevb04" :hint #x366 + (0 "SAGE" "GOOD WORK, JAK! YOUR UNCLE WOULD BE PROUD.") + (345 "SAGE" "THAT WAS A GIANT ARM FROM A PRECURSOR ROBOT. I'VE NEVER SEEN ONE IN SUCH GOOD CONDITION!") + (720 "SAGE" "I CAN'T IMAGINE WHAT THE LURKERS WANTED WITH IT, BUT WE SURE DIDN'T WANT THEM TO GET IT.") + (1110 "SAGE" "IF YOU KEEP THIS SUCCESS UP... NAH, YOU'LL STILL FALL SHORT OF \"HERO\".") + (1455 "SAGE" "BUT KEEP TRYING. IT'S ENDEARING.") + ) + +("sksp0138" :hint #x352 + (0 "DAXTER" "WE SHOULD SHOOT THOSE BIG BOULDERS HOLDING THE TETHER.") + ) + +("sksp0143" :hint #x0 + (0 "DAXTER" "WAAH! BREAK THE TONGUE'S GRIP!") + ) + +("sksp0144" :hint #x358 + (0 "DAXTER" "SHOOT THOSE RAT NESTS TO STOP THE RATS FROM COMING OUT.") + ) + +("sksp0151" :hint #x0 + (0 "DAXTER" "RUN AWAY, JAK!") + ) + +("sksp0152" :hint #x360 + (0 "DAXTER" "LOOK OUT, JAK! IT'S AN AMBUSH!") + ) + +("sksp0156" :hint #x0 + (0 "DAXTER" "MAYBE WE CAN DUCK THE BATS!") + ) + +("sksp0157" :hint #x0 + (0 "DAXTER" "DID YOU SEE THAT?! ONLY THREE MORE TETHERS TO GO!") + ) + +("sksp0158" :hint #x366 + (0 "DAXTER" "WOW! ONLY TWO MORE TETHERS.") + ) + +("sksp0159" :hint #x367 + (0 "DAXTER" "THAT DIRIGIBLE'S BARELY HANGIN' ON! LET'S FIND THE LAST TETHER!") + ) + +("sksp0160" :hint #x368 + (0 "DAXTER" "HEY! THERE'S THE FLUT-FLUT!") + ) + +;; ----------------- +;; rolling +;; ----------------- + +("asstvb20" :hint #x327 + (0 "KEIRA" "GOOD FLYING! THOSE LURKERS WERE NO MATCH FOR YOUR ZOOMER!") + (320 "KEIRA" "THAT'S ONE MORE POWER CELL!") + ) + +("sagevb03" :hint #x36a + (0 "SAGE" "YOU KEEP ON IMPRESSING ME. BUT THEN MAYBE IT'S JUST BECAUSE I'VE GOT LOW EXPECTATIONS.") + (430 "SAGE" "OKAY, YOUR MOMENT OF GLOATING IS OVER. GET ON WITH IT!") + ) + +("sksp0109" :hint #x335 + (0 "DAXTER" "WOO! WE BEAT THE RECORD TIME!") + ) + +("sksp0112" :hint #x338 + (0 "DAXTER" "LET'S GO GET OUR POWER CELL FROM THE GEOLOGIST.") + ) + +("sksp0113" :hint #x339 + (0 "DAXTER" "THOSE MUST BE THE INFESTED PLANTS OL' LOG-NOGGIN WAS TALKIN' ABOUT.") + ) + +("sksp0114" :hint #x33a + (0 "DAXTER" "WE HAVE TO USE GREEN ECO TO CURE THOSE PLANTS.") + ) + +("sksp0116" :hint #x33c + (0 "DAXTER" "THAT'S ONE OF THOSE FLYING LURKERS! HE MIGHT HAVE A POWER CELL!") + ) + +("sksp0119" :hint #x33f + (0 "DAXTER" "ONE RING DOWN, A BUNCH TO GO!") + ) + +("sksp0120" :hint #x340 + (0 "DAXTER" "HURRY! THERE'S THE NEXT RING!") + ) + +("sksp0121" :hint #x341 + (0 "DAXTER" "QUICK! YOU'VE GOTTA FLY THROUGH EACH RING BEFORE THEY TURN OFF!") + ) + +;; ----------------- +;; sunken +;; ----------------- + +("asstvb22" :hint #x326 + (0 "KEIRA" "WOW! YOU RAISED A PIECE OF THE UNDERWATER RUINS TO THE SURFACE!") + (320 "KEIRA" "IT SEEMS YOU CAN USE ECO IN WAYS WE'VE NEVER SEEN BEFORE!") + (530 "KEIRA" "A POWER CELL SURFACED WITH THE ROOM. CLIMB UP THERE AND GET IT.") + ) + +("sksp0123" :hint #x343 + (0 "DAXTER" "QUICK! FOLLOW THAT PIPE!") + ) + +("sksp0124" :hint #x344 + (0 "DAXTER" "I GOT A BAD FEELING ABOUT THIS.") + ) + +("sksp0125" :hint #x345 + (0 "DAXTER" "IT LOOKS LIKE THOSE THINGS NEED A BLUE ECO CHARGE.") + ) + +("sksp0127" :hint #x347 + (0 "DAXTER" "KICK THE LITTLE GUY ON THE TOP!") + ) + +("sksp0128" :hint #x348 + (0 "DAXTER" "JAK! RUN! THE DARK ECO IS RISING!") + ) + +("sksp0130" :hint #x34a + (0 "DAXTER" "UHH, I THINK WE HAVE TO SWITCH ON ALL THOSE PLATFORMS OR SOMETHIN'.") + ) + +("sksp0131" :hint #x34b + (0 "DAXTER" "HEY! IT LOOKS LIKE YOU COULD JUMP-DIVE ONTO THOSE GUYS!") + ) + +("sksp0133" :hint #x34d + (0 "DAXTER" "I'LL BET WE CAN GET ALL OF THOSE THINGS CHARGED AT ONCE!") + ) + +("sksp0134" :hint #x34e + (0 "DAXTER" "HOW 'BOUT WE TAKE IT EASY ON THOSE HOT PIPES?!") + ) + +;; ----------------- +;; ogre +;; ----------------- + +("asstvb23" :hint #x604 + (0 "KEIRA" "GREAT WORK! THE PEOPLE OF ROCK VILLAGE ARE BREATHING A COLLECTIVE SIGH OF RELIEF!") + (400 "KEIRA" "BUT THERE'S NO TIME TO CELEBRATE! USE YOUR ZOOMER TO NAVIGATE THE MOUNTAIN PASS UP AHEAD.") + (800 "KEIRA" "BE CAREFUL! IT LOOKS LIKE THE LURKERS HAVE RIGGED THE WHOLE PASS WITH EXPLOSIVES!") + (950 "KEIRA" "WHEN YOU REACH THE VOLCANIC CRATER, BE SURE TO VISIT THE RED SAGE'S LAB AND ACTIVATE THE TELEPORT GATE") + (1200 "KEIRA" "SO THAT FATHER AND I CAN JOIN YOU.") + ) + +("asstvb24" :hint #x605 + (40 "KEIRA" "OH MY! THOSE LURKERS MUST BE HEADED FOR A DETONATOR AT THE END OF THE CANYON!") + (304 "KEIRA" "IF THEY REACH IT BEFORE YOU DO, THEY'LL BLOW UP THE ENTIRE PASS!") + (525 "KEIRA" "YOU'VE GOTTA BEAT THEM THERE AND DESTROY THE DETONATOR, OR IT'S ALL OVER!") + ) + +("asstvb25" :hint #x61d + (0 "KEIRA" "GOOD WORK! YOU BEAT THEM TO THE DETONATOR!") + (270 "KEIRA" "THE RED SAGE'S LAB IS JUST AHEAD. GO TURN ON THE TELEPORT GATE SO WE CAN JOIN YOU.") + ) + +("flying-lurker-intro" + (50 "FLYING LURKER" "NYEH-NYEH-NYEH-NYEH-NYEH-NYEH-NYEH") + (132) + ) + +("gamcam23" :hint #x0 + (242 "KLAWW" "(ROARS)") + ) + +("sksp0321" :hint #x61c + (0 "DAXTER" "WE DID IT! WE STOPPED THEM FROM BLOWIN' UP THE PASS!") + ) + +;; ----------------- +;; village3 +;; ----------------- + +("ASSTLP31" :hint #x0 + (0 "KEIRA" "HM.") + ) + +("ASSTLP32" :hint #x0 + (0 "KEIRA" "OH, MY...") + ) + +("ASSTLP33" :hint #x0 + (0 "KEIRA" "AH-HA!") + ) + +("ASSTLP34" :hint #x0 + (0 "KEIRA" "HUH... WHAT ARE GOL AND MAIA UP TO...?") + ) + +("ASSTLP35" :hint #x0 + (0 "KEIRA" "HMM... WE'VE GOTTA GET TO PRECURSOR CITY...") + ) + +("ASSTLP36" :hint #x0 + (0 "KEIRA" "HUH. THE HEAT SHIELD'S GONNA NEED EVEN MORE POWER TO WITHSTAND THE LAVA.") + ) + +("ASSTLP37" :hint #x0 + (0 "KEIRA" "OHH... WE'VE GOT TO SAVE THE OTHER SAGES...") + ) + +("MIN-LO01" :hint #x0 + (0 "GORDY" "ONE OF THESE DAYS I'LL BE RICH...") + (180 "WILLARD" "YOU MEAN WE'LL BE RICH!") + (360 "GORDY" "YEAH. WHATEVER.") + ) + +("MIN-LO03" :hint #x0 + (0 "GORDY" "DIG, WILLARD! DIG!") + (130 "WILLARD" "YEAH, BUT YOU'RE NOT DIGGING!") + (320 "GORDY" "THAT'S 'CAUSE I'M DOIN' THE THINKIN'!") + ) + +("MIN-LO04" :hint #x0 + (0 "WILLARD" "UH, GORDY? CAN I TAKE A BREAK?") + (220 "GORDY" "OH, I'LL BREAK SOMETHIN' ALRIGHT. NOW DIG!") + ) + +("MIN-LO05" :hint #x0 + (0 "WILLARD" "I'M STARVING, GORDY!") + (210 "GORDY" "EAT YOUR BIRD!") + ) + +("MIN-LO06" :hint #x0 + (0 "WILLARD" "UH, GORDY? I NEED A SHARPER PICK.") + (220 "GORDY" "WHAT YOU NEED IS A SHARPER WIT!") + ) + +("MSH-AM01" :hint #x0 + (0 "GORDY" "(LAUGHS) I'M GONNA BE RICH!") + ) + +("MSH-AM02" :hint #x0 + (0 "GORDY" "DIG, DIG, DIG!") + ) + +("MSH-AM03" :hint #x0 + (0 "GORDY" "WILLARD! WORK HARDER, NOT SMARTER!") + ) + +("MSH-AM04" :hint #x0 + (0 "GORDY" "(LAUGHS) I'LL BE THE RICHEST MAN IN THE WORLD! (LAUGHS)") + ) + +("MSH-AM05" :hint #x0 + (0 "GORDY" "OH HO HO! NOBODY'S EVEN SEEN A GEM THIS SIZE! AH HA HA!") + ) + +("MSH-AM06" :hint #x0 + (0 "GORDY" "EASY STREET, HERE I COME!") + ) + +("MSH-AM07" :hint #x0 + (0 "GORDY" "MY GEMS! ALL MY GEMS!") + ) + +("MSH-AM08" :hint #x0 + (0) + ) + +("MSH-AM09" :hint #x0 + (0 "GORDY" "(CHUCKLING) I CAN'T WAIT TO CASH THIS BABY IN! (LAUGHS)") + ) + +("MSH-AM10" :hint #x0 + (0 "GORDY" "THIS LOOKS LIKE A RARE CRYSTITE LARCONIA! (LAUGHS GIDDILY)") + ) + +("MSH-AM11" :hint #x0 + (0 "GORDY" "NOW WAIT A MINUTE! THEY'RE ALL MINE! MINE, I TELL YA!") + ) + +("MSH-AM12" :hint #x0 + (0 "GORDY" "SO, WILLARD. WHAT ARE YOU GONNA DO WITH YOUR QUARTER, OF YOUR HALF?") + ) + +("MSH-AM1A" :hint #x0 + (0 "GORDY" "I'M GONNA BE RICH!") + ) + +("MSH-AM2A" :hint #x0 + (0 "GORDY" "DIG, DIG, DIG!") + ) + +("MSH-AM3A" :hint #x0 + (0 "GORDY" "WORK HARDER, NOT SMARTER!") + ) + +("MTA-AM01" :hint #x0 + (0 "WILLARD" "UH, ARE WE ALMOST DONE?") + ) + +("MTA-AM02" :hint #x0 + (0 "WILLARD" "GEE, CAN WE TAKE A BREAK?") + ) + +("MTA-AM03" :hint #x0 + (0 "WILLARD" "AWW, I'M HUNGRY...") + ) + +("MTA-AM04" :hint #x0 + (0 "WILLARD" "UHH... I THINK BIRDIE'S CAGE NEEDS CLEANING...") + ) + +("MTA-AM05" :hint #x0 + (0 "WILLARD" "GEE, THAT'S AN AWFULLY BIG GEM!") + ) + +("MTA-AM06" :hint #x0 + (0 "WILLARD" "I ALWAYS WANTED TO BE A LUMBERJACK...") + ) + +("MTA-AM07" :hint #x0 + (0 "WILLARD" "UH, GORDY PROMISED TO GIVE ME HALF OF WHATEVER I COULD CARRY!") + ) + +("MTA-AM08" :hint #x0 + (0 "WILLARD" "EH HEH... BIRDIE IS MY BEST FRIEND") + ) + +("MTA-AM09" :hint #x0 + (0 "WILLARD" "I LOVE MY LITTLE BIRDIE") + ) + +("SAGELP31" :hint #x0 + (0 "SAGE" "THIS ISN'T GOOD.") + ) + +("SAGELP32" :hint #x0 + (0 "SAGE" "DARK ECO CRYSTALS?") + ) + +("SAGELP33" :hint #x0 + (0 "SAGE" "MAIA AND GOL HAVE GOTTEN IN OVER THEIR HEADS!") + ) + +("SAGELP34" :hint #x0 + (0 "SAGE" "RNN, DARK ECO'S POWERS CANNOT BE CONTROLLED!") + ) + +("SAGELP35" :hint #x0 + (0 "SAGE" "DARK ECO IN THE GLACIERS?") + ) + +("SAGELP36" :hint #x0 + (0 "SAGE" "AH! THERE'S LURKER TROOPS IN THE MOUNTAINS!") + ) + +("SAGELP37" :hint #x0 + (0 "SAGE" "WHAT IS GOL PLANNING...?") + ) + +("SAGELP38" :hint #x0 + (0 "SAGE" "COULD HE ACTUALLY HAVE...?") + ) + +("assistant-village3-reminder" + (30 "KEIRA" "HEY GUYS! KEEP COLLECTING POWER CELLS.") + (100 "KEIRA" "THEY'RE THE KEY TO CONTINUING OUR JOURNEY NORTH.") + (192) + ) + +("asstv103" :hint #x452 + (0 "KEIRA" "DON'T FORGET TO TURN ON THE TELEPORT GATE TO LET US THROUGH.") + (210 "KEIRA" "YOU'VE GOT TO GO INTO THE RED SAGE'S LAB IN THECENTER OF THE VOLCANIC CRATER TO TURN IT ON.") + (500 "KEIRA" "WE CAN'T COME THROUGH UNTIL IT'S BACK ONLINE.") + ) + +("asstv104" :hint #x453 + (0 "KEIRA" "HEY, WE'RE STILL BACK IN ROCK VILLAGE!") + (120 "KEIRA" "TURN ON THE TELEPORT GATE!") + ) + +("asstv105" :hint #x454 + (0 "KEIRA" "WE WANNA JOIN YOU IN THE VOLCANIC CRATER!") + (128 "KEIRA" "GO INTO THE RED SAGE'S LAB AND TURN ON THE TELEPORT GATE.") + ) + +("asstva73" :hint #x427 + (0 "KEIRA" "HEY GUYS! BY MY CALCULATIONS, IT'S GOING TO TAKE 72 POWER CELLS TO FUEL THE HEAT SHIELD") + (340 "KEIRA" "AGAINST THE LAVA ON THE WAY TO GOL AND MAIA'S CITADEL.") + ) + +("asstvb75" :hint #x429 + (0 "KEIRA" "THIS GONDOLA SEEMS TO BE MALFUNCTIONING. I'LL TRY TO WORK ON IT AND GET IT RUNNING AGAIN.") + ) + +("asstvb76" :hint #x42a + (0 "KEIRA" "I'VE REACTIVATED THE GONDOLA. IT CAN TAKE YOU TO SNOWY MOUNTAIN!") + (260 "KEIRA" "USE IT WHENEVER YOU WANT.") + ) + +("minershort-introduction-gnawers" + (0 "GORDY" "WHY DON'T YOU TWO MAKE YOURSELVES USEFUL?") + (90 "GORDY" "LURKERS HAVE BEEN EXCAVATIN' THE DARK CAVES OVER THERE.") + (196 :offscreen "GORDY" "SEEMS THEY'RE LOOKIN' FOR PRECURSOR ARTIFACTS.") + (250) + (274 :offscreen "GORDY" "THEY CAN HAVE THE ARTIFACTS, FOR ALL I CARE.") + (360 :offscreen "WILLARD" "FOR ALL WE CARE!") + (450 "GORDY" "WILLARD, FEED YOUR BIRD.") + (472) + (496 "GORDY" "ALL I CARE ABOUT ARE GEMS!") + (540 "GORDY" "BUT I AIN'T GONNA BE ABLE TO GET THE CAVE'S GEMS BECAUSE WHEN THEY'RE THROUGH,") + (660 "GORDY" "THEY'RE GONNA COLLAPSE THE PLACE!") + (700) + (724 "GORDY" "IF YOU TAKE OUT THE LURKERS CHEWIN' AT THE SUPPORT BEAMS,") + (830 "GORDY" "YOU COULD SAVE THE CAVE FOR ME.") + (870) + (890 "GORDY" "NOW BEAT IT!") + (920) + ) + +("minershort-introduction-orbs" + (18 "MINER" "HEY GORDY, DUH, I THINK WE GOT VISITORS.") + (160 "GORDY" "YA THINK, WILLARD? HOWDY, STRANGERS, UH, PASSING THROUGH?") + (300 "GORDY" "US, TOO. WELL, WE GOTTA BE MOVIN' ON. NOTHIN' TO SEE HERE.") + (410 "WILLARD" "DUH, I THOUGHT YOU SAID THIS WAS A PRICELESS GEM WORTHー") + (550 :offscreen "GORDY" "WILLARD!") + (600 "DAXTER" "ACTUALLY, WE WANT POWER CELLS. NOT GEMS.") + (694) + (698 "WILLARD" "WE GOT FOUR OF 'EM. DUH, YOU WANT 'EM?") + (810) + (826 "GORDY" "WHAT BIRD-BRAIN HERE IS TRYING TO SAY IS, WE MAY HAVE A FEW POWER CELLS LAYING AROUND,") + (990 "GORDY" "AND WE MIGHT BE WILLING TO PART WITH THEM FOR...") + (1100) + (1120 :offscreen "GORDY" "...90 ORBS EACH.") + (1160 "DAXTER" "WHERE HAVE I HEARD THAT BEFORE?") + (1222 "DAXTER" "HEY, HOW DO YOU TWO GENIUSES EXPECT TO GET THAT BIG GEM OUTTA HERE ANYWAY?") + (1380) + (1400 "GORDY" "WELL, SMARTYPANTS, WE GOT TWELVE MORE YEARS OF DIGGIN' TO FIGURE THAT OUT.") + (1542) + (1560 "WILLARD" "UHH... GORDY, WOULDN'T IT TAKE LESS TIME IF YOU DUG, TOO?") + (1768) + ) + +("minershort-reminder-1-gnawers" + (16 "GORDY" "WOULD YOU TAKE CARE OF THOSE LURKERS CHEWIN' AT THE DARK CAVE'S SUPPORT BEAMS ALREADY!") + (204 "GORDY" "THOSE BEAMS CAN'T TAKE THAT KIND OF ABUSE FOREVER!") + ) + +("minershort-reminder-1-orbs" + (30 "GORDY" "DON'T FORGET OUR DEAL. BRING US 100 ORBS.") + (130 :offscreen "WILLARD" "DUH... YOU SAID 90.") + (200 "GORDY" "WILLARD!") + (228) + (240 "GORDY" "FINE. 90 ORBS A POWER CELL.") + (344) + ) + +("minershort-reminder-2-orbs" + (30 "WILLARD" "DUH, GORDY?") + (84 "GORDY" "90 ORBS A POWER CELL, WILLARD! URGH!") + ) + +("minershort-resolution-1-orbs" + (28 "GORDY" "OH, ALRIGHT ALREADY.") + (80 "GORDY" "HERE'S A POWER CELL FOR THOSE ORBS OF YOURS.") + (150) + ) + +("minershort-resolution-2-orbs" + (28 "WILLARD" "OOH! OH, I GOT IT THIS TIME! UH...") + (150) + (168 "WILLARD" "HERE'S A...") + (190) + (208 "WILLARD" "UHH.. HERE'S A...!") + (260) + (270 :offscreen "GORDY" "A POWER CELL!") + (358 "WILLARD" "YEAH, YEAH... WHAT HE SAID.") + (458 "GORDY" "THAT'S IT. YOU'VE CLEANED US OUT.") + (540 "GORDY" "NO! MORE! POWER! CELLS!") + (660) + ) + +("sage-village3-introduction" + (10 "SAGE" "OHH! I ALWAYS WONDER IF I'M LOSING BODY PARTS IN THOSE THINGS!") + (130) + (180 "SAGE" "HOLY YAKOW! THE RED SAGE'S LAB LOOKS WORSE THAN THE BLUE'S!") + (324 "KEIRA" "WELL, IT DEFINITELY LOOKS AS THOUGH THERE'S BEEN A STRUGGLE HERE.") + (412) + (444 "OLD MAN" "HA HA HA HA HA!") + (500) + (530 "OLD MAN" "I'D HARDLY CALL IT \"STRUGGLE\". WOULD YOU, DEAR SISTER?") + (680 "WOMAN" "CERTAINLY NOT. THE RED SAGE GAVE UP WITH SO LITTLE EFFORT.") + (802) + (810 "WOMAN" "NO FUN AT ALL.") + (860) + (890 "SAGE" "GOL? IS THAT YOU?") + (962) + (972 "SAGE" "YOU'VE FINALLY GONE OFF THE DEEP END, EH?") + (1060 "SAGE" "AND, MAIA! I TOLD YOU THE DARK ECO WOULD AFFECT YOU BOTH!") + (1186 "SAGE" "RRR, NOBODY EVER LISTENS TO OLD SAMOS...") + (1262) + (1290 "SAGE" "WHAT HAVE YOU TWO DONE WITH THE BLUE AND RED SAGES?") + (1378 "GOL" "DON'T WORRY ABOUT YOUR COLORFUL FRIENDS, YOU OLD FOOL.") + (1525 "GOL" "THEY'RE PERFECTLY SAFE IN OUR CITADEL. OUR SPECIAL GUESTS.") + (1680 "MAIA" "THEY HAVE GRACIOUSLY AGREED TO HELP US ON A LITTLE PROJECT.") + (1810) + (1830 "GOL" "YOU WERE WRONG, SAMOS. DARK ECO CAN BE CONTROLLED!") + (1988) + (1999 "GOL" "WE'VE LEARNED ITS SECRETS, AND NOW WE CAN RESHAPE THE WORLD TO OUR LIKING.") + (2212) + (2226 "SAGE" "YOU CAN'T CONTROL DARK ECO BY ITSELF! EVEN THE PRECURSORSー") + (2360 "MAIA" "UNTIL NOW, WE'VE HAD TO SCRAPE BY WITH WHAT LITTLE DARK ECO WE COULD FIND NEAR THE SURFACE.") + (2508) + (2520 "MAIA" "BUT SOON, WE WILL HAVE ACCESS TO THE VAST STORES OF DARK ECO HIDDEN DEEP UNDERGROUND.") + (2718 "SAGE" "NOT THE SILOSー!") + (2758) + (2768 "GOL" "YES! THE SILOS!") + (2840 "GOL" "THEY WILL BE OPENED, AND ALL THE DARK ECO OF THE WORLD WILL BE OURS!") + (3028) + (3040 "SAGE" "BUT THAT'S IMPOSSIBLE! ONLY A PRECURSOR ROBOTー") + (3128 "MAIA" "OH, DON'T LOOK SO UPSET, SAMOS. WE'VE GOT BIG PLANS FOR YOU.") + (3300 :offscreen "MAIA" "~3L(FADING AWAY) ~0LAH HA HA HA HA HA HA!") + (3460) + (3500 "DAXTER" "WAIT A MINUTE!") + (3536) + (3544 "DAXTER" "THAT WAS GOL?!") + (3586) + (3594 "DAXTER" "THE SAME GOL WHO'S SUPPOSED TO CHANGE ME BACK?!") + (3692 "DAXTER" "GOL IS THE GUY TRYING TO KILL US?!?") + (3770) + (3790 "DAXTER" "I'M DOOMED.") + (3820) + (3834 "SAGE" "WE MAY ALL BE DOOMED.") + (3872) + (3900 "SAGE" "IF THEY OPEN THE SILOS, THE DARK ECO WILL TWIST AND DESTROY EVERYTHING IT TOUCHES!") + (4080 "SAGE" "WE SIMPLY MUST GET TO THEIR CITADEL, TO STOP THEM!") + (4192 "KEIRA" "THE FASTEST WAY THERE IS THROUGH THE LAVA TUBE AT THE BOTTOM OF THIS CRATER.") + (4316) + (4324 "KEIRA" "A FEW MORE POWER CELLS, AND YOUR ZOOMER'S HEAT SHIELD SHOULD GET YOU ACROSS THE LAVA SAFELY.") + (4460) + (4464 "SAGE" "ALL RIGHT, MY BOY. YOU KNOW WHAT TO DO.") + (4545 "SAGE" "TAKE THE FLEABAG AND GO ROUND UP MORE POWER CELLS.") + (4664) + ) + +("sage-village3-introduction-dark-eco" + (10 "SAGE" "GREAT BALLS OF ECO!") + (60) + (72 "SAGE" "THERE SEEMS TO BE A LARGE LURKER PRESENCE IN THE SPIDER CAVES!") + (180) + (190 "DAXTER" "GREAT. SOUNDS LIKE A REAL CHEERY PLACE.") + (284) + (296 "DAXTER" "LEMME GUESS. THERE ARE SPIDERS IN THE SPIDER CAVES! RIGHT?") + (458 "SAGE" "OF COURSE THERE ARE SPIDERS IN SPIDER CAVES!") + (560) + (574 "SAGE" "BUT THAT'S THE LEAST OF YOUR PROBLEMS!") + (640 "SAGE" "THE LURKERS ARE AFTER CRYSTALS OF CONCENTRATED DARK ECO.") + (752) + (764 "SAGE" "YOU'VE GOT TO DESTROY THOSE CRYSTALS BEFORE THOSE MONSTERS GET THEIR HANDS ON THEM!") + (896) + (910 "SAGE" "HOP TO IT!") + (950) + ) + +("sage-village3-introduction-rams" + (8 "SAGE" "I'M GLAD YOU TWO ARE HERE. THERE'S LURKER MOVEMENT IN THE MOUNTAINS.") + (120) + (158 :offscreen "SAGE" "APPARENTLY THEY DISCOVERED, AND ARE NOW TRYING TO REMOVE,") + (272 :offscreen "SAGE" "SOME DARK ECO STORES FROZEN IN THE GLACIERS.") + (380 "SAGE" "WHILE YOU'RE UP THERE POKING AROUND FOR POWER CELLS, STOP THOSE LURKERS,") + (540 "SAGE" "AND KEEP A LITTLE MORE DARK ECO OUT OF GOL'S HANDS.") + (660) + ) + +("sage-village3-reminder-1-dark-eco" + (6 "SAGE" "YOU HAVE TO DESTROY THE DARK ECO CRYSTALS IN SPIDER CAVES!") + (122) + ) + +("sage-village3-reminder-1-rams" + (0 "SAGE" "WE CAN'T LET THE LURKERS GET THEIR HANDS ON THE DARK ECO CANISTERS.") + (130 "SAGE" "GET UP TO THOSE SNOWY PEAKS AND STOP THEM!") + (230) + ) + +;; ----------------- +;; snowy +;; ----------------- + +("sksp0345" :hint #x443 + (0 "DAXTER" "HOW DO WE GET INSIDE THIS FORT?") + ) + +("sksp0346" :hint #x444 + (0 "DAXTER" "MAYBE RED ECO CAN DEFEAT THIS GUY!") + ) + +("sksp0350" :hint #x448 + (0 "DAXTER" "HIT HIM WHEN THE SPIKES ARE IN!") + ) + +("sksp0360" :hint #x44c + (0 "DAXTER" "ALL RIGHT! WE TURNED ON THE CAPPED YELLOW ECO VENTS!") + ) + +;; ----------------- +;; spidercave +;; ----------------- + +("sksp0327" :hint #x432 + (0 "DAXTER" "I THINK THAT WAS THE LAST DARK ECO CRYSTAL!") + ) + +("sksp0332" :hint #x437 + (0 "DAXTER" "DON'T LET THE LIGHTS GO OUT!") + ) + +("sksp0333" :hint #x438 + (0 "DAXTER" "HIT A CRYSTAL TO GET SOME LIGHT.") + ) + +("sksp0334" :hint #x439 + (0 "DAXTER" "RUN AWAY! THAT CRYSTAL'S GONNA BLOW!") + ) + +("sksp0341" :hint #x440 + (0 "DAXTER" "I THINK WE'RE IN A SPIDER'S NEST HERE!") + ) + +;; ----------------- +;; lavatube +;; ----------------- + +("assistant-lavatube-end-resolution" + (58 "DAXTER" "HEY! WHERE'S OL' SHORT, GREEN AND WRINKLY?") + (140) + (150 "KEIRA" "THIS IS TERRIBLE! FATHER IS MISSING!") + (228 "KEIRA" "I THINK GOL AND MAIA MAY HAVE KIDNAPPED HIM AS WELL!") + (320 "DAXTER" "RELAX, SWEETHEART. I GOT EVERYTHING UNDER CONTROL.") + (450 "KEIRA" "UNDER CONTROL?! LURKER ARMIES CONTINUE TO GROW ACROSS THE LAND,") + (594 "KEIRA" "THE SAGES HAVE BEEN KIDNAPPED,") + (640 "KEIRA" "GOL AND MAIA HAVE GATHERED ENOUGH ECO TO COMPLETE THEIR TERRIBLE PLAN,") + (760 "KEIRA" "AND TO STOP THEM, YOU'RE GOING TO HAVE TO FIGHT YOUR WAY THROUGH THEIR CITADEL!") + (870) + (888 "DAXTER" "UH... YEAH. THAT ABOUT... SUMS IT UP.") + (1014 "KEIRA" "YOU'VE GOT TO RESCUE MY FATHER BEFORE IT'S TOO LATE!") + (1120 "KEIRA" "AND JAK? ...BE CAREFUL.") + (1186) + (1200 "DAXTER" "YEAH. WE WILL BE!") + ) + +("assistant-lavatube-start-resolution" + (0 "KEIRA" "HA HA! ALL RIGHT!") + (48 "KEIRA" "WITH THESE ADDITIONAL POWER CELLS, I SHOULD BE ABLE TO SUPPLY THE HEAT SHIELD") + (160 "KEIRA" "WITH ENOUGH POWER TO STAND UP TO THIS LAVA.") + (236 "KEIRA" "BUT THE SHIELD STILL HAS A LIMIT.") + (294 "KEIRA" "IT WILL NOW WITHSTAND TEMPERATURES UP TO 800 DEGREES, BUT NO MORE.") + (400 "KEIRA" "SO KEEP AN EYE ON YOUR GAUGE.") + (470 "KEIRA" "I DON'T WANNA THINK ABOUT WHAT THOSE TEMPERATURES WOULD DO TO YOUR ZOOMER IF THE SHIELD GIVES OUT.") + (590) + (620 "DAXTER" "YEAH, THE HEAT.") + (660) + (672 "DAXTER" "WHAT?! THE ZOOMER?! HEY! WHAT ABOUT US?!") + (768) + (790 "DAXTER" "DON'T YOU THINK WE COULD LOOK FOR A SAFER ROUTE TO GOL'S CITADEL?") + (886) + (900 "KEIRA" "...LOOK. I'VE RELEASED MORE COOLING BALLOONS INTO THE TUBE.") + (990 "KEIRA" "SO YOU CAN USE THEM TO KEEP THE TEMPERATURE DOWN.") + (1090 "KEIRA" "AND DON'T FORGET TO ACTIVATE THE TELEPORT GATE IN THE YELLOW SAGE'S LAB.") + (1190 "KEIRA" "WE'RE COUNTING ON YOU.") + ) + +("asstva74" :hint #x428 + (0 "KEIRA" "YOU DON'T HAVE ENOUGH POWER CELLS TO GET THROUGH THIS LAVA!") + (182 "KEIRA" "YOU CAN'T GET THROUGH TO GOL AND MAIA'S CITADEL UNTIL YOU'VE COLLECTED 72 POWER CELLS!") + ) + +("sksp0375" :hint #x70d + (0 "DAXTER" "SHOOT THE POWER SPHERES TO OPEN THE DOOR!") + ) + ;; ----------------- ;; citadel ;; ----------------- @@ -1404,7 +2923,8 @@ (162) (165 "BLUE SAGE" "GREAT PILES OF PRECURSOR METAL!") (253 "BLUE SAGE" "THAT INSIDIOUS MECHANICAL CREATION MUST NOT BE ALLOWED TO WREAK ITS TERRIBLE HAVOC!") - (420 "BLUE SAGE" "I WILL TRY TO ACTUATE THE SHIELD DOOR BY ELLICITING A CONDUIT OF ENERGY") + (420) + (430 "BLUE SAGE" "I WILL TRY TO ACTUATE THE SHIELD DOOR BY ELICITING A CONDUIT OF ENERGY") (563 "BLUE SAGE" "BETWEEN MYSELF AND THE VAST PORTAL BELOW!") (666 "DAXTER" "UH... YEAH. YOU DO THAT. WE'LL UH... JUST GO FIND MORE HELP.") (873) @@ -1418,27 +2938,29 @@ (343 "SAGE" "THERE'S NO TIME FOR JOKES, DAXTER. GOL AND MAIA KIDNAPPED US") (477 "SAGE" "TO SAP OUR ENERGIES TO POWER THEIR ABOMINABLE MACHINE.") (574) - (577 :offscreen "SAGE" "IT APPEARS THEY HAVE COMBINED THE FUNCTIONAL REMAINS OF A PRECURSOR ROBOT") + (584 :offscreen "SAGE" "IT APPEARS THEY HAVE COMBINED THE FUNCTIONAL REMAINS OF A PRECURSOR ROBOT") (710 :offscreen "SAGE" "WITH SCAVENGED ARTIFACTS FROM ACROSS THE LAND.") (800) - (803 :offscreen "SAGE" "THEN THEY ADDED A FEW DIABOLICAL ADDITIONS OF THEIR OWN,") - (921 :offscreen "SAGE" "CREATING THE ONE THING CAPABLE OF OPENING THE DARK ECO SILOS.") + (816 :offscreen "SAGE" "THEN THEY ADDED A FEW DIABOLICAL ADDITIONS OF THEIR OWN,") + (926 :offscreen "SAGE" "CREATING THE ONE THING CAPABLE OF OPENING THE DARK ECO SILOS.") (1060 "SAGE" "IF YOU CAN FREE THE FOUR OF US, WE CAN USE OUR COMBINED POWERS") (1180 "SAGE" "TO BREAK THE FORCE SHIELD SURROUNDING THE ROBOT, BEFORE THEY USE IT TO DESTROY THE WORLD.") ) ("green-sagecage-outro-preboss" - (56 "GOL" "YOU'RE TOO LATE, SAMOS.") + (66 "GOL" "YOU'RE TOO LATE, SAMOS.") (125 "GOL" "ONCE I POSSESS LIMITLESS DARK ECO, I WILL HAVE THE KEY TO CREATION ITSELF!") (335 "SAGE" "THIS IS MADNESS! RELEASING THAT MUCH DARK ECO WILL DESTROY EVERYTHING WE KNOW!") - (504 "SAGE" "JUST LOOK WHAT IT'S DONE TO YOU!") + (500) + (510 "SAGE" "JUST LOOK WHAT IT'S DONE TO YOU!") (578) - (581 "MAIA" "IT HAS GIVEN US A BEAUTY BEYOND ANYTHING YOU COULD UNDERSTAND.") + (586 "MAIA" "IT HAS GIVEN US A BEAUTY BEYOND ANYTHING YOU COULD UNDERSTAND.") (693) - (696 "DAXTER" "BEAUTY? HAVE YOU TWO LOOKED IN A MIRROR LATELY?") + (700 "DAXTER" "BEAUTY? HAVE YOU TWO LOOKED IN THE MIRROR LATELY?") (825) - (828 "MAIA" "JUST WAIT UNTIL WE OPEN THE SILOS, LITTLE ONE. YOU THINK SHORT AND FUZZY IS BAD?") - (1030 "GOL" "AND TO THINK, YOU TWO TRAVELLED ALL THIS WAY FOR MY HELP.") + (834 "MAIA" "JUST WAIT UNTIL WE OPEN THE SILOS, LITTLE ONE. YOU THINK SHORT AND FUZZY IS BAD?") + (1028) + (1036 "GOL" "AND TO THINK, YOU TWO TRAVELLED ALL THIS WAY FOR MY HELP.") (1180 "GOL" "FOOLS! ENJOY YOUR FRONT ROW SEATS TO THE RECREATION OF THE WORLD!") (1391) (1605 "SAGE" "JAK! TAKE THE ELEVATOR UP AND STOP THAT ROBOT!") @@ -1447,24 +2969,26 @@ ("green-sagecage-resolution" (35 "SAGE" "GOOD WORK, BOYS! YOU'RE REAL HEROES NOW.") (158 "SAGE" "I'LL COMBINE MY GREEN ECO POWER WITH THE OTHER THREE SAGES") - (280 "SAGE" "AND TOGETHER WE'LL OPEN THE SHIELD DOOR SURROUNDING THE PRECURSOR ROBOT.") + (286 "SAGE" "AND TOGETHER WE'LL OPEN THE SHIELD DOOR SURROUNDING THE PRECURSOR ROBOT.") (405 "DAXTER" "YEAH YEAH THAT SOUNDS LIKE A GOOD START.") (457 "DAXTER" "AND THEN AFTER YOU GUYS OPEN THAT SHIELD, WHAT ARE YOU GONNA DO ABOUT THE ROBOT?") (576 "SAGE" "NOTHING, DAXTER. WE HAVE TO KEEP THE SHIELD OPEN.") (705 "SAGE" "IT'S UP TO YOU TWO TO FIGURE OUT HOW TO DESTROY THE ROBOT.") (823 "DAXTER" "OH, GREAT. I GET TO HELP THE GUY THAT TURNED ME INTO A FURBALL") (983 "DAXTER" "DESTROY THE ONLY PERSON WHO CAN TURN ME BACK!") - (1111) + (1108) + (1121 "DAXTER" "(GULPS)") + (1141) (1161 "SAGE" "FIRST, SAVE THE WORLD! THEN WE'LL TRY TO CONVINCE GOL TO HELP DAXTER.") ) ("redsage-resolution" (58 "RED SAGE" "(CHUCKLES) YOU'VE FINALLY COME TO RESCUE ME.") - (190 "RED SAGE" "DO YOU KNOW HOW LONG I'VE BEEN IN HERE? WHAT TOOK YOU SO LONG? AND UH... (CHUCKLES)") + (196 "RED SAGE" "DO YOU KNOW HOW LONG I'VE BEEN IN HERE? WHAT TOOK YOU SO LONG? AND UH... (CHUCKLES)") (378 "RED SAGE" "WHAT ARE YOUR NAMES?") - (429) - (432 "DAXTER" "I'M DAXTER! HE'S JAK, HE'S WITH ME.") - (540 :offscreen "RED SAGE" "GOOD JOB, DAXTER. YOU'RE A REAL HERO.") + (428) + (436 "DAXTER" "I'M DAXTER! HE'S JAK, HE'S WITH ME.") + (542 :offscreen "RED SAGE" "GOOD JOB, DAXTER. YOU'RE A REAL HERO.") (677) (703 "RED SAGE" "YOU'VE GOT TO STOP GOL FROM LAUNCHING THE ROBOT.") (837 "RED SAGE" "I'LL USE MY ECO POWER TO HELP OPEN THE SHIELD DOOR.") @@ -1529,10 +3053,13 @@ ("yellowsage-resolution" (57 "YELLOW SAGE" "WHO WOULDA THOUGHT I'D LIVE TO SEE THE DAY") (137 "YELLOW SAGE" "WHEN I NEEDED TO BE RESCUED BY A BOY AND HIS MUSKRAT!") + (255) (271 "YELLOW SAGE" "(SIGHS) I'M GONNA GIVE GOL AND MAIA A LITTLE PAYBACK FOR THIS EMBARRASSMENT!") - (471) - (480 "YELLOW SAGE" "THEN WE'LL SEE ABOUT COOKING UP SOME MUSKRAT STEW...") - (605) + (475) + (485 "YELLOW SAGE" "THEN WE'LL SEE ABOUT COOKING UP SOME MUSKRAT STEW...") + (602) + (610 "DAXTER" "(GULPS)") + (630) ) ;; ----------------- @@ -1667,7 +3194,7 @@ (235) (274 "DAXTER" "STAY FUZZY, SAVE THE WORLD... CHOICES...") (404) - (437 "DAXTER" "OKAY FINE WE'LL SAVE THE WORLD, BUT DO IT QUICKLY BEFORE I CHANGE MY MIND!") + (437 "DAXTER" "OKAY, FINE, WE'LL SAVE THE WORLD. BUT DO IT QUICKLY BEFORE I CHANGE MY MIND!") (634) ) @@ -1678,24 +3205,24 @@ ) ("green-sagecage-outro-beat-boss-b" - (522 "SAGE" "WELL IT LOOKS LIKE I MAY HAVE BEEN TOO HARD ON YOU BOYS.") + (522 "SAGE" "WELL, IT LOOKS LIKE I MAY HAVE BEEN TOO HARD ON YOU BOYS!") (640 "SAGE" "YOU DO HAVE WHAT IT TAKES TO BE HEROES!") (745) (751 "KEIRA" "BUT, DAXTER, NOW WE CAN'T CHANGE YOU BACK.") (845) (847 "DAXTER" "DON'T WORRY ABOUT ME, BABY. YOU KNOW WHAT THEY SAY: BIG THINGS COME IN SMALL PACKAGES.") (1096) - (1100 "BLUE SAGE" "JAK, YOU HAVE AN INCREDIBLE TALENT FOR CHANNELING ECO!") + (1104 "BLUE SAGE" "JAK, YOU HAVE AN INCREDIBLE TALENT FOR CHANNELING ECO!") (1219) - (1222 "BLUE SAGE" "SAMOS, YOU MAY HAVE BEEN RIGHT ABOUT THIS ONE AFTER ALL!") - (1321) - (1323 "RED SAGE" "AND KEIRA, WITHOUT YOUR HELP AND INGENUITY NONE OF THIS WOULD HAVE BEEN POSSIBLE.") + (1226 "BLUE SAGE" "SAMOS, YOU MAY HAVE BEEN RIGHT ABOUT THIS ONE AFTER ALL!") + (1318) + (1323 "RED SAGE" "AND KEIRA, WITHOUT YOUR HELP AND INGENUITY, NONE OF THIS WOULD HAVE BEEN POSSIBLE.") (1515 "RED SAGE" "HM-HM-HM. PERHAPS WE FOUND ANOTHER SAGE NOW THAT GOL AND MAIA ARE LOST...") (1728) (1731 "SAGE" "YES, GOL AND MAIA... THE DARK ECO PROBABLY DESTROYED THEM.") (1916 :offscreen "SAGE" "EH, PROBABLY...") (1999) - (2003 "DAXTER" "AH WHO CARES? BRING 'EM ON WE CAN TAKE 'EM AGAIN, RIGHT JAK?") + (2003 "DAXTER" "AH WHO CARES? BRING 'EM ON, WE CAN TAKE 'EM AGAIN! RIGHT JAK?") (2168) (2172 "DAXTER" "I SAID, RIGHT, JAK?") (2256) @@ -1725,142 +3252,6 @@ (602) ) -;; ----------------- -;; training -;; ----------------- - -("asstvb40" :hint #x900 - (0 "KEIRA" "THIS DEVICE IS A COMMUNICATOR. WITH IT, MY FATHER AND I") - (181 "KEIRA" "CAN GIVE YOU ADVICE AT ANY TIME DURING YOUR QUEST.") - ) - -("asstvb41" :hint #x901 - (0 "KEIRA" "THESE FLOATING EGG-SHAPED THINGS ARE PRECURSOR ORBS.") - (176) - (180 "KEIRA" "COLLECT ENOUGH OF THEM, AND SOME OF THE VILLAGERS WILL GIVE YOU") - (315 "KEIRA" "A POWER CELL IN EXCHANGE.") - ) - -("asstvb42" :hint #x902 - (0 "KEIRA" "THIS IS A POWER CELL, THE MOST IMPORTANT PRECURSOR ARTIFACT YOU CAN FIND!") - (327) - (333 "KEIRA" "YOU NEED TO COLLECT 20 OF THESE SO I CAN POWER THE HEAT SHIELD") - (507 "KEIRA" "FOR YOUR A-GRAV ZOOMER.") - ) - -("asstvb44" :hint #x903 - (0 "KEIRA" "HEY, YOU FOUND ONE OF MY SCOUT FLIES!") - (160 "KEIRA" "I SENT 7 OF THEM TO EACH AREA TO LOOK FOR POWER CELLS") - (343 "KEIRA" "BUT THE LURKERS MUST HAVE CAPTURED THEM ALL!") - ) - -("asstvb45" :hint #x904 - (0 "KEIRA" "WOW! THAT LAST SCOUT FLY HAD A POWER CELL!") - (219 "KEIRA" "I'LL BET IF YOU COLLECT ALL 7 IN EACH AREA YOU CAN FIND EVEN MORE POWER CELLS.") - ) - -("asstvb46" :hint #x905 - (0 "KEIRA" "BE CAREFUL IN THE OCEAN, THE WATERS ARE CHOCK-FULL OF LURKER SHARKS") - (258 "KEIRA" "AND I'VE NEVER SEEN ANYONE DEFEAT ONE.") - (419) - (426 "KEIRA" "STAY CLEAR OF THEM IF YOU KNOW WHAT'S GOOD FOR YOU!") - ) - -("asstvb47" :hint #x906 - (0 "KEIRA" "REMEMBER, THAT'S A POWER CELL. YOU NEED TO COLLECT AS MANY OF THOSE AS YOU CAN.") - ) - -("asstvb48" :hint #x907 - (0 "KEIRA" "THAT'S A BLUE ECO VENT! MORE CONCENTRATED THAN THE FLOATING CLUSTERS,") - (253 "KEIRA" "THIS VENT WILL GIVE YOU A FULL CHARGE OF BLUE ECO,") - (419 "KEIRA" "LETTING YOU USE IT FOR THE MAXIMUM TIME.") - ) - -("sagevb21" :hint #x908 - (3 "SAGE" "THOSE LITTLE GREEN BALLS OF ENERGY ON THE GROUND ARE A TYPE OF ECO.") - (280 "SAGE" "PICK UP 50 SMALL GREEN ECOES, OR ONE BIG GREEN ONE TO INCREASE YOUR HEALTH.") - ) - -("sagevb22" :hint #x909 - (0 "SAGE" "THAT'S BLUE ECO, WHICH CONTAINS THE ENERGY OF MOTION.") - (291 "SAGE" "BLUE ECO ALLOWS YOU TO RUN FAST, BREAK BOXES, AND EVEN ACTIVATE SOME PRECURSOR") - (640 "SAGE" "ARTIFACTS WHEN YOU GET NEAR THEM.") - ) - -("sagevb23" :hint #x90a - (0 "SAGE" "NOTICE HOW EACH BLUE ECO CLUSTER YOU PICK UP INCREASES THE TIME YOU CAN USE ITS POWER.") - ) - -("sagevb24" :hint #x90b - (3 "SAGE" "THIS IS A PRECURSOR DOOR. IT CAN ONLY BE OPENED BY APPROACHING THE DOOR") - (357 "SAGE" "WHILE CHANNELING BLUE ECO THROUGH YOUR BODY.") - ) - -("sagevb25" :hint #x90c - (3 "SAGE" "GOOD WORK, THE BLUE ECO CAUSED THE DOOR TO OPEN. WITH BLUE ECO, YOU CAN BREATHE") - (365 "SAGE" "ENERGY INTO ALL KINDS OF PRECURSOR ARTIFACTS THAT HAVE LAIN DORMANT FOR YEARS.") - ) - -("sagevb26" :hint #x90d - (0 "SAGE" "USE YOUR GOGGLES TO VIEW YOUR PROGRESS DURING THE ADVENTURE.") - ) - -("sagevb27" :hint #x90e - (1 "SAGE" "YOU CAN JUMP ONCE, THEN JUMP AGAIN IN THE AIR TO REACH EVEN HIGHER LEDGES.") - ) - -("sagevb28" :hint #x90f - (0 "SAGE" "WHEN YOU'RE SURROUNDED BY ENEMIES, USE YOUR SPIN KICK.") - ) - -("sagevb29" :hint #x910 - (0 "SAGE" "THAT'S NOT A SPIN KICK! TRY AGAIN.") - ) - -("sagevb30" :hint #x911 - (0 "SAGE" "COME ON, JAK! DO A SPIN KICK.") - ) - -("sagevb31" :hint #x912 - (0 "SAGE" "GOOD WORK. USE THE SPIN KICK WHEN YOU WANT A GOOD ALL-ROUND ATTACK.") - ) - -("sagevb32" :hint #x913 - (0 "SAGE" "FOR A STRAIGHT LINE, MOVING ATTACK, USE YOUR FIST TO PUNCH.") - ) - -("sagevb33" :hint #x914 - (0 "SAGE" "THAT'S NOT A PUNCH ATTACK! LET'S SEE YOU PUNCH ALREADY.") - ) - -("sagevb34" :hint #x915 - (0 "SAGE" "JAK! USE A PUNCH.") - ) - -("sagevb35" :hint #x916 - (0 "SAGE" "GREAT JOB. USE THE PUNCH TO CLOSE DISTANCE QUICKLY IN A TOUGH SPOT.") - ) - -("sagevb36" :hint #x917 - (0 "SAGE" "SOMETIMES YOU'LL WANT TO HIT THINGS WITH A GREATER FORCE.") - (218 "SAGE" "TO BREAK ONE OF THESE BOXES, YOU SHOULD JUMP IN THE AIR") - (420 "SAGE" "AND THEN DIVE DOWN ONTO IT, HANDS FIRST.") - ) - -("sagevb37" :hint #x918 - (0 "SAGE" "WHEN YOU GET SOME CONFIDENCE, TRY USING SOME OF YOUR MOVES IN COMBINATIONS.") - ) - -("sagevb38" :hint #x919 - (0 "SAGE" "YOU CAN'T COME BACK THROUGH THE WARP GATE UNTIL YOU FIND") - (168 "SAGE" "ALL 4 POWER CELLS ON THIS ISLAND.") - ) - -("sagevb39" :hint #x91a - (0 "SAGE" "GREAT! YOU FOUND ALL OF THE POWER CELLS ON THE ISLAND.") - (269 "SAGE" "COME BACK TO THE WARP GATE SO I CAN BRING YOU BACK TO THE LAB. HURRY UP!") - ) - ;; ----------------- ;; uncategorized ;; ----------------- diff --git a/game/assets/jak1/subtitle/game_subtitle_es.gd b/game/assets/jak1/subtitle/game_subtitle_es.gd index 711666ce86..12c55657eb 100644 --- a/game/assets/jak1/subtitle/game_subtitle_es.gd +++ b/game/assets/jak1/subtitle/game_subtitle_es.gd @@ -8,10 +8,6 @@ ;; sidekick ;; ----------------- -;; ----------------- -;; village1 -;; ----------------- - ;; ----------------- ;; oracle ;; ----------------- @@ -20,6 +16,14 @@ (0 "ORÁCULO" "HABÉIS DEMOSTRADO SER HONESTOS. É AQUÍ UNA BATERÍA.") ) +;; ----------------- +;; training +;; ----------------- + +;; ----------------- +;; village1 +;; ----------------- + ;; ----------------- ;; beach ;; ----------------- @@ -36,10 +40,42 @@ ;; firecanyon ;; ----------------- +;; ----------------- +;; village2 +;; ----------------- + ;; ----------------- ;; swamp ;; ----------------- +;; ----------------- +;; rolling +;; ----------------- + +;; ----------------- +;; sunken +;; ----------------- + +;; ----------------- +;; ogre +;; ----------------- + +;; ----------------- +;; village3 +;; ----------------- + +;; ----------------- +;; snowy +;; ----------------- + +;; ----------------- +;; spidercave +;; ----------------- + +;; ----------------- +;; lavatube +;; ----------------- + ;; ----------------- ;; citadel ;; ----------------- @@ -48,10 +84,6 @@ ;; finalboss ;; ----------------- -;; ----------------- -;; training -;; ----------------- - ;; ----------------- ;; uncategorized ;; ----------------- diff --git a/game/assets/jak1/subtitle/subtitle-editor-db.json b/game/assets/jak1/subtitle/subtitle-editor-db.json index 07ed5d7d08..8826b65fa3 100644 --- a/game/assets/jak1/subtitle/subtitle-editor-db.json +++ b/game/assets/jak1/subtitle/subtitle-editor-db.json @@ -278,7 +278,7 @@ "entity_type": "geologist", "process_name": "geologist-1", "continue_name": "village2-start", - "move_to": [-56.6, 11.0, 32.9], + "move_to": [194.6, 11.0, -1605.9], "execute_code": "(send-event __GET-PROCESS__ 'play-anim)", "requirements": [] }, diff --git a/game/assets/jak1/subtitle/subtitle-groups.json b/game/assets/jak1/subtitle/subtitle-groups.json index a36aa75876..a6a057b644 100644 --- a/game/assets/jak1/subtitle/subtitle-groups.json +++ b/game/assets/jak1/subtitle/subtitle-groups.json @@ -2,16 +2,24 @@ "_groups": [ "intro", "sidekick", - "village1", "oracle", + "training", + "village1", "beach", "jungle", "misty", "firecanyon", + "village2", "swamp", + "rolling", + "sunken", + "ogre", + "village3", + "snowy", + "spidercave", + "lavatube", "citadel", "finalboss", - "training", "uncategorized" ], "beach": [ @@ -49,18 +57,18 @@ "BIR-LO02", "BIR-LO03", "sksp0019", - "sksp0026", - "sksp0030", - "sksp0034", "sksp0020", "sksp0022", "sksp0023", "sksp0024", "sksp0025", + "sksp0026", "sksp0027", "sksp0029", - "sagevb01", + "sksp0030", + "sksp0034", "sksp0443", + "sagevb01", "mayor-introduction", "mayor-reminder-beams", "mayor-reminder-donation", @@ -72,7 +80,10 @@ "bird-lady-introduction", "bird-lady-reminder-1", "bird-lady-reminder-2", - "bird-lady-beach-resolution" + "bird-lady-beach-resolution", + "sksp0028", + "sksp0021", + "BIR-am08" ], "citadel": [ "green-sagecage-introduction", @@ -189,8 +200,6 @@ "FIS-LO05", "FIS-TA01", "FIS-TA02", - "FIS-TA1A", - "FIS-TA2A", "FIS-TA03", "FIS-TA04", "FIS-TA05", @@ -200,42 +209,58 @@ "FIS-TA09", "FIS-TA10", "FIS-TA11", - "sksp0038", - "sksp0040", - "sksp0041", + "FIS-TA1A", + "FIS-TA2A", + "asstvb02", "sksp0011", - "sksp0039", "sksp0018", "sksp0037", - "sksp0b42", - "asstvb02", + "sksp0038", + "sksp0039", + "sksp0040", + "sksp0041", "sksp0049", "sksp0050", "sksp0051", "sksp0052", "sksp0053", "sksp0054", + "sksp0b42", "fisher-introduction", "fisher-reminder-1", "fisher-reject", "fisher-accept", "fisher-resolution" ], + "lavatube": [ + "asstva74", + "assistant-lavatube-start-resolution", + "assistant-lavatube-end-resolution", + "sksp0375" + ], "misty": [ + "asstvb03", + "sagevb02", "sksp0031", - "sksp0064", - "sksp0067", + "sksp0056", "sksp0059", "sksp0060", - "sksp0056", "sksp0062", "sksp0063", - "sagevb02", - "asstvb03", + "sksp0064", + "sksp0067", "sksp0069", "sksp0070", "sksp0435" ], + "ogre": [ + "gamcam23", + "asstvb23", + "flying-lurker-intro", + "asstvb24", + "sksp0321", + "asstvb25" + ], "oracle": [ "oracle-intro-1", "oracle-reminder-1", @@ -244,12 +269,35 @@ "oracle-right-eye-2", "oracle-left-eye-2", "oracle-right-eye-3", - "oracle-left-eye-3" + "oracle-left-eye-3", + "oracle-intro-2", + "oracle-reminder-2", + "oracle-intro-3" + ], + "rolling": [ + "asstvb20", + "sagevb03", + "sksp0109", + "sksp0112", + "sksp0113", + "sksp0114", + "sksp0116", + "sksp0119", + "sksp0120", + "sksp0121" ], "sidekick": [ - "sksp0014", - "sksp0009", - "sksp0035", + "death-0181", + "death-0182", + "death-0184", + "death-0186", + "death-0187", + "death-0191", + "death-0193", + "death-0195", + "death-0197", + "death-0199", + "death-0202", "sksp0001", "sksp0002", "sksp0003", @@ -258,6 +306,12 @@ "sksp0006", "sksp0007", "sksp0008", + "sksp0009", + "sksp0014", + "sksp0035", + "sksp0071", + "sksp0072", + "sksp0073", "sksp009a", "sksp009b", "sksp009c", @@ -268,17 +322,84 @@ "sksp009i", "sksp009j", "sksp009k", - "sksp0071", - "sksp0072", - "sksp0073", - "sksp0145" + "sksp0110", + "sksp0145", + "sksp0328" + ], + "snowy": [ + "sksp0346", + "sksp0350", + "sksp0360", + "sksp0345" + ], + "spidercave": [ + "sksp0332", + "sksp0333", + "sksp0327", + "sksp0334", + "sksp0341" + ], + "sunken": [ + "sksp0123", + "sksp0124", + "sksp0128", + "sksp0133", + "sksp0134", + "asstvb22", + "sksp0131", + "sksp0127", + "sksp0130", + "sksp0125" ], "swamp": [ "billy-introduction", "billy-reject", "billy-accept", "billy-resolution", - "billy-reminder-1" + "billy-reminder-1", + "BIL-AM01", + "BIL-AM02", + "BIL-AM03", + "BIL-AM04", + "BIL-AM05", + "BIL-AM06", + "BIL-AM07", + "BIL-AM08", + "BIL-AM1A", + "BIL-AM2A", + "BIL-AM2B", + "BIL-LO01", + "BIL-LO02", + "BIL-LO03", + "BIL-LO1A", + "BIL-LO2A", + "BIL-LO2B", + "BIL-TA01", + "BIL-TA02", + "BIL-TA03", + "BIL-TA04", + "BIL-TA05", + "BIL-TA08", + "BIL-TA09", + "BIL-TA1A", + "BIL-TA2A", + "BIL-TA3A", + "BIL-TA4A", + "BIL-TA4B", + "BIL-TA5A", + "SKSP009F", + "asstvb21", + "sagevb04", + "sksp0138", + "sksp0143", + "sksp0144", + "sksp0151", + "sksp0152", + "sksp0156", + "sksp0157", + "sksp0158", + "sksp0159", + "sksp0160" ], "training": [ "asstvb40", @@ -311,11 +432,6 @@ ], "uncategorized": [], "village1": [ - "SAGELP03", - "SAGELP04", - "SAGELP05", - "SAGELP06", - "SAGELP11", "ASSTLP01", "ASSTLP02", "ASSTLP03", @@ -332,14 +448,19 @@ "FAR-AM2A", "FAR-LO01", "FAR-LO1A", + "SAGELP03", + "SAGELP04", + "SAGELP05", + "SAGELP06", + "SAGELP11", + "asstvb04", + "asstvb08", "sksp0010", "sksp0013", "sksp0015", "sksp0017", "sksp0043", "sksp018a", - "asstvb04", - "asstvb08", "sage-introduction-misty-cannon", "sage-reminder-1-misty-cannon", "sage-reminder-1-ecorocks", @@ -357,6 +478,137 @@ "explorer-introduction", "explorer-reminder-1", "explorer-reminder-2", - "explorer-resolution" + "explorer-resolution", + "EXP-LO1A" + ], + "village2": [ + "asstvb28", + "asstvb29", + "asstvb30", + "ASSTLP23", + "ASSTLP24", + "SAGELP20", + "SAGELP21", + "SAGELP22", + "SAGELP23", + "SAGELP24", + "asstvb72", + "assistant-village2-introduction", + "sage-bluehut-introduction-crop-dusting", + "assistant-village2-introduction-room", + "sage-bluehut-reminder-1-crop-dusting", + "assistant-village2-reminder-1-room", + "sage-bluehut-introduction-prec-arm", + "sage-bluehut-reminder-1-prec-arm", + "assistant-village2-introduction-flutflut", + "assistant-village2-reminder-1-flutflut", + "assistant-village2-introduction-robbers", + "assistant-village2-reminder-1-robbers", + "asstvb71", + "assistant-village2-resolution", + "GEO-AM01", + "GEO-AM02", + "GEO-AM03", + "GEO-AM04", + "GEO-AM05", + "GEO-AM06", + "GEO-AM07", + "GEO-AM08", + "GEO-LO01", + "GEO-LO02", + "geologist-introduction", + "geologist-reminder-money", + "geologist-resolution-money", + "geologist-reminder-moles", + "geologist-resolution-moles", + "GAM-AM01", + "GAM-AM02", + "GAM-AM03", + "GAM-AM04", + "GAM-AM05", + "GAM-AM06", + "GAM-AM07", + "GAM-AM08", + "GAM-AM09", + "GAM-AM10", + "GAM-AM11", + "GAM-AM12", + "GAM-AM13", + "gambler-reminder-race", + "gambler-reminder-money", + "gambler-introduction-1", + "gambler-resolution-money", + "gambler-resolution-race", + "WAR-LO1A", + "WAR-LO1B", + "WAR-LO1C", + "warrior-introduction", + "warrior-reminder-1", + "warrior-resolution" + ], + "village3": [ + "asstv103", + "asstva73", + "asstvb75", + "asstvb76", + "sage-village3-introduction", + "ASSTLP31", + "ASSTLP32", + "ASSTLP33", + "ASSTLP34", + "ASSTLP35", + "ASSTLP36", + "ASSTLP37", + "SAGELP31", + "SAGELP32", + "SAGELP33", + "SAGELP34", + "SAGELP35", + "SAGELP36", + "SAGELP37", + "SAGELP38", + "assistant-village3-reminder", + "sage-village3-introduction-dark-eco", + "sage-village3-reminder-1-dark-eco", + "sage-village3-introduction-rams", + "sage-village3-reminder-1-rams", + "MSH-AM09", + "MSH-AM1A", + "minershort-introduction-orbs", + "minershort-resolution-1-orbs", + "minershort-reminder-2-orbs", + "minershort-reminder-1-orbs", + "minershort-resolution-2-orbs", + "minershort-introduction-gnawers", + "minershort-reminder-1-gnawers", + "MIN-LO01", + "MIN-LO03", + "MIN-LO04", + "MIN-LO05", + "MIN-LO06", + "MSH-AM01", + "MSH-AM02", + "MSH-AM03", + "MSH-AM04", + "MSH-AM05", + "MSH-AM06", + "MSH-AM07", + "MSH-AM08", + "MSH-AM10", + "MSH-AM11", + "MSH-AM12", + "MSH-AM2A", + "MSH-AM3A", + "MTA-AM01", + "MTA-AM02", + "MTA-AM03", + "MTA-AM04", + "MTA-AM05", + "MTA-AM06", + "MTA-AM07", + "MTA-AM08", + "MTA-AM09", + "asstv104", + "asstv105" ] } diff --git a/game/tools/subtitles/subtitle_editor.cpp b/game/tools/subtitles/subtitle_editor.cpp index a975bdf366..73a20aedc0 100644 --- a/game/tools/subtitles/subtitle_editor.cpp +++ b/game/tools/subtitles/subtitle_editor.cpp @@ -152,7 +152,7 @@ void SubtitleEditor::draw_window() { ImGui::Text("Saved!"); ImGui::PopStyleColor(); } else { - ImGui::PushStyleColor(ImGuiCol_Text, m_success_text_color); + ImGui::PushStyleColor(ImGuiCol_Text, m_error_text_color); ImGui::Text("Error!"); ImGui::PopStyleColor(); } @@ -182,8 +182,14 @@ void SubtitleEditor::draw_window() { if (ImGui::TreeNode("All Cutscenes")) { ImGui::InputText("New Scene Name", &m_new_scene_name); - // TODO - make this a dropdown - ImGui::InputText("New Scene Group", &m_new_scene_group); + if (ImGui::BeginCombo("Sorting Group", m_new_scene_group.c_str())) { + for (size_t i = 0; i < m_subtitle_db.m_subtitle_groups->m_group_order.size(); ++i) { + if (ImGui::Selectable(m_subtitle_db.m_subtitle_groups->m_group_order[i].c_str())) { + m_new_scene_group = m_subtitle_db.m_subtitle_groups->m_group_order[i]; + } + } + ImGui::EndCombo(); + } ImGui::InputText("Filter", &m_filter, ImGuiInputTextFlags_::ImGuiInputTextFlags_AutoSelectAll); if (is_scene_in_current_lang(m_new_scene_name)) { ImGui::PushStyleColor(ImGuiCol_Text, m_error_text_color); @@ -195,7 +201,8 @@ void SubtitleEditor::draw_window() { ImGui::Text("You must provide a group to sort the scene into!"); ImGui::PopStyleColor(); } - if (!is_scene_in_current_lang(m_new_scene_name) && !m_new_scene_group.empty()) { + if (!is_scene_in_current_lang(m_new_scene_name) && !m_new_scene_name.empty() && + !m_new_scene_group.empty()) { if (ImGui::Button("Add Scene")) { GameSubtitleSceneInfo newScene; newScene.m_name = m_new_scene_name; @@ -203,8 +210,17 @@ void SubtitleEditor::draw_window() { newScene.m_id = 0; // TODO - id is always zero, bug in subtitles.cpp? newScene.m_sorting_group = m_new_scene_group; m_subtitle_db.m_banks.at(m_current_language)->add_scene(newScene); + m_subtitle_db.m_subtitle_groups->add_scene(newScene.m_sorting_group, newScene.m_name); + if (m_add_new_scene_as_current) { + auto& scenes = m_subtitle_db.m_banks.at(m_current_language)->m_scenes; + auto& scene_info = scenes[m_new_scene_name]; + m_current_scene = &scene_info; + } m_new_scene_name = ""; } + ImGui::SameLine(); + ImGui::Checkbox("Add as Current Scene", &m_add_new_scene_as_current); + ImGui::NewLine(); } draw_all_cutscene_groups(); @@ -213,10 +229,17 @@ void SubtitleEditor::draw_window() { if (ImGui::TreeNode("All Hints")) { ImGui::InputText("New Scene Name", &m_new_scene_name); - // TODO - make this a dropdown ImGui::InputText("New Scene ID (hex)", &m_new_scene_id); - ImGui::InputText("New Scene Group", &m_new_scene_group); - ImGui::InputText("Filter", &m_filter, ImGuiInputTextFlags_::ImGuiInputTextFlags_AutoSelectAll); + if (ImGui::BeginCombo("Sorting Group", m_new_scene_group.c_str())) { + for (size_t i = 0; i < m_subtitle_db.m_subtitle_groups->m_group_order.size(); ++i) { + if (ImGui::Selectable(m_subtitle_db.m_subtitle_groups->m_group_order[i].c_str())) { + m_new_scene_group = m_subtitle_db.m_subtitle_groups->m_group_order[i]; + } + } + ImGui::EndCombo(); + } + ImGui::InputText("Filter", &m_filter_hints, + ImGuiInputTextFlags_::ImGuiInputTextFlags_AutoSelectAll); if (is_scene_in_current_lang(m_new_scene_name)) { ImGui::PushStyleColor(ImGuiCol_Text, m_error_text_color); ImGui::Text("Scene already exists with that name, no!"); @@ -227,7 +250,8 @@ void SubtitleEditor::draw_window() { ImGui::Text("You must provide a group to sort the scene into!"); ImGui::PopStyleColor(); } - if (!is_scene_in_current_lang(m_new_scene_name) && !m_new_scene_group.empty()) { + if (!is_scene_in_current_lang(m_new_scene_name) && !m_new_scene_name.empty() && + !m_new_scene_group.empty()) { if (ImGui::Button("Add Scene")) { GameSubtitleSceneInfo newScene; newScene.m_name = m_new_scene_name; @@ -238,8 +262,11 @@ void SubtitleEditor::draw_window() { newScene.m_kind = SubtitleSceneKind::HintNamed; newScene.m_id = strtoul(m_new_scene_id.c_str(), nullptr, 16); } + // currently hints have no way in the editor to add a line, so give us one for free + newScene.add_line(0, "", "", "", "", false); newScene.m_sorting_group = m_new_scene_group; m_subtitle_db.m_banks.at(m_current_language)->add_scene(newScene); + m_subtitle_db.m_subtitle_groups->add_scene(newScene.m_sorting_group, newScene.m_name); m_new_scene_name = ""; } } @@ -337,7 +364,9 @@ void SubtitleEditor::draw_repl_options() { void SubtitleEditor::draw_all_cutscene_groups() { for (auto& group_name : m_subtitle_db.m_subtitle_groups->m_group_order) { - ImGui::SetNextItemOpen(true); + if (!m_filter.empty() && m_filter != m_filter_placeholder) { + ImGui::SetNextItemOpen(true); + } if (ImGui::TreeNode(group_name.c_str())) { draw_all_scenes(group_name, false); draw_all_scenes(group_name, true); @@ -348,7 +377,9 @@ void SubtitleEditor::draw_all_cutscene_groups() { void SubtitleEditor::draw_all_hint_groups() { for (auto& group_name : m_subtitle_db.m_subtitle_groups->m_group_order) { - ImGui::SetNextItemOpen(true); + if (!m_filter_hints.empty() && m_filter_hints != m_filter_placeholder) { + ImGui::SetNextItemOpen(true); + } if (ImGui::TreeNode(group_name.c_str())) { draw_all_hints(group_name, false); draw_all_hints(group_name, true); @@ -427,8 +458,8 @@ void SubtitleEditor::draw_all_hints(std::string group_name, bool base_cutscenes) scene_info.m_kind != SubtitleSceneKind::HintNamed) { continue; } - if ((!m_filter.empty() && m_filter != m_filter_placeholder) && - scene_name.find(m_filter) == std::string::npos) { + if ((!m_filter_hints.empty() && m_filter_hints != m_filter_placeholder) && + scene_name.find(m_filter_hints) == std::string::npos) { continue; } if (base_cutscenes) { @@ -478,6 +509,7 @@ void SubtitleEditor::draw_subtitle_options(GameSubtitleSceneInfo& scene, bool cu if (ImGui::Button("Play Hint")) { repl_play_hint(scene.m_name); } + // TODO add "Remove Hint" button (if you named it wrong or something) ImGui::SameLine(); ImGui::PushStyleColor(ImGuiCol_Text, m_disabled_text_color); ImGui::TextWrapped("You may have to click twice, load times cause issues"); @@ -511,9 +543,12 @@ void SubtitleEditor::draw_subtitle_options(GameSubtitleSceneInfo& scene, bool cu std::string summary; if (subtitleLine.line_utf8.empty()) { summary = fmt::format("[{}] Clear Screen", subtitleLine.frame); - } else { + } else if (subtitleLine.line_utf8.length() >= 30) { summary = fmt::format("[{}] {} - '{}...'", subtitleLine.frame, subtitleLine.speaker_utf8, subtitleLine.line_utf8.substr(0, 30)); + } else { + summary = fmt::format("[{}] {} - '{}'", subtitleLine.frame, subtitleLine.speaker_utf8, + subtitleLine.line_utf8.substr(0, 30)); } if (subtitleLine.line_utf8.empty()) { ImGui::PushStyleColor(ImGuiCol_Text, m_disabled_text_color); @@ -530,8 +565,10 @@ void SubtitleEditor::draw_subtitle_options(GameSubtitleSceneInfo& scene, bool cu ImGui::InputText("Text", &subtitleLine.line_utf8); ImGui::Checkbox("Offscreen?", &subtitleLine.offscreen); ImGui::PushStyleColor(ImGuiCol_Button, m_warning_color); - if (ImGui::Button("Remove Line")) { - scene.m_lines.erase(scene.m_lines.begin() + i); + if (scene.m_lines.size() > 1) { // prevent creating an empty scene + if (ImGui::Button("Remove Line")) { + scene.m_lines.erase(scene.m_lines.begin() + i); + } } ImGui::PopStyleColor(); ImGui::TreePop(); @@ -544,8 +581,8 @@ void SubtitleEditor::draw_subtitle_options(GameSubtitleSceneInfo& scene, bool cu void SubtitleEditor::draw_new_cutscene_line_form() { ImGui::InputInt("Frame Number", &m_current_scene_frame, ImGuiInputTextFlags_::ImGuiInputTextFlags_CharsDecimal); - ImGui::InputText("Text", &m_current_scene_text); ImGui::InputText("Speaker", &m_current_scene_speaker); + ImGui::InputText("Text", &m_current_scene_text); ImGui::Checkbox("Offscreen", &m_current_scene_offscreen); bool rendered_text_entry_btn = false; if (m_current_scene_frame < 0 || m_current_scene_text.empty() || @@ -567,9 +604,9 @@ void SubtitleEditor::draw_new_cutscene_line_form() { } else { if (rendered_text_entry_btn) { ImGui::SameLine(); - if (ImGui::Button("Add Clear Screen Entry")) { - m_current_scene->add_line(m_current_scene_frame, "", "", "", "", false); - } + } + if (ImGui::Button("Add Clear Screen Entry")) { + m_current_scene->add_line(m_current_scene_frame, "", "", "", "", false); } } ImGui::NewLine(); diff --git a/game/tools/subtitles/subtitle_editor.h b/game/tools/subtitles/subtitle_editor.h index 4d979482c2..ea6a73fa0f 100644 --- a/game/tools/subtitles/subtitle_editor.h +++ b/game/tools/subtitles/subtitle_editor.h @@ -52,6 +52,7 @@ class SubtitleEditor { std::string m_current_scene_text = ""; std::string m_current_scene_speaker = ""; bool m_current_scene_offscreen = false; + bool m_add_new_scene_as_current = false; std::string m_new_scene_name = ""; std::string m_new_scene_group = ""; diff --git a/goal_src/pc/subtitle.gc b/goal_src/pc/subtitle.gc index 82cddb8813..665a13630c 100644 --- a/goal_src/pc/subtitle.gc +++ b/goal_src/pc/subtitle.gc @@ -21,7 +21,7 @@ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -(defconstant PC_SUBTITLE_FILE_SIZE (* 128 1024)) ;; 128K heap for subtitles. adjust later if necessary. +(defconstant PC_SUBTITLE_FILE_SIZE (* 192 1024)) ;; 192K heap for subtitles. adjust later if necessary. (defconstant PC_SUBTITLE_FILE_NAME "subtit") (defconstant PC_SUBTITLE_STR_ADJUST 17) (defglobalconstant PC_SUBTITLE_DEBUG #f)