2020-11-11 12:03:55 +01:00
|
|
|
extern "C"{
|
|
|
|
#include <gint/display.h>
|
|
|
|
#include <gint/keyboard.h>
|
2020-11-28 13:48:52 +01:00
|
|
|
//#include <gint/std/string.h>
|
2020-11-11 12:03:55 +01:00
|
|
|
}
|
2020-12-06 09:29:56 +01:00
|
|
|
#define MAP_X 250
|
2020-11-30 13:07:18 +01:00
|
|
|
#define BLOCKS_LEN 17
|
2020-12-13 14:38:56 +01:00
|
|
|
#define CRAFTS 2
|
2020-11-28 13:48:52 +01:00
|
|
|
using namespace std;
|
|
|
|
|
2020-11-12 07:36:37 +01:00
|
|
|
int sx = 0;
|
2020-11-28 14:14:20 +01:00
|
|
|
int x = 100;
|
2020-11-15 09:56:44 +01:00
|
|
|
int y = 30;
|
2020-11-11 12:26:45 +01:00
|
|
|
extern bopti_image_t img_tilemap;
|
2020-12-13 14:38:56 +01:00
|
|
|
extern bopti_image_t img_craft;
|
2020-12-02 15:30:14 +01:00
|
|
|
int8_t game_map[MAP_X+1][7] = {0};
|
2020-11-12 13:09:45 +01:00
|
|
|
int opt = GETKEY_DEFAULT | GETKEY_REP_ARROWS | GETKEY_MENU;
|
|
|
|
int optd = GETKEY_DEFAULT | GETKEY_MENU;
|
|
|
|
int timeout = 1;
|
|
|
|
int key;
|
2020-11-15 09:56:44 +01:00
|
|
|
int rwalk =0;
|
|
|
|
int can_move = 1;
|
|
|
|
int dir = 1;
|
|
|
|
int vdir;
|
2020-11-28 17:51:32 +01:00
|
|
|
int sele = 2;
|
|
|
|
int vas = 0;
|
2020-11-29 12:08:02 +01:00
|
|
|
int sinv = 3;
|
2020-11-30 13:07:18 +01:00
|
|
|
int inv[BLOCKS_LEN+1] = {0};
|
|
|
|
int btmp = sinv;
|
2020-12-01 17:03:20 +01:00
|
|
|
int selecoll = 0;
|
2020-12-13 14:38:56 +01:00
|
|
|
int rockminer_interval;
|
|
|
|
int craftdata[][6] = {{5,1,4,2,15,1},{3,2,15,4,0,0}};
|
|
|
|
int s = 0;
|
2020-11-11 12:26:45 +01:00
|
|
|
|
2020-11-28 14:14:20 +01:00
|
|
|
int isCollide(int num){
|
|
|
|
if(num==0){return 1;}
|
|
|
|
else if(num==3){return 1;}
|
|
|
|
else if(num==14){return 1;}
|
|
|
|
else if(num==15){return 1;}
|
|
|
|
else if(num==16){return 1;}
|
|
|
|
else{return 0;}
|
|
|
|
}
|
|
|
|
|
2020-11-18 22:23:29 +01:00
|
|
|
int isMultipleof5 (int n)
|
|
|
|
{
|
|
|
|
while ( n > 0 )
|
|
|
|
n = n - 5;
|
|
|
|
|
|
|
|
if ( n == 0 )
|
|
|
|
return 1;
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
2020-11-28 13:48:52 +01:00
|
|
|
|
|
|
|
void PrintSblock(int num,int x,int y){
|
|
|
|
dsubimage(x*10, y*10+4 ,&img_tilemap,num*10,10,10, 10, DIMAGE_NONE);
|
|
|
|
}
|
|
|
|
|
2020-11-11 12:26:45 +01:00
|
|
|
void PrintMap(){
|
|
|
|
int cx = MAP_X;
|
|
|
|
int cy = 6;
|
2020-11-30 13:07:18 +01:00
|
|
|
dsubimage(116, 0 ,&img_tilemap,sinv*10,0,10, 10, DIMAGE_NONE);
|
|
|
|
dhline(12,C_BLACK);
|
|
|
|
dprint(96, 0, C_BLACK, "%d", inv[sinv]);
|
2020-11-11 12:26:45 +01:00
|
|
|
while(cx>0){
|
|
|
|
cy = 6;
|
|
|
|
while(cy>0){
|
2020-11-12 07:44:04 +01:00
|
|
|
dsubimage(cx*10-sx, cy*10+4 ,&img_tilemap,game_map[cx][cy]*10,0,10, 10, DIMAGE_NONE);
|
2020-11-28 13:48:52 +01:00
|
|
|
/*if(game_map[cx][cy]==2&&game_map[cx][cy]>1&&game_map[cx][cy]<MAP_X){
|
|
|
|
if(game_map[cx-1][cy]==2&&game_map[cx+1][cy]==2){PrintSblock(4,cx,cy);}
|
|
|
|
if(game_map[cx-1][cy]!=2&&game_map[cx+1][cy]==2){PrintSblock(3,cx,cy);}
|
|
|
|
if(game_map[cx-1][cy]==2&&game_map[cx+1][cy]!=2){PrintSblock(5,cx,cy);}
|
|
|
|
}*/
|
2020-11-11 12:26:45 +01:00
|
|
|
cy--;
|
|
|
|
}
|
|
|
|
cx--;
|
|
|
|
}
|
2020-11-30 13:07:18 +01:00
|
|
|
if(dir==0){dsubimage(x-sx, y+4 ,&img_tilemap,5*10,20,10, 10, DIMAGE_NONE);}
|
|
|
|
if(dir==1){dsubimage(x-sx, y+4 ,&img_tilemap,4*10,20,10, 10, DIMAGE_NONE);}
|
2020-11-29 12:37:00 +01:00
|
|
|
if(vas==0&& (keydown(KEY_VARS) || keydown(KEY_SQUARE))){
|
2020-11-28 17:51:32 +01:00
|
|
|
if(sele==1){dsubimage(x+10-sx, y+4 ,&img_tilemap,0,20,10, 10, DIMAGE_NONE);}
|
|
|
|
if(sele==2){dsubimage(x-sx, y+4+10 ,&img_tilemap,0,20,10, 10, DIMAGE_NONE);}
|
|
|
|
if(sele==3){dsubimage(x-10-sx, y+4 ,&img_tilemap,0,20,10, 10, DIMAGE_NONE);}
|
|
|
|
if(sele==0){dsubimage(x-sx, y+4-10 ,&img_tilemap,0,20,10, 10, DIMAGE_NONE);}
|
|
|
|
}
|
|
|
|
if(vas==1){
|
|
|
|
if(sele==1){dsubimage(x+10-sx, y+4 ,&img_tilemap,10,20,10, 10, DIMAGE_NONE);}
|
|
|
|
if(sele==2){dsubimage(x-sx, y+4+10 ,&img_tilemap,10,20,10, 10, DIMAGE_NONE);}
|
|
|
|
if(sele==3){dsubimage(x-10-sx, y+4 ,&img_tilemap,10,20,10, 10, DIMAGE_NONE);}
|
|
|
|
if(sele==0){dsubimage(x-sx, y+4-10 ,&img_tilemap,10,20,10, 10, DIMAGE_NONE);}
|
|
|
|
}
|
2020-11-11 12:26:45 +01:00
|
|
|
}
|
2020-11-11 12:00:40 +01:00
|
|
|
|
2020-12-13 14:38:56 +01:00
|
|
|
int craft(int item){
|
|
|
|
if(craftdata[item][3]<=inv[craftdata[item][2]] && craftdata[item][5]<=inv[craftdata[item][4]]){
|
|
|
|
inv[craftdata[item][2]] = inv[craftdata[item][2]] - craftdata[item][3];
|
|
|
|
inv[craftdata[item][4]] = inv[craftdata[item][4]] - craftdata[item][5];
|
|
|
|
inv[craftdata[item][0]] = inv[craftdata[item][0]] + craftdata[item][1];
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
else{
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void craftmenu(){
|
|
|
|
int s = 0;
|
|
|
|
while(1){
|
|
|
|
dclear(C_WHITE);
|
|
|
|
for(int i=0;i<CRAFTS;i++) {
|
|
|
|
dsubimage(0,i*16,&img_craft,0,0,128,16,DIMAGE_NONE); // template
|
|
|
|
if(s==i){dsubimage(1,i*16+3,&img_tilemap,21,21,8,8,DIMAGE_NONE);} //if select
|
|
|
|
dsubimage(13,i*16+3,&img_tilemap,craftdata[i][0]*10,0,10,10,DIMAGE_NONE); //block to craft
|
|
|
|
dprint(25, i*16+4, C_BLACK, "%d",craftdata[i][1]);
|
|
|
|
dsubimage(75,i*16+3,&img_tilemap,craftdata[i][2]*10,0,10,10,DIMAGE_NONE);
|
|
|
|
dprint(88, i*16+4, C_BLACK, "%d",craftdata[i][3]);
|
|
|
|
dsubimage(95,i*16+3,&img_tilemap,craftdata[i][4]*10,0,10,10,DIMAGE_NONE);
|
|
|
|
dprint(108, i*16+4, C_BLACK, "%d",craftdata[i][5]);
|
|
|
|
}
|
|
|
|
key = getkey_opt(opt, &timeout).key;
|
|
|
|
if(key==KEY_EXIT){break;}
|
|
|
|
if(key==KEY_OPTN){if(craft(s)){break;}}
|
|
|
|
if(key==KEY_DOWN&&s<CRAFTS-1){s++;}
|
|
|
|
if(key==KEY_UP&&s>0){s--;}
|
|
|
|
dupdate();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-11-11 12:00:40 +01:00
|
|
|
int main(void)
|
|
|
|
{
|
2020-11-28 13:48:52 +01:00
|
|
|
int i = 10;
|
|
|
|
while(i<MAP_X-10){
|
2020-11-12 07:36:37 +01:00
|
|
|
game_map[i][5] = 1;
|
|
|
|
game_map[i][4] = 2;
|
|
|
|
i++;
|
2020-11-28 14:14:20 +01:00
|
|
|
if(i>10 && i<MAP_X-10 && isMultipleof5(i) == 1){
|
2020-11-18 22:23:29 +01:00
|
|
|
game_map[i][3] = 15;
|
2020-11-19 07:29:33 +01:00
|
|
|
game_map[i][2] = 15;
|
|
|
|
game_map[i][1] = 15;
|
|
|
|
game_map[i][0] = 17;
|
|
|
|
game_map[i-1][0] = 17;
|
|
|
|
game_map[i+1][0] = 17;
|
|
|
|
game_map[i-1][1] = 17;
|
|
|
|
game_map[i+1][1] = 17;
|
|
|
|
game_map[i-2][1] = 17;
|
|
|
|
game_map[i+2][1] = 17;
|
2020-12-06 09:29:56 +01:00
|
|
|
game_map[i+1][3] = 4;
|
2020-11-18 22:23:29 +01:00
|
|
|
}
|
2020-11-11 12:00:40 +01:00
|
|
|
}
|
2020-11-18 22:23:29 +01:00
|
|
|
game_map[5][3] = 9;
|
|
|
|
game_map[6][3] = 10;
|
|
|
|
game_map[7][3] = 11;
|
2020-11-30 13:07:18 +01:00
|
|
|
inv[3] = 15;
|
|
|
|
inv[13] = 10;
|
|
|
|
inv[17] = 5;
|
2020-11-12 13:09:45 +01:00
|
|
|
while(1==1){
|
2020-11-28 17:51:32 +01:00
|
|
|
if(keydown(KEY_OPTN)){vas=1;}else{vas=0;}
|
2020-11-15 09:56:44 +01:00
|
|
|
sx = x-60;
|
2020-11-12 13:09:45 +01:00
|
|
|
dclear(C_WHITE);
|
2020-11-28 14:14:20 +01:00
|
|
|
//dtext(12, 1, C_BLACK, "item");
|
2020-11-12 13:09:45 +01:00
|
|
|
PrintMap();
|
|
|
|
dupdate();
|
|
|
|
key = getkey_opt(opt, &timeout).key;
|
2020-12-01 17:03:20 +01:00
|
|
|
if(keydown(KEY_VARS)==0&&can_move == 1 &&( isCollide(game_map[x/10][y/10+1]) == 0 || game_map[x/10][y/10+1]==3)){
|
2020-11-28 14:14:20 +01:00
|
|
|
if(keydown(KEY_RIGHT)&&isCollide(game_map[x/10+1][y/10])){rwalk = 10;can_move=0;dir=1;vdir=1;}
|
2020-12-01 17:03:20 +01:00
|
|
|
if(keydown(KEY_UP)&&game_map[x/10][y/10]==3){rwalk = 10;can_move=0;vdir=0;}
|
2020-11-28 14:14:20 +01:00
|
|
|
if(keydown(KEY_LEFT)&&isCollide(game_map[x/10-1][y/10])){rwalk = 10;can_move=0;dir=0;vdir=3;}
|
2020-12-01 17:03:20 +01:00
|
|
|
if(keydown(KEY_DOWN)&&game_map[x/10][y/10+1]==3){rwalk = 10;can_move=0;vdir=2;}
|
2020-11-15 09:56:44 +01:00
|
|
|
}
|
2020-11-28 17:51:32 +01:00
|
|
|
if(keydown(KEY_VARS)){
|
|
|
|
if(keydown(KEY_RIGHT)){sele=1;}
|
|
|
|
if(keydown(KEY_DOWN)){sele=2;}
|
|
|
|
if(keydown(KEY_LEFT)){sele=3;}
|
|
|
|
if(keydown(KEY_UP)){sele=0;}
|
|
|
|
}
|
2020-12-02 15:30:14 +01:00
|
|
|
if(can_move ==1 && keydown(KEY_OPTN)&& inv[sinv] > 0){
|
2020-12-06 09:29:56 +01:00
|
|
|
|
|
|
|
if(sele==1&&game_map[x/10+1][y/10]==0){game_map[x/10+1][y/10]=sinv;inv[sinv]--;}
|
|
|
|
if(sele==2&&game_map[x/10][y/10+1]==0){game_map[x/10][y/10+1]=sinv;inv[sinv]--;}
|
|
|
|
if(sele==3&&game_map[x/10-1][y/10]==0){game_map[x/10-1][y/10]=sinv;inv[sinv]--;}
|
|
|
|
if(sele==0&&game_map[x/10][y/10-1]==0){game_map[x/10][y/10-1]=sinv;inv[sinv]--;}
|
2020-11-29 12:37:00 +01:00
|
|
|
}
|
|
|
|
if(can_move ==1 && keydown(KEY_SQUARE)){
|
2020-12-06 09:29:56 +01:00
|
|
|
if(sele==1){inv[game_map[x/10+1][y/10]]++;game_map[x/10+1][y/10]=0;}
|
|
|
|
if(sele==2){inv[game_map[x/10][y/10+1]]++;game_map[x/10][y/10+1]=0;}
|
|
|
|
if(sele==3){inv[game_map[x/10-1][y/10]]++;game_map[x/10-1][y/10]=0;}
|
|
|
|
if(sele==0){inv[game_map[x/10][y/10-1]]++;game_map[x/10][y/10-1]=0;}
|
2020-11-29 12:37:00 +01:00
|
|
|
}
|
2020-12-01 17:03:20 +01:00
|
|
|
if(selecoll>0){selecoll--;}
|
|
|
|
if(keydown(KEY_F6)&&selecoll==0){
|
2020-12-02 15:30:14 +01:00
|
|
|
if(sinv==BLOCKS_LEN+1){sinv=1;}
|
2020-11-30 13:07:18 +01:00
|
|
|
sinv++;
|
2020-12-13 14:38:56 +01:00
|
|
|
selecoll = 30;
|
2020-12-01 17:27:23 +01:00
|
|
|
}
|
|
|
|
if(keydown(KEY_F5)&&selecoll==0){
|
2020-12-13 14:38:56 +01:00
|
|
|
if(sinv==1){sinv=BLOCKS_LEN+1;}
|
2020-12-02 15:32:40 +01:00
|
|
|
sinv--;
|
2020-12-13 14:38:56 +01:00
|
|
|
selecoll = 30;
|
|
|
|
}
|
|
|
|
if(keydown(KEY_F1)){
|
|
|
|
craftmenu();
|
2020-11-30 13:07:18 +01:00
|
|
|
}
|
2020-11-19 08:01:00 +01:00
|
|
|
if(can_move == 1 && game_map[x/10][y/10+1] == 0){
|
2020-11-15 09:56:44 +01:00
|
|
|
can_move = 0;
|
|
|
|
rwalk=10;
|
|
|
|
vdir=2;
|
|
|
|
}
|
|
|
|
if(can_move==0&&rwalk>0){
|
|
|
|
rwalk--;
|
|
|
|
if(vdir==1){x++;}
|
|
|
|
if(vdir==2){y++;}
|
|
|
|
if(vdir==3){x--;}
|
2020-12-01 17:03:20 +01:00
|
|
|
if(vdir==0){y--;}
|
2020-11-15 09:56:44 +01:00
|
|
|
if(rwalk==0){can_move = 1;}
|
|
|
|
}
|
2020-11-12 13:09:45 +01:00
|
|
|
}
|
2020-11-11 12:00:40 +01:00
|
|
|
getkey();
|
|
|
|
return 1;
|
|
|
|
}
|