The COG Factory / COG Factory Experiments
AI Training Arena: The Image Menu
An in-game menu made of pictures. You spawn in a sealed black room and the view cuts straight to a menu screen: choose an opponent (four kinds of wave, a mixed squad, or a Dark Jedi: Yun, Sariss, Gorc and Pic, Maw, Jerec), a loadout, your shields and a time limit, then START GAME, the only way out of the room. The preview window is a hole cut in the wall with a strip of in-game portraits sliding behind it. Fight in the training arena; a round ends in VICTORY, TIME UP or DEFEATED, a score screen reads it back digit by digit, and the menu returns with your choices remembered. Built as a kit the Dark Jedi gauntlet will use next.
SetWallCel, and a real HOLE, an adjoin into a recess where a path thing slides one portrait per frame. A sliding texture lost that comparison: SlideWall moves by speed times time, frame-quantised, with no verb to read its offset back.OpenJKDF2's 90-degree field of view is vertical; retail's is horizontal at 4:3, so the menu keeps everything a player needs in the central 960 of its 1280 pixels and decorates the sides. The wall is cut recursively and every piece carries its neighbours' corners, so there are no T-junctions and no surface has more than 16 vertices (a full grid of cuts put 32 round the window). The menu's first frame is the first frame: a
startup camera switch lands before anything renders.The arena found a crash: a Dark Jedi's FORCE PERSUASION creates
+twinkle by a hard-coded name, and in a level without that template the engine dereferences NULL. No cog or template names it, so no closure walk finds it; p52 survived only because SED happened to carry it. The gate now forces a persuasion in every Dark Jedi row, and a control without the template must die right after it. Losing a round is a cushion, not a death: the player's damage reaches the host cog after kyle.cog and before his shields, so the cushion works out what will land, and a blow that would leave him under 2 health is the KO. Not 'a blow that would kill': the engine kills a player below 1.0 health, not at 0, and build 4's cushion, waiting for 0, let the owner die. Builds 3, 4 and 5 answer the owner's notes: a wrap JUMPS to the looped card, the mouse no longer changes values (only a turn at exactly a key's rate counts), a screen holds its camera through third person, CONTINUE hands the view straight to the menu, a round ends with the music fading, then a chime, then the score screen six seconds later (a defeat too), and there is music -- the main menu, victory, defeat, every scenario and a spare -- stored the way SM Sith Lord's SM HQ does it, as 16-bit WAVs recorded at twice the speed and played at half pitch. Gate 21 of 21 with thirteen located controls; GOB build 5, which boots from dist/; retail JKDF2 has not run it.| project | p61-image-menu |
|---|---|
| date | 2026-10-01 |
| package | P61.GOB, readme.txt, screenshot.jpg |
| build | 5 — 2026-10-01 (first packaged 2026-10-01) |
| sha256 | 186fadfdb3cee125413da8260cb4bde478091dcfb002b22250ebfd8c6637bf70 |
Installing it
- Unzip it.
- Drop the
.GOBinto theepisodefolder of a Jedi Knight install — the one that already hasJK1.GOBin it. - Pick it from the episode list. On a libretro frontend, load the
.GOBitself as content.
The GOB carries its own level, cogs, models, materials, and sounds. Everything else is read from the stock
resource/, and there is no retail game data in the zip.
These are living projects, not finished releases. A level is rebuilt whenever something is learned — a lighting rule, a texture orientation, a whole detail pass — and it keeps its filename through all of it. The build number is how to tell which one you have: it is printed in the readme inside every zip, and it only moves when the level's bytes actually change.
Screenshots
The readme that ships with it
========================================================================
Jedi Knight Level
P61.GOB
An in-game menu built from pictures. You start in a sealed black room
and the view cuts straight to a menu screen: pick an opponent (four
kinds of wave, or a Dark Jedi: Yun, Sariss, Gorc and Pic, Maw, Jerec),
a loadout, your shields and a time limit, then START GAME. The only
way out of the room is the menu. Fight in the training arena; a round
ends in VICTORY, TIME UP, or DEFEATED (the arena takes the killing
blow for you), and a score screen reads back your time, kills, damage
and a rating before the menu comes back with your choices remembered.
[cogfactory / p61-image-menu]
BUILD 5 -- 2026-10-01 (first packaged 2026-10-01)
sha256 186fadfdb3cee125413da8260cb4bde4
This level is not made or distributed by LucasArts
Entertainment Co.
========================================================================
THIS PACKAGE
------------------------------------------------------------------------
P61.GOB the level
readme.txt this file
screenshot.jpg what it looks like
INSTALLATION
------------------------------------------------------------------------
Drop P61.GOB into the `episode` folder of a Jedi Knight install (the one
that already has JK1.GOB in it) and pick it from the episode list.
Nothing else needs to change: the GOB carries its own level, cogs,
models, materials and sounds, and reads the stock resource/ for
everything else.
On a libretro frontend such as RetroArch, unzip first and put P61.GOB in
the episode folder of your Jedi Knight folder, then load it from there.
The core treats the folder above the GOB's folder as the game folder,
reads the episode from episode/P61.GOB inside it, and will not start
unless that folder also holds resource/ (Res2.gob) from a real install.
CONTROLS
------------------------------------------------------------------------
Up / Down (or W / S): choose a row
Left / Right (or A / D): change the value; holding repeats
Space or C: confirm (on START GAME, start the round; on the score screen, back to the menu)
In the arena: the usual Jedi Knight controls
NOTES
------------------------------------------------------------------------
every screen is a picture: HTML pages captured by a headless browser
and cut into 16-bit materials; the opponent preview is a strip of
in-game portraits sliding behind a window cut in the wall
the menu fits the central 4:3 of the screen, so retail Jedi Knight's
narrower view still shows all of it
WHAT IS IN THE GOB
------------------------------------------------------------------------
84 episode.jk
128943 jkl\arena.jkl
6138 cog\imbus.cog
9533 cog\imcycle.cog
3301 cog\immusic.cog
5338 cog\imread.cog
14783 cog\p61game.cog
6710 cog\p61gorc.cog
8736 cog\p61jer.cog
8989 cog\p61maw.cog
5809 cog\p61pic.cog
10173 cog\p61sar.cog
7974 cog\p61spawn.cog
8431 cog\p61yun.cog
2907 3do\impillar.3do
5289 3do\imstrip.3do
131212 mat\imacei.mat
32908 mat\imaflr.mat
65676 mat\imapil.mat
131212 mat\imawal.mat
131212 mat\imbg.mat
268 mat\imblk.mat
45836 mat\imdd0m.mat
65740 mat\iml00.mat
65740 mat\iml01.mat
65740 mat\iml10.mat
65740 mat\iml11.mat
65740 mat\iml20.mat
65740 mat\iml21.mat
65740 mat\iml30.mat
65740 mat\iml31.mat
131212 mat\imm00.mat
131212 mat\imm01.mat
131212 mat\imm02.mat
131212 mat\imm03.mat
131212 mat\imm04.mat
131212 mat\imm05.mat
131212 mat\imm06.mat
131212 mat\imm07.mat
131212 mat\imm08.mat
131212 mat\imm09.mat
131212 mat\imm10.mat
131212 mat\imm11.mat
131212 mat\imm12.mat
131212 mat\imm13.mat
131212 mat\imm14.mat
131212 mat\imm15.mat
131212 mat\imm16.mat
131212 mat\imm17.mat
328396 mat\imname.mat
131212 mat\imp00.mat
131212 mat\imp01.mat
131212 mat\imp02.mat
131212 mat\imp03.mat
131212 mat\imp04.mat
131212 mat\imp05.mat
131212 mat\imp06.mat
131212 mat\imp07.mat
131212 mat\imp08.mat
131212 mat\imp09.mat
164236 mat\imrate.mat
196876 mat\imres0.mat
196876 mat\imres1.mat
196876 mat\imres2.mat
131212 mat\ims00.mat
131212 mat\ims01.mat
131212 mat\ims02.mat
131212 mat\ims03.mat
131212 mat\ims04.mat
131212 mat\ims05.mat
131212 mat\ims06.mat
131212 mat\ims07.mat
131212 mat\ims08.mat
131212 mat\ims09.mat
131212 mat\ims10.mat
131212 mat\ims11.mat
131212 mat\ims12.mat
131212 mat\ims13.mat
131212 mat\ims14.mat
131212 mat\ims15.mat
131212 mat\ims16.mat
131212 mat\ims17.mat
65740 mat\imstart.mat
16588 mat\imswl.mat
16588 mat\imswr.mat
328396 mat\imv0.mat
131404 mat\imv1.mat
98572 mat\imv2.mat
131404 mat\imv3.mat
16588 mat\imwl0.mat
16588 mat\imwl1.mat
16588 mat\imwl2.mat
16588 mat\imwl3.mat
16588 mat\imwr0.mat
16588 mat\imwr1.mat
16588 mat\imwr2.mat
16588 mat\imwr3.mat
3572 sound\imchang.wav
132344 sound\imchime.wav
528044 sound\imcmd.wav
132344 sound\imdefeat.wav
18566 sound\imfire.wav
517484 sound\imgen.wav
510444 sound\imgp.wav
538604 sound\imgran.wav
517484 sound\imjer.wav
469964 sound\imlose.wav
519244 sound\immaw.wav
686444 sound\immenu.wav
541244 sound\immix.wav
2028 sound\immove.wav
532444 sound\imrod.wav
513084 sound\imsar.wav
132344 sound\imtimeup.wav
522764 sound\imtrp.wav
380204 sound\imwin.wav
517484 sound\imyun.wav
17053924 bytes in 117 entries
CREDITS
------------------------------------------------------------------------
The Dark Jedi duels are p52's (tools/cogfactory/projects/p52-dark-
jedi-gauntlet); the stormtroopers, Gran, Rodians, commandos and Dark
Jedi are LucasArts' own templates; the menu, the arena, the cogs and
the sounds were generated by tools/cogfactory.
The readme format is styled after SM Sith Lord's cog headers,
because his are the ones everybody read.
========================================================================



