diff --git a/.github/workflows/build-doxygen.yml b/.github/workflows/build-doxygen.yml
index 8cf5838ea..3d99c7e08 100644
--- a/.github/workflows/build-doxygen.yml
+++ b/.github/workflows/build-doxygen.yml
@@ -18,7 +18,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v3
+ - uses: actions/checkout@v6
- name: Set up Doxygen
run: sudo apt-get update && sudo apt-get install -y doxygen graphviz build-essential libsdl2-dev libgl-dev libglu1-mesa-dev libpthread-stubs0-dev
@@ -26,25 +26,9 @@ jobs:
run: git submodule update --init --recursive
- name: Generate Docs
run: cd docs && doxygen
- - name: Configure Pages
- uses: actions/configure-pages@v4
- - name: Upload Pages Artifacts
- uses: actions/upload-pages-artifact@v4
+ - name: Deploy to GitHub Pages
+ uses: peaceiris/actions-gh-pages@v4
with:
- path: ./docs/html
- deploy:
- needs: build
-
- runs-on: ubuntu-latest
-
- permissions:
- pages: write
- id-token: write
-
- environment:
- name: github-pages
- url: ${{ steps.deployment.outputs.page_url }}
- steps:
- - name: Deploy Github Pages
- uses: actions/deploy-pages@v4
- id: deployment
+ github_token: ${{ secrets.GITHUB_TOKEN }}
+ publish_dir: ./docs/html
+ force_orphan: true
diff --git a/.gitignore b/.gitignore
index 078c49c1e..fdc1dc597 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,30 +1,29 @@
-# ----- Build output directories -----
-build/
-builddir/
-.cache/
-.idea/
-build_meson/
+# Exclude everything by default
+/*
+/subprojects/.wraplock
-# meson subprojects (git clone'd on build)
-/subprojects/*
-!/subprojects/*.wrap
-
-# Nix flake output
-result
-
-# Meson generated artifacts (inside source tree, e.g. per-subdir)
-meson-private/
-meson-info/
-meson-logs/
-
-# ----- IDE / editor -----
-.cache/
-.idea/
-.vscode/
-*.code-workspace
-*.swp
-*.swo
-*~
-
-# ----- Documentation -----
-docs/
+# Except for tracked top-level project directories
+!/.devcontainer/
+!/.github/
+!/.github-assets/
+!/4J.Input/
+!/4J.Profile/
+!/4J.Render/
+!/4J.Storage/
+!/docs/
+!/Minecraft.Assets/
+!/Minecraft.Client/
+!/Minecraft.World/
+!/scripts/
+!/subprojects/
+!/.clang-format
+!/.git-blame-ignore-revs
+!/.gitattributes
+!/.gitignore
+!/.gitmodules
+!/CONTRIBUTING.md
+!/flake.lock
+!/flake.nix
+!/meson.build
+!/meson.options
+!/README.md
diff --git a/4J.Render/4J_Render.cpp b/4J.Render/4J_Render.cpp
index 85cdb58e4..1133cd4e8 100644
--- a/4J.Render/4J_Render.cpp
+++ b/4J.Render/4J_Render.cpp
@@ -311,6 +311,8 @@ void C4JRender::SetFullscreen(bool fs) { s_fullscreen = fs; }
bool C4JRender::ShouldClose() { return !s_window || s_shouldClose; }
+void C4JRender::Close() { s_window = nullptr; }
+
void C4JRender::Shutdown() {
// Destroy the main window and clean up SDL resources so that
// destructors running after the game loop don't touch a dead context.
diff --git a/4J.Render/4J_Render.h b/4J.Render/4J_Render.h
index 520fe165a..564d56848 100644
--- a/4J.Render/4J_Render.h
+++ b/4J.Render/4J_Render.h
@@ -227,6 +227,7 @@ public:
// Linux window management
bool ShouldClose();
+ void Close();
void Shutdown();
};
diff --git a/Minecraft.Assets/Windows64Media/Media/languages.loc b/Minecraft.Assets/Windows64Media/Media/languages.loc
index 3f4659e3a..bff8f6fb2 100644
Binary files a/Minecraft.Assets/Windows64Media/Media/languages.loc and b/Minecraft.Assets/Windows64Media/Media/languages.loc differ
diff --git a/Minecraft.Assets/Windows64Media/loc/4J_stringsGeneric.xml b/Minecraft.Assets/Windows64Media/loc/4J_stringsGeneric.xml
index 461ff6f0d..aa59296c3 100644
--- a/Minecraft.Assets/Windows64Media/loc/4J_stringsGeneric.xml
+++ b/Minecraft.Assets/Windows64Media/loc/4J_stringsGeneric.xml
@@ -120,7 +120,7 @@
- Return to Xbox Dashboard
+ Return to Desktop
@@ -208,4 +208,4 @@ Would you like to unlock the full game?
You are being returned to the main menu because of a problem reading your profile.
-
\ No newline at end of file
+
diff --git a/Minecraft.Assets/Windows64Media/loc/4J_stringsPlatformSpecific.xml b/Minecraft.Assets/Windows64Media/loc/4J_stringsPlatformSpecific.xml
index 8d705a63b..eae569f62 100644
--- a/Minecraft.Assets/Windows64Media/loc/4J_stringsPlatformSpecific.xml
+++ b/Minecraft.Assets/Windows64Media/loc/4J_stringsPlatformSpecific.xml
@@ -40,7 +40,7 @@
- Return to Xbox Dashboard
+ Return to Desktop
@@ -102,4 +102,4 @@
You are being returned to the main menu because of a problem reading your profile.
-
\ No newline at end of file
+
diff --git a/Minecraft.Assets/Windows64Media/loc/en-EN/strings.lang b/Minecraft.Assets/Windows64Media/loc/en-EN/strings.lang
index bc78f1d56..c8ef73677 100644
--- a/Minecraft.Assets/Windows64Media/loc/en-EN/strings.lang
+++ b/Minecraft.Assets/Windows64Media/loc/en-EN/strings.lang
@@ -185,7 +185,7 @@
- Return to Xbox Dashboard
+ Return to Desktop
@@ -315,7 +315,7 @@ Would you like to unlock the full game?
- Return to Xbox Dashboard
+ Return to Desktop
@@ -8604,4 +8604,4 @@ If you try to save while using the trial version, you will be given the option t
Network Error
-
\ No newline at end of file
+
diff --git a/Minecraft.Assets/Windows64Media/loc/ko-KR/4J_stringsPlatformSpecific.xml b/Minecraft.Assets/Windows64Media/loc/ko-KR/4J_stringsPlatformSpecific.xml
index 8d705a63b..eae569f62 100644
--- a/Minecraft.Assets/Windows64Media/loc/ko-KR/4J_stringsPlatformSpecific.xml
+++ b/Minecraft.Assets/Windows64Media/loc/ko-KR/4J_stringsPlatformSpecific.xml
@@ -40,7 +40,7 @@
- Return to Xbox Dashboard
+ Return to Desktop
@@ -102,4 +102,4 @@
You are being returned to the main menu because of a problem reading your profile.
-
\ No newline at end of file
+
diff --git a/Minecraft.Assets/Windows64Media/loc/ko-KR/strings.lang b/Minecraft.Assets/Windows64Media/loc/ko-KR/strings.lang
index 80d00b99f..a2b3c4f0f 100644
--- a/Minecraft.Assets/Windows64Media/loc/ko-KR/strings.lang
+++ b/Minecraft.Assets/Windows64Media/loc/ko-KR/strings.lang
@@ -250,7 +250,7 @@
- Return to Xbox Dashboard
+ Return to Desktop
@@ -8398,4 +8398,4 @@ Xbox 360 본체용 Minecraft는 멀티 플레이 게임이 기본값으로 되
이 옵션을 켜면 도전 과제를 획득할 수 없으며 순위표에 기록되지 않습니다. 플레이 도중에 옵션을 켜거나 옵션을 켠 후 저장한 게임을 다시 불러와도 마찬가지입니다.
-
\ No newline at end of file
+
diff --git a/Minecraft.Assets/XboxMedia/4J_strings.resx b/Minecraft.Assets/XboxMedia/4J_strings.resx
index ecafab861..2d7e48a7a 100644
--- a/Minecraft.Assets/XboxMedia/4J_strings.resx
+++ b/Minecraft.Assets/XboxMedia/4J_strings.resx
@@ -92,7 +92,7 @@
Enter a name for your savegame
- Return to Xbox Dashboard
+ Return to Desktop
Are you sure you want to exit the game?
diff --git a/Minecraft.Client/Minecraft.cpp b/Minecraft.Client/Minecraft.cpp
index 7c74c55c1..3eec0758e 100644
--- a/Minecraft.Client/Minecraft.cpp
+++ b/Minecraft.Client/Minecraft.cpp
@@ -546,8 +546,9 @@ void Minecraft::setScreen(Screen* screen) {
screen = new TitleScreen();
} else if (player != NULL && !ui.GetMenuDisplayed(player->GetXboxPad()) &&
player->getHealth() <= 0) {
- // screen = new DeathScreen();
-
+#ifdef ENABLE_JAVA_GUIS
+ screen = new DeathScreen();
+#else
// 4J Stu - If we exit from the death screen then we are saved as being
// dead. In the Java game when you load the game you are still dead, but
// this is silly so only show the dead screen if we have died during
@@ -557,6 +558,7 @@ void Minecraft::setScreen(Screen* screen) {
} else {
ui.NavigateToScene(player->GetXboxPad(), eUIScene_DeathMenu, NULL);
}
+#endif
}
if (dynamic_cast(screen) != NULL) {
diff --git a/Minecraft.Client/Platform/Common/UI/UILayer.cpp b/Minecraft.Client/Platform/Common/UI/UILayer.cpp
index 3fbefb8bb..c57affc13 100644
--- a/Minecraft.Client/Platform/Common/UI/UILayer.cpp
+++ b/Minecraft.Client/Platform/Common/UI/UILayer.cpp
@@ -342,6 +342,7 @@ bool UILayer::NavigateToScene(int iPad, EUIScene scene, void *initData)
// Frontend
case eUIScene_TrialExitUpsell:
newScene = new UIScene_TrialExitUpsell(iPad, initData, this);
+ app.DebugPrintf("UILayer::NavigateToScene AFTER UIScene_TrialExitUpsell CALL\n");
break;
case eUIScene_Intro:
newScene = new UIScene_Intro(iPad, initData, this);
diff --git a/Minecraft.Client/Platform/Common/UI/UIScene.cpp b/Minecraft.Client/Platform/Common/UI/UIScene.cpp
index 13e2a0323..1706e4b0d 100644
--- a/Minecraft.Client/Platform/Common/UI/UIScene.cpp
+++ b/Minecraft.Client/Platform/Common/UI/UIScene.cpp
@@ -226,9 +226,12 @@ void UIScene::setSafeZone(S32 safeTop, S32 safeBottom, S32 safeLeft, S32 safeRig
void UIScene::initialiseMovie()
{
loadMovie();
- mapElementsAndNames();
+ app.DebugPrintf("UIScene::initialiseMovie AFTER loadMovie CALL\n");
+ mapElementsAndNames();
+ app.DebugPrintf("UIScene::initialiseMovie AFTER mapElementsAndNames CALL\n");
updateSafeZone();
+ app.DebugPrintf("UIScene::initialiseMovie AFTER updateSafeZone CALL\n");
m_bUpdateOpacity = true;
}
@@ -1283,4 +1286,4 @@ int UIScene::parseSlotId(const char16_t *s) {
}
return id;
-}
\ No newline at end of file
+}
diff --git a/Minecraft.Client/Platform/Common/UI/UIScene_MainMenu.cpp b/Minecraft.Client/Platform/Common/UI/UIScene_MainMenu.cpp
index 42570b990..1c1d6e1cc 100644
--- a/Minecraft.Client/Platform/Common/UI/UIScene_MainMenu.cpp
+++ b/Minecraft.Client/Platform/Common/UI/UIScene_MainMenu.cpp
@@ -301,7 +301,9 @@ void UIScene_MainMenu::handlePress(F64 controlId, F64 childId)
ui.PlayUISFX(eSFX_Press);
signInReturnedFunc = &UIScene_MainMenu::CreateLoad_SignInReturned;
+ app.DebugPrintf("UIScene_MainMenu::handlePress AFTER &UIScene_MainMenu::CreateLoad_SignInReturned\n");
#endif
+ app.DebugPrintf("UIScene_MainMenu::handlePress FINISH eControl_PlayGame \n");
break;
case eControl_Leaderboards:
//CD - Added for audio
@@ -334,7 +336,6 @@ void UIScene_MainMenu::handlePress(F64 controlId, F64 childId)
m_eAction=eAction_RunUnlockOrDLC;
signInReturnedFunc = &UIScene_MainMenu::UnlockFullGame_SignInReturned;
break;
-#if defined _XBOX
case eControl_Exit:
if( ProfileManager.IsFullVersion() )
{
@@ -342,16 +343,19 @@ void UIScene_MainMenu::handlePress(F64 controlId, F64 childId)
uiIDA[0]=IDS_CANCEL;
uiIDA[1]=IDS_OK;
ui.RequestMessageBox(IDS_WARNING_ARCADE_TITLE, IDS_WARNING_ARCADE_TEXT, uiIDA, 2, XUSER_INDEX_ANY,&UIScene_MainMenu::ExitGameReturned,this);
+ app.DebugPrintf("UIScene_MainMenu::handlePress AFTER ui.RequestMessageBox(IDS_WARNING_ARCADE_TITLE, IDS_WARNING_ARCADE_TEXT, uiIDA, 2, XUSER_INDEX_ANY,&UIScene_MainMenu::ExitGameReturned,this) CALL\n");
}
+#if defined _XBOX //|| _ENABLEIGGY
else
{
#ifdef _XBOX_ONE
ui.ShowPlayerDisplayname(true);
#endif
ui.NavigateToScene(primaryPad,eUIScene_TrialExitUpsell);
+ app.DebugPrintf("UIScene_MainMenu::handlePress AFTER ui.NavigateToScene(primaryPad,eUIScene_TrialExitUpsell) CALL\n");
}
- break;
#endif
+ break;
#ifdef _DURANGO
case eControl_XboxHelp:
@@ -1034,6 +1038,7 @@ int UIScene_MainMenu::ExitGameReturned(void *pParam,int iPad,C4JStorage::EMessag
{
//XLaunchNewImage(XLAUNCH_KEYWORD_DASH_ARCADE, 0);
app.ExitGame();
+ app.DebugPrintf("UIScene_MainMenu::ExitGameReturned AFTER app.ExitGame() CALL\n");
}
return 0;
diff --git a/Minecraft.Client/Platform/Common/UI/UIScene_TrialExitUpsell.cpp b/Minecraft.Client/Platform/Common/UI/UIScene_TrialExitUpsell.cpp
index 272933921..7d25cb6b0 100644
--- a/Minecraft.Client/Platform/Common/UI/UIScene_TrialExitUpsell.cpp
+++ b/Minecraft.Client/Platform/Common/UI/UIScene_TrialExitUpsell.cpp
@@ -6,6 +6,7 @@
UIScene_TrialExitUpsell::UIScene_TrialExitUpsell(int iPad, void *initData, UILayer *parentLayer) : UIScene(iPad, parentLayer)
{
// Setup all the Iggy references we need for this scene
+ app.DebugPrintf("UIScene_TrialExitUpsell::UIScene_TrialExitUpsell BEFORE initialiseMovie CALL\n");
initialiseMovie();
}
diff --git a/Minecraft.Client/Platform/Durango/4JLibs/Media/4J_strings.resx b/Minecraft.Client/Platform/Durango/4JLibs/Media/4J_strings.resx
index c8243fc0a..e904b7c1e 100644
--- a/Minecraft.Client/Platform/Durango/4JLibs/Media/4J_strings.resx
+++ b/Minecraft.Client/Platform/Durango/4JLibs/Media/4J_strings.resx
@@ -92,7 +92,7 @@
Enter a name for your savegame
- Return to Xbox Dashboard
+ Return to Desktop
Are you sure you want to exit the game?
diff --git a/Minecraft.Client/Platform/Linux/Linux_App.cpp b/Minecraft.Client/Platform/Linux/Linux_App.cpp
index 0193d2840..cd462caa2 100644
--- a/Minecraft.Client/Platform/Linux/Linux_App.cpp
+++ b/Minecraft.Client/Platform/Linux/Linux_App.cpp
@@ -23,7 +23,10 @@ void CConsoleMinecraftApp::SetRichPresenceContext(int iPad, int contextId) {
}
void CConsoleMinecraftApp::StoreLaunchData() {}
-void CConsoleMinecraftApp::ExitGame() {}
+void CConsoleMinecraftApp::ExitGame() {
+ app.DebugPrintf("Linux_App CConsoleMinecraftApp::ExitGame AFTER START\n");
+ RenderManager.Close();
+}
void CConsoleMinecraftApp::FatalLoadError() {
app.DebugPrintf(
"CConsoleMinecraftApp::FatalLoadError - asserting 0 and dying...\n");
diff --git a/Minecraft.Client/Platform/PS3/4JLibs/Media/4J_strings.resx b/Minecraft.Client/Platform/PS3/4JLibs/Media/4J_strings.resx
index c8243fc0a..e904b7c1e 100644
--- a/Minecraft.Client/Platform/PS3/4JLibs/Media/4J_strings.resx
+++ b/Minecraft.Client/Platform/PS3/4JLibs/Media/4J_strings.resx
@@ -92,7 +92,7 @@
Enter a name for your savegame
- Return to Xbox Dashboard
+ Return to Desktop
Are you sure you want to exit the game?
diff --git a/Minecraft.Client/Platform/Xbox/4JLibs/Media/4J_strings.resx b/Minecraft.Client/Platform/Xbox/4JLibs/Media/4J_strings.resx
index c8243fc0a..e904b7c1e 100644
--- a/Minecraft.Client/Platform/Xbox/4JLibs/Media/4J_strings.resx
+++ b/Minecraft.Client/Platform/Xbox/4JLibs/Media/4J_strings.resx
@@ -92,7 +92,7 @@
Enter a name for your savegame
- Return to Xbox Dashboard
+ Return to Desktop
Are you sure you want to exit the game?
diff --git a/Minecraft.Client/Platform/Xbox/loc/Minecraft_all.resx b/Minecraft.Client/Platform/Xbox/loc/Minecraft_all.resx
index 03ccb6ced..1fef82234 100644
--- a/Minecraft.Client/Platform/Xbox/loc/Minecraft_all.resx
+++ b/Minecraft.Client/Platform/Xbox/loc/Minecraft_all.resx
@@ -59,7 +59,7 @@
Enter a name for your savegame
-Return to Xbox Dashboard
+Return to Desktop
Are you sure you want to exit the game?
diff --git a/Minecraft.Client/UI/Screens/DeathScreen.cpp b/Minecraft.Client/UI/Screens/DeathScreen.cpp
index 2384d7f6b..432378076 100644
--- a/Minecraft.Client/UI/Screens/DeathScreen.cpp
+++ b/Minecraft.Client/UI/Screens/DeathScreen.cpp
@@ -30,8 +30,9 @@ void DeathScreen::buttonClicked(Button* button) {
// minecraft.setScreen(new NewLevelScreen(this));
}
if (button->id == 2) {
- minecraft->setLevel(NULL);
- minecraft->setScreen(new TitleScreen());
+ // TODO: proper world exits
+ // minecraft->setLevel(NULL);
+ // minecraft->setScreen(new TitleScreen());
}
}
@@ -49,11 +50,11 @@ void DeathScreen::render(int xm, int ym, float a) {
Screen::render(xm, ym, a);
// 4J - debug code - remove
- static int count = 0;
- if (count++ == 100) {
- count = 0;
- buttonClicked(buttons[0]);
- }
+ // static int count = 0;
+ // if (count++ == 100) {
+ // count = 0;
+ // buttonClicked(buttons[0]);
+ // }
}
bool DeathScreen::isPauseScreen() { return false; }
\ No newline at end of file
diff --git a/README.md b/README.md
index fee9c3162..6de41ce35 100644
--- a/README.md
+++ b/README.md
@@ -6,10 +6,6 @@
4JCraft is a modified version of the Minecraft Console Legacy Edition, aimed at porting old Minecraft to different platforms (such as Linux, Android, Emscripten, etc.) and refactoring the codebase to improve organization and use modern C++ features.
-Join our community:
-* **Discord:** https://discord.gg/zFCwRWkkUg
-* **Steam:** https://steamcommunity.com/groups/4JCraft
-
## Scope & Platform Support
At the moment, we're aiming to support the following platforms:
@@ -31,6 +27,10 @@ Please note that these percentages are **estimates** and do not necessarily refl
---
+## Join our community:
+* **Discord:** https://discord.gg/zFCwRWkkUg
+* **Steam:** https://steamcommunity.com/groups/4JCraft
+
## Building (Linux)
### Dependencies
diff --git a/flake.lock b/flake.lock
index 5261a7a19..753f8d6b7 100644
--- a/flake.lock
+++ b/flake.lock
@@ -2,11 +2,11 @@
"nodes": {
"nixpkgs": {
"locked": {
- "lastModified": 1772433332,
- "narHash": "sha256-izhTDFKsg6KeVBxJS9EblGeQ8y+O8eCa6RcW874vxEc=",
+ "lastModified": 1773734432,
+ "narHash": "sha256-IF5ppUWh6gHGHYDbtVUyhwy/i7D261P7fWD1bPefOsw=",
"owner": "nixos",
"repo": "nixpkgs",
- "rev": "cf59864ef8aa2e178cccedbe2c178185b0365705",
+ "rev": "cda48547b432e8d3b18b4180ba07473762ec8558",
"type": "github"
},
"original": {
@@ -18,7 +18,25 @@
},
"root": {
"inputs": {
- "nixpkgs": "nixpkgs"
+ "nixpkgs": "nixpkgs",
+ "shiggy": "shiggy"
+ }
+ },
+ "shiggy": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1773545684,
+ "narHash": "sha256-NI2qw4nROLciRgVZW1CM68vLQbeLmQeqdZ/QxufL6d4=",
+ "owner": "4jcraft",
+ "repo": "shiggy",
+ "rev": "7adc6c47882409c31e4f2d66fbfabdf4a3a98fd1",
+ "type": "github"
+ },
+ "original": {
+ "owner": "4jcraft",
+ "ref": "main",
+ "repo": "shiggy",
+ "type": "github"
}
}
},
diff --git a/flake.nix b/flake.nix
index a4eaaf3a1..e980435a6 100644
--- a/flake.nix
+++ b/flake.nix
@@ -3,9 +3,13 @@
inputs = {
nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";
+ shiggy = {
+ url = "github:4jcraft/shiggy/main";
+ flake = false;
+ };
};
- outputs = { self, nixpkgs, ... }:
+ outputs = { self, nixpkgs, shiggy, ... }:
let
allSystems = [
"x86_64-linux"
@@ -13,7 +17,6 @@
"x86_64-darwin"
"aarch64-darwin"
];
-
forAllSystems = f: nixpkgs.lib.genAttrs allSystems (system: f {
pkgs = import nixpkgs { inherit system; };
});
@@ -24,9 +27,13 @@
default = pkgs.clangStdenv.mkDerivation {
pname = "4jcraft";
version = "0.1.0";
-
src = ./.;
+ preConfigure = ''
+ mkdir -p subprojects/shiggy
+ cp -r ${shiggy}/. subprojects/shiggy/
+ '';
+
buildInputs = with pkgs; [
openssl.dev
libGL
@@ -47,7 +54,6 @@
installPhase = ''
mkdir -p $out/share/4jcraft
cp -r Minecraft.Client/. $out/share/4jcraft/
-
mkdir -p $out/bin
makeWrapper $out/share/4jcraft/Minecraft.Client \
$out/bin/4jcraft \