void Scene::processActorZone(Actor *a) { if (!a->isZonable()) { return; } a->_currZone = nullptr; for (int j = 0; j < _numZones; ++j) { Zone *z = &_zones[j]; if (z->isActorInside(a)) { switch (z->_type) { case kCube: if (a->_isHero) { if (g_twin->getGameType() == GType_LBA2) { g_twin->changeScene(z->_snap, z->_info[0], z->_info[1], z->_info[2]); } else { g_twin->changeScene(z->_info[0], z->_info[1], z->_info[2], z->_info[3]); } } break; case kObject: if (g_twin->getKey(KeyAction)) { a->setAnimation(kAction, true); a->_numKeys = 1; } break; case kSceneric: a->_currZone = z; break; } } } }