Files
psopeeps-newserv/src/RareItemSet.hh
T
2022-09-03 12:30:41 -07:00

39 lines
1.1 KiB
C++

#pragma once
#include <stdint.h>
#include <memory>
#include <string>
#include <random>
class RareItemSet {
public:
struct Table {
// TODO: It looks like this structure can actually vary. We see the offsets
// 0194 and 01B2 in the unused section, along with the value 1E (number of
// box rares). In PSOGC, these all appear to be the same size/format, but
// that's probably not strictly required to be the case.
// 0x280 in size; describes one difficulty, section ID, and episode
struct Drop {
uint8_t probability;
uint8_t item_code[3];
} __attribute__((packed));
Drop monster_rares[0x65]; // 0000 - 0194 in file
uint8_t box_areas[0x1E]; // 0194 - 01B2 in file
Drop box_rares[0x1E]; // 01B2 - 022A in file
uint8_t unused[0x56];
} __attribute__((packed));
RareItemSet(std::shared_ptr<const std::string> data);
const Table& get_table(uint8_t episode, uint8_t difficulty, uint8_t secid) const;
static bool sample(std::mt19937& rand, uint8_t probability);
private:
std::shared_ptr<const std::string> data;
const Table* tables;
};