don't click here

PROJECT Z-TREME (Sega Saturn) - SAGE 2019 tech demo

Project Overview


PROJECT Z-TREME Sage 2019 tech demo
Lava.png Light_halo1.png Lens flare.png Title.png Entity_lighting.png quakeE1M1.png dynamic_lights3.png deathmatch.png Spawn.png quakeE1M1_3.png E1M7_2.png TEST.png

Homebrew full 3d first person shooter for the Sega Saturn!
Including for the first time on the Sega Saturn, splitscreen first person coop and deathmatch gameplay!

UPDATE 2019-11-11 : New map compiler, allowing bigger maps made much faster. I added a new test map made using Trenchbroom (third map), which is bigger and more complex than the previous maps I made. I also added options and a new portal rendering - not full portal rendering, but it's a start. It might lead to problems, so please report them if you find any.

UPDATE 2019-10-27 : Added realtime lighting on the entities! It has a small impact on the framerate in some cases, but I made the entities auto-gib to decrease the load on the slave cpu. Also fixed a bug in Deathmatch where you spawned in a void. A bug where turning around was slow was also fixed. And 2019-10-29 : Fixed a visibility bug where you wouldn't see the other player in deathmatch/coop.

UPDATE 2019-10-22 : Lens flares! It does impact the framerate a little, but the effect is quite good looking. Disabled in multiplayer. I also improved the collision detection (from the tests I made at least).

UPDATE 2019-10-04 : Added Quake's E1M7 map and Saturn Quake's secret Test map. Also improved collisions in Quake's E1M1 map and reduced the overall BSP complexity. The Quake maps should be playable in deathmatch (UP+START to skip levels), but I didn't do much testing. And again, it shouldn't even work (Saturn Quake->NOESIS->Blender->My own BSP compiler -> Z-Treme Engine map....yeah...) so it's mainly for fun and to see how my engine compares with the Slavedriver engine. I also fixed a bug with the planes' bounding boxes, which made some triangles disappear when they crossed the bottom frustum plane.

Expanding on my Sonic Z-Treme's engine from Sage 2018 (, this new iteration of the engine is almost fully rebuilt from the ground up in order to allow much better graphics.

This is a tech demo : it only includes 2 small test maps with one enemy type/model - I just didn't have time to make more and my map/bsp compiler (which works with polygon soups instead of brushes - very bad choice in retrospect) made the task hard and painful. But it's fully playable and the deathmatch mode should be nice enough to warrant replaying the demo once you finished it a few times.

Some of the things present in the new engine :
-Gouraud shading lighting everywhere! (Sonic Z-Treme had flat palette lighting for the maps)
-Fully 3D enemies with AI and animation.
-High res textures (for the Saturn) at 64x64 (vs mostly 16x16 in Sonic Z-Treme - higher res = harder on the VDP1).
-Much much faster rendering code/techniques.
-Full BSP based engine with a PVS occlusion culling system : very similar to the technology used in Quake on PC, but fully running on the Saturn. Yep, PC Quake (with a lots of modifications obviously) would have probably been possible on the underated Saturn.
-Dynamic lighting!
-The highest (AFAIK) 3d enemy count for a FPS on the Saturn : 8+ enemies on screen x 2 in coop mode! (On Saturn Quake, you get perhaps 5 max)
-Way improved culling and low distortion (no more polygons disappearing in your face, no more polygons dancing in your face à la PS1).
-No draw distance limit : the engine doesn't even have a far plane.
-New and fully original matrix, vertex transformation, lighting calculation, polygon creation and polygon sorting code, mostly in C. I don't use the Sega Graphic Libraries anymore for rendering, which allows me to push the system much more.
-Coop and deathmatch with no compromises (except lower framerate obviously).
-High amount of particles everywhere.

A small word on the engine :
It's a BSP based engine using a PVS for occlusion culling. It doesn't eliminate overdraw, but reduces it enough for the VDP1 to be able to display it all at 30 fps. But that overdraw causes a heavy burden on the cpus, mainly the poor slave Cpu which is currently doing 100% of the T&L work (but the main is busy with everything else, which is also a lot). I am currently rewriting huge chunks of the engine to turn it into a portal based engine instead for rendering, which will make the map creation process easier while also improving performances. The engine isn't optimized yet, so please keep that in mind when the framerate drops in some busy areas. I plan to make a game like a terrorist hunt mode from R6 with a focus on multiplayer/deathmatch. And, if I really stick to it long enough (and get some good map designers and artists), I would like to make a full campaign à la Powerslave, but I won't promise anything now as it's a lot of work obviously and I won't do it alone.

Known issues :

-Not PAL optimized : The PAL version (50 hrz) will play slower, I plan to fix that in the future, I just didn't have enough free time.
-Sound FX sometimes don't play. I need to write my own sound driver or figure out what needs to be done to make the old Saturn sound tools working.
-Collision issues : enemies sometimes keep bouncing when they are dead : I just reused Sonic Z-Treme collision code with very few modifications even if it's not ideal with a bsp. (Seems fixed, at the cost of "slow" landing)
-Realtime light might overwrite another light source. Hopefully I will have the scu dsp calculate multiple light sources per face to solve this.
-Sometimes some weird polygons appear on the enemy models. It's probably a slave/main cpu synch issue.
-The Quake E1L1 map is super glitchy : I converted the map with Noesis from Saturn Quake, then imported it in blender, then re-converted it to my own format. It got 2 passes of subdivision (Lobotomy's own and then my own bsp division), the rooms aren't always convex, the portals are weirdly placed, some polygons end up in the wrong leaf, etc. There are way too many polygons as a result and there is a ton of overdraw and the collision is buggy. I just left it here because the graphics still look nice, but keep in mind it's far far far from optimal. I'm pretty sure a stable 30 fps could be achieved if I ever remake the map in my next iteration of the engine. It's not meant to be played in deathmatch either, too few weapons laying around to make it fun and you might even spawn in a void!
-Framerate drops : the precalculated nature of the engine means that you often have more overdraw than needed. The goods news is that it's not even the VDP1 which causes slowdown most of the time, it's the CPUs, so I will fix it in the future (the slave cpu does all the T&L work, so it will be easy to improve that).
-Polygons sometimes get the wrong sorting order.

Using digital controls, if you ever played one of Lobotomy's Saturn FPS, you will feel right at home!
The analog controls are based on the "Jevon" controls in Saturn Quake, aka Turok style controls, instead of the traditional "joystick to move/rotate".
It will feel weird at first since the face buttons aren't in a traditionnal 4 buttons "+" shape, but once you get used to it you might prefer it : YZBC are for movement, the analog stick for look, L to jump, R to shoot, D-pad to switch weapons.
I will add options for "normal" Saturn analog controls in the future, I just didn't have time to add it.
Start to "suicide" your player (if you ever get stuck)

To return to the main menu, like usual for the Sega Saturn, press ABC+Start!

Some future things I am working on right now :
-Portal based engine instead of a BSP engine (BSP are just a real pain to work with : one small mistake and the map can't compile, and even when it compiles, the small quads nature of Saturn games mean that you get sometimes weird results...).
-More transparency, like the light effects in Quake 2 on PS1, but using a similar technique from Burning Rangers (I already got the effect working, I just need to improve it as it's currently a bit slow) (Done 2019-10-22)
-More realtime lighting (on the 3d models, the weapons, etc.) (Done 2019-10-27)
-New maps (duh)
-New enemies.
-Options (including controller stuff, such as "classic" analog controls) (Done 2019-11-11)
-4 players link cable and/or online support (maybe, but probably using a USB dev cart for online gameplay)
-3D weapons models (maybe, it will depend on performances)
-Find something to do for the VDP2 (skyboxes maybe)

Cheat codes (all ingame) :
-L+START/R+START : Switch between wireframe and normal mode.
-UP+START : Skip to next level
-DOWN+START : Cycle the max framerate. It will get very very low (for testing collision), then get back up to a target of 60 (target, it will still be around 20-30 most of the time)
-B+START : Cycle debug stats on and off
-Finish the test maps 2 times to play Quake's E1L1 (partial map - and super buggy since my BSP compiler had to be "hacked" to even make the map compile)

-I do not accept any game making requests or port requests (don't bother asking for Doom or Quake 2, I am not interested in porting them)
-And on a final note, no, Vasectomy Software is not a real thing! It's just meant to be a nod at Lobotomy's software, who inspired me to make this engine/game.


All the assets are temporary, from games such as Powerslave, Quake, Freedoom.
Code and engine by XL2.
Using SBL/SGL.
Thanks also to the folks at Segaxtreme for their support and help.


Item information

Added by
Last update


More in SAGE 2019 [Archive]

More from XL2

Share this item