Skip to content
PORTSNATIVE.
HomeCatalog
Web GamesEmulatorsToolsNews
PORTSNATIVE.

A catalog for discovering ports and related projects. We link to official sources and do not host original game files.

ExploreCatalogMy list
InformationAbout usSuggest a portSupportDonationsLegal notice
© 2026 PortsNative
Back to catalog
Spyro: Year of the Dragon Decompilation
PORTSNATIVE

Spyro: Year of the Dragon Decompilation

NATIVE PORTPLATFORMERWINDOWSLINUXMACOSALPHA

Spyro: Year of the Dragon Decompilation

Spyro: Year of the Dragon

OriginPlayStation

TechnologyDecompilation and reconstruction in C/C++

Available forWindows, Linux, macOS

View official project

About the project

Spyro: El año del dragón es el tercer y último videojuego de la serie Spyro the Dragon, desarrollado por Insomniac Games, siendo también el último título de la serie publicado para la videoconsola PlayStation. Se lanzó el 11 de octubre de 2000 en Norteamérica, el 25 de octubre en el Reino Unido y el 10 de noviembre en el resto de Europa.

Official project information

Author's original READMEOpen on GitHub ↗

Spyro: Year of the Dragon Decompilation

A decompilation project for the third game in the Spyro the Dragon series, Spyro: Year of the Dragon.

This project aims to produce code that will build to an executable which byte-for-byte matches the one used in the final game. The earliest final version was selected for this project, but additional work to support changes made in the later versions may be supported in the future. Human understanding of the game's code is a primary goal of this project.

Version Info

The earliest release build of the game is used in this project:

  • Region: NTSC-U
  • Revision: 0
  • Primary volume descriptor date: Sep 14th, 2000
  • Product code: SCUS-94467

This version contains modchip protection, anti-crack protection, and encrypted overlays.

Project Structure

  • asm/: disassembly for non-matching code, and code originally written in assembly.
  • include/: include headers for source code, and headers used by disassembly tools.
  • progress/: markdown files indicating the current state of the executable and each overlay, for generating the progress tables.
  • src/: decompiled source code.
  • tools/: contains utilities for building the game.

Matching Progress

Last updated: 2026-10-18

EXEOverlaysTotal
Total C functions matching180/337179/3098359/3435
Progress percentage53.41%5.78%10.45%

Note: the percentages given above are not necessarily representative of a linear indicator of progress. In particular, many overlay functions repeat and will be easier to implement on the whole than the EXE's functions, and these percentages don't give a picture of how many variables and functions are labelled or understood.

Full Status

Hashes listed are for the final overlays, after correcting checksums and encrypting as necessary:

EXE / OverlayExpected SHA-256C functions matchingProgess %
EXECB819EE78C556D403779309859CB08A7111331F624759BC1BC380946261BB26E180/33753.41%
creditsBBE3F8DEB18E0F462C5918C8AFEDB03A32FE855CC6778E9B8D7E4E3849988BCD1/520.00%
loading0E94063F258479586AE630C23260B77014BE18BAC5891FBB9A894156B5763AE22/1612.50%
title675044820F58E521AE2F5AE67F3D050BA37D604D4F06FEC20DCD8806FD1B90F92/229.09%
atlasE8F8E69BE901F426D1A8895DDF5842794B73E939B49A09BF9F6ABD9B42E04B110/320.00%
optionsD9644E60000A0D0CC02AF4EE2B5DC4F471EA9CDE57901009A580086CF0CA78AE2/1315.38%
level_10B8C482FB6AA359D9CDD7A03EA487EB0CE3C05B44E0C2DC3D43DBA73F8B4933107/6011.67%
level_11FA11603F49DE1A78FA6E84111E8237F869831C37C9FC2E8F44C857693CFEB9C55/806.25%
level_12DA9CEB152622FF2A19C58A8B190146CBBB98BABB35049A6C1E6BFB7AC3CF906E2/573.51%
level_13D8AC8A0CDA88EA800AE36B864F5910F7139C32EB106E3389F89F15A9B284EC4D4/656.15%
level_149F81762F5E71D8F880EE5951C8A17F4A3BEC13E968D72180389CE41F4B76526E3/823.66%
level_155895A1A44A3DB1D7BEFD56E3BE3C2F91AF7F6DB0A45BAE10C81A61ECDDBD54612/623.23%
level_169C6B068EF258114F26309973E31CB92987A2126AD5595FFFBBEB281B3F2E6B792/474.26%
level_170052CB2656E28E1D9F501C8DC6540929BC30D3F8726E04D38850C18BFE2DC07D5/3315.15%
level_18CB4D4DB57A656F41C1F6586966BD03B0543E0022D950C8A739B188D85984FD292/643.12%
level_205812CCA80F1F8233F5E805E26F3D90B67F7A12F359911CF8362DEBEE3BB58FFD1/641.56%
level_215FB0343DFECF5A1A7DB3B72785DA92C8F1981765E73CAB014E37FD3D4A93E05E1/611.64%
level_220DC7BCD28F129C086C25C81D4C0EBB3EDBA24216C4E87DA4917D41B152E1FF121/901.11%
level_2390D95D9487758F3D7C9554C5CC418FE850AEDEA71BACD8738E939D233B70A8991/761.32%
level_24A2ACF8129D66971C7BB66F61BEBE5EEA58BA2FAF1BF87B9DDFB926D21C0A901F1/791.27%
level_25298F6D432A7D93E179AF2CCB780503F00A7C15ABC39E501D0820EBE6CDDF4C441/631.59%
level_26A84C0A7226B54B05B0559FE422011204EA9CB337016E98899B60467D7ECA50101/621.61%
level_2779D3D75D05D0F3184ECF1098D3C760A0B0C888E3D9A3234B349210E635C8C1AE1/432.33%
level_28B426039423ABE1D30D370EDB1AB93DB8214F45842EB77F1290F2A0B343492C2E1/591.69%
level_306423897A25C95C60E9584BD1D4A1898820A6D02E1AD28545C05AD9B1BA620CAD1/631.59%
level_3158C5FED3E371B85DF6269ED6F85BAA060D8CFE2EFFFDFBA115CC33CDE09189F01/701.43%
level_326D20E28BC7DDC45EEB48A11D2B94BD9B6DA23F37BFE58A159A32A1A68DEECC321/981.02%
level_331E80F108F3781C9DD2AE1180ECC6A364B0C785600BDA1ADB19AFB6B588B4E17C1/831.20%
level_34E7DEF9DD29BC3D51E4B57583C19D5C4D1123E241133D91410459312C990F19231/871.15%
level_35FF1F35A60353B5276F5AFD2AA72A23C7B2B64822FC7EC5D336125B81D6522DD21/671.49%
level_3681FF24700513C90261FFDA1C9028E0D80B517034CB09685579DB69AEBB90C04B1/521.92%
level_3722DBD9CBDAF3EE278FDFA5BB87701BBFFF31B9CC0345C7D0DDF5F25DA9931BE71/571.75%
level_3884B47DF569AC584E530FCA8CB4D2952860F25FA53637CBD8776F9F2CAC3C06E91/591.69%
level_404DE201FC7E423B518160361C743143A8669D538783337C2D11218C2C2A2642A21/571.75%
level_4199E04DDA32B461C65DE303BAC8E55D357CD0A6D87495CF430E748C1E469323AE1/811.23%
level_42DB4F017CD24C2A53E625C0A1C68AA645491C1A822CF5C31F424E2236E58F1A043/744.05%
level_4330E19C0BF7EB843C38B3A21C18DC3ED4E79AB1887BC7A90AEA0EA905349767C94/795.06%
level_44372FDF9B8551C4FC8BE6DADFC0B8F012D6358B8C2B0560B47A9858E19B0CFD951/741.35%
level_456B3C55B68394E9E3035198949C2025E46D2FB4A31109B51BB88C355C7D7F2E1F1/641.56%
level_4642B5819A5AE3BBA0E07A4282D5CD74AC819CBC5A486F8AAE06545AC77C287EA21/681.47%
level_47C22DE0B15E994D996602752F826A2080DC489AD94D0F41DD27CA2DC9D472370F1/541.85%
level_489EEEA655BDF20CF9F7942A34D24CC36C38B0852E18B9D16D51D663F6066B94271/601.67%
level_50EF5315F73D48DA658434315E2261EB5C4523AD80277CE97F31D200D3DE94AD2F1/981.02%
cutscene_61A189DA2821DAC4911D3922E7E4B2BD1316463E7651C8FCE554DBA2510E7A53BE11/2740.74%
cutscene_62F81C232BE9389461EBA93814CCA9F90347DDCF8B164AE7BDBD213E1CCEC67E3F11/3036.67%
cutscene_637EE9BB459BBDA5D1232346E1F5A5EB507EEDE774D2BB4284E2DF8298CF06A2DE5/2817.86%
cutscene_640F80616B66705A97C3604A52A91139140D9E78D69635EA5A8FFCEAE96F2431F45/2917.24%
cutscene_65F3058F57B292F4E744F16B6278172376608EA2DA700A373F0C11A4DBCBBFEBF55/2619.23%
cutscene_6649EB8AD4581ECF4CC11BCC10CD4E9F675CBB9C24CE836F76BF20EFBD9C2DB3785/2619.23%
cutscene_67EDD3D01A604B182D8A610AE976F83C09F953B3B07B881C556A47E1BFC36AD1765/2817.86%
cutscene_68A0DFADECA23F1B2A893566F3B3552063B84C2B7DAB1B2A95BB6F5E5E642C3C4F5/2619.23%
cutscene_696B8F4BD9DB15BE9CBCF55BE06032FEE0B75AE9B8517F394D108BCF07E4E799485/2718.52%
cutscene_707037E261E4333EDE3C62F635CC60E689192B1EBB4F1302D0D061240D04F001F75/2619.23%
cutscene_71535FBA45489BB891623FA0C12557BF06015C76315FD3DB4D3072CA9C11D1E43A5/2619.23%
cutscene_73CE20FD06035F8A3BEEC5D55D623A2242891FAECF6FAC8D0A7A7C646C9F3DAD535/3116.13%
cutscene_743A9E83C3B0C18532A3B08B8E397A0ACC71385FE2B66EA0036BDA53400FF71E6E5/2619.23%
cutscene_75F0619BDD02CCE373AE8D7534EF8AF6B465687022E9756383C80A75591A1EC96F5/2718.52%
cutscene_76D88EA50BDFC1A894AE230972EEFE2D690E0B70D3AAC883302E1833962E0588F15/2718.52%
cutscene_7714929F914246D6F2201EEBAE148074495275BB7F565E0F426307A9166C5001255/2718.52%
cutscene_78CA70FAF92EE688EC4D90BE9DE9C92950F365F57CBC6E194067EEB79521174BFE5/2917.24%
cutscene_793A8FBA1F080A3C2070BE80A7BF370C2BFBA8F759482868424140A8B9F62055E95/2619.23%
cutscene_8007B1A96059B8FA216A987E984CC513B734C76C8A5BBD2505B7A2AED2066BFE485/2619.23%

Building

Executing docker_env.sh starts a container in interactive mode with the Dockerfile image, which comes with modern mipsel- gcc and binutils. For the source code, a much older compiler will be used, gcc2.7.2-mipsel.

After starting the container, executing python3 ./build.py will create the main executable, named PSX.EXE in the /build folder. The overlays will be output to /build/wad. Alternatively, you can fun python3 ./build_multiproc.py when building to speed up the build process by multiprocessing. A Makefile is also included, but I've not really tested this yet, and it doesn't support running the antipiracy correction.

By default, the build.py script does not produce overlays that have fixed antipiracy checksums or the appropriate encryption, and as such these are not usable for gameplay purposes. In order to build playable files, you'll need to turn on the FIX_CHECKSUMS flag in the script. This increases the length of the build process significantly so it's not recommended that you keep this setting on, but it's necessary when producing a build for testing. In addition, the first time you run this, you'll want to set COMPILE_DRAGONBREATH to "True" to compile a local copy of the Dragonbreath antipiracy tool.

Because this project primarily concerns the game's code, you will need a copy of the game for its assets. A separate tool such as wadtool is needed to rebuild the WAD.WAD file. Edits to any non-overlay WADs (such as level data) will also require a separate tool. For creating the CD image, I would recommend mkpsxiso.

I have also included a pair of shell scripts prepare_cd.sh and build_cd.sh which use the aforementioned wadtool and mkpsxiso to extract the contents of a disc image, produce a build config file, extract the WAD.WAD file, copy the built overlay files across, rebuild the WAD, and recreate the disc image. The user may need to edit the build configuration file manually to ensure that the SPEECH.STR file is always at an offset of 90000, if they are using this decompilation to mod the game.

Additional Tools

  • python3 progress.py will generate values to put into the README progress tables.
    • Manual updates to the progress files in /progress is required first.
  • python3 context.py will generate a context file appropriate for use in decomp.me.

File Structure

The following assumptions have been made in determining an appropriate file structure for the project:

  • The EXE appears to be split into a series of files that are roughly in alphabetical order. Most of these file names are guesses based on known official terminology, though some filenames have been observed in debug strings in Spyro the Dragon and Ratchet and Clank.
    • Splitting is also based on how the rodata is ordered. Strings and data appear at the top of a file, switch statements appear lower down.
  • Overlays also appear to be built from multiple files. A rough file splitting was determined from the rodata for each overlay.
    • Level overlays appear to be particularly difficult, as rodata suggests that there is probably one file per moby, and this is also corroborated by debug strings in Ratchet and Clank which suggest the same would be true for that game. For now, all mobys have been put into a single file per level, but these may be split up later on if we can figure out how to reuse object files across different overlays. This might make adding new moby classes a bit of a pain though as it'd also probably mean updating the ld manually, so some part of the process probably needs to be automated.
    • The "level.c" files probably split up, too. There is some proof of what these splits are and how they affect the rodata for a given level; weirdly, the strings appear to go at the bottom of the level files instead of the top.
    • Many functions (e.g. saving and loading functions, moby functions, etc.) are shared by multiple levels. Currently it's not clear exactly how this was achieved, but where possible we will avoid repeat implementations of the same function.

Currently Unsupported Features

  • In the long term, mobys should probably each have their own C file in /src/moby, so that each moby only needs to be built once. It's not clear how this will work, if it'll work at all.
    • There is evidence in the rodata structure for the overlays that each moby had a separate source file, rather than all of them sitting in one moby file per overlay.
    • Most mobys are the same across all levels. Mobys that aren't will need to be handled somewhat differently - eggs are one example.
    • Overlays contain a lot of common functions even outside of the moby code. Ideally, much of these will be implemented using #includes similar to how moby_spawn.inc.h currently works.
  • All PsyQ / library functions and variables are implemented by included assembly files. The PsyQ compiler and linker are not used and thus specific features it implements may be done slightly differently in this repository.

Contribution Policy

Contributions are greatly appreciated, and this is not a project that I will be able to do all by myself. How you choose to contribute is left up to the contributor, but I ask a few things for you to consider before submitting a pull request:

  • Where possible, try to align with the naming schemes and code style with other functions already in the repo. Even better if you can align them with the spyro-1 project, as longer-term these two repositories will be as aligned as possible.
  • Please do not co-author commits using an AI agent. Agent context files will not be accepted into the main repository.
  • Please ensure that the executable and all overlays are matching before submitting a pull request.

All PRs will be subject to scrutiny before being accepted, and it may take some time before I am able to review them. Please bear with me when a request is made!

Other Resources

  • The MobyDoc contains a list of all of the moby classes in this game.

Acknowledgements

  • splat and its various example projects
  • spimdisasm disassembler used by splat
  • maspsx
  • decomp.me, a very handy tool for matching functions
  • Altro50 and his Spyro 1 decomp

First try rat? Smiley face

View official project
CALIFICACIÓN
—
Loading votes…
Advertisement

PROJECT FILE

Project type
NATIVE PORT
Genre
Platformer
Status
alpha
Original platform
PlayStation
Technology
Decompilation and reconstruction in C/C++
Version
—
Updated
—

Target platforms 3

Windows
Linux
macOS
View on GitHub
Advertisement