noot.sh

my blog about doom stuff, makers project and coding

Doom Modder Cheat Sheet

Posted by Climhazzard. Updated 19 hours ago

Classic Doom Modder Cheat Sheet

Here's a bunch of snippets, tips & tricks, and other useful info for modding doom.

Creating a new "Player"

// ZSCRIPT.zs
class MyCustomPlayer : DoomPLayer 
{
  Default
  {
    // Edit properties here
  }
}
// MAPINFO
GameInfo
{
  PlayerClasses = "MyCustomPlayer"
}

Listening to a Linedef for a "Player Use" Event

// ZSCRIPT.zs
class MyEventHandler : EventHandler
{
  override void WorldLinePreActivated(WorldEvent e)
  {
    // check for the activation type. ie. a player pressues use on the linedef
    if (e.ActivationType == SPAC_Use && e.Thing && e.Thing.Player)
    {
      // only activate on a linedef where args[0] is 30. 
      if (e.ActivatedLine.args[0] == 30)
      {
        // print a message to the player's screen
        e.Thing.A_Print("You did it!");
      }
    }
  }
}
// MAPINFO
GameInfo
{
  AddEventHandlers = "MyEventHandler"
}

Creating a logger

// Logger.zs
class Logger
{
  enum LogLevel
  {
    Log_Info,
    Log_Warning,
    Log_Error
  }

  const logEnabled = true;

  private static void WriteLog(string levelStr, string msg)
  {
    if (!logEnabled) return;
    Console.Printf("\n[ModName][%s] %s", levelStr, msg);
  }

  static void Info(string msg)
  {
    WriteLog("INFO", msg);
  }

  static void Warning(string msg)
  {
    WriteLog("WARNING", msg);
  }

  static void Error(string msg)
  {
    WriteLog("ERROR", msg);
  }
}

Doom Graphics

Doom sprites follow the format

[XXXX][F][A]

[XXXX] Is the sprite identifier [F] Is the frame letter, A-Z [A] Is the angle, and must be 1, 8 or 16 (16 uses 1-8 A-F)

Helpful Resources

To create a new mod with zscript quick start

In UDB, create a map in UZDoom Doom2 (UDMF) format. Choose ZDoom ACS as the script type.

Add DOOM2.wad as a resource

Add your project directory as a resource here as well

Tags

Last updated