Mario: support the new modifier object IDs in maploader
This commit is contained in:
+16
-4
@@ -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 ) {
|
||||
|
||||
Reference in New Issue
Block a user