20220827 - Feu de camp ajouté, cleanup du code.
This commit is contained in:
parent
81a7e1113c
commit
0f125742e5
Binary file not shown.
|
@ -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.
|
174
src/main.c
174
src/main.c
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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."
|
||||
|
|
|
@ -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
|
||||
};
|
Loading…
Reference in New Issue