#define INC_EXEC
#define INC_DOS
#define INC_GRAPHICS
#define INC_INTUITION
#define NO_BASE#include ".H:macros.h"
#include ".H:game.h"
/*-------------------------------------------------------------------------*/
EXTERN SCR * drawscr = NL;
EXTERN SCR_BUF * buf[NUMBUF] = {
NL,
NL
};
EXTERN ULONG drawsig = NL;
EXTERN ULONG usersig = NL;
EXTERN MSG_PORT * drawport = NL;
EXTERN MSG_PORT * userport = NL;
EXTERN BIT_MAP_OBJ * bmo_cur = NL;
EXTERN ULONG RangeSeed;
/*-------------------------------------------------------------------------*/
ULONG current = NL, nextdraw = NL, nextswap = NL;
ULONG dbuf_status[NUMBUF] = {
NL,
NL
};
ULONG draw_status = DRAW;
ULONG scro_status = WAIT;
ULONG nbmo = NL; /*num of curent bitmapobject */
/*-------------------------------------------------------------------------*/
EXTERN VOID InitAllLib(VOID);
EXTERN VOID UnInitAllLib(VOID);
EXTERN VOID InitIntuition(VOID);
EXTERN VOID UnInitIntuition(VOID);
EXTERN BOOL HandleUserMsg(INTUI_MSG * usermsg);
EXTERN VOID InitAllBitMap(VOID);
EXTERN VOID UnInitAllBitMap(VOID);
EXTERN VOID Redraw(BIT_MAP_OBJ * obj, ULONG n, WORD mousex, WORD mousey);
VOID main(VOID);
VOID bye(ULONG n);
VOID wbmain(VOID) {
main();
}
/*-------------------------------------------------------------------------*/
VOID main(VOID) {
BOOL end = FALSE;
ULONG sig = 0, debug = 0;
UWORD x, y;
InitAllLib();
FindMyTask();
InitCel();
InitAllBitMap();
InitIntuition();
current = 0;
nextdraw = 1;
nextswap = 1;
dbuf_status[0] = OK_REDRAW;
dbuf_status[1] = OK_REDRAW;
draw_status = DRAW;
WHILE(end == FALSE) {
INTUI_MSG * usermsg;
MSG * drawmsg;
IF(sig & usersig) {
WHILE(usermsg = (INTUI_MSG * ) GT_GetIMsg(userport)) {
end = HandleUserMsg(usermsg);
GT_ReplyIMsg(usermsg);
}
}
IF(sig & drawsig) {
WHILE(drawmsg = (MSG * ) GetMsg(drawport)) {
REGISTER current = NL;
current = (ULONG) * ((APTR ** )(drawmsg + 1));
dbuf_status[current ^ 1] = OK_REDRAW;
}
}
GetStatus(bmo_cur);
IF(draw_status != WAIT OR scro_status == DRAW) /*Donc draw_status==DRAW|REFR|SCRO|SMOU */ {
IF(dbuf_status[nextdraw] == OK_REDRAW) {
IF(draw_status == SCRO) {
Scroll(nextdraw);
DrawBgd(nextdraw);
scro_status = DRAW;
draw_status = REFR;
}
ELSE
IF(scro_status == DRAW) {
REGISTER BOOL smouted = Smout(nextdraw);
DrawBgd(nextdraw);
IF(smouted == TRUE) scro_status = WAIT;
}
ELSE
IF(draw_status == DRAW) {
DrawBgd(nextdraw);
DrawObj(bmo_cur, nextdraw);
draw_status = REFR;
}
ELSE
IF(draw_status == REFR) {
DrawBgd(nextdraw);
draw_status = WAIT;
}
dbuf_status[nextdraw] = OK_SWAPIN;
nextdraw ^= 1;
}
IF(dbuf_status[nextswap] == OK_SWAPIN) {
buf[nextswap] -> sb_DBufInfo -> dbi_SafeMessage.mn_ReplyPort = drawport;
WaitBlit();
IF(ChangeScreenBuffer(drawscr, buf[nextswap])) {
dbuf_status[nextswap] = 0;
current = nextswap;
nextswap ^= 1;
}
ELSE {
WaitTOF();
}
}
sig = Wait(drawsig | usersig);
}
}
bye(0);
}
VOID bye(ULONG n) {
UnInitIntuition();
UnInitAllBitMap();
UnInitAllLib();
exit(n);
}
/*menu.c */
#define INC_GRAPHICS
#define INC_INTUITION
#define INC_GADTOOLS
#define NO_BASE#include ".H:macros.h"
#include ".H:game.h"
/*-------------------------------------------------------------------------*/
EXTERN ULONG nbmo; /*num of curent bitmapobject */
EXTERN LONG stepx, stepy; /*offset of scroll */
EXTERN WIN * userwin;
EXTERN BIT_MAP_OBJ * roads[13];
EXTERN BIT_MAP_OBJ * house[8];
EXTERN BIT_MAP_OBJ * comme[8];
EXTERN BIT_MAP_OBJ * indus[8];
EXTERN BIT_MAP_OBJ * agric[8];
EXTERN BIT_MAP_OBJ * base[4];
EXTERN BIT_MAP_OBJ * bmo_cur;
EXTERN GAD ga_house;
EXTERN GAD ga_agric;
EXTERN GAD ga_comme;
EXTERN GAD ga_indus;
EXTERN GAD ga_rails;
EXTERN GAD ga_roads;
EXTERN GAD ga_polic;
EXTERN GAD ga_pompi;
EXTERN GAD ga_avion;
EXTERN GAD ga_batea;
EXTERN GAD ga_ecolo;
EXTERN GAD ga_money;
EXTERN GAD * ga_click;
/*-------------------------------------------------------------------------*/
MENU * menu = NL;
MENU_NEW nm[] = {
{
NM_TITLE,
" Game ",
NL,
NL,
NL,
NL,
},
{
NM_ITEM,
" Restart this game ",
NL,
NL,
NL,
(APTR) MENU_RESTART,
},
{
NM_ITEM,
" Load... ",
NL,
NL,
NL,
(APTR) MENU_LOAD,
},
{
NM_ITEM,
" Save... ",
NL,
NL,
NL,
(APTR) MENU_SAVE,
},
{
NM_ITEM,
" About. ",
NL,
NL,
NL,
(APTR) MENU_ABOUT,
},
{
NM_ITEM,
NM_BARLABEL,
NL,
NL,
NL,
NL,
},
{
NM_ITEM,
" Quit. ",
NL,
NL,
NL,
(APTR) MENU_QUIT,
},
{
NM_TITLE,
" Scroll ",
NL,
NL,
NL,
NL,
},
{
NM_ITEM,
" + ",
NL,
NL,
NL,
(APTR) MENU_SINC,
},
{
NM_ITEM,
" - ",
NL,
NL,
NL,
(APTR) MENU_SDEC,
},
{
NM_END,
NL,
NL,
NL,
NL,
NL,
},
};
VOID ExcludeGadget(ULONG type);
/*-------------------------------------------------------------------------*/
BOOL HandleUserMsg(INTUI_MSG * usermsg) {
REGISTER code = NL;
BOOL end = FALSE;
code = usermsg -> Code;
ga_click = (GAD * ) usermsg -> IAddress;
SWITCH(usermsg -> Class) {
CASE IDCMP_MENUPICK: {
MENU_ITEM * item;
item = (MENU_ITEM * ) ItemAddress(menu, code);
WHILE(code != MENUNULL) {
SWITCH((ULONG) GTMENUITEM_USERDATA(item)) {
CASE MENU_RESTART: BREAK;
CASE MENU_LOAD: BREAK;
CASE MENU_SAVE: BREAK;
CASE MENU_QUIT: end = TRUE;
BREAK;
CASE MENU_SINC: stepx++;
stepy++;
BREAK;
CASE MENU_SDEC: stepx--;
stepy--;
BREAK;
}
code = item -> NextSelect;
}
}
CASE IDCMP_GADGETUP:
CASE IDCMP_GADGETDOWN: {
switch (ga_click -> GadgetID) {
CASE GA_HOUSE: ExcludeGadget(GA_HOUSE);
bmo_cur = base[0];
BREAK;
CASE GA_COMME: ExcludeGadget(GA_COMME);
bmo_cur = base[1];
BREAK;
CASE GA_INDUS: ExcludeGadget(GA_INDUS);
bmo_cur = base[2];
BREAK;
CASE GA_AGRIC: ExcludeGadget(GA_AGRIC);
bmo_cur = base[3];
BREAK;
CASE GA_AVION: ExcludeGadget(GA_AVION);
BREAK;
CASE GA_BATEA: ExcludeGadget(GA_BATEA);
BREAK;
CASE GA_ECOLO: ExcludeGadget(GA_ECOLO);
BREAK;
CASE GA_MONEY: ExcludeGadget(GA_MONEY);
BREAK;
CASE GA_POLIC: ExcludeGadget(GA_POLIC);
BREAK;
CASE GA_POMPI: ExcludeGadget(GA_POMPI);
BREAK;
CASE GA_RAILS: ExcludeGadget(GA_RAILS);
BREAK;
CASE GA_ROADS: ExcludeGadget(GA_ROADS);
bmo_cur = roads[4];
BREAK;
}
BREAK;
}
BREAK;
}
RETURN(end);
}
VOID ExcludeGadget(ULONG type) {
IF((ga_house.GadgetID != type) AND(ga_house.Flags ANDBIT GFLG_SELECTED)) {
ga_house.Flags &= ~GFLG_SELECTED;
}
IF((ga_agric.GadgetID != type) AND(ga_agric.Flags ANDBIT GFLG_SELECTED)) {
ga_agric.Flags &= ~GFLG_SELECTED;
}
IF((ga_comme.GadgetID != type) AND(ga_comme.Flags ANDBIT GFLG_SELECTED)) {
ga_comme.Flags &= ~GFLG_SELECTED;
}
IF((ga_indus.GadgetID != type) AND(ga_indus.Flags ANDBIT GFLG_SELECTED)) {
ga_indus.Flags &= ~GFLG_SELECTED;
}
IF((ga_rails.GadgetID != type) AND(ga_rails.Flags ANDBIT GFLG_SELECTED)) {
ga_rails.Flags &= ~GFLG_SELECTED;
}
IF((ga_roads.GadgetID != type) AND(ga_roads.Flags ANDBIT GFLG_SELECTED)) {
ga_roads.Flags &= ~GFLG_SELECTED;
}
IF((ga_polic.GadgetID != type) AND(ga_polic.Flags ANDBIT GFLG_SELECTED)) {
ga_polic.Flags &= ~GFLG_SELECTED;
}
IF((ga_pompi.GadgetID != type) AND(ga_pompi.Flags ANDBIT GFLG_SELECTED)) {
ga_pompi.Flags &= ~GFLG_SELECTED;
}
IF((ga_avion.GadgetID != type) AND(ga_avion.Flags ANDBIT GFLG_SELECTED)) {
ga_avion.Flags &= ~GFLG_SELECTED;
}
IF((ga_batea.GadgetID != type) AND(ga_batea.Flags ANDBIT GFLG_SELECTED)) {
ga_batea.Flags &= ~GFLG_SELECTED;
}
IF((ga_ecolo.GadgetID != type) AND(ga_ecolo.Flags ANDBIT GFLG_SELECTED)) {
ga_ecolo.Flags &= ~GFLG_SELECTED;
}
IF((ga_money.GadgetID != type) AND(ga_money.Flags ANDBIT GFLG_SELECTED)) {
ga_money.Flags &= ~GFLG_SELECTED;
}
RefreshGList( & ga_money, userwin, NL, -1);
}
/*lib.c */
#define INC_EXEC
#define INC_GRAPHICS
#define INC_INTUITION
#define INC_GADTOOLS
#define INC_FONT#include ".H:macros.h"
/*-------------------------------------------------------------------------*/
VOID InitAllLib(VOID) {
OpenExec();
OpenGraphics();
OpenIntuition();
OpenGadtools();
OpenFontDisk();
}
/*-------------------------------------------------------------------------*/
VOID UnInitAllLib(VOID) {
CloseFontDisk();
CloseGadtools();
CloseIntuition();
CloseGraphics();
CloseExec();
}
/*-------------------------------------------------------------------------*/
/*init.c */
#define INC_EXEC
#define INC_GRAPHICS
#define INC_INTUITION
#define INC_GADTOOLS
#define INC_UTILITY
#define INC_FONT
#define NO_BASE#include ".H:macros.h"
#include ".H:game.h"
/*-------------------------------------------------------------------------*/
EXTERN BIT_MAP * userbg = NL;
EXTERN MENU * menu;
EXTERN MENU_NEW nm[];
EXTERN GAD ga_money;
EXTERN CEL celbgnd[120][81]; /*drawbm WIDTH, HEIGHT */
/*-------------------------------------------------------------------------*/
#define DSCR_ID(DEFAULT_MONITOR_ID | LORES_KEY)
#define USCR_ID(DEFAULT_MONITOR_ID | LORES_KEY)
TAG drawvc[] = {
VTAG_BORDERSPRITE_SET,
TRUE,
VTAG_SPRITERESN_SET,
SPRITERESN_70NS,
0
};
TAG uservc[] = {
VTAG_BORDERSPRITE_SET,
TRUE,
VTAG_SPRITERESN_SET,
SPRITERESN_70NS,
0
};
SCR * drawscr = NL;
SCR * userscr = NL; /*SPRITERESN_ECS 0 */
WIN * drawwin = NL; /*SPRITERESN_140NS 1 */
WIN * userwin = NL; /*SPRITERESN_70NS 2 */
APTR drawvi = NL; /*SPRITERESN_35NS 3 */
APTR uservi = NL; /*SPRITERESN_DEFAULT -1 */
ULONG drawsig = NL;
ULONG usersig = NL;
MSG_PORT * drawport = NL;
MSG_PORT * userport = NL;
TEXT_FONT * tfont = NL;
TEXT_ATTR font = {
(STRPTR)
"topaz.font",
8,
0x00,
0x00
};
SCR_BUF * buf[NUMBUF] = {
NL,
NL
};
RAST_PORT * rp[NUMBUF] = {
NL,
NL
};
/*-------------------------------------------------------------------------*/
ULONG palette32[98] = {
0x00200000,
/*Record Header */
0x05555555,
0x06666666,
0x06666666,
0x22222222,
0x28888888,
0x28888888,
0x44444444,
0x50000000,
0x50000000,
0x66666666,
0x78888888,
0x78888888,
0x86666666,
0x9EEEEEEE,
0x9EEEEEEE,
0xA9999999,
0xC7777777,
0xC7777777,
0xCBBBBBBB,
0xEFFFFFFF,
0xEFFFFFFF,
0xD4444444,
0xF9999999,
0xF9999999,
0xD4444444,
0xF9999999,
0xF9999999,
0xD4444444,
0xF9999999,
0x06666666,
0x74444444,
0xC6666666,
0xF9999999,
0x22222222,
0x9EEEEEEE,
0xF9999999,
0x05555555,
0x86666666,
0xE1111111,
0x05555555,
0x78888888,
0xC9999999,
0xD4444444,
0x57777777,
0x58888888,
0x52222222,
0x32222222,
0x06666666,
0x78888888,
0x58888888,
0x13333333,
0xA1111111,
0x82222222,
0x23333333,
0xCBBBBBBB,
0xB0000000,
0x37777777,
0x39999999,
0xF8888888,
0x3EEEEEEE,
0x22222222,
0xBBBBBBBB,
0x23333333,
0x0AAAAAAA,
0x80000000,
0x09999999,
0xD4444444,
0x88888888,
0x55555555,
0x2FFFFFFF,
0xB0000000,
0xF9999999,
0x2BBBBBBB,
0xCCCCCCCC,
0x2EEEEEEE,
0xB6666666,
0x9AAAAAAA,
0x48888888,
0xA5555555,
0x3EEEEEEE,
0x3EEEEEEE,
0xD4444444,
0xF9999999,
0x06666666,
0xD4444444,
0xF9999999,
0x06666666,
0xD4444444,
0xF9999999,
0x06666666,
0xD4444444,
0xF9999999,
0x06666666,
0xD4444444,
0xF9999999,
0x06666666,
0x00000000 /*Terminator */
};
UWORD pens[] = {
0,
/*DETAILPEN */
4,
/*BLOCKPEN */
0,
/*TEXTPEN */
6,
/*SHINEPEN */
2,
/*SHADOWPEN */
4,
/*FILLPEN */
1,
/*FILLTEXTPEN */
4,
/*BACKGROUNDPEN */
7,
/*HIGHLIGHTTEXTPEN */
6,
/*BARDETAILPEN */
13,
/*BARBLOCKPEN */
13,
/*BARTRIMPEN */
~0,
};
/*-------------------------------------------------------------------------*/
VOID InitIntuition(VOID);
VOID fill(WORD c, WORD x, WORD y, WORD w, WORD h);
VOID UnInitIntuition(VOID);
/*-------------------------------------------------------------------------*/
VOID InitIntuition(VOID) {
REGISTER x = NL, y = NL;
NewFont(tfont, font);
OpenMsgPort(userport);
usersig = GetSig(userport);
OpenMsgPort(drawport);
drawsig = GetSig(drawport);
drawscr = (SCR * ) OpenScrTag(SA_VideoControl, drawvc,
SA_DisplayID, DSCR_ID,
SA_Left, DSCR_LEFT,
SA_Top, DSCR_TOP,
SA_Width, DSCR_WIDTH,
SA_Height, DSCR_HEIGHT,
SA_Depth, DSCR_DEPTH,
SA_Title, "Draw Screen",
SA_Type, CUSTOMSCREEN,
SA_Draggable, FALSE,
SA_Interleaved, TRUE,
SA_Pens, pens,
SA_Colors32, & palette32[0],
SA_Font, & font, TAG_DONE);
GetVI(drawvi, drawscr);
userscr = (SCR * ) OpenScrTag(SA_Parent, drawscr,
SA_VideoControl, uservc,
SA_DisplayID, USCR_ID,
SA_Left, USCR_LEFT,
SA_Top, USCR_TOP,
SA_Width, USCR_WIDTH,
SA_Height, USCR_HEIGHT,
SA_Depth, USCR_DEPTH,
SA_ShowTitle, FALSE,
SA_Quiet, TRUE,
SA_Draggable, FALSE,
SA_Interleaved, TRUE,
SA_Pens, pens,
SA_Colors32, & palette32[0],
SA_Font, & font,
TAG_DONE);
GetVI(uservi, userscr);
drawwin = (WIN * ) OpenWinTag(WA_CustomScreen, drawscr,
WA_NoCareRefresh, TRUE,
WA_Activate, TRUE,
WA_Borderless, TRUE,
WA_Backdrop, TRUE,
WA_NewLookMenus, TRUE,
TAG_DONE);
drawwin -> UserPort = userport;
ModifyIDCMP(drawwin, IDCMP_MENUPICK);
userwin = (WIN * ) OpenWinTag(WA_CustomScreen, userscr,
WA_NoCareRefresh, TRUE,
WA_Activate, TRUE,
WA_Borderless, TRUE,
WA_Backdrop, TRUE,
WA_NewLookMenus, TRUE,
WA_SuperBitMap, userbg,
WA_Gadgets, & ga_money,
TAG_DONE);
userwin -> UserPort = userport;
ModifyIDCMP(userwin, IDCMP_MENUPICK | IDCMP_GADGETDOWN | IDCMP_GADGETUP);
NewMenu(menu, nm, drawvi, drawwin);
CloneMenu(drawwin, userwin);
NewScrBuf(buf[0], drawscr, NL, SB_SCREEN_BITMAP, 0);
NewScrBuf(buf[1], drawscr, NL, SB_COPY_BITMAP, 1);
NewChip(rp[0], RAST_PORT);
InitRastPort(rp[0]);
NewChip(rp[1], RAST_PORT);
InitRastPort(rp[1]);
rp[0] -> BitMap = buf[0] -> sb_BitMap;
rp[1] -> BitMap = buf[1] -> sb_BitMap;
SetDrMd(rp[0], JAM1);
SetDrMd(rp[1], JAM1);
fill(4, 0, 12, 319, 199);
fill(6, 0, 12, 318, 12);
fill(6, 0, 12, 0, 198);
fill(2, 1, 199, 319, 199);
fill(2, 319, 13, 319, 199);
fill(5, 1, 13, 317, 13);
fill(5, 1, 13, 1, 197);
fill(3, 2, 198, 318, 198);
fill(3, 318, 15, 318, 198);
fill(2, 6, 15, 236, 15);
fill(2, 6, 15, 6, 195);
fill(6, 7, 196, 237, 196);
fill(6, 237, 16, 237, 196);
SetAPen(rp[0], 6); /*blanco.*/
SetAPen(rp[1], 6);
FOR(x = 0; x < 120; x += 2) {
FOR(y = 0; y < 81; y += 2) {
IF(celbgnd[x][y].type == BROUS) {
SetAPen(userwin -> RPort, 20); /*VERT */
}
ELSE
IF(celbgnd[x][y].type == FLOTS) {
SetAPen(userwin -> RPort, 11); /*BLEU */
}
ELSE {
SetAPen(userwin -> RPort, 17); /*MARRON */
}
WritePixel(userwin -> RPort, (x / 2) + 4, (y / 2) + 4);
}
}
}
/*-------------------------------------------------------------------------*/
VOID fill(WORD c, WORD x, WORD y, WORD w, WORD h) {
SetAPen(rp[0], c);
RectFill(rp[0], x, y, w, h);
SetAPen(rp[1], c);
RectFill(rp[1], x, y, w, h);
}
/*-------------------------------------------------------------------------*/
VOID UnInitIntuition(VOID) {
UnCloneMenu(userwin);
RemMenu(menu, drawwin);
CloseWin(userwin);
CloseWin(drawwin);
CloseScr(userscr);
CloseScr(drawscr);
CloseMsgPort(drawport);
CloseMsgPort(userport);
RemVI(drawvi);
RemVI(uservi);
RemScrBuf(buf[0], drawscr);
RemScrBuf(buf[1], drawscr);
RemMem(rp[0], RAST_PORT);
RemMem(rp[1], RAST_PORT);
RemFont(tfont);
}
/*-------------------------------------------------------------------------*/
/*draw.c */
#define INC_GRAPHICS
#define INC_INTUITION
#define NO_BASE#include ".H:macros.h"
#include ".H:game.h"
EXTERN RAST_PORT * rp[NUMBUF];
EXTERN WIN * drawwin;
EXTERN WIN * userwi;
EXTERN ULONG draw_status;
EXTERN CEL celbgnd[120][81]; /*drawbm WIDTH, HEIGHT */
EXTERN CEL celview[23][18]; /*VIEW WIDTH, HEIGHT */
EXTERN BIT_MAP_OBJ * drawbg;
EXTERN BIT_MAP_OBJ * roads[13];
EXTERN BIT_MAP_OBJ * house[8];
EXTERN BIT_MAP_OBJ * comme[8];
EXTERN BIT_MAP_OBJ * indus[8];
EXTERN BIT_MAP_OBJ * agric[8];
EXTERN BIT_MAP_OBJ * base[4];
LONG sx = NL, sy = NL; /*scroll x,y */
LONG mx = NL, my = NL; /*mouse x,y */
LONG stepx = 5, stepy = 5;
ULONG click = FALSE;
VOID GetStatus(BIT_MAP_OBJ * obj);
VOID DrawBgd(SHORT bufn);
VOID Scroll(SHORT bufn);
BOOL Smout(SHORT bufn);
VOID DrawObj(BIT_MAP_OBJ * obj, USHORT bufn);
BOOL SetRoads(WORD bgposx, WORD bgposy);
/*-------------------------------------------------------------------------*/
VOID GetStatus(BIT_MAP_OBJ * obj) {
REGISTER BYTE hwmx = NL, hwmy = NL;
REGISTER UBYTE button = NL;
mx = drawwin -> MouseX;
my = drawwin -> MouseY;
button = Mouse( & hwmx, & hwmy);
IF(mx >= VIEW_LEFT AND mx <= VIEW_WIDTH + VIEW_LEFT AND /*mouse in the view */ my >= VIEW_TOP AND my <= VIEW_HEIGHT + VIEW_TOP) {
draw_status = DRAW;
IF(button ANDBIT LEFT_BUTTON) click = TRUE;
}
sx = NL;
sy = NL;
IF(mx == MOUSE_LEFT) {
sx = -stepx;
draw_status = SCRO;
SetTask40();
}
ELSE
IF(mx == MOUSE_RIGHT) {
sx = +stepx;
draw_status = SCRO;
SetTask40();
}
IF(my == MOUSE_TOP) {
sy = -stepy;
draw_status = SCRO;
SetTask40();
}
ELSE
IF(my == MOUSE_BOTTOM) {
sy = +stepy;
draw_status = SCRO;
SetTask40();
}
IF((mx == MOUSE_LEFT AND hwmx > 0) OR(mx == MOUSE_RIGHT AND hwmx < 0) OR(my == MOUSE_TOP AND hwmy > 0) OR(my == MOUSE_BOTTOM AND hwmy < 0)) {
SetTask10();
}
}
/*-------------------------------------------------------------------------*/
VOID DrawBgd(SHORT bufn) {
BltBitMapRastPort(drawbg -> bm, drawbg -> posx, drawbg -> posy, rp[bufn], VIEW_LEFT, VIEW_TOP, VIEW_WIDTH, VIEW_HEIGHT, BLIT);
}
/*-------------------------------------------------------------------------*/
VOID Scroll(SHORT bufn) {
REGISTER WORD * bgposx = & drawbg -> posx;
REGISTER WORD * bgposy = & drawbg -> posy;
* bgposx += sx;
* bgposy += sy;
IF( * bgposx < 0) {
* bgposx = 0;
}
ELSE
IF( * bgposx > drawbg -> w - VIEW_WIDTH) {
* bgposx = drawbg -> w - VIEW_WIDTH;
}
IF( * bgposy < 0) {
* bgposy = 0;
}
ELSE
IF( * bgposy > drawbg -> h - VIEW_HEIGHT) {
* bgposy = drawbg -> h - VIEW_HEIGHT;
}
}
/*-------------------------------------------------------------------------*/
BOOL Smout(SHORT bufn) {
REGISTER WORD * bgposx = & drawbg -> posx;
REGISTER WORD * bgposy = & drawbg -> posy;
WORD x = ( * bgposx / 10);
WORD y = ( * bgposy / 10);
WORD statusx = FALSE;
WORD statusy = FALSE;
IF(celbgnd[x][y].posx != * bgposx) {
* bgposx += ( * bgposx - celbgnd[x][y].posx > 4 ? +1 : -1);
statusx = FALSE;
}
ELSE {
statusx = TRUE;
}
IF(celbgnd[x][y].posy != * bgposy) {
* bgposy += ( * bgposy - celbgnd[x][y].posy > 4 ? +1 : -1);
statusy = FALSE;
}
ELSE {
statusy = TRUE;
}
BltBitMapRastPort(drawbg -> bm, * bgposx, * bgposy, rp[bufn], VIEW_LEFT, VIEW_TOP, VIEW_WIDTH, VIEW_HEIGHT, BLIT);
IF(statusx != TRUE OR statusy != TRUE) {
RETURN(FALSE);
}
ELSE {
RETURN(TRUE);
}
}
/*-------------------------------------------------------------------------*/
VOID DrawObj(BIT_MAP_OBJ * obj, USHORT bufn) {
REGISTER UWORD ocw = obj -> cw, och = obj -> ch;
UWORD mousex = mx, mousey = my, x = NL, y = NL, ix = NL, iy = NL;
UWORD posx = NL, posy = NL, bgposx = NL, bgposy = NL;
UWORD isinbg = TRUE, pen[4];
IF(mousex <= VIEW_LEFT + ocw) {
/*gere le positionnement obj in view */
mousex = VIEW_LEFT + ocw;
}
IF(mousex >= (VIEW_LEFT + VIEW_WIDTH) - ocw) {
mousex = (VIEW_LEFT + VIEW_WIDTH) - ocw;
}
IF(mousey <= VIEW_TOP + och) {
mousey = VIEW_TOP + och;
}
IF(mousey >= (VIEW_TOP + VIEW_HEIGHT) - och) {
mousey = (VIEW_TOP + VIEW_HEIGHT) - och;
}
obj -> posx = mousex - ocw;
obj -> posy = mousey - och;
posx = (obj -> posx - VIEW_LEFT + 4) / 10;
posy = (obj -> posy - VIEW_TOP + 4) / 10;
bgposx = (drawbg -> posx + (obj -> posx - VIEW_LEFT + 4)) / 10;
bgposy = (drawbg -> posy + (obj -> posy - VIEW_TOP + 4)) / 10;
ix = (obj -> w / 10) - 1;
iy = (obj -> h / 10) - 1;
x = celview[posx][posy].posx;
y = celview[posx][posy].posy;
pen[0] = 6;
pen[1] = 6;
pen[2] = 6;
pen[3] = 6;
IF(celbgnd[bgposx][bgposy].type != TERRE AND celbgnd[bgposx][bgposy].type != BROUS) {
isinbg = FALSE;
pen[0] = 14;
}
IF(celbgnd[bgposx + ix][bgposy].type != TERRE AND celbgnd[bgposx + ix][bgposy].type != BROUS) {
isinbg = FALSE;
pen[1] = 14;
}
IF(celbgnd[bgposx][bgposy + iy].type != TERRE AND celbgnd[bgposx][bgposy + iy].type != BROUS) {
isinbg = FALSE;
pen[2] = 14;
}
IF(celbgnd[bgposx + ix][bgposy + iy].type != TERRE AND celbgnd[bgposx + ix][bgposy + iy].type != BROUS) {
isinbg = FALSE;
pen[3] = 14;
}
IF(isinbg == TRUE) {
IF(click == TRUE) {
BOOL result = FALSE;
UWORD x = NL, y = NL;
IF(obj -> type >= ROAD0 AND obj -> type <= ROAD12) {
result = SetRoads(bgposx, bgposy);
}
ELSE {
BltBMO(obj, drawbg, celbgnd[bgposx][bgposy].posx, celbgnd[bgposx][bgposy].posy);
FOR(x = 0; x <= ix; x++) {
FOR(y = 0; y <= iy; y++) {
celbgnd[bgposx + x][bgposy + y].type = obj -> type;
}
}
}
click = FALSE;
}
}
ELSE {
click = FALSE;
}
SetAPen(rp[bufn], pen[0]);
WritePixel(rp[bufn], x, y); /*the user pos indicator */
WritePixel(rp[bufn], x + 1, y);
WritePixel(rp[bufn], x, y + 1);
SetAPen(rp[bufn], pen[1]);
WritePixel(rp[bufn], x + obj -> w - 1, y);
WritePixel(rp[bufn], x + obj -> w - 1 - 1, y);
WritePixel(rp[bufn], x + obj -> w - 1, y + 1);
SetAPen(rp[bufn], pen[2]);
WritePixel(rp[bufn], x, y + obj -> h - 1);
WritePixel(rp[bufn], x, y + obj -> h - 1 - 1);
WritePixel(rp[bufn], x + 1, y + obj -> h - 1);
SetAPen(rp[bufn], pen[3]);
WritePixel(rp[bufn], x + obj -> w - 1, y + obj -> h - 1);
WritePixel(rp[bufn], x + obj -> w - 1 - 1, y + obj -> h - 1);
WritePixel(rp[bufn], x + obj -> w - 1, y + obj -> h - 1 - 1);
BltBitMapRastPort(obj -> bm, 0, 0, rp[bufn], obj -> posx, obj -> posy, obj -> w, obj -> h, BLIT);
}
/*-------------------------------------------------------------------------*/
#define IN(n)(c[n] -> type >= ROAD0 AND c[n] -> type <= ROAD12)
#define OUT(n)(c[n] -> type < ROAD0 OR c[n] -> type > ROAD12)
#define IS(n, t)(c[n] -> type == t)
#define ISNOT(n, t)(c[n] -> type != t)
#define SET(n, t) {
c[n] -> type = t;
}
BOOL SetRoads(WORD bgposx, WORD bgposy) {
CEL * c[9];
SHORT x = 0, y = 0, ok = FALSE;
c[0] = (CEL * ) & celbgnd[bgposx - 1][bgposy - 1];
c[1] = (CEL * ) & celbgnd[bgposx - 1][bgposy];
c[2] = (CEL * ) & celbgnd[bgposx - 1][bgposy + 1];
c[3] = (CEL * ) & celbgnd[bgposx][bgposy - 1];
c[4] = (CEL * ) & celbgnd[bgposx][bgposy]; /*center */
c[5] = (CEL * ) & celbgnd[bgposx][bgposy + 1];
c[6] = (CEL * ) & celbgnd[bgposx + 1][bgposy - 1];
c[7] = (CEL * ) & celbgnd[bgposx + 1][bgposy];
c[8] = (CEL * ) & celbgnd[bgposx + 1][bgposy + 1];
IF(OUT(1) AND OUT(3) AND OUT(5) AND OUT(7)) {
/*A0 */
SET(4, ROAD4);
}
ELSE
IF(OUT(0) AND OUT(3) AND OUT(2) AND OUT(5) AND IS(1, ROAD3) OR IS(1, ROAD4)) {
/*A1 */
SET(4, ROAD3);
SET(1, ROAD3);
}
ELSE
IF(OUT(0) AND OUT(1) AND OUT(6) AND OUT(7) AND IS(3, ROAD1) OR IS(3, ROAD4)) {
/*A2 */
SET(4, ROAD1);
SET(3, ROAD1);
}
ELSE
IF(OUT(1) AND OUT(2) AND OUT(7) AND OUT(8) AND IS(5, ROAD1) OR IS(5, ROAD4)) {
/*A3 */
SET(4, ROAD1);
SET(5, ROAD1);
}
ELSE
IF(OUT(3) AND OUT(5) AND OUT(6) AND OUT(8) AND IS(7, ROAD3) OR IS(7, ROAD4)) {
/*A4 */
SET(4, ROAD3);
SET(7, ROAD3);
}
IF(OUT(3) AND OUT(5) AND IN(0) AND IN(1) AND IN(2)) {
/*B0 */
SET(4, ROAD3);
IF(IS(1, ROAD1)) {
SET(1, ROAD11);
}
ELSE
IF(IS(1, ROAD9)) {
SET(1, ROAD4);
}
}
IF(OUT(1) AND OUT(7) AND IN(0) AND IN(3) AND IN(6)) {
/*B1 */
SET(4, ROAD1);
IF(IS(3, ROAD3)) {
SET(3, ROAD10);
}
ELSE
IF(IS(3, ROAD12)) {
SET(3, ROAD4);
}
}
IF(OUT(1) AND OUT(7) AND IN(2) AND IN(5) AND IN(8)) {
/*B2 */
SET(4, ROAD1);
IF(IS(5, ROAD3)) {
SET(5, ROAD12);
}
ELSE
IF(IS(5, ROAD10)) {
SET(5, ROAD4);
}
}
IF(OUT(3) AND OUT(5) AND IN(6) AND IN(7) AND IN(8)) {
/*B3 */
SET(4, ROAD3);
IF(IS(7, ROAD1)) {
SET(7, ROAD9);
}
ELSE
IF(IS(7, ROAD11)) {
SET(7, ROAD4);
}
}
IF(OUT(0) AND OUT(2) AND OUT(6) AND OUT(7) AND OUT(8) AND IS(1, ROAD3) AND IS(3, ROAD1) AND IS(5, ROAD1)) {
/*c0 */
SET(4, ROAD9);
}
ELSE
IF(OUT(0) AND OUT(2) AND OUT(5) AND OUT(6) AND OUT(8) AND IS(1, ROAD3) AND IS(3, ROAD1) AND IS(7, ROAD3)) {
/*c1 */
SET(4, ROAD12);
}
ELSE
IF(OUT(0) AND OUT(2) AND OUT(3) AND OUT(6) AND OUT(8) AND IS(1, ROAD3) AND IS(5, ROAD1) AND IS(7, ROAD3)) {
/*c2 */
SET(4, ROAD10);
}
ELSE
IF(OUT(0) AND OUT(1) AND OUT(2) AND OUT(6) AND OUT(8) AND IS(3, ROAD1) AND IS(5, ROAD1) AND IS(7, ROAD3)) {
/*c3 */
SET(4, ROAD11);
}
ELSE
IF(OUT(0) AND OUT(2) AND OUT(6) AND OUT(8) AND IS(1, ROAD3) AND IS(3, ROAD1) AND IS(5, ROAD1) AND IS(7, ROAD3)) {
/*c4 */
SET(4, ROAD4);
}
IF(OUT(0) AND OUT(2) AND OUT(5) AND OUT(6) AND OUT(7) AND IS(1, ROAD3) AND IS(3, ROAD1)) {
/*d0 */
SET(4, ROAD8);
}
ELSE
IF(OUT(0) AND OUT(1) AND OUT(5) AND OUT(6) AND OUT(8) AND IS(3, ROAD1) AND IS(7, ROAD3)) {
/*d1 */
SET(4, ROAD2);
}
ELSE
IF(OUT(1) AND OUT(2) AND OUT(3) AND OUT(6) AND OUT(8) AND IS(5, ROAD1) AND IS(7, ROAD3)) {
/*d2 */
SET(4, ROAD0);
}
ELSE
IF(OUT(0) AND OUT(2) AND OUT(3) AND OUT(7) AND OUT(8) AND IS(1, ROAD3) AND IS(5, ROAD1)) {
/*d3 */
SET(4, ROAD6);
}
IF(OUT(2) AND OUT(3) AND IS(0, ROAD1) AND IS(1, ROAD1) OR IS(1, ROAD8)) {
/*e0 */
SET(4, ROAD3);
IF(IS(5, ROAD1)) {
SET(4, ROAD6);
}
IF(IS(1, ROAD1)) {
SET(1, ROAD2);
}
ELSE
IF(IS(1, ROAD8)) {
SET(1, ROAD12);
}
IF(IS(7, ROAD11)) {
SET(7, ROAD4);
}
ELSE
IF(IS(7, ROAD0)) {
SET(7, ROAD10);
}
ELSE
IF(IS(7, ROAD2)) {
SET(7, ROAD12);
}
}
IF(OUT(0) AND OUT(7) AND IS(6, ROAD3) AND IS(3, ROAD3) OR IS(3, ROAD2)) {
/*e1 */
SET(4, ROAD1);
IF(IS(1, ROAD3)) {
SET(4, ROAD8);
}
IF(IS(3, ROAD3)) {
SET(3, ROAD0);
}
ELSE
IF(IS(3, ROAD2)) {
SET(3, ROAD11);
}
IF(IS(5, ROAD12)) {
SET(5, ROAD4);
}
ELSE
IF(IS(5, ROAD0)) {
SET(5, ROAD11);
}
ELSE
IF(IS(5, ROAD6)) {
SET(5, ROAD9);
}
}
IF(OUT(5) AND OUT(6) AND IS(8, ROAD1) AND IS(7, ROAD1) OR IS(7, ROAD0)) {
/*e2 */
SET(4, ROAD3);
IF(IS(3, ROAD1)) {
SET(4, ROAD2);
}
IF(IS(7, ROAD1)) {
SET(7, ROAD6);
}
ELSE
IF(IS(7, ROAD0)) {
SET(7, ROAD10);
}
IF(IS(1, ROAD9)) {
SET(1, ROAD4);
}
ELSE
IF(IS(1, ROAD6)) {
SET(1, ROAD10);
}
ELSE
IF(IS(1, ROAD8)) {
SET(1, ROAD12);
}
}
IF(OUT(1) AND OUT(8) AND IS(2, ROAD3) AND IS(5, ROAD3) OR IS(5, ROAD6)) {
/*e3 */
SET(4, ROAD1);
IF(IS(7, ROAD3)) {
SET(4, ROAD0);
}
IF(IS(5, ROAD3)) {
SET(5, ROAD8);
}
ELSE
IF(IS(5, ROAD6)) {
SET(5, ROAD9);
}
IF(IS(3, ROAD12)) {
SET(3, ROAD4);
}
ELSE
IF(IS(3, ROAD2)) {
SET(3, ROAD11);
}
ELSE
IF(IS(3, ROAD8)) {
SET(3, ROAD9);
}
}
IF(OUT(1) AND OUT(6) AND IS(0, ROAD3) AND IS(3, ROAD3) OR IS(3, ROAD8)) {
/*f0 */
SET(4, ROAD1);
IF(IS(7, ROAD3)) {
SET(4, ROAD2);
}
IF(IS(3, ROAD3)) {
SET(3, ROAD6);
}
ELSE
IF(IS(3, ROAD8)) {
SET(3, ROAD9);
}
IF(IS(5, ROAD10)) {
SET(5, ROAD4);
}
ELSE
IF(IS(5, ROAD0)) {
SET(5, ROAD11);
}
ELSE
IF(IS(5, ROAD6)) {
SET(5, ROAD9);
}
}
IF(OUT(3) AND OUT(8) AND IS(6, ROAD1) AND IS(7, ROAD1) OR IS(7, ROAD2)) {
/*f1 */
SET(4, ROAD3);
IF(IS(5, ROAD1)) {
SET(4, ROAD0);
}
IF(IS(7, ROAD1)) {
SET(7, ROAD8);
}
ELSE
IF(IS(7, ROAD2)) {
SET(7, ROAD12);
}
IF(IS(1, ROAD9)) {
SET(1, ROAD4);
}
ELSE
IF(IS(1, ROAD8)) {
SET(1, ROAD12);
}
ELSE
IF(IS(1, ROAD6)) {
SET(1, ROAD10);
}
}
IF(OUT(2) AND OUT(7) AND IS(8, ROAD3) AND IS(5, ROAD3) OR IS(5, ROAD0)) {
/*f2 */
SET(4, ROAD1);
IF(IS(1, ROAD3)) {
SET(4, ROAD6);
}
IF(IS(5, ROAD3)) {
SET(5, ROAD2);
}
ELSE
IF(IS(5, ROAD0)) {
SET(5, ROAD11);
}
IF(IS(3, ROAD12)) {
SET(3, ROAD4);
}
ELSE
IF(IS(3, ROAD2)) {
SET(3, ROAD11);
}
ELSE
IF(IS(3, ROAD8)) {
SET(3, ROAD9);
}
}
IF(OUT(0) AND OUT(5) AND IS(2, ROAD1) AND IS(1, ROAD1) OR IS(1, ROAD6)) {
/*f3 */
SET(4, ROAD3);
IF(IS(3, ROAD1)) {
SET(4, ROAD8);
}
IF(IS(1, ROAD1)) {
SET(1, ROAD0);
}
ELSE
IF(IS(1, ROAD6)) {
SET(1, ROAD10);
}
IF(IS(7, ROAD11)) {
SET(7, ROAD4);
}
ELSE
IF(IS(7, ROAD2)) {
SET(7, ROAD12);
}
ELSE
IF(IS(7, ROAD0)) {
SET(7, ROAD10);
}
}
FOR(x = 0; x < 9; x++) {
SWITCH(c[x] -> type) {
CASE ROAD0: BltBMO(roads[0], drawbg, c[x] -> posx, c[x] -> posy);
BREAK;
CASE ROAD1: BltBMO(roads[1], drawbg, c[x] -> posx, c[x] -> posy);
BREAK;
CASE ROAD2: BltBMO(roads[2], drawbg, c[x] -> posx, c[x] -> posy);
BREAK;
CASE ROAD3: BltBMO(roads[3], drawbg, c[x] -> posx, c[x] -> posy);
BREAK;
CASE ROAD4: BltBMO(roads[4], drawbg, c[x] -> posx, c[x] -> posy);
BREAK;
CASE ROAD5: BltBMO(roads[5], drawbg, c[x] -> posx, c[x] -> posy);
BREAK;
CASE ROAD6: BltBMO(roads[6], drawbg, c[x] -> posx, c[x] -> posy);
BREAK;
CASE ROAD7: BltBMO(roads[7], drawbg, c[x] -> posx, c[x] -> posy);
BREAK;
CASE ROAD8: BltBMO(roads[8], drawbg, c[x] -> posx, c[x] -> posy);
BREAK;
CASE ROAD9: BltBMO(roads[9], drawbg, c[x] -> posx, c[x] -> posy);
BREAK;
CASE ROAD10: BltBMO(roads[10], drawbg, c[x] -> posx, c[x] -> posy);
BREAK;
CASE ROAD11: BltBMO(roads[11], drawbg, c[x] -> posx, c[x] -> posy);
BREAK;
CASE ROAD12: BltBMO(roads[12], drawbg, c[x] -> posx, c[x] -> posy);
BREAK;
}
}
}
/*cel.c */
#define INC_GRAPHICS
#define NO_BASE#include ".H:macros.h"
#include ".H:game.h"
CEL celview[23][18]; /*VIEW WIDTH, HEIGHT */
CEL celbgnd[120][81]; /*drawbm WIDTH, HEIGHT */
VOID InitCel(VOID) {
REGISTER LONG x = NL, y = NL;
FOR(x = 0; x < 120; x++) /*background celules */ {
FOR(y = 0; y < 81; y++) {
celbgnd[x][y].posx = (x * 10);
celbgnd[x][y].posy = (y * 10);
celbgnd[x][y].type = TERRE;
}
}
FOR(x = 0; x < 23; x++) {
FOR(y = 0; y < 18; y++) {
celview[x][y].posx = (x * 10) + VIEW_LEFT;
celview[x][y].posy = (y * 10) + VIEW_TOP;
celview[x][y].type = NL;
}
}
}
/*bm.c */
#define INC_EXEC
#define INC_GRAPHICS
#define NO_BASE#include ".H:macros.h"
#include ".H:game.h"
#include ".H:data.h"
EXTERN ULONG RangeSeed;
EXTERN RAST_PORT * rp[NUMBUF];
EXTERN CEL celbgnd[120][81]; /*drawbm WIDTH, HEIGHT */
/*-------------------------------------------------------------------------*/
BIT_MAP_OBJ * drawbg = NL;
BIT_MAP * userbg = NL;
BIT_MAP_OBJ * terre = NL;
BIT_MAP_OBJ * arbre = NL;
BIT_MAP_OBJ * pbuis = NL;
BIT_MAP_OBJ * gbuis = NL;
BIT_MAP_OBJ * gravi = NL;
BIT_MAP_OBJ * creva = NL;
BIT_MAP_OBJ * brous0[4] = NL;
BIT_MAP_OBJ * brous1[4] = NL;
BIT_MAP_OBJ * brous2[4] = NL;
BIT_MAP_OBJ * brous3[4] = NL;
BIT_MAP_OBJ * brous4[9] = NL;
BIT_MAP_OBJ * brous5[4] = NL;
BIT_MAP_OBJ * brous6[4] = NL;
BIT_MAP_OBJ * brous7[4] = NL;
BIT_MAP_OBJ * brous8[4] = NL;
BIT_MAP_OBJ * flots0[4] = NL;
BIT_MAP_OBJ * flots1[4] = NL;
BIT_MAP_OBJ * flots2[4] = NL;
BIT_MAP_OBJ * flots3[4] = NL;
BIT_MAP_OBJ * flots4[9] = NL;
BIT_MAP_OBJ * flots5[4] = NL;
BIT_MAP_OBJ * flots6[4] = NL;
BIT_MAP_OBJ * flots7[4] = NL;
BIT_MAP_OBJ * flots8[4] = NL;
BIT_MAP_OBJ * roads[13] = NL;
BIT_MAP_OBJ * house[8] = NL;
BIT_MAP_OBJ * comme[8] = NL;
BIT_MAP_OBJ * indus[8] = NL;
BIT_MAP_OBJ * agric[8] = NL;
BIT_MAP_OBJ * base[4] = NL;
BIT_MAP_OBJ * bmo_cur = NL;
/*-------------------------------------------------------------------------*/
VOID UnInitAllBitMap(VOID);
VOID AspergeBitMap(BIT_MAP_OBJ * o, INT n, INT type);
VOID Blit(BIT_MAP_OBJ * o, INT x, INT y, INT type);
VOID InitAllBitMap(VOID);
/*-------------------------------------------------------------------------*/
goflots(INT x, INT y) {
INT n = NL, endtrace = FALSE;
endtrace = FALSE;
WHILE(endtrace == FALSE) {
celbgnd[x][y].type = FLOT4;
celbgnd[x + 1][y].type = FLOT4;
celbgnd[x + 1][y + 1].type = FLOT4;
celbgnd[x][y + 1].type = FLOT4;
x += (RangeRand(4) > 1 ? 1 : -1);
IF(x > 118) {
endtrace = TRUE;
}
ELSE IF(x < 0) x = 0;
y += (RangeRand(4) > 1 ? 1 : -1);
IF(y > 79) {
endtrace = TRUE;
}
ELSE IF(y < 0) y = 0;
}
}
gobrous(INT x, INT y) {
INT n = NL, endtrace = FALSE;
endtrace = FALSE;
WHILE(endtrace == FALSE) {
IF(celbgnd[x][y].type != FLOT4 AND celbgnd[x + 1][y].type != FLOT4 AND celbgnd[x + 1][y + 1].type != FLOT4 AND celbgnd[x][y + 1].type != FLOT4) {
celbgnd[x][y].type = BROU4;
celbgnd[x + 1][y].type = BROU4;
celbgnd[x + 1][y + 1].type = BROU4;
celbgnd[x][y + 1].type = BROU4;
}
x += (RangeRand(4) > 1 ? 1 : -1);
IF(x > 118) {
endtrace = TRUE;
}
ELSE IF(x < 0) x = 0;
y += (RangeRand(4) > 1 ? 1 : -1);
IF(y > 79) {
endtrace = TRUE;
}
ELSE IF(y < 0) y = 0;
}
}
/*-------------------------------------------------------------------------*/
VOID InitAllBitMap(VOID) {
UWORD x, y;
NewBMO(drawbg, 1200, 810, 5);
userbg = (BIT_MAP * ) NewBitMapPlanes(320, 50, 5, & user0[0], & user1[0], & user2[0], & user3[0], & user4[0]);
terre = (BIT_MAP_OBJ * ) NewBMOPlanes(ARBRE, 30, 30, 5, & terre0[0], & terre1[0], & terre2[0], & terre3[0], & terre4[0]);
arbre = (BIT_MAP_OBJ * ) NewBMOPlanes(PBUIS, 10, 10, 5, & arbre0[0], & arbre1[0], & arbre2[0], & arbre3[0], & arbre4[0]);
pbuis = (BIT_MAP_OBJ * ) NewBMOPlanes(GBUIS, 10, 10, 5, & pbuis0[0], & pbuis1[0], & pbuis2[0], & pbuis3[0], & pbuis4[0]);
gbuis = (BIT_MAP_OBJ * ) NewBMOPlanes(GRAVI, 10, 10, 5, & gbuis0[0], & gbuis1[0], & gbuis2[0], & gbuis3[0], & gbuis4[0]);
gravi = (BIT_MAP_OBJ * ) NewBMOPlanes(MONTA, 10, 10, 5, & gravi0[0], & gravi1[0], & gravi2[0], & gravi3[0], & gravi4[0]);
creva = (BIT_MAP_OBJ * ) NewBMOPlanes(CREVA, 10, 10, 5, & creva0[0], & creva1[0], & creva2[0], & creva3[0], & creva4[0]);
brous0[0] = (BIT_MAP_OBJ * ) NewBMOPlanes(BROU0, 10, 10, 5, & brous000[0], & brous001[0], & brous002[0], & brous003[0], & brous004[0]);
brous0[1] = (BIT_MAP_OBJ * ) NewBMOPlanes(BROU0, 10, 10, 5, & brous010[0], & brous011[0], & brous012[0], & brous013[0], & brous014[0]);
brous0[2] = (BIT_MAP_OBJ * ) NewBMOPlanes(BROU0, 10, 10, 5, & brous020[0], & brous021[0], & brous022[0], & brous023[0], & brous024[0]);
brous0[3] = (BIT_MAP_OBJ * ) NewBMOPlanes(BROU0, 10, 10, 5, & brous030[0], & brous031[0], & brous032[0], & brous033[0], & brous034[0]);
brous1[0] = (BIT_MAP_OBJ * ) NewBMOPlanes(BROU1, 10, 10, 5, & brous100[0], & brous101[0], & brous102[0], & brous103[0], & brous104[0]);
brous1[1] = (BIT_MAP_OBJ * ) NewBMOPlanes(BROU1, 10, 10, 5, & brous110[0], & brous111[0], & brous112[0], & brous113[0], & brous114[0]);
brous1[2] = (BIT_MAP_OBJ * ) NewBMOPlanes(BROU1, 10, 10, 5, & brous120[0], & brous121[0], & brous122[0], & brous123[0], & brous124[0]);
brous1[3] = (BIT_MAP_OBJ * ) NewBMOPlanes(BROU1, 10, 10, 5, & brous130[0], & brous131[0], & brous132[0], & brous133[0], & brous134[0]);
brous2[0] = (BIT_MAP_OBJ * ) NewBMOPlanes(BROU2, 10, 10, 5, & brous200[0], & brous201[0], & brous202[0], & brous203[0], & brous204[0]);
brous2[1] = (BIT_MAP_OBJ * ) NewBMOPlanes(BROU2, 10, 10, 5, & brous210[0], & brous211[0], & brous212[0], & brous213[0], & brous214[0]);
brous2[2] = (BIT_MAP_OBJ * ) NewBMOPlanes(BROU2, 10, 10, 5, & brous220[0], & brous221[0], & brous222[0], & brous223[0], & brous224[0]);
brous2[3] = (BIT_MAP_OBJ * ) NewBMOPlanes(BROU2, 10, 10, 5, & brous230[0], & brous231[0], & brous232[0], & brous233[0], & brous234[0]);
brous3[0] = (BIT_MAP_OBJ * ) NewBMOPlanes(BROU3, 10, 10, 5, & brous300[0], & brous301[0], & brous302[0], & brous303[0], & brous304[0]);
brous3[1] = (BIT_MAP_OBJ * ) NewBMOPlanes(BROU3, 10, 10, 5, & brous310[0], & brous311[0], & brous312[0], & brous313[0], & brous314[0]);
brous3[2] = (BIT_MAP_OBJ * ) NewBMOPlanes(BROU3, 10, 10, 5, & brous320[0], & brous321[0], & brous322[0], & brous323[0], & brous324[0]);
brous3[3] = (BIT_MAP_OBJ * ) NewBMOPlanes(BROU3, 10, 10, 5, & brous330[0], & brous331[0], & brous332[0], & brous333[0], & brous334[0]);
brous5[0] = (BIT_MAP_OBJ * ) NewBMOPlanes(BROU5, 10, 10, 5, & brous500[0], & brous501[0], & brous502[0], & brous503[0], & brous504[0]);
brous5[1] = (BIT_MAP_OBJ * ) NewBMOPlanes(BROU5, 10, 10, 5, & brous510[0], & brous511[0], & brous512[0], & brous513[0], & brous514[0]);
brous5[2] = (BIT_MAP_OBJ * ) NewBMOPlanes(BROU5, 10, 10, 5, & brous520[0], & brous521[0], & brous522[0], & brous523[0], & brous524[0]);
brous5[3] = (BIT_MAP_OBJ * ) NewBMOPlanes(BROU5, 10, 10, 5, & brous530[0], & brous531[0], & brous532[0], & brous533[0], & brous534[0]);
brous6[0] = (BIT_MAP_OBJ * ) NewBMOPlanes(BROU6, 10, 10, 5, & brous600[0], & brous601[0], & brous602[0], & brous603[0], & brous604[0]);
brous6[1] = (BIT_MAP_OBJ * ) NewBMOPlanes(BROU6, 10, 10, 5, & brous610[0], & brous611[0], & brous612[0], & brous613[0], & brous614[0]);
brous6[2] = (BIT_MAP_OBJ * ) NewBMOPlanes(BROU6, 10, 10, 5, & brous620[0], & brous621[0], & brous622[0], & brous623[0], & brous624[0]);
brous6[3] = (BIT_MAP_OBJ * ) NewBMOPlanes(BROU6, 10, 10, 5, & brous630[0], & brous631[0], & brous632[0], & brous633[0], & brous634[0]);
brous7[0] = (BIT_MAP_OBJ * ) NewBMOPlanes(BROU7, 10, 10, 5, & brous700[0], & brous701[0], & brous702[0], & brous703[0], & brous704[0]);
brous7[1] = (BIT_MAP_OBJ * ) NewBMOPlanes(BROU7, 10, 10, 5, & brous710[0], & brous711[0], & brous712[0], & brous713[0], & brous714[0]);
brous7[2] = (BIT_MAP_OBJ * ) NewBMOPlanes(BROU7, 10, 10, 5, & brous720[0], & brous721[0], & brous722[0], & brous723[0], & brous724[0]);
brous7[3] = (BIT_MAP_OBJ * ) NewBMOPlanes(BROU7, 10, 10, 5, & brous730[0], & brous731[0], & brous732[0], & brous733[0], & brous734[0]);
brous8[0] = (BIT_MAP_OBJ * ) NewBMOPlanes(BROU8, 10, 10, 5, & brous800[0], & brous801[0], & brous802[0], & brous803[0], & brous804[0]);
brous8[1] = (BIT_MAP_OBJ * ) NewBMOPlanes(BROU8, 10, 10, 5, & brous810[0], & brous811[0], & brous812[0], & brous813[0], & brous814[0]);
brous8[2] = (BIT_MAP_OBJ * ) NewBMOPlanes(BROU8, 10, 10, 5, & brous820[0], & brous821[0], & brous822[0], & brous823[0], & brous824[0]);
brous8[3] = (BIT_MAP_OBJ * ) NewBMOPlanes(BROU8, 10, 10, 5, & brous830[0], & brous831[0], & brous832[0], & brous833[0], & brous834[0]);
brous4[0] = (BIT_MAP_OBJ * ) NewBMOPlanes(BROU4, 10, 10, 5, & brous400[0], & brous401[0], & brous402[0], & brous403[0], & brous404[0]);
brous4[1] = (BIT_MAP_OBJ * ) NewBMOPlanes(BROU4, 10, 10, 5, & brous410[0], & brous411[0], & brous412[0], & brous413[0], & brous414[0]);
brous4[2] = (BIT_MAP_OBJ * ) NewBMOPlanes(BROU4, 10, 10, 5, & brous420[0], & brous421[0], & brous422[0], & brous423[0], & brous424[0]);
brous4[3] = (BIT_MAP_OBJ * ) NewBMOPlanes(BROU4, 10, 10, 5, & brous430[0], & brous431[0], & brous432[0], & brous433[0], & brous434[0]);
brous4[4] = (BIT_MAP_OBJ * ) NewBMOPlanes(BROU4, 10, 10, 5, & brous440[0], & brous441[0], & brous442[0], & brous443[0], & brous444[0]);
brous4[5] = (BIT_MAP_OBJ * ) NewBMOPlanes(BROU4, 10, 10, 5, & brous450[0], & brous451[0], & brous452[0], & brous453[0], & brous454[0]);
brous4[6] = (BIT_MAP_OBJ * ) NewBMOPlanes(BROU4, 10, 10, 5, & brous460[0], & brous461[0], & brous462[0], & brous463[0], & brous464[0]);
brous4[7] = (BIT_MAP_OBJ * ) NewBMOPlanes(BROU4, 10, 10, 5, & brous470[0], & brous471[0], & brous472[0], & brous473[0], & brous474[0]);
brous4[8] = (BIT_MAP_OBJ * ) NewBMOPlanes(BROU4, 10, 10, 5, & brous480[0], & brous481[0], & brous482[0], & brous483[0], & brous484[0]);
flots0[0] = (BIT_MAP_OBJ * ) NewBMOPlanes(FLOT0, 10, 10, 5, & flots000[0], & flots001[0], & flots002[0], & flots003[0], & flots004[0]);
flots0[1] = (BIT_MAP_OBJ * ) NewBMOPlanes(FLOT0, 10, 10, 5, & flots010[0], & flots011[0], & flots012[0], & flots013[0], & flots014[0]);
flots0[2] = (BIT_MAP_OBJ * ) NewBMOPlanes(FLOT0, 10, 10, 5, & flots020[0], & flots021[0], & flots022[0], & flots023[0], & flots024[0]);
flots0[3] = (BIT_MAP_OBJ * ) NewBMOPlanes(FLOT0, 10, 10, 5, & flots030[0], & flots031[0], & flots032[0], & flots033[0], & flots034[0]);
flots1[0] = (BIT_MAP_OBJ * ) NewBMOPlanes(FLOT1, 10, 10, 5, & flots100[0], & flots101[0], & flots102[0], & flots103[0], & flots104[0]);
flots1[1] = (BIT_MAP_OBJ * ) NewBMOPlanes(FLOT1, 10, 10, 5, & flots110[0], & flots111[0], & flots112[0], & flots113[0], & flots114[0]);
flots1[2] = (BIT_MAP_OBJ * ) NewBMOPlanes(FLOT1, 10, 10, 5, & flots120[0], & flots121[0], & flots122[0], & flots123[0], & flots124[0]);
flots1[3] = (BIT_MAP_OBJ * ) NewBMOPlanes(FLOT1, 10, 10, 5, & flots130[0], & flots131[0], & flots132[0], & flots133[0], & flots134[0]);
flots2[0] = (BIT_MAP_OBJ * ) NewBMOPlanes(FLOT2, 10, 10, 5, & flots200[0], & flots201[0], & flots202[0], & flots203[0], & flots204[0]);
flots2[1] = (BIT_MAP_OBJ * ) NewBMOPlanes(FLOT2, 10, 10, 5, & flots210[0], & flots211[0], & flots212[0], & flots213[0], & flots214[0]);
flots2[2] = (BIT_MAP_OBJ * ) NewBMOPlanes(FLOT2, 10, 10, 5, & flots220[0], & flots221[0], & flots222[0], & flots223[0], & flots224[0]);
flots2[3] = (BIT_MAP_OBJ * ) NewBMOPlanes(FLOT2, 10, 10, 5, & flots230[0], & flots231[0], & flots232[0], & flots233[0], & flots234[0]);
flots3[0] = (BIT_MAP_OBJ * ) NewBMOPlanes(FLOT3, 10, 10, 5, & flots300[0], & flots301[0], & flots302[0], & flots303[0], & flots304[0]);
flots3[1] = (BIT_MAP_OBJ * ) NewBMOPlanes(FLOT3, 10, 10, 5, & flots310[0], & flots311[0], & flots312[0], & flots313[0], & flots314[0]);
flots3[2] = (BIT_MAP_OBJ * ) NewBMOPlanes(FLOT3, 10, 10, 5, & flots320[0], & flots321[0], & flots322[0], & flots323[0], & flots324[0]);
flots3[3] = (BIT_MAP_OBJ * ) NewBMOPlanes(FLOT3, 10, 10, 5, & flots330[0], & flots331[0], & flots332[0], & flots333[0], & flots334[0]);
flots5[0] = (BIT_MAP_OBJ * ) NewBMOPlanes(FLOT5, 10, 10, 5, & flots500[0], & flots501[0], & flots502[0], & flots503[0], & flots504[0]);
flots5[1] = (BIT_MAP_OBJ * ) NewBMOPlanes(FLOT5, 10, 10, 5, & flots510[0], & flots511[0], & flots512[0], & flots513[0], & flots514[0]);
flots5[2] = (BIT_MAP_OBJ * ) NewBMOPlanes(FLOT5, 10, 10, 5, & flots520[0], & flots521[0], & flots522[0], & flots523[0], & flots524[0]);
flots5[3] = (BIT_MAP_OBJ * ) NewBMOPlanes(FLOT5, 10, 10, 5, & flots530[0], & flots531[0], & flots532[0], & flots533[0], & flots534[0]);
flots6[0] = (BIT_MAP_OBJ * ) NewBMOPlanes(FLOT6, 10, 10, 5, & flots600[0], & flots601[0], & flots602[0], & flots603[0], & flots604[0]);
flots6[1] = (BIT_MAP_OBJ * ) NewBMOPlanes(FLOT6, 10, 10, 5, & flots610[0], & flots611[0], & flots612[0], & flots613[0], & flots614[0]);
flots6[2] = (BIT_MAP_OBJ * ) NewBMOPlanes(FLOT6, 10, 10, 5, & flots620[0], & flots621[0], & flots622[0], & flots623[0], & flots624[0]);
flots6[3] = (BIT_MAP_OBJ * ) NewBMOPlanes(FLOT6, 10, 10, 5, & flots630[0], & flots631[0], & flots632[0], & flots633[0], & flots634[0]);
flots7[0] = (BIT_MAP_OBJ * ) NewBMOPlanes(FLOT7, 10, 10, 5, & flots700[0], & flots701[0], & flots702[0], & flots703[0], & flots704[0]);
flots7[1] = (BIT_MAP_OBJ * ) NewBMOPlanes(FLOT7, 10, 10, 5, & flots710[0], & flots711[0], & flots712[0], & flots713[0], & flots714[0]);
flots7[2] = (BIT_MAP_OBJ * ) NewBMOPlanes(FLOT7, 10, 10, 5, & flots720[0], & flots721[0], & flots722[0], & flots723[0], & flots724[0]);
flots7[3] = (BIT_MAP_OBJ * ) NewBMOPlanes(FLOT7, 10, 10, 5, & flots730[0], & flots731[0], & flots732[0], & flots733[0], & flots734[0]);
flots8[0] = (BIT_MAP_OBJ * ) NewBMOPlanes(FLOT8, 10, 10, 5, & flots800[0], & flots801[0], & flots802[0], & flots803[0], & flots804[0]);
flots8[1] = (BIT_MAP_OBJ * ) NewBMOPlanes(FLOT8, 10, 10, 5, & flots810[0], & flots811[0], & flots812[0], & flots813[0], & flots814[0]);
flots8[2] = (BIT_MAP_OBJ * ) NewBMOPlanes(FLOT8, 10, 10, 5, & flots820[0], & flots821[0], & flots822[0], & flots823[0], & flots824[0]);
flots8[3] = (BIT_MAP_OBJ * ) NewBMOPlanes(FLOT8, 10, 10, 5, & flots830[0], & flots831[0], & flots832[0], & flots833[0], & flots834[0]);
flots4[0] = (BIT_MAP_OBJ * ) NewBMOPlanes(FLOT4, 10, 10, 5, & flots400[0], & flots401[0], & flots402[0], & flots403[0], & flots404[0]);
flots4[1] = (BIT_MAP_OBJ * ) NewBMOPlanes(FLOT4, 10, 10, 5, & flots410[0], & flots411[0], & flots412[0], & flots413[0], & flots414[0]);
flots4[2] = (BIT_MAP_OBJ * ) NewBMOPlanes(FLOT4, 10, 10, 5, & flots420[0], & flots421[0], & flots422[0], & flots423[0], & flots424[0]);
flots4[3] = (BIT_MAP_OBJ * ) NewBMOPlanes(FLOT4, 10, 10, 5, & flots430[0], & flots431[0], & flots432[0], & flots433[0], & flots434[0]);
flots4[4] = (BIT_MAP_OBJ * ) NewBMOPlanes(FLOT4, 10, 10, 5, & flots440[0], & flots441[0], & flots442[0], & flots443[0], & flots444[0]);
flots4[5] = (BIT_MAP_OBJ * ) NewBMOPlanes(FLOT4, 10, 10, 5, & flots450[0], & flots451[0], & flots452[0], & flots453[0], & flots454[0]);
flots4[6] = (BIT_MAP_OBJ * ) NewBMOPlanes(FLOT4, 10, 10, 5, & flots460[0], & flots461[0], & flots462[0], & flots463[0], & flots464[0]);
flots4[7] = (BIT_MAP_OBJ * ) NewBMOPlanes(FLOT4, 10, 10, 5, & flots470[0], & flots471[0], & flots472[0], & flots473[0], & flots474[0]);
flots4[8] = (BIT_MAP_OBJ * ) NewBMOPlanes(FLOT4, 10, 10, 5, & flots480[0], & flots481[0], & flots482[0], & flots483[0], & flots484[0]);
roads[0] = (BIT_MAP_OBJ * ) NewBMOPlanes(ROAD0, 10, 10, 5, & roads00[0], & roads01[0], & roads02[0], & roads03[0], & roads04[0]);
roads[1] = (BIT_MAP_OBJ * ) NewBMOPlanes(ROAD1, 10, 10, 5, & roads10[0], & roads11[0], & roads12[0], & roads13[0], & roads14[0]);
roads[2] = (BIT_MAP_OBJ * ) NewBMOPlanes(ROAD2, 10, 10, 5, & roads20[0], & roads21[0], & roads22[0], & roads23[0], & roads24[0]);
roads[3] = (BIT_MAP_OBJ * ) NewBMOPlanes(ROAD3, 10, 10, 5, & roads30[0], & roads31[0], & roads32[0], & roads33[0], & roads34[0]);
roads[4] = (BIT_MAP_OBJ * ) NewBMOPlanes(ROAD4, 10, 10, 5, & roads40[0], & roads41[0], & roads42[0], & roads43[0], & roads44[0]);
roads[5] = (BIT_MAP_OBJ * ) NewBMOPlanes(ROAD5, 10, 10, 5, & roads50[0], & roads51[0], & roads52[0], & roads53[0], & roads54[0]);
roads[6] = (BIT_MAP_OBJ * ) NewBMOPlanes(ROAD6, 10, 10, 5, & roads60[0], & roads61[0], & roads62[0], & roads63[0], & roads64[0]);
roads[7] = (BIT_MAP_OBJ * ) NewBMOPlanes(ROAD7, 10, 10, 5, & roads70[0], & roads71[0], & roads72[0], & roads73[0], & roads74[0]);
roads[8] = (BIT_MAP_OBJ * ) NewBMOPlanes(ROAD8, 10, 10, 5, & roads80[0], & roads81[0], & roads82[0], & roads83[0], & roads84[0]);
roads[9] = (BIT_MAP_OBJ * ) NewBMOPlanes(ROAD9, 10, 10, 5, & roads90[0], & roads91[0], & roads92[0], & roads93[0], & roads94[0]);
roads[10] = (BIT_MAP_OBJ * ) NewBMOPlanes(ROAD10, 10, 10, 5, & roads100[0], & roads101[0], & roads102[0], & roads103[0], & roads104[0]);
roads[11] = (BIT_MAP_OBJ * ) NewBMOPlanes(ROAD11, 10, 10, 5, & roads110[0], & roads111[0], & roads112[0], & roads113[0], & roads114[0]);
roads[12] = (BIT_MAP_OBJ * ) NewBMOPlanes(ROAD12, 10, 10, 5, & roads120[0], & roads121[0], & roads122[0], & roads123[0], & roads124[0]);
house[0] = (BIT_MAP_OBJ * ) NewBMOPlanes(HOUS0, 30, 30, 5, & house00[0], & house01[0], & house02[0], & house03[0], & house04[0]);
house[1] = (BIT_MAP_OBJ * ) NewBMOPlanes(HOUS1, 30, 30, 5, & house10[0], & house11[0], & house12[0], & house13[0], & house14[0]);
house[2] = (BIT_MAP_OBJ * ) NewBMOPlanes(HOUS2, 30, 30, 5, & house20[0], & house21[0], & house22[0], & house23[0], & house24[0]);
house[3] = (BIT_MAP_OBJ * ) NewBMOPlanes(HOUS3, 30, 30, 5, & house30[0], & house31[0], & house32[0], & house33[0], & house34[0]);
house[4] = (BIT_MAP_OBJ * ) NewBMOPlanes(HOUS4, 30, 30, 5, & house40[0], & house41[0], & house42[0], & house43[0], & house44[0]);
house[5] = (BIT_MAP_OBJ * ) NewBMOPlanes(HOUS5, 30, 30, 5, & house50[0], & house51[0], & house52[0], & house53[0], & house54[0]);
house[6] = (BIT_MAP_OBJ * ) NewBMOPlanes(HOUS6, 30, 30, 5, & house60[0], & house61[0], & house62[0], & house63[0], & house64[0]);
house[7] = (BIT_MAP_OBJ * ) NewBMOPlanes(HOUS7, 30, 30, 5, & house70[0], & house71[0], & house72[0], & house73[0], & house74[0]);
comme[0] = (BIT_MAP_OBJ * ) NewBMOPlanes(COMM0, 30, 30, 5, & comme00[0], & comme01[0], & comme02[0], & comme03[0], & comme04[0]);
comme[1] = (BIT_MAP_OBJ * ) NewBMOPlanes(COMM1, 30, 30, 5, & comme10[0], & comme11[0], & comme12[0], & comme13[0], & comme14[0]);
comme[2] = (BIT_MAP_OBJ * ) NewBMOPlanes(COMM2, 30, 30, 5, & comme20[0], & comme21[0], & comme22[0], & comme23[0], & comme24[0]);
comme[3] = (BIT_MAP_OBJ * ) NewBMOPlanes(COMM3, 30, 30, 5, & comme30[0], & comme31[0], & comme32[0], & comme33[0], & comme34[0]);
comme[4] = (BIT_MAP_OBJ * ) NewBMOPlanes(COMM4, 30, 30, 5, & comme40[0], & comme41[0], & comme42[0], & comme43[0], & comme44[0]);
comme[5] = (BIT_MAP_OBJ * ) NewBMOPlanes(COMM5, 30, 30, 5, & comme50[0], & comme51[0], & comme52[0], & comme53[0], & comme54[0]);
comme[6] = (BIT_MAP_OBJ * ) NewBMOPlanes(COMM6, 30, 30, 5, & comme60[0], & comme61[0], & comme62[0], & comme63[0], & comme64[0]);
comme[7] = (BIT_MAP_OBJ * ) NewBMOPlanes(COMM7, 30, 30, 5, & comme70[0], & comme71[0], & comme72[0], & comme73[0], & comme74[0]);
indus[0] = (BIT_MAP_OBJ * ) NewBMOPlanes(INDU0, 30, 30, 5, & indus00[0], & indus01[0], & indus02[0], & indus03[0], & indus04[0]);
indus[1] = (BIT_MAP_OBJ * ) NewBMOPlanes(INDU1, 30, 30, 5, & indus10[0], & indus11[0], & indus12[0], & indus13[0], & indus14[0]);
indus[2] = (BIT_MAP_OBJ * ) NewBMOPlanes(INDU2, 30, 30, 5, & indus20[0], & indus21[0], & indus22[0], & indus23[0], & indus24[0]);
indus[3] = (BIT_MAP_OBJ * ) NewBMOPlanes(INDU3, 30, 30, 5, & indus30[0], & indus31[0], & indus32[0], & indus33[0], & indus34[0]);
indus[4] = (BIT_MAP_OBJ * ) NewBMOPlanes(INDU4, 30, 30, 5, & indus40[0], & indus41[0], & indus42[0], & indus43[0], & indus44[0]);
indus[5] = (BIT_MAP_OBJ * ) NewBMOPlanes(INDU5, 30, 30, 5, & indus50[0], & indus51[0], & indus52[0], & indus53[0], & indus54[0]);
indus[6] = (BIT_MAP_OBJ * ) NewBMOPlanes(INDU6, 30, 30, 5, & indus60[0], & indus61[0], & indus62[0], & indus63[0], & indus64[0]);
indus[7] = (BIT_MAP_OBJ * ) NewBMOPlanes(INDU7, 30, 30, 5, & indus70[0], & indus71[0], & indus72[0], & indus73[0], & indus74[0]);
agric[0] = (BIT_MAP_OBJ * ) NewBMOPlanes(AGRI0, 30, 30, 5, & agric00[0], & agric01[0], & agric02[0], & agric03[0], & agric04[0]);
agric[1] = (BIT_MAP_OBJ * ) NewBMOPlanes(AGRI1, 30, 30, 5, & agric10[0], & agric11[0], & agric12[0], & agric13[0], & agric14[0]);
agric[2] = (BIT_MAP_OBJ * ) NewBMOPlanes(AGRI2, 30, 30, 5, & agric20[0], & agric21[0], & agric22[0], & agric23[0], & agric24[0]);
agric[3] = (BIT_MAP_OBJ * ) NewBMOPlanes(AGRI3, 30, 30, 5, & agric30[0], & agric31[0], & agric32[0], & agric33[0], & agric34[0]);
agric[4] = (BIT_MAP_OBJ * ) NewBMOPlanes(AGRI4, 30, 30, 5, & agric40[0], & agric41[0], & agric42[0], & agric43[0], & agric44[0]);
agric[5] = (BIT_MAP_OBJ * ) NewBMOPlanes(AGRI5, 30, 30, 5, & agric50[0], & agric51[0], & agric52[0], & agric53[0], & agric54[0]);
agric[6] = (BIT_MAP_OBJ * ) NewBMOPlanes(AGRI6, 30, 30, 5, & agric60[0], & agric61[0], & agric62[0], & agric63[0], & agric64[0]);
agric[7] = (BIT_MAP_OBJ * ) NewBMOPlanes(AGRI7, 30, 30, 5, & agric70[0], & agric71[0], & agric72[0], & agric73[0], & agric74[0]);
base[0] = (BIT_MAP_OBJ * ) NewBMOPlanes(HOUS, 30, 30, 5, & house_base0[0], & house_base1[0], & house_base2[0], & house_base3[0], & house_base4[0]);
base[1] = (BIT_MAP_OBJ * ) NewBMOPlanes(COMM, 30, 30, 5, & comme_base0[0], & comme_base1[0], & comme_base2[0], & comme_base3[0], & comme_base4[0]);
base[2] = (BIT_MAP_OBJ * ) NewBMOPlanes(INDU, 30, 30, 5, & indus_base0[0], & indus_base1[0], & indus_base2[0], & indus_base3[0], & indus_base4[0]);
base[3] = (BIT_MAP_OBJ * ) NewBMOPlanes(AGRI, 30, 30, 5, & agric_base0[0], & agric_base1[0], & agric_base2[0], & agric_base3[0], & agric_base4[0]);
RangeSeed = (VBeamPos() * 100);
FOR(x = 0; x < drawbg -> w; x += terre -> w) {
FOR(y = 0; y < drawbg -> h; y += terre -> h) {
BltBMO(terre, drawbg, x, y);
}
}
AspergeBitMap(arbre, 800, TERRE);
AspergeBitMap(pbuis, 30, TERRE);
AspergeBitMap(gbuis, 60, TERRE);
AspergeBitMap(gravi, 20, TERRE);
AspergeBitMap(creva, 20, TERRE);
goflots(RangeRand(30), RangeRand(20));
goflots(RangeRand(30) + 90, RangeRand(20) + 60);
gobrous(RangeRand(30) + 90, RangeRand(30));
gobrous(RangeRand(30), RangeRand(30) + 50);
#
define GND > 8
#define BRS <= 8
FOR(x = 0; x < 120; x++) {
FOR(y = 0; y < 81; y++) {
IF(celbgnd[x][y].type == BROU4) {
IF(celbgnd[x - 1][y].type GND AND celbgnd[x][y - 1].type GND AND celbgnd[x + 1][y].type BRS AND celbgnd[x][y + 1].type BRS) {
celbgnd[x][y].type = BROU0;
}
ELSE
IF(celbgnd[x - 1][y].type GND AND celbgnd[x][y - 1].type BRS AND celbgnd[x + 1][y].type BRS AND celbgnd[x][y + 1].type BRS) {
celbgnd[x][y].type = BROU1;
}
ELSE
IF(celbgnd[x - 1][y].type GND AND celbgnd[x][y - 1].type BRS AND celbgnd[x + 1][y].type BRS AND celbgnd[x][y + 1].type GND) {
celbgnd[x][y].type = BROU2;
}
ELSE
IF(celbgnd[x - 1][y].type BRS AND celbgnd[x][y - 1].type GND AND celbgnd[x + 1][y].type BRS AND celbgnd[x][y + 1].type BRS) {
celbgnd[x][y].type = BROU3;
}
ELSE
IF(celbgnd[x - 1][y].type BRS AND celbgnd[x][y - 1].type BRS AND celbgnd[x + 1][y].type BRS AND celbgnd[x][y + 1].type GND) {
celbgnd[x][y].type = BROU5;
}
IF(celbgnd[x - 1][y].type BRS AND celbgnd[x][y - 1].type GND AND celbgnd[x + 1][y].type GND AND celbgnd[x][y + 1].type BRS) {
celbgnd[x][y].type = BROU6;
}
ELSE
IF(celbgnd[x - 1][y].type BRS AND celbgnd[x][y - 1].type BRS AND celbgnd[x + 1][y].type GND AND celbgnd[x][y + 1].type BRS) {
celbgnd[x][y].type = BROU7;
}
ELSE
IF(celbgnd[x - 1][y].type BRS AND celbgnd[x][y - 1].type BRS AND celbgnd[x + 1][y].type GND AND celbgnd[x][y + 1].type GND) {
celbgnd[x][y].type = BROU8;
}
}
ELSE
IF(celbgnd[x][y].type == FLOT4) {
IF((celbgnd[x - 1][y].type < 9 OR celbgnd[x - 1][y].type > 17) AND(celbgnd[x][y - 1].type < 9 OR celbgnd[x][y - 1].type > 17) AND celbgnd[x + 1][y].type >= 9 AND celbgnd[x + 1][y].type <= 17 AND celbgnd[x][y + 1].type >= 9 AND celbgnd[x][y + 1].type <= 17) {
celbgnd[x][y].type = FLOT0;
}
ELSE
IF((celbgnd[x - 1][y].type < 9 OR celbgnd[x - 1][y].type > 17) AND celbgnd[x][y - 1].type >= 9 AND celbgnd[x][y - 1].type <= 17 AND celbgnd[x + 1][y].type >= 9 AND celbgnd[x + 1][y].type <= 17 AND celbgnd[x][y + 1].type >= 9 AND celbgnd[x][y + 1].type <= 17) {
celbgnd[x][y].type = FLOT1;
}
ELSE
IF((celbgnd[x - 1][y].type < 9 OR celbgnd[x - 1][y].type > 17) AND celbgnd[x][y - 1].type >= 9 AND celbgnd[x][y - 1].type <= 17 AND celbgnd[x + 1][y].type >= 9 AND celbgnd[x + 1][y].type <= 17 AND(celbgnd[x][y + 1].type < 9 OR celbgnd[x][y + 1].type > 17)) {
celbgnd[x][y].type = FLOT2;
}
ELSE
IF(celbgnd[x - 1][y].type >= 9 AND celbgnd[x - 1][y].type <= 17 AND(celbgnd[x][y - 1].type < 9 OR celbgnd[x][y - 1].type > 17) AND celbgnd[x + 1][y].type >= 9 AND celbgnd[x + 1][y].type <= 17 AND celbgnd[x][y + 1].type >= 9 AND celbgnd[x][y + 1].type <= 17) {
celbgnd[x][y].type = FLOT3;
}
ELSE
IF(celbgnd[x - 1][y].type >= 9 AND celbgnd[x - 1][y].type <= 17 AND celbgnd[x][y - 1].type >= 9 AND celbgnd[x][y - 1].type <= 17 AND celbgnd[x + 1][y].type >= 9 AND celbgnd[x + 1][y].type <= 17 AND(celbgnd[x][y + 1].type < 9 OR celbgnd[x][y + 1].type > 17)) {
celbgnd[x][y].type = FLOT5;
}
IF(celbgnd[x - 1][y].type >= 9 AND celbgnd[x - 1][y].type <= 17 AND(celbgnd[x][y - 1].type < 9 OR celbgnd[x][y - 1].type > 17) AND(celbgnd[x + 1][y].type < 9 OR celbgnd[x + 1][y].type > 17) AND celbgnd[x][y + 1].type >= 9 AND celbgnd[x][y + 1].type <= 17) {
celbgnd[x][y].type = FLOT6;
}
ELSE
IF(celbgnd[x - 1][y].type >= 9 AND celbgnd[x - 1][y].type <= 17 AND celbgnd[x][y - 1].type >= 9 AND celbgnd[x][y - 1].type <= 17 AND(celbgnd[x + 1][y].type < 9 OR celbgnd[x + 1][y].type > 17) AND celbgnd[x][y + 1].type >= 9 AND celbgnd[x][y + 1].type <= 17) {
celbgnd[x][y].type = FLOT7;
}
ELSE
IF(celbgnd[x - 1][y].type >= 9 AND celbgnd[x - 1][y].type <= 17 AND celbgnd[x][y - 1].type >= 9 AND celbgnd[x][y - 1].type <= 17 AND(celbgnd[x + 1][y].type < 9 OR celbgnd[x + 1][y].type > 17) AND(celbgnd[x][y + 1].type < 9 OR celbgnd[x][y + 1].type > 17)) {
celbgnd[x][y].type = FLOT8;
}
}
}
}
FOR(x = 0; x < 120; x++) /*background celules */ {
FOR(y = 0; y < 81; y++) {
REGISTER n = RangeRand(4);
SWITCH(celbgnd[x][y].type) {
CASE BROU0: Blit(brous0[n], x, y, BROUS);
BREAK;
CASE BROU1: Blit(brous1[n], x, y, BROUS);
BREAK;
CASE BROU2: Blit(brous2[n], x, y, BROUS);
BREAK;
CASE BROU3: Blit(brous3[n], x, y, BROUS);
BREAK;
CASE BROU5: Blit(brous5[n], x, y, BROUS);
BREAK;
CASE BROU6: Blit(brous6[n], x, y, BROUS);
BREAK;
CASE BROU7: Blit(brous7[n], x, y, BROUS);
BREAK;
CASE BROU8: Blit(brous8[n], x, y, BROUS);
BREAK;
CASE FLOT0: Blit(flots0[n], x, y, FLOTS);
BREAK;
CASE FLOT1: Blit(flots1[n], x, y, FLOTS);
BREAK;
CASE FLOT2: Blit(flots2[n], x, y, FLOTS);
BREAK;
CASE FLOT3: Blit(flots3[n], x, y, FLOTS);
BREAK;
CASE FLOT5: Blit(flots5[n], x, y, FLOTS);
BREAK;
CASE FLOT6: Blit(flots6[n], x, y, FLOTS);
BREAK;
CASE FLOT7: Blit(flots7[n], x, y, FLOTS);
BREAK;
CASE FLOT8: Blit(flots8[n], x, y, FLOTS);
BREAK;
CASE BROU4: n = RangeRand(9);
Blit(brous4[n], x, y, BROUS);
BREAK;
CASE FLOT4: n = RangeRand(9);
Blit(flots4[n], x, y, FLOTS);
BREAK;
}
}
}
bmo_cur = roads[4];
}
/*-------------------------------------------------------------------------*/
VOID AspergeBitMap(BIT_MAP_OBJ * o, INT n, INT type) {
REGISTER UWORD x, y, i;
FOR(i = 0; i < n; i++) {
x = RangeRand(120);
y = RangeRand(81);
BltBMO(o, drawbg, celbgnd[x][y].posx, celbgnd[x][y].posy);
celbgnd[x][y].type = type;
}
}
VOID Blit(BIT_MAP_OBJ * o, INT x, INT y, INT type) {
BltBMO(o, drawbg, celbgnd[x][y].posx, celbgnd[x][y].posy);
celbgnd[x][y].type = type;
}
/*-------------------------------------------------------------------------*/
VOID UnInitAllBitMap(VOID) {
RemBMOPlanes(base[0]);
RemBMOPlanes(base[1]);
RemBMOPlanes(base[2]);
RemBMOPlanes(base[3]);
RemBMOPlanes(house[0]);
RemBMOPlanes(house[1]);
RemBMOPlanes(house[2]);
RemBMOPlanes(house[3]);
RemBMOPlanes(house[4]);
RemBMOPlanes(house[5]);
RemBMOPlanes(house[6]);
RemBMOPlanes(house[7]);
RemBMOPlanes(comme[0]);
RemBMOPlanes(comme[1]);
RemBMOPlanes(comme[2]);
RemBMOPlanes(comme[3]);
RemBMOPlanes(comme[4]);
RemBMOPlanes(comme[5]);
RemBMOPlanes(comme[6]);
RemBMOPlanes(comme[7]);
RemBMOPlanes(indus[0]);
RemBMOPlanes(indus[1]);
RemBMOPlanes(indus[2]);
RemBMOPlanes(indus[3]);
RemBMOPlanes(indus[4]);
RemBMOPlanes(indus[5]);
RemBMOPlanes(indus[6]);
RemBMOPlanes(indus[7]);
RemBMOPlanes(agric[0]);
RemBMOPlanes(agric[1]);
RemBMOPlanes(agric[2]);
RemBMOPlanes(agric[3]);
RemBMOPlanes(agric[4]);
RemBMOPlanes(agric[5]);
RemBMOPlanes(agric[6]);
RemBMOPlanes(agric[7]);
RemBMOPlanes(roads[0]);
RemBMOPlanes(roads[1]);
RemBMOPlanes(roads[2]);
RemBMOPlanes(roads[3]);
RemBMOPlanes(roads[4]);
RemBMOPlanes(roads[5]);
RemBMOPlanes(roads[6]);
RemBMOPlanes(roads[7]);
RemBMOPlanes(roads[8]);
RemBMOPlanes(roads[9]);
RemBMOPlanes(roads[10]);
RemBMOPlanes(roads[11]);
RemBMOPlanes(roads[12]);
RemBMOPlanes(brous0[0]);
RemBMOPlanes(brous0[1]);
RemBMOPlanes(brous0[2]);
RemBMOPlanes(brous0[3]);
RemBMOPlanes(brous1[0]);
RemBMOPlanes(brous1[1]);
RemBMOPlanes(brous1[2]);
RemBMOPlanes(brous1[3]);
RemBMOPlanes(brous2[0]);
RemBMOPlanes(brous2[1]);
RemBMOPlanes(brous2[2]);
RemBMOPlanes(brous2[3]);
RemBMOPlanes(brous3[0]);
RemBMOPlanes(brous3[1]);
RemBMOPlanes(brous3[2]);
RemBMOPlanes(brous3[3]);
RemBMOPlanes(brous5[0]);
RemBMOPlanes(brous5[1]);
RemBMOPlanes(brous5[2]);
RemBMOPlanes(brous5[3]);
RemBMOPlanes(brous6[0]);
RemBMOPlanes(brous6[1]);
RemBMOPlanes(brous6[2]);
RemBMOPlanes(brous6[3]);
RemBMOPlanes(brous7[0]);
RemBMOPlanes(brous7[1]);
RemBMOPlanes(brous7[2]);
RemBMOPlanes(brous7[3]);
RemBMOPlanes(brous8[0]);
RemBMOPlanes(brous8[1]);
RemBMOPlanes(brous8[2]);
RemBMOPlanes(brous8[3]);
RemBMOPlanes(brous4[0]);
RemBMOPlanes(brous4[1]);
RemBMOPlanes(brous4[2]);
RemBMOPlanes(brous4[3]);
RemBMOPlanes(brous4[4]);
RemBMOPlanes(brous4[5]);
RemBMOPlanes(brous4[6]);
RemBMOPlanes(brous4[7]);
RemBMOPlanes(brous4[8]);
RemBMOPlanes(flots0[0]);
RemBMOPlanes(flots0[1]);
RemBMOPlanes(flots0[2]);
RemBMOPlanes(flots0[3]);
RemBMOPlanes(flots1[0]);
RemBMOPlanes(flots1[1]);
RemBMOPlanes(flots1[2]);
RemBMOPlanes(flots1[3]);
RemBMOPlanes(flots2[0]);
RemBMOPlanes(flots2[1]);
RemBMOPlanes(flots2[2]);
RemBMOPlanes(flots2[3]);
RemBMOPlanes(flots3[0]);
RemBMOPlanes(flots3[1]);
RemBMOPlanes(flots3[2]);
RemBMOPlanes(flots3[3]);
RemBMOPlanes(flots5[0]);
RemBMOPlanes(flots5[1]);
RemBMOPlanes(flots5[2]);
RemBMOPlanes(flots5[3]);
RemBMOPlanes(flots6[0]);
RemBMOPlanes(flots6[1]);
RemBMOPlanes(flots6[2]);
RemBMOPlanes(flots6[3]);
RemBMOPlanes(flots7[0]);
RemBMOPlanes(flots7[1]);
RemBMOPlanes(flots7[2]);
RemBMOPlanes(flots7[3]);
RemBMOPlanes(flots8[0]);
RemBMOPlanes(flots8[1]);
RemBMOPlanes(flots8[2]);
RemBMOPlanes(flots8[3]);
RemBMOPlanes(flots4[0]);
RemBMOPlanes(flots4[1]);
RemBMOPlanes(flots4[2]);
RemBMOPlanes(flots4[3]);
RemBMOPlanes(flots4[4]);
RemBMOPlanes(flots4[5]);
RemBMOPlanes(flots4[6]);
RemBMOPlanes(flots4[7]);
RemBMOPlanes(flots4[8]);
RemBMOPlanes(terre);
RemBMOPlanes(arbre);
RemBMOPlanes(pbuis);
RemBMOPlanes(gbuis);
RemBMOPlanes(gravi);
RemBMOPlanes(creva);
RemBitMapPlanes(userbg);
RemBMO(drawbg);
}
/*amiga.c */
#define INC_EXEC
#define INC_DOS
#define INC_GRAPHICS
#define INC_INTUITION
#define INC_HARDWARE
#define NO_BASE#include ".H:macros.h"
EXTERN ULONG bye(ULONG); /*Attention a la déclaration de 'bye' dans 'main' */
/*Si le prototypage ne correspond, pas de branchement */
/*-------------------------------------------------------------------------*/
INT Request(WIN * win, STRPTR gad, STRPTR mes, APTR arg, ...);
VOID Error(WIN * win, STRPTR txt, LONG no);
LIB OpenLib(STRPTR name, LONG ver);
VOID CloseLib(LIB lib);
WIN * OpenWinTag(ULONG tag, ...);
VOID CloseWin(WIN * win);
SCR * OpenScrTag(ULONG tag, ...);
VOID CloseScr(SCR * scr);
VOID FlushMsg(MSG_PORT * mp, WIN * win);
/*-------------------------------------------------------------------------*/
INT Request(WIN * win, STRPTR gad, STRPTR mes, APTR arg, ...) {
INT result;
STRUCT EasyStruct es;
es.es_StructSize = (ULONG) SIZEOF(struct EasyStruct);
es.es_Flags = 0;
es.es_Title = 0;
es.es_TextFormat = (UBYTE * ) mes;
es.es_GadgetFormat = (UBYTE * ) gad;
result = EasyRequestArgs(win, & es, 0, & arg);
RETURN((INT) result);
}
/*-------------------------------------------------------------------------*/
VOID Error(WIN * win, STRPTR txt, LONG no) {
Request(win, "Ok", "\nError: %s\nCode: %ld\n", txt, no);
bye(no);
}
/*-------------------------------------------------------------------------*/
LIB OpenLib(STRPTR name, LONG ver) {
LIB lib;
if (NOT(lib = (LIB) OpenLibrary(name, ver))) {
Request(NL, "Ok", "\nError open library: %s\n Version: %ld\n", name, ver);
bye(1);
}
RETURN((LIB) lib);
}
/*-------------------------------------------------------------------------*/
VOID CloseLib(LIB lib) {
if (lib) CloseLibrary(lib);
}
/*-------------------------------------------------------------------------*/
WIN * OpenWinTag(ULONG tag, ...) {
WIN * win;
if (NOT(win = (WIN * ) OpenWindowTagList(NL, & tag))) {
Error(NL, "OpenWindowTags", 2);
}
RETURN((WIN * ) win);
}
/*-------------------------------------------------------------------------*/
SCR * OpenScrTag(ULONG tag, ...) {
SCR * scr;
if (NOT(scr = (SCR * ) OpenScreenTagList(NL, & tag))) {
Error(NL, "OpenScreenTags", 2);
}
RETURN((SCR * ) scr);
}
/*-------------------------------------------------------------------------*/
VOID CloseWin(WIN * win) {
Forbid();
FlushMsg(win -> UserPort, win);
win -> UserPort = NL;
ModifyIDCMP(win, 0 L);
Permit();
if (win) CloseWindow(win);
}
/*-------------------------------------------------------------------------*/
VOID CloseScr(SCR * scr) {
if (scr) CloseScreen(scr);
}
/*-------------------------------------------------------------------------*/
VOID FlushMsg(MSG_PORT * mp, WIN * win) {
INTUI_MSG * msg;
NODE * succ;
msg = (INTUI_MSG * ) mp -> mp_MsgList.lh_Head;
while (succ = msg -> ExecMessage.mn_Node.ln_Succ) {
if (msg -> IDCMPWindow == win) {
Remove((NODE * ) msg);
ReplyMsg((MSG * ) msg);
}
msg = (INTUI_MSG * ) succ;
}
}
/*-------------------------------------------------------------------------*/
BIT_MAP * NewBitMapPlanes(ULONG w, ULONG h, ULONG d, UWORD * p0, UWORD * p1, UWORD * p2, UWORD * p3, UWORD * p4, UWORD * p5, UWORD * p6, UWORD * p7) {
BIT_MAP * bm;
NewChip(bm, BIT_MAP);
InitBitMap(bm, d, w, h);
if (p0) bm -> Planes[0] = (PLANEPTR) p0;
if (p1) bm -> Planes[1] = (PLANEPTR) p1;
if (p2) bm -> Planes[2] = (PLANEPTR) p2;
if (p3) bm -> Planes[3] = (PLANEPTR) p3;
if (p4) bm -> Planes[4] = (PLANEPTR) p4;
if (p5) bm -> Planes[5] = (PLANEPTR) p5;
if (p6) bm -> Planes[6] = (PLANEPTR) p6;
if (p7) bm -> Planes[7] = (PLANEPTR) p7;
RETURN((BIT_MAP * ) bm);
}
/*-------------------------------------------------------------------------*/
BIT_MAP_OBJ * NewBMOPlanes(ULONG type, ULONG w, ULONG h, ULONG d, UWORD * p0, UWORD * p1, UWORD * p2, UWORD * p3, UWORD * p4, UWORD * p5, UWORD * p6, UWORD * p7) {
BIT_MAP_OBJ * bmo;
NewChip(bmo, BIT_MAP_OBJ);
NewChip(bmo -> bm, BIT_MAP);
InitBitMap(bmo -> bm, d, w, h);
bmo -> w = w;
bmo -> h = h;
bmo -> d = d;
bmo -> cw = w / 2;
bmo -> ch = h / 2;
bmo -> type = type;
if (p0) bmo -> bm -> Planes[0] = (PLANEPTR) p0;
if (p1) bmo -> bm -> Planes[1] = (PLANEPTR) p1;
if (p2) bmo -> bm -> Planes[2] = (PLANEPTR) p2;
if (p3) bmo -> bm -> Planes[3] = (PLANEPTR) p3;
if (p4) bmo -> bm -> Planes[4] = (PLANEPTR) p4;
if (p5) bmo -> bm -> Planes[5] = (PLANEPTR) p5;
if (p6) bmo -> bm -> Planes[6] = (PLANEPTR) p6;
if (p7) bmo -> bm -> Planes[7] = (PLANEPTR) p7;
RETURN((BIT_MAP_OBJ * ) bmo);
}
/*-------------------------------------------------------------------------*/
#define CIAAPRA 0xBFE001
#define PORT1 1
#define PORT2 2
#define LEFT_BUTTON 1
#define MIDDLE_BUTTON 2
#define RIGHT_BUTTON 4
EXTERN __far struct Custom custom;
struct CIA * cia = (struct CIA * ) CIAAPRA;
UBYTE Mouse(BYTE * mx, BYTE * my) {
UBYTE data = 0;
UWORD joy, pot;
static BYTE x = 0, y = 0, old_x = 0, old_y = 0;
custom.potgo = 0xFF00;
pot = custom.potinp;
joy = custom.joy0dat;
data += !(cia -> ciapra & 0x0040) ? LEFT_BUTTON : 0;
data += !(pot & 0x0100) ? MIDDLE_BUTTON : 0;
data += !(pot & 0x0400) ? RIGHT_BUTTON : 0;
old_x = x;
x = joy & 0x00FF;
* mx = x - old_x;
old_y = y;
y = joy >> 8;
* my = y - old_y;
return (data);
}
/*-------------------------------------------------------------------------*/
TASK * task = NL;
ULONG task_status = 10;
VOID FindMyTask(VOID) {
Forbid();
task = (TASK * ) FindTask(NL);
SetTaskPri(FindTask("input.device"), 20);
Permit();
}
VOID SetTask40(VOID) {
IF(task_status == 10) {
SetTaskPri(task, 40);
task_status = 40;
/*OFF_SPRITE; */
}
}
VOID SetTask10(VOID) {
IF(task_status == 40) {
SetTaskPri(task, 10);
task_status = 10;
/*ON_SPRITE; */
} }