expansion.hpp (1498B)
1 #ifndef GUARD_KNOBBILY_BROGUED_NET_REGISTER_TON_BESOTS_7814 2 #define GUARD_KNOBBILY_BROGUED_NET_REGISTER_TON_BESOTS_7814 3 #pragma once 4 5 #include "../item.hpp" 6 #include <boost/endian/arithmetic.hpp> 7 8 namespace Neptools::Stcm 9 { 10 11 class ExpansionItem final : public Item 12 { 13 LIBSHIT_DYNAMIC_OBJECT; 14 public: 15 struct Header 16 { 17 boost::endian::little_uint32_t index; 18 boost::endian::little_uint32_t name; 19 boost::endian::little_uint64_t ptr; // used by game engine 20 boost::endian::little_uint32_t pad[16]; 21 22 void Validate(FilePosition file_size) const; 23 }; 24 static_assert(sizeof(Header) == 0x50); 25 26 ExpansionItem(Key k, Context& ctx, uint32_t index, LabelPtr name) 27 : Item{k, ctx}, index{index}, name{name} {} 28 LIBSHIT_NOLUA 29 ExpansionItem(Key k, Context& ctx, const Header& hdr); 30 static ExpansionItem& CreateAndInsert(ItemPointer ptr); 31 32 FilePosition GetSize() const noexcept override { return sizeof(Header); } 33 34 uint32_t index; 35 Libshit::NotNull<LabelPtr> name; 36 37 private: 38 void Dump_(Sink& sink) const override; 39 void Inspect_(std::ostream& os, unsigned indent) const override; 40 }; 41 42 class ExpansionsItem final : public ItemWithChildren 43 { 44 LIBSHIT_DYNAMIC_OBJECT; 45 public: 46 ExpansionsItem(Key k, Context& ctx) : ItemWithChildren{k, ctx} {} 47 static ExpansionsItem& CreateAndInsert(ItemPointer ptr, uint32_t count); 48 49 private: 50 void Inspect_(std::ostream& os, unsigned indent) const override; 51 }; 52 53 } 54 #endif