20220827 - Feu de camp ajouté, cleanup du code.

This commit is contained in:
mibi88 2022-08-27 13:35:21 +02:00
parent 81a7e1113c
commit 0f125742e5
5 changed files with 130 additions and 63 deletions

Binary file not shown.

View File

@ -5,4 +5,4 @@
# define WORLD_HEIGHT 64 // World height.
# define INVENTORY_SIZE 5 // Size of the inventory.
# define CRAFTSIZE 9 // How many different blocks you can use to craft something.
# define CRAFTINGS 3 // How many things you can craft.
# define CRAFTINGS 4 // How many things you can craft.

View File

@ -31,6 +31,7 @@ extern bopti_image_t woodplanks_tile;
extern bopti_image_t woodsteps_1_tile;
extern bopti_image_t woodsteps_2_tile;
extern bopti_image_t woodstick_tile;
extern bopti_image_t fire_tile;
extern bopti_image_t skin1_player_left1;
extern bopti_image_t skin1_player_left2;
extern bopti_image_t skin1_player_right1;
@ -58,12 +59,36 @@ Player player;
Crafting crafting;
Tool hand;
Tool wood_pickaxe;
const int canbeplaced_lenght = 6;
const int canbeplaced[6] = {1, 2, 3, 4, 5, 6};
Destroy destroy;
const int canbeplaced_lenght = 7;
const int canbeplaced[7] = {1, 2, 3, 4, 5, 6, 8};
const int hasmenu_lenght = 1;
const int hasmenu[1] = {8};
void drawtile(int x, int y, int tilenum) {
switch(tilenum){
case 1:
dimage(x, y, &soil_tile); break;
case 2:
dimage(x, y, &stone_tile); break;
case 3:
dimage(x, y, &coal_tile); break;
case 4:
dimage(x, y, &steel_tile); break;
case 5:
dimage(x, y, &wood_tile); break;
case 6:
dimage(x, y, &woodplanks_tile); break;
case 7:
dimage(x, y, &pickaxe_tool); break;
case 8:
dimage(x, y, &fire_tile); break;
}
}
void drawoverlay() {
/*
Détails du calcul ci-dessous :
Calculation details :
x = x - 60
y = y - 24
ftx = x>>3
@ -144,6 +169,8 @@ void mappartdisplaying(int x, int y, unsigned short int * terrain, int player) {
dimage(px, py, &wood_tile); break;
case 6:
dimage(px, py, &woodplanks_tile); break;
case 8:
dimage(px, py, &fire_tile); break;
}
px += 8;
}
@ -208,22 +235,7 @@ void drawinventory(){
}else{
dimage(26+i*15, 49, &invnormal);
}
switch(player.inventoryitems[i]){
case 1:
dimage(26+i*15+3, 52, &soil_tile); break;
case 2:
dimage(26+i*15+3, 52, &stone_tile); break;
case 3:
dimage(26+i*15+3, 52, &coal_tile); break;
case 4:
dimage(26+i*15+3, 52, &steel_tile); break;
case 5:
dimage(26+i*15+3, 52, &wood_tile); break;
case 6:
dimage(26+i*15+3, 52, &woodplanks_tile); break;
case 7:
dimage(26+i*15+3, 52, &pickaxe_tool); break;
}
drawtile(26+i*15+3, 52, player.inventoryitems[i]);
}
}
void drawdetailinv(){
@ -231,22 +243,7 @@ void drawdetailinv(){
dtext(1, 1, C_BLACK, INV_INFO);
for(i=0;i!=INVENTORY_SIZE;i++){
pos = i*8+16;
switch(player.inventoryitems[i]){
case 1:
dimage(5, pos, &soil_tile); break;
case 2:
dimage(5, pos, &stone_tile); break;
case 3:
dimage(5, pos, &coal_tile); break;
case 4:
dimage(5, pos, &steel_tile); break;
case 5:
dimage(5, pos, &wood_tile); break;
case 6:
dimage(5, pos, &woodplanks_tile); break;
case 7:
dimage(5, pos, &pickaxe_tool); break;
}
drawtile(5, pos, player.inventoryitems[i]);
itoa(player.inventorynum[i], tmp_char);
dtext(20, pos, C_BLACK, tmp_char);
if(i == player.invselect){
@ -263,22 +260,7 @@ void drawcrafting(){
dimage(32, 0, &craftselection);
dimage(4, 28, &arrow_2);
dimage(116, 28, &arrow_1);
switch(craftingitem[crafting.selected]){
case 1:
dimage(36, 28, &soil_tile); break;
case 2:
dimage(36, 28, &stone_tile); break;
case 3:
dimage(36, 28, &coal_tile); break;
case 4:
dimage(36, 28, &steel_tile); break;
case 5:
dimage(36, 28, &wood_tile); break;
case 6:
dimage(36, 28, &woodplanks_tile); break;
case 7:
dimage(36, 28, &pickaxe_tool); break;
}
drawtile(36, 28, craftingitem[crafting.selected]);
dtext(36, 38, C_BLACK, MULTIPLY);
itoa(craftingnum[crafting.selected], tmp_char);
dtext(36, 44, C_BLACK, tmp_char);
@ -300,6 +282,8 @@ void drawcrafting(){
dtext(58, pos, C_BLACK, WOODPLANKS_TILE); break;
case 7:
dtext(58, pos, C_BLACK, WOODPICKAXE_TILE); break;
case 8:
dtext(58, pos, C_BLACK, FIRE_TILE); break;
}
itoa(craftingsnum[i], tmp_char);
dtext(46, pos, C_BLACK, tmp_char);
@ -309,6 +293,21 @@ void drawcrafting(){
}
dfont(dfont_default());
}
void drawdestroy() {
int i;
dtext(1, 1, C_BLACK, DESTROY_INFO);
for(i=0;i!=INVENTORY_SIZE;i++){
pos = i*8+16;
drawtile(5, pos, player.inventoryitems[i]);
itoa(player.inventorynum[i], tmp_char);
dtext(20, pos, C_BLACK, tmp_char);
if(i == destroy.selected){
dtext(60, pos, C_BLACK, SELECTED);
}
}
}
bool is_in(int item, int* array, int len){
for(int i=0;i!=len;i++){
if(array[i] == item){
@ -323,24 +322,25 @@ int main(void) {
hand.easy_lenght = 1;
hand.middle_lenght = 1;
hand.hard_lenght = 1;
hand.very_hard_lenght = 1;
hand.very_hard_lenght = 2;
hand.breakable_middle = NULL;
hand.breakable_hard = NULL;
hand.breakable_very_hard = NULL;
hand.breakable_middle = malloc(sizeof(int));
hand.breakable_hard = malloc(sizeof(int));
hand.breakable_very_hard = malloc(sizeof(int));
hand.breakable_very_hard = malloc(hand.very_hard_lenght*sizeof(int));
if(hand.breakable_middle == NULL || hand.breakable_hard == NULL || hand.breakable_very_hard == NULL){
ERROR("Need more ram !", 2)
}
hand.breakable_middle[0] = 1;
hand.breakable_hard[0] = 6;
hand.breakable_very_hard[0] = 5;
hand.breakable_very_hard[1] = 8;
hand.attack = 1;
// Wooden pickaxe
wood_pickaxe.easy_lenght = 1;
wood_pickaxe.middle_lenght = 1;
wood_pickaxe.hard_lenght = 2;
wood_pickaxe.hard_lenght = 3;
wood_pickaxe.very_hard_lenght = 3;
wood_pickaxe.breakable_middle = NULL;
wood_pickaxe.breakable_hard = NULL;
@ -354,6 +354,7 @@ int main(void) {
wood_pickaxe.breakable_middle[0] = 1;
wood_pickaxe.breakable_hard[0] = 6;
wood_pickaxe.breakable_hard[1] = 2;
wood_pickaxe.breakable_hard[2] = 8;
wood_pickaxe.breakable_very_hard[0] = 5;
wood_pickaxe.breakable_very_hard[1] = 3;
wood_pickaxe.breakable_very_hard[2] = 4;
@ -542,11 +543,27 @@ int main(void) {
player.is_breakable = 0;
}
clearevents();
if (keydown(KEY_EXE) && terrain[pos] == 0 && player.inventorynum[player.invselect] != 0 && is_in(player.inventoryitems[player.invselect], (int*)canbeplaced, canbeplaced_lenght)){
terrain[pos] = player.inventoryitems[player.invselect];
player.inventorynum[player.invselect]--;
if(player.inventorynum[player.invselect] == 0) {
player.inventoryitems[player.invselect] = 0;
if (keydown(KEY_EXE)){
int placed = 0;
if(terrain[pos] == 0 && player.inventorynum[player.invselect] != 0 && is_in(player.inventoryitems[player.invselect], (int*)canbeplaced, canbeplaced_lenght)){
placed = player.inventoryitems[player.invselect];
terrain[pos] = player.inventoryitems[player.invselect];
player.inventorynum[player.invselect]--;
if(player.inventorynum[player.invselect] == 0) {
player.inventoryitems[player.invselect] = 0;
}
if(is_in(placed, (int*)hasmenu, hasmenu_lenght)){
clearevents();
while(keydown(KEY_EXE)){
clearevents();
}
}
}else if(terrain[pos] == 8){
game = 6;
clearevents();
while(keydown(KEY_EXE)){
clearevents();
}
}
}else if (keydown(KEY_1) && terrain[pos] != 0 && player.is_breakable && 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++){
@ -784,6 +801,45 @@ int main(void) {
clearevents();
}
}
}else if(game == 6){
dclear(C_WHITE);
drawdestroy();
clearevents();
if(keydown(KEY_EXE)){
game = 3;
clearevents();
while(keydown(KEY_EXE)){
clearevents();
}
}
if(keydown(KEY_SHIFT) && player.inventorynum[destroy.selected] > 0 && player.inventoryitems[destroy.selected] != 0){
player.inventorynum[destroy.selected]--;
if(player.inventorynum[destroy.selected] == 0){
player.inventoryitems[destroy.selected] = 0;
}
clearevents();
while(keydown(KEY_SHIFT)){
clearevents();
}
}else if(keydown(KEY_DEL)){
player.inventoryitems[destroy.selected] = 0;
player.inventorynum[destroy.selected] = 0;
clearevents();
while(keydown(KEY_DEL)){
clearevents();
}
}else if (keydown(KEY_0)){
if(destroy.selected<INVENTORY_SIZE-1){
destroy.selected++;
}else{
destroy.selected = 0;
}
clearevents();
while(keydown(KEY_0)){
clearevents();
}
}
dupdate();
}
clearevents();
}

View File

@ -4,6 +4,7 @@
# define SELECTED "<" // Selected block info.
# define MOVING "M" // Moving block info.
# define INV_INFO "INVENTAIRE & CRAFTING"
# define DESTROY_INFO "INCINERATION"
# define SOIL_TILE "Terre"
# define STONE_TILE "Pierre"
# define COAL_TILE "Charbon"
@ -11,6 +12,7 @@
# define WOOD_TILE "Bois"
# define WOODPLANKS_TILE "Planche"
# define WOODPICKAXE_TILE "B. pio."
# define FIRE_TILE "F. camp"
# define MULTIPLY "x"
# define ITEM_BUILT "Item construit."
# define ITEM_NOT_BUILT "Peut pas construire."

View File

@ -40,6 +40,11 @@ struct Player{
Tool tool;
};
typedef struct Destroy Destroy;
struct Destroy{
int selected;
};
typedef struct Crafting Crafting;
struct Crafting{
int selected;
@ -50,20 +55,24 @@ struct Crafting{
const int craftingsitems[CRAFTINGS*CRAFTSIZE] = {
5, 0, 0, 0, 0, 0, 0, 0, 0,
6, 0, 0, 0, 0, 0, 0, 0, 0,
6, 0, 0, 0, 0, 0, 0, 0, 0
6, 0, 0, 0, 0, 0, 0, 0, 0,
6, 2, 3, 0, 0, 0, 0, 0, 0
};
const int craftingsnum[CRAFTINGS*CRAFTSIZE] = {
1, 0, 0, 0, 0, 0, 0, 0, 0,
4, 0, 0, 0, 0, 0, 0, 0, 0,
5, 0, 0, 0, 0, 0, 0, 0, 0
5, 0, 0, 0, 0, 0, 0, 0, 0,
5, 1, 1, 0, 0, 0, 0, 0, 0
};
const int craftingitem[CRAFTINGS] = {
6,
5,
7
7,
8
};
const int craftingnum[CRAFTINGS] = {
4,
1,
1,
1
};