Render Fix 1.4 is here! And is easily the largest update yet - so big I had to revamp how I create these changelogs - both for users and creators! This update is a major step toward restoring the game back to how it was intended to look on the Dreamcast, and, in turn, finally ridding the game of the Ginja (GameCube Ninja) model format - a process that has already begun in this update. Many long standing issues have also been fixed; a major one being a UV multiplication bug that only effects the HD ports that caused skyboxes, stages, and literally everything else to have UV accuracy issues. Modders aren't left out though, with many new tools and useful functionality to use in their projects either making brand new effects possible or making old ones significantly easier!
Most of this update is only now possible because of Render Fix's new Chunk renderer! It's completely rewritten to fully restore all features and quirks of the original Dreamcast draw functions, solving many visual issues and differences by default. Dreamcast had a total of 5 different Draw functions for Chunk, and each of them were different, and each of them are now correctly emulated in Render Fix! This means newly added support for many Chunk features, including HD UVs and the Flat Shading
and Ignore Ambient
material flags! Battle's renderer was okay, but was rushed, very bare-bones, and missing major features SA2 relies on to function; this includes 'Constant Texture Material', which is always enabled in SA2, but Battle does nothing with it causing every model to have a dark tint. The only thing still missing is specular, which sadly will require a lot more work from here, but the foundations are now in place; this is a major milestone! And, with every aspect of Chunk draw now in Render Fix's control, new extensions to the format have also been added such as multi-pass rendering (for basic transparency sorting), texture error handling, built-in UV scrolling, and texture callback functionality - the latter allowing for very easy texture animations (something that before was quite a task)!
Additionally, basic support for shadow maps has also been added to Chunk (thanks for the help Exant!) although its only intended for LandTables as we begin to port the Dreamcast levels over to PC. This does not mean though that shadow maps are back, it just means their life has been extended a little. There are still no guarantees about their long term viability as Render Fix gets more involved in the rendering process.
With these new Chunk extensions, some older features have been updated to take advantage of them. For example, the Artificial Chaos transparency took advantage of back-face culling to ensure there wasn't glaring transparency sorting issues, however this caused them to look different than they did on Dreamcast. Now though, with multi-pass Chunk rendering, they are double sided as intended - which previously was not possible! The flashing pully (Also known as Udreel) effect has also been updated to take advantage of 1.4's Dreamcast CnkDraw
function emulation, fully restoring the effect as it was originally designed rather than only replicating it visually. And more features too have been updated, and some outright removed because the new Chunk renderer just fixes it outright - this includes the model tint fix, which has been completely eclipsed by the restoration of Constant Texture Material.
Dreamcast character models have also finally made it into Render Fix! It's something I wanted to do for a while, but it just wasn't really possible before 1.4. Transparency issues, model tinting, Chaos 0's texture animation, and more just made it a tall order. But, the new Chunk renderer finally made it possible! Transparency issues fixed by multi-pass, tinting fixed by Constant Texture Material, Chaos 0's texture animation fixed with the new texture callback system; this update was the perfect storm and I had to just go for it! So, Dreamcast models can now be toggled in Render Fix! Animations though are still vanilla, and I didn't get around to bringing back the Big Walker, but please download the Dreamcast Characters mod if you want something more in-depth!
And you read right, replacing Chaos 0's model is now easier than ever! His texture animations will automatically apply to any model, regardless of model structure. And, his model desync when leaning has also been fixed. In the words of Todd Howard, "it just works". I previously took a crack at making it easier, but apparently it still wasn't perfect. Now though? Go crazy! I hope to see more custom Chaos 0 models in the near future! This update also made replacing other models much easier, such as springs and itemboxes. The codeless replacement method doesn't quite work because of how the game handles the model data, but when Render Fix rewrites the objects it correctly reads the new model, making codeless model replacement work as intended!
Modifier shadows also received an important update! Previously, they required Chunk modifier volume models, which neither SAMDL or SAIO could create. This was an issue for modders who wanted to create custom player models, as they were forced to put up with the wrong head shape or copy another player head modifier that sort of fit. Now though, any Chunk model type can be used as a modifier shadow! This will make it much easier for modders to create custom modifier shadows for their mods, allowing them to any exported .sa2mdl regardless of type!
Anyway, I could go on all day, or week, or month about why this update is big. So, I will stop here. If you want to read all of the changes in 1.4, the full changelog is below!
Important Notice For Modders
After updating to 1.4, you may notice your custom models are very dark; this is the Ignore Ambient
material flag, which has been restored in this update. Some models that were changed for Battle had this flag erroneously turned on, and you may have accidentally copied it onto your own models (or in the case of model edits, not turned it off).
I currently believe the scale of the issue is small. But, if you are affected, I have made a tool to quickly fix models which you can download HERE. Drag and drop your affected model onto the EXE and it will remove the flag from any strips that contain it. If the file isn't updated, it didn't contain the flag. No other changes are made to the model.
New Features
- Added a new, rewritten Chunk model rendering pipeline designed from the ground up to correctly emulate the Dreamcast behavior, and also to extend it
- Restores features and functionality that was lost in the ports
- Support for ignoring diffuse material color depending on function used and global 3D flags
- This fixes 'tinting' issues in nearly all cases, by default
- Support for reading ambient material color depending on function used
- Events use this heavily, and is one of the main reasons models appear so bright in the ports
- Support for new material flags, and better support for old ones
- Support for new vertex formats
- Support for new polygon formats
- Support for a new texture filter mode
- Support for ignoring diffuse material color depending on function used and global 3D flags
- Adds new extensions to the format, specific to Render Fix
- Support for UV scrolling
- Support for environment UV scrolling
- Support for texture animations
- Support for texture error handling
- Adds a multi-pass rendering technique for transparency sorting
- This fixes many self-transparency issues on models
- Adds support for emulating all Dreamcast Chunk draw function variants, and their specific quirks (including bugs)
- And more...
- Restores features and functionality that was lost in the ports
- Added Dreamcast character models
- Excluding Dark Chao Walker, or Big Walker
- Can be toggled using the
Character Model Type
Player setting, which is defaultGameCube
- Re-remastered existing GameCube character models, and remastered remaining GameCube character models
- All changes leave model structure alone, avoiding accidental changes caused by model programs (SAMDL/SAIO)
- Material flags have been fixed
- Mostly
Ignore Specular
andIgnore Ambient
, which are incorrectly enabled compared to the Dreamcast models
- Mostly
- Material colors have been mostly left alone (I saw the distaste for the darker eyes and left the diffuse values as-is this time)
- Material ambient color was fixed on the Egg Walker's windshield, as it was tinted blue
- Added modifier volume models from Dreamcast to 1P character model files
- Files are now in little-endian byte order
- Restored remaining player character motion files from the GameCube files
- Speed character glowing auras, like the jump aura, now correctly use
EasyDraw
emulation, which fixes their back-face culling issue for good- This replaces the
Force Jump Aura to Double Sided
Compatibility setting, which has been removed
- This replaces the
- Added new modifier shadows for Tails' tails
- Can be toggled using the
Tails' Tail Shadow
Player setting, which is defaultEnabled
- Can be toggled using the
- Added toggle for modifier shadow shading on player character models
- It can be toggled using the
Character Model Shadowing
Player setting, which is defaultEnabled
- It can be toggled using the
- The Egg Walker, Tails Walker, and Chao Walker now use the sorted Task displayer
- This ensures the transparent parts of their models correctly draw over other objects
- The Egg Walker, Tails Walker, and Chao Walker now draw in multiple passes
- This ensures transparent parts of their models draw correctly over opaque parts, such as the twalker windsheild
- Fixed Chaos 0's outer layer desyncing from the rest of his model when leaning
- Chaos 0's texture animation can now work correctly with any model
- This is done using the new Chunk texture callback system
- This replaces the older
Custom Chaos 0 Model Support
feature, which has been removed
- Added toggle for Chaos 0's texture animation
- Can be toggled using the
Chaos 0 Texture Animation
Player setting, which is defaultEnabled
- Can be toggled using the
- Ported objects to Chunk model format
- Rings and ring shadows
- Generic object shadows
- SpringA, SpringB, and 3Spring
- Ground Itembox
- Green Forest's 'Jungle Objects'
- Rewrote object displayers
- Goal Ring and Lost Chao
- Up-down Reel (pully)
- Item Balloon
- LandTables now automatically determine their model type on load
- This makes it easier for developers to use the Chunk model format for their own levels
- Ninja texture filter mode is now honored when using 2D and 3D
Draw
functions - Fixed Event camera parameters never being updated
- This caused Event effects such as sun flairs to draw incorrectly, or not at all
- Fixed Event reflection data byteswapping logic
- It was previously barely byteswapped at all, leaving the data unusable
- Chunk shape motion functions now correctly call the motion callback function
- It was previously only called in a specific variant, and only for the first object node
- Texture edges when using alpha test now blend more gracefully, rather than hard cutting
- This can be disabled if it causes issues for you using the
Use old Alpha Test Parameters
compatibility setting
- This can be disabled if it causes issues for you using the
- Added more Transparency Fixes and Restoration features
- Fixed transparency sorting issue with the Dry Lagoon butterflies caused by not using the sorted displayer
- Fixed Dry Lagoon butterfly
Use Alpha
material flag being off - Fixed self transparency sorting issues on all Cart models caused by their materials being out of order
- The model is now drawn twice, once opaque polygons and then again with transparent polygons
- Fixed self transparency sorting fix to the chaos drives caused by their materials being out of order
- Fixed Chao World bunny
Use Alpha
material flag being off for their ears- Before their ears had obvious black borders with Render Fix's default textures
- Fixed the 2P character select cursor
Use Alpha
material flag being incorrectly disabled
- Fixed UV issues on Ginja models, like LandTables, caused by the game expecting a
0~255
UV range but the models using0~256
- This is an HD bug, and was fixed by correcting the multiplication values in the Ginja draw function
- Fixed incorrect
Ignore Ambient
material flag for emblem model used in 'Emblem Get' screen - Fixed incorrect
Ignore Ambient
material flag for 2P Battle menu characters - Fixed incorrect
Ignore Ambient
material flag for race carts
Chunk Draw
Render Fix now has it's own Chunk model drawing system! It was built from the ground up to emulate the original Dreamcast functions, even down to the bugs, meaning a 1:1 parity with SA2DC. It also brings new extensions to the format that will help modders perform advanced effects without requiring an in-depth knowledge of the Chunk format. It's worth noting that this does not apply to the Chao specific chCnkDraw
function set, which is used for Chao, Chao Eggs, and Chao Garden trees. It does apply to all other instances of Chunk model drawing though.
Multi-Pass Drawing
Chunk models are now drawn in multiple passes, resolving many sorting-related transparency issues that occur across a single model. There are 4 passes in total, but passes may be skipped depending on the strip attributes of the model. For example, a model with no transparent strips will skip passes 3 and 4. While this fixes most issues, some will still require editing the model itself.
- Execute: this handles executing model instructions, such as polygon caching, and also retrieves model attributes for later passes
- Opaque: all opaque strips are drawn
- Inverse Transparent: transparent back-faces are drawn
- Transparent: transparent front-faces are drawn
Dreamcast CnkDraw
Function Emulation
Parity with the original Dreamcast Chunk draw functions was the main focus when working on Render Fix's own Chunk draw system. However, there wasn't just one draw function on Dreamcast, there were actually 5: EasyDraw, SimpleDraw, EasyMultiDraw, SimpleMultiDraw, and DirectDraw. Each one had advantages, disadvantages, and quirks which gave the game it's unique look - the developers heavily relied on the specifics of each function to make the game look 'right'. By accurately emulating them, many issues and odd differences can be fixed with a single line of code.
It took a lot of work, and help from Exant, to track down all the differences between them - even previously undocumented behavior and bugs were found. But, all the hard work paid off! Render Fix can now properly emulate all 5 draw functions with 1:1 parity with Dreamcast (some minor differences may still lurk but if no-one can prove me wrong, that's basically being right!).
This is not a deep dive into the specifics of each function, if you don't know what each does then you'll be perfectly happy with the default setting. If you wish to know more, I've been working on a document which lists everything you need to know; feel free to contact me if you're interested.
- Function mode is set via the
SetCnkFuncMode
Renderstate API function - Supports
NormalDraw
function mode- This is Render Fix's own function mode that draws models as expected, with no emulation or quirks. Most of the time, this is not what you want, especially if you're drawing vanilla models due to it reading ambient material color.
- Supports
EasyDraw
function emulation - Supports
SimpleDraw
function emulation- This is the default Chunk function mode
- Supports
EasyMultiDraw
function emulation - Supports
SimpleMultiDraw
function emulation - Supports
DirectDraw
function emulation
Ninja 3D Flags
- Added support for
NJD_CONTROL_3D_CONSTANT_TEXTURE_MATERIAL
, which sets draw functions to ignore diffuse color on textured polygons - Added support for
NJD_CONTROL_3D_ENV_UV_SCROLL
, which sets Chunk draw to read the UV offset for environment materials- Environment UV offset can be set via
CnkSetEnvUvScroll
Draw API function - Currently only applies to position-based environment maps (no vertex normals)
- Environment UV offset can be set via
Vertex Formats
- Added support for
NJD_CV
, which contains only position data- Polygons are drawn fullbright, using the set diffuse color as a base
Strip Formats
- Improved
NJD_CS_UVN
support: vanilla uses a UV range of0~255
when the actual range should be0~256
- This fixes all UV issues that were introduced in the HD ports
- Added support for
NJD_CS_UVH
, which contains strip and HD UV data0~1024
Texture Flags
- Added support for
Point Sampling
filter mode
Material Colors
- Added support for reading Ambient material color
- Only used in the
Multi
Chunk draw function modes
- Only used in the
Material Flags
- Improved
Double Sided
support: back-faces now have their normals inverted when usingNormal
orSimple
Chunk draw function modes - Improved
Environment
support: environment maps are now correctly generated when a model lacks vertex normals- In these cases, the in-camera position of the verteces are used as UV coordinates
- Added support for
Ignore Ambient
, which sets the ambient light color to black - Added support for
Flat Shading
, which draws triangles as flat planes- Uses the average of all 3 vertex normals and uses that as the face normal
- This is slightly different from Ninja, which only uses the last vertex normal
- Uses the average of all 3 vertex normals and uses that as the face normal
Extensions
- Supports drawing shadow maps with certain vertex types
- Currently only active by default on LandTables, but can be manually activated using the same functions as Ginja
- If an unsupported vertex format is present, the model drawing is skipped
- Supports texture error handling, which replaces textures with a pink and black error pattern when it otherwise would have crashed. It catches:
- When the current texlist pointer is
nullptr
- When the texture ID is larger than the current texlist
- When the texmanage pointer is
nullptr
, which is in the texname - When the texsystem pointer is
nullptr
, which is in the texmanage
- When the current texlist pointer is
- Supports 'UV Offset', which can be used to animate UVs on a model at draw time. In contrast to before, where the model data needed to be edited on-the-fly
- Set via
CnkSetUvScroll
Draw API function
- Set via
- Supports 'Environment UV Offset', which can be used to animate environment mapped UVs on a model at draw time. This is otherwise literally impossible
- Set via
CnkSetEnvUvScroll
Draw API function - Requres the
NJD_CONTROL_3D_ENV_UV_SCROLL
flag be set - This was a part of Ninja2, called
njCnkSetUvScroll
. I didn't use that name for obvious reasons - Currently only supported on no-vertex-normal environment maps, as regular envs are performed on the GPU
- Set via
- Supports 'Texture Callback', which allows for easy texture animations by changing the texture IDs at draw time using a function. In contrast to before, where the model data needed to be edited on-the-fly
- Set via
CnkSetTextureCallback
Draw API function
- Set via
Misc
- Model shader is now always set, regardless of if
CnkBeginDrawModel
is called- This fixes potential issues with drawing inside a motion callback, which may also set the shader, causing graphical issues
- Diffuse color is now set to the shader as a raw
float
value, rather than being converted to 32bit ARGB first
Dreamcast Player Models
- Models are unchanged from Dreamcast, but texture IDs have been shifted to match the vanilla texture files
- Chaos 0 is the exception, as some more work was required to get him drawing correctly; mostly splitting his inner and outer layers
- Some Dreamcast models have or required texture file changes from vanilla:
- Chaos 0 has different Dreamcast textures, but they're only used when his texture animation is also disabled
- Super Shadow required a texture change for his regular form's head, due to differences between the DC and GC red stripe
- Dark Chao Walker, Dreamcast's Big Walker, is unchanged as it's significantly more work to restore than the other characters
Chunk Ports/New Displayers
This update is the first of many that begins removing the Ginja (GameCube Ninja) model format from the game, piece by piece. While perfectly optimized for the GameCube, it's slow to draw on everything else and is also barely understood. The Chunk model format is the opposite, very well understood with a lot of documentation. It's only real downside also being solved in this update; the lack of shadow map support.
- Rings and Ring Shadow
- Models have been ported to Chunk
- Using model already in the game
- Models have been ported to Chunk
- Goal Ring and Lost Chao
- Restored transparency on the Goal Ring model
- Is back-face culling agnostic
- Both sides of text are correctly drawn
- Lost Chao is now only drawn once
- An oversight in the code caused it to previously draw twice
- This replaces the
Goal Ring Transparency
feature, which has been removed
- Restored transparency on the Goal Ring model
- Generic ring shadow used by other objects
- Model has been ported to Chunk
- Using model already in the game
- Model has been ported to Chunk
- SpringA, SpringB, and 3Spring
- Models have been ported to Chunk
- Using models already in the game
- Now follows object tree, allowing for replacement via the Mod Loader
- Models have been ported to Chunk
- Udreel (Up-Down-Reel / Pully)
- Restores Dreamcast flashing effect, which abused differences between the Chunk draw variants
njDirectDrawObject
for the darker phase, andnjCnkEasyDrawModel
for the lighter phase
- This replaces the
Pully Fix
feature, which has been removed
- Restores Dreamcast flashing effect, which abused differences between the Chunk draw variants
- Itembox (ground) solid pieces ported to Chunk
- Solid pieces ported to Chunk
- Using model already in the game
- Now follows object tree, allowing for replacement via the Mod Loader
- Solid pieces ported to Chunk
- Item Balloon
- No noticeable difference
- This replaces the
Item Balloon Transparency
feature, which has been removed
- Green Forest's 'Jungle Object'
- Models have been ported to Chunk
- Using
/RFMDL/stage/03_jungle/jo_wrock.sa2mdl
, for the wall rock model - Using
/RFMDL/stage/03_jungle/jo_grock.sa2mdl
, for the ground rock model - Using
/RFMDL/stage/03_jungle/jo_tree.sa2mdl
, for the overhanging tree
- Using
- This replaces the
Tree Jungle Object
feature, which has been removed
- Models have been ported to Chunk
Changes
- The Back-Face Culling config setting has been moved to the 'Compatibility' section, and now disables the feature rather than enable it
- Removed Model Tint Fix feature, as the new Chunk draw solves all tinting issues without further action needed
- Removed Flip Environment Map Textures config setting, as new Chunk draw system matches Dreamcast and the setting would have no effect
- The
Transparency Sorting Fixes
config setting has been renamed toTransparency Fixes and Restorations
to better fit it's current scope - Multiple features have been moved to the 'New Displayers' feature set, and are now always-on
- Enemy Jet effects fix
- Final Chase's Gravity Cylinder transparency fixes
- Optimized how polygons are sorted by using newer Render Fix features for Chunk draw, which should increase performance
- Prison Siren transparency fixes
- Tree Jungle Object restoration
- Now all 'Jungle Objects' use their original Dreamcast models due to porting to Chunk, the added effect is also restoring this tree model
- Pully fix (Udreel)
- It now also correctly restores the flashing effect. Before it just emulated it as the effect wasn't well understood
- Water particles fix
- Artificial Chaos now draw both sides of their transparent polygons, rather than only the front-faces, fully restoring them back to how they looked on Dreamcast
- This is only now possible due to the new Chunk draw's multi-pass drawing method
- The Dreamcast Ring Shadows config setting is now in the 'Misc' section
- The Tails Walker Foot Shadow fix config setting is now in the 'Player' section
- Modifier shadow intensity is now set via
rjSetCheapShadowMode
, which correctly emulates the original Dreamcast function- This also means the original Dreamcast shadow intensity values can be used, without needing conversion
- This fixes an off-by-one bug that previously caused the shadows to be just a bit too dark
- This function can be called by other mods using the Draw API function of the same name
- This also means the original Dreamcast shadow intensity values can be used, without needing conversion
- Removed shadow opacity settings, as they were rarely used and the intensity system has changed
- The Modifier Shadows config setting is now in the
Global
section - The Global Shadow Mode is now controlled by the main modifier shadow setting, and the seperate config setting has been removed.
- If modifier shadows are on, the game will use modifier shadows.
- To disable shadows as before, a new
Disable Shadows
setting has been added to theMisc
section which defaults to 'Disabled'
- The Player Shadow Mode config setting has been moved to the
Player
section - The Shadow Map Resolution config setting has been moved to the
Misc
section - Removed
Custom Chaos 0 Model Support
feature, as it's now obsolete (read New Features) - Removed
Force Jump Aura to Double Sided
feature as it's now obsolete (read New Features) - Removed the DC Shadows mod crash patch, as the mod is now obsolete
- Modified
SONICTEX.pak
, now uses a higher quality version ofstx_00
- Modified
E_KUMITEX.pak
, disabled alpha test onenemy_01
- Modified
E_EXPTEX.pak
, disabled alpha test onenemy_01
- The 'Clear!' sprite transparency fix is now part of 'Transparency Fixes and Restorations' feature set, rather than always-on
- Removed Fix Env Maps feature, as new Chunk draw system fixes this outright
- Any other Env maps issues are solved by modifier shadows
- Removed
Disable Back-Face Culling in Events
config setting, back-face culling is now always disabled when using the 'Enhanced Event Renderer'- This is because the old system will never be able to correctly handle back-face culling, making the setting pointless
- When using the experimental New RF Event Renderer, back-face culling is correctly applied. This will eventually become the default, and the old renderer will be removed
- The 'Enhanced Event Renderer' now disables the
NJD_CONTROL_3D_CONSTANT_TEXTURE_MATERIAL
flag during events. This is to ensure backwards compatibility with Cutscene Revamp (for now) - The Event Texture Animations fix is now always-on, and the config setting has been removed
- This has been tested enough now that a setting is pointless
- Compilation optimization settings changed, may marginally improve performance
New Technical Features
- Added little endian support for player
#MDL.PRS
files - Added duplicate data support for player
#MDL.PRS
files - Fixed Rouge load crash when her model lacked weight data on part of her back
- This allows the Dreamcast model to be loaded without changes
- Player modifer shadows now attempt to use the modifier volume model stored in the
#MDL.PRS
before using the fallback model in/RFMDL/figure/
- Added
RFD_CHECKVER
macro to API header, for quickly checking Render Fix's mod version against a constant version - Added new functions to the Control API module
- Added new functions to the Feature API module
- Added new functions to the Draw API module
- Added new functions to the Render State API module
Player Model (#MDL.PRS)
- The game now supports model files compiled in little-endian byte order!
- This allows the game to skip byteswapping when loading, which leads to a slightly faster load time
- Now supports duplicated model data, for example re-used
plist
info.- The game would otherwise crash due to data and pointers being fixed more than once
Control API
- Added
EventApplyModelDiffuse
, which enables diffuse material color on textures during events when Render Fix's Event renderer is active- Just disables
NJD_CONTROL_3D_CONSTANT_TEXTURE_MATERIAL
during Event draw
- Just disables
Feature API
- Added
NewEventRenderer
, for Render Fix's 'New Event Renderer' which is currently an experimental toggle- This will be useful for those who require features from the Renderer for their own events
- Added
Chaos0TexAnim
, for Chaos 0's GameCube texture animation - Added
DreamcastPlayerModel
, for the player model state of each character- Because of mod priority sorting, there's no guarantee that every character will use the same model type
- Added
DisablePlayerShadowing
, for the player modifier shading state
Draw API
- Added
CnkModDrawMotion
, for drawing object motion - Added
CnkModDrawMotionLink
, for drawing motion link - Added
CnkModDrawShapeMotion
, for drawing shape motion - Added
CnkModDrawShapeMotionLink
, for drawing shape link - Added
CnkModDrawShapeMotionBE
, for drawing big-endian shape motion - Added
CnkModDrawShapeMotionLinkBE
, for drawing big-endian shape link - Added
CnkDrawModel
, for drawing Chunk model - Added
CnkDrawObject
, for drawing Chunk object tree - Added
CnkDrawMotion
, for drawing object motion - Added
CnkDrawMotionLink
, for drawing motion link - Added
CnkDrawShapeMotion
, for drawing shape motion - Added
CnkDrawShapeMotionLink
, for drawing shape link - Added
CnkDrawShapeMotionBE
, for drawing big-endian shape motion - Added
CnkDrawShapeMotionLinkBE
, for drawing big-endian shape link - Added
CnkSetUvScroll
, for setting UV offset for Chunk draw - Added
CnkSetEnvUvScroll
, for setting environment map UV offset for Chunk draw- Offset applies when
NJD_CONTROL_3D_ENV_UV_SCROLL
is set - Currently only applies to normal-less environment maps
- Offset applies when
- Added
CnkSetTextureCallback
, for setting the current texture callback function- Texture callback is a Render Fix extension, allowing the hot-swapping of texture IDs at draw time
- Added
SetCheapShadowMode
, for setting the intensity of modifier shadows- Lower values mean a lower intensity, or in other words darker shadows
Render State API
- Added
SetCnkFuncMode
, for setting the Chunk draw function emulation mode- Default is
RFRS_CNKFUNCMD_SIMPLE
- Default is
- Added
SetCnkPassMode
, for setting the transparent multi-pass order for cases with an inverted matrix- Default is
RFRS_CNKPASSMD_NORMAL
- Default is
- Added
Get
functions for all render states- This can be used to backup a render state, or even take it into account in your own code
Technical Changes
- Any common Chunk model type can now be used as modifier volumes, including weighted models
- This is to make custom modifier shadows easier to create, as SAIO currently doesn't support exporting them
- Actual volume models should still be prefered when the tools have caught up due to their speed and much smaller size
- All API modules are now constant, and aren't set to
nullptr
when outside their availability window- This change was made to make the API less confusing, and to allow storing of function pointers for later use when they would otherwise be unavailable
- Renamed Core API structure member
rf_version
tomodver
, to be generic across different mod APIs - Changed some member names of
RF_VERSION
in API header, to better represent their actual importance- Renamed
minor
tosemimajor
, as some are hardly minor updates - Renamed
hotfix
tominor
, as these updates don't just include fixes
- Renamed
- Bumped mod version in Core API structure to
1, 4, 0, 0
- Control API module structure version is now
1
- Feature API module structure version is now
1
- Draw API module structure version is now
3
- Render State API module structure version is now
2
SetModBufferSize
Control API function now usesint32_t
for it's parameters, oversize_t
. This has no major impact on API-users- Shadow opacity Feature API functions now always return the same value, as it's no longer optional to the user
ShadowOpacityGlobal
now always returns 0.69~ShadowOpacityChao
now always returns 0.55~
- Removed
/RFMDL/b_grobo_body_mod
, as the existing EXE version of the model is now used - Removed
/RFMDL/b_grobo_foot_mod
, as the existing EXE version of the model is now used - Removed
/RFMDL/b_grobo_missile_mod
, as the existing EXE version of the model is now used - All Render Fix model files in
RFMDL
have been renamed and moved to seperate directories- This is to future proof the system and declutter the parent directory
- Most
RFMDL
directories now include a_index.txt
file, which explains what each model file contained is in-game - Re-added diffuse to
/RFMDL/object/udreel
, as the flashing effect relies it- It was previously removed believing the dark diffuse was a mistake
- Added
/RFMDL/stage/03_jungle/jo_tree
, which is the 'Jungle Object' tree model - Added
/RFMDL/stage/03_jungle/jo_wrock
, which is the 'Jungle Object' wall rock model - Added
/RFMDL/stage/03_jungle/jo_grock
, which is the 'Jungle Object' ground rock model
Render Fix Model Files (RFMDL)
- All model files have been moved and renamed to improve folder structure:
/al_shadow
->/chao/al_mod
/amy_head_mod
->/figure/amy_head_mod
/chaos_head_mod
->/figure/chaos_head_mod
/cwalker_body_mod
->/figure/cwalker_body_mod
/cwalker_foot_mod
->/figure/cwalker_foot_mod
/eggman_head_mod
->/figure/eggman_head_mod
/ewalker_body_mod
->/figure/ewalker_body_mod
/ewalker_foot_mod
->/figure/ewalker_foot_mod
/knuckles_head_mod
->/figure/knuckles_head_mod
/metalsonic_head_mod
->/figure/metalsonic_head_mod
/miles_head_mod
->/figure/miles_head_mod
/rouge_head_mod
->/figure/rouge_head_mod
/sonic_head_mod
->/figure/sonic_head_mod
/terios_head_mod
->/figure/terios_head_mod
/tikal_head_mod
->/figure/tikal_head_mod
/twalker_body_mod
->/figure/twalker_body_mod
/twalker_foot_mod
->/figure/twalker_foot_mod
/cart_miles_mod
->/cart/cart_tails_big_mod
/cart_rouge_mod
->/cart/cart_rouge_big_mod
/cart_mod
-> split into many models:/cart/cart_sonic_mod
, for Sonic's cart/cart/cart_sonic_alt_mod
, for Sonic's alt cart/cart/cart_shadow_mod
, for Shadow's cart/cart/cart_shadow_alt_mod
, for Shadow's alt/cart/cart_knuckles_mod
, for Knuckles' cart/cart/cart_knuckles_alt_mod
, for Knuckles' alt cart/cart/cart_eggman_mod
, for Eggman's cart/cart/cart_eggman_alt_mod
, for Eggman's alt cart/cart/cart_tails_mod
, for Tails' cart/cart/cart_rouge_mod
, for Rouge's cart/cart/cart_chao_mod
, for Tails' alt cart/cart/cart_eggrobo_mod
, for Rouge's alt cart
/o_board_mod
->/object/board_mod
/o_bunchin_mod
->/object/bunchin_mod
/o_cc_block_mod
->/object/cc_block_mod
/o_md_contbox_mod
->/object/md_contbox_mod
/o_md_meteo_mod
->/object/md_meteo_mod
/o_md_tank_mod
->/object/md_tank_mod
/o_udreel
->/object/udreel
/e_shouko_mod
->/enemy/shouko_mod
/b_bigbogy_mod
->/boss/bigbogy/bigbogy_mod
/b_fdog_mod
->/boss/fdog/fdog_mod
New Experimental Features
- Added a New RF Event Renderer, which is a completely rewritten Event system built to emulate Dreamcast by taking advantage of Render Fix 1.4's Chunk draw function emulation and restoring the original Event flag and light code
- By correctly emulating the Dreamcast behavior, many broken effects such as lighting, model tinting, and back-face culling can be fixed and restored to their intended look
- Other broken effects, such as reflections, can also be restored now that all aspects of Event draw are in Render Fix's control
- This will remain experimental until Cutscene Revamp is made obsolete, as the mod breaks in many ways when it is enabled
Experimental Changes
Draw Tails' Tail Modifier Shadows
is no longer an experimental feature, and has been added fully to Render Fix- The shadows now more accurately follow the actual position of the tails
Change Shadow Map Opacity in Chao World
has been removed, as shadow maps are no longer actively supportedBetter Edge Blending
is no longer an experimental feature, and has been added fully to Render Fix
Resolved Issues
Game Issues
- Fixed #28 : UV issues on Skybox models
- Fixed #52 : HD Exclusive Stage UV Issues
- Fixed #69 : Glitched Number Textures on Cart Models
- Fixed #89 : Mini-Events Effected by Diffuse (eg. Tinting)
- Fixed #100 : Shadow Maps Can't Cast on Chunk Models
- Fixed #123 : Cyclone Cart Transparency Sorting Issues
- Fixed #124 : Rouge's Cart Transparency Sorting Issues
- Fixed #125 : Chao Cart Transparency Sorting Issues
- Fixed UV issues present on every 3D model in the game
- Fixed HUD texture overdraw issue, where a single row of pixels from the top of textures would draw at the bottom, left on the right, and vice-versa
- Fixed Egg Walker's laser blaster glow not drawing over the stage
- Fixed Tails Walker's laser blaster glow not drawing over the stage
- Fixed Tails Walker's windshield not drawing over the stage
- Fixed self-transparency issues with the player walkers
- Fixed
ShapeMotion
andShapeMotionLink
not calling the set motion callback, or only calling it on the first object node - Fixed speed character "auras" not using the correct texture filtering mode (point sample)
- Fixed Chaos 0's outer layer desyncing from his inner layer when leaning
Render Fix Issues
- Fixed #120 : Speed Aura Effects Incorrectly Effected by Back-Face Culling
- Fixed #121 : Explosion Sprites Don't Draw Behind Explosion Models
- Fixed Modifier Shadows, or Cheap Shadows, being slightly darker than Dreamcast
- Fixed a texture crash when beating the final boss, then trying to play another stage
- Fixed a crash that could occur when using a custom Chaos 0 model
- Fixed the bunny minimal in Chao World having black texture issues on their ears
Known Issues
Render Fix Issues
- When using Dreamcast player models, Rouge's alternate costume has broken wing meshes
- This is caused by the shape motion for the Dreamcast player model being applied to the GameCube wings on the alternate costume model