// Groove Coaster Android/arcade *_ext.dat // LoadExtData starts reading at byte 6. Bytes after notes are not consumed by // the recovered Android routine and are intentionally left untyped. struct NoteTimingEntry { u32 timeMs; u32 mode; float value; } [[single_color]]; struct NoteTimingList { u16 size; NoteTimingEntry entries[size]; } [[single_color]]; enum NoteType : u8 { NONE = 0, NORMAL = 1, FLICK = 2, HOLD = 3, SCRATCH = 4, BEAT = 5, MERRY_GO_ROUND = 6, HIDDEN = 7, HIDDEN2 = 8, CRITICAL = 9, SLIDE_HOLD = 10, SLIDE_COUNTER = 11, TURN = 12, SPIN = 13, FINISH = 14, DUAL_HOLD = 15, }; struct Note { u32 timeMs; NoteType type; u8 typeOverride; s16 params16[9]; u8 flag24; float params25[3]; u8 flag37; u8 flag38; float params39[4]; u32 params55[3]; float param67; u32 param71; float params75[5]; u32 param95; } [[single_color]]; struct StageExtension { NoteTimingList noteTimings[4]; u32 unknown; u32 noteCount; Note notes[noteCount]; }; u8 prefix[6] @ 0x00; StageExtension extension @ 0x06;