yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
room.cc File Reference
#include "room.h"
#include <yaze.h>
#include <algorithm>
#include <array>
#include <cstdint>
#include <functional>
#include <limits>
#include <optional>
#include <string>
#include <unordered_map>
#include <unordered_set>
#include <vector>
#include "absl/strings/str_cat.h"
#include "absl/strings/str_format.h"
#include "app/gfx/resource/arena.h"
#include "app/gfx/types/snes_palette.h"
#include "app/platform/sdl_compat.h"
#include "rom/rom.h"
#include "rom/snes.h"
#include "rom/write_fence.h"
#include "util/log.h"
#include "zelda3/dungeon/dungeon_block_codec.h"
#include "zelda3/dungeon/dungeon_stream_allocator.h"
#include "zelda3/dungeon/dungeon_torch_codec.h"
#include "zelda3/dungeon/editor_dungeon_state.h"
#include "zelda3/dungeon/object_drawer.h"
#include "zelda3/dungeon/palette_debug.h"
#include "zelda3/dungeon/pit_damage_table.h"
#include "zelda3/dungeon/room_layer_manager.h"
#include "zelda3/dungeon/room_object.h"
#include "zelda3/dungeon/track_collision_generator.h"
#include "zelda3/sprite/sprite.h"

Go to the source code of this file.

Classes

struct  yaze::zelda3::anonymous_namespace{room.cc}::PhysicalStreamInfo
 
struct  yaze::zelda3::anonymous_namespace{room.cc}::TorchSegment
 
struct  yaze::zelda3::anonymous_namespace{room.cc}::PhysicalChestRecord
 

Namespaces

namespace  yaze
 
namespace  yaze::zelda3
 Zelda 3 specific classes and functions.
 
namespace  yaze::zelda3::anonymous_namespace{room.cc}
 

Functions

bool yaze::zelda3::anonymous_namespace{room.cc}::RoomUsesTrackCornerAliases (const std::vector< RoomObject > &objects)
 
uint8_t yaze::zelda3::anonymous_namespace{room.cc}::Layer2ModeFromHeaderByte (uint8_t byte0)
 
bool yaze::zelda3::anonymous_namespace{room.cc}::IsDarkRoomHeaderByte (uint8_t byte0)
 
const LayerMergeTypeyaze::zelda3::anonymous_namespace{room.cc}::LayerMergeFromHeaderByte (uint8_t byte0)
 
background2 yaze::zelda3::anonymous_namespace{room.cc}::Background2FromHeaderByte (uint8_t byte0)
 
template<typename WriteColor >
void yaze::zelda3::anonymous_namespace{room.cc}::PopulateDungeonRenderPaletteRows (const gfx::SnesPalette &dungeon_palette, const gfx::SnesPalette *hud_palette, WriteColor write_color)
 
std::vector< SDL_Color > yaze::zelda3::BuildDungeonRenderPalette (const gfx::SnesPalette &dungeon_palette, const gfx::SnesPalette *hud_palette)
 
void yaze::zelda3::LoadDungeonRenderPaletteToCgram (std::span< uint16_t > cgram, const gfx::SnesPalette &dungeon_palette, const gfx::SnesPalette *hud_palette)
 
PhysicalStreamInfo yaze::zelda3::anonymous_namespace{room.cc}::AnalyzePhysicalStream (const std::vector< int > &room_addresses, int room_id, int known_region_end=-1)
 
absl::Status yaze::zelda3::anonymous_namespace{room.cc}::GetObjectPointerTablePc (const std::vector< uint8_t > &rom_data, int *table_pc)
 
uint32_t yaze::zelda3::anonymous_namespace{room.cc}::ReadRoomObjectAddressSnes (const std::vector< uint8_t > &rom_data, int table_pc, int room_id)
 
int yaze::zelda3::anonymous_namespace{room.cc}::ReadRoomObjectAddressPc (const std::vector< uint8_t > &rom_data, int table_pc, int room_id)
 
absl::StatusOr< PhysicalStreamInfoyaze::zelda3::anonymous_namespace{room.cc}::GetObjectStreamInfo (const std::vector< uint8_t > &rom_data, int room_id)
 
absl::Status yaze::zelda3::anonymous_namespace{room.cc}::GetSpritePointerTablePc (const std::vector< uint8_t > &rom_data, int *table_pc)
 
int yaze::zelda3::anonymous_namespace{room.cc}::ReadRoomSpriteAddressPc (const std::vector< uint8_t > &rom_data, int table_pc, int room_id)
 
absl::StatusOr< PhysicalStreamInfoyaze::zelda3::anonymous_namespace{room.cc}::GetSpriteStreamInfo (const std::vector< uint8_t > &rom_data, int room_id)
 
int yaze::zelda3::anonymous_namespace{room.cc}::MeasureSpriteStreamSize (const std::vector< uint8_t > &rom_data, int sprite_address, int hard_end)
 
absl::Status yaze::zelda3::anonymous_namespace{room.cc}::RelocateDungeonStream (Rom *rom, int room_id, DungeonStreamKind expected_kind, const DungeonStreamLayout &layout, std::vector< uint8_t > encoded_stream)
 
absl::StatusOr< bool > yaze::zelda3::anonymous_namespace{room.cc}::DungeonStreamRequiresCopyOnWrite (const Rom &rom, int room_id, DungeonStreamKind expected_kind, const DungeonStreamLayout &layout, size_t replacement_size)
 
RoomSize yaze::zelda3::CalculateRoomSize (Rom *rom, int room_id)
 
Room yaze::zelda3::LoadRoomFromRom (Rom *rom, int room_id)
 
Room yaze::zelda3::LoadRoomHeaderFromRom (Rom *rom, int room_id)
 
int yaze::zelda3::FindMaxUsedSpriteAddress (Rom *rom)
 
absl::Status yaze::zelda3::RelocateSpriteData (Rom *rom, int room_id, const std::vector< uint8_t > &encoded_bytes)
 
std::vector< TorchSegmentyaze::zelda3::anonymous_namespace{room.cc}::ParseRomTorchSegments (const std::vector< uint8_t > &rom_data, int bytes_count)
 
std::vector< uint8_t > yaze::zelda3::anonymous_namespace{room.cc}::EncodeTorchSegmentForRoom (int room_id, const Room &room)
 
absl::Status yaze::zelda3::anonymous_namespace{room.cc}::ValidateSpecialObjectDrawLayerSelector (const RoomObject &object, int room_id, const char *object_type)
 
absl::Status yaze::zelda3::anonymous_namespace{room.cc}::ValidateLightableTorchForSave (const RoomObject &object, int room_id)
 
template<typename RoomLookup >
absl::Status yaze::zelda3::SaveAllTorchesImpl (Rom *rom, int room_count, RoomLookup &&room_lookup)
 
absl::Status yaze::zelda3::SaveAllTorches (Rom *rom, absl::Span< const Room > rooms)
 
absl::Status yaze::zelda3::SaveAllTorches (Rom *rom, int room_count, const std::function< const Room *(int)> &room_lookup)
 
absl::Status yaze::zelda3::SaveAllPits (Rom *rom)
 
absl::Status yaze::zelda3::SaveAllPits (Rom *rom, PitDamageTable *pit_damage_table)
 
bool yaze::zelda3::anonymous_namespace{room.cc}::HalfOpenRangesOverlap (int first_begin, int first_end, int second_begin, int second_end)
 
absl::Status yaze::zelda3::anonymous_namespace{room.cc}::ValidateBlocksLoaderPointerOperand (const std::vector< uint8_t > &rom_data, int operand_pc)
 
absl::Status yaze::zelda3::anonymous_namespace{room.cc}::PreflightBlocksLoaderDestinations (const std::vector< uint8_t > &rom_data, std::array< int, 4 > *destination_pcs)
 
absl::Status yaze::zelda3::SaveAllBlocks (Rom *rom)
 
absl::Status yaze::zelda3::SaveAllBlocks (Rom *rom, int room_count, const std::function< const Room *(int)> &room_lookup)
 
template<typename RoomLookup >
absl::Status yaze::zelda3::SaveAllCollisionImpl (Rom *rom, int room_count, RoomLookup &&room_lookup)
 
absl::Status yaze::zelda3::SaveAllCollision (Rom *rom, absl::Span< Room > rooms)
 
absl::Status yaze::zelda3::SaveAllCollision (Rom *rom, int room_count, const std::function< Room *(int)> &room_lookup)
 
absl::StatusOr< std::vector< std::pair< uint32_t, uint32_t > > > yaze::zelda3::GetChestTableWriteRanges (const Rom *rom)
 
std::vector< PhysicalChestRecordyaze::zelda3::anonymous_namespace{room.cc}::ParsePhysicalRomChests (const std::vector< uint8_t > &rom_data, int cpos, int byte_length)
 
void yaze::zelda3::anonymous_namespace{room.cc}::AppendChestRecord (std::vector< uint8_t > *bytes, uint16_t word, uint8_t item)
 
void yaze::zelda3::anonymous_namespace{room.cc}::AppendEditedChestRecord (std::vector< uint8_t > *bytes, int room_id, const chest_data &chest)
 
int yaze::zelda3::anonymous_namespace{room.cc}::ReadRoomPotItemAddressPc (const std::vector< uint8_t > &rom_data, int room_id)
 
absl::StatusOr< PhysicalStreamInfoyaze::zelda3::anonymous_namespace{room.cc}::GetPotItemStreamInfo (const std::vector< uint8_t > &rom_data, int room_id)
 
template<typename RoomLookup >
absl::Status yaze::zelda3::SaveAllChestsImpl (Rom *rom, int room_count, RoomLookup &&room_lookup)
 
absl::Status yaze::zelda3::SaveAllChests (Rom *rom, absl::Span< const Room > rooms)
 
absl::Status yaze::zelda3::SaveAllChests (Rom *rom, int room_count, const std::function< const Room *(int)> &room_lookup)
 
template<typename RoomLookup >
absl::Status yaze::zelda3::SaveAllPotItemsImpl (Rom *rom, int room_count, RoomLookup &&room_lookup, const DungeonStreamLayout *repack_layout=nullptr)
 
absl::Status yaze::zelda3::SaveAllPotItems (Rom *rom, absl::Span< const Room > rooms)
 
absl::Status yaze::zelda3::SaveAllPotItems (Rom *rom, absl::Span< const Room > rooms, const DungeonStreamLayout *repack_layout)
 
absl::Status yaze::zelda3::SaveAllPotItems (Rom *rom, int room_count, const std::function< const Room *(int)> &room_lookup)
 
absl::Status yaze::zelda3::SaveAllPotItems (Rom *rom, int room_count, const std::function< const Room *(int)> &room_lookup, const DungeonStreamLayout *repack_layout)
 

Variables

const std::string yaze::zelda3::RoomEffect [8]
 
const std::string yaze::zelda3::RoomTag [65]
 
constexpr int yaze::zelda3::kGfxBufferOffset = 92 * 2048
 
constexpr int yaze::zelda3::kGfxBufferStride = 1024
 
constexpr int yaze::zelda3::kGfxBufferAnimatedFrameOffset = 7 * 4096
 
constexpr int yaze::zelda3::kGfxBufferAnimatedFrameStride = 1024
 
constexpr int yaze::zelda3::kGfxBufferRoomOffset = 4096
 
constexpr int yaze::zelda3::kGfxBufferRoomSpriteOffset = 1024
 
constexpr int yaze::zelda3::kGfxBufferRoomSpriteStride = 4096
 
constexpr int yaze::zelda3::kGfxBufferRoomSpriteLastLineOffset = 0x110
 
constexpr int yaze::zelda3::anonymous_namespace{room.cc}::kTorchesMaxSize = 0x120
 
constexpr int yaze::zelda3::anonymous_namespace{room.cc}::kBlocksRegionSize = 0x80
 
constexpr std::array< int, 4 > yaze::zelda3::anonymous_namespace{room.cc}::kBlocksPointerSlots