Player start positions are defined in the navmesh file, next to the navmesh and clickregions.
parent
80a307de5f
commit
5990166a92
|
@ -151,4 +151,11 @@ for object in tree.findall("objectgroup[@name='clickable']/object"):
|
||||||
out.write("\t\t},\n");
|
out.write("\t\t},\n");
|
||||||
out.write("\t\t{0}\n")
|
out.write("\t\t{0}\n")
|
||||||
out.write("\t},\n") # clickregions end
|
out.write("\t},\n") # clickregions end
|
||||||
|
out.write("\t(const struct level_predef_point[]){\n") # points start
|
||||||
|
for object in tree.findall("objectgroup[@name='points']/object"):
|
||||||
|
x,y=int(object.attrib["x"]),int(object.attrib["y"])
|
||||||
|
# Note: name can contain commas to populate multiple ID fields, or arithmetic expressions
|
||||||
|
out.write(f"\t\t{{{x},{y},{object.attrib['name']}}},\n")
|
||||||
|
out.write("\t\t{0}\n")
|
||||||
|
out.write("\t},\n") # points end
|
||||||
out.write("};\n")
|
out.write("};\n")
|
||||||
|
|
|
@ -34,8 +34,13 @@ struct level_clickregion {
|
||||||
int num_edges;
|
int num_edges;
|
||||||
const struct level_clickregion_edge *edges;
|
const struct level_clickregion_edge *edges;
|
||||||
};
|
};
|
||||||
|
struct level_predef_point {
|
||||||
|
int x, y;
|
||||||
|
int id;
|
||||||
|
};
|
||||||
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
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
15
engine.h
15
engine.h
|
@ -38,7 +38,8 @@ extern struct scene {
|
||||||
scene_render_fn render_fn; // default standard_scene_render
|
scene_render_fn render_fn; // default standard_scene_render
|
||||||
scene_animtimer_fn animtimer_fn; // default null
|
scene_animtimer_fn animtimer_fn; // default null
|
||||||
scene_handle_tap_fn handle_tap_fn; // default standard_handle_tap
|
scene_handle_tap_fn handle_tap_fn; // default standard_handle_tap
|
||||||
struct navmesh *navmesh; // defaults to non-null pointer to empty navmesh
|
const struct navmesh *navmesh; // defaults to non-null pointer to empty navmesh
|
||||||
|
const struct level_predef_data *predef;
|
||||||
|
|
||||||
bool use_standard_inventory; // defaults to true
|
bool use_standard_inventory; // defaults to true
|
||||||
bool dim_background; // defaults to false, because most scenes overwrite the whole screen
|
bool dim_background; // defaults to false, because most scenes overwrite the whole screen
|
||||||
|
@ -97,18 +98,6 @@ extern bool need_rerender;
|
||||||
void fillrect(int x1, int y1, int width, int height, uint32_t pixel);
|
void fillrect(int x1, int y1, int width, int height, uint32_t pixel);
|
||||||
void blit(int x, int y, int width, int height, uint32_t *pixels);
|
void blit(int x, int y, int width, int height, uint32_t *pixels);
|
||||||
|
|
||||||
|
|
||||||
// game-specific constants
|
|
||||||
#define SCENE_LOBBY 1
|
|
||||||
#define SCENE_MANAGERS_OFFICE 2
|
|
||||||
#define SCENE_MANAGERS_OFFICE_SAFE 3
|
|
||||||
#define SCENE_BASEMENT 4
|
|
||||||
#define SCENE_TEXTBOX 5
|
|
||||||
#define SCENE_HALLWAY1 6
|
|
||||||
#define SCENE_HALLWAY2 7
|
|
||||||
#define SCENE_HALLWAY3 8
|
|
||||||
#define SCENE_CLOAKROOM 9
|
|
||||||
|
|
||||||
// game.cpp
|
// game.cpp
|
||||||
void scene_setup(scene *s, int scene, int fromscene);
|
void scene_setup(scene *s, int scene, int fromscene);
|
||||||
void onclick(int curscene, struct object *obj);
|
void onclick(int curscene, struct object *obj);
|
||||||
|
|
61
game.cpp
61
game.cpp
|
@ -3,7 +3,7 @@
|
||||||
#include "engine.h"
|
#include "engine.h"
|
||||||
#include "objids.h"
|
#include "objids.h"
|
||||||
#include "inventory.h"
|
#include "inventory.h"
|
||||||
|
#include "compiled_structures.h"
|
||||||
|
|
||||||
|
|
||||||
#define BGWIDTH 1066
|
#define BGWIDTH 1066
|
||||||
|
@ -21,25 +21,45 @@ 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 struct navmesh navmesh_lobby, navmesh_managers_office, navmesh_basement, navmesh_cloakroom, navmesh_hallway1, navmesh_hallway2, navmesh_hallway3;
|
extern const struct navmesh navmesh_lobby, navmesh_managers_office, navmesh_basement, navmesh_cloakroom, navmesh_hallway1, navmesh_hallway2, navmesh_hallway3;
|
||||||
extern 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) {
|
||||||
const int WIDTH=51, HEIGHT=111;
|
const int WIDTH=51, HEIGHT=111;
|
||||||
scene_add_object(me, OBJID_PLAYER, x-WIDTH/2, y-HEIGHT, WIDTH, HEIGHT, _binary_sprite_stickman_raw_start);
|
scene_add_object(me, OBJID_PLAYER, x-WIDTH/2, y-HEIGHT, WIDTH, HEIGHT, _binary_sprite_stickman_raw_start);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const struct level_predef_point *find_level_predef_point(const struct level_predef_data *predef, int id) {
|
||||||
|
for(const struct level_predef_point *pt = predef->points; pt->x || pt->y; pt++) {
|
||||||
|
if(pt->id == id)
|
||||||
|
return pt;
|
||||||
|
}
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void create_player_startpt(scene *me, int fromscene) {
|
||||||
|
int x, y;
|
||||||
|
assert(me->predef);
|
||||||
|
const struct level_predef_point *pt = (fromscene < 0 ? nullptr : find_level_predef_point(me->predef, OBJID_PLAYER_START+fromscene));
|
||||||
|
if(!pt)
|
||||||
|
pt = find_level_predef_point(me->predef, OBJID_PLAYER_START_DEFAULT);
|
||||||
|
if(pt) {
|
||||||
|
x = pt->x;
|
||||||
|
y = pt->y;
|
||||||
|
} else {
|
||||||
|
x = BGWIDTH/2;
|
||||||
|
y = BGHEIGHT/2;
|
||||||
|
}
|
||||||
|
create_player(me, x, y);
|
||||||
|
}
|
||||||
|
|
||||||
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_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);
|
||||||
switch(fromscene) {
|
|
||||||
case SCENE_MANAGERS_OFFICE: create_player(me, 256, 445); break;
|
|
||||||
case SCENE_CLOAKROOM: create_player(me, 777, 443); break;
|
|
||||||
default: create_player(me, 424, 675); break;
|
|
||||||
}
|
|
||||||
me->navmesh = &navmesh_lobby;
|
me->navmesh = &navmesh_lobby;
|
||||||
|
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");
|
||||||
}
|
}
|
||||||
|
@ -47,13 +67,8 @@ void scene_setup(scene *me, int scene, int fromscene) {
|
||||||
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_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);
|
||||||
switch(fromscene) {
|
|
||||||
case SCENE_LOBBY: create_player(me, 804, 708); break;
|
|
||||||
case SCENE_BASEMENT: create_player(me, 408, 559); break;
|
|
||||||
case SCENE_HALLWAY1: create_player(me, 664, 419); break;
|
|
||||||
default: create_player(me, 424, 675); break;
|
|
||||||
}
|
|
||||||
me->navmesh = &navmesh_managers_office;
|
me->navmesh = &navmesh_managers_office;
|
||||||
|
create_player_startpt(me, fromscene);
|
||||||
break;
|
break;
|
||||||
case SCENE_MANAGERS_OFFICE_SAFE:
|
case SCENE_MANAGERS_OFFICE_SAFE:
|
||||||
scene_add_object(me, OBJID_BACKGROUND, 248, 0, 787, BGHEIGHT, _binary_sprite_managers_office_safe_raw_start);
|
scene_add_object(me, OBJID_BACKGROUND, 248, 0, 787, BGHEIGHT, _binary_sprite_managers_office_safe_raw_start);
|
||||||
|
@ -68,40 +83,32 @@ void scene_setup(scene *me, int scene, int fromscene) {
|
||||||
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);
|
||||||
}
|
}
|
||||||
create_player(me, 435, 404);
|
|
||||||
me->navmesh = &navmesh_basement;
|
me->navmesh = &navmesh_basement;
|
||||||
|
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_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;
|
me->navmesh = &navmesh_cloakroom;
|
||||||
create_player(me, 361, 714);
|
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_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;
|
me->navmesh = &navmesh_hallway1;
|
||||||
switch(fromscene) {
|
create_player_startpt(me, fromscene);
|
||||||
case SCENE_MANAGERS_OFFICE: default: create_player(me, 531, 714); break;
|
|
||||||
case SCENE_HALLWAY2: create_player(me, 553, 75); break;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case SCENE_HALLWAY2:
|
case SCENE_HALLWAY2:
|
||||||
scene_add_object(me, OBJID_BACKGROUND, 0, 0, BGWIDTH, BGHEIGHT, _binary_sprite_hallway2_raw_start);
|
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;
|
me->navmesh = &navmesh_hallway2;
|
||||||
switch(fromscene) {
|
create_player_startpt(me, fromscene);
|
||||||
case SCENE_HALLWAY1: default: create_player(me, 531, 714); break;
|
|
||||||
case SCENE_HALLWAY3: create_player(me, 553, 75); break;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case SCENE_HALLWAY3:
|
case SCENE_HALLWAY3:
|
||||||
scene_add_object(me, OBJID_BACKGROUND, 0, 0, BGWIDTH, BGHEIGHT, _binary_sprite_hallway3_raw_start);
|
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;
|
me->navmesh = &navmesh_hallway3;
|
||||||
switch(fromscene) {
|
create_player_startpt(me, fromscene);
|
||||||
case SCENE_HALLWAY2: default: create_player(me, 531, 714); break;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<map version="1.9" tiledversion="1.9.2" orientation="orthogonal" renderorder="right-down" width="40" height="25" tilewidth="32" tileheight="32" infinite="0" nextlayerid="5" nextobjectid="8">
|
<map version="1.9" tiledversion="1.9.2" orientation="orthogonal" renderorder="right-down" width="40" height="25" tilewidth="32" tileheight="32" infinite="0" nextlayerid="6" nextobjectid="9">
|
||||||
<imagelayer id="2" name="Image Layer 1">
|
<imagelayer id="2" name="Image Layer 1">
|
||||||
<image source="../build/default/basement.png" width="1280" height="800"/>
|
<image source="../build/default/basement.png" width="1280" height="800"/>
|
||||||
</imagelayer>
|
</imagelayer>
|
||||||
|
@ -18,4 +18,9 @@
|
||||||
<object id="6" name="OBJID_POPCORN_BARREL" x="733" y="293" width="83" height="148"/>
|
<object id="6" name="OBJID_POPCORN_BARREL" x="733" y="293" width="83" height="148"/>
|
||||||
<object id="7" name="OBJID_POPCORN_BARREL" x="835" y="295" width="81" height="146"/>
|
<object id="7" name="OBJID_POPCORN_BARREL" x="835" y="295" width="81" height="146"/>
|
||||||
</objectgroup>
|
</objectgroup>
|
||||||
|
<objectgroup id="5" name="points">
|
||||||
|
<object id="8" name="OBJID_PLAYER_START_DEFAULT" x="435" y="416">
|
||||||
|
<point/>
|
||||||
|
</object>
|
||||||
|
</objectgroup>
|
||||||
</map>
|
</map>
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<map version="1.9" tiledversion="1.9.2" orientation="orthogonal" renderorder="right-down" width="34" height="25" tilewidth="32" tileheight="32" infinite="0" nextlayerid="5" nextobjectid="3">
|
<map version="1.9" tiledversion="1.9.2" orientation="orthogonal" renderorder="right-down" width="34" height="25" tilewidth="32" tileheight="32" infinite="0" nextlayerid="6" nextobjectid="4">
|
||||||
<imagelayer id="2" name="Image Layer 1">
|
<imagelayer id="2" name="Image Layer 1">
|
||||||
<image source="../build/default/cloakroom.png" width="1066" height="800"/>
|
<image source="../build/default/cloakroom.png" width="1066" height="800"/>
|
||||||
</imagelayer>
|
</imagelayer>
|
||||||
|
@ -11,4 +11,9 @@
|
||||||
<objectgroup id="3" name="clickable">
|
<objectgroup id="3" name="clickable">
|
||||||
<object id="2" name="OBJID_LEAVE_ROOM" x="283" y="437" width="157" height="276"/>
|
<object id="2" name="OBJID_LEAVE_ROOM" x="283" y="437" width="157" height="276"/>
|
||||||
</objectgroup>
|
</objectgroup>
|
||||||
|
<objectgroup id="5" name="points">
|
||||||
|
<object id="3" name="OBJID_PLAYER_START_DEFAULT" x="355" y="700">
|
||||||
|
<point/>
|
||||||
|
</object>
|
||||||
|
</objectgroup>
|
||||||
</map>
|
</map>
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<map version="1.9" tiledversion="1.9.2" orientation="orthogonal" renderorder="right-down" width="34" height="25" tilewidth="32" tileheight="32" infinite="0" nextlayerid="5" nextobjectid="12">
|
<map version="1.9" tiledversion="1.9.2" orientation="orthogonal" renderorder="right-down" width="34" height="25" tilewidth="32" tileheight="32" infinite="0" nextlayerid="6" nextobjectid="14">
|
||||||
<imagelayer id="2" name="Image Layer 1">
|
<imagelayer id="2" name="Image Layer 1">
|
||||||
<image source="../build/default/hallway1.png" width="1066" height="800"/>
|
<image source="../build/default/hallway1.png" width="1066" height="800"/>
|
||||||
</imagelayer>
|
</imagelayer>
|
||||||
|
@ -36,4 +36,12 @@
|
||||||
<object id="1" name="OBJID_LEAVE_ROOM" x="466" y="439" width="155" height="277"/>
|
<object id="1" name="OBJID_LEAVE_ROOM" x="466" y="439" width="155" height="277"/>
|
||||||
<object id="11" name="OBJID_NEXT_ROOM" x="511" y="1" width="80" height="74"/>
|
<object id="11" name="OBJID_NEXT_ROOM" x="511" y="1" width="80" height="74"/>
|
||||||
</objectgroup>
|
</objectgroup>
|
||||||
|
<objectgroup id="5" name="points">
|
||||||
|
<object id="12" name="OBJID_PLAYER_START_DEFAULT" x="541" y="713">
|
||||||
|
<point/>
|
||||||
|
</object>
|
||||||
|
<object id="13" name="OBJID_PLAYER_START+SCENE_HALLWAY2" x="552" y="80">
|
||||||
|
<point/>
|
||||||
|
</object>
|
||||||
|
</objectgroup>
|
||||||
</map>
|
</map>
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<map version="1.9" tiledversion="1.9.2" orientation="orthogonal" renderorder="right-down" width="34" height="25" tilewidth="32" tileheight="32" infinite="0" nextlayerid="5" nextobjectid="13">
|
<map version="1.9" tiledversion="1.9.2" orientation="orthogonal" renderorder="right-down" width="34" height="25" tilewidth="32" tileheight="32" infinite="0" nextlayerid="6" nextobjectid="15">
|
||||||
<imagelayer id="2" name="Image Layer 1">
|
<imagelayer id="2" name="Image Layer 1">
|
||||||
<image source="../build/default/hallway2.png" width="1066" height="800"/>
|
<image source="../build/default/hallway2.png" width="1066" height="800"/>
|
||||||
</imagelayer>
|
</imagelayer>
|
||||||
|
@ -39,4 +39,12 @@
|
||||||
<object id="1" name="OBJID_LEAVE_ROOM" x="485" y="654" width="43" height="54"/>
|
<object id="1" name="OBJID_LEAVE_ROOM" x="485" y="654" width="43" height="54"/>
|
||||||
<object id="2" name="OBJID_NEXT_ROOM" x="510" y="1" width="85" height="74"/>
|
<object id="2" name="OBJID_NEXT_ROOM" x="510" y="1" width="85" height="74"/>
|
||||||
</objectgroup>
|
</objectgroup>
|
||||||
|
<objectgroup id="5" name="points">
|
||||||
|
<object id="13" name="OBJID_PLAYER_START_DEFAULT" x="509" y="638">
|
||||||
|
<point/>
|
||||||
|
</object>
|
||||||
|
<object id="14" name="OBJID_PLAYER_START+SCENE_HALLWAY3" x="552" y="83">
|
||||||
|
<point/>
|
||||||
|
</object>
|
||||||
|
</objectgroup>
|
||||||
</map>
|
</map>
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<map version="1.9" tiledversion="1.9.2" orientation="orthogonal" renderorder="right-down" width="34" height="25" tilewidth="32" tileheight="32" infinite="0" nextlayerid="5" nextobjectid="14">
|
<map version="1.9" tiledversion="1.9.2" orientation="orthogonal" renderorder="right-down" width="34" height="25" tilewidth="32" tileheight="32" infinite="0" nextlayerid="7" nextobjectid="15">
|
||||||
<imagelayer id="2" name="Image Layer 1">
|
<imagelayer id="2" name="Image Layer 1">
|
||||||
<image source="../build/default/hallway3.png" width="1066" height="800"/>
|
<image source="../build/default/hallway3.png" width="1066" height="800"/>
|
||||||
</imagelayer>
|
</imagelayer>
|
||||||
|
@ -41,4 +41,9 @@
|
||||||
<objectgroup id="3" name="clickable">
|
<objectgroup id="3" name="clickable">
|
||||||
<object id="1" name="OBJID_LEAVE_ROOM" x="486" y="654" width="41" height="57"/>
|
<object id="1" name="OBJID_LEAVE_ROOM" x="486" y="654" width="41" height="57"/>
|
||||||
</objectgroup>
|
</objectgroup>
|
||||||
|
<objectgroup id="6" name="points">
|
||||||
|
<object id="14" name="OBJID_PLAYER_START_DEFAULT" x="503" y="635">
|
||||||
|
<point/>
|
||||||
|
</object>
|
||||||
|
</objectgroup>
|
||||||
</map>
|
</map>
|
||||||
|
|
|
@ -1,13 +1,8 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<map version="1.9" tiledversion="1.9.2" orientation="orthogonal" renderorder="right-down" width="40" height="25" tilewidth="32" tileheight="32" infinite="0" nextlayerid="5" nextobjectid="21">
|
<map version="1.9" tiledversion="1.9.2" orientation="orthogonal" renderorder="right-down" width="40" height="25" tilewidth="32" tileheight="32" infinite="0" nextlayerid="6" nextobjectid="24">
|
||||||
<imagelayer id="2" name="Image Layer 1">
|
<imagelayer id="2" name="Image Layer 1">
|
||||||
<image source="../build/default/lobby.png" width="1066" height="800"/>
|
<image source="../build/default/lobby.png" width="1066" height="800"/>
|
||||||
</imagelayer>
|
</imagelayer>
|
||||||
<objectgroup id="3" name="clickable">
|
|
||||||
<object id="1" name="OBJID_DOOR_TO_MANAGERS_OFFICE_FROM_LOBBY" x="227" y="312" width="64" height="128"/>
|
|
||||||
<object id="19" name="OBJID_LEAVE_ROOM" x="468" y="720" width="83" height="79"/>
|
|
||||||
<object id="20" name="OBJID_LOBBY_TO_CLOAKROOM" x="752" y="319" width="51" height="121"/>
|
|
||||||
</objectgroup>
|
|
||||||
<objectgroup id="4" name="navmesh">
|
<objectgroup id="4" name="navmesh">
|
||||||
<object id="10" x="178" y="440">
|
<object id="10" x="178" y="440">
|
||||||
<polygon points="0,0 112,83 159,-1"/>
|
<polygon points="0,0 112,83 159,-1"/>
|
||||||
|
@ -31,4 +26,20 @@
|
||||||
<polygon points="186,81 -5,84 21,261 283,261"/>
|
<polygon points="186,81 -5,84 21,261 283,261"/>
|
||||||
</object>
|
</object>
|
||||||
</objectgroup>
|
</objectgroup>
|
||||||
|
<objectgroup id="3" name="clickable">
|
||||||
|
<object id="1" name="OBJID_DOOR_TO_MANAGERS_OFFICE_FROM_LOBBY" x="227" y="312" width="64" height="128"/>
|
||||||
|
<object id="19" name="OBJID_LEAVE_ROOM" x="468" y="720" width="83" height="79"/>
|
||||||
|
<object id="20" name="OBJID_LOBBY_TO_CLOAKROOM" x="752" y="319" width="51" height="121"/>
|
||||||
|
</objectgroup>
|
||||||
|
<objectgroup id="5" name="points">
|
||||||
|
<object id="21" name="OBJID_PLAYER_START_DEFAULT" x="352" y="684">
|
||||||
|
<point/>
|
||||||
|
</object>
|
||||||
|
<object id="22" name="OBJID_PLAYER_START+SCENE_MANAGERS_OFFICE" x="256" y="443">
|
||||||
|
<point/>
|
||||||
|
</object>
|
||||||
|
<object id="23" name="OBJID_PLAYER_START+SCENE_CLOAKROOM" x="775" y="443">
|
||||||
|
<point/>
|
||||||
|
</object>
|
||||||
|
</objectgroup>
|
||||||
</map>
|
</map>
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<map version="1.9" tiledversion="1.9.2" orientation="orthogonal" renderorder="right-down" width="30" height="20" tilewidth="32" tileheight="32" infinite="0" nextlayerid="5" nextobjectid="25">
|
<map version="1.9" tiledversion="1.9.2" orientation="orthogonal" renderorder="right-down" width="35" height="25" tilewidth="32" tileheight="32" infinite="0" nextlayerid="6" nextobjectid="28">
|
||||||
<imagelayer id="2" name="Image Layer 1">
|
<imagelayer id="2" name="Image Layer 1">
|
||||||
<image source="../build/default/managers_office.png" width="1280" height="800"/>
|
<image source="../build/default/managers_office.png" width="1280" height="800"/>
|
||||||
</imagelayer>
|
</imagelayer>
|
||||||
|
@ -48,4 +48,15 @@
|
||||||
</object>
|
</object>
|
||||||
<object id="24" name="OBJID_MANAGERS_OFFICE_TO_HALLWAY" x="614" y="236" width="105" height="181"/>
|
<object id="24" name="OBJID_MANAGERS_OFFICE_TO_HALLWAY" x="614" y="236" width="105" height="181"/>
|
||||||
</objectgroup>
|
</objectgroup>
|
||||||
|
<objectgroup id="5" name="points">
|
||||||
|
<object id="25" name="OBJID_PLAYER_START_DEFAULT" x="814" y="715">
|
||||||
|
<point/>
|
||||||
|
</object>
|
||||||
|
<object id="26" name="OBJID_PLAYER_START+SCENE_HALLWAY1" x="665" y="417">
|
||||||
|
<point/>
|
||||||
|
</object>
|
||||||
|
<object id="27" name="OBJID_PLAYER_START+SCENE_BASEMENT" x="405" y="561">
|
||||||
|
<point/>
|
||||||
|
</object>
|
||||||
|
</objectgroup>
|
||||||
</map>
|
</map>
|
||||||
|
|
|
@ -0,0 +1,55 @@
|
||||||
|
{
|
||||||
|
"maps": [
|
||||||
|
{
|
||||||
|
"fileName": "hallway2.tmx",
|
||||||
|
"height": 800,
|
||||||
|
"width": 1088,
|
||||||
|
"x": 0,
|
||||||
|
"y": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fileName": "hallway1.tmx",
|
||||||
|
"height": 800,
|
||||||
|
"width": 1088,
|
||||||
|
"x": 0,
|
||||||
|
"y": 800
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fileName": "hallway3.tmx",
|
||||||
|
"height": 800,
|
||||||
|
"width": 1088,
|
||||||
|
"x": 0,
|
||||||
|
"y": -800
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fileName": "managers_office.tmx",
|
||||||
|
"height": 640,
|
||||||
|
"width": 960,
|
||||||
|
"x": 0,
|
||||||
|
"y": 1600
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fileName": "basement.tmx",
|
||||||
|
"height": 800,
|
||||||
|
"width": 1280,
|
||||||
|
"x": -672,
|
||||||
|
"y": 2400
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fileName": "lobby.tmx",
|
||||||
|
"height": 800,
|
||||||
|
"width": 1280,
|
||||||
|
"x": 736,
|
||||||
|
"y": 2400
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fileName": "cloakroom.tmx",
|
||||||
|
"height": 800,
|
||||||
|
"width": 1088,
|
||||||
|
"x": 1280,
|
||||||
|
"y": 1600
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"onlyShowAdjacentMaps": false,
|
||||||
|
"type": "world"
|
||||||
|
}
|
14
objids.h
14
objids.h
|
@ -18,4 +18,16 @@
|
||||||
#define OBJID_LOBBY_TO_CLOAKROOM 18
|
#define OBJID_LOBBY_TO_CLOAKROOM 18
|
||||||
#define OBJID_MANAGERS_OFFICE_TO_HALLWAY 19
|
#define OBJID_MANAGERS_OFFICE_TO_HALLWAY 19
|
||||||
|
|
||||||
#define OBJID_INVENTORY_SLOTS 0x10000000 // + slot number
|
#define OBJID_INVENTORY_SLOTS 0x01000000 // + slot number
|
||||||
|
#define OBJID_PLAYER_START 0x02000000 // + previous scene number
|
||||||
|
#define OBJID_PLAYER_START_DEFAULT 0x02ffffff
|
||||||
|
|
||||||
|
#define SCENE_LOBBY 1
|
||||||
|
#define SCENE_MANAGERS_OFFICE 2
|
||||||
|
#define SCENE_MANAGERS_OFFICE_SAFE 3
|
||||||
|
#define SCENE_BASEMENT 4
|
||||||
|
#define SCENE_TEXTBOX 5
|
||||||
|
#define SCENE_HALLWAY1 6
|
||||||
|
#define SCENE_HALLWAY2 7
|
||||||
|
#define SCENE_HALLWAY3 8
|
||||||
|
#define SCENE_CLOAKROOM 9
|
||||||
|
|
|
@ -229,6 +229,7 @@ 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;
|
||||||
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;
|
||||||
|
@ -352,7 +353,7 @@ static double is_point_in_tri(int x, int y, const struct navmesh_tri *tri) {
|
||||||
static int find_navmesh_tri(int x, int y, int tolerance) {
|
static int find_navmesh_tri(int x, int y, int tolerance) {
|
||||||
int best_tri = -1;
|
int best_tri = -1;
|
||||||
double best_dist = tolerance;
|
double best_dist = tolerance;
|
||||||
struct navmesh *cur_navmesh = top_scene.navmesh;
|
const struct navmesh *cur_navmesh = top_scene.navmesh;
|
||||||
for(int i = 0; i < cur_navmesh->num_tris; i++) {
|
for(int i = 0; i < cur_navmesh->num_tris; i++) {
|
||||||
double dist = is_point_in_tri(x, y, &cur_navmesh->tris[i]);
|
double dist = is_point_in_tri(x, y, &cur_navmesh->tris[i]);
|
||||||
if(dist == 0)
|
if(dist == 0)
|
||||||
|
@ -392,7 +393,7 @@ void start_player_walk_to_point(int targetX, int targetY) {
|
||||||
void standard_handle_tap(struct scene *scene, int x, int y) {
|
void standard_handle_tap(struct scene *scene, int x, int y) {
|
||||||
uint32_t walkgen = player_walk_generation;
|
uint32_t walkgen = player_walk_generation;
|
||||||
int sceneid = scene->id;
|
int sceneid = scene->id;
|
||||||
struct navmesh *cur_navmesh = top_scene.navmesh;
|
const struct navmesh *cur_navmesh = top_scene.navmesh;
|
||||||
struct object *objects = top_scene.objects;
|
struct object *objects = top_scene.objects;
|
||||||
for(int i = 0; i < MAX_OBJECTS_PER_SCENE; i++) {
|
for(int i = 0; i < MAX_OBJECTS_PER_SCENE; i++) {
|
||||||
if(!objects[i].id) continue;
|
if(!objects[i].id) continue;
|
||||||
|
@ -443,7 +444,7 @@ static void update_player_walk_script_on_frame(struct script *scr, int wakeupMod
|
||||||
deliver_script_wakeup(SCRIPT_WAKEUP_OTHER_SCRIPT, script_id, SCRIPT_WAKEUP_OTHER_SCRIPT_INTERRUPTED, 0, 0, 0, 0);
|
deliver_script_wakeup(SCRIPT_WAKEUP_OTHER_SCRIPT, script_id, SCRIPT_WAKEUP_OTHER_SCRIPT_INTERRUPTED, 0, 0, 0, 0);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
struct navmesh *cur_navmesh = top_scene.navmesh;
|
const struct navmesh *cur_navmesh = top_scene.navmesh;
|
||||||
|
|
||||||
if(player_walk_script->currentNavmeshTri == -1) {
|
if(player_walk_script->currentNavmeshTri == -1) {
|
||||||
// something weird happened. just teleport player and end movement.
|
// something weird happened. just teleport player and end movement.
|
||||||
|
|
Loading…
Reference in New Issue