;;-*-Lisp-*- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Jak 2 Project File ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; see goal_src/jak1/game.gp for more detailed explanation ;;;;;;;;;;;;;;;;;;;;;;; ;; Inputs from ISO ;;;;;;;;;;;;;;;;;;;;;;; (cond ;; extractor can override everything by providing *use-iso-data-path* (*use-iso-data-path* (map-path! "$ISO" (string-append *iso-data* "/"))) ;; if the user's repl-config has a game version folder, use that ((> (string-length (get-game-version-folder)) 0) (map-path! "$ISO" (string-append "iso_data/" (get-game-version-folder) "/"))) ;; otherwise, default to jak2 (#t (map-path! "$ISO" "iso_data/jak2/"))) ;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Inputs from decompiler ;;;;;;;;;;;;;;;;;;;;;;;;;; (cond ;; if the user's repl-config has a game version folder, use that ((> (string-length (get-game-version-folder)) 0) (map-path! "$DECOMP" (string-append "decompiler_out/" (get-game-version-folder) "/"))) ;; otherwise, default to jak2 (#t (map-path! "$DECOMP" "decompiler_out/jak2/"))) ;;;;;;;;;;;;;;;;;;;;;;; ;; Output ;;;;;;;;;;;;;;;;;;;;;;; ;; NOTE: the game itself will load from out/jak2/iso and out/jak2/fr3. (map-path! "$OUT" "out/jak2/") ;; tell the compiler to put its outputs in out/jak2/ (set-output-prefix "jak2/") ;; use defmacro to define goos macros. (define defmacro defsmacro) (define defun desfun) ;;;;;;;;;;;;;;;;;;;;;;; ;; Build Groups ;;;;;;;;;;;;;;;;;;;;;;; (define *all-cgos* '()) (define *all-str* '()) (define *all-vis* '()) (define *all-mus* '()) (define *all-sbk* '()) (define *all-vag* '()) (define *all-screens* '()) (define *all-gc* '()) (define *file-entry-map* (make-string-hash-table)) ;; Load required macros (load-file "goal_src/jak2/lib/project-lib.gp") (set-gsrc-folder! "goal_src/jak2") ;;;;;;;;;;;;;;;;; ;; GOAL Kernel ;;;;;;;;;;;;;;;;; (cgo-file "kernel.gd" '()) ;;;;;;;;;;;;;;;;;;;;; ;; misc files ;;;;;;;;;;;;;;;;;;;;; ;; the VAGDIR file (defstep :in "$ISO/VAG/VAGDIR.AYB" :tool 'copy :out '("$OUT/iso/VAGDIR.AYB")) ;;;;;;;;;;;;;;;;;;;;; ;; DGOs ;;;;;;;;;;;;;;;;;;;;; (defstep :in "$DECOMP/textures/tpage-dir.txt" :tool 'tpage-dir :out '("$OUT/obj/dir-tpages.go") ) (hash-table-set! *file-entry-map* "dir-tpages.go" #f) (cgo-file "game.gd" '("$OUT/obj/gcommon.o" "$OUT/obj/gstate.o" "$OUT/obj/gstring.o" "$OUT/obj/gkernel.o")) ;; note: some of these dependencies are slightly wrong because cgo-file doesn't really handle ;; the case of a .o appearing in multiple dgos. But, if we depend on the last item in both lists, it ;; works out. (define common-dep '("$OUT/obj/cty-guard-turret-button.o" "$OUT/obj/default-menu-pc.o")) ;; city (cgo-file "cwi.gd" common-dep) (cgo-file "lwidea.gd" common-dep) (cgo-file "lwideb.gd" common-dep) (cgo-file "lwidec.gd" common-dep) (cgo-file "ctykora.gd" common-dep) (cgo-file "cta.gd" common-dep) (cgo-file "ctb.gd" common-dep) (cgo-file "ctc.gd" common-dep) (cgo-file "cia.gd" common-dep) (cgo-file "cib.gd" common-dep) (cgo-file "cpo.gd" common-dep) (cgo-file "ljakdax.gd" common-dep) (cgo-file "cpa.gd" common-dep) (cgo-file "cga.gd" common-dep) (cgo-file "cgb.gd" common-dep) (cgo-file "cgc.gd" common-dep) (cgo-file "sta.gd" common-dep) (cgo-file "cma.gd" common-dep) (cgo-file "cmb.gd" common-dep) (cgo-file "ctyasha.gd" common-dep) (cgo-file "cfa.gd" common-dep) (cgo-file "cfb.gd" common-dep) (cgo-file "hiphog.gd" common-dep) (cgo-file "hideout.gd" common-dep) (cgo-file "gga.gd" common-dep) (cgo-file "onintent.gd" common-dep) (cgo-file "vin.gd" common-dep) (cgo-file "garage.gd" common-dep) (cgo-file "kiosk.gd" common-dep) (cgo-file "oracle.gd" common-dep) (cgo-file "stadblmp.gd" common-dep) ;; city borrow (cgo-file "lbbush.gd" common-dep) (cgo-file "lmeetbrt.gd" common-dep) (cgo-file "lpower.gd" common-dep) (cgo-file "lshuttle.gd" common-dep) (cgo-file "lkiddoge.gd" common-dep) (cgo-file "lbombbot.gd" common-dep) (cgo-file "lerlchal.gd" common-dep) (cgo-file "lprotect.gd" common-dep) (cgo-file "lpackage.gd" common-dep) (cgo-file "lportrun.gd" common-dep) (cgo-file "lhelldog.gd" common-dep) (cgo-file "lsack.gd" common-dep) (cgo-file "lprtrace.gd" common-dep) ;; other borrow (cgo-file "ltentout.gd" common-dep) (cgo-file "ltentob.gd" common-dep) (cgo-file "lkeirift.gd" common-dep) (cgo-file "lgarcsta.gd" common-dep) (cgo-file "lwhack.gd" common-dep) ;; title (cgo-file "title.gd" common-dep) ;; intro (cgo-file "vi1.gd" common-dep) (cgo-file "introcst.gd" common-dep) (cgo-file "lintcstb.gd" common-dep) (cgo-file "lcitylow.gd" common-dep) ;; stadium (cgo-file "ska.gd" common-dep) (cgo-file "stb.gd" common-dep) (cgo-file "stc.gd" common-dep) (cgo-file "std.gd" common-dep) (cgo-file "lracelit.gd" common-dep) (cgo-file "lracebf.gd" common-dep) (cgo-file "lracecf.gd" common-dep) (cgo-file "lracedf.gd" common-dep) (cgo-file "lracebb.gd" common-dep) (cgo-file "lracecb.gd" common-dep) (cgo-file "lracedb.gd" common-dep) (cgo-file "lwidesta.gd" common-dep) ;; fortress (cgo-file "pri.gd" common-dep) (cgo-file "ldjakbrn.gd" common-dep) (cgo-file "lprsncst.gd" common-dep) (cgo-file "fea.gd" common-dep) (cgo-file "feb.gd" common-dep) (cgo-file "fda.gd" common-dep) (cgo-file "fdb.gd" common-dep) (cgo-file "fordumpc.gd" common-dep) (cgo-file "fordumpd.gd" common-dep) (cgo-file "fra.gd" common-dep) (cgo-file "frb.gd" common-dep) ;; ruins (cgo-file "rui.gd" common-dep) (cgo-file "sag.gd" common-dep) ;; atoll (cgo-file "ato.gd" common-dep) (cgo-file "ate.gd" common-dep) ;; sewer (cgo-file "sew.gd" common-dep) (cgo-file "seb.gd" common-dep) (cgo-file "swe.gd" common-dep) (cgo-file "swb.gd" common-dep) ;; mountain (cgo-file "mtn.gd" common-dep) (cgo-file "mtx.gd" common-dep) (cgo-file "mcn.gd" common-dep) ;; tomb (cgo-file "toa.gd" common-dep) (cgo-file "tob.gd" common-dep) (cgo-file "toc.gd" common-dep) (cgo-file "tod.gd" common-dep) (cgo-file "toe.gd" common-dep) (cgo-file "tbo.gd" common-dep) (cgo-file "tombext.gd" common-dep) ;; drill (cgo-file "dri.gd" common-dep) (cgo-file "drb.gd" common-dep) (cgo-file "dmi.gd" common-dep) (cgo-file "drillmtn.gd" common-dep) ;; palace (cgo-file "pas.gd" common-dep) (cgo-file "pac.gd" common-dep) (cgo-file "par.gd" common-dep) (cgo-file "thr.gd" common-dep) (cgo-file "palboss.gd" common-dep) (cgo-file "pae.gd" common-dep) (cgo-file "palout.gd" common-dep) (cgo-file "lbrnermk.gd" common-dep) ;; strip (cgo-file "str.gd" common-dep) ;; castle (cgo-file "cap.gd" common-dep) (cgo-file "cas.gd" common-dep) (cgo-file "cab.gd" common-dep) (cgo-file "casext.gd" common-dep) (cgo-file "cascity.gd" common-dep) ;; dig (cgo-file "dg1.gd" common-dep) (cgo-file "d3a.gd" common-dep) (cgo-file "d3b.gd" common-dep) ;; forest (cgo-file "for.gd" common-dep) (cgo-file "fob.gd" common-dep) ;; under (cgo-file "und.gd" common-dep) (cgo-file "unb.gd" common-dep) ;; consite (cgo-file "coa.gd" common-dep) (cgo-file "cob.gd" common-dep) ;; nest (cgo-file "nes.gd" common-dep) (cgo-file "neb.gd" common-dep) (cgo-file "nestt.gd" common-dep) ;; outro (cgo-file "outrocst.gd" common-dep) (cgo-file "loutcstb.gd" common-dep) (cgo-file "lthrnout.gd" common-dep) (cgo-file "lhipout.gd" common-dep) (cgo-file "portwall.gd" common-dep) ;; demo (cgo-file "demo.gd" common-dep) ;; test (cgo-file "halfpipe.gd" common-dep) ;; scene borrow packages (cgo-file "lerltess.gd" common-dep) (cgo-file "lsamergd.gd" common-dep) (cgo-file "lysamsam.gd" common-dep) (cgo-file "lsmysbrt.gd" common-dep) (cgo-file "ltrnysam.gd" common-dep) (cgo-file "lashthrn.gd" common-dep) (cgo-file "lcguard.gd" common-dep) (cgo-file "ljkdxash.gd" common-dep) (cgo-file "lerrol.gd" common-dep) (cgo-file "lashgrd.gd" common-dep) (cgo-file "ltess.gd" common-dep) (cgo-file "ltrnkrkd.gd" common-dep) (cgo-file "ltrntess.gd" common-dep) (cgo-file "lguard.gd" common-dep) (cgo-file "lerbrngd.gd" common-dep) (cgo-file "lyskdcd.gd" common-dep) ;; test levels from the ps3 version (when USE_PS3_LEVELS (cgo-file "skatepar.gd" common-dep) (cgo-file "4aaron.gd" common-dep) (cgo-file "4pal01.gd" common-dep) (cgo-file "bsbs.gd" common-dep) (cgo-file "chartest.gd" common-dep) (cgo-file "ctyfence.gd" common-dep) (cgo-file "dptest.gd" common-dep) (cgo-file "eitest.gd" common-dep) (cgo-file "island1.gd" common-dep) (cgo-file "miketest.gd" common-dep) (cgo-file "stadocc.gd" common-dep) (cgo-file "tatetest.gd" common-dep) (cgo-file "teststdc.gd" common-dep) (cgo-file "teststdd.gd" common-dep) (cgo-file "tobytest.gd" common-dep) (cgo-file "wasall.gd" common-dep) ) ;;;;;;;;;;;;;;;;;;;;;;;;; ;; Example Custom Level ;;;;;;;;;;;;;;;;;;;;;;;;; ;; Set up the build system to build the level geometry ;; this path is relative to the custom_assets/jak2/levels folder ;; it should point to the .jsonc file that specifies the level. ;; options: ;; - force-run: when #t, always forces a rebuild of the level instead of checking the "last modified" timestamp. ;; - gen-fr3: when #f, does not generate the .fr3 file for the level. useful for temporarily skipping the slow fr3 build process when ;; there's many custom levels that include extra art groups. (build-custom-level "test-zone") ;; the DGO file (goal-src "levels/test-zone/test-zone-obs.gc" "process-focusable") (custom-level-cgo "TSZ.DGO" "test-zone/testzone.gd") ;; generate the art group for a custom actor. ;; requires a .glb model file in custom_assets/jak1/models/custom_levels ;; options: ;; - gen-mesh: when #t, generates a collision mesh for this actor. ;; - force-run: when #t, always forces a rebuild of the actor instead of checking the "last modified" timestamp. ;; - texture-bucket: sets the "texture-level" of the actor, which determines the level bucket to draw the actor in, affecting ;; the draw order. default is 0, which sets texture-level 0. if set to #f, no "texture-level" lump will be added to the ;; art group, defaulting to level 1. ;; - framerate: set the framerate for custom animations, if available. defaults to 60. ;; - master-art-group: the name of the art group to link custom animations to. this can be used to ;; give existing art groups custom animations if there are enough empty slots left over. ;; - master-ag-map: a list of pairs of (anim-name master-art-group-idx), linking the animation with the given name ;; to the given index in the master art group. ;; - joint-channel: how many joint channels the actor should have. defaults to 6. ;; more complicated actors like jak that make a lot of use of animation blending can have 24+ channels. (build-actor "test-actor" :force-run #t :gen-mesh #t) ;;;;;;;;;;;;;;;;;;;;; ;; ANIMATIONS ;;;;;;;;;;;;;;;;;;;;; (copy-strs "AT1INT" "AT1RES" "AT2INTRO" "AT3INTRO" "ATSA" "ATSARA" "ATSARB" "ATSB" "ATSC" "ATSD" "ATSE" "ATSINTRO" "ATSTANK" "BACONSIT" "BASQUID" "BAWIDOW" "CAATIN" "CAATOUT" "CAIIINTR" "CAIIRES" "CAKBFINT" "CAKBFRES" "CASEXPLO" "CIADOFF" "CIATICAS" "CIATINES" "CIATOUT" "CIC1RIA" "CIC1RIB" "CIC1RRES" "CIC2RINT" "CIC2RRES" "CIC3RINT" "CIC3RRES" "CIDGVINT" "CIDSINTR" "CIDSRES" "CIECINTR" "CIECRES" "CIEKINTR" "CIGDGUN" "CIGHOVER" "CIGYGUN" "CIHKINTR" "CIHKRESO" "CIIDINTR" "CIIHCINT" "CIIHCRES" "CIITINTR" "CIITRES" "CIKCINTR" "CIKCRES" "CIKDINTR" "CIMBINTR" "CIMBRES" "CIOINTRO" "CIOL0" "CIOL1" "CIOL2" "CIOL3" "CIPHOVER" "CIPOGINT" "CIPOGRES" "CIPSINTR" "CISBBINT" "CISLINTR" "CISOPINT" "CISUINTR" "CIWAMINT" "CIWAMRES" "COFBRES" "CRINTRO" "CRVICTOR" "DAMOLE" "DEDINTRO" "DESCREEN" "DIDEXPLO" "DIFTINTR" "DIFTRES" "DIKDSINT" "DRBSBREA" "DRCBREAK" "DRDCTINT" "DRDSINTR" "DRKMHINT" "DRTEXPLO" "DRW1" "DRW2" "ECINTRO" "ECVICTOR" "FO2INTRO" "FOBUARA" "FOBUARB" "FOCMHINT" "FOFA" "FOFB" "FOHCMHIN" "FOPSIA" "FOPSIB" "FOPSRES" "FOSFIA" "FOSFRES" "GRMANIMS" "INCSQUAR" "INPRISON" "INSHUT" "INVORTEX" "JAA1" "JAA2" "JAA3" "JAA4" "JAA5" "JAA6" "JAA7" "JABOARD" "JACARRY" "JAD1" "JAD2" "JAD3" "JAD4" "JAD5" "JADARK" "JADON" "JADUMMY" "JAFLUT" "JAGUN" "JAICE" "JAINDAX" "JAMECH" "JAPEGASU" "JAPIDAX" "JAPILOT" "JAPOLE" "JARACER" "JASWIM" "JATUBE" "JATURRET" "KEANIM" "KEGARAGE" "KILTRNKR" "KILYSKDC" "KINESTB" "KITOMBD" "KRDRES" "MOFINTRO" "MOGRES" "MOLRES" "MOSRES" "MTAR1" "MTPBRA" "MTSPRA" "MTSPRB" "MTSPRC" "NEATIN" "NEATOUT" "NEBBRES" "NEKBFIB" "NEKBFMID" "ONGAME" "OUHIPHOG" "OUNEST" "OUPALACE" "OUPORT" "PABRES" "PAOWRB" "PAOWRES" "PASIRES" "PRMINIMA" "RHW1" "RHW2" "RUB1" "RUBW1" "RUBW2" "RUBW3" "RUBW4" "RUBW5" "RUBW6" "RUDPA1" "RUDPB1" "RUDPC1" "RUGTHRES" "RUPC1" "RUPC2" "RUPC3" "RUSINTRO" "RUSVICTO" "RUTINTRO" "RUTVICTO" "SALSAMER" "SCBOOK" "SE1INTRO" "SE1RES" "SE2INTRO" "SEBUSINT" "SEBUSRES" "SEC1" "SEDRES" "SEHOSEHE" "SESGRUNT" "SEW1" "SEW2" "TELHIPHO" "TELTRNTE" "TELWHACK" "TESCENE" "TIDINTRO" "TOBBA" "TOBBB" "TOBINTRO" "TOBOPEN" "TOBRES" "TOBSTART" "TOFTINTR" "TOSC0" "TOSC1" "TOSC2" "TOSSCARE" "TOTURRET" "TOUPOLES" "TOUSTART" "TOUWATER" "UNBD1" "UNBD2" "UNBD3" "UNBD4" "UNCONE" "UNCTHREE" "UNCTWO" "UNFSRES" "UNGSORES" "VIRESCUE" "VIRINTRO" "WOMAP" "YOFOREST" "YOLTRNYS" "YOLYSAMS" "YOLYSKDC" "YOONINTE" "YOTOMBD") ;;;;;;;;;;;;;;;;;;;;; ;; MUSIC ;;;;;;;;;;;;;;;;;;;;; (copy-vag-files "ENG" "FRE" "GER" "ITA" "JAP" "KOR" "SPA") (copy-sbk-files "ASHTAN1" "ASHTAN2" "ATOLL1" "ATOLL2" "ATOLL3" "ATOLL4" "BBUSH1" "BOARD" "BOMBBOT1" "CASBOSS1" "CASBOSS2" "CASBOSS3" "CASTLE1" "CASTLE2" "CASTLE3" "COMMON" "COMMONJ" "CONSITE1" "CONSITE2" "CONSITE3" "CTYFARM1" "CTYWIDE1" "CTYWIDE2" "CTYWIDE3" "CTYWIDE4" "CTYWIDE5" "DEMO1" "DIG1" "DIG2" "DIG3" "DIG4" "DIG5" "DIG6" "DIG7" "DIG8" "DRILL1" "DRILL2" "DRILL3" "DRILL4" "DRILL5" "DRILL6" "DRILL7" "DRILL8" "EMPTY0" "EMPTY1" "EMPTY2" "ERLCHAL1" "ESCKID1" "FORDUMP1" "FORDUMP2" "FOREST1" "FOREST2" "FOREST3" "FOREST4" "FOREST5" "FOREXIT1" "FOREXIT2" "FORRESC1" "FORRESC2" "GUN" "GUNGAME1" "HELLDOG1" "HIDEOUT1" "HIPHOG1" "INTRO1" "INTRO2" "INTRO3" "MECH" "MECHWAT" "MEETBRT1" "MENU1" "MOUNT1" "MOUNT2" "MOUNT3" "NEST1" "NEST2" "NEST3" "NEST4" "NEST5" "NEST6" "ONIN1" "ONIN2" "ORACLE1" "OUTRO1" "PALCAB1" "PALCAB2" "PALCAB3" "PALENT1" "PALENT2" "PALENT3" "PALROOF1" "PALROOF2" "PALROOF3" "PORTRUN1" "PROTECT1" "RUINS1" "RUINS2" "RUINS3" "SACK1" "SEWER1" "SEWER2" "SEWER3" "SEWER4" "SEWER5" "SEWER6" "SKATE1" "STADIUM1" "STRIP1" "STRIP2" "STRIP3" "TOMB1" "TOMB2" "TOMB3" "TOMB4" "TOMB5" "TOMB6" "TOMB7" "TOMB8" "TOMB9" "UNDER1" "UNDER2" "UNDER3" "UNDER4" "UNDER5" "VINROOM1") (copy-mus-files "ATOLL" "BATTLE" "CITY1" "CREDITS" "DANGER" "DANGER1" "DANGER2" "DANGER3" "DANGER4" "DANGER6" "DANGER7" "DANGER9" "DANGER10" "DANGER11" "DIG" "FOREST" "FORTRESS" "MOUNTAIN" "PALCAB" "RACE" "RUINS" "SEWER" "STRIP" "TOMB" "TWEAKVAL") ;;;;;;;;;;;;;;;;;;;;; ;; Splash Screens ;;;;;;;;;;;;;;;;;;;;; (copy-screen-files "DEE" "DEJ" "DEM" "EUR" "FRE" "GER" "ITA" "JAP" "KOR" "SPA" "USA") ;;;;;;;;;;;;;;;;;;;;; ;; Text ;;;;;;;;;;;;;;;;;;;;; (defstep :in "game/assets/jak2/game_text.gp" :tool 'text :out '("$OUT/iso/0COMMON.TXT" "$OUT/iso/1COMMON.TXT" "$OUT/iso/2COMMON.TXT" "$OUT/iso/3COMMON.TXT" "$OUT/iso/4COMMON.TXT" "$OUT/iso/5COMMON.TXT" "$OUT/iso/6COMMON.TXT" "$OUT/iso/7COMMON.TXT") ) (defstep :in "game/assets/jak2/game_subtitle.gp" :tool 'subtitle-v2 :out '("$OUT/iso/0SUBTI2.TXT") ) ;;;;;;;;;;;;;;;;;;;;; ;; ISO Group ;;;;;;;;;;;;;;;;;;;;; ;; the iso group is a group of files built by the "(mi)" command. (group-list "iso" `("$OUT/iso/0COMMON.TXT" "$OUT/iso/1COMMON.TXT" "$OUT/iso/2COMMON.TXT" "$OUT/iso/3COMMON.TXT" "$OUT/iso/4COMMON.TXT" "$OUT/iso/5COMMON.TXT" "$OUT/iso/6COMMON.TXT" "$OUT/iso/7COMMON.TXT" "$OUT/iso/0SUBTI2.TXT" "$OUT/iso/TWEAKVAL.MUS" "$OUT/iso/VAGDIR.AYB" ,@(reverse *all-vis*) ,@(reverse *all-str*) ,@(reverse *all-sbk*) ,@(reverse *all-mus*) ,@(reverse *all-vag*) ,@(reverse *all-screens*) ,@(reverse *all-cgos*)) ) (group-list "text" `("$OUT/iso/0COMMON.TXT" "$OUT/iso/1COMMON.TXT" "$OUT/iso/2COMMON.TXT" "$OUT/iso/3COMMON.TXT" "$OUT/iso/4COMMON.TXT" "$OUT/iso/5COMMON.TXT" "$OUT/iso/6COMMON.TXT" "$OUT/iso/7COMMON.TXT" "$OUT/iso/0SUBTI2.TXT" ) ) ;; used for the type consistency test. (group-list "all-code" `(,@(reverse *all-gc*)) ) (group "engine" "$OUT/iso/0COMMON.TXT" "$OUT/iso/0SUBTI2.TXT" "$OUT/iso/KERNEL.CGO" "$OUT/iso/GAME.CGO" "$OUT/iso/VAGDIR.AYB" "$OUT/iso/VAGWAD.ENG" )