diff --git a/_config.yml b/_config.yml index 84b1e318..8d9ea248 100644 --- a/_config.yml +++ b/_config.yml @@ -34,8 +34,6 @@ kramdown: sass: style: compressed sass_dir: _scss -# paginate: 5 -# paginate_path: '/blog/page:num' permalink: pretty incremental: true @@ -72,127 +70,271 @@ mathjax: true # whether support mathjax # google_analytics_token: 'UA-00000000-1' # leave blank if you don't want google analytics disqus_short_name: 'retro-reversing' # leave blank if you don't want disqus -category_images: - "360": /public/consoles/Microsoft Xbox 360.png - 32x: /public/consoles/Sega 32X.png - 3d: /public/consoles/3d.png - 3do: /public/consoles/Panasonic 3DO.png - 3ds: /public/consoles/Nintendo 3DS.png - amiga: /public/consoles/Amiga.png - amstrad_cpc: /public/consoles/Amstrad CPC.png - android: /public/consoles/Android.png - arcade: /public/consoles/Arcade.png - atari_2600: /public/consoles/Atari 2600.png - atari_5200: /public/consoles/Atari 5200.png - atari_7800: /public/consoles/Atari 7800.png - atari_800: /public/consoles/Atari 800.png - atari_st: /public/consoles/Atari ST.png - atari2600: /public/consoles/Atari 2600.png - atarijaguar: /public/consoles/Atari Jaguar.png - bookazines: /public/consoles/Magazine.png - cheatcartridge: /public/consoles/Hardware.png - codemasters: /public/consoles/PC.png - colecovision: /public/consoles/Colecovision.png - commodore_64: /public/consoles/Commodore 64.png - commodore_amiga_cd32: /public/consoles/Commodore Amiga CD32.png - commodore_cdtv: /public/consoles/Commodore CDTV.png - computer_modern: /public/consoles/Computer Modern.png - computer_old_design: /public/consoles/PC.png - cracking: /public/consoles/PC.png - crossproducts: /public/consoles/Magazine.png - datel: /public/consoles/PC.png - devkit: /public/consoles/Hardware.png - disassemblers: /public/consoles/PC.png - dos: /public/consoles/PC.png - dreamcast: /public/consoles/Sega Dreamcast.png - ds: /public/consoles/Nintendo DS.png - fairchild-channel-f: /public/consoles/Fairchild Channel F.png - famicom_disk_system: /public/consoles/Nintendo Famicom Disk System.png - famicon: /public/consoles/Nintendo Famicon.png - fileformats: /public/consoles/PC.png - gameboy: /public/consoles/Nintendo Game Boy.png - gamecom: /public/consoles/Game.com.png - gamecube: /public/consoles/Nintendo Gamecube.png - gameengines: /public/consoles/PC.png - gamegear: /public/consoles/Sega Game Gear.png - games: /public/images/RetroReversingLogoSmall.png - gba: /public/consoles/Nintendo Game Boy Advance.png - gbc: /public/consoles/Nintendo Game Boy Color.png - genesis: /public/consoles/Sega Genesis.png - ghidra: /public/consoles/PC.png - handhelds: /public/consoles/Handhelds.png - hardware: /public/consoles/Hardware.png - incomplete: /public/images/RetroReversingLogoSmall.png - industry: /public/consoles/Magazine.png - intellivision: /public/consoles/Intellivision.png - introduction: /public/consoles/PC.png - jaguar: /public/consoles/Atari Jaguar.png - leak: /public/consoles/Leaks.png - lynx: /public/consoles/Atari Lynx.png - magazines: /public/consoles/Magazine.png - magnavox_odyssey_2: /public/consoles/Magnavox Odyssey 2.png - magnavox_odyssey: /public/consoles/Magnavox Odyssey.png - mastersystem: /public/consoles/Sega - Master System.png - matell_intellivision: /public/consoles/Matell Intellivision.png - maths: /public/consoles/PC.png - megadrive: /public/consoles/Sega Megadrive.png - msx: /public/consoles/PC.png - n64: /public/consoles/Nintendo 64.png - nds: /public/consoles/Nintendo DS.png - nec_pc_engine_cd: /public/consoles/Nec PC Engine CD.png - nec_pc_engine: /public/consoles/Nec PC Engine.png - nec_pc_fx: /public/consoles/Nec PC FX.png - nec_turbografx16_cd: /public/consoles/Nec TurboGrafx16 CD.png - neogeo: /public/consoles/SNK Neo-Geo.png - nes: /public/consoles/Nintendo Entertainment System.png - news: /public/consoles/Magazine.png - pc_engine_supergrafx: /public/consoles/PC Engine SuperGrafx.png - pc-88: /public/consoles/PC.png - pc: /public/consoles/PC.png - philips_cdi: /public/consoles/Philips CD-i.png - pinball: /public/consoles/Pinball.png - pokemonmini: /public/consoles/PokemonMini.png - PokemonMini: /public/consoles/PokemonMini.png - programming: /public/consoles/PC.png - ps1: /public/consoles/Sony Playstation.png - ps2: /public/consoles/Sony PlayStation 2.png - ps3: /public/consoles/Sony Playstation 3.png - ps4: /public/consoles/Sony Playstation 4.png - psp: /public/consoles/psp.svg - satellaview: /public/consoles/Nintendo Satellaview.png - saturn: /public/consoles/Sega Saturn.png - sdk: /public/consoles/PC.png - sega_mark_iii: /public/consoles/Sega Mark lll.png - sega_sc3000: /public/consoles/Sega SC-3000.png - segacd: /public/consoles/SEGA CD.png - sg1000: /public/consoles/Sega SG-1000.png - sinclair_zx_spectrum: /public/consoles/Sinclair ZX Spectrum.png - snes: /public/consoles/SNES-USA.png - snk_neo_geo_cd: /public/consoles/SNK Neo-Geo CD.png - snk_neo_geo_pocket_color: /public/consoles/SNK Neo Geo Pocket Color.png - snk_neo_geo_pocket: /public/consoles/SNK Neo Geo Pocket.png - snsystems: /public/consoles/Magazine.png - sony_playstation_2: /public/consoles/Sony PlayStation 2.png - sony_playstation_3: /public/consoles/Sony Playstation 3.png - sony_playstation: /public/consoles/Sony Playstation.png - sony_psvita: /public/consoles/Sony PSVita.png - sourcecode: /public/consoles/PC.png - super_nintendo_entertainment_system: /public/consoles/Super Nintendo Entertainment System.png - switch: /public/consoles/Nintendo Switch.png - symbols: /public/consoles/PC.png - tools: /public/consoles/PC.png - turbografx16: /public/consoles/TurboGrafx-16.png - tutorial: /public/consoles/PC.png - vectrex: /public/consoles/GCE Vectrex.png - virtualboy: /public/consoles/Nintendo Virtual Boy.png - vita: /public/consoles/Vita.png - wii: /public/consoles/Nintendo Wii.png - wiiu: /public/consoles/Nintendo WiiU.png - wonderswan_color: /public/consoles/WonderSwan Color.png - wonderswan: /public/consoles/WonderSwan.png - xbox: /public/consoles/Microsoft Xbox.png - xbox360: /public/consoles/Microsoft Xbox 360.png - zxspectrum: /public/consoles/Sinclair ZX Spectrum.png +category: + "360": + title: Microsoft Xbox 360 + image: /public/consoles/Microsoft Xbox 360.png + "32x": + title: Sega 32X + image: /public/consoles/Sega 32X.png + "3d": + title: 3D + image: /public/consoles/3d.png + "3do": + title: Panasonic 3DO + image: /public/consoles/Panasonic 3DO.png + "3ds": + title: Nintendo 3DS + image: /public/consoles/Nintendo 3DS.png + "amiga": + title: Amiga + image: /public/consoles/Amiga.png + "amstrad_cpc": + title: Amstrad CPC + image: /public/consoles/Amstrad CPC.png + "android": + title: Android + image: /public/consoles/Android.png + "arcade": + title: Arcade + image: /public/consoles/Arcade.png + "bookazines": + title: Bookazines + image: /public/consoles/Magazine.png + "cheatcartridge": + title: Cheat Cartridge + image: /public/consoles/Hardware.png + "codemasters": + title: Codemasters + image: /public/consoles/PC.png + "colecovision": + title: Colecovision + image: /public/consoles/Colecovision.png + "cracking": + title: Cracking + image: /public/consoles/PC.png + "crossproducts": + title: Cross Products + image: /public/consoles/Magazine.png + "datel": + title: Datel + image: /public/consoles/PC.png + "devkit": + title: Development Hardware + image: /public/consoles/Hardware.png + "disassemblers": + title: Disassemblers + image: /public/consoles/PC.png + "dos": + title: DOS + image: /public/consoles/PC.png + "dreamcast": + title: Sega Dreamcast + image: /public/consoles/Sega Dreamcast.png + "ds": + title: Nintendo DS + image: /public/consoles/Nintendo DS.png + "fairchild-channel-f": + title: Fairchild Channel F + image: /public/consoles/Fairchild Channel F.png + "famicom_disk_system": + title: Nintendo Famicom Disk System + image: /public/consoles/Nintendo Famicom Disk System.png + "famicon": + title: Nintendo Famicon + image: /public/consoles/Nintendo Famicon.png + "fileformats": + title: File Formats + image: /public/consoles/PC.png + "gameboy": + title: Nintendo Game Boy + image: /public/consoles/Nintendo Game Boy.png + "gamecom": + title: Game.com + image: /public/consoles/GameCom.png + "gamecube": + title: Nintendo Gamecube + image: /public/consoles/Nintendo Gamecube.png + "gameengines": + title: Game Engines + image: /public/consoles/PC.png + "gamegear": + title: Sega Game Gear + image: /public/consoles/Sega Game Gear.png + "games": + title: Games + image: /public/images/RetroReversingLogoSmall.png + "gba": + title: Nintendo Game Boy Advance + image: /public/consoles/Nintendo Game Boy Advance.png + "gbc": + title: Nintendo Game Boy Color + image: /public/consoles/Nintendo Game Boy Color.png + "genesis": + title: Sega Genesis + image: /public/consoles/Sega Genesis.png + "ghidra": + title: Ghidra + image: /public/consoles/PC.png + "handhelds": + title: Handhelds + image: /public/consoles/Handhelds.png + "hardware": + title: Hardware + image: /public/consoles/Hardware.png + "incomplete": + title: Incomplete + image: /public/images/RetroReversingLogoSmall.png + "industry": + title: Industry + image: /public/consoles/Magazine.png + "intellivision": + title: Intellivision + image: /public/consoles/Intellivision.png + "introduction": + title: Introduction + image: /public/consoles/PC.png + "jaguar": + title: Atari Jaguar + image: /public/consoles/Atari Jaguar.png + "leak": + title: Leak + image: /public/consoles/Leaks.png + "lynx": + title: Atari Lynx + image: /public/consoles/Atari Lynx.png + "magazines": + title: Magazines + image: /public/consoles/Magazine.png + "mastersystem": + title: Sega Master System + image: /public/consoles/Sega - Master System.png + "maths": + title: Maths + image: /public/consoles/PC.png + "megadrive": + title: Sega MegaDrive + image: /public/consoles/Sega Megadrive.png + "msx": + title: MSX + image: /public/consoles/PC.png + "n64": + title: Nintendo 64 + image: /public/consoles/Nintendo 64.png + "pcengine": + title: NEC PC Engine + image: /public/consoles/Nec PC Engine.png + "pcfx": + title: NEC PC FX + image: /public/consoles/Nec PC FX.png + "neogeo": + title: SNK Neo-Geo + image: /public/consoles/SNK Neo-Geo.png + "nes": + title: Nintendo Entertainment System + image: /public/consoles/Nintendo Entertainment System.png + "news": + title: News + image: /public/consoles/Magazine.png + "pc-88": + title: PC-88 + image: /public/consoles/PC.png + "pc": + title: PC + image: /public/consoles/PC.png + "philips_cdi": + title: Philips CD-i + image: /public/consoles/Philips CD-i.png + "pinball": + title: Pinball + image: /public/consoles/Pinball.png + "pokemonmini": + title: Pokemon Mini + image: /public/consoles/PokemonMini.png + "programming": + title: Programming + image: /public/consoles/PC.png + "ps1": + title: Sony Playstation + image: /public/consoles/Sony Playstation.png + "ps2": + title: Sony PlayStation 2 + image: /public/consoles/Sony PlayStation 2.png + "ps3": + title: Sony Playstation 3 + image: /public/consoles/Sony Playstation 3.png + "ps4": + title: Sony Playstation 4 + image: /public/consoles/Sony Playstation 4.png + "psp": + title: PSP + image: /public/consoles/psp.svg + "satellaview": + title: Nintendo Satellaview + image: /public/consoles/Nintendo Satellaview.png + "saturn": + title: Sega Saturn + image: /public/consoles/Sega Saturn.png + "sdk": + title: SDK + image: /public/consoles/SDK.png + "segacd": + title: SEGA CD + image: /public/consoles/SEGA CD.png + "sg1000": + title: Sega SG-1000 + image: /public/consoles/Sega SG-1000.png + "snes": + title: Super Nintendo + image: /public/consoles/SNES-USA.png + "snsystems": + title: SN Systems + image: /public/consoles/Magazine.png + "sourcecode": + title: Source Code + image: /public/consoles/SourceCode.png + "switch": + title: Nintendo Switch + image: /public/consoles/Nintendo Switch.png + "symbols": + title: Symbols + image: /public/consoles/PC.png + "tools": + title: Tools + image: /public/consoles/PC.png + "turbografx16": + title: TurboGrafx-16 + image: /public/consoles/TurboGrafx-16.png + "tutorial": + title: Tutorial + image: /public/consoles/PC.png + "vectrex": + title: GCE Vectrex + image: /public/consoles/GCE Vectrex.png + "virtualboy": + title: Nintendo Virtual Boy + image: /public/consoles/Nintendo Virtual Boy.png + "vita": + title: Vita + image: /public/consoles/Vita.png + "wii": + title: Nintendo Wii + image: /public/consoles/Nintendo Wii.png + "wiiu": + title: Nintendo WiiU + image: /public/consoles/Nintendo WiiU.png + "wonderswan": + title: WonderSwan + image: /public/consoles/WonderSwan.png + "xbox": + title: Microsoft Xbox + image: /public/consoles/Microsoft Xbox.png + "xbox360": + title: Microsoft Xbox 360 + image: /public/consoles/Microsoft Xbox 360.png + "zxspectrum": + title: Sinclair ZX Spectrum + image: /public/consoles/Sinclair ZX Spectrum.png references: diff --git a/valid-tags.json b/_data/valid-tags.json similarity index 95% rename from valid-tags.json rename to _data/valid-tags.json index c02fc582..e9d21677 100644 --- a/valid-tags.json +++ b/_data/valid-tags.json @@ -1,9 +1,9 @@ { "summary": { - "totalFiles": 306, - "filesWithTags": 306, - "uniqueTags": 113, - "generatedAt": "2026-03-31T11:23:20.560Z" + "totalFiles": 300, + "filesWithTags": 300, + "uniqueTags": 108, + "generatedAt": "2026-04-11T15:02:54.945Z" }, "tags": { "2d": 1, @@ -13,9 +13,8 @@ "3ds": 8, "amiga": 1, "android": 3, - "arcade": 1, + "arcade": 2, "assembly": 4, - "assets": 1, "atari": 3, "bookazines": 1, "books": 2, @@ -36,8 +35,8 @@ "dos": 4, "dreamcast": 8, "ds": 12, - "emulation": 1, - "fileformats": 14, + "emulation": 2, + "fileformats": 15, "gameboy": 20, "gamecom": 1, "gamecube": 10, @@ -48,10 +47,10 @@ "gdb": 2, "ghidra": 4, "gigaleak": 2, - "graphics": 2, + "graphics": 1, "hacking": 1, "handhelds": 4, - "hardware": 39, + "hardware": 38, "homebrew": 2, "incomplete": 1, "industry": 21, @@ -59,11 +58,10 @@ "ios": 1, "ique": 2, "jaguar": 1, - "leak": 51, + "leak": 45, "leaks": 1, "legal": 1, "magazines": 4, - "mario": 3, "mastersystem": 4, "maths": 4, "megadrive": 6, @@ -71,17 +69,16 @@ "middleware": 11, "msx": 3, "n64": 32, - "nds": 1, "nes": 15, "news": 2, - "nintendo": 2, + "nintendo": 3, "pc": 13, "pc-88": 1, "pc-engine": 1, "pokemon": 1, "pokemonmini": 3, "programming-languages": 1, - "ps1": 18, + "ps1": 17, "ps2": 10, "ps3": 3, "ps4": 2, @@ -90,21 +87,19 @@ "radare2": 1, "reverseengineering": 5, "reversingemulator": 5, - "saturn": 18, - "sdk": 49, - "sega": 28, + "saturn": 17, + "sdk": 48, + "sega": 27, "segasaturn": 1, "sg1000": 1, - "smb3": 1, - "snes": 30, + "snes": 25, "snsystems": 12, "software": 5, - "sourcecode": 27, + "sourcecode": 24, "starfox2": 1, "superfx": 1, - "supermarioworld": 1, "switch": 3, - "symbols": 14, + "symbols": 13, "tools": 18, "tutorial": 10, "tutorials": 1, @@ -323,6 +318,12 @@ "ios", "introduction" ], + "categories/games/DebugSymbolsInGames.md": [ + "symbols", + "debug", + "games", + "sdk" + ], "categories/games/FileFormats.md": [ "fileformats" ], @@ -335,12 +336,6 @@ "categories/games/Games.md": [ "games" ], - "categories/games/debugSymbols.md": [ - "symbols", - "debug", - "games", - "sdk" - ], "categories/hardware/CheatCartridges.md": [ "hardware" ], @@ -532,6 +527,11 @@ "3d", "introduction" ], + "pages/SourceCode/mame/MAMESourceCode.md": [ + "sourcecode", + "emulation", + "arcade" + ], "pages/consoles/3ds/3DSDevkitHardware.md": [ "3ds", "devkit", @@ -605,7 +605,6 @@ ], "pages/consoles/ds/DSHomebrew.md": [ "ds", - "nds", "homebrew", "3ds" ], @@ -919,11 +918,6 @@ "sdk", "symbols" ], - "pages/consoles/ps1/PS1_Radare2.md": [ - "ps1", - "sdk", - "symbols" - ], "pages/consoles/ps1/PSYQSDKSetup.md": [ "ps1", "reverseengineering", @@ -1033,11 +1027,6 @@ "sega", "segasaturn" ], - "pages/consoles/saturn/SaturnTransparencyEffects.md": [ - "hardware", - "saturn", - "sega" - ], "pages/consoles/saturn/SegaSaturnArtistTools.md": [ "tools", "saturn", @@ -1330,6 +1319,12 @@ "sourcecode", "tools" ], + "pages/leaks/Nintendo/GigaleakNEWS11.md": [ + "nintendo", + "gigaleak", + "snes", + "fileformats" + ], "pages/leaks/Nintendo/MarioKart.md": [ "snes", "leak", @@ -1381,48 +1376,15 @@ "snes", "leak" ], - "pages/leaks/Nintendo/SuperMarioAllStarsArt.md": [ - "snes", - "leak", - "mario", - "graphics", - "gigaleak", - "all-stars" - ], "pages/leaks/Nintendo/SuperMarioCollection.md": [ "snes", "leak", "sourcecode" ], - "pages/leaks/Nintendo/SuperMarioCollectionAsm0.md": [ - "snes", - "leak", - "sourcecode", - "mario", - "assets" - ], - "pages/leaks/Nintendo/SuperMarioCollectionMario3Branch.md": [ - "snes", - "leak", - "sourcecode", - "mario", - "smb3" - ], - "pages/leaks/Nintendo/SuperMarioCollectionNuBranch.md": [ - "snes", - "leak", - "sourcecode" - ], "pages/leaks/Nintendo/SuperMarioKart2DArt.md": [ "snes", "leak" ], - "pages/leaks/Nintendo/SuperMarioWorldAllStarsBranch.md": [ - "snes", - "leak", - "sourcecode", - "supermarioworld" - ], "pages/leaks/Nintendo/WildTrax.md": [ "snes", "leak", @@ -1452,10 +1414,6 @@ "leak", "sourcecode" ], - "pages/leaks/Nintendo/ZeldaSNES2DArt.md": [ - "snes", - "leak" - ], "pages/leaks/NintendoLeaks.md": [ "leak", "nintendo", diff --git a/_includes/homepage/head-console-list.html b/_includes/homepage/head-console-list.html new file mode 100644 index 00000000..b3a7f224 --- /dev/null +++ b/_includes/homepage/head-console-list.html @@ -0,0 +1,33 @@ +
+ +
\ No newline at end of file diff --git a/_includes/placeholder-post-image.html b/_includes/placeholder-post-image.html index a93faad7..927cbca5 100644 --- a/_includes/placeholder-post-image.html +++ b/_includes/placeholder-post-image.html @@ -11,15 +11,20 @@ {% else %} {% assign placeholder_category = placeholder_category_raw %} {% endif %} - {% assign placeholder_category_image = site.category_images[placeholder_category] %} + {% assign placeholder_category_meta = site.category[placeholder_category] %} + {% if placeholder_category_meta == nil %} + {% assign placeholder_category_meta = site.category[placeholder_category | downcase] %} + {% endif %} + {% assign placeholder_category_image = placeholder_category_meta.image %} + {% assign placeholder_category_title = placeholder_category_meta.title | default: placeholder_category | replace: '-', ' ' %}
{% if placeholder_category %} {% if placeholder_category_image and placeholder_category_image != '/public/images/RetroReversingLogoSmall.png' %} - {{ placeholder_category | replace: '-', ' ' }} + {{ placeholder_category_title }} {% endif %} - {{ placeholder_category | replace: '-', ' ' }} + {{ placeholder_category_title }} {% endif %} diff --git a/_includes/post-list-cards.html b/_includes/post-list-cards.html index 204882e3..8b0a0e8c 100644 --- a/_includes/post-list-cards.html +++ b/_includes/post-list-cards.html @@ -13,10 +13,14 @@ {% else %} {% assign page_category = page_category_raw %} {% endif %} + {% assign page_category_meta = site.category[page_category] %} + {% if page_category_meta == nil %} + {% assign page_category_meta = site.category[page_category | downcase] %} + {% endif %}
- {% if page_category and site.category_images[page_category] %} - {{ page_category }} + {% if page_category and page_category_meta and page_category_meta.image %} + {{ page_category_meta.title | default: page_category }} {% elsif post.thumbnail %} {% else %} diff --git a/_includes/posts/post-header.html b/_includes/posts/post-header.html index d2c4781b..12d2101f 100644 --- a/_includes/posts/post-header.html +++ b/_includes/posts/post-header.html @@ -6,11 +6,15 @@ {% else %} {% assign page_category = page_category_raw %} {% endif %} + {% assign page_category_meta = site.category[page_category] %} + {% if page_category_meta == nil %} + {% assign page_category_meta = site.category[page_category | downcase] %} + {% endif %}
{% if page.thumbnail %} Post thumbnail - {% elsif site.category_images[page_category] %} - {{ page_category }} + {% elsif page_category_meta and page_category_meta.image %} + {{ page_category_meta.title | default: page_category }} {% else %} Retro reversing logo {% endif %} diff --git a/_layouts/home.html b/_layouts/home.html index ffd6b050..16e0871c 100644 --- a/_layouts/home.html +++ b/_layouts/home.html @@ -12,27 +12,7 @@
- + {% include_cached homepage/head-console-list.html %}
diff --git a/categories/consoles/GameGear.md b/categories/consoles/GameGear.md index 659146b4..f39787f7 100644 --- a/categories/consoles/GameGear.md +++ b/categories/consoles/GameGear.md @@ -152,6 +152,7 @@ Iff2Bin | AIFF to raw binary converter IFF2BIN v1.2 (26MAR93) - (C) 1992 Sega o --- ## File Formats +The table below lists the relevant entries. Name | Description ---|--- diff --git a/categories/consoles/PS1.md b/categories/consoles/PS1.md index cc120dde..00bf0ac8 100644 --- a/categories/consoles/PS1.md +++ b/categories/consoles/PS1.md @@ -20,6 +20,7 @@ redirect_from: - /Evolution-of-Playstation-Games - /inside-playstation - /ps1/ + - /ps1-radare2 videocarousel: - title: Video 1 image: https://img.youtube.com/vi/MPXpH2hxuNc/hqdefault.jpg @@ -236,6 +237,29 @@ To create 3D models for PlayStation 1 games the following tools are known to hav To create textures (and therefore sprites) the following tools are known to have been used: * **Adobe Photoshop** - A plugin was available to directly edit PlayStation TIM files without requiring conversion [^2]. +--- +# Reverse Engineering PS1 Games + +## Radare2 +First you need to find the executable on the PS1 disc image, it will be named after the unique Sony Code e.g `SLES_032.85`. + +Then open it with radare2 like so: +```bash +r2 ./SLES_032.85 +``` + +### Fix the PS1 Offset in r2 +To Disassemble PS1 Binary files (MIPS little endian) you need to map a file at offset 0x80010000 like so: +``` +o ./SLES_032.85 0x80010000 rwx +``` +Replace SLES_032.85 with the location of your own PSX executable. + +Now we want to analyze all the functions in the executable like so: +``` +aaaa +``` + --- # All Posts
diff --git a/categories/consoles/Saturn.md b/categories/consoles/Saturn.md index a8e604d9..4e0b37e3 100644 --- a/categories/consoles/Saturn.md +++ b/categories/consoles/Saturn.md @@ -21,6 +21,7 @@ redirect_from: - /segasaturn - /ss - /saturn/ + - /saturn-transparency tags: - saturn --- @@ -47,11 +48,7 @@ For a detailed breakdown of the password system and the newly discovered codes, {% include_cached link-to-other-site.html url="https://32bits.substack.com/p/under-the-microscope-the-lost-world" description="Bo Bayles provides a comprehensive look at cracking the password encryption in The Lost World: Jurassic Park, revealing secret debug menus and arcade asset galleries hidden for nearly 30 years." title="Under the Microscope: The Lost World – Jurassic Park" %} -## Sega Saturn Graphics -There are some myths around the Sega Saturn's graphical abilities, such as the lack of transparency support, that can be proven false with some clever programming techniques. - -{% include_cached link-to-other-post.html post="/saturn-transparency" description="For details on Transparency effects in Sega Saturn games check out this post." %} - +--- ## Sega File Formats The Sega Saturn was the second released Sega console which used CD-ROM to distribute its games, one of the benefits of the CD-ROM format is many times more space than a cartridge. One of the downsides compared to cartridges however was the slower loading times as reading from a CD is much slower than reading from a ROM chip. @@ -111,6 +108,35 @@ One of the best ways to get started understanding how games were made using the {% include_cached link-to-other-post.html post="/sega-saturn-compiling-samples" description="For more information on Official SDK for the Saturn check out this post." %} +--- +# Sega Saturn Graphics +There are some myths around the Sega Saturn's graphical abilities, such as the lack of transparency support, that can be proven false with some clever programming techniques. + +## Sega Saturn Alpha Transparency Effects +The Sega Saturn's unique way of drawing 3D vertices made life very difficult for developers to implement Alpha Transparency techniques such as objects fading into view. +Unlike the Sony PlayStation or Nintendo 64, the Saturn's VDP1 graphics chip did not render true 3D polygons. Instead, it rendered 3D objects as **distorted 2D sprites** (quads). When developers attempted to apply standard alpha transparency to these overlapping, distorted sprites, it caused massive visual corruption and Z-sorting errors. +This is why contemporary Saturn games like **Daytona USA** had to rely on harsh "pop-in" for distant scenery rather than smooth fading. + +### Sonic R's "Impossible" Fading +[GameHut](https://www.youtube.com/watch?v=FdD0GvVRSMc) has a deep dive into the coding secrets behind the distance fading and alpha transparency effects used in the Sega Saturn game, Sonic R. It covers the specific rendering techniques and hardware workarounds that Traveller's Tales employed to achieve these seemingly impossible 3D graphical effects on 32-bit architecture. + + + +To make the flat 2D sprites look like 3D objects with simulated volume and lighting, Traveller's Tales utilized **Gouraud shading**. + +The core problem was that applying Gouraud shading consumed the exact same hardware color calculation pathways needed to render transparency. A developer could have dynamic lighting *or* transparency, but the Saturn could not natively handle both on a single sprite at the same time. + +#### Stripping the Lighting +To fade an object in from a distance, Burton's engine first had to mathematically strip away its Gouraud shading to free up the color registers. However, simply turning off the lighting would cause a jarring visual pop on the textures. +To mask this transition, the engine stored and calculated three distinct sets of lighting data simultaneously. +As an object entered the draw distance, the game bridged the unlit texture with the shaded texture, creating a smooth visual transition before the full lighting was officially disabled. + +#### The 8-Register Fade +Once the Gouraud shading was successfully stripped from the distant polygons, the hardware pathways were freed up. The engine then hijacked the Saturn's 8 available color calculation ratio hardware registers. By tying these 8 transparency levels to the in-game camera's Z-depth (distance), the now-unlit polygons could cycle through 8 distinct stages of alpha blending. + +### The Result +As a piece of the track approaches the camera, it smoothly fades into existence through 8 steps of transparency. Once it becomes fully opaque and gets close enough to the player, the engine dynamically reapplies the Gouraud shading. This two-part swap happens entirely in the background, tricking the player's eye and creating a smooth draw distance that most developers considered fundamentally impossible on the Sega Saturn architecture. + ---
{% include console.html %} diff --git a/categories/misc/Bookazines.md b/categories/misc/Bookazines.md index f87c8754..faad6640 100644 --- a/categories/misc/Bookazines.md +++ b/categories/misc/Bookazines.md @@ -26,6 +26,7 @@ Many of these were published with topics related to the Games Industry such as 3 --- # Programming Bookazines +The table below lists the relevant entries. Title | Publisher | Notes ---|---|--- @@ -72,6 +73,7 @@ The UK Magazine **GamesTM** had a section dedicated to retro games every month, There were 10 volumes published from 2011 until 2021. ### Behind The Scenes +The table below lists the relevant entries. Game | Platform | Issue # | Notes ---|---|---|--- @@ -86,6 +88,7 @@ Star Trek Voyager Elite Force | | 9 | Ghostbusters 2 | | 9 | ### Interviews +The table below lists the relevant entries. Name | Company | Issue | Notes ---|---|---|--- @@ -115,6 +118,7 @@ They also managed to play around with one of the first SNES development kits in --- # Digital Art Bookazines +The table below lists the relevant entries. Title | Publisher | Notes ---|---|--- diff --git a/categories/misc/Industry.md b/categories/misc/Industry.md index 37e82fcc..78e7edd4 100644 --- a/categories/misc/Industry.md +++ b/categories/misc/Industry.md @@ -172,6 +172,7 @@ This is a collection of known interviews with game developers who developed reta ## Commodore 64 +The table below lists the relevant entries. Source | Developer | Games | Description ---|---|---|--- @@ -181,6 +182,7 @@ Retro Gamer issue 95 | Shaun Hollingworth | **Firelord** | Shaun Hollingworth wo --- ## Nintendo Entertainment System (NES) +The table below lists the relevant entries. Source | Developer | Games | Description ---|---|---|--- @@ -188,6 +190,7 @@ Retro Gamer issue 11 | Color Dreams/Wisdom Tree | Bible Adventures | This interv --- ## Nintendo 64 +The table below lists the relevant entries. Source | Developer | Games | Description ---|---|---|--- @@ -196,6 +199,7 @@ Retro Gamer issue 9 | David Doak | GoldenEye 007 | Doak is known for his work on --- ## Nintendo Wii +The table below lists the relevant entries. Source | Developer | Games | Description ---|---|---|--- @@ -204,6 +208,7 @@ Retro Gamer issue 45 | Yuji Naka and Takashi Izuka | NiGHTS into Dreams, Journey --- ## Xbox consoles +The table below lists the relevant entries. Source | Developer | Games | Description ---|---|---|--- diff --git a/categories/misc/Magazines.md b/categories/misc/Magazines.md index 73ed73c4..362410d3 100644 --- a/categories/misc/Magazines.md +++ b/categories/misc/Magazines.md @@ -709,6 +709,7 @@ Web Designer issue 101 also had a behind the scenes look at the website for **My **Web Techniques** was a US magazine that started in February 1996 and ran until February 2002 when it rebranded as **New Architect**. ### Relevant Articles +The table below lists the relevant entries. Issue Date | Name | Author ---|---|--- @@ -746,6 +747,7 @@ VOL 13; NUMBER 21 (1994) | Power Programming: Real Games for Windows | Thielen, VOL 15; NUMBER 14 (1996) | Power Programming: Using Microsoft's high-speed Direct Draw API in an arcade-style action game | Grell, G. | ## PC Plus +The table below lists the relevant entries. Issue # | Title | Author | Notes ---|---|---|--- diff --git a/pages/SourceCode/DecompiledRetailConsoleGames.md b/pages/SourceCode/DecompiledRetailConsoleGames.md index 12a6acf7..17666f0b 100644 --- a/pages/SourceCode/DecompiledRetailConsoleGames.md +++ b/pages/SourceCode/DecompiledRetailConsoleGames.md @@ -36,6 +36,7 @@ To be included in this list the project must have decompiled or disassembled at Nintendo systems are by far the most popular for reverse engineering projects, especially related to 1st party titles such as Mario, Zelda and Pokemon. ## Nintendo Entertainment System (NES) +The table below lists the relevant entries. | Name | Project Type | Mapper | Status | ---- | ---- | --- | --- @@ -81,6 +82,7 @@ Nintendo systems are by far the most popular for reverse engineering projects, e --- ## Super Nintendo (SNES) +The table below lists the relevant entries. | Name | Project Type | | ---- | ---- | @@ -179,6 +181,7 @@ Name | Project Type | Status --- ## Nintendo GameCube +The table below lists the relevant entries. Name | Project Type | Status ---- | ---- | ---- @@ -223,6 +226,7 @@ Name | Project Type | Status --- ## Nintendo Wii +The table below lists the relevant entries. Name | Project Type | Status ---- | ---- | ---- @@ -278,6 +282,7 @@ Name | Project Type --- ## Game Boy Color +The table below lists the relevant entries. Name | Project Type ---- | ---- @@ -294,6 +299,7 @@ Name | Project Type --- ## Game Boy Advance +The table below lists the relevant entries. Name | Project Type | Status ---- | ---- | ---- @@ -430,6 +436,7 @@ Name | Project Type Compared to the other systems, Sony doesn't have many decompilation projects, mainly due to the higher complexity of the games developed by the PS1 era, requiring much larger teams to create the games in the first place. ## PlayStation 1 +The table below lists the relevant entries. Name | Project Type | Status ---- | ---- | ---- @@ -541,6 +548,7 @@ There are only a handful of reverse engineered games for Microsoft game consoles --- ## PC (Windows) +The table below lists the relevant entries. Name | Project Type | Status ---- | ---- | ---- diff --git a/pages/consoles/dreamcast/Chicken Run Source Code.md b/pages/consoles/dreamcast/Chicken Run Source Code.md index e7ae3d2a..dd2213d1 100644 --- a/pages/consoles/dreamcast/Chicken Run Source Code.md +++ b/pages/consoles/dreamcast/Chicken Run Source Code.md @@ -719,6 +719,7 @@ u16VECTOR | | # PlayStation 1 ## PS1 GameShark cheats +The table below lists the relevant entries. Name | Code --- | --- diff --git a/pages/consoles/dreamcast/DreamcastWindowsCESDK.md b/pages/consoles/dreamcast/DreamcastWindowsCESDK.md index b153ae39..43302f4e 100644 --- a/pages/consoles/dreamcast/DreamcastWindowsCESDK.md +++ b/pages/consoles/dreamcast/DreamcastWindowsCESDK.md @@ -456,6 +456,7 @@ The `VMIMIME` library is used to connect between the main game code and the VMU --- # Glossary +The table below lists the relevant entries. Name | Meaning ---|--- diff --git a/pages/consoles/ds/DSHomebrew.md b/pages/consoles/ds/DSHomebrew.md index 18e8df8b..090dd904 100644 --- a/pages/consoles/ds/DSHomebrew.md +++ b/pages/consoles/ds/DSHomebrew.md @@ -2,7 +2,6 @@ layout: post tags: - ds -- nds - homebrew title: Nintendo DS Homebrew category: ds diff --git a/pages/consoles/ds/DSOfficialSDK.md b/pages/consoles/ds/DSOfficialSDK.md index 046f382b..d9ea7ac2 100644 --- a/pages/consoles/ds/DSOfficialSDK.md +++ b/pages/consoles/ds/DSOfficialSDK.md @@ -196,6 +196,7 @@ nitro/hw/common/armArch.h | --- ## ARM7 Headers +The table below lists the relevant entries. Name | Description ---|--- @@ -213,6 +214,7 @@ nitro/hw/ARM7/ioreg_GX.h | nitro/hw/ARM7/ioreg_SPI.h | ## ARM9 Headers +The table below lists the relevant entries. Name | Description ---|--- @@ -253,6 +255,7 @@ nitro/mi/init.h | nitro/mi/exMemory.h | ## Misc Headers +The table below lists the relevant entries. Name | Description ---|--- diff --git a/pages/consoles/gamecube/GamecubeFileFormats.md b/pages/consoles/gamecube/GamecubeFileFormats.md index 8933b9b5..9c1b1ece 100644 --- a/pages/consoles/gamecube/GamecubeFileFormats.md +++ b/pages/consoles/gamecube/GamecubeFileFormats.md @@ -20,6 +20,7 @@ updatedAt: '2020-04-25' --- ## Emulation File Formats +The table below lists the relevant entries. Extension | Description --- | --- @@ -28,6 +29,7 @@ iso | Disc Image (Uncompressed) ## Formats Used on Disc +The table below lists the relevant entries. Extension | Description --- | --- @@ -44,6 +46,7 @@ Extension | Description Documentation: ## Games which have TGC files (Mostly demos): +The table below lists the relevant entries. Game | Description --- | --- @@ -57,6 +60,7 @@ Pokémon Colosseum Bonus Disc (US Version) | Contains pokedownload.tgc for sendi More information: http://www.emutalk.net/threads/33945-Naruto-fpk-format ## Games which have FPK files: +The table below lists the relevant entries. Game | Description --- | --- diff --git a/pages/consoles/n64/OmanArchive.md b/pages/consoles/n64/OmanArchive.md index 4c3148a3..1ad1afee 100644 --- a/pages/consoles/n64/OmanArchive.md +++ b/pages/consoles/n64/OmanArchive.md @@ -246,6 +246,7 @@ YIELD.TXT | Notes on What Yield is (e.g `osSpTaskYield`) One of the most interesting documents in this list that can be easily read is `SWARCH.PS` as it contains plenty of interesting information about how the software architecture works. ## HW - Hardware Documentation +The table below lists the relevant entries. Name | Description ---|--- diff --git a/pages/consoles/n64/SN64_SDK.md b/pages/consoles/n64/SN64_SDK.md index e9704fbe..c98c204d 100644 --- a/pages/consoles/n64/SN64_SDK.md +++ b/pages/consoles/n64/SN64_SDK.md @@ -58,12 +58,14 @@ These files are legitimately useless, why? Well they should list the contents of `00_INDEX.TXT` ## Documentation Files +The table below lists the relevant entries. Name | Description ---|--- README.zip | Contains documentation for the Psy-Q debugger (Version 2, Release 10, Patch Level 6) in TXT and RTF formats ## Windows Executables +The table below lists the relevant entries. Name | Description ---|--- diff --git a/pages/consoles/n64/iQueSDK.md b/pages/consoles/n64/iQueSDK.md index 19507447..5479cb47 100644 --- a/pages/consoles/n64/iQueSDK.md +++ b/pages/consoles/n64/iQueSDK.md @@ -116,6 +116,7 @@ ide/diag.h | Common structure definitions and global variables for BOSTON diags ide/ide.h | Data structures used by the Interactive Diagnostic Environment interpreter. ### sys - System headers +The table below lists the relevant entries. Header File Name | Description ---|--- diff --git a/pages/consoles/ps1/PS1Symbols.md b/pages/consoles/ps1/PS1Symbols.md index 46c7148a..cd3a45f3 100644 --- a/pages/consoles/ps1/PS1Symbols.md +++ b/pages/consoles/ps1/PS1Symbols.md @@ -32,6 +32,7 @@ You can get the information from a .SYM file using **DUMPSYM.EXE** from the PSQ Also the integration of .sym files into the No$PSX emulator is documented in the following forum thread: http://www.psxdev.net/forum/viewtopic.php?f=76&t=1318 ## Games with SYM Symbol file +The table below lists the relevant entries. Game Name | Symbol File | Genre | Youtube --- | --- | --- | --- @@ -83,6 +84,7 @@ Who Wants to Be a Millionaire 3rd Edition | /MIL3.SYM | Quiz | https://www.youtu ## Demos and Betas with SYM Symbol file +The table below lists the relevant entries. Game Name | Demo CD | Symbol File --- | --- | --- @@ -117,6 +119,7 @@ Address Names alphabetically These files contain all the information you need to get the full debug symbols back for a game! You just need to parse them and add them to your disassembler of choice (e.g Radare2 or IDA Pro) ## Games with Linker Map file +The table below lists the relevant entries. Game Name | Map File --- | --- @@ -134,6 +137,7 @@ True Pinball | Contains PINBALL.MAP but doesn't seem to contain function names ## Demos and Betas with Linker Map file +The table below lists the relevant entries. Game Name | Demo CD | Symbol File --- | --- diff --git a/pages/consoles/ps1/PS1_Radare2.md b/pages/consoles/ps1/PS1_Radare2.md deleted file mode 100644 index 1e60d543..00000000 --- a/pages/consoles/ps1/PS1_Radare2.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -layout: post -tags: -- ps1 -- sdk -- symbols -title: PSX Analysis with Radare2 -category: ps1 -image: /public/ps1radare2.png -permalink: /ps1-radare2 -breadcrumbs: - - name: Home - url: / - - name: Sony Playstation 1 - url: /ps1 - - name: PS1 Binary Analysis with Radare2 - url: # -recommend: ps1 -editlink: /consoles/ps1/PS1_Radare2.md ---- - -This guide will presume you have already installed the radare2 suite of binary analysis tools on your computer. - -# Opening a PSX executable in radare2 -First lets run radare2: -```bash -r2 ./SLES_032.85 -``` - -To Disassemble PS1 Binary files (MIPS little endian) you need to map a file at offset 0x80010000 like so: -``` -o ./SLES_032.85 0x80010000 rwx -``` -Replace SLES_032.85 with the location of your own PSX executable. - -Now we want to analyze all the functions in the executable like so: -``` -aaaa -``` - diff --git a/pages/consoles/ps1/psx-exe.md b/pages/consoles/ps1/psx-exe.md index 80de220e..afa9c363 100644 --- a/pages/consoles/ps1/psx-exe.md +++ b/pages/consoles/ps1/psx-exe.md @@ -34,6 +34,7 @@ Some Information about the format: * ELF2EXE source code - https://github.com/cetygamer/psxsdk/blob/master/tools/elf2exe.c # EXE Header +The table below lists the relevant entries. Name | Length | Description --- | --- | --- diff --git a/pages/consoles/ps2/PS2SDK.md b/pages/consoles/ps2/PS2SDK.md index 7458de94..116ee4c2 100644 --- a/pages/consoles/ps2/PS2SDK.md +++ b/pages/consoles/ps2/PS2SDK.md @@ -34,6 +34,7 @@ First known version: **0.3.0** [^2] Updates were provided to licenced PlayStation developers on ps2-pro.com, where the update contained just the files that have changed and could be dropped in place to overwrite the previous versions. ### SDK Versions +The table below lists the relevant entries. SDK Version | Publicly Leaked? | Notes --- | --- | --- @@ -207,6 +208,7 @@ The simulator was released before developers got access to the hardware [^3], it # Misc ## Legend of terms +The table below lists the relevant entries. Name | Meaning --- | --- diff --git a/pages/consoles/saturn/SaturnReversing.md b/pages/consoles/saturn/SaturnReversing.md index 73909ef0..75af201f 100644 --- a/pages/consoles/saturn/SaturnReversing.md +++ b/pages/consoles/saturn/SaturnReversing.md @@ -76,6 +76,7 @@ Strange thing is that Bug Too manages to find tons of library functions (160) bu My guess is that its because it was compiled/assembled with a different toolchain, so Bug Too was presumably GNU compiled but Baku Baku could have been compiled with something else. ## Known Versions of Libraries +The table below lists the relevant entries. Library | Version ---|--- diff --git a/pages/consoles/saturn/SaturnTransparencyEffects.md b/pages/consoles/saturn/SaturnTransparencyEffects.md deleted file mode 100644 index 29fa2362..00000000 --- a/pages/consoles/saturn/SaturnTransparencyEffects.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -layout: post -tags: -- hardware -- saturn -- sega -title: Sega Saturn Alpha Transparency Effects -category: saturn -image: https://img.youtube.com/vi/FdD0GvVRSMc/hqdefault.jpg -permalink: /saturn-transparency -breadcrumbs: - - name: Home - url: / - - name: Sega Saturn - url: /segasaturn - - name: Sega Saturn Alpha Transparency Effects - url: # -references: - - youtube - - codingsecrets -videocarousel: - - title: Coding Secrets - image: https://img.youtube.com/vi/FdD0GvVRSMc/maxresdefault.jpg - youtube: 'FdD0GvVRSMc' -recommend: sega -editlink: /consoles/saturn/SaturnTransparencyEffects.md ---- - -The Sega Saturn's unique way of drawing 3D vertices made life very difficult for developers to implement Alpha Transparency techniques such as objects fading into view. -In Sonic R the developer Travellers Tales took a very clever approach to implementing this feature despite the lack of hardware support. - - -# References -[^1]: Coding Secrets on YouTube - https://www.youtube.com/watch?v=FdD0GvVRSMc diff --git a/pages/consoles/saturn/SegaSaturnHitachiToolchain.md b/pages/consoles/saturn/SegaSaturnHitachiToolchain.md index 12895a4d..de8be1ec 100644 --- a/pages/consoles/saturn/SegaSaturnHitachiToolchain.md +++ b/pages/consoles/saturn/SegaSaturnHitachiToolchain.md @@ -24,6 +24,7 @@ editlink: /consoles/saturn/SegaSaturnHitachiToolchain.md Hitachi released a toolchain for Sega Saturn development, this is an alternative to the GNU toolchain also available from Sega. # Executables +The table below lists the relevant entries. Executable | Description ---|--- @@ -62,6 +63,7 @@ SHC is the C compile provided for the SH processors by Hitachi. --- # Hitachi Libraries +The table below lists the relevant entries. Name | Description ---|--- diff --git a/pages/consoles/saturn/SegaSaturnSDK.md b/pages/consoles/saturn/SegaSaturnSDK.md index fc973868..bd77ce52 100644 --- a/pages/consoles/saturn/SegaSaturnSDK.md +++ b/pages/consoles/saturn/SegaSaturnSDK.md @@ -259,6 +259,7 @@ The software for 2D/3D Artists, Designers and sound editors are covered in the f --- # Glossary +The table below lists the relevant entries. Term | Meaning ---|--- diff --git a/pages/consoles/saturn/SegaSaturnSampleCompilation.md b/pages/consoles/saturn/SegaSaturnSampleCompilation.md index 6cedb85a..b8a429a7 100644 --- a/pages/consoles/saturn/SegaSaturnSampleCompilation.md +++ b/pages/consoles/saturn/SegaSaturnSampleCompilation.md @@ -88,6 +88,7 @@ This happened when I set the SHC_LIB directory wrong. To fix it make sure this e Uses `gcc` to compile the *.c files and `gasm` to assemble the assembly files. ## Libraries Included +The table below lists the relevant entries. name | purpose ---|--- diff --git a/pages/consoles/snes/SNESFileFormats.md b/pages/consoles/snes/SNESFileFormats.md index 6527cc0c..4ce503ce 100644 --- a/pages/consoles/snes/SNESFileFormats.md +++ b/pages/consoles/snes/SNESFileFormats.md @@ -26,6 +26,7 @@ This page is a practical reference for common SNES file formats used for develop --- # Source and Build Files +The table below lists the relevant entries. Extension | What it is ---|--- @@ -928,6 +929,7 @@ This makes the Mode 7 records particularly useful to preserve, even if you do no --- ## Mode 7 and Map-Side Formats +The table below lists the relevant entries. Extension | What it is ---|--- @@ -1004,6 +1006,7 @@ If you are round-tripping MAP files between tools, prefer preserving the header --- ## Revision Markers +The table below lists the relevant entries. Marker | Meaning ---|--- diff --git a/pages/consoles/switch/SwitchGameEngines.md b/pages/consoles/switch/SwitchGameEngines.md index 7e49c4f8..51568e68 100644 --- a/pages/consoles/switch/SwitchGameEngines.md +++ b/pages/consoles/switch/SwitchGameEngines.md @@ -211,6 +211,7 @@ Havok is a popular physics engines that has been ported to the Nintendo switch.
## Games +The table below lists the relevant entries. Game Name | Notes ---|--- @@ -242,6 +243,7 @@ Wolfenstein II: The New Colossus | id Tech 6 --- # Unknown (Custom?) Engines +The table below lists the relevant entries. Game Name | Details ---|--- diff --git a/pages/consoles/vita/OfficialSonyVitaSDK.md b/pages/consoles/vita/OfficialSonyVitaSDK.md index e66f54c9..dbd5ee68 100644 --- a/pages/consoles/vita/OfficialSonyVitaSDK.md +++ b/pages/consoles/vita/OfficialSonyVitaSDK.md @@ -55,6 +55,7 @@ SDKS | 33.07 GB | Contains 3.300/3.500/3.550/3.570 SDKs plus the Photon PSVita S --- ## Software (/psvita/Software) +The table below lists the relevant entries. Name | Size | Notes ---|--- diff --git a/pages/games/BatmanForeverArcade.md b/pages/games/BatmanForeverArcade.md index 1ab3e927..8079e1f7 100644 --- a/pages/games/BatmanForeverArcade.md +++ b/pages/games/BatmanForeverArcade.md @@ -446,6 +446,7 @@ Symbol | Notes --- # Sega Saturn Memory Symbols +The table below lists the relevant entries. Address | Symbol | Notes ---|---|--- diff --git a/pages/leaks/Gigaleak.md b/pages/leaks/Gigaleak.md index 0e27b5a9..8d7e7eae 100644 --- a/pages/leaks/Gigaleak.md +++ b/pages/leaks/Gigaleak.md @@ -107,6 +107,7 @@ Inside `other/NEWS/FZERO`, the `Game` and `Tools` folders reappear, and the fold Beyond the source trees, the `NEWS.7z` archive also contains a **テープリストア** (tape-restore) directory holding seven workstation backup snapshots in `.tar` format, plus a manifest file. These appear to be uncompressed mid-development system backups from around 2014: ### Tape Archive Backups (テープリストア) +The table below lists the relevant entries. Archive | Size | Entries | Contents ---------|------|---------|---------- @@ -263,6 +264,7 @@ One important extra detail at the NEWS_04 level is that Sugiyama's root director --- ### NEWS_04 Timeline Snapshot +The table below lists the relevant entries. Period | Project | Status ---|---|--- diff --git a/pages/leaks/Nintendo/GigaleakNEWS05.md b/pages/leaks/Nintendo/GigaleakNEWS05.md index 2bce5674..971efcf8 100644 --- a/pages/leaks/Nintendo/GigaleakNEWS05.md +++ b/pages/leaks/Nintendo/GigaleakNEWS05.md @@ -90,6 +90,7 @@ If you are new to SNES 3D development and Nintendo's internal tool ecosystem, th --- ## Contents at a Glance +The table below lists the relevant entries. Directory | Purpose | Key Files -----------|---------|----------- @@ -171,6 +172,7 @@ It captures assets mid-development. Each stage folder represents a **complete level or boss encounter**, with self-contained assets and animations. #### Stage-by-Stage Breakdown +The table below lists the relevant entries. Stage | Files | `.anm` | `.nca` | `.cad` | `.txt` | Purpose -------|-------|--------|--------|--------|--------|--------- @@ -1291,6 +1293,7 @@ Extension | Count | Purpose --- ## Comparison to Main Gigaleak +The table below lists the relevant entries. Aspect | Main SFC.7z | NEWS_05.tar --------|------------|----------- @@ -1361,6 +1364,7 @@ This adds poignancy: the 1,549 AAfundoshi files represent 3+ years of work that ## Comparison to Main Gigaleak Archives ### NEWS_05 vs. SFC.7z (Main Source Code) +The table below lists the relevant entries. Aspect | SFC.7z (Organized) | NEWS_05 (Raw Backup) --------|------------------|------------------- diff --git a/pages/leaks/Nintendo/Pilotwing2DArt.md b/pages/leaks/Nintendo/Pilotwing2DArt.md index e9e29702..4ca179be 100644 --- a/pages/leaks/Nintendo/Pilotwing2DArt.md +++ b/pages/leaks/Nintendo/Pilotwing2DArt.md @@ -542,6 +542,7 @@ Why this matters: --- ## Competing hypotheses and confidence +The table below lists the relevant entries. Hypothesis | Description | Confidence ---|---|--- @@ -621,6 +622,7 @@ The combat tokens likely represent either: --- ## Evidence-weighted interpretation +The table below lists the relevant entries. Signal class | Observed strength | Supports | Risk ---|---|---|--- diff --git a/pages/leaks/Nintendo/StuntRaceFX2DArt.md b/pages/leaks/Nintendo/StuntRaceFX2DArt.md index 2fd070d4..206bf390 100644 --- a/pages/leaks/Nintendo/StuntRaceFX2DArt.md +++ b/pages/leaks/Nintendo/StuntRaceFX2DArt.md @@ -95,6 +95,7 @@ Date window | `1993-07` to `1993-12` | Late production pass before 1994 release --- ## Asset taxonomy +The table below lists the relevant entries. Group | Example files | Interpretation ---|---|--- @@ -124,6 +125,7 @@ This is not proof of team change by itself, but it is a persistent marker of bra --- ## Timeline interpretation +The table below lists the relevant entries. Date | Event | Reading ---|---|--- diff --git a/public/consoles/GameCom.png b/public/consoles/GameCom.png new file mode 100644 index 00000000..209abdf2 Binary files /dev/null and b/public/consoles/GameCom.png differ diff --git a/public/consoles/SDK.png b/public/consoles/SDK.png new file mode 100644 index 00000000..e9b2255c Binary files /dev/null and b/public/consoles/SDK.png differ diff --git a/scripts/README.md b/scripts/README.md index a55478e9..d39f2bee 100644 --- a/scripts/README.md +++ b/scripts/README.md @@ -38,7 +38,7 @@ node scripts/extract-tags.js [options] * `--sort-by-count` - Sort by usage count (default) * `--sort-by-name` - Sort alphabetically * `--detailed` - Show which files use each tag -* `--export-json` - Export data to `valid-tags.json` +* `--export-json` - Export data to `_data/valid-tags.json` * `--export-csv` - Export statistics to `tags-export.csv` * `--help` - Show help @@ -61,7 +61,7 @@ node scripts/extract-tags.js --export-json --export-csv * Export options for JSON/CSV formats ## validate-tags.js -Validates all tags in markdown files against approved tags from `valid-tags.json`. +Validates all tags in markdown files against approved tags from `_data/valid-tags.json`. ### Usage ```bash @@ -69,11 +69,11 @@ node scripts/validate-tags.js [path-to-valid-tags.json] ``` ### Arguments -* `path-to-valid-tags.json` - Path to valid tags file (default: `valid-tags.json`) +* `path-to-valid-tags.json` - Path to valid tags file (default: `_data/valid-tags.json`) ### Examples ```bash -# Validate against default valid-tags.json +# Validate against default _data/valid-tags.json node scripts/validate-tags.js # Validate against custom tags file @@ -131,7 +131,7 @@ node scripts/generate-placeholder-social-images.js ### Description * Scans `pages/` and `categories/` for Markdown and HTML content files -* Uses `title`, `shorttitle`, `permalink`, `category` and the `category_images` block in `_config.yml` +* Uses `title`, `shorttitle`, `permalink`, `category` and the `category` block in `_config.yml` (with per-key `title` and `image` fields) * Uses the Ruby `geo_pattern` gem to generate deterministic SVG backgrounds from each page seed * Uses `@resvg/resvg-js` in Node to rasterize the SVG into a JPG * Falls back to `rsvg-convert` when the Node renderer is unavailable diff --git a/scripts/extract-tags.js b/scripts/extract-tags.js index bab014d3..0400899c 100755 --- a/scripts/extract-tags.js +++ b/scripts/extract-tags.js @@ -1,8 +1,11 @@ #!/usr/bin/env node const fs = require('fs'); +const path = require('path'); const { scanDirectories, readMarkdownFile, extractTags } = require('./markdown-utils'); +const VALID_TAGS_OUTPUT_PATH = path.join(__dirname, '..', '_data', 'valid-tags.json'); + /** * Script to extract and analyze all tags used in markdown frontmatter * Usage: node extract-tags.js [--sort-by-count] [--sort-by-name] @@ -114,9 +117,11 @@ class TagExtractor { tags: Object.fromEntries(alphabeticallySortedTags), fileTagMap: Object.fromEntries(this.fileTagMap) }; + + fs.mkdirSync(path.dirname(VALID_TAGS_OUTPUT_PATH), { recursive: true }); - fs.writeFileSync('valid-tags.json', JSON.stringify(exportData, null, 2)); - console.log('\nExported detailed data to valid-tags.json'); + fs.writeFileSync(VALID_TAGS_OUTPUT_PATH, JSON.stringify(exportData, null, 2)); + console.log(`\nExported detailed data to ${VALID_TAGS_OUTPUT_PATH}`); } if (process.argv.includes('--export-csv')) { @@ -176,7 +181,7 @@ Options: --sort-by-count Sort tags by usage count (default) --sort-by-name Sort tags alphabetically --detailed Show which files use each tag - --export-json Export detailed data to valid-tags.json + --export-json Export detailed data to _data/valid-tags.json --export-csv Export tag statistics to tags-export.csv --help, -h Show this help message diff --git a/scripts/generate-placeholder-social-images.js b/scripts/generate-placeholder-social-images.js index 688d339e..267dd8a1 100755 --- a/scripts/generate-placeholder-social-images.js +++ b/scripts/generate-placeholder-social-images.js @@ -63,12 +63,24 @@ function parseCategoryImages(configPath) { const content = fs.readFileSync(configPath, 'utf8'); const lines = content.split('\n'); const categoryImages = {}; + let inCategory = false; let inCategoryImages = false; + let currentCategoryKey = ''; for (const line of lines) { - if (!inCategoryImages) { - if (line.trim() === 'category_images:') { + const trimmedLine = line.trim(); + + if (!inCategory && !inCategoryImages) { + if (trimmedLine === 'category:') { + inCategory = true; + inCategoryImages = false; + currentCategoryKey = ''; + continue; + } + if (trimmedLine === 'category_images:') { inCategoryImages = true; + inCategory = false; + currentCategoryKey = ''; } continue; } @@ -77,11 +89,28 @@ function parseCategoryImages(configPath) { break; } - const trimmed = line.trim(); + const trimmed = trimmedLine; if (!trimmed || trimmed.startsWith('#')) { continue; } + if (inCategory) { + if (line.startsWith(' ') && !line.startsWith(' ')) { + const keyMatch = trimmed.match(/^['"]?([^'"]+)['"]?:\s*$/); + currentCategoryKey = keyMatch ? keyMatch[1] : ''; + continue; + } + + if (line.startsWith(' ') && currentCategoryKey) { + const imageMatch = trimmed.match(/^image:\s*(.+)$/); + if (imageMatch) { + categoryImages[currentCategoryKey] = imageMatch[1].trim().replace(/^['"]|['"]$/g, ''); + } + } + + continue; + } + const colonIndex = trimmed.indexOf(':'); if (colonIndex === -1) { continue; diff --git a/scripts/validate-tags.js b/scripts/validate-tags.js index efd1370e..e645be0a 100755 --- a/scripts/validate-tags.js +++ b/scripts/validate-tags.js @@ -5,11 +5,11 @@ const { scanDirectories, readMarkdownFile, extractTags, loadJsonFile } = require /** * Script to validate tags in markdown files against approved tags in valid-tags.json * Usage: node validate-tags.js [path-to-valid-tags.json] - * Default: uses valid-tags.json in current directory + * Default: uses _data/valid-tags.json */ class TagValidator { - constructor(validTagsFilePath = 'valid-tags.json') { + constructor(validTagsFilePath = '_data/valid-tags.json') { this.validTagsFilePath = validTagsFilePath; this.validTags = new Set(); this.processedFiles = 0; @@ -189,8 +189,8 @@ class TagValidator { console.log('\n--- SUGGESTIONS ---'); console.log('To fix these issues, you can:'); console.log('1. Remove the invalid tags from the affected files (or fix typos in tag names)'); - console.log('2. Add the missing tags to valid-tags.json if they are legitimate tags you want to use.'); - console.log('\nTo see all valid tags, run: jq -r ".tags | keys[]" valid-tags.json'); + console.log('2. Add the missing tags to _data/valid-tags.json if they are legitimate tags you want to use.'); + console.log('\nTo see all valid tags, run: jq -r ".tags | keys[]" _data/valid-tags.json'); console.log('\nTo re-generate the list of valid tags, run: node scripts/extract-tags.js --export-json'); return false; @@ -241,7 +241,7 @@ Options: --help, -h Show this help message Arguments: - path-to-valid-tags.json Path to the valid tags JSON file (default: valid-tags.json) + path-to-valid-tags.json Path to the valid tags JSON file (default: _data/valid-tags.json) Description: Validates all tags in markdown files against approved tags in valid-tags.json. @@ -249,7 +249,7 @@ Description: Examples: node validate-tags.js - node validate-tags.js valid-tags.json + node validate-tags.js _data/valid-tags.json node validate-tags.js /path/to/custom-tags.json Exit Codes: @@ -260,7 +260,7 @@ Exit Codes: } // Use custom tags file path if provided - const tagsFilePath = args[0] || 'valid-tags.json'; + const tagsFilePath = args[0] || '_data/valid-tags.json'; const validator = new TagValidator(tagsFilePath); const success = validator.run();