home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Format CD 8
/
amigaformatcd08.iso
/
screenplay
/
utilities
/
hd_installers
/
pflaunch
/
pinball.e
< prev
next >
Wrap
Text File
|
1992-09-03
|
7KB
|
184 lines
-> $VER: Pinball Fantasies AGA launcher source (28.4.96)
MODULE 'gadtools','libraries/gadtools','graphics/rastport','graphics/text',
'intuition/intuition','intuition/screens','lowlevel','nonvolatile'
DEF hs, win:PTR TO window
PROC main()
-> typed variables
DEF fnt:PTR TO textfont, g:PTR TO gadget, i:PTR TO gadget,
m:PTR TO intuimessage, na:PTR TO LONG, rp:PTR TO rastport,
s:PTR TO screen,
-> untyped variables
c, cl, gh, gl, gw, mnu, n, ox, oy, q, v, ww, wh
na:=['Party Land',
'Speed Devils','Million Dollar Gameshow','Stones ''n'' Bones']:LONG
SetChipRev(-1)
IF gadtoolsbase:=OpenLibrary('gadtools.library',39)
IF nvbase:=OpenLibrary('nonvolatile.library',39)
IF lowlevelbase:=OpenLibrary('lowlevel.library',39)
IF hs:=AllocMem(266,$10000)
IF s:=LockPubScreen(NIL)
/* font sensitive gadget layout calculations */
rp:=s.rastport; fnt:=rp.font
ox:=s.wborleft; oy:=rp.txheight+s.wbortop+1; gw:=0
FOR n:=0 TO 3 DO gw:=Max(gw,TextLength(rp,na[n],StrLen(na[n]))+32)
gh:=fnt.ysize+6
ww:=ox+gw+4+s.wborright; wh:=gh+1*4+oy+1+s.wborbottom
IF v:=GetVisualInfoA(s,[0])
IF g:=CreateContext({gl})
FOR n:=0 TO 3
g:=CreateGadgetA(BUTTON_KIND,g,[ox+2,gh+1*n+oy+1,gw,gh,
na[n],[Long(fnt+10),fnt.ysize,0,0]:textattr,n,16,v,
0]:newgadget,0)
ENDFOR
IF mnu:=CreateMenusA([1,0,'Project', 0, 0,0,0,
2,0,'About...', '?',0,0,0,
2,0,NM_BARLABEL,0, 0,0,0,
2,0,'Quit', 'Q',0,0,0,
0,0,0, 0, 0,0,0]:newmenu,0)
IF LayoutMenusA(mnu,v,[GTMN_NEWLOOKMENUS,1,0])
IF win:=OpenWindowTagList(NIL,
[WA_LEFT,s.width-ww/2,
WA_TOP,s.height-wh/2,
WA_WIDTH,ww,
WA_HEIGHT,wh,
WA_IDCMP,IDCMP_REFRESHWINDOW+
IDCMP_VANILLAKEY+IDCMP_GADGETUP+
IDCMP_CLOSEWINDOW+IDCMP_MENUPICK,
WA_FLAGS,$100E,
WA_TITLE,'Pinball Fantasies AGA',
WA_AUTOADJUST,1,
WA_GADGETS,gl,
WA_NEWLOOKMENUS,1,NIL])
IF SetMenuStrip(win,mnu)
Gt_RefreshWindow(win,NIL)
REPEAT
WaitPort(win.userport)
WHILE (m:=Gt_GetIMsg(win.userport))
cl:=m.class ; c:=m.code; i:=m.iaddress
Gt_ReplyIMsg(m)
SELECT cl
CASE IDCMP_REFRESHWINDOW
Gt_BeginRefresh(win)
Gt_EndRefresh(win,TRUE)
CASE IDCMP_CLOSEWINDOW; q:=1
CASE IDCMP_VANILLAKEY
SELECT c
CASE "1"; play(0)
CASE "2"; play(1)
CASE "3"; play(2)
CASE "4"; play(3)
CASE "Q"; q:=1
CASE "q"; q:=1
CASE "\e";q:=1
ENDSELECT
CASE IDCMP_GADGETUP; play(i.gadgetid)
CASE IDCMP_MENUPICK
SELECT c
-> ugly hack to remove my usual menudecode()
CASE $FFFFF800
EasyRequestArgs(win,[20,0,
'About Pinball Fantasies AGA',{credz},
'OK'],0,0)
CASE $FFFFF840; q:=1
ENDSELECT
ENDSELECT
ENDWHILE
UNTIL q; ClearMenuStrip(win)
ENDIF; CloseWindow(win)
ENDIF
ENDIF; FreeMenus(mnu)
ENDIF; FreeGadgets(gl)
ENDIF; FreeVisualInfo(v)
ENDIF; UnlockPubScreen(NIL,s)
ENDIF; FreeMem(hs,266)
ENDIF; CloseLibrary(lowlevelbase)
ENDIF; CloseLibrary(nvbase)
ENDIF; CloseLibrary(gadtoolsbase)
ENDIF
ENDPROC
PROC play(lev)
DEF lk, ls, nv, od, r:requester,
d:PTR TO LONG, id:PTR TO LONG, n:PTR TO LONG, o:PTR TO LONG
n:=['pinfilea.dat','pinfileb.dat','pinfilec.dat','pinfiled.dat']
d:=['PF2:','PF1:','PF3:','PF4:']; o:=[0,48,128,176]; id:=[0,hs+o[lev],
hs,dosbase,gfxbase,nvbase,lowlevelbase,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
IF nv:=GetCopyNV('Pinball','Highscore',-1)
CopyMem(nv,hs,256)
FreeNVData(nv)
ELSE
CopyMem({defsc},hs,256)
ENDIF
InitRequester(r); Request(r,win)
SetWindowPointerA(win,[WA_BUSYPOINTER,1,0])
IF (ls:=LoadSeg(n[lev]))=0
IF lk:=Lock(d[lev],-2)
od:=CurrentDir(lk)
ls:=LoadSeg(n[lev])
CurrentDir(od)
UnLock(lk)
ENDIF
ENDIF
ClearPointer(win); EndRequest(r,win)
IF ls=0
EasyRequestArgs(win,[20,0,'Error','Can''t load table','OK'],0,0)
RETURN
ENDIF
Delay(50)
CacheClearU()
MOVEM.L D1-D7/A0-A6,-(A7)
MOVE.L id,A1
MOVE.L ls,A0 -> ls is a BPTR
ADD.L A0,A0
ADD.L A0,A0
MOVE.L A1,A5 -> this is OK, even though E warns you about it!
SUBA.L A1,A1
JSR 4(A0)
MOVEM.L (A7)+,D1-D7/A0-A6
TST.L D0
BEQ noscores
REPEAT
WaitTOF(); WaitTOF() -> do I really need this wait? i don't have any
-> docs on nonvolatile, send me some please!
IF StoreNV('Pinball','Highscore',hs,26,0)=0 THEN JUMP noscores
UNTIL (EasyRequestArgs(win,[20,0,'Error','Can''t save highscores',
'Retry|Cancel'],0,0))=0
noscores:
UnLoadSeg(ls)
ENDPROC
defsc:
LONG "TSL ",$00000000,$50000000,
"TSL ",$00000000,$25000000,
"TSL ",$00000000,$10000000,
"TSL ",$00000000,$05000000,
"TSL ",$00000001,$00000000,
"TSL ",$00000000,$50000000,
"TSL ",$00000000,$25000000,
"TSL ",$00000000,$10000000,
" P","ARTY"," LAN","D ",
" SP","EED ","DEVI","LS ",
"TSL ",$00000001,$00000000, -> 100,000,000 points
"TSL ",$00000000,$50000000, -> 50,000,000 points
"TSL ",$00000000,$25000000, -> 25,000,000 points etc...
"TSL ",$00000000,$10000000,
"TSL ",$00000001,$00000000,
"TSL ",$00000000,$50000000,
"TSL ",$00000000,$25000000,
"TSL ",$00000000,$10000000,
" BIL","LION"," DOL","LAR ",
" STO","NES ","N BO","NES "
credz:
CHAR 'Pinball Fantasies AGA by Digital Illusions.\n\n',
'Published by 21st Century Entertainment.\0\n\n'
CHAR ' This launcher program is written by Kyzer/CSG \n',
' Contact 49 Fairview Road, AB22 8ZG, Scotland. \n\n',
'$VER: Pinball Fantasies AGA launcher 1.0 (28.4.96)\0'