- [FIX] Els boosts tornaven a apareixer

- [FIX] Molts objectes que debien no tenien activada la gravetat
- [FIX] El objecte pickat es pintava en coordenades rares depenent de la Z original
- [FIX] Al soltar un objecte se podia quedar enganxat en XP o YP
This commit is contained in:
2024-10-01 18:36:14 +02:00
parent 4ba4214ebb
commit d093b2215d
15 changed files with 70 additions and 46 deletions

View File

@@ -369,6 +369,18 @@ namespace actor
(obj1->pos.y + obj1->size.y > obj2->pos.y );
}
const bool does_collide(actor_t *obj1)
{
actor_t *obj2 = first;
actor_t *hero = find("HERO");
while (obj2)
{
if (obj2 != hero && obj1 != obj2 && check_2d_collision(obj1, obj2)) return true;
obj2 = obj2->next;
}
return false;
}
const bool is_above(actor_t *obj1, actor_t *obj2)
{
return check_2d_collision(obj1, obj2) && (obj1->pos.z==obj2->pos.z+obj2->size.z);
@@ -647,6 +659,14 @@ namespace actor
picked->pos.x = act->pos.x; if (picked->pos.x + picked->size.x > room::getMax().x) picked->pos.x = room::getMax().x - picked->size.x;
picked->pos.y = act->pos.y; if (picked->pos.y + picked->size.y > room::getMax().y) picked->pos.y = room::getMax().y - picked->size.y;
picked->pos.z = act->pos.z;
if (does_collide(picked))
{
picked->pos.x-=2;
if (does_collide(picked))
{
picked->pos.x+=2; picked->pos.y-=2;
}
}
act->pos.z += picked->size.z;
actor::actor_t *above = act->above;
while (above) { above->pos.z += picked->size.z; above = above->above; }
@@ -663,7 +683,7 @@ namespace actor
}
else if (act->below && act->below->flags&FLAG_PICKABLE)
{
const int height = act->below->size.z;
//const int height = act->below->size.z;
pick(act->below);
//if (!(( input::keyDown(SDL_SCANCODE_SPACE) || input::keyDown(config::getKey(KEY_JUMP)) ) && (hero::getSkills()&SKILL_SHOES) && (act->pos.y+act->size.y)<=max.y && act->pos.y>=min.y && (act->pos.x+act->size.x)<=max.x && act->pos.x>=min.x && act->react_mask==0 && (act->pos.z==0 || act->below)))
// act->pos.z -= height;
@@ -1320,8 +1340,9 @@ namespace actor
if (act->next) act->next->prev = act->prev;
if (act==selected) selected = nullptr;
picked = act;
picked->pos.x=26;
picked->pos.y=84;
picked->pos.x=24;
picked->pos.y=80;
picked->pos.z=0;
picked->inner_x = 148-act->bmp_offset.x + act->pos.x*2 - act->pos.y*2;
picked->inner_y = 91-act->bmp_offset.y + act->pos.x + act->pos.y - act->pos.z*2;