mirror of
https://github.com/nunuhara/xsystem4.git
synced 2026-09-22 23:18:01 +03:00
DrawDungeon2: Use special event marker for boss floors
This commit is contained in:
@@ -26,7 +26,7 @@ struct dtx;
|
||||
struct polyobj;
|
||||
struct dungeon_renderer;
|
||||
|
||||
struct dungeon_renderer *dungeon_renderer_create(enum draw_dungeon_version version, struct dtx *dtx, GLuint *event_textures, int nr_event_textures, struct polyobj *po);
|
||||
struct dungeon_renderer *dungeon_renderer_create(enum draw_dungeon_version version, int num, struct dtx *dtx, GLuint *event_textures, int nr_event_textures, struct polyobj *po);
|
||||
void dungeon_renderer_free(struct dungeon_renderer *r);
|
||||
void dungeon_renderer_render(struct dungeon_renderer *r, struct dgn_cell **cells, int nr_cells, mat4 view_transform, mat4 proj_transform);
|
||||
void dungeon_renderer_enable_event_markers(struct dungeon_renderer *r, bool enable);
|
||||
|
||||
@@ -231,7 +231,7 @@ bool dungeon_load(struct dungeon_context *ctx, int num)
|
||||
if (!event_textures)
|
||||
return false;
|
||||
|
||||
ctx->renderer = dungeon_renderer_create(ctx->version, ctx->dtx, event_textures, nr_event_textures, polyobj);
|
||||
ctx->renderer = dungeon_renderer_create(ctx->version, num, ctx->dtx, event_textures, nr_event_textures, polyobj);
|
||||
|
||||
if (polyobj)
|
||||
polyobj_free(polyobj);
|
||||
|
||||
+37
-2
@@ -44,6 +44,7 @@ enum floor_marker {
|
||||
R6_RED_OCTAGRAM = 63,
|
||||
// Dungeons & Dolls
|
||||
DD_MAGIC_CIRCLE = 40,
|
||||
DD_RED_OCTAGRAM = 41,
|
||||
DD_WHITE_OCTAGRAM = 42,
|
||||
// GALZOO Island
|
||||
GZ_MAGIC_CIRCLE = 0,
|
||||
@@ -67,6 +68,12 @@ static const struct marker_info dolls_marker_info[] = {
|
||||
{0},
|
||||
};
|
||||
|
||||
static const struct marker_info dolls_boss_marker_info[] = {
|
||||
{11, 43, 3, DD_WHITE_OCTAGRAM}, // treasure chest
|
||||
{17, 20, 20, DD_RED_OCTAGRAM}, // boss
|
||||
{0},
|
||||
};
|
||||
|
||||
static const struct marker_info galzoo_marker_info[] = {
|
||||
{11, 1, 0, GZ_MAGIC_CIRCLE}, // item
|
||||
{12, 2, 0, GZ_MAGIC_CIRCLE}, // enemy
|
||||
@@ -350,7 +357,29 @@ static void init_polyobjs(struct dungeon_renderer *r, struct polyobj *po)
|
||||
}
|
||||
}
|
||||
|
||||
struct dungeon_renderer *dungeon_renderer_create(enum draw_dungeon_version version, struct dtx *dtx, GLuint *event_textures, int nr_event_textures, struct polyobj *po)
|
||||
static bool is_dolls_boss_floor(int num)
|
||||
{
|
||||
switch (num) {
|
||||
case 20:
|
||||
case 40:
|
||||
case 60:
|
||||
case 80:
|
||||
case 100:
|
||||
case 120:
|
||||
case 140:
|
||||
case 150:
|
||||
case 160:
|
||||
case 180:
|
||||
case 200:
|
||||
case 300:
|
||||
case 500:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
struct dungeon_renderer *dungeon_renderer_create(enum draw_dungeon_version version, int num, struct dtx *dtx, GLuint *event_textures, int nr_event_textures, struct polyobj *po)
|
||||
{
|
||||
struct dungeon_renderer *r = xcalloc(1, sizeof(struct dungeon_renderer));
|
||||
|
||||
@@ -382,9 +411,15 @@ struct dungeon_renderer *dungeon_renderer_create(enum draw_dungeon_version versi
|
||||
|
||||
r->event_textures = event_textures;
|
||||
r->nr_event_textures = nr_event_textures;
|
||||
r->marker_table = marker_tables[version];
|
||||
r->draw_event_markers = true;
|
||||
|
||||
if (version == DRAW_DUNGEON_2 && is_dolls_boss_floor(num)) {
|
||||
// Use special marker table for Dungeons & Dolls boss floor
|
||||
r->marker_table = dolls_boss_marker_info;
|
||||
} else {
|
||||
r->marker_table = marker_tables[version];
|
||||
}
|
||||
|
||||
if (po)
|
||||
init_polyobjs(r, po);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user