Skip to content

PIUS format

Rodrigo Alfonso edited this page Nov 3, 2020 · 23 revisions

Definition

// PIU Steps (*.pius)

enum Channel { ORIGINAL, KPOP, WORLD };
enum DifficultyLevel { NORMAL, HARD, CRAZY, NUMERIC };
enum EventType {
  SET_FAKE,
  NOTE,
  HOLD_START,
  HOLD_END,
  SET_TEMPO,
  SET_TICKCOUNT,
  STOP,
  WARP,
};

typedef struct {
  char* title;          // 0x00 (31 bytes - including \0)
  char* artist;         // 0x1F (27 bytes - including \0)
  Channel channel;      // 0x3A (u8)
  u32 lastMillisecond;  // 0x3B (u32)
  u32 sampleStart;      // 0x3F (u32 - in ms)
  u32 sampleLength;     // 0x43 (u32 - in ms)

  u8 applyTo[3];   //   0x47
  u8 isBoss;       //   0x4A
  u8 pixelate;     //   0x4B
  u8 jump;         //   0x4C
  u8 reduce;       //   0x4D
  u8 decolorize;   //   0x4E
  u8 randomSpeed;  //   0x4F
  u8 ___;          //   0x50 (unused)
  u8 hasMessage;   //   0x51
  char* message;   //   0x52 (optional - 107 bytes - including \0)

  u8 chartCount;  // 0x52 if no message, 0xBD otherwise (u8)
  Chart* charts;  // 0x53 if no message, 0xBE otherwise ("chartCount" times)
} Song;

typedef struct {
  DifficultyLevel difficulty;  // u8
  u8 level;

  u32 eventChunkSize;
  u32 eventCount;
  Event* events;  // ("eventCount" times)
} Chart;

typedef struct {
  int timestamp;  // in ms
  u8 data;
  /* {
        [bits 0-2] type (see EventType)
        [bits 3-7] data (5-bit array with the arrows)
      }
  */
  u32 param;
  u32 param2;
  u32 param3;
  // (params are not present in note-related events)
} Event;

Event params

Event param param2 param3
SET_FAKE fake enabled (1 or 0) - -
SET_TEMPO bpm scroll bpm how many frames it should take
SET_TICKCOUNT tick count - -
STOP stop length in ms judgeable (1 or 0) -
WARP warp length in ms - -
Clone this wiki locally