Doom-moottori, jota joskus kutsutaan nimellä ID Tech 1, on tietokonekoodi videopeli Doomin taustalla. Sitä käytettiin myös useissa muissa peleissä, kuten Doom 2:ssa (mutta ei Doom 3:ssa, jolla on oma moottori). Doom‑moottorin vahvasti muunneltuja versioita käytettiin esimerkiksi Hereticissä, Hexenissä ja Strifessä. Moottori suunniteltiin 1990‑luvun alun kotitietokoneille ja sen perusratkaisut heijastavat tuon ajan rajallisia laitteistoresursseja.
Tekniikka ja renderöinti
Doom käyttää tunnettua binääristä tilajaon (BSP, Binary Space Partitioning) rakennetta tason läpikäyntiin ja näkyvyyden laskentaan, mikä mahdollisti nopean ohjelmistopohjaisen renderöinnin. Moottori ei ollut täysin 3D:llä — sitä kuvaillaan usein 2.5D- tai pseudo‑3D‑tekniikaksi: se tukee eri lattia- ja kattokorkeuksia sektoreille, mutta ei oikeaa huoneen yli huoneen (room-over-room) tilaa.
Keskeisiä piirteitä renderöinnissä ja laskennassa:
- Ohjelmistorenderöinti: visuaalinen työ tehtiin kokonaan suorittimella, ei näytönohjaimella, koska silloin useimmissa korteissa ei ollut 3D‑kiihdytystä. Tämä vaati tehokkaita algoritmeja ja optimointeja.
- Kiinteän pisteen aritmetiikka ja taulukot: suorituskyvyn parantamiseksi käytettiin paljon taulukkohakuja (sin/cos), kiinteän pisteen laskentaa ja välivarastointia sen sijaan, että olisi laskettu kalliita liukulukuoperaatioita.
- Visplane‑järjestelmä: lattiat ja katot kartoitetaan niin kutsutuiksi visplaneiksi (näkyviksi tasoiksi), joiden avulla suoritetaan tekstuurin paikkain ja valaistuksen laskenta.
- Sprite‑pohjaiset objektit: hirviöt, esineet ja koristeet ovat 2D‑spritejä, jotka skaalataan ja perspektivoidaan oikeaan kohtaan näyttöä.
- Paletti ja valaistus: Doom käytti 256‑väripalettia ja ns. colormap‑taulukoita dynaamiseen valaistukseen (tummentaminen ilman täyttä truecolor‑tukea).
Rakenteet ja dataformaatit
Doomin kentät esitetään sisäisesti rakenteilla, joita kutsutaan esimerkiksi linedefeiksi (linedef), sidedefeiksi (sidedef), sektoreiksi, vertikaaleiksi (vertex) ja asioiksi (things = hirviöt, tukiesineet, koristeet jne.). Näistä muodostuu kartan topologia: vertexit muodostavat kulmat, linedefit reunat, sidedefit teksturoinnit ja sektorit korkeus/valaistusmäärittelyt.
WAD‑tiedostot
Pelin kentät, sprite‑kuvat, tekstuurit, äänet ja muut resurssit pakataan tiedostoon nimeltä WAD. WAD‑formaatti sisältää joukkoja niin kutsuttuja lumppeja (lumps), joilla on nimi ja datapala. Peruserottelu:
- IWAD (Internal WAD) — pelin mukana tuleva pää‑WAD, joka sisältää kaikki laskentakriittiset resurssit.
- PWAD (Patch WAD) — käyttäjän tai modin lisäämät tiedot, esimerkiksi karttamuutokset tai uudet resurssit.
Tärkeitä lumppeja ovat muun muassa VERTEXES, LINEDEFS, SIDEDEFS, SECTORS, THINGS, NODES, SSECTORS, SEGS, REJECT, BLOCKMAP ja tekstuurikartat kuten TEXTURE1. WAD‑tiedostojen muokkaamiseen käytetään työkaluja kuten SLADE, DeuTex tai Doom Builder -editorit.
Lähdekoodi ja lähdeportit
Doomin C‑kielinen moottori julkaistiin julkisesti 1990‑luvun lopulla; alun perin lähdekoodin julkaisu oli rajoitetumpi ja myöhemmin lähdekoodi vapautettiin laajemmalle käytölle. Lopullinen laajempi julkistus mahdollisti yhteisön tekemät lähdeportit. Lähdekoodi on enimmäkseen kirjoitettu C‑kielellä ja myöhemmät versiot on julkaistu GNU General Public License -lisenssillä, mikä teki koodista vapaan jatkokehitykseen.
Yhteisön tekemät lähdeportit (source ports) ovat olleet avainasemassa Doomin pitkäikäisyyteen. Ne tuovat usein uusia ominaisuuksia, korjauksia ja modernin käyttöjärjestelmä‑/laitetuen. Tunnettuja esimerkkejä:
- Boom — laajennuksia kenttäsuunnitteluun ja pelimekaniikkaan.
- PrBoom / PrBoom+ — tavoitteena tarkka alkuperäiskokemus plus valinnaisia parannuksia.
- ZDoom (ja sen haarat kuten GZDoom) — modernit lisäominaisuudet: skriptit, 3D‑lattiat, korkeatasoinen renderointi ja laajempi laite‑tuki.
- Chocolate Doom — pyrkii jäljittelemään alkuperäisen Doom‑konsolin ja DOS‑version tarkkaa käyttäytymistä ja virheitä säilyttäen autenttisuuden.
Rajoitukset ja laajennukset
Alkuperäisellä moottorilla oli useita rajoituksia, jotka rajasivat muun muassa karttojen rakennetta (ei kattavaa 3D‑overlapia), valaisun dynamiikkaa ja resoluutioita. Lähdeportit ovat kiertäneet tai poistaneet monia näistä rajoituksista tarjoamalla mm.:
- Tuki suuremmille resulutioille, modernille näytönohjainten kiihdytykselle (OpenGL), truecolor‑väreille ja monille näyttöasetuksille.
- Laajennetut mappausmahdollisuudet: 3D‑floors, scriptattavat tapahtumat, hypersektorit ja muut rakenteet.
- Parannettu verkkopelaaminen, anticheat/vanhemmat protokollat, sekä laaja tuki modifikaatioille (.wad ja .pk3).
Työkalut ja modaus
Doomin muokkaaminen on elävä harrastus: karttatyökalut kuten Doom Builder ja SLADE mahdollistavat kenttien tekemisen ja resurssien muokkaamisen. Modit voivat olla yksinkertaisia PWAD‑paketteja tai kokonaisia kaupallisia laajennuksia. Monet yhteisön luomat modit käyttävät lähdeporttien tarjoamia laajennuksia (esim. skriptaus, uudet objektityypit).
Miksi Doom‑moottori on merkittävä?
Doomin moottori oli uranuurtaja 1990‑luvun ensimmäisten persoonan räiskintöjen kehityksessä: se yhdisti sujuvan suorituskyvyn, laajan muokattavuuden ja vahvan yhteisön tuen. Se tehtiin helposti kannettavaksi ja ymmärrettäväksi, mikä on osaltaan selittänyt miksi se on saatavilla useammalle tietokonetyypille kuin useimmat muut varhaiset FPS‑moottorit. Lisäksi se innoitti lukuisia myöhempiä tekniikoita ja pelimoottoreita.
Lisätietoja hyödyllisistä käsitteistä ja rakenteista löydät yllä mainituista linkeistä, joihin kuuluvat mm. linedefeiksi, sidedefeiksi ja muut kenttäkuvauksen perusosat. Doomin ohjelmointi‑ ja muokkausyhteisö tarjoaa runsaasti dokumentaatiota ja oppaita niille, jotka haluavat syventyä moottorin toimintaan tai tehdä omia moduuleja.