{
  "commit": "fbe5ba4e3e790ab07eddc5b57e0f45a02cbcd60e",
  "count": 1,
  "generated_at": "2026-10-24T00:06:47Z",
  "items": [
    {
      "id": "rigelengine",
      "profile": {
        "core_classification": "game_engine",
        "core_version": "0.9.1-28-g30afeff8",
        "cores": [
          "rigelengine",
          "RigelEngine"
        ],
        "display_name": "Duke Nukem II (RigelEngine)",
        "emulator": "RigelEngine",
        "files": [
          {
            "category": "game_data",
            "description": "Game data archive: levels, graphics, sounds, music and texts",
            "name": "NUKEM2.CMP",
            "note": "Its presence validates the game path. The shareware archive plays episode 1, the registered one all four.",
            "required": true,
            "source_ref": "src/game_main.cpp:72-78, 136-142, src/assets/resource_loader.cpp:148",
            "system": "duke-nukem-2"
          },
          {
            "category": "game_data",
            "description": "Intro movie, shot at the shooting range",
            "name": "NUKEM2.F1",
            "note": "The intro needs F1 to F4 together, it is skipped when one is missing",
            "required": false,
            "source_ref": "src/ui/intro_movie.cpp:80, src/frontend/intro_demo_loop_mode.cpp:38-44",
            "system": "duke-nukem-2"
          },
          {
            "category": "game_data",
            "description": "Intro movie, Neo LA opening scene",
            "name": "NUKEM2.F2",
            "note": "The intro needs F1 to F4 together, it is skipped when one is missing",
            "required": false,
            "source_ref": "src/ui/intro_movie.cpp:72, src/frontend/intro_demo_loop_mode.cpp:38-44",
            "system": "duke-nukem-2"
          },
          {
            "category": "game_data",
            "description": "Intro movie, target hit",
            "name": "NUKEM2.F3",
            "note": "The intro needs F1 to F4 together, it is skipped when one is missing",
            "required": false,
            "source_ref": "src/ui/intro_movie.cpp:94, src/frontend/intro_demo_loop_mode.cpp:38-44",
            "system": "duke-nukem-2"
          },
          {
            "category": "game_data",
            "description": "Intro movie, end of the shooting range scene",
            "name": "NUKEM2.F4",
            "note": "The intro needs F1 to F4 together, it is skipped when one is missing",
            "required": false,
            "source_ref": "src/ui/intro_movie.cpp:108, src/frontend/intro_demo_loop_mode.cpp:38-44",
            "system": "duke-nukem-2"
          },
          {
            "category": "game_data",
            "description": "Apogee logo movie",
            "name": "NUKEM2.F5",
            "note": "The logo is skipped when the file is missing",
            "required": false,
            "source_ref": "src/ui/apogee_logo.cpp:63-67, src/frontend/intro_demo_loop_mode.cpp:49-55, 64-70",
            "system": "duke-nukem-2"
          }
        ],
        "notes": "Reimplementation of the Duke Nukem II engine (Apogee, 1993). It plays the\ndata files of the DOS release, shareware or registered.\n\nGame path. The path comes from the positional command line argument\n(src/main.cpp:222), else the working directory when it holds NUKEM2.CMP,\nelse a folder browser (src/game_main.cpp:101-125). A folder is accepted only\nwhen NUKEM2.CMP exists in it (src/game_main.cpp:72-78, 136-142) and the\nchoice is kept in the user profile (src/game_main.cpp:152-153, 235-240).\nFile names are opened as written, in upper case.\n\nNUKEM2.CMP is an archive with a dictionary of 12-character names, offsets\nand sizes. Every game asset is read from it (src/assets/resource_loader.cpp:148,\n515-537). The only check is that each entry lies inside the file\n(src/assets/cmp_file_package.cpp:43-66). No size, CRC or hash is compared.\n\nShareware or registered. The registered set is assumed when the archive\nholds LCR.MNI and O1.MNI (src/frontend/game.cpp:235-245). With the\nshareware set, episodes 2 to 4 answer with the ordering message\n(src/frontend/menu_mode.cpp:243-247) and saves of those episodes are\nrefused (src/frontend/menu_mode.cpp:303-305). The shareware episode plays\nin full.\n\nIntro movies. NUKEM2.F1 to NUKEM2.F4 are loaded loose from the game path\n(src/assets/resource_loader.cpp:415-429) when the intro is built\n(src/ui/intro_movie.cpp:72, 80, 94, 108), and NUKEM2.F5 is the Apogee logo\n(src/ui/apogee_logo.cpp:63-67). A missing file throws and the intro or the\nlogo is skipped (src/frontend/intro_demo_loop_mode.cpp:38-55, 64-77).\n\nOn first launch the original game's saves, high scores and settings\n(NUKEM2.-NM, NUKEM2.-S1 to -S8, NUKEM2.-V1 to -V4, NUKEM2.-GT) are imported\nwhen present (src/assets/user_profile_import.cpp:144-203). They are user\ndata, not distributed files.\n\nThe shareware release that the project points to is\narchive.org msdos_DUKE2_shareware, DUKE2.zip (README.md:82,\ncmake/rigel_pack.cmake:14-17). It holds NUKEM2.CMP and all five movies.\nNUKEM2.EXE in that release is never opened.\n\nEmuELEC 4.8 builds commit f05996f9b3ad3b3ea5bb818e49e7977636746343, where\nevery file cited above is identical, and passes /storage/roms/ports/rigelengine\nas the game path.\n",
        "profiled_date": "2026-10-22",
        "source": "https://github.com/lethal-guitar/RigelEngine",
        "source_commit": "30afeff8f0b105eac77ee0a2fbd54b06e1a49b60",
        "systems": [
          "duke-nukem-2"
        ],
        "type": "standalone",
        "upstream": "https://github.com/lethal-guitar/RigelEngine",
        "verification": "existence"
      }
    }
  ],
  "kind": "emulators",
  "schema_version": 1
}
