=============================================================================== Universal Doom Map Format Sonic Robo Blast 2 extensions v1.0 19.02.2024 Copyright (c) 2024 Sonic Team Junior uses Universal Doom Map Format Specification v1.1 as a template, original document Copyright (c) 2009 James Haley. 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. nophysics_floor = ; // Disables floor slope physics if created through a plane equation. nophysics_ceiling = ; // Disables ceiling slope physics if created through a plane equation. 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 ===============================================================================