Zero Tolerance GZDoom - Total Conversion

For Total Conversions and projects that don't otherwise fall under the other categories.
Forum rules
The Projects forums are only for projects. If you are asking questions about a project, either find that project's thread, or start a thread in the General section instead.

Got a cool project idea but nothing else? Put it in the project ideas thread instead!

Projects for any Doom-based engine (especially 3DGE) are perfectly acceptable here too.

Please read the full rules for more details.
stevil935
Posts: 1
Joined: Tue Mar 10, 2026 4:07 pm

Zero Tolerance GZDoom - Total Conversion

Post by stevil935 »

M_DOOM_lowres.png


What is this?
It's a fan-made total conversion of the 1994 Sega Genesis classic "Zero Tolerance," reimagined for the UZDoom/GZDoom engine. This project aims to preserve the unique atmosphere and gameplay of the original while leveraging modern source port features and making quality of life improvements.
The original game was declared freeware by its creators in the early 2000s, and most enemy sprites, weapons, sounds, and music were extracted from the original ROM.

FEATURES:
- Weapons, monsters, UI, sounds, textures, music, etc. all pulled from the original game.
- 40 maps meticulously recreated using data from the original ROM.
- Damage/Health/Size/etc. values have all been updated as needed
- Custom weapon logic to try to closely match the original game for items like flame thrower, landmines, grenades, fire extinguisher, laser dot sights, etc. Some changes made but in most cases they'll probably make the weapons feel better than in the original game.

CHANGES:
- Night vision is now battery powered (Press N to use)
- Elevators replaced with teleporters
- Map 18 layout/teleporting has been adjusted due to engine limitations
- Angled walls have been removed/replaced due to engine limitations
- All new floor and ceiling textures
- VASTLY improved HUD

VERSION:
This is the Initial Alpha/Version 0.1 release and may contain minor bugs or incorrect textures. Please feel free to reach out if you notice anything that requires my attention. I also encourage anyone to build upon or improve my framework. The mod requires UZDoom or GZDoom and doom2.wad to run.

MODDB:
https://www.moddb.com/mods/zero-toleran ... conversion

TRAILER:
Spoiler:
Credits:
Spoiler:
You do not have the required permissions to view the files attached to this post.
User avatar
Facínora
Posts: 165
Joined: Fri Sep 18, 2015 5:46 pm

Re: Zero Tolerance GZDoom - Total Conversion

Post by Facínora »

Interesting. I love this kind of project.
User avatar
prosto
Posts: 4
Joined: Thu Jan 16, 2025 8:47 pm

Re: Zero Tolerance GZDoom - Total Conversion

Post by prosto »

Amazing!
User avatar
prosto
Posts: 4
Joined: Thu Jan 16, 2025 8:47 pm

Re: Zero Tolerance GZDoom - Total Conversion

Post by prosto »

I see the progress is not saved when you go back through the levels. I can help you with it. Here is a proof of the concept of how to implement it:

Code: Select all

class LevelsProgressHandlerPOC : EventHandler
{
    bool firstInitialized;
    B3DPlayer player;

    override void PlayerEntered(PlayerEvent e)
    {
        if (firstInitialized) {
            return;
        }
        if (e.PlayerNumber != consolePlayer) {
            return;
        }
        self.firstInitialized = true;
        self.player = B3DPlayer(players[consolePlayer].mo);
        self.player.loadCurrentLevelProgress();
    }

    override void WorldUnloaded(WorldEvent e)
    {
        self.player.saveCurrentLevelProgress();
    }
}

This is an event handler. It goes into MAPINFO, GameInfo section

Code: Select all

GameInfo
{
    PlayerClasses = "B3DPlayer"
    AddEventHandlers = "LevelsProgressHandlerPOC"
}
Inside Player's class:

Code: Select all


class B3DPlayer : DoomPlayer replaces DoomPlayer
{
    int value;

    void loadCurrentLevelProgress()
    {
        console.printf("loadCurrentLevelProgress called, value from previous level is %d", self.value);
    }

    void saveCurrentLevelProgress()
    {
        self.value += 1;
        console.printf("saveCurrentLevelProgress called, saved %d", self.value);
    }

}
The POC works:

Code: Select all

]map e1m1

----------------------------------------

E1M1 - Hangar

loadCurrentLevelProgress called, value from previous level is 0
No Clipping Mode 2 ON
]god
Degreelessness Mode ON
----------------------------------------
A secret is revealed!
----------------------------------------
saveCurrentLevelProgress called, saved 1

----------------------------------------

E1M2 - Nuclear Plant

loadCurrentLevelProgress called, value from previous level is 1
Game saved.
No Clipping Mode 2 OFF
No Clipping Mode 2 ON
No Clipping Mode 2 OFF
No Clipping Mode 2 ON
No Clipping Mode 2 OFF
saveCurrentLevelProgress called, saved 2

----------------------------------------

E1M3 - Toxin Refinery

Line 933's right edge is unconnected
loadCurrentLevelProgress called, value from previous level is 2
Game saved.

Instead of value, there should be a map levelName -> Progress. Progress should be a class with Arrays, containing different values you need to save, like enemies HPs, picked up items, etc. To get level name inside player's class use Level.Levelname. You can keep progress inside LevelsProgressHandlerPOC class, inside enemies register them like this

Code: Select all

class MyEnemy: Actor
{
	...
	
    LevelsProgressHandlerPOC progress;
    int myId;

    override void PostBeginPlay()
    {
        self.progress = LevelsProgressHandlerPOC(EventHandler.Find("LevelsProgressHandlerPOC"));
        self.myId = self.progress.registerEnemy();
        super.PostBeginPlay();
    }
    
    override int OnDrain(Actor victim, int damage, Name dmgtype)
    {
    	self.progress.onDamage(self.myId, damage);
    }
}
Useful wiki pages:
https://zdoom.org/w/index.php?title=Events_and_handlers
https://zdoom.org/wiki/Structs:LevelLocals
https://zdoom.org/w/index.php?title=Act ... _functions
Last edited by prosto on Fri Apr 03, 2026 10:13 am, edited 1 time in total.

Return to “TCs, Full Games, and Other Projects”