diff --git a/doc/specs/udmf_srb2.txt b/doc/specs/udmf_srb2.txt new file mode 100644 index 000000000..b0efad006 --- /dev/null +++ b/doc/specs/udmf_srb2.txt @@ -0,0 +1,310 @@ +=============================================================================== +Universal Doom Map Format Sonic Robo Blast 2 extensions v1.0 19.02.2024 + + + Copyright (c) 2024 Sonic Team Junior. + 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 discusses the UDMF implementation found in Sonic Robo Blast 2's engine. + +======================================= +I. Grammar / Syntax +======================================= + + No changes. + +======================================= +II. Implementation Semantics +======================================= + +------------------------------------ +II.A : Storage and Retrieval of Data +------------------------------------ + + No changes. + +----------------------------------- +II.B : Storage Within Archive Files +----------------------------------- + + No changes. + +-------------------------------- +II.C : Implementation Dependence +-------------------------------- + +The SRB2 engine only supports the following namespace: + "srb2" + +The engine is allowed to refuse maps with an unsupported namespace, +or emit a warning. + +======================================= +III. Standardized Fields +======================================= + +The SRB2 engine ignores any user-defined fields. +All boolean fields default to false unless mentioned otherwise. + +Sonic Robo Blast 2 defines the following standardized fields: + + vertex + { + x = ; // X coordinate. No valid default. + y = ; // Y coordinate. No valid default. + zfloor = ; // Floor height at this vertex. Only applies to triangular sectors + zceiling = ; // Ceiling height at this vertex. Only applies to triangular sectors + } + + linedef + { + id = ; // ID of line. Interpreted as tag. + moreids = ; // Additional line IDs, specified as a space separated list of numbers (e.g. "2 666 1003 4505") + + v1 = ; // Index of first vertex. No valid default. + v2 = ; // Index of second vertex. No valid default. + + blocking = ; // Line blocks things. + blockmonsters = ; // Line blocks enemies. + twosided = ; // Line is 2S. + dontpegtop = ; // Upper texture unpegged. + dontpegbottom = ; // Lower texture unpegged. + skewtd = ; // Upper and lower textures are skewed. + noclimb = ; // Line is not climbable. + noskew = ; // Middle texture is not skewed. + midpeg = ; // Middle texture is pegged. + midsolid = ; // Middle texture is solid. + wrapmidtex = ; // Line's mid textures are wrapped. + nonet = ; // Special only takes effect in singleplayer games. + netonly = ; // Special only takes effect in multiplayer games. + bouncy = ; // Line is bouncy. + transfer = ; // In 3D floor sides, uses the sidedef properties of the control sector. + + alpha = ; // Translucency of this line. Default is 1.0 + renderstyle = ; // Render style. Can be: + // - "translucent" + // - "add" + // - "subtract" + // - "reversesubtract" + // - "modulate" + // - "fog" + // Default is "translucent". + + special = ; // Linedef action. Default = 0. + arg0 = ; // Argument 0. Default = 0. + arg1 = ; // Argument 1. Default = 0. + arg2 = ; // Argument 2. Default = 0. + arg3 = ; // Argument 3. Default = 0. + arg4 = ; // Argument 4. Default = 0. + arg5 = ; // Argument 5. Default = 0. + arg6 = ; // Argument 6. Default = 0. + arg7 = ; // Argument 7. Default = 0. + arg8 = ; // Argument 8. Default = 0. + arg9 = ; // Argument 9. Default = 0. + stringarg0 = ; // String argument 0. + stringarg1 = ; // String argument 1. + + sidefront = ; // Sidedef 1 index. No valid default. + sideback = ; // Sidedef 2 index. Default = -1. + + comment = ; // A comment. Implementors should attach no special + // semantic meaning to this field. + } + + sidedef + { + offsetx = ; // X offset. Default = 0. + offsety = ; // Y offset. Default = 0. + + texturetop = ; // Upper texture. Default = "-". + texturebottom = ; // Lower texture. Default = "-". + texturemiddle = ; // Middle texture. Default = "-". + + repeatcnt = ; // Number of middle texture repetitions. Default = 0 + + sector = ; // Sector index. No valid default. + + scalex_top = ; // X scale for upper texture. Default = 1.0. + scaley_top = ; // Y scale for upper texture. Default = 1.0. + scalex_mid = ; // X scale for mid texture. Default = 1.0. + scaley_mid = ; // Y scale for mid texture. Default = 1.0. + scalex_bottom = ; // X scale for lower texture. Default = 1.0. + scaley_bottom = ; // Y scale for lower texture. Default = 1.0. + offsetx_top = ; // X offset for upper texture. Default = 0.0. + offsety_top = ; // Y offset for upper texture. Default = 0.0. + offsetx_mid = ; // X offset for mid texture. Default = 0.0. + offsety_mid = ; // Y offset for mid texture. Default = 0.0. + offsetx_bottom = ; // X offset for lower texture. Default = 0.0. + offsety_bottom = ; // Y offset for lower texture. Default = 0.0. + + comment = ; // A comment. Implementors should attach no special + // semantic meaning to this field. + } + + sector + { + heightfloor = ; // Floor height. Default = 0. + heightceiling = ; // Ceiling height. Default = 0. + + texturefloor = ; // Floor flat. No valid default. + textureceiling = ; // Ceiling flat. No valid default. + + lightlevel = ; // Light level. Default = 255. + lightfloor = ; // The floor's light level. Default is 0. + lightceiling = ; // The ceiling's light level. Default is 0. + lightfloorabsolute = ; // true = 'lightfloor' is an absolute value. Default is + // relative to the owning sector's light level. + lightceilingabsolute = ; // true = 'lightceiling' is an absolute value. Default is + // relative to the owning sector's light level. + + special = ; // Sector special. Default = 0. + id = ; // Sector tag/id. Default = 0. + moreids = ; // Additional sector IDs/tags, specified as a space separated list of numbers (e.g. "2 666 1003 4505") + + xpanningfloor = ; // X texture offset of floor texture. Default = 0.0. + ypanningfloor = ; // Y texture offset of floor texture. Default = 0.0. + xpanningceiling = ; // X texture offset of ceiling texture. Default = 0.0. + ypanningceiling = ; // Y texture offset of ceiling texture. Default = 0.0. + xscalefloor = ; // X texture scale of floor texture. Default = 1.0. + yscalefloor = ; // Y texture scale of floor texture. Default = 1.0. + xscaleceiling = ; // X texture scale of ceiling texture. Default = 1.0. + yscaleceiling = ; // Y texture scale of ceiling texture. Default = 1.0. + rotationfloor = ; // Rotation of floor texture in degrees. Default = 0.0. + rotationceiling = ; // Rotation of ceiling texture in degrees. Default = 0.0. + ceilingplane_a = ; // Define the plane equation for the sector's ceiling. Default is a horizontal plane at 'heightceiling'. + ceilingplane_b = ; // 'heightceiling' will still be used to calculate texture alignment. + ceilingplane_c = ; // The plane equation will only be used if all 4 values are given. + ceilingplane_d = ; // The plane is defined as a*x + b*y + c*z + d = 0 with the normal vector pointing downward. + floorplane_a = ; // Define the plane equation for the sector's floor. Default is a horizontal plane at 'heightfloor'. + floorplane_b = ; // 'heightfloor' will still be used to calculate texture alignment. + floorplane_c = ; // The plane equation will only be used if all 4 values are given. + floorplane_d = ; // The plane is defined as a*x + b*y + c*z + d = 0 with the normal vector pointing upward. + + lightcolor = ; // Sector's light color as RRGGBB value. Default = 0x000000. + lightalpha = ; // Sector's light opacity. Default = 25. + fadecolor = ; // Sector's fog color as RRGGBB value. Default = 0x000000. + fadealpha = ; // Sector's fog opacity. Default = 25. + fadestart = ; // Sector's fading range start. Default = 0. + fadeend = ; // Sector's fading range end. Default = 31. + colormapfog = ; // Sector's colormap uses fog lighting. + colormapfadesprites = ; // Sector's colormap affects full-bright sprites. + colormapprotected = ; // Sector's colormap is not affected by colormap change specials. + + flipspecial_nofloor = ; // Trigger effects that require a plane touch are not executed when the floor is touched. + flipspecial_ceiling = ; // Trigger effects that require a plane touch are executed when the ceiling is touched. + triggerspecial_touch = ; // Trigger effects are executed anywhere in the sector. + triggerspecial_headbump = ; // Trigger effects are executed if the top of the triggerer object touches a plane. + triggerline_plane = ; // Trigger effects require a plane touch to be executed. + triggerline_mobj = ; // Trigger effects can be executed by non-pushable objects. + + invertprecip = ; // Inverts the precipitation effect; if the sector is considered to be indoors, + // precipitation is generated, and if the sector is considered to be outdoors, + // precipitation is not generated. + gravityflip = ; // Sector flips any objects in it, if the sector has negative gravity. + heatwave = ; // Sector has the heat wave effect. + noclipcamera = ; // Sector is not tangible to the camera. + outerspace = ; // Sector has the space countdown effect. + doublestepup = ; // Sector has half the vertical height needed for objects to walk into it. + nostepdown = ; // Sector has the staircase effect disabled. + speedpad = ; // Sector is a speed pad. + starpostactivator = ; // Sector activates any Star Posts in it when walked into by a plyer. + exit = ; // Sector is an exit sector. + specialstagepit = ; // Sector is a Special Stage pit. + returnflag = ; // Sector returns any Capture the Flag flags that come in contact with it to their respective bases. + redteambase = ; // Sector is a Red Team base. + blueteambase = ; // Sector is Blue Team base. + fan = ; // Sector is a fan sector. + supertransform = ; // Sector transforms any players that come in contact with it into their 'super' mode. + forcespin = ; // Sector forces any players that come in contact with it to roll. + zoomtubestart = ; // Sector is the starting point of a zoom tube path. + zoomtubeend = ; // Sector is the ending point of a zoom tube path. + finishline = ; // Sector is a Circuit finish line. + ropehang = ; // Sector is a rope hang. Must be applied to a 3D floor. + jumpflip = ; // Sector flips the gravity of players who jump from it. + gravityoverride = ; // Reverse gravity effect is only applied when an object is in the sector. + + friction = ; // Sector's friction factor. + gravity = ; // Sector's gravity. Default is 1.0. + damagetype = ; // Damage type for sector damage. Can be: + // - "None" + // - "Generic" + // - "Water" + // - "Fire" + // - "Lava" + // - "Electric" + // - "Spike" + // - "DeathPitTilt" + // - "DeathPitNoTilt" + // - "Instakill" + // - "SpecialStage" + // Default = "None". + triggertag = ; // Tag to trigger when this sector is entered. Default = 0. + triggerer = ; // Who can execute the trigger tag when this sector is entered. Can be: + // - "Player" + // - "AllPlayers" + // - "Mobj" + // Default = "Player". + + comment = ; // A comment. Implementors should attach no special + // semantic meaning to this field. + } + + thing + { + id = ; // Thing ID. Default = 0. + moreids = ; // Additional thing IDs, specified as a space separated list of numbers (e.g. "2 666 1003 4505") + + x = ; // X coordinate. No valid default. + y = ; // Y coordinate. No valid default. + + height = ; // Z height relative to floor. + // Relative to ceiling if flip = true. + // Absolute if absolutez = true. + // Default = 0. + + angle = ; // Map angle of thing in degrees. Default = 0 (East). + pitch = ; // Pitch of thing in degrees. Default = 0 (horizontal). + roll = ; // Roll of thing in degrees. Default = 0. + scalex = ; // Horizontal visual scaling on thing. Default = 1.0. + scaley = ; // Vertical visual scaling on thing. Default = 1.0. + scale = ; // Vertical and horizontal visual scaling on thing. Default = 1.0. + mobjscale = ; // Physical scale of the thing. Default = 1.0. + + type = ; // Thing type. No valid default. + + flip = ; // Thing spawns flipped, on the ceiling. + absolutez = ; // If true, the thing height is absolute, instead of being relative to the floor or ceiling. + + arg0 = ; // Argument 0. Default = 0. + arg1 = ; // Argument 1. Default = 0. + arg2 = ; // Argument 2. Default = 0. + arg3 = ; // Argument 3. Default = 0. + arg4 = ; // Argument 4. Default = 0. + arg5 = ; // Argument 5. Default = 0. + arg6 = ; // Argument 6. Default = 0. + arg7 = ; // Argument 7. Default = 0. + arg8 = ; // Argument 8. Default = 0. + arg9 = ; // Argument 9. Default = 0. + stringarg0 = ; // String argument 0. + stringarg1 = ; // String argument 1. + + comment = ; // A comment. Implementors should attach no special + // semantic meaning to this field. + } + + +======================================= +Changelog +======================================= + +1.0: 19.02.2024 +Initial version. + +=============================================================================== +EOF +=============================================================================== \ No newline at end of file