Author Topic: Worms Intro by emook  (Read 10874 times)

0 Members and 1 Guest are viewing this topic.

Offline emook

  • C= 64
  • **
  • Posts: 94
  • Karma: 12
    • View Profile
Worms Intro by emook
« on: January 07, 2014 »
Hi,

Just another little something I've been spending the evenings cobbling together. Thanks to KrazyK for the text-writing routine - why recreate something that has already been done well?

Sorry about the size 450kb, it just started to grow insize!

 ;)
----

R Tape loading error, 0:1

Offline ninogenio

  • Pentium
  • *****
  • Posts: 1668
  • Karma: 133
    • View Profile
Re: Worms Intro by emook
« Reply #1 on: January 08, 2014 »
wow!.. thats fck'n awesome dude!! K++

love all of it the spining legs at the start/star field/ sine waved font at the bottom and the lovely vu meters.. now thats why i call style!

and all this on just your second prod, all i can say is  :clap:

ohh and too every one else who downloads and try's this excellent piece of work please drop a little comment to emook  too show your appreciation.....
Challenge Trophies Won:

Offline emook

  • C= 64
  • **
  • Posts: 94
  • Karma: 12
    • View Profile
Re: Worms Intro by emook
« Reply #2 on: January 08, 2014 »
Wow, thanks - such kind words!

 ;D
----

R Tape loading error, 0:1

Offline padman

  • Senior Member
  • Pentium
  • ********
  • Posts: 990
  • Karma: 260
    • View Profile
Re: Worms Intro by emook
« Reply #3 on: January 08, 2014 »
Nice work. Keep it up!  :clap: K++
Challenge Trophies Won:

Offline Raizor

  • Founder Member
  • Pentium
  • ********
  • Posts: 1154
  • Karma: 175
    • View Profile
Re: Worms Intro by emook
« Reply #4 on: January 09, 2014 »
Lovely stuff emook! Has a really nice vibe. I love the text writer and the slightly offset character placement. The various logo effects at the bottom are very cool too. Great choice of tunes too (the default is my favourite)! Top stuff indeed :D K++

Are the worms tied to the music tracks/channels?

ps. Why is Arnie so angry? Does he not like worms? :(
raizor

Challenge Trophies Won:

Offline emook

  • C= 64
  • **
  • Posts: 94
  • Karma: 12
    • View Profile
Re: Worms Intro by emook
« Reply #5 on: January 09, 2014 »
Thanks!  :cheers:

The offset text was accidental - but when I straightened the bitmap out I thought the offset version looked better and put it back. Funny how you can find better things by chance.

Yes the worms are tied to the audio channels. The text writer is an adaptation of KrazyK's code, so kudos to him for the work there.

Again, thanks for the kind words, they give a sense of encouragement :)
----

R Tape loading error, 0:1

Offline Raizor

  • Founder Member
  • Pentium
  • ********
  • Posts: 1154
  • Karma: 175
    • View Profile
Re: Worms Intro by emook
« Reply #6 on: January 09, 2014 »
The offset text was accidental - but when I straightened the bitmap out I thought the offset version looked better and put it back. Funny how you can find better things by chance.

Yes the worms are tied to the audio channels. The text writer is an adaptation of KrazyK's code, so kudos to him for the work there.

Again, thanks for the kind words, they give a sense of encouragement :)

Indeed! I love those happy accidents :) Props to KrazyK too (K++) for the initial scroller code. Looking forward to seeing what you guys make next :D
raizor

Challenge Trophies Won:

Offline KrazyK

  • Amiga 1200
  • ****
  • Posts: 390
  • Karma: 131
    • View Profile
    • KrazyK Remakes
Re: Worms Intro by emook
« Reply #7 on: January 09, 2014 »
Nice intro emook. Glad you found a use for the text writer,  and I really like that starfield effect.  K++
Challenge Trophies Won:

Offline Punqtured

  • ZX 81
  • *
  • Posts: 14
  • Karma: 24
    • View Profile
    • My profile at Soundcloud
Re: Worms Intro by emook
« Reply #8 on: January 10, 2014 »
Excellent work with this release! Impressive amounts of details you've managed to squeeze together :) Very well done.

Offline emook

  • C= 64
  • **
  • Posts: 94
  • Karma: 12
    • View Profile
Re: Worms Intro by emook
« Reply #9 on: January 10, 2014 »
Thanks Punqtured :)

I had to stop trying to add more things, but the more things I tried to add the more complex things got, but I learnt next time figure a way to have more control over effect timings.

Bubbling with ideas for something new now!

----

R Tape loading error, 0:1

Offline ttemper

  • Amiga 1200
  • ****
  • Posts: 267
  • Karma: 7
    • View Profile
Re: Worms Intro by emook
« Reply #10 on: January 12, 2014 »
Very nice emook, I enjoyed that. The logo effects looked great too. Very decent demo for only your 2nd one. :)

Offline C3lt1c

  • C= 64
  • **
  • Posts: 77
  • Karma: 26
    • View Profile
Re: Worms Intro by emook
« Reply #11 on: January 12, 2014 »
Very cool Bro!!! I like your oldschool Style!!!  :clap:
OLD SCHOOL ROCKZZZ

Offline ~Ar-S~

  • C= 64
  • **
  • Posts: 61
  • Karma: 26
  • Demo RuleZ
    • View Profile
Re: Worms Intro by emook
« Reply #12 on: October 16, 2015 »
That is amazing !
~ Ar-S ~

Offline Dr.Death

  • Senior Member
  • Amiga 1200
  • ********
  • Posts: 445
  • Karma: 9
    • View Profile
Re: Worms Intro by emook
« Reply #13 on: October 17, 2015 »
Very nice mate i really do like the uv bars for the tune...

Keep up the good work mate.  :updance:
Proud member of DAWN

Offline Omnikam

  • Atari ST
  • ***
  • Posts: 121
  • Karma: 4
    • View Profile
Re: Worms Intro by emook
« Reply #14 on: October 25, 2015 »
Loved it! Old school is so  sh cool

Offline Omnikam

  • Atari ST
  • ***
  • Posts: 121
  • Karma: 4
    • View Profile
Re: Worms Intro by emook
« Reply #15 on: November 12, 2015 »
That was Old school Awsome, loved it Emook
Would you perhaps share your code, so i could study it? I hope that`s not asking too much :-)

Offline emook

  • C= 64
  • **
  • Posts: 94
  • Karma: 12
    • View Profile
Re: Worms Intro by emook
« Reply #16 on: November 12, 2015 »
Sure, the code isn't pretty and I havent got time to make it neat, so here it is in all its dirty glory.

Code: [Select]
#RAD = 0.0175
Global max=500
#PI2 = #PI * 2

;
UseJPEG2000ImageDecoder() :
UsePNGImageDecoder():
InitMouse()
Macro EMs()
  ElapsedMilliseconds()
EndMacro

If InitSprite() = 0 Or InitKeyboard() = 0
  MessageRequester("Error", "Can't open DirectX 7 or later", 0)
  End
EndIf

result=MessageRequester("Do you want full screen?","Do you want real full screen?"+#LF$+"In windowed mode press space for psuedofullscreen.",#PB_MessageRequester_YesNoCancel)
Select result
  Case #PB_MessageRequester_Yes
    Global fs=1
  Case #PB_MessageRequester_Cancel
    End
  Default
    Global fs=0
EndSelect


Structure XY
  X.f
  Y.f
EndStructure


Declare DoLogo()

Structure T_PINGPONG
  min.i
  max.i
  counter.i
  direction.i
  delay.i
  inc.i
  val.i
EndStructure

Structure sVector
  c.XY
  angle.f
EndStructure

Structure player
  direction.sVector
  speed.f
  type.l
  state.l
  color.i
EndStructure

Structure UpText
  id.i
  text.s
  x.i
  y.F
  color.l
  intensity.i
EndStructure

IncludeFile"186text.pb" ;-this is our text taken from the Atari ST original 40x17
Global LetterCount        ;-maximum of 40 per line then reset
Global TexLen=Len(T$)     ;-total string length
Global txpos,typos        ;-x and y positions of the text
Global CurrentLetter=1    ;-start of the message

;Delay(60)

Global Dim pl1.player(max)
Global pl2.player,logo,tintensity=255
Global PP1.T_PINGPONG ; the vector from the two points
Global PP2.T_PINGPONG ; the vector from the two points
Global PP3.T_PINGPONG ; the vector from the two points
Global PP4.T_PINGPONG
Global pl2\direction\c\x = 400
Global pl2\direction\c\y = 600
Global muslen=?musend-?music ;-music lengths
Global muslen1=?musend1-?music1   ;-music lengths
Global muslen2=?musend2-?music2   ;-music lengths
Global muslen3=?musend3-?music3   ;-music lengths
Global V1,OLDV1,V2,OLDV2,V3,OLDV3 ;-variables for the VU channels
Global MOSM=PurePROCS_OpenLibrary(?osmlib)    ;-Return the library address
Global *Play=PurePROCS_GetFunction(MOSM,"playOSMEMusicMem") ;-Return the address of the play function
Global *GetVU=PurePROCS_GetFunction(MOSM,"getOSMEChannelVU")  ;-Return the address of the channel volume function
Global wiggle.f,ending=0,ended=0
Global pause=0,MoveOutFlag=0
Global TM=0,TM2=0,TM3=0,LTM1,LTM=0 ;-timer variables
Global Fader=0,LY=0, StarsOn=1,STM
Global top=380,sin.f = 0.0,dir = 0,add.f=0,bpos = 0,sinA.f=0,T=0,g_angleadd.f=0
Global angleStep.f = Radian(0.9), angle.f, radius,inc,down,anglel.f
Global LogoDone
Global Ball_on=1



pp1\min=320
pp1\max=320
pp1\delay=0
pp1\inc=0
pp1\delay=1

pp2\min=10
pp2\max=200
pp2\inc=0

pp3\min=20
pp3\max=20
pp3\inc=1
pp3\delay=250

Procedure Get16Font() ;-Grab out 15x16 font
 
  CatchImage(1000,?font)
 
  ;-yes I know I could store all these in ar array but the intro is very small and it's just far easier to use the
  ;-ascii values of the font and have them all pre-captured.  Old 68000 habits do die hard.
  SPR=0
  For y=0 To ImageHeight(1000)-1 Step 16
    For X=0 To ImageWidth(1000)-1 Step 16
      GrabImage(1000,SPR,X,y+2,15,16)
      SPR+1
    Next X
  Next y
 
  ;Image 61 is our white cursor sprite
 
  FreeImage(1000)
 
EndProcedure


Procedure V2_VectorFromPoints (*p1.player, *p2.player, *vout.XY)
  *vout\X = *p2\direction\c\X - *p1\direction\c\x
  *vout\Y = *p2\direction\c\Y - *p1\direction\c\Y
EndProcedure

Procedure addMovement( *V.sVector, speed.f )
  *V\c\x + Cos( *V\angle * #RAD )/2 * speed
  *V\c\y + Sin( *V\angle * #RAD ) * speed
EndProcedure

Procedure.f findangle(x1.f,y1.f,x2.f,y2.f)
 
  Protected a.f,b.f,c.f,angle.f
  a.f = x1-x2
  b.f = y2-y1
  c.f = Sqr(a*a+b*b)
  angle.f = ACos(a/c)*57.29577
  If y1 < y2
    angle=360.0-angle
  EndIf
 
  ProcedureReturn angle.f
EndProcedure

Procedure.i PingPong (*p.T_PINGPONG)
 
  If *p\val>*p\delay
    If *p\direction = 0
      *p\direction = *p\inc
      *p\counter = *p\min
    Else
      *p\counter + *p\direction   
      If *p\counter =< *p\min
        *p\direction = 0
      ElseIf *p\counter >= *p\max
        *p\direction = -*p\direction
        ;EndIf
       
      EndIf
      *p\val=0
    EndIf   
  Else
    *p\val + 1
  EndIf
 
  ProcedureReturn *p\counter
EndProcedure


If fs=1
  OpenScreen(640, 480, 16, "Worms")
  Delay(2000)
Else
  OpenWindow(0,140,180,640,480,"Worms",#PB_Window_NoGadgets|#PB_Window_BorderLess|#PB_Window_ScreenCentered)
EndIf

If fs=0
  OpenWindowedScreen(WindowID(0),0,0,640,480,#True,0,0)
EndIf

Global textarea=CreateSprite(#PB_Any,640,(16*17)) ;-blank sprite to draw the text on 
Global textback=CreateSprite(#PB_Any,640,(16*17))
Procedure Fade1()
  If Fader=1 ;-has the flag been set to start the first part of the fading routine?
    If ElapsedMilliseconds()-TM2>30/2 ;-only draw a line afer the given time period
      TM2=ElapsedMilliseconds()         ;-reset the timer for the next line
      StartDrawing(SpriteOutput(textback)) ;-draw the line directly on the text sprite
      Box(0,LY,640,2,RGB(0,0,0))            ;-drawing a box is more effective than drawing a line!
      StopDrawing()
      LY+4 ;-next line for next time around
      If LY>SpriteHeight(textback) ;-have we reached the bottom of the sprite?
        Fader=2                         ;-set another flag to start the second fade part upwards
        LY=SpriteHeight(textback)-2     ;-re-position the box drawing co-ordinates
      EndIf
    EndIf
  EndIf
EndProcedure

Procedure Fade2()
 
  If Fader=2 ;-same goes here as for the downwards fade routines
    If ElapsedMilliseconds()-TM2>30/2
     
      TM2=ElapsedMilliseconds()
     
      StartDrawing(SpriteOutput(textback))
      Box(0,LY,640,4,RGB(0,0,0))
      StopDrawing()
      LY-4
      If LY<=0 ;-reached the top of the sprite?
        Fader=0     ;-no more fadeing to be done thank you!
        pause=0     ;-no longer paused
        txpos=0:typos=0 ;-reset the text writer back to the top left of the sprite
      EndIf
    EndIf
  EndIf
 
EndProcedure

Procedure.l KeyboardHit( KeyName.l )
  Static Dim KeyFlag.b(255)
  If KeyboardPushed(KeyName)
    If KeyFlag(KeyName) = 0
      KeyFlag(KeyName) = 1
      ProcedureReturn 1
    Else
      ProcedureReturn 0
    EndIf
  Else
    KeyFlag(KeyName) = 0
    ProcedureReturn 0
  EndIf
EndProcedure

Procedure TextWriter()
  If ElapsedMilliseconds()-TM>60/4 ;-only draw a character every 60*2 ms.  (Change this to speed it up or down)
    TM=ElapsedMilliseconds()              ;-restart the timer
    StartDrawing(SpriteOutput(textback))  ;-draw all the text on on top of a sprite, then when finished use DisplayTransparentSprite to show it
    MVAL=Asc(Mid(T$,CurrentLetter,1))-32  ;-get our ascii value
    DrawImage(ImageID(61),(txpos+1)*16,typos*16,16,16) ;-draw the white cursor in front of the letter first
    DrawImage(ImageID(MVAL),txpos*16,typos*16,16,16)    ;-now draw our letter behind the cursor
    StopDrawing()
   
    CurrentLetter+1 ;-counter for the line.  max=40
    LetterCount+1             ;-total number of letters drawn
    If LetterCount>=TexLen:LetterCount=0:CurrentLetter=1:pause=1:txpos=0:Fader=1:typos=0:ProcedureReturn: EndIf ;-pause=4.  this will end the textwriter routine and just display the last page
   
    txpos+1 ;-move along the sprite by 1*16 px to the right
    If txpos=40         ;-reached end of the line yet?
      txpos=0           ;-if so then zero x position back to the start of the line
      typos+1:If typos=17:pause=1:Fader=1 ;-reached maximum mnumber of rows down yet?  Then start the fading routine
        TM3=ElapsedMilliseconds()           ;-start the timer as there is a slight pause before fading
      EndIf
    EndIf
  EndIf
EndProcedure

Procedure UPscroll()
 
  If pause=1 And ElapsedMilliseconds()-TM3>3000 ;-start doing the fade routines if the flag has been set
    TM3=0
    Fade1()
    Fade2()
  EndIf
 
 
  If pause=4:Goto TextIt:EndIf ;-end of text then don't do the text writer, just pause forever
  If pause=0:TextWriter():EndIf     ;-do the text writer effect
 
  TextIt:
 
  DisplayTransparentSprite(textback,00,00,tintensity) ;-text writer sprite that we have drawn on
                                                        ;-text writer sprite that we have drawn on
 
EndProcedure

Procedure SetUpStars()
 
  For a = 0 To max
    pl1(a)\direction\c\x = Random(749)
    pl1(a)\direction\c\y = Random(599)
    ; pl1(a)\speed = Random(4,1)
    pl1(a)\state = PingPong(@pp3)
    pl1(a)\type=Random(5,1)
   
    pl1(a)\speed=pl1(a)\type
    pl1(a)\state= pl1(a)\speed
    ;   If  pl1(a)\type>2
    ;     r=100:g=100:b=100
    ;   Else
    ;     r=255:g=255:b=255
    ;   EndIf
    ;   
    If  pl1(a)\type<3
      If pingpong(@pp4)=1
        r=100:g=100:b=100
      Else
       
        r=255:b=100:g=255
      EndIf
      ;       ElseIf pl1(a)\type=3
      ;         
      ;         pl1(a)\type=v1
      ;         r=100:g=100:b=255
    Else
      If pingpong(@pp4)=2
        r=222:g=222:b=255
      Else
       
        r=100:g=100: b=100
      EndIf
      ; r=255:g=255:b=255
    EndIf
    pl1(a)\speed =pl1(a)\type
    pl1(a)\color=RGB(g,0,Random(b,1))
   
  Next
EndProcedure

Procedure GetChannelBoxes()
  ;-Create some coloured boxes to draw the vu lines on
  CreateImage(501,96,32)
  StartDrawing(ImageOutput(501))
  Box(0,0,96,34,RGB(0,64,0))
  StopDrawing()
 
  CreateImage(502,96,34)
  StartDrawing(ImageOutput(502))
  Box(0,0,96,34,RGB(0,64,0))
  StopDrawing()
 
  CreateImage(503,96,34)
  StartDrawing(ImageOutput(503))
  Box(0,0,96,34,RGB(0,64,0))
  StopDrawing()
 
 
 
EndProcedure


Procedure ReplayMusic(Addr,muslen,tune)
  ;-Can't get rid of the slight pause between stopping and starting the routine.  it's how it is!
  PurePROCS_CloseLibrary(MOSM) ;-just close the replay library.  Sometime when the music it stopped it generates an error!
  MOSM=PurePROCS_OpenLibrary(?osmlib) ;-re-open the library
  *Play=PurePROCS_GetFunction(MOSM,"playOSMEMusicMem") ;-get the function address
  *GetVU=PurePROCS_GetFunction(MOSM,"getOSMEChannelVU") ;-get the function address
  CallCFunctionFast(*Play,Addr,muslen,tune)             ;-now play dat toon!
EndProcedure

Procedure GetVuValue()
  Global V1=Mod(CallCFunctionFast(*GetVU,0),20)
  Global V2=Mod(CallCFunctionFast(*GetVU,1),20)
  Global V3=Mod(CallCFunctionFast(*GetVU,2),20)
EndProcedure

Procedure VuMeters()
  Static scrollin1=-600
  Static scrollin2=-650
  Static scrollin3=-700
 
  i.f=550
  k=0
  If scrollin1<0
    scrollin1+2
  EndIf
  If scrollin2<50
    scrollin2+2
  EndIf
  If scrollin3<50
    scrollin3+2
  EndIf
 
  If ending=1
   
    ; If scrollin1<0
    scrollin1+5
    ;  EndIf
    ; If scrollin2<50
    scrollin2+7
    ; EndIf
    ; If scrollin3<50
    scrollin3+9
    ; EndIf
    Debug scrollin3
    If scrollin3>500
      LogoDone=0
      MoveOutFlag=1
    EndIf
   
   
  EndIf
 
 
  Repeat
    ; i+1
    k+1
    ;     If wiggle<=top And dir=0
    ;       wiggle+0.01
    ;       If wiggle>top
    ;         wiggle=0
    ;       EndIf
    ;     Else
    ;       wiggle-0.01
    ;       If wiggle<=0
    ;         dir=0
    ;       EndIf
    ;       
    ;     EndIf;
    ;wiggle=top
    sin.f + 0.05
    ;    ClipSprite( 13, 1, 1, 128, k )
   
    V1=CallCFunctionFast(*GetVU,0)
    V2=CallCFunctionFast(*GetVU,1)
    V3=CallCFunctionFast(*GetVU,2)
   
    x1=Sin(sin.f*(0.5)*v1)*v1;*( 5.3*Mod(V1,10))
    x2=Sin(sin.f*(0.5)*v2)*v2; Sin(sin.f-(wiggle/0.23));*( 5.3*Mod(V2,10))
    x3=Sin(sin.f*(0.5)*v3)*v3; Sin(sin.f-(wiggle/0.23));*( 5.3*Mod(V3,10))
   
    DisplayTransparentSprite(913, b+20+x1,scrollin1-20+k,(v1*20),RGB(55-v1,255-V1,v1*30 ))
   
    DisplayTransparentSprite(913, b+80+x2,scrollin2-60+k,(v2*20),RGB(255-v2,055-V2,v2*30 ) )     
    DisplayTransparentSprite(913, b+140+x3,scrollin3-80+k,(v3*20),RGB(v3*30,0,155-V3 )  ) 
   
    k+4
  Until k=>490
 
 
 
 
EndProcedure

Procedure Balls(on)
  Static.i splice=580,x,y
  Static.f angle,radiusa,c,s,intensity=0
 
  If on=1
    If intensity<155
      intensity+0.505
    EndIf
   
    angleStep.f = Radian(0.9)
    splice+1
    ;     
    ;   If intensity<100
    ;     intensity+0.1
    ;   EndIf
   
    For count= 0 To 19 Step 1
     
      c = Cos(angle+(count/#PI))
      s = Sin(angle+(count/#PI))
     
      For radius = 0 To 650 Step 25
       
        radius+radiusa
       
        x = radius * c + 320 ;+ (c*c )
        y = radius * s + 240 ;+ (s*s ))
       
        DisplayTransparentSprite(88, x,y,intensity)
       
      Next
    Next
   
    ;radiusa+0.101
    ;   If radiusa<-1500827
    ;     radiusa=1
    ;   EndIf
   
    angle + angleStep
   
    If angle > #PI2
      angle - #PI2
     
    EndIf
  EndIf
 
EndProcedure

Procedure Stars()
 
 
 
  StartDrawing(ScreenOutput())
 
  V2_VectorFromPoints (@pl1, @target, @V)
 
  For a = 0 To max
   
    pl1(a)\direction\angle=findangle(pl2\direction\c\x,pl2\direction\c\y,pl1(a)\direction\c\x,pl1(a)\direction\c\y)
   
    addMovement(@pl1(a)\direction,pl1(a)\speed*2)
   
    If pl1(a)\direction\c\y>599 And pl1(a)\direction\c\y<601 Or pl1(a)\direction\c\x>400 And pl1(a)\direction\c\x<401;pl1(a)\type=0
      If StarsOn=1
        num=Random(4,1)
        If num=1
          pl1(a)\direction\c\x = -20 + Random(800)
          pl1(a)\direction\c\y = 0
         
        ElseIf num = 2
          pl1(a)\direction\c\x = -20+Random(800)
          pl1(a)\direction\c\y = -10
         
        ElseIf num = 3     
          pl1(a)\direction\c\x = -20
          pl1(a)\direction\c\y = -20 + Random(600)
         
        Else
          pl1(a)\direction\c\x = 640
          pl1(a)\direction\c\y = -20 + Random(600)
         
        EndIf
       
        pl1(a)\type=Random(5,1)
      EndIf
     
      If  pl1(a)\type<3
        If pingpong(@pp4)=1
          r=100:g=100:b=100
        Else
         
          r=255:b=100:g=255
        EndIf
        ;       ElseIf pl1(a)\type=3
        ;         
        ;         pl1(a)\type=v1
        ;         r=100:g=100:b=255
      Else
        If pingpong(@pp4)=2
          r=222:g=222:b=255
        Else
         
          r=100:g=100: b=100
        EndIf
        ; r=255:g=255:b=255
      EndIf
      pl1(a)\speed =pl1(a)\type
      pl1(a)\color=RGB(g,0,Random(b,1))
      ;EndIf
     
    EndIf
   
    RoundBox(pl1(a)\direction\c\x,pl1(a)\direction\c\y,pl1(a)\type*2,pl1(a)\type*2,pl1(a)\type*v1*2,pl1(a)\type*2*v1,Pl1(a)\color)
   
  Next
 
  StopDrawing()
 
  pl2\direction\c\X=PingPong(@PP1)
 
 
EndProcedure

Procedure CreateImages()
  ;   CreateImage (0,640,480) ; Create Background
  ;   StartDrawing(ImageOutput (0))
  ;   DrawingMode ( #PB_2DDrawing_Gradient )
  ;   BackColor (0)
  ;   ;FrontColor ($FF901E)
  ;   ;LinearGradient (0,-300,0,1500)
  ;   ; Box (0,0,640,480)
  ;   StopDrawing()
  ;   
  ; Creating test scrolly
  CreateSprite( 913, 128, 128)
  ; LoadFont(1, "Arial", 32 ) 
 
 
  StartDrawing( SpriteOutput( 913 ) )
  DrawingMode(#PB_2DDrawing_Gradient)     
  BackColor($0000FF)
 
  FrontColor($FF0000)
 
  ; DisplayTransparentSprite(1,5,5)
  CircularGradient(8, 8, 8)     
 
  Circle(16,16,14)
 
  StopDrawing()
 
  logoin=CatchImage(#PB_Any,?logo)
 
  CreateSprite(666, 640, 250)
 
  If StartDrawing(SpriteOutput(666))
    DrawImage(ImageID(logoin),20,40)
    ;Box(0, 0, 20, 20, RGB(255, 0, 155))
    ;Box(5, 5, 10, 10, RGB(155, 0, 255))
    StopDrawing()
    Debug "oh"
  EndIf
 
  ;   logoa=CatchImage(#PB_Any,?logo)
  ;   StartDrawing(SpriteOutput(logo))
  ;   DrawImage(logoa,5,50,500,200)
  ;   StopDrawing()
  ;   
  CreateSprite(88, 24, 24)
 
  If StartDrawing(SpriteOutput(88))
    Circle(12, 12, 10, RGB(155, 0, 255))
    Circle(12, 12, 04, RGB(255, 0, 155))
    StopDrawing()
  EndIf
EndProcedure

Procedure AddText(text$,x)
  Static J
 
  StartDrawing(ScreenOutput())
  DrawText(0,x,text$)
  StopDrawing()
 
EndProcedure

Procedure DoLogo()
 
 
 
 
  Static MoveInFlag
  ; Static MoveOutFlage
  Static ycord
  Static intensity.f
  ;Static STM
  Static SineW
  Static Ndelay=23150
  Static copy
 
  If ElapsedMilliseconds()-STM>Ndelay And MoveInFlag=0
    Ball_on=0
    STM=ElapsedMilliseconds()
    Debug "ping"
    ; If SineW
    SineW+1
    Ndelay=1000
    Select SineW
      Case 1
        g_angleadd=75.5
        copy=#True
        anglel.f=g_angleadd
      Case 2
        g_angleadd=11
        copy=#True
        anglel.f=g_angleadd
      Case 3
        g_angleadd=11.5
        copy=#True
        anglel.f=g_angleadd
      Case 4
        g_angleadd=26
        copy=#False
        anglel.f=g_angleadd
      Case 5
        ;  g_angleadd=32
        g_angleadd=19
        copy=#False
        anglel.f=g_angleadd
      Case 6
        g_angleadd=75.5
        copy=#True
        anglel.f=g_angleadd
      Case 7
        g_angleadd=26.5
        copy=#False
        anglel.f=g_angleadd     
      Case 8
        g_angleadd=37.5
        copy=#False
        anglel.f=g_angleadd
    EndSelect
   
    If SineW=>9
      SineW=0
      Ndelay=1000
     
      STM=ElapsedMilliseconds()
    EndIf
   
    ; EndIf
   
  EndIf
 
  If LogoDone=0
    bb=-200
    If ycord>bb
      If ending=0
        MoveInFlag=1 :
      EndIf
     
    Else
      MoveInFlag=0
    EndIf
   
   
   
    If MoveInFlag=1
      ; If ElapsedMilliseconds()-TM<2000
      If EMs()-LTM>30
        LTM=EMs()
        ycord-2
        If intensity<255
          intensity+2
        EndIf 
      EndIf
      ; EndIf
    ElseIf MoveOutFlag=1
      ; If ElapsedMilliseconds()-TM<2000
      StarsOn=0
      If EMs()-LTM>30
        LTM=EMs()
        ycord+4
       
        If intensity<255
          intensity-6
        EndIf 
      EndIf
      If tintensity>0
        tintensity-2
      EndIf
     
      If ycord>0
       
        MoveOutFlage=0
        MoveInFlag=0
        LogoDone=1
        ended=1
        Debug "logo done"
      EndIf
     
    EndIf
   
  Else
   
   
  EndIf
 
 
  For a=0 To 128
   
    s=Sin(anglel*0.5)*12
   
    anglel+g_angleadd
   
    If copy=#True
     
      copys=s : If s<0 : copys=0 : EndIf
    ElseIf copy=#False
     
     
      copys = 27
    EndIf
   
    ClipSprite(666,b,0,copys,178)
   
    DisplayTransparentSprite(666,-27+(a+b),480+ycord+s,intensity)
   
    b+ 8
   
  Next
 
 
  ;AddText(Str(s),0)
  ;AddText(StrF(g_angleadd),16)
  ; AddText(StrF(Ndelay),32)
 
  If anglel.f>360*360*64
    anglel.f=g_angleadd
  EndIf
 
 
EndProcedure

TM=ElapsedMilliseconds()
;TM=ElapsedMilliseconds()

STM=ElapsedMilliseconds()
CreateImages()
SetUpStars()
GetChannelBoxes()
Get16Font()

;CallCFunctionFast(*Play,?music,muslen,1)                    ;-Play the initial music
ReplayMusic(?music,muslen,1)
;PrepareUpscroll()

LTM1=EMs()
;LTM=EMs()
Repeat
 
  FlipBuffers()   
  ClearScreen(RGB(0,0,0)) 
  If Ball_on=0
    Stars()
  EndIf
 
  Balls(Ball_on)
  VuMeters()
 
  UPscroll()
  DoLogo()
  Delay(1)
  ;WindowEvent()
 
  ExamineKeyboard() : ExamineMouse()
  If MouseWheel() = 1
    add+0.1
  ElseIf MouseWheel()=-1
    add-0.1
    ;Debug "mouse"
  EndIf
 
  If KeyboardHit(#PB_Key_Space)      ; if it's [SPACE] then we'll switch between windowed and fullscreen
    If Status=0 : Status = 1 :Else : Status = 0 : EndIf
  EndIf
  If KeyboardPushed(#PB_Key_Escape)
    ending=1
  EndIf
  If KeyboardReleased(#PB_Key_1)
    ReplayMusic(?music,muslen,1)
  EndIf
  If KeyboardReleased(#PB_Key_2)
    ReplayMusic(?music1,muslen1,1)
  EndIf
  If KeyboardReleased(#PB_Key_3)
    ReplayMusic(?music2,muslen2,1)
  EndIf
  If KeyboardReleased(#PB_Key_4)
    ReplayMusic(?music3,muslen3,1)
  EndIf
  ; very crappy windowed / fake fullscreen switch, too lazy for a proper fullscreen version ;)
  If fs=0
   
    Select Status
      Case 0
       
        ShowWindow_(WindowID(0),#SW_NORMAL)      ;WinAPI calls won't work in the Demo of PureBasic!
       
       
      Case 1
       
        ShowWindow_(WindowID(0),#SW_MAXIMIZE)
       
       
    EndSelect
    WindowEvent()
  EndIf
 
Until ENDED=1



DataSection
  music:
  IncludeBinary"audio.sndh" ;-manually ripped Count Zero music. Custom 68000 header and conversion by KrazyK.  Uses tunes $16,$17, & $18 only
  musend:
  music1:
  IncludeBinary"robocop-title.snd" ;-manually ripped Count Zero music. Custom 68000 header and conversion by KrazyK.  Uses tunes $16,$17, & $18 only
  musend1:
  music2:
  IncludeBinary"Kisse_Katten.sndh" ;-manually ripped Count Zero music. Custom 68000 header and conversion by KrazyK.  Uses tunes $16,$17, & $18 only
  musend2:
  music3:
  IncludeBinary"Farewell_Lil_SSD.sndh" ;-manually ripped Count Zero music. Custom 68000 header and conversion by KrazyK.  Uses tunes $16,$17, & $18 only
  musend3:
 
  osmlib: ;-oldskool music replay library by Zippy
  IncludeBinary"osmengine.dll"
 
  font:
  IncludeBinary"font.bmp"
 
  logo:
  IncludeBinary"em_uklogo2.png"
 
EndDataSection
----

R Tape loading error, 0:1

Offline Omnikam

  • Atari ST
  • ***
  • Posts: 121
  • Karma: 4
    • View Profile
Re: Worms Intro by emook
« Reply #17 on: November 12, 2015 »
Wow Emook, that's an Awesome share  :cheers:
Karma for your generosity