Floot-It v3.0 (#181)

- adopt window size to screen size
- bigger fonts
- proper colored 'S' and 'L' buttons
- fix issue: after won the game clicks count always increased to max
- code refactoring, translate comments to English
- help updated

Reviewed-on: https://git.kolibrios.org/KolibriOS/kolibrios/pulls/181
Reviewed-by: Max Logaev <maxlogaev@proton.me>
Co-authored-by: leency <lipatov.kiril@gmail.com>
Co-committed-by: leency <lipatov.kiril@gmail.com>
This commit is contained in:
leency 2025-03-31 08:15:28 +02:00 committed by Max Logaev
parent 58e2d0b844
commit 81dafb3025
5 changed files with 245 additions and 261 deletions

View File

@ -0,0 +1,5 @@
@del *.
@For /R %%i In (*.c) Do c-- "%%i"
@rename *.com *.
@pause
@del warning.txt

View File

@ -1,9 +0,0 @@
@del lang.h--
@echo #define LANG_ENG 1 >lang.h--
C-- flood-it.c
@del flood-it
@rename flood-it.com flood-it
@kpack flood-it
@del lang.h--
@del warning.txt
@pause

View File

@ -1,9 +0,0 @@
@del lang.h--
@echo #define LANG_RUS 1 >lang.h--
C-- flood-it.c
@del flood-it
@rename flood-it.com flood-it
@kpack flood-it
@del lang.h--
@del warning.txt
@pause

View File

@ -1,49 +1,44 @@
//Leency 06.10.2011, Flood-it! v2.41, GPL
// SPDX-License-Identifier: GPL-2.0-only
// Flood-it! - Strategy game: Flood the board with one color, within a step limit.
// Copyright (C) 2011-2025 Leency <lipatov.kiril@gmail.com>
#include "lib\kolibri.h"
#include "lib\random.h"
#ifndef AUTOBUILD
#include "lang.h--"
#endif
system_colors sc;
proc_info Form;
dword stak[100]; //îêíî ïîìîùè
dword help_window_stak[100];
//óðîâíè ñëîæíîñòè
int DIFFICULTY_LEV_PARAMS[]={ 28, 14, 25, //ëåãêî
17, 28, 50}; //òÿæåëî
#define DEFAULT_BLOCK_COUNT 14
#define DEFAULT_MAX_CLICKS 25
#define MAX_BLOCK_SIZE 28
char board_size = -1;
int BLOCK_SIZE; //cell size
int BLOCKS_NUM; //number of cells by X and Y
int MAX_CLICKS; //max clicks for win
int CLICKS; //how many clicks user already did
int game_end;
//ïî-óìîë÷àíèþ "ëåãêî"
int BLOCK_SIZE = 28; //ðàçìåð êâàäðàòèêà
int BLOCKS_NUM = 14; //êîëè÷åñòâî êâàäðàòèêîâ ïî Õ è ïî Y
int MAX_CLICKS = 25; //ìàêñèìàëüíîå êîëè÷åñòâî êëèêîâ äî âûèãðûøà
#define USER_PANEL_WIDTH 144
int CLICKS = 0; //ñêîëüêî õîäîâ óæå ñäåëàë èãðîê
#define USER_PANEL_WIDTH 119
//øåñòü öâåòîâ èñïîëüçóåòñÿ â èãðå äëÿ êâàäðàòèêîâ, ñåäüìîé æå (ïîñëåäíèé) äëÿ òîãî,
//÷òîáû îòìåòèòü êâàäðàòèêè â ïðîöåññå çàëèâêè
dword FIELD_COLORS[]= {0xf18db6, 0x605ca8, 0xfddc80, 0xdc4a20, 0x46b1e2, 0x7e9d1e, 0x232323, 0};
char *BOARD_SIZES[]={ "S", "L", 0 };
//six colors are used in a game for a cells
//and seventh color is used to mark a cell during filling process
dword FIELD_COLORS[] = {0xf18db6, 0x605ca8, 0xfddc80, 0xdc4a20, 0x46b1e2, 0x7e9d1e, 0x232323};
char BOARD_SIZES[] = "S\0L";
#ifdef LANG_RUS
char *BUTTON_CAPTIONS[]={ " ‡ ­®¢® [F2]", " <20>®¬®éì [F1]", " ‚ë室 [Esc]", 0};
char CLICKS_TEXT[]=" Š«¨ª¨: /";
char CLICKS_TEXT[]="Š«¨ª®¢: /";
char LEVELS_TEXT[]=" <20>®«¥:";
char HELP_WINDOW_CAPTION[]="<EFBFBD>®¬®éì";
char *HELP_TEXT[]={ "Š ª ¨£à âì ¢® Flood-it?",
"",
"‡ ¯®«­¨â¥ ¯®«¥ ®¤­¨¬ 梥⮬ §  ®£à ­¨ç¥­­®¥ ç¨á«® 室®¢.",
"ˆ£à  ­ ç¨­ ¥âáï á ¢¥àå­¥© «¥¢®© ª«¥âª¨. ‚ë¡¥à¨â¥ 梥â, ­ ¦ ¢ ­  ®¤¨­ ¨§",
"ª¢ ¤à â¨ª®¢ á«¥¢ , ¨ ª«¥âª¨ ®ªà áïâáï í⨬ 梥⮬ - â ª ¢ë ¯à¨á®¥¤¨­¨â¥",
"á®á¥¤­¨¥ ª«¥âª¨ ⮩ ¦¥ ®ªà áª¨. ‡ å¢ â¨âì ¯®«¥ ­ã¦­® §  ¬¨­¨¬ «ì­®¥",
"ç¨á«® 室®¢. <20>®è £®¢ ï áâà â¥£¨ï á ¨­â¥à¥á­ë¬ ¯à¨­æ¨¯®¬ - ¨§¬¥­¨áì,",
"çâ®¡ë ¯®¡¥¤¨âì!",
"‚ë¡¥à¨â¥ 梥â, ­ ¦ ¢ ­  ®¤¨­ ¨§ ª¢ ¤à â¨ª®¢. Š«¥âª¨ ®ªà áïâáï",
"í⨬ 梥⮬ <20>€—ˆ<E28094>€Ÿ <E2809A><EFBFBD>…‰ ‹…‚މ - â ª ¢ë ¯à¨á®¥¤¨­¨â¥",
"á®á¥¤­¨¥ ª«¥âª¨ ⮩ ¦¥ ®ªà áª¨. ‡ å¢ â¨âì ¯®«¥ ­ã¦­® § ",
"®£à ­¨ç¥­­®¥ ç¨á«® 室®¢. „®áâ㯭® ¤¢  à §¬¥à  ¤®áª¨.",
"",
"ˆ£à âì â ª¦¥ ¬®¦­® ª« ¢¨è ¬¨:",
"[Q] [W] [E]",
@ -62,28 +57,25 @@ char *BOARD_SIZES[]={ "S", "L", 0 };
"vajutades nuppudele vasakul. Kui sa muudad värvi pragusel alal,",
"siis iga kokkupuutuv sama värv muutub samaks. Nii saad ujutada",
"teised alad mänguväljal üle. Valida saad 2 mänguvälja suuruse",
"vahel. Proovi väli üle ujutada etteandtud käikude arvuga!",
"Kaasahaarav ja lõbus!",
"vahel.",
"",
"Mängida saab ka klaviatuuriga:",
"[Q] [W] [E]",
"[A] [S] [D]",
0};
#else
char *BUTTON_CAPTIONS[]={ "New Game [F2]", "Help [F1]", "Exit [Esc]", 0};
char *BUTTON_CAPTIONS[]={ "Restart [F2]", " Help [F1]", " Exit [Esc]", 0};
char CLICKS_TEXT[]="Clicks: /";
char LEVELS_TEXT[]="Board:";
char HELP_WINDOW_CAPTION[]="Help";
char *HELP_TEXT[]={ "How to play Flood-it?",
"",
"Flood the whole board with one color within the allowed steps.",
"You start from the top left corner and progress by selecting one",
"You start from the TOP LEFT corner and progress by selecting one",
"of the colored buttons on the left. When you change your current area",
"color, every adjacent square with the same color also changes, that",
"way you can flood other areas of the board. Select from 3 sizes of",
"way you can flood other areas of the board. Select from 2 sizes of",
"the board and try to flood-it in the least amount of steps!",
"Addictive and Fun!",
"",
"You can also play with keyboard:",
"[Q] [W] [E]",
@ -92,7 +84,7 @@ char *BOARD_SIZES[]={ "S", "L", 0 };
#endif
unsigned char color_matrix[28*28]; //öâåòà äëÿ ïîëÿ ñ êâàäðàòèêàìè
unsigned char color_matrix[28*28]; //our field
unsigned char loss_matrix[14*14]={
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
@ -132,36 +124,21 @@ void main()
{
int key, id;
set_board_size(0); //small board by default
new_game();
loop()
{
switch(WaitEvent())
loop() switch(WaitEvent())
{
case evButton:
id = GetButtonID();
IF (id==1) || (id==4) ExitProcess();
IF (id==2) goto _NEW_GAME_MARK;
IF (id==3) goto _HELP_MARK;
IF (id>=100)
{
IF (id>=100) {
make_turn(id-100);
break;
}
if (id>=10)
{
id=id-10*3;
IF (BLOCK_SIZE == DIFFICULTY_LEV_PARAMS[id]) break; //âûáðàí òîò æå ðàçìåð
BLOCK_SIZE = DIFFICULTY_LEV_PARAMS[id]; //ðàçìåð êâàäðàòèêà
BLOCKS_NUM = DIFFICULTY_LEV_PARAMS[id+1]; //êîëè÷åñòâî êâàäðàòèêîâ ïî Õ è ïî Y
MAX_CLICKS = DIFFICULTY_LEV_PARAMS[id+2]; //ìàêñèìàëüíîå êîëè÷åñòâî êëèêîâ äî âûèãðûøà
new_game();
MoveSize(-1, -1, BLOCK_SIZE*BLOCKS_NUM +14+USER_PANEL_WIDTH, BLOCK_SIZE*BLOCKS_NUM +GetSkinHeight()+14);
}
if (id==10) set_board_size(0);
if (id==11) set_board_size(1);
break;
case evKey:
key = GetKeyScancode();
@ -170,7 +147,8 @@ void main()
IF (key==59) //F1
{
_HELP_MARK:
CreateThread(#help,#stak);
CreateThread(#help_thread,#help_window_stak);
break;
}
IF (key==60) //F2
{
@ -178,6 +156,7 @@ void main()
new_game();
draw_clicks_num();
draw_field();
break;
}
IF (key==16) make_turn(0); //Q
IF (key==17) make_turn(1); //W
@ -190,94 +169,115 @@ void main()
draw_window();
}
}
void set_board_size(char s)
{
if (board_size != s) {
board_size = s;
BLOCKS_NUM = board_size + 1 * DEFAULT_BLOCK_COUNT;
MAX_CLICKS = board_size + 1 * DEFAULT_MAX_CLICKS;
BLOCK_SIZE = GetScreenHeight() - 70 / BLOCKS_NUM;
if (BLOCK_SIZE > MAX_BLOCK_SIZE) BLOCK_SIZE = MAX_BLOCK_SIZE;
new_game();
MoveSize(-1, -1, BLOCK_SIZE*BLOCKS_NUM +14+USER_PANEL_WIDTH,
BLOCK_SIZE*BLOCKS_NUM +GetSkinHeight()+14);
}
}
void make_turn(int turn_id)
{
IF (color_matrix[0]==turn_id) return; //åñëè öâåò ïåðâîé ôèøêè òàêîé æå, èãíîðèðóåì áåññìûñëåííûé õîä
IF (CLICKS>=MAX_CLICKS) return; //åñëè èãðà çàêîí÷åíà
IF (color_matrix[0]==turn_id) return; //ignore no-sence click: first item color is equal to a new color
IF (!game_is_ended()) {
CLICKS++;
draw_clicks_num();
fill_field(turn_id);
draw_field();
check_for_end(); //åñëè èãðà çàêîí÷åíà
if (!game_is_ended()) draw_field();
}
}
void draw_window()
{
int i, j;
int i;
#define BUTTON_SIZE 28
sc.get();
DefineAndDrawWindow(300,176, BLOCK_SIZE*BLOCKS_NUM +14+USER_PANEL_WIDTH, BLOCK_SIZE*BLOCKS_NUM +GetSkinHeight()+14, 0x74,sc.work,0,0,"Flood-it!");
DefineAndDrawWindow(300,176, BLOCK_SIZE*BLOCKS_NUM +14+USER_PANEL_WIDTH,
BLOCK_SIZE*BLOCKS_NUM +GetSkinHeight()+14, 0x74,0,"Flood-it!");
//ïðîâåðÿåì íå ñõëîïíóòî ëè îêíî â çàãîëîâîê
// Fix rolled-up bug
GetProcessInfo(#Form, SelfInfo);
IF (Form.status_window==4) return;
//çàêðàøèâàåì ôîí -> óìåíüøàåò ïåðåðèñîâêó
// Fill background to reduce window redraw
for (i=0;i<=4;i++)
{
IF (i<>4)
DrawRegion(USER_PANEL_WIDTH+i-5,i, BLOCK_SIZE*BLOCKS_NUM +9-i-i, BLOCK_SIZE*BLOCKS_NUM+9-i-i, sc.work);
else
DrawRegion(USER_PANEL_WIDTH+i-5,i, BLOCK_SIZE*BLOCKS_NUM +9-i-i, BLOCK_SIZE*BLOCKS_NUM+9-i-i, sc.work_graph); //îáîäîê
ESI = sc.work;
IF (i==4) ESI = sc.work_graph;
DrawRegion(USER_PANEL_WIDTH+i-5,i, BLOCK_SIZE*BLOCKS_NUM +9-i-i, ESI);
}
DrawBar(0,0, USER_PANEL_WIDTH-5, BLOCK_SIZE*BLOCKS_NUM+10, sc.work);
//êíîïî÷êè çàëèâêè
for (i=0;i<2;i++)
for (j=0;j<3;j++)
DefineButton(j*BUTTON_SIZE+17,i*BUTTON_SIZE+15,BUTTON_SIZE,BUTTON_SIZE, i*3+j+100,FIELD_COLORS[i*3+j]);
// Main buttons to fill the board
#define FILL_BUTTON_SIZE BUTTON_SIZE+8
for (i=0;i<6;i++)
DefineButton(i%3*FILL_BUTTON_SIZE+17,i/3*FILL_BUTTON_SIZE+15,FILL_BUTTON_SIZE,FILL_BUTTON_SIZE, i+100,FIELD_COLORS[i]);
//êíîïî÷êè äåéñòâèé
for (j=0;j<3;j++)
// Menu buttons
for (i=0;i<3;i++)
{
DefineButton(17,j*25+120, 13*6+6, 20, j+2,sc.work_button);
WriteText(17+4,j*25+127,0x80,sc.work_button_text,BUTTON_CAPTIONS[j],0);
DefineButton(17,i*31+140, 13*8+6, 25, i+2,sc.work_button);
WriteText(17+4,i*31+146,0x90,sc.work_button_text,BUTTON_CAPTIONS[i],0);
}
//êíîïî÷êè âûáîðà óðîâíÿ ñëîæíîñòè
WriteText(17,BLOCKS_NUM*BLOCK_SIZE-20+7,0x80,sc.work_text,#LEVELS_TEXT,0);
for (j=0;j<2;j++)
// Board size
WriteText(17,BLOCKS_NUM*BLOCK_SIZE-25+7,0x90,sc.work_text,#LEVELS_TEXT,0);
for (i=0;i<2;i++)
{
DefineButton(j*25+56,BLOCKS_NUM*BLOCK_SIZE-20, 20,20, j+10,sc.work_button);
IF (board_size == i) {
ESI=sc.work_button;
EDI=sc.work_button_text;
} ELSE {
ESI = sc.work;
EDI = sc.work_text;
}
IF (BLOCK_SIZE == DIFFICULTY_LEV_PARAMS[j*3]) EDI=0x800080;
else EDI=sc.work_button_text;
WriteText(j*25+56+8,BLOCKS_NUM*BLOCK_SIZE-20+7,0x80,EDI,BOARD_SIZES[j],0);
WriteText(j*25+56+9,BLOCKS_NUM*BLOCK_SIZE-20+7,0x80,EDI,BOARD_SIZES[j],0);
DefineButton(i*32+69,BLOCKS_NUM*BLOCK_SIZE-24, 26,25, i+10,ESI);
WriteText(i*32+69+9,BLOCKS_NUM*BLOCK_SIZE-24+6,0x90,EDI,#BOARD_SIZES+i+i,0);
$add ebx, 1<<16 //bold
$int 0x40
}
draw_clicks_num();
draw_field();
}
void randomly_fill_the_board()
{
int i;
for (i=0;i<BLOCKS_NUM*BLOCKS_NUM;i++) {
color_matrix[i] = random(6);
}
}
void new_game()
{
int i;
CLICKS = 0;
for (i=0;i<BLOCKS_NUM*BLOCKS_NUM;i++)
color_matrix[i] = random(6);
game_end = false;
randomly_fill_the_board();
}
void fill_field(int new_color_id)
{
int i, j,
old_color_id=color_matrix[0],
restart;
int cur_cell;
#define MARKED 6
color_matrix[0]=MARKED;
@ -289,15 +289,16 @@ void fill_field(int new_color_id)
for (i=0;i<BLOCKS_NUM;i++)
for (j=0;j<BLOCKS_NUM;j++)
{
IF (color_matrix[i*BLOCKS_NUM+j]<>old_color_id) continue; //åñëè ôèøêà íå íóæíîãî öâåòà èä¸ì äàëüøå
IF (color_matrix[i*BLOCKS_NUM+j]==MARKED) continue; //åñëè ôèøêà óæå îòìå÷åíà, èä¸ì äàëåå
cur_cell = i*BLOCKS_NUM+j;
IF (color_matrix[cur_cell]<>old_color_id) continue; //if not a needed color then continue
IF (color_matrix[cur_cell]==MARKED) continue; //if already marked then continue
IF (j>0) && (color_matrix[i*BLOCKS_NUM+j-1]==MARKED) color_matrix[i*BLOCKS_NUM+j]=MARKED; //ñìîòðèì ëåâûé
IF (i>0) && (color_matrix[i-1*BLOCKS_NUM+j]==MARKED) color_matrix[i*BLOCKS_NUM+j]=MARKED; //ñìîòðèì âåðõíèé
IF (j<BLOCKS_NUM-1) && (color_matrix[i*BLOCKS_NUM+j+1]==MARKED) color_matrix[i*BLOCKS_NUM+j]=MARKED; //ñìîòðèì ïðàâûé
IF (i<BLOCKS_NUM-1) && (color_matrix[i+1*BLOCKS_NUM+j]==MARKED) color_matrix[i*BLOCKS_NUM+j]=MARKED; //ñìîòðèì íèæíèé
IF (j>0) && (color_matrix[i*BLOCKS_NUM+j-1]==MARKED) color_matrix[cur_cell]=MARKED; //left
IF (i>0) && (color_matrix[i-1*BLOCKS_NUM+j]==MARKED) color_matrix[cur_cell]=MARKED; //top
IF (j<BLOCKS_NUM-1) && (color_matrix[i*BLOCKS_NUM+j+1]==MARKED) color_matrix[cur_cell]=MARKED; //right
IF (i<BLOCKS_NUM-1) && (color_matrix[i+1*BLOCKS_NUM+j]==MARKED) color_matrix[cur_cell]=MARKED; //bottom
IF (color_matrix[i*BLOCKS_NUM+j]==MARKED) restart=1; //åñëè ôèøêó îòìåòèëè, òî ïîòîì öèêë íóæíî áóäåò ïðîêðóòèòü ñíà÷àëà - ìîæ åù¸ ÷¸ îòìåòèì
IF (color_matrix[cur_cell]==MARKED) restart=1;
}
IF (restart) goto _RESTART_MARK;
@ -305,101 +306,83 @@ void fill_field(int new_color_id)
IF (color_matrix[i]==MARKED) color_matrix[i]=new_color_id;
}
int check_for_end()
void draw_win_or_loose_animation(dword matrix)
{
int i, j, ii, jj;
if (CLICKS>=MAX_CLICKS) //åñëè ïðîèãðûø
{
IF (CLICKS==MAX_CLICKS) //âûèãðûøü íà ïîñëåäíåì õîäå
{
for (i=0;i<BLOCKS_NUM*BLOCKS_NUM;i++) //ïðîâåðÿåì âñ¸ ëè ïîëå îäíîãî öâåòà, åñëè íåò óõîäèì
IF (color_matrix[i]<>color_matrix[0]) goto _loss_MARK;
goto _WIN_MARK;
}
_loss_MARK:
for (i=0;i<14;i++)
for (i=0;i<14;i++) {
for (j=0;j<14;j++)
{
IF (BLOCK_SIZE == DIFFICULTY_LEV_PARAMS[0])
{
ii=i;
jj=j;
}
else
{
ii=i*2;
jj=j*2;
}
color_matrix[ii*BLOCKS_NUM+jj]=loss_matrix[i*14+j];
color_matrix[ii+1*BLOCKS_NUM+jj]=loss_matrix[i*14+j];
color_matrix[ii*BLOCKS_NUM+jj+1]=loss_matrix[i*14+j];
color_matrix[ii+1*BLOCKS_NUM+jj+1]=loss_matrix[i*14+j];
ii = board_size * 2 + i;
jj = board_size * 2 + j;
color_matrix[ii*BLOCKS_NUM+jj]=
color_matrix[ii+1*BLOCKS_NUM+jj]=
color_matrix[ii*BLOCKS_NUM+jj+1]=
color_matrix[ii+1*BLOCKS_NUM+jj+1]=ESBYTE[i*14+j+matrix];
draw_field();
//Pause(5);
}
}
}
int field_is_solid()
{
int i;
if (game_end) return 1;
game_end = 1;
for (i=0;i<BLOCKS_NUM*BLOCKS_NUM;i++) {
IF (color_matrix[i]<>color_matrix[0]) game_end = 0;
}
return game_end;
}
int game_is_ended()
{
int i;
if (game_end) return 1;
if (CLICKS>=MAX_CLICKS) //check for game end via max_clicks
{
IF (CLICKS==MAX_CLICKS) //probably user won on the last step
{
if (field_is_solid()) goto _WIN_MARK;
}
draw_win_or_loose_animation(#loss_matrix);
return 1;
}
} else {
if (!field_is_solid()) return 0;
for (i=0;i<BLOCKS_NUM*BLOCKS_NUM;i++) //ïðîâåðÿåì âñ¸ ëè ïîëå îäíîãî öâåòà, åñëè íåò óõîäèì
IF (color_matrix[i]<>color_matrix[0]) return 0;
//âñ¸ ïîëå îäíîãî öâåòà è ôèøåê ìåíüøå MAX_CLICKS -> ïîáåäà
//field is solid and CLICKS<MAX_CLICKS -> win
_WIN_MARK:
for (i=0;i<25;i++)
{
new_game();
randomly_fill_the_board();
draw_field();
Pause(7);
}
CLICKS=MAX_CLICKS;
for (i=0;i<14;i++)
for (j=0;j<14;j++)
{
IF (BLOCK_SIZE == DIFFICULTY_LEV_PARAMS[0]) //çàëèâêà äëÿ ïîëåé ðàçíîãî ðàçìåðà ðàçíàÿ
{
ii=i;
jj=j;
}
else
{
ii=i*2;
jj=j*2;
}
color_matrix[ii*BLOCKS_NUM+jj]=win_matrix[i*14+j];
color_matrix[ii+1*BLOCKS_NUM+jj]=win_matrix[i*14+j];
color_matrix[ii*BLOCKS_NUM+jj+1]=win_matrix[i*14+j];
color_matrix[ii+1*BLOCKS_NUM+jj+1]=win_matrix[i*14+j];
draw_field();
//Pause(5);
}
draw_win_or_loose_animation(#win_matrix);
return 1;
}
}
void draw_clicks_num()
{
#define TEXT_X 21
#define TEXT_Y 92
#define TEXT_X 19
#define TEXT_Y 100
DrawBar(TEXT_X, TEXT_Y, USER_PANEL_WIDTH-TEXT_X-3,9, sc.work);
DrawBar(TEXT_X, TEXT_Y, USER_PANEL_WIDTH-TEXT_X-5,16, sc.work);
WriteText(TEXT_X,TEXT_Y,0x80,sc.work_text,#CLICKS_TEXT,0);
WriteText(TEXT_X,TEXT_Y,0x90,sc.work_text,#CLICKS_TEXT,0);
IF (CLICKS<10) EBX=9*6+TEXT_X;
else EBX=8*6+TEXT_X;
IF (CLICKS<10) EBX=9*8+TEXT_X;
else EBX=8*8+TEXT_X;
WriteText(EBX,TEXT_Y,0x80,sc.work_text,IntToStr(CLICKS),0);
WriteText(EBX,TEXT_Y,0x90,sc.work_text,itoa_nosign(CLICKS),0);
WriteText(11*6+TEXT_X,TEXT_Y,0x80,sc.work_text,IntToStr(MAX_CLICKS),0);
WriteText(11*8+TEXT_X,TEXT_Y,0x90,sc.work_text,itoa_nosign(MAX_CLICKS),0);
}
@ -417,7 +400,7 @@ void draw_field()
}
void help()
void help_thread()
{
int i;
@ -429,10 +412,10 @@ void help()
IF (GetKeyScancode()==001) ExitProcess(); //Esc
break;
case evReDraw:
for (i=0; HELP_TEXT[i]<>0; i++;) {};
DefineAndDrawWindow(400,200,610,i*19+25+GetSkinHeight(),0x34,sc.work,0,0,#HELP_WINDOW_CAPTION);
WriteText(6,12,0x90,sc.work_text,HELP_TEXT[0],0); //ýòî äëÿ æèðíîãî øðèôòà
for (i=0; HELP_TEXT[i]<>0; i++;) WriteText(5,i*19+12,0x90,sc.work_text,HELP_TEXT[i],0);
//for (i=0; HELP_TEXT[i]<>0; i++;) {}; //calculate line numbers, predefined i=12 used to reduce size
DefineAndDrawWindow(400,200,612,12*19+25+GetSkinHeight(),0x34,sc.work,#HELP_WINDOW_CAPTION);
WriteText(6,12,0x90,sc.work_text,HELP_TEXT[0],0); //for a bold text
for (i=0; HELP_TEXT[i]<>0; i++;) WriteText(7,i*19+12,0x90,sc.work_text,HELP_TEXT[i],0);
}
}

View File

@ -23,6 +23,10 @@ dword I_Path = 0;
#define BT_HIDE 0x40000000
#define BT_NOFRAME 0x20000000
#define bool char
#define true 1
#define false 0
//-------------------------------------------------------------------------
@ -94,16 +98,11 @@ inline fastcall Pause(dword EBX)
//------------------------------------------------------------------------------
char buffer[11]="";
inline fastcall dword IntToStr(dword ESI)
char buffer[5];
inline fastcall dword itoa_nosign(dword ESI)
{
$mov edi, #buffer
$mov ecx, 10
$test esi, esi
$jns f1
$mov al, '-'
$stosb
$neg esi
f1:
$mov eax, esi
$push -'0'
@ -126,7 +125,7 @@ f3:
//------------------------------------------------------------------------------
void DefineAndDrawWindow(dword x,y,sizeX,sizeY,byte mainAreaType,dword mainAreaColour,byte headerType,dword headerColour,EDI)
void DefineAndDrawWindow(dword x,y,sizeX,sizeY,byte mainAreaType,dword mainAreaColour,EDI)
{
EAX = 12; // function 12:tell os about windowdraw
EBX = 1;
@ -135,7 +134,7 @@ void DefineAndDrawWindow(dword x,y,sizeX,sizeY,byte mainAreaType,dword mainAreaC
EBX = x << 16 + sizeX;
ECX = y << 16 + sizeY;
EDX = mainAreaType << 24 | mainAreaColour;
ESI = headerType << 24 | headerColour;
ESI = 0;
$xor eax,eax
$int 0x40
@ -166,6 +165,13 @@ dword GetSkinHeight()
$pop ebx
}
inline fastcall int GetScreenHeight()
{
$mov eax, 14
$int 0x40
$and eax,0x0000FFFF
}
void WriteText(dword x,y,byte fontType, dword color, EDX, ESI)
{
EAX = 4;
@ -190,12 +196,20 @@ void DefineButton(dword x,y,w,h,EDX,ESI)
$int 0x40
}
void DrawRegion(dword x,y,width,height,EDX)
void DrawRegion(dword x,y,s,EDX)
{
DrawBar(x,y,width,1,EDX);
DrawBar(x,y+height,width,1,EDX);
DrawBar(x,y,1,height,EDX);
DrawBar(x+width,y,1,height+1,EDX);
EAX = 13;
EBX = x<<16+s;
ECX = y<<16+1;
$int 0x40
ECX = y+s<<16+1;
$int 0x40
EBX = x<<16+1;
ECX = y<<16+s;
$int 0x40
EBX = x+s<<16+1;
ECX = y<<16+s+1;
$int 0x40
}
inline fastcall dword WriteDebug(dword EDX)