14 KiB
Wave 1: Main Menu - Original LCE Reference
Deep analysis of the original Minecraft: Legacy Console Edition main menu from the 4J Studios source code. This documents how every visual element works so we can recreate it faithfully.
Architecture Overview
The main menu is composed of three layered UI components rendered via Iggy (Scaleform/SWF) or XUI (Xbox UI):
- Panorama (background) - a static blurred world image, NOT a 3D rendered scene
- Logo (top center) - the Minecraft logo, loaded as a separate SWF component
- MainMenu (foreground) - the button list and splash text, the actual interactive scene
The C++ code loads these in UIScene_MainMenu constructor:
parentLayer->addComponent(iPad, eUIComponent_Panorama);
parentLayer->addComponent(iPad, eUIComponent_Logo);
The main menu scene itself is loaded via getMoviePath() returning L"MainMenu", which maps to SWF files like MainMenu720.swf (720p), MainMenu1080.swf (1080p), etc.
1. Panorama Background
Source: UIComponent_Panorama.cpp
The panorama is a static pre-rendered panoramic image, NOT a live 3D world. Two variants exist:
- Day (
Panorama_Background_S.jpg): A bright daytime scene showing a Minecraft world with trees, a watchtower, mountains, a pyramid, and blue sky - Night (
Panorama_Background_N.jpg): The same scene at night with dark sky, moon visible, reddish horizon
Day/Night switching logic: When the player is in a game (level exists), the panorama switches based on time-of-day. If timeOfDay > 14000, it shows the night version. On the main menu with no active level, it always shows the day panorama.
The panorama is controlled via a Flash function showPanoramaDay(isDay) called from C++.
SWF files: Panorama720.swf, Panorama1080.swf, Panorama480.swf, PanoramaSplit720.swf, etc.
Texture assets (HD, Windows):
skinHDWin/205_Panorama_Background_S.jpg(day)skinHDWin/206_Panorama_Background_N.jpg(night)
The panoramic images are wide aspect ratio JPEGs (~4:1) showing a 360-degree-ish view of the tutorial world.
2. Logo Component
Source: UIComponent_Logo.cpp
Extremely simple component - just loads an SWF:
- Fullscreen:
ComponentLogo720.swf/ComponentLogo1080.swf - Splitscreen:
ComponentLogoSplit720.swf/ComponentLogoSplit1080.swf
The logo is the standard Minecraft block text logo. The logo images in the skin are:
skinHDGraphics/73_Logo_Iggy.png- the Iggy engine logo (NOT the Minecraft logo)skinHDGraphics/74_Logo_Miles.png- Miles Sound System logo
The actual Minecraft logo is embedded in the SWF itself, not as a separate PNG in the skin graphics. It appears in the upper portion of the screen, horizontally centered.
Edition Subtitle
The "XBOX 360 EDITION" / "XBOX ONE EDITION" / "PLAYSTATION EDITION" / "WINDOWS EDITION" subtitle appears below the Minecraft logo. This text is platform-specific and built into the SWF/logo component, not set dynamically from C++ code. The XUI skin defines a SubTitle element within the TitleString / Pulser group, but this is used for the splash text, not the edition subtitle.
For the Windows 10 Edition variant, the subtitle reads "WINDOWS 10 EDITION" in white capital letters below the main Minecraft logo.
3. Splash Text ("Yellow Text")
Source: UIScene_MainMenu.cpp lines 78-99, 435-484
The splash text is the iconic yellow bouncing text from Java Edition. It loads from splashes.txt and picks a random entry on each menu visit.
Special Date Overrides
- November 9: "Happy Birthday, Ez!" (index 0)
- June 1: "Happy Birthday, Notch!" (index 1)
- December 24: "Merry X-mas!" (index 2)
- January 1: "Happy New Year!" (index 3)
Rendering (XUI path)
In the XUI code path, the splash text uses the visual TitleString (720p/1080p) or TitleStringSmall (480p).
XUI layout at 720p (xuiscene_main.xui):
- Position: (605, 210) - right side of screen, below the logo area
- Size: 500x50
- Rotation: -20 degrees (tilted, same as Java Edition)
- The text pulses via a
SubTitlescale animation looping between 1.0 and 0.95
Text styling (from skin_Minecraft.xui):
- Color:
0xffebeb0f(bright yellow) - Shadow color:
0xff50500f(dark yellow/olive) - Point size: 18.0 (720p), 10.0 (480p)
- Has a 2px offset drop shadow
Rendering (Iggy/SWF path)
In the SWF code path, the splash is drawn via a custom draw callback named "Splash". The C++ code uses OpenGL to render it with the Minecraft bitmap font:
- Positioned at center-right of a custom draw region
- Rotated -17 degrees
- Scale pulses sinusoidally:
1.8 - abs(sin(time * 2*PI) * 0.1) - Scale is adjusted to fit text width:
scale * 100 / (textWidth + 32) - Rendered in yellow (
0xffff00) with font shadow
4. Menu Buttons
Button List (Full Version)
From the source code enum and string table:
| # | ID | English Label |
|---|---|---|
| 1 | eControl_PlayGame |
"Play Game" |
| 2 | eControl_Leaderboards |
"Leaderboards" |
| 3 | eControl_Achievements |
"Achievements" |
| 4 | eControl_HelpAndOptions |
"Help & Options" |
| 5 | eControl_UnlockOrDLC |
"Minecraft Store" (full) / "Unlock Full Game" (trial) |
| 6 | eControl_Exit |
"Exit Game" |
Platform-specific removals:
- PS3/PS4/Vita: Exit button removed (must use PS button), Achievements button removed (no way to display trophies)
- Xbox One (Durango): Achievements button removed, Exit button replaced with Xbox Help button
Button Visual: XuiMainMenuButton_L
Source: skin_Minecraft.xui lines 38460-38610
Each button uses the visual style XuiMainMenuButton_L and consists of three layers:
-
highlight_graphic- Shown ONLY when focused/selected (hidden by default viaShow: false)- Texture:
Graphics\MainMenuButton_Over.png - This is the blue/periwinkle tinted version of the button
- Texture:
-
button_graphic- The normal/unfocused state- Texture:
Graphics\MainMenuButton_Norm.png - This is the gray/stone colored button
- Texture:
-
text_Label- The button text- Color:
0xffebebeb(near-white, #EBEBEB) - Shadow:
0xff0f0f0f(near-black, #0F0F0F) - Point size: 16.0
- Inset 10px from left, 6px from top
- Width: button width minus 20px padding
- Color:
Button Textures (Actual Images)
HD skin (skinHDGraphics):
| File | Description | Size |
|---|---|---|
191_FJ_MainMenuButton_Norm.png |
Normal state - gray stone texture with dark border/outline | 600x60 px |
189_MainMenuButton_Over.png |
Focused/hover state - blue/periwinkle stone texture with slight glow | 600x60 px |
190_MainMenuButton_Outline.png |
Outline frame (yellow, used for 9-grid border) | 606x66 px |
SD skin (skinGraphics):
| File | Description | Size |
|---|---|---|
197_FJ_MainMenuButton_Norm.png |
Normal state - gray stone texture | 400x40 px |
195_MainMenuButton_Over.png |
Focused state - blue stone texture | 400x40 px |
196_MainMenuButton_Outline.png |
Outline frame (yellow) | 404x44 px |
Visual Description of Actual Textures:
- Normal (
_Norm): A medium-dark gray stone/cobblestone texture. It looks like Minecraft's stone block texture stretched into a wide rectangle. The edges have a subtle darker border baked into the texture (1-2px dark outline). The overall color is approximately#505050to#707070gray. - Focused/Over (
_Over): The same stone texture but tinted blue/periwinkle (approximately#6666AAto#7777BB). This is the "selected" highlight when the controller cursor is on this button. - Outline (
_Outline): A solid yellow rectangle that is 6px larger than the button on each side (3px border). This appears to be used as a 9-grid selection indicator but the solid yellow image suggests it's used as a masking or color multiply layer.
Button Layout at 720p
From xuiscene_main.xui:
- Canvas: 1280x720
- All buttons: 450px wide, 40px tall
- X position: 415px (centered: 415 + 450/2 = 640 = center of 1280)
- Y positions (50px spacing):
- Button 1 (Play Game): Y=250
- Button 2 (Leaderboards): Y=300
- Button 3 (Achievements): Y=350
- Button 4 (Help & Options): Y=400
- Button 5 (DLC/Unlock): Y=450
- Button 6 (Exit): Y=500
- Navigation wraps: Button 6 NavDown -> Button 1, Button 1 NavUp -> Button 6
At 480p (xuiscene_main_480.xui):
- Canvas: 640x480
- Buttons: 300px wide, 36px tall (uses
XuiMainMenuButton_L_Thin) - X position: 170px (centered: 170 + 300/2 = 320 = center of 640)
- Y positions (40px spacing): 140, 180, 220, 260, 300, 340
Button Skin Visual Width (from the visual definition)
The XuiMainMenuButton_L visual definition uses 400px width, 40px height as the base visual size. The XUI scene then scales/stretches these to 450px at 720p.
Dynamic Button Resizing
The code in XUI_MainMenu.cpp (lines 393-426) measures all button text lengths and, if any text overflows the label area, it resizes ALL buttons wider to accommodate the longest label. This ensures translations like Brazilian Portuguese "Desbloquear Jogo Completo" don't get clipped.
Button Animation States
The button visual has extensive timeline animation states:
- Normal (frame 0):
highlight_graphichidden, button at rest - Focus (frame 2-12):
highlight_graphicshown at full opacity, looping - NormalDisable (frame 13): Disabled appearance
- FocusDisable (frame 15-91): Disabled but focused, highlight at 0 opacity fading to 0.5 (dimmed)
- Press (frame 92-100): Button press feedback
- NormalSel (frame 101): Selected but not focused
- InitFocus (frame 127-205): Initial focus animation (transition)
5. Controller Tooltips
Source: UIScene_MainMenu.cpp line 139, UIComponent_Tooltips.cpp
The main menu sets tooltips via:
ui.SetTooltips(DEFAULT_XUI_MENU_USER, iA, -1, iX);
Where:
- A button:
IDS_TOOLTIPS_SELECT= "Select" - B button: -1 (hidden, no back action on main menu)
- X button: Platform-specific:
- Xbox One:
IDS_TOOLTIPS_CHOOSE_USER= "Choose User" - PS Vita:
IDS_TOOLTIP_CHANGE_NETWORK_MODE(only if full version) - All others: -1 (hidden)
- Xbox One:
Tooltip Rendering
The tooltips component loads as ToolTips720.swf (or resolution variant). It renders at the bottom of the screen with safe zone padding:
- HD mode: 90% safe zone (5% inset from each edge)
- SD mode: 85% safe zone (7.5% inset from each edge)
Tooltips display as: [Button Icon] Action Text pairs arranged horizontally at the bottom-left of the screen.
Controller Button Icons (Windows/Xbox)
The skin contains controller button icons as PNGs:
skinHDWin/204_ButtonA.png- Green "A" button icon (Xbox style)skinHDWin/203_ButtonB.png- Red "B" button icon (Xbox style)skinHDWin/186_ButtonX.png- Blue "X" button iconskinHDWin/185_ButtonY.png- Yellow "Y" button icon
So on the main menu with an Xbox controller you see:
- Bottom-left:
[A] Select - On Xbox One additionally:
[X] Choose User
6. Iggy/SWF vs XUI Architecture
The codebase has two UI systems:
-
XUI (Xbox UI) - Used on Xbox 360, defined in
.xuiXML files. TheXUI_MainMenu.cppclassCScene_Mainhandles the older XUI path. -
Iggy (Scaleform SWF) - Used on PS3, PS4, Vita, Xbox One, and Windows. The
UIScene_MainMenu.cppclass handles this path. SWF movies are loaded per-resolution.
Both systems use the same skin graphics (PNGs), just at different resolutions:
skinGraphics/= SD (720p base size for textures)skinHDGraphics/= HD (1080p base size for textures)- Platform-specific skins (
skinWin/,skinDurango/, etc.) for platform button icons and panorama images
The SWF skin is loaded as a separate .swf file (skinHDWin.swf or skinWin.swf on Windows) that contains all the texture assets referenced by the UI movies.
7. Summary of Key Measurements (720p Reference)
| Element | Value |
|---|---|
| Canvas size | 1280x720 |
| Button width | 450px |
| Button height | 40px |
| Button X offset | 415px (centered) |
| First button Y | 250px |
| Button spacing | 50px vertical |
| Button count | 6 (platform-dependent, some removed) |
| Button normal color | Gray stone texture (~#606060) |
| Button focus color | Blue/periwinkle stone texture (~#6666AA) |
| Button text color | #EBEBEB (near-white) |
| Button text shadow | #0F0F0F (near-black) |
| Button text size | 16pt |
| Splash text position | (605, 210), rotated -20 deg |
| Splash text color | #EBEB0F (yellow) |
| Splash text size | 18pt |
| Tooltip safe zone | 90% (HD), 85% (SD) |
At 480p
| Element | Value |
|---|---|
| Canvas size | 640x480 |
| Button width | 300px |
| Button height | 36px |
| Button X offset | 170px (centered) |
| First button Y | 140px |
| Button spacing | 40px vertical |
8. What This Means for Recreation
To faithfully recreate the LCE main menu:
-
Background: Use a static panoramic image (the tutorial world, pre-rendered). Day version by default.
-
Logo: Minecraft block-text logo centered at the top. The edition subtitle ("WINDOWS EDITION" or similar) in white caps below it.
-
Buttons: Six gray stone-textured rectangles, vertically stacked and centered. The focused button swaps to the blue/periwinkle variant. Text is near-white with a dark shadow. The buttons use a 9-grid/nine-slice stretch so the stone texture tiles correctly at different widths.
-
Splash text: Yellow pulsing text at -20 degrees rotation, positioned to the upper-right of the button column. Uses the Minecraft bitmap font in the SWF path, or an XUI text presenter in the XUI path.
-
Tooltips: "[A] Select" at the bottom-left corner, with safe-zone padding. Additional platform buttons as needed.
-
No MenuBackground component on main menu: The main menu does NOT add
eUIComponent_MenuBackground. That component is used by other scenes (pause menu, settings, etc.) for a darker overlay. The main menu only has Panorama + Logo + MainMenu scene.