From dbac3eb3eee51e884fbf9d579c79dcdd8dc3c09e Mon Sep 17 00:00:00 2001 From: Raimon Zamora Date: Thu, 31 Oct 2024 13:18:03 +0100 Subject: [PATCH] [FIX] [#7] Es pot botar damunt de les peces a arreplegar --- source/actor.cpp | 142 +++++++++++++++++++++++++---------------------- 1 file changed, 76 insertions(+), 66 deletions(-) diff --git a/source/actor.cpp b/source/actor.cpp index eff7ee1..63e1460 100644 --- a/source/actor.cpp +++ b/source/actor.cpp @@ -643,6 +643,76 @@ namespace actor } } + uint8_t PickSpecial(actor_t *act, uint8_t result = 0) + { + if (act->name[0] == 'B') + { // Es un booster + hero::collectBooster(&act->name[5], (act->name[2] - 48) * 10 + (act->name[3] - 48)); + audio::playSound("snd_boost.wav", SOUND_BASIC); + } + else if (act->name[0] == 'S') + { // Es un skill + hero::giveSkill(&act->name[2]); + audio::playSound("snd_boost.wav", SOUND_BASIC); + } + else if (act->name[0] == 'P') + { + if (hero::getSkills() & SKILL_BAG) + { // Es una part + hero::pickPart(&act->name[2]); + audio::playSound("snd_pick.wav", SOUND_BASIC); + } + else + { + audio::playSound("snd_push.wav", SOUND_BASIC); + return result; + } + } + else if (act->name[0] == 'A') + { + hero::pickAnbernic(act->name); + audio::playSound("snd_pick.wav", SOUND_BASIC); + } + else if (act->name[0] == 'X') + { + if (hero::isCarryingPrologoObject()) { + audio::playSound("snd_push.wav", SOUND_BASIC); + return result; + } else { + hero::pickPrologoObject(act->name[2]-48); + audio::playSound("snd_pick.wav", SOUND_BASIC); + } + } + else if (act->name[0] == 'Y') + { + const int which = act->name[2]-48; + if (hero::getPrologoObjectState(which)==PROLOGO_OBJECT_PICKED) + { + hero::leavePrologoObject(which); + audio::playSound("snd_pick.wav", SOUND_BASIC); + act->name[0] = 'Z'; + room::cycleColor(1); + return result; + } else { + audio::playSound("snd_push.wav", SOUND_BASIC); + return result; + } + } + else if (act->name[0] == 'Z') + { + audio::playSound("snd_push.wav", SOUND_BASIC); + return result; + } + else + { + SDL_assert(false); + } + act = actor::replaceWithTemplate(act, "EXPLOSION"); + act->name[0] = '_'; + room::cycleColor(1); + return PUSH_NONE; + } + uint8_t push(actor_t *source, actor_t *act, uint8_t push) { uint8_t result = 0; @@ -672,72 +742,7 @@ namespace actor { if (act->flags & FLAG_SPECIAL) { - if (act->name[0] == 'B') - { // Es un booster - hero::collectBooster(&act->name[5], (act->name[2] - 48) * 10 + (act->name[3] - 48)); - audio::playSound("snd_boost.wav", SOUND_BASIC); - } - else if (act->name[0] == 'S') - { // Es un skill - hero::giveSkill(&act->name[2]); - audio::playSound("snd_boost.wav", SOUND_BASIC); - } - else if (act->name[0] == 'P') - { - if (hero::getSkills() & SKILL_BAG) - { // Es una part - hero::pickPart(&act->name[2]); - audio::playSound("snd_pick.wav", SOUND_BASIC); - } - else - { - audio::playSound("snd_push.wav", SOUND_BASIC); - return result; - } - } - else if (act->name[0] == 'A') - { - hero::pickAnbernic(act->name); - audio::playSound("snd_pick.wav", SOUND_BASIC); - } - else if (act->name[0] == 'X') - { - if (hero::isCarryingPrologoObject()) { - audio::playSound("snd_push.wav", SOUND_BASIC); - return result; - } else { - hero::pickPrologoObject(act->name[2]-48); - audio::playSound("snd_pick.wav", SOUND_BASIC); - } - } - else if (act->name[0] == 'Y') - { - const int which = act->name[2]-48; - if (hero::getPrologoObjectState(which)==PROLOGO_OBJECT_PICKED) - { - hero::leavePrologoObject(which); - audio::playSound("snd_pick.wav", SOUND_BASIC); - act->name[0] = 'Z'; - room::cycleColor(1); - return result; - } else { - audio::playSound("snd_push.wav", SOUND_BASIC); - return result; - } - } - else if (act->name[0] == 'Z') - { - audio::playSound("snd_push.wav", SOUND_BASIC); - return result; - } - else - { - SDL_assert(false); - } - act = actor::replaceWithTemplate(act, "EXPLOSION"); - act->name[0] = '_'; - room::cycleColor(1); - return PUSH_NONE; + return PickSpecial(act, result); } } return result; @@ -923,6 +928,11 @@ namespace actor { audio::pauseChannel(walk_channel); audio::playSound("snd_jump.wav", SOUND_BASIC); + // [RZC 31/10/2024] Hack per a que al aterrar sobre els especials els pille + if (!act->below && future_below && future_below->flags & FLAG_SPECIAL) + { + act->push |= PickSpecial(future_below); + } // [RZC 11/10/2024] Hack per a que al aterrar sobre els que maten, te maten if (!act->below && future_below && future_below->flags & FLAG_DEADLY) act->push |= PUSH_KILL;