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.
[TUTO] Remake d'une Cracktro Scoopex sur Amiga
- TazNormand
- Messages : 1294
- Inscription : ven. 27/oct./2006 12:19
- Localisation : Calvados (14)
Re: [TUTO] Remake d'une Cracktro Scoopex sur Amiga
Dernière modification par TazNormand le mar. 28/sept./2010 6:03, modifié 1 fois.
Re: [TUTO] Remake d'une Cracktro Scoopex sur Amiga
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
fonctionne aussi sur w7 64.
encore merci pour la mise a jour du tuto taz
Pb5.24 Lts/5.31 Windows 7 64 nvidia 560 ti E8500 8g ram
Re: [TUTO] Remake d'une Cracktro Scoopex sur Amiga
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
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳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
Re: [TUTO] Remake d'une Cracktro Scoopex sur Amiga
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.
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