From f69445c5c73d609fc626cac3d90a6da9b9ab0c21 Mon Sep 17 00:00:00 2001 From: JanEhehalt Date: Thu, 24 Nov 2022 09:21:04 +0100 Subject: [PATCH] multiple layers --- Input/inputHandler.c | 16 ++++----- Input/inputHandler.h | 2 +- IsometricMap/isometricMap.c | 58 +++++++++++++------------------ IsometricMap/isometricMap.h | 5 ++- IsometricMap/isometricRenderer.c | 24 +++++++------ inputHandler.o | Bin 0 -> 5984 bytes isometricMap.o | Bin 0 -> 4712 bytes isometricRenderer.o | Bin 0 -> 2840 bytes list.o | Bin 0 -> 3168 bytes main.c | 47 ++++++++++++++++++++++--- main.o | Bin 0 -> 5128 bytes spiel | Bin 0 -> 26968 bytes sprite.o | Bin 0 -> 2648 bytes tile.o | Bin 0 -> 1072 bytes 14 files changed, 91 insertions(+), 61 deletions(-) create mode 100644 inputHandler.o create mode 100644 isometricMap.o create mode 100644 isometricRenderer.o create mode 100644 list.o create mode 100644 main.o create mode 100755 spiel create mode 100644 sprite.o create mode 100644 tile.o diff --git a/Input/inputHandler.c b/Input/inputHandler.c index 1618af9..2654a0a 100644 --- a/Input/inputHandler.c +++ b/Input/inputHandler.c @@ -62,22 +62,22 @@ void mouseInput(InputHandler *inputHandler, List *sprites, Texture2D *texture, C // resetting last selected Tile to grass texture int n = 9; if(inputHandler->selectedLayer != -1){ - IsometricMapChangeTextureIdOfTile(layers[inputHandler->selectedLayer], (int) inputHandler->selectedTile.x, (int) inputHandler->selectedTile.y, 0); + IsometricMapChangeTextureIdOfTile(layers[inputHandler->selectedLayer], (int) inputHandler->cursorWorldPos.x, (int) inputHandler->cursorWorldPos.y, 0); } - for(n = 2; n >= 0 ; n--){ + // TODO: n=2 no good style, but Segmentation fault when > layerAmount + for(n = 10; n >= 0 ; n--){ if(layers[n] != 0){ - IsometricMapProject(layers[n], camera, inputHandler->cursorPos.x, inputHandler->cursorPos.y, &inputHandler->selectedTile); + IsometricMapProject(layers[n], camera, inputHandler->cursorPos.x, inputHandler->cursorPos.y, &inputHandler->cursorWorldPos); - Tile *selectedTile = IsometricMapGetTileFromWorldCoordinates(layers[n], inputHandler->selectedTile.x, inputHandler->selectedTile.y); + Tile *selectedTile = IsometricMapGetTileFromWorldCoordinates(layers[n], inputHandler->cursorWorldPos.x, inputHandler->cursorWorldPos.y); if(selectedTile != 0){ - //printf("ALARM bei n = %d \n", n); - inputHandler->selectedTile.x = selectedTile->x; - inputHandler->selectedTile.y = selectedTile->y; + inputHandler->cursorWorldPos.x = selectedTile->x; + inputHandler->cursorWorldPos.y = selectedTile->y; // setting currently selected tile to tower inputHandler->selectedLayer = n; - IsometricMapChangeTextureIdOfTile(layers[n], (int) inputHandler->selectedTile.x, (int) inputHandler->selectedTile.y, 1); + IsometricMapChangeTextureIdOfTile(layers[n], (int) inputHandler->cursorWorldPos.x, (int) inputHandler->cursorWorldPos.y, 1); break; } } diff --git a/Input/inputHandler.h b/Input/inputHandler.h index aa82b38..e44b151 100644 --- a/Input/inputHandler.h +++ b/Input/inputHandler.h @@ -9,7 +9,7 @@ typedef struct InputHandler{ int pressed; Vector2 rectStart; Vector2 cursorPos; - Vector2 selectedTile; + Vector2 cursorWorldPos; int selectedLayer; } InputHandler; diff --git a/IsometricMap/isometricMap.c b/IsometricMap/isometricMap.c index 839f8e9..d3325f6 100644 --- a/IsometricMap/isometricMap.c +++ b/IsometricMap/isometricMap.c @@ -5,39 +5,37 @@ #include "raymath.h" #include "raylib.h" -IsometricMap * IsometricMapInit(int x, int y, int layer){ +IsometricMap * IsometricMapInit(int layer){ IsometricMap* map = (IsometricMap *) malloc(sizeof(IsometricMap)); map->tileTextures[0] = LoadTexture("assets/grass.png"); map->tileTextures[1] = LoadTexture("assets/tower.png"); map->originX = 0; map->originY = -layer * map->tileTextures[0].width / 4; - map->width = x * map->tileTextures[0].width; - map->height = y * map->tileTextures[0].height; + map->width = 100 * map->tileTextures[0].width; + map->height = 100 * map->tileTextures[0].height; map->widthBounds = 100; map->heightBounds = 100; + map->layer = layer; - Tile*** tiles = (Tile***)malloc(x*sizeof(Tile*)); + Tile*** tiles = (Tile***)malloc(map->widthBounds*sizeof(Tile*)); int n = 0; - for(n=0; nwidthBounds; n++){ + tiles[n] = (Tile**)malloc(map->heightBounds*sizeof(Tile*)); } - map->sizeX = x; - map->sizeY = y; - int i = 0; int j = 0; - - for(i=0; i < x; i++){ - for(j=0; j < y; j++){ + for(i=0; i < map->widthBounds; i++){ + for(j=0; j < map->heightBounds; j++){ Tile *tmp = (Tile *) malloc(sizeof(Tile)); - tmp->textureId = 0; + tmp->textureId = -1; tmp->x = i; tmp->y = j; tiles[i][j] = tmp; } } + map->tiles = tiles; return map; @@ -63,12 +61,13 @@ Tile * IsometricMapGetTileFromArrayPosition(IsometricMap *map, int x, int y){ void IsometricMapProject(IsometricMap *isometricMap, Camera2D *camera, float x, float y, Vector2 *tmp){ - int mouseAdjustmentX = -8; - int mouseAdjustmentY = -4; - float tileWidthHalf = isometricMap->tileTextures[0].width / 2; float tileHeightQuarter = isometricMap->tileTextures[0].height / 4; + int mouseAdjustmentX = -tileWidthHalf; + int mouseAdjustmentY = -tileHeightQuarter + (tileHeightQuarter * isometricMap->layer); + + x += camera->target.x + mouseAdjustmentX; y += camera->target.y + mouseAdjustmentY; @@ -92,11 +91,13 @@ Tile * IsometricMapGetTileFromWorldCoordinates(IsometricMap *isometricMap, float ptr->x = 0; ptr->y = 0; - if( x < isometricMap->sizeX && y < isometricMap->sizeY && + if( x < isometricMap->widthBounds && y < isometricMap->heightBounds && x >= 0 && y >= 0 ){ - ptr->x = isometricMap->tiles[(int)x][(int)y]->x; - ptr->y = isometricMap->tiles[(int)x][(int)y]->y; - return ptr; + if(isometricMap->tiles[(int)x][(int)y]->textureId != -1){ + ptr->x = isometricMap->tiles[(int)x][(int)y]->x; + ptr->y = isometricMap->tiles[(int)x][(int)y]->y; + return ptr; + } } ptr = 0; return ptr; @@ -105,23 +106,14 @@ Tile * IsometricMapGetTileFromWorldCoordinates(IsometricMap *isometricMap, float void IsometricMapAddTile(IsometricMap *isometricMap, int x, int y, int textureId){ - - //if(x < isometricMap->sizeX && y < isometricMap->sizeY){ - - Tile *tile = (Tile *) malloc(sizeof(Tile)); - tile->textureId = textureId; - tile->x = x; - tile->y = y; + isometricMap->tiles[x][y]->textureId = textureId; + isometricMap->tiles[x][y]->x = x; + isometricMap->tiles[x][y]->y = y; - //Tile tile = {textureId, x, y}; - isometricMap->tiles[x][y] = tile; - - //} - } void IsometricMapChangeTextureIdOfTile(IsometricMap *map, int x, int y, int id){ - if( x < map->sizeX && y < map->sizeY && + if( x < map->widthBounds && y < map->heightBounds && x >= 0 && y >= 0 ){ (map->tiles[x][y])->textureId = id; } diff --git a/IsometricMap/isometricMap.h b/IsometricMap/isometricMap.h index 1c08503..fdb2681 100644 --- a/IsometricMap/isometricMap.h +++ b/IsometricMap/isometricMap.h @@ -6,14 +6,13 @@ typedef struct IsometricMap{ Texture2D tileTextures[10]; Tile ***tiles; - int sizeX; - int sizeY; int originX; int originY; int width; int height; int widthBounds; int heightBounds; + int layer; } IsometricMap; // TODO: @@ -22,7 +21,7 @@ Tile * IsometricMapGetTileFromWorldCoordinates(IsometricMap *isometricMap, float Vector2 IsometricMapUnproject(IsometricMap *isometricMap, Camera2D *camera, int x, int y); // Working -IsometricMap * IsometricMapInit(int x, int y, int layer); +IsometricMap * IsometricMapInit(int layer); Vector2 * IsometricMapCalcOffsetForTileAt(int x, int y, int textureSize); Tile * IsometricMapGetTileFromArrayPosition(IsometricMap *isometricMap, int x, int y); // Screen Coordinates -> World Coordinates diff --git a/IsometricMap/isometricRenderer.c b/IsometricMap/isometricRenderer.c index a116fe1..46788c3 100644 --- a/IsometricMap/isometricRenderer.c +++ b/IsometricMap/isometricRenderer.c @@ -40,20 +40,22 @@ void IsometricRendererRenderIsometricMap(IsometricMap **map, InputHandler *input int n = 0; int i = 0; int j = 0; - for(n = 0; n < 9; n++){ + for(n = 0; n < 10; n++){ if(map[n] == 0){ break; } - for(i=0; i < map[n]->sizeX; i++){ - for(j=0; j < map[n]->sizeY; j++){ - Vector2 *offset = IsometricMapCalcOffsetForTileAt(i,j, map[n]->tileTextures[0].width); - - float x = map[n]->originX + offset->x; - float y = map[n]->originY + offset->y; - - int textureId = map[n]->tiles[i][j]->textureId; - - DrawTexture(map[n]->tileTextures[textureId], x, y, WHITE); + for(i=0; i < map[n]->widthBounds; i++){ + for(j=0; j < map[n]->heightBounds; j++){ + if(map[n]->tiles[i][j]->textureId != -1){ + Vector2 *offset = IsometricMapCalcOffsetForTileAt(i,j, map[n]->tileTextures[0].width); + + float x = map[n]->originX + offset->x; + float y = map[n]->originY + offset->y; + + int textureId = map[n]->tiles[i][j]->textureId; + + DrawTexture(map[n]->tileTextures[textureId], x, y, WHITE); + } } } } diff --git a/inputHandler.o b/inputHandler.o new file mode 100644 index 0000000000000000000000000000000000000000..96e85f936d9165275f8b4b8bac8455de73edc61f GIT binary patch literal 5984 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 literal 0 HcmV?d00001 diff --git a/isometricRenderer.o b/isometricRenderer.o new file mode 100644 index 0000000000000000000000000000000000000000..c9cb721c3265164287c47c5f7cf2f5c16c95cb9a GIT binary patch literal 2840 zcmbtU-ESL35Z|*+>O#Xgs7OUcUf-=0?f?au5-RP;-e$2 zcjq_ro1L8*-&=Gv>XRfQL?Taw}Ti}>2T3#NV!M1y<71`z$yl` zc`c`)e1n#*PWUgc$ZR#=@Hx?Y=+?*0Pn#fD3TC;RkR~y2+6U4!Z(?p+^LT<&(4`Fa7ja zvuV+_R>lLgw9sYHigY_*q$-j@OW;~MN!R3SpMdM~GPBM#zJyFXePL#9r9g{L{oA`? zgPTwKu=GWCon77kxt$3XS1LmB8Pwp?BVZRT`_|R6kL;Fp=2?sD5Xp*_Sn_L@|IY7( zvts3TofwU#eCg%g16dORYpe|KG;f&&r%Wc@*d<$Q5g&w|h1zdGBjD@|MP*k87R1Gf z1Ox@<=+2&I(%L@^Otm#I6&#q(7uo}4(Hct@nOS7{st;>vZ~6Z?R~_GDE!Lm}1GFqJ zJq}~!jMXllRok;9Fa7o>dKM*Pp}1GR_8DlmB{6_xWN7F__)u&rm)3LP0p*y|ceFoe zYyEFN(WmqsQ~D1(ID{hsSRq(D+PLeZ>+z6E%EwTVxGiDM#oPLj>gBM(KB>1J~?=5 zl*S2KC)EpjPE&VMov^Kl7{#p&CFYXj)6-d1k7l&V**SF(GbLmU8w!H6bq}mR@KX+= z<6M9s4qx>a{sC{L*FOwCC`jW}TgUpL2wc>QDA|iCJuwBlt~vXRIBDu!Leb%&L^+?( z6GWNHW{Hx_q*7`cuyjUO75Gma&FYEdYg~Udom1wu%)F}U7l~p=P-o)PS|X)73Ebgt z82DH!?_@>*LwNuT;u2og7IF|y=n`om&fymxka7HO*pVwH`T)lt>qLkU-Ylj-54W?A9#=nUL5=n?uF&$ hBj)WLK;$f+pZ8F4iMQ50VC%%6;rY+GxOnvP{{}RiRyY6v literal 0 HcmV?d00001 diff --git a/list.o b/list.o new file mode 100644 index 0000000000000000000000000000000000000000..eb4318e2280fe88d0172908cc5b38143197e37ff GIT binary patch literal 3168 zcmb_dO=w(I6h1Rk(=knxv4}=mJ2IWz=gO+z3OL$2>tN8D~H8Y?!#*^Vc zdWP&oy4`aWW^W|p4DF4)@|_aWD0E$E_jOVki;NuyE5^*%ukJ&1n{7m_t(dIsXdAt@ z-S!>rbh45g-RKe2VO2}}ZX1uL*iw48DJ2G-v^#w}dZKT^IG`)KFW?Q8EU86Pft^Aq zyE`U9vcnXmY(FZA>>{%NkF|&WELfbZeM(}Y3an6Gz&{i}F73pLv~o-2uboE5JY0X~ zR;Jf8F;6rp)N{NEF*Iq#$F!_JD7$jTRPV_3Q1^e?!nA|0LiX&cb;UZnIyOECuLI1_ z%{^shmnu;`jI3#U%FazpMnal=@9~_So3bazBo4>04l4CNT=VCb07tD$SPB=>gK~q! zy9I-cIbAKDqjX%SWElON7}keoX?kbD^}r0!|Lk=~(CPhaclUn3mp8~XJ0 zU-tA@2uJGDr>Fm_r~j02q;vF9`nphy+C*GbIl6vB>IsS?dP9!E?+07#H>5qzMG#@F~P8 zj`A11MJ#_0`xowkU*tGN723;C#BDC{z0g13Sn;7eU%W6oQ!HO76fWf#%ZoF!#e5lRUbWhgwxwXb9u^wG zh8L_rGYVVKBxF?tdcNNBgRl@Z>Y*mjddqLKxGwSM0&iocTD^p>q2B@$B@gfr*G<2@ zAzXhQNV>*29glva3ctZP*$->@=Zq_R4s-B@Wbc4N zqIz_EmHT3z>!ya&8>8Y_$P=iHcz^=4fU`i}~!npq5<-e#c zcBKB(zmW1*{g2B{E)E4n+UEn)TSxDO=}$4^uIfpizfVxFlX-vC-#Gs@P890S$eaFu E1AQhP#{d8T literal 0 HcmV?d00001 diff --git a/main.c b/main.c index 32a9a62..0f9f84d 100644 --- a/main.c +++ b/main.c @@ -27,8 +27,8 @@ int main(){ inputHandler.rectStart.y = 0; inputHandler.cursorPos.x = 0; inputHandler.cursorPos.y = 0; - inputHandler.selectedTile.x = 0; - inputHandler.selectedTile.y = 0; + inputHandler.cursorWorldPos.x = 0; + inputHandler.cursorWorldPos.y = 0; inputHandler.selectedLayer = -1; Camera2D camera = { 0 }; @@ -47,10 +47,47 @@ int main(){ IsometricMap **layers = (IsometricMap **) malloc(10*sizeof(IsometricMap *)); - layers[0] = IsometricMapInit(50, 80, 0); - layers[1] = IsometricMapInit(20, 20, 1); - layers[2] = IsometricMapInit(15, 10, 2); + int n = 0; + int i = 0; + int j = 0; + for(n = 0; n < 10; n++){ + layers[n] = IsometricMapInit(n); + } + + for(n = 0; n <= 10; n++){ + for(i = 0; i < 100; i++){ + for(j = 0; j < 100; j++){ + switch(n){ + case 0: + IsometricMapAddTile(layers[n], i, j, 0); + break; + case 1: + if(i > 35 && i < 50 && j > 45 && j < 60){ + IsometricMapAddTile(layers[n], i, j, 0); + } + break; + case 2: + if(i > 40 && i < 44 && j > 50 && j < 54){ + IsometricMapAddTile(layers[n], i, j, 1); + } + break; + } + + } + } + } + + for(n = 0; n <= 10; n++){ + for(i = 0; i < 20-n*2; i++){ + for(j = 0; j < 20-n*2; j++){ + IsometricMapAddTile(layers[n], i, j, 0); + if(n == 9){ + IsometricMapAddTile(layers[n], i, j, 1); + } + } + } + } SetTargetFPS(60); while(!WindowShouldClose()){ diff --git a/main.o b/main.o new file mode 100644 index 0000000000000000000000000000000000000000..dfae5235c7636161ad0940fa3e31fb2f28d54c38 GIT binary patch literal 5128 zcmbuCZD?Cn7=TZjYU}KF(>b;3+@jm0Qy1HAiqqkec4=>=)v>ly+$7#6cWG>zTW)UL zrlXt0D-Bt;3Jw+gF%e-uLj|ud-nbBs3SmOd;q|jSL0OD! zCpawFE$~Da1$#?LdblKs-nq?Ls;R!I=2m@<`fAoj2R*s zdG<68?h~3f&vSN~x<|fFIreF((W)H(fHu%>lXC2xQsYtO`0LR4Z{gb*F@SzZ!qatg_UC;|5Gfc>7oL|(7;}! z3|ECO&NAg#0+_Tw--2UlfpEVUsAmw!+@Ymsi25Q!z7tXpE!|umARpS9W#IBYwzu+I zX;RA3VHgY_W<@`aSvk6$_AegtYG7x#firp(W-~Qh`snJJtI#!G$Xwn4r=qx=kgFtf zA#)i7QUu|9c6QQN>Wis~VrsmYI>O0CubLak^FyI#z7Zn_LT?bhR8$*|WN~lrL2wjQdNcb)m-poIl?3!L^aoYM9rO`_fYmUjhPGP zyE6+Vz1#pO1oKjI(%oQhLmxcZEG(Su2Qa$_mH{ZrS$|V{!KK&_l@ZwcJ-i!awVsc_ zewsN$Gt^ln=`;wPy-WvH_o+%EFQz7knJ5oTz0kp}3jQXTev!uFn2rAWvTrF)qrYJ` z$BY&SfKX#F1vEo&C5DYkO7m1X5m~Ps0Y~WJwojic@kLpvFhY-wqnlS2=`?VCHS72C z`Bl@CI7dXW-+)s{XMjG^zq?+^D|Ym64%u5K`|M0a-MpH<{jBS#qMFlx-xJvT>;)L> zpq7kp%#u@Vr{nvHbeSkGj*f?px|Wk9SwC@D`{gf6zBnrGmTamjvb{ zvRZ86rlVNQu;r$ss>U(lYm1vyPuWdwxKuT> z_#+M+7Qd>W#~t_{2W~jLSz~6GX=<9Qbz*{AUOLhXeo1fiHuNSZ)5B9QZ~D zj+bXOKLH2c=fFb_oQ!C(gfC1h66)%CvOUlfda|>#FW4XI5486LL!>(qvz}s?M313G z`t<`=%G60uENNjEn8xEqm~fG5!+VyBG zvBT8h28xo7xUQM)T6j2W8mUBtb@mz&y=_O?^)5XT(M{cCwH$z^gT4asc;BcQv-Bhh zCL-Jcb}&jtj8szZPK>53GOQmQG&D29TD$eIWteR}dLn8K5#D;jFkyJH7j*&p!Ws+% zJd3>9%=8Tzsd%I#ZX|UW2|W3Pg+fUS#uN$<4Ttt=u{gcoV9VfrNNN&Gd5CE&cPy^1n^uT@t@t;?GF@4v7zPF4n6V`mkJ) z^l{Ba++O~Q!L;s_cuL}HB>tJs>iQ0kN)_ W+=?c>>#Ny&_{WUJ+?1Y`_WuHse>eL8 literal 0 HcmV?d00001 diff --git a/spiel b/spiel new file mode 100755 index 0000000000000000000000000000000000000000..d142914f50478905fad1dd69a26d8cdd7c21e3e3 GIT binary patch literal 26968 zcmeHweSB2ao%hKbM1{m%*zLxR*qOS`d)eNvk~9TmHG4AmHLH+9u{zQ6Nw zbLVDewcF>f=ac*SWPa!OdVc43e&^+$NlqTnYS!lFP*F4n4Bnr4lMV3K!|IS|QK2 zIiQRulTgKzVnRPFq&+9}NHYpL^|nYoC#;fs3Q`^PY6 zmhh^{FRFvO|BgHBsXKa!rn-~Lvm{RZeWh0(zU_sF{<8i1PyhW@fBi3!hmZZ;$CVAL zlVs>2ebvQ;Q~7HAkc?>mgD43a!50I+Xd{^Ic?60d%fLJcS|&QtJQ?I4$YRHxh5nye z?7xMZu_ve4gxPA2u6`;TRj|8^Go<}CDY!v1yOO?oi?!v1~uq%pU2NjdZR zcD03qzK)1L9P#;>uX}u(V1i~9@D_cXsz()Vh)_~w;^8h^vRyTYMpu#w#nh}4Fn9f7(~M@yt76l7Yku`2A}(-PdpsyjXx*jE+W6J#|Z zf8)l$-bgeYAdR(Qe_LQQPqH4Aq4L9b|_)uDpR`vJKV2mWVX5ArRT<5AT9YbsJPocZR}k z{??ZJ0!#>PXbweN8+paN%JuNhAKcX%sA&lXIvAqeK;d4_+M|&UL>$3xxYyUve6O#` z-_pw3!!5x`6NAatPy^Tvd;PwqmY}G?=OcC5KW+Y&AiJZcdQGKoN!e1Xw4`hqI$F$c z6SG`y+Ke}m32H7?6w=6nY!o@8=J#1GEi-A>JR@n*t6DCj8h!zs9<}bO_0B_+GM;g{ z9xHl6?sp1za5htPg%9}zo#tS>UkMxiav{P$O&fiNjXr9l7uo3JHagAs>M4=*=^)4^ zahAtMpNJ%5r8YXPFX}0`(dCwfvsT#X_Vv|kqf_1L(QR}UBjVNB=;#3J*Joi@6C{yk))%P!|yJvO>b5l%m9qhD#Wf6PYz zgpGdOM*j;N{e+EPVxyn5(LZUU_uA-J+2{i{`loF4K^tA|nQiQ;;#35tA}|$!NfEf{ zy5?OycA-#@7d*d?F}zlGC6g7zyMy|Ie-Mit}z z0lc=BdS?RH9QY~+zRZCybl`Ix_|*>lN(VmEffqRN_i+qj_wOAC{s#yCx&!~M1AobZ z|J;H9)PX3>oAnMXRhX8 zRUf)9b!8YTmwNQ>Rga;dcNhE(ftBNtD>3x8QyD|=vQ)w~rxW7rSqUNE!sVCkBrxv- z-5AyT-dwHsjpyk(&*?9I5Sax7bESd8RHBK;S?SaG>|8}`7M)+O$5!Q1Q8!+X%+TYj zrU5a(^L{F2HX_-dD|r8N*kx{mu2nzjC-;C!g?i{!Y}}wfcp(8Jje0zPZYj5>nTvb% z?kk^|&)EMujoILo2SeUWz_8xk<%YK2z3iJ{>PEl$Riv>V7u5J8CB!tkc5v`WGeEq{ zgHNNY9iJy*otaS&X?E!()2|%^i2)v$@Pve17S#z;+Odl+cflIedC^s@9VcX^M84mz z^^#7L>#bg5o>7GXRXD2(gQ{>&6^8n?VfaCgbdnLkLlX87RC0$@;jk)Ts&p6p_(tK- z!>8&XZ2seWy!CZ3*xyx-PcqTpwbUxDuu6(Ma#Ng3>PPkNSwAIt1d|NZbYGtX#ijGf_*j3;i@vRgzxx`@2+qNjh&3TDh)+KSM1FdFUF8!y-k3 zniKIRr-PiuGd*WekF)qAWIX;PHSWjUZ}@p5_OQvb+&s}g?K<+$7P8p&&_8m7^cK2~ zJZ>Skx*mEM$e&)_KVvIBvNiS$)m3_6lPJu8pf>gl)v@G2l_)HG;MR|B8|~(K?IYWH zJtH|iF&;()os2fPj{FE2ALE@08dVJ%P4;P>bGhqC5Hwo{{cjkybr9wILZ*YUNL@7TB(1RXMQ-)3^i)f^C=N!KBCF9 zft|Vy#>~8TQ>mnZor8JTA5*C(-Z}XWScm$Jp}80pshNzu!;EK*Arx2&h2NQf12NjU zq@q2k=%G}!)7$|Q*tvN0?)qLiD0JgjH0LC+f`h_m5TN(q4awXIeGEzMY`lvmKjU=Y z8*_37UmU;ax^dv5YipmHH?+Zc7tKo<1-`F$YsaXD`IzwZ_%k#R_3qkEz55Y955=G4 zb#`mL)y6o<-Hg2q{DXkjE1m0|L34t;;PKD!xuNSevLT&~qvN`~ASCZWH-JjzxVI!W zp5y9TK0$)M*Dcv7>xHrfU0Z}PQX?6x72E{L%uq60g$#){>8@a}IenZ@Y#U4`Gw$)SYossOO1dMZELEoX2aj!?lSC2hIF=DQ+M==V`C;uHEb*Mcy znscz%)wPS($OMRDm5FaN8}*xJ^VKg>VD5pS-W?ddr()~2XVpT9+=TJ{==JERZq%Db z?fEK0OXzWJG|pn<4X%ew9u`6|nfE0MbmKI*<9ZGOQ#W#jtb;j-1l7(XJ1O89lsP{^ zd^9r~pX(!Gvhle-k|h)0%7V;He)=FZyX$hOV7NzSU?20-Ph-@zVp#V)Zv|-sqEvz? znR>j|j91U@dOq@nA2J@~L(dt5eC!*ijX^Q&d0fz^-WeCGTnl<(+awIBuwa}JtTOyv zhTHtT9!G$-6zWEiZfq}%d)>xbca`y+X}|@VCPsFiNc{wTo;q|6=2Q4e6Q6p#o@}mB zH3&@BP>&iumR7^%di-vyhV^b^liN5=bc`p-2X~Qw3GI=^!j3PPn zDr|yXn}t190db18q2yN)0BPXD?xkEs8Tbrg7s$Y`ueA&iu2J>GDb|KZwp!ZjWy##F zTbkc+XmWqPJV7L!H(2`Pu>J%)d7je4wg{Em7a>{Cf&nVP)&dMY?%sk?Dj<>zdMk_} z%=%xsh^$A>mEMy+KTtoI<`!_%`T(}9J{UJwDz?23(0)tgJ=yee(FcT1^Z~NQJ@YHb zG}#A)le1fSK53@C58e}fFs=;nK6sA|)K3^7oWj3VL#bH1VD-U!yHy{Ii$36*pK@q& zf2K_ko&GqiBc)Bg7NiZLcI56!Ospp`u^!ir+G90_cGPr_O~jEVhm$mXW|)6`TP-3Y zhb@-7Upq@j2P7Kz&W??zB5Q=2+gn22sgPMfMx_+(yJyIKw{}#|8Nj4tZD$K`5&)yL zJ4(*R>Kxb3lDyidlRS*ltDfuNxU5<4uA_kqXZaEiSK4PtJ!d_bB#+VB=n6ik8^56K z#LuvIP|79T!@5~nl!fAH(kjFO2d11+J+^<8MZ(Yl(JO*V*~?L_M5L^CpJ*p*^(E)z4A?ia3y`GRagi}! zq;0c7D=7vK-yCnkaTZVn$D7ZGnt9iMsu6>Ai91hI*<*_b=V6Asv6qHDpX$&S2N{&R zx6wyE7r+c~H(Ko`D|h!|5Abum@13OMKeO@=@PnM7Ev}YGz9k}ojR$tGU?jkx*4Vb? zsCWz35qJGK_|$IN1a5f&k>;z*5NQ#W!Xnhu!e^PU^tw37`jHq>jbRMaIG%H5`Xy;%ai@}fp!_-@nm|O)! za+1?fj%&kKp7WuJ;860resCJ&4PED^4gc0YOd)XJV$u$SMk5W1Vl4qHkMVcdSR!ZM zAl?w8b0?%N`^sQK4I8ARG+F5Sfp)IDE)T1de!6cwSB>=xPoz$woB2kF@04vX;^f-} zz8j|!jPjj0Tr5O*=m)!d?8NaN@OkW$r|HI~!gvMk#Eq9}pZtDO?8Rf+P)=MMx>Xx? z9exu_LR>pzdAw3Pw|`np8_pTYkF^cw#I$n|J$I{i#&zT=i1zfP@3F0Z!TzAPUmFzh zPwx#*Ox}#~9oGiaR_FoS3jJyDRhPYD>$30hF3YSJ?;Jpd@%nRm!!Px|S8+x=NPSs9 zl#b&CFy%V9J-eZJU4FcF2<%orXc(7{vQ=F2$0Az7Nf-Z~vP;uQIkL z-gzD&Sg8%U4lhC)iL}Zhnc$M=T!;UNbAXsOh|SC3Wv(NqfZ@C^LjpD%`=554kDnTa z5%cNa)AEaMjBgv%yES|tudE74hB>vhn&e zG+Mf6yhLIM2NvYn#bn_Cw~!ap&R{};$Gn1-+L`;G?$>DC!6qFh18{6)kHkmrIfacf zGjA6jB%qw=XEdi#DPBKd)a8p3cDIEzAKG{ALuwG8wFWWmpAtBsiD_r0ClrO1+S&WR z64M6KoEvZ*-YqIZr=uxG5BUatptW?2G(#ODm6La|GtG{dL}UL2BWfD;=T8+<8}7q9 zDKZG7<^tyH^VT#;vo)+@r&Ww@=R8|y+qhn8D#Y9nGo2=|*zo0!n~`#Qz7%xWlglZI z3Y)ffG#q>x(Mv}CDA~}}ta!-^AR3QZaWoCLy&D_*5vb@Ot!roTQ9FPaJ!;+1CdEcl3>;G=+ZWpW-{4YvlgSi3}}QT`IJy*5DzDBG#VEhJvB0sg@c zzLZnvaMhU$h1c2DX4}+gUrPZ}O`>fw+Ez@-26~~QlN`~#`8~Ffi{na@e1%iRwG>tC zILR70NW|^%ZUHpKE5LanKxVl>!YPmt3H$sjB4HtpBdL7EoE$=t(wT~;7{_E6o9FYc zFVUVz&}mdjdcyUkH#r7ZPH=5@%jsf`%jX;B%1Qk zD;S0A_N=nz0qLolvM=rb966#E;nDrK#r9ufdzaIR#NP5h$w#!wUZc$8Q{@PoS^GPc zd$njo6kRe+k8i?GG)FhEA&sv^I5uI6T7kEg&zJCO`@J3&alPMLs>-(L%NigJd$cbb z#|z`5*cqEg{tq?;HUn|hQ523HiD#@*88vYpxUM~*PMggc2f_1n^dv6rh8T84UAQ6sy2RAQD1GmQ?aqa zc&}dXUbqzG4K?%LM_q;HqL*Q_@BO^UoW;M9zdurAjMW%#RvG_Rk(%{8J@#ylzVf%x zH?Yenyk}d*){1Qv+bev}Hciw>^*xKa36f2cBz)?biojF^rXnyEfvE^gMPModQxW+8 zBLejIbUXbWEe#(0og@7vq91>580lE#Z;Q4DB4zFP+ebXFR5IqrPv>g{3z;9Bi0l*+$1}*@;4d}*q1^3~N zZ7JXrcJ!?yrm1RMao3BTuH0)7Xu5a%fY{DMd+;9UAmBEYSH&49-N4*{0o zmyrem>B0Fie{$|y&vN#>LvDfOHN&KlpVjMPDIX zd@Yuj`-(8)0hvxw?nD2@04yVLk>7JnAT(qrI1oyLE{;x7e%8OCI98viMa zzY+YGz`xnf4{|p5F9QAr@V$2a9>K2y?P2gsFxCUaUt8pUD7U((G5)A~M(}Hc z{NbBdl<>=L{89If(0+v;#ee66REY3nSi9*_Yxhxk8Hc))gZBOO(61KL^Ro2s3W2f` z3F%LX?T=K$ON5|eE5skKEXZ&$+Je*b7Xq+jmx+R+C#1v5?_Mb<#jN_Tk#r@8-z4Sj zgS(uBZ+$p^LJHs;EXC)V*uHQ)Ecy6tRgPQjkoNzdfo+*BmCOG2N?0f14hh>O?3A!a z!ebJikg!+6K?xHQj!MYz{XIQy2|W^)OX!ubPQo1$woBM4VUL8zBotOZ`e)$|A$vz< zOA79UtrURJ)eZ1Frn|8U!R7*!=1IxY`q4l6R!^O(AS z&Tc&qH{0ExQNF+$H|g@zm>MtX^yy5Et8{uHQ~8!ozl^CoO{ZVZ)ObjzUtx`#bUJ1c z)!#No9{%LWlaXG;PGsoEJmzA(8R>58zDApQmdA>jny1p~xS+smr-*VM`?z%&%3!i7ft&JN;_`3Z&2&}o3KOny)xexNv#7}?9kbiC(W`z=&Z2=&itDMkDqa&NcWj$%7^Pf zzfOpzecql${P~MA9FZdBx90L4P5OopYd5-nw@PJL>Z{S>)f$LVuUj z-Ry-@VS%4-qj(J_%uM+_pVQrJ$qhoDpP8drCFw~S2Y#jxdab0-lP^B}y9dzMXR*&3 z!jXLG!8$-Tbt)ZR%R$n8o`t0!eqkCCHsI48}p9LDr zR+KMaoLPvj&TR4d!?@3NgxUg;a7)AbK#<%{qt*J`Arfh6CB;@;p9&dPEAv&|b!SCwbtStu zuy1F`A8xEBU*%<@Uaz_(lYMs{O*%^s88_ zRk#qEx^U*FP&A3=KAn$aoZd}*25%FdHS^x=Bi#!MI2S{J#>8d@U%#U;3QH!B(&xnoFUf5b0tZ>6xy`(?@B zI=c0BZ7944U67;cII+NsXz9;4)sB|L9QM(o58};ZR!z4L0k3-z-9#Lt)&J8w!OH zaDN0toPtmp4xoG|ZVu)b=L$EKPZQVd`g}V(I%E``*XK@zW+`i%Ix z&LRIviXbH@h7@iEwqL=_$~yM7Mf^JfBVhrXRS8KK2)DDcU=y)fe6#khF0zoVIzHSP1&a4XiAJE1+2!&ESv@@pzU6n&q6`+z4w56E?);Ei_aaRr%Xm zU`(hZb66P`jy5a?Vln$OK53hUtpna^#G}q(6jbMslFemRnc%1KLuY?VU!B(|=mF3E z$m2STM6Wq^{Vmvs(WBt?0<}J|?591|!0h_!{6|4gnzZ=e2X@kCAh@n4r2JRss|u?6 z)%mK^e?RoEz>m^b=Sd0t{U!6NCsLpSNw6LMd1iy$MIvZ8` z>U>JU+oZ7aU&$$W0DL-YRk%9GQc!M(d5rD;OS7yS1?m%}ug<#^?3IG5erNk1mHKO> zoH|cd&?^m-KE=$b|2Symm$Hw|rFbNCp7c2L=W7mqkJM9;|1OI(Nx)&A{SSw}I*(IO z$tx2ISMY>GU!B`2*h!7EJxWi(AA@Iazd9dK@TKc)$|x#5MLp%vSLc8Vs_!wByfc13 zmHMjxnO90m_>M#saMu5GFvx$UKkgNh3SJVZ_35ntH{jUy)%l|Z<$R(HsQgj*>nPA! zo)S~%Kr3+4R--H{&%R;!$z}o4^(QeK06@RsGhvXRXwbfuZ?>9;K(^ z_&w05{g%Fur0}d0fHP&0fYMix{)8?~e}@#V6HwJ7sg}ONXF!>3sruD>om=XwdXzlX zWq*og{pEHd%1U3pZdzQWZ-**(EFl!Uvi^kpB8*<|=m<#pqvl`wUP}3nqV;(05ykCz Z-?KleUPYs0_DuQ*b_j{9910GU{a=xm);9nE literal 0 HcmV?d00001 diff --git a/sprite.o b/sprite.o new file mode 100644 index 0000000000000000000000000000000000000000..31f9dbafc463a4c18445a0b82a1f4a001a667c2b GIT binary patch literal 2648 zcmbtVO>7fK6n<+HaKVWeltU^av==Ih!q%y{fM~V(u`@`apd^keBx*L!wiN6*TCdfB z)E~(zVzff!21mGYM4YN#fKY+B<$wf-9#SbqmZ${C7ptn|zBfCAH=FgPebVfE?|XkU z@6Fgh=BD!rO#?+5d=6brp#U#;c4bS577Rc?v@!?&E-?NlYy4#}{(YPA`dh{eO@3-~ zlIJ#=qg~3}Xkt{LvRmxYMjzvAsJ59#tjTyH*0|ov9L{aFGJCC5Z~F$>)4lB? zUhi!e@q_X9r`8Z1x0i9aYrK9&BQLJMPP6Nu5l%;j)n|`YlV-6?L)fJz^G`MXlfyqh z^Df?pU&!m)6TW`1(}50O%vZ~0fT@Xzg8>8W$_!{Ly0$;PE47Lbg=&hr$Pd!P$qndN6BGSA zlfxRifPv5nTtsi^qwKjxGVup_fbcm_Hlzl9luzPH;6PXpqLMq{T_?_*jD5*;CUvT< zQAyE-tr%%Z(UmxS*LG0&)2X&o5%0y(AE<(4&w~MR3E=F+GKQL>TE1tc8+;and zK}oJtwoMOP0Oq3Y*3HR~)&M|Hljrr&dO9riB>M&2Uptmu(j|`s~L=y|!?L={5}!X(eE=2RX&6 z7bE^`Q2$8c(UMeC0sN;&^){3ym!&S*JRUmgQJ0*cl@hA?4SX;N>te=i)2 Hay0&5O?$VD literal 0 HcmV?d00001 diff --git a/tile.o b/tile.o new file mode 100644 index 0000000000000000000000000000000000000000..ab5577697d3b561c8f279c63aed45d60cd7d22fa GIT binary patch literal 1072 zcmbVL%}T>S5T11F?@4chmwHmcE{W8G9wbm|FCtzFy(TfJ*!+-ez+Utfd=wv{ujCWx z%yyS9yQ!c9Gqdx}d^7u#ypL{gI-UnwJh+Bcq)~uR0}Le`!Y=FpjEBRk-pM3xa?$iI z`GEWVppjAVcJ6b3z=P8zE?Hf)d#D?z1t%kMkn0jLO7GZ0q zF}W+3z+lq_5n;F^N5u0iQo>0p(56^R>Ugq+XkKGcz#OcI^mrTd4MzRVq$TdF|+|rcghdOZg8~v{0US lS_wK(IR0_Y-BIdZZM1EkqDr@q*1mg6Ocj4Bt5(K7{|^jnI4S@D literal 0 HcmV?d00001