New Logo + Background!

This commit is contained in:
TheBrokenRail 2024-09-22 19:28:51 -04:00
parent 72eb1945cf
commit c525d69dc3
23 changed files with 364 additions and 104 deletions

View File

@ -40,6 +40,9 @@
* `Render Fire In Third-Person` (Enabled By Default) * `Render Fire In Third-Person` (Enabled By Default)
* `Improved Water Rendering` (Enabled By Default) * `Improved Water Rendering` (Enabled By Default)
* `Classic Item Count UI` (Enabled By Default) * `Classic Item Count UI` (Enabled By Default)
* `Allow High-Resolution Title` (Enabled By Default)
* `Improved Classic Title Positioning` (Enabled By Default)
* `Use Updated Title` (Enabled By Default)
* Existing Functionality (All Enabled By Default) * Existing Functionality (All Enabled By Default)
* `Fix Screen Rendering When Hiding HUD` * `Fix Screen Rendering When Hiding HUD`
* `Sanitize Usernames` * `Sanitize Usernames`
@ -73,6 +76,7 @@
* Fix Furnace Visual Bug When Using Lava Bucket As Fuel * Fix Furnace Visual Bug When Using Lava Bucket As Fuel
* `overwrite_calls` Now Scans VTables * `overwrite_calls` Now Scans VTables
* Unify Server/Client Builds * Unify Server/Client Builds
* Controller Support Removed
**2.5.3** **2.5.3**
* Add `Replace Block Highlight With Outline` Feature Flag (Enabled By Default) * Add `Replace Block Highlight With Outline` Feature Flag (Enabled By Default)

View File

@ -1,5 +1,11 @@
project(images) project(images)
# Logo
install(
FILES "modern_logo.png"
DESTINATION "${MCPI_INSTALL_DIR}/data/images/gui"
)
# Title Background # Title Background
install( install(
FILES "background.png" FILES "background.png"
@ -14,7 +20,7 @@ install(
) )
# Icon # Icon
set(ICON_DIR "${MCPI_SHARE_DIR}/icons/hicolor/512x512/apps") set(ICON_DIR "${MCPI_SHARE_DIR}/icons/hicolor/1024x1024/apps")
install( install(
FILES "icon.png" FILES "icon.png"
DESTINATION "${ICON_DIR}" DESTINATION "${ICON_DIR}"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 283 KiB

After

Width:  |  Height:  |  Size: 139 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 117 KiB

After

Width:  |  Height:  |  Size: 97 KiB

BIN
images/modern_logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 164 KiB

After

Width:  |  Height:  |  Size: 115 KiB

View File

@ -103,3 +103,6 @@ TRUE Log Game Status
TRUE Screenshot Support TRUE Screenshot Support
TRUE Fix Camera Functionality TRUE Fix Camera Functionality
TRUE Property Scale Animated Textures TRUE Property Scale Animated Textures
TRUE Allow High-Resolution Title
TRUE Improved Classic Title Positioning
TRUE Use Updated Title

View File

@ -283,7 +283,7 @@ static void glfw_click(__attribute__((unused)) GLFWwindow *window, const int but
// Pass Mouse Scroll To SDL // Pass Mouse Scroll To SDL
static void glfw_scroll(__attribute__((unused)) GLFWwindow *window, __attribute__((unused)) double xoffset, double yoffset) { static void glfw_scroll(__attribute__((unused)) GLFWwindow *window, __attribute__((unused)) double xoffset, double yoffset) {
if (is_interactable && yoffset != 0) { if (is_interactable && yoffset != 0) {
int sdl_button = yoffset > 0 ? SDL_BUTTON_WHEELUP : SDL_BUTTON_WHEELDOWN; const int sdl_button = yoffset > 0 ? SDL_BUTTON_WHEELUP : SDL_BUTTON_WHEELDOWN;
click_event(sdl_button, false); click_event(sdl_button, false);
click_event(sdl_button, true); click_event(sdl_button, true);
} }
@ -359,7 +359,7 @@ void SDL_WM_SetCaption(const char *title, __attribute__((unused)) const char *ic
glfwWindowHintString(GLFW_WAYLAND_APP_ID, MCPI_APP_ID); glfwWindowHintString(GLFW_WAYLAND_APP_ID, MCPI_APP_ID);
// Create Window // Create Window
glfw_window = glfwCreateWindow(DEFAULT_WIDTH, DEFAULT_HEIGHT, title, NULL, NULL); glfw_window = glfwCreateWindow(DEFAULT_WIDTH, DEFAULT_HEIGHT, title, nullptr, nullptr);
if (!glfw_window) { if (!glfw_window) {
ERR("Unable To Create GLFW Window"); ERR("Unable To Create GLFW Window");
} }

View File

@ -68,6 +68,7 @@ set(SRC
src/atlas/atlas.cpp src/atlas/atlas.cpp
# title-screen # title-screen
src/title-screen/title-screen.cpp src/title-screen/title-screen.cpp
src/title-screen/splashes.cpp
src/title-screen/splashes.txt # Show In IDE src/title-screen/splashes.txt # Show In IDE
src/title-screen/welcome.cpp src/title-screen/welcome.cpp
# skin # skin

View File

@ -26,3 +26,5 @@ void misc_run_on_game_key_press(const std::function<bool(Minecraft *, int)> &fun
void misc_run_on_key_press(const std::function<bool(Minecraft *, int)> &func); void misc_run_on_key_press(const std::function<bool(Minecraft *, int)> &func);
void misc_run_on_creative_inventory_setup(const std::function<void(FillingContainer *)> &function); void misc_run_on_creative_inventory_setup(const std::function<void(FillingContainer *)> &function);
void misc_run_on_swap_buffers(const std::function<void()> &function); void misc_run_on_swap_buffers(const std::function<void()> &function);
static constexpr int line_height = 8;

View File

@ -41,10 +41,9 @@ static std::vector<std::string> get_debug_info(const Minecraft *minecraft) {
} }
// Render Text With Background // Render Text With Background
static uint32_t debug_background_color = 0x90505050; static constexpr uint32_t debug_background_color = 0x90505050;
static int debug_text_color = 0xe0e0e0; static constexpr int debug_text_color = 0xe0e0e0;
static int debug_background_padding = 1; static constexpr int debug_background_padding = 1;
static int line_height = 8;
static void render_debug_line(Gui *gui, std::string &line, const int x, const int y) { static void render_debug_line(Gui *gui, std::string &line, const int x, const int y) {
// Draw Background // Draw Background
const int width = gui->minecraft->font->width(line); const int width = gui->minecraft->font->width(line);
@ -57,8 +56,8 @@ static void render_debug_line(Gui *gui, std::string &line, const int x, const in
} }
// Draw Debug Information // Draw Debug Information
static bool debug_info_shown = false; static bool debug_info_shown = false;
static int debug_margin = 2; static constexpr int debug_margin = 2;
static int debug_line_padding = 1; static constexpr int debug_line_padding = 1;
static void Gui_renderDebugInfo_injection(__attribute__((unused)) Gui_renderDebugInfo_t original, Gui *self) { static void Gui_renderDebugInfo_injection(__attribute__((unused)) Gui_renderDebugInfo_t original, Gui *self) {
if (debug_info_shown) { if (debug_info_shown) {
std::vector<std::string> info = get_debug_info(self->minecraft); std::vector<std::string> info = get_debug_info(self->minecraft);

View File

@ -29,14 +29,13 @@ static void create_world(Minecraft *minecraft, std::string name, bool is_creativ
CUSTOM_VTABLE(create_world_screen, Screen) { CUSTOM_VTABLE(create_world_screen, Screen) {
TextInputScreen::setup<CreateWorldScreen>(vtable); TextInputScreen::setup<CreateWorldScreen>(vtable);
// Constants // Constants
static int line_height = 8; static constexpr int bottom_padding = 4;
static int bottom_padding = 4; static constexpr int inner_padding = 4;
static int inner_padding = 4; static constexpr int description_padding = 4;
static int description_padding = 4; static constexpr int title_padding = 8;
static int title_padding = 8; static constexpr int button_height = 24;
static int button_height = 24; static constexpr int content_y_offset_top = (title_padding * 2) + line_height;
static int content_y_offset_top = (title_padding * 2) + line_height; static constexpr int content_y_offset_bottom = button_height + (bottom_padding * 2);
static int content_y_offset_bottom = button_height + (bottom_padding * 2);
// Init // Init
static Screen_init_t original_init = vtable->init; static Screen_init_t original_init = vtable->init;
vtable->init = [](Screen *super) { vtable->init = [](Screen *super) {

View File

@ -15,16 +15,15 @@
#define INFO_ID_START 2 #define INFO_ID_START 2
// Constants // Constants
static int line_button_padding = 8; static constexpr int line_button_padding = 8;
static int line_height = 8; static constexpr int line_button_height = (line_button_padding * 2) + line_height;
static int line_button_height = (line_button_padding * 2) + line_height; static constexpr int padding = 4;
static int padding = 4; static constexpr int bottom_padding = padding;
static int bottom_padding = padding; static constexpr int inner_padding = padding;
static int inner_padding = padding; static constexpr int title_padding = 8;
static int title_padding = 8; static constexpr int info_text_y_offset = (line_button_height - line_height) / 2;
static int info_text_y_offset = (line_button_height - line_height) / 2; static constexpr int content_y_offset_top = (title_padding * 2) + line_height;
static int content_y_offset_top = (title_padding * 2) + line_height; static constexpr int content_y_offset_bottom = (bottom_padding * 2) + line_button_height;
static int content_y_offset_bottom = (bottom_padding * 2) + line_button_height;
// Extra Version Info // Extra Version Info
static std::string extra_version_info = static std::string extra_version_info =

View File

@ -0,0 +1,177 @@
#include <fstream>
#include <cmath>
#include <libreborn/libreborn.h>
#include <symbols/minecraft.h>
#include <GLES/gl.h>
#include <mods/misc/misc.h>
#include <mods/title-screen/title-screen.h>
#include "title-screen-internal.h"
// Load
void title_screen_load_splashes(std::vector<std::string> &splashes) {
std::ifstream stream("data/splashes.txt");
if (stream.good()) {
std::string line;
while (std::getline(stream, line)) {
if (line.length() > 0) {
splashes.push_back(line);
}
}
stream.close();
} else {
WARN("Unable To Load Splashes");
}
}
// Position Splash Text
struct SplashLine {
static constexpr float x_offset = 64;
float y_factor;
static constexpr float angle = -20;
static constexpr float max_scale = 2.0f;
static constexpr float min_scale = 0.6f;
static constexpr float padding = (1.0f / 18.0f);
const StartMenuScreen *screen;
explicit SplashLine(const StartMenuScreen *screen_, const float y_factor_): y_factor(y_factor_), screen(screen_) {}
// Get Origin
[[nodiscard]] float origin_x() const {
return (float(screen->width) / 2.0f) + x_offset;
}
[[nodiscard]] float get_region() const {
float region = float(screen->start_button.y - version_text_bottom);
if (region < 0) {
region = 0;
}
return region;
}
[[nodiscard]] float origin_y() const {
return float(version_text_bottom) + (get_region() / y_factor);
}
[[nodiscard]] static float angle_rad() {
return angle * float(M_PI / 180.0f);
}
// Find Endpoint
[[nodiscard]] float from_x(float x) const {
x -= origin_x();
return x / std::cos(angle_rad());
}
[[nodiscard]] float from_y(float y) const {
y -= origin_y();
return y / std::sin(angle_rad());
}
[[nodiscard]] float end() const {
const float end_x = float(screen->width) * (1 - padding);
const float end_y = float(screen->width) * padding;
return std::min(from_x(end_x), from_y(end_y));
}
// Get Scale
[[nodiscard]] float get_max_scale(bool &bad_y_factor) const {
float region = get_region();
region /= y_factor;
const float splash_line_height = region * std::cos(angle_rad());
float scale = splash_line_height / line_height;
if (scale > max_scale) {
scale = max_scale;
bad_y_factor = true;
}
if (scale < min_scale) {
scale = 0;
}
return scale;
}
};
// Add Splashes
static std::string current_splash;
static bool draw_splash(StartMenuScreen *screen, const float y_factor, const bool allow_bad_y_factor) {
// Position
const SplashLine line(screen, y_factor);
const float x = line.origin_x();
const float y = line.origin_y();
// Choose Scale
const float max_width = line.end();
bool bad_y_factor = false;
float scale = line.get_max_scale(bad_y_factor);
if (bad_y_factor && !allow_bad_y_factor) {
// Try With Another Y-Factor
return false;
}
const int text_width = screen->font->width(current_splash);
float splash_width = float(text_width) * scale;
if (splash_width > float(max_width)) {
const float multiplier = (float(max_width) / splash_width);
scale *= multiplier;
splash_width *= multiplier;
}
// Position
glPushMatrix();
glTranslatef(x, y, 0.0f);
// Rotate
glRotatef(SplashLine::angle, 0.0f, 0.0f, 1.0f);
// Oscillate
const float timeMS = float(Common::getTimeMs() % 1000) / 1000.0f;
const float oscillation = (scale / SplashLine::max_scale) * 0.1f;
scale = scale - Mth::abs(oscillation * Mth::sin(2.0f * float(M_PI) * timeMS));
// Scale
glTranslatef(splash_width / 2.0f, 0, 0);
glScalef(scale, scale, 1);
glTranslatef(-text_width / 2.0f, 0, 0);
// Render
float y_offset = float(-line_height) / 2.0f;
y_offset += 1; // Make It Look Vertically Centered
screen->drawString(screen->font, current_splash, 0, y_offset, 0xffff00);
// Finish
glPopMatrix();
return true;
}
static void StartMenuScreen_render_injection(StartMenuScreen_render_t original, StartMenuScreen *screen, const int mouse_x, const int mouse_y, const float param_1) {
// Call Original Method
original(screen, mouse_x, mouse_y, param_1);
// Load Splashes
static std::vector<std::string> splashes;
static bool splashes_loaded = false;
if (!splashes_loaded) {
// Mark As Loaded
splashes_loaded = true;
// Load
title_screen_load_splashes(splashes);
}
// Display Splash
if (!splashes.empty()) {
// Pick Splash
if (current_splash.empty()) {
current_splash = splashes[rand() % splashes.size()];
}
// Draw
float y_factor = 2.0f;
bool allow_bad_y_factor = false;
while (true) {
if (draw_splash(screen, y_factor, allow_bad_y_factor)) {
break;
} else {
y_factor++;
allow_bad_y_factor = true;
}
}
}
}
// Reset Splash When Screen Is Opened
static void StartMenuScreen_init_injection_splash(StartMenuScreen_init_t original, StartMenuScreen *screen) {
// Call Original Method
original(screen);
// Reset Splash
current_splash = "";
}
// Init
void _init_splashes() {
overwrite_calls(StartMenuScreen_render, StartMenuScreen_render_injection);
overwrite_calls(StartMenuScreen_init, StartMenuScreen_init_injection_splash);
// Init Random
srand(time(nullptr));
}

View File

@ -1,3 +1,5 @@
#pragma once #pragma once
__attribute__((visibility("internal"))) void _init_welcome(); __attribute__((visibility("internal"))) void _init_welcome();
__attribute__((visibility("internal"))) extern int version_text_bottom;
__attribute__((visibility("internal"))) void _init_splashes();

View File

@ -8,13 +8,14 @@
#include <mods/feature/feature.h> #include <mods/feature/feature.h>
#include <mods/init/init.h> #include <mods/init/init.h>
#include <mods/compat/compat.h> #include <mods/compat/compat.h>
#include <mods/touch/touch.h>
#include <mods/title-screen/title-screen.h> #include <mods/title-screen/title-screen.h>
#include <mods/misc/misc.h>
#include "title-screen-internal.h" #include "title-screen-internal.h"
// Improved Title Screen Background // Improved Title Screen Background
static void StartMenuScreen_render_Screen_renderBackground_injection(Screen *screen) { template <typename Self>
static void StartMenuScreen_renderBackground_injection(Self *screen) {
// Draw // Draw
const Minecraft *minecraft = screen->minecraft; const Minecraft *minecraft = screen->minecraft;
Textures *textures = minecraft->textures; Textures *textures = minecraft->textures;
@ -51,71 +52,74 @@ static void StartMenuScreen_buttonClicked_injection(StartMenuScreen_buttonClicke
} }
} }
// Add Splashes // Fix High-Resolution Title
void title_screen_load_splashes(std::vector<std::string> &splashes) { static constexpr int title_width = 256;
std::ifstream stream("data/splashes.txt"); static constexpr int title_height = 64;
if (stream.good()) { static Texture *StartMenuScreen_render_Textures_getTemporaryTextureData_injection(Textures *self, uint id) {
std::string line;
while (std::getline(stream, line)) {
if (line.length() > 0) {
splashes.push_back(line);
}
}
stream.close();
} else {
WARN("Unable To Load Splashes");
}
}
static Screen *last_screen = nullptr;
static std::string current_splash;
static void StartMenuScreen_render_Screen_render_injection(Screen *screen, int x, int y, float param_1) {
// Call Original Method // Call Original Method
Screen_render->get(false)(screen, x, y, param_1); const Texture *out = self->getTemporaryTextureData(id);
// Patch
// Load Splashes static Texture ret;
static std::vector<std::string> splashes; ret = *out;
static bool splashes_loaded = false; ret.width = title_width;
if (!splashes_loaded) { ret.height = title_height;
// Mark As Loaded return &ret;
splashes_loaded = true; }
// Load static float StartMenuScreen_render_Mth_min_injection(__attribute__((unused)) float a, const float b) {
title_screen_load_splashes(splashes); return b;
} }
// Display Splash // Track Version Text Y
if (!splashes.empty()) { int version_text_bottom;
// Pick Splash static int (*adjust_version_y)(const StartMenuScreen *) = nullptr;
if (last_screen != screen) { static void StartMenuScreen_render_GuiComponent_drawString_injection(GuiComponent *self, Font *font, const std::string &text, int x, int y, int color) {
last_screen = screen; // Adjust Position
current_splash = splashes[rand() % splashes.size()]; if (adjust_version_y) {
y = adjust_version_y((StartMenuScreen *) self);
} }
// Choose Position // Draw
const float multiplier = touch_gui ? 0.5f : 1.0f; self->drawString(font, text, x, y, color);
const float splash_x = (float(screen->width) / 2.0f) + (94.0f * multiplier); // Store Position
const float splash_y = 4.0f + (36.0f * multiplier); version_text_bottom = y + line_height;
constexpr float max_width = 86;
constexpr float max_scale = 2.0f;
// Draw (From https://github.com/ReMinecraftPE/mcpe/blob/d7a8b6baecf8b3b050538abdbc976f690312aa2d/source/client/gui/screens/StartMenuScreen.cpp#L699-L718)
glPushMatrix();
// Position
glTranslatef(splash_x, splash_y, 0.0f);
glRotatef(-20.0f, 0.0f, 0.0f, 1.0f);
// Scale
const int textWidth = screen->font->width(current_splash);
const float timeMS = float(Common::getTimeMs() % 1000) / 1000.0f;
float scale = max_scale - Mth::abs(0.1f * Mth::sin(2.0f * float(M_PI) * timeMS));
const float real_text_width = textWidth * max_scale;
if (real_text_width > max_width) {
scale *= max_width / real_text_width;
} }
scale *= multiplier;
glScalef(scale, scale, scale); // Modern Logo
// Render static constexpr float modern_title_scale = 0.75f;
static int line_height = 8; static constexpr int modern_title_width = int(title_width * modern_title_scale);
screen->drawCenteredString(screen->font, current_splash, 0, -(float(line_height) / 2), 0xffff00); static constexpr int modern_title_height = int(title_height * modern_title_scale);
// Finish static constexpr int version_text_y_offset = -6;
glPopMatrix(); static int get_title_y(const StartMenuScreen *screen) {
float y = float(screen->start_button.y - modern_title_height);
y *= (5.0f / 24.0f);
y = ceilf(y);
return int(y);
} }
static int get_version_y(const StartMenuScreen *screen) {
int y = get_title_y(screen);
y += modern_title_height;
y += version_text_y_offset;
return y;
}
static void StartMenuScreen_render_Screen_renderBackground_injection(StartMenuScreen *self) {
// Call Original Method
self->renderBackground();
// Draw Logo
self->minecraft->textures->loadAndBindTexture(Strings::title_texture_classic);
const float x = float(self->width) / 2;
const float y = float(get_title_y(self));
constexpr int w = modern_title_width / 2;
constexpr int h = modern_title_height;
Tesselator& t = Tesselator::instance;
glColor4f(1, 1, 1, 1);
t.begin(7);
t.vertexUV(x - w, y + h, self->z, 0, 1);
t.vertexUV(x + w, y + h, self->z, 1, 1);
t.vertexUV(x + w, y, self->z, 1, 0);
t.vertexUV(x - w, y, self->z, 0, 0);
t.draw();
}
static Texture *StartMenuScreen_render_Textures_getTemporaryTextureData_injection_modern(__attribute__((unused)) Textures *self, __attribute__((unused)) uint id) {
return nullptr;
} }
// Init // Init
@ -123,8 +127,8 @@ void init_title_screen() {
// Improved Title Screen Background // Improved Title Screen Background
if (feature_has("Add Title Screen Background", server_disabled)) { if (feature_has("Add Title Screen Background", server_disabled)) {
// Switch Background // Switch Background
overwrite_call((void *) 0x39528, (void *) StartMenuScreen_render_Screen_renderBackground_injection); patch_vtable(StartMenuScreen_renderBackground, StartMenuScreen_renderBackground_injection<StartMenuScreen>);
overwrite_call((void *) 0x3dee0, (void *) StartMenuScreen_render_Screen_renderBackground_injection); patch_vtable(Touch_StartMenuScreen_renderBackground, StartMenuScreen_renderBackground_injection<Touch_StartMenuScreen>);
// Text Color // Text Color
patch_address((void *) 0x397ac, (void *) 0xffffffff); patch_address((void *) 0x397ac, (void *) 0xffffffff);
patch_address((void *) 0x3e10c, (void *) 0xffffffff); patch_address((void *) 0x3e10c, (void *) 0xffffffff);
@ -160,12 +164,35 @@ void init_title_screen() {
overwrite_calls(StartMenuScreen_buttonClicked, StartMenuScreen_buttonClicked_injection); overwrite_calls(StartMenuScreen_buttonClicked, StartMenuScreen_buttonClicked_injection);
} }
// Modern Logo
const bool modern_logo = feature_has("Use Updated Title", server_disabled);
if (modern_logo) {
const char *new_path = "gui/modern_logo.png";
patch_address((void *) &Strings::title_texture_classic, (void *) new_path);
patch_address((void *) &Strings::title_texture_touch, (void *) new_path);
}
// High-Resolution Title
if (feature_has("Allow High-Resolution Title", server_disabled) || modern_logo) {
// Touch
overwrite_call((void *) 0x3df2c, (void *) StartMenuScreen_render_Textures_getTemporaryTextureData_injection);
overwrite_call((void *) 0x3df98, (void *) StartMenuScreen_render_Mth_min_injection);
// Classic
overwrite_call((void *) 0x3956c, (void *) StartMenuScreen_render_Textures_getTemporaryTextureData_injection);
overwrite_call((void *) 0x395d8, (void *) StartMenuScreen_render_Mth_min_injection);
}
// Better Scaling And Position
if (feature_has("Improved Classic Title Positioning", server_disabled)) {
overwrite_call((void *) 0x3956c, (void *) StartMenuScreen_render_Textures_getTemporaryTextureData_injection_modern);
overwrite_call((void *) 0x39528, (void *) StartMenuScreen_render_Screen_renderBackground_injection);
adjust_version_y = get_version_y;
}
overwrite_call((void *) 0x39728, (void *) StartMenuScreen_render_GuiComponent_drawString_injection);
// Add Splashes // Add Splashes
if (feature_has("Add Splashes", server_disabled)) { if (feature_has("Add Splashes", server_disabled)) {
overwrite_call((void *) 0x39764, (void *) StartMenuScreen_render_Screen_render_injection); _init_splashes();
overwrite_call((void *) 0x3e0c4, (void *) StartMenuScreen_render_Screen_render_injection);
// Init Random
srand(time(nullptr));
} }
// Init Welcome Screen // Init Welcome Screen

View File

@ -6,16 +6,16 @@
#include <mods/home/home.h> #include <mods/home/home.h>
#include <mods/touch/touch.h> #include <mods/touch/touch.h>
#include <mods/options/info.h> #include <mods/options/info.h>
#include <mods/misc/misc.h>
#include "title-screen-internal.h" #include "title-screen-internal.h"
// Constants // Constants
static std::string line1 = "Welcome to " MCPI_APP_TITLE " v" MCPI_VERSION "!"; static std::string line1 = "Welcome to " MCPI_APP_TITLE " v" MCPI_VERSION "!";
static int line_height = 8; static constexpr int button_width = 120;
static int button_width = 120; static constexpr int button_height = 24;
static int button_height = 24; static constexpr int line_padding = 28;
static int line_padding = 28; static constexpr int button_padding = 4;
static int button_padding = 4;
// Track Whether To Show Screen // Track Whether To Show Screen
static std::string get_tracker_file() { static std::string get_tracker_file() {

33
scripts/screenshot.sh Executable file
View File

@ -0,0 +1,33 @@
#!/bin/sh
set -e
# Setup
export XDG_SESSION_TYPE=x11
unset MCPI_GUI_SCALE
export PATH="$(pwd)/out/host/usr/bin:${PATH}"
# Setup Feature Flags
export MCPI_FEATURE_FLAGS="$(
# Get All Feature Flags
minecraft-pi-reborn --print-available-feature-flags |
# Find Enabled Feature Flags
grep '^TRUE ' | cut -f2- -d' ' |
# Disable Flags
grep -v 'Add Welcome Screen' |
grep -v 'Improved Cursor Rendering' |
# Format
tr '\n' '|'
)"
# Run
minecraft-pi-reborn --default --no-cache &
PID="$!"
# Screenshot
sleep 2
gnome-screenshot --window --file=images/start.png
# Kill
kill "${PID}"
wait "${PID}"

View File

@ -119,6 +119,7 @@ set(SRC
src/gui/screens/OptionsScreen.def src/gui/screens/OptionsScreen.def
src/gui/screens/TextEditScreen.def src/gui/screens/TextEditScreen.def
src/gui/screens/StartMenuScreen.def src/gui/screens/StartMenuScreen.def
src/gui/screens/Touch_StartMenuScreen.def
src/gui/screens/ProgressScreen.def src/gui/screens/ProgressScreen.def
src/gui/screens/Touch_SelectWorldScreen.def src/gui/screens/Touch_SelectWorldScreen.def
src/gui/screens/PaneCraftingScreen.def src/gui/screens/PaneCraftingScreen.def

View File

@ -2,5 +2,6 @@ extends Screen;
vtable 0x105188; vtable 0x105188;
property Button start_button = 0x48;
property Button options_button = 0x98; property Button options_button = 0x98;
property Button create_button = 0xc0; property Button create_button = 0xc0;

View File

@ -0,0 +1,3 @@
extends Screen;
vtable 0x1058a8;

View File

@ -10,3 +10,5 @@ static-property char *classic_create_button_text = 0x39bec; // "Create"
static-property char creative_mode_description[31] = 0x104492; // "Unlimited resources and flying" static-property char creative_mode_description[31] = 0x104492; // "Unlimited resources and flying"
static-property char survival_mode_description[34] = 0x104470; // "Mobs, health and gather resources" static-property char survival_mode_description[34] = 0x104470; // "Mobs, health and gather resources"
static-property char *text_wrapping_delimiter = 0x253d0; // " \n\t\r" static-property char *text_wrapping_delimiter = 0x253d0; // " \n\t\r"
static-property char *title_texture_touch = 0x3e0fc; // "gui/pi_title.png"
static-property char *title_texture_classic = 0x39798; // "gui/pi_title.png"

View File

@ -2,3 +2,4 @@ method void tick(bool param_1) = 0x531c4;
method int loadAndBindTexture(const std::string &name) = 0x539cc; method int loadAndBindTexture(const std::string &name) = 0x539cc;
method int assignTexture(const std::string &name, uchar *data) = 0x5354c; method int assignTexture(const std::string &name, uchar *data) = 0x5354c;
method void addDynamicTexture(DynamicTexture *texture) = 0x534f8; method void addDynamicTexture(DynamicTexture *texture) = 0x534f8;
method Texture *getTemporaryTextureData(uint id) = 0x53168;