;-> MacBurgher by Stefano Maria Regattin
;d> 7 agosto 2008 dalla versione per Windows
;m> 9,10,11,12,14,17 agosto 2008
;m> 11 settembre 2008
;m> 15,17 ottobre 2008
;m> 9 gennaio 2009
;m> 24,26 luglio 2009
;m> 15,17,27 novembre 2009
;m> 13,14,15,16,19,20,21 dicembre 2009
;m> 8,9,10,11,24,25 aprile 2010
;m> 4,5,7,8,9 maggio 2010
;m> 11,21 luglio 2010
;m> 6,7 marzo 2011
;m> 2,15 aprile 2011
;m> 5,6,7,10,13,17,18 maggio 2011
;m> 25,26 novembre 2017
;m> 6 dicembre 2017
;-------------------
JMP InizioDelProgramma
Dc.b "$VER: MacBurgher 1.1 (6/12/2017)"
Even
InizioDelProgramma
;--------------------------------------------------
;le seguenti costanti indicano il tipo di finestra
;the following constants state the window's kind
;------------------------------------------------
;window sizing button
#BottoneRidimensionaFinestra=1
;draggable window
#FinestraMovibile=2
;window depth button
#BottoneNascondiFinestra=4
;window close button
#BottoneChiudiFinestra=8
;sizing window right border (you must set gimme-zero-zero to use it)
#BordoDestraFinestraRidimensionabile=16
;sizing window bottom border (you must set gimme-zero-zero to use it)
#BordoBassoFinestraRidimensionabile=32
;backdrop window
#FinestraDiSfondo=256
;gimme-zero-zero window
#FinestraConMemoriaBottoni=1024
;borderless window
#FinestraSenzaBordi=2048
;window activated
#FinestraAttivata=4096
;---------------------------------------
;questi sono gli eventi di una finestra
;these are the events of a window
;---------------------------------
;you have pressed a mouse button
#HaiPremutoUnTastoDelTopo=8
;you have moved the mouse
#HaiMossoIlTopo=16
;you have pressed a button
#HaiPremutoUnBottone=32
;you have released a button
#HaiRilasciatoUnBottone=64
;you have activated a menu
#HaiAttivatoUnMenu=256
;you have closed the window
#HaiChiusoLaFinestra=512
;you have pressed a key
#HaiPremutoUnTasto=1024
;you have inserted a diskette
#HaiInseritoUnDisco=32768
;you have removed a diskette
#HaiToltoUnDisco=65536
;you have activated the window
#HaiAttivatoLaFinestra=262144
;you have deactivated the window
#HaiDisattivatoLaFinestra=524288
;-----------------------------------------
;questi sono i valori validi per MenuItem
;this are the valid values for MenuItem
;---------------------------------------
;normal menu
#MenuNormale=0
;switch menu
#MenuAttivoONonAttivo=1
;one of the deactivated voices
#UnaDelleVociNonAttive=2
;the current switch menu is active
#MenuAttivo=3
;the current voice is active
#UnaDelleVociAttiva=4
;-------------------------------------------
;questi sono i valori ascii dei tasti usati
;this are the used key ascii values
;-----------------------------------
;esc key ascii value
#TastoFugaASCII=27
;cursor up key ascii value
#TastoCursoreSuASCII=28
;cursor down key ascii value
#TastoCursoreGiuASCII=29
;cursor right key ascii value
#TastoCursoreDestraASCII=30
;cursor left key ascii value
#TastoCursoreSinistraASCII=31
;space bar key ascii value
#TastoSpazioASCII=32
;---------------------------
;queste sono altre costanti
;these are other constants
;--------------------------
;window referring number
#Finestra=0
;high resolution screen flag
#SchermoAdAltaRisoluzione=8
;interlaced screen flag
#SchermoInterallacciato=16
;hamburgher screen
#SchermoPanino=1
;hamburgher screen bitmap
#BitMapSchermoPanino=1
;workbench screen referring number
#SchermoWB=0
;main window properties
#TipoFin=#BottoneChiudiFinestra+#FinestraConMemoriaBottoni+#FinestraAttivata
;menu referring number
#Menu=0
;topaz font height
#GrandezzaFonteTopaz=8
;empty block
#BloccoVuoto=0
;stairs
#Piattaforma=1
;bread above
#PaneSopra=2
;lettuce
#Lattuga=3
;beef
#Carne=4
;bread below
#PaneSotto=5
;create play map
#CreaLaMappa=0
;draw play map
#DisegnaLaMappa=1
;hamburgher image height
#AltezzaImmaginePanino=300
;map height
#AltezzaMappa=30
;hamburgher image width
#LarghezzaImmaginePanino=400
;map width
#LarghezzaMappa=40
;hamburgher length
#LunghezzaFetta=8
;text without background colour
#TestoSenzaColoreDiSfondo=0
;at start
#Inizio=0
;in game
#Gioco=1
;hamburgher shape
#FormaPanino=0
;hamburgher image
#ImmaginePanino=0
;sandwiches maximum
#MassimoPanini=8
;workbench colours map
#MappaColoriWB=0
;hamburgher colours map
#MappaColoriPanino=1
;colour match
#PrecisioneColori=40
; block height, window font size,block width, level, hostile at right,hostile at left,hamburgher made
DEFTYPE .b AltezzaBlocco,GrandezzaFonte, LarghezzaBlocco,Livello,OstileADestra, OstileASinistra,PaninoCompletato
; hamburghers made,in game hamburghers
DEFTYPE .b PaniniCompletati,PaniniMessi
; white colour,beef colour,leaf colour, black colour,hostiles colour,near hostiles colour,bread over colour
DEFTYPE .w ColoreBianco,ColoreCarne,ColoreLattuga,ColoreNero, ColoreOstili, ColoreOstiliVicino, ColorePaneSopra
; bread below colour,stairs colour, workbench colours,win width,win height
DEFTYPE .w ColorePaneSotto, ColorePiattaforma,ColoriWB, XLunFin, YLunFin
;end of the game
FineDelGioco.b=False
Dim Mappa(#LarghezzaMappa-1,#AltezzaMappa-1)
;author name
Autore$="Stefano Maria Regattin"
;main window title
TitoloFinestra$="MacBurgher 1.1"
TitoloSchermo$=TitoloFinestra$+" by "+Autore$+" on Wed 6th Dec 2017"
TitoloSchermoPanino$=TitoloFinestra$+" by "+Autore$+" on Wed 6th Dec 2017-please wait..."
;hostile characters variables
NEWTYPE .Ostile
;pepper time
TempoPepato.w
;hostile x position
XPos.w
;hostile y position
YPos.w
End NEWTYPE
Ostili.Ostile\TempoPepato=0,0,0
;hamburgher variables
NEWTYPE .Panino
;hamburgher x position
XPos.b
;bread over y position squares
YPosPaneSopra.w[#LunghezzaFetta]
;bread over final y position
YPosFinalePaneSopra.w
;lettuce y position squares
YPosLattuga.w[#LunghezzaFetta]
;lettuce final y position
YPosFinaleLattuga.w
;beaf y position squares
YPosCarne.w[#LunghezzaFetta]
;beaf final y position
YPosFinaleCarne.w
;bread below y position squares
YPosPaneSotto.w[#LunghezzaFetta]
;bread below final y position
YPosFinalePaneSotto.w
End NEWTYPE
Dim Panini.Panino(#MassimoPanini-1)
;opens the main window
Statement ApriLaFinestra{}
SHARED ColoreBianco
SHARED ColoreNero
SHARED ColoriWB
SHARED TitoloFinestra$
SHARED TitoloSchermo$
SHARED XLunFin
SHARED YLunFin
IndirizzoSchermo.l=Peek.l(Addr Screen(#SchermoWB))
LarghezzaSchermo.w=Peek.w(IndirizzoSchermo+12)
AltezzaSchermo.w=Peek.w(IndirizzoSchermo+14)
ColoreBianco=FindColor(#MappaColoriWB,255,255,255,#PrecisioneColori)
ColoreNero=FindColor(#MappaColoriWB,0,0,0,#PrecisioneColori)
XPosFin.w=(LarghezzaSchermo-XLunFin)/2
YPosFin.w=(AltezzaSchermo-YLunFin)/2
Window #Finestra,XPosFin,YPosFin,XLunFin,YLunFin,#TipoFin,TitoloFinestra$,ColoreNero,ColoreBianco
XLunFin+XLunFin-4-InnerWidth-4
YLunFin+YLunFin-11-InnerHeight-2
CloseWindow #Finestra
Window #Finestra,XPosFin,YPosFin,XLunFin,YLunFin,#TipoFin,TitoloFinestra$,ColoreNero,ColoreBianco
WTitle TitoloFinestra$,TitoloSchermo$
WJam #TestoSenzaColoreDiSfondo
End Statement
;moves the hostile characters close to the player character
Statement AvvicinaGliOstiliAlCuoco{XPosCuoco,YPosCuoco}
SHARED Mappa()
SHARED OstileADestra
SHARED OstileASinistra
SHARED Ostili
OstileADestra=False:OstileASinistra=False
XPosOstile.b=Ostili\XPos:YPosOstile.b=Ostili\YPos:YDistanza.b=YPosOstile-YPosCuoco
If YDistanza>0
If YPosOstile MOD 3=0
XDistanza.b=#LarghezzaMappa
For XPosScala.b=0 To #LarghezzaMappa-1
If Mappa(XPosScala,YPosOstile)=#Piattaforma
XNuovaDistanza.b=XPosOstile-XPosScala
If Abs(XNuovaDistanza)1 Then Ostili\XPos-Sgn(XDistanza):XDistanza=Ostili\XPos-XPosCuoco
If XDistanza=-1 Then OstileASinistra=True
If XDistanza=1 Then OstileADestra=True
EndIf
If YDistanza<0
If YPosOstile MOD 3=0
XDistanza=#LarghezzaMappa
For XPosScala=0 To #LarghezzaMappa-1
If YPosOstile=#AltezzaMappa-3 Then FineScala.b=2 Else FineScala=3
For ScalaSotto=1 To FineScala
If Mappa(XPosScala,YPosOstile+ScalaSotto)=#Piattaforma
Scala.b=ScalaSotto
Else
Scala=0
EndIf
Next ScalaSotto
If Scala=FineScala
XNuovaDistanza=XPosOstile-XPosScala
If Abs(XNuovaDistanza)2
If YMappa MOD 3=0
If Mappa(XMappa,YMappa)=#Piattaforma Then Scala+1
Else
Scala=2
EndIf
Else
Scala=2
EndIf
Next XMappa
Until Scala>1
Next YMappa
End Statement
;draws the ostile characters
Statement DisegnaGliOstili{}
SHARED AltezzaBlocco
SHARED ColoreOstili
SHARED ColoreOstiliVicino
SHARED LarghezzaBlocco
SHARED OstileADestra
SHARED OstileASinistra
SHARED Ostili
XInizioBlocco.w=Ostili\XPos*LarghezzaBlocco
YInizioBlocco.w=Ostili\YPos*AltezzaBlocco
XFineBlocco.w=XInizioBlocco+LarghezzaBlocco-1
YFineBlocco.w=YInizioBlocco+AltezzaBlocco-1
Colore.w=ColoreOstili
If OstileADestra=True OR OstileASinistra=True Then Colore=ColoreOstiliVicino
WBox XInizioBlocco,YInizioBlocco,XFineBlocco,YFineBlocco,Colore
End Statement
;draws the player character
Statement DisegnaIlCuoco{XPosCuoco.b,YPosCuoco.b,ViteCuoco.b}
SHARED AltezzaBlocco
SHARED ColoreBianco
SHARED ColoreNero
SHARED LarghezzaBlocco
SHARED GrandezzaFonte
XInizioBlocco.w=XPosCuoco*LarghezzaBlocco
YInizioBlocco.w=YPosCuoco*AltezzaBlocco
XFineBlocco.w=XInizioBlocco+LarghezzaBlocco-1
YFineBlocco.w=YInizioBlocco+AltezzaBlocco-1
WBox XInizioBlocco,YInizioBlocco,XFineBlocco,YFineBlocco,ColoreBianco
WLocate XInizioBlocco+(LarghezzaBlocco-GrandezzaFonte)/2,YInizioBlocco-GrandezzaFonte:WColour ColoreBianco:Print ViteCuoco
End Statement
Statement DisegnaIlPanino{}
SHARED AltezzaBlocco
SHARED LarghezzaBlocco
XIniPanino.w=(InnerWidth-#LarghezzaImmaginePanino)/2:YIniPanino.w=(InnerHeight-#AltezzaImmaginePanino)/2
Use BitMap #ImmaginePanino
For Pari.b=0 To 1
For YPunto.b=Pari To AltezzaBlocco-1 Step 2
For XPunto.b=0 To LarghezzaBlocco-1
For YPanino.w=YPunto To #AltezzaImmaginePanino-1 Step AltezzaBlocco
For XPanino.w=XPunto To #LarghezzaImmaginePanino-1 Step LarghezzaBlocco
X0Panino.w=XIniPanino+XPanino:Y0Panino.w=YIniPanino+YPanino
If Y0Panino>-1 AND Y0Panino-1 AND X0PaninoYPosCuoco*AltezzaBlocco-1 AND YPosFetta-YPosCuoco*AltezzaBlocco-1YPosCuoco*AltezzaBlocco-1 AND YPosFetta-YPosCuoco*AltezzaBlocco-1YPosCuoco*AltezzaBlocco-1 AND YPosFetta-YPosCuoco*AltezzaBlocco-1YPosCuoco*AltezzaBlocco-1 AND YPosFetta-YPosCuoco*AltezzaBlocco-1PaniniCompletati
PaninoCompletato=True:PaniniCompletati+1:If PaniniCompletati=PaniniMessi Then FineDelGioco=True
EndIf
End Statement
;finds the needed colours
Statement TrovaIColori{}
SHARED ColoreCarne
SHARED ColoreLattuga
SHARED ColoreOstili
SHARED ColoreOstiliVicino
SHARED ColorePaneSopra
SHARED ColorePaneSotto
SHARED ColorePiattaforma
ColorePiattaforma=FindColor(#MappaColoriWB,63,63,127,#PrecisioneColori)
ColorePaneSopra=FindColor(#MappaColoriWB,255,191,127,#PrecisioneColori)
ColoreLattuga=FindColor(#MappaColoriWB,63,191,63,#PrecisioneColori)
ColoreCarne=FindColor(#MappaColoriWB,191,63,63,#PrecisioneColori)
ColorePaneSotto=FindColor(#MappaColoriWB,191,127,63,#PrecisioneColori)
ColoreOstili=FindColor(#MappaColoriWB,255,0,0,#PrecisioneColori)
ColoreOstiliVicino=FindColor(#MappaColoriWB,0,0,255,#PrecisioneColori)
End Statement
;************************************************
;* fine delle procedure ed inizio del programma *
;******* procedures end and program start *******
;************************************************
WBStartup
ColoriWB=2^WBDepth
WbToScreen #SchermoWB
IndirizzoSchermoWB.l=Peek.l(Addr Screen(#SchermoWB))
YLunSchermoWB.w=Peek.w(IndirizzoSchermoWB+14)
LarghezzaBlocco=12:If YLunSchermoWB>256 Then AltezzaBlocco=12 Else AltezzaBlocco=6
;main window width
XLunFin=4+#LarghezzaMappa*LarghezzaBlocco+4
;main window height
YLunFin=11+#AltezzaMappa*AltezzaBlocco+2
InitPalette #MappaColoriWB,ColoriWB
For ColoreWB.w=0 To ColoriWB-1
If CheckAGA=True
AGAPalRGB #MappaColoriWB,ColoreWB,AGARed(ColoreWB),AGAGreen(ColoreWB),AGABlue(ColoreWB)
Else
PalRGB #MappaColoriWB,ColoreWB,Red(ColoreWB),Green(ColoreWB),Blue(ColoreWB)
EndIf
Next ColoreWB
Use Palette #MappaColoriWB
InitPalette #MappaColoriPanino,ColoriWB
BitMap #ImmaginePanino,#LarghezzaImmaginePanino,#AltezzaImmaginePanino,4
LoadIFF "Hamburgher.IFF",#ImmaginePanino,#MappaColoriPanino
Screen #SchermoPanino,#SchermoAdAltaRisoluzione+#SchermoInterallacciato,TitoloSchermoPanino$
Use Palette #MappaColoriPanino
LarghezzaSchermoPanino.w=ScreenWidth:XImmagine.w=(LarghezzaSchermoPanino-#LarghezzaImmaginePanino)/2
AltezzaSchermoPanino.w=ScreenHeight:YImmagine.w=(AltezzaSchermoPanino-#AltezzaImmaginePanino)/2
ScreensBitMap #SchermoPanino,#BitMapSchermoPanino:BitMapOutput #BitMapSchermoPanino:Locate 0,2
Use BitMap #ImmaginePanino
For YPunto.w=0 To #AltezzaImmaginePanino-1
For XPunto.w=0 To #LarghezzaImmaginePanino-1
Colore.w=Point(XPunto,YPunto)
If CheckAGA=True
ComponenteRosso.w=AGARed(Colore)
ComponenteVerde.w=AGAGreen(Colore)
ComponenteBlu.w=AGABlue(Colore)
Else
ComponenteRosso=Red(Colore)
ComponenteVerde=Green(Colore)
ComponenteBlu=Blue(Colore)
EndIf
ColorePanino.w=FindColor(#MappaColoriWB,ComponenteRosso,ComponenteVerde,ComponenteBlu,#PrecisioneColori)
Plot XPunto,YPunto,ColorePanino
Next XPunto
Print "*"
Next YPunto
CloseScreen #SchermoPanino:WindowOutput #Finestra
Use Screen #SchermoWB:Free Palette #MappaColoriPanino:Use Palette #MappaColoriWB
OpenFontPrefs
GrandezzaFonte=DefaultFontHeight(1)
CloseFontPrefs
If GrandezzaFonte=0 Then GrandezzaFonte=#GrandezzaFonteTopaz
Livello=1:ViteCuoco.b=3
ApriLaFinestra{}
ImpostaIlMenu{}
TrovaIColori{}
CreaLaMappa{}
CreaIPanini{}
Repeat
If VitaPersa.b=True Then Delay_ 50:VitaPersa=False
DisegnaLaMappa{#Inizio}
XPosCuoco.b=0:YPosCuoco.b=#AltezzaMappa-1
Ostili\TempoPepato=0:Ostili\XPos=#LarghezzaMappa-1:Ostili\YPos=0
Repeat
VWait
DisegnaLaMappa{#Gioco}
DisegnaIPanini{XPosCuoco,YPosCuoco}
DisegnaIlCuoco{XPosCuoco,YPosCuoco,ViteCuoco}
DisegnaGliOstili{}
FaiCadereLeFette{}
PaninoCompletato{}
FlushEvents
EventoFinestra.l=WaitEvent
Select EventoFinestra
Case #HaiAttivatoUnMenu
If MenuHit=0 AND ItemHit=2 Then FineDelGioco=True
Case #HaiChiusoLaFinestra
FineDelGioco=True
Case #HaiPremutoUnTasto
TastoPremutoASCII.b=Asc(Inkey$)
Select TastoPremutoASCII
Case #TastoFugaASCII
FineDelGioco=True
Case #TastoCursoreSuASCII
If YPosCuoco>0 AND Mappa(XPosCuoco,YPosCuoco)>#BloccoVuoto Then YPosCuoco-1
Case #TastoCursoreGiuASCII
If YPosCuoco<#AltezzaMappa-1
If Mappa(XPosCuoco,YPosCuoco+1)>#BloccoVuoto
YPosCuoco+1
Else
If Mappa(XPosCuoco,YPosCuoco)=#Piattaforma
YPosCuoco+1
If YPosCuoco<#AltezzaMappa-1 AND Mappa(XPosCuoco,YPosCuoco)=#BloccoVuoto Then CuocoCaduto.b=True
EndIf
EndIf
EndIf
Case #TastoCursoreDestraASCII
If OstileADestra=False AND XPosCuoco<#LarghezzaMappa-1
PosCuoco=YPosCuoco MOD 3
Select PosCuoco
Case 0
XPosCuoco+1:If Mappa(XPosCuoco,YPosCuoco+1)=#BloccoVuoto Then CuocoCaduto=True
Case 1
If Mappa(XPosCuoco+1,YPosCuoco)>#BloccoVuoto Then XPosCuoco+1
Case 2
If YPosCuoco<#AltezzaMappa-1 Then CuocoCaduto=True
XPosCuoco+1
End Select
EndIf
Case #TastoCursoreSinistraASCII
If OstileASinistra=False AND XPosCuoco>0
PosCuoco=YPosCuoco MOD 3
Select PosCuoco
Case 0
XPosCuoco-1:If Mappa(XPosCuoco,YPosCuoco+1)=#BloccoVuoto Then CuocoCaduto=True
Case 1
If Mappa(XPosCuoco-1,YPosCuoco)>#BloccoVuoto Then XPosCuoco-1
Case 2
If YPosCuoco<#AltezzaMappa-1 Then CuocoCaduto=True
XPosCuoco-1
End Select
EndIf
End Select
End Select
If CuocoCaduto=True
While YPosCuoco<#AltezzaMappa-1 AND Mappa(XPosCuoco,YPosCuoco+1)=#BloccoVuoto
YPosCuoco+1
Wend
CuocoCaduto=False:VitaPersa=True
EndIf
AvvicinaGliOstiliAlCuoco{XPosCuoco,YPosCuoco}
Until VitaPersa=True OR FineDelGioco=True OR PaninoCompletato=True
DisegnaLaMappa{#Gioco}
DisegnaIPanini{XPosCuoco,YPosCuoco}
DisegnaIlCuoco{XPosCuoco,YPosCuoco,ViteCuoco}
DisegnaGliOstili{}
If PaninoCompletato=True Then Delay_ 50:DisegnaIlPanino{}
Delay_ 50
CancellaLaMappa{}
ViteCuoco-1:If ViteCuoco=0 Then FineDelGioco=True
Until FineDelGioco=True
Free BitMap #ImmaginePanino:CloseWindow #Finestra
End