AgentSkillsCN

Screenpack Ui

在定制游戏用户界面时——无论是标题屏幕、角色选择界面、对战界面、生命条、连击计数器、回合显示、胜利图标,还是任何菜单或HUD元素——都可选用此技能。内容涵盖system.def(屏幕包)与fight.def(对战UI)的配置。

SKILL.md
--- frontmatter
description: Use this skill when customizing the game's user interface — title screen, character select screen, versus screen, lifebars, combo counter, round display, win icons, or any menu/HUD element. Covers system.def (screenpack) and fight.def (in-match UI) configuration.

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

ini
[Info]
name = "My Game Screenpack"
author = "Author"
versiondate = 01,01,2026
mugenversion = 1.1
localcoord = 1280, 720    ; Screenpack resolution

[Files] -- Asset file paths

ini
[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

ini
[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

ini
[Title BG 0]
type = normal
spriteno = 0, 0               ; Title background sprite
start = 0, 0

[Select Info] -- Character select screen

ini
[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

ini
[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]

ini
[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

ini
[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

ini
[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

ini
[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

ini
[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

ini
[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

ini
[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:

ini
[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

ini
[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

ini
[Title BG 1]
type = anim
actionno = 10                  ; Animation action number from .air file
start = 640, 360
layerno = 1

Customization Tips

  1. Start from the default screenpack and modify incrementally
  2. Keep sprite group numbers consistent with the default scheme
  3. Test at your target resolution (localcoord)
  4. Use the debug background (F1 in-game) to see element positions
  5. Lifebar sprites should be the exact pixel width of the health range
  6. Always provide both P1 and P2 versions of UI elements
  7. Sound effects greatly improve menu feel -- add cursor and confirm sounds
  8. Consider different UI layouts for widescreen vs classic ratios
  9. IKEMEN Go supports higher resolutions natively; classic MUGEN caps at 640x480
  10. 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:

GroupPurpose
0Title screen backgrounds
100Menu cursors, highlights
150-159Select screen cell backgrounds
160-169P1 select cursor sprites
170-179P2 select cursor sprites
200-299VS screen elements
300+Additional screen elements

For fight.sff:

GroupPurpose
10-19Lifebar elements
20-29Powerbar elements
30-39Face/portrait frames
40-49Timer elements
50-59Round display sprites
60-69"FIGHT!" display
70-79"K.O." display
80-89Win/lose text
200-209Win icons
300+Additional fight UI