/* * This software is licensed under the terms of the MIT License. * See COPYING for further information. * --- * Copyright (c) 2011-2024, Lukas Weber . * Copyright (c) 2012-2024, Andrei Alexeyev . */ #pragma once #include "taisei.h" #include "boss.h" #include "difficulty.h" #include "progress.h" #include "renderer/api.h" typedef void (*StageProc)(void); typedef void (*StagePreloadProc)(ResourceGroup *rg); typedef bool (*ShaderRule)(Framebuffer*); // true = drawn to color buffer // two highest bits of uint16_t, WAY higher than the amount of spells in this game can ever possibly be #define STAGE_SPELL_BIT 0x8000 #define STAGE_EXTRASPELL_BIT 0x4000 typedef enum StageType { STAGE_STORY = 1, STAGE_EXTRA, STAGE_SPELL, STAGE_SPECIAL, } StageType; typedef struct StageProcs StageProcs; struct StageProcs { StageProc begin; StagePreloadProc preload; StageProc end; StageProc draw; ShaderRule *shader_rules; ShaderRule *postprocess_rules; StageProcs *spellpractice_procs; }; typedef struct StageInfo { uint16_t id; // must match type of ReplayStage.stage in replay.h StageProcs *procs; StageType type; char *title; char *subtitle; AttackInfo *spell; Difficulty difficulty; } StageInfo; size_t stageinfo_get_num_stages(void); StageInfo *stageinfo_get_by_index(size_t index); StageInfo *stageinfo_get_by_id(uint16_t id); StageInfo *stageinfo_get_by_spellcard(AttackInfo *spell, Difficulty diff); StageProgress *stageinfo_get_progress(StageInfo *stageinfo, Difficulty diff, bool allocate); StageProgress *stageinfo_get_progress_by_id(uint16_t id, Difficulty diff, bool allocate); void stageinfo_init(void); void stageinfo_shutdown(void); void stageinfo_reload(void);