[TUTO] Remake d'une Cracktro Scoopex sur Amiga

Informations pour bien débuter en PureBasic
Avatar de l’utilisateur
TazNormand
Messages : 1294
Inscription : ven. 27/oct./2006 12:19
Localisation : Calvados (14)

Re: [TUTO] Remake d'une Cracktro Scoopex sur Amiga

Message par TazNormand »

Re

@Raven, tu peux ressayer le code fourni dans la partie 5, je l'ai revu, j'ai laissé tomber les CopyMemory() et autres Peek/Poke, mais utilisé un simple GrabSprite().

Sous mon Vista x86 en DX9, ça fonctionnne mais je ne peux pas tester sous Seven, ni en X64.

J'attends ton retour d'infos.

@ tous : si quelqu'un peut me MP un code pour copier une partie de sprite dans un autre via les copymem et/ou peek&poke, je suis preneur.
Dernière modification par TazNormand le mar. 28/sept./2010 6:03, modifié 1 fois.
Image
Image
Avatar de l’utilisateur
raven
Messages : 222
Inscription : jeu. 06/janv./2005 15:45

Re: [TUTO] Remake d'une Cracktro Scoopex sur Amiga

Message par raven »

niquell!!! c'a fonctionne sur mon vista 64 avec purebasic 4.51 exellent!!!

fonctionne aussi sur w7 64.

encore merci pour la mise a jour du tuto taz :wink:
Pb5.24 Lts/5.31 Windows 7 64 nvidia 560 ti E8500 8g ram
Avatar de l’utilisateur
Ar-S
Messages : 9472
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: [TUTO] Remake d'une Cracktro Scoopex sur Amiga

Message par Ar-S »

Si quelqu'un avait encore les images, surtout les fonts bitmap je ne les ai pas ici et elles ne sont plus dispo. Merci
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
raven
Messages : 222
Inscription : jeu. 06/janv./2005 15:45

Re: [TUTO] Remake d'une Cracktro Scoopex sur Amiga

Message par raven »

bonjour,

avec les nouvelle version de purebasic,catchmodule,playmodule on changé en cathmusic et playmusic.
comme je suis dessus en ce moment pour le fond dégradé,j'ai tenté un passage en 5.60.
merci à taznormand pour ce super tuto.

Code : Tout sélectionner

; Scoopex CrackTro Remake
; ©.2009 TazNormand

; D'après Remake en Flash sur www.Flashtro.com
; visible ici : http://flashtro.com/page.php?id=72&highlight=SCOOPEX



; TUTORIEL 5 : La Musique



;  Taille écran   
Global WindowW.w=800
Global WindowH.w=600

Global alphabet.s="ABCDEFGHIJKLMNOPQRSTUVWXYZ 1234567890,.!?"  ; Correspond à l'ordre des caractères de la police BitMap
Global text.s                                                  ; Le texte du scrolling chargé ci-dessous
text.s = " Scoopex cracktro PureBasic Remake by TazNormand     ,         scoopex presents     fred       cracked and trained ....      hmm this time it was a hard crack ....  cause the whole loader were written in fucking c code and the original had several errors .... ";
text.s +"sorry for no megatraining but i want to finish the megacruncher and i?ve absolutly no time for training games   !!!         well our member list went down a little bit cause there are no longer sections in"                                                        ;
text.S +"   ...... england and sweden !!!!   heres a small list including the people who left scoopex to start their carrier in another group    pennywise .. uncle tom .. jesus .. zark ..  all in share and enjoy"                                                           ;
text.s +"  .. merryman and panther !!!!  i wish you good luck where ever you are   also our division in germany was busted  ?cause some people thought they could release every shit like their megademo!! so this mega demo is no     ,production"                            ;
text.s +"  i want to send some hellos to our friends .... subway .. fairlight .. piranhas .. quartex .. red sector .. quick silver .. thrust .. .m.a.d .. share and enjoy .. spreadpoint .. oracle .. vision factory .. and all the others"                                    ;
text.s +" which    worth  mentioned             challenger              of     !!!    generations      !!!!       "                                                                                                                                                            ;

Global X_Depart.w=0 ; Position du premier caractère dans fichier image de la fonte bitMap
Global Car.w=1      ; Premier n° de sprite caractère

; Structures
; ScrollChar servira pour la position de chaque caractère du scrolltext
Structure ScrollChar
  Index.w
  PosX.l
  PosY.l
  Large.w
  SpeedX.w     
  Dernier.b   
EndStructure

; Parallax servira pour les 6 scrolling différentiels (parallaxes) des "montagnes grises"
Structure Parallax
  Index.w
  PosX.l
  PosY.l     
  Speed.w
  Largeur.w
  Hauteur.w
EndStructure

; Liste Chainées : elles contiendront les positions, vitesses, etc..; des caractères et montagnes
Global NewList ScrollText.ScrollChar()
Global NewList Mountains.Parallax()   


; Décodeur PNG pour utilise les images
UsePNGImageDecoder()

; Déclaration des procédures ce qui permet de les appeler quelque soit leur ordre
Declare Affiche()
Declare Fond_Degrade()
Declare Logo()
Declare ChargeListe(alphab.s,mess.s)
Declare BMFont()
Declare Montagnes()
Declare Musique()
Declare HappyEnd()
Declare ClipSpr2Sprite(ClipSpr,ClipX,ClipY,ClipW,ClipH,DestSpr)

; Procédures pour un code "plus lisible"
Procedure Affiche()
  ; Affichage fond dégradé
  DisplayTransparentSprite(0,0,-1)
  
  ; Affichage logo Scoopex
  DisplayTransparentSprite(56,193,50)
  
  ; Afficher montagnes
  ResetList(Mountains())
  ForEach(Mountains())
    ClipSprite(Mountains()\Index,Mountains()\PosX,0,WindowW,Mountains()\Hauteur)         
    DisplayTransparentSprite(Mountains()\Index,0,Mountains()\PosY)         
    Mountains()\PosX + Mountains()\Speed
    If Mountains()\PosX>=Mountains()\Largeur / 3
      Mountains()\PosX=0
    EndIf
  Next
  
  ; Affichage scrolling
  ResetList(ScrollText())
  ForEach ScrollText()
    ; N'afficher le sprite que s'il est sur la partie visible de l'écran
    If (ScrollText()\posX + ScrollText()\Large) > 0
      DisplayTransparentSprite(ScrollText()\index,ScrollText()\posX,ScrollText()\posY)           
      ScrollText()\posX - ScrollText()\speedX
    EndIf
  Next
  
  If ScrollText()\PosX<-60 And ScrollText()\dernier=1
    chargeliste(alphabet,text)
  EndIf
EndProcedure

Procedure Fond_Degrade() ; Sprite du Fond en dégradé de couleurs Bleues/Cyan (sprite 00)
  CreateSprite(0,WindowW,WindowH+2)
  StartDrawing(SpriteOutput(0))
  
  ; Partie haute en noir
  Box(0,0,WindowW,189,RGB(0,0,0))
  
  
  ; 1er dégradé de "Bleu foncé" à "Bleu moyen"
  r1.f=0 ; Couleur de départ r1=Rouge, g1=Vert (Green), b1=Bleu
  g1.f=0
  b1.f=16
  r2.f=0 ; Couleur d'arrivée r2=Rouge, g2=Vert (Green), b2=Bleu
  g2.f=0
  b2.f=240
  dr.f=((r2-r1)/255) ; Delta (différence) entre les 2 teintes,
  dg.f=((g2-g1)/255) ; divisé par 255 (les couleur sont exprimées de 0 à 255 en RGB)
  db.f=((b2-b1)/105) ; exception division par 105 pour le bleu car c'est la couleur qui varie
                     ; (105=nb de lignes à colorier : 190 (inclus) à 294)
  For y=190 To 294
    LineXY(0,y,WindowW,y,RGB(r1,g1,b1))
    r1+dr
    g1+dg
    b1+db
  Next y
  
  ; 2ème dégradé de bleu à "Cyan clair"
  r1.f=0
  g1.f=16
  b1.f=240
  r2.f=0
  g2.f=224
  b2.f=240
  dr.f=((r2-r1)/255)
  dg.f=((g2-g1)/35)
  db.f=((b2-b1)/35)
  For y=295 To 329
    LineXY(0,y,WindowW,y,RGB(r1,g1,b1))
    r1+dr
    g1+dg
    b1+db
  Next y
  
  ; Zone Cyan centrale
  Box(0,330,WindowW,80,RGB(0,240,240))
  
  
  
  ; 3ème dégradé de "Cyan foncé" à bleu
  r1.f=0
  g1.f=128
  b1.f=128
  r2.f=0
  g2.f=16
  b2.f=128
  dr.f=((r2-r1)/255)
  dg.f=((g2-g1)/40)
  db.f=((b2-b1)/255)
  For y=410 To 449
    LineXY(0,y,WindowW,y,RGB(r1,g1,b1))
    r1+dr
    g1+dg
    b1+db
  Next y
  
  ; 4ème dégradé de bleu à bleu foncé
  r1.f=0
  g1.f=0
  b1.f=128
  r2.f=0
  g2.f=0
  b2.f=16
  dr.f=((r2-r1)/255)
  dg.f=((g2-g1)/255)
  db.f=((b2-b1)/65)
  For y=450 To 514
    LineXY(0,y,WindowW,y,RGB(r1,g1,b1))
    r1+dr
    g1+dg
    b1+db
  Next y
  
  ; Partie basse en noir
  Box(0,515,WindowW,85,RGB(0,0,0))
  StopDrawing()
EndProcedure

Procedure Logo()  ; Création du sprite logo Scoopex     
  logo=CatchImage(7,?logo)
  If logo       
    l=CreateSprite(56,414,108)
    StartDrawing(SpriteOutput(56))
    DrawImage(logo,0,0)
    StopDrawing()
  EndIf
EndProcedure

Procedure ChargeListe(alphab.s,mess.s)   
  ; Charger Liste Chainée
  positionX.l=WindowW+1 ; Largeur de notre fenetre + 1 pour cacher le scroll avant son départ
  For i=1 To Len(mess.s)
    element.w=FindString(alphab,UCase(Mid(mess,i,1)),1)
    If element=0
      ;stop
      Debug element
      End
    EndIf
    AddElement(ScrollText())
    ScrollText()\Index=element
    ScrollText()\posX=positionX
    ScrollText()\posY=(WindowH-96) ; Scrolling en bas de l'écran
    ScrollText()\Large=SpriteWidth(element)
    ScrollText()\speedX=5
    ScrollText()\dernier=0
    positionX+ScrollText()\Large+8
  Next i
  ScrollText()\dernier=1         
EndProcedure

Procedure BMFont()  ; Définit la police Bitmap (sprites 1 à 42)
                    ; charger la police bitmap, et en extraire les caractères     
  font=CatchImage(0,?font)       
  If font
    p=CreateSprite(70,1456,92)  ; Créer un sprite "géant" pour en extraire les sprites caractères         
    StartDrawing(SpriteOutput(70))
    DrawImage(font,0,0) ; Dessiner image sur le sprite 1
    StopDrawing()   
    TransparentSpriteColor(70,RGB(0,240,0))     
    
    ; Extraction des caractères (1 seule ligne de 43 caractères )
    ; On lit la datasection FontWidths pour les tailles variables de caractères         
    Restore FontWidths2
    Repeat
      Read wdth
      If wdth>0
        ; Créer le sprite correspondant au caractère de la police
        pp=CreateSprite(Car,wdth,92)
        
        ; Sélectionner le caractère qui nous intéresse sur le Sprite global de la police
        res=ClipSprite(70,X_Depart,0,wdth,92)                                         
        
        ; //////////////////////////////////////////////////////////////////////////
        ; ///   UseBuffer() Obsolete avec DIRECTX9 et sans doute 10,11,etc...    ///
        ; ///                   On utilise donc un GrabSprite                    ///
        ; //////////////////////////////////////////////////////////////////////////
        ; /// Si vous êtes en DIRECTX7, décommentez toutes les lignes où il y a  ///
        ; ///          Et commentez toutes celles où apparaît DIRECTX9           ///
        ; //////////////////////////////////////////////////////////////////////////
        
        ; Le buffer n'est plus l'écran mais le sprite que l'on va créer
        ; UseBuffer(car) ; DIRECTX7
        
        ; Afficher le sprite de la font précédemment clippé sur le sprite "caractère"                                                                       
        ; DisplaySprite(70,0,0)              ; DIRECTX7
        ClearScreen(0)                                ; DIRECTX9
                                                      ; StartDrawing(ScreenOutput())                  ; DIRECTX9
        DisplayTransparentSprite(70,0,0)              ; DIRECTX9             
                                                      ; StopDrawing()                                 ; DIRECTX9
        GrabSprite(car,0,0,wdth,92)                   ; DIRECTX9
        
        ; Transparence du sprite caractère
        
        ; ///////////////////////////////////////////////////////////////////////////////////////
        ; // Attention, avec le GrabSprite, la couleur transparente devient le noir (RGB0,0,0) //
        ; ///////////////////////////////////////////////////////////////////////////////////////                               
        ; TransparentSpriteColor(car,RGB(0,240,0)) ; DIRECTX7
        ; TransparentSpriteColor(car,RGB(0,0,0))        ; DIRECTX9
        
        Car+1 ; Caractère suivant
        X_Depart+(Wdth) ; Décaler position dans image BitMap de la largeur précédemment lue
      EndIf
    Until wdth=0   ; Tant qu'il y a des données à "lire" en datas
                   ;UseBuffer(#PB_Default) ; DIRECTX7
    ClipSprite(70,#PB_Default,#PB_Default,#PB_Default,#PB_Default)
  EndIf
EndProcedure

Procedure ChargelisteMont()
  For i=5 To 0 Step -1
    AddElement(Mountains())
    Mountains()\Index=50+i
    Mountains()\PosX=0
    PosY=210
    Select i
      Case 5
        PosY=300
      Case 4
        PosY+63
      Case 3
        PosY+82
      Case 2
        PosY+84
      Case 1
        PosY+89
      Case 0
        PosY+104
    EndSelect
    Mountains()\PosY=PosY
    Mountains()\Speed=6-i
    Mountains()\Largeur=SpriteWidth(Mountains()\Index)
    Mountains()\Hauteur=SpriteHeight(Mountains()\Index)
  Next i
EndProcedure

Procedure Montagnes()  ; Sprites des montagnes parallax (50 à 55)     
  layer1=CatchImage(1,?layer1)       
  If layer1       
    p=CreateSprite(50,640*3,98)         
    StartDrawing(SpriteOutput(50))
    DrawImage(layer1,0,0)
    DrawImage(layer1,640,0)
    DrawImage(layer1,1280,0)
    StopDrawing()         
  EndIf
  
  layer2=CatchImage(2,?layer2)       
  If layer2
    p=CreateSprite(51,640*3,124)
    StartDrawing(SpriteOutput(51))
    DrawImage(layer2,0,0)
    DrawImage(layer2,640,0)
    DrawImage(layer2,1280,0)
    StopDrawing()
  EndIf
  
  layer3=CatchImage(3,?layer3)       
  If layer3
    p=CreateSprite(52,643*3,128)
    StartDrawing(SpriteOutput(52))
    DrawImage(layer3,0,0)
    DrawImage(layer3,643,0)
    DrawImage(layer3,1286,0)
    StopDrawing()
  EndIf
  
  layer4=CatchImage(4,?layer4)       
  If layer1
    p=CreateSprite(53,639*3,138)
    StartDrawing(SpriteOutput(53))
    DrawImage(layer4,0,0)
    DrawImage(layer4,639,0)
    DrawImage(layer4,1278,0)
    StopDrawing()
  EndIf
  
  layer5=CatchImage(5,?layer5)       
  If layer5
    p=CreateSprite(54,640*3,164)
    StartDrawing(SpriteOutput(54))
    DrawImage(layer5,0,0)
    DrawImage(layer5,640,0)
    DrawImage(layer5,1280,0)
    StopDrawing()
  EndIf
  
  layer6=CatchImage(6,?layer6)       
  If layer6
    p=CreateSprite(55,640*3,166)
    StartDrawing(SpriteOutput(55))
    DrawImage(layer6,0,0)
    DrawImage(layer6,640,0)
    DrawImage(layer6,1280,0)
    StopDrawing()
  EndIf       
EndProcedure   

Procedure Musique()   
  music=CatchMusic(0,?zik,?Finzik-?zik)
  If music
    MusicVolume(0,75)
    PlayMusic(0)     
  EndIf
EndProcedure

Procedure HappyEnd()
  ; Cette procédure pour finir proprement
  For i=0 To 41
    FreeSprite(i) ; Libérer mémoire des sprites fond et caractères
  Next i
  
  For i=50 To 56
    FreeSprite(i) ; Libérer mémoire des sprites montagne et logo
  Next i
  
  FreeMusic(0) ; Libérer mémoire du module musical     
EndProcedure

; Initialisations
If InitSprite()=0 Or InitKeyboard()=0 Or InitMouse()=0 Or InitSound()=0
  MessageRequester("Problème","Initialisations impossibles",0)
  End
EndIf

;  Ouverture écran
If OpenWindow (0,0,0,WindowW,WindowH, "Scoopex Fred Amiga Game Cracktro Remake : Partie 5" , #PB_Window_SystemMenu | #PB_Window_ScreenCentered )
  If OpenWindowedScreen (WindowID (0),0,0,WindowW,WindowH,1,0,0)
    
    ; Boucle Principale
    ClearScreen (RGB(0,0,0))
    
    ; Lancer la création du fond d'écran, de la création du logo Scoopex
    Fond_Degrade()
    Logo()
    BMFont()           
    ChargeListe(alphabet,text)
    Montagnes()           
    ChargeListeMont()
    Musique()
    
    ; Boucler jusqu'à ce que l'on quitte le programme
    Repeat
      ; Vérifier action clavier et souris
      ExamineKeyboard()
      ExamineMouse()
      
      ; Vérifier évènement Windows (fermer la fenêtre)
      event=WaitWindowEvent()
      
      ; Afficher le dégradé de fond d'écran
      Affiche()
      
      ; Alterner les buffers d'affichage
      FlipBuffers()
      ClearScreen(RGB(0,0,0))
      
    Until KeyboardPushed(#PB_Key_Escape) Or MouseButton(#PB_MouseButton_Right)   Or event=#PB_Event_CloseWindow
  EndIf
EndIf
End

DataSection: 
  logo:   
  IncludeBinary "Scx_logo.png"
  font:   
  IncludeBinary "font1.png"
  layer1: 
  IncludeBinary "layer1d.png"
  layer2: 
  IncludeBinary "layer2d.png"
  layer3: 
  IncludeBinary "layer3d.png"
  layer4: 
  IncludeBinary "layer4d.png"
  layer5: 
  IncludeBinary "layer5d.png"
  layer6: 
  IncludeBinary "layer6d.png"
  zik: 
  IncludeBinary "scoopex.mod"
  Finzik:
  
  FontWidths2:
  Data.l 32,32,32,32,32,32,32,32,16,32,32,32,49,31,32,32,40,32,32,32,32,32,48,32,32,32,50
  Data.l 22,32,32,32,34,32,30,32,32,32,144,20,26,50,0   
EndDataSection
Pb5.24 Lts/5.31 Windows 7 64 nvidia 560 ti E8500 8g ram
Répondre