navmesh and background are included in level predef data
parent
dd3168f5dd
commit
5a6b51be77
|
@ -134,6 +134,16 @@ for dest in range(len(polys)):
|
||||||
out.write("};\n")
|
out.write("};\n")
|
||||||
out.write(f"extern const struct navmesh navmesh_{basename} = {{{len(polys)}, {basename}_triangles, {basename}_pathfind}};\n")
|
out.write(f"extern const struct navmesh navmesh_{basename} = {{{len(polys)}, {basename}_triangles, {basename}_pathfind}};\n")
|
||||||
|
|
||||||
|
background = tree.find("imagelayer/image")
|
||||||
|
bgidentifier, bgwidth, bgheight = "(const unsigned char*)0", 0, 0
|
||||||
|
if background is not None:
|
||||||
|
bgidentifier = background.attrib["source"].split("/")[-1]
|
||||||
|
if "." in bgidentifier: bgidentifier = bgidentifier[:bgidentifier.rindex(".")] # remove .png
|
||||||
|
bgidentifier = "_binary_sprite_"+bgidentifier+"_raw_start"
|
||||||
|
out.write(f"extern const unsigned char {bgidentifier}[];\n")
|
||||||
|
bgwidth = int(background.attrib["width"])
|
||||||
|
bgheight = int(background.attrib["height"])
|
||||||
|
|
||||||
out.write("extern const struct level_predef_data predef_"+basename+" = {\n")
|
out.write("extern const struct level_predef_data predef_"+basename+" = {\n")
|
||||||
out.write("\t(const struct level_clickregion[]){\n") # clickregions start
|
out.write("\t(const struct level_clickregion[]){\n") # clickregions start
|
||||||
for object in tree.findall("objectgroup[@name='clickable']/object"):
|
for object in tree.findall("objectgroup[@name='clickable']/object"):
|
||||||
|
@ -158,4 +168,6 @@ for object in tree.findall("objectgroup[@name='points']/object"):
|
||||||
out.write(f"\t\t{{{x},{y},{object.attrib['name']}}},\n")
|
out.write(f"\t\t{{{x},{y},{object.attrib['name']}}},\n")
|
||||||
out.write("\t\t{0}\n")
|
out.write("\t\t{0}\n")
|
||||||
out.write("\t},\n") # points end
|
out.write("\t},\n") # points end
|
||||||
|
out.write("\t&navmesh_"+basename+",\n")
|
||||||
|
out.write(f"\t{bgidentifier}, {bgwidth}, {bgheight},\n")
|
||||||
out.write("};\n")
|
out.write("};\n")
|
||||||
|
|
|
@ -41,6 +41,9 @@ struct level_predef_point {
|
||||||
struct level_predef_data {
|
struct level_predef_data {
|
||||||
const struct level_clickregion *clickregions; // terminated by null entry
|
const struct level_clickregion *clickregions; // terminated by null entry
|
||||||
const struct level_predef_point *points; // terminated by x=0 y=0
|
const struct level_predef_point *points; // terminated by x=0 y=0
|
||||||
|
const struct navmesh *navmesh;
|
||||||
|
const unsigned char *background;
|
||||||
|
int bgwidth, bgheight;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
22
game.cpp
22
game.cpp
|
@ -9,19 +9,11 @@
|
||||||
#define BGWIDTH 1066
|
#define BGWIDTH 1066
|
||||||
#define BGHEIGHT 800
|
#define BGHEIGHT 800
|
||||||
|
|
||||||
extern const char _binary_sprite_lobby_raw_start[];
|
|
||||||
extern const char _binary_sprite_managers_office_raw_start[];
|
|
||||||
extern const char _binary_sprite_managers_office_safe_raw_start[];
|
extern const char _binary_sprite_managers_office_safe_raw_start[];
|
||||||
extern const char _binary_sprite_basement_raw_start[];
|
|
||||||
extern const char _binary_sprite_cloakroom_raw_start[];
|
|
||||||
extern const char _binary_sprite_hallway1_raw_start[];
|
|
||||||
extern const char _binary_sprite_hallway2_raw_start[];
|
|
||||||
extern const char _binary_sprite_hallway3_raw_start[];
|
|
||||||
extern const char _binary_sprite_item_pager_raw_start[];
|
extern const char _binary_sprite_item_pager_raw_start[];
|
||||||
|
|
||||||
extern const char _binary_sprite_stickman_raw_start[];
|
extern const char _binary_sprite_stickman_raw_start[];
|
||||||
|
|
||||||
extern const struct navmesh navmesh_lobby, navmesh_managers_office, navmesh_basement, navmesh_cloakroom, navmesh_hallway1, navmesh_hallway2, navmesh_hallway3;
|
|
||||||
extern const struct level_predef_data predef_basement, predef_lobby, predef_managers_office, predef_cloakroom, predef_hallway1, predef_hallway2, predef_hallway3;
|
extern const struct level_predef_data predef_basement, predef_lobby, predef_managers_office, predef_cloakroom, predef_hallway1, predef_hallway2, predef_hallway3;
|
||||||
|
|
||||||
static void create_player(scene *me, int x, int y) {
|
static void create_player(scene *me, int x, int y) {
|
||||||
|
@ -56,18 +48,14 @@ static void create_player_startpt(scene *me, int fromscene) {
|
||||||
void scene_setup(scene *me, int scene, int fromscene) {
|
void scene_setup(scene *me, int scene, int fromscene) {
|
||||||
switch(scene) {
|
switch(scene) {
|
||||||
case SCENE_LOBBY:
|
case SCENE_LOBBY:
|
||||||
scene_add_object(me, OBJID_BACKGROUND, 0, 0, BGWIDTH, BGHEIGHT, _binary_sprite_lobby_raw_start);
|
|
||||||
scene_load_predef(me, &predef_lobby);
|
scene_load_predef(me, &predef_lobby);
|
||||||
me->navmesh = &navmesh_lobby;
|
|
||||||
create_player_startpt(me, fromscene);
|
create_player_startpt(me, fromscene);
|
||||||
if(fromscene == -1) {
|
if(fromscene == -1) {
|
||||||
push_scene_textbox("Welcome\n\nto\n\ntestgame");
|
push_scene_textbox("Welcome\n\nto\n\ntestgame");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case SCENE_MANAGERS_OFFICE:
|
case SCENE_MANAGERS_OFFICE:
|
||||||
scene_add_object(me, OBJID_BACKGROUND, 0, 0, BGWIDTH, BGHEIGHT, _binary_sprite_managers_office_raw_start);
|
|
||||||
scene_load_predef(me, &predef_managers_office);
|
scene_load_predef(me, &predef_managers_office);
|
||||||
me->navmesh = &navmesh_managers_office;
|
|
||||||
create_player_startpt(me, fromscene);
|
create_player_startpt(me, fromscene);
|
||||||
break;
|
break;
|
||||||
case SCENE_MANAGERS_OFFICE_SAFE:
|
case SCENE_MANAGERS_OFFICE_SAFE:
|
||||||
|
@ -78,36 +66,26 @@ void scene_setup(scene *me, int scene, int fromscene) {
|
||||||
me->use_standard_inventory = false;
|
me->use_standard_inventory = false;
|
||||||
break;
|
break;
|
||||||
case SCENE_BASEMENT:
|
case SCENE_BASEMENT:
|
||||||
scene_add_object(me, OBJID_BACKGROUND, 0, 0, BGWIDTH, BGHEIGHT, _binary_sprite_basement_raw_start);
|
|
||||||
scene_load_predef(me, &predef_basement);
|
scene_load_predef(me, &predef_basement);
|
||||||
if(!savefile.got_pager_from_basement) {
|
if(!savefile.got_pager_from_basement) {
|
||||||
scene_add_object(me, OBJID_PAGER, 556, 520, 87, 87, _binary_sprite_item_pager_raw_start);
|
scene_add_object(me, OBJID_PAGER, 556, 520, 87, 87, _binary_sprite_item_pager_raw_start);
|
||||||
}
|
}
|
||||||
me->navmesh = &navmesh_basement;
|
|
||||||
create_player_startpt(me, fromscene);
|
create_player_startpt(me, fromscene);
|
||||||
break;
|
break;
|
||||||
case SCENE_CLOAKROOM:
|
case SCENE_CLOAKROOM:
|
||||||
scene_add_object(me, OBJID_BACKGROUND, 0, 0, BGWIDTH, BGHEIGHT, _binary_sprite_cloakroom_raw_start);
|
|
||||||
scene_load_predef(me, &predef_cloakroom);
|
scene_load_predef(me, &predef_cloakroom);
|
||||||
me->navmesh = &navmesh_cloakroom;
|
|
||||||
create_player_startpt(me, fromscene);
|
create_player_startpt(me, fromscene);
|
||||||
break;
|
break;
|
||||||
case SCENE_HALLWAY1:
|
case SCENE_HALLWAY1:
|
||||||
scene_add_object(me, OBJID_BACKGROUND, 0, 0, BGWIDTH, BGHEIGHT, _binary_sprite_hallway1_raw_start);
|
|
||||||
scene_load_predef(me, &predef_hallway1);
|
scene_load_predef(me, &predef_hallway1);
|
||||||
me->navmesh = &navmesh_hallway1;
|
|
||||||
create_player_startpt(me, fromscene);
|
create_player_startpt(me, fromscene);
|
||||||
break;
|
break;
|
||||||
case SCENE_HALLWAY2:
|
case SCENE_HALLWAY2:
|
||||||
scene_add_object(me, OBJID_BACKGROUND, 0, 0, BGWIDTH, BGHEIGHT, _binary_sprite_hallway2_raw_start);
|
|
||||||
scene_load_predef(me, &predef_hallway2);
|
scene_load_predef(me, &predef_hallway2);
|
||||||
me->navmesh = &navmesh_hallway2;
|
|
||||||
create_player_startpt(me, fromscene);
|
create_player_startpt(me, fromscene);
|
||||||
break;
|
break;
|
||||||
case SCENE_HALLWAY3:
|
case SCENE_HALLWAY3:
|
||||||
scene_add_object(me, OBJID_BACKGROUND, 0, 0, BGWIDTH, BGHEIGHT, _binary_sprite_hallway3_raw_start);
|
|
||||||
scene_load_predef(me, &predef_hallway3);
|
scene_load_predef(me, &predef_hallway3);
|
||||||
me->navmesh = &navmesh_hallway3;
|
|
||||||
create_player_startpt(me, fromscene);
|
create_player_startpt(me, fromscene);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -230,6 +230,10 @@ struct object *scene_add_object(struct scene *sc, int id, int x, int y, int widt
|
||||||
|
|
||||||
void scene_load_predef(struct scene *sc, const struct level_predef_data *predef) {
|
void scene_load_predef(struct scene *sc, const struct level_predef_data *predef) {
|
||||||
sc->predef = predef;
|
sc->predef = predef;
|
||||||
|
sc->navmesh = predef->navmesh;
|
||||||
|
if(predef->background) {
|
||||||
|
scene_add_object(sc, OBJID_BACKGROUND, 0, 0, predef->bgwidth, predef->bgheight, (const char*)predef->background);
|
||||||
|
}
|
||||||
for(const struct level_clickregion *cr = predef->clickregions; cr->num_edges; cr++) {
|
for(const struct level_clickregion *cr = predef->clickregions; cr->num_edges; cr++) {
|
||||||
struct object *obj = scene_add_object(sc, cr->id, cr->x, cr->y, cr->width, cr->height, nullptr);
|
struct object *obj = scene_add_object(sc, cr->id, cr->x, cr->y, cr->width, cr->height, nullptr);
|
||||||
obj->clickregion = cr;
|
obj->clickregion = cr;
|
||||||
|
|
Loading…
Reference in New Issue