ID24
From DoomWiki.org
ID24 is a specification and standard specifically aimed at mod authors and mods in general. It builds on top of the possibilities shown in the MBF21 standard, acting as a super-set of it, and was first implemented in the KEX Engine source port of Doom + Doom II. It was first used there for the Legacy of Rust episode.
Contents
History[edit]
Initially under development in Rum and Raisin Doom under the name 'RNR24', Doom + Doom II licensed the code and renamed it to 'ID24'. On August 10, 2024 documentation for the standard, titled "ID24 0.99.1" in the files, was released on Google Drive.[1]
Neither the specification 'ID24 0.99.1' nor Doom + Doom II at release are fully compatible with Boom and MBF21 standards, this is due to it being a clean-room re-implementation. Where the ID24 code (all the new tech features) is open to be adopted to source ports, the resources file requires that if you want to use the new monsters, id24res.wad needs to be included.
On August 13, 2024, Simon Howard (Fraggle) announced that the Freedoom project would develop a free replacement for id24res.wad, as part of a subproject named 'FD24',[2] with a branch on the official GitHub repository being created the same day.[3] This will allow any future mods developed against the new ID24 standard to remain playable under Freedoom.
On September 4, 2024 Ethan Watson (GooberMan) announced a draft revision of the spec 'ID24 0.99.2', clarifying that the documents are CC0, with the code being GPL. It revised the wording for id24res.wad, added a self damage factor to ID24HACKED, while ability to apply a translation to every graphic asset in a WAD has been added to GAMECONF, as well as many revisions in the wording in the documentation.[4]
The finalized spec will follow soon.
Features[edit]
- Several new things, including new monsters and props, internally defined with ID24HACKED features.
- Several new control lumps, using JSON format. These include notably:
- Uses the UMAPINFO standard, with some new additions, such as the ability to define intermission scripts with the enteranim and exitanim properties (using lumps in JSON format as the values).
Mapping additions[edit]
ID24 has implemented a few new features and line specials for use by mappers. This section details this new functionality.
Baseline features[edit]
The ID24 map additions are a super-set of the following specifications:
An ID24-capable port is expected to implement all features for those standards.
Reserved indices for line specials[edit]
The following line special index ranges are reserved for future use by id Software and/or its affiliates:
- 2048 - 4095 inclusive
This is easily testable with a bitwise AND with single bit, 0x0800. Any line special outside of the Boom generalised linedef range with this bit set is expected to have been defined by id Software and/or its affiliates; if it has been defined through any other means, this is in violation of the ID24 specification.
Further, the line specials used by ZokumBSP are respected and reserved for use by ZokumBSP. At the time of writing, the following list of indices are reserved:
- 998
- 999
- 1048
- 1078
- 1079
- 1080
- 1081
- 1082
- 1083
- 1084
- 1085
- 1086
UMAPINFO additions[edit]
UMAPINFO defines the bossaction field as a way to activate a line special when all boss monsters of the specified type are killed. It uses a string mnemonic to resolve the type. This was reasonable when it was not possible to have four billion+ different types. As such, bossaction now allows you to specify the thing number as defined by DeHackEd in place of a string mnemonic.
Further, bossactionednum has been added which differs from bossaction by resolving a thing's editor number instead of the thing number directly. The boss actions internally still use the usual thing type values, and as such this field must resolve to a valid thing from the editor number to be able to function correctly.
Any texture and flat can be used on any surface[edit]
ID24 allows both textures defined in TEXTURE1/2 and flats found between flat markers in the WAD directory to be rendered on any floor, ceiling, or wall. TEXTURE1/2 textures rendered on floors and ceilings do not clamp to power-of-2 boundaries but instead render their entire dimensions in a 1:1 ratio of texels to world units. TEXTURE1/2 textures rendered on floors and ceilings tile using the same rules as flats.
For the purposes of rendering a transparent texture on a solid surface, transparent texels must be rendered with palette index 0. Composite textures must clear their texture to palette index 0 before compositing.
Floor and ceiling texture transformations[edit]
There are now line specials to offset floor and ceiling textures, similar to how wall textures are offset. The line special's X and Y direction are treated as the offset values. Offsets are always applied assuming the floor/ceiling is rendering from the origin (0, 0).
Floor and ceiling textures are also rotatable. As per offsets, the rotation is defined by the angle of the line and applied as if the floor/ceiling is rendering from the origin (0, 0). Lines that combine offset and rotation effects perform the offset first and then the rotation.
ID | Usage | Description |
---|---|---|
2048 | Always | Offset target floor texture by line direction |
2049 | Always | Offset target ceiling texture by line direction |
2050 | Always | Offset target floor and ceiling texture by line direction |
2051 | Always | Rotate target floor texture by line angle |
2052 | Always | Rotate target ceiling texture by line angle |
2053 | Always | Rotate target floor and ceiling texture by line angle |
2054 | Always | Offset then rotate target floor texture by line direction and angle |
2055 | Always | Offset then rotate target ceiling texture by line direction and angle |
2056 | Always | Offset then rotate target floor and ceiling texture by line direction and angle |
Music changing[edit]
The new music line specials mean that you no longer are required to use MUSINFO to change the current music track playing. When defining the music track, you set the upper texture to the wanted lump name of the music track when activating the line from the front side; and the lower texture when activating from the back side. The music change is immediate, unlike MUSINFO which has a small delay.
If a lump is not found with the provided name, no music change occurs.
If the upper/lower textures are not set, no music change occurs. The exception is when using the "reset" class of lines, which reverts to the level's default looping music when activated.
ID | Usage | Description |
---|---|---|
2057 | W1 | Change music and make it loop only if a track is defined |
2058 | WR | Change music and make it loop only if a track is defined |
2059 | S1 | Change music and make it loop only if a track is defined |
2060 | SR | Change music and make it loop only if a track is defined |
2061 | G1 | Change music and make it loop only if a track is defined |
2062 | GR | Change music and make it loop only if a track is defined |
2063 | W1 | Change music and make it play only once |
2064 | WR | Change music and make it play only once |
2065 | S1 | Change music and make it play only once |
2066 | SR | Change music and make it play only once |
2067 | G1 | Change music and make it play only once |
2068 | GR | Change music and make it play only once |
2087 | W1 | Change music and make it loop, reset to looping default if no track defined |
2088 | WR | Change music and make it loop, reset to looping default if no track defined |
2089 | S1 | Change music and make it loop, reset to looping default if no track defined |
2090 | SR | Change music and make it loop, reset to looping default if no track defined |
2091 | G1 | Change music and make it loop, reset to looping default if no track defined |
2092 | GR | Change music and make it loop, reset to looping default if no track defined |
2093 | W1 | Change music and make it play only once, reset to looping default if no track defined |
2094 | WR | Change music and make it play only once, reset to looping default if no track defined |
2095 | S1 | Change music and make it play only once, reset to looping default if no track defined |
2096 | SR | Change music and make it play only once, reset to looping default if no track defined |
2097 | G1 | Change music and make it play only once, reset to looping default if no track defined |
2098 | GR | Change music and make it play only once, reset to looping default if no track defined |
Reset exits[edit]
Lines are provided that reset the player's inventory after exiting a map. This removes the requirements for death exits to do such things; and also allows a cleaner way of handling such setups as Eviternity's secret maps rewarding the player with not resetting their inventory on entering MAP16 (i.e. place the reset exit on MAP15 and the flow is preserved naturally since the reset happens at map end instead of map start).
ID | Usage | Description |
---|---|---|
2069 | W1 | Exit to the next map and reset inventory |
2070 | S1 | Exit to the next map and reset inventory |
2071 | G1 | Exit to the next map and reset inventory |
2072 | W1 | Exit to the secret map and reset inventory |
2073 | S1 | Exit to the secret map and reset inventory |
2074 | G1 | Exit to the secret map and reset inventory |
Sector tinting[edit]
Sectors can now have colormaps applied directly to them without needing to use Boom's property transfer line specials. It is also possible to do this dynamically thanks to interactive line special types. When defining the COLORMAP, you set the upper texture to the wanted lump name of the COLORMAP when using the static special or when activating the line from the front side; and the lower texture when activating from the back side.
If a lump is not found with the provided name, or if the upper/lower textures are not set, the sector's COLORMAP is cleared and it uses the current default COLORMAP (as set with the property transfer zone you are in).
When a sector's COLORMAP is set this way, it entirely overrides the default COLORMAP (including property transfers, excluding powerups).
ID | Usage | Description |
---|---|---|
2075 | Always | Set the target sector's colormap |
2076 | W1 | Set the target sector's colormap |
2077 | WR | Set the target sector's colormap |
2078 | S1 | Set the target sector's colormap |
2079 | SR | Set the target sector's colormap |
2080 | G1 | Set the target sector's colormap |
2081 | GR | Set the target sector's colormap |
Scrolling textures[edit]
New special types have been added to scroll both the front and the back sidedefs of a line in the same cardinal direction. The defined direction is relative to the front sidedef of a line.
ID | Usage | Description |
---|---|---|
2082 | Always | Scroll both front and back sidedef's textures according to the line's left direction |
2083 | Always | Scroll both front and back sidedef's textures according to the line's right direction |
2084 | Always | Scroll both front and back sidedef's textures according the target sector's scroll values divided by 8 |
2085 | Always | Scroll both front and back sidedef's textures according the target sector's movement divided by 8 |
2086 | Always | Scroll both front and back sidedef's textures and accelerate the scroll value by the target sector's movement divided by 8 |
New things[edit]
ID | Name | Sprite |
---|---|---|
-28672 | Ghoul | GHUL |
-28671 | Banshee | BSHE |
-28670 | Mindweaver | CSPI |
-28669 | Shocktrooper | PPOS |
-28668 | Vassago | VASS |
-28667 | Tyrant | CYB2 |
-28666 | Tyrant (Boss 1) | CYB2 |
-28665 | Tyrant (Boss 2) | CYB2 |
ID | Name | Sprite |
---|---|---|
-28663 | Large corpse pile | POL7A0 |
-28662 | Human BBQ 1 | HBBQ |
-28661 | Human BBQ 2 | HBB2 |
-28660 | Hanging victim, both legs | GOR6A0 |
-28659 | Hanging victim, both legs (blocking) | GOR6A0 |
-28658 | Hanging victim, crucified | GOR7A0 |
-28657 | Hanging victim, crucified (blocking) | GOR7A0 |
-28656 | Hanging victim, arms bound | GOR8A0 |
-28655 | Hanging victim, arms bound (blocking) | GOR8A0 |
-28654 | Hanging baron of hell | GORAA0 |
-28653 | Hanging baron of hell (blocking) | GORAA0 |
-28652 | Hanging victim, chained | HDB7A0 |
-28651 | Hanging victim, chained (blocking) | HDB7A0 |
-28650 | Hanging torso, chained | HDB8A0 |
-28649 | Hanging torso, chained (blocking) | HDB8A0 |
-28648 | Skull pole trio | POB6A0 |
-28647 | Skull gibs | POLAA0 |
-28646 | Bush, short | BSH1A0 |
-28645 | Bush, short burned 1 | BSH1B0 |
-28644 | Bush, short burned 2 | BSH1C0 |
-28643 | Bush, tall | BSH2A0 |
-28642 | Bush, tall burned 1 | BSH2B0 |
-28641 | Bush, tall burned 2 | BSH2C0 |
ID | Name | Sprite |
---|---|---|
-28664 | Stalagmite (gray)* | SMT2A0 |
-28640 | Cave rock column | STMIA0 |
-28639 | Cave stalagmite, large | STG1A0 |
-28638 | Cave stalagmite, medium | STG2A0 |
-28637 | Cave stalagmite, small | STG3A0 |
-28636 | Cave stalactite, large | STC1A0 |
-28635 | Cave stalactite, large (blocking) | STC1A0 |
-28634 | Cave stalactite, medium | STC2A0 |
-28633 | Cave stalactite, medium (blocking) | STC2A0 |
-28632 | Cave stalactite, small | STC3A0 |
-28631 | Cave stalactite, small (blocking) | STC3A0 |
-28630 | Office chair | CHR1 |
ID | Name | Sprite |
---|---|---|
-28629 | Office lamp (breakable) | LAMP |
-28628 | Ceiling lamp | TLP6A0 |
-28627 | Candelabra (short) | CBR2A0 |
ID | Name |
---|---|
-28626 | Ambient klaxon |
-28625 | Ambient portal open |
-28624 | Ambient portal loop |
-28623 | Ambient portal close |
ID | Name | Sprite |
---|---|---|
-28622 | Fuel can | FCPUA0 |
-28621 | Fuel tank | FTNKA0 |
ID | Name | Sprite |
---|---|---|
-28620 | Heatwave generator | CBLDA0 |
-28619 | Incinerator | INCNA0 |
Supported ports[edit]
Support for the ID24 specification is implemented in the following source ports:
- Doom + Doom II
- GZDoom (partial support as of version 4.13)
- Helion (partial support as of version 0.9.5.0)
- Woof (partial support as of version 15.0.0)
- Odamex (partial support as of version 11.0.0)
Files[edit]
- id24res.wad - Resources
Credits[edit]
The ID24 spec was developed in a collaborative effort with various members of the community. The core team responsible for the spec included the following members:
- Ethan Watson (GooberMan)
- Main programmer
- Xaser
- State/thing/etc tables, DECOHACK
- Front+back linedef scrollers, bugfixes, general QA/feedback on the spec wordings
Trivia[edit]
- ID24 is referenced in WADINFO lump of Legacy of Rust, the first public use of the term.
See also[edit]
External links[edit]
- ID24 0.99.1 specifications hosted on Google Drive
- ID24 0.99.2 draft specifications hosted on Google Drive
- GooberMan's WAD Demonstrating new features hosted on GitHub
References[edit]
- ↑ GooberMan (10 August 2024). ID24 - a new feature set standard. Doomworld forums. Retrieved 10 August 2024.
- ↑ VL2M STUDIO (10 August 2024). FD24 (free replacement for id24res.wad). Doomworld forums. Retrieved 14 August 2024.
- ↑ https://github.com/freedoom/freedoom/commits/fd24
- ↑ GooberMan (4 September 2024). ID24 0.99.2 - currently in draft status. Doomworld forums. Retrieved 4 September 2024.