home *** CD-ROM | disk | FTP | other *** search
AMOS Source Code | 1992-02-26 | 6.6 KB | 287 lines |
- ' *************************************************************
- '
- ' MAPPER
- ' ======
- '
- ' Where All Great Games Are Made!
- '
- ' /\/\/\/\/\/\/\/\/\
- ' By: Paul Nordovics
- ' \/\/\/\/\/\/\/\/\/
- '
- ' Gives You Some Idea How A Mapper Is Written
- '
- ' Use Keys:
- '
- ' F1 = Next Level
- ' F2 = Previous Level
- ' F3 = Clear Screen
- ' F4 = Clear Current Map Block Position
- ' F5 = Fill Screen With Current Map Block
- ' F6 = Change Wall Blocks To Current Map Block
- ' F7 = Change Floor Blocks To Current Map Block
- ' F9 = Load Map Data (disabled)
- ' F10 = Save Map Data (disabled)
- ' Cursor Up = Next Map Block
- ' Cursor Down = Previous Map Block
- ' Fire(Joy 1) = Put Block
- '
- ' It's A Bit Slooooowwww!!! (I compiled "Proper" Version)
- '
- ' *************************************************************
- '
- ' *****************
- ' make enough space
- ' *****************
- Set Buffer 50
- '
- ' ***********
- ' set up vars
- ' ***********
- Global _CURS_X,_CURS_Y,DELAY,BLOCK_IMAGE
- _CURS_X=0 : _CURS_Y=0
- DELAY=20
- BLOCK_IMAGE=1
- Dim MAP(20,260)
- Global MAP(),ARRAY_X,ARRAY_Y,LEVEL
- ARRAY_X=0 : ARRAY_Y=0
- '
- ' *************
- ' set up screen
- ' *************
- LEVEL=0
- _SHOW_MAP
- Locate 0,27 : Print "LEVEL:";LEVEL;
- Locate 6,28 : Print " "
- Locate 0,28 : Print "BLOCK:";BLOCK_IMAGE;
- Paste Bob 96,210,BLOCK_IMAGE
- '
- ' -------------------------------------------------------------
- '
- ' *************************************************************
- ' main loop
- ' *************************************************************
- Do
- MOVE_CURSOR
- _FN_KEYS
- Loop
- '
- ' -------------------------------------------------------------
- '
- Procedure MOVE_CURSOR
- If Jup(1)
- Add _CURS_Y,-16 : Add ARRAY_Y,-1
- If _CURS_Y<0
- _CURS_Y=0 : ARRAY_Y=LEVEL*13
- End If
- Wait DELAY
- End If
- If Jdown(1)
- Add _CURS_Y,16 : Add ARRAY_Y,1
- If _CURS_Y>192
- _CURS_Y=192 : ARRAY_Y=(LEVEL*13)+12
- End If
- Wait DELAY
- End If
- If Jright(1)
- Add _CURS_X,16 : Add ARRAY_X,1
- If _CURS_X>304
- _CURS_X=304 : ARRAY_X=19
- End If
- Wait DELAY
- End If
- If Jleft(1)
- Add _CURS_X,-16 : Add ARRAY_X,-1
- If _CURS_X<0
- _CURS_X=0 : ARRAY_X=0
- End If
- Wait DELAY
- End If
- Bob 0,_CURS_X,_CURS_Y,Length(1)-1
- If Fire(1)
- Cls 0,_CURS_X,_CURS_Y To _CURS_X+16,_CURS_Y+16
- Paste Bob _CURS_X,_CURS_Y,BLOCK_IMAGE
- MAP(ARRAY_X,ARRAY_Y)=BLOCK_IMAGE
- End If
- End Proc
- Procedure _FN_KEYS
- ' ***************
- ' CHANGE BLOCK UP
- ' ***************
- If Key State($4C)
- Inc BLOCK_IMAGE
- If BLOCK_IMAGE>Length(1)-1
- BLOCK_IMAGE=Length(1)-1
- End If
- Locate 7,28 : Print " "
- Locate 0,28 : Print "BLOCK:";BLOCK_IMAGE;
- Cls 0,96,210 To 112,226
- Paste Bob 96,210,BLOCK_IMAGE
- End If
- ' *****************
- ' CHANGE BLOCK DOWN
- ' *****************
- If Key State($4D)
- Dec BLOCK_IMAGE
- If BLOCK_IMAGE<1
- BLOCK_IMAGE=1
- End If
- Locate 7,28 : Print " "
- Locate 0,28 : Print "BLOCK:";BLOCK_IMAGE;
- Cls 0,96,210 To 112,226
- Paste Bob 96,210,BLOCK_IMAGE
- End If
- ' ********
- ' LEVEL UP
- ' ********
- If Key State($50)
- Inc LEVEL
- Add ARRAY_Y,13
- If LEVEL>19
- LEVEL=19
- Add ARRAY_Y,-13
- End If
- _SHOW_MAP
- Locate 0,27 : Print "LEVEL:";LEVEL;
- Locate 7,28 : Print " "
- Locate 0,28 : Print "BLOCK:";BLOCK_IMAGE;
- Paste Bob 96,210,BLOCK_IMAGE
- End If
- ' **********
- ' LEVEL DOWN
- ' **********
- If Key State($51)
- Dec LEVEL
- Add ARRAY_Y,-13
- If LEVEL<0
- LEVEL=0
- Add ARRAY_Y,13
- End If
- _SHOW_MAP
- Locate 0,27 : Print "LEVEL:";LEVEL;
- Locate 7,28 : Print " "
- Locate 0,28 : Print "BLOCK:";BLOCK_IMAGE;
- Paste Bob 96,210,BLOCK_IMAGE
- End If
- ' ************
- ' CLEAR SCREEN
- ' ************
- If Key State($52)
- For D=LEVEL*13 To(LEVEL*13)+12
- For A=0 To 19
- MAP(A,D)=0
- Next A
- Next D
- _SHOW_MAP
- End If
- ' ***********
- ' CLEAR BLOCK
- ' ***********
- If Key State($53)
- Cls 0,_CURS_X,_CURS_Y To _CURS_X+16,_CURS_Y+16
- MAP(ARRAY_X,ARRAY_Y)=0
- End If
- ' *****************************
- ' CLEAR SCREEN TO CURRENT BLOCK
- ' *****************************
- If Key State($54)
- For D=LEVEL*13 To(LEVEL*13)+12
- For A=0 To 19
- MAP(A,D)=BLOCK_IMAGE
- Next A
- Next D
- _SHOW_MAP
- End If
- ' ***********************************
- ' CHANGE WALL BLOCKS TO CURRENT BLOCK
- ' ***********************************
- If Key State($56)
- For D=LEVEL*13 To(LEVEL*13)+12
- For A=0 To 19
- If MAP(A,D)>61
- MAP(A,D)=BLOCK_IMAGE
- End If
- Next A
- Next D
- _SHOW_MAP
- End If
- ' ************************************
- ' CHANGE FLOOR BLOCKS TO CURRENT BLOCK
- ' ************************************
- If Key State($57)
- For D=LEVEL*13 To(LEVEL*13)+12
- For A=0 To 19
- If MAP(A,D)>18 and MAP(A,D)<62
- MAP(A,D)=BLOCK_IMAGE
- End If
- Next A
- Next D
- _SHOW_MAP
- End If
- ' *******************
- ' LOAD DATA FROM DISK
- ' *******************
- If Key State($58)
- '_LOAD_DATA
- End If
- ' *****************
- ' SAVE DATA TO DISC
- ' *****************
- If Key State($59)
- '_SAVE_DATA
- End If
- End Proc
- Procedure _SHOW_MAP
- Screen Close 0
- Screen Open 0,320,256,16,Lowres
- Curs Off : Flash Off : Hide
- Get Sprite Palette
- Screen Hide
- Colour 0,$0
- Cls 0
- Paper 0 : Pen 3
- Y=0
- For D=LEVEL*13 To(LEVEL*13)+12
- X=0
- For A=0 To 19
- If MAP(A,D)>0
- Paste Bob X,Y,MAP(A,D)
- End If
- Add X,16
- Next A
- Add Y,16
- Next D
- Locate 0,27 : Print "LEVEL:";LEVEL;
- Locate 6,28 : Print " "
- Locate 0,28 : Print "BLOCK:";BLOCK_IMAGE;
- Paste Bob 96,210,BLOCK_IMAGE
- Double Buffer
- Screen Show
- End Proc
- Procedure _SAVE_DATA
- Open Random 1,"df0:Map_data"
- Field 1,4 As D$
- R=(LEVEL*260)+1
- For D=LEVEL*13 To(LEVEL*13)+12
- For A=0 To 19
- D$=Str$(MAP(A,D))
- Put 1,R
- Inc R
- Next A
- Next D
- Close 1
- End Proc
- Procedure _LOAD_DATA
- Open Random 1,"df0:Map_data"
- Field 1,4 As D$
- R=(LEVEL*260)+1
- For D=LEVEL*13 To(LEVEL*13)+12
- For A=0 To 19
- Get 1,R
- MAP(A,D)=Val(D$)
- Inc R
- Next A
- Next D
- Close 1
- _SHOW_MAP
- End Proc