Establish more-or-less consistent resource getter functions

Deprecate old ad-hoc stuff like get_sprite, r_texture_get, etc.
This commit is contained in:
Andrei Alexeyev 2020-06-09 04:33:22 +03:00
parent 642bdfd2d7
commit 89ecc0c55e
No known key found for this signature in database
GPG key ID: 363707CD4C7FE8A4
55 changed files with 246 additions and 222 deletions

View file

@ -11,6 +11,8 @@
#include "audio.h"
#include "backend.h"
#include "resource/resource.h"
#include "resource/bgm.h"
#include "resource/sfx.h"
#include "global.h"
#define B (_a_backend.funcs)
@ -47,7 +49,7 @@ static SoundID play_sound_internal(const char *name, bool is_ui, int cooldown, b
return 0;
}
Sound *snd = get_sound(name);
Sound *snd = res_sfx(name);
if(!snd || (!is_ui && snd->lastplayframe + 3 + cooldown >= global.frames)) {
return 0;
@ -116,7 +118,7 @@ void play_loop(const char *name) {
return;
}
Sound *snd = get_sound(name);
Sound *snd = res_sfx(name);
if(!snd) {
return;
@ -183,14 +185,6 @@ void stop_sounds(void) {
B.sound_stop_all(SNDGROUP_MAIN);
}
Sound* get_sound(const char *name) {
return get_resource_data(RES_SFX, name, RESF_OPTIONAL);
}
Music* get_music(const char *name) {
return get_resource_data(RES_BGM, name, RESF_OPTIONAL);
}
static bool store_sfx_volume(const char *key, const char *val, void *data) {
int vol = atoi(val);
@ -285,7 +279,7 @@ void start_bgm(const char *name) {
stralloc(&current_bgm.name, name);
if((current_bgm.music = get_music(name)) == NULL) {
if((current_bgm.music = res_bgm(name)) == NULL) {
log_warn("BGM '%s' does not exist", current_bgm.name);
stop_bgm(true);
free(current_bgm.name);

View file

@ -72,8 +72,8 @@ void update_sounds(void); // checks if loops need to be stopped
int get_default_sfx_volume(const char *sfx);
Sound* get_sound(const char *name) attr_nonnull(1);
Music* get_music(const char *music) attr_nonnull(1);
DEFINE_DEPRECATED_RESOURCE_GETTER(Sound, get_sound, res_sfx)
DEFINE_DEPRECATED_RESOURCE_GETTER(Music, get_music, res_bgm)
void start_bgm(const char *name);
void stop_bgm(bool force);

View file

@ -41,7 +41,7 @@ Boss* create_boss(char *name, char *ani, cmplx pos) {
char strbuf[strlen(ani) + sizeof("boss/")];
snprintf(strbuf, sizeof(strbuf), "boss/%s", ani);
aniplayer_create(&boss->ani, get_ani(strbuf), "main");
aniplayer_create(&boss->ani, res_anim(strbuf), "main");
boss->birthtime = global.frames;
boss->zoomcolor = *RGBA(0.1, 0.2, 0.3, 1.0);
@ -412,7 +412,7 @@ static void draw_spell_warning(Font *font, float y_pos, float f, float opacity)
}
static void draw_spell_name(Boss *b, int time, bool healthbar_radial) {
Font *font = get_font("standard");
Font *font = res_font("standard");
cmplx x0 = VIEWPORT_W/2+I*VIEWPORT_H/3.5;
float f = clamp((time - 40.0) / 60.0, 0, 1);
@ -469,7 +469,7 @@ static void draw_spell_name(Boss *b, int time, bool healthbar_radial) {
if(p) {
char buf[32];
float a = clamp((global.frames - b->current->starttime - 60) / 60.0, 0, 1);
font = get_font("small");
font = res_font("small");
float bonus_ofs = 220;
@ -707,7 +707,7 @@ void draw_boss_overlay(Boss *boss) {
float o = boss->hud.global_opacity * boss->hud.plrproximity_opacity;
if(o > 0) {
draw_boss_text(ALIGN_LEFT, 10, 20 + 8 * !radial_style, boss->name, get_font("standard"), RGBA(o, o, o, o));
draw_boss_text(ALIGN_LEFT, 10, 20 + 8 * !radial_style, boss->name, res_font("standard"), RGBA(o, o, o, o));
if(ATTACK_IS_SPELL(boss->current->type)) {
int t_portrait, t_spell;
@ -737,8 +737,8 @@ void draw_boss_overlay(Boss *boss) {
color_mul_scalar(&clr_int, o);
clr_fract = *RGBA(clr_int.r * 0.5, clr_int.g * 0.5, clr_int.b * 0.5, clr_int.a);
Font *f_int = get_font("standard");
Font *f_fract = get_font("small");
Font *f_int = res_font("standard");
Font *f_fract = res_font("small");
double pos_x, pos_y;
Alignment align;
@ -761,7 +761,7 @@ void draw_boss_overlay(Boss *boss) {
// remaining spells
Color *clr = RGBA(0.7 * o, 0.7 * o, 0.7 * o, 0.7 * o);
Sprite *star = get_sprite("star");
Sprite *star = res_sprite("star");
float x = 10 + star->w * 0.5;
bool spell_found = false;

View file

@ -1015,8 +1015,8 @@ void coroutines_draw_stats(void) {
TextParams tp = {
.pos = { SCREEN_W },
.color = RGB(1, 1, 1),
.shader_ptr = r_shader_get("text_default"),
.font_ptr = get_font("monotiny"),
.shader_ptr = res_shader("text_default"),
.font_ptr = res_font("monotiny"),
.align = ALIGN_RIGHT,
};

View file

@ -256,13 +256,13 @@ static double entry_height(CreditsEntry *e, double *head, double *body) {
if(e->lines > 0) {
if(*(e->data[0]) == '*') {
total += *head = sprite_padded_height(get_sprite("kyoukkuri"));
total += *head = sprite_padded_height(res_sprite("kyoukkuri"));
} else {
total += *head = font_get_lineskip(get_font("big"));
total += *head = font_get_lineskip(res_font("big"));
}
if(e->lines > 1) {
total += *body += (e->lines - 0.5) * font_get_lineskip(get_font("standard"));
total += *body += (e->lines - 0.5) * font_get_lineskip(res_font("standard"));
}
}
@ -323,7 +323,7 @@ static void credits_draw_entry(CreditsEntry *e) {
Sprite *yukkuri_spr = NULL;
if(*e->data[0] == '*') {
yukkuri_spr = get_sprite("kyoukkuri");
yukkuri_spr = res_sprite("kyoukkuri");
}
r_state_push();
@ -355,7 +355,7 @@ static void credits_draw_entry(CreditsEntry *e) {
r_mat_mv_translate(0, halfheight, 0);
} else {
Font *font = get_font(i ? "standard" : "big");
Font *font = res_font(i ? "standard" : "big");
r_shader("text_default");
text_draw(e->data[i], &(TextParams) {
.align = ALIGN_CENTER,

View file

@ -330,7 +330,7 @@ void dialog_draw(Dialog *dialog) {
r_draw_quad();
r_mat_mv_pop();
Font *font = get_font("standard");
Font *font = res_font("standard");
r_mat_tex_push();
@ -344,7 +344,7 @@ void dialog_draw(Dialog *dialog) {
text_draw_wrapped(dialog->text.fading_out->text, dialog_bg_rect.w, &(TextParams) {
.shader = "text_dialog",
.aux_textures = { r_texture_get("cell_noise") },
.aux_textures = { res_texture("cell_noise") },
.shader_params = &(ShaderCustomParams) {{ o * (1.0 - (0.2 + 0.8 * (1 - dialog->text.fading_out->opacity))), 1 }},
.color = &clr,
.pos = { VIEWPORT_W/2, VIEWPORT_H-110 + font_get_lineskip(font) },
@ -360,7 +360,7 @@ void dialog_draw(Dialog *dialog) {
text_draw_wrapped(dialog->text.current->text, dialog_bg_rect.w, &(TextParams) {
.shader = "text_dialog",
.aux_textures = { r_texture_get("cell_noise") },
.aux_textures = { res_texture("cell_noise") },
.shader_params = &(ShaderCustomParams) {{ o * dialog->text.current->opacity, 0 }},
.color = &clr,
.pos = { VIEWPORT_W/2, VIEWPORT_H-110 + font_get_lineskip(font) },

View file

@ -43,7 +43,7 @@ static void add_ending_entry(Ending *e, int dur, const char *msg, const char *sp
entry->msg = msg;
if(sprite) {
entry->sprite = get_sprite(sprite);
entry->sprite = res_sprite(sprite);
} else {
entry->sprite = NULL;
}

View file

@ -287,7 +287,7 @@ void BigFairy(Enemy *e, int t, bool render) {
});
const char *seqname = !e->moving ? "main" : (e->dir ? "left" : "right");
Animation *ani = get_ani("enemy/bigfairy");
Animation *ani = res_anim("enemy/bigfairy");
Sprite *spr = animation_get_frame(ani,get_ani_sequence(ani, seqname),global.frames);
r_draw_sprite(&(SpriteParams) {
@ -314,7 +314,7 @@ void Fairy(Enemy *e, int t, bool render) {
});
const char *seqname = !e->moving ? "main" : (e->dir ? "left" : "right");
Animation *ani = get_ani("enemy/fairy");
Animation *ani = res_anim("enemy/fairy");
Sprite *spr = animation_get_frame(ani,get_ani_sequence(ani, seqname),global.frames);
r_draw_sprite(&(SpriteParams) {

View file

@ -54,7 +54,7 @@ static const char* item_indicator_sprite_name(ItemType type) {
}
static Sprite* item_sprite(ItemType type) {
return get_sprite(item_sprite_name(type));
return res_sprite(item_sprite_name(type));
}
static Sprite* item_indicator_sprite(ItemType type) {
@ -62,7 +62,7 @@ static Sprite* item_indicator_sprite(ItemType type) {
if(name == NULL) {
return NULL;
}
return get_sprite(name);
return res_sprite(name);
}
static void ent_draw_item(EntityInterface *ent) {

View file

@ -123,7 +123,7 @@ void lasers_preload(void) {
lasers.quad_generic.primitive = PRIM_TRIANGLE_STRIP;
lasers.quad_generic.vertex_array = lasers.varr;
lasers.shader_generic = r_shader_get("laser_generic");
lasers.shader_generic = res_shader("laser_generic");
lasers.force_generic = env_get_int("TAISEI_FORCE_GENERIC_LASER_SHADER", false);
}
@ -589,7 +589,7 @@ bool laser_intersects_circle(Laser *l, Circle circle) {
cmplx las_linear(Laser *l, float t) {
if(t == EVENT_BIRTH) {
l->shader = r_shader_get_optional("lasers/linear");
l->shader = res_shader_optional("lasers/linear");
l->collision_step = fmax(3, l->timespan/10);
return 0;
}
@ -599,7 +599,7 @@ cmplx las_linear(Laser *l, float t) {
cmplx las_accel(Laser *l, float t) {
if(t == EVENT_BIRTH) {
l->shader = r_shader_get_optional("lasers/accelerated");
l->shader = res_shader_optional("lasers/accelerated");
l->collision_step = fmax(3, l->timespan/10);
return 0;
}
@ -612,7 +612,7 @@ cmplx las_weird_sine(Laser *l, float t) { // [0] = velocity; [1] = s
// do we even still need this?
if(t == EVENT_BIRTH) {
l->shader = r_shader_get_optional("lasers/weird_sine");
l->shader = res_shader_optional("lasers/weird_sine");
return 0;
}
@ -624,7 +624,7 @@ cmplx las_sine(Laser *l, float t) { // [0] = velocity; [1] = sine
// this is actually shaped like a sine wave
if(t == EVENT_BIRTH) {
l->shader = r_shader_get_optional("lasers/sine");
l->shader = res_shader_optional("lasers/sine");
return 0;
}
@ -643,7 +643,7 @@ cmplx las_sine_expanding(Laser *l, float t) { // [0] = velocity; [1] = sine ampl
// XXX: this is also a "weird" one
if(t == EVENT_BIRTH) {
l->shader = r_shader_get_optional("lasers/sine_expanding");
l->shader = res_shader_optional("lasers/sine_expanding");
return 0;
}
@ -661,7 +661,7 @@ cmplx las_sine_expanding(Laser *l, float t) { // [0] = velocity; [1] = sine ampl
cmplx las_turning(Laser *l, float t) { // [0] = vel0; [1] = vel1; [2] r: turn begin time, i: turn end time
if(t == EVENT_BIRTH) {
l->shader = r_shader_get_optional("lasers/turning");
l->shader = res_shader_optional("lasers/turning");
return 0;
}
@ -681,7 +681,7 @@ cmplx las_turning(Laser *l, float t) { // [0] = vel0; [1] = vel1; [2] r: turn be
cmplx las_circle(Laser *l, float t) {
if(t == EVENT_BIRTH) {
l->shader = r_shader_get_optional("lasers/circle");
l->shader = res_shader_optional("lasers/circle");
return 0;
}

View file

@ -96,7 +96,7 @@ static void update_char_menu(MenuData *menu) {
PlayerMode *m = plrmode_find(pchar->id, SELECTED_SUBSHOT(menu));
assume(m != NULL);
Font *font = get_font("standard");
Font *font = res_font("standard");
char buf[256] = { 0 };
text_wrap(font, m->description, DESCRIPTION_WIDTH, buf, sizeof(buf));
double height = text_height(font, buf, 0) + font_get_lineskip(font) * 2;
@ -213,7 +213,7 @@ void draw_char_menu(MenuData *menu) {
};
r_draw_sprite(&portrait_params);
portrait_params.sprite_ptr = get_sprite(face);
portrait_params.sprite_ptr = res_sprite(face);
r_draw_sprite(&portrait_params);
r_mat_mv_push();
@ -257,7 +257,7 @@ void draw_char_menu(MenuData *menu) {
ShotModeID current_subshot = SELECTED_SUBSHOT(menu);
float f = menu->drawdata[0]-PLR_SHOT_A;
float selbg_ofs = 200 + (100-70)*f-20*f - font_get_lineskip(get_font("standard")) * 0.7;
float selbg_ofs = 200 + (100-70)*f-20*f - font_get_lineskip(res_font("standard")) * 0.7;
r_color4(0, 0, 0, 0.5);
r_shader_standard_notex();

View file

@ -183,7 +183,7 @@ void start_game_no_difficulty_menu(MenuData *m, void *arg) {
}
void draw_menu_selector(float x, float y, float w, float h, float t) {
Sprite *bg = get_sprite("part/smoke");
Sprite *bg = res_sprite("part/smoke");
r_mat_mv_push();
r_mat_mv_translate(x, y, 0);
r_mat_mv_scale(w / bg->w, h / bg->h, 1);
@ -198,7 +198,7 @@ void draw_menu_selector(float x, float y, float w, float h, float t) {
void draw_menu_title(MenuData *m, const char *title) {
text_draw(title, &(TextParams) {
.pos = { (text_width(get_font("big"), title, 0) + 10) * (1.0 - menu_fade(m)), 30 },
.pos = { (text_width(res_font("big"), title, 0) + 10) * (1.0 - menu_fade(m)), 30 },
.align = ALIGN_RIGHT,
.font = "big",
.color = RGB(1, 1, 1),
@ -212,7 +212,7 @@ void draw_menu_list(MenuData *m, float x, float y, void (*draw)(MenuEntry*, int,
r_mat_mv_translate(x, y + offset, 0);
draw_menu_selector(m->drawdata[0], m->drawdata[2], m->drawdata[1], 34, m->frames);
ShaderProgram *text_shader = r_shader_get("text_default");
ShaderProgram *text_shader = res_shader("text_default");
dynarray_foreach(&m->entries, int i, MenuEntry *e, {
float p = offset + 20*i;
@ -260,7 +260,7 @@ void animate_menu_list_entries(MenuData *m) {
void animate_menu_list(MenuData *m) {
MenuEntry *s = dynarray_get_ptr(&m->entries, m->cursor);
int w = text_width(get_font("standard"), s->name, 0);
int w = text_width(res_font("standard"), s->name, 0);
fapproach_asymptotic_p(&m->drawdata[0], 10 + w * 0.5, 0.1, 1e-5);
fapproach_asymptotic_p(&m->drawdata[1], w * 2, 0.1, 1e-5);

View file

@ -170,7 +170,7 @@ void draw_ingame_menu_bg(MenuData *menu, float f) {
void update_ingame_menu(MenuData *menu) {
menu->drawdata[0] += (menu->cursor*35 - menu->drawdata[0])/7.0;
menu->drawdata[1] += (text_width(get_font("standard"), dynarray_get(&menu->entries, menu->cursor).name, 0) - menu->drawdata[1])/10.0;
menu->drawdata[1] += (text_width(res_font("standard"), dynarray_get(&menu->entries, menu->cursor).name, 0) - menu->drawdata[1])/10.0;
}
void draw_ingame_menu(MenuData *menu) {

View file

@ -97,7 +97,7 @@ static void musicroom_draw_item(MenuEntry *e, int i, int cnt) {
TextParams tparams = {
.pos = { 20 - e->drawdata, 20 * i },
.shader_ptr = p->text_shader,
.font_ptr = get_font("standard"),
.font_ptr = res_font("standard"),
.color = &clr,
};
bool kerning_saved = font_get_kerning_enabled(tparams.font_ptr);
@ -149,8 +149,8 @@ static void musicroom_draw(MenuData *m) {
r_mat_mv_pop();
r_state_pop();
Font *const text_font = get_font("standard");
ShaderProgram *const text_shader = r_shader_get("text_default");
Font *const text_font = res_font("standard");
ShaderProgram *const text_shader = res_shader("text_default");
const float text_x = 50;
const float text_y = SCREEN_H - comment_height + font_get_lineskip(text_font) * 1.5 + comment_offset;
@ -225,7 +225,7 @@ static void add_bgm(MenuData *m, const char *bgm) {
MusicEntryParam *p = calloc(1, sizeof(*p));
p->bgm = bgm;
p->bgm_meta = meta;
p->text_shader = r_shader_get("text_default");
p->text_shader = res_shader("text_default");
if(progress_is_bgm_unlocked(bgm)) {
p->state |= MSTATE_UNLOCKED;

View file

@ -1019,8 +1019,8 @@ static void draw_options_menu(MenuData *menu) {
int val = bind_getvalue(bind);
if(bind->configentry == CONFIG_PRACTICE_POWER) {
Font *fnt_int = get_font("standard");
Font *fnt_fract = get_font("small");
Font *fnt_int = res_font("standard");
Font *fnt_fract = res_font("small");
draw_fraction(
val,
@ -1036,7 +1036,7 @@ static void draw_options_menu(MenuData *menu) {
} else if(bind->values) {
for(j = bind->displaysingle? val : bind->valrange_max; (j+1) && (!bind->displaysingle || j == val); --j) {
if(j != bind->valrange_max && !bind->displaysingle) {
origin -= text_width(get_font("standard"), bind->values[j+1], 0) + 5;
origin -= text_width(res_font("standard"), bind->values[j+1], 0) + 5;
}
if(val == j) {

View file

@ -172,8 +172,8 @@ static void replayview_draw_messagebox(MenuData* m) {
ReplayviewContext *ctx = m->context;
MenuEntry *e = dynarray_get_ptr(&m->entries, 0);
float alpha = 1 - ctx->sub_fade;
float height = font_get_lineskip(get_font("standard")) * 2;
float width = text_width(get_font("standard"), e->name, 0) + 64;
float height = font_get_lineskip(res_font("standard")) * 2;
float width = text_width(res_font("standard"), e->name, 0) + 64;
replayview_draw_submenu_bg(width, height, alpha);
text_draw(e->name, &(TextParams) {
@ -290,8 +290,8 @@ static void replayview_drawitem(MenuEntry *e, int item, int cnt) {
}
switch(a) {
case ALIGN_CENTER: o += csize * 0.5 - text_width(get_font("standard"), tmp, 0) * 0.5; break;
case ALIGN_RIGHT: o += csize - text_width(get_font("standard"), tmp, 0); break;
case ALIGN_CENTER: o += csize * 0.5 - text_width(res_font("standard"), tmp, 0) * 0.5; break;
case ALIGN_RIGHT: o += csize - text_width(res_font("standard"), tmp, 0); break;
default: break;
}

View file

@ -103,7 +103,7 @@ void player_free(Player *plr) {
static void player_full_power(Player *plr) {
stage_clear_hazards(CLEAR_HAZARDS_ALL);
stagetext_add("Full Power!", VIEWPORT_W * 0.5 + VIEWPORT_H * 0.33 * I, ALIGN_CENTER, get_font("big"), RGB(1, 1, 1), 0, 60, 20, 20);
stagetext_add("Full Power!", VIEWPORT_W * 0.5 + VIEWPORT_H * 0.33 * I, ALIGN_CENTER, res_font("big"), RGB(1, 1, 1), 0, 60, 20, 20);
}
bool player_set_power(Player *plr, short npow) {
@ -196,7 +196,7 @@ void player_draw_overlay(Player *plr) {
float spell_x = 128 * (1 - pow(1 - spell_in, 5)) + (VIEWPORT_W + 256) * pow(1 - spell_in, 3);
float spell_y = VIEWPORT_H - 128 * sqrt(a);
Sprite *spell_spr = get_sprite("spell");
Sprite *spell_spr = res_sprite("spell");
r_draw_sprite(&(SpriteParams) {
.sprite_ptr = spell_spr,
@ -205,7 +205,7 @@ void player_draw_overlay(Player *plr) {
.scale.both = 3 - 2 * (1 - pow(1 - spell_in, 3)) + 2 * (1 - spell_out),
});
Font *font = get_font("standard");
Font *font = res_font("standard");
r_mat_mv_push();
r_mat_mv_translate(spell_x - spell_spr->w * 0.5 + 10, spell_y + 5 - font_get_metrics(font)->descent, 0);
@ -316,7 +316,7 @@ static void player_draw_indicators(EntityInterface *ent) {
char buf[64];
format_huge_num(0, plr->powersurge.bonus.baseline, sizeof(buf), buf);
Font *fnt = get_font("monotiny");
Font *fnt = res_font("monotiny");
float x = crealf(pos);
float y = cimagf(pos) + 80;
@ -352,7 +352,7 @@ DEFINE_TASK(player_indicators) {
indicators->plr = TASK_BIND(ARGS.plr);
indicators->ent.draw_layer = LAYER_PLAYER_FOCUS;
indicators->ent.draw_func = player_draw_indicators;
indicators->sprites.focus = get_sprite("focus");
indicators->sprites.focus = res_sprite("focus");
Player *plr = indicators->plr;
@ -520,7 +520,7 @@ static void player_powersurge_logic(Player *plr) {
);
if(!(global.frames % 6) && plr->powersurge.bonus.discharge_range > 0) {
Sprite *spr = get_sprite("part/powersurge_field");
Sprite *spr = res_sprite("part/powersurge_field");
double scale = 2 * plr->powersurge.bonus.discharge_range / spr->w;
double angle = rng_angle();
@ -695,7 +695,7 @@ static bool player_powersurge(Player *plr) {
play_sound("powersurge_start");
collect_all_items(1);
stagetext_add("Power Surge!", plr->pos - 64 * I, ALIGN_CENTER, get_font("standard"), RGBA(0.75, 0.75, 0.75, 0.75), 0, 45, 10, 20);
stagetext_add("Power Surge!", plr->pos - 64 * I, ALIGN_CENTER, res_font("standard"), RGBA(0.75, 0.75, 0.75, 0.75), 0, 45, 10, 20);
return true;
}
@ -766,7 +766,7 @@ static void player_powersurge_expired(Player *plr) {
PowerSurgeBonus bonus;
player_powersurge_calc_bonus(plr, &bonus);
Sprite *blast = get_sprite("part/blast_huge_halo");
Sprite *blast = res_sprite("part/blast_huge_halo");
float scale = 2 * bonus.discharge_range / blast->w;
play_sound("powersurge_end");
@ -1534,7 +1534,7 @@ static void add_score_text(Player *plr, cmplx location, uint points, bool is_piv
}
stxt = stagetext_add(
NULL, location, ALIGN_CENTER, get_font("small"), &c,
NULL, location, ALIGN_CENTER, res_font("small"), &c,
timings.delay, timings.lifetime, timings.fadeintime, timings.fadeouttime
);

View file

@ -66,7 +66,7 @@ int plrchar_player_anim_name(PlayerCharacter *pc, size_t bufsize, char buf[bufsi
Animation *plrchar_player_anim(PlayerCharacter *pc) {
char buf[64];
plrchar_player_anim_name(pc, sizeof(buf), buf);
return get_ani(buf);
return res_anim(buf);
}
int plrmode_repr(char *out, size_t outsize, PlayerMode *mode, bool internal) {

View file

@ -50,7 +50,7 @@ double marisa_common_property(Player *plr, PlrProperty prop) {
DEFINE_EXTERN_TASK(marisa_common_shot_forward) {
Player *plr = TASK_BIND(ARGS.plr);
ShaderProgram *bolt_shader = r_shader_get("sprite_particle");
ShaderProgram *bolt_shader = res_shader("sprite_particle");
real damage = ARGS.damage;
int delay = ARGS.delay;

View file

@ -190,15 +190,15 @@ static void marisa_laser_draw_lasers(EntityInterface *ent) {
MarisaAController *ctrl = ENT_CAST(ent, MarisaAController);
real t = global.frames;
ShaderProgram *shader = r_shader_get("marisa_laser");
ShaderProgram *shader = res_shader("marisa_laser");
Uniform *u_clr0 = r_shader_uniform(shader, "color0");
Uniform *u_clr1 = r_shader_uniform(shader, "color1");
Uniform *u_clr_phase = r_shader_uniform(shader, "color_phase");
Uniform *u_clr_freq = r_shader_uniform(shader, "color_freq");
Uniform *u_alpha = r_shader_uniform(shader, "alphamod");
Uniform *u_length = r_shader_uniform(shader, "laser_length");
Texture *tex0 = r_texture_get("part/marisa_laser0");
Texture *tex1 = r_texture_get("part/marisa_laser1");
Texture *tex0 = res_texture("part/marisa_laser0");
Texture *tex1 = res_texture("part/marisa_laser1");
FBPair *fbp_aux = stage_get_fbpair(FBPAIR_FG_AUX);
Framebuffer *target_fb = r_framebuffer_current();
@ -260,8 +260,8 @@ static void marisa_laser_draw_lasers(EntityInterface *ent) {
}
SpriteParams sp = {
.sprite_ptr = get_sprite("part/smoothdot"),
.shader_ptr = r_shader_get("sprite_default"),
.sprite_ptr = res_sprite("part/smoothdot"),
.shader_ptr = res_shader("sprite_default"),
};
for(MarisaALaser *laser = ctrl->lasers.first; laser; laser = laser->next) {
@ -339,7 +339,7 @@ TASK(marisa_laser_slave_shot, {
Player *plr = ctrl->plr;
MarisaASlave *slave = TASK_BIND(ARGS.slave);
Animation *fire_anim = get_ani("fire");
Animation *fire_anim = res_anim("fire");
AniSequence *fire_anim_seq = get_ani_sequence(fire_anim, "main");
MarisaALaser *active_laser = NULL;
@ -402,8 +402,8 @@ TASK(marisa_laser_slave, {
slave->ent.draw_func = marisa_laser_draw_slave;
slave->ent.draw_layer = LAYER_PLAYER_SLAVE;
slave->pos = plr->pos;
slave->shader = r_shader_get("sprite_hakkero");
slave->sprite = get_sprite("hakkero");
slave->shader = res_shader("sprite_hakkero");
slave->sprite = res_sprite("hakkero");
INVOKE_SUBTASK_WHEN(&ctrl->events.slaves_expired, common_set_bitflags,
.pflags = &slave->alive,
@ -521,8 +521,8 @@ TASK(marisa_laser_masterspark, { MarisaAController *ctrl; }) {
int t = 0;
Sprite *star_spr = get_sprite("part/maristar_orbit");
Sprite *smoke_spr = get_sprite("part/smoke");
Sprite *star_spr = res_sprite("part/maristar_orbit");
Sprite *smoke_spr = res_sprite("part/smoke");
do {
real bomb_progress = player_get_bomb_progress(plr);

View file

@ -180,7 +180,7 @@ TASK(marisa_star_slave_shot, {
Player *plr = ctrl->plr;
MarisaBSlave *slave = TASK_BIND(ARGS.slave);
ShaderProgram *shot_shader = r_shader_get("sprite_particle");
ShaderProgram *shot_shader = res_shader("sprite_particle");
real nphase = ARGS.phase / M_TAU;
real damage = SHOT_SLAVE_DAMAGE;
@ -220,8 +220,8 @@ TASK(marisa_star_slave, {
MarisaBSlave *slave = TASK_HOST_ENT(MarisaBSlave);
slave->alive = 1;
slave->pos = plr->pos;
slave->shader = r_shader_get("sprite_hakkero");
slave->sprite = get_sprite("hakkero");
slave->shader = res_shader("sprite_hakkero");
slave->sprite = res_sprite("hakkero");
slave->ent.draw_func = marisa_star_draw_slave;
slave->ent.draw_layer = LAYER_PLAYER_SLAVE;
@ -397,11 +397,11 @@ TASK(marisa_star_bomb_background, { MarisaBController *ctrl; }) {
MarisaBController *ctrl = ARGS.ctrl;
Player *plr = ctrl->plr;
ShaderProgram *bg_shader = r_shader_get("maristar_bombbg");
ShaderProgram *bg_shader = res_shader("maristar_bombbg");
Uniform *u_t = r_shader_uniform(bg_shader, "t");
Uniform *u_decay = r_shader_uniform(bg_shader, "decay");
Uniform *u_plrpos = r_shader_uniform(bg_shader, "plrpos");
Texture *bg_tex = r_texture_get("marisa_bombbg");
Texture *bg_tex = res_texture("marisa_bombbg");
do {
WAIT_EVENT_OR_DIE(&stage_get_draw_events()->background_drawn);
@ -476,10 +476,10 @@ TASK(marisa_star_controller, { BoxedPlayer plr; }) {
ctrl->plr = TASK_BIND(ARGS.plr);
TASK_HOST_EVENTS(ctrl->events);
ctrl->sprites.fairy_circle = get_sprite("fairy_circle");
ctrl->sprites.lightningball = get_sprite("part/lightningball");
ctrl->sprites.maristar_orbit = get_sprite("part/maristar_orbit");
ctrl->sprites.stardust = get_sprite("part/stardust");
ctrl->sprites.fairy_circle = res_sprite("fairy_circle");
ctrl->sprites.lightningball = res_sprite("part/lightningball");
ctrl->sprites.maristar_orbit = res_sprite("part/maristar_orbit");
ctrl->sprites.stardust = res_sprite("part/stardust");
INVOKE_SUBTASK(marisa_star_power_handler, ctrl);
INVOKE_SUBTASK(marisa_star_bomb_handler, ctrl);

View file

@ -62,7 +62,7 @@ TASK(reimu_ofuda_trail, { BoxedProjectile trail; }) {
Projectile *reimu_common_ofuda_swawn_trail(Projectile *p) {
Projectile *trail = PARTICLE(
// .sprite_ptr = p->sprite,
.sprite_ptr = get_sprite("proj/hghost"),
.sprite_ptr = res_sprite("proj/hghost"),
.color = &p->color,
.timeout = 12,
.pos = p->pos + p->move.velocity * 0.3,

View file

@ -197,7 +197,7 @@ static void reimu_spirit_bomb_impact_balls(cmplx pos, int count) {
for(int i = 0; i < count; i++) {
PARTICLE(
.sprite_ptr = get_sprite("proj/glowball"),
.sprite_ptr = res_sprite("proj/glowball"),
.shader = "sprite_bullet",
.color = HSLA(3 * (float)i / count + offset, 1, 0.5, 0),
.timeout = 60,
@ -292,8 +292,8 @@ TASK(reimu_spirit_bomb_orb_visual, { BoxedProjectile orb; }) {
Projectile *orb = TASK_BIND(ARGS.orb);
DECLARE_ENT_ARRAY(Projectile, components, 3);
Sprite *glowball = get_sprite("proj/glowball");
ShaderProgram *shader = r_shader_get("sprite_bullet");
Sprite *glowball = res_sprite("proj/glowball");
ShaderProgram *shader = res_shader("sprite_bullet");
for(int i = 0; i < components.capacity; ++i) {
ENT_ARRAY_ADD(&components, PARTICLE(
@ -377,7 +377,7 @@ TASK(reimu_spirit_bomb_orb, { BoxedPlayer plr; int index; real angle; }) {
trail_vel *= 3 * circlestrength / cabs(trail_vel);
PARTICLE(
.sprite_ptr = get_sprite("part/stain"),
.sprite_ptr = res_sprite("part/stain"),
// .color = reimu_spirit_orb_color(&(Color){0}, i),
.color = HSLA(t/orb->timeout, 0.3, 0.3, 0.0),
.pos = trail_pos,
@ -468,8 +468,8 @@ static void reimu_spirit_draw_slave(EntityInterface *ent) {
static ReimuASlave *reimu_spirit_create_slave(ReimuAController *ctrl, const Color *color) {
Player *plr = ctrl->plr;
ReimuASlave *slave = TASK_HOST_ENT(ReimuASlave);
slave->sprite = get_sprite("yinyang");
slave->shader = r_shader_get("sprite_yinyang");
slave->sprite = res_sprite("yinyang");
slave->shader = res_shader("sprite_yinyang");
slave->pos = plr->pos;
slave->color = *color;
slave->ent.draw_layer = LAYER_PLAYER_SLAVE;
@ -526,8 +526,8 @@ TASK(reimu_spirit_slave_needle_shot, {
Player *plr = ARGS.ctrl->plr;
ReimuASlave *slave = TASK_BIND(ARGS.slave);
ShaderProgram *shader = r_shader_get("sprite_particle");
Sprite *particle_spr = get_sprite("part/stain");
ShaderProgram *shader = res_shader("sprite_particle");
Sprite *particle_spr = res_sprite("part/stain");
real damage = SHOT_SLAVE_NEEDLE_DMG;
real delay = SHOT_SLAVE_NEEDLE_DELAY;
@ -593,8 +593,8 @@ TASK(reimu_spirit_slave_homing_shot, {
Player *plr = ARGS.ctrl->plr;
ReimuASlave *slave = TASK_BIND(ARGS.slave);
ShaderProgram *shader = r_shader_get("sprite_particle");
Sprite *particle_spr = get_sprite("part/stain");
ShaderProgram *shader = res_shader("sprite_particle");
Sprite *particle_spr = res_sprite("part/stain");
cmplx vel = ARGS.vel;
cmplx pdir = cnormalize(vel);
@ -766,7 +766,7 @@ TASK(reimu_spirit_shot_forward, { ReimuAController *ctrl; }) {
ReimuAController *ctrl = ARGS.ctrl;
Player *plr = ctrl->plr;
real dir = 1;
ShaderProgram *shader = r_shader_get("sprite_particle");
ShaderProgram *shader = res_shader("sprite_particle");
for(;;) {
WAIT_EVENT_OR_DIE(&plr->events.shoot);
@ -798,7 +798,7 @@ TASK(reimu_spirit_shot_volley_bullet, { Player *plr; cmplx offset; cmplx vel; re
TASK(reimu_spirit_shot_volley, { ReimuAController *ctrl; }) {
Player *plr = ARGS.ctrl->plr;
ShaderProgram *shader = r_shader_get("sprite_particle");
ShaderProgram *shader = res_shader("sprite_particle");
for(;;) {
WAIT_EVENT_OR_DIE(&plr->events.shoot);

View file

@ -152,8 +152,8 @@ TASK(reimu_dream_bomb_barrage, { ReimuBController *ctrl; }) {
ReimuBController *ctrl = ARGS.ctrl;
Player *plr = ctrl->plr;
Sprite *spr_proj = get_sprite("proj/glowball");
Sprite *spr_impact = get_sprite("part/blast");
Sprite *spr_proj = res_sprite("proj/glowball");
Sprite *spr_impact = res_sprite("part/blast");
int t = 0;
@ -424,7 +424,7 @@ TASK(reimu_dream_slave_shot, {
Player *plr = ctrl->plr;
ReimuBSlave *slave = TASK_BIND(ARGS.slave);
cmplx vel = ARGS.vel;
ShaderProgram *shader = r_shader_get("sprite_particle");
ShaderProgram *shader = res_shader("sprite_particle");
for(;;) {
WAIT_EVENT_OR_DIE(&plr->events.shoot);
@ -450,8 +450,8 @@ TASK(reimu_dream_slave, {
ReimuBSlave *slave = TASK_HOST_ENT(ReimuBSlave);
slave->ent.draw_layer = LAYER_PLAYER_SLAVE;
slave->ent.draw_func = reimu_dream_draw_slave;
slave->sprite = get_sprite("yinyang"),
slave->shader = r_shader_get("sprite_yinyang"),
slave->sprite = res_sprite("yinyang"),
slave->shader = res_shader("sprite_yinyang"),
slave->pos = plr->pos;
slave->alive = 1;
@ -564,7 +564,7 @@ TASK(reimu_dream_ofuda, { ReimuBController *ctrl; cmplx pos; cmplx vel; ShaderPr
TASK(reimu_dream_shot_forward, { ReimuBController *ctrl; }) {
ReimuBController *ctrl = ARGS.ctrl;
Player *plr = ctrl->plr;
ShaderProgram *ofuda_shader = r_shader_get("sprite_particle");
ShaderProgram *ofuda_shader = res_shader("sprite_particle");
for(;;) {
WAIT_EVENT_OR_DIE(&plr->events.shoot);
@ -626,8 +626,8 @@ TASK(reimu_dream_controller, { BoxedPlayer plr; }) {
ctrl->plr = TASK_BIND(ARGS.plr);
TASK_HOST_EVENTS(ctrl->events);
ctrl->yinyang_shader = r_shader_get("sprite_yinyang");
ctrl->yinyang_sprite = get_sprite("yinyang");
ctrl->yinyang_shader = res_shader("sprite_yinyang");
ctrl->yinyang_sprite = res_sprite("yinyang");
ctrl->ent.draw_func = reimu_dream_draw_gaps;
ctrl->ent.draw_layer = LAYER_PLAYER_FOCUS;

View file

@ -71,10 +71,10 @@ void youmu_common_init_bomb_background(YoumuBombBGData *bg_data) {
cfg.tex_params.wrap.t = TEX_WRAP_MIRROR;
bg_data->buffer = stage_add_background_framebuffer("Youmu bomb FB", 0.25, 1, 1, &cfg);
bg_data->shader = r_shader_get("youmu_bomb_bg");
bg_data->shader = res_shader("youmu_bomb_bg");
bg_data->uniforms.petals = r_shader_uniform(bg_data->shader, "petals");
bg_data->uniforms.time = r_shader_uniform(bg_data->shader, "time");
bg_data->texture = r_texture_get("youmu_bombbg1");
bg_data->texture = res_texture("youmu_bombbg1");
}
static void capture_frame(Framebuffer *dest, Framebuffer *src) {

View file

@ -176,7 +176,7 @@ TASK(youmu_mirror_myon_proj, { cmplx pos; cmplx vel; real dmg; const Color *clr;
trail_color.a = 0;
color_mul_scalar(&trail_color, 0.075);
Sprite *trail_sprite = get_sprite("part/boss_shadow");
Sprite *trail_sprite = res_sprite("part/boss_shadow");
MoveParams trail_move = move_linear(ARGS.vel * 0.8);
for(int t = 1;; ++t) {
@ -232,7 +232,7 @@ TASK(youmu_mirror_myon_shot, { YoumuAController *ctrl; }) {
YoumuAController *ctrl = ARGS.ctrl;
YoumuAMyon *myon = &ctrl->myon;
Player *plr = ctrl->plr;
ShaderProgram *shader = r_shader_get("sprite_youmu_myon_shot");
ShaderProgram *shader = res_shader("sprite_youmu_myon_shot");
for(;;) {
WAIT_EVENT_OR_DIE(&plr->events.shoot);
@ -291,9 +291,9 @@ TASK(youmu_mirror_myon, { YoumuAController *ctrl; }) {
YoumuAMyon *myon = &ctrl->myon;
Player *plr = ctrl->plr;
myon->sprites.trail = get_sprite("part/myon");
myon->sprites.smoke = get_sprite("part/smoke");
myon->sprites.stardust = get_sprite("part/stardust");
myon->sprites.trail = res_sprite("part/myon");
myon->sprites.smoke = res_sprite("part/smoke");
myon->sprites.stardust = res_sprite("part/stardust");
const real distance = 40;
const real focus_rate = 1.0/30.0;
@ -470,7 +470,7 @@ TASK(youmu_mirror_bomb_controller, { YoumuAController *ctrl; }) {
ProjFlags pflags = PFLAG_MANUALANGLE | PFLAG_NOREFLECT;
int t = 0;
ShaderProgram *silhouette_shader = r_shader_get("sprite_silhouette");
ShaderProgram *silhouette_shader = res_shader("sprite_silhouette");
do {
pos += vel;
@ -515,7 +515,7 @@ TASK(youmu_mirror_bomb_postprocess, { YoumuAController *ctrl; }) {
YoumuAMyon *myon = &ctrl->myon;
CoEvent *pp_event = &stage_get_draw_events()->postprocess_before_overlay;
ShaderProgram *shader = r_shader_get("youmua_bomb");
ShaderProgram *shader = res_shader("youmua_bomb");
Uniform *u_tbomb = r_shader_uniform(shader, "tbomb");
Uniform *u_myon = r_shader_uniform(shader, "myon");
Uniform *u_fill_overlay = r_shader_uniform(shader, "fill_overlay");
@ -558,7 +558,7 @@ TASK(youmu_mirror_bomb_handler, { YoumuAController *ctrl; }) {
TASK(youmu_mirror_shot_forward, { YoumuAController *ctrl; }) {
YoumuAController *ctrl = ARGS.ctrl;
Player *plr = ctrl->plr;
ShaderProgram *shader = r_shader_get("sprite_particle");
ShaderProgram *shader = res_shader("sprite_particle");
for(int t = 0;;) {
WAIT_EVENT_OR_DIE(&plr->events.shoot);
@ -596,10 +596,10 @@ TASK(youmu_mirror_shot_forward, { YoumuAController *ctrl; }) {
TASK(youmu_mirror_controller, { BoxedPlayer plr; }) {
YoumuAController *ctrl = TASK_MALLOC(sizeof(*ctrl));
ctrl->plr = TASK_BIND(ARGS.plr);
ctrl->sprites.arc = get_sprite("part/arc");
ctrl->sprites.stain = get_sprite("part/stain");
ctrl->sprites.petal = get_sprite("part/petal");
ctrl->sprites.blast_huge_halo = get_sprite("part/blast_huge_halo");
ctrl->sprites.arc = res_sprite("part/arc");
ctrl->sprites.stain = res_sprite("part/stain");
ctrl->sprites.petal = res_sprite("part/petal");
ctrl->sprites.blast_huge_halo = res_sprite("part/blast_huge_halo");
youmu_common_init_bomb_background(&ctrl->bomb_bg);

View file

@ -561,13 +561,13 @@ TASK(youmu_haunting_bomb_handler, { YoumuBController *ctrl; }) {
TASK(youmu_haunting_controller, { BoxedPlayer plr; }) {
YoumuBController *ctrl = TASK_MALLOC(sizeof(*ctrl));
ctrl->plr = TASK_BIND(ARGS.plr);
ctrl->sprites.blast_huge_halo = get_sprite("part/blast_huge_halo");
ctrl->sprites.blast_huge_rays = get_sprite("part/blast_huge_rays");
ctrl->sprites.petal = get_sprite("part/petal");
ctrl->sprites.smoothdot = get_sprite("part/smoothdot");
ctrl->sprites.stardust = get_sprite("part/stardust");
ctrl->sprites.youmu_slice = get_sprite("part/youmu_slice");
ctrl->shot_shader = r_shader_get("sprite_particle");
ctrl->sprites.blast_huge_halo = res_sprite("part/blast_huge_halo");
ctrl->sprites.blast_huge_rays = res_sprite("part/blast_huge_rays");
ctrl->sprites.petal = res_sprite("part/petal");
ctrl->sprites.smoothdot = res_sprite("part/smoothdot");
ctrl->sprites.stardust = res_sprite("part/stardust");
ctrl->sprites.youmu_slice = res_sprite("part/youmu_slice");
ctrl->shot_shader = res_shader("sprite_particle");
youmu_common_init_bomb_background(&ctrl->bomb_bg);

View file

@ -29,7 +29,7 @@ int portrait_get_base_sprite_name(const char *charname, const char *variant, siz
Sprite *portrait_get_base_sprite(const char *charname, const char *variant) {
char buf[BUFFER_SIZE];
portrait_get_base_sprite_name(charname, variant, sizeof(buf), buf);
return get_sprite(buf);
return res_sprite(buf);
}
void portrait_preload_base_sprite(const char *charname, const char *variant, ResourceFlags rflags) {
@ -45,7 +45,7 @@ int portrait_get_face_sprite_name(const char *charname, const char *face, size_t
Sprite *portrait_get_face_sprite(const char *charname, const char *face) {
char buf[BUFFER_SIZE];
portrait_get_face_sprite_name(charname, face, sizeof(buf), buf);
return get_sprite(buf);
return res_sprite(buf);
}
void portrait_preload_face_sprite(const char *charname, const char *face, ResourceFlags rflags) {
@ -91,7 +91,7 @@ void portrait_render(Sprite *s_base, Sprite *s_face, Sprite *s_out) {
sp.pos.x = spr_w * 0.5f - sprite_padded_offset_x(s_base);
sp.pos.y = spr_h * 0.5f - sprite_padded_offset_y(s_base);
sp.color = RGBA(1, 1, 1, 1);
sp.shader_ptr = r_shader_get("sprite_default"),
sp.shader_ptr = res_shader("sprite_default"),
r_draw_sprite(&sp);
sp.blend = BLEND_PREMUL_ALPHA;
sp.sprite_ptr = s_face;

View file

@ -53,7 +53,7 @@ static void process_projectile_args(ProjArgs *args, ProjArgs *defaults) {
if(!args->shader_ptr) {
if(args->shader) {
args->shader_ptr = r_shader_get(args->shader);
args->shader_ptr = res_shader(args->shader);
} else {
args->shader_ptr = defaults->shader_ptr;
}
@ -859,7 +859,7 @@ Projectile *spawn_projectile_clear_effect(Projectile *proj) {
v = proj->pos - proj->prevpos;
}
Animation *ani = get_ani("part/bullet_clear");
Animation *ani = res_anim("part/bullet_clear");
AniSequence *seq = get_ani_sequence(ani, "main");
Sprite *sprite_ref = animation_get_frame(ani, seq, 0);
@ -1226,11 +1226,11 @@ void projectiles_preload(void) {
ht_create(&shader_sublayer_map);
for(uint i = 0; i < num_shaders; ++i) {
ht_set(&shader_sublayer_map, r_shader_get(shaders[i