mirror of
				https://github.com/KartKrewDev/RingRacers.git
				synced 2025-10-30 08:01:28 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			273 lines
		
	
	
	
		
			13 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			273 lines
		
	
	
	
		
			13 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
===============================================================================
 | 
						|
Universal Doom Map Format - Ring Racers extensions v1.0 - 20.09.2024
 | 
						|
 | 
						|
	Copyright (C) 2025 Sally Cochenour.
 | 
						|
	Copyright (C) 2025 Kart Krew Dev.
 | 
						|
 | 
						|
	Permission is granted to copy, distribute and/or modify this document
 | 
						|
	under the terms of the GNU Free Documentation License, Version 1.2
 | 
						|
	or any later version published by the Free Software Foundation;
 | 
						|
	with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
 | 
						|
 | 
						|
===============================================================================
 | 
						|
 | 
						|
This document serves to only specify changes that "Dr. Robotnik's Ring Racers"
 | 
						|
makes to the base UDMF specification.
 | 
						|
 | 
						|
=======================================
 | 
						|
I. Grammar / Syntax
 | 
						|
=======================================
 | 
						|
 | 
						|
No changes were made.
 | 
						|
 | 
						|
=======================================
 | 
						|
II. Implementation Semantics
 | 
						|
=======================================
 | 
						|
 | 
						|
------------------------------------
 | 
						|
II.A : Storage and Retrieval of Data
 | 
						|
------------------------------------
 | 
						|
 | 
						|
No changes were made.
 | 
						|
 | 
						|
-----------------------------------
 | 
						|
II.B : Storage Within Archive Files
 | 
						|
-----------------------------------
 | 
						|
 | 
						|
Between the TEXTMAP and ENDMAP lumps, Ring Racers supports the following
 | 
						|
additional lumps:
 | 
						|
 | 
						|
	BEHAVIOR = Compiled ACS code.
 | 
						|
	ZNODES = Compiled extended / GL friendly nodes. These are required.
 | 
						|
	PICTURE = A Doom graphic lump, expected to be 320x200. Intended to be a
 | 
						|
		screenshot of the map itself. This is used by the game for level
 | 
						|
		select menus.
 | 
						|
	MINIMAP = A Doom graphic lump, expected to be 100x100. Intended to be a
 | 
						|
		an overview of the map. This is used by the game for the minimap
 | 
						|
		on-screen HUD.
 | 
						|
	ENCORE = A Doom flat lump, expected to be 16x16. Describes a color remap
 | 
						|
		palette to use in Encore Mode.
 | 
						|
	TWEAKMAP = A Doom flat lump, expected to be 16x16. Describes a color remap
 | 
						|
		palette to use outside of Encore Mode.
 | 
						|
 | 
						|
Any lumps not listed or specified in the original document will be ignored by
 | 
						|
the game. In particular, the "SCRIPTS" lump is considered to be ACS source
 | 
						|
code, and is garantueed to be ignored by the engine.
 | 
						|
 | 
						|
--------------------------------
 | 
						|
II.C : Implementation Dependence
 | 
						|
--------------------------------
 | 
						|
 | 
						|
Ring Racers does not aspire for Doom backwards compatibility, thus it does not
 | 
						|
support any of the namespaces in the original document, and only implements
 | 
						|
its own: "ringracers". Any maps not using the "ringracers" namespace is
 | 
						|
considered unsupported.
 | 
						|
 | 
						|
=======================================
 | 
						|
III. Standardized Fields
 | 
						|
=======================================
 | 
						|
 | 
						|
Ring Racers' namespace implements the following additional fields:
 | 
						|
 | 
						|
	version = <integer>;	// Specifies the map format version.
 | 
						|
							// This is used for resolving backwards compatibility issues.
 | 
						|
 | 
						|
							// Note that this doesn't map directly to specification version;
 | 
						|
							// it means behavior of an already existing field or action special
 | 
						|
							// was changed.
 | 
						|
 | 
						|
							// 0 / default - RR indev
 | 
						|
							// 1 - RR v2.0, spec v1.0
 | 
						|
							// 2 - RR v2.4, spec v1.0
 | 
						|
 | 
						|
	linedef
 | 
						|
	{
 | 
						|
		moreids = <string>; // Additional IDs, specified as a space separated list of numbers (e.g. "2 666 1003 4505")
 | 
						|
 | 
						|
		arg5 = <integer>; // Argument 5. Default = 0.
 | 
						|
		arg6 = <integer>; // Argument 6. Default = 0.
 | 
						|
		arg7 = <integer>; // Argument 7. Default = 0.
 | 
						|
		arg8 = <integer>; // Argument 8. Default = 0.
 | 
						|
		arg9 = <integer>; // Argument 9. Default = 0.
 | 
						|
 | 
						|
		stringarg0 = <string>; // String argument 0. This replaces usage of 'arg0' when specified.
 | 
						|
		stringarg1 = <string>; // String argument 1. This replaces usage of 'arg1' when specified.
 | 
						|
 | 
						|
		alpha = <float>;		// Transparency value of the mid-textures. Default = 1.0.
 | 
						|
		renderstyle = <string>;	// The rendering mode to use for the mid-textures.
 | 
						|
								// Can be "translucent", "add", "subtract", "reversesubtract", "modulate", or "fog".
 | 
						|
								// Default = "translucent".
 | 
						|
 | 
						|
		// The following flags default to false.
 | 
						|
		blockplayers = <bool>; // true = line blocks players.
 | 
						|
		skewtd = <bool>; // true = upper and lower textures are skewed to match slopes.
 | 
						|
		noskew = <bool>; // true = mid-textures are not skewed to match slopes.
 | 
						|
		midpeg = <bool>; // true = invert mid-texture unpegged behavior.
 | 
						|
		midsolid = <bool>; // true = mid-texture has collision.
 | 
						|
		wrapmidtex = <bool>; // true = mid-textures are wrapped.
 | 
						|
		nonet = <bool>; // true = special is disabled in networked multiplayer games.
 | 
						|
		netonly = <bool>; // true = special is only enabled in networked multiplayer games.
 | 
						|
		notbouncy = <bool>; // true = disable bouncing collision.
 | 
						|
		transfer = <bool>; // true = use FOF transfer properties effect.
 | 
						|
	}
 | 
						|
 | 
						|
	sidedef
 | 
						|
	{
 | 
						|
		repeatcnt = <integer>;		// Number of times to mid-texture wrap. Default = 0.
 | 
						|
	}
 | 
						|
 | 
						|
	vertex
 | 
						|
	{
 | 
						|
		zfloor = <float>;			// The floor height at this vertex, for vertex slopes.
 | 
						|
		zceiling = <float>;			// The ceiling height at this vertex, for vertex slopes
 | 
						|
	}
 | 
						|
 | 
						|
	sector
 | 
						|
	{
 | 
						|
		lightfloor = <integer>;			// The floor's light level. Default is 0.
 | 
						|
		lightceiling = <integer>;		// The ceiling's light level. Default is 0.
 | 
						|
 | 
						|
		lightfloorabsolute = <bool>;	// true = 'lightfloor' is an absolute value. Default is
 | 
						|
										// relative to the owning sector's light level.
 | 
						|
		lightceilingabsolute = <bool>;	// true = 'lightceiling' is an absolute value. Default is
 | 
						|
										// relative to the owning sector's light level.
 | 
						|
 | 
						|
		moreids = <string>; // Additional IDs, specified as a space separated list of numbers (e.g. "2 666 1003 4505")
 | 
						|
 | 
						|
		xpanningfloor = <float>;		// X texture offset of floor texture, Default = 0.0.
 | 
						|
		ypanningfloor = <float>;		// Y texture offset of floor texture, Default = 0.0.
 | 
						|
 | 
						|
		xpanningceiling = <float>;		// X texture offset of ceiling texture, Default = 0.0.
 | 
						|
		ypanningceiling = <float>;		// Y texture offset of ceiling texture, Default = 0.0.
 | 
						|
 | 
						|
		rotationfloor = <float>;		// Rotation of floor texture in degrees, Default = 0.0.
 | 
						|
		rotationceiling = <float>;		// Rotation of ceiling texture in degrees, Default = 0.0.
 | 
						|
 | 
						|
		floorplane_a = <float>;			// Define the plane equation for the sector's floor. Default is a horizontal plane at 'heightfloor'.
 | 
						|
		floorplane_b = <float>;			// 'heightfloor' will still be used to calculate texture alignment.
 | 
						|
		floorplane_c = <float>;			// The plane equation will only be used if all 4 values are given.
 | 
						|
		floorplane_d = <float>;
 | 
						|
 | 
						|
		ceilingplane_a = <float>;		// Define the plane equation for the sector's ceiling. Default is a horizontal plane at 'heightceiling'.
 | 
						|
		ceilingplane_b = <float>;		// 'heightceiling' will still be used to calculate texture alignment.
 | 
						|
		ceilingplane_c = <float>;		// The plane equation will only be used if all 4 values are given.
 | 
						|
		ceilingplane_d = <float>;
 | 
						|
 | 
						|
		friction = <float>;				// Sector's friction. Default = 0.90625.
 | 
						|
		gravity = <float>;				// Sector's gravity multiplier. Default = 1.0.
 | 
						|
		damagetype = <string>;			// Damage inflicted by the sector.
 | 
						|
										// Can be "None", "Generic", "Lava", "DeathPit", "Instakill", or "Stumble".
 | 
						|
										// Default = "None".
 | 
						|
 | 
						|
		action = <integer>;				// Sector action, same as line special. Default = 0.
 | 
						|
		arg0 = <integer>;				// Argument 0. Default = 0.
 | 
						|
		arg1 = <integer>;				// Argument 1. Default = 0.
 | 
						|
		arg2 = <integer>;				// Argument 2. Default = 0.
 | 
						|
		arg3 = <integer>;				// Argument 3. Default = 0.
 | 
						|
		arg4 = <integer>;				// Argument 4. Default = 0.
 | 
						|
		arg5 = <integer>;				// Argument 5. Default = 0.
 | 
						|
		arg6 = <integer>;				// Argument 6. Default = 0.
 | 
						|
		arg7 = <integer>;				// Argument 7. Default = 0.
 | 
						|
		arg8 = <integer>;				// Argument 8. Default = 0.
 | 
						|
		arg9 = <integer>;				// Argument 9. Default = 0.
 | 
						|
		stringarg0 = <integer>;			// String argument 0. This replaces usage of 'arg0' when specified.
 | 
						|
		stringarg1 = <integer>;			// String argument 1. This replaces usage of 'arg1' when specified.
 | 
						|
 | 
						|
		lightcolor = <integer>;			// Sector's light color as RRGGBB value. Default = 0x000000.
 | 
						|
		lightalpha = <integer>;			// Sector's light color alpha value. Default = 25.
 | 
						|
		fadecolor = <integer>;			// Sector's fog color as RRGGBB value. Default = 0x000000.
 | 
						|
		fadealpha = <integer>;			// Sector's fog color alpha value. Default = 25.
 | 
						|
		fadestart = <integer>;			// Sector's fog start distance. Default = 0.
 | 
						|
		fadeend = <integer>;			// Sector's fog end distance. Default = 31.
 | 
						|
 | 
						|
		// The following flags default to false.
 | 
						|
		colormapfog = <bool>;				// true = render transparent planes at light level instead of fullbright
 | 
						|
		colormapfadesprites = <bool>;		// true = fog color affects fullbright sprites
 | 
						|
		colormapprotected = <bool>;			// true = colormap cannot be changed at run-time
 | 
						|
 | 
						|
		flipspecial_nofloor = <bool>;		// true = plane touch specials aren't ran when on the floor
 | 
						|
		flipspecial_ceiling = <bool>;		// true = plane touch specials are ran when on the ceiling
 | 
						|
		triggerspecial_touch = <bool>;		// true = specials are ran when touching edges of sector
 | 
						|
		triggerspecial_headbump = <bool>;	// true = plane touch specials are ran when touching the opposite plane than gravity
 | 
						|
		invertprecip = <bool>;				// true = precipitation spawning rules are inverted
 | 
						|
		gravityflip = <bool>;				// true = flip gravity of objects in this sector
 | 
						|
		heatwave = <bool>;					// true = add heat wave screen effect
 | 
						|
		noclipcamera = <bool>;				// true = camera is not blocked by this sector
 | 
						|
		ripple_floor = <bool>;				// true = add ripple effect to floor
 | 
						|
		ripple_ceiling = <bool>;			// true = add ripple effect to ceiling
 | 
						|
		invertencore = <bool>;				// true = encore remap rules are inverted
 | 
						|
		flatlighting = <bool>;				// true = directional lighting is forced off
 | 
						|
		forcedirectionallighting = <bool>;	// true = directional lighting is forced on
 | 
						|
		nostepup = <bool>;					// true = objects can't step up
 | 
						|
		doublestepup = <bool>;				// true = objects have increased step up
 | 
						|
		nostepdown = <bool>;				// true = objects can't step down
 | 
						|
		cheatcheckactivator = <bool>;		// true = players activate cheat checks when in this sector
 | 
						|
		exit = <bool>;						// true = players finish match when entering sector
 | 
						|
		deleteitems = <bool>;				// true = items instantly explode when entering sector
 | 
						|
		fan = <bool>;						// true = players are propelled upwards in this sector
 | 
						|
		zoomtubestart = <bool>;				// true = sector is start of a zoom tube
 | 
						|
		zoomtubeend = <bool>;				// true = sector is end of a zoom tube
 | 
						|
 | 
						|
		repeatspecial = <bool>;				// true = repeatable action
 | 
						|
		continuousspecial = <bool>;			// true = action is executed every game tick
 | 
						|
		playerenter = <bool>;				// true = player activates when entering
 | 
						|
		playerfloor = <bool>;				// true = player activates when touching floor
 | 
						|
		playerceiling = <bool>;				// true = player activates when touching ceiling
 | 
						|
		monsterenter = <bool>;				// true = enemy activates when entering
 | 
						|
		monsterfloor = <bool>;				// true = enemy activates when touching floor
 | 
						|
		monsterceiling = <bool>;			// true = enemy activates when touching ceiling
 | 
						|
		missileenter = <bool>;				// true = items / projectiles activate when entering
 | 
						|
		missilefloor = <bool>;				// true = items / projectiles activate when touching floor
 | 
						|
		missileceiling = <bool>;			// true = items / projectiles activate when touching ceiling
 | 
						|
	}
 | 
						|
 | 
						|
	thing
 | 
						|
	{
 | 
						|
		pitch = <integer>; 		// Pitch of thing in degrees. Default = 0 (horizontal).
 | 
						|
		roll = <integer>; 		// Pitch of thing in degrees. Default = 0 (horizontal).
 | 
						|
 | 
						|
		scalex = <float>;		// Vertical visual scale on thing. Default = 1.0.
 | 
						|
		scaley = <float>;		// Horizontal visual scale on thing. Default = 1.0.
 | 
						|
		scale = <float>;		// Vertical and horizontal visual scale on thing. Default = 1.0.
 | 
						|
 | 
						|
		mobjscale = <float>;	// Physical scale on thing. Default = 1.0.
 | 
						|
 | 
						|
		foflayer = <integer>;	// Which FOF is treated as the base floor/ceiling.
 | 
						|
								// This changes what 'height' is relative to.
 | 
						|
								// Default = 0, for no FOF.
 | 
						|
 | 
						|
		// Action special arguments
 | 
						|
		arg5 = <integer>; // Argument 5. Default = 0.
 | 
						|
		arg6 = <integer>; // Argument 6. Default = 0.
 | 
						|
		arg7 = <integer>; // Argument 7. Default = 0.
 | 
						|
		arg8 = <integer>; // Argument 8. Default = 0.
 | 
						|
		arg9 = <integer>; // Argument 9. Default = 0.
 | 
						|
 | 
						|
		stringarg0 = <string>; // String argument 0. This replaces usage of 'arg0' when specified.
 | 
						|
		stringarg1 = <string>; // String argument 1. This replaces usage of 'arg1' when specified.
 | 
						|
 | 
						|
		// These arguments modify object behavior on a per-type basis.
 | 
						|
		// Not to be confused with action special arguments.
 | 
						|
		thingarg0 = <integer>;			// Argument 0. Default = 0.
 | 
						|
		thingarg1 = <integer>;			// Argument 1. Default = 0.
 | 
						|
		thingarg2 = <integer>;			// Argument 2. Default = 0.
 | 
						|
		thingarg3 = <integer>;			// Argument 3. Default = 0.
 | 
						|
		thingarg4 = <integer>;			// Argument 4. Default = 0.
 | 
						|
		thingarg5 = <integer>;			// Argument 5. Default = 0.
 | 
						|
		thingarg6 = <integer>;			// Argument 6. Default = 0.
 | 
						|
		thingarg7 = <integer>;			// Argument 7. Default = 0.
 | 
						|
		thingarg8 = <integer>;			// Argument 8. Default = 0.
 | 
						|
		thingarg9 = <integer>;			// Argument 9. Default = 0.
 | 
						|
		thingstringarg0 = <integer>;	// String argument 0. This replaces usage of 'thingarg0' when specified.
 | 
						|
		thingstringarg1 = <integer>;	// String argument 1. This replaces usage of 'thingarg1' when specified.
 | 
						|
 | 
						|
		// Following flags default to false.
 | 
						|
		flip = <bool>;			// true = object has reversed gravity
 | 
						|
	}
 | 
						|
 | 
						|
=======================================
 | 
						|
Changelog
 | 
						|
=======================================
 | 
						|
 | 
						|
1.0: 20.09.2024
 | 
						|
- Initial document created.
 |