* Update the readme and todo, which more closely reflect the status of the project.

This commit is contained in:
iProgramInCpp
2023-08-08 11:26:31 +03:00
parent 0c3099a3d9
commit 65f5e03eac
2 changed files with 41 additions and 121 deletions

View File

@@ -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)

147
TODO.md
View File

@@ -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/`.