Screenpack & UI System
Overview
IKEMEN Go's visual interface is controlled by two main files:
- •system.def (Screenpack) -- Menus, select screen, VS screen, options
- •fight.def (Fight UI) -- Lifebars, power meter, timer, combo counter, round indicators
Both files reference sprite files (.sff), animation files (.air), sound files (.snd), and font files (.fnt/.def) for their visual elements.
system.def (Screenpack)
The screenpack defines all menu screens and non-gameplay UI.
Key Sections
[Info] -- Screenpack metadata
[Info] name = "My Game Screenpack" author = "Author" versiondate = 01,01,2026 mugenversion = 1.1 localcoord = 1280, 720 ; Screenpack resolution
[Files] -- Asset file paths
[Files] spr = data/system.sff ; Screenpack sprites snd = data/system.snd ; Menu sounds logo.storyboard = ; Logo/intro storyboard intro.storyboard = ; Game intro storyboard select = data/select.def ; Roster file fight = data/fight.def ; Fight UI file font1 = font/default.fnt ; Font definitions font2 = font/menu.fnt font3 = font/numbers.fnt ; Up to font10
[Title Info] -- Title screen layout
[Title Info] fadein.time = 30 ; Fade in duration (ticks) fadeout.time = 30 ; Fade out duration menu.pos = 640, 400 ; Menu position (X, Y) menu.item.font = 1, 0, 0 ; Font number, bank, alignment menu.item.active.font = 1, 5, 0 ; Active item font menu.item.spacing = 0, 30 ; X, Y spacing between items menu.window.margins.y = 0, 0 ; Window margins menu.window.visibleitems = 5 ; Visible menu items menu.boxcursor.visible = 1 ; Show box cursor menu.boxcursor.coords = -120, -10, 120, 2 ; Cursor box dimensions cursor.move.snd = 100, 0 ; Cursor move sound cursor.done.snd = 100, 1 ; Selection confirm sound cancel.snd = 100, 2 ; Cancel sound
[Title BG] -- Title screen background
[Title BG 0] type = normal spriteno = 0, 0 ; Title background sprite start = 0, 0
[Select Info] -- Character select screen
[Select Info] fadein.time = 10 fadeout.time = 10 rows = 2 ; Grid rows columns = 5 ; Grid columns wrapping = 0 ; Grid wrapping pos = 140, 400 ; Grid position showemptyboxes = 0 ; Show empty grid cells moveoveremptyboxes = 0 ; Allow cursor on empty cells cell.size = 27, 27 ; Cell size in pixels cell.spacing = 2 ; Space between cells cell.bg.spr = 150, 0 ; Cell background sprite cell.random.spr = 151, 0 ; Random select cell sprite cell.random.switchtime = 4 ; Random cell animation speed p1.cursor.startcell = 0, 0 ; P1 starting cell (col, row) p1.cursor.active.spr = 160, 0 ; P1 cursor sprite (active) p2.cursor.startcell = 4, 0 p2.cursor.active.spr = 170, 0 portrait.offset = 0, 0 ; Portrait display offset portrait.scale = 1, 1 ; Portrait scale
[VS Screen] -- Pre-fight versus screen
[VS Screen] time = 150 ; Display duration (ticks) fadein.time = 20 fadeout.time = 40 p1.pos = 200, 360 ; P1 portrait position p1.facing = 1 p1.scale = 1, 1 p2.pos = 1080, 360 p2.facing = -1 p2.scale = 1, 1
fight.def (In-Match UI)
[Files]
[Files] sff = data/fight.sff ; Fight UI sprites snd = data/common.snd ; Fight sounds font1 = font/fight_numbers.fnt font2 = font/fight_text.fnt fightfx.sff = data/fightfx.sff ; Hit sparks, effects fightfx.air = data/fightfx.air ; Effect animations common.snd = data/common.snd ; Common sounds
[Lifebar] -- Health bars
[Lifebar] ; Player 1 lifebar p1.pos = 180, 18 ; Position p1.bg0.spr = 10, 0 ; Background sprite p1.bg0.offset = 0, 0 p1.mid.spr = 12, 0 ; Middle/damage display p1.mid.offset = 0, 0 p1.front.spr = 11, 0 ; Current health sprite p1.front.offset = 0, 0 p1.range.x = 0, 170 ; Pixel range for health display ; Player 2 lifebar (mirrored) p2.pos = 1100, 18 p2.bg0.spr = 10, 0 ; ... (mirrored values)
[Powerbar] -- Super meter
[Powerbar] p1.pos = 180, 42 p1.bg0.spr = 20, 0 p1.front.spr = 21, 0 p1.range.x = 0, 170 p1.counter.font = 3, 0, 1 ; Power level counter font p1.counter.offset = 0, 0
[Face] -- Character portraits during fight
[Face] p1.pos = 10, 2 p1.face.spr = 9000, 0 ; Uses character's 9000,0 portrait sprite p1.face.offset = 0, 0 p1.face.scale = 0.3, 0.3
[Round] -- Round display
[Round] match.wins = 2 ; Wins needed match.maxdrawgames = -1 ; Max draws (-1=infinite) start.waittime = 30 ; Pre-round wait round.time = 180 ; Round duration (ticks, at 60fps = 3 seconds display) round.default.spr = 50, 0 ; "Round X" sprite round.default.pos = 640, 240 round.default.displaytime = 60 ctrl.time = 60 ; Ticks before players get control fight.spr = 60, 0 ; "FIGHT!" sprite fight.pos = 640, 300 fight.displaytime = 40 KO.spr = 70, 0 ; "K.O." sprite KO.pos = 640, 240 win.spr = 80, 0 ; Win message sprite
[Combo] -- Hit combo counter
[Combo] team1.pos = 200, 300 ; Combo counter position team1.counter.font = 3, 0, -1 team1.counter.shake = 1 ; Shake on new hit team1.text.text = "%i Hit" ; Display format team1.text.font = 2, 0, -1 team1.displaytime = 90 ; How long combo text stays visible
[WinIcon] -- Round win indicators
[WinIcon] p1.pos = 100, 38 p1.iconoffset = 10, 0 p1.counter.font = 1, 0, 0 p1.n.spr = 200, 0 ; Normal win icon p1.s.spr = 201, 0 ; Special win icon p1.h.spr = 202, 0 ; Hyper win icon p1.throw.spr = 203, 0 ; Throw win icon p1.cheese.spr = 204, 0 ; Chip damage win p1.t.spr = 205, 0 ; Time over win p1.suicide.spr = 206, 0 ; Self-KO icon p1.teammate.spr = 207, 0 ; Teammate KO icon p1.perfect.spr = 208, 0 ; Perfect win icon
Font System
IKEMEN Go uses bitmap fonts (.fnt) and TrueType fonts:
.fnt Files
- •Bitmap font files with fixed character sprites
- •Referenced by number in system.def/fight.def
- •Font parameters:
fontno, bank, alignment- •
fontno: Which font (font1, font2, etc.) - •
bank: Color bank/palette (0=default) - •
alignment: -1=left, 0=center, 1=right
- •
TrueType Support (IKEMEN Go)
IKEMEN Go can also use .ttf fonts with a .def wrapper:
[FntV2] type = truetype file = font/myfont.ttf size = 20
Background Elements (BG)
Both system.def and fight.def use the same background element syntax for screen backgrounds.
BG Element Types
- •
type = normal-- Static sprite display - •
type = anim-- Animated sprite (references .air action) - •
type = parallax-- Parallax scrolling layer
Common BG Parameters
[SectionName BG N] type = normal ; Element type spriteno = 0, 0 ; Sprite group, index start = 0, 0 ; Starting position offset tile = 0, 0 ; Tiling (0=none, 1=tile) velocity = 0, 0 ; Scroll velocity window = 0, 0, 1279, 719 ; Clipping window layerno = 0 ; 0=behind, 1=in front mask = 0 ; 0=no transparency, 1=use sprite transparency
Animated BG Example
[Title BG 1] type = anim actionno = 10 ; Animation action number from .air file start = 640, 360 layerno = 1
Customization Tips
- •Start from the default screenpack and modify incrementally
- •Keep sprite group numbers consistent with the default scheme
- •Test at your target resolution (localcoord)
- •Use the debug background (F1 in-game) to see element positions
- •Lifebar sprites should be the exact pixel width of the health range
- •Always provide both P1 and P2 versions of UI elements
- •Sound effects greatly improve menu feel -- add cursor and confirm sounds
- •Consider different UI layouts for widescreen vs classic ratios
- •IKEMEN Go supports higher resolutions natively; classic MUGEN caps at 640x480
- •Use layerno=1 for foreground elements that should appear above other BG layers
Sprite Group Conventions
The following sprite group numbers are commonly used in system.sff:
| Group | Purpose |
|---|---|
| 0 | Title screen backgrounds |
| 100 | Menu cursors, highlights |
| 150-159 | Select screen cell backgrounds |
| 160-169 | P1 select cursor sprites |
| 170-179 | P2 select cursor sprites |
| 200-299 | VS screen elements |
| 300+ | Additional screen elements |
For fight.sff:
| Group | Purpose |
|---|---|
| 10-19 | Lifebar elements |
| 20-29 | Powerbar elements |
| 30-39 | Face/portrait frames |
| 40-49 | Timer elements |
| 50-59 | Round display sprites |
| 60-69 | "FIGHT!" display |
| 70-79 | "K.O." display |
| 80-89 | Win/lose text |
| 200-209 | Win icons |
| 300+ | Additional fight UI |