From ae8b9d8fe629b9b6ef8ddba84100c1b5ec8168d2 Mon Sep 17 00:00:00 2001 From: Sergio Valor Date: Fri, 24 Apr 2026 21:02:02 +0200 Subject: [PATCH] =?UTF-8?q?refactor(entities):=20fusiona=20momia=20i=20mum?= =?UTF-8?q?my=20en=20un=20sol=20tipus=20can=C3=B2nic=2016=C3=9732?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data/entities/momia/momia.gif | Bin 1207 -> 0 bytes data/entities/momia/momia.yaml | 35 ------------------------ data/entities/mummy/mummy.gif | Bin 1795 -> 1207 bytes data/entities/mummy/mummy.yaml | 18 ++++++------ data/maps/pyramid.yaml | 4 +-- source/game/entities/concrete/mummy.cpp | 1 - source/game/entities/entity_factory.hpp | 8 +++--- 7 files changed, 15 insertions(+), 51 deletions(-) delete mode 100644 data/entities/momia/momia.gif delete mode 100644 data/entities/momia/momia.yaml diff --git a/data/entities/momia/momia.gif b/data/entities/momia/momia.gif deleted file mode 100644 index 9352a9688e68beb38eaee257ad0197571f526203..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1207 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 HLIeOigQGO+ literal 1795 zcmXw&dpOj27r@U}62(*$q9%z+%8<(l^-JRtVq`GQxcuBTMvd4Es~WLya-9m1OOw!O zHjT0+dAG6qhOubM-L{#^Wmc5RTk<|n`+cXLXP@Vs=lpa2_?*u<$HUXzff8W_2VemJ zA+)ftFgG`+R4Nq;#qjX3TrThI?37BS&CSgci9{q435CMa(o%syke!{)=ks|y9+%6F zi;Kf?oWWqwXfzKG4-CU76bhM4CXq-)B2iCIk3b-(tE&TmR3vD=dQMW7Av&Kb%sGDP z47)Hb;%pM@biDtGNUx);{V{Z>P;Z+6s>MO)tyCLBX}Wh)vd2$cY7Gagh;kC(lx&6# zpHAk{EI1w{oN7YHh~5-KjI3v4p<`h}Kr;$7-jAMjqW)GSZ$h0SB&|TLMW`uj;ivSu znq*}KM^O|toEI$5qIdIY=hmag02|@ydxCqe@A|pgV2;_2*NI)O}E*EGtAd`VWQ1vIzJYx*EQvXvy zmZTFaf_1W~>d6*>6bdAjBB2oR`3T1mh9M#m0n7m?0OTrB01^NpfB=9Gzy-hoXaE=h z8Gr~tQ0=R^dA_DbDG)qMPw(b%q`|>WG@1y*3N7I*2~KZ@69#Z}EyS#ZP&Ehy;2~P# zJ8$+2_lPGhtTt!=MvC{`Yz)~g z3IyM+SeEz#mMmMUv%$HnG2+)uEuHOU=bjj6Wv--CY9W^=-0p%|6S(%Z+BTO46aHU3t@@151kY<2p_nF=zemtysG_pLM28hCa!){?t=HlGssq(WFL~ zqklZ2Ety0&(=w=)KizYN^?32;qn@&p$pUxBdF#%}UP6=BFR9hunG&b%H?>En`!6g# zLq-9?UmShk99Z3I5V$vMjCc zjp#+@IrE{Q_}g|RL{`C?bz#9>Rn0h4>sU#s>t~aIcgpO%YW_Qem{mdLwAI7oW zeoJ*n{~C!QpV5deh|3)`y{K`By|pNGuV-KJk$8vmm%_@+3{peF%o&xoqXuiPGIP^J zA=y*Rae>!aH8bIs7W45^Ue5PVii_@yO!|1(=S)|p{xC3I89p|;^>Rw+4+f`VZ~gwN zl3R#c*fsE(JyCM0_m80x(M!kJSn9?bQ#Ee>i?3r6Se_HE9YYUhLw^=)a@^XrV`6U& z-D|%o?hTr`e$O?jweId%BxmBnf2&)gugQ|)ch(NRW!8x(?G{Jwi(h-j6y@v{8{c?s z7Nn@(^xo-uX{*3cJFMgsY z>iY){ht=LS>mLkiQU-?Sr#&wl+1xi7xj(k(encX6D8)WE>%Hq>N^p(Tx8 zT&jw{lDGU)l#tPGG!;J27@8rC?S7DXXGZxk>ArMqpr1DC>-fi=8@>N~r`_@;W#kAx z5t5<%;g`iQTNk3;M-Ed#Nvj;JJ301dQR{NS!;QyY4b7hF=<|x2R|{smwUeLDuE2Ri zc>_68U2okm!YB0cne5m;U7>oz0nR*qwL7b}?KgIT<0|I4AWc$<=G*Aw{5&82!+Ym5 H0G$30`gcBh diff --git a/data/entities/mummy/mummy.yaml b/data/entities/mummy/mummy.yaml index 4639414..f271a60 100644 --- a/data/entities/mummy/mummy.yaml +++ b/data/entities/mummy/mummy.yaml @@ -2,22 +2,22 @@ name: mummy type: dynamic_hazard sprite: path: mummy.gif - size: [12, 24] + size: [16, 32] tile_size: [1, 1] -# La momia usa falsa perspectiva: el sprite fa 12×24 (dos 12×12: cap i -# peus) però la caja de col·lisió amb el mapa és 16×16, concèntrica amb -# el rectangle-base 12×12 dels peus (igual que fa el jugador). Així la -# caixa s'estén 2 px a cada costat i 2 px per sota dels peus visuals, -# i amb `anchor: feet` s'alinea exactament amb el tile 16×16 on naix — -# la momia va pel centre del corredor i la caja ocupa la cel·la completa. +# Variant 16×32 de la momia: el sprite fa 16×32 (dos 16×16: cap i peus) +# i la caja de col·lisió amb el mapa és 16×16, coincident amb el +# rectangle-base 16×16 dels peus. Com que `size` i `base_size` són +# iguals, el padding és zero i la caja s'alinea exactament amb la +# silueta inferior del sprite; amb `anchor: feet` ocupa la cel·la +# 16×16 del corredor on naix. anchor: feet collision: size: [16, 16] - base_size: [12, 12] + base_size: [16, 16] flags: collides: true interactable: false -# Strip de 12 frames en graella 12×1 (mateix esquema que el jugador): +# Strip de 12 frames en graella 4×3 (mateix esquema que el jugador): # 0..3 → walk_down (cara avall) # 4..7 → walk_up (cara amunt) # 8..11 → walk (lateral; flip horitzontal segons el sentit) diff --git a/data/maps/pyramid.yaml b/data/maps/pyramid.yaml index 34ebc0a..13f5bfd 100644 --- a/data/maps/pyramid.yaml +++ b/data/maps/pyramid.yaml @@ -124,7 +124,7 @@ entities: sarc_position: [3, 4] - type: door position: [9, 1] - - type: momia + - type: mummy position: [10, 7] - - type: momia + - type: mummy position: [7, 9] diff --git a/source/game/entities/concrete/mummy.cpp b/source/game/entities/concrete/mummy.cpp index 9128738..1edef50 100644 --- a/source/game/entities/concrete/mummy.cpp +++ b/source/game/entities/concrete/mummy.cpp @@ -306,4 +306,3 @@ void Mummy::onPlayerContact(Player* player) { } REGISTER_ENTITY("mummy", Mummy) -REGISTER_ENTITY_AS("momia", Mummy, Momia) diff --git a/source/game/entities/entity_factory.hpp b/source/game/entities/entity_factory.hpp index 4fba022..3df2a66 100644 --- a/source/game/entities/entity_factory.hpp +++ b/source/game/entities/entity_factory.hpp @@ -45,10 +45,10 @@ class EntityFactory { // La macro genera un objecte anònim dins un namespace anònim: el seu // constructor s'executa abans de `main` i registra la factory. El nom // del símbol es compon amb `TAG`, perquè així es poden registrar àlies -// per una mateixa classe (p.ex. "mummy" i "momia" → Mummy) sense que -// els símbols xoquen. La forma curta `REGISTER_ENTITY(NAME, CLASS)` -// reusa `CLASS` com a tag; per àlies cal usar `REGISTER_ENTITY_AS` i -// passar un identificador únic. +// per una mateixa classe (p.ex. dues claus diferents al YAML lligades a +// la mateixa classe C++) sense que els símbols xoquen. La forma curta +// `REGISTER_ENTITY(NAME, CLASS)` reusa `CLASS` com a tag; per àlies cal +// usar `REGISTER_ENTITY_AS` i passar un identificador únic. // // IMPORTANT: perquè el registrador es cridi, el `.cpp` que el conté ha // d'estar enllaçat directament a l'executable (no dins una STATIC lib