ostream& operator <<(ostream &out, Instruction &inst) { out << HEX2(inst.opcode); out << " "; if(inst.arglen > 0) { out << HEX2(inst.args[0]); } else { out << " "; } out << " "; if(inst.arglen > 1) { out << HEX2(inst.args[1]); } else { out << " "; } out << " "; if(inst.op.illegal) { out << "*"; } else { out << " "; } out << opnames[inst.op.op]; out << " "; switch (inst.op.addr_mode) { case IMM: out << "#$" << HEX2(inst.operand) << " "; break; case REL: out << "$" << HEX4(inst.addr) << " "; break; case ZP: case ZP_ST: out << "$" << HEX2(inst.addr) << " "; break; case ABS: case ABS_ST: out << "$" << HEX4(inst.addr) << " "; break; case A: out << "A" << " "; break; case ZPX: out << "($" << HEX2(inst.args[0]) << ",X) @ " << HEX2(inst.addr) << " "; break; case ZPY: out << "($" << HEX2(inst.args[0]) << ",Y) @ " << HEX2(inst.addr) << " "; break; case IDIX: out << "($" << HEX2(inst.args[0]) << "),Y " << HEX2(inst.operand) << " @ " << HEX2(inst.i_addr) << " "; break; case IXID: out << "($" << HEX2(inst.args[0]) << ",X) @ " << HEX2(inst.i_addr) << " "; break; default: out << " "; } return out; }
void SpriteSheet::ExportSpriteFrameOffsetsTable(const PlatformConfig& config, std::stringstream& stream, const std::string& actorName, int sizeUniqueTiles) const { stream << "actor_" << actorName << "_sheet_" << m_name << "_frametable:" << std::endl; // (w) Frame size (tiles) // (w) Frame size (subsprites) // (l) Tiles address // (l) Subsprite dimension bits table addr // (l) Subsprite position offsets table addr for(int i = 0; i < GetNumFrames(); i++) { std::stringstream label; label << "actor_" << actorName << "_sheet_" << m_name << "_frame_" << i; stream << label.str() << "_header:" << std::endl; const SpriteSheet::SpriteFrameDimensions& dimensionData = GetDimensionData(i); int sizeTiles = sizeUniqueTiles; if(sizeUniqueTiles == 0) { sizeTiles = GetWidthTiles(i, config.tileWidth) * GetHeightTiles(i, config.tileHeight); } stream << "\tdc.w 0x" << HEX4(sizeTiles) << "\t; Frame size (tiles)" << std::endl; stream << "\tdc.w " << label.str() << "_size_subsprites\t; Frame size (subsprites)" << std::endl; stream << "\tdc.l " << label.str() << std::endl; stream << "\tdc.l " << label.str() << "_subsprite_dimensions_bits" << std::endl; stream << "\tdc.l " << label.str() << "_subsprite_pos_offsets" << std::endl; stream << std::endl; } }
void SpriteSheet::ExportSpriteFrameDimensions(const PlatformConfig& config, std::stringstream& stream, const std::string& actorName, int sizeUniqueTiles) const { for(int i = 0; i < GetNumFrames(); i++) { std::stringstream label; label << "actor_" << actorName << "_sheet_" << m_name << "_frame_" << i; u8 widthTotal; u8 widthWhole; u8 widthRemainder; u8 heightTotal; u8 heightWhole; u8 heightRemainder; std::vector<ion::Vector2i> subSprDimensionsTiles; std::vector<ion::Vector2i> subSprOffsetsUnflipped; std::vector<ion::Vector2i> subSprOffsetsFlippedX; GetWidthSubsprites(i, config.tileWidth, widthTotal, widthWhole, widthRemainder); GetHeightSubsprites(i, config.tileHeight, heightTotal, heightWhole, heightRemainder); GetSubspriteDimensions(i, subSprDimensionsTiles, config.tileWidth, config.tileHeight); GetSubspritePosOffsets(i, subSprOffsetsUnflipped, config.tileWidth, config.tileHeight); GetSubspritePosOffsetsFlippedX(i, subSprOffsetsFlippedX, config.tileWidth, config.tileHeight); int sizeTiles = sizeUniqueTiles; if(sizeUniqueTiles == 0) { sizeTiles = GetWidthTiles(i, config.tileWidth) * GetHeightTiles(i, config.tileHeight); } stream << label.str() << "_size_b\t\tequ 0x" << HEX4(sizeTiles * 32) << "\t; Size in bytes" << std::endl; stream << label.str() << "_size_t\t\tequ 0x" << HEX4(sizeTiles) << "\t; Size in tiles" << std::endl; stream << label.str() << "_size_subsprites\t\tequ 0x" << HEX4(widthTotal * heightTotal) << "\t; Size in subsprites" << std::endl; stream << std::endl; stream << "; Subsprite offsets from 0,0 (in pixels) - unflipped (ww) and flipped X (ww)" << std::endl; stream << label.str() << "_subsprite_pos_offsets:" << std::endl; for(int i = 0; i < subSprOffsetsUnflipped.size(); i++) { stream << "\tdc.l 0x" << HEX4(subSprOffsetsUnflipped[i].x) << HEX4(subSprOffsetsUnflipped[i].y) << ", 0x" << HEX4(subSprOffsetsFlippedX[i].x) << HEX4(subSprOffsetsFlippedX[i].y) << std::endl; } stream << "\tEven" << std::endl << std::endl; stream << "; Subsprite dimension bits (for sprite descs)" << std::endl; stream << label.str() << "_subsprite_dimensions_bits:" << std::endl; for(int i = 0; i < subSprDimensionsTiles.size(); i++) { u8 bits = ((subSprDimensionsTiles[i].x - 1) << 2) | (subSprDimensionsTiles[i].y - 1); stream << "\tdc.b 0x" << HEX1(bits) << std::endl; } stream << "\tEven" << std::endl << std::endl; } stream << std::dec; stream << std::endl; }