diff --git a/README.md b/README.md index eaa93cb..cd7e094 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,12 @@ -# Minecraft PE Reverse Engineering Project - -This project is an attempt to recreate one of the first released builds of Minecraft: Pocket Edition -- mcpe01_canada.apk -- and port it to other platforms, -via binary reverse engineering. This project is similar in terms of goals to [Minecraft Pi](https://minecraft.net/edition/pi), except playable on more devices. - -An Android build will come soon. - -### The default build is **enhanced**. If you want the original experience, comment every define and uncomment the demo define from GameMods.hpp. +# ReMinecraftPE +This project aims to create a custom Minecraft experience based on Minecraft: Pocket Edition as of 2011. It's based on the mcpe01_canada.apk build of the game. +Its goals are similar to [Minecraft Pi](https://minecraft.net/edition/pi) and [ClassiCube](https://github.com/UnknownShadow200/ClassiCube). * Note: The original mcpe01_canada.apk does not work on newer Android devices. A port of this likely will. -Eventually, I plan on creating a new repository, `mcpe01_canada`, which will include just the port of the Canada demo. +### Planned ports: +* Raspberry Pi / Linux +* Android ### This is the main modded version. For the original decompilation, see [ReMinecraftPE/mcped](https://github.com/ReMinecraftPE/mcped) diff --git a/TODO.md b/TODO.md index f8b64b8..1287415 100644 --- a/TODO.md +++ b/TODO.md @@ -1,143 +1,66 @@ ## What is there left to do? -### World gen features -* `LargeFeature` -* `LargeCaveFeature` [unused] +### Classes to decompile: -### Unused entities and their renderers -* [DONE] `FallingTile` -* [DONE] `ItemEntity` -* `ItemSpriteRenderer` - -### Sound system: -* Mutex [used for SoundSystemSL, most of it is inlined] -* [DONE] `SoundEngine` -* [DONE] `SoundRepository` -* [DONE] `SoundSystem` +#### Sound system: * `SoundSystemSL` -* [DONE] `SoundSystemWindows` (not original, but needed if you want sound on Windows) -### Miscellanea +#### Miscellanea * `StopwatchHandler` -- `Performance::watches`. Unused?! Don't know. -### GUI stuff -* [DONE] `ChatScreen` -* [DONE] `ConfirmScreen` -* [DONE] `DeleteWorldScreen` -* [DONE] `InvalidLicenseScreen` -* [DONE] `SmallButton` -* [DONE] `ScrolledSelectionList` -* [DONE] `AvailableGamesList` -* [DONE] `JoinGameScreen` -* [DONE] `RenameMPLevelScreen` +## Other things left to do: -### Save data -* [DONE] `PlayerData` -* [DONE] `RegionFile` - -### Multiplayer -* [DONE] `ServerSideNetworkHandler` -* [DONE] `ClientSideNetworkHandler` -* [DONE] `MinecraftPackets` -* [DONE] `NetEventCallback` -* [DONE] `Packet` -* [DONE] `AddPlayerPacket` -* [DONE] `ChunkDataPacket` -* [DONE] `LoginPacket` -* [DONE] `MessagePacket` -* [DONE] `MovePlayerPacket` -* [DONE] `PlaceBlockPacket` -* [DONE] `PlayerEquipmentPacket` -* [DONE] `RemoveBlockPacket` -* [DONE] `RemoveEntityPacket` -* [DONE] `RequestChunkPacket` -* [DONE] `StartGamePacket` -* [DONE] `UpdateBlockPacket` - -### Xperia Play features -* [DONE] `Controller` -* [DONE] `ControllerTurnInput` - -### From the non-demo version -* [DONE] `ExternalFileLevelStorage` -* [DONE] `ExternalFileLevelStorageSource` - -## More generic things left to do: - -* The level generator is inaccurate in terms of features. Not sure why yet. - The land and ice generation is accurate, though :) +* The level generator is inaccurate: + - Clay patches don't seem to generate properly. (example: In seed 123456, at (104,11), there are supposed to be a few clay blocks exposed on the surface) * Untangle all the control flow and variables. Some functions have nonsense variable names like v3, x4, and sometimes gotos are used (like label_3). It would be nice to untangle those. -* Instead of having a list of directories to include from, have only one and use relative paths instead. - -* Add the assertions from v0.1.1j (unoptimized debug build) - -* Attempt to recreate the project structure from Mojang. See the [Reconstructed project structure](#reconstructed-project-structure) +* Finish the texture pack I've been working on and use that as a placeholder for the actual Minecraft assets. ## Reconstructed project structure +Currently, ReMinecraftPE's directory structure imitates the structure found in + Info extracted from: * v0.1.0 demo - [D] * v0.1.1j alpha - [J] * v0.1.0 touch prototype - [T] -Obviously, this is VERY incomplete. This is what we know: +Obviously, this is VERY incomplete. Here's what we know: * Root: `C:/dev/subversion/mojang/minecraftcpp/trunk/handheld` ``` project/android/jni/Android.mk (possibly) [D] project/android/jni/Application.mk (possibly) [D] -src/raknet/* [D] +src/raknet/* [D] * +src/NinecraftApp.cpp [T] src/client/gui/components/RolledSelectionList.cpp [T] src/client/gui/components/ScrolledSelectionList.cpp [T] src/client/gui/screens/IngameBlockSelectionScreen.cpp [T] -src/client/gui/screens/ProgressScreen.cpp -src/client/gui/Font.cpp -src/client/gui/Gui.cpp -src/client/gui/GuiComponent.cpp -src/client/gui/Screen.cpp -src/client/model/Cube.cpp -src/client/renderer/Chunk.cpp -src/client/renderer/GameRenderer.cpp -src/client/renderer/ItemInHandRenderer.cpp -src/client/renderer/LevelRenderer.cpp -src/client/renderer/RenderList.cpp -src/client/renderer/Tesselator.cpp -src/client/renderer/Textures.cpp -src/client/renderer/gles.cpp -src/client/renderer/entity/EntityRenderer.cpp -src/client/renderer/entity/HumanoidMobRenderer.cpp -src/client/renderer/entity/ItemRenderer.cpp -src/client/renderer/entity/ItemSpriteRenderer.cpp -src/client/renderer/entity/MobRenderer.cpp -src/client/renderer/entity/TntRenderer.cpp -src/client/renderer/entity/TripodCameraRenderer.cpp -src/player/input - maybe - -project/ [D] - android_java/ [D] - jni/ [D] - Possibly: Android.mk, Application.mk -src/ [D] - raknet/ [D] - The RakNet source code resides here. [D] - client/ [T] - gui/ [T] - components/ [T] - RolledSelectionList.cpp [T] - ScrolledSelectionList.cpp [T] - screens/ - Font.cpp [T] - Gui.cpp [T] - GuiComponent.cpp [T] - Screen.cpp [T] - world/ [J] - level/ [J] - storage/ [J] - RegionFile.cpp [J] - NinecraftApp.cpp [T] +src/client/gui/screens/ProgressScreen.cpp [T] +src/client/gui/Font.cpp [T] +src/client/gui/Gui.cpp [T] +src/client/gui/GuiComponent.cpp [T] +src/client/gui/Screen.cpp [T] +src/client/model/Cube.cpp [T] +src/client/renderer/Chunk.cpp [T] +src/client/renderer/GameRenderer.cpp [T] +src/client/renderer/ItemInHandRenderer.cpp [T] +src/client/renderer/LevelRenderer.cpp [T] +src/client/renderer/RenderList.cpp [T] +src/client/renderer/Tesselator.cpp [T] +src/client/renderer/Textures.cpp [T] +src/client/renderer/gles.cpp [T] +src/client/renderer/entity/EntityRenderer.cpp [T] +src/client/renderer/entity/HumanoidMobRenderer.cpp [T] +src/client/renderer/entity/ItemRenderer.cpp [T] +src/client/renderer/entity/ItemSpriteRenderer.cpp [T] +src/client/renderer/entity/MobRenderer.cpp [T] +src/client/renderer/entity/TntRenderer.cpp [T] +src/client/renderer/entity/TripodCameraRenderer.cpp [T] +src/client/player/input - maybe [T] +src/world/level/storage/RegionFile.cpp [J] ``` * [1] - In v0.1.1j, the RakNet source files are located at: `C:/dev/subversion/mojang/minecraftcpp/trunk/handheld/project/lib_projects//raknet/jni/RakNetSources/`.