diff --git a/CMakeLists.txt b/CMakeLists.txt index 91a77e2..9a81312 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -28,6 +28,10 @@ set(ASSETS_fx assets-fx/tools/selectcross.png assets-fx/ui_icons/invnormal.png assets-fx/ui_icons/invselected.png + assets-fx/tiles/overlays/block_break1.png + assets-fx/tiles/overlays/block_break2.png + assets-fx/tiles/overlays/block_break3.png + assets-fx/tiles/overlays/block_break4.png # ... ) fxconv_declare_assets(${ASSETS} ${ASSETS_fx} ${ASSETS_cg} WITH_METADATA) diff --git a/assets-fx/tiles/overlays/block_break1.png b/assets-fx/tiles/overlays/block_break1.png new file mode 100644 index 0000000..2f0b87c Binary files /dev/null and b/assets-fx/tiles/overlays/block_break1.png differ diff --git a/assets-fx/tiles/overlays/block_break2.png b/assets-fx/tiles/overlays/block_break2.png new file mode 100644 index 0000000..c0378fc Binary files /dev/null and b/assets-fx/tiles/overlays/block_break2.png differ diff --git a/assets-fx/tiles/overlays/block_break3.png b/assets-fx/tiles/overlays/block_break3.png new file mode 100644 index 0000000..ba690cc Binary files /dev/null and b/assets-fx/tiles/overlays/block_break3.png differ diff --git a/assets-fx/tiles/overlays/block_break4.png b/assets-fx/tiles/overlays/block_break4.png new file mode 100644 index 0000000..f770fd6 Binary files /dev/null and b/assets-fx/tiles/overlays/block_break4.png differ diff --git a/assets-fx/tiles/overlays/fxconv-metadata.txt b/assets-fx/tiles/overlays/fxconv-metadata.txt new file mode 100644 index 0000000..07902ee --- /dev/null +++ b/assets-fx/tiles/overlays/fxconv-metadata.txt @@ -0,0 +1,12 @@ +block_break1.png: + type: bopti-image + name: overlay_break_1 +block_break2.png: + type: bopti-image + name: overlay_break_2 +block_break3.png: + type: bopti-image + name: overlay_break_3 +block_break4.png: + type: bopti-image + name: overlay_break_4 diff --git a/latest-build/Builder.g1a b/latest-build/Builder.g1a index d4f4d52..a14376f 100644 Binary files a/latest-build/Builder.g1a and b/latest-build/Builder.g1a differ diff --git a/src/main.c b/src/main.c index effcb50..9d2060e 100644 --- a/src/main.c +++ b/src/main.c @@ -3,7 +3,7 @@ # include # include # include -#include +# include # include "msg_fr.h" # include "itemsizes.h" # include "gamesettings.h" @@ -24,6 +24,10 @@ extern bopti_image_t skin1_player_right2; extern bopti_image_t select_tool; extern bopti_image_t invnormal; extern bopti_image_t invselected; +extern bopti_image_t overlay_break_1; +extern bopti_image_t overlay_break_2; +extern bopti_image_t overlay_break_3; +extern bopti_image_t overlay_break_4; # include "player.h" @@ -31,6 +35,33 @@ extern bopti_image_t invselected; int pos, hour; char tmp_char[2]; +Player player; + +void drawoverlay() { + /* + Détails du calcul ci-dessous : + x = x - 60 + y = y - 24 + ftx = x>>3 + fty = y>>3 + sx = ftx*8-x + sy = fty*8-y + rx = sx+(tx-ftx)*8 + ry = sy+(ty-fty)*8 + */ + int rx = (((player.x-60)>>3)*8-(player.x-60))+(player.select_tx-((player.x-60)>>3))*8; + int ry = (((player.y-24)>>3)*8-(player.y-24))+(player.select_ty-((player.y-24)>>3))*8; + switch(player.overlayframe){ + case 1: + dimage(rx, ry, &overlay_break_1);break; + case 2: + dimage(rx, ry, &overlay_break_2);break; + case 3: + dimage(rx, ry, &overlay_break_3);break; + case 4: + dimage(rx, ry, &overlay_break_4);break; + } +} void drawselectedgame(int selected) { dclear(C_WHITE); // dimage(16, 8, &title_img); @@ -57,7 +88,9 @@ void addtrees(unsigned short int * terrain){ break; } } - addtree(pos, terrain, n); + if(n != (player.x>>3)){ + addtree(pos, terrain, n); + } } } } @@ -141,7 +174,6 @@ int collisiononmap(int x, int y, unsigned short int * terrain, int testx, int te } return 0; } -Player player; void drawinventory(){ int i; for(i=0;i!=5;i++){ @@ -166,8 +198,9 @@ void drawinventory(){ } void drawdetailinv(){ int i; + dtext(1, 1, C_BLACK, INV_INFO); for(i=0;i!=INVENTORY_SIZE;i++){ - pos = i*8; + pos = i*8+16; switch(player.inventoryitems[i]){ case 1: dimage(5, pos, &soil_tile); break; @@ -255,6 +288,12 @@ int main(void) { player.jumping = 0; player.jumpheight = 0; player.falling = 0; + player.overlayframe = 0; + player.overlaytimer = 0; + player.wasdestroyingbefore = 0; + player.destroytime = 3; + player.select_tx = 0; + player.select_ty = 0; for(i=0;i!=INVENTORY_SIZE;i++){ player.inventoryitems[i] = 0; player.inventorynum[i] = 0; @@ -338,7 +377,7 @@ int main(void) { if(player.inventorynum[player.invselect] == 0) { player.inventoryitems[player.invselect] = 0; } - }else if (keydown(KEY_1) && terrain[pos] != 0){ + }else if (keydown(KEY_1) && terrain[pos] != 0 && player.overlaytimer == player.destroytime && player.overlayframe == 4 && (player.select_tx == player.old_select_tx && player.select_ty == player.old_select_ty)){ for(i=0;i!=INVENTORY_SIZE;i++){ if((terrain[pos] == player.inventoryitems[i] && player.inventorynum[i] < 64 && terrain[pos] != 0) || (player.inventoryitems[i] == 0 && player.inventorynum[i] == 0 && terrain[pos] != 0)) { player.inventoryitems[i] = terrain[pos]; @@ -347,8 +386,26 @@ int main(void) { break; } } + player.overlayframe = 0; + player.overlaytimer = 0; + player.wasdestroyingbefore = 0; + }else if (keydown(KEY_1) && terrain[pos] != 0 && (player.select_tx == player.old_select_tx && player.select_ty == player.old_select_ty)){ + if(player.overlaytimer == player.destroytime){ + player.overlaytimer = 0; + player.overlayframe++; + } + player.overlaytimer++; + if(player.wasdestroyingbefore == 0){ + player.wasdestroyingbefore = 1; + } + }else if(player.wasdestroyingbefore == 1 && keydown(KEY_1) == 0){ + player.overlayframe = 0; + player.overlaytimer = 0; + player.wasdestroyingbefore = 0; } } + player.select_tx = ((player.x+player.selx)>>3); + player.select_ty = ((player.y+player.sely)>>3); clearevents(); if (keydown(KEY_0)){ if(player.invselect