| 96 | } |
| 97 | |
| 98 | bool SpriteFile::Save(const utf8* path) |
| 99 | { |
| 100 | try |
| 101 | { |
| 102 | FileStream stream(path, FileMode::write); |
| 103 | stream.Write(&Header, sizeof(G1Header)); |
| 104 | |
| 105 | if (Header.numEntries > 0) |
| 106 | { |
| 107 | ScopedRelativeSpriteFile scopedRelative(*this); |
| 108 | |
| 109 | for (const auto& entry : Entries) |
| 110 | { |
| 111 | StoredG1Element entry32bit{}; |
| 112 | |
| 113 | entry32bit.offset = static_cast<uint32_t>(reinterpret_cast<uintptr_t>(const_cast<uint8_t*>(entry.offset))); |
| 114 | entry32bit.width = entry.width; |
| 115 | entry32bit.height = entry.height; |
| 116 | entry32bit.xOffset = entry.xOffset; |
| 117 | entry32bit.yOffset = entry.yOffset; |
| 118 | entry32bit.flags = entry.flags; |
| 119 | entry32bit.zoomedOffset = entry.zoomedOffset; |
| 120 | |
| 121 | stream.Write(&entry32bit, sizeof(entry32bit)); |
| 122 | } |
| 123 | stream.Write(Data.data(), Header.totalSize); |
| 124 | } |
| 125 | return true; |
| 126 | } |
| 127 | catch (IOException&) |
| 128 | { |
| 129 | return false; |
| 130 | } |
| 131 | } |
| 132 | |
| 133 | } // namespace OpenRCT2::CommandLine::Sprite |