Doom moottori

ID Tech 1
Tyyppi Pelimoottori ( luettelo )
Kehittäjä ID-ohjelmisto
Avainohjelmoija _ John Carmack
Osa moottoreiden sarjaa ID Tech
Sarjan edellinen moottori Wolfenstein 3D moottori
Sarjan seuraava moottori Quake moottori
Julkaisupäivä 10. joulukuuta 1993
Laitteistoalustat PC , Macintosh , Amiga , SNES , Sega 32X , Sega Saturn , 3DO , PlayStation , Game Boy Advance , Atari Jaguar ja muut
Tuettu käyttöjärjestelmä DOS , Linux , FreeBSD , muut UNIXin kaltaiset
Kielellä kirjoitettu C , kokoonpanokieli
Lisenssi ennen vuotta 1997 - Kaupallinen ohjelmisto
vuoden 1997 jälkeen - Vapaa ohjelmisto : GNU GPL -lisenssi
Ensimmäinen peli moottorilla Tuomio / 10. joulukuuta 1993
Viimeinen peli moottorilla Kiista / 31. toukokuuta 1996

Doom engine (" Doom engine "), joka tunnetaan myös nimellä id Tech 1  , on amerikkalaisen id Softwaren kehittämä pseudo -3D- pelimoottori , jota käytetään tietokonepeleissä Doom , Heretic , HeXen , Strife , HacX ja muissa lisenssillä luoduissa peleissä. . John Carmackin luoma avustajat ovat kirjoittaneet Michael Abrash , John Romero , Dave Taylor ja Paul Radek . _ _ _ _ _ Doom kirjoitettiin alun perin NeXT -tietokoneilla , mutta ensimmäistä julkaisua varten Doom siirrettiin DOS : iin ja myöhemmin useisiin pelikonsoleihin ja käyttöjärjestelmiin .     

Erot Wolfensteinin 3D-moottorista

Rajoitukset

Tekniset ominaisuudet

Moottori on kirjoitettu C -kielellä NeXT - työasemilla NEXTSTEP- käyttöjärjestelmässä . Aluksi käytettiin Intel C -kääntäjää , mutta myöhemmin käytettiin Watcom C :tä . Apuohjelmat kirjoitettiin NeXT : n alle Objective-C :ssä . Doom - moottori oli aikansa edistyksellinen. Huolimatta siitä, että C on proseduuriohjelmointikieli, Doom -moottori on kirjoitettu eksplisiittisellä objektityylillä .

Tasolaite [1]

Kaikki Doomin tasot ovat itse asiassa 2D-tasoja, mikä osoittaa yhden moottorin rajoituksista: on mahdotonta olla huonetta (sektoria) toisen huoneen yläpuolella. Toisaalta sen avulla voit piirtää tasokartan, jossa kaikki seinät ja esineet näkyvät ilman ongelmia, toisin kuin muut tämän genren pelit.

Taso koostuu kymmenestä lohkosta .WAD-tiedostosta; viittä niistä ( VERTEXES, LINEDEFS, SIDEDEFS, SECTORSja THINGS) käyttäjä muokkaa suoraan, viisi muuta ( SEGS, SSECTORS, NODES, REJECTja BLOCKMAP) laskee BSP-muodostin.

Tasot rakennetaan vähennysperiaatteen mukaan: kaikki tila on täynnä läpäisemätöntä ainetta, ja tason kirjoittaja "leikkaa" tunneleita tässä asiassa. Tason perustana ovat pisteet ( englanniksi  vertices ) - pisteet kaksiulotteisessa avaruudessa. Segmentit piirretään kärkien väliin ( eng. linedefs ). Segmentillä voi olla yksi tai kaksi sivua ( englanniksi sidedefs ). Tekstuurit eivät aseteta segmenteille, vaan sivuille, jotta segmentti voidaan peittää eri puolilta erilaisilla tekstuureilla.   

Huiput ja janat muodostavat tasomaisen graafin ; jokainen sen pinta voi olla joko läpäisemätön tila (esimerkiksi sarake) tai sektori ( englanniksi  sektori ). Joskus sektorien rakennetta rikotaan tarkoituksella - tähän perustuvat erikoistehosteet, kuten näkymätön sillat. Jokaisella sektorilla on mielivaltainen muoto suunnitelmassa (ei välttämättä kupera tai yksinkertaisesti yhdistetty ). Sektorilla on aina vaakasuora lattia, katto ja jatkuva valaistus. Yksipuoliset osat ovat tyhjiä seiniä, kaksipuoliset muodostavat siirtymiä sektoreiden välillä.

Tuolloin suurimman vuorovaikutteisuuden varmistamiseksi käytettiin ns. tageja . Segmentillä ja sektorilla on erityinen kokonaislukukenttä - "tagi". Hissiä laskevan kytkimen tekemiseksi kytkinsegmentille annetaan toimintokoodi "kytkin, joka laskee hissiä" ja jokin tunniste (esimerkiksi 5). Sama tunniste on määritetty sektorihissille. Kun segmentti on aktivoitu, se suorittaa määritetyn toiminnon kaikilla sektoreilla, joissa on tämä tunniste.

Lopuksi esineet ( asiat ) asetetaan tasolle. Samaan aikaan Doomin esineen ominaisuusjoukko osoittautui melko huonoksi: esimerkiksi Z -koordinaattia ei ollut , pelin alussa maaobjekti seisoi aina lattialla ja ilmaobjekti riippui siitä. katto. On mahdotonta saada objektia olemaan vain yksinpelissä tai vain deathmatchissa tai vain yhteispelissä (oli vain lippu "vain nettipeleissä").

Peli

Kaikki laskelmat suoritetaan taajuudella 35 sykliä sekunnissa, kiinteässä pisteessä 16,16, koneyksiköllä, joka on yhtä tekseliä (pelaajan pituus on 56 tekseliä [2] [3]  - eli 1 tekseli on suunnilleen yhtä kuin 4 cm) . Kulma-arvoille käytetään kiinteää pistettä, jossa 2 32 = 360° [2] . Suurin osa kulmalaskelmista oli kuitenkin karkeampaa - esimerkiksi pelaajan kierrokset lasketaan tarkkuudella 360° = 2 16 = 65536, ja trigonometrinen taulukko koostui vain 8192 (2 13 ) arvosta [2] .

Demojen nauhoittaminen ja online-pelaaminen perustuvat siihen, että digitaalisessa tietokoneessa sama koodi samoilla tiedoilla johtaa samaan tulokseen, ja kokonaislukuaritmetiikka on tiukasti määritelty eikä se riipu prosessorimallista. Peli tallentaa demoon (ja lähettää verkon yli) ohjauskomennot [2] [4] [5] ; jos pelissä ei ole karkeita virheitä, eri koneet tulkitsevat samoja ohjauskomentoja, saavat saman tuloksen. Pelissä on kuitenkin edelleen virheitä, jotka johtavat epäsynkronointiin: varsinkin jos siirryt valikkoon yksinpelissä, peli pysähtyy, mutta videon kirjoittaminen jatkuu [6] . Tämän lähestymistavan haittana on kyvyttömyys kelata videota taaksepäin; sitä voi pelata vain alusta.

Demotallennustilassa kiertotarkkuus pienennettiin 256 x 360 asteeseen [2] [7] ; Huomaavainen pelaaja saattaa huomata, että demotilassa nouto muuttuu karkeammaksi. Tämä on tarkoitettu pelkästään muistin säästämiseen demoissa, ja se on korjattu useissa porteissa sen kustannuksella, että yhteensopivuus alkuperäisen pelin kanssa menetetään.

Jokainen pelikierros (1/35 sekunnista) peli kiertää jokaisen hirviön ohjauksen läpi. Prosessorijaksojen säästämiseksi on olemassa bittimatriisi REJECT[8] : jollekin kahdelle sektorille, jos sektorin B pistettä ei ole näkyvissä mistään sektorin A pisteestä, yksi asetetaan tähän paikkaan matriisissa. Jos pelaajan sektoria vastaavan rivin ja hirviön sektoria vastaavan sarakkeen leikkauspiste on 0, tarkistetaan, näkeekö hirviö pelaajan; jos 1, hirviö ei taatusti näe pelaajaa. Matriisin REJECTrakentaminen on erittäin vaikeaa, ja useimmat mukautetut editorit täyttivät sen nollilla (sen rakentaneita apuohjelmia oli hyvin vähän; tärkeimmät ovat RMBja ZENNODE).

Fysiikkamoottori soveltaa rakennetta BLOCKMAPnopeuttamaan kappaleiden kanssa tapahtuvien törmäysten tarkastamista.

Kuvan rakentaminen

Näytön nopeuttamiseksi käytetään BSP - puuta [9] (toisin kuin Duke Nukem 3D :n portaalit ). Objektit piirretään spriteinä , toisin kuin Quake .

Moottori kulkee BSP-puun läpi rekursiivisesti piirtäen seinät lähimmästä kaukaisimpaan [10] :

treewalk(solmu) -funktio jos EnclosingRectangle(node) ei ole näkymäkartiossa sitten poistu jos solmu on haarukka sitten // solmu on haarukka - rekursiivisesti poikki jos kamera on leikkaustason vasemmalla puolella sitten Tree Pass(solmu.vasen); Tree Pass (solmu oikealla) muuten Tree Pass(solmu.oikea); Tree Pass (solmu vasemmalla) muuten // solmu on alisektori piirtää (solmu)

Loput kolme lohkoa ovat mukana tässä. Sektorit jaetaan sekanteilla kuperiksi elementeiksi, joita kutsutaan alasektoreiksi ( SSECTORS), segmentit jaetaan segmenteiksi ( SEGS). Itse puurakenne (sisältää suorakulmiot, sekantit, osoittimet "poikiin") on tallennettu lohkoon NODES. Tämä sykli piirtää vain kiinteät seinät (eli keskipitkät pintakuviot yksipuolisille seinille ja ylä- ja alapinnat kaksipuolisille seinille). Objektit, kerrokset ja ruudukot kirjoitetaan erillisiin taulukoihin ja piirretään myöhemmässä vaiheessa. Lattiat sisältävä taulukko on tehty melko pieneksi, ja on melko yleistä, että amatöörirakentajat vuotavat yli ja poistuvat viestillä " Ei enää visplanes!" ".

Seinien piirtämisen jälkeen lattiat piirretään rivi riviltä visplaneilla kirjoitettuna .

Jokaisella sektorilla on linkitetty luettelo siinä olevista objekteista. Seinien piirustusvaiheessa näkyvät kohteet ja leikkauspisteet lisätään taulukkoon. Kun moottori on piirtänyt lattiat ja katot, matriisi lajitellaan ja lähimmät 128 kohdetta piirretään kauimmasta lähimpään samoilla menetelmillä kuin seinien piirtämisessä. Samassa vaiheessa piirretään myös ritilöitä ("keskikokoiset" tekstuurit kaksipuolisilla seinillä).

Seinätekstuurit ja spriitit tallennetaan .WAD- tiedostoon sarakkeittain, lattia- ja kattotekstuurit ovat yksinkertainen 64x64-taulukko.

Doom for DOS toimi VGA 320×200 [11] -tilassa kolminkertaisella puskuroinnilla , Linuxissa  se käytti normaalia VGA 13h -tilaa. Tässä tapauksessa resoluutioarvo koodattiin assembler-menettelyihin kahdessa paikassa; pelin versioissa, joissa käytettiin muuttuvaa resoluutiota, oli joko useita toimintoja eri resoluutioille [12] tai ne muokkasivat koodia dynaamisesti vastaamaan vaadittua resoluutiota [13] . Pelin osissa, jotka eivät kuulu moottoriin, oli kuitenkin paljon maagisia numeroita, jotka liittyivät näytön resoluutioon ja eri kohteiden näyttökoordinaatteihin, joten Doomin ensimmäiset portit kärsivät SVGA:ssa "levitystä" valikkografiikasta. tilat [14] .

Pitkä lataus

Doom on pahamaineinen pitkistä latausajoistaan ​​(yli minuutti aikansa tietokoneilla). Suurin osa ajasta käytettiin " Doom refresh daemonin " ( eng. Init Doom refresh daemon ) alustamiseen .  

Doomia jaettiin levykkeillä ja BBS :n kautta , jokainen tavu oli tärkeä. He tekivät tällaisen mekanismin koon pienentämiseksi. Kukin seinien pintakuvioista koostui fragmenteista ( englanniksi  patches ): esimerkiksi seinä, jossa on kytkimet, voi koostua kuvasta seinästä ja kuvasta kytkimestä tai kaakeloidusta seinästä - kolmesta tai neljästä satunnaisesti hajallaan olevasta laatasta suuren tekstuurin yli. Tekstuurit, kuten edellä mainittiin, piirretään sarakkeisiin. Doom kävi läpi kaikkien pintakuvioiden kaikki sarakkeet ja tarkisti, mitkä fragmentit peittivät tietyn sarakkeen; vastaava tietorakenne rakennettiin. Tämä rakenne voidaan tallentaa välimuistiin tai rakentaa tasoa ladattaessa, rakentaen dynaamisesti tarpeen mukaan - tässä tapauksessa Doom latautuisi paljon nopeammin [15] .

Lisäksi Doomilla oli erikoistunut tiedon välimuistimenetelmä nimeltä "alueellinen muisti". Ohjeessa neuvottiin poistamaan käytöstä levyvälimuistit, kuten SmartDrive  - Doomilla on tehokkaampi välimuisti.

Netcode

Doom perustuu peer-to-peer- malliin . Kuten edellä mainittiin, pelin synkronointi kaikilla koneilla varmistetaan sillä, että sama koodi samoilla tiedoilla palauttaa saman tuloksen. Jokaisen paketin kanssa lähetetään "synkronointikonvoluutio" - yleensä yhden soittimen koordinaatti; Jos paketin mukana saatu konvoluutio ei vastaa paikallisesti laskettua konvoluutiota, peli pysähtyy epäsynkronointiviestillä. Lähetysviiveitä ei voida torjua. jos keskimääräinen ping ylittää 1/35 sekunnista, pelin vaste ohjaimiin hidastuu. Peli voi pyytää kadonneita paketteja ja kopioida ne niin, että uudelleenlähetyspyynnöt ovat mahdollisimman harvinaisia. Aloitettuun peliin ei ole sisäänpääsyä.

Doom ei sisällä tukea tietylle verkkoprotokollalle . Pelin ajamiseksi verkossa pelaajat kutsuvat ulkoista ohjelmaa - verkkoohjainta , joka muodostaa tiedonsiirron koneiden välillä ja kutsuu Doom .EXE -tiedostoa . Tämän suunnittelun avulla voit kirjoittaa ulkoisia ohjaimia muille verkkoprotokolleille - tai Doom -verkkokäynnistysohjelmille, jotka ovat kätevämpiä kuin saatavilla olevat.

Jokaisella pelaajalla on eri väri: ensimmäinen on vihreä, toinen on harmaa, kolmas on ruskea, neljäs on punainen. Pelaajanumerot (ja siten värit) jaetaan verkkoohjaimen, ei pelin, toimesta. Pelissä IPX :n kautta ohjelman kautta IPXSETUPpelaajille annetut värit riippuvat verkkokorttien MAC-osoitteista , pelissä modeemin tai kaapelin kautta  - satunnaisista tekijöistä. SERSETUP

Mielenkiintoinen dokumentoimaton ominaisuus versioissa 1.0 ja 1.1 oli yhden pelaajan peli kolmen näytön järjestelmässä: yksi näyttää mitä on pelaajan edessä, toinen mitä on vasemmalla, kolmas mitä on oikealla. Koska näyttökortteja, joissa oli niin monta näyttöä, ei tuolloin ollut olemassa, tällaiseen peliin tarvittiin kolme verkkoon kytkettyä tietokonetta. Tämä ominaisuus oli kuitenkin olemassa vasta lapsenkengissään: pelin lataamiseksi tallennustilasta oli käynnistettävä peli uudelleen kaikilla kolmella tietokoneella.

Luettelo peleistä, joissa käytetään Doom-moottoria

Doom - moottori myytiin muille yrityksille. Sillä on tehty useita pelejä. Heidän keskuudessaan:

Pelin nimi Julkaisupäivä Kehittäjä/s Alustat
tuho 1993 ID-ohjelmisto MS-DOS , Windows , Mac OS , Linux , Acorn Archimedes , SNES , Sega 32X , Sega Saturn , 3DO , PlayStation , Game Boy Advance , Atari Jaguar , Xbox , Xbox 360 , PlayStation 3 , iOS , Android
Doom II: Helvetti maan päällä 1994 ID-ohjelmisto MS-DOS , Windows , Mac OS , Game Boy Advance , Sega Saturn , Tapwave Zodiac , PlayStation , Xbox 360 , PlayStation 3 , Android
Harhaoppinen 1994 Raven ohjelmisto PC , PSX , MacOS , Amiga , GNU/Linux
Hexen 1995 Raven ohjelmisto MS-DOS , Mac OS , Linux , PlayStation , Nintendo 64 , Sega Saturn
Final Doom 1996 idSoftware ,

Team TNT, Casali-veljekset

MS-DOS , PlayStation , PlayStation 3 , MacOS
Kiista 1996 Rogue Entertainment MS-DOS , Microsoft Windows , Linux , macOS
Chex Quest 1996 Digitaalinen kahvila MS-DOS , Microsoft Windows
Chex Quest 2: Flemoidit ottavat Chextropolisin 1997 Digitaalinen kahvila MS-DOS , Microsoft Windows
Doom 64 1997 puolivälissä pelejä Nintendo 64
Hacx: Twitch 'n Kill 1997 Banjo-ohjelmisto MS-DOS , Microsoft Windows
Cruise'n Velocity 2001 Graafinen tila Game Boy Advance
Pimeä Arena 2002 Graafinen tila Game Boy Advance

Pelin fanit loivat myös mukautettuja muutoksia , jotka muuttivat pelin täysin. Ensimmäinen niistä - Alien Doom  - tehtiin elokuvan " Alien " perusteella. Myöhemmin muutoksia ilmestyi muihin elokuviin: " Ghostbusters ", " Batman " ja " The X-Files ". Katso Modding Doom .

Avoin lähdekoodi

Vuonna 1994 he avasivat verkko-ohjainten lähdetekstit. Harrastajat alkoivat kehittää omia ajureitaan: esimerkiksi LPT-kaapelille ( PARSETUP) ja jopa COM-kaapeliketjulle ( HX8).

Joulukuussa 1997 Doom for Linuxin täydellinen lähdekoodi julkaistiin ei-ilmaisella, ilmaisella lisenssillä ( DOS - versiota ei julkaistu maksullisen DMX-äänikirjaston vuoksi). Jo tammikuussa 1998 tämän koodin ensimmäinen portti DOS :lle ilmestyi  - DosDoom . DMX:n sijaan käytettiin avointa Allegroa .

Doom -laajennuksen pioneerit olivat Lee Killow ( Boom  on laajennettu versio Doomista , joka korjasi monet alkuperäisen pelin bugeista), Denis Fabrice ja Boris Pereira ( korkearesoluutioinen Doom Legacy ) ja Bruce Lewis ( glDoom , ensimmäinen OpenGL - portti Doomista ).

Puolen vuoden kehitystyön jälkeen Lewisin tietokoneen kiintolevyn vika teki lopun glDoomille : varmuuskopiota ei ollut . Tämän vuoksi Carmack lisensoi lähdekoodin uudelleen GNU General Public License -lisenssillä : jos lisenssi ei olisi niin rajoittava, joku olisi löytänyt lähdekoodin [16] . Loput resurssit maksetaan. 12 vuoden kuluttua lähdekoodi löydettiin - ystävältä, jonka luo Lewis meni levyn kanssa.

Valtava määrä bugeja on löydetty Doomista [17] . Fysiikkamoottori ja renderöija määrittelivät eri tavalla, oliko kone "taivaallinen" vai ei: raketti saattoi osua taivaalle ja räjähtää [18] , ja päinvastoin, se saattoi "lentää pois" räjähtämättä tyhjän seinän läpi [19] . Hirviöt juuttuivat oviin [20] , ja Arch-Vile , joka herätti kuolleeksi murskatun ruumiin, teki siitä samalla haavoittumattoman ja pystyi kulkemaan seinien läpi [21] . Portit tarkastivat yleensä demoversion : virheet otettiin käyttöön, jos leikkaus tallensi pelin alkuperäinen versio, ja poistettiin, jos portti. Tällaiset virheet joillain käyttäjätasoilla olivat kriittisiä läpäisyssä - siksi Boom- ja johdannaisporteissa ne voitiin ottaa käyttöön valikon kautta.

Nyt Doomista on useita kymmeniä edistyneitä versioita  - yksinkertaisimmasta erittäin tehokkaaseen. Niiden avulla voit pelata korkeammalla resoluutiolla kuin alkuperäinen Doom , niissä on lisäominaisuuksia (ylös-alas-näkymä, hiusristikko) sekä parannettu online-peli . Tunnetuimmat näistä versioista ovat:

Doom Legacylla , ZDoomilla ja SkullTagilla on mahdollisuus pelata boteilla .

Vähemmän merkittävät muutokset on lueteltu lyhyesti Doom-pelien porttien luettelossa.

Doom-datatiedostot ovat maksettuja tähän päivään asti. Täysin ilmaisen IWAD- tiedoston luomiseksi aloitettiin FreeDoom -projekti .

Muistiinpanot

  1. Matthew Fell. The Unofficial Doom Specs v1.666…  (englanniksi) ( HTML ) (15. joulukuuta 1994). - Epävirallinen Doom -spesifikaatio . Haettu 25. elokuuta 2011. Arkistoitu alkuperäisestä 2. huhtikuuta 2019.
  2. 1 2 3 4 5 Doomin tai aikaisempien porttien lähdekoodi (esim. Doom Legacy 1.11, 1.12)
  3. Pelaaja  . _ DoomWiki.org. Haettu 8. huhtikuuta 2019. Arkistoitu alkuperäisestä 19. elokuuta 2019.
  4. Demo  . _ DoomWiki.org. Haettu 8. huhtikuuta 2019. Arkistoitu alkuperäisestä 19. elokuuta 2019.
  5. ↑ Doom -  verkkokomponentti . DoomWiki.org. Haettu 8. huhtikuuta 2019. Arkistoitu alkuperäisestä 19. elokuuta 2019.
  6. Valikon käytön aiheuttama demosynkronointi - The Doom Wiki - Doom, Doom 2, Doom 3 ja paljon muuta . Haettu 17. joulukuuta 2018. Arkistoitu alkuperäisestä 8. huhtikuuta 2019.
  7. ↑ Kääntymisresoluutio laskee demoja  tallennettaessa . DoomWiki.org. Haettu 8. huhtikuuta 2019. Arkistoitu alkuperäisestä 8. huhtikuuta 2019.
  8. Hylkää - The Doom Wiki - Doom, Doom 2, Doom 3 ja paljon muuta . Haettu 17. joulukuuta 2018. Arkistoitu alkuperäisestä 24. elokuuta 2019.
  9. Doom-renderöintimoottori - The Doom Wiki - Doom, Doom 2, Doom 3 ja paljon muuta . Haettu 17. joulukuuta 2018. Arkistoitu alkuperäisestä 19. elokuuta 2019.
  10. Doom-renderöintimoottori - The Doom Wiki - Doom, Doom 2, Doom 3 ja paljon muuta . Haettu 17. joulukuuta 2018. Arkistoitu alkuperäisestä 19. elokuuta 2019.
  11. Doom Wiki: Kuvasuhde . Haettu 17. joulukuuta 2018. Arkistoitu alkuperäisestä 15. heinäkuuta 2019.
  12. Smack My Marine Up -lähdekoodi
  13. Lähde mille tahansa Doom Legacyn DOS-versiolle , ASM_PatchRowBytes-funktiolle.
  14. Esimerkiksi Doom Legacy 1.11, 1.12
  15. Monet Doomin portit tekevät tämän  , erityisesti Doom Legacy ja Smack My Marine Up ; molempien lähdekoodi on vapaasti saatavilla.
  16. Doom Wiki - Lisenssit arkistoitu 18. joulukuuta 2018 Wayback Machinessa 
  17. Moottorivirhe - The Doom Wiki - Doom, Doom 2, Doom 3 ja paljon muuta . Haettu 17. joulukuuta 2018. Arkistoitu alkuperäisestä 19. elokuuta 2019.
  18. Ammukset räjähtävät törmäyksessä "taivaalla" - The Doom Wiki - Doom, Doom 2, Doom 3 ja paljon muuta . Käyttöpäivä: 17. joulukuuta 2018. Arkistoitu alkuperäisestä 6. huhtikuuta 2016.
  19. Luotipuvut eivät näy ulkoalueilla - The Doom Wiki - Doom, Doom 2, Doom 3 ja muut . Haettu 17. joulukuuta 2018. Arkistoitu alkuperäisestä 3. huhtikuuta 2019.
  20. Ovikiskoihin, seiniin tai hisseihin roikkuvat hirviöt - The Doom Wiki - Doom, Doom 2, Doom 3 ja paljon muuta . Haettu 17. joulukuuta 2018. Arkistoitu alkuperäisestä 13. heinäkuuta 2019.
  21. Aavehirviö - The Doom Wiki - Doom, Doom 2, Doom 3 ja paljon muuta . Haettu 17. joulukuuta 2018. Arkistoitu alkuperäisestä 29. lokakuuta 2019.