Spaghetti Spyro Framework Guide - Creating Classic-Style Spyro & Crash* Fangames

  1. Hardware Requirements
  2. Downloading Unreal Engine 4.27
  3. Downloading Spaghetti Spyro Framework
  4. Getting Started
    1. Locations of important Blueprints
    2. Treasure Containers
      1. General
      2. Spring Chests
      3. Locked Chests
      4. Mystery Vases
    3. Portals
      1. Return Home Portals
    4. Thieves
    5. Whirlwinds
      1. Hurlwinds
    6. Banana Plants
    7. Destructible Walls
    8. NPCs
    9. Setting up NPCs dialogue
    10. Scripting the level and NPCs
  5. Creating Level Blockout
  6. (WIP) Creating Level in Blender
    1. Tips
  7. The Adventure Template
    1. Utils
    2. Treasure Containers
    3. Enemy Templates
      1. Step 1 - Creating Animation Blueprint
      2. Step 2 - Adding Animation Notifies (if necessary)
      3. Step 3 - Creating the Blueprint
      4. Step 4 - Other adjustments
    4. Adventure Set-up
    5. Adjusting the Adventure Template
  8. Level Import and Set-up
    1. Mesh Settings Cheat Sheet
    2. Skybox Import and Set-up
    3. Import and Set-up of Swimmable/Drownable Water, Acid and Lava
    4. Import and Set-up of Wooden Surfaces
    5. Import and Set-up of Sound Files
  9. Customizing the Adventure
    1. Save Data Blueprint
      1. Default
      2. Skins
      3. Cheats
      4. Number of Collectibles
      5. Levels
      6. Adventure Settings
      7. Spyro moveset and abilities table
    2. Adventure Info Blueprint
      1. Skins
      2. Max Collectables
      3. Collectibles
      4. UI
      5. Save Data
      6. Maps
      7. Level Totals
    3. Universal Save Data Blueprint
      1. Default
      2. Difficulty
  10. Advanced
    1. Advanced Adventure Set-up
      1. Save Data Blueprint
        1. Default
        2. Levels
      2. Adventure Info Blueprint
        1. Save Data
        2. Maps
        3. UI
        4. Collectibles
      3. Adventure Info Construction Script
      4. Level Blueprints
    2. Controlling where Spyro arrives in the level
    3. Distance Fade Effect
      1. Fade to low LOD texture
    4. Adding a custom collectable
    5. Adding a custom talisman
    6. Compiling your fangame
      1. What to do if you can't install Visual Studio or packaging process is failing
  11. Music
  12. Tips

Hardware Requirements

  • Any CPU from or better:
    • Intel i3 2000 Series
    • AMD FX 6000 Series/Ryzen 3 1000 Series
  • 8GB RAM
  • Any GPU from or better:
    • NVIDIA GTX 900 Series
    • AMD HD 7000 Series
    • Intel Arc A Series

🛈 Any modern APU/laptop processor (2018+) should also work fine

  • 30GB of disk space

Downloading Unreal Engine 4.27

  • Download Epic Games Store - https://store.epicgames.com/
  • Launch EGS and click on Unreal Engine tab
  • Head to Library tab
  • Click the + next to Engine Versions
  • From dropdown menu choose 4.27.2
  • Click Install
  • (Optional) Reduce Unreal Engine's install size by 20GB:
    • Click Options
    • Uncheck Android, IOS and Linux under Target Platforms
    • 🛈 You can install these build files later if you want to compile your fangame for other devices
    • Click Apply
  • Click Install

Downloading Spaghetti Spyro Framework

Spyro only - Main branch by Bunbaroness:

*Crash is coming later this year in a Spaghetti Spyro Orange fork by qtderg

Getting Started

Locations of important Blueprints

Tip

Add these folders to favourites for quick access. Right click -> Add to favourites

Spyro SpyroContent\Global_Assets\Global_Characters\Playable_Characters\Spyro
Gems SpyroContent\Global_Assets\Global_Level_Items\Gems\Actors\Child_Actors
Treasure Containers SpyroContent\Global_Assets\Global_Level_Items\Treasure_Containers
NPCs SpyroContent\Global_Assets\Global_Characters\NPCs
Fodder SpyroContent\Global_Assets\Global_Characters\AI_Characters\Actors\Fodder
Enemies SpyroContent\Global_Assets\Global_Characters\AI_Characters\Actors\Enemies
SpyroContent\CiC_Assets\CiC_Characters\Pony_Soldiers\Actors
Portals SpyroContent\Global_Assets\Global_Level_Items\Portals
Fairies (they give powers like Superflame or Superfly) SpyroContent\Global_Assets\Global_Characters\NPCs\Fairies

Global_Level_Items folder also contains other useful things such as Whirlwind/Hurlwind, Banana Plants, Black Portals or Blue Star (which gives boost when Spyro is superflying)

Tip

If you don't know where the blueprint is located, just type it's name in the Search Content bar
search-content.png

Treasure Containers
General
  • Under green + Add Component button, scroll down and click on Item_Drop_Component
  • Items To Drop is an array defining which items are inside treasure container
  • You can choose a different gem with a dropdown menu
  • If you want to add more items, click a + near 1 Array elements
    Alt Tag
Spring Chests
  • Select ChildActor Component
  • In the Child Actor Class select the gem blueprint
    Alt Tag
Locked Chests
  • Location - (Treasure_Containers\Locked_Chest\Actors)
  • Place both Locked_Chest_BP and BP_Key in the level
Mystery Vases
  • Place at least two of Mystery_Vase_BP actors on the scene
  • Pick the appropriate vases in Next/Previous Mystery Vase variables
  • Example setup of 3 mystery vases:
    • First:
      image
    • Second:
      image
    • Third:
      image
Portals
  • My Level - the name of level portal leads to
  • Leads To Level - pick the level asset here
  • Skybox Mesh - a Static Mesh of your skybox
  • Skybox Transform - set skybox transform to different Z values only! Portal transitions will look very wonky if you don't do this. For example:
    X 0 Y 0 Z 60000
  • Incoming Levels Origin - this controls where Spyro arrives in the level. However, the official recommendation is to leave this variable at default value of X 0 Y 0 Z 0. Look at Advanced section for details
  • Required Primary Collectables - Number of primary collectables (candles, eggs, orbs) required to enter the level
Return Home Portals
  • My Level - set the current level name here
  • Leads To Level - pick the home world level asset here
  • Return Home Skybox Transform and Skybox Transform - set to same value as Skybox Transform on portal leading to the level
Thieves
  • Spline path:
    • White squares along the spline are the points defining it's shape. Click on them to drag the point and change spline shape
    • To add a spline point right click on a spline and choose Add Spline Point Here or Alt + LMB Drag in the direction you want to place the new point
    • Note: Spline needs to be flat instead of conforming to elevation changes of the level geometry. This applies to any runaway enemy type. Look at 01_RainyMesa for examples of spline paths
  • Stolen collectable
    • First, drag and drop a dragon candle in the level
    • Pick it in the Stolen Collectable variable
    • Tick Has a Stolen Collectible box
  • Difficulty
    • Set the walk speed for each difficulty level
Whirlwinds
  • To adjust height, select Whirlwind_Top component
  • Move it higher or lower depending on your desired height
    Alt Tag

🛈 You might want to adjust Upwards Speed and Rotation Speed

Hurlwinds

Info

An alternative method for vertical locomotion

  • Drag and drop BP_Hurlwind
  • Adjust Launch Velocity Z
Banana Plants

Info

Banana plants from Attack of the Rhynocs offer a way to go from the end to the start of the map without the level needing to be donut-shaped

  • Drag and drop two of Banana_Plant_BP
  • Adjust Goes To variable
Destructible Walls
  • Place a Simple_Destructable_BP on the scene
  • Replace the mesh in StaticMesh component
  • Adjust the hitbox (Box component)
  • Select Shrapnel & Sound Origin component
  • Move it to the middle of your destructable
  • You can adjust response to various damage types by selecting Damageable component:
    • Damage Resistances - remove Ram if you want wall to be destroyable by basic charge
    • Bonkable - disable if you don't want Spyro to bonk when he charges and destroys the wall
NPCs
  • Fairies
    • Scroll down to Fairy Abilities section. Everything here is pretty self-explanatory
    • Note: You also need to setup Powerup Duration in Difficulty section!
Setting up NPCs dialogue
  • If you want NPC to have dialogue make sure Won't Talk box is unticked
  • To add dialogue turns click on + in Dialogue Info
  • If it's player turn to talk, tick Player's Dialogue? box
Scripting the level and NPCs
  • To make things like Hunter's gliding tutorial, destroying towers in Future Ruins, trade sequence in Arid Basin, study the Level Blueprints of currently implemented levels:
    • 00_PastChasms
      • 01_RainyMesa
      • 02_AridBasin
      • 03_Fissure_Falls
    • 00_PresentMeadows
      • 01_AstralUtopia
    • 00_FutureRuins

Creating Level Blockout

Tip

Try to draw the level layout on paper first

A blockout of your level can be created inside Unreal using BSP brushes. Here's a video tutorial on this subject - https://www.youtube.com/watch?v=MEkwlDMSSAE

Exporting blockout to Blender:

  1. Select brush actor(s) in World Outliner. If you are using multiple brushes to create the shape, make sure to select all the brushes.
  2. In Details > Brush Settings, press Create Static Mesh. Click on the little arrow below Tesselated checkbox to show the Create Static Mesh button.
  3. Find the mesh in the content browser.
  4. Right click on newly created static mesh, Asset Actions > Export.
  5. Open FBX in Blender.

(WIP) Creating Level in Blender

Note:

If you want to create original Spyro levels, you need to have Blender experience, since there's no modular asset library to build your level from

Here are relevant Blender tutorials:

You might want to watch previous tutorial to make sense of this

Videos - https://drive.google.com/drive/folders/1TUj2P5wLY2hwZ7M9NZ3cx8vzr_qFqjD7?usp=sharing

"you basically get that rectangle shape from the first video and then before you add modifiers or rotate it to be standing up, take that and carve it up like in the second video with your reference skybox that you've painted (or not, you can just wing it too but i find it easier to have a reference) and then you can do the last part of the first video which is rotating it to stand up and applying those modifiers

now worth noting, if you use old blender like i do for the actual modeling processes, you'll need a newer version like in the first video to do the modifiers and to copy past the objects back and forth between. the modifiers do exist technically on old blender, but they don't work the same way and thus will not have the same globe effect. there might well be a way to do this in old blender without needing to copy the objects back and forth between versions but i don't know how, so for now i just copy the objects outside of edit mode back and forth when i need to

in the second video , the reference image is setup to be like 1:1 underneath like that so you can carve like 1:1 where you have stuff in it, it makes it SO easy, and the second rectangle with the same reference on it as a texture is so you can color pick from it while painting the color on afterwards, since you won't be able to see the one below it in that view

also for the scale of the reference image and the rectangle itself
just need the width to be exactly twice the height
and you can probably after making a globe, for the sake of polygon count, just collapse most of the bottom down to a single point once it's at the fade to void part
or straight up delete it past the first rung of the color fade, and use an identical solid color sky in whatever engine you're using
to fill in the rest"

  • Level making tips by Cyreides:

"as far as a process i follow now that it is, i blockout and playtest it like a motherfucker with every little platform i add and test the height, how it feels to run through like a cracked speedrunner, how it flows etc., i also check the views, mostly the spawns in any given area to see how they feel aesthetically i guess? nice views are great, combine that then with well planned and tested out gameplay of the level, with difficulty gradually increased throughout it. I also plan the full look of the level too basically with the blockout too as much as possible before the actual modeling to make sure it's actually going to look good done, with as little or as much detail in the models as is necessary to figure out the vibe. like, i use vertex color to see how the level will actually look in its final state and try to shape things as vaguely close to what i think the final should actually look like to see what works and doesnt. i get a bit more in depth than i probably should for a blockout but it turns out nice results imo, especially compared to what i use to do. and then i basically just model over that in another object. sometimes i do adjust and change things from the blockout if im finding a better idea after the fact or think a part just isnt working as well as it could or should

here are some blockout vs final model pics. i hope any of this was at all helpful considering this is very drawl the rest of the fucking owl kind of posting here with these"

Alt Tag

"p.s. I did not use to blockout btw when i did start modeling levels, and that was a HUGE mistaaaaaaaaaake. no one ever be early game dev cyreides pls, love yourself more than that

also, smooth vertex is your friend, grid fill is (when it behaves like you want it to anyways) your friend, also bridge edge loops and then loop cutting... ooo the satisfying topology you can get from that so easily

i also sometimes take a picture of blockout stuff or partial final model stuff and paint over it in like krita or photoshop or whatever if im having issues kinda visualizing somethings or need to quickly without modeling figure something out that's wrong with the level or i dont know what to do with it"

Tips

The Adventure Template

If you're a beginner, I strongly recommend using the Adventure Template which greatly simplifies things to get your level up and running. It already helped multiple people getting started with Spaghetti Spyro Framework. The template also includes all sorts of helpful Blueprints

If you wish to proceed with importing your level, skip to Level Import and Set-up section

Utils

BP_Whirlwind_Spawner:

  • Place BP_Whirlwind on the scene
  • Place BP_Whirlwind_Spawner on the scene
  • Pick the BP_Whirlwind in the Whirlwind variable pictured on the screenshot
    Alt Tag
  • Move the blueprint to where you want the spawning trigger to be. You can also rotate and scale it
  • 🛈 The transparent box is the visualization of the spawning trigger

The blueprint doesn't actually spawn the whirlwind, it just toggles the Active variable and visibility of whirlwind particles

BP_Yeetwind_Spawner:
Same as above but for hurlwinds

BP_Open_Banana_Plants:

  • Place two banana plants first (Banana_Plant_BP)
  • Pick them in Banana Plant 1 and 2 variables
  • Select Box component and place it where you want

BP_Total_Gems:
Tallies the total gems and displays both value and count of all gems in the level

  • Drag & drop into a level
  • Play the level
  • The count and value of the gems will be printed to the screen
    total-gems.png

Treasure Containers

The template contains inherited blueprints of every treasure container with every gem pre-selected. Simply choose one and drag & drop it into the scene
They save a massive amount of time since there's no need to select the Item Drop component and picking a other gem blueprint here
treasure-prefabs.png

Enemy Templates

The Enemy Templates are blueprints that quickly allow you to create and customize enemies without any hassle

List of currently available enemy templates:

  • Coward
  • Coward (taunting variant)
  • Club attack
  • Charge and attack (like Pickaxe Rhynocs from Sheila's Alp)
  • Charging attack (like Spear Rhynocs from Charmed Ridge)
  • Projectile attack
  • Shielded

It's recommended to watch the video especially for beginners
VIDEO COMING SOON

Step 1 - Creating Animation Blueprint
  • Right click on your Skeletal Mesh
  • create-anim-bp.png
  • Open your created Animation Blueprint
  • Open the Animation Blueprint of the enemy type you want to create (in ABPs folder)
  • anim-bp-list.png
  • On the left side you can open EventGraph and AnimGraph
  • anim-bp-graphs.png
  • Copy all nodes from the Event Graph to the Event Graph of your created Animation Blueprint
  • Right click -> Create variable on all marked and greyed-out nodes
  • Copy the New State Machine node from the Anim Graph to the Anim Graph of your created Animation Blueprint
  • Connect it to Output Pose node
  • anim-graph-nodes.png

Replacing Animations:

  • Open New State Machine node
  • Open every single state node and replace the animations
  • Click on the node that says Play animation_name
  • On the right sidebar replace the animation in Sequence variable
  • replace-anim.png
Step 2 - Adding Animation Notifies (if necessary)

Some animations need animation notifies for enemies to function correctly

  • Open your animation asset
  • Right click on the 1 track
  • Add Notify...
  • New Notify...
  • add-notify.png
  • Attacking animation:
    • Finished Attacking
  • Projectile attack animation:
    • Spawn Projectile
  • Laughing animation:
    • Done Laughing
Step 3 - Creating the Blueprint
  • Duplicate and rename one of the blueprints here depending on the enemy type you're adding
  • enemy-bps.png
  • Open your duplicated blueprint

On the left side, you'll see a list of components
component-list.png

  • On the right side you might wanna take a look at following things:
    • Damage Type and Super Damage?
    • damage-type.png
    • In case of projectile attack enemies:
      • Projectile Attack Type
      • projectile-attack-type.png
    • Laughs After Successful Attack
      • Uncheck if the character does not have a laughing animation
    • Scroll down to Difficulty section. There's a lot of variables you can adjust
  • Select Mesh (CharacterMesh0) component
  • On the right sidebar:
    • Swap Skeletal Mesh
    • Swap Anim Class for your created Animation Blueprint
    • swap-skeletal.png
    • You may want to adjust the position and scale of your skeletal mesh
  • Select Weapon Hitbox component
    • Change the socket hitbox is attached to by clicking the magnifying glass icon
    • Modify shape of the hitbox by adjusting Capsule Half Height and Capsule Radius variables
    • modify-hitbox.png
    • In case of Shielded enemy, do the same with Shield Hitbox
  • Select Capsule Component (CollisionCylinder)
    • Adjust the shape to fit your enemy mesh
  • Select AIs_DropShadow component
    • Set it to appropriate scale
    • dropshadow-scale.png
Step 4 - Other adjustments
  • Select Damageable component
    • Set-up the Damage Resistances array
    • damage-res.png
    • Other variables worth adjusting:
      • Bonkable
      • Supercharge Doesnt Bonk
      • Dies To Ice
      • Dies To Fear
    • If your enemy is metallic/has metallic parts:
      • Scroll down to Metal section
      • Set the Metal Material Indexes array to include the ID's of metallic materials on your skeletal mesh. This will cause them to heat up when Spyro flames the enemy
      • metal-mat-id.png
      • Additionally you need to have following setup in the blueprint:
      • metal-entity-setup.png
        • Drag & drop Damageable component onto Event Graph
        • Drag out the output pin from the Damageable node
        • Type "set component with metal material" and add the node
        • Drag & drop Mesh (CharacterMesh0) component
        • Connect it to Component With Metal Material input pin
  • If you know what you're doing you can duplicate and modify the base blueprints in Base_BPs folder to program any custom behaviours

Adventure Set-up

This section will focus on things in Adventure Info and Save Data Blueprints that you need to adjust. If you wish to customize your adventure further look at Customizing the Adventure section

Save Data (EX_SaveData)

  • The variables in this Blueprint don't need to be modified in any way

Adventure Info (AdventureInfo_EX)

  • Max Collectables
    • Set the maximum amount of collectables available in your adventure
  • Save Data
    • Save Data Type
      • You can change this to EX_SaveData_S1 if you wish for your game to have Spyro 1 moveset and treasure skins
    • Important


      You need to set Save Slot Names variables to unique names or else your and everyone else's adventures will overwrite each others savedata
  • UI
    • Homeworld Names
      • Adjust the name of your homeworld. Type in all caps

Construction Script of Adventure Info
This is an array that defines bunch of stuff about the levels in the adventure. Find the two nodes below and modify accordingly

In Make LevelItem_Inventory_Info node adjust the Hint Text variable
Alt Tag

In Make Level_InventoryInfo node adjust Level Name and Number Of Gems variables
Alt Tag

Level Blueprints

  • Click Blueprints icon near the top in the middle
  • Click Open Level Blueprint
  • Alt Tag
  • In the Unified Level Setups node adjust:
    • Current Level Name
    • Level Music

Adjusting the Adventure Template

Changing adventure name in Title Screen

  • Open EX_TitleScreen
  • Open the Level Blueprint
  • Adjust the Gold Text variable in the last node (Set Text)

Adding the adventure to Adventure Select Screen

  • Open Adventure_Select_Screen
  • Open the Level Blueprint
  • Choose Adventure_Select_Example in second to last node (Create Adventure Select Widget)
    Alt Tag

Changing adventure title in Adventure Select Screen

  • Open Adventure_Select_Example widget in UI folder
  • Choose Button_EX in the menu on the left
    Alt Tag
  • Type your adventure's title in Button Text variable in the menu on the right
    Alt Tag
  • Compile and Save

Custom loadscreen

  • Open EX_Loadscreen in UI folder
  • Pick Image_0 from Hierarchy menu on the left
  • Pick a different image in Appearance section on the right

Level Import and Set-up

Note

This section assumes you're using the Adventure Template linked above

  • Open 01_Level1 map in Levels folder
  • Import the level mesh (use .fbx format) with these settings:
    • Vertex Color Import Option - Replace
    • Material Import Method - Do Not Create Material
      Alt Tag
  • Open the level mesh and set Collision Complexity to Use Complex Collision as Simple
    Alt Tag
  • Place the mesh on the scene. Make sure the spawn point is aligned to Spyro - https://imgur.com/a/ZvAagz1
  • Import your level texture if it wasn't imported together with the mesh
  • Open the texture and set Texture Group to 2D Pixels (unfiltered) in the second to last Level of Detail section
    Alt Tag
  • Open MI_Level1 material in Materials folder
  • Assign your level texture
    Alt Tag
  • Assign MI_Level1 material to material slot of your imported level mesh
    assign-level-material.png
  • 🛈 You can adjust the Brightness and Saturation parameters on the material to your liking
    Alt Tag

After these steps you're free to place and setup entities such as treasure, collectibles, enemies, fodder and NPCs. Detailed instructions are in Getting Started section

Info

If the level texture shifts around too much (affine warping effect) apply Subdivision Surface Modifier to the mesh in Blender (1 square to 4 squares) which roughly approximates the subdivision the original games do at runtime to geometry that's near the camera

If you use the adventure template and want to add more levels to your project simply open the 01_Level1, 02_Level2 maps etc. and repeat the previous steps

If you have a map that can work as a homeworld you're free to replace the placeholder Gnorc Gnexus style hub

Mesh Settings Cheat Sheet
x Collision Presets Collision Complexity Double Sided Geometry
Main level geometry BlockAll Use Complex Collision As Simple
Wooden surface BlockAll Use Complex Collision As Simple ✔️
Swimmable water Custom... Use Complex Collision As Simple ✔️
Drownable water BlockAll Use Complex Collision As Simple
Acid Custom... Use Complex Collision As Simple ✔️
Lava BlockAll Use Complex Collision As Simple
Skybox NoCollision Project Default
Skybox Import and Set-up
  • Import and open the skybox mesh
  • Assign Untex_Vertex_Color material
    Alt Tag
  • Set Collision Presets to NoCollision
    Alt Tag
  • Select BP_Skybox in the World Outliner (top right)
    Alt Tag
  • Select StaticMesh component
  • Replace the skybox mesh with the one you imported
    Alt Tag
Import and Set-up of Swimmable/Drownable Water, Acid and Lava

The geometry of whatever liquid you have in the level needs to be separate from main one. If you have for example both swimmable and drownable water in the level you need to import 3 separate geometries in total:

  • Main level geometry (the one Spyro walks on)
  • Swimmable water geometry
  • Drownable water geometry
  • Import and open the static mesh of the liquid
  • Create a material instance of M_PSX_Water and assign it to the mesh
  • Tip: In case of Swimmable Water just assign one of pre-made M_PSX_Water material instances. Though, if you wanna customize it, create an instance first!
  • Set Collision Complexity to Use Complex Collision as Simple
  • In case of Swimmable Water and Acid tick Double Sided Geometry
    Alt Tag
  • Set Collision Presets to:
    • Swimmable Water - Custom
    • Drownable Water - BlockAll
    • Acid - Custom
    • Lava - BlockAll
  • Custom collision preset for Swimmable Water and Acid:
    Alt Tag
    Tip: Select OverlapAll then Custom. It will save you some clicking
  • Drag and drop a blueprint into the map:
    • Swimmable Water - Swimmable_Water_BP
    • Drownable Water - Drownable_Water_BP
    • Acid - Swimmable_Water_BP with Acid variable set to ✔️
    • Lava - HotLava_BP
  • Select the component
    • Swimmable Water - Water_Mesh
    • Drownable Water - Hitbox
    • Acid - Water_Mesh
    • Lava - Hitbox
  • Replace the Static Mesh
  • You can modify the material instance to your liking. Assign the liquid's texture and play with the parameters until you get desired result. Take a look at following materials:
    • Drownable Water - Past_Chasms_Drownable_Water_mat
    • Acid - Red_Acid_Mat
    • Lava - cauldron_acid_mat
Import and Set-up of Wooden Surfaces

Same story as above, the geometry of wooden surfaces needs to be separate if you want the sound effect to play when stepping on them

Import the mesh, assign the material, tick Double Sided Geometry and set the collision complexity to use complex, then:

  • Drag and drop Wooden_Surface_BP
  • Select both Collision and Hitbox components
  • Replace the Static Mesh with your geometry of wooden surface
Import and Set-up of Sound Files

Note

Unreal support only .wav format for sound files. You can convert sound files using Audacity, foobar2000 or FFmpeg

Open the sound file once you imported it and set the Class variable in Sound section to:

  • SpyroSound_Music in case of music
    • Tick Looping variable
  • SpyroSound_SFX in case of SFX
  • SpyroSound_Dialogue in case of dialogue
    sound-setup.png
    Adjust the Volume variable if sound is too loud or too quiet

Customizing the Adventure

Once you have done setting up your adventure whether simple way or hard way you'll probably want to customize it. This section details every single variable in relevant blueprints that allow you to modify your Spyro game out of the box

Save Data Blueprint

(EX_SaveData in the Adventure Template)

Default
  • Save Slot Icon - do not alter this variable!
  • Incoming Cutscene - the cutscene that plays when player travels through portal for the first time
  • Current Save Icon - do not alter this variable!
  • Lives - amount of lives game starts with
  • Skill Level - skill level at the start of the game
  • Players Breaths - default breath
    • For example, setting it to 0000100000000000000 will cause wind to be default breath
Skins
  • Players Current Spyro Skins - default Spyro skin
    • For example if you want to make a game with Cynder as a main character, set all 5 variables to Cynder skeletal mesh
  • Players Current Sparx Skins - same as above but for Sparx/dragonfly companion
  • Head 0 Normal 1 Big 2 Small - default size of the player's head
  • Wings 0 Normal 1 Big 2 Small - default size of the player's wings
  • Players Current Sunglasses - default sunglasses
    • 0 - None
    • 1 - Trans Pride
    • 2 - Gay Pride
    • 3 - Lesbian Pride
    • 4 - Ace Pride
    • 5 - Bi Pride
    • 6 - Pan Pride
    • 7 - Demi Pride
    • 8 - Classic
  • Players Tints - default tint of the player
  • Unlocked Spyro Skins - controls which Spyro skins are unlocked. Add new elements to array and tick the appropriate checkboxes depending on which skins do you want to be unlocked at the start of the game
  • Unlocked Sparx Skins - same as above but for Sparx/dragonfly companion
  • Spyro Has Angry Eyes - angry expression from Spyro 2: Ripto's Rage/Gateway to Glimmer
  • Players Flat Mode - flat Spyro inspired by cheat codes from original trilogy
  • S1 Treasure - this turns on Spyro 1 skins for gems and treasure containers
Cheats
  • Cheats Menu Unlocked - unlocks cheat menu for the player without a need to enter cheat code
  • Levels Cheat - unlocks all levels
  • Level Warping - unlock warping to levels from Inventory menu
  • Fairy Breath Lock - locks Spyro's breath when he gets kissed by elemental fairies
  • Players Cheat Supercharge - Supercharge cheat
  • Players Cheat Invincibility - Invincibility cheat
  • Players Cheat Superfly - Superfly cheat
  • Players Extra Min HP - extra minimum hit point. Sparx will turn red when he's at minimum hp
  • Players Extra MAX HP - extra maximum hit point. Sparx will be glowing when he's at maximum hp
Number of Collectibles
  • Do not alter any variables there! Adjust total collectibles in AdventureInfo instead!
Levels
  • Current Level - a level the adventure begins with. It can be either a homeworld or intro level like Glimmer in Spyro 2
  • Do not alter any other variables!
Adventure Settings
  • Players Disable Double Jump - if unticked, Spyro will have double jump glitch from Spyro 2: Ripto's Rage/Gateway to Glimmer
  • Players Hover - controls whether Spyro has hover ability
  • Players Charge Air Cancel - if unticked, charge in the air will not be able to be canceled like in Spyro 1
  • Adventure Settings Unlocked - unlocks adventure settings menu for the player without a need to enter cheat code
  • Players Supercharge Style - controls the default supercharge mechanics
    • Spyro 1 Style - gain speed when moving down and lose speed when moving up. The smoke progresses from white to yellow to orange to red as the Supercharge gets faster. Lose too much speed, and it becomes a regular charge
    • Spyro 2&3 Style - always stays at a consistent speed, even when going uphill or downhill
    • Reignited Style - gain speed as time passes. The smoke progresses from white to yellow to orange as the Supercharge gets faster
  • Players Fast Glide - fast gliding mechanic from Spyro 1
  • Players Charge Air Boost - when enabled, if Spyro charges in the air, he gets boosted forward like in Spyro 1
  • Players Floaty Charge Jump - if unticked, Spyro will have charge jump mechanics from Spyro 1
Spyro moveset and abilities table

Refer to the table below if you want to re-create how things are set-up in each game of Spyro trilogy

x Spyro 1 Spyro 2 Spyro 3
Players Supercharge Style Spyro 1 Style Spyro 2&3 Style Spyro 2&3 Style
Players Fast Glide ✔️
Players Charge Air Boost ✔️
Players Floaty Charge Jump ✔️ ✔️
S1 Treasure ✔️
Spyro Has Angry Eyes ✔️
Players Disable Double Jump ✔️ ✔️
Players Hover ✔️ ✔️
Players Charge Air Cancel ✔️ ✔️
Adventure Info Blueprint

(EX_AdventureInfo in the Adventure Template)

Skins

If you made a new skin, you can add it here

  • Add a new element to Spyro Skins Struct
    • Mesh - the Skeletal Mesh of your skin
    • Name - name of your skin
    • First Appearance
      • If it's some character from game, type for example First Appearance: Spyro the Dragon (1998)
      • If it's an OC, type Original Character of JohnDoe
    • Lore - the lore behind your skin
    • Sunglasses Transform - adjust the transform of sunglasses here so they're correctly positioned
  • The same goes for Sparx skins
Max Collectables

Adjust the maximum amount of collectables player can get in your game

  • Max Gems
  • Max Primary Collectables
  • Max Secondary Collectables
  • Max Tertiary Collectables
  • Max Skill Points
Collectibles
  • Primary Collectible HUD Icon - the main collectable icon displayed in the HUD
  • Primary Collectible Black Background - same as above but displayed in level completion HUD
  • Primary Collectible Actor Type - main collectable in your game
  • Secondary/Tertiary/Quaternary Collectible Actor Types - pick your other collectibles here if you made them
  • Levels Inventory Info - do not alter this variable!
UI
  • Title Screen Logo - a static image of your title screen logo
  • Load Screen Type - the load screen widget
  • Pause Menu - the pause menu widget
  • Inventory Menu - the inventory menu widget
  • Homeworld Names - array defining the names of homeworlds. Type in all caps for example SUNRISE SPRING

Tip

If you know what you're doing you can customize the widgets to your needs. Simply duplicate the LevelTotals_Widget, PauseMenu or Loadscreen widgets and pick them here

Save Data
  • Save Data Type - a reference to save data blueprint. No need to change this once you've setup the adventure
    • If you use the Adventure Template, you can set it to EX_Savedata_S1 to have a game with Spyro 1 moveset and treasure skins
  • Save Slot Names - the names that the save slots use. As a reminder, these need to be set to unique names
Maps
  • Title Screen Map
  • Intro Cutscene - the cutscene that plays after player starts the game
  • Game Over Map
Level Totals

You can customize the appearance of Inventory Menu here

  • Static Level Totals Background - a static image of your inventory menu
  • Skill Points Requirement Text - the text that displays when player tries to go to epilogue but didn't collect all skill points yet
  • Level Totals Name - name of inventory menu for example Atlas, Guidebook, Diary etc.
  • View Epilogue Text - a prompt that instructs player how to view the epilogue

If you want to re-use the diary pick the PageX_to_PageY flipbooks in Level Totals Page X to Y variables

Universal Save Data Blueprint

Warning

The Universal Save Data is not modular and any changes you make here apply to every adventure in your build.
Most variables are pretty self-explanatory or should be left at default so only a few of them will be detailed here.

  • Open Spyro_Universal_Save_Data Blueprint
Default
  • Gem Behaviour
    • Classic - Player will always keep the gems you collect, even when they lose a life, Game Over, or exit level from the Pause Menu.
    • Fairy Frenzy - When player dies or exits level from the Pause Menu, all the gems they collected in the current level return to their original locations. They can permanently save gems by having a fairy save their progress or by entering a portal.
    • Soulslike - On death, player drops their bag of gems collected in this level. Return to the last valid ground you had stood on to get them back, but if they die again before that (or exit level from the Pause Menu, or ever Game Over), the gems return to their original locations. Player can save their gems by entering a portal.
    • Hardcore - When player dies or exit level from the Pause Menu, all the gems they collected in the current level return to their original locations. Player can permanently save their gems by entering a portal.
  • DPad Breaths - allows player to change the breaths on D-Pad
  • Hide Adventure Select - Uncheck this if you have more than one adventure in the build
  • Current Permadeath Setting
    • Disabled - Dying will not have any consequences.
    • Only on Game Over - If Lives are enabled in the Difficulty menu, and player Game Overs, they'll be returned to the title screen and their save file will be deleted!
    • Any Death - If player dies, they'll be returned to the title screen and their save file will be deleted!
Difficulty
  • Retro Lives - When enabled, player gains lives from blue butterflies. If they lose all lives, it's Game Over! When disabled, player can't Game Over.
  • Fairy Fall - When enabled, if the player falls into a bottomless pit, drown, or burn in lava, they'll be returned to the last valid ground they had stood on.

Advanced

This section assumes user has at least intermediate knowledge/experience with Unreal Engine and knows what they're doing

Advanced Adventure Set-up

If you don't want to use the Adventure Template, here you'll find the steps that will allow you to get started. Anything detailed here is the bare minimum to get a functional game. If you want to adjust things further, go to Customizing the Adventure section

Save Data Blueprint

First, you need to create a save data blueprint

  • Create a child blueprint from Spyro_SaveData
  • Right click -> Create Child Blueprint Class
  • Open your created Blueprint
Default
  • Incoming Cutscene - set to CiC_Cutscene_01_Meet_Malgam or else game will crash on portal transition with this error:

PIE: Warning: TravelFailure: ClientTravelFailure, Reason for Failure: 'Failed to load package '/Game/SpyroContent/S3_YearOfTheDragon_Assets/S3_Levels/Home_01_SunriseSpring/01_SunriseSpring/01_SunriseSpring''. Shutting down PIE.

  • Workaround - place this in the Level Blueprint of your homeworld after Unified Level Setups node:
    portal-transition-crash-workaround.png
Levels
  • Current Level - set this to the level your adventure begins with. It can be either a homeworld or intro level like Glimmer in Spyro 2
Adventure Info Blueprint

The second step is to create adventure info blueprint

  • Create a child blueprint from AdventureInfo_Base
  • Right click -> Create Child Blueprint Class
  • Open your created Blueprint
Save Data
  • Save Data Type - pick your created SaveData blueprint here
  • Save Slot Names - change these to unique names
Maps
  • Title Screen Map
    • Duplicate CiC_TitleScreen
    • Set the adventure info to your adventure in the Level Blueprint of duplicated CiC_TitleScreen
    • Pick the duplicated CiC_TitleScreen here
    • Tip


      You can alternatively download EX_TitleScreen from there - https://drive.google.com/drive/folders/1k-_cEkel62uOiBY8pKNifs28WZ7EU5Z8
      It's a barebones title screen with no cutscene which you can easily customize
  • Game Over Map
    • Pick CiC_GameOver or duplicate it and customize it to your needs
UI
Collectibles
  • Primary Collectible HUD Icon - pick Dragon_Candle_Flipbook_Mat
  • Primary Collectible Black Background - pick Dragon_Candle_Flipbook_Black
  • Primary Collectible Actor Type - pick Dragon_Candle_BP
Adventure Info Construction Script

Tip

Copy the Construction Script of AdventureInfo_CiC. It will be faster to modify it rather than create all the nodes from scratch

This is where you need customize the adventure for the diary/atlas/guidebook to work properly
Basically there's a bunch of arrays listing the available items in each level
If you want to adjust the number of items, right click on Make array node and click Add array element pin or Remove array element pin

The Make LevelItem_Inventory_Info node defines the type of collectable and it's hint message to show in the diary
Alt Tag

In Make Level_InventoryInfo node adjust Level Name, Number Of Gems and Level Warp Name variables
Alt Tag

Level Blueprints
  • Click Blueprints icon near the top in the middle
  • Click Open Level Blueprint
    Alt Tag
  • Put the Unified Level Setups node after Begin Play and adjust things such as:
    • Current Level Name
    • Player Spawned From This Map:
      • Place BP_Spyro in the level
      • Drag the BP_Spyro from the World Outliner to the blueprint graph and connect it to this variable
    • World Context Object:
      • Drag out the pin
      • Type self
      • Choose Get a reference to self
    • Incoming Skybox
      • Place BP_Skybox in the level
      • Drag the BP_Skybox from the World Outliner to the blueprint graph and connect it to this variable
    • Homeworld
      • Tick if your level is a homeworld
    • Current Adventure Info
      • Pick your adventure info blueprint
    • Level Music
    • Start Level Underwater?
      • Tick if your level starts underwater
    • Homeworld Index
    • Level Index

Controlling where Spyro arrives in the level

Note

You don't need to do that for homeworlds

  • Place BP_Spyro at coordinates of X 0 Y 0 Z -3000
  • Align your level mesh so the spawn point is at these coordinates and points the right way

Note

You can do it either in-editor or Blender. It is best to do so before you place any entities. If you already did select every actor in the level and drag them. The editor will lag a bit, though

  • I'm providing screenshot from Astral Utopia as example:
    astral-utopia-example.png

Distance Fade Effect

There are three methods to achieve the effect. For now only one will be detailed

Fade to low LOD texture
  • Create a lower level of detail version of your texture like in provided example
    • Before:
      newtexture.png
    • After:
      newtexture-LOD.png
  • In the instance of Level_Geometry_Mat tick:
    • Fades to Texture
    • Fades to texture AND vertex color
    • fades to the same UV map
  • Pick your LOD texture in Faraway Color Texture variable
  • Make sure DistanceFade_Amount is set to 1

Adding a custom collectable

  • Open Basic_Collectable_BP
  • The comments made by developer in the Event Graph should tell you anything you want to know

Adding a custom talisman

  • Duplicate and rename BoatPart_Base_BP
  • Open your duplicated blueprint
  • Delete connection from Save a Collectible node and connect it to NPC Reward Process:
    • Before:
      talisman-before.png
    • After:
      talisman-after.png
  • Make a child blueprint of your talisman and open it
  • Select StaticMesh component (on the left sidebar)
  • Replace the static mesh (on the right sidebar)

Rewarding the talisman

  • Select the NPC which you want to award the talisman to player
  • Select your talisman blueprint in Award Item variable
  • Tick Awards An Item
  • award-talisman.png

Compiling your fangame

Before you compile

  • Click Edit
  • Select Project Preferences...
  • Select Maps & Modes
  • Set Game Default Map to the title screen of your game
  • If you're using the Adventure Template, pick EX_TitleScreen
    default-map.png

To compile your game, you need to have Visual Studio 2022 installed with the required Workloads and Components
The following tutorial from Epic Games will guide you through the steps you need to take - https://dev.epicgames.com/documentation/en-us/unreal-engine/setting-up-visual-studio-development-environment-for-cplusplus-projects-in-unreal-engine

Once you installed Visual Studio:

  • Click File
  • Select Package Project
  • Select Windows (64-bit)
What to do if you can't install Visual Studio or packaging process is failing
  • If you kept your work outside of SpyroContent folder:
    • Zip the folders in Content folder where you keep your work using 7-Zip
    • Upload to Google Drive and share on the Discord server and someone will compile the project for you
  • Alternatively you can zip the whole project folder if you're not sure or have a fast internet

Music

Note

Ticked checkbox means the artist granted explicit permission for usage of their music in Spyro/Crash fangames. Generally speaking, artists don't mind if their music is used in fangames especially if they're credited, but try to reach out to them if you want to use the tunes they made

Crash:

Tips

  • Remember to save and backup your work often!
  • Asset organisation:
    • In Content folder, create a folder named YourNicknameContent
      • Keep whatever you make inside of that folder
      • When you want to upgrade to newer Spaghetti version, just copy the aforementioned folder into it
    • If you want to modify something in SpyroContent, create a child blueprint or make a duplicate and put it into YourNicknameContent
    • Sometimes, it's not practical to do this so here's a few tips for managing a fork:
      • Mark any changes inside blueprints with a comment (Right click -> Add a comment)
      • Keep a list of changes inside easily accessible text file you won't forget about
      • When you'll want to migrate the changes, open an instance of both the older and newer project, put them side by side and copy the blueprint nodes
      • To find the changes click CTRL+SHIFT+F and type whatever text you marked your alterations with (for example in my Crash fork they're marked with Bandicoot Mode)
  • Download the Source_Assets zip from Google Drive. There's a lot of goodies there you might find interesting
  • Asset dump from Spyro OT - https://mega.nz/folder/ldwixKjC#eYJETuxQFR_0nL8czECBDQ
  • If you're lacking inspiration for Spyro levels, take a look at These Spyro Worlds Do Not Exist profile on Twitter
  • Programming socks might improve your coding performance. Consider getting a pair to try for yourself
Edit

Pub: 09 Feb 2025 18:30 UTC

Edit: 20 Aug 2025 02:48 UTC

Views: 1020