sbliven / mlu_maps

Maps for My Little Universe
https://sbliven.github.io/mlu_maps/
GNU General Public License v3.0
0 stars 0 forks source link

Generate levels from the game data files #3

Open sbliven opened 5 months ago

sbliven commented 5 months ago

Creating levels takes a lot of effort currently.

It would be ideal to generate maps from the game files directly. This would ensure that all tiles are correct and complete. It would also make adding or updating maps after new game releases much easier.

sbliven commented 5 months ago

Some notes on extracting game data:

AssetRipper -o planet3scenes_scenes_all --log-file planet3scenes_all.log planet3scenes_scenes_all.bundle
for f in "apk/My Little Universe_2.4.0/assets/aa/Android/"*_scenes_all.bundle; do
AssetRipper -o "scenes/$(basename "${f/.bundle/}")" "$f";
done

Example output:

./ExportedProject/Assets/Scenes/Levels/Level3DungeonE.unity

1013447 --- !u!114 &15598
1013448 MonoBehaviour:
1013449   m_ObjectHideFlags: 0
1013450   m_CorrespondingSourceObject: {fileID: 0}
1013451   m_PrefabInstance: {fileID: 0}
1013452   m_PrefabAsset: {fileID: 0}
1013453   m_GameObject: {fileID: 901}
1013454   m_Enabled: 1
1013455   m_EditorHideFlags: 0
1013456   m_Script: {fileID: 11500000, guid: ae1077617856d8a09bb61e569583f3cd, type: 3}
1013457   m_Name:
1013458   m_EditorClassIdentifier:
1013459   type: 0
1013460   _biomeDataReference:
1013461     m_AssetGUID: fe8b28fcef9d2448dad52108234387e9
1013462     m_SubObjectName:
1013463     m_SubObjectType:
1013464   pivot: {fileID: 6033}
1013465   content: {fileID: 0}
1013466   pawnSpawnPoint: {fileID: 6628}
1013467   connectedConstruction:
1013468     enabled: 1
1013469     value: {fileID: 16272}
1013470   surfaceMeshFilter: {fileID: 10214}
1013471   surfaceMeshRenderer: {fileID: 8790}
1013472   surfaceMeshCollider: {fileID: 11378}
1013473   neighbourGroundTiles:
1013474   - {fileID: 15655}
1013475   - {fileID: 16140}
1013476   - {fileID: 15378}
1013477   customNeighbourGroundTiles: []
1013478   pathNodeIndexes:
1013479   showNeighbourGroundTiles: 0

Parsing

Data model

sbliven commented 5 months ago

The neighbourGroundTiles looked promising. I wrote a script to generate a graph of the connections.

Gaia

Level1

Some observations:

Dimidium

Level3

I expected dimidium to have a bunch of small disconnected subgraphs. However, water seems to be represented now but inconsistently. The central red cluster is probably crash site island, but none of the other biomes seem to have the right number of tiles to match the other islands. It's likely that some 'groundTile' entries actually represent multiple hexes; in which case this data is unlikely to be useful.