emulator: EDuke32 type: standalone core_classification: game_engine source: "https://voidpoint.io/terminx/eduke32" upstream: "https://voidpoint.io/terminx/eduke32" profiled_date: "2026-10-04" source_commit: "ec5824db81817866f70da326d3811bb0f52b3517" core_version: "r11007" display_name: "EDuke32" cores: [eduke32] systems: [duke3d, nam, napalm, ww2gi] notes: | Build-engine port by TerminX, Hendricks266, Plagman and others. Covers Duke Nukem 3D (and its official addons), NAM, NAPALM, WWII GI and Platoon Leader. Startup scans the search path for registered GRPs by CRC32 (source/duke3d/src/grpscan.cpp:39-76 internalgrpfiles[]). Each GRP carries a game flag (DUKE / NAM / NAPALM / WW2GI) and optional addon dependency; EDuke32 picks the user selection, mounts it with initgroupfile and loads the DEF / CON / RTS the GRP points to. G_DefaultGrpFile (source/duke3d/src/common.cpp:60-73) returns the base GRP for the active game flag: DUKE3D.GRP, NAM.GRP, NAPALM.GRP, WW2GI.GRP. G_DefaultConFile and G_DefaultRtsFile pick EDUKE.CON / NAM.CON / NAPALM.CON / WW2GI.CON and DUKE.RTS / NAM.RTS / NAPALM.RTS / WW2GI.RTS. CRCs listed in source/duke3d/src/grpscan.h match the retail GRP byte for byte; the loader only checks CRC32 (not MD5) and only to pick the entry, never to refuse an unknown GRP. CON / RTS / addon files are referenced from the chosen entry but their contents are not validated. The scan checksums every *.grp, *.ssi, *.dat and *.zip file of the search path and matches size and CRC32 against the table; the table holds no file name (source/duke3d/src/grpscan.cpp:360-370, 486-492). An addon whose dependency is not found is removed from the list (source/duke3d/src/grpscan.cpp:503-517). files: # ================================================================ # Duke Nukem 3D (base game, GAMEFLAG_DUKE) # ================================================================ - name: "DUKE3D.GRP" category: game_data system: duke3d required: false source_ref: "source/duke3d/src/common.cpp:36 (defaultgamegrp GAME_DUKE), source/duke3d/src/grpscan.cpp:41-50 (CRC-indexed variants)" note: > Any retail variant plays: Atomic Edition / Plus / World Tour (DUKE15_CRC 0xFD3DCFF1, 44356548 bytes, grpscan.h:35), v1.3D registered (DUKE13_CRC 0xBBC9CE44, 26524524 bytes, grpscan.h:33), Shareware v1.3D (DUKESW_CRC 0x983AD923, 11035779 bytes, grpscan.h:41), World Tour (DUKEWT_CRC 0x982AFE4A, grpscan.h:37), Plutonium Pak (DUKEPP_CRC 0xF514A6AC, grpscan.h:36), South Korean censored (DUKEKR_CRC 0xAA4F6A40, grpscan.h:34). CRC32 identifies the variant and selects the matching entry in internalgrpfiles[]; no MD5 or SHA1 is read. - name: "EDUKE.CON" category: game_data system: duke3d required: false source_ref: "source/duke3d/src/common.cpp:38 (defaultgameconfilename GAME_DUKE)" note: "EDuke32 CON script. Shipped inside the GRP by default; external copy only when the user overrides it." - name: "DUKE.RTS" category: game_data system: duke3d required: false source_ref: "source/duke3d/src/grpscan.cpp:39-76 (rtsname field)" note: "Remote Ridicule speech. Not loaded if absent." # ---- Duke 3D addons ---- - name: "DUKEDC.GRP" category: game_data system: duke3d required: false source_ref: "source/duke3d/src/grpscan.cpp:56-59 (Duke it out in D.C., GAMEFLAG_ADDON)" - name: "VACATION.GRP" category: game_data system: duke3d required: false source_ref: "source/duke3d/src/grpscan.cpp:60-64 (Duke Caribbean: Life's a Beach, GAMEFLAG_ADDON)" - name: "NWINTER.GRP" description: "Duke: Nuclear Winter" category: game_data system: duke3d required: false size: 16169365 crc32: "f1cae8e4" validation: [size, crc32] source_ref: "source/duke3d/src/grpscan.cpp:65 (Duke: Nuclear Winter, GAMEFLAG_ADDON), 366 (crc and size compare), source/duke3d/src/grpscan.h:51 (DUKENW_CRC)" - name: "NWINTER.GRP" description: "Duke: Nuclear Winter Demo" category: game_data system: duke3d required: false size: 10965909 crc32: "c7efbfa9" validation: [size, crc32] source_ref: "source/duke3d/src/grpscan.cpp:66 (Duke: Nuclear Winter Demo, GAMEFLAG_ADDON), 366 (crc and size compare)" note: "Addon of the Atomic Edition (dependency DUKE15_CRC); dropped from the list when that GRP is not found." - name: "DZ2.GRP" category: game_data system: duke3d required: false source_ref: "source/duke3d/src/grpscan.cpp:67-69 (Duke!ZONE II, GAMEFLAG_ADDON)" - name: "penthous.zip" description: "Duke Nukem's Penthouse Paradise" category: game_data system: duke3d required: false size: 2112419 crc32: "7cd82a3b" validation: [size, crc32] source_ref: "source/duke3d/src/grpscan.cpp:70 (Penthouse Paradise, original .zip release), 366 (crc and size compare), 486-492 (scanned extensions)" note: "The original ZIP release, identified as a whole file by its size and CRC32. Addon of the Atomic Edition (dependency DUKE15_CRC)." - name: "PENTP.GRP" description: "Duke Nukem's Penthouse Paradise" category: game_data system: duke3d required: false size: 4247491 crc32: "cf928a58" validation: [size, crc32] source_ref: "source/duke3d/src/grpscan.cpp:71 (Penthouse Paradise, ZOOM Platform repacked .grp), 366 (crc and size compare)" # ================================================================ # NAM (GAMEFLAG_NAM) # ================================================================ - name: "NAM.GRP" category: game_data system: nam size: 43448927 required: false source_ref: "source/duke3d/src/grpscan.h:54 (NAM_CRC 0x75C1F07B), source/duke3d/src/grpscan.cpp:72" - name: "NAM.CON" category: game_data system: nam required: false source_ref: "source/duke3d/src/common.cpp:38 (defaultgameconfilename GAME_NAM)" # ================================================================ # NAPALM (GAMEFLAG_NAM | GAMEFLAG_NAPALM) # ================================================================ - name: "NAPALM.GRP" category: game_data system: napalm size: 44365728 required: false source_ref: "source/duke3d/src/grpscan.h:55 (NAPALM_CRC 0x3DE1589A), source/duke3d/src/grpscan.cpp:73" - name: "NAPALM.CON" category: game_data system: napalm required: false source_ref: "source/duke3d/src/common.cpp:38 (defaultgameconfilename GAME_NAPALM)" # ================================================================ # WWII GI (GAMEFLAG_WW2GI) # ================================================================ - name: "WW2GI.GRP" category: game_data system: ww2gi size: 77939508 required: false source_ref: "source/duke3d/src/grpscan.h:56 (WW2GI_CRC 0x907B82BF), source/duke3d/src/grpscan.cpp:74" - name: "WW2GI.CON" category: game_data system: ww2gi required: false source_ref: "source/duke3d/src/common.cpp:38 (defaultgameconfilename GAME_WW2GI)" - name: "PLATOONL.GRP" category: game_data system: ww2gi size: 37852572 required: false source_ref: "source/duke3d/src/grpscan.h:57 (PLATOONL_CRC 0xD1ED8C0C), source/duke3d/src/grpscan.cpp:75 (Platoon Leader, GAMEFLAG_ADDON)"