rforces 0.2: fixed a lot of bugs

git-svn-id: svn://kolibrios.org@7494 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Kirill Lipatov (Leency) 2018-10-21 11:05:40 +00:00
parent 98a4aa1070
commit 897cb727bb
6 changed files with 182 additions and 108 deletions

View File

@ -1,4 +1,7 @@
"C:\Program Files\Microsoft Visual Studio 8\VC\bin\cl" /c /O2 /nologo /GS- /GR- /fp:fast rforces.cpp kosFile.cpp kosSyst.cpp mcsmemm.cpp call "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat"
"C:\Program Files\Microsoft Visual Studio 8\VC\bin\link" /nologo /manifest:no /entry:crtStartUp /subsystem:native /base:0 /fixed /align:16 /nodefaultlib rforces.obj kosFile.obj kosSyst.obj mcsmemm.obj
pe2kos rforces.exe rforces @cl /c /O2 /nologo /GS- /GR- /fp:fast rforces.cpp kosFile.cpp kosSyst.cpp mcsmemm.cpp
@link /nologo /manifest:no /entry:crtStartUp /subsystem:native /base:0 /fixed /align:16 /nodefaultlib rforces.obj kosFile.obj kosSyst.obj mcsmemm.obj
@pe2kos rforces.exe rforces
@del rforces.exe
pause pause

View File

@ -367,7 +367,7 @@ void sprintf( char *Str, char* Format, ... )
} }
// функция -1 завершения процесса // function -1 termanate process
void kos_ExitApp() void kos_ExitApp()
{ {
int i; int i;
@ -386,7 +386,7 @@ void kos_ExitApp()
} }
// функция 0 // function 0
void kos_DefineAndDrawWindow( void kos_DefineAndDrawWindow(
Word x, Word y, Word x, Word y,
Word sizeX, Word sizeY, Word sizeX, Word sizeY,
@ -417,7 +417,7 @@ void kos_DefineAndDrawWindow(
} }
// функция 1 поставить точку // function 1
void kos_PutPixel( Dword x, Dword y, Dword colour ) void kos_PutPixel( Dword x, Dword y, Dword colour )
{ {
// //
@ -431,7 +431,7 @@ void kos_PutPixel( Dword x, Dword y, Dword colour )
} }
// функция 2 получить код нажатой клавиши // function 2 get key code
bool kos_GetKey( Byte &keyCode ) bool kos_GetKey( Byte &keyCode )
{ {
Dword result; Dword result;
@ -449,7 +449,7 @@ bool kos_GetKey( Byte &keyCode )
} }
// функция 3 получить время // function 3 get system clock
Dword kos_GetSystemClock() Dword kos_GetSystemClock()
{ {
// Dword result; // Dword result;
@ -465,7 +465,7 @@ Dword kos_GetSystemClock()
} }
// функция 4 // function 4
void kos_WriteTextToWindow( void kos_WriteTextToWindow(
Word x, Word x,
Word y, Word y,
@ -491,8 +491,31 @@ void kos_WriteTextToWindow(
} }
} }
// function 4
void kos_WriteTextWithBg(
Word x,
Word y,
Byte fontType,
Dword textColour,
Dword bgcolour,
char *textPtr,
Dword textLen
)
{
Dword arg1, arg2;
// функция 5 пауза, в сотых долях секунды //
arg1 = ( x << 16 ) | y;
arg2 = ( fontType << 24 ) | textColour;
//
__asm{
mov edi, bgcolour
}
kos_WriteTextToWindow(x,y,fontType,textColour,textPtr,textLen);
}
// function 5 pause, in value is 1/100 of second
void kos_Pause( Dword value ) void kos_Pause( Dword value )
{ {
// //
@ -504,7 +527,7 @@ void kos_Pause( Dword value )
} }
// функция 7 нарисовать изображение // function 7
void kos_PutImage( RGB * imagePtr, Word sizeX, Word sizeY, Word x, Word y ) void kos_PutImage( RGB * imagePtr, Word sizeX, Word sizeY, Word x, Word y )
{ {
Dword arg1, arg2; Dword arg1, arg2;
@ -524,7 +547,7 @@ void kos_PutImage( RGB * imagePtr, Word sizeX, Word sizeY, Word x, Word y )
// функция 8 определить кнопку // function 8
void kos_DefineButton( Word x, Word y, Word sizeX, Word sizeY, Dword buttonID, Dword colour ) void kos_DefineButton( Word x, Word y, Word sizeX, Word sizeY, Dword buttonID, Dword colour )
{ {
Dword arg1, arg2; Dword arg1, arg2;
@ -544,7 +567,7 @@ void kos_DefineButton( Word x, Word y, Word sizeX, Word sizeY, Dword buttonID, D
} }
// функция 9 - информация о процессе // function 9 get process info
Dword kos_ProcessInfo( sProcessInfo *targetPtr, Dword processID ) Dword kos_ProcessInfo( sProcessInfo *targetPtr, Dword processID )
{ {
// Dword result; // Dword result;
@ -562,7 +585,7 @@ Dword kos_ProcessInfo( sProcessInfo *targetPtr, Dword processID )
} }
// функция 10 // function 10
Dword kos_WaitForEvent() Dword kos_WaitForEvent()
{ {
// Dword result; // Dword result;
@ -577,7 +600,7 @@ Dword kos_WaitForEvent()
} }
// функция 11 // function 11
Dword kos_CheckForEvent() Dword kos_CheckForEvent()
{ {
// Dword result; // Dword result;
@ -592,7 +615,7 @@ Dword kos_CheckForEvent()
} }
// функция 12 // function 12
void kos_WindowRedrawStatus( Dword status ) void kos_WindowRedrawStatus( Dword status )
{ {
__asm{ __asm{
@ -603,7 +626,7 @@ void kos_WindowRedrawStatus( Dword status )
} }
// функция 13 нарисовать полосу // function 13 draw filled area
void kos_DrawBar( Word x, Word y, Word sizeX, Word sizeY, Dword colour ) void kos_DrawBar( Word x, Word y, Word sizeX, Word sizeY, Dword colour )
{ {
Dword arg1, arg2; Dword arg1, arg2;
@ -622,7 +645,7 @@ void kos_DrawBar( Word x, Word y, Word sizeX, Word sizeY, Dword colour )
} }
// функция 17 // function 17
bool kos_GetButtonID( Dword &buttonID ) bool kos_GetButtonID( Dword &buttonID )
{ {
Dword result; Dword result;
@ -640,7 +663,7 @@ bool kos_GetButtonID( Dword &buttonID )
} }
// функция 23 // function 23
Dword kos_WaitForEvent( Dword timeOut ) Dword kos_WaitForEvent( Dword timeOut )
{ {
// Dword result; // Dword result;
@ -655,7 +678,7 @@ Dword kos_WaitForEvent( Dword timeOut )
// return result; // return result;
} }
// функция 26.9 получить значение счётчика времени // function 26.9 ïîëó÷èòü çíà÷åíèå ñ÷¸ò÷èêà âðåìåíè
Dword kos_GetTime() Dword kos_GetTime()
{ {
__asm{ __asm{
@ -665,7 +688,7 @@ Dword kos_GetTime()
} }
} }
// функция 37 получение информации о состоянии "мыши" // function 37 ïîëó÷åíèå èíôîðìàöèè î ñîñòîÿíèè "ìûøè"
void kos_GetMouseState( Dword & buttons, int & cursorX, int & cursorY ) void kos_GetMouseState( Dword & buttons, int & cursorX, int & cursorY )
{ {
Dword mB; Dword mB;
@ -694,7 +717,7 @@ void kos_GetMouseState( Dword & buttons, int & cursorX, int & cursorY )
cursorY = curY - sPI.processInfo.y_start; cursorY = curY - sPI.processInfo.y_start;
} }
// функция 37.1 получение координат "мыши" относительно окна // function 37.1 ïîëó÷åíèå êîîðäèíàò "ìûøè" îòíîñèòåëüíî îêíà
void kos_GetMouseWindowXY( int & cursorX, int & cursorY ) void kos_GetMouseWindowXY( int & cursorX, int & cursorY )
{ {
Word curX; Word curX;
@ -717,7 +740,7 @@ void kos_GetMouseWindowXY( int & cursorX, int & cursorY )
cursorY = curY; cursorY = curY;
} }
// функция 37.2 получение информации о нажатых кнопки "мыши" // function 37.2 ïîëó÷åíèå èíôîðìàöèè î íàæàòûõ êíîïêè "ìûøè"
void kos_GetMouseButtonsState( Dword & buttons ) void kos_GetMouseButtonsState( Dword & buttons )
{ {
Dword mB; Dword mB;
@ -732,7 +755,7 @@ void kos_GetMouseButtonsState( Dword & buttons )
buttons = mB; buttons = mB;
} }
// функция 37.4 загрузка курсора "мыши" // function 37.4 çàãðóçêà êóðñîðà "ìûøè"
Dword * kos_LoadMouseCursor( Dword * cursor, Dword loadstate ) Dword * kos_LoadMouseCursor( Dword * cursor, Dword loadstate )
{ {
//Dword handle; //Dword handle;
@ -747,7 +770,7 @@ Dword * kos_LoadMouseCursor( Dword * cursor, Dword loadstate )
//return handle; //return handle;
} }
// функция 37.5 установка курсора "мыши" // function 37.5 óñòàíîâêà êóðñîðà "ìûøè"
Dword * kos_SetMouseCursor( Dword * handle ) Dword * kos_SetMouseCursor( Dword * handle )
{ {
//Dword handle; //Dword handle;
@ -761,7 +784,7 @@ Dword * kos_SetMouseCursor( Dword * handle )
//return handle; //return handle;
} }
// функция 37.6 удаление курсора "мыши" // function 37.6 óäàëåíèå êóðñîðà "ìûøè"
void kos_DeleteMouseCursor( Dword * handle ) void kos_DeleteMouseCursor( Dword * handle )
{ {
__asm{ __asm{
@ -772,7 +795,7 @@ void kos_DeleteMouseCursor( Dword * handle )
} }
} }
// функция 38 нарисовать полосу // function 38
void kos_DrawLine( Word x1, Word y1, Word x2, Word y2, Dword colour ) void kos_DrawLine( Word x1, Word y1, Word x2, Word y2, Dword colour )
{ {
Dword arg1, arg2; Dword arg1, arg2;
@ -791,7 +814,7 @@ void kos_DrawLine( Word x1, Word y1, Word x2, Word y2, Dword colour )
} }
// функция 40 установить маску событий // function 40
void kos_SetMaskForEvents( Dword mask ) void kos_SetMaskForEvents( Dword mask )
{ {
// //
@ -803,7 +826,7 @@ void kos_SetMaskForEvents( Dword mask )
} }
// функция 47 вывести в окно приложения число // function 47 âûâåñòè â îêíî ïðèëîæåíèÿ ÷èñëî
void kos_DisplayNumberToWindow( void kos_DisplayNumberToWindow(
Dword value, Dword value,
Dword digitsNum, Dword digitsNum,
@ -832,7 +855,7 @@ void kos_DisplayNumberToWindow(
} }
} }
// функция 47 вывести в окно приложения число c фоном // function 47 âûâåñòè â îêíî ïðèëîæåíèÿ ÷èñëî c ôîíîì
void kos_DisplayNumberToWindowBg( void kos_DisplayNumberToWindowBg(
Dword value, Dword value,
Dword digitsNum, Dword digitsNum,
@ -874,7 +897,7 @@ Dword kos_GetSkinHeight()
} }
} }
// функция 70 доступ к файловой системе // function 70 äîñòóï ê ôàéëîâîé ñèñòåìå
Dword kos_FileSystemAccess( kosFileInfo *fileInfo ) Dword kos_FileSystemAccess( kosFileInfo *fileInfo )
{ {
// Dword result; // Dword result;
@ -891,7 +914,7 @@ Dword kos_FileSystemAccess( kosFileInfo *fileInfo )
} }
// функция 63 вывод символя в окно отладки // function 63 âûâîä ñèìâîëÿ â îêíî îòëàäêè
void kos_DebugOutChar( char ccc ) void kos_DebugOutChar( char ccc )
{ {
// //
@ -904,7 +927,7 @@ void kos_DebugOutChar( char ccc )
} }
// функция 66 режим получения данных от клавиатуры // function 66 ðåæèì ïîëó÷åíèÿ äàííûõ îò êëàâèàòóðû
void kos_SetKeyboardDataMode( Dword mode ) void kos_SetKeyboardDataMode( Dword mode )
{ {
// //
@ -930,8 +953,21 @@ void rtlDebugOutString( char *str )
kos_DebugOutChar( 10 ); kos_DebugOutChar( 10 );
} }
void kos_DebugNumber(signed int n)
{
if (n<0) {
kos_DebugOutChar('-');
n = -n;
}
while (n>10) {
kos_DebugOutChar(n%10 + '0');
n /= 10;
}
kos_DebugOutChar(n + '0');
kos_DebugOutChar('\n');
}
// функция 64 изменение количества памяти, выделенной для программы // function 64 èçìåíåíèå êîëè÷åñòâà ïàìÿòè, âûäåëåííîé äëÿ ïðîãðàììû
bool kos_ApplicationMemoryResize( Dword targetSize ) bool kos_ApplicationMemoryResize( Dword targetSize )
{ {
Dword result; Dword result;
@ -949,7 +985,8 @@ bool kos_ApplicationMemoryResize( Dword targetSize )
} }
// функция 67 изменить параметры окна, параметр == -1 не меняется // function 67 change window size and position,
// if param == -1 then value does not change
void kos_ChangeWindow( Dword x, Dword y, Dword sizeX, Dword sizeY ) void kos_ChangeWindow( Dword x, Dword y, Dword sizeX, Dword sizeY )
{ {
// //

View File

@ -136,9 +136,9 @@ void memset( Byte *dst, Byte filler, Dword count );
void sprintf( char *Str, char* Format, ... ); void sprintf( char *Str, char* Format, ... );
// //
Dword rtlInterlockedExchange( Dword *target, Dword value ); Dword rtlInterlockedExchange( Dword *target, Dword value );
// функция -1 завершения процесса // function -1 завершения процесса
void kos_ExitApp(); void kos_ExitApp();
// функция 0 // function 0
void kos_DefineAndDrawWindow( void kos_DefineAndDrawWindow(
Word x, Word y, Word x, Word y,
Word sizeX, Word sizeY, Word sizeX, Word sizeY,
@ -146,13 +146,13 @@ void kos_DefineAndDrawWindow(
Byte headerType, Dword headerColour, Byte headerType, Dword headerColour,
Dword borderColour Dword borderColour
); );
// функция 1 поставить точку // function 1 поставить точку
void kos_PutPixel( Dword x, Dword y, Dword colour ); void kos_PutPixel( Dword x, Dword y, Dword colour );
// функция 2 получить код нажатой клавиши // function 2 получить код нажатой клавиши
bool kos_GetKey( Byte &keyCode ); bool kos_GetKey( Byte &keyCode );
// функция 3 получить время // function 3 получить время
Dword kos_GetSystemClock(); Dword kos_GetSystemClock();
// функция 4 // function 4
void kos_WriteTextToWindow( void kos_WriteTextToWindow(
Word x, Word y, Word x, Word y,
Byte fontType, Byte fontType,
@ -160,27 +160,36 @@ void kos_WriteTextToWindow(
char *textPtr, char *textPtr,
Dword textLen Dword textLen
); );
// функция 7 нарисовать изображение //
void kos_WriteTextWithBg(
Word x, Word y,
Byte fontType,
Dword textColour,
Dword bgcolour,
char *textPtr,
Dword textLen
);
// function 7 нарисовать изображение
void kos_PutImage( RGB * imagePtr, Word sizeX, Word sizeY, Word x, Word y ); void kos_PutImage( RGB * imagePtr, Word sizeX, Word sizeY, Word x, Word y );
// функция 8 определить кнопку // function 8 определить кнопку
void kos_DefineButton( Word x, Word y, Word sizeX, Word sizeY, Dword buttonID, Dword colour ); void kos_DefineButton( Word x, Word y, Word sizeX, Word sizeY, Dword buttonID, Dword colour );
// функция 5 пауза, в сотых долях секунды // function 5 пауза, в сотых долях секунды
void kos_Pause( Dword value ); void kos_Pause( Dword value );
// функция 9 информация о процессе // function 9 информация о процессе
Dword kos_ProcessInfo( sProcessInfo *targetPtr, Dword processID = PROCESS_ID_SELF ); Dword kos_ProcessInfo( sProcessInfo *targetPtr, Dword processID = PROCESS_ID_SELF );
// функция 10 // function 10
Dword kos_WaitForEvent(); Dword kos_WaitForEvent();
// функция 11 // function 11
Dword kos_CheckForEvent(); Dword kos_CheckForEvent();
// функция 12 // function 12
void kos_WindowRedrawStatus( Dword status ); void kos_WindowRedrawStatus( Dword status );
// функция 13 нарисовать прямоугольник // function 13 нарисовать прямоугольник
void kos_DrawBar( Word x, Word y, Word sizeX, Word sizeY, Dword colour ); void kos_DrawBar( Word x, Word y, Word sizeX, Word sizeY, Dword colour );
// функция 17 // function 17
bool kos_GetButtonID( Dword &buttonID ); bool kos_GetButtonID( Dword &buttonID );
// функция 23 // function 23
Dword kos_WaitForEvent( Dword timeOut ); Dword kos_WaitForEvent( Dword timeOut );
// функция 26.9 получить значение счётчика времени // function 26.9 получить значение счётчика времени
Dword kos_GetTime(); Dword kos_GetTime();
// //
enum eNumberBase enum eNumberBase
@ -189,23 +198,23 @@ enum eNumberBase
nbHex, nbHex,
nbBin nbBin
}; };
// функция 37 получение информации о состоянии "мыши" // function 37 получение информации о состоянии "мыши"
void kos_GetMouseState( Dword & buttons, int & cursorX, int & cursorY ); void kos_GetMouseState( Dword & buttons, int & cursorX, int & cursorY );
// функция 37.1 получение координат "мыши" относительно окна // function 37.1 получение координат "мыши" относительно окна
void kos_GetMouseWindowXY( int & cursorX, int & cursorY ); void kos_GetMouseWindowXY( int & cursorX, int & cursorY );
// функция 37.2 получение информации о нажатых кнопки "мыши" // function 37.2 получение информации о нажатых кнопки "мыши"
void kos_GetMouseButtonsState( Dword & buttons ); void kos_GetMouseButtonsState( Dword & buttons );
// функция 37.4 загрузка курсора "мыши" // function 37.4 загрузка курсора "мыши"
Dword * kos_LoadMouseCursor( Dword * cursor, Dword loadstate ); Dword * kos_LoadMouseCursor( Dword * cursor, Dword loadstate );
// функция 37.5 установка курсора "мыши" // function 37.5 установка курсора "мыши"
Dword * kos_SetMouseCursor( Dword * handle ); Dword * kos_SetMouseCursor( Dword * handle );
// функция 37.6 удаление курсора "мыши" // function 37.6 удаление курсора "мыши"
void kos_DeleteMouseCursor( Dword * handle ); void kos_DeleteMouseCursor( Dword * handle );
// функция 38 нарисовать полосу // function 38 нарисовать полосу
void kos_DrawLine( Word x1, Word y1, Word x2, Word y2, Dword colour ); void kos_DrawLine( Word x1, Word y1, Word x2, Word y2, Dword colour );
// функция 40 установить маску событий // function 40 установить маску событий
void kos_SetMaskForEvents( Dword mask ); void kos_SetMaskForEvents( Dword mask );
// функция 47 вывести в окно приложения число // function 47 вывести в окно приложения число
void kos_DisplayNumberToWindow( void kos_DisplayNumberToWindow(
Dword value, Dword value,
Dword digitsNum, Dword digitsNum,
@ -215,7 +224,7 @@ void kos_DisplayNumberToWindow(
eNumberBase nBase = nbDecimal, eNumberBase nBase = nbDecimal,
bool valueIsPointer = false bool valueIsPointer = false
); );
// функция 47 вывести в окно приложения число c фоном // function 47 вывести в окно приложения число c фоном
void kos_DisplayNumberToWindowBg( void kos_DisplayNumberToWindowBg(
Dword value, Dword value,
Dword digitsNum, Dword digitsNum,
@ -226,19 +235,22 @@ void kos_DisplayNumberToWindowBg(
eNumberBase nBase = nbDecimal, eNumberBase nBase = nbDecimal,
bool valueIsPointer = false bool valueIsPointer = false
); );
// 48.4 get windows title bar height // function 48.4 get windows title bar height
Dword kos_GetSkinHeight(); Dword kos_GetSkinHeight();
// функция 58 доступ к файловой системе // function 58 доступ к файловой системе
Dword kos_FileSystemAccess( kosFileInfo *fileInfo ); Dword kos_FileSystemAccess( kosFileInfo *fileInfo );
// функция 63 // function 63
void kos_DebugOutChar( char ccc ); void kos_DebugOutChar( char ccc );
// //
void rtlDebugOutString( char *str ); void rtlDebugOutString( char *str );
// функция 64 изменить параметры окна, параметр == -1 не меняется //
void kos_DebugNumber(signed int n);
//
// function 64 изменить параметры окна, параметр == -1 не меняется
void kos_ChangeWindow( Dword x, Dword y, Dword sizeX, Dword sizeY ); void kos_ChangeWindow( Dword x, Dword y, Dword sizeX, Dword sizeY );
// функция 67 изменение количества памяти, выделенной для программы // function 67 изменение количества памяти, выделенной для программы
bool kos_ApplicationMemoryResize( Dword targetSize ); bool kos_ApplicationMemoryResize( Dword targetSize );
// функция 66 режим получения данных от клавиатуры // function 66 режим получения данных от клавиатуры
void kos_SetKeyboardDataMode( Dword mode ); void kos_SetKeyboardDataMode( Dword mode );
// //

View File

@ -16,7 +16,7 @@
#define WHITE 0x00FFFFFF #define WHITE 0x00FFFFFF
// Visual properties // Visual properties
#define GAME_NAME "Rocket Forces v1.12 (F2 - new game, Esc - exit) " #define GAME_NAME "Rocket Forces"
#define BG_COLOR BLACK #define BG_COLOR BLACK
#define TEXT_COLOR WHITE #define TEXT_COLOR WHITE
#define CUR_COLOR GREEN #define CUR_COLOR GREEN

View File

@ -1,9 +1,13 @@
/* Rocket Forces /* Rocket Forces
* Filename: rforces.cpp * Filename: rforces.cpp
* Version 0.1.1 * Version 0.1
* Copyright (c) Serial 2007 * Copyright (c) Serial 2007
*/ */
/* Version 0.2
* Copyright (c) Leency 2018
*/
#include <stdlib.h> #include <stdlib.h>
@ -26,6 +30,8 @@ cBuilding *house = new cBuilding();
Dword *cur_handle; Dword *cur_handle;
int score, health; int score, health;
bool game_over;
struct MouseState struct MouseState
{ {
int x, y, lbclick; int x, y, lbclick;
@ -35,7 +41,6 @@ struct MouseState
void kos_Main() void kos_Main()
{ {
Dword btn_id;
Dword frame_start, frame_end; Dword frame_start, frame_end;
OnStart(); OnStart();
Menu(); Menu();
@ -45,46 +50,45 @@ void kos_Main()
frame_start = kos_GetTime(); frame_start = kos_GetTime();
switch (kos_CheckForEvent()) switch (kos_CheckForEvent())
{ {
case EM_WINDOW_REDRAW:
DrawWindow();
break;
case EM_KEY_PRESS: case EM_KEY_PRESS:
Byte keyCode; Byte keyCode;
kos_GetKey(keyCode); kos_GetKey(keyCode);
if (keyCode == 27) if (keyCode == 27)
{ {
OnExit(); kos_ExitApp();
} }
if (keyCode == 51) if (keyCode == 51)
{ {
OnStart(); OnStart();
} }
break; break;
case EM_BUTTON_CLICK: // button pressed; we have only one button, close case EM_BUTTON_CLICK:
Dword btn_id;
if (kos_GetButtonID(btn_id)) { if (kos_GetButtonID(btn_id)) {
if (btn_id == 1) OnExit(); if (btn_id == 1) kos_ExitApp();
} }
break; break;
case EM_MOUSE_EVENT: // ñîáûòèå îò ìûøè (íàæàòèå íà êíîïêó ìûøè èëè ïåðåìåùåíèå; ñáðàñûâàåòñÿ ïðè ïðî÷òåíèè) case EM_MOUSE_EVENT:
OnMouseMove(); OnMouseMove();
if (ms.lbclick == 1) if (ms.lbclick == 1)
{ {
OnLMBClick(); OnLMBClick();
} }
break; break;
case EM_WINDOW_REDRAW:
DrawWindow();
break;
default: default:
if (game_over) break;
DrawBombs(); DrawBombs();
DrawRocketsAndCrosses(); DrawRocketsAndCrosses();
DrawExplodes(); DrawExplodes();
DrawStats();
frame_end = kos_GetTime(); frame_end = kos_GetTime();
if (frame_end - frame_start < FRAME_TIME) if (frame_end - frame_start < FRAME_TIME) {
{
kos_Pause(FRAME_TIME - (frame_end - frame_start)); kos_Pause(FRAME_TIME - (frame_end - frame_start));
} }
if (health <= 0) if (health <= 0) GameOver();
{
OnExit();
}
} }
} }
} }
@ -92,10 +96,13 @@ void kos_Main()
void DrawWindow() void DrawWindow()
{ {
kos_WindowRedrawStatus(1); kos_WindowRedrawStatus(1);
kos_DefineAndDrawWindow(10, 40, WINDOW_WIDTH + 8, WINDOW_HEIGHT + kos_GetSkinHeight() + 12, 0x34, BG_COLOR, 0, 0, (Dword)header); kos_DefineAndDrawWindow(10, 40, WINDOW_WIDTH + 12,
WINDOW_HEIGHT + kos_GetSkinHeight() + 12, 0x34,
BG_COLOR, 0, 0, (Dword)header);
kos_WindowRedrawStatus(2); kos_WindowRedrawStatus(2);
OnMouseMove(); DrawStats();
if (health <= 0) GameOver();
// Draw buildings // Draw buildings
for (int i = 20; i < 5 * 50; i += 50) for (int i = 20; i < 5 * 50; i += 50)
@ -213,6 +220,12 @@ void OnMouseMove()
Dword old_buttons = ms.buttons; Dword old_buttons = ms.buttons;
kos_GetMouseWindowXY(ms.x, ms.y); kos_GetMouseWindowXY(ms.x, ms.y);
kos_GetMouseButtonsState(ms.buttons); kos_GetMouseButtonsState(ms.buttons);
if (health <= 0) return;
//restore mouse cursor when it over Window Header
if (ms.y > 5000) RestoreSystemCursor(); else SetGameCursor();
if ((old_buttons & 0x00000001) == 0 && (ms.buttons & 0x00000001) == 1) if ((old_buttons & 0x00000001) == 0 && (ms.buttons & 0x00000001) == 1)
{ {
ms.lbclick = 1; ms.lbclick = 1;
@ -222,13 +235,6 @@ void OnMouseMove()
ms.lbclick = 0; ms.lbclick = 0;
} }
kos_DrawBar(8, 10, 6*11, 22, 0);
kos_WriteTextToWindow(8, 10, 0, TEXT_COLOR, "Population: %", 16);
kos_WriteTextToWindow(8, 22, 0, TEXT_COLOR, "Score:", 6);
kos_DisplayNumberToWindowBg(health, 3, 79, 10, TEXT_COLOR, BG_COLOR, nbDecimal, false);
kos_DisplayNumberToWindowBg(score, 4, 49, 22, TEXT_COLOR, BG_COLOR, nbDecimal, false);
if (ms.x >= 0 && ms.x < WINDOW_WIDTH && ms.y >= 0 && ms.y < WINDOW_HEIGHT) if (ms.x >= 0 && ms.x < WINDOW_WIDTH && ms.y >= 0 && ms.y < WINDOW_HEIGHT)
{ {
gun->DrawAngle(ms.x, ms.y, G_COLOR); gun->DrawAngle(ms.x, ms.y, G_COLOR);
@ -245,7 +251,15 @@ void OnMouseMove()
kos_DisplayNumberToWindowBg(ms.y, 3, WINDOW_WIDTH - 30, 22, TEXT_COLOR, BG_COLOR, nbDecimal, false); kos_DisplayNumberToWindowBg(ms.y, 3, WINDOW_WIDTH - 30, 22, TEXT_COLOR, BG_COLOR, nbDecimal, false);
kos_DisplayNumberToWindowBg(ms.buttons, 1, WINDOW_WIDTH - 30, 34, TEXT_COLOR, BG_COLOR, nbDecimal, false); kos_DisplayNumberToWindowBg(ms.buttons, 1, WINDOW_WIDTH - 30, 34, TEXT_COLOR, BG_COLOR, nbDecimal, false);
}*/ }*/
}
void DrawStats()
{
kos_WriteTextWithBg(8, 10, 0xC0, TEXT_COLOR, 0, "Population:", 11);
kos_WriteTextWithBg(8+15*6, 9, 0xC0, TEXT_COLOR, 0, "%", 1);
kos_WriteTextWithBg(8, 22, 0xC0, TEXT_COLOR, 0, "Score:", 6);
kos_DisplayNumberToWindowBg(health, 3, 79, 10, TEXT_COLOR, BG_COLOR, nbDecimal, false);
kos_DisplayNumberToWindowBg(score, 4, 49, 22, TEXT_COLOR, BG_COLOR, nbDecimal, false);
} }
void OnLMBClick() void OnLMBClick()
@ -284,11 +298,7 @@ void OnLMBClick()
} }
} }
void OnRMBClick() void SetGameCursor()
{
}
void ChangeCursor()
{ {
Dword *cur = new Dword[1024]; Dword *cur = new Dword[1024];
for (int i = 0; i < 1024; i++) for (int i = 0; i < 1024; i++)
@ -329,6 +339,12 @@ void ChangeCursor()
kos_SetMouseCursor(cur_handle); kos_SetMouseCursor(cur_handle);
} }
void RestoreSystemCursor()
{
if (cur_handle) kos_SetMouseCursor(0);
cur_handle=0;
}
void Menu() void Menu()
{ {
NewGame(); NewGame();
@ -345,7 +361,7 @@ void OnStart()
{ {
cursor = new cCursor(); cursor = new cCursor();
} }
ChangeCursor(); SetGameCursor();
gun->Enable((WINDOW_WIDTH / 2) - 10, WINDOW_HEIGHT - 30, 10, 20, (WINDOW_WIDTH / 2) - 5, WINDOW_HEIGHT - 20); gun->Enable((WINDOW_WIDTH / 2) - 10, WINDOW_HEIGHT - 30, 10, 20, (WINDOW_WIDTH / 2) - 5, WINDOW_HEIGHT - 20);
@ -366,16 +382,21 @@ void OnStart()
health = 100; health = 100;
score = 0; score = 0;
game_over = false;
rtlSrand(kos_GetTime()); rtlSrand(kos_GetTime());
DrawWindow(); DrawWindow();
} }
void OnExit() void GameOver()
{ {
kos_WriteTextToWindow(WINDOW_WIDTH / 2 - 35, WINDOW_HEIGHT / 2 - 10, 0, TEXT_COLOR, "Game Over", 9); int xcenter = WINDOW_WIDTH / 2;
int y = WINDOW_HEIGHT/ 2 - 40;
kos_Pause(150); kos_WriteTextToWindow(xcenter-50, y, 0x81, TEXT_COLOR, "Game Over", 9);
kos_WriteTextToWindow(xcenter-43, y+36, 0x80, TEXT_COLOR, "[F2] - New game", 0);
kos_ExitApp(); kos_WriteTextToWindow(xcenter-43, y+53, 0x80, TEXT_COLOR, "[Ecs] - Exit", 0);
//
RestoreSystemCursor();
game_over = true;
} }

View File

@ -10,10 +10,11 @@ void DrawBombs();
void DrawRocketsAndCrosses(); void DrawRocketsAndCrosses();
void DrawExplodes(); void DrawExplodes();
void OnMouseMove(); void OnMouseMove();
void DrawStats();
void OnLMBClick(); void OnLMBClick();
void OnRMBClick(); void SetGameCursor();
void ChangeCursor(); void RestoreSystemCursor();
void Menu(); void Menu();
void NewGame(); void NewGame();
void OnStart(); void OnStart();
void OnExit(); void GameOver();