diff --git a/programs/cmm/the_bus/compile.bat b/programs/cmm/the_bus/compile.bat deleted file mode 100644 index 4d6f907200..0000000000 --- a/programs/cmm/the_bus/compile.bat +++ /dev/null @@ -1,5 +0,0 @@ -@del the_bus -@c-- the_bus.c -@rename the_bus.com the_bus -@del warning.txt -@pause \ No newline at end of file diff --git a/programs/cmm/the_bus/compile_en.bat b/programs/cmm/the_bus/compile_en.bat new file mode 100644 index 0000000000..448947680b --- /dev/null +++ b/programs/cmm/the_bus/compile_en.bat @@ -0,0 +1,10 @@ +@del lang.h-- +@echo #define LANG_ENG 1 >lang.h-- + +@del the_bus +@cls +@c-- the_bus.c +@pause +@rename the_bus.com the_bus +@del warning.txt +@del lang.h-- diff --git a/programs/cmm/the_bus/compile_ru.bat b/programs/cmm/the_bus/compile_ru.bat new file mode 100644 index 0000000000..42cac61727 --- /dev/null +++ b/programs/cmm/the_bus/compile_ru.bat @@ -0,0 +1,10 @@ +@del lang.h-- +@echo #define LANG_RUS 1 >lang.h-- + +@del the_bus +@cls +@c-- the_bus.c +@pause +@rename the_bus.com the_bus +@del warning.txt +@del lang.h-- diff --git a/programs/cmm/the_bus/draw_scalled.h b/programs/cmm/the_bus/draw_scalled.h deleted file mode 100644 index 11ef8be217..0000000000 --- a/programs/cmm/the_bus/draw_scalled.h +++ /dev/null @@ -1,29 +0,0 @@ -void DrawScaledBar(dword x,y,w,h,col) { - DrawBar( - x*SCALE, - y*SCALE, - w*SCALE, - h*SCALE, - col - ); -} -void DrawScaledImage(dword image_pointer,x,y,w,h,offx,offy) { - img_draw stdcall ( - image_pointer, - x*SCALE, - y*SCALE, - w*SCALE, - h*SCALE, - offx*SCALE, - offy*SCALE - ); -} -void WriteScaledText(dword x,y,font,color,text) { - WriteText( - x*SCALE, - y*SCALE, - font + SCALE, - color, - text - ); -} \ No newline at end of file diff --git a/programs/cmm/the_bus/objects.png b/programs/cmm/the_bus/objects.png index e96b60862d..782f89c908 100644 Binary files a/programs/cmm/the_bus/objects.png and b/programs/cmm/the_bus/objects.png differ diff --git a/programs/cmm/the_bus/road.png b/programs/cmm/the_bus/road.png index b5ce1bd3ad..b995b9c3c8 100644 Binary files a/programs/cmm/the_bus/road.png and b/programs/cmm/the_bus/road.png differ diff --git a/programs/cmm/the_bus/the_bus.c b/programs/cmm/the_bus/the_bus.c index 1ae7ca8d38..c4f42ac02f 100644 --- a/programs/cmm/the_bus/the_bus.c +++ b/programs/cmm/the_bus/the_bus.c @@ -6,6 +6,10 @@ D O N K E Y Copyright (C) 2008 O.Bogomaz */ +#ifndef AUTOBUILD +#include "lang.h--" +#endif + #define MEMSIZE 1024 * 60; #include "..\lib\kolibri.h" @@ -15,18 +19,14 @@ Copyright (C) 2008 O.Bogomaz #include "..\lib\obj\libimg_lib.h" #include "..\lib\patterns\libimg_load_skin.h" -#define SCALE 2 - -#include "draw_scalled.h" - libimg_image menu; libimg_image road; libimg_image objects; int lives=0, level=0, score=0; -int don_x, don_y, don_h, don_w=39, don_type, don_image_y; -int don_h_mas[8] = { 18,36,18,37,12,32,24,37 }; -int bus_x, bus_w=21, bus_y=145, bus_h=44; +int don_x, don_y, don_h, don_w=68, don_type, don_image_y, don_step_y, don_step_y_default=3; +int don_h_mas[8] = { 36,72,36,74,24,64,48,74 }; +int bus_x, bus_w=42, bus_y, bus_h=88, bus_y_default=290; #define SCR_MENU_MAIN 1 #define SCR_GAME 2 @@ -34,8 +34,8 @@ int bus_x, bus_w=21, bus_y=145, bus_h=44; #define RAND -1 -#define WIN_X 258 -#define WIN_Y 191 +#define WIN_X 516 +#define WIN_Y 382 int screen_type=SCR_MENU_MAIN; @@ -43,7 +43,7 @@ int screen_type=SCR_MENU_MAIN; int active_menu_item=0; -char *ITEMS_LIST[]={ +char *MENU_LIST[]={ "New game", "Control keys", "About", @@ -64,28 +64,24 @@ void DrawObstacle(signed int x, y) { don_offset_y = don_image_y - y; y = 0; } - - debugval("y", y); - debugval("don_h", don_h); - debugval("image_h", image_h); - debugval("don_offset_y", don_offset_y); - DrawScaledImage(objects.image, x, y, don_w, image_h, 0, don_offset_y); + if (y>=don_step_y) DrawBar(x, y-don_step_y, don_w, don_step_y, COLOR_ROAD); //Fill donkey old parts + if (image_h>0) DrawLibImage(objects.image, x, y, don_w, image_h, 0, don_offset_y); } -void DrawBus(dword x, y) { DrawScaledImage(objects.image, x, y, bus_w, bus_h, 0, 222); } -void DrawBoom(dword x, y) { DrawScaledImage(objects.image, x, y, 39, 33, 0, 268); } -void DrawHighway() { DrawScaledImage(road.image, 0,0, WIN_X, WIN_Y, 0, 0); } -void DrawMenuBackground() { DrawScaledImage(menu.image, 0, 0, WIN_X, WIN_Y, 0, 0); } +void DrawBus(dword x, y) { DrawLibImage(objects.image, x, y, bus_w, bus_h, 0, 444); } +void DrawBoom(dword x, y) { DrawLibImage(objects.image, x, y, 78, 66, 0, 536); } +void DrawHighway() { DrawLibImage(road.image, 0,0, WIN_X, WIN_Y, 0, 0); } +void DrawMenuBackground() { DrawLibImage(menu.image, 0, 0, WIN_X, WIN_Y, 0, 0); } void main() { randomize(); - GetNewObstacle(RAND); + StartNewGame(); load_dll(libio, #libio_init,1); load_dll(libimg, #libimg_init,1); - Libimg_LoadImage(#menu, "/sys/fonts/menu.png"); - Libimg_LoadImage(#road, "/sys/fonts/road.png"); - Libimg_LoadImage(#objects, "/sys/fonts/objects.png"); + Libimg_LoadImage(#menu, "menu.png"); + Libimg_LoadImage(#road, "road.png"); + Libimg_LoadImage(#objects, "objects.png"); loop() { @@ -114,30 +110,28 @@ void main() { if (active_menu_item==0) { - lives=3; - level=0; - score=0; + StartNewGame(); SetScreen(SCR_GAME); } if (active_menu_item==1) notify("'The Bus\nControl keys:\nLeft, Right, Space\nPress P key for pause'tI"); - if (active_menu_item==2) notify("'The Bus\nVersion v0.4 Alpha\n\nAuthor: Leency\nMenu image from Freepik.com'tI"); + if (active_menu_item==2) notify("'The Bus\nVersion v0.9\nAuthor: Leency\nMenu image from Freepik.com'tI"); if (active_menu_item==3) ExitProcess(); } if (key_scancode == SCAN_CODE_SPACE) && (screen_type==SCR_GAME) { - DrawScaledBar(bus_x*40+100, bus_y, bus_w, bus_h+1, COLOR_ROAD); + DrawBar(bus_x*80+200, bus_y, bus_w, bus_h+1, COLOR_ROAD); if (bus_x==1) bus_x=0; else bus_x=1; } if (key_scancode == SCAN_CODE_LEFT) && (screen_type==SCR_GAME) { if (bus_x==0) break; - DrawScaledBar(bus_x*40+100, bus_y, bus_w, bus_h+1, COLOR_ROAD); + DrawBar(bus_x*80+200, bus_y, bus_w, bus_h+1, COLOR_ROAD); bus_x=0; } if (key_scancode == SCAN_CODE_RIGHT) && (screen_type==SCR_GAME) { if (bus_x==1) break; - DrawScaledBar(bus_x*40+100, bus_y, bus_w, bus_h+1, COLOR_ROAD); + DrawBar(bus_x*80+200, bus_y, bus_w, bus_h+1, COLOR_ROAD); bus_x=1; } if (key_scancode == SCAN_CODE_KEY_P) @@ -149,7 +143,7 @@ void main() break; case evReDraw: - DefineAndDrawWindow(250,150,WIN_X * SCALE-1+10,WIN_Y * SCALE-1+skin_height+5,0x74,0,"The Bus",0); + DefineAndDrawWindow(250,150,WIN_X-1,WIN_Y-1,0x01,0,"The Bus",0); //0x74 is also possible if you fix bottom border DrawScreen(); break; @@ -158,16 +152,67 @@ void main() break; default: - if (screen_type==SCR_GAME) DrawRoad(); - break; + if (screen_type==SCR_GAME) + { + if ((don_x == bus_x)&&(don_y + don_h > bus_y )&&(don_y < bus_y + don_h )) { + lives--; + DrawBus(bus_x*80+200,bus_y); + DrawBoom(bus_x*80+180,302); + pause(150); + GetNewObstacle(RAND); + DrawScreen(); + } + + if (lives==0) { + DrawGameOverMessage(); + break; + } + + don_y += don_step_y; + + if (don_y - don_step_y >= WIN_Y) + { + GetNewObstacle(RAND); + score++; + bus_y -= don_step_y+1; + DrawBar(bus_x*80+200, bus_y+bus_h, bus_w, don_step_y, COLOR_ROAD); + WriteScore(); + } + + if (score) && (score % 15 == 0) + { + score++; + NewLevel(); + DrawScreen(); + don_step_y++; + } + + DrawRoad(); + } } } } +void NewLevel() +{ + level++; + bus_y = bus_y_default; +} + +void StartNewGame() +{ + lives=3; + level=0; + score=0; + bus_y = bus_y_default; + don_step_y = don_step_y_default; + GetNewObstacle(RAND); +} + void WriteScore() { - DrawScaledImage(road.image, 10, 83, 60, 12, 10, 82); - WriteScaledText(10, 70, 0x80, 0xFFFFFF, "Score"); - WriteScaledText(10, 83, 0x80, 0xFFFFFF, itoa(score)); + DrawLibImage(road.image, 20, 166, 120, 24, 20, 164); + WriteText(20, 140, 0x81, 0xFFFFFF, "Score"); + WriteText(20, 166, 0x81, 0xFFFFFF, itoa(score)); } void SetScreen(dword _screen_type) { @@ -181,35 +226,23 @@ void DrawScreen() if (screen_type==SCR_MENU_MAIN) { DrawMenuBackground(); - WriteScaledText(10, 10, 0x80, 0xE8783F, "TAKE THE CHILDREN HOME"); - $add ebx, 2 << 16 - $int 64 + WriteTextB(20, 20, 0x82, 0xE8783F, "THE BUS"); DrawMenuList(); } if (screen_type==SCR_GAME) || (screen_type==SCR_PAUSE) { DrawHighway(); - WriteScaledText(10, 10, 0x80, 0xFFFFFF, "Lives"); - WriteScaledText(10, 23, 0x80, 0xFFFFFF, itoa(lives)); - WriteScaledText(10, 40, 0x80, 0xFFFFFF, "Level"); - WriteScaledText(10, 53, 0x80, 0xFFFFFF, itoa(level)); + WriteText(20, 20, 0x81, 0xFFFFFF, "Lives"); + WriteText(20, 46, 0x81, 0xFFFFFF, itoa(lives)); + WriteText(20, 80, 0x81, 0xFFFFFF, "Level"); + WriteText(20, 106, 0x81, 0xFFFFFF, itoa(level)); WriteScore(); DrawRoad(); if (screen_type==SCR_PAUSE) { - DrawScaledBar(0,0,70,30,0xFF0000); - WriteScaledText(5,7,0x81,0xFFFfff,"PAUSE"); + DrawBar(0,0,140,60,0xFF0000); + WriteText(10,14,0x83,0xFFFfff,"PAUSE"); } } - /* - if (screen_type==SCR_PAUSE) - { - for (i = 0; i < 8; i++) //calculate image y offset for current obstacle - { - GetNewObstacle(i); - DrawObstacle(don_w+1*i, 10); - } - } - */ } @@ -223,95 +256,60 @@ void DrawMenuItem(int item_n, text_n) { dword color; if (active_menu_item==item_n) color = 0xFF0000; else color = 0xFFffff; - WriteScaledText(10+1, item_n*28+48+1, 0x80, 0xAAAaaa, ITEMS_LIST[text_n]); - WriteScaledText(10, item_n*28+48, 0x80, color, ITEMS_LIST[text_n]); + WriteText(20+2, item_n*56+116+2, 0x81, 0xAAAaaa, MENU_LIST[text_n]); + WriteText(20, item_n*56+116, 0x81, color, MENU_LIST[text_n]); } void DrawGameOverMessage() { - DrawScaledBar(0, 0, WIN_X, WIN_Y, 0xF3E1BD); - WriteScaledText(20, 20, 0x80, 0xA48C74, "GAME OVER"); - WriteScaledText(20, 40, 0x80, 0xA48C74, "FINAL SCORE"); - WriteScaledText(20, 70, 0x84, 0xA48C74, itoa(score)); - $add ecx, 2 << 16 - $int 64 + DrawBar(0, 0, WIN_X, WIN_Y, 0xF3E1BD); + WriteText(40, 40, 0x81, 0xA48C74, "GAME OVER"); + WriteText(40, 75, 0x81, 0xA48C74, "FINAL SCORE"); + WriteTextB(40, 140, 0x85, 0xA48C74, itoa(score)); pause(350); active_menu_item=0; SetScreen(SCR_MENU_MAIN); } -void DrawAccident() -{ - DrawBus(bus_x*40+100,bus_y); - DrawBoom(bus_x*40+90,151); - pause(150); - lives--; - don_y = -don_h; - DrawScreen(); - if (lives>0) DrawScaledBar(bus_x*40+90, 147-17, 39, 45+23, COLOR_ROAD); -} - void GetNewObstacle(int N) { int i; don_x = random(2); - if (N==RAND) { - don_type = random(7); - } - else { - don_type = N; - } + if (N==RAND) don_type = random(7); else don_type = N; don_h = don_h_mas[don_type]; - don_y = -don_h+1; + don_y = -don_h; don_image_y = 0; - for (i = 0; i < don_type; i++) //calculate image y offset for current obstacle - { - don_image_y += don_h_mas[i]+1; - } + for (i = 0; i < don_type; i++) don_image_y += don_h_mas[i]+2; //calculate image y offset for current obstacle } #define LINE_LENGTH 10 -void DrawRoad() +int line_y=0; +void DrawLineSeparator() { - int y, line_y; - - if ((don_x == bus_x)&&(don_y + don_h > bus_y )&&(don_y < bus_y + don_h )) DrawAccident(); - - if (lives==0) { - DrawGameOverMessage(); - return; - } - - if (screen_type != SCR_PAUSE) - { - line_y+=2; - don_y+=2; - } - + int y; + if (screen_type == SCR_GAME) line_y += don_step_y; //the beginning of the white dashed line between two roadways if (line_y>=20) { line_y=0; } else { - DrawScaledBar(129, 0, 1, line_y, COLOR_ROAD); - DrawScaledBar(129, 0, 1, line_y-LINE_LENGTH, 0xDDE9F2); + DrawBar(258, 0, 2, line_y, COLOR_ROAD); + DrawBar(258, 0, 2, line_y-LINE_LENGTH, 0xDDE9F2); } for (y=0; y= WIN_Y) - { - GetNewObstacle(RAND); - score++; - WriteScore(); - } - DrawScaledBar(don_x*don_w+93, don_y-2, 30, 2, COLOR_ROAD); //Fill donkey old parts - DrawObstacle(don_x*don_w+90,don_y); - DrawBus(bus_x*40+100,147); +} + +void DrawRoad() +{ + DrawLineSeparator(); + DrawObstacle(don_w+10*don_x+186,don_y); + DrawBus(bus_x*80+200,bus_y); }