From 219bdd96b346a5c07b03b0d28e5b61ecbf807be8 Mon Sep 17 00:00:00 2001 From: Raimon Zamora Date: Sun, 16 Jun 2024 22:06:27 +0200 Subject: [PATCH] - [FIX] Ja no pot caminar en diagonal - Treballant en l'eixida del piso (encara peta) --- data/caixes.gif | Bin 1648 -> 1648 bytes data/rooms/00.txt | 2 +- data/rooms/01.txt | 60 ++++++++++++++++++++++++++++++++++++++++++++++ data/rooms/02.txt | 9 +++++++ source/actor.cpp | 16 +++++++++---- source/room.cpp | 2 +- 6 files changed, 83 insertions(+), 6 deletions(-) create mode 100644 data/rooms/02.txt diff --git a/data/caixes.gif b/data/caixes.gif index 7f8a8e3c667c1bb638a6cd9d656067ac8a48d8ed..9135bddb527dc4c73ee8cddae5088d8bef24c843 100644 GIT binary patch delta 146 zcmV;D0B!&94DbxFF$I4I!U4u_gvz6u~cFJNRx$ AbpQYW delta 146 zcmV;D0B!&94DbxFF$I6uvG}!agd{ZEzbJ=?B89M3<9i_t1$CRi74QsVJ6aPK7#kh# zForY(nKwKGAg~2dgh%Yt_fWVl5^ct21l%C;1_z#bc}9y;oFVxr*uL#CE@F2;C}R|d zWkzGX%VJ<$qa5c*$2!{aj(E(Y9{0${KKk*GfDEJ{2T9068uF8{1-b?lp&push |= PUSH_XN; } } - if ( input::keyDown(SDL_SCANCODE_RIGHT) ) + else if ( input::keyDown(SDL_SCANCODE_RIGHT) ) { act->orient=PUSH_XP; if ( ((act->pos.x+act->size.x)pos.y>=min.y && (act->pos.y+act->size.y)<=max.y) || ( (room::getDoors()&DOOR_XP) && (act->pos.y>=24) && (act->pos.y<=32) ) ) @@ -438,7 +438,7 @@ namespace actor act->push |= PUSH_XP; } } - if ( input::keyDown(SDL_SCANCODE_UP) ) + else if ( input::keyDown(SDL_SCANCODE_UP) ) { act->orient=PUSH_YN; if ( (act->pos.y>min.y && act->pos.x>=min.x && (act->pos.x+act->size.x)<=max.x) || ( (room::getDoors()&DOOR_YN) && (act->pos.x>=24) && (act->pos.x<=32) ) ) @@ -455,7 +455,7 @@ namespace actor act->push |= PUSH_YN; } } - if ( input::keyDown(SDL_SCANCODE_DOWN) ) + else if ( input::keyDown(SDL_SCANCODE_DOWN) ) { act->orient=PUSH_YP; if ( ((act->pos.y+act->size.y)pos.x>=min.x && (act->pos.x+act->size.x)<=max.x) || ( (room::getDoors()&DOOR_YP) && (act->pos.x>=24) && (act->pos.x<=32) ) ) @@ -717,7 +717,15 @@ namespace actor if (act->push & PUSH_ZN) { // Si estic sobre el piso, no faig res [TODO]: Si no hi ha piso ha de caure - if (act->pos.z == 0) return; + if (act->pos.z == 0) + { + if ((act->flags&FLAG_HERO)==0 || room::getExit(ZN)==-1) return; + + room::load(room::getExit(ZN)); + act->pos.z = room::getMax().z; + actor::setDirty(act); + return; + } // Si tinc a algĂș baix... if (act->below) diff --git a/source/room.cpp b/source/room.cpp index a250b51..804a110 100644 --- a/source/room.cpp +++ b/source/room.cpp @@ -61,7 +61,7 @@ namespace room tmin = {3-inner_w,3-inner_h,0}; tmax = {4+inner_w,4+inner_h,3}; min = {tmin.x*8,tmin.y*8,0}; - max = {(tmax.x+1)*8,(tmax.y+1)*8,24}; + max = {(tmax.x+1)*8,(tmax.y+1)*8,32}; doors = (door_height[XP]>=0?DOOR_XP:0) | (door_height[XN]>=0?DOOR_XN:0) | (door_height[YP]>=0?DOOR_YP:0) | (door_height[YN]>=0?DOOR_YN:0); //door_height[0] = inner_xp; //XP //door_height[1] = inner_xn; //XN