64 lines
1.7 KiB
C
64 lines
1.7 KiB
C
/*
|
|
* This software is licensed under the terms of the MIT License.
|
|
* See COPYING for further information.
|
|
* ---
|
|
* Copyright (c) 2011-2024, Lukas Weber <laochailan@web.de>.
|
|
* Copyright (c) 2012-2024, Andrei Alexeyev <akari@taisei-project.org>.
|
|
*/
|
|
|
|
#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);
|