From 0cdd3d106b542c4f7e04aea56390363d2cb2a93d Mon Sep 17 00:00:00 2001 From: Ian C Date: Sat, 14 Dec 2019 19:56:02 +0000 Subject: Updates to work with new BlitzMax. --- global.bmx | 811 +++++++++++++++++++++++++++++++------------------------------ 1 file changed, 406 insertions(+), 405 deletions(-) (limited to 'global.bmx') diff --git a/global.bmx b/global.bmx index b220932..ed55299 100644 --- a/global.bmx +++ b/global.bmx @@ -1,405 +1,406 @@ -' Missile Lock -' -' Copyright (C) 2006 Ian Cowburn (ianc@noddybox.co.uk) -' -' This program is free software; you can redistribute it and/or modify -' it under the terms of the GNU General Public License as published by -' the Free Software Foundation; either version 2 of the License, or -' (at your option) any later version. -' -' This program is distributed in the hope that it will be useful, -' but WITHOUT ANY WARRANTY; without even the implied warranty of -' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -' GNU General Public License for more details. -' -' You should have received a copy of the GNU General Public License -' along with this program; if not, write to the Free Software -' Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -' -' ------------------------------------------------------------------------- -' -' $Id$ -' -Strict -Import brl.pngloader - -Import noddybox.bitmapfont -Import noddybox.gfxmenu - - -' Included binaries -' -Incbin "GFX/font.bmf" - -Incbin "GFX/title.png" -Incbin "GFX/ship.png" -Incbin "GFX/missile.png" -Incbin "GFX/exhaust.png" -Incbin "GFX/flame.png" -Incbin "GFX/star.png" -Incbin "GFX/twinkle.png" -Incbin "GFX/asteroid.png" -Incbin "GFX/fireball.png" - -Const HERTZ:Int=70 - -Const MISSILE_LAYER:Int=1 -Const ASTEROID_LAYER:Int=2 -Const ALL_LAYERS:Int=3 - -Type GFX - Global font:TBitmapFont - - Global title:TImage - - Global ship:TImage - Global missile:TImage - Global exhaust:TImage - Global flame:TImage - Global star:TImage - Global twinkle:TImage - Global asteroid:TImage - Global fireball:TImage - - Function SafeLoadImage:TImage(p:String, mode:Int) - Local i:TImage=LoadImage(p,mode) - Assert i,"Failed to load " + p - Return i - End Function - - Function SafeLoadAnimImage:TImage(p:String, w:Int, h:Int, f:Int, c:Int, mode:Int) - Local i:TImage=LoadAnimImage(p,w,h,f,c,mode) - Assert i,"Failed to load " + p - Return i - End Function - - Function Init() - font=TBitmapFont.Load("incbin::GFX/font.bmf",0) - - Assert font,"Failed to load incbin::GFX/font.bmf" - - title=SafeLoadImage("incbin::GFX/title.png",0) - - ship=SafeLoadImage("incbin::GFX/ship.png",FILTEREDIMAGE) - flame=SafeLoadImage("incbin::GFX/flame.png",FILTEREDIMAGE) - MidHandleImage(ship) - MidHandleImage(flame) - - missile=SafeLoadImage("incbin::GFX/missile.png",FILTEREDIMAGE) - exhaust=SafeLoadImage("incbin::GFX/exhaust.png",FILTEREDIMAGE) - SetImageHandle(missile,3,7) - SetImageHandle(exhaust,3,3) - - star=SafeLoadImage("incbin::GFX/star.png",0) - SetImageHandle(star,1,1) - - twinkle=SafeLoadAnimImage("incbin::GFX/twinkle.png",8,8,0,6,0) - SetImageHandle(star,2,2) - - asteroid=SafeLoadImage("incbin::GFX/asteroid.png",FILTEREDIMAGE) - MidHandleImage(asteroid) - - fireball=SafeLoadImage("incbin::GFX/fireball.png",FILTEREDIMAGE) - SetImageHandle(fireball,15,15) - End Function -End Type - -Type GameConfig - Global kleft:Int - Global kright:Int - Global kpause:Int - Global kthrust:Int - Global hiscore:Int - Global maxlevel:Int - Global accepted:Int - - Function Load() - Local s:TStream=ReadStream("mlock.config") - - If s=Null - kleft=KEY_LEFT - kright=KEY_RIGHT - kthrust=KEY_SPACE - kpause=KEY_P - hiscore=0 - maxlevel=1 - accepted=False - Return - EndIf - - s=LittleEndianStream(s) - - kleft=s.ReadInt() - kright=s.ReadInt() - kthrust=s.ReadInt() - kpause=s.ReadInt() - hiscore=s.ReadInt() - maxlevel=s.ReadInt() - accepted=s.ReadInt() - - s.Close() - End Function - - Function Save() - Local s:TStream=WriteStream("mlock.config") - - If s=Null - Return - EndIf - - s=LittleEndianStream(s) - - s.WriteInt(kleft) - s.WriteInt(kright) - s.WriteInt(kthrust) - s.WriteInt(kpause) - s.WriteInt(hiscore) - s.WriteInt(maxlevel) - s.WriteInt(accepted) - - s.Close() - End Function -EndType - -Type TEasyLink - Field l:TLink - - Function Create:TEasyLink(l:TList) - Local o:TEasyLink=New TEasyLink - o.l=l.FirstLink() - Return o - End Function - - Method Value:Object() - If l - Return l.Value() - Else - Return Null - EndIf - End Method - - Method MoveNext() - If l - l=l.NextLink() - EndIf - End Method - - Method Remove() - Local ol:TLink=l - MoveNext() - ol.Remove() - End Method -End Type - - -Type Scroller - Global msg:String - Global msgp:Int - Global msgx:Int - Global txth:Int - - Function Init() - Rem - msg=" " - msg:+"DURING A TEST-FLIGHT OF THE STAR-FIGHTER OGL-X YOU ARE AMBUSHED IN THE ASTEROID FIELD OUTSIDE OF MARS... " - msg:+"THE EVIL EMPIRE CANNOT BE ALLOWED TO DESTROY THE PROTOTYPE SO YOU MUST PILOT THE WEAPONLESS CRAFT, " - msg:+"AVOIDING THE DEADLY MISSILES UNTIL HELP ARRIVES... " - msg:+"SHOW HEART YOUNG PILOT, STAR-FLEET IS DEPENDING UPON YOU!" - EndRem - - msg=" " - msg:+"IT IS A TIME OF WAR. IN A LAST DITCH ATTEMPT TO WIN A LOSING WAR THAT HAS RAGED THROUGH THE GALAXY AGAINST THE EVIL EMPIRE " - msg:+"A NEW SHIP, THE DX-9, HAS BEEN DEVELOPED. ON A ROUTINE TEST FLIGHT THE SHIP HAS BEEN AMBUSHED IN AN ASTEROID FIELD. " - msg:+"WEAPONLESS, YOU MUST PILOT THE DX-9 AND AVOID THE EMPIRE'S MISSILE SALVOS AMONGST THE ASTEROIDS... HELP WILL ARRIVE EVENTUALLY, " - msg:+"BUT UNTIL THEN YOU ARE OUR LAST HOPE. IF THE DX-9 IS LOST THEN SO IS THE EARTH. EARTH IS DEPENDING ON YOU!!!" - - msgx=0 - msgp=0 - - txth=GFX.font.MaxHeight() - End Function - - Function Draw(y:Int) - GFX.font.Draw(msg[..70],msgx,y) - - Rem - SetColor(0,0,0) - Local a:Double=1 - For Local f:Int=0 To 10 - SetAlpha(a) - a:-0.09 - DrawLine(f,y,f,y+txth) - DrawLine(799-f,y,799-f,y+txth) - Next - SetColor(255,255,255) - SetAlpha(1) - EndRem - - msgx:-2 - If msgx<-GFX.font.TextWidth(msg[0..1]) - msgx:+GFX.font.TextWidth(msg[0..1]) - msg=msg[1..]+msg[0..1] - EndIf - End Function -End Type - -Type VText - Field t:String - Field y:Int - - Function Create:VText(t:String, y:Int) - Local o:VText=New VText - o.t=t - o.y=y - Return o - End Function -End Type - -Type VerticalScroller - Global msg:TList - Global maxy:Int - - Method New() - msg=CreateList() - maxy=0 - End Method - - Method Add(s:String) - SetScale(2,2) - msg.AddLast(VText.Create(s,maxy+800)) - maxy:+GFX.font.TextHeight(s) - SetScale(1,1) - End Method - - Method Draw() - SetScale(2,2) - For Local o:VText=EachIn msg - o.y:-1 - If o.y<-GFX.font.TextHeight(o.t) - o.y:+maxy - EndIf - If o.y<799 - GFX.font.Centre(o.t,o.y) - EndIf - Next - SetScale(1,1) - End Method -End Type - -Type Thanks - Global item:String[] - Global i:Int - Global wait:Int - Global a:Double - Global ai:Double - - Function Init() - item=["HTTP://WWW.SLAYRADIO.ORG/", .. - "HTTP://WWW.BLITZBASIC.COM/"] - i=0 - a=0 - ai=0.05 - End Function - - Function Draw(y:Int) - SetAlpha(a) - GFX.font.Centre(item[i],y) - SetAlpha(1) - - If wait - wait:-1 - Else - a:+ai - - If a>1 - wait=HERTZ*5 - ai=-0.05 - a=1 - ElseIf a<0 - i=(i+1) Mod item.length - ai=0.05 - a=0 - EndIf - EndIf - End Function -End Type - -Type TFadeScreen - Field a:Double - Field ai:Double - - Function Create:TFadeScreen(a:Double, ai:Double) - Local o:TFadeScreen=New TFadeScreen - o.a=a - o.ai=ai - Return o - End Function - - Function FadeOut:TFadeScreen() - Return Create(0,0.05) - End Function - - Function FadeIn:TFadeScreen() - Return Create(1,-0.05) - End Function - - Function DoFadeIn() - Local fade:TFadeScreen=TFadeScreen.FadeIn() - Local pm:TPixmap=GrabPixmap(0,0,GraphicsWidth(),GraphicsHeight()) - - While fade.Fade() - Cls - DrawPixmap(pm,0,0) - fade.Draw() - Flip - Wend - End Function - - Function DoFadeOut() - Local fade:TFadeScreen=TFadeScreen.FadeOut() - Local pm:TPixmap=GrabPixmap(0,0,GraphicsWidth(),GraphicsHeight()) - - While fade.Fade() - Cls - DrawPixmap(pm,0,0) - fade.Draw() - Flip - Wend - End Function - - Method Fade:Int() - a:+ai - Return a>0 And a<1 - End Method - - Method Draw() - Local r:Int,g:Int,b:Int - Local x:Float,y:Float - Local oa:Double=GetAlpha() - GetColor(r,g,b) - GetOrigin(x,y) - SetAlpha(a) - SetColor(0,0,0) - DrawRect(-x,-y,GraphicsWidth(),GraphicsHeight()) - SetColor(r,g,b) - SetAlpha(oa) - End Method -End Type - - -Type Number - Function Format:String(num:Int) - Local c:Int=0 - Local ret:String="" - Local a:String=String.FromInt(num) - - For Local f:Int=a.length-1 To 0 Step -1 - If ret.length And (c Mod 3)=0 - ret=","+ret - EndIf - ret=a[f..f+1]+ret - c:+1 - Next - Return ret - End Function -End Type +' Missile Lock +' +' Copyright (C) 2006 Ian Cowburn (ianc@noddybox.co.uk) +' +' This program is free software; you can redistribute it and/or modify +' it under the terms of the GNU General Public License as published by +' the Free Software Foundation; either version 2 of the License, or +' (at your option) any later version. +' +' This program is distributed in the hope that it will be useful, +' but WITHOUT ANY WARRANTY; without even the implied warranty of +' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +' GNU General Public License for more details. +' +' You should have received a copy of the GNU General Public License +' along with this program; if not, write to the Free Software +' Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +' +' ------------------------------------------------------------------------- +' +' $Id$ +' +Strict +Import brl.pngloader +Import brl.timerdefault + +Import noddybox.bitmapfont +Import noddybox.gfxmenu + + +' Included binaries +' +Incbin "GFX/font.bmf" + +Incbin "GFX/title.png" +Incbin "GFX/ship.png" +Incbin "GFX/missile.png" +Incbin "GFX/exhaust.png" +Incbin "GFX/flame.png" +Incbin "GFX/star.png" +Incbin "GFX/twinkle.png" +Incbin "GFX/asteroid.png" +Incbin "GFX/fireball.png" + +Const HERTZ:Int=70 + +Const MISSILE_LAYER:Int=1 +Const ASTEROID_LAYER:Int=2 +Const ALL_LAYERS:Int=3 + +Type GFX + Global font:TBitmapFont + + Global title:TImage + + Global ship:TImage + Global missile:TImage + Global exhaust:TImage + Global flame:TImage + Global star:TImage + Global twinkle:TImage + Global asteroid:TImage + Global fireball:TImage + + Function SafeLoadImage:TImage(p:String, mode:Int) + Local i:TImage=LoadImage(p,mode) + Assert i,"Failed to load " + p + Return i + End Function + + Function SafeLoadAnimImage:TImage(p:String, w:Int, h:Int, f:Int, c:Int, mode:Int) + Local i:TImage=LoadAnimImage(p,w,h,f,c,mode) + Assert i,"Failed to load " + p + Return i + End Function + + Function Init() + font=TBitmapFont.Load("incbin::GFX/font.bmf",0) + + Assert font,"Failed to load incbin::GFX/font.bmf" + + title=SafeLoadImage("incbin::GFX/title.png",0) + + ship=SafeLoadImage("incbin::GFX/ship.png",FILTEREDIMAGE) + flame=SafeLoadImage("incbin::GFX/flame.png",FILTEREDIMAGE) + MidHandleImage(ship) + MidHandleImage(flame) + + missile=SafeLoadImage("incbin::GFX/missile.png",FILTEREDIMAGE) + exhaust=SafeLoadImage("incbin::GFX/exhaust.png",FILTEREDIMAGE) + SetImageHandle(missile,3,7) + SetImageHandle(exhaust,3,3) + + star=SafeLoadImage("incbin::GFX/star.png",0) + SetImageHandle(star,1,1) + + twinkle=SafeLoadAnimImage("incbin::GFX/twinkle.png",8,8,0,6,0) + SetImageHandle(star,2,2) + + asteroid=SafeLoadImage("incbin::GFX/asteroid.png",FILTEREDIMAGE) + MidHandleImage(asteroid) + + fireball=SafeLoadImage("incbin::GFX/fireball.png",FILTEREDIMAGE) + SetImageHandle(fireball,15,15) + End Function +End Type + +Type GameConfig + Global kleft:Int + Global kright:Int + Global kpause:Int + Global kthrust:Int + Global hiscore:Int + Global maxlevel:Int + Global accepted:Int + + Function Load() + Local s:TStream=ReadStream("mlock.config") + + If s=Null + kleft=KEY_LEFT + kright=KEY_RIGHT + kthrust=KEY_SPACE + kpause=KEY_P + hiscore=0 + maxlevel=1 + accepted=False + Return + EndIf + + s=LittleEndianStream(s) + + kleft=s.ReadInt() + kright=s.ReadInt() + kthrust=s.ReadInt() + kpause=s.ReadInt() + hiscore=s.ReadInt() + maxlevel=s.ReadInt() + accepted=s.ReadInt() + + s.Close() + End Function + + Function Save() + Local s:TStream=WriteStream("mlock.config") + + If s=Null + Return + EndIf + + s=LittleEndianStream(s) + + s.WriteInt(kleft) + s.WriteInt(kright) + s.WriteInt(kthrust) + s.WriteInt(kpause) + s.WriteInt(hiscore) + s.WriteInt(maxlevel) + s.WriteInt(accepted) + + s.Close() + End Function +EndType + +Type TEasyLink + Field l:TLink + + Function Create:TEasyLink(l:TList) + Local o:TEasyLink=New TEasyLink + o.l=l.FirstLink() + Return o + End Function + + Method Value:Object() + If l + Return l.Value() + Else + Return Null + EndIf + End Method + + Method MoveNext() + If l + l=l.NextLink() + EndIf + End Method + + Method Remove() + Local ol:TLink=l + MoveNext() + ol.Remove() + End Method +End Type + + +Type Scroller + Global msg:String + Global msgp:Int + Global msgx:Int + Global txth:Int + + Function Init() + Rem + msg=" " + msg:+"DURING A TEST-FLIGHT OF THE STAR-FIGHTER OGL-X YOU ARE AMBUSHED IN THE ASTEROID FIELD OUTSIDE OF MARS... " + msg:+"THE EVIL EMPIRE CANNOT BE ALLOWED TO DESTROY THE PROTOTYPE SO YOU MUST PILOT THE WEAPONLESS CRAFT, " + msg:+"AVOIDING THE DEADLY MISSILES UNTIL HELP ARRIVES... " + msg:+"SHOW HEART YOUNG PILOT, STAR-FLEET IS DEPENDING UPON YOU!" + EndRem + + msg=" " + msg:+"IT IS A TIME OF WAR. IN A LAST DITCH ATTEMPT TO WIN A LOSING WAR THAT HAS RAGED THROUGH THE GALAXY AGAINST THE EVIL EMPIRE " + msg:+"A NEW SHIP, THE DX-9, HAS BEEN DEVELOPED. ON A ROUTINE TEST FLIGHT THE SHIP HAS BEEN AMBUSHED IN AN ASTEROID FIELD. " + msg:+"WEAPONLESS, YOU MUST PILOT THE DX-9 AND AVOID THE EMPIRE'S MISSILE SALVOS AMONGST THE ASTEROIDS... HELP WILL ARRIVE EVENTUALLY, " + msg:+"BUT UNTIL THEN YOU ARE OUR LAST HOPE. IF THE DX-9 IS LOST THEN SO IS THE EARTH. EARTH IS DEPENDING ON YOU!!!" + + msgx=0 + msgp=0 + + txth=GFX.font.MaxHeight() + End Function + + Function Draw(y:Int) + GFX.font.Draw(msg[..70],msgx,y) + + Rem + SetColor(0,0,0) + Local a:Double=1 + For Local f:Int=0 To 10 + SetAlpha(a) + a:-0.09 + DrawLine(f,y,f,y+txth) + DrawLine(799-f,y,799-f,y+txth) + Next + SetColor(255,255,255) + SetAlpha(1) + EndRem + + msgx:-2 + If msgx<-GFX.font.TextWidth(msg[0..1]) + msgx:+GFX.font.TextWidth(msg[0..1]) + msg=msg[1..]+msg[0..1] + EndIf + End Function +End Type + +Type VText + Field t:String + Field y:Int + + Function Create:VText(t:String, y:Int) + Local o:VText=New VText + o.t=t + o.y=y + Return o + End Function +End Type + +Type VerticalScroller + Global msg:TList + Global maxy:Int + + Method New() + msg=CreateList() + maxy=0 + End Method + + Method Add(s:String) + SetScale(2,2) + msg.AddLast(VText.Create(s,maxy+800)) + maxy:+GFX.font.TextHeight(s) + SetScale(1,1) + End Method + + Method Draw() + SetScale(2,2) + For Local o:VText=EachIn msg + o.y:-1 + If o.y<-GFX.font.TextHeight(o.t) + o.y:+maxy + EndIf + If o.y<799 + GFX.font.Centre(o.t,o.y) + EndIf + Next + SetScale(1,1) + End Method +End Type + +Type Thanks + Global item:String[] + Global i:Int + Global wait:Int + Global a:Double + Global ai:Double + + Function Init() + item=["HTTP://WWW.SLAYRADIO.ORG/", .. + "HTTP://WWW.BLITZMAX.ORG/"] + i=0 + a=0 + ai=0.05 + End Function + + Function Draw(y:Int) + SetAlpha(a) + GFX.font.Centre(item[i],y) + SetAlpha(1) + + If wait + wait:-1 + Else + a:+ai + + If a>1 + wait=HERTZ*5 + ai=-0.05 + a=1 + ElseIf a<0 + i=(i+1) Mod item.length + ai=0.05 + a=0 + EndIf + EndIf + End Function +End Type + +Type TFadeScreen + Field a:Double + Field ai:Double + + Function Create:TFadeScreen(a:Double, ai:Double) + Local o:TFadeScreen=New TFadeScreen + o.a=a + o.ai=ai + Return o + End Function + + Function FadeOut:TFadeScreen() + Return Create(0,0.05) + End Function + + Function FadeIn:TFadeScreen() + Return Create(1,-0.05) + End Function + + Function DoFadeIn() + Local fade:TFadeScreen=TFadeScreen.FadeIn() + Local pm:TPixmap=GrabPixmap(0,0,GraphicsWidth(),GraphicsHeight()) + + While fade.Fade() + Cls + DrawPixmap(pm,0,0) + fade.Draw() + Flip(-1) + Wend + End Function + + Function DoFadeOut() + Local fade:TFadeScreen=TFadeScreen.FadeOut() + Local pm:TPixmap=GrabPixmap(0,0,GraphicsWidth(),GraphicsHeight()) + + While fade.Fade() + Cls + DrawPixmap(pm,0,0) + fade.Draw() + Flip(-1) + Wend + End Function + + Method Fade:Int() + a:+ai + Return a>0 And a<1 + End Method + + Method Draw() + Local r:Int,g:Int,b:Int + Local x:Float,y:Float + Local oa:Double=GetAlpha() + GetColor(r,g,b) + GetOrigin(x,y) + SetAlpha(a) + SetColor(0,0,0) + DrawRect(-x,-y,GraphicsWidth(),GraphicsHeight()) + SetColor(r,g,b) + SetAlpha(oa) + End Method +End Type + + +Type Number + Function Format:String(num:Int) + Local c:Int=0 + Local ret:String="" + Local a:String=String.FromInt(num) + + For Local f:Int=a.length-1 To 0 Step -1 + If ret.length And (c Mod 3)=0 + ret=","+ret + EndIf + ret=a[f..f+1]+ret + c:+1 + Next + Return ret + End Function +End Type -- cgit v1.2.3