SHT format

The SHT format defines a character and its shots in PCB.

Header

typedef struct {
    uint16_t unknown1; // Seems ignored
    uint16_t level_count;

    // All hitboxes have only one value, the same for the width and the height.
    float bombs; // Why is it a float?
    float unknown2; //TODO
    float hitbox;
    float graze_hitbox;
    float autocollected_item_speed; // Applies to all items going towards us
    float item_hitbox;
    float percentage_of_cherry_loss_on_die; //TODO: verify the formula
    float point_of_collection;
    float horizontal_vertical_speed;
    float horizontal_vertical_focused_speed;
    float diagonal_speed;
    float diagonal_focused_speed;

    thsht_offset_t offsets[level_count];

    thsht_shot_type_t shots[];
} thsht_header_t;
typedef struct {
    uint32_t offset;
    uint32_t power;
} thsht_offset_t;

Shot type

typedef struct {
    // If these 2 are 0xffff, then end the parsing.
    uint16_t interval;
    uint16_t unknown1;

    float x;
    float y;
    float hitbox_x;
    float hitbox_y;
    float angle;
    float speed;
    uint16_t damage;
    uint8_t orb; // 0 = character, 1 = left orb, 2 = right orb
    uint8_t unknown2;
    uint16_t sprite;
    uint16_t unknown3;

    // These 4 are actually booleans.
    uint32_t unknown4;
    uint32_t homing; // accelerates too
    uint32_t unknown5;
    uint32_t unknown6;
} thsht_shot_type_t;