Les assets pour le jeu plateforme 2D

Sujets variés concernant le développement en PureBasic
Avatar de l’utilisateur
threedslider
Messages : 455
Inscription : dim. 01/juil./2018 22:38

Les assets pour le jeu plateforme 2D

Message par threedslider »

Savez vous comment on fait pour crypter les assets du jeu plateforme 2D ? C'est a dire protéger les artworks comme les images sprites, tilesets, maps etc dans un seul fichier binaire ? C'est possible ça en purebasic ??
Ou bien faire les images et sons converti en files2bin ? Comment on fait ça ? Si vous avez les codes pour ça je suis preneur... Ou s'il y a de tutos, merci de faire les liens ici.
Mesa
Messages : 1126
Inscription : mer. 14/sept./2011 16:59

Re: Les assets pour le jeu plateforme 2D

Message par Mesa »

Netmaestro a codé ce petit utilitaire pour crypter/decrypter des fichiers.

Code : Tout sélectionner

; Demo: Streaming AES file encode/decode
; netmaestro August 2010
; Purebasic 4.51

Declare Encode(void)
Declare Decode(void)

OpenWindow(0,0,0,200,120,"Cryptor!",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
ButtonGadget(0, 50,20,100,20,"Encrypt a file")
ButtonGadget(1, 50,50,100,20,"Decrypt a file")
CreateStatusBar(0, WindowID(0))
AddStatusBarField(200)
StatusBarProgress(0,0,0,#PB_ProgressBar_Smooth,0,100)

Repeat
	EventID = WaitWindowEvent()
	Select EventID
		Case #PB_Event_Gadget
			Select EventGadget()
				Case 0
					CreateThread(@Encode(), 0)
					
				Case 1
					CreateThread(@Decode(), 0)
			EndSelect
	EndSelect
Until EventID = #PB_Event_CloseWindow

End


Procedure Encode(void)
	
	chunksize = 4096
	rawfilename$ = OpenFileRequester("Please choose a file to encrypt:","","",0)
	encfilename$ = rawfilename$+".enc"
	
	If OpenFile(0, rawfilename$)
		If CreateFile(1, encfilename$)
			DisableGadget(0,1)
			DisableGadget(1,1)
			
			length.q = Lof(0)
			numparts = length/chunksize
			lastchunksize = length%chunksize
			If lastchunksize
				numparts+1
				lastchunk = numparts
			Else
				lastchunk = 0
			EndIf
			
			*raw     = AllocateMemory(chunksize)
			*secure  = AllocateMemory(chunksize)
			
			StartAESCipher(0, ?key, 256, ?iVector, #PB_Cipher_CBC|#PB_Cipher_Encode)
			
			For i=1 To numparts
				If i=lastchunk
					FillMemory(*raw, chunksize, 0, #PB_Byte)
					ReadData(0, *raw, lastchunksize)
				Else
					ReadData(0, *raw, chunksize)
				EndIf
				AddCipherBuffer(0, *raw, *secure, chunksize)
				WriteData(1, *secure, chunksize)
				prog.d = i/numparts*100
				StatusBarProgress(0,0, Int(prog))
				Delay(1)
			Next
			If lastchunksize
				WriteLong(1, lastchunksize)
			Else
				WriteLong(1, chunksize)
			EndIf
			
			FinishCipher(0)
			CloseFile(0)
			CloseFile(1)
			
			FreeMemory(*raw)
			FreeMemory(*secure)
			
			MessageRequester("Finished", "Encrypted file "+encfilename$+" saved",#MB_ICONINFORMATION)
			StatusBarProgress(0,0,0)
			
			DisableGadget(0,0)
			DisableGadget(1,0)
			
		EndIf
	EndIf
EndProcedure

Procedure Decode(void)
	
	chunksize = 4096
	
	encfilename$ = OpenFileRequester("Please choose a file to decrypt:","","",0)
	rawfilename$ = SaveFileRequester("Please choose a new name for the decrypted file","","",0)
	
	If OpenFile(0, encfilename$)
		FileSeek(0, Lof(0)-4)
		lastchunksize = ReadLong(0)
		FileSeek(0, 0)
		If CreateFile(1, rawfilename$)
			DisableGadget(0,1)
			DisableGadget(1,1)
			
			length.q = Lof(0)
			numparts = length/chunksize
			
			*raw     = AllocateMemory(chunksize)
			*secure  = AllocateMemory(chunksize)
			
			StartAESCipher(0, ?key, 256, ?iVector, #PB_Cipher_CBC|#PB_Cipher_Decode)
			
			For i=1 To numparts
				ReadData(0, *secure, chunksize)
				AddCipherBuffer(0, *secure, *raw, chunksize)
				If i=numparts
					WriteData(1, *raw, lastchunksize)
				Else
					WriteData(1, *raw, chunksize)
				EndIf
				prog.d = i/numparts*100
				StatusBarProgress(0,0, Int(prog))
				Delay(1)
			Next
			
			FinishCipher(0)
			CloseFile(0)
			CloseFile(1)
			
			FreeMemory(*raw)
			FreeMemory(*secure)
			
			MessageRequester("Finished", "Decrypted file "+rawfilename$+" saved",#MB_ICONINFORMATION)
			StatusBarProgress(0,0,0)
			
			DisableGadget(0,0)
			DisableGadget(1,0)
		EndIf
	EndIf
EndProcedure


DataSection
	key:
	Data.b $8C,$15,$51,$2C,$0C,$8A,$0A,$D8,$07,$E4,$21,$A2,$8E,$83,$A3,$88,$8A,$CA,$FB,$E1
	Data.b $7B,$A3,$6B,$D6,$BC,$F7,$E6,$CD,$FE,$B5,$D7,$B3
	iVector:
	Data.b $08,$0C,$96,$48,$33,$51,$35,$80,$0C,$A9,$42,$1E,$11,$E0,$83,$C7,$C4,$C6,$E1,$E4
	Data.b $2E,$40,$81,$0A,$24,$70,$00,$10,$08,$B3,$64,$21
EndDataSection


M.
Avatar de l’utilisateur
threedslider
Messages : 455
Inscription : dim. 01/juil./2018 22:38

Re: Les assets pour le jeu plateforme 2D

Message par threedslider »

Oh ! Merci beaucoup ça marche nickel !!

Et encore merci pour le partage :D
Répondre