- function events(x, y) {
- const i = map.tileAt(x,y); var ev;
- if (map.events[i]) {
- // intermap
- if ( ev = map.events[i].find(e => (e.activate == "on_trigger" && e.intermap)) ){
- ev = ev.intermap.split(/[,]/);
- map = new Map(ev[0]);
- hero.place( map.xOf(ev[1] * 1, ev[2] * 1), map.yOf(ev[1] * 1, ev[2] * 1) );
- map.center( map.xOf(ev[1] * 1, ev[2] * 1), map.yOf(ev[1] * 1, ev[2] * 1) );
+ function events( events ) {
+ var ev, item;
+
+ for ( ev of events ) {
+ // game status modification
+ if ( ev.set_status ) for (item of ev.set_status) {
+ qstatus[item] = true;
+ }
+ if ( ev.unset_status ) for (item of ev.unset_status) {
+ qstatus[item] = false;
+ }
+ if ( item = ev.msg ) {
+ console.log(item);
+ }
+ // intramap (i.e. teleporters)
+ if ( item = ev.intramap ){
+ hero.place( map.xOf(item[0], item[1]), map.yOf(item[0], item[1]) );
+ map.center( map.xOf(item[0], item[1]), map.yOf(item[0], item[1]) );
+ }
+ // mapmod (e.g. opening doors, activating platforms, changing terrain, ...)
+ if ( ev.mapmod ) for (item of ev.mapmod) {
+ map.info.layer.find(l => l.type == item[0]).data[item[2] * map.info.header.width + item[1]] = item[3];
+ }
+ // intermap (i.e. enter new area)
+ if ( item = ev.intermap ){
+ map = new Map(item[0]);
+ hero.place( map.xOf(item[1], item[2]), map.yOf(item[1], item[2]) );
+ map.center( map.xOf(item[1], item[2]), map.yOf(item[1], item[2]) );
+ loadevents();
+ break; // further events would not be valid on new map