[FIX] [#7] Es pot botar damunt de les peces a arreplegar
This commit is contained in:
142
source/actor.cpp
142
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;
|
||||
|
||||
Reference in New Issue
Block a user