diff --git a/.github/workflows/modpack.yml b/.github/workflows/modpack.yml index 831ffa9dc..1a774029f 100644 --- a/.github/workflows/modpack.yml +++ b/.github/workflows/modpack.yml @@ -58,8 +58,5 @@ jobs: - name: Upload modpacks to S3 run: aws s3 cp ./_modpacks/build/ s3://${{ secrets.S3_BUCKET_NAME }}/cswt/Modpacks/ --recursive --exclude "*" --include "*.zip" --include "packs.json" - - name: Temporarily also upload CSWT-main to old location - run: aws s3 cp ./_modpacks/build/cswt.zip s3://${{ secrets.S3_BUCKET_NAME }}/cswt/Builds/cswtpycsmm-dev.zip - - name: Create CloudFront invalidation for modpack run: aws cloudfront create-invalidation --distribution-id ${{ secrets.CLOUDFRONT_DISTRIBUTION_ID }} --paths /cswt/Modpacks/* /cswt/Builds/* diff --git a/_modpacks/packs/cslt/stable/manifest.json b/_modpacks/packs/cslt/stable/manifest.json new file mode 100644 index 000000000..8faf06e3d --- /dev/null +++ b/_modpacks/packs/cslt/stable/manifest.json @@ -0,0 +1,12 @@ +{ + "cslt": + { + "name":"Custom Street Legacy Tour", + "description":"An overhaul modpack containing over 100 boards from previous games in the Itadaki Street series!", + "version":"1.0", + "entity":"modpack", + "type":"primary", + "last_updated":"2024/11/28", + "resources":"cslt" + } +} diff --git a/_modpacks/packs/cslt/stable/mapList.yaml b/_modpacks/packs/cslt/stable/mapList.yaml new file mode 100644 index 000000000..ce0d65935 --- /dev/null +++ b/_modpacks/packs/cslt/stable/mapList.yaml @@ -0,0 +1,321 @@ +backgrounds: backgrounds.yml +0: + #practiceBoard: ShellIsland + 0: + CastleTrodainE.zip: + urls: + - https://nikkums.io/cswt/Maps/CastleTrodain.zip + ObservatoryE.zip: + urls: + - https://nikkums.io/cswt/Maps/Observatory.zip + GhostShipE.zip: + urls: + - https://nikkums.io/cswt/Maps/GhostShip.zip + SlimeniaE.zip: + urls: + - https://nikkums.io/cswt/Maps/Slimenia.zip + MtMagmageddonE.zip: + urls: + - https://nikkums.io/cswt/Maps/MtMagmageddon.zip + RobbinHoodRuinsE.zip: + urls: + - https://nikkums.io/cswt/Maps/RobbinHoodRuins.zip + 1: + MarioStadiumE.zip: + urls: + - https://nikkums.io/cswt/Maps/MarioStadium.zip + StarshipMarioE.zip: + urls: + - https://nikkums.io/cswt/Maps/StarshipMario.zip + MarioCircuitE.zip: + urls: + - https://nikkums.io/cswt/Maps/MarioCircuit.zip + YoshiIslandE.zip: + urls: + - https://nikkums.io/cswt/Maps/YoshiIsland.zip + DelfinoPlazaE.zip: + urls: + - https://nikkums.io/cswt/Maps/DelfinoPlaza.zip + PeachCastleE.zip: + urls: + - https://nikkums.io/cswt/Maps/PeachCastle.zip + 2: + AlefgardE.zip: + urls: + - https://nikkums.io/cswt/Maps/Alefgard.zip + SuperMarioBrosE.zip: + urls: + - https://nikkums.io/cswt/Maps/SuperMarioBros.zip + BowserCastleE.zip: + urls: + - https://nikkums.io/cswt/Maps/BowserCastle.zip + GoodEggGalaxyE.zip: + urls: + - https://nikkums.io/cswt/Maps/GoodEggGalaxy.zip + ColossusE.zip: + urls: + - https://nikkums.io/cswt/Maps/Colossus.zip + AlltradesAbbeyE.zip: + urls: + - https://nikkums.io/cswt/Maps/AlltradesAbbey.zip +1: + #practiceBoard: DeathStarfish + 0: + CastleTrodain.zip: + urls: + - https://nikkums.io/cswt/Maps/CastleTrodain.zip + Observatory.zip: + urls: + - https://nikkums.io/cswt/Maps/Observatory.zip + GhostShip.zip: + urls: + - https://nikkums.io/cswt/Maps/GhostShip.zip + Slimenia.zip: + urls: + - https://nikkums.io/cswt/Maps/Slimenia.zip + MtMagmageddon.zip: + urls: + - https://nikkums.io/cswt/Maps/MtMagmageddon.zip + RobbinHoodRuins.zip: + urls: + - https://nikkums.io/cswt/Maps/RobbinHoodRuins.zip + 1: + MarioStadium.zip: + urls: + - https://nikkums.io/cswt/Maps/MarioStadium.zip + StarshipMario.zip: + urls: + - https://nikkums.io/cswt/Maps/StarshipMario.zip + MarioCircuit.zip: + urls: + - https://nikkums.io/cswt/Maps/MarioCircuit.zip + YoshiIsland.zip: + urls: + - https://nikkums.io/cswt/Maps/YoshiIsland.zip + DelfinoPlaza.zip: + urls: + - https://nikkums.io/cswt/Maps/DelfinoPlaza.zip + PeachCastle.zip: + urls: + - https://nikkums.io/cswt/Maps/PeachCastle.zip + 2: + Alefgard.zip: + urls: + - https://nikkums.io/cswt/Maps/Alefgard.zip + SuperMarioBros.zip: + urls: + - https://nikkums.io/cswt/Maps/SuperMarioBros.zip + BowserCastle.zip: + urls: + - https://nikkums.io/cswt/Maps/BowserCastle.zip + GoodEggGalaxy.zip: + urls: + - https://nikkums.io/cswt/Maps/GoodEggGalaxy.zip + Colossus.zip: + urls: + - https://nikkums.io/cswt/Maps/Colossus.zip + AlltradesAbbey.zip: + urls: + - https://nikkums.io/cswt/Maps/AlltradesAbbey.zip + MaharataIslands.zip: + urls: + - https://nikkums.io/cswt/Maps/MaharataIslands.zip + TheAmericas.zip: + urls: + - https://nikkums.io/cswt/Maps/TheAmericas.zip + ShellIsland.zip: + practiceBoard: true + urls: + - https://nikkums.io/cswt/Maps/ShellIsland.zip + LakeMountain.zip: + urls: + - https://nikkums.io/cswt/Maps/LakeMountain.zip + Cloverland.zip: + urls: + - https://nikkums.io/cswt/Maps/Cloverland.zip + MoonCity.zip: + urls: + - https://nikkums.io/cswt/Maps/MoonCity.zip + Gootrude.zip: + urls: + - https://nikkums.io/cswt/Maps/Gootrude.zip + IS2Skyscraper.zip: + urls: + - https://nikkums.io/cswt/Maps/IS2Skyscraper.zip + DreamWorld.zip: + urls: + - https://nikkums.io/cswt/Maps/DreamWorld.zip + IS2Freeway.zip: + urls: + - https://nikkums.io/cswt/Maps/IS2Freeway.zip + IS2UnderwaterMetropolis.zip: + urls: + - https://nikkums.io/cswt/Maps/IS2UnderwaterMetropolis.zip + CasinoTown.zip: + urls: + - https://nikkums.io/cswt/Maps/CasinoTown.zip + IS2SophiesCave.zip: + urls: + - https://nikkums.io/cswt/Maps/IS2SophiesCave.zip + Geoglyph.zip: + urls: + - https://nikkums.io/cswt/Maps/Geoglyph.zip + QueenBunny.zip: + urls: + - https://nikkums.io/cswt/Maps/QueenBunny.zip + PrimitiveEra.zip: + urls: + - https://nikkums.io/cswt/Maps/PrimitiveEra.zip + GKFLoatingContinent.zip: + urls: + - https://nikkums.io/cswt/Maps/GKFLoatingContinent.zip + IS3CandyLand.zip: + urls: + - https://nikkums.io/cswt/Maps/IS3CandyLand.zip + IS3Rainforest.zip: + urls: + - https://nikkums.io/cswt/Maps/IS3Rainforest.zip + is3_sushitrain.zip: + urls: + - https://nikkums.io/cswt/Maps/is3_sushitrain.zip + IS3Moonlight.zip: + urls: + - https://nikkums.io/cswt/Maps/IS3Moonlight.zip + IS3Machu.zip: + urls: + - https://nikkums.io/cswt/Maps/IS3Machu.zip + IS3Space.zip: + urls: + - https://nikkums.io/cswt/Maps/IS3Space.zip + SPTycoon.zip: + urls: + - https://nikkums.io/cswt/Maps/SPTycoon.zip + SPAlltrades.zip: + urls: + - https://nikkums.io/cswt/Maps/SPAlltrades.zip + SeabedShrine.zip: + urls: + - https://nikkums.io/cswt/Maps/SeabedShrine.zip + SPFortuna.zip: + urls: + - https://nikkums.io/cswt/Maps/SPFortuna.zip + SPWorldTree.zip: + urls: + - https://nikkums.io/cswt/Maps/SPWorldTree.zip + SPRendarak.zip: + urls: + - https://nikkums.io/cswt/Maps/SPRendarak.zip + SPAlefgard.zip: + urls: + - https://nikkums.io/cswt/Maps/SPAlefgard.zip + SPMidgar.zip: + urls: + - https://nikkums.io/cswt/Maps/SPMidgar.zip + SPThunder.zip: + urls: + - https://nikkums.io/cswt/Maps/SPThunder.zip + Rabanastre.zip: + urls: + - https://nikkums.io/cswt/Maps/Rabanastre.zip + SPNalbina.zip: + urls: + - https://nikkums.io/cswt/Maps/SPNalbina.zip + SPAirship.zip: + urls: + - https://nikkums.io/cswt/Maps/SPAirship.zip + PortableTantegel.zip: + urls: + - https://nikkums.io/cswt/Maps/PortableTantegel.zip + PortableRamia.zip: + urls: + - https://nikkums.io/cswt/Maps/PortableRamia.zip + LibraryOfTheAncients.zip: + urls: + - https://nikkums.io/cswt/Maps/LibraryOfTheAncients.zip + PortableTree.zip: + urls: + - https://nikkums.io/cswt/Maps/PortableTree.zip + PortableVale.zip: + urls: + - https://nikkums.io/cswt/Maps/PortableVale.zip + PortableAlexandra.zip: + urls: + - https://nikkums.io/cswt/Maps/PortableAlexandra.zip + PhantomTrain.zip: + urls: + - https://nikkums.io/cswt/Maps/PhantomTrain.zip + PortableOpera.zip: + urls: + - https://nikkums.io/cswt/Maps/PortableOpera.zip + PortableBhujerba.zip: + urls: + - https://nikkums.io/cswt/Maps/PortableBhujerba.zip + PortableAlltrades.zip: + urls: + - https://nikkums.io/cswt/Maps/PortableAlltrades.zip + DSYoshisIsland.zip: + urls: + - https://nikkums.io/cswt/Maps/DSYoshisIsland.zip + DSColossus.zip: + urls: + - https://nikkums.io/cswt/Maps/DSColossus.zip + DSPeachsCastle.zip: + urls: + - https://nikkums.io/cswt/Maps/DSPeachsCastle.zip + DSDelfinoPlaza.zip: + urls: + - https://nikkums.io/cswt/Maps/DSDelfinoPlaza.zip + DSRobbinHoodRuins.zip: + urls: + - https://nikkums.io/cswt/Maps/DSRobbinHoodRuins.zip + DSAlefgard.zip: + urls: + - https://nikkums.io/cswt/Maps/DSAlefgard.zip + FSSmartSilkRoad.zip: + urls: + - https://nikkums.io/cswt/Maps/FSSmartSilkRoad.zip + FSSmartFestival.zip: + urls: + - https://nikkums.io/cswt/Maps/FSSmartFestival.zip + MobileSchoolNew.zip: + urls: + - https://nikkums.io/cswt/Maps/MobileSchoolNew.zip + SmartAntarctica.zip: + urls: + - https://nikkums.io/cswt/Maps/SmartAntarctica.zip + SmartZodiac.zip: + urls: + - https://nikkums.io/cswt/Maps/SmartZodiac.zip + SmartAquarium.zip: + urls: + - https://nikkums.io/cswt/Maps/SmartAquarium.zip + FSSmartMonsterHouse.zip: + urls: + - https://nikkums.io/cswt/Maps/FSSmartMonsterHouse.zip + Bunnyland.zip: + urls: + - https://nikkums.io/cswt/Maps/Bunnyland.zip + auMidnightTown.zip: + urls: + - https://nikkums.io/cswt/Maps/auMidnightTown.zip + auShellIsle.zip: + urls: + - https://nikkums.io/cswt/Maps/auShellIsle.zip + auCloverland.zip: + urls: + - https://nikkums.io/cswt/Maps/auCloverland.zip + auGlorious.zip: + urls: + - https://nikkums.io/cswt/Maps/auGlorious.zip + auNanana.zip: + urls: + - https://nikkums.io/cswt/Maps/auNanana.zip + auSgtFrog.zip: + urls: + - https://nikkums.io/cswt/Maps/auSgtFrog.zip + 30thDragonlordsCastle.zip: + urls: + - https://nikkums.io/cswt/Maps/30thDragonlordsCastle.zip + 30thCrystalTower.zip: + urls: + - https://nikkums.io/cswt/Maps/30thCrystalTower.zip diff --git a/_modpacks/packs/cslt/stable/modlist.txt b/_modpacks/packs/cslt/stable/modlist.txt new file mode 100644 index 000000000..278ba1b17 --- /dev/null +++ b/_modpacks/packs/cslt/stable/modlist.txt @@ -0,0 +1 @@ ++cslt diff --git a/_modpacks/resources/cslt/cslt.py b/_modpacks/resources/cslt/cslt.py new file mode 100644 index 000000000..49180b2be --- /dev/null +++ b/_modpacks/resources/cslt/cslt.py @@ -0,0 +1,180 @@ +import pycsmm +import os +import tempfile +import sys + +UI_MSGS_ALL = { + 4292: "Official Boards: Official boards which have been ported to Fortune Street", + 4293: "Custom Boards: Boards which were created by the Custom Street Modding Community", + 4294: "Official Boards", + 4295: "Custom Boards", + 4309: "Main Menu (Official Boards)", + 4311: "Main Menu (Custom Boards)", + 4316: "Tutorial: Learn the rules of the game whilst playing on a special practice board.", + 4317: "Tutorial: Learn the rules of the game whilst playing on a special practice board.", + 4319: "Start the tutorial?", + 4320: "Start the tutorial?", + 4381: "You've completed all available tours with the offical boards!", + 4382: "You've completed all available tours with the custom boards!", + 4446: "Tour Mode (Official Boards)", + 4447: "Tour Mode (Custom Boards)", + 4476: "Free Play (Official Boards)", + 4477: "Free Play (Custom Boards)", + 4812: "Official Boards", + 4813: "Custom Boards", + 4945: "Official Boards", + 4946: "Custom Boards", +} + +UI_MSGS = { + "de": { + 2881: "Ladenwert steigt um !Ladenpreise steigen um !Max. Kapital ist nun .", + 2885: "Ladenwert sinkt um .Ladenpreise sinken um .Max. Kapital sinkt auf .", + 3295: "Dein Gesamtvermögen wird mit 5 % besteuert.", + 3305: "Du kaufst ein Geschenk für60 x Stufe des Gastgebers = .", + 3370: "Wenn du vor dem Finanzamteines anderen Spielers Haltmachst, musst du eineVermögenssteuer von 5 %bezahlen.", + 3572: "Der Preis glitscht an ! 100 x Stufe = für den korrekten Wetteinsatz!", + }, + "en": { + 2881: " rise in shop value! rise in shop prices!Max. capital becomes .", + 2885: " fall in shop value. fall in shop prices.Max. capital becomes .", + 3295: "You pay a 5% tax on your net worth.", + 3305: "You buy a gift to take with you for 60 x homeowner's level = .", + 3370: "If you don't own the tax office, when you land on it you have to pay a 5% tax on your net worth.", + 3572: " takes away a prize of 100 x level = for backing the winning boinger!", + }, + "fr": { + 2881: "La valeur de la boutique grimpe de  !Les prix de la boutique grimpent de  !Le capital max. est désormais de .", + 2885: "La valeur de la boutique chute de .Les prix de la boutique chutent de .Le capital max. est désormais de .", + 3295: "Tu paies une taxe de 5% sur le total de tes biens.", + 3305: "Tu achètes un cadeau pour 60 x le niveau du propriétaire = .", + 3370: "Si l'hôtel des impôts ne t'appartient pas, tu dois payer un impôt de 5% du total de tes biens lorsque tu t'y arrêtes.", + 3572: " remporte 100 x niveau = pour avoir soutenu le gluant gluagnant !", + }, + "it": { + 2881: "Il valore del negozio aumenta di !I prezzi salgono di !Il limite d'investimento diventa .", + 2885: "Il valore del negozio si riduce di !I prezzi nel negozio calano di !Il limite d'investimento diventa .", + 3295: "Paghi una tassa del 5% sul totale del tuo patrimonio.", + 3305: "Acquisti un regalo. Il prezzo è pari a 60 x il livellodel proprietario di casa = .", + 3370: "Se l'ufficio delle impostenon è tuo, pagherai una tassapari al 5% del tuo patrimonio.", + 3572: " ha indovinato chislimavrebbe vinto e intasca100 x livello = !", + }, + "jp": { + 2881: "お店価格が アップ!買い物料が アップ!増資あまりが になりました。", + 2885: "お店価格が ダウン・・・買い物料が ダウン・・・増資あまりが になりました。", + 3295: "総資産の5%を払います。", + 3305: "おみやげ代として持ち主のレベル×60を払います。", + 3370: "持ち主以外が止まったとき総資産の5%を払います。", + 3572: "さんには優勝賞金として100×レベル=さしあげます!", + }, + "su": { + 2881: "¡El valor del local aumenta en !¡Los precios del local aumentan en !El capital máx. es ahora .", + 2885: "El valor del local cae en .Los precios del local caen en .El capital máx. es ahora .", + 3295: "Pagas un impuesto del 5% de todos tus bienes.", + 3305: "Compras un regalo por 60 x nivel del propietario = .", + 3370: "Si la tesorería no es tuya,tendrás que pagar unimpuesto del 5% de tusbienes totales.", + 3572: " se lleva un premiode 100 x nivel = por haber acertaglop el limo glapnador.", + }, + "uk": { + 2881: " rise in shop value! rise in shop prices!Max. capital becomes .", + 2885: " fall in shop value. fall in shop prices.Max. capital becomes .", + 3295: "You pay a 5% tax on your net worth.", + 3305: "You buy a gift to take with you for 60 x homeowner's level = .", + 3370: "If you don't own the tax office, when you land on it you have to pay a 5% tax on your net worth.", + 3572: " takes away a prize of 100 x level = for backing the winning boinger!", + } +} + +def replUiMessages(msgDict, toReplaceWith): + for k,v in toReplaceWith.items(): + msgDict[k] = v + +def replTitleImages(locale, arcDir, modpackDir): + gameSeqTitleAll = os.path.join(modpackDir, 'cslt/game_sequence_title_ALL.arc') + for dirEntry in os.scandir(gameSeqTitleAll): + tplPath = os.path.join(arcDir, 'arc/timg', os.path.splitext(dirEntry.name)[0] + '.tpl') + #print(tplPath, file=sys.stderr) + pycsmm.convertPngToTpl(dirEntry.path, tplPath) + if locale == 'de': + gameSeqTitleDe = os.path.join(modpackDir, 'cslt/game_sequence_title_DE.arc') + for dirEntry in os.scandir(gameSeqTitleDe): + tplPath = os.path.join(arcDir, 'arc/timg', os.path.splitext(dirEntry.name)[0] + '.tpl') + #print(tplPath, file=sys.stderr) + pycsmm.convertPngToTpl(dirEntry.path, tplPath) + +class Mod(pycsmm.CSMMMod, pycsmm.GeneralInterface, pycsmm.ArcFileInterface, pycsmm.UiMessageInterface): + def __init__(self): + pycsmm.CSMMMod.__init__(self) + pycsmm.GeneralInterface.__init__(self) + pycsmm.ArcFileInterface.__init__(self) + pycsmm.UiMessageInterface.__init__(self) + def modId(self): + return "cslt" + def saveFiles(self, root, gameInstance, modList): + mapper = gameInstance.addressMapper() + with open(os.path.join(root, 'sys/main.dol'), 'rb+') as mainDol: + # patch home price / level + homePriceVal = (60).to_bytes(2, 'big') + mainDol.seek(mapper.boomToFileAddress(0x8008fade)) + mainDol.write(homePriceVal) + mainDol.seek(mapper.boomToFileAddress(0x8010da32)) + mainDol.write(homePriceVal) + # change slurpodrome prizes to match standard mode + mainDol.seek(mapper.boomToFileAddress(0x8081b5a8)) + mainDol.write((100).to_bytes(4, 'big')) + # and coins + mainDol.seek(mapper.boomToFileAddress(0x8081b5a0)) + mainDol.write((20).to_bytes(4, 'big')) + # change dart of gold prizes to match standard mode + mainDol.seek(mapper.boomToFileAddress(0x8013cda4)) + mainDol.write(b'\x48\x00\x00\x0c') + # increase AI memory lookahead + memoryLookaheadPatch = b'\x3c\x80\x00\x02' + mainDol.seek(mapper.boomToFileAddress(0x8009e6c4)) + mainDol.write(memoryLookaheadPatch) + mainDol.seek(mapper.boomToFileAddress(0x8009d368)) + mainDol.write(memoryLookaheadPatch) + # decrease tax office tax to 5% + mainDol.seek(mapper.boomToFileAddress(0x8008fa34)) + mainDol.write(b'\x7C\x00\x1E\x70') + # change 3 star shop value to 500 + threeStarVal = 500 + for boomAddr in (0x8008f18e, 0x800ead3a, 0x800fcae2, 0x8015cf36, 0x80160ee2): + mainDol.seek(mapper.boomToFileAddress(boomAddr)) + mainDol.write(threeStarVal.to_bytes(2, 'big')) + mainDol.seek(mapper.boomToFileAddress(0x80411bb4)) + mainDol.write(threeStarVal.to_bytes(4, 'big')) + # and price + mainDol.seek(mapper.boomToFileAddress(0x8008f192)) + mainDol.write((100).to_bytes(2, 'big')) + # unlock all characters + mainDol.seek(mapper.boomToFileAddress(0x80210a4c)) + mainDol.write(b'\x3C\x60\xFF\xFF\x60\x63\xFF\xFF\x3C\x80\xFF\xFF\x60\x84\xFF\xFF\x60\x00\x00\x00') + # unlock all maps + mainDol.seek(mapper.boomToFileAddress(0x8020f8d8)) + mainDol.write(b'\x38\x60\x00\x01') + mainDol.seek(mapper.boomToFileAddress(0x8020f91c)) + mainDol.write(b'\x38\x60\x00\x01') + + def saveUiMessages(self): + return {f'files/localize/ui_message.{k}.csv': + (lambda root, gameInstance, modList, msgDict, toReplaceWith=v: replUiMessages(msgDict, UI_MSGS_ALL | toReplaceWith)) + for k,v in UI_MSGS.items()} + + def modifyArcFile(self): + localeToTitleArcFile = { + 'ja': 'files/game/game_sequence_title.arc', + 'en': 'files/game/langEN/game_sequence_title_EN.arc', + 'de': 'files/game/langDE/game_sequence_title_DE.arc', + 'su': 'files/game/langES/game_sequence_title_ES.arc', + 'fr': 'files/game/langFR/game_sequence_title_FR.arc', + 'it': 'files/game/langIT/game_sequence_title_IT.arc', + 'uk': 'files/game/langUK/game_sequence_title_UK.arc', + } + return { + arcFile: + lambda root, gameInstance, modList, arcDir, locale=locale, modpackDir=self.modpackDir(): replTitleImages(locale, arcDir, modpackDir) + for locale, arcFile in localeToTitleArcFile.items() + } + +mod = Mod() diff --git a/_modpacks/resources/cslt/cslt/DejaVuSans-Bold.ttf b/_modpacks/resources/cslt/cslt/DejaVuSans-Bold.ttf new file mode 100644 index 000000000..0f4d5e9d4 Binary files /dev/null and b/_modpacks/resources/cslt/cslt/DejaVuSans-Bold.ttf differ diff --git a/_modpacks/resources/cslt/cslt/game_sequence_title_ALL.arc/ui_corporate_ja.png b/_modpacks/resources/cslt/cslt/game_sequence_title_ALL.arc/ui_corporate_ja.png new file mode 100644 index 000000000..4d7bc3f24 Binary files /dev/null and b/_modpacks/resources/cslt/cslt/game_sequence_title_ALL.arc/ui_corporate_ja.png differ diff --git a/_modpacks/resources/cslt/cslt/game_sequence_title_ALL.arc/ui_itasuto_logo_ja.png b/_modpacks/resources/cslt/cslt/game_sequence_title_ALL.arc/ui_itasuto_logo_ja.png new file mode 100644 index 000000000..2869110af Binary files /dev/null and b/_modpacks/resources/cslt/cslt/game_sequence_title_ALL.arc/ui_itasuto_logo_ja.png differ diff --git a/_modpacks/resources/cslt/cslt/game_sequence_title_DE.arc/ui_corporate_ja.png b/_modpacks/resources/cslt/cslt/game_sequence_title_DE.arc/ui_corporate_ja.png new file mode 100644 index 000000000..170b989aa Binary files /dev/null and b/_modpacks/resources/cslt/cslt/game_sequence_title_DE.arc/ui_corporate_ja.png differ diff --git a/_modpacks/resources/cslt/modlist.txt b/_modpacks/resources/cslt/modlist.txt new file mode 100644 index 000000000..278ba1b17 --- /dev/null +++ b/_modpacks/resources/cslt/modlist.txt @@ -0,0 +1 @@ ++cslt