home *** CD-ROM | disk | FTP | other *** search
- /*
- * MKSoft SnakePit Copyright (c) 1988 by Michael Sinz
- *
- * Screen Edit Part program...
- */
-
- #include "Snake.h"
-
- static Pit_Screen Edit_Screen;
- static BYTE tool=NORMAL_BRICK;
- static short Edit_Level=-1;
-
- #define EDIT_POINTER_X -9L
- #define EDIT_POINTER_Y -8L
- #define EDIT_POINTER_H 16L
- #define EDIT_POINTER_W 16L
- static short Edit_Pointer[] =
- {
- 0x0000,0x0000,
- 0xFFFF,0xFFFF, /* 3333 3333 3333 3333 */
- 0xFFFF,0xFFFF, /* 3333 3333 3333 3333 */
- 0xC003,0xC003, /* 3300 0000 0000 0033 */
- 0xC003,0xC003, /* 3300 0000 0000 0033 */
- 0xC003,0xC003, /* 3300 0000 0000 0033 */
- 0xC003,0xC003, /* 3300 0000 0000 0033 */
- 0xC003,0xC003, /* 3300 0000 0000 0033 */
- 0xC003,0xC003, /* 3300 0000 0000 0033 */
- 0xC003,0xC003, /* 3300 0000 0000 0033 */
- 0xC003,0xC003, /* 3300 0000 0000 0033 */
- 0xC003,0xC003, /* 3300 0000 0000 0033 */
- 0xC003,0xC003, /* 3300 0000 0000 0033 */
- 0xC003,0xC003, /* 3300 0000 0000 0033 */
- 0xC003,0xC003, /* 3300 0000 0000 0033 */
- 0xFFFF,0xFFFF, /* 3333 3333 3333 3333 */
- 0xFFFF,0xFFFF, /* 3333 3333 3333 3333 */
- 0x0000,0x0000
- };
-
- static VOID ShowEdit()
- {
- SetPointer(MyWindow,Edit_Pointer,EDIT_POINTER_H,EDIT_POINTER_W,EDIT_POINTER_X,EDIT_POINTER_Y);
- }
-
- static VOID Display_At(x,y,p) register short x;
- register short y;
- register short p;
- {
- register struct Image *i;
-
- i=&Empty;
- switch (p)
- {
- case NORMAL_BRICK: i=&Brick; break;
- case MOVING_BRICK: i=&MoveBrick; break;
- case DROP_BRICK: i=&DropBrick; break;
- case POPUP_BRICK: i=&PopUpBrick; break;
- case GROW_FOOD: i=&GrowFood; break;
- case SHRINK_FOOD: i=&ShrinkFood; break;
- }
- DrawImage(MyWindow->RPort,i,((long)x<<3L),((long)y<<3L));
- }
-
- static VOID Pick_Edit_Level()
- {
- register short x;
- register short y;
-
- ClearPointer(MyWindow);
- Edit_Level++;
- Edit_Level=Request_SelectLevel(Edit_Level);
- ShowWait();
- SetRast(MyWindow->RPort,0L);
- UpDate_Status(Edit_Level,0L,0);
- Edit_Level--;
- for (x=0;x<NUM_COL;x++) for (y=0;y<NUM_ROW;y++) Display_At(x,y,Edit_Screen[x][y]=All_Pit_Screens[Edit_Level][x][y]);
- ShowEdit();
- }
-
- static VOID Save_Edit_Level()
- {
- register short x;
- register short y;
-
- ClearPointer(MyWindow);
- Edit_Level++;
- Edit_Level=Request_SelectLevel(Edit_Level);
- ShowWait();
- UpDate_Status(Edit_Level,0L,0);
- Edit_Level--;
- for (x=0;x<NUM_COL;x++) for (y=0;y<NUM_ROW;y++) All_Pit_Screens[Edit_Level][x][y]=Edit_Screen[x][y];
- ShowEdit();
- }
-
- static VOID Clear_Edit_Screen()
- {
- register short x;
- register short y;
-
- ShowWait();
- for(x=0;x<NUM_COL;x++)
- for(y=0;y<NUM_ROW;y++)
- Display_At(x,y,Edit_Screen[x][y]=((x==0)||(y==0)||(y==(NUM_ROW-1))||(x==(NUM_COL-1)))?(((x==1)&&(y==0))?DROP_BRICK:(((x==NUM_COL-2)&&(y!=0))?POPUP_BRICK:NORMAL_BRICK)):(((x==3)&&(y==3))?GROW_FOOD:EMPTY_SQUARE));
- UpDate_Status(Edit_Level+1,0L,0);
- ShowEdit();
- }
-
- static VOID Do_Edit()
- {
- struct IntuiMessage *msg;
- register short lastx=0;
- register short lasty=0;
- register short x;
- register short y;
- USHORT menu;
- struct MenuItem *TEMP;
- short EXIT=TRUE;
-
- while (EXIT)
- {
- WaitPort(MyWindow->UserPort);
- while (msg=(struct IntuiMessage *)GetMsg(MyWindow->UserPort))
- {
- switch (msg->Class)
- {
- case MOUSEBUTTONS:
- if (msg->Code==SELECTDOWN) Display_At(lastx,lasty,Edit_Screen[lastx][lasty]=(Edit_Screen[lastx][lasty] ? EMPTY_SQUARE : tool));
- break;
- case MOUSEMOVE: x=(msg->MouseX)>>3;
- y=(msg->MouseY)>>3;
- if (x<0) x=0;
- if (y<0) y=0;
- if (!(x<NUM_COL)) x=NUM_COL-1;
- if (!(y<NUM_ROW)) y=NUM_ROW-1;
- if ((x!=lastx)||(y!=lasty))
- {
- Display_At(lastx,lasty,Edit_Screen[lastx][lasty]);
- lastx=x;
- lasty=y;
- Display_At(lastx,lasty,tool);
- if (IEQUALIFIER_LEFTBUTTON & msg->Qualifier) Edit_Screen[lastx][lasty]=tool;
- }
- break;
- case MENUPICK: menu=msg->Code;
- while(menu!=MENUNULL)
- {
- if (MENUNUM(menu)==2) switch (ITEMNUM(menu))
- {
- case 0: switch (SUBNUM(menu))
- {
- case 0: Pick_Edit_Level();
- break;
- case 1: Display_At(lastx,lasty,Edit_Screen[lastx][lasty]);
- Save_Edit_Level();
- break;
- case 2: Clear_Edit_Screen();
- break;
- }
- break;
- case 1: /* These are the */
- case 2: /* various editing */
- case 3: /* tools. Their */
- case 4: /* Menu number is */
- case 5: /* the Tool Number */
- case 6: tool=ITEMNUM(menu);
- break;
- case 7: tool=EMPTY_SQUARE;
- break;
- case 8: EXIT=FALSE;
- Display_At(lastx,lasty,Edit_Screen[lastx][lasty]);
- break;
- }
- if (TEMP=ItemAddress(MyWindow->MenuStrip,(long)menu)) menu=TEMP->NextSelect;
- }
- break;
- }
- ReplyMsg(msg);
- }
- }
- }
-
- VOID Edit_Screens()
- {
- register ULONG tmpIDCMP;
-
- OffMenu(MyWindow,SHIFTMENU(0)|SHIFTITEM(NOITEM)|SHIFTSUB(NOSUB) );
- OffMenu(MyWindow,SHIFTMENU(1)|SHIFTITEM(NOITEM)|SHIFTSUB(NOSUB) );
- OnMenu (MyWindow,SHIFTMENU(2)|SHIFTITEM(NOITEM)|SHIFTSUB(NOSUB) );
-
- tmpIDCMP=MyWindow->IDCMPFlags;
- ModifyIDCMP(MyWindow,MENUPICK | MOUSEBUTTONS | MOUSEMOVE);
-
- Pick_Edit_Level();
- Sound_Play(4,1,0);
- Do_Edit();
- ShowWait();
-
- ModifyIDCMP(MyWindow,tmpIDCMP);
-
- OffMenu(MyWindow,SHIFTMENU(2)|SHIFTITEM(NOITEM)|SHIFTSUB(NOSUB) );
- OnMenu (MyWindow,SHIFTMENU(1)|SHIFTITEM(NOITEM)|SHIFTSUB(NOSUB) );
- OnMenu (MyWindow,SHIFTMENU(0)|SHIFTITEM(NOITEM)|SHIFTSUB(NOSUB) );
- }
-