@@ -37,7 +37,6 @@ Game_Event::Game_Event(int map_id, const RPG::Event& event) :
3737 from_save(false ) {
3838
3939 ID = event.ID ;
40- through = true ;
4140
4241 SetMapId (map_id);
4342 MoveTo (event.x , event.y );
@@ -225,6 +224,10 @@ void Game_Event::SetFlashTimeLeft(int time_left) {
225224 data.flash_time_left = time_left;
226225}
227226
227+ bool Game_Event::GetThrough () const {
228+ return page == NULL || Game_Character::GetThrough ();
229+ }
230+
228231void Game_Event::ClearStarting () {
229232 starting = false ;
230233}
@@ -238,7 +241,6 @@ void Game_Event::Setup(RPG::EventPage* new_page) {
238241 SetSpriteIndex (0 );
239242 SetDirection (RPG::EventPage::Direction_down);
240243 // move_type = 0;
241- through = true ;
242244 trigger = -1 ;
243245 list.clear ();
244246 interpreter.reset ();
@@ -258,23 +260,24 @@ void Game_Event::Setup(RPG::EventPage* new_page) {
258260 pattern = page->character_pattern ;
259261 original_pattern = pattern;
260262 }
261- // opacity = page.opacity;
262- // opacity = page.translucent ? 192 : 255;
263- // blend_type = page.blend_type;
263+
264264 move_type = page->move_type ;
265265 SetMoveSpeed (page->move_speed );
266266 SetMoveFrequency (page->move_frequency );
267267 original_move_route = page->move_route ;
268268 SetOriginalMoveRouteIndex (0 );
269269 animation_type = page->animation_type ;
270+ SetOpacity (page->translucent ? 160 : 255 );
270271
271272 SetLayer (page->layer );
272273 trigger = page->trigger ;
273274 list = page->event_commands ;
274- through = false ;
275275
276276 // Free resources if needed
277- interpreter.reset ();
277+ if (interpreter) {
278+ interpreter->Clear ();
279+ interpreter.reset ();
280+ }
278281 if (trigger == RPG::EventPage::Trigger_parallel) {
279282 interpreter.reset (new Game_Interpreter_Map ());
280283 }
@@ -467,7 +470,6 @@ bool Game_Event::CheckEventTriggerTouch(int x, int y) {
467470 return false ;
468471
469472 if ((trigger == RPG::EventPage::Trigger_collision) && (Main_Data::game_player->IsInPosition (x, y))) {
470-
471473 // TODO check over trigger VX differs from XP here
472474 if (!IsJumping ()) {
473475 Start ();
@@ -477,8 +479,6 @@ bool Game_Event::CheckEventTriggerTouch(int x, int y) {
477479 return true ;
478480}
479481
480-
481-
482482void Game_Event::Update () {
483483 if (!data.active ) {
484484 return ;
@@ -488,13 +488,14 @@ void Game_Event::Update() {
488488 CheckEventTriggerAuto ();
489489
490490 if (interpreter) {
491+ Game_Map::SetParallelInterpreter (interpreter);
491492 if (!interpreter->IsRunning ()) {
492493 interpreter->Setup (list, event.ID , -event.x , event.y );
493494 } else {
494495 interpreter->Update ();
495496 }
497+ Game_Map::SetParallelInterpreter (EASYRPG_SHARED_PTR<Game_Interpreter>());
496498 }
497-
498499}
499500
500501RPG::Event& Game_Event::GetEvent () {
0 commit comments