From 8eb0796f8e3010a9e4449b0d2351e69bf9970778 Mon Sep 17 00:00:00 2001 From: ManDude <7569514+ManDude@users.noreply.github.com> Date: Sun, 24 Apr 2022 20:15:16 +0100 Subject: [PATCH] subtitle editing and text project compiler rework (#1331) * add a `subtitle` bucket and rename buckets 67 and 68 * automatic `heap-base` * subtitles editor * adjust default params * bug * Update subtitle.gc * fix blue color inconsistency in progress * void. * Update subtitle.gc * Update subtitle.gc * Extend `heap-base` detection to check for errors * sometimes it's actually manually set! * remove broken error check * rework how compiling text files works * try out subtitles source v2 * bugfix * oops * Update game_text_common.cpp --- common/type_system/Type.h | 1 + common/type_system/deftype.cpp | 30 +- common/util/FontUtils.cpp | 4 +- decompiler/config/all-types.gc | 13 +- game/assets/game_subtitle.gp | 4 +- game/assets/game_text.gp | 2 +- game/assets/jak1/subtitle/game_subtitle_en.gs | 222 +++++++ .../assets/jak1/subtitle/game_subtitle_en.txt | 111 ---- game/assets/jak1/subtitle/game_subtitle_es.gs | 6 + .../assets/jak1/subtitle/game_subtitle_es.txt | 6 - .../{game_text_en.txt => game_text_en.gs} | 0 .../opengl_renderer/OpenGLRenderer.cpp | 11 +- game/graphics/opengl_renderer/buckets.h | 9 +- goal_src/engine/ambient/ambient.gc | 10 +- goal_src/engine/camera/cam-debug.gc | 10 +- goal_src/engine/camera/cam-layout.gc | 2 +- goal_src/engine/camera/cam-states.gc | 2 +- goal_src/engine/camera/cam-update.gc | 2 +- goal_src/engine/collide/collide-cache.gc | 8 +- goal_src/engine/collide/collide-edge-grab.gc | 32 +- goal_src/engine/collide/collide-mesh.gc | 2 +- goal_src/engine/collide/collide-shape.gc | 20 +- goal_src/engine/collide/main-collide.gc | 2 +- goal_src/engine/debug/anim-tester.gc | 38 +- goal_src/engine/debug/debug.gc | 4 +- goal_src/engine/debug/menu.gc | 12 +- goal_src/engine/debug/part-tester.gc | 2 +- goal_src/engine/dma/dma-buffer.gc | 2 +- goal_src/engine/dma/dma-h.gc | 23 +- goal_src/engine/draw/drawable.gc | 32 +- goal_src/engine/draw/process-drawable.gc | 8 +- goal_src/engine/entity/entity.gc | 30 +- goal_src/engine/game/game-info.gc | 10 +- goal_src/engine/game/main.gc | 12 +- goal_src/engine/game/task/process-taskable.gc | 4 +- goal_src/engine/geometry/vol.gc | 2 +- goal_src/engine/gfx/ocean/ocean-mid.gc | 10 +- goal_src/engine/gfx/ripple.gc | 2 +- goal_src/engine/gfx/tfrag/tfrag-methods.gc | 6 +- goal_src/engine/level/load-boundary.gc | 6 +- goal_src/engine/nav/navigate.gc | 34 +- goal_src/engine/nav/path.gc | 8 +- goal_src/engine/physics/trajectory.gc | 2 +- .../engine/sparticle/sparticle-launcher.gc | 2 +- goal_src/engine/target/joint-mod-h.gc | 6 +- goal_src/engine/target/logic-target.gc | 44 +- goal_src/engine/target/sidekick.gc | 6 +- goal_src/engine/target/target-util.gc | 8 +- goal_src/engine/ui/hud-classes.gc | 10 +- goal_src/engine/ui/progress/progress-draw.gc | 4 +- goal_src/engine/ui/progress/progress.gc | 8 +- goal_src/engine/ui/text.gc | 417 ++++++------- goal_src/game.gp | 21 +- goal_src/goal-lib.gc | 13 +- goal_src/levels/beach/air-h.gc | 88 ++- goal_src/levels/common/ropebridge.gc | 2 +- goal_src/levels/jungle/fisher.gc | 2 +- goal_src/levels/misty/mistycannon.gc | 2 +- goal_src/levels/ogre/ogreboss.gc | 2 +- goal_src/levels/racer_common/target-racer.gc | 10 +- goal_src/levels/sunken/target-tube.gc | 12 +- goal_src/levels/swamp/swamp-rat-nest.gc | 2 +- goal_src/levels/village1/fishermans-boat.gc | 12 +- goal_src/pc/pckernel-h.gc | 6 - goal_src/pc/pckernel.gc | 9 +- goal_src/pc/progress-pc.gc | 8 +- goal_src/pc/subtitle.gc | 547 +++++++++++++++--- goalc/CMakeLists.txt | 3 +- goalc/compiler/Compiler.h | 3 +- .../compiler/compilation/CompilerControl.cpp | 50 +- goalc/data_compiler/game_subtitle.cpp | 192 ------ goalc/data_compiler/game_text.cpp | 210 ------- goalc/data_compiler/game_text.h | 62 -- goalc/data_compiler/game_text_common.cpp | 408 +++++++++++++ .../{game_subtitle.h => game_text_common.h} | 74 ++- goalc/make/Tools.cpp | 56 +- goalc/make/Tools.h | 1 - test/goalc/test_with_game.cpp | 2 +- test/test_data/test_game_text.gp | 2 + 79 files changed, 1739 insertions(+), 1321 deletions(-) create mode 100644 game/assets/jak1/subtitle/game_subtitle_en.gs delete mode 100644 game/assets/jak1/subtitle/game_subtitle_en.txt create mode 100644 game/assets/jak1/subtitle/game_subtitle_es.gs delete mode 100644 game/assets/jak1/subtitle/game_subtitle_es.txt rename game/assets/jak1/text/{game_text_en.txt => game_text_en.gs} (100%) delete mode 100644 goalc/data_compiler/game_subtitle.cpp delete mode 100644 goalc/data_compiler/game_text.cpp delete mode 100644 goalc/data_compiler/game_text.h create mode 100644 goalc/data_compiler/game_text_common.cpp rename goalc/data_compiler/{game_subtitle.h => game_text_common.h} (51%) create mode 100644 test/test_data/test_game_text.gp diff --git a/common/type_system/Type.h b/common/type_system/Type.h index 02a544bbe1..c5d8fdafdc 100644 --- a/common/type_system/Type.h +++ b/common/type_system/Type.h @@ -282,6 +282,7 @@ class StructureType : public ReferenceType { bool is_always_stack_singleton() const { return m_always_stack_singleton; } void set_allow_misalign(bool misalign) { m_allow_misalign = misalign; } void set_gen_inspect(bool gen_inspect) { m_generate_inspect = gen_inspect; } + int size() const { return m_size_in_mem; } protected: friend class TypeSystem; diff --git a/common/type_system/deftype.cpp b/common/type_system/deftype.cpp index 075a2077ec..053b189db5 100644 --- a/common/type_system/deftype.cpp +++ b/common/type_system/deftype.cpp @@ -316,6 +316,7 @@ StructureDefResult parse_structure_def( int method_count_assert = -1; uint64_t flag_assert = 0; bool flag_assert_set = false; + bool set_heapbase = false; while (!rest->is_empty_list()) { if (car(rest).is_pair()) { auto opt_list = &car(rest); @@ -366,6 +367,7 @@ StructureDefResult parse_structure_def( } rest = cdr(rest); flags.heap_base = hb; + set_heapbase = true; } else if (opt_name == ":allow-misaligned") { result.allow_misaligned = true; } else if (opt_name == ":final") { @@ -378,6 +380,25 @@ StructureDefResult parse_structure_def( } } + if (ts->fully_defined_type_exists(TypeSpec("process")) && + ts->tc(TypeSpec("process"), TypeSpec(type->get_parent()))) { + // check heap-base if this is a child of process. + auto process_type = ts->get_type_of_type("process"); + auto auto_hb = (flags.size - process_type->size() + 0xf) & ~0xf; + if (!set_heapbase) { + // wasnt set manually so set automatically. + flags.heap_base = auto_hb; + } else if (flags.heap_base < auto_hb) { + // was set manually so verify if that's correct. + throw std::runtime_error( + fmt::format("Process heap underflow in type {}: heap-base is {} vs. auto-detected {}", + type->get_name(), flags.heap_base, auto_hb)); + //} else if (flags.heap_base != auto_hb) { + // fmt::print("Type {} has manual heap-base ({} vs {}). This is fine. \n", type->get_name(), + // flags.heap_base, auto_hb); + } + } + if (size_assert != -1 && flags.size != u16(size_assert)) { throw std::runtime_error("Type " + type->get_name() + " came out to size " + std::to_string(int(flags.size)) + " but size-assert was set to " + @@ -398,15 +419,6 @@ StructureDefResult parse_structure_def( flags.flag, flag_assert)); } - if (result.flags.heap_base) { - int heap_start_1 = 112 + result.flags.heap_base; - int heap_start_2 = (result.flags.size + 15) & (~15); - if (heap_start_1 != heap_start_2) { - throw std::runtime_error(fmt::format("Heap base bad on {}: {} vs {}\n", type->get_name(), - heap_start_1, heap_start_2)); - } - } - result.flags = flags; return result; } diff --git a/common/util/FontUtils.cpp b/common/util/FontUtils.cpp index dc046fe059..a48c236995 100644 --- a/common/util/FontUtils.cpp +++ b/common/util/FontUtils.cpp @@ -387,8 +387,8 @@ static std::vector g_encode_info_jak1 = { }; static std::vector g_replace_info_jak1 = { - // \" -> " (confusing) - {"\\\"", "\""}, + // \" -> " (yeah it looks confusing) + {"\"", "\\\""}, // other {"A~Y~-21H~-5Vº~Z", "Å"}, diff --git a/decompiler/config/all-types.gc b/decompiler/config/all-types.gc index 611a26134d..d2c4169016 100644 --- a/decompiler/config/all-types.gc +++ b/decompiler/config/all-types.gc @@ -501,7 +501,7 @@ (gmerc-tfrag-tex1 18) ;; generic merc, with tfrag textures, level 1 (shrub-tex0 19) (shrub0 20) - + (shrub-tex1 25) (shrub1 26) @@ -557,9 +557,12 @@ (pre-sprite-textures 65) ;; common (sprite 66) ;; debug spheres? 67 - (debug-draw0 67) + (debug 67) ;; debug text 68 - (debug-draw1 68) + (debug-no-zbuf 68) + + ;; extra buckets for pc port + (subtitle 69) ) (define-extern sinteger type) @@ -10259,7 +10262,7 @@ (normal-attack 14) (strong-attack 15) (indestructible 16) - + (fop17 17) ;; unused (eco-blocked 18) (respawn 19) @@ -11365,7 +11368,7 @@ (target-attack 12) ;; all target attacks (mother-spider 13) (cak-14 14) ;; unused - (blue-eco-suck 15) ;; manipy, orb-cache-top, + (blue-eco-suck 15) ;; manipy, orb-cache-top, (unknown-16 16) (unknown-17 17) (unknown-18 18) diff --git a/game/assets/game_subtitle.gp b/game/assets/game_subtitle.gp index dedcad416b..d262da393f 100644 --- a/game/assets/game_subtitle.gp +++ b/game/assets/game_subtitle.gp @@ -4,8 +4,8 @@ ;; you can find the game-text-version parsing in .cpp and an enum in goal-lib.gc (subtitle - (jak1-v1 "game/assets/jak1/subtitle/game_subtitle_en.txt") - (jak1-v1 "game/assets/jak1/subtitle/game_subtitle_es.txt") + (jak1-v1 "game/assets/jak1/subtitle/game_subtitle_en.gs") + (jak1-v1 "game/assets/jak1/subtitle/game_subtitle_es.gs") ) diff --git a/game/assets/game_text.gp b/game/assets/game_text.gp index 728481ca1c..06c63a1b61 100644 --- a/game/assets/game_text.gp +++ b/game/assets/game_text.gp @@ -5,7 +5,7 @@ (text (jak1-v1 "assets/game_text.txt") - (jak1-v1 "game/assets/jak1/text/game_text_en.txt") + (jak1-v1 "game/assets/jak1/text/game_text_en.gs") ) diff --git a/game/assets/jak1/subtitle/game_subtitle_en.gs b/game/assets/jak1/subtitle/game_subtitle_en.gs new file mode 100644 index 0000000000..119193de2f --- /dev/null +++ b/game/assets/jak1/subtitle/game_subtitle_en.gs @@ -0,0 +1,222 @@ +(language-id 0 6) + +;; ----------------- +;; intro + +("sage-intro-sequence-a" + (24 "SAGE" "I HAVE SPENT MY LIFE SEARCHING FOR THE ANSWERS THAT MY FATHER, AND MY FATHER'S FATHERS FAILED TO FIND.") + (260 "SAGE" "WHO WERE THE PRECURSORS? WHY DID THEY CREATE THE VAST MONOLITHS THAT LITHER OUR PLANET?") + (454 "SAGE" "HOW DID THEY HARNESS ECO, THE LIFE ENERGY OF THE WORLD? WHAT WAS THEIR PURPOSE? AND WHY DID THEY VANISH?") + (708) + (720 "SAGE" "I HAVE ASKED THE PLANTS, BUT THEY DO NOT REMEMBER.") + (818 "SAGE" "THE PLANTS HAVE ASKED THE ROCKS, BUT THE ROCKS DO NOT RECALL.") + (957 "SAGE" "EVEN THE ROCKS DO NOT RECALL...") + (1064) + (1090 "SAGE" "EVERY BONE IN MY BODY TELLS ME THAT THE ANSWERS REST ON THE SHOULDERS OF A YOUNG BOY") + (1297 "SAGE" "OBLIVIOUS TO HIS DESTINY, UNINTERESTED IN THE SEARCH FOR TRUTH, AND REJECTING OF MY GUIDANCE!") + (1545 "SAGE" "AND WHY WOULD HE WANT TO LISTEN TO OLD SAMOS THE SAGE ANYWAY?") + (1689 "SAGE" "I'M ONLY THE MASTER OF GREEN ECO, ONE OF THE WISEST MEN ON THE PLANET!") + (1875) + (1958 "SAGE" "SO IT SEEMS THE ANSWER BEGINS NOT WITH CAREFUL RESEARCH, OR SENSIBLE THINKING.") + (2145 "SAGE" "NAY! AS WITH MANY OF FATE'S MYSTERIES") + (2281 "SAGE" "IT BEGINS WITH BUT A SMALL ACT OF DISOBEDIENCE.") + (2440 "DAXTER" "HEY! UH, JAK? OL' GREEN STUFF TOLD US NOT TO COME HERE!") + ) + +("sidekick-human-intro-sequence-b" + (547 "OLD MAN" "CONTINUE YOUR SEARCH FOR ARTIFACTS AND ECO.") + (674 "OLD MAN" "IF THE LOCALS POSSESS PRECURSOR ITEMS, YOU KNOW WHAT TO DO.") + (842 "WOMAN" "DEAL HARSHLY WITH ANYBODY WHO STRAYS FROM THE VILLAGE.") + (937 "WOMAN" "WE WILL ATTACK IT IN DUE TIME.") + (1027) + ) + +("sidekick-human-intro-sequence-c" + (12 "DAXTER" "WHAT ARE WE DOING HERE ANYWAY, JAK? THIS PLACE GIVES ME THE CREEPS!") + (151) + (369 "DAXTER" "HUH?") + (404 "DAXTER" "(GROAN) STUPID PRECURSOR JUNK!") + (496) + (577 "DAXTER" "EEK! WHAT IS THAT DARK OOZE? IT SURE DON'T LOOK FRIENDLY.") + (721) + (777 "DAXTER" "THE SAGE YAPS ON ABOUT THE PRECURSORS THAT BUILT THIS PLACE ALL THE TIME.") + (909 "DAXTER" "\"WHERE DID THEY GO? WHY DID THEY BUILD THIS CRAP?\"") + (1014 "DAXTER" "NOW I LIKE PRECURSOR ORBS AND POWER CELLS AS MUCH AS THE NEXT GUY") + (1124 "DAXTER" "BUT IF YOU ASK ME, THEY MUST HAVE BEEN REAL LOSERS.") + (1212 "DAXTER" "WHOA! HOW DID YOU DO THAT?") + (1271) + (1331 "DAXTER" "JAK, I THINK WE'RE IN TROUBLE!") + (1386) + (1857 "DAXTER" "MAN, THAT STUNG.") + (1919) + (1941 "DAXTER" "I TOLD YOU WE SHOULDN'T 'A' COME HERE, AND YOU LISTENED?") + (2034) + (2057 "DAXTER" "WHAAAT?") + (2101) + (2189 "DAXTER" "WAAAAAAAAHHHHHHHH!!") + (2307 "DAXTER" "OKAY, OKAY. I'M FINE, I'M FINE...") + (2431) + (2481 "DAXTER" "WAAAAAAAAHHHHHHHH!!") + ) + +("sage-intro-sequence-d1" + (137 "SAGE" "WHAT IN GREEN TARNATION DO YOU TWO WANT?") + (220 "DAXTER" "WE- WE- WE WAS- THEY WAS- I'M- I WAS-") + (283 "SAGE" "DON'T TELL ME! INSTEAD OF HEEDING MY WISDOM, THE TWO OF YOU WENT MUCKING AROUND") + (446 "SAGE" "IN THE ONLY PLACE THAT I TOLD YOU NOT TO GO: MISTY ISLAND!") + (550 "DAXTER" "THAT'S RIGHT! AND THEN-") + (579 "SAGE" "AND, DAXTER, YOU'VE FINALLY TOOK A MUCH-NEEDED BATH, BUT IN A BATHTUB FILLED WITH DARK ECO.") + (793 "DAXTER" "LOOK, OLD MAN, ARE YOU GONNA KEEP YAPPIN', OR YOU GONNA HELP ME OUTTA THIS MESS!?") + (920 "SAGE" "I'M GONNA KEEP YAPPIN'! BECAUSE IN MY PROFESSIONAL OPINION, THE CHANGE IS AN IMPROVEMENT.") + (1079 "SAGE" "AND BESIDES... I COULDN'T HELP YOU IF I WANTED TO.") + (1186 "DAXTER" "WHAT!?") + (1221 "SAGE" "THERE'S ONLY ONE PERSON WHO HAS STUDIED DARK ECO LONG ENOUGH") + (1329 "SAGE" "TO HAVE A CHANCE AT RETURNING YOU TO YOUR PREVIOUS FORM:") + (1431 "SAGE" "GOL ACHERON, THE SAGE.") + (1496 "SAGE" "BUT HE LIVES FAR TO THE NORTH. FAR, FAR TO NORTH. NOBODY HAS SPOKEN TO HIM IN AGES.") + (1718 "SAGE" "I WOULD TELEPORT YOU THERE, BUT I CAN'T DO THAT EITHER.") + (1831 "SAGE" "NONE OF THE THREE SAGES THAT MAINTAIN THE OTHER TELEPORTER GATES") + (1934 "SAGE" "HAVE SEEN FIT TO TURN THEIR ENDS ON FOR QUITE A WHILE!") + ) + +("sage-intro-sequence-d2" + (3 "SAGE" "THE ONLY OTHER WAY NORTH IS BY FOOT THROUGH THE FIRE CANYON") + (114 "SAGE" "BUT ITS VOLCANIC SOIL IS HOT ENOUGH TO MELT PRECURSOR METAL.") + (224 "SAGE" "YOU CAN'T JUST WALK THROUGH IT.") + (270 "KEIRA" "BUT YOU COULD FLY OVER IT, IF YOU HAD A ZOOMER EQUIPPED WITH A HEAT SHIELD.") + (396 "KEIRA" "I JUST HAPPEN TO BE WORKING ON SUCH A THING AT THIS VERY MOMENT.") + (515 "KEIRA" "ALL I WOULD NEED IS TWENTY POWER CELLS TO GIVE IT ENOUGH ENERGY") + (605 "KEIRA" "TO WITHSTAND THE CANYON'S HEAT. ISN'T THAT RIGHT, DADDY?") + (697) + (699 "SAGE" "YES, KEIRA, THAT MIGHT WORK. BUT WHERE ARE A BOY") + (826 "SAGE" "AND A HALF!") + (857 "SAGE" "GOING TO GET TWENTY POWER CELLS?") + (911 "KEIRA" "FROM THE VILLAGERS! MOST OF THEM HAVE A POWER CELL OR TWO STASHED AWAY SOMEWHERE.") + (1050 "KEIRA" "AND EVEN IF THEY AREN'T WILLING TO JUST GIVE THEM AWAY") + (1133 "KEIRA" "GREASING THEIR PALMS WITH A FEW PRECURSOR ORBS SHOULD DO THE TRICK.") + (1249 "KEIRA" "AND I BET THERE ARE EVEN MORE OF THEM OUT IN THE WILDS JUST WAITING FOR SOME") + (1364 "KEIRA" "BRAVE ADVENTURER TO FIND.") + (1435 "DAXTER" "WELL WE'VE GOT THE BRAVE ADVENTURER, AT LEAST.") + (1529) + (1532 "SAGE" "BRAVE ADVENTURER?") + (1582 "SAGE" "YOU TWO COULDN'T FIND YOUR WAY OUT OF THE VILLAGE WITHOUT TRAINING!") + (1685) + (1689 "SAGE" "BEFORE YOU DO ANYTHING ELSE, YOU BETTER GO THROUGH THE WARP GATE AND GET") + (1810 "SAGE" "SOME PRACTICE ON GEYSER ROCK.") + (1872) + (1878 "DAXTER" "EHH, WE WON'T FIND ANY MORE OF THAT DARK-OO AND ECO STUFF, WILL WE?") + (1993 "DAXTER" "'CAUSE I'D HATE TO FALL IN AGAIN AND TURN INTO YOU!") + (2072 "SAGE" "GET IN THERE! BEFORE I TURN YOU BOTH INTO FERNS!") + (2192) + ) + + +;; ----------------- +;; oracle + +("oracle-right-eye-1" (0 "ORACLE" "FOR YOUR GIFT, ANOTHER POWER CELL IS YOURS.")) +("oracle-left-eye-1" (0 "ORACLE" "YOU HAVE PROVEN YOURSELF WORTHY. HERE IS A POWER CELL.")) +("oracle-right-eye-2" (0 "ORACLE" "HERE IS ANOTHER POWER CELL FOR YOUR QUEST.")) +("oracle-left-eye-2" (0 "ORACLE" "FOR YOUR SACRIFICE, I OFFER YOU A POWER CELL.")) +("oracle-right-eye-3" (0 "ORACLE" "YOU HAVE OBTAINED ANOTHER POWER CELL.")) +("oracle-left-eye-3" (0 "ORACLE" "FOR YOUR EFFORT, A POWER CELL IS THE REWARD.")) + +;; ----------------- +;; swamp + +("billy-introduction" + (6 "BILLY" "HOWDY, FRIENDS! ENJOYIN' MY BEAUTIFUL SWAMP? I OWN THESE HERE PARTS. EVERYTHING THAT DOESN'T SINK INTO THE MUD, THAT IS! (LAUGHS)") + (349) + (369 "DAXTER" "JUDGING BY THE SMELL, I'D WAGER YOUR BATHTUB SANK IN THE MUD LONG AGO.") + (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.") + (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!") + (1509) + (1527 "BILLY" "WILL YA HELP ME OUT?") + ) + +("billy-reject" + (7 "BILLY" "WELL, IF YOU CHANGE YOUR MIND, YOU KNOW WHERE TO FIND ME! (LAUGHS)") + ) + +("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.") + ) + +("billy-resolution" + (1 "BILLY" "WELL FRY MY HIDE! YOU SURE KNOW HOW TO SHOOT! THANKS A HEAP FOR THE HELP.") + ) + +("billy-reminder-1" + (36 "BILLY" "AHH, Y'ALL BACK TO HELP STOP THEM RATS?") + ) + +;; ----------------- +;; citadel + +("green-sagecage-introduction" + (130 "SAGE" "IT'S ABOUT TIME YOU TWO DECIDED TO SHOW UP!") + (207 "DAXTER" "NICE TO SEE YOU TOO! DO THEY HAVE YOU MOPPING THE FLOORS NOW?") + (343 "SAGE" "THERE'S NO TIME FOR JOKES, DAXTER. GOL AND MAIA KIDNAPPED US TO SAP OUR ENERGIES TO POWER THEIR ABOMINABLE MACHINE.") + (574 :offscreen "SAGE" "IT APPEARS THEY HAVE COMBINED THE FUNCTIONAL REMAINS OF A PRECURSOR ROBOT WITH SCAVENGED ARTIFACTS FROM ACROSS THE LAND.") + (800 :offscreen "SAGE" "THEN THEY ADDED A FEW DIABOLICAL ADDITIONS OF THEIR OWN, 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.") + ) + +("redsage-resolution" + (60 "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, YOU KNOW? (CHUCKLES) WHAT ARE YOUR NAMES?") + (429 "DAXTER" "I'M DAXTER! HE'S JAK, HE'S WITH ME.") + (540 :offscreen "RED SAGE" "GOOD JOB, DAXTER. YOU'RE A REAL HERO.") + (670) + (700 "RED SAGE" "YOU'VE GOT TO STOP GOL FROM LAUNCHING THE ROBOT. I'LL USE MY ECO POWER TO HELP OPEN THE SHIELD DOOR.") + ) + +("bluesage-resolution" + (60 "BLUE SAGE" "GOOD WORK, FELLOWS! OLD SAMOS WAS RIGHT ABOUT YOU!") + (165 "BLUE SAGE" "GREAT PILES OF PRECURSOR METAL! 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 BETWEEN MYSELF AND THE VAST PORTAL BELOW!") + (666 "DAXTER" "UH... YEAH. YOU DO THAT. WE'LL UH... JUST GO FIND MORE HELP.") + (873) + (891 :offscreen "DAXTER" "WEIRDO!") + (980) + ) + +("yellowsage-resolution" + (50 "YELLOW SAGE" "WHO WOULDA THOUGHT I'D LIVE TO SEE THE DAY WHEN I NEEDED TO BE RESCUED BY A BOY AND HIS MUSKRAT!") + (271 "YELLOW SAGE" "(SIGHS) I'M GONNA GIVE GOL AND MAIA A LITTLE PAYBACK FOR THIS EMBARRASSMENT!") + (480 "YELLOW SAGE" "THEN WE'LL SEE ABOUT COOKING UP SOME MUSKRAT STEW...") + (606) + ) + +("green-sagecage-resolution" + (30 "SAGE" "GOOD WORK, BOYS! YOU'RE REAL HEROES NOW. I'LL COMBINE MY GREEN ECO POWER WITH THE OTHER THREE SAGES") + (284 "SAGE" "AND TOGETHER WE'LL OPEN THE SHIELD DOOR SURROUNDING THE PRECURSOR ROBOT.") + (405 "DAXTER" "YEAH YEAH THAT SOUNDS LIKE A GOOD START. 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, 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 DESTROY THE ONLY PERSON WHO CAN TURN ME BACK!") + (1111) + (1156 "SAGE" "FIRST, SAVE THE WORLD! THEN WE'LL TRY TO CONVINCE GOL TO HELP DAXTER.") + ) + +("green-sagecage-outro-preboss" + (50 "GOL" "YOU'RE TOO LATE, SAMOS. 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!") + (485 "SAGE" "JUST LOOK WHAT IT'S DONE TO YOU!") + (581 "MAIA" "IT HAS GIVEN US A BEAUTY BEYOND ANYTHING YOU COULD UNDERSTAND.") + (696 "DAXTER" "BEAUTY? HAVE YOU TWO LOOKED IN A MIRROR LATELY?") + (828 "MAIA" "JUST WAIT UNTIL WE OPEN THE SILOS, LITTLE ONE. YOU THINK SHORT AND FUZZY IS BAD?") + (1017 "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!") + (1382) + (1605 "SAGE" "JAK! TAKE THE ELEVATOR UP AND STOP THAT ROBOT!") + ) + + diff --git a/game/assets/jak1/subtitle/game_subtitle_en.txt b/game/assets/jak1/subtitle/game_subtitle_en.txt deleted file mode 100644 index a42d6e1581..0000000000 --- a/game/assets/jak1/subtitle/game_subtitle_en.txt +++ /dev/null @@ -1,111 +0,0 @@ -(language-id 0 6) - -;; ----------------- -;; oracle - -("oracle-right-eye-1" (0 #f "ORACLE" "FOR YOUR GIFT, ANOTHER POWER CELL IS YOURS.")) -("oracle-left-eye-1" (0 #f "ORACLE" "YOU HAVE PROVEN YOURSELF WORTHY. HERE IS A POWER CELL.")) -("oracle-right-eye-2" (0 #f "ORACLE" "HERE IS ANOTHER POWER CELL FOR YOUR QUEST.")) -("oracle-left-eye-2" (0 #f "ORACLE" "FOR YOUR SACRIFICE, I OFFER YOU A POWER CELL.")) -("oracle-right-eye-3" (0 #f "ORACLE" "YOU HAVE OBTAINED ANOTHER POWER CELL.")) -("oracle-left-eye-3" (0 #f "ORACLE" "FOR YOUR EFFORT, A POWER CELL IS THE REWARD.")) - -;; ----------------- -;; swamp - -("billy-introduction" - (6 #f "BILLY" "HOWDY, FRIENDS! ENJOYIN' MY BEAUTIFUL SWAMP? I OWN THESE HERE PARTS. EVERYTHING THAT DOESN'T SINK INTO THE MUD, THAT IS! (LAUGHS)") - (349 #f "" "") - (369 #f "DAXTER" "JUDGING BY THE SMELL, I'D WAGER YOUR BATHTUB SANK IN THE MUD LONG AGO.") - (497 #f "" "") - (519 #f "BILLY" "WHAT'S A BATHTUB? ANYWAY I GOT BIGGER PROBLEMS NOW...") - (677 #f "" "") - (691 #f "BILLY" "SEEMS SOME NASTY LURKER VARMINTS ARE GROUSIN' ABOUTS SNATCHIN' EVERYTHING THEY CAN GET THEIR GRUBBY LITTLE PAWS ON.") - (910 #f "BILLY" "AND SCARED AWAY MY PET HIPHOG, FARTHY.") - (1000 #f "BILLY" "HE'S BEEN MISSIN' FOR NIGH ON TO A COON'S AGE.") - (1136 #t "BILLY" "I'VE BEEN PUTTIN' OUT HIS FAVORITE SNACK, BUT THOSE ORNERY SWAMP RATS KEEP STEALIN' EM!") - (1318 #t "BILLY" "IF YOU COULD KEEP THOSE PESKY CRITTERS AWAY LONG ENOUGH, I JUST KNOW FARTHY WOULD SMELL THEM VITTLES AND COME BACK!") - (1509 #f "" "") - (1527 #f "BILLY" "WILL YA HELP ME OUT?") - ) - -("billy-reject" - (7 #f "BILLY" "WELL, IF YOU CHANGE YOUR MIND, YOU KNOW WHERE TO FIND ME! (LAUGHS)") - ) - -("billy-accept" - (5 #f "BILLY" "GOOD! THOSE RATS WILL BE BACK ANYTIME.") - (109 #f "BILLY" "SHOOT ALL THEM RATS, AND KEEP 'EM FROM EATING AT LEAST ONE OF THEM SNACKS.") - ) - -("billy-resolution" - (1 #f "BILLY" "WELL FRY MY HIDE! YOU SURE KNOW HOW TO SHOOT! THANKS A HEAP FOR THE HELP.") - ) - -("billy-reminder-1" - (36 #f "BILLY" "AHH, Y'ALL BACK TO HELP STOP THEM RATS?") - ) - -;; ----------------- -;; citadel - -("green-sagecage-introduction" - (130 #f "SAGE" "IT'S ABOUT TIME YOU TWO DECIDED TO SHOW UP!") - (207 #f "DAXTER" "NICE TO SEE YOU TOO! DO THEY HAVE YOU MOPPING THE FLOORS NOW?") - (343 #f "SAGE" "THERE'S NO TIME FOR JOKES, DAXTER. GOL AND MAIA KIDNAPPED US TO SAP OUR ENERGIES TO POWER THEIR ABOMINABLE MACHINE.") - (574 #t "SAGE" "IT APPEARS THEY HAVE COMBINED THE FUNCTIONAL REMAINS OF A PRECURSOR ROBOT WITH SCAVENGED ARTIFACTS FROM ACROSS THE LAND.") - (800 #t "SAGE" "THEN THEY ADDED A FEW DIABOLICAL ADDITIONS OF THEIR OWN, CREATING THE ONE THING CAPABLE OF OPENING THE DARK ECO SILOS.") - (1060 #f "SAGE" "IF YOU CAN FREE THE FOUR OF US, WE CAN USE OUR COMBINED POWERS") - (1180 #f "SAGE" "TO BREAK THE FORCE SHIELD SURROUNDING THE ROBOT, BEFORE THEY USE IT TO DESTROY THE WORLD.") - ) - -("redsage-resolution" - (60 #f "RED SAGE" "(CHUCKLES) YOU'VE FINALLY COME TO RESCUE ME.") - (190 #f "RED SAGE" "DO YOU KNOW HOW LONG I'VE BEEN IN HERE? WHAT TOOK YOU SO LONG, YOU KNOW? (CHUCKLES) WHAT ARE YOUR NAMES?") - (429 #f "DAXTER" "I'M DAXTER! HE'S JAK, HE'S WITH ME.") - (540 #t "RED SAGE" "GOOD JOB, DAXTER. YOU'RE A REAL HERO.") - (670 #f "" "") - (700 #f "RED SAGE" "YOU'VE GOT TO STOP GOL FROM LAUNCHING THE ROBOT. I'LL USE MY ECO POWER TO HELP OPEN THE SHIELD DOOR.") - ) - -("bluesage-resolution" - (60 #f "BLUE SAGE" "GOOD WORK, FELLOWS! OLD SAMOS WAS RIGHT ABOUT YOU!") - (165 #f "BLUE SAGE" "GREAT PILES OF PRECURSOR METAL! THAT INSIDIOUS MECHANICAL CREATION MUST NOT BE ALLOWED TO WREAK ITS TERRIBLE HAVOC!") - (420 #f "BLUE SAGE" "I WILL TRY TO ACTUATE THE SHIELD DOOR BY ELLICITING A CONDUIT OF ENERGY BETWEEN MYSELF AND THE VAST PORTAL BELOW!") - (666 #f "DAXTER" "UH... YEAH. YOU DO THAT. WE'LL UH... JUST GO FIND MORE HELP.") - (873 #f "" "") - (891 #t "DAXTER" "WEIRDO!") - (980 #f "" "") - ) - -("yellowsage-resolution" - (50 #f "YELLOW SAGE" "WHO WOULDA THOUGHT I'D LIVE TO SEE THE DAY WHEN I NEEDED TO BE RESCUED BY A BOY AND HIS MUSKRAT!") - (271 #f "YELLOW SAGE" "(SIGHS) I'M GONNA GIVE GOL AND MAIA A LITTLE PAYBACK FOR THIS EMBARRASSMENT!") - (480 #f "YELLOW SAGE" "THEN WE'LL SEE ABOUT COOKING UP SOME MUSKRAT STEW...") - (606 #f "" "") - ) - -("green-sagecage-resolution" - (30 #f "SAGE" "GOOD WORK, BOYS! YOU'RE REAL HEROES NOW. I'LL COMBINE MY GREEN ECO POWER WITH THE OTHER THREE SAGES") - (284 #f "SAGE" "AND TOGETHER WE'LL OPEN THE SHIELD DOOR SURROUNDING THE PRECURSOR ROBOT.") - (405 #f "DAXTER" "YEAH YEAH THAT SOUNDS LIKE A GOOD START. AND THEN AFTER YOU GUYS OPEN THAT SHIELD, WHAT ARE YOU GONNA DO ABOUT THE ROBOT?") - (576 #f "SAGE" "NOTHING, DAXTER. WE HAVE TO KEEP THE SHIELD OPEN, IT'S UP TO YOU TWO TO FIGURE OUT HOW TO DESTROY THE ROBOT.") - (823 #f "DAXTER" "OH, GREAT. I GET TO HELP THE GUY THAT TURNED ME INTO A FURBALL DESTROY THE ONLY PERSON WHO CAN TURN ME BACK!") - (1111 #f "" "") - (1156 #f "SAGE" "FIRST, SAVE THE WORLD! THEN WE'LL TRY TO CONVINCE GOL TO HELP DAXTER.") - ) - -("green-sagecage-outro-preboss" - (50 #f "GOL" "YOU'RE TOO LATE, SAMOS. ONCE I POSSESS LIMITLESS DARK ECO, I WILL HAVE THE KEY TO CREATION ITSELF!") - (335 #f "SAGE" "THIS IS MADNESS! RELEASING THAT MUCH DARK ECO WILL DESTROY EVERYTHING WE KNOW!") - (485 #f "SAGE" "JUST LOOK WHAT IT'S DONE TO YOU!") - (581 #f "MAIA" "IT HAS GIVEN US A BEAUTY BEYOND ANYTHING YOU COULD UNDERSTAND.") - (696 #f "DAXTER" "BEAUTY? HAVE YOU TWO LOOKED IN A MIRROR LATELY?") - (828 #f "MAIA" "JUST WAIT UNTIL WE OPEN THE SILOS, LITTLE ONE. YOU THINK SHORT AND FUZZY IS BAD?") - (1017 #f "GOL" "AND TO THINK, YOU TWO TRAVELLED ALL THIS WAY FOR MY HELP.") - (1180 #f "GOL" "FOOLS! ENJOY YOUR FRONT ROW SEATS TO THE RECREATION OF THE WORLD!") - (1382 #f "" "") - (1605 #f "SAGE" "JAK! TAKE THE ELEVATOR UP AND STOP THAT ROBOT!") - ) - - diff --git a/game/assets/jak1/subtitle/game_subtitle_es.gs b/game/assets/jak1/subtitle/game_subtitle_es.gs new file mode 100644 index 0000000000..79196a3028 --- /dev/null +++ b/game/assets/jak1/subtitle/game_subtitle_es.gs @@ -0,0 +1,6 @@ +(language-id 3) + +;; ----------------- +;; oracle + +("oracle-left-eye-1" (0 "ORÁCULO" "HABÉIS DEMOSTRADO SER HONESTOS. É AQUÍ UNA BATERÍA.")) diff --git a/game/assets/jak1/subtitle/game_subtitle_es.txt b/game/assets/jak1/subtitle/game_subtitle_es.txt deleted file mode 100644 index 718a7af3ab..0000000000 --- a/game/assets/jak1/subtitle/game_subtitle_es.txt +++ /dev/null @@ -1,6 +0,0 @@ -(language-id 3) - -;; ----------------- -;; oracle - -("oracle-left-eye-1" (0 #f "ORÁCULO" "HABÉIS DEMOSTRADO SER HONESTOS. É AQUÍ UNA BATERÍA.")) diff --git a/game/assets/jak1/text/game_text_en.txt b/game/assets/jak1/text/game_text_en.gs similarity index 100% rename from game/assets/jak1/text/game_text_en.txt rename to game/assets/jak1/text/game_text_en.gs diff --git a/game/graphics/opengl_renderer/OpenGLRenderer.cpp b/game/graphics/opengl_renderer/OpenGLRenderer.cpp index e73ee673cd..7858b133ed 100644 --- a/game/graphics/opengl_renderer/OpenGLRenderer.cpp +++ b/game/graphics/opengl_renderer/OpenGLRenderer.cpp @@ -266,10 +266,11 @@ void OpenGLRenderer::init_bucket_renderers() { init_bucket_renderer("sprite", BucketCategory::SPRITE, BucketId::SPRITE, std::move(sprite_renderers)); // 66 - init_bucket_renderer("debug-draw-0", BucketCategory::OTHER, - BucketId::DEBUG_DRAW_0, 0x20000); - init_bucket_renderer("debug-draw-1", BucketCategory::OTHER, - BucketId::DEBUG_DRAW_1, 0x8000); + init_bucket_renderer("debug", BucketCategory::OTHER, BucketId::DEBUG, 0x20000); + init_bucket_renderer("debug-no-zbuf", BucketCategory::OTHER, + BucketId::DEBUG_NO_ZBUF, 0x8000); + init_bucket_renderer("subtitle", BucketCategory::OTHER, BucketId::SUBTITLE, + 0x2000); // for now, for any unset renderers, just set them to an EmptyBucketRenderer. for (size_t i = 0; i < m_bucket_renderers.size(); i++) { @@ -502,4 +503,4 @@ void OpenGLRenderer::do_pcrtc_effects(float alp, glEnable(GL_DEPTH_TEST); } -} \ No newline at end of file +} diff --git a/game/graphics/opengl_renderer/buckets.h b/game/graphics/opengl_renderer/buckets.h index de32c772c6..c6d762e556 100644 --- a/game/graphics/opengl_renderer/buckets.h +++ b/game/graphics/opengl_renderer/buckets.h @@ -70,9 +70,10 @@ enum class BucketId { // 64 PRE_SPRITE_TEX = 65, // maybe it's just common textures? SPRITE = 66, - DEBUG_DRAW_0 = 67, - DEBUG_DRAW_1 = 68, - MAX_BUCKETS = 69 + DEBUG = 67, + DEBUG_NO_ZBUF = 68, + SUBTITLE = 69, + MAX_BUCKETS = 70 }; enum class BucketCategory { @@ -89,4 +90,4 @@ enum class BucketCategory { }; constexpr const char* BUCKET_CATEGORY_NAMES[(int)BucketCategory::MAX_CATEGORIES] = { - "tfrag", "tie", "shrub", "tex", "merc", "mercneric", "sprite", "ocean", "other"}; \ No newline at end of file + "tfrag", "tie", "shrub", "tex", "merc", "mercneric", "sprite", "ocean", "other"}; diff --git a/goal_src/engine/ambient/ambient.gc b/goal_src/engine/ambient/ambient.gc index 1ebb0e8fe3..c8b286f46e 100644 --- a/goal_src/engine/ambient/ambient.gc +++ b/goal_src/engine/ambient/ambient.gc @@ -671,7 +671,7 @@ *temp-string* (add-debug-text-3d #t - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) *temp-string* (-> arg0 bsphere) (font-color orange-red) @@ -1119,7 +1119,7 @@ (when *display-ambient-sound-marks* (add-debug-text-3d #t - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (symbol->string (res-lump-struct obj 'effect-name symbol :time 0.0)) gp-0 (font-color white) @@ -1147,7 +1147,7 @@ (when (and (nonzero? a1-7) *common-text*) (add-debug-text-3d #t - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (lookup-text! *common-text* (the-as game-text-id a1-7) #f) gp-0 (font-color white) @@ -1213,7 +1213,7 @@ ) (add-debug-text-3d #t - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (res-lump-struct obj 'name string) gp-0 (font-color white) @@ -1221,7 +1221,7 @@ ) (add-debug-text-3d #t - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (symbol->string s5-0) gp-0 (font-color white) diff --git a/goal_src/engine/camera/cam-debug.gc b/goal_src/engine/camera/cam-debug.gc index 16d12c697e..ba8a958372 100644 --- a/goal_src/engine/camera/cam-debug.gc +++ b/goal_src/engine/camera/cam-debug.gc @@ -249,7 +249,7 @@ ) (dma-bucket-insert-tag (-> *display* frames (-> *display* on-screen) frame bucket-group) - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) a2-0 (the-as (pointer dma-tag) a3-16) ) @@ -1229,7 +1229,7 @@ (set! (-> a0-3 w) 1.0) (vector+! a1-2 v1-4 a0-3) ) - (add-debug-line #t (bucket-id debug-draw1) gp-0 s5-0 (new 'static 'rgba :r #xff :a #x80) #f (the-as rgba -1)) + (add-debug-line #t (bucket-id debug-no-zbuf) gp-0 s5-0 (new 'static 'rgba :r #xff :a #x80) #f (the-as rgba -1)) (let ((a1-5 s5-0) (v1-5 gp-0) (a0-5 s5-0) @@ -1240,7 +1240,7 @@ (set! (-> a0-5 w) 1.0) (vector+! a1-5 v1-5 a0-5) ) - (add-debug-line #t (bucket-id debug-draw1) gp-0 s5-0 (new 'static 'rgba :g #xff :a #x80) #f (the-as rgba -1)) + (add-debug-line #t (bucket-id debug-no-zbuf) gp-0 s5-0 (new 'static 'rgba :g #xff :a #x80) #f (the-as rgba -1)) (let ((a1-8 s5-0) (v1-6 gp-0) (a0-7 s5-0) @@ -1251,14 +1251,14 @@ (set! (-> a0-7 w) 1.0) (vector+! a1-8 v1-6 a0-7) ) - (add-debug-line #t (bucket-id debug-draw1) gp-0 s5-0 (new 'static 'rgba :b #xff :a #x80) #f (the-as rgba -1)) + (add-debug-line #t (bucket-id debug-no-zbuf) gp-0 s5-0 (new 'static 'rgba :b #xff :a #x80) #f (the-as rgba -1)) (when arg0 (set! (-> s5-0 quad) (-> arg0 quad)) (vector-normalize! s5-0 4096.0) (vector+! s5-0 gp-0 s5-0) (add-debug-line #t - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) gp-0 s5-0 (new 'static 'rgba :r #x7f :g #x7f :a #x80) diff --git a/goal_src/engine/camera/cam-layout.gc b/goal_src/engine/camera/cam-layout.gc index 8157886698..b8ad9ca93d 100644 --- a/goal_src/engine/camera/cam-layout.gc +++ b/goal_src/engine/camera/cam-layout.gc @@ -168,7 +168,7 @@ ) (dma-bucket-insert-tag (-> *display* frames (-> *display* on-screen) frame bucket-group) - (bucket-id debug-draw0) + (bucket-id debug) gp-0 (the-as (pointer dma-tag) a3-4) ) diff --git a/goal_src/engine/camera/cam-states.gc b/goal_src/engine/camera/cam-states.gc index 10902117dc..b89c344686 100644 --- a/goal_src/engine/camera/cam-states.gc +++ b/goal_src/engine/camera/cam-states.gc @@ -1341,7 +1341,7 @@ (let ((t1-0 #x40000080)) (add-debug-flat-triangle #t - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (the-as vector (-> gp-0 0)) (-> gp-0 0 vertex 1) (-> gp-0 0 vertex 2) diff --git a/goal_src/engine/camera/cam-update.gc b/goal_src/engine/camera/cam-update.gc index 436eba96d3..b94afc7d6d 100644 --- a/goal_src/engine/camera/cam-update.gc +++ b/goal_src/engine/camera/cam-update.gc @@ -328,7 +328,7 @@ (when *display-level-spheres* (add-debug-sphere #t - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (-> s5-1 info bsphere) (-> s5-1 info bsphere w) (new 'static 'rgba :r #xff :a #x80) diff --git a/goal_src/engine/collide/collide-cache.gc b/goal_src/engine/collide/collide-cache.gc index b0ead97c4e..443637cbb4 100644 --- a/goal_src/engine/collide/collide-cache.gc +++ b/goal_src/engine/collide/collide-cache.gc @@ -12,14 +12,14 @@ (let ((t1-0 (copy-and-set-field (-> *pat-mode-info* (-> gp-0 pat mode) color) a 64))) (add-debug-flat-triangle #t - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (the-as vector (-> gp-0 vertex)) (-> gp-0 vertex 1) (-> gp-0 vertex 2) t1-0 ) (#when PC_PORT - (add-debug-outline-triangle #t (bucket-id debug-draw1) (-> gp-0 vertex 0) (-> gp-0 vertex 1) (-> gp-0 vertex 2) + (add-debug-outline-triangle #t (bucket-id debug-no-zbuf) (-> gp-0 vertex 0) (-> gp-0 vertex 1) (-> gp-0 vertex 2) (static-rgba 0 0 0 64) ) ) @@ -40,7 +40,7 @@ ) (add-debug-sphere #t - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (the-as vector (-> gp-1 prim-core)) (-> gp-1 prim-core world-sphere w) t0-1 @@ -2506,7 +2506,7 @@ ) (when v1-12 ;; uncomment to view the point that blocks you from exiting duck. - ;;(add-debug-point #t (bucket-id debug-draw1) (-> s5-0 closest-pt)) + ;;(add-debug-point #t (bucket-id debug-no-zbuf) (-> s5-0 closest-pt)) (return #t) ) ) diff --git a/goal_src/engine/collide/collide-edge-grab.gc b/goal_src/engine/collide/collide-edge-grab.gc index f3a0729204..91d09ea488 100644 --- a/goal_src/engine/collide/collide-edge-grab.gc +++ b/goal_src/engine/collide/collide-edge-grab.gc @@ -551,7 +551,7 @@ (defmethod debug-draw edge-grab-info ((obj edge-grab-info)) (add-debug-line #t - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (the-as vector (-> obj world-vertex)) (-> obj world-vertex 1) (new 'static 'rgba :r #xff :a #x60) @@ -560,28 +560,28 @@ ) (add-debug-sphere #t - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (-> obj center-hold) 204.8 (new 'static 'rgba :r #xff :g #xff :a #x80) ) (add-debug-sphere #t - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (-> obj left-hand-hold) 204.8 (new 'static 'rgba :r #xff :g #xff :a #x60) ) (add-debug-sphere #t - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (-> obj right-hand-hold) 204.8 (new 'static 'rgba :r #xff :g #xff :a #x60) ) (add-debug-outline-triangle #t - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (the-as vector (-> obj tri-vertex)) (-> obj world-vertex 4) (-> obj world-vertex 5) @@ -615,7 +615,7 @@ ((-> s3-0 ignore) (add-debug-line #t - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) a2-0 a3-0 (new 'static 'rgba :r #x7f :g #x7f :b #x7f :a #x50) @@ -627,7 +627,7 @@ (else (add-debug-line #t - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) a2-0 a3-0 (new 'static 'rgba :r #xff :g #xff :b #xff :a #x60) @@ -636,7 +636,7 @@ ) (add-debug-vector #t - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) s2-0 (-> s3-0 outward) (meters 0.3) @@ -654,7 +654,7 @@ (defmethod debug-draw-sphere collide-edge-work ((obj collide-edge-work)) (dotimes (s5-0 (the-as int (-> obj num-verts))) (let ((a2-0 (-> obj verts s5-0))) - (add-debug-sphere #t (bucket-id debug-draw1) a2-0 819.2 (new 'static 'rgba :r #xff :g #xff :a #x80)) + (add-debug-sphere #t (bucket-id debug-no-zbuf) a2-0 819.2 (new 'static 'rgba :r #xff :g #xff :a #x80)) ) ) #f @@ -671,28 +671,28 @@ (while s4-0 (+! s5-0 1) (set! (-> s3-0 y) (-> s4-0 center-pt y)) - (add-debug-sphere #t (bucket-id debug-draw1) s3-0 409.6 (new 'static 'rgba :a #x80)) + (add-debug-sphere #t (bucket-id debug-no-zbuf) s3-0 409.6 (new 'static 'rgba :a #x80)) (cond (s2-0 (set! s2-0 #f) (add-debug-sphere #t - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (-> s4-0 center-pt) 614.4 (new 'static 'rgba :r #xff :g #xff :a #x80) ) - (add-debug-sphere #t (bucket-id debug-draw1) (-> s4-0 outward-pt) 409.6 (new 'static 'rgba :r #xff :a #x80)) + (add-debug-sphere #t (bucket-id debug-no-zbuf) (-> s4-0 outward-pt) 409.6 (new 'static 'rgba :r #xff :a #x80)) ) (else (add-debug-sphere #t - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (-> s4-0 center-pt) 614.4 (new 'static 'rgba :r #x7f :g #x7f :a #x40) ) - (add-debug-sphere #t (bucket-id debug-draw1) (-> s4-0 outward-pt) 409.6 (new 'static 'rgba :r #x7f :a #x40)) + (add-debug-sphere #t (bucket-id debug-no-zbuf) (-> s4-0 outward-pt) 409.6 (new 'static 'rgba :r #x7f :a #x40)) ) ) (set! s4-0 (-> s4-0 next)) @@ -703,7 +703,7 @@ (dotimes (s5-1 (the-as int (-> obj num-attempts))) (add-debug-sphere #t - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (the-as vector (-> obj attempts s5-1)) 409.6 (new 'static 'rgba :a #x40) @@ -719,7 +719,7 @@ ) (add-debug-outline-triangle #t - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (the-as vector (-> v1-3 vertex)) (-> v1-3 vertex 1) (-> v1-3 vertex 2) diff --git a/goal_src/engine/collide/collide-mesh.gc b/goal_src/engine/collide/collide-mesh.gc index 04e87f675f..910882460c 100644 --- a/goal_src/engine/collide/collide-mesh.gc +++ b/goal_src/engine/collide/collide-mesh.gc @@ -73,7 +73,7 @@ (.svf (&-> a2-1 quad) vf1) (.svf (&-> a3-0 quad) vf2) (.svf (&-> t0-0 quad) vf3) - (add-debug-flat-triangle #t (bucket-id debug-draw1) a2-1 a3-0 t0-0 t1-0) + (add-debug-flat-triangle #t (bucket-id debug-no-zbuf) a2-1 a3-0 t0-0 t1-0) ) ) (set! s5-0 (-> (the-as (inline-array collide-mesh-tri) s5-0) 1)) diff --git a/goal_src/engine/collide/collide-shape.gc b/goal_src/engine/collide/collide-shape.gc index 7298b9e14a..0ba114210e 100644 --- a/goal_src/engine/collide/collide-shape.gc +++ b/goal_src/engine/collide/collide-shape.gc @@ -1183,7 +1183,7 @@ (let ((t1-0 (-> *pat-mode-info* (-> s5-0 best-tri pat mode) hilite-color))) (add-debug-outline-triangle #t - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (the-as vector (-> s5-0 best-tri)) (-> s5-0 best-tri vertex 1) (-> s5-0 best-tri vertex 2) @@ -1192,7 +1192,7 @@ ) (add-debug-vector #t - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (-> s5-0 best-tri intersect) s2-1 (meters 0.00007324219) @@ -1200,7 +1200,7 @@ ) (add-debug-vector #t - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (-> s5-0 best-tri intersect) arg0 (meters 0.00007324219) @@ -1209,7 +1209,7 @@ (if (= (-> obj process type) target) (add-debug-vector #t - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (-> s5-0 best-tri intersect) (-> obj surface-normal) (meters 0.5) @@ -1746,7 +1746,7 @@ (when (and *display-collide-cache* (= (-> obj process type) target)) (debug-draw *collide-cache*) ;; NOTE: added - (add-debug-box #t (bucket-id debug-draw0) (-> s5-0 min) (-> s5-0 max) (new 'static 'rgba :a #x80 :b #x70 :g #x70)) + (add-debug-box #t (bucket-id debug) (-> s5-0 min) (-> s5-0 max) (new 'static 'rgba :a #x80 :b #x70 :g #x70)) ) ) (else @@ -2030,7 +2030,7 @@ "Draw collision debug." (add-debug-sphere (or *display-collision-marks* *display-target-marks*) - (bucket-id debug-draw0) + (bucket-id debug) (target-pos 0) 819.2 (new 'static 'rgba :r #xff :g #xff :b #xff :a #x80) @@ -2439,7 +2439,7 @@ "Draw our sphere" (add-debug-sphere #t - (bucket-id debug-draw0) + (bucket-id debug) (the-as vector (-> obj prim-core)) (-> obj local-sphere w) (new 'static 'rgba :r #xff :g #xff :b #xff :a #x40) @@ -2450,7 +2450,7 @@ "Draw our sphere" (add-debug-sphere #t - (bucket-id debug-draw0) + (bucket-id debug) (the-as vector (-> obj prim-core)) (-> obj local-sphere w) (the-as rgba (cond @@ -2472,7 +2472,7 @@ "Draw our sphere" (add-debug-sphere #t - (bucket-id debug-draw0) + (bucket-id debug) (the-as vector (-> obj prim-core)) (-> obj local-sphere w) (new 'static 'rgba :b #xff :a #x40) @@ -2483,7 +2483,7 @@ "Draw our sphere" (add-debug-sphere #t - (bucket-id debug-draw0) + (bucket-id debug) (the-as vector (-> obj prim-core)) (-> obj local-sphere w) (new 'static 'rgba :g #xff :a #x10) diff --git a/goal_src/engine/collide/main-collide.gc b/goal_src/engine/collide/main-collide.gc index 24f28032d6..f677d2955e 100644 --- a/goal_src/engine/collide/main-collide.gc +++ b/goal_src/engine/collide/main-collide.gc @@ -209,7 +209,7 @@ (.svf (&-> a2-0 quad) vf9) (add-debug-sphere #t - (bucket-id debug-draw0) + (bucket-id debug) a2-0 a3-0 (new 'static 'rgba :r #x80 :g #x80 :b #x80 :a #x80) diff --git a/goal_src/engine/debug/anim-tester.gc b/goal_src/engine/debug/anim-tester.gc index 1734d48e80..f11cb715b0 100644 --- a/goal_src/engine/debug/anim-tester.gc +++ b/goal_src/engine/debug/anim-tester.gc @@ -216,7 +216,7 @@ ) (dma-bucket-insert-tag (-> *display* frames (-> *display* on-screen) frame bucket-group) - (bucket-id debug-draw0) + (bucket-id debug) s5-3 (the-as (pointer dma-tag) a3-6) ) @@ -345,7 +345,7 @@ ) (dma-bucket-insert-tag (-> *display* frames (-> *display* on-screen) frame bucket-group) - (bucket-id debug-draw0) + (bucket-id debug) s5-6 (the-as (pointer dma-tag) a3-12) ) @@ -847,7 +847,7 @@ ) (dma-bucket-insert-tag (-> *display* frames (-> *display* on-screen) frame bucket-group) - (bucket-id debug-draw0) + (bucket-id debug) gp-0 (the-as (pointer dma-tag) a3-2) ) @@ -942,7 +942,7 @@ ) (dma-bucket-insert-tag (-> *display* frames (-> *display* on-screen) frame bucket-group) - (bucket-id debug-draw0) + (bucket-id debug) s4-0 (the-as (pointer dma-tag) a3-2) ) @@ -1017,7 +1017,7 @@ ) (dma-bucket-insert-tag (-> *display* frames (-> *display* on-screen) frame bucket-group) - (bucket-id debug-draw0) + (bucket-id debug) s5-2 (the-as (pointer dma-tag) a3-4) ) @@ -1070,7 +1070,7 @@ ) (dma-bucket-insert-tag (-> *display* frames (-> *display* on-screen) frame bucket-group) - (bucket-id debug-draw0) + (bucket-id debug) s4-0 (the-as (pointer dma-tag) a3-2) ) @@ -1189,7 +1189,7 @@ ) (dma-bucket-insert-tag (-> *display* frames (-> *display* on-screen) frame bucket-group) - (bucket-id debug-draw0) + (bucket-id debug) s5-1 (the-as (pointer dma-tag) a3-4) ) @@ -1246,7 +1246,7 @@ ) (dma-bucket-insert-tag (-> *display* frames (-> *display* on-screen) frame bucket-group) - (bucket-id debug-draw0) + (bucket-id debug) s4-0 (the-as (pointer dma-tag) a3-2) ) @@ -1360,7 +1360,7 @@ ) (dma-bucket-insert-tag (-> *display* frames (-> *display* on-screen) frame bucket-group) - (bucket-id debug-draw0) + (bucket-id debug) s5-1 (the-as (pointer dma-tag) a3-4) ) @@ -1535,7 +1535,7 @@ ) (dma-bucket-insert-tag (-> *display* frames (-> *display* on-screen) frame bucket-group) - (bucket-id debug-draw0) + (bucket-id debug) s1-0 (the-as (pointer dma-tag) a3-4) ) @@ -1586,7 +1586,7 @@ ) (dma-bucket-insert-tag (-> *display* frames (-> *display* on-screen) frame bucket-group) - (bucket-id debug-draw0) + (bucket-id debug) s1-1 (the-as (pointer dma-tag) a3-8) ) @@ -1680,7 +1680,7 @@ ) (dma-bucket-insert-tag (-> *display* frames (-> *display* on-screen) frame bucket-group) - (bucket-id debug-draw0) + (bucket-id debug) (the-as pointer s4-1) (the-as (pointer dma-tag) a3-15) ) @@ -1977,7 +1977,7 @@ ) (dma-bucket-insert-tag (-> *display* frames (-> *display* on-screen) frame bucket-group) - (bucket-id debug-draw0) + (bucket-id debug) gp-2 (the-as (pointer dma-tag) a3-17) ) @@ -2008,7 +2008,7 @@ ) (dma-bucket-insert-tag (-> *display* frames (-> *display* on-screen) frame bucket-group) - (bucket-id debug-draw0) + (bucket-id debug) gp-3 (the-as (pointer dma-tag) a3-21) ) @@ -2066,7 +2066,7 @@ ) (dma-bucket-insert-tag (-> *display* frames (-> *display* on-screen) frame bucket-group) - (bucket-id debug-draw0) + (bucket-id debug) gp-1 (the-as (pointer dma-tag) a3-1) ) @@ -2108,7 +2108,7 @@ ) (dma-bucket-insert-tag (-> *display* frames (-> *display* on-screen) frame bucket-group) - (bucket-id debug-draw0) + (bucket-id debug) gp-3 (the-as (pointer dma-tag) a3-3) ) @@ -2151,7 +2151,7 @@ ) (dma-bucket-insert-tag (-> *display* frames (-> *display* on-screen) frame bucket-group) - (bucket-id debug-draw0) + (bucket-id debug) gp-4 (the-as (pointer dma-tag) a3-5) ) @@ -2182,7 +2182,7 @@ ) (dma-bucket-insert-tag (-> *display* frames (-> *display* on-screen) frame bucket-group) - (bucket-id debug-draw0) + (bucket-id debug) gp-5 (the-as (pointer dma-tag) a3-7) ) @@ -2246,7 +2246,7 @@ (debug-print-channels (-> self skel) (the-as symbol *stdcon*)) (add-debug-x #t - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (-> self root trans) (new 'static 'rgba :r #xff :g #xff :b #xff :a #x80) ) diff --git a/goal_src/engine/debug/debug.gc b/goal_src/engine/debug/debug.gc index 5e1275b053..9d49a9b742 100644 --- a/goal_src/engine/debug/debug.gc +++ b/goal_src/engine/debug/debug.gc @@ -894,7 +894,7 @@ (set! (-> gp-0 0 x) (* (sin (-> arg0 stick0-dir)) (-> arg0 stick0-speed))) (set! (-> gp-0 0 y) (* (cos (-> arg0 stick0-dir)) (-> arg0 stick0-speed))) (dotimes (s5-1 32) - (with-dma-buffer-add-bucket ((s3-0 (-> (current-frame) debug-buf)) (bucket-id debug-draw0)) + (with-dma-buffer-add-bucket ((s3-0 (-> (current-frame) debug-buf)) (bucket-id debug)) (draw-sprite2d-xy s3-0 (the int (* 120.0 (-> gp-0 s5-1 x))) (the int (* 144.0 (-> gp-0 s5-1 y))) @@ -1010,7 +1010,7 @@ (when arg1 (dotimes (s5-1 (1- (-> arg0 num-points))) (if (!= (+ s5-1 1) (-> arg0 h-first)) - (add-debug-line #t (bucket-id debug-draw1) + (add-debug-line #t (bucket-id debug-no-zbuf) (-> arg0 points s5-1) (-> arg0 points (1+ s5-1)) (static-rgba #x80 #xc0 #x80 #x80) #f (the-as rgba -1)) diff --git a/goal_src/engine/debug/menu.gc b/goal_src/engine/debug/menu.gc index 15b66ef2e3..7fc1c32577 100644 --- a/goal_src/engine/debug/menu.gc +++ b/goal_src/engine/debug/menu.gc @@ -760,7 +760,7 @@ (else (font-color dim-gray)) ;; a parent, but not selected )) (with-dma-buffer-add-bucket ((s3-0 (-> (current-frame) debug-buf)) - (bucket-id debug-draw1)) + (bucket-id debug-no-zbuf)) ;; NOTE: the draw-string-adv advances too far on widescreen. ;; NOTE 2: should be fixed? (draw-string-adv (-> item name) s3-0 s5-0) @@ -797,7 +797,7 @@ ) ) (with-dma-buffer-add-bucket ((s4-0 (-> (current-frame) debug-buf)) - (bucket-id debug-draw1)) + (bucket-id debug-no-zbuf)) (draw-string (-> item name) s4-0 v1-2) ) ) @@ -828,7 +828,7 @@ ) ) (with-dma-buffer-add-bucket ((s4-0 (-> (current-frame) debug-buf)) - (bucket-id debug-draw1)) + (bucket-id debug-no-zbuf)) (draw-string (-> item name) s4-0 v1-2) ) ) @@ -856,7 +856,7 @@ ) ) (with-dma-buffer-add-bucket ((s1-0 (-> (current-frame) debug-buf)) - (bucket-id debug-draw1)) + (bucket-id debug-no-zbuf)) (draw-string-adv (-> item name) s1-0 s5-0) (draw-string-adv ":" s1-0 s5-0) (cond @@ -940,7 +940,7 @@ ) ) (with-dma-buffer-add-bucket ((s0-0 (-> (current-frame) debug-buf)) - (bucket-id debug-draw1)) + (bucket-id debug-no-zbuf)) ;; PC PORT : fixed for widescreen (draw-sprite2d-xy s0-0 (correct-x-int x-pos) y-pos (correct-x-int (-> menu pix-width)) (-> menu pix-height) (static-rgba #x00 #x00 #x00 #x40)) ) @@ -964,7 +964,7 @@ ) (set-origin! (-> menu context font) s3-1 s2-1) (with-dma-buffer-add-bucket ((sv-16 (-> (current-frame) debug-buf)) - (bucket-id debug-draw1)) + (bucket-id debug-no-zbuf)) (draw-string ">" sv-16 (-> menu context font)) ) ) diff --git a/goal_src/engine/debug/part-tester.gc b/goal_src/engine/debug/part-tester.gc index bd64b27b71..d1d9f7789e 100644 --- a/goal_src/engine/debug/part-tester.gc +++ b/goal_src/engine/debug/part-tester.gc @@ -54,7 +54,7 @@ ) (add-debug-x #t - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (-> self root trans) (the-as rgba (new 'static 'rgba :r #xff :g #xff :b #xff :a #x80)) ) diff --git a/goal_src/engine/dma/dma-buffer.gc b/goal_src/engine/dma/dma-buffer.gc index 972f7afd53..54884fca5c 100644 --- a/goal_src/engine/dma/dma-buffer.gc +++ b/goal_src/engine/dma/dma-buffer.gc @@ -463,7 +463,7 @@ (defmacro with-dma-buffer-add-bucket (bindings &key (bucket-group (-> (current-frame) bucket-group)) &rest body) "Bind a dma-buffer to a variable and use it on a block to allow adding things to a new bucket. usage: (with-dma-buffer-add-bucket ((buffer-name buffer) bucket-id) &rest body) - example: (with-dma-buffer-add-bucket ((buf (-> (current-frame) debug-buf)) (bucket-id debug-draw1)) ...)" + example: (with-dma-buffer-add-bucket ((buf (-> (current-frame) debug-buf)) (bucket-id debug-no-zbuf)) ...)" `(let ((,(caar bindings) ,(cadar bindings))) (with-dma-bucket (,(caar bindings) ,bucket-group ,(cadr bindings)) diff --git a/goal_src/engine/dma/dma-h.gc b/goal_src/engine/dma/dma-h.gc index 1fea2597fd..0af37dbbbb 100644 --- a/goal_src/engine/dma/dma-h.gc +++ b/goal_src/engine/dma/dma-h.gc @@ -183,7 +183,7 @@ (next 2) ;; addr=after tag, next-tag=ADDR (ref 3) ;; addr=ADDR, next-tag=after tag (refs 4) ;; ref, but stall controled - (call 5) ;; + (call 5) ;; (ret 6) ;; (end 7) ;; next, but ends. ) @@ -208,11 +208,11 @@ ;; DMA data is divided into buckets. ;; At the end of a frame, the buckets are all connected together and sent. ;; the buckets are organized by renderer. - +(defconstant BUCKET_COUNT (#if PC_PORT 70 69)) (defenum bucket-id :type int32 :bitfield #f - + (bucket-0 0) ;; ? (bucket-1 1) ;; ? (bucket-2 2) ;; ? @@ -236,11 +236,11 @@ (gmerc-tfrag-tex1 18) ;; generic merc, with tfrag textures, level 1 (shrub-tex0 19) (shrub0 20) - - + + (shrub-tex1 25) (shrub1 26) - + (generic-foreground 30) ;; ? (alpha-tex0 31) @@ -258,11 +258,11 @@ (tfrag-dirt-near-1 42) (tfrag-ice-1 43) (tfrag-ice-near-1 44) - + (bucket-45 45) ;; merc (bucket-46 46) - + (shadow 47) (pris-tex0 48) @@ -296,9 +296,12 @@ (pre-sprite-textures 65) ;; common (sprite 66) ;; debug spheres? 67 - (debug-draw0 67) + (debug 67) ;; debug text 68 - (debug-draw1 68) + (debug-no-zbuf 68) + + ;; extra buckets for pc port + (subtitle 69) ) ;; A DMA bucket is a way of sorting data within a dma buffer. diff --git a/goal_src/engine/draw/drawable.gc b/goal_src/engine/draw/drawable.gc index 9dd7338f3a..ea291d61c9 100644 --- a/goal_src/engine/draw/drawable.gc +++ b/goal_src/engine/draw/drawable.gc @@ -134,12 +134,12 @@ (when (sphere-cull (-> arg0 bsphere)) (add-debug-sphere #t - (bucket-id debug-draw0) + (bucket-id debug) (-> arg0 bsphere) (-> arg0 bsphere w) (new 'static 'rgba :r #x80 :a #x80) ) - (add-debug-text-3d #t (bucket-id debug-draw1) arg1 (-> arg0 bsphere) (font-color white) (the-as vector2h #f)) + (add-debug-text-3d #t (bucket-id debug-no-zbuf) arg1 (-> arg0 bsphere) (font-color white) (the-as vector2h #f)) ) ) ) @@ -659,7 +659,7 @@ (if *display-lights* (add-debug-lights #t - (bucket-id debug-draw0) + (bucket-id debug) (the-as (inline-array light) (-> s3-0 light-group)) (-> arg1 origin) ) @@ -899,7 +899,6 @@ (none) ) -;; definition for symbol *debug-hook*, type (function none) (define *debug-hook* main-debug-hook) (define *add-sphere* #f) @@ -908,9 +907,9 @@ (defun real-main-draw-hook () "The main drawing function. This dispatches all renderers and is called directly from the display-loop - in main.gc." + in main.gc" (when *slow-frame-rate* - (dotimes (v1-2 40000000) ;; was 50000 + (dotimes (v1-2 50000000) ;; was 50000 (nop!) (nop!) (nop!) @@ -919,7 +918,7 @@ (nop!) ) ) - "Function to be executed to set up for engine dma" + "Function to be executed to set up for engine dma" ;; accidental docstring from the original game ;; update render enables from the debug menu (set! *vu1-enable-user* *vu1-enable-user-menu*) @@ -1333,7 +1332,7 @@ ;; get the increment in seconds unit. (let ((scaled-seconds (* (the int time-ratio) (the int (-> disp time-factor))))) ;; tell the sparticle system - (set-particle-frame-time (min 12 scaled-seconds)) + (set-particle-frame-time (min (seconds 0.04) scaled-seconds)) ;; the "not real" frame counters only count when unpaused (when (not (paused?)) @@ -1433,15 +1432,14 @@ ) ;; add the buckets - (set! (-> new-frame bucket-group)(dma-buffer-add-buckets (-> new-frame calc-buf) 69)) + (set! (-> new-frame bucket-group) (dma-buffer-add-buckets (-> new-frame calc-buf) BUCKET_COUNT)) ) ;; initialize the debug bucket - (debug-init-buffer - (bucket-id debug-draw1) - (new 'static 'gs-zbuf :zbp #x1c0 :psm (gs-psm ct24) :zmsk #x1) - (new 'static 'gs-test :zte #x1 :ztst (gs-ztest always)) - ) + (debug-init-buffer (bucket-id debug-no-zbuf) + (new 'static 'gs-zbuf :zbp #x1c0 :psm (gs-psm ct24) :zmsk #x1) + (new 'static 'gs-test :zte #x1 :ztst (gs-ztest always)) + ) ;; setup our drawing offset for even/odd offset (set-draw-env-offset (-> disp frames new-frame-idx draw) 2048 2048 odd-even) @@ -1465,7 +1463,7 @@ (*post-draw-hook* (-> disp frames (-> disp on-screen) frame calc-buf)) ;; iterate through all buckets and append a final GS state reset. - (dotimes (bucket-idx 69) + (dotimes (bucket-idx BUCKET_COUNT) (let* ((this-global-buf (-> this-frame global-buf)) (a2-0 (-> this-global-buf base)) ) @@ -1517,7 +1515,7 @@ (set! (-> v1-14 base) (&+ (the-as pointer a0-10) 16)) ) ;; patch the buckets. Now sending the calc buf will send everything! - (dma-buffer-patch-buckets (-> this-frame bucket-group) 69) + (dma-buffer-patch-buckets (-> this-frame bucket-group) BUCKET_COUNT) ;; append the final END. (let* ((v1-15 this-calc-buf) (a0-13 (the-as object (-> v1-15 base))) @@ -1574,7 +1572,7 @@ (>= (the-as int (-> *display* base-frame-counter)) (the-as int (-> *game-info* blackout-time))) ;; this is a hack. this is initialized to #x493e0. It prevents controller-loss pause from ;; triggering in the first few seconds of gameplay. - (< #x49764 (the-as int (-> *display* real-frame-counter))) + (< (seconds 1003) (-> *display* real-frame-counter)) ) (and (logtest? (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons r2)) ;; debug press (paused?) diff --git a/goal_src/engine/draw/process-drawable.gc b/goal_src/engine/draw/process-drawable.gc index 30d37cc3ef..14b70b8bae 100644 --- a/goal_src/engine/draw/process-drawable.gc +++ b/goal_src/engine/draw/process-drawable.gc @@ -271,7 +271,7 @@ (defun execute-math-engine () (#when PC_PORT (with-dma-buffer-add-bucket ((debug-buf (-> (current-frame) debug-buf)) - (bucket-id debug-draw1)) + (bucket-id debug-no-zbuf)) (when (-> *pc-settings* display-actor-counts) (draw-string-xy (string-format "M: ~D/~D A: ~D" (-> *matrix-engine* length) MATRIX_ENGINE_AMOUNT (process-count *active-pool*)) debug-buf 8 (- 224 18) (font-color default) (font-flags shadow kerning)) ) @@ -300,7 +300,7 @@ (when (and parent (nonzero? parent) (-> parent joint) (-> parent parent)) (let ((child (vector<-cspace! (new-stack-vector0) (-> obj node-list data i))) ) - (add-debug-line #t (bucket-id debug-draw0) child (vector<-cspace! (new-stack-vector0) parent) (new 'static 'rgba :g #xff :a #x40) #f (the rgba -1)) + (add-debug-line #t (bucket-id debug) child (vector<-cspace! (new-stack-vector0) parent) (new 'static 'rgba :g #xff :a #x40) #f (the rgba -1)) ) ) ) @@ -402,8 +402,8 @@ (defun draw-joint-spheres ((arg0 process-drawable)) (dotimes (s5-0 (-> arg0 node-list length)) (let ((a2-0 (vector<-cspace! (new-stack-vector0) (-> arg0 node-list data s5-0)))) - (add-debug-sphere #t (bucket-id debug-draw0) a2-0 819.2 (new 'static 'rgba :g #xff :a #x40)) - ;;(add-debug-text-sphere #t (bucket-id debug-draw0) a2-0 819.2 (the string (-> arg0 node-list data s5-0 joint name)) (new 'static 'rgba :g #xff :a #x40)) + (add-debug-sphere #t (bucket-id debug) a2-0 819.2 (new 'static 'rgba :g #xff :a #x40)) + ;;(add-debug-text-sphere #t (bucket-id debug) a2-0 819.2 (the string (-> arg0 node-list data s5-0 joint name)) (new 'static 'rgba :g #xff :a #x40)) ) ) #f diff --git a/goal_src/engine/entity/entity.gc b/goal_src/engine/entity/entity.gc index cfcf3d4a06..b45b0f3453 100644 --- a/goal_src/engine/entity/entity.gc +++ b/goal_src/engine/entity/entity.gc @@ -862,7 +862,7 @@ (let ((s1-1 (the-as process-drawable (-> s0-0 extra process)))) (add-debug-x #t - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (-> s1-1 root trans) (new 'static 'rgba :r #x80 :g #xff :b #x80 :a #x80) ) @@ -878,7 +878,7 @@ ) (add-debug-text-3d #t - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (symbol->string (-> s1-1 state name)) (-> s1-1 root trans) (font-color white) @@ -910,7 +910,7 @@ (if (and (the-as structure v0-10) (= (-> v0-10 type) symbol)) (add-debug-text-3d #t - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (symbol->string v0-10) (-> s1-1 root trans) (font-color white) @@ -921,7 +921,7 @@ ) ) ((or (= arg0 'full) (-> s0-0 extra process)) - (add-debug-x #t (bucket-id debug-draw1) s1-0 (the-as rgba (if (-> s0-0 extra process) + (add-debug-x #t (bucket-id debug-no-zbuf) s1-0 (the-as rgba (if (-> s0-0 extra process) (the-as uint #x8080ff80) (the-as uint #x800000ff) ) @@ -982,13 +982,13 @@ (when (and (type-type? (-> s0-3 type) process-drawable) (nonzero? (-> (the-as process-drawable s0-3) draw))) (add-debug-x #t - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (-> (the-as process-drawable s0-3) root trans) (new 'static 'rgba :r #xff :g #xff :b #xff :a #x80) ) (add-debug-sphere #t - (bucket-id debug-draw0) + (bucket-id debug) (vector+! (new 'stack-no-clear 'vector) (-> (the-as process-drawable s0-3) draw origin) @@ -1022,7 +1022,7 @@ (s4-2 (-> (the-as process-drawable s5-2) root trans)) ) (when s3-2 - (add-debug-x #t (bucket-id debug-draw1) s4-2 (the-as rgba (if (-> s3-2 extra process) + (add-debug-x #t (bucket-id debug-no-zbuf) s4-2 (the-as rgba (if (-> s3-2 extra process) (the-as uint #x8080ff80) (the-as uint #x800000ff) ) @@ -1030,7 +1030,7 @@ ) (add-debug-text-3d #t - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (res-lump-struct s3-2 'name string) s4-2 (the-as font-color (if (logtest? (-> s3-2 extra perm status) (entity-perm-status bit-0 bit-1)) @@ -1042,7 +1042,7 @@ ) (add-debug-text-3d #t - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (symbol->string (-> (the-as process-drawable s5-2) state name)) s4-2 (font-color white) @@ -1071,7 +1071,7 @@ ) (add-debug-sphere #t - (bucket-id debug-draw0) + (bucket-id debug) (vector+! (new 'stack-no-clear 'vector) (-> (the-as process-drawable s5-2) draw origin) @@ -1091,7 +1091,7 @@ (if v0-35 (add-debug-box #t - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (the-as vector (&+ v0-35 0)) (the-as vector (&+ v0-35 16)) (the-as rgba (if (is-object-visible? (-> s5-3 extra level) a1-31) @@ -1155,7 +1155,7 @@ (countdown (s2-4 (-> s3-4 length)) (add-debug-box #t - (bucket-id debug-draw0) + (bucket-id debug) (the-as vector (-> s3-4 data s2-4)) (the-as vector (+ (the-as uint (-> s3-4 data 0 max)) (* s2-4 32))) (the-as rgba (if (zero? (-> s4-4 index)) @@ -1936,14 +1936,14 @@ (let* ((e (-> inspect-info entity)) (name (res-lump-struct e 'name string))) (set! *display-actor-anim* (the string (and (-> inspect-info show-actor-info) name))) ;; draw trans - (add-debug-x #t (bucket-id debug-draw1) (-> e trans) (static-rgba 255 255 0 128)) + (add-debug-x #t (bucket-id debug-no-zbuf) (-> e trans) (static-rgba 255 255 0 128)) (if (or (not (-> inspect-info show-actor-info)) (!= (-> e type) entity-actor) (and (= (-> e type) entity-actor) (not (-> (the entity-actor e) extra process)))) - (add-debug-text-3d #t (bucket-id debug-draw1) name (-> e trans) (font-color red) (new 'static 'vector2h :y 8))) + (add-debug-text-3d #t (bucket-id debug-no-zbuf) name (-> e trans) (font-color red) (new 'static 'vector2h :y 8))) ;; start writing text (let* ((begin-y (- 16 (* (-> inspect-info scroll-y) 8))) (cur-y begin-y) (y-adv 8)) (with-dma-buffer-add-bucket ((debug-buf (-> (current-frame) debug-buf)) - (bucket-id debug-draw1)) + (bucket-id debug-no-zbuf)) ;; basic info, actor id, etc (draw-string-xy (string-format "~3L~A~0L ~A~%tags: ~D size: ~D aid: #x~x~%R1/L1 scroll L3 toggle display-actor-info~%--------------------" (-> e type) name (length e) (asize-of e) (-> e aid)) diff --git a/goal_src/engine/game/game-info.gc b/goal_src/engine/game/game-info.gc index 51b8f42a0a..a534efe216 100644 --- a/goal_src/engine/game/game-info.gc +++ b/goal_src/engine/game/game-info.gc @@ -29,8 +29,8 @@ ) ;; add text and vector - (add-debug-text-sphere #t (bucket-id debug-draw1) (-> obj trans) 819.2 (symbol->string (-> obj name)) s5-0) - (add-debug-vector #t (bucket-id debug-draw1) (-> obj trans) (-> obj normal) 8192.0 s5-0) + (add-debug-text-sphere #t (bucket-id debug-no-zbuf) (-> obj trans) 819.2 (symbol->string (-> obj name)) s5-0) + (add-debug-vector #t (bucket-id debug-no-zbuf) (-> obj trans) (-> obj normal) 8192.0 s5-0) ) 0 (none) @@ -929,12 +929,12 @@ (defmethod debug-draw! continue-point ((obj continue-point)) "Draw a continue point." (add-debug-x #t - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (-> obj trans) (new 'static 'rgba :r #xff :a #x80) ) (add-debug-text-3d #t - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (-> obj name) (-> obj trans) (font-color white) @@ -943,7 +943,7 @@ (let ((a3-2 (vector-z-quaternion! (new-stack-vector0) (-> obj quat)))) (add-debug-vector #t - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (-> obj trans) a3-2 8192.0 diff --git a/goal_src/engine/game/main.gc b/goal_src/engine/game/main.gc index b5904180ec..0a1669f62b 100644 --- a/goal_src/engine/game/main.gc +++ b/goal_src/engine/game/main.gc @@ -18,7 +18,7 @@ (defun letterbox () "Draw the letterbox black rectangles" (with-dma-buffer-add-bucket ((dma-buf (-> (current-frame) global-buf)) - (bucket-id debug-draw1)) ;; debug-draw1 is one of the last buckets + (bucket-id debug-no-zbuf)) ;; debug-no-zbuf is one of the last buckets ;; draw the two sprites (#cond ((not PC_PORT) @@ -75,7 +75,7 @@ (defun blackout () "Draw the blackout rectangle, convering the entire screen in darkness." (with-dma-buffer-add-bucket ((dma-buf (-> (current-frame) global-buf)) - (bucket-id debug-draw1)) ;; debug-draw1 is one of the last buckets + (bucket-id debug-no-zbuf)) ;; debug-no-zbuf is one of the last buckets (draw-sprite2d-xy dma-buf 0 0 512 224 (new 'static 'rgba :a #x80)) ) (none) @@ -330,7 +330,7 @@ ) (defmethod draw screen-filter ((obj screen-filter)) - (with-dma-buffer-add-bucket ((buf (-> (current-frame) global-buf)) (bucket-id debug-draw1)) + (with-dma-buffer-add-bucket ((buf (-> (current-frame) global-buf)) (bucket-id debug-no-zbuf)) (draw-sprite2d-xy buf -256 (- (-> *video-parms* screen-hy)) 512 (-> *video-parms* screen-sy) (-> obj color)) ) (none) @@ -467,7 +467,7 @@ (-> (current-frame) debug-buf) (-> (current-frame) global-buf) )) - (bucket-id debug-draw0)) + (bucket-id debug)) (show-iop-memory dma-buff) ) ) @@ -749,7 +749,7 @@ ;; debug dma (with-dma-buffer-add-bucket ((debug-buf (-> disp frames (-> disp on-screen) frame debug-buf)) - (bucket-id debug-draw1)) + (bucket-id debug-no-zbuf)) (when *display-profile* (dma-buffer-add-gs-set debug-buf (alpha-1 (new 'static 'gs-alpha :b 1 :d 1)) @@ -850,7 +850,7 @@ (-> disp frames (-> disp on-screen) frame debug-buf) (-> disp frames (-> disp on-screen) frame global-buf) )) - (bucket-id debug-draw0)) + (bucket-id debug)) (if (and (= *master-mode* 'pause) (!= *cheat-mode* 'camera)) (draw-string-xy (lookup-text! *common-text* (game-text-id pause) #f) s3-1 256 160 (font-color orange-red) (font-flags shadow kerning middle large)) diff --git a/goal_src/engine/game/task/process-taskable.gc b/goal_src/engine/game/task/process-taskable.gc index 3bab3a3c36..49307553cd 100644 --- a/goal_src/engine/game/task/process-taskable.gc +++ b/goal_src/engine/game/task/process-taskable.gc @@ -89,7 +89,7 @@ ) (dma-bucket-insert-tag (-> *display* frames (-> *display* on-screen) frame bucket-group) - (bucket-id debug-draw0) + (bucket-id debug) s5-0 (the-as (pointer dma-tag) a3-4) ) @@ -118,7 +118,7 @@ ) (dma-bucket-insert-tag (-> *display* frames (-> *display* on-screen) frame bucket-group) - (bucket-id debug-draw0) + (bucket-id debug) s5-1 (the-as (pointer dma-tag) a3-7) ) diff --git a/goal_src/engine/geometry/vol.gc b/goal_src/engine/geometry/vol.gc index 6e47a897eb..fd8863216a 100644 --- a/goal_src/engine/geometry/vol.gc +++ b/goal_src/engine/geometry/vol.gc @@ -192,7 +192,7 @@ (dotimes (s3-0 (/ (-> obj point-count) 2)) (add-debug-line #t - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (the-as vector s4-0) (the-as vector (&-> s4-0 4)) (the-as rgba s5-0) diff --git a/goal_src/engine/gfx/ocean/ocean-mid.gc b/goal_src/engine/gfx/ocean/ocean-mid.gc index 296d4eb98a..d34b1a7a27 100644 --- a/goal_src/engine/gfx/ocean/ocean-mid.gc +++ b/goal_src/engine/gfx/ocean/ocean-mid.gc @@ -1122,15 +1122,15 @@ (+! (-> p3 x) (+ x0 3145728.0)) (+! (-> p3 z) (+ y0 3145728.0)) - (add-debug-flat-triangle #t (bucket-id debug-draw1) p0 p1s p2s color0) - ;; (add-debug-flat-triangle #t (bucket-id debug-draw1) p3 p1 p2 color0) - (add-debug-outline-triangle #t (bucket-id debug-draw1) p0 p1 p2 color1) - (add-debug-outline-triangle #t (bucket-id debug-draw1) p3 p1 p2 color1) + (add-debug-flat-triangle #t (bucket-id debug-no-zbuf) p0 p1s p2s color0) + ;; (add-debug-flat-triangle #t (bucket-id debug-no-zbuf) p3 p1 p2 color0) + (add-debug-outline-triangle #t (bucket-id debug-no-zbuf) p0 p1 p2 color1) + (add-debug-outline-triangle #t (bucket-id debug-no-zbuf) p3 p1 p2 color1) (format (clear *temp-string*) "o: ~d ~d ~d ~b" x y (+ (* 6 y) x) masks) (add-debug-text-3d #t - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) *temp-string* p0 (font-color orange-red) diff --git a/goal_src/engine/gfx/ripple.gc b/goal_src/engine/gfx/ripple.gc index 4ccebbae04..251666ee76 100644 --- a/goal_src/engine/gfx/ripple.gc +++ b/goal_src/engine/gfx/ripple.gc @@ -122,7 +122,7 @@ (vector+! s5-0 s5-0 (-> arg0 root trans)) (add-debug-sphere #t - (bucket-id debug-draw0) + (bucket-id debug) s5-0 2048.0 (new 'static 'rgba :r #xff :g #xff :a #x80) diff --git a/goal_src/engine/gfx/tfrag/tfrag-methods.gc b/goal_src/engine/gfx/tfrag/tfrag-methods.gc index ab05075890..543be7f003 100644 --- a/goal_src/engine/gfx/tfrag/tfrag-methods.gc +++ b/goal_src/engine/gfx/tfrag/tfrag-methods.gc @@ -17,7 +17,7 @@ (dotimes (s3-0 (/ (-> s4-0 length) 2)) (add-debug-line #t - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (-> s4-0 data (* s3-0 2)) (-> s4-0 data (+ (* s3-0 2) 1)) (new 'static 'rgba :r #xff :g #xff :b #xff :a #x80) @@ -999,8 +999,8 @@ (-> arg1 global-buf) (edge-debug-lines (-> obj debug-data debug-lines)) - (add-debug-sphere #t (bucket-id debug-draw0) (-> obj bsphere) (-> obj bsphere w) (new 'static 'rgba :r #xff :g #xff :b #xff :a #x80)) - ;;(add-debug-x #t (bucket-id debug-draw0) (-> obj bsphere) (new 'static 'rgba :r #xff :g #xff :b #xff :a #x80)) + (add-debug-sphere #t (bucket-id debug) (-> obj bsphere) (-> obj bsphere w) (new 'static 'rgba :r #xff :g #xff :b #xff :a #x80)) + ;;(add-debug-x #t (bucket-id debug) (-> obj bsphere) (new 'static 'rgba :r #xff :g #xff :b #xff :a #x80)) (none) ) diff --git a/goal_src/engine/level/load-boundary.gc b/goal_src/engine/level/load-boundary.gc index cb5fd9c4bd..0744a536c5 100644 --- a/goal_src/engine/level/load-boundary.gc +++ b/goal_src/engine/level/load-boundary.gc @@ -382,7 +382,7 @@ (logtest? (-> *display* real-actual-frame-counter) 4) ) )) - (with-dma-buffer-add-bucket ((s5-0 (-> (current-frame) global-buf)) (bucket-id debug-draw0)) + (with-dma-buffer-add-bucket ((s5-0 (-> (current-frame) global-buf)) (bucket-id debug)) (dma-buffer-add-gs-set-flusha s5-0 (zbuf-1 (new 'static 'gs-zbuf :zbp #x1c0 :psm (gs-psm ct24))) (test-1 (new 'static 'gs-test :ate #x1 :atst (gs-atest greater-equal) :aref #x26 :zte #x1 :ztst (gs-ztest greater-equal))) @@ -501,7 +501,7 @@ (set! (-> s2-0 y) (-> s5-0 top-plane)) (add-debug-sphere #t - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) s2-0 8192.0 (new 'static 'rgba :a #x80) @@ -510,7 +510,7 @@ (set! (-> s2-0 y) (-> s5-0 bot-plane)) (add-debug-sphere #t - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) s2-0 8192.0 (new 'static 'rgba :a #x80) diff --git a/goal_src/engine/nav/navigate.gc b/goal_src/engine/nav/navigate.gc index 1c8c764afd..c1296cbf58 100644 --- a/goal_src/engine/nav/navigate.gc +++ b/goal_src/engine/nav/navigate.gc @@ -190,7 +190,7 @@ ) (add-debug-line #t - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (vector+! gp-0 s5-0 (the-as vector (-> s2-0 (-> arg0 vertex 0)))) (vector+! s4-0 s5-0 (the-as vector (-> s2-0 (-> arg0 vertex 1)))) arg1 @@ -199,7 +199,7 @@ ) (add-debug-line #t - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (vector+! gp-0 s5-0 (the-as vector (-> s2-0 (-> arg0 vertex 1)))) (vector+! s4-0 s5-0 (the-as vector (-> s2-0 (-> arg0 vertex 2)))) arg1 @@ -208,7 +208,7 @@ ) (add-debug-line #t - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (vector+! gp-0 s5-0 (the-as vector (-> s2-0 (-> arg0 vertex 2)))) (vector+! s4-0 s5-0 (the-as vector (-> s2-0 (-> arg0 vertex 0)))) arg1 @@ -1630,18 +1630,18 @@ (set! (-> s5-0 debug-time) (the-as uint (-> *display* actual-frame-counter))) (add-debug-sphere (logtest? (-> obj flags) (nav-control-flags navcf1)) - (bucket-id debug-draw0) + (bucket-id debug) (-> s5-0 bounds) (-> s5-0 bounds w) (new 'static 'rgba :r #xff :g #xff :a #x20) ) - (add-debug-vector #t (bucket-id debug-draw1) (-> s5-0 origin) *x-vector* (meters 1.0) *color-red*) - (add-debug-vector #t (bucket-id debug-draw1) (-> s5-0 origin) *z-vector* (meters 1.0) *color-blue*) + (add-debug-vector #t (bucket-id debug-no-zbuf) (-> s5-0 origin) *x-vector* (meters 1.0) *color-red*) + (add-debug-vector #t (bucket-id debug-no-zbuf) (-> s5-0 origin) *z-vector* (meters 1.0) *color-blue*) (when (logtest? (-> obj flags) (nav-control-flags navcf2)) (dotimes (s3-0 (-> s5-0 vertex-count)) (add-debug-x #t - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (vector+! s4-0 (-> s5-0 origin) (the-as vector (-> s5-0 vertex s3-0))) *color-green* ) @@ -1677,9 +1677,9 @@ (set! (-> s0-0 x) (- (-> a0-15 x) (-> v1-20 x))) (set! (-> s0-0 y) (+ (-> a0-15 y) (-> v1-20 y))) (set! (-> s0-0 z) (+ (-> a0-15 z) (-> v1-20 z))) - (add-debug-line #t (bucket-id debug-draw1) sv-192 s2-0 (the-as rgba sv-208) #f (the-as rgba -1)) - (add-debug-line #t (bucket-id debug-draw1) s2-0 s1-0 (the-as rgba sv-208) #f (the-as rgba -1)) - (add-debug-line #t (bucket-id debug-draw1) s1-0 s0-0 (the-as rgba sv-208) #f (the-as rgba -1)) + (add-debug-line #t (bucket-id debug-no-zbuf) sv-192 s2-0 (the-as rgba sv-208) #f (the-as rgba -1)) + (add-debug-line #t (bucket-id debug-no-zbuf) s2-0 s1-0 (the-as rgba sv-208) #f (the-as rgba -1)) + (add-debug-line #t (bucket-id debug-no-zbuf) s1-0 s0-0 (the-as rgba sv-208) #f (the-as rgba -1)) (let ((t9-7 add-debug-line) (a0-19 #t) (a1-13 68) @@ -1755,7 +1755,7 @@ (when (logtest? (-> obj flags) (nav-control-flags navcf7)) (dotimes (s3-3 (the-as int (-> s5-0 static-sphere-count))) (let ((s2-2 (-> s5-0 static-sphere s3-3))) - (add-debug-sphere #t (bucket-id debug-draw0) (the-as vector s2-2) (-> s2-2 trans w) *color-blue*) + (add-debug-sphere #t (bucket-id debug) (the-as vector s2-2) (-> s2-2 trans w) *color-blue*) (let ((s1-2 add-debug-text-3d) (s0-2 #t) ) @@ -1793,7 +1793,7 @@ ) (add-debug-line #t - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (vector+! a2-22 v1-80 (the-as vector (-> obj portal 0))) (vector+! a3-13 v1-80 (the-as vector (-> obj portal 1))) (new 'static 'rgba :r #xff :g #x80 :b #x40 :a #x80) @@ -1804,7 +1804,7 @@ ) (add-debug-vector #t - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (-> obj shape trans) (-> obj travel) (meters 0.00024414062) @@ -1812,7 +1812,7 @@ ) (add-debug-vector #t - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (vector+! (new 'stack-no-clear 'vector) (-> obj shape trans) (new 'static 'vector :y 4096.0 :w 1.0)) (-> obj old-travel) (meters 0.00024414062) @@ -1820,7 +1820,7 @@ ) (add-debug-x #t - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (vector+! (new 'stack-no-clear 'vector) (-> obj shape trans) (-> obj travel)) (new 'static 'rgba :r #xff :g #xff :b #xff :a #x80) ) @@ -1828,7 +1828,7 @@ (when (logtest? (-> obj flags) (nav-control-flags navcf7)) (add-debug-sphere #t - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (the-as vector (-> obj shape root-prim prim-core)) (-> obj shape nav-radius) (new 'static 'rgba :g #xff :b #xff :a #x20) @@ -1838,7 +1838,7 @@ (vector+! s4-0 (-> s5-0 origin) (the-as vector (&-> v1-95 x))) (add-debug-sphere #t - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) s4-0 (- (-> v1-95 w) (-> obj shape nav-radius)) (new 'static 'rgba :g #xff :b #xff :a #x20) diff --git a/goal_src/engine/nav/path.gc b/goal_src/engine/nav/path.gc index 18fd5902e9..5fa8a5a60f 100644 --- a/goal_src/engine/nav/path.gc +++ b/goal_src/engine/nav/path.gc @@ -35,7 +35,7 @@ (if (and (logtest? (-> obj flags) (path-control-flag draw-line)) (< s5-1 (+ (-> obj curve num-cverts) -1))) (add-debug-line #t - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) s4-1 (-> obj cverts (+ s5-1 1)) (new 'static 'rgba :r #xff :g #x80 :a #x80) @@ -44,7 +44,7 @@ ) ) (if (logtest? (-> obj flags) (path-control-flag draw-point)) - (add-debug-x #t (bucket-id debug-draw1) s4-1 (new 'static 'rgba :r #xff :a #x80)) + (add-debug-x #t (bucket-id debug-no-zbuf) s4-1 (new 'static 'rgba :r #xff :a #x80)) ) (when (logtest? (-> obj flags) (path-control-flag draw-text)) (let ((s3-1 add-debug-text-3d) @@ -292,7 +292,7 @@ (if (and (logtest? (-> obj flags) (path-control-flag draw-line)) (> (-> obj curve num-cverts) 0)) (add-debug-curve2 #t - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (the-as curve (&-> obj cverts)) (new 'static 'rgba :r #xff :g #x80 :a #x80) #f @@ -301,7 +301,7 @@ (dotimes (s5-1 (-> obj curve num-cverts)) (let ((s4-1 (-> obj cverts s5-1))) (if (logtest? (-> obj flags) (path-control-flag draw-point)) - (add-debug-x #t (bucket-id debug-draw1) s4-1 (new 'static 'rgba :r #xff :a #x80)) + (add-debug-x #t (bucket-id debug-no-zbuf) s4-1 (new 'static 'rgba :r #xff :a #x80)) ) (when (logtest? (-> obj flags) (path-control-flag draw-text)) (let ((s3-1 add-debug-text-3d) diff --git a/goal_src/engine/physics/trajectory.gc b/goal_src/engine/physics/trajectory.gc index 7258b10455..7af595444d 100644 --- a/goal_src/engine/physics/trajectory.gc +++ b/goal_src/engine/physics/trajectory.gc @@ -97,7 +97,7 @@ ) (add-debug-line #t - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) prev-pos pos (new 'static 'rgba :r #xff :a #x80) diff --git a/goal_src/engine/sparticle/sparticle-launcher.gc b/goal_src/engine/sparticle/sparticle-launcher.gc index 5edfd7139a..118d38ba56 100644 --- a/goal_src/engine/sparticle/sparticle-launcher.gc +++ b/goal_src/engine/sparticle/sparticle-launcher.gc @@ -925,7 +925,7 @@ ) (add-debug-sphere *display-actor-vis* - (bucket-id debug-draw0) + (bucket-id debug) gp-1 (-> gp-1 w) (new 'static 'rgba :g #xff :a #x80) diff --git a/goal_src/engine/target/joint-mod-h.gc b/goal_src/engine/target/joint-mod-h.gc index 8e8bceb5d5..bf53db9d33 100644 --- a/goal_src/engine/target/joint-mod-h.gc +++ b/goal_src/engine/target/joint-mod-h.gc @@ -70,7 +70,7 @@ (defun-debug joint-mod-debug-draw ((mod joint-mod)) "Draw a frame at the bone." ;; I believe this draws a set of coordinate axes that represent the transformation matrix. - (add-debug-matrix #t (bucket-id debug-draw1) (-> mod joint bone transform)) + (add-debug-matrix #t (bucket-id debug-no-zbuf) (-> mod joint bone transform)) (none) ) @@ -425,7 +425,7 @@ (if (and (= (-> gp-0 process type) target) (!= (-> gp-0 blend) 0.0)) (add-debug-text-sphere *display-target-marks* - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (-> gp-0 target) 819.2 "look" @@ -559,7 +559,7 @@ (if (and (= (-> gp-0 process type) target) (!= (-> gp-0 blend) 0.0)) (add-debug-text-sphere *display-target-marks* - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (-> gp-0 target) 819.2 "look" diff --git a/goal_src/engine/target/logic-target.gc b/goal_src/engine/target/logic-target.gc index b716175010..4e6f1d8d2f 100644 --- a/goal_src/engine/target/logic-target.gc +++ b/goal_src/engine/target/logic-target.gc @@ -93,7 +93,7 @@ (let ((s2-0 (-> arg0 history-data (logand (+ (-> arg0 unknown-halfword00) s4-0) 127)))) (add-debug-line (logtest? s5-0 2) - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (-> v1-19 trans) (-> s2-0 trans) (the-as rgba (+ #xffff00 (shl s4-0 24))) @@ -102,7 +102,7 @@ ) (add-debug-vector (logtest? s5-0 4) - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (-> s2-0 trans) (-> s2-0 transv) (meters 0.000024414063) @@ -111,7 +111,7 @@ (when (zero? (logand (-> s2-0 status) 256)) (add-debug-line (logtest? s5-0 1) - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (-> s1-0 intersect) (-> s2-0 intersect) (the-as rgba (+ #xffffff (shl s4-0 24))) @@ -124,7 +124,7 @@ ) (add-debug-vector (logtest? s5-0 32) - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (-> s2-0 intersect) (-> s2-0 surface-normal) (meters 1.0) @@ -132,7 +132,7 @@ ) (add-debug-vector (logtest? s5-0 16) - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (-> s2-0 intersect) (-> s2-0 local-normal) (meters 1.0) @@ -141,7 +141,7 @@ ) (add-debug-vector (logtest? s5-0 8) - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (-> s2-0 trans) (-> s2-0 transv-out) (meters 0.000024414063) @@ -633,7 +633,7 @@ (vector+! gp-1 gp-1 (-> self control trans)) (add-debug-text-sphere *display-target-marks* - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) gp-1 819.2 "target" @@ -809,7 +809,7 @@ (vector+! gp-1 gp-1 (-> self control trans)) (add-debug-text-sphere *display-target-marks* - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) gp-1 819.2 "ltransv" @@ -820,7 +820,7 @@ (vector+! gp-1 gp-1 (-> self control trans)) (add-debug-text-sphere *display-target-marks* - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) gp-1 819.2 "btransv" @@ -934,7 +934,7 @@ ) (add-debug-vector *display-target-marks* - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (-> self control trans) gp-0 (meters 2.0) @@ -942,7 +942,7 @@ ) (add-debug-vector *display-target-marks* - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (-> self control trans) s5-0 (meters 2.0) @@ -951,7 +951,7 @@ ) (add-debug-vector *display-target-marks* - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (-> self control trans) (-> self control unknown-matrix01 vector 2) (meters 2.0) @@ -1196,7 +1196,7 @@ ) (add-debug-vector *display-target-marks* - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (-> self control trans) (-> self control ground-poly-normal) (meters 2.0) @@ -1204,7 +1204,7 @@ ) (add-debug-vector *display-target-marks* - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (-> self control trans) (-> self control local-normal) (meters 2.0) @@ -1212,7 +1212,7 @@ ) (add-debug-vector *display-target-marks* - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (-> self control trans) (-> self control unknown-dynamics00 gravity-normal) (meters 2.5) @@ -1220,7 +1220,7 @@ ) (add-debug-vector *display-target-marks* - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (-> self control trans) (-> self control dynam gravity-normal) (meters 3.0) @@ -1344,7 +1344,7 @@ (when *display-edge-collision-marks* (add-debug-vector #t - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (-> (the-as swingpole s4-0) root trans) (the-as vector (&-> s4-0 stack 16)) (meters 3.0) @@ -1352,21 +1352,21 @@ ) (add-debug-sphere #t - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (-> (the-as swingpole s4-0) root trans) (-> (the-as swingpole s4-0) range) (new 'static 'rgba :r #xff :g #xff :a #x80) ) (add-debug-sphere #t - (bucket-id debug-draw0) + (bucket-id debug) (-> self control unknown-vector90) 819.2 (new 'static 'rgba :r #xff :a #x80) ) - (add-debug-sphere #t (bucket-id debug-draw1) s3-0 819.2 (new 'static 'rgba :g #xff :a #x80)) - (add-debug-sphere #t (bucket-id debug-draw1) s2-0 819.2 (new 'static 'rgba :g #xff :b #x40 :a #x80)) - (add-debug-sphere #t (bucket-id debug-draw1) s5-0 819.2 (new 'static 'rgba :b #xff :a #x80)) + (add-debug-sphere #t (bucket-id debug-no-zbuf) s3-0 819.2 (new 'static 'rgba :g #xff :a #x80)) + (add-debug-sphere #t (bucket-id debug-no-zbuf) s2-0 819.2 (new 'static 'rgba :g #xff :b #x40 :a #x80)) + (add-debug-sphere #t (bucket-id debug-no-zbuf) s5-0 819.2 (new 'static 'rgba :b #xff :a #x80)) ) ) (let ((s4-2 (vector-! (new-stack-vector0) s5-0 (-> self control unknown-vector90)))) diff --git a/goal_src/engine/target/sidekick.gc b/goal_src/engine/target/sidekick.gc index 173056acd9..6864fb5754 100644 --- a/goal_src/engine/target/sidekick.gc +++ b/goal_src/engine/target/sidekick.gc @@ -182,21 +182,21 @@ (debug-print-channels (-> self skel) (the-as symbol *stdcon*)) (add-debug-sphere *display-sidekick-stats* - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (-> self parent-override 0 control unknown-cspace10 parent bone transform vector 3) 409.6 (new 'static 'rgba :g #xff :a #x80) ) (add-debug-sphere *display-sidekick-stats* - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (-> self node-list data 3 bone transform vector 3) 409.6 (new 'static 'rgba :r #xff :g #xff :a #x80) ) (add-debug-sphere *display-sidekick-stats* - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (-> self draw origin) 409.6 (new 'static 'rgba :r #xff :g #x80 :a #x80) diff --git a/goal_src/engine/target/target-util.gc b/goal_src/engine/target/target-util.gc index 58a8256bdf..e7b82559d5 100644 --- a/goal_src/engine/target/target-util.gc +++ b/goal_src/engine/target/target-util.gc @@ -1166,7 +1166,7 @@ ((logtest? (-> gp-0 state-flags) 1024) (add-debug-sphere *display-camera-marks* - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (-> gp-0 alt-cam-pos) 819.2 (new 'static 'rgba :r #xff :a #x80) @@ -1176,7 +1176,7 @@ ((logtest? #x20000 (-> gp-0 state-flags)) (add-debug-sphere *display-camera-marks* - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (-> gp-0 alt-cam-pos) 819.2 (new 'static 'rgba :r #xff :a #x80) @@ -1189,7 +1189,7 @@ (set! (-> (the-as vector s5-0) y) (fmax (-> (the-as vector s5-0) y) (-> gp-0 alt-cam-pos y))) (add-debug-sphere *display-camera-marks* - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (the-as vector s5-0) 819.2 (new 'static 'rgba :r #xff :a #x80) @@ -1200,7 +1200,7 @@ (else (add-debug-sphere *display-camera-marks* - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (the-as vector (&-> (-> gp-0 control) unknown-qword00)) 819.2 (new 'static 'rgba :r #xff :a #x80) diff --git a/goal_src/engine/ui/hud-classes.gc b/goal_src/engine/ui/hud-classes.gc index 66eb5ae1c2..ac56f23766 100644 --- a/goal_src/engine/ui/hud-classes.gc +++ b/goal_src/engine/ui/hud-classes.gc @@ -170,7 +170,7 @@ ) (dma-bucket-insert-tag (-> *display* frames (-> *display* on-screen) frame bucket-group) - (bucket-id debug-draw0) + (bucket-id debug) gp-0 (the-as (pointer dma-tag) a3-7) ) @@ -565,7 +565,7 @@ ) (dma-bucket-insert-tag (-> *display* frames (-> *display* on-screen) frame bucket-group) - (bucket-id debug-draw0) + (bucket-id debug) s4-1 (the-as (pointer dma-tag) a3-12) ) @@ -789,7 +789,7 @@ ) (dma-bucket-insert-tag (-> *display* frames (-> *display* on-screen) frame bucket-group) - (bucket-id debug-draw0) + (bucket-id debug) gp-0 (the-as (pointer dma-tag) a3-7) ) @@ -1192,7 +1192,7 @@ ) (dma-bucket-insert-tag (-> *display* frames (-> *display* on-screen) frame bucket-group) - (bucket-id debug-draw0) + (bucket-id debug) gp-0 (the-as (pointer dma-tag) a3-7) ) @@ -1473,7 +1473,7 @@ ) (dma-bucket-insert-tag (-> *display* frames (-> *display* on-screen) frame bucket-group) - (bucket-id debug-draw0) + (bucket-id debug) gp-0 (the-as (pointer dma-tag) a3-7) ) diff --git a/goal_src/engine/ui/progress/progress-draw.gc b/goal_src/engine/ui/progress/progress-draw.gc index bc9531d44d..23a0aaf725 100644 --- a/goal_src/engine/ui/progress/progress-draw.gc +++ b/goal_src/engine/ui/progress/progress-draw.gc @@ -1776,7 +1776,7 @@ ) (dma-bucket-insert-tag (-> *display* frames (-> *display* on-screen) frame bucket-group) - (bucket-id debug-draw0) + (bucket-id debug) s4-0 (the-as (pointer dma-tag) a3-4) ) @@ -1885,7 +1885,7 @@ ) (dma-bucket-insert-tag (-> *display* frames (-> *display* on-screen) frame bucket-group) - (bucket-id debug-draw0) + (bucket-id debug) s4-4 (the-as (pointer dma-tag) a3-9) ) diff --git a/goal_src/engine/ui/progress/progress.gc b/goal_src/engine/ui/progress/progress.gc index cb6ad9df13..ebe42e7418 100644 --- a/goal_src/engine/ui/progress/progress.gc +++ b/goal_src/engine/ui/progress/progress.gc @@ -2392,7 +2392,7 @@ ) (dma-bucket-insert-tag (-> *display* frames (-> *display* on-screen) frame bucket-group) - (bucket-id debug-draw0) + (bucket-id debug) gp-0 (the-as (pointer dma-tag) a3-4) ) @@ -2414,7 +2414,7 @@ ) (dma-bucket-insert-tag (-> *display* frames (-> *display* on-screen) frame bucket-group) - (bucket-id debug-draw0) + (bucket-id debug) gp-1 (the-as (pointer dma-tag) a3-6) ) @@ -2436,7 +2436,7 @@ ) (dma-bucket-insert-tag (-> *display* frames (-> *display* on-screen) frame bucket-group) - (bucket-id debug-draw0) + (bucket-id debug) gp-2 (the-as (pointer dma-tag) a3-8) ) @@ -2458,7 +2458,7 @@ ) (dma-bucket-insert-tag (-> *display* frames (-> *display* on-screen) frame bucket-group) - (bucket-id debug-draw0) + (bucket-id debug) gp-3 (the-as (pointer dma-tag) a3-10) ) diff --git a/goal_src/engine/ui/text.gc b/goal_src/engine/ui/text.gc index fa4e903234..574f9b7f82 100644 --- a/goal_src/engine/ui/text.gc +++ b/goal_src/engine/ui/text.gc @@ -233,9 +233,10 @@ ) (defun load-level-text-files ((arg0 int)) - "If needed, load text" + "Load the text files needed for level idx. + This function made more sense back when text files were split up, but in the end they put everything + in a single text group and file." - ;; just load common. These flags are not yet understood. (if (or *level-text-file-load-flag* (>= arg0 0)) (load-game-text-info "common" '*common-text* *common-text-heap*) ) @@ -323,28 +324,28 @@ (set-vector! s5-0 128 128 128 128) (add-debug-line2d #t - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (the-as vector (-> gp-0 vector)) (-> gp-0 vector 1) (the-as vector s5-0) ) (add-debug-line2d #t - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (-> gp-0 vector 1) (-> gp-0 vector 2) (the-as vector s5-0) ) (add-debug-line2d #t - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (-> gp-0 vector 2) (-> gp-0 vector 3) (the-as vector s5-0) ) (add-debug-line2d #t - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (-> gp-0 vector 3) (the-as vector (-> gp-0 vector)) (the-as vector s5-0) @@ -399,7 +400,7 @@ (none) ) -(defun print-game-text ((str string) (font-ctxt font-context) (alpha symbol) (offset-thing int) (arg4 int)) +(defun print-game-text ((str string) (font-ctxt font-context) (opaque symbol) (alpha int) (line-height int)) "Print text. Not worth commenting until we get stack variables in lets, I think" (local-vars (sv-112 float) @@ -424,238 +425,192 @@ (sv-208 symbol) (sv-212 symbol) ) - (let - ((gp-0 - (new - 'stack - 'font-context - *font-default-matrix* - (the int (-> font-ctxt origin x)) - (the int (-> font-ctxt origin y)) - 0.0 - (font-color default) - (font-flags shadow kerning) - ) - ) - ) - (when (< 0.1 (-> font-ctxt scale)) - (set! sv-112 (-> font-ctxt mat vector 0 x)) - (set! sv-116 (-> font-ctxt mat vector 1 y)) - (set! sv-120 (-> *video-parms* relative-x-scale)) - (set! sv-124 (-> *video-parms* relative-y-scale)) - (set! sv-128 (-> *video-parms* relative-x-scale-reciprical)) - (set! sv-132 (-> *video-parms* relative-y-scale-reciprical)) - (set! sv-136 (-> font-ctxt scale)) - (set! (-> gp-0 origin z) (-> font-ctxt origin z)) - (set! (-> gp-0 flags) (-> font-ctxt flags)) - (set! (-> gp-0 color) (-> font-ctxt color)) - (set! (-> gp-0 scale) sv-136) - (when (logtest? (-> gp-0 flags) (font-flags left)) - (logclear! (-> gp-0 flags) (font-flags left)) - (let ((f30-0 (-> gp-0 width)) - (f28-0 (-> gp-0 height)) - ) - (set! (-> gp-0 width) (-> font-ctxt width)) - (set! (-> gp-0 height) (-> font-ctxt height)) - (+! - (-> gp-0 origin y) - (the - float - (the - int - (* 0.5 (- (-> gp-0 height) (print-game-text str gp-0 #t 128 22))) - ) - ) - ) - (set! (-> gp-0 width) f30-0) - (set! (-> gp-0 height) f28-0) - ) - ) - (set! (-> gp-0 mat vector 0 x) (* (-> gp-0 mat vector 0 x) sv-136)) - (set! (-> gp-0 mat vector 1 y) (* (-> gp-0 mat vector 1 y) sv-136)) - (set! - (-> *video-parms* relative-x-scale) - (* (-> *video-parms* relative-x-scale) sv-136) - ) - (set! - (-> *video-parms* relative-y-scale) - (* (-> *video-parms* relative-y-scale) sv-136) - ) - (set! - (-> *video-parms* relative-x-scale-reciprical) - (/ 1.0 (-> *video-parms* relative-x-scale)) - ) - (set! (-> *video-parms* relative-y-scale-reciprical) (/ 1.0 sv-136)) - (set! sv-140 (-> str data)) - (set! sv-144 (-> gp-0 origin x)) - (set! sv-148 (-> gp-0 origin x)) - (set! sv-152 (+ (-> gp-0 origin x) (-> font-ctxt width))) - (set! sv-156 (+ (-> gp-0 origin y) (-> font-ctxt height))) - (set! - sv-160 - (* (get-string-length " " gp-0) (-> *video-parms* relative-x-scale)) - ) - (set! sv-164 (* (if (logtest? (-> gp-0 flags) 32) - (the float arg4) - 14.0 - ) - sv-136 - ) - ) - (set! sv-168 0) - (if (logtest? (-> gp-0 flags) 4) - (+! (-> gp-0 origin x) (* 0.5 (-> font-ctxt width))) - ) - (set! sv-176 (the-as int (-> sv-140 0))) ;; char - (set! sv-184 0) - (set! sv-192 0) - (set! sv-200 0) - (set! sv-208 (the-as symbol #f)) - (set! sv-212 (the-as symbol #f)) - (set! (-> *game-text-line* data 0) (the-as uint 0)) - (while - (or (not (and (zero? sv-176) (zero? sv-184) (zero? sv-192))) - (>= sv-156 (-> gp-0 origin y)) - ) - (cond - ((= sv-176 32) - (set! (-> *game-text-word* data sv-184) (the-as uint sv-176)) - (set! sv-184 (+ sv-184 1)) - (set! sv-208 #t) - ) - ((zero? sv-176) - (if (zero? sv-184) - (set! sv-212 #t) - (set! sv-208 #t) - ) - ) - (else - (if (= sv-176 95) - (set! sv-176 32) - ) - (set! (-> *game-text-word* data sv-184) (the-as uint sv-176)) - (set! sv-184 (+ sv-184 1)) - ) - ) - (when (= sv-208 #t) - (set! (-> *game-text-word* data sv-184) (the-as uint 0)) - (let* ((f30-1 sv-144) - (f0-49 - (* - (get-string-length *game-text-word* gp-0) - (-> *video-parms* relative-x-scale) - ) + (let ((gp-0 (new + 'stack + 'font-context + *font-default-matrix* + (the int (-> font-ctxt origin x)) + (the int (-> font-ctxt origin y)) + 0.0 + (font-color default) + (font-flags shadow kerning) + ) ) - (f1-14 (+ f30-1 f0-49)) - ) - (if (= (-> *game-text-word* data (+ sv-184 -1)) 32) - (set! f1-14 (- f1-14 sv-160)) ) - (cond - ((< sv-152 f1-14) - (set! sv-144 (+ sv-148 f0-49)) - (set! sv-212 #t) - ) - (else - (set! sv-144 (+ sv-144 f0-49)) - ) + (when (< 0.1 (-> font-ctxt scale)) + (set! sv-112 (-> font-ctxt mat vector 0 x)) + (set! sv-116 (-> font-ctxt mat vector 1 y)) + (set! sv-120 (-> *video-parms* relative-x-scale)) + (set! sv-124 (-> *video-parms* relative-y-scale)) + (set! sv-128 (-> *video-parms* relative-x-scale-reciprical)) + (set! sv-132 (-> *video-parms* relative-y-scale-reciprical)) + (set! sv-136 (-> font-ctxt scale)) + (set! (-> gp-0 origin z) (-> font-ctxt origin z)) + (set! (-> gp-0 flags) (-> font-ctxt flags)) + (set! (-> gp-0 color) (-> font-ctxt color)) + (set! (-> gp-0 scale) sv-136) + (when (logtest? (-> gp-0 flags) (font-flags left)) + (logclear! (-> gp-0 flags) (font-flags left)) + (let ((f30-0 (-> gp-0 width)) + (f28-0 (-> gp-0 height)) + ) + (set! (-> gp-0 width) (-> font-ctxt width)) + (set! (-> gp-0 height) (-> font-ctxt height)) + (+! (-> gp-0 origin y) + (the float (the int (* 0.5 (- (-> gp-0 height) (print-game-text str gp-0 #t 128 22))))) + ) + (set! (-> gp-0 width) f30-0) + (set! (-> gp-0 height) f28-0) + ) ) - ) - ) - (when (= sv-212 #t) - (when (>= sv-200 (the-as int (-> gp-0 start-line))) - (let ((f30-2 (+ (-> gp-0 origin y) sv-164))) - (when (>= sv-156 f30-2) - (when (= (-> *game-text-line* data (+ sv-192 -1)) 32) - (set! (-> *game-text-line* data (+ sv-192 -1)) (the-as uint 0)) - (when - (and - (= (-> *game-text-line* data (+ sv-192 -5)) 126) - (= (-> *game-text-line* data (+ sv-192 -2)) 72) + (set! (-> gp-0 mat vector 0 x) (* (-> gp-0 mat vector 0 x) sv-136)) + (set! (-> gp-0 mat vector 1 y) (* (-> gp-0 mat vector 1 y) sv-136)) + (set! (-> *video-parms* relative-x-scale) (* (-> *video-parms* relative-x-scale) sv-136)) + (set! (-> *video-parms* relative-y-scale) (* (-> *video-parms* relative-y-scale) sv-136)) + (set! (-> *video-parms* relative-x-scale-reciprical) (/ 1.0 (-> *video-parms* relative-x-scale))) + (set! (-> *video-parms* relative-y-scale-reciprical) (/ 1.0 sv-136)) + (set! sv-140 (-> str data)) + (set! sv-144 (-> gp-0 origin x)) + (set! sv-148 (-> gp-0 origin x)) + (set! sv-152 (+ (-> gp-0 origin x) (-> font-ctxt width))) + (set! sv-156 (+ (-> gp-0 origin y) (-> font-ctxt height))) + (set! sv-160 (* (get-string-length " " gp-0) (-> *video-parms* relative-x-scale))) + (set! sv-164 (* (if (logtest? (-> gp-0 flags) (font-flags large)) + (the float line-height) + 14.0 + ) + sv-136 + ) ) - (set! (-> *game-text-line* data (+ sv-192 -5)) (the-as uint 0)) - 0 - ) + (set! sv-168 0) + (if (logtest? (-> gp-0 flags) (font-flags middle)) + (+! (-> gp-0 origin x) (* 0.5 (-> font-ctxt width))) ) - ) - (when - (and - (= (-> *game-text-line* data (+ sv-192 -4)) 126) - (= (-> *game-text-line* data (+ sv-192 -1)) 72) - ) - (set! (-> *game-text-line* data (+ sv-192 -4)) (the-as uint 0)) - 0 - ) - (if (nonzero? (-> *game-text-line* data 0)) - (set! sv-168 (+ sv-168 1)) - ) - (when (not alpha) - (let* - ((s1-1 - (-> *display* frames (-> *display* on-screen) frame global-buf) - ) - (s2-1 (-> s1-1 base)) - ) - (set-font-color-alpha (-> font-ctxt color) offset-thing) - (draw-string *game-text-line* s1-1 gp-0) - (set-font-color-alpha (-> font-ctxt color) 128) - (set! (-> gp-0 color) (-> *font-work* last-color)) - (let ((a3-3 (-> s1-1 base))) - (let ((v1-127 (the-as object (-> s1-1 base)))) - (set! - (-> (the-as dma-packet v1-127) dma) - (new 'static 'dma-tag :id (dma-tag-id next)) - ) - (set! (-> (the-as dma-packet v1-127) vif0) (new 'static 'vif-tag)) - (set! (-> (the-as dma-packet v1-127) vif1) (new 'static 'vif-tag)) - (set! (-> s1-1 base) (&+ (the-as pointer v1-127) 16)) - ) - (dma-bucket-insert-tag - (-> *display* frames (-> *display* on-screen) frame bucket-group) - (bucket-id debug-draw0) - s2-1 - (the-as (pointer dma-tag) a3-3) - ) - ) - ) - ) - (set! (-> gp-0 origin y) f30-2) - ) - ) - (set! sv-200 (+ sv-200 1)) - (set! (-> *game-text-line* data 0) (the-as uint 0)) - (set! sv-192 0) - (set! sv-212 (the-as symbol #f)) - ) - (when (= sv-208 #t) - (copy-charp<-charp - (&-> *game-text-line* data sv-192) - (-> *game-text-word* data) - ) - (set! sv-192 (+ sv-192 sv-184)) - (set! sv-184 0) - (set! sv-208 (the-as symbol #f)) - ) - (when (nonzero? sv-176) - (set! sv-140 (&-> sv-140 1)) (set! sv-176 (the-as int (-> sv-140 0))) + (set! sv-184 0) + (set! sv-192 0) + (set! sv-200 0) + (set! sv-208 (the-as symbol #f)) + (set! sv-212 (the-as symbol #f)) + (set! (-> *game-text-line* data 0) (the-as uint 0)) + (while (or (not (and (zero? sv-176) (zero? sv-184) (zero? sv-192))) (>= sv-156 (-> gp-0 origin y))) + (cond + ((= sv-176 32) + (set! (-> *game-text-word* data sv-184) (the-as uint sv-176)) + (set! sv-184 (+ sv-184 1)) + (set! sv-208 #t) + ) + ((zero? sv-176) + (if (zero? sv-184) + (set! sv-212 #t) + (set! sv-208 #t) + ) + ) + (else + (if (= sv-176 95) + (set! sv-176 32) + ) + (set! (-> *game-text-word* data sv-184) (the-as uint sv-176)) + (set! sv-184 (+ sv-184 1)) + ) + ) + (when (= sv-208 #t) + (set! (-> *game-text-word* data sv-184) (the-as uint 0)) + (let* ((f30-1 sv-144) + (f0-49 (* (get-string-length *game-text-word* gp-0) (-> *video-parms* relative-x-scale))) + (f1-14 (+ f30-1 f0-49)) + ) + (if (= (-> *game-text-word* data (+ sv-184 -1)) 32) + (set! f1-14 (- f1-14 sv-160)) + ) + (cond + ((< sv-152 f1-14) + (set! sv-144 (+ sv-148 f0-49)) + (set! sv-212 #t) + ) + (else + (set! sv-144 (+ sv-144 f0-49)) + ) + ) + ) + ) + (when (= sv-212 #t) + (when (>= sv-200 (the-as int (-> gp-0 start-line))) + (let ((f30-2 (+ (-> gp-0 origin y) sv-164))) + (when (>= sv-156 f30-2) + (when (= (-> *game-text-line* data (+ sv-192 -1)) 32) + (set! (-> *game-text-line* data (+ sv-192 -1)) (the-as uint 0)) + (when (and (= (-> *game-text-line* data (+ sv-192 -5)) 126) (= (-> *game-text-line* data (+ sv-192 -2)) 72)) + (set! (-> *game-text-line* data (+ sv-192 -5)) (the-as uint 0)) + 0 + ) + ) + ) + (when (and (= (-> *game-text-line* data (+ sv-192 -4)) 126) (= (-> *game-text-line* data (+ sv-192 -1)) 72)) + (set! (-> *game-text-line* data (+ sv-192 -4)) (the-as uint 0)) + 0 + ) + (if (nonzero? (-> *game-text-line* data 0)) + (set! sv-168 (+ sv-168 1)) + ) + (when (not opaque) + (let* ((s1-1 (-> *display* frames (-> *display* on-screen) frame global-buf)) + (s2-1 (-> s1-1 base)) + ) + (set-font-color-alpha (-> font-ctxt color) alpha) + (draw-string *game-text-line* s1-1 gp-0) + (set-font-color-alpha (-> font-ctxt color) 128) + (set! (-> gp-0 color) (-> *font-work* last-color)) + (let ((a3-3 (-> s1-1 base))) + (let ((v1-127 (the-as object (-> s1-1 base)))) + (set! (-> (the-as dma-packet v1-127) dma) (new 'static 'dma-tag :id (dma-tag-id next))) + (set! (-> (the-as dma-packet v1-127) vif0) (new 'static 'vif-tag)) + (set! (-> (the-as dma-packet v1-127) vif1) (new 'static 'vif-tag)) + (set! (-> s1-1 base) (&+ (the-as pointer v1-127) 16)) + ) + (dma-bucket-insert-tag + (-> *display* frames (-> *display* on-screen) frame bucket-group) + (bucket-id debug) + s2-1 + (the-as (pointer dma-tag) a3-3) + ) + ) + ) + ) + (set! (-> gp-0 origin y) f30-2) + ) + ) + (set! sv-200 (+ sv-200 1)) + (set! (-> *game-text-line* data 0) (the-as uint 0)) + (set! sv-192 0) + (set! sv-212 (the-as symbol #f)) + ) + (when (= sv-208 #t) + (copy-charp<-charp (&-> *game-text-line* data sv-192) (-> *game-text-word* data)) + (set! sv-192 (+ sv-192 sv-184)) + (set! sv-184 0) + (set! sv-208 (the-as symbol #f)) + ) + (when (nonzero? sv-176) + (set! sv-140 (&-> sv-140 1)) + (set! sv-176 (the-as int (-> sv-140 0))) + ) + ) + (set! (-> gp-0 mat vector 0 x) sv-112) + (set! (-> gp-0 mat vector 1 y) sv-116) + (set! (-> *video-parms* relative-x-scale) sv-120) + (set! (-> *video-parms* relative-y-scale) sv-124) + (set! (-> *video-parms* relative-x-scale-reciprical) sv-128) + (set! (-> *video-parms* relative-y-scale-reciprical) sv-132) + (with-pc + (if (and *debug-segment* (-> *pc-settings* display-text-box)) + (draw-debug-text-box font-ctxt))) + (if (> sv-168 0) + (* sv-164 (the float sv-168)) + 0.0 + ) ) - ) - (set! (-> gp-0 mat vector 0 x) sv-112) - (set! (-> gp-0 mat vector 1 y) sv-116) - (set! (-> *video-parms* relative-x-scale) sv-120) - (set! (-> *video-parms* relative-y-scale) sv-124) - (set! (-> *video-parms* relative-x-scale-reciprical) sv-128) - (set! (-> *video-parms* relative-y-scale-reciprical) sv-132) - (with-pc - (if (and *debug-segment* (-> *pc-settings* display-text-box)) - (draw-debug-text-box font-ctxt))) - (if (> sv-168 0) - (* sv-164 (the float sv-168)) - 0.0 - ) ) - ) ) (defun disable-level-text-file-loading () diff --git a/goal_src/game.gp b/goal_src/game.gp index 4e3ca1bb3b..dca8cbd872 100644 --- a/goal_src/game.gp +++ b/goal_src/game.gp @@ -356,24 +356,6 @@ "out/iso/GAME.CGO" ) -;;;;;;;;;;;;;;;;;;;;; -;; hub1 Group -;;;;;;;;;;;;;;;;;;;;; -;; the hub1 group is a group of files required to play the first hub (village1, jungle, beach, misty, training, firecanyon) - -(group "hub1" - "out/iso/0COMMON.TXT" - "out/iso/0SUBTIT.TXT" - "out/iso/KERNEL.CGO" - "out/iso/GAME.CGO" - "out/iso/VI1.DGO" - "out/iso/TRA.DGO" - "out/iso/FIC.DGO" - "out/iso/JUN.DGO" - "out/iso/BEA.DGO" - "out/iso/MIS.DGO" - ) - ;;;;;;;;;;;;;;;;;;;;;;;; ;; Common Level Objects ;;;;;;;;;;;;;;;;;;;;;;;; @@ -1929,8 +1911,7 @@ ) (group-list "text" - `( - "out/iso/0COMMON.TXT" + `("out/iso/0COMMON.TXT" "out/iso/0SUBTIT.TXT" ) ) diff --git a/goal_src/goal-lib.gc b/goal_src/goal-lib.gc index ea27a67973..6e24346ad0 100644 --- a/goal_src/goal-lib.gc +++ b/goal_src/goal-lib.gc @@ -913,11 +913,6 @@ `(make-group "engine") ) -(defmacro mh1 () - "Make hub1" - `(make-group "hub1") - ) - ;;;;;;;;;;;;;;;;;;; ;; enum stuff ;;;;;;;;;;;;;;;;;;; @@ -983,6 +978,14 @@ (defconstant *user* (__get-user)) +(defmacro user? (&rest users) + (cond + ((null? users) #f) + ((eq? *user* (car users)) #t) + (#t `(user? ,@(cdr users))) + ) + ) + diff --git a/goal_src/levels/beach/air-h.gc b/goal_src/levels/beach/air-h.gc index 76da8e8d01..67f8ba65db 100644 --- a/goal_src/levels/beach/air-h.gc +++ b/goal_src/levels/beach/air-h.gc @@ -5,64 +5,58 @@ ;; name in dgo: air-h ;; dgos: BEA, L1 -;; definition of type air-box +;; DECOMP BEGINS + (deftype air-box (structure) - ((vecs vector 2 :inline :offset-assert 0) - (x-pos float :offset 0) - (height-level float :offset 4) - (z-pos float :offset 8) - (cos-angle float :offset 12) - (x-length float :offset 16) - (z-length float :offset 24) - (sin-angle float :offset 28) + ((vecs vector 2 :inline :offset-assert 0) + (x-pos float :offset 0) + (height-level float :offset 4) + (z-pos float :offset 8) + (cos-angle float :offset 12) + (x-length float :offset 16) + (z-length float :offset 24) + (sin-angle float :offset 28) ) :method-count-assert 9 :size-assert #x20 :flag-assert #x900000020 ) -;; definition for function point-in-air-box-area? + (defun point-in-air-box-area? ((arg0 float) (arg1 float) (arg2 air-box)) (let ((v0-0 #f)) - (let ((f0-2 (+ (* arg0 (-> arg2 vecs 0 w)) (* arg1 (-> arg2 vecs 1 w)))) - (f1-5 (- (* arg1 (-> arg2 vecs 0 w)) (* arg0 (-> arg2 vecs 1 w)))) - ) - (if - (and - (>= f0-2 0.0) - (>= f1-5 0.0) - (< f0-2 (-> arg2 vecs 1 x)) - (< f1-5 (-> arg2 vecs 1 z)) - ) - (set! v0-0 #t) - ) - ) - v0-0 - ) - ) - -;; definition for function point-in-air-box? -(defun point-in-air-box? ((arg0 vector) (arg1 air-box)) - (when (< (-> arg1 vecs 0 y) (-> arg0 y)) - (let ((f1-2 (- (-> arg0 x) (the-as float (-> arg1 vecs 0 x)))) - (f2-1 (- (-> arg0 z) (-> arg1 vecs 0 z))) - (v1-0 arg1) - (v0-0 #f) - ) - (let ((f0-5 (+ (* f1-2 (-> v1-0 vecs 0 w)) (* f2-1 (-> v1-0 vecs 1 w)))) - (f1-4 (- (* f2-1 (-> v1-0 vecs 0 w)) (* f1-2 (-> v1-0 vecs 1 w)))) + (let ((f0-2 (+ (* arg0 (-> arg2 cos-angle)) (* arg1 (-> arg2 sin-angle)))) + (f1-5 (- (* arg1 (-> arg2 cos-angle)) (* arg0 (-> arg2 sin-angle)))) + ) + (if (and (>= f0-2 0.0) (>= f1-5 0.0) (< f0-2 (-> arg2 x-length)) (< f1-5 (-> arg2 z-length))) + (set! v0-0 #t) ) - (if - (and - (>= f0-5 0.0) - (>= f1-4 0.0) - (< f0-5 (-> v1-0 vecs 1 x)) - (< f1-4 (-> v1-0 vecs 1 z)) - ) - (set! v0-0 #t) ) - ) v0-0 ) - ) ) + +(defun point-in-air-box? ((arg0 vector) (arg1 air-box)) + (when (< (-> arg1 height-level) (-> arg0 y)) + (let ((f1-2 (- (-> arg0 x) (the-as float (-> arg1 x-pos)))) + (f2-1 (- (-> arg0 z) (-> arg1 z-pos))) + (v1-0 arg1) + (v0-0 #f) + ) + (let ((f0-5 (+ (* f1-2 (-> v1-0 cos-angle)) (* f2-1 (-> v1-0 sin-angle)))) + (f1-4 (- (* f2-1 (-> v1-0 cos-angle)) (* f1-2 (-> v1-0 sin-angle)))) + ) + (if (and (>= f0-5 0.0) (>= f1-4 0.0) (< f0-5 (-> v1-0 x-length)) (< f1-4 (-> v1-0 z-length))) + (set! v0-0 #t) + ) + ) + v0-0 + ) + ) + ) + +0 + + + + diff --git a/goal_src/levels/common/ropebridge.gc b/goal_src/levels/common/ropebridge.gc index f27428899c..1870a0f924 100644 --- a/goal_src/levels/common/ropebridge.gc +++ b/goal_src/levels/common/ropebridge.gc @@ -698,7 +698,7 @@ ) (countdown (s3-0 (-> obj tuning num-spring-points)) (vector-matrix*! s4-0 (-> s5-0 local-pos) gp-0) - (add-debug-sphere #t (bucket-id debug-draw0) s4-0 2048.0 (new 'static 'rgba :r #xff :g #xff :b #xff :a #x40)) + (add-debug-sphere #t (bucket-id debug) s4-0 2048.0 (new 'static 'rgba :r #xff :g #xff :b #xff :a #x40)) (&+! s5-0 48) ) ) diff --git a/goal_src/levels/jungle/fisher.gc b/goal_src/levels/jungle/fisher.gc index 3c161dcada..9e7d3ebff2 100644 --- a/goal_src/levels/jungle/fisher.gc +++ b/goal_src/levels/jungle/fisher.gc @@ -1453,7 +1453,7 @@ ) (dma-bucket-insert-tag (-> *display* frames (-> *display* on-screen) frame bucket-group) - (bucket-id debug-draw0) + (bucket-id debug) gp-0 (the-as (pointer dma-tag) a3-1) ) diff --git a/goal_src/levels/misty/mistycannon.gc b/goal_src/levels/misty/mistycannon.gc index 87ed8fe709..a3c9a7e2f5 100644 --- a/goal_src/levels/misty/mistycannon.gc +++ b/goal_src/levels/misty/mistycannon.gc @@ -1785,7 +1785,7 @@ (if (nonzero? gp-0) (debug-percent-bar #t - (bucket-id debug-draw0) + (bucket-id debug) 192 160 (* 0.0033333334 (the float gp-0)) diff --git a/goal_src/levels/ogre/ogreboss.gc b/goal_src/levels/ogre/ogreboss.gc index e7af4aaec2..2f84bd99c0 100644 --- a/goal_src/levels/ogre/ogreboss.gc +++ b/goal_src/levels/ogre/ogreboss.gc @@ -345,7 +345,7 @@ ) (add-debug-vector #t - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) s4-1 s3-0 (meters 0.00024414062) diff --git a/goal_src/levels/racer_common/target-racer.gc b/goal_src/levels/racer_common/target-racer.gc index 1f2bd21b08..47e7993148 100644 --- a/goal_src/levels/racer_common/target-racer.gc +++ b/goal_src/levels/racer_common/target-racer.gc @@ -199,7 +199,7 @@ (let ((f30-4 (* (deg-diff f30-3 0.0) (-> self racer slide-grip-mult)))) (add-debug-vector *display-target-marks* - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (-> self control trans) (-> self control transv) (meters 0.000061035156) @@ -226,7 +226,7 @@ (vector-float*! gp-1 gp-1 0.5) (add-debug-vector *display-target-marks* - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (-> self control trans) gp-1 (meters 0.00024414062) @@ -235,7 +235,7 @@ (vector+! gp-1 gp-1 (-> self control trans)) (add-debug-text-sphere *display-target-marks* - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) gp-1 819.2 "ltransv" @@ -246,7 +246,7 @@ (vector+! gp-1 gp-1 (-> self control trans)) (add-debug-text-sphere *display-target-marks* - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) gp-1 819.2 "nose" @@ -365,7 +365,7 @@ (+! (-> a2-1 y) (-> self racer cushion-bob)) (add-debug-sphere *display-target-marks* - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) a2-1 819.2 (new 'static 'rgba :r #xff :b #xff :a #x80) diff --git a/goal_src/levels/sunken/target-tube.gc b/goal_src/levels/sunken/target-tube.gc index 2a62e1054f..6b2052b2c4 100644 --- a/goal_src/levels/sunken/target-tube.gc +++ b/goal_src/levels/sunken/target-tube.gc @@ -184,7 +184,7 @@ (vector-flatten! s4-1 s4-1 (-> self control local-normal)) (add-debug-vector *display-target-marks* - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (-> self control trans) s4-1 (meters 0.00024414062) @@ -252,7 +252,7 @@ (vector-flatten! s3-1 s3-1 (-> self control local-normal)) (add-debug-vector *display-target-marks* - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (-> self control trans) s3-1 (meters 2.0) @@ -265,7 +265,7 @@ (vector-flatten! s4-2 s4-2 (-> self control local-normal)) (add-debug-vector *display-target-marks* - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (-> self control trans) s4-2 (meters 2.0) @@ -302,7 +302,7 @@ (vector-float*! gp-1 gp-1 0.5) (add-debug-vector *display-target-marks* - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (-> self control trans) gp-1 (meters 0.00024414062) @@ -311,7 +311,7 @@ (vector+! gp-1 gp-1 (-> self control trans)) (add-debug-text-sphere *display-target-marks* - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) gp-1 819.2 "ltransv" @@ -322,7 +322,7 @@ (vector+! gp-1 gp-1 (-> self control trans)) (add-debug-text-sphere *display-target-marks* - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) gp-1 819.2 "nose" diff --git a/goal_src/levels/swamp/swamp-rat-nest.gc b/goal_src/levels/swamp/swamp-rat-nest.gc index 1e9afbc147..aceeb54a89 100644 --- a/goal_src/levels/swamp/swamp-rat-nest.gc +++ b/goal_src/levels/swamp/swamp-rat-nest.gc @@ -687,7 +687,7 @@ (let* ((a0-0 (-> self spawn-joint-array gp-0)) (a2-0 (-> self node-list data a0-0 bone transform)) ) - (add-debug-matrix #t (bucket-id debug-draw1) a2-0) + (add-debug-matrix #t (bucket-id debug-no-zbuf) a2-0) ) ) #f diff --git a/goal_src/levels/village1/fishermans-boat.gc b/goal_src/levels/village1/fishermans-boat.gc index 76414a8cc2..a93be42b86 100644 --- a/goal_src/levels/village1/fishermans-boat.gc +++ b/goal_src/levels/village1/fishermans-boat.gc @@ -121,7 +121,7 @@ (set! (-> s3-0 w) 1.0) (add-debug-line #t - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) s4-0 s3-0 (new 'static 'rgba :r #xff :g #xff :a #x80) @@ -130,7 +130,7 @@ ) (add-debug-vector #t - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) s4-0 s5-0 (meters 0.00024414062) @@ -447,14 +447,14 @@ (debug-draw (-> obj path)) (add-debug-sphere #t - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (-> obj dest-circle) (-> obj dest-circle w) (new 'static 'rgba :g #xff :a #x80) ) (add-debug-x #t - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (-> obj target-point) (new 'static 'rgba :r #xff :g #xff :b #xff :a #x80) ) @@ -834,14 +834,14 @@ (dummy-16 (-> self controller)) (add-debug-sphere #t - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (the-as vector (-> self boat-path)) 614400.0 (new 'static 'rgba :b #xff :a #x80) ) (add-debug-sphere #t - (bucket-id debug-draw1) + (bucket-id debug-no-zbuf) (the-as vector (&-> self stack 848)) 409600.0 (new 'static 'rgba :b #xff :a #x80) diff --git a/goal_src/pc/pckernel-h.gc b/goal_src/pc/pckernel-h.gc index fa5dd93bc3..00e1786f35 100644 --- a/goal_src/pc/pckernel-h.gc +++ b/goal_src/pc/pckernel-h.gc @@ -23,9 +23,6 @@ |# -(#when PC_PORT - - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;; constants ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -580,7 +577,4 @@ )) -) - - diff --git a/goal_src/pc/pckernel.gc b/goal_src/pc/pckernel.gc index 16b6fa19d1..c29a78c060 100644 --- a/goal_src/pc/pckernel.gc +++ b/goal_src/pc/pckernel.gc @@ -22,9 +22,6 @@ |# -;; is this necessary? -(#when PC_PORT - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;; updates @@ -796,15 +793,13 @@ (defun-debug draw-build-revision () (with-dma-buffer-add-bucket ((buf (-> (current-frame) debug-buf)) - (bucket-id debug-draw1)) + (bucket-id debug-no-zbuf)) (draw-string-xy *pc-settings-built-sha* buf 0 (* 10 (-> *video-parms* relative-y-scale)) (font-color flat-yellow) - (font-flags kerning)))) - -) ;; when PC_PORT + (font-flags shadow kerning)))) diff --git a/goal_src/pc/progress-pc.gc b/goal_src/pc/progress-pc.gc index 0da6d1c88e..1c912400fc 100644 --- a/goal_src/pc/progress-pc.gc +++ b/goal_src/pc/progress-pc.gc @@ -374,7 +374,7 @@ (set! (-> *progress-carousell* x-offset) 0) ) (set! (-> font origin y) (the float (+ y-off 3))) - ;(set-color! font (font-color lighter-lighter-blue)) + (set-color! font (font-color lighter-lighter-blue)) 0 (let ((next-lang (mod (+ old-lang 1) max-lang)) (prev-lang (mod (+ max-lang -1 old-lang) max-lang)) @@ -387,6 +387,7 @@ (let ((a2-22 (- 200 (+ (-> *progress-carousell* x-offset) 100)))) (print-string-in-carousell (-> options prev-lang) font a2-22 #f) ) + (set-color! font (font-color lighter-lighter-blue)) (let ((a2-23 (+ (-> *progress-carousell* x-offset) 100))) (cond ((< a2-23 150) @@ -413,6 +414,7 @@ ) ) ) + (set-color! font (font-color lighter-lighter-blue)) (let ((a2-27 (- 200 (+ (-> *progress-carousell* x-offset) 100)))) (print-string-in-carousell (-> options next-lang) font a2-27 #t) ) @@ -1218,7 +1220,7 @@ (set! (-> obj language-x-offset) 0) ) (set! (-> font origin y) (the float (+ y-off 3))) - ;(set-color! font (font-color lighter-lighter-blue)) + (set-color! font (font-color lighter-lighter-blue)) 0 (let ((next-lang (mod (+ old-lang 1) max-lang)) (prev-lang (mod (+ max-lang -1 old-lang) max-lang)) @@ -1231,6 +1233,7 @@ (let ((a2-22 (- 200 (+ (-> obj language-x-offset) 100)))) (print-language-name prev-lang font a2-22 #f) ) + (set-color! font (font-color lighter-lighter-blue)) (let ((a2-23 (+ (-> obj language-x-offset) 100))) (cond ((< a2-23 150) @@ -1257,6 +1260,7 @@ ) ) ) + (set-color! font (font-color lighter-lighter-blue)) (let ((a2-27 (- 200 (+ (-> obj language-x-offset) 100)))) (print-language-name (the int next-lang) font a2-27 #t) ) diff --git a/goal_src/pc/subtitle.gc b/goal_src/pc/subtitle.gc index aaad9e0997..9e25e81533 100644 --- a/goal_src/pc/subtitle.gc +++ b/goal_src/pc/subtitle.gc @@ -7,24 +7,21 @@ It automatically detects the currently playing cutscene and plays the subtitles for it on channel 0. Channel 1 and 2 are reserved for ambient sounds, which cannot be auto-detected, so the ambient-control needs to notify the subtitle process manually (TODO: verify this!) - + Similarly to the generic text file, only one subtitles text file is loaded at once, stored in a specific heap. - + In Jak 2, the subtitles are stored directly within the .STR files. We don't have that luxury here, unfortunately. |# -(#when PC_PORT - - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;; constants ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -(defconstant PC_SUBTITLE_FILE_SIZE (* 64 1024)) +(defconstant PC_SUBTITLE_FILE_SIZE (* 64 1024)) ;; 64K heap for subtitles. adjust later if necessary. (defconstant PC_SUBTITLE_FILE_NAME "subtit") (defglobalconstant PC_SUBTITLE_DEBUG #f) @@ -43,7 +40,13 @@ (defenum pc-subtitle-channel :type int16 (invalid -1) (movie 0) (ambient 1) (hint 2)) +(defconstant SUBTITLE_CHANNEL_COUNT 3) +(defenum pc-subtitle-flags + :bitfield #t + :type uint32 + (offscreen) ;; speaker is offscreen. + ) ;; information about a single line of subtitles (deftype subtitle-keyframe (structure) @@ -51,7 +54,7 @@ (frame int32) ;; the frame to play the subtitle line on (string string) ;; the text for the subtitle line (speaker string) ;; name of the speaker. leave blank for no speaker. - (offscreen symbol) ;; speaker is offscreen. + (flags pc-subtitle-flags) ;; flags ) :pack-me ) @@ -65,17 +68,17 @@ (length int16) ;; data (keyframes (inline-array subtitle-keyframe)) - + ;; now we store a way to identify and lookup the subtitles. - + ;; the game-text-id if this is for a hint (id game-text-id :offset 8) ;; the name of the spool-anim (name string :offset 8) ;; the 8-character name for an ambient or hint (hash uint64 :offset 8) - - + + ) :size-assert #x10 ;; compact! @@ -88,31 +91,60 @@ (dummy int32) (data subtitle-text :inline :dynamic) ) - + (:methods (get-scene-by-name (_type_ pc-subtitle-channel string) subtitle-text) ) ) +(defmacro subtitle-flags? (sub &rest flags) + `(logtest? (-> ,sub flags) (pc-subtitle-flags ,@flags))) + + + ;;;---------------------------------- ;; process type ;;;---------------------------------- +;; graphic parameters for subtitles +(deftype subtitle-bank (structure) + ( + (scale float) + (width float) + (height float) + (lines float) + ) + + ) + +(define *SUBTITLE-bank* + (new 'static 'subtitle-bank + :scale 0.49 + :width 0.85 + :height 0.8 + :lines 3.0 + )) + ;; the subtitle process! it lives on the PC actor pool and awaits for incoming subtitle messages, or a movie (deftype subtitle (process) ( - (font font-context) + (font font-context) ;; the font to use for the subtitles. + (bank-backup subtitle-bank :inline) ;; debug backup. + ( spool-name string) (old-spool-name string) (cur-channel pc-subtitle-channel) + + (want-subtitle subtitle-keyframe) ;; the subtitle we want to display ) - :heap-base #x10 - + (:methods (subtitle-format (_type_ subtitle-keyframe) string) ) + (:states + subtitle-debug) ) @@ -141,14 +173,14 @@ (defmethod get-scene-by-name subtitle-text-info ((obj subtitle-text-info) (kind pc-subtitle-channel) (name string)) "get a subtitle scene info with the corresponding name. #f = none found" - + (dotimes (i (-> obj length)) ;; name and kind matches, return that! (when (and (= kind (-> obj data i kind)) (string= (-> obj data i name) name)) (return (-> obj data i)) ) ) - + (the subtitle-text #f)) (defun load-subtitle-text-info ((txt-name string) (curr-text symbol) (heap kheap)) @@ -157,57 +189,77 @@ curr-text = a symbol to a subtitle-text-info to link the file to heap = the text heap to load the file onto" - (local-vars (v0-2 int) (heap-sym-heap subtitle-text-info) (lang pc-subtitle-lang) (load-status int) (heap-free int)) - (set! heap-sym-heap (the-as subtitle-text-info (-> curr-text value))) - (set! lang (-> *pc-settings* subtitle-language)) - (set! load-status 0) - (set! heap-free (&- (-> heap top) (the-as uint (-> heap base)))) - (when (or (= heap-sym-heap #f) - (!= (-> heap-sym-heap lang) lang) - ) - (kheap-reset heap) + (let ((heap-sym-heap (the-as subtitle-text-info (-> curr-text value))) + (lang (-> *pc-settings* subtitle-language)) + (load-status 0) + (heap-free (&- (-> heap top) (the-as uint (-> heap base))))) - (while (not (str-load (string-format "~D~S.TXT" lang txt-name) -1 (logand -64 (&+ (-> heap current) 63)) (&- (-> heap top) (-> heap current)))) - (return 0) - ) + ;; current text has nothing loaded, or language doesn't match. + (when (or (= heap-sym-heap #f) + (!= (-> heap-sym-heap lang) lang) + ) + ;; so reload. - (label retry) - (let ((v1-20 (str-load-status (the-as (pointer int32) (& load-status))))) - (when (= v1-20 'error) - (format 0 "Error loading subtitle~%") - (return 0) - (goto loaded) + ;; reset the text heap. + (kheap-reset heap) + + ;; try to load load... + (while (not (str-load (string-format "~D~S.TXT" lang txt-name) -1 (logand -64 (&+ (-> heap current) 63)) (&- (-> heap top) (-> heap current)))) + (return 0) + ) + ;; load succeeded. check status. + + (label retry) + (let ((status (str-load-status (the-as (pointer int32) (& load-status))))) + (when (= status 'error) + (format 0 "Error loading subtitle~%") + (return 0) + (goto loaded) + ) + (cond + ((>= load-status (+ heap-free -300)) + (format 0 "Game subtitle heap overrun!~%") + (return 0) + ) + ((= status 'busy) + ;; still loading. + (goto retry) + ) + ) ) - (cond - ((>= load-status (+ heap-free -300)) - (format 0 "Game subtitle heap overrun!~%") - (return 0) - ) - ((= v1-20 'busy) - (goto retry) - ) - ) - ) - (label loaded) - (let ((s2-1 (logand -64 (&+ (-> heap current) 63)))) - (flush-cache 0) - (set! (-> curr-text value) (link s2-1 (-> (string-format "~D~S.TXT" lang txt-name) data) load-status heap 0)) - ) - (if (<= (the-as int (-> curr-text value)) 0) - (set! (-> curr-text value) (the-as object #f)) - ) - ) + (label loaded) + + ;; link the text file! + (let ((new-mem (logand -64 (&+ (-> heap current) 63)))) + (flush-cache 0) + (set! (-> curr-text value) (link new-mem (-> (string-format "~D~S.TXT" lang txt-name) data) load-status heap 0)) + ) + ;; if linking failed just make the text invalid. + (if (<= (the-as int (-> curr-text value)) 0) + (set! (-> curr-text value) (the-as object #f)) + ) + )) 0) (defun load-level-subtitle-files ((idx int)) - "If needed, load subtitles" + "Load the subtitle files needed for level idx. + This function made more sense back when text files were split up, but in the end they put everything + in a single text group and file." - ;; just load common. These flags are not yet understood. + ;; just load common. (if (or *level-text-file-load-flag* (>= idx 0)) (load-subtitle-text-info PC_SUBTITLE_FILE_NAME '*subtitle-text* *subtitle-text-heap*) ) - (none) - ) + + (none)) + + +(defmacro reload-subtitles () + "rebuild and reload subtitles." + `(begin + (asm-text-file subtitle :files ("game/assets/game_subtitle.gp")) + (+! (-> *subtitle-text* lang) (the-as pc-subtitle-lang 1)))) + @@ -216,22 +268,237 @@ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(defun-recursive print-game-subtitle float ((str string) (font-ctxt font-context) (opaque symbol) (alpha int) (line-height int)) + "Print text. Not worth commenting until we get stack variables in lets, I think" + (local-vars + (sv-112 float) + (sv-116 float) + (sv-120 float) + (sv-124 float) + (sv-128 float) + (sv-132 float) + (sv-136 float) + (sv-140 (pointer uint8)) + (sv-144 float) + (sv-148 float) + (sv-152 float) + (sv-156 float) + (sv-160 float) + (sv-164 float) + (sv-168 int) + (sv-176 int) + (sv-184 int) + (sv-192 int) + (sv-200 int) + (sv-208 symbol) + (sv-212 symbol) + ) + (let ((gp-0 (new + 'stack + 'font-context + *font-default-matrix* + (the int (-> font-ctxt origin x)) + (the int (-> font-ctxt origin y)) + 0.0 + (font-color default) + (font-flags shadow kerning) + ) + ) + ) + (when (< 0.1 (-> font-ctxt scale)) + (set! sv-112 (-> font-ctxt mat vector 0 x)) + (set! sv-116 (-> font-ctxt mat vector 1 y)) + (set! sv-120 (-> *video-parms* relative-x-scale)) + (set! sv-124 (-> *video-parms* relative-y-scale)) + (set! sv-128 (-> *video-parms* relative-x-scale-reciprical)) + (set! sv-132 (-> *video-parms* relative-y-scale-reciprical)) + (set! sv-136 (-> font-ctxt scale)) + (set! (-> gp-0 origin z) (-> font-ctxt origin z)) + (set! (-> gp-0 flags) (-> font-ctxt flags)) + (set! (-> gp-0 color) (-> font-ctxt color)) + (set! (-> gp-0 scale) sv-136) + (when (logtest? (-> gp-0 flags) (font-flags left)) + (logclear! (-> gp-0 flags) (font-flags left)) + (let ((f30-0 (-> gp-0 width)) + (f28-0 (-> gp-0 height)) + ) + (set! (-> gp-0 width) (-> font-ctxt width)) + (set! (-> gp-0 height) (-> font-ctxt height)) + (+! (-> gp-0 origin y) + (the float (the int (* 0.5 (- (-> gp-0 height) (print-game-subtitle str gp-0 #t 128 22))))) + ) + (set! (-> gp-0 width) f30-0) + (set! (-> gp-0 height) f28-0) + ) + ) + (set! (-> gp-0 mat vector 0 x) (* (-> gp-0 mat vector 0 x) sv-136)) + (set! (-> gp-0 mat vector 1 y) (* (-> gp-0 mat vector 1 y) sv-136)) + (set! (-> *video-parms* relative-x-scale) (* (-> *video-parms* relative-x-scale) sv-136)) + (set! (-> *video-parms* relative-y-scale) (* (-> *video-parms* relative-y-scale) sv-136)) + (set! (-> *video-parms* relative-x-scale-reciprical) (/ 1.0 (-> *video-parms* relative-x-scale))) + (set! (-> *video-parms* relative-y-scale-reciprical) (/ 1.0 sv-136)) + (set! sv-140 (-> str data)) + (set! sv-144 (-> gp-0 origin x)) + (set! sv-148 (-> gp-0 origin x)) + (set! sv-152 (+ (-> gp-0 origin x) (-> font-ctxt width))) + (set! sv-156 (+ (-> gp-0 origin y) (-> font-ctxt height))) + (set! sv-160 (* (get-string-length " " gp-0) (-> *video-parms* relative-x-scale))) + (set! sv-164 (* (if (logtest? (-> gp-0 flags) (font-flags large)) + (the float line-height) + 14.0 + ) + sv-136 + ) + ) + (set! sv-168 0) + (if (logtest? (-> gp-0 flags) (font-flags middle)) + (+! (-> gp-0 origin x) (* 0.5 (-> font-ctxt width))) + ) + (set! sv-176 (the-as int (-> sv-140 0))) + (set! sv-184 0) + (set! sv-192 0) + (set! sv-200 0) + (set! sv-208 (the-as symbol #f)) + (set! sv-212 (the-as symbol #f)) + (set! (-> *game-text-line* data 0) (the-as uint 0)) + (while (or (not (and (zero? sv-176) (zero? sv-184) (zero? sv-192))) (>= sv-156 (-> gp-0 origin y))) + (cond + ((= sv-176 32) + (set! (-> *game-text-word* data sv-184) (the-as uint sv-176)) + (set! sv-184 (+ sv-184 1)) + (set! sv-208 #t) + ) + ((zero? sv-176) + (if (zero? sv-184) + (set! sv-212 #t) + (set! sv-208 #t) + ) + ) + (else + (if (= sv-176 95) + (set! sv-176 32) + ) + (set! (-> *game-text-word* data sv-184) (the-as uint sv-176)) + (set! sv-184 (+ sv-184 1)) + ) + ) + (when (= sv-208 #t) + (set! (-> *game-text-word* data sv-184) (the-as uint 0)) + (let* ((f30-1 sv-144) + (f0-49 (* (get-string-length *game-text-word* gp-0) (-> *video-parms* relative-x-scale))) + (f1-14 (+ f30-1 f0-49)) + ) + (if (= (-> *game-text-word* data (+ sv-184 -1)) 32) + (set! f1-14 (- f1-14 sv-160)) + ) + (cond + ((< sv-152 f1-14) + (set! sv-144 (+ sv-148 f0-49)) + (set! sv-212 #t) + ) + (else + (set! sv-144 (+ sv-144 f0-49)) + ) + ) + ) + ) + (when (= sv-212 #t) + (when (>= sv-200 (the-as int (-> gp-0 start-line))) + (let ((f30-2 (+ (-> gp-0 origin y) sv-164))) + (when (>= sv-156 f30-2) + (when (= (-> *game-text-line* data (+ sv-192 -1)) 32) + (set! (-> *game-text-line* data (+ sv-192 -1)) (the-as uint 0)) + (when (and (= (-> *game-text-line* data (+ sv-192 -5)) 126) (= (-> *game-text-line* data (+ sv-192 -2)) 72)) + (set! (-> *game-text-line* data (+ sv-192 -5)) (the-as uint 0)) + 0 + ) + ) + ) + (when (and (= (-> *game-text-line* data (+ sv-192 -4)) 126) (= (-> *game-text-line* data (+ sv-192 -1)) 72)) + (set! (-> *game-text-line* data (+ sv-192 -4)) (the-as uint 0)) + 0 + ) + (if (nonzero? (-> *game-text-line* data 0)) + (set! sv-168 (+ sv-168 1)) + ) + (when (not opaque) + (let* ((s1-1 (-> *display* frames (-> *display* on-screen) frame global-buf)) + (s2-1 (-> s1-1 base)) + ) + (set-font-color-alpha (-> font-ctxt color) alpha) + (draw-string *game-text-line* s1-1 gp-0) + (set-font-color-alpha (-> font-ctxt color) 128) + (set! (-> gp-0 color) (-> *font-work* last-color)) + (let ((a3-3 (-> s1-1 base))) + (let ((v1-127 (the-as object (-> s1-1 base)))) + (set! (-> (the-as dma-packet v1-127) dma) (new 'static 'dma-tag :id (dma-tag-id next))) + (set! (-> (the-as dma-packet v1-127) vif0) (new 'static 'vif-tag)) + (set! (-> (the-as dma-packet v1-127) vif1) (new 'static 'vif-tag)) + (set! (-> s1-1 base) (&+ (the-as pointer v1-127) 16)) + ) + (dma-bucket-insert-tag + (-> *display* frames (-> *display* on-screen) frame bucket-group) + (bucket-id subtitle) + s2-1 + (the-as (pointer dma-tag) a3-3) + ) + ) + ) + ) + (set! (-> gp-0 origin y) f30-2) + ) + ) + (set! sv-200 (+ sv-200 1)) + (set! (-> *game-text-line* data 0) (the-as uint 0)) + (set! sv-192 0) + (set! sv-212 (the-as symbol #f)) + ) + (when (= sv-208 #t) + (copy-charp<-charp (&-> *game-text-line* data sv-192) (-> *game-text-word* data)) + (set! sv-192 (+ sv-192 sv-184)) + (set! sv-184 0) + (set! sv-208 (the-as symbol #f)) + ) + (when (nonzero? sv-176) + (set! sv-140 (&-> sv-140 1)) + (set! sv-176 (the-as int (-> sv-140 0))) + ) + ) + (set! (-> gp-0 mat vector 0 x) sv-112) + (set! (-> gp-0 mat vector 1 y) sv-116) + (set! (-> *video-parms* relative-x-scale) sv-120) + (set! (-> *video-parms* relative-y-scale) sv-124) + (set! (-> *video-parms* relative-x-scale-reciprical) sv-128) + (set! (-> *video-parms* relative-y-scale-reciprical) sv-132) + (if (> sv-168 0) + (* sv-164 (the float sv-168)) + 0.0 + ) + ) + ) + ) + + + (defmethod subtitle-format subtitle ((obj subtitle) (keyframe subtitle-keyframe)) "check settings and format subtitle accordingly." - + (cond ((= 0 (length (-> keyframe speaker))) + ;; there's no speaker so who cares. (string-format "~S" (-> keyframe string)) ) ((or (= #t (-> *pc-settings* subtitle-speaker?)) - (and (= 'auto (-> *pc-settings* subtitle-speaker?)) (-> keyframe offscreen))) + (and (= 'auto (-> *pc-settings* subtitle-speaker?)) (subtitle-flags? keyframe offscreen))) + ;; there is a speaker and we do want it. (string-format "~3L~S:~0L ~S" (-> keyframe speaker) (-> keyframe string)) ) (else (string-format "~S" (-> keyframe string)) ) ) - + ) (defun subtitle? () @@ -243,41 +510,47 @@ (defstate subtitle-process (subtitle) - + :event (behavior ((from process) (argc int) (msg symbol) (block event-message-block)) (case msg (('subtitle-start) 0 ) + (('debug) + (go subtitle-debug) + ) ) ) + :code (behavior () (loop (suspend)) ) + :trans (behavior () (load-level-subtitle-files 0) ;; reset params + (set! (-> self want-subtitle) (the subtitle-keyframe #f)) (set! (-> self spool-name) #f) (set! (-> self cur-channel) (pc-subtitle-channel invalid)) - (none)) - :post (behavior () + ;; check what kind of subtitles are running (when (and (movie?) (-> *art-control* spool-lock) (-> *art-control* active-stream)) ;; there's a cutscene happening and an active spool with a valid owner. (set! (-> self spool-name) (-> *art-control* active-stream)) (set! (-> self cur-channel) (pc-subtitle-channel movie)) (with-proc ((handle->process (-> *art-control* spool-lock))) - (format *stdcon* "current spool frame is ~D~%" (the int (ja-aframe-num 0))) + (format *stdcon* "movie spool detected~%current spool frame is ~D~%" (the int (ja-aframe-num 0))) ) ) - + ;; do subtitles (case (-> self cur-channel) (((pc-subtitle-channel movie)) ;; cutscenes, check if user toggled subtitles (if (and (= 'game *master-mode*) (cpad-pressed? 0 square)) (not! (-> *pc-settings* subtitles?))) + (when (subtitle?) ;; subtitles on! get a subtitle info that matches our current cutscene, and find at what point we're in. (let ((scene (get-scene-by-name *subtitle-text* (-> self cur-channel) (-> self spool-name)))) @@ -294,28 +567,121 @@ (when (>= pos (-> scene keyframes i frame)) (set! keyframe (-> scene keyframes i))) ) - (when keyframe - ;; we got the closest keyframe! finally just render the subtitles! - (print-game-text (subtitle-format self keyframe) (-> self font) #f 128 22) - (#when PC_SUBTITLE_DEBUG - (draw-debug-text-box (-> self font)) - ) - ) + ;; and save it! + (set! (-> self want-subtitle) keyframe) ) ) ) - + ;; keep this for later (set! (-> self old-spool-name) (-> self spool-name)) ) ) ) + + (when *debug-segment* + (when (and (cpad-hold? 0 l3) (cpad-pressed? 0 start)) + (cpad-clear! 0 start) + (send-event self 'debug) + ) + + ) + + (none)) + + :post (behavior () + + ;; set font settings. + (set! (-> self font origin x) (* (- 1.0 (-> *SUBTITLE-bank* width)) 256)) + (set! (-> self font origin y) (* (-> *SUBTITLE-bank* height) 224)) + (set-width! (-> self font) (the int (* (-> *SUBTITLE-bank* width) 512))) + (set-height! (-> self font) (the int (* (-> *SUBTITLE-bank* lines) 11))) + (set-scale! (-> self font) (-> *SUBTITLE-bank* scale)) + + (when (-> self want-subtitle) + ;; we got a valid subtitle! render it. + (print-game-subtitle (subtitle-format self (-> self want-subtitle)) (-> self font) #f 128 22) + (#when PC_SUBTITLE_DEBUG + (draw-debug-text-box (-> self font)) + ) + ) 0) - + ) +(defstate subtitle-debug (subtitle) + + + :event (behavior ((from process) (argc int) (msg symbol) (block event-message-block)) + (case msg + (('debug) + (go subtitle-process) + ) + ) + ) + + :enter (behavior () + (mem-copy! (the pointer (-> self bank-backup)) (the pointer *SUBTITLE-bank*) (size-of subtitle-bank)) + (set-master-mode 'pause) + ) + :exit (behavior () + (toggle-pause) (none)) ;; todo fuck + + :trans (behavior () + + (with-dma-buffer-add-bucket ((buf (-> (current-frame) debug-buf)) + (bucket-id debug)) + + (draw-string-xy "~3LSUBTITLE DEBUG!~0L" buf 16 40 (font-color default) (font-flags shadow kerning)) + (draw-string-xy "Square: reset" buf 16 48 (font-color default) (font-flags shadow kerning)) + (draw-string-xy "Up/down: Move vertically" buf 16 56 (font-color default) (font-flags shadow kerning)) + (draw-string-xy "Triangle+R1/L1: width" buf 16 64 (font-color default) (font-flags shadow kerning)) + (draw-string-xy "Triangle+R2/L2: height" buf 16 72 (font-color default) (font-flags shadow kerning)) + (draw-string-xy "Circle+R1/L1: scale" buf 16 80 (font-color default) (font-flags shadow kerning)) + (draw-string-xy "L3+Start: exit" buf 16 88 (font-color default) (font-flags shadow kerning)) + + ) + + (when (= 'pause *master-mode*) + (when (cpad-pressed? 0 square) + (mem-copy! (the pointer *SUBTITLE-bank*) (the pointer (-> self bank-backup)) (size-of subtitle-bank)) + ) + + (when (cpad-hold? 0 up) (+! (-> *SUBTITLE-bank* height) -0.01)) + (when (cpad-hold? 0 down) (+! (-> *SUBTITLE-bank* height) 0.01)) + + (cond + ((cpad-hold? 0 triangle) + (when (cpad-hold? 0 r1) (-! (-> *SUBTITLE-bank* width) 0.01)) + (when (cpad-hold? 0 l1) (+! (-> *SUBTITLE-bank* width) 0.01)) + (when (cpad-hold? 0 r2) (-! (-> *SUBTITLE-bank* lines) 0.05)) + (when (cpad-hold? 0 l2) (+! (-> *SUBTITLE-bank* lines) 0.05)) + ) + ((cpad-hold? 0 circle) + (when (cpad-hold? 0 r1) (+! (-> *SUBTITLE-bank* scale) 0.01)) + (when (cpad-hold? 0 l1) (-! (-> *SUBTITLE-bank* scale) 0.01)) + ) + ) + ) + + (when (and (cpad-hold? 0 l3) (cpad-pressed? 0 start)) + (cpad-clear! 0 start) + (send-event self 'debug) + ) + + (none)) + + :code (-> subtitle-process code) + :post (-> subtitle-process post) + + ) + + + + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;; helper functions ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -333,11 +699,19 @@ ) +(defbehavior subtitle-init-by-other subtitle () + "external initializer for subtitle process" + + (set! (-> self font) (new 'process 'font-context *font-default-matrix* + 0 0 0.0 (font-color default) (font-flags shadow kerning middle large))) + (go subtitle-process) + ) + (defun subtitle-stop () "kill the subtitle process" - (kill-by-type subtitle *active-pool*) + (kill-by-type subtitle *display-pool*) (set! *subtitle* (the (pointer subtitle) #f))) (defun subtitle-start () @@ -346,20 +720,10 @@ (when *subtitle* (subtitle-stop) ) - - (set! *subtitle* (process-new subtitle - (lambda :behavior subtitle () - (set! (-> self font) (new 'process 'font-context *font-default-matrix* - (the int (* 0.12 256)) (+ 112 (* 11 5)) 0.0 - (font-color default) - (font-flags shadow kerning middle large))) - (set-scale! (-> self font) 0.5) - (set-width! (-> self font) (the int (* 0.88 256 2))) - (set-height! (-> self font) (* 11 3)) - (go subtitle-process) - ) - :from *pc-dead-pool* :to *active-pool* - :stack-size (* 1 1024))) + + (set! *subtitle* (process-new subtitle subtitle-init-by-other + :from *pc-dead-pool* :to *display-pool* + :stack-size (* 1 1024))) ) @@ -367,7 +731,4 @@ (subtitle-start) -) - - diff --git a/goalc/CMakeLists.txt b/goalc/CMakeLists.txt index 72dfd374f4..6d6e06f861 100644 --- a/goalc/CMakeLists.txt +++ b/goalc/CMakeLists.txt @@ -27,11 +27,10 @@ add_library(compiler compiler/compilation/State.cpp compiler/compilation/Static.cpp compiler/Util.cpp - data_compiler/game_text.cpp + data_compiler/game_text_common.cpp data_compiler/dir_tpages.cpp data_compiler/DataObjectGenerator.cpp data_compiler/game_count.cpp - data_compiler/game_subtitle.cpp debugger/Debugger.cpp debugger/DebugInfo.cpp listener/Listener.cpp diff --git a/goalc/compiler/Compiler.h b/goalc/compiler/Compiler.h index 081ab1d585..b8939f2842 100644 --- a/goalc/compiler/Compiler.h +++ b/goalc/compiler/Compiler.h @@ -18,8 +18,7 @@ #include "goalc/emitter/Register.h" #include "goalc/listener/Listener.h" #include "goalc/make/MakeSystem.h" -#include "goalc/data_compiler/game_text.h" -#include "goalc/data_compiler/game_subtitle.h" +#include "goalc/data_compiler/game_text_common.h" enum MathMode { MATH_INT, MATH_BINT, MATH_FLOAT, MATH_INVALID }; diff --git a/goalc/compiler/compilation/CompilerControl.cpp b/goalc/compiler/compilation/CompilerControl.cpp index 600bcbbf36..43560e910e 100644 --- a/goalc/compiler/compilation/CompilerControl.cpp +++ b/goalc/compiler/compilation/CompilerControl.cpp @@ -15,8 +15,7 @@ #include "goalc/compiler/IR.h" #include "goalc/data_compiler/dir_tpages.h" #include "goalc/data_compiler/game_count.h" -#include "goalc/data_compiler/game_text.h" -#include "goalc/data_compiler/game_subtitle.h" +#include "goalc/data_compiler/game_text_common.h" /*! * Exit the compiler. Disconnects the listener and tells the target to reset itself. @@ -82,29 +81,34 @@ Val* Compiler::compile_asm_data_file(const goos::Object& form, const goos::Objec Val* Compiler::compile_asm_text_file(const goos::Object& form, const goos::Object& rest, Env* env) { (void)env; auto args = get_va(form, rest); - va_check(form, args, {goos::ObjectType::SYMBOL, goos::ObjectType::INTEGER}, - {{"files", {true, goos::ObjectType::PAIR}}}); - auto kind = symbol_string(args.unnamed.at(0)); + va_check(form, args, {goos::ObjectType::SYMBOL}, {{"files", {true, goos::ObjectType::PAIR}}}); + + // list of files per text version. + std::unordered_map> inputs; + + // what kind of text file? + const auto kind = symbol_string(args.unnamed.at(0)); + + // open all project files specified (usually one). + for_each_in_list(args.named.at("files"), [this, &inputs, &form, &kind](const goos::Object& o) { + if (o.is_string()) { + open_text_project(kind, o.as_string()->data, inputs); + } else { + throw_compiler_error(form, "Invalid object {} in asm-text-file files list.", o.print()); + } + }); + + // compile files. if (kind == "subtitle") { - std::vector files; - for_each_in_list(args.named.at("files"), [this, &files, &form](const goos::Object& o) { - if (o.is_string()) { - files.push_back(o.as_string()->data); - } else { - throw_compiler_error(form, "Invalid object {} in asm-text-file files list.", o.print()); - } - }); - compile_game_subtitle(files, (GameTextVersion)args.unnamed.at(1).as_int()); + for (auto& [ver, in] : inputs) { + GameSubtitleDB db; + compile_game_subtitle(in, ver, db); + } } else if (kind == "text") { - std::vector files; - for_each_in_list(args.named.at("files"), [this, &files, &form](const goos::Object& o) { - if (o.is_string()) { - files.push_back(o.as_string()->data); - } else { - throw_compiler_error(form, "Invalid object {} in asm-text-file files list.", o.print()); - } - }); - compile_game_text(files, (GameTextVersion)args.unnamed.at(1).as_int()); + for (auto& [ver, in] : inputs) { + GameTextDB db; + compile_game_text(in, ver, db); + } } else { throw_compiler_error(form, "The option {} was not recognized for asm-text-file.", kind); } diff --git a/goalc/data_compiler/game_subtitle.cpp b/goalc/data_compiler/game_subtitle.cpp deleted file mode 100644 index 7e319fd260..0000000000 --- a/goalc/data_compiler/game_subtitle.cpp +++ /dev/null @@ -1,192 +0,0 @@ -/*! - * @file game_subtitle.cpp - * Builds the XSUBTIT.TXT text files. Each file contains all the strings used as subtitles for - * cutscenes, hints and ambient speech, along with the timings. - * - * This kind of file is completely custom. - */ - -#include -#include -#include -#include "game_subtitle.h" -#include "DataObjectGenerator.h" -#include "common/goos/Reader.h" -#include "common/util/FileUtil.h" -#include "common/goos/ParseHelpers.h" -#include "third-party/fmt/core.h" - -namespace { -int64_t get_int(const goos::Object& obj) { - if (obj.is_int()) { - return obj.integer_obj.value; - } - throw std::runtime_error(obj.print() + " was supposed to be an integer, but isn't"); -} - -const goos::Object& car(const goos::Object& x) { - if (!x.is_pair()) { - throw std::runtime_error("invalid pair"); - } - - return x.as_pair()->car; -} - -const goos::Object& cdr(const goos::Object& x) { - if (!x.is_pair()) { - throw std::runtime_error("invalid pair"); - } - - return x.as_pair()->cdr; -} - -std::string uppercase(const std::string& in) { - std::string result; - result.reserve(in.size()); - for (auto c : in) { - if (c >= 'a' && c <= 'z') { - c -= ('a' - 'A'); - } - result.push_back(c); - } - return result; -} - -/*! - * Parse a game subtitle file. - * Information is added to the game subtitles database. - * - * The file should begin with (language-id x y z...) with the given language IDs. - * Each entry should be (name (frame "line-text-0" "line-text-1") ... ) - * This adds the subtitle to each of the specified languages. - */ -void parse(const goos::Object& data, GameTextVersion text_ver, GameSubtitleDB& db) { - auto font = get_font_bank(text_ver); - std::map> banks; - - for_each_in_list(data.as_pair()->cdr, [&](const goos::Object& obj) { - if (obj.is_pair()) { - auto& head = car(obj); - if (head.is_symbol() && head.as_symbol()->name == "language-id") { - if (banks.size() != 0) { - throw std::runtime_error("Languages have been set multiple times."); - } - - if (cdr(obj).is_empty_list()) { - throw std::runtime_error("At least one language must be set."); - } - - for_each_in_list(cdr(obj), [&](const goos::Object& obj) { - auto lang = get_int(obj); - if (!db.bank_exists(lang)) { - // database has no lang yet - banks[lang] = db.add_bank(std::make_shared(lang)); - } else { - banks[lang] = db.bank_by_id(lang); - } - }); - } - - else if (head.is_string()) { - if (banks.size() == 0) { - throw std::runtime_error("At least one language must be set before defining entries."); - } - GameSubtitleSceneInfo scene(head.as_string()->data); - for_each_in_list(cdr(obj), [&](const goos::Object& entry) { - if (entry.is_pair()) { - if (!car(entry).is_int() || !car(cdr(entry)).is_symbol() || - !car(cdr(cdr(entry))).is_string() || !car(cdr(cdr(cdr(entry)))).is_string()) { - throw std::runtime_error( - "Each entry must be of format (number symbol \"string\" \"string\")"); - } - - auto line = font->convert_utf8_to_game(car(cdr(cdr(cdr(entry)))).as_string()->data); - auto speaker = font->convert_utf8_to_game(car(cdr(cdr(entry))).as_string()->data); - auto offscreen = car(cdr(entry)).as_symbol()->name != "#f"; - scene.add_line(car(entry).as_int(), line, speaker, offscreen); - } else { - throw std::runtime_error("Each entry must be a list"); - } - }); - for (auto& [lang, bank] : banks) { - if (!bank->scene_exists(scene.name())) { - bank->add_scene(scene); - } else { - // this should copy the data, so it's safe to delete the new one afterwards. - auto& old_scene = bank->scene_by_name(scene.name()); - old_scene.from_other_scene(scene); - } - } - } else { - throw std::runtime_error("Invalid game subtitles file entry: " + head.print()); - } - } else { - throw std::runtime_error("Invalid game subtitles file"); - } - }); - if (banks.size() == 0) { - throw std::runtime_error("At least one language must be set."); - } -} - -/*! - * Write game subtitle data to a file. Uses the V2 object format which is identical between GOAL and - * OpenGOAL. - */ -void compile(GameSubtitleDB& db) { - for (const auto& [lang, bank] : db.banks()) { - DataObjectGenerator gen; - gen.add_type_tag("subtitle-text-info"); // type - gen.add_word(bank->scenes().size()); // length - gen.add_word(lang); // lang - gen.add_word(0); // dummy - - // fifo queue for scene data arrays - std::queue array_link_sources; - // now add all the scene infos - for (auto& [name, scene] : bank->scenes()) { - gen.add_word(0 | - (scene.lines().size() << 16)); // kind (lower 16 bits), length (upper 16 bits) - - array_link_sources.push(gen.words()); - gen.add_word(0); // keyframes (linked later) - - gen.add_ref_to_string_in_pool(scene.name()); // name - - gen.add_word(0); // pad (string is 4 bytes but we have 8) - } - // now add all the scene *data!* (keyframes) - for (auto& [name, scene] : bank->scenes()) { - // link inline-array with reference from earlier - gen.link_word_to_word(array_link_sources.front(), gen.words()); - array_link_sources.pop(); - - for (auto& subtitle : scene.lines()) { - gen.add_word(subtitle.frame); // frame - gen.add_ref_to_string_in_pool(subtitle.line); // line - gen.add_ref_to_string_in_pool(subtitle.speaker); // speaker - gen.add_symbol_link(subtitle.offscreen ? "#t" : "#f"); // offscreen - } - } - - auto data = gen.generate_v2(); - - file_util::create_dir_if_needed(file_util::get_file_path({"out", "iso"})); - file_util::write_binary_file( - file_util::get_file_path( - {"out", "iso", fmt::format("{}{}.TXT", lang, uppercase("subtit"))}), - data.data(), data.size()); - } -} -} // namespace - -void compile_game_subtitle(const std::vector& filenames, GameTextVersion text_ver) { - GameSubtitleDB db; - goos::Reader reader; - for (auto& filename : filenames) { - fmt::print("[Build Game Subtitle] {}\n", filename.c_str()); - auto code = reader.read_from_file({filename}); - parse(code, text_ver, db); - } - compile(db); -} diff --git a/goalc/data_compiler/game_text.cpp b/goalc/data_compiler/game_text.cpp deleted file mode 100644 index 2cdb3d1dd0..0000000000 --- a/goalc/data_compiler/game_text.cpp +++ /dev/null @@ -1,210 +0,0 @@ -/*! - * @file game_text.cpp - * Builds the XCOMMON.TXT text files. Each file contains all the strings that appear in the game - * translated into a language. - * - * The decompiler/data/game_text.cpp file extracts text from the game and creates a file that - * can be read with these functions. - */ - -#include -#include "game_text.h" -#include "common/goos/Reader.h" -#include "DataObjectGenerator.h" -#include "common/util/FileUtil.h" -#include "common/util/FontUtils.h" -#include "common/goos/ParseHelpers.h" -#include "third-party/fmt/core.h" - -namespace { -int64_t get_int(const goos::Object& obj) { - if (obj.is_int()) { - return obj.integer_obj.value; - } - throw std::runtime_error(obj.print() + " was supposed to be an integer, but isn't"); -} - -const goos::Object& car(const goos::Object& x) { - if (!x.is_pair()) { - throw std::runtime_error("invalid pair"); - } - - return x.as_pair()->car; -} - -const goos::Object& cdr(const goos::Object& x) { - if (!x.is_pair()) { - throw std::runtime_error("invalid pair"); - } - - return x.as_pair()->cdr; -} - -std::string get_string(const goos::Object& x) { - if (x.is_string()) { - return x.as_string()->data; - } - throw std::runtime_error(x.print() + " was supposed to be a string, but isn't"); -} - -std::string uppercase(const std::string& in) { - std::string result; - result.reserve(in.size()); - for (auto c : in) { - if (c >= 'a' && c <= 'z') { - c -= ('a' - 'A'); - } - result.push_back(c); - } - return result; -} - -/*! - * Parse a game text file. - * Information is added to the game text database. - * - * The file should begin with (language-id x y z...) with the given language IDs. - * Each entry should be (id "line for 1st language" "line for 2nd language" ...) - * This adds the text line to each of the specified languages. - */ -void parse(const goos::Object& data, GameTextVersion text_ver, GameTextDB& db) { - auto font = get_font_bank(text_ver); - std::vector> banks; - bool group_name_set = false; - std::string possible_group_name; - - for_each_in_list(data.as_pair()->cdr, [&](const goos::Object& obj) { - if (obj.is_pair()) { - auto& head = car(obj); - if (head.is_symbol() && head.as_symbol()->name == "language-id") { - if (banks.size() != 0) { - throw std::runtime_error("Languages have been set multiple times."); - } - - if (cdr(obj).is_empty_list()) { - throw std::runtime_error("At least one language must be set."); - } - - if (!group_name_set) { - throw std::runtime_error("Text group must be set before languages."); - } - - for_each_in_list(cdr(obj), [&](const goos::Object& obj) { - auto lang = get_int(obj); - if (!db.bank_exists(possible_group_name, lang)) { - // database has no lang in this group yet - banks.push_back(db.add_bank(possible_group_name, std::make_shared(lang))); - } else { - banks.push_back(db.bank_by_id(possible_group_name, lang)); - } - }); - } else if (head.is_symbol() && head.as_symbol()->name == "group-name") { - if (group_name_set) { - throw std::runtime_error("group-name has been set multiple times."); - } - group_name_set = true; - - possible_group_name = get_string(car(cdr(obj))); - if (!cdr(cdr(obj)).is_empty_list()) { - throw std::runtime_error("group-name has too many arguments"); - } - } - - else if (head.is_int()) { - if (banks.size() == 0) { - throw std::runtime_error("At least one language must be set before defining entries."); - } - int i = 0; - int id = head.as_int(); - for_each_in_list(cdr(obj), [&](const goos::Object& entry) { - if (entry.is_string()) { - if (i >= int(banks.size())) { - throw std::runtime_error(fmt::format("Too many strings in text id #x{:x}", id)); - } - - auto line = font->convert_utf8_to_game(entry.as_string()->data); - banks[i++]->set_line(id, line); - } else { - throw std::runtime_error(fmt::format("Non-string value in text id #x{:x}", id)); - } - }); - if (i != int(banks.size())) { - throw std::runtime_error( - fmt::format("Not enough strings specified in text id #x{:x}", id)); - } - } else { - throw std::runtime_error("Invalid game text file entry: " + head.print()); - } - } else { - throw std::runtime_error("Invalid game text file"); - } - }); - if (banks.size() == 0) { - throw std::runtime_error("At least one language must be set."); - } -} - -/* -(deftype game-text (structure) - ((id uint32 :offset-assert 0) - (text basic :offset-assert 4) - ) - ) - -(deftype game-text-info (basic) - ((length int32 :offset-assert 4) - (language-id int32 :offset-assert 8) - (group-name basic :offset-assert 12) - (data game-text :dynamic :offset-assert 16) - ) - ) - */ - -/*! - * Write game text data to a file. Uses the V2 object format which is identical between GOAL and - * OpenGOAL, so this should produce exactly identical files to what is found in the game. - */ -void compile(GameTextDB& db) { - for (const auto& [group_name, banks] : db.groups()) { - for (const auto& [lang, bank] : banks) { - DataObjectGenerator gen; - gen.add_type_tag("game-text-info"); // type - gen.add_word(bank->lines().size()); // length - gen.add_word(lang); // language-id - // this string is found in the string pool. - gen.add_ref_to_string_in_pool(group_name); // group-name - - // now add all the datas: (the lines are already sorted by id) - for (auto& [id, line] : bank->lines()) { - gen.add_word(id); // id - // these strings must be in the string pool, as sometimes there are duplicate - // strings in a single language, and these strings should be stored once and have multiple - // references to them. - gen.add_ref_to_string_in_pool(line); // text - } - - auto data = gen.generate_v2(); - - file_util::create_dir_if_needed(file_util::get_file_path({"out", "iso"})); - file_util::write_binary_file( - file_util::get_file_path( - {"out", "iso", fmt::format("{}{}.TXT", lang, uppercase(group_name))}), - data.data(), data.size()); - } - } -} -} // namespace - -/*! - * Read a game text description file and generate GOAL objects. - */ -void compile_game_text(const std::vector& filenames, GameTextVersion text_ver) { - GameTextDB db; - goos::Reader reader; - for (auto& filename : filenames) { - fmt::print("[Build Game Text] {}\n", filename.c_str()); - auto code = reader.read_from_file({filename}); - parse(code, text_ver, db); - } - compile(db); -} diff --git a/goalc/data_compiler/game_text.h b/goalc/data_compiler/game_text.h deleted file mode 100644 index 4c419cbe3a..0000000000 --- a/goalc/data_compiler/game_text.h +++ /dev/null @@ -1,62 +0,0 @@ -#pragma once -#include "common/util/FontUtils.h" -#include "common/util/Assert.h" -#include -#include -#include -#include -#include - -class GameTextBank { - public: - GameTextBank(int lang_id) : m_lang_id(lang_id) {} - - int lang() const { return m_lang_id; } - const std::map& lines() const { return m_lines; } - - bool line_exists(int id) const { return m_lines.find(id) != m_lines.end(); } - std::string line(int id) { return m_lines.at(id); } - void set_line(int id, std::string line) { m_lines[id] = line; } - - private: - int m_lang_id; - std::map m_lines; -}; - -/*! - * The text database contains a text bank for each language for each text group. - * Each text bank contains a list of text lines. Very simple. - */ -class GameTextDB { - public: - const std::unordered_map>>& groups() - const { - return m_banks; - } - const std::map>& banks(std::string group) const { - return m_banks.at(group); - } - - bool bank_exists(std::string group, int id) const { - if (m_banks.find(group) == m_banks.end()) - return false; - return m_banks.at(group).find(id) != m_banks.at(group).end(); - } - - std::shared_ptr add_bank(std::string group, std::shared_ptr bank) { - ASSERT(!bank_exists(group, bank->lang())); - m_banks[group][bank->lang()] = bank; - return bank; - } - std::shared_ptr bank_by_id(std::string group, int id) { - if (!bank_exists(group, id)) { - return nullptr; - } - return m_banks.at(group).at(id); - } - - private: - std::unordered_map>> m_banks; -}; - -void compile_game_text(const std::vector& filenames, GameTextVersion text_ver); diff --git a/goalc/data_compiler/game_text_common.cpp b/goalc/data_compiler/game_text_common.cpp new file mode 100644 index 0000000000..1c939473f8 --- /dev/null +++ b/goalc/data_compiler/game_text_common.cpp @@ -0,0 +1,408 @@ +/*! + * @file game_text.cpp + * Builds the XCOMMON.TXT text files. Each file contains all the strings that appear in the game + * translated into a language. + * + * The decompiler/data/game_text.cpp file extracts text from the game and creates a file that + * can be read with these functions. + * + * Also builds the XSUBTIT.TXT text files. Each file contains all the strings used as subtitles for + * cutscenes, hints and ambient speech, along with the timings. + * This kind of file is completely custom. + */ + +#include +#include +#include "game_text_common.h" +#include "common/goos/Reader.h" +#include "DataObjectGenerator.h" +#include "common/util/FileUtil.h" +#include "common/util/FontUtils.h" +#include "common/goos/ParseHelpers.h" +#include "third-party/fmt/core.h" + +namespace { +int64_t get_int(const goos::Object& obj) { + if (obj.is_int()) { + return obj.integer_obj.value; + } + throw std::runtime_error(obj.print() + " was supposed to be an integer, but isn't"); +} + +const goos::Object& car(const goos::Object& x) { + if (!x.is_pair()) { + throw std::runtime_error("invalid pair"); + } + + return x.as_pair()->car; +} + +const goos::Object& cdr(const goos::Object& x) { + if (!x.is_pair()) { + throw std::runtime_error("invalid pair"); + } + + return x.as_pair()->cdr; +} + +std::string get_string(const goos::Object& x) { + if (x.is_string()) { + return x.as_string()->data; + } + throw std::runtime_error(x.print() + " was supposed to be a string, but isn't"); +} + +std::string uppercase(const std::string& in) { + std::string result; + result.reserve(in.size()); + for (auto c : in) { + if (c >= 'a' && c <= 'z') { + c -= ('a' - 'A'); + } + result.push_back(c); + } + return result; +} + +/*! + * Parse a game text file. + * Information is added to the game text database. + * + * The file should begin with (language-id x y z...) with the given language IDs. + * Each entry should be (id "line for 1st language" "line for 2nd language" ...) + * This adds the text line to each of the specified languages. + */ +void parse_text(const goos::Object& data, GameTextVersion text_ver, GameTextDB& db) { + auto font = get_font_bank(text_ver); + std::vector> banks; + std::string possible_group_name; + + for_each_in_list(data.as_pair()->cdr, [&](const goos::Object& obj) { + if (obj.is_pair()) { + auto& head = car(obj); + if (head.is_symbol() && head.as_symbol()->name == "language-id") { + if (banks.size() != 0) { + throw std::runtime_error("Languages have been set multiple times."); + } + + if (cdr(obj).is_empty_list()) { + throw std::runtime_error("At least one language must be set."); + } + + if (possible_group_name.empty()) { + throw std::runtime_error("Text group must be set before languages."); + } + + for_each_in_list(cdr(obj), [&](const goos::Object& obj) { + auto lang = get_int(obj); + if (!db.bank_exists(possible_group_name, lang)) { + // database has no lang in this group yet + banks.push_back(db.add_bank(possible_group_name, std::make_shared(lang))); + } else { + banks.push_back(db.bank_by_id(possible_group_name, lang)); + } + }); + } else if (head.is_symbol() && head.as_symbol()->name == "group-name") { + if (!possible_group_name.empty()) { + throw std::runtime_error("group-name has been set multiple times."); + } + + possible_group_name = get_string(car(cdr(obj))); + + if (possible_group_name.empty()) { + throw std::runtime_error("invalid group-name."); + } + + if (!cdr(cdr(obj)).is_empty_list()) { + throw std::runtime_error("group-name has too many arguments"); + } + } + + else if (head.is_int()) { + if (banks.size() == 0) { + throw std::runtime_error("At least one language must be set before defining entries."); + } + int i = 0; + int id = head.as_int(); + for_each_in_list(cdr(obj), [&](const goos::Object& entry) { + if (entry.is_string()) { + if (i >= int(banks.size())) { + throw std::runtime_error(fmt::format("Too many strings in text id #x{:x}", id)); + } + + auto line = font->convert_utf8_to_game(entry.as_string()->data); + banks[i++]->set_line(id, line); + } else { + throw std::runtime_error(fmt::format("Non-string value in text id #x{:x}", id)); + } + }); + if (i != int(banks.size())) { + throw std::runtime_error( + fmt::format("Not enough strings specified in text id #x{:x}", id)); + } + } else { + throw std::runtime_error("Invalid game text file entry: " + head.print()); + } + } else { + throw std::runtime_error("Invalid game text file"); + } + }); + if (banks.size() == 0) { + throw std::runtime_error("At least one language must be set."); + } +} + +/* +(deftype game-text (structure) + ((id uint32 :offset-assert 0) + (text basic :offset-assert 4) + ) + ) + +(deftype game-text-info (basic) + ((length int32 :offset-assert 4) + (language-id int32 :offset-assert 8) + (group-name basic :offset-assert 12) + (data game-text :dynamic :offset-assert 16) + ) + ) + */ + +/*! + * Write game text data to a file. Uses the V2 object format which is identical between GOAL and + * OpenGOAL, so this should produce exactly identical files to what is found in the game. + */ +void compile_text(GameTextDB& db) { + for (const auto& [group_name, banks] : db.groups()) { + for (const auto& [lang, bank] : banks) { + DataObjectGenerator gen; + gen.add_type_tag("game-text-info"); // type + gen.add_word(bank->lines().size()); // length + gen.add_word(lang); // language-id + // this string is found in the string pool. + gen.add_ref_to_string_in_pool(group_name); // group-name + + // now add all the datas: (the lines are already sorted by id) + for (auto& [id, line] : bank->lines()) { + gen.add_word(id); // id + // these strings must be in the string pool, as sometimes there are duplicate + // strings in a single language, and these strings should be stored once and have multiple + // references to them. + gen.add_ref_to_string_in_pool(line); // text + } + + auto data = gen.generate_v2(); + + file_util::create_dir_if_needed(file_util::get_file_path({"out", "iso"})); + file_util::write_binary_file( + file_util::get_file_path( + {"out", "iso", fmt::format("{}{}.TXT", lang, uppercase(group_name))}), + data.data(), data.size()); + } + } +} + +/*! + * Parse a game subtitle file. + * Information is added to the game subtitles database. + * + * The file should begin with (language-id x y z...) for the given language IDs. + * Each scene should be (scene-name ... ) + * This adds the subtitle to each of the specified languages. + */ +void parse_subtitle(const goos::Object& data, GameTextVersion text_ver, GameSubtitleDB& db) { + auto font = get_font_bank(text_ver); + std::map> banks; + + for_each_in_list(data.as_pair()->cdr, [&](const goos::Object& obj) { + if (obj.is_pair()) { + auto& head = car(obj); + if (head.is_symbol() && head.as_symbol()->name == "language-id") { + if (banks.size() != 0) { + throw std::runtime_error("Languages have been set multiple times."); + } + + if (cdr(obj).is_empty_list()) { + throw std::runtime_error("At least one language must be set."); + } + + for_each_in_list(cdr(obj), [&](const goos::Object& obj) { + auto lang = get_int(obj); + if (!db.bank_exists(lang)) { + // database has no lang yet + banks[lang] = db.add_bank(std::make_shared(lang)); + } else { + banks[lang] = db.bank_by_id(lang); + } + }); + } + + else if (head.is_string()) { + if (banks.size() == 0) { + throw std::runtime_error("At least one language must be set before defining entries."); + } + GameSubtitleSceneInfo scene(head.as_string()->data); + for_each_in_list(cdr(obj), [&](const goos::Object& entry) { + if (entry.is_pair()) { + // expected formats: + // (time ) + // all arguments have default values. the arguments are: + // "speaker" "line" - two strings. one for the speaker's name and one for the actual + // line. speaker can be empty. default is just empty string. + // :offscreen - speaker is offscreen. default is not offscreen. + + if (!car(entry).is_int()) { + throw std::runtime_error("Each entry must start with a timestamp (number)"); + } + + auto time = car(entry).as_int(); + goos::StringObject *speaker = nullptr, *line = nullptr; + bool offscreen = false; + for_each_in_list(cdr(entry), [&](const goos::Object& arg) { + if (arg.is_string()) { + if (!speaker) { + speaker = arg.as_string(); + } else if (!line) { + line = arg.as_string(); + } else { + throw std::runtime_error("Invalid string in subtitle entry"); + } + } else if (speaker && !line) { + throw std::runtime_error( + "Invalid object in subtitle entry, expecting actual line string after speaker"); + } else if (arg.is_symbol()) { + if (arg.as_symbol()->name == ":offscreen") { + offscreen = true; + } + } + }); + auto line_str = font->convert_utf8_to_game(line ? line->data : ""); + auto speaker_str = font->convert_utf8_to_game(speaker ? speaker->data : ""); + scene.add_line(time, line_str, speaker_str, offscreen); + } else { + throw std::runtime_error("Each entry must be a list"); + } + }); + for (auto& [lang, bank] : banks) { + if (!bank->scene_exists(scene.name())) { + bank->add_scene(scene); + } else { + // this should copy the data, so it's safe to delete the new one afterwards. + auto& old_scene = bank->scene_by_name(scene.name()); + old_scene.from_other_scene(scene); + } + } + } else { + throw std::runtime_error("Invalid game subtitles file entry: " + head.print()); + } + } else { + throw std::runtime_error("Invalid game subtitles file"); + } + }); + if (banks.size() == 0) { + throw std::runtime_error("At least one language must be set."); + } +} + +/*! + * Write game subtitle data to a file. Uses the V2 object format which is identical between GOAL and + * OpenGOAL. + */ +void compile_subtitle(GameSubtitleDB& db) { + for (const auto& [lang, bank] : db.banks()) { + DataObjectGenerator gen; + gen.add_type_tag("subtitle-text-info"); // type + gen.add_word(bank->scenes().size()); // length + gen.add_word(lang); // lang + gen.add_word(0); // dummy + + // fifo queue for scene data arrays + std::queue array_link_sources; + // now add all the scene infos + for (auto& [name, scene] : bank->scenes()) { + gen.add_word(0 | + (scene.lines().size() << 16)); // kind (lower 16 bits), length (upper 16 bits) + + array_link_sources.push(gen.words()); + gen.add_word(0); // keyframes (linked later) + + gen.add_ref_to_string_in_pool(scene.name()); // name + + gen.add_word(0); // pad (string is 4 bytes but we have 8) + } + // now add all the scene *data!* (keyframes) + for (auto& [name, scene] : bank->scenes()) { + // link inline-array with reference from earlier + gen.link_word_to_word(array_link_sources.front(), gen.words()); + array_link_sources.pop(); + + for (auto& subtitle : scene.lines()) { + gen.add_word(subtitle.frame); // frame + gen.add_ref_to_string_in_pool(subtitle.line); // line + gen.add_ref_to_string_in_pool(subtitle.speaker); // speaker + gen.add_word(subtitle.offscreen); // offscreen + } + } + + auto data = gen.generate_v2(); + + file_util::create_dir_if_needed(file_util::get_file_path({"out", "iso"})); + file_util::write_binary_file( + file_util::get_file_path( + {"out", "iso", fmt::format("{}{}.TXT", lang, uppercase("subtit"))}), + data.data(), data.size()); + } +} +} // namespace + +/*! + * Read a game text description file and generate GOAL objects. + */ +void compile_game_text(const std::vector& filenames, + GameTextVersion text_ver, + GameTextDB& db) { + goos::Reader reader; + for (auto& filename : filenames) { + fmt::print("[Build Game Text] {}\n", filename.c_str()); + auto code = reader.read_from_file({filename}); + parse_text(code, text_ver, db); + } + compile_text(db); +} + +void compile_game_subtitle(const std::vector& filenames, + GameTextVersion text_ver, + GameSubtitleDB& db) { + goos::Reader reader; + for (auto& filename : filenames) { + fmt::print("[Build Game Subtitle] {}\n", filename.c_str()); + auto code = reader.read_from_file({filename}); + parse_subtitle(code, text_ver, db); + } + compile_subtitle(db); +} + +static const std::unordered_map s_text_ver_enum_map = { + {"jak1-v1", GameTextVersion::JAK1_V1}}; + +void open_text_project(const std::string& kind, + const std::string& filename, + std::unordered_map>& inputs) { + goos::Reader reader; + auto& proj = reader.read_from_file({filename}).as_pair()->cdr.as_pair()->car; + if (!proj.is_pair() || !proj.as_pair()->car.is_symbol() || + proj.as_pair()->car.as_symbol()->name != kind) { + throw std::runtime_error(fmt::format("invalid {} project", kind)); + } + + goos::for_each_in_list(proj.as_pair()->cdr, [&](const goos::Object& o) { + if (!o.is_pair()) { + throw std::runtime_error(fmt::format("invalid entry in {} project", kind)); + } + + auto& ver = o.as_pair()->car.as_symbol()->name; + auto& in = o.as_pair()->cdr.as_pair()->car.as_string()->data; + + inputs[s_text_ver_enum_map.at(ver)].push_back(in); + }); +} diff --git a/goalc/data_compiler/game_subtitle.h b/goalc/data_compiler/game_text_common.h similarity index 51% rename from goalc/data_compiler/game_subtitle.h rename to goalc/data_compiler/game_text_common.h index 7f4e590745..ed11474a31 100644 --- a/goalc/data_compiler/game_subtitle.h +++ b/goalc/data_compiler/game_text_common.h @@ -3,9 +3,69 @@ #include "common/util/Assert.h" #include #include +#include #include #include +/*! + * The text bank contains all lines (accessed with an ID) for a language. + */ +class GameTextBank { + public: + GameTextBank(int lang_id) : m_lang_id(lang_id) {} + + int lang() const { return m_lang_id; } + const std::map& lines() const { return m_lines; } + + bool line_exists(int id) const { return m_lines.find(id) != m_lines.end(); } + std::string line(int id) { return m_lines.at(id); } + void set_line(int id, std::string line) { m_lines[id] = line; } + + private: + int m_lang_id; + std::map m_lines; +}; + +/*! + * The text database contains a text bank for each language for each text group. + * Each text bank contains a list of text lines. Very simple. + */ +class GameTextDB { + public: + const std::unordered_map>>& groups() + const { + return m_banks; + } + const std::map>& banks(std::string group) const { + return m_banks.at(group); + } + + bool bank_exists(std::string group, int id) const { + if (m_banks.find(group) == m_banks.end()) + return false; + return m_banks.at(group).find(id) != m_banks.at(group).end(); + } + + std::shared_ptr add_bank(std::string group, std::shared_ptr bank) { + ASSERT(!bank_exists(group, bank->lang())); + m_banks[group][bank->lang()] = bank; + return bank; + } + std::shared_ptr bank_by_id(std::string group, int id) { + if (!bank_exists(group, id)) { + return nullptr; + } + return m_banks.at(group).at(id); + } + + private: + std::unordered_map>> m_banks; +}; + +/*! + * The subtitle scene info (accessed through the scene name) contains all lines and their timestamps + * and other settings. + */ class GameSubtitleSceneInfo { public: GameSubtitleSceneInfo() {} @@ -38,6 +98,9 @@ class GameSubtitleSceneInfo { std::vector m_lines; }; +/*! + * The subtitle bank contains subtitles for all scenes in a language. + */ class GameSubtitleBank { public: GameSubtitleBank(int lang_id) : m_lang_id(lang_id) {} @@ -84,4 +147,13 @@ class GameSubtitleDB { std::map> m_banks; }; -void compile_game_subtitle(const std::vector& filenames, GameTextVersion text_ver); +void compile_game_text(const std::vector& filenames, + GameTextVersion text_ver, + GameTextDB& db); +void compile_game_subtitle(const std::vector& filenames, + GameTextVersion text_ver, + GameSubtitleDB& db); + +void open_text_project(const std::string& kind, + const std::string& filename, + std::unordered_map>& inputs); diff --git a/goalc/make/Tools.cpp b/goalc/make/Tools.cpp index e07dcd5b51..2c06214a14 100644 --- a/goalc/make/Tools.cpp +++ b/goalc/make/Tools.cpp @@ -10,7 +10,7 @@ #include "third-party/fmt/core.h" #include "goalc/data_compiler/dir_tpages.h" #include "goalc/data_compiler/game_count.h" -#include "goalc/data_compiler/game_text.h" +#include "goalc/data_compiler/game_text_common.h" CompilerTool::CompilerTool(Compiler* compiler) : Tool("goalc"), m_compiler(compiler) {} @@ -67,34 +67,6 @@ DgoDescription parse_desc_file(const std::string& filename, goos::Reader& reader }); return desc; } - -static const std::unordered_map s_text_ver_enum_map = { - {"jak1-v1", GameTextVersion::JAK1_V1}}; - -std::unordered_map> open_text_project( - const std::string& kind, - const std::string& filename) { - goos::Reader reader; - auto& proj = reader.read_from_file({filename}).as_pair()->cdr.as_pair()->car; - if (!proj.is_pair() || !proj.as_pair()->car.is_symbol() || - proj.as_pair()->car.as_symbol()->name != kind) { - throw std::runtime_error(fmt::format("invalid {} project", kind)); - } - - std::unordered_map> inputs; - goos::for_each_in_list(proj.as_pair()->cdr, [&](const goos::Object& o) { - if (!o.is_pair()) { - throw std::runtime_error(fmt::format("invalid entry in {} project", kind)); - } - - auto& ver = o.as_pair()->car.as_symbol()->name; - auto& in = o.as_pair()->cdr.as_pair()->car.as_string()->data; - - inputs[s_text_ver_enum_map.at(ver)].push_back(in); - }); - - return inputs; -} } // namespace DgoTool::DgoTool() : Tool("dgo") {} @@ -159,8 +131,10 @@ bool TextTool::needs_run(const ToolInput& task) { } std::vector deps; - for (auto& [ver, inputs] : open_text_project("text", task.input.at(0))) { - for (auto& in : inputs) { + std::unordered_map> inputs; + open_text_project("text", task.input.at(0), inputs); + for (auto& [ver, files] : inputs) { + for (auto& in : files) { deps.push_back(in); } } @@ -168,8 +142,11 @@ bool TextTool::needs_run(const ToolInput& task) { } bool TextTool::run(const ToolInput& task) { - for (auto& [ver, in] : open_text_project("text", task.input.at(0))) { - compile_game_text(in, ver); + GameTextDB db; + std::unordered_map> inputs; + open_text_project("text", task.input.at(0), inputs); + for (auto& [ver, in] : inputs) { + compile_game_text(in, ver, db); } return true; } @@ -188,8 +165,10 @@ bool SubtitleTool::needs_run(const ToolInput& task) { } std::vector deps; - for (auto& [ver, inputs] : open_text_project("subtitle", task.input.at(0))) { - for (auto& in : inputs) { + std::unordered_map> inputs; + open_text_project("subtitle", task.input.at(0), inputs); + for (auto& [ver, files] : inputs) { + for (auto& in : files) { deps.push_back(in); } } @@ -197,8 +176,11 @@ bool SubtitleTool::needs_run(const ToolInput& task) { } bool SubtitleTool::run(const ToolInput& task) { - for (auto& [ver, in] : open_text_project("subtitle", task.input.at(0))) { - compile_game_subtitle(in, ver); + GameSubtitleDB db; + std::unordered_map> inputs; + open_text_project("subtitle", task.input.at(0), inputs); + for (auto& [ver, in] : inputs) { + compile_game_subtitle(in, ver, db); } return true; } diff --git a/goalc/make/Tools.h b/goalc/make/Tools.h index f36df144f9..e6d61b2b04 100644 --- a/goalc/make/Tools.h +++ b/goalc/make/Tools.h @@ -2,7 +2,6 @@ #include "goalc/make/Tool.h" #include "common/goos/Reader.h" -#include "goalc/data_compiler/game_subtitle.h" class Compiler; diff --git a/test/goalc/test_with_game.cpp b/test/goalc/test_with_game.cpp index 32a43b1e24..1aae314f1e 100644 --- a/test/goalc/test_with_game.cpp +++ b/test/goalc/test_with_game.cpp @@ -30,7 +30,7 @@ class WithGameTests : public ::testing::Test { shared_compiler->compiler.run_test_no_load( "test/goalc/source_templates/with_game/test-build-game.gc"); shared_compiler->compiler.run_front_end_on_string( - "(asm-text-file text 10 :files (\"test/test_data/test_game_text.txt\"))"); + "(asm-text-file text :files (\"test/test_data/test_game_text.gp\"))"); } catch (std::exception& e) { fprintf(stderr, "caught exception %s\n", e.what()); EXPECT_TRUE(false); diff --git a/test/test_data/test_game_text.gp b/test/test_data/test_game_text.gp new file mode 100644 index 0000000000..b3bef689af --- /dev/null +++ b/test/test_data/test_game_text.gp @@ -0,0 +1,2 @@ +(text + (jak1-v1 "test/test_data/test_game_text.txt")) \ No newline at end of file