UnderwareDESIGN

PlayBASIC => Resources => Source Codes => Topic started by: kevin on September 07, 2016, 12:27:09 AM

Title: Vampire Demo (16bit)
Post by: kevin on September 07, 2016, 12:27:09 AM
 Vampire Demo (Amiga)

 This example is really shows how to use palette mapping to do pixel format conversions from 16bit to 32bit.   The all artwork is 16bit, and before you ask i've no idea what it from..  It was just sent to me a while back..  Meant to post this earlier, but forgot :)


[pbcode]


      path$="Gfx\"


      startTime=Timer()

      ThisFILE$      =Path$+"back-2-BE.bmp"
      BackDropIMAGE   =ReadBM(ThisFILE$,1)


      Type tAnim
            FileName$
            Width
            Height
            Count
            Frames(64)
      EndType      
   
      DIm Anim(100) as tAnim


      Type tSprite
            X#,Y#
            SpeedX#
            AnimIndex
            FrameIndex#
            FrameSpeed#
      EndType

      Dim Sprite as tSprite LIst



      AnimTimeInFrames = 100

   // --------------------------------------------------------------
   // ----[ KNIGHT ] -----------------------------------------------
   // --------------------------------------------------------------
   
   
      Sprite = New tSprite
      Sprite.AnimIndex      =NewAnim(Path$+"walk-1-BE.bmp",259)
      Sprite.X#            =100
      Sprite.Y#            =480
      Sprite.SpeedX#           = 1
      Sprite.FrameSpeed#        = 0.2
      Sprite.FrameSpeed#      = AnimSpeed(Sprite.AnimIndex,AnimTimeInFrames*1.20 )
      
   


   // --------------------------------------------------------------
   // ----[ AMAZON ] -----------------------------------------------
   // --------------------------------------------------------------

      Sprite = New tSprite
      Sprite.AnimIndex         =NewAnim(Path$+"walk-2-BE.bmp",248)
      Sprite.X#               =250
      Sprite.Y#               =480
      Sprite.SpeedX#              = 1.4
      Sprite.FrameSpeed#        = 0.20
      Sprite.FrameSpeed#      = AnimSpeed(Sprite.AnimIndex,AnimTimeInFrames )




   // --------------------------------------------------------------
   // ----[ WIZARD ] --------------------------------------------------
   // --------------------------------------------------------------
   
      Sprite = New tSprite
      Sprite.AnimIndex      =NewAnim(Path$+"walk-3-BE.bmp",216)
      Sprite.X#            =400
      Sprite.Y#            =480
      Sprite.SpeedX#           = 0.8
      Sprite.FrameSpeed#        = 0.20
      Sprite.FrameSpeed#      = AnimSpeed(Sprite.AnimIndex,AnimTimeInFrames )


   // --------------------------------------------------------------
   // ----[ ELF    ] --------------------------------------------------
   // --------------------------------------------------------------
   
      Sprite = New tSprite
      Sprite.AnimIndex      =NewAnim(Path$+"walk-4-BE.bmp",240)
      Sprite.X#            =550
      Sprite.Y#            =480
      Sprite.SpeedX#           = 1
      Sprite.FrameSpeed#        = 0.20
      Sprite.FrameSpeed#      = AnimSpeed(Sprite.AnimIndex,AnimTimeInFrames )



   // --------------------------------------------------------------
   // ----[ DWARF    ] --------------------------------------------------
   // --------------------------------------------------------------
   
      Sprite = New tSprite
      Sprite.AnimIndex      =NewAnim(Path$+"walk-5-BE.bmp",187)
      Sprite.X#            =700
      Sprite.Y#            =480
      Sprite.SpeedX#           = 1.2
      Sprite.FrameSpeed#        = 0.20
      Sprite.FrameSpeed#      = AnimSpeed(Sprite.AnimIndex,AnimTimeInFrames)



   // --------------------------------------------------------------
   // ----[ DWARF    ] --------------------------------------------------
   // --------------------------------------------------------------
   
      Sprite = New tSprite
      Sprite.AnimIndex         =NewAnim(Path$+"walk-6-BE.bmp",214)
      Sprite.X#               =850
      Sprite.Y#               =480
      Sprite.SpeedX#              = 1.5
      Sprite.FrameSpeed#        = 0.20
      Sprite.FrameSpeed#      = AnimSpeed(Sprite.AnimIndex,AnimTimeInFrames)

      #print "Total LOAD TIME:"+STR$(Timer()-StartTime)+" Milliseconds"

      SetFps 60


   ; ---------------------------------------------------
   Do
   ; ---------------------------------------------------

         DrawImage BackDropIMAGE,XPOS,0,false
         DrawImage BackDropIMAGE,XPOS-GetImageWidth(BackDropIMAGE),0,false

         XPOS = wrapvalue(XPOS-1,0,GetImageWidth(BackDropIMAGE))

         For Each Sprite()
      
               // Get the animation this sprite is using
               AnimIndex       =Sprite.AnimINDEX

               // Move the animation forward            
               FrameIndex#=Sprite.FrameIndex#
               Frame         =Anim(AnimIndex).Frames(Floor(FrameIndex#))
               Sprite.FRameIndex#   =mod( FrameIndex# + Sprite.FRameSpeed#  , Anim(AnimIndex).count)         

               // Move sprite forward (Right to left)
               x#=mod(Sprite.X#+Sprite.SpeedX#, GetScreenWidth()+200)   
               Sprite.X#=x#
               X#=X#-(GetImageWidth(Frame)/2)-100
               Y#=Sprite.Y#-(GetImageHeight(Frame))

               // frame this frame            
               DrawImage Frame,x#,y#,true
               
         next


      sync

   ; ---------------------------------------------------
   loop
   ; ---------------------------------------------------




Function AnimSpeed(ThisAnim,Frames)
      Speed#=float(Anim(ThisANIM).Count)/Frames
EndFunction Speed#


Function NewAnim(ThisFIle$,FrameHeight)

      ThisIMAGE=ReadBM(ThisFILE$)

      if ThisImage

         frameWidth=GetImageWidth(ThisIMAGE)
         Frames    = GetImageHEIGHT(ThisImage) /FrameHeight

         Index   = GetFreeCEll(Anim())

         Anim(Index)             = new tANIM      
         Anim(Index).FileName$   = ThisFile$
         Anim(Index).Width         = FRameWIDTH
         Anim(Index).Height      = FRameHEIGHT
         
         For lp=0 to FRames-1
         
               ThisFrame = NewImage(FRameWidth,FRameHeight,2)

               CopyRect  ThisIMAGE,0,Ypos,FrameWidth,Ypos+FrameHeight,ThisFrame,0,0

               ImageMaskCOlour ThisFRAME,$F800F8

               Anim(index).Frames(lp) = ThisFRAME
               Anim(index).Count++

               Ypos+=FRameHeight         
         next

         deleteImage ThisIMAGE

      endif


EndFunction INDEX





// -------------------------------------------------------------------------------
// -------------------------------------------------------------------------------
// ----------------------->> READ BITMAP (PALETTE MAPPED) << ---------------------
// -------------------------------------------------------------------------------
// -------------------------------------------------------------------------------

      #include "PBI"
      #include "PaletteMapping"


Function ReadBM(ThisFILE$,IMageFormat=2)
      if FileExist(ThisFILE$)

         size=FileSize(Thisfile$)
         if Size>64
               Fh=readnewFile(ThisFILE$)
               if fh
      
                     ThisBank=NewBank(Size)
                        Ptr=GetbankPtr(ThisBank)
                        ReadMemory FH,Ptr,Size
                     CloseFile FH               


                        Static PixelConversionsPreCalc_Flag
                        if PixelConversionsPreCalc_Flag=0
                           dim _PixelConversionsPalette($10000)
                           For lp=0 to $ffff
                                 ThisRGB      = SwapLowBytes(LP)
                                 ThisRGB     = RGB16toRGB24(ThisRGB)
                                 _PixelConversionsPalette(lp)= ThisRGB
                           next
                           PixelConversionsPreCalc_Flag=1
                        endif
                        
                        ThisCHR0=PeekByte(Ptr)
                        ThisCHR1=PeekByte(Ptr+1)

                        if ThisCHR0=asc("B") and ThisCHR1=asc("M")
                     
                           BitMapSIZE   =PeekInt(Ptr+2)

                           Width         =(PeekInt(ptr+18))
                           Height      =(PeekInt(ptr+22))
   
                           PixelsOffset   = PeekInt(Ptr+10)
                        
                           ThisImage = NewIMage(Width,Height,IMageFormat)
                           RenderToImage ThisIMAGE

                           StartTime=Timer()
      
                           SetPalette _PixelConversionsPalette()
      
                           Lockbuffer
                              Modulo= Width*2
                              ThisPIXEL =POint(0,0)
                              For Ylp=0 to Height-1
                                 Address   =Ptr+PixelsOffset
                                 Address +=(Ylp*Modulo)
                                 DrawPaletteMappedStrip16(0,ylp,Address,Width,$ffff)
                              next
                           UnLockbuffer

                           #print "Conversion Time:"+Str$(Timer()-StartTime)
                        endif

                        rendertoscreen

                     deletebank ThisBANK
                     
                     ; Un comment to save failes as PBI
                     ;SaveName$=replace$(ThisFile$,".bmp",".pbi")   
                     ;if lower$(ThisFile$)<> lower$(SaveName$)
                     ;   SavePBIex SaveName$,THisIMage, 32,32      ;, 64,16
                     ;endif                  
               endif
      
      
         endif


      endif
      
EndFunction ThisIMAGE

[/pbcode]


Video





 Download

      Download  [plink] Vampire Demo (http://www.underwaredesign.com/requestfile.php?file=VampirePBsxhnFjaksxasfdasf454)[/plink]

Title: Re: Vampire Demo (16bit)
Post by: kevin on October 19, 2016, 08:07:53 PM
 Put a video of this on youtube.