Mario: support the new modifier object IDs in maploader

This commit is contained in:
2021-08-08 21:36:47 +02:00
parent a01b6070f3
commit 45ac4dad64
3 changed files with 25 additions and 13 deletions
+16 -4
View File
@@ -59,8 +59,10 @@ uint8_t combineAdditionalData( uint8_t id, uint8_t type ) {
}
MapObject parseBlock( std::ifstream &map_file ) {
uint8_t character_type = 0, character_id = 0, modifier_id = 0,
modifier_data = 0;
uint8_t character_type = 0;
uint8_t character_id = 0;
uint32_t modifier_id = 0;
uint8_t modifier_data = 0;
uint16_t wide_terrain = read16Bits( map_file );
auto terrain = separateWideTerrain( wide_terrain );
uint16_t terrain_id = terrain.first;
@@ -72,7 +74,7 @@ MapObject parseBlock( std::ifstream &map_file ) {
additional_data &= ~ADDITIONAL_IS_MOD;
auto modifier = separateAdditionalData( additional_data );
// TODO swap modifier id and data
modifier_id = modifier.second;
modifier_id = modifier.second | 0x6000;
modifier_data = modifier.first;
} else {
// character
@@ -163,6 +165,15 @@ void loadMap( std::shared_ptr< SDLPP::Scene > &scene,
mario->setPos( i * BLOCK_SIZE,
1 - ( 16 - j ) * BLOCK_SIZE );
}
} else {
auto obj = createTerrainBlock(
block.getCharacterId(), block.getCharacterType(),
renderer, i, j, destructible, editor);
dynamic_cast< MarioBlock * >( obj.get() )->setTerrain( false );
if ( editor ) {
obj->getCollisions()[0]->setId( EDITOR_CHARACTER_ID );
}
scene->addObject(obj);
}
}
if ( editor && block.hasModifier() ) {
@@ -202,7 +213,8 @@ void saveMap( const std::string &file, std::vector< mapColumnType > &objects ) {
additional_data = combineAdditionalData(block.getCharacterId(), block.getCharacterType());
} else if ( block.hasModifier() ) {
// TODO seriously change order of id/data!!!
additional_data = combineAdditionalData(block.getModifierData(), block.getModifierId());
// we have IDs like 0x600X but only X is useful data, the 0x6 at the beginning is to differentiate mods from characters
additional_data = combineAdditionalData(block.getModifierData(), block.getModifierId() & 0x000F);
additional_data |= ADDITIONAL_IS_MOD;
}
if ( additional_data ) {