BASIC:del ZX SPECTRUM al SEGA MEGADRIVE

Cursos, reparaciones, fichas, tutoriales, etc.

Moderador: Fundadores

Avatar de Usuario
tacha
Hermano de Lucifer
Hermano de Lucifer
Mensajes: 2756
Registrado: 04 Abr 2013, 20:22
Ubicación: Montevideo, Uruguay
Contactar:

Re: BASIC:del ZX SPECTRUM al SEGA MEGADRIVE

Mensaje por tacha » 13 Jun 2018, 03:02

Bueno, esto va para largo, el curro me tiene atrapado y he tenido poco tiempo para programar esta ultima semana.
Radiosity escribió:
12 Jun 2018, 11:02
Yo estoy trasteando con el SecondBasic y tiene pinta de ser bastante inestable. Se hecho he comprobado que tiene bugs a la hora de hacer operaciones con variables, de tal forma que un a++ no te funcione pero si un a=a+1 cuando en teoria deberia valer cualquiera de las 2. De hecho el operador ++ es ta permitido pero no siempre funciona bien al igual que los operadores -= y +=. Creo que al final es buena idea portar lo que llevo a SGDK y seguir desde ahi.

Por cierto, ya que estoy aprevecho para preguntar algo sobre SecondBasic: ¿ que diferencia hay entre drawtiles y drawtileinc? Alguno de ellos dibuja los tiles de forma temporal como se dibujan los sprites?.
¿cómo estás Radiosity? nunca te habia visto por este foro, jejeje...

Te comento de que en el juego en el que estoy ya llevo más de 15000 lineas. Todo el tiempo estoy utilizando la expresión (a++) ,(a--) y si que funciona.
Second Basic si tiene algunos bugs, de hecho casi siempre estoy reportando a su creador todos los que voy encontrando y él siempre responde en 4hs como mucho, reparando este compilador siempre.

Me gustaría ver tu código ¿puedes mostrarlo? me intriga saber que es lo que te está dando problema. Gracias.

Por otra parte:

Command_DRAWTILES:
Syntax: DrawTiles <label>, <tile vram offset>, <x>, <y>, <width>, <height>, [Data Label Offset]
Description: Draws one or more tiles on the screen at <X> and <Y> that is <Width> and <Height> big. One unit of X, Y, Width, or Height is equal to one 8*8 cell. X and Y start at (0,0), and that is the very upper left part of the screen. <Tile VRAM Offset> is the tile number that will be drawn. One unit of this is equal to one 8*8 tile. <Label> is a data label were the drawing map is located. The data has to be in byte format (using Data). The command draws the map in the order from left to right, up to down.

Con este comando lo que haces es dibujar en una posicion x,y con ancho y largos determinados, una imagen pero con un mapa de tiles, de modo que si algun tile se repite en la imagen, éste no se repetirá en memoria de tiles (vram), así puedes ahorrar los "slots" de tiles o memoria de tiles.

Con los siguientes comandos imprimes una imagen en una posicion x,y con ancho y alto determinados, peero éstos te toman el 'tile vram offset' como primer tile y van utilizando los tiles uno en uno como esten ordenados en vram. Por ejemplo si tu imagen tiene 8 tiles de ancho por 8 de altura tu imagen tendrá si o si 64 tiles sin importar que algun tile se repita. Drawtilesinc dibuja de izquierda hacia derecha y luego hacia abajo. Drawtilesinc2 dibuja de arriba hacia abajo y luego hacia la derecha. 5tt

Command_DRAWTILESINC:
Syntax: DrawTilesInc <tile vram offset>, <x>, <y>, <width>, <height>
Description: Draws one or more tiles on the screen at <X> and <Y> that is <Width> and <Height> big. One unit of X, Y, Width, or Height is equal to one 8*8 cell. X and Y start at (0,0), and that is the very upper left part of the screen. <Tile VRAM Offset> is the tile number that will be drawn. One unit of this is equal to one 8*8 tile. Just like the DrawTiles command, but this one doesn't use any data labels. Instead, it starts drawing using the data from <tile vram offset>, and incrementing it by 1 for each tile drawn. Drawing starts from the left, then goes to the right. When it reaches the maximum width, the command will then move the drawing cursor down, and then start drawing from the left to right again.

Command_DRAWTILESINC2:
Syntax: DrawTilesInc <tile vram offset>, <x>, <y>, <width>, <height>
Description: Draws one or more tiles on the screen at <X> and <Y> that is <Width> and <Height> big. One unit of X, Y, Width, or Height is equal to one 8*8 cell. X and Y start at (0,0), and that is the very upper left part of the screen. <Tile VRAM Offset> is the tile number that will be drawn. One unit of this is equal to one 8*8 tile. Just like the DrawTiles command, but this one doesn't use any data labels. Instead, it starts drawing using the data from <tile vram offset>, and incrementing it by 1 for each tile drawn. Drawing starts from the top, then draws going down. When it reaches the maximum height, the command will then move the drawing cursor right, and then start drawing top to bottem again.

Radiosity, te interesaría participar traducioendo la sintaxis a SGDK de lo que yo vaya exponiendo en SB aqui?
A mi me interesaría muchísimo.

Pronto me pongo al tiro con el hilo, ya he estado preparando varis cosas a la vez, solo me falta tiempo para subirlo.

saludos.
Algun día todos vamos a morir, la vida es momentanea.

Avatar de Usuario
Lord Raptor
Aspirante a demonio
Aspirante a demonio
Mensajes: 333
Registrado: 15 Oct 2014, 23:41
Contactar:

Re: BASIC:del ZX SPECTRUM al SEGA MEGADRIVE

Mensaje por Lord Raptor » 13 Jun 2018, 04:25

Drawtileinc .... es para dibujar tiles incrementalmente [tal y como se puede deducir]
Tienes una ayuda en formato hmtl y tipo help, en el propio IDE.

Edito: no ví ke había una segunda pág.
Yo es lo primero ke me hice, traducirme los comandos/funciones del lenguaje.
...Por ké kuesta más karo pagarse un entierro ke kobrarse una vida ?!
Miembro activo en la demoscene de Amiga desde 1992

Avatar de Usuario
tacha
Hermano de Lucifer
Hermano de Lucifer
Mensajes: 2756
Registrado: 04 Abr 2013, 20:22
Ubicación: Montevideo, Uruguay
Contactar:

Re: BASIC:del ZX SPECTRUM al SEGA MEGADRIVE

Mensaje por tacha » 13 Jun 2018, 07:10

Lord Raptor escribió:
13 Jun 2018, 04:25
Drawtileinc .... es para dibujar tiles incrementalmente [tal y como se puede deducir]
Tienes una ayuda en formato hmtl y tipo help, en el propio IDE.

Edito: no ví ke había una segunda pág.
Yo es lo primero ke me hice, traducirme los comandos/funciones del lenguaje.
Es que mis dobleses en el cerebro no me dejan expresarme bien XD a demás de haber dormido 2 horas por el curro... juajua. Gracias por aclarar Lord!!
Algun día todos vamos a morir, la vida es momentanea.

Radiosity
El infierno es su lugar
El infierno es su lugar
Mensajes: 110
Registrado: 01 Nov 2015, 18:35
Contactar:

Re: BASIC:del ZX SPECTRUM al SEGA MEGADRIVE

Mensaje por Radiosity » 13 Jun 2018, 08:35

Gracias por responder. No me importa en absoluto mostrart el codigo cuando este en casa lo pongo. Lo de los tiles creo que me explique mal. En VRam si que sólo tengo 1 tile cargado pero creo recordar que a la hora de dibujarlos tenemos unas restricciones como con los sprites que no pueden superar los 20 totales y 10 en el mismo scanline. EL caso concreto es una raña que sube y baja y cada vez la altura de bajada es distinta. El tile lo quiero dibujar para construir la tela de araña desde donde partehasta donde esta la araña en cada iteracion del bucle. Usando draw tile dibujaria tiles en pantalla infinitamente porque siempre esta subiendo y bajando aun que solo uso 1 tile en VRAM para representar cada segmento de tela de araña.Espero haberme explicado. Me encantaria participar pero aun no domino SGDK seria mas un atraso que una ayuda, sorry.

Avatar de Usuario
tacha
Hermano de Lucifer
Hermano de Lucifer
Mensajes: 2756
Registrado: 04 Abr 2013, 20:22
Ubicación: Montevideo, Uruguay
Contactar:

Re: BASIC:del ZX SPECTRUM al SEGA MEGADRIVE

Mensaje por tacha » 07 Ago 2018, 10:49

Bueno, me siento en deuda... mi tiempo es muy escaso, así que aunque no sea a modo de tutorial por el momento voy a postear trozos de código entendible, para que veaís lo que hace.

primera prueba de generar 80 sprites (límite maximo de la megadrive) y luego moverlos individualmente

Código: Seleccionar todo

inicio:
	Dim a(79) As Integer
	Dim xx As Integer
	Dim yy As Integer
	Dim f As Integer
	
	For f=0 To 79
		a(f)=AddSprite(1,1)
		PropSprite a(f),1+Rnd(127),1
		MoveSprite a(f),256,256
	Next f
	
	Print "funca"
	
	f=1
	'  >  <		
	
	For y=128 To 128+(29*8) Step 16
	For x=128 To 128+(39*8) Step 16
		
			xx=256
			yy=256
			Do
				If xx<x Then
					xx++
				End If
				If xx>x Then
					xx--
				End If
				If yy<y Then
					yy++
				End If
				If yy>y Then	
					yy--
				End If
				If xx=x [And] yy=y Then
					Exit Loop
				End If
				MoveSprite a(f),xx,yy
				For h=1 To 100
				Next h
				If f=81 Then GoTo kuk
		Loop
		f++
		
	Next x
	Next y
kuk:
	Sleep 100
	FreeAllSprites
	GoTo inicio
[BBvideo=560,315]

https://youtu.be/3gBdBmf5990[/BBvideo]
Algun día todos vamos a morir, la vida es momentanea.

Avatar de Usuario
tacha
Hermano de Lucifer
Hermano de Lucifer
Mensajes: 2756
Registrado: 04 Abr 2013, 20:22
Ubicación: Montevideo, Uruguay
Contactar:

Re: BASIC:del ZX SPECTRUM al SEGA MEGADRIVE

Mensaje por tacha » 07 Ago 2018, 11:02

Lluvia de 80 sprites de 2*2 (tiles. como no pierdo tiempo en gráficos, utilizo el codigo ASCII que viene por defecto)

Código: Seleccionar todo

inicio:
	Dim a(79) As Integer
	Dim xx As Integer
	Dim yy As Integer
	Dim f As Integer
	
	For f=0 To 79
		a(f)=AddSprite(2,2)
		PropSprite a(f),Rnd(255),Rnd(4)
		MoveSprite a(f),280,224
	Next f
	Print "funca"
	
	f=0
	'  >  <		
	
	For y=128 To 128+(27*8) Step 16
	For x=128 To 128+(37*8) Step 16
		
			xx=280
			yy=224
			Randomize
			xxx=128+(Rnd(300))
			yyy=128+(Rnd(220))
			
			Do
				If xx<xxx Then
					xx++
				End If
				If xx>xxx Then
					xx--
				End If
				If yy<yyy Then
					yy++
				End If
				If yy>yyy Then	
					yy--
				End If
				If xx=xxx [And] yy=yyy Then
					Exit Loop
				End If
				MoveSprite a(f),xx,yy
				For h=1 To f
					ShiftSprite a(h), 0,1
				Next h
				If f=80 Then GoTo kuk
		Loop
		f++
		
	Next x
	Next y
kuk:
	FreeAllSprites
	GoTo inicio
[BBvideo=560,315]
https://youtu.be/YvGstZY0-EM[/BBvideo]
Algun día todos vamos a morir, la vida es momentanea.

Avatar de Usuario
tacha
Hermano de Lucifer
Hermano de Lucifer
Mensajes: 2756
Registrado: 04 Abr 2013, 20:22
Ubicación: Montevideo, Uruguay
Contactar:

Re: BASIC:del ZX SPECTRUM al SEGA MEGADRIVE

Mensaje por tacha » 07 Ago 2018, 11:16

80 Sprites en pantalla, movimientos aleatorios (Me recuerda un poco a Sabre Wulf, Starquake, juajua)

Código: Seleccionar todo

inicio:
	Dim a(79) As Integer
	Dim xx As Integer
	Dim yy As Integer
	Dim f As Integer
	Dim z As Integer
	
	z=1
	
	For f=0 To 79
		a(f)=AddSprite(2,2)
		PropSprite a(f),Rnd(255),Rnd(4)
		MoveSprite a(f),280,224
	Next f
	'Print "MegaDemencia XD"
	
	f=0
	'  >  <		
kuk3:
	z++
	If z=81 Then
		 z=0
	End If
	Do
		
			xx=SpritePosX(f)
			yy=SpritePosY(f)
			Randomize
			Randomize
			Randomize
			xxx=128+(Rnd(300))
			yyy=128+(Rnd(220))
			
			Do
				'For q=1 To 4
					If xx<xxx Then
						xx++
					End If
					If xx>xxx Then
						xx--
					End If
					If yy<yyy Then
						yy++
					End If
					If yy>yyy Then	
						yy--
					End If
					If xx=xxx [And] yy=yyy Then
						Exit Loop
					End If
					MoveSprite a(f),xx,yy
				'Next q
				For h=0 To 80
					ShiftSprite a(h), Rnd(3)-1,Rnd(3)-1
				Next h
				If f=z Then GoTo kuk
		Loop
		f++
		
	Loop
kuk:
		f=0
		Do
		
			xx=SpritePosX(f)
			yy=SpritePosY(f)
			Randomize
			xxx=288
			yyy=240
			
			Do
				'For q=1 To 4
					If xx<xxx Then
						xx++
					End If
					If xx>xxx Then
						xx--
					End If
					If yy<yyy Then
						yy++
					End If
					If yy>yyy Then	
						yy--
					End If
					If xx=xxx [And] yy=yyy Then
						Exit Loop
					End If
					MoveSprite a(f),xx,yy
				'Next q
				For h=0 To 80
					xx=SpritePosX(f)
					yy=SpritePosY(f)
					If xx<xxx Then
						ShiftSprite a(h), 1,0
					End If
					If xx>xxx Then
						ShiftSprite a(h), -1,0
					End If
					If yy<yyy Then
						ShiftSprite a(h), 0,1
					End If
					If yy>yyy Then	
						ShiftSprite a(h), 0,-1
					End If
					ShiftSprite a(f), Rnd(3)-1,Rnd(3)-1
					ShiftSprite a(h), Rnd(3)-1,Rnd(3)-1
					
					
				Next h
				f++
				If f=80 Then
					f=0
					GoTo kuk3
				End If
				'Exit Loop
				
		Loop
		'f++
		
	Loop
kuk2:
	FreeAllSprites
	GoTo inicio
[BBvideo=560,315]https://youtu.be/ssIMChRj7xk[/BBvideo]
Última edición por tacha el 07 Ago 2018, 11:28, editado 1 vez en total.
Algun día todos vamos a morir, la vida es momentanea.

Avatar de Usuario
tacha
Hermano de Lucifer
Hermano de Lucifer
Mensajes: 2756
Registrado: 04 Abr 2013, 20:22
Ubicación: Montevideo, Uruguay
Contactar:

Re: BASIC:del ZX SPECTRUM al SEGA MEGADRIVE

Mensaje por tacha » 07 Ago 2018, 11:27

Última del día:

Lo interesante de esto no es como se ve, sino lo que hace realmente :D

Defino las variables de 4 objetos para que se hubiquen en una dirección de memoria específica, tambien hubico variables que luego procesaré con un trozo de código. Lo que hago en este ejemplo es "swichtear" a modo de paginacion y en ASM:

- Variables del objeto 1 al lugar de las variables a procesar
- proceso
- devuelvo las variables a su posicion de memoria

- Variables del objeto 2 al lugar de las variables a procesar
- proceso
- devuelvo las variables a su posicion de memoria

- Variables del objeto 3 al lugar de las variables a procesar
- proceso
- devuelvo las variables a su posicion de memoria

- Variables del objeto 4 al lugar de las variables a procesar
- proceso
- devuelvo las variables a su posicion de memoria

- Muevo Sprites a sus nuevas posciciones

De esta manera se pueden tener múltiples enemigos (por ejemplo) utilizando la misma rutina para realizar sus acciones. Aqui la rutina es muy simple. Por comentar algo, estoy utilizando el mísmo método para tener varios enemigos al mismo tiempo en mi juego, la cantidad de variables es mucho mayor, también así la cantidad de acciones. Pero bueno, en vez de repetir código solo muevo variables de lugar y ejecuto.

Código: Seleccionar todo

	Global a As Integer At &hFF0B48
	Global b As Integer At &hFF0B4A
	Global x As Integer At &hFF0B4C
	Global y As Integer At &hFF0B4E

	Global pelota1 As Integer At &hFF0B58
	Global pelota2 As Integer At &hFF0B68
	Global pelota3 As Integer At &hFF0B78	
	Global pelota4 As Integer At &hFF0B88	
	
	Global a_pelota1 As Integer At &hFF0B50
	Global b_pelota1 As Integer At &hFF0B52
	Global x_pelota1 As Integer At &hFF0B54
	Global y_pelota1 As Integer At &hFF0B56
	
	Global a_pelota2 As Integer At &hFF0B60
	Global b_pelota2 As Integer At &hFF0B62
	Global x_pelota2 As Integer At &hFF0B64
	Global y_pelota2 As Integer At &hFF0B66
	
	Global a_pelota3 As Integer At &hFF0B70
	Global b_pelota3 As Integer At &hFF0B72
	Global x_pelota3 As Integer At &hFF0B74
	Global y_pelota3 As Integer At &hFF0B76
	
	Global a_pelota4 As Integer At &hFF0B80
	Global b_pelota4 As Integer At &hFF0B82
	Global x_pelota4 As Integer At &hFF0B84
	Global y_pelota4 As Integer At &hFF0B86
	
	x=200
	y=200
	a=1
	b=1
	
	x_pelota1=150
	x_pelota2=190
	x_pelota3=160
	x_pelota4=230
	
	y_pelota1=210
	y_pelota2=290
	y_pelota3=200
	y_pelota4=129
	
	pelota1=AddSprite(1,1)
	pelota2=AddSprite(1,1)
	pelota3=AddSprite(1,1)
	pelota4=AddSprite(1,1)
	PropSprite pelota1,1,1
	PropSprite pelota2,2,1
	PropSprite pelota3,3,1
	PropSprite pelota4,4,1
	
	
'--------- LOOP -------------------------------------------------------------	
	Do
		GoSub pelota1_in
		GoSub mover_pelota
		GoSub pelota1_out
		
		GoSub pelota2_in
		GoSub mover_pelota
		GoSub pelota2_out
		
		GoSub pelota3_in
		GoSub mover_pelota
		GoSub pelota3_out
		
		GoSub pelota4_in
		GoSub mover_pelota
		GoSub pelota4_out
		
		GoSub mover_sprites	
		Sleep 1
	Loop
'------- unica rutina de movimiento ------------------------------------------	
mover_pelota:
		Select Case a
			Case 0:
				x--
				If x=128 Then
					a=1
				End If
			Exit Select
			Case 1:
				x++
				If x=428 Then
					a=0
				End If
			Exit Select
		End Select
		Select Case b
			Case 0:
				y--
				If y=128 Then
					b=1
				End If
			Exit Select
			Case 1:
				y++
				If y=320 Then
					b=0
				End If
			Exit Select
		End Select
	Return
'--------- mueve sprites -----------------------------------------	
mover_sprites:
		MoveSprite pelota1,x_pelota1,y_pelota1
		MoveSprite pelota2,x_pelota2,y_pelota2
		MoveSprite pelota3,x_pelota3,y_pelota3
		MoveSprite pelota4,x_pelota4,y_pelota4
	Return
	
'--------- mover pelota 1 in --------------------------------------------------
pelota1_in:
		Asm	
			move.w $FF0B50,$FF0B48
			move.w $FF0B52,$FF0B4A
			move.w $FF0B54,$FF0B4C
			move.w $FF0B56,$FF0B4E
		End Asm
	Return
	
pelota1_out:
		Asm	
			move.w $FF0B48,$FF0B50
			move.w $FF0B4A,$FF0B52
			move.w $FF0B4C,$FF0B54
			move.w $FF0B4E,$FF0B56
		End Asm
	Return
'--------- mover pelota 2 in --------------------------------------------------
pelota2_in:
		Asm	
			move.w $FF0B60,$FF0B48
			move.w $FF0B62,$FF0B4A
			move.w $FF0B64,$FF0B4C
			move.w $FF0B66,$FF0B4E
		End Asm
	Return
	
pelota2_out:
		Asm	
			move.w $FF0B48,$FF0B60
			move.w $FF0B4A,$FF0B62
			move.w $FF0B4C,$FF0B64
			move.w $FF0B4E,$FF0B66
		End Asm
	Return
'--------- mover pelota 3 in --------------------------------------------------
pelota3_in:
		Asm	
			move.w $FF0B70,$FF0B48
			move.w $FF0B72,$FF0B4A
			move.w $FF0B74,$FF0B4C
			move.w $FF0B76,$FF0B4E
		End Asm
	Return
	
pelota3_out:
		Asm	
			move.w $FF0B48,$FF0B70
			move.w $FF0B4A,$FF0B72
			move.w $FF0B4C,$FF0B74
			move.w $FF0B4E,$FF0B76
		End Asm
	Return
'--------- mover pelota 4 in --------------------------------------------------
pelota4_in:
		Asm	
			move.w $FF0B80,$FF0B48
			move.w $FF0B82,$FF0B4A
			move.w $FF0B84,$FF0B4C
			move.w $FF0B86,$FF0B4E
		End Asm
	Return
	
pelota4_out:
		Asm	
			move.w $FF0B48,$FF0B80
			move.w $FF0B4A,$FF0B82
			move.w $FF0B4C,$FF0B84
			move.w $FF0B4E,$FF0B86
		End Asm
	Return
[BBvideo=560,315]https://youtu.be/QCdcrqFBrHg[/BBvideo]


Espero les pueda servir de algo. En unos días vendré con más pequeñas rutinas.

Saludos.
Algun día todos vamos a morir, la vida es momentanea.

Avatar de Usuario
tacha
Hermano de Lucifer
Hermano de Lucifer
Mensajes: 2756
Registrado: 04 Abr 2013, 20:22
Ubicación: Montevideo, Uruguay
Contactar:

Re: BASIC:del ZX SPECTRUM al SEGA MEGADRIVE

Mensaje por tacha » 07 Ago 2018, 16:24

Bueno, como hacer fuego+humo, aqui la rutina que hice para ello:

Código: Seleccionar todo

	Cls

	Global cantidad As Integer
	cantidad=40
	
	Dim sprt(40,4) As Integer
	
	Global random As Integer
	Global xsprite As Integer
	Global ysprite As Integer
	Global sprite3 As Integer
	
	Global longitud1 As Integer
	Global gravedad As Integer
	
	BgColor 0,0
	
	longitud1=2
	gravedad=6
	
	LoadTiles avion_1_tiles,291,224
	Palettes avion_1_pal,0,0,16
	
	xsprite=268
	ysprite=253
	
	'-------posiciona x,y
	LoadTiles tiledata_explosion_001,96,128
	Palettes pallettedata_explosion_001,1,0,16
	
	For f=1 To 60
		sprt(f,1)=xsprite-f'(f*4)
		sprt(f,2)=ysprite
	Next f
	
	For f=1 To cantidad
		vram=(f-1)*32
		While vram>159
			vram=vram-160
		Wend
		sprt(f,0)=AddSprite(4,4)
	Next f

	Do
	
		j=JoyPad(0)
		If j.2 Then xsprite--
		If j.3 Then xsprite++
		If j.0 Then ysprite--
		If j.1 Then ysprite++
		
		If j.4 And longitud1>1 Then longitud1--
		If j.5 And longitud1<10 Then longitud1++
		If j.6 And gravedad>1 Then gravedad--
		If j.7 And gravedad<20 Then gravedad++

	
	For f=1 To cantidad
		If gravedad<11 Then 
			sprt(f,1)=sprt(f,1)-Rnd(gravedad)
		Else 
			sprt(f,1)=sprt(f,1)+Rnd(gravedad-10)
		End If
		sprt(f,4)++
		
		sprite3=sprt(f,4)
		sprite3=(sprite3)/longitud1 ' distancia del rojo
		sprite3=sprite3*16
		
		If sprite3>cantidad+50 Then
			PropSprite sprt(f,0),208,1
		Else
			PropSprite sprt(f,0),128+sprite3,1
		End If
		
		If sprt(f,1)<cantidad Then
			sprt(f,1)=xsprite
			sprt(f,2)=ysprite
			sprt(f,4)=0
			PropSprite sprt(f,0),128,1
		End If
		If sprt(f,2)<cantidad Then
			sprt(f,1)=xsprite
			sprt(f,2)=ysprite
			sprt(f,4)=0
			PropSprite sprt(f,0),128,1
		End If
		
		sprite3=sprt(f,4)/3
		Randomize
		random=Rnd(6+(f/18))
		sprt(f,2)=sprt(f,2)+random-7
		MoveSprite sprt(f,0),sprt(f,1),sprt(f,2)
	Next f
	Sleep 2
	Loop
	
	
[BBvideo=560,315]https://www.youtube.com/watch?v=Jl0EAlJ ... e=youtu.be[/BBvideo]

Los gráficos se los paso por privado ;)
Algun día todos vamos a morir, la vida es momentanea.

Avatar de Usuario
tacha
Hermano de Lucifer
Hermano de Lucifer
Mensajes: 2756
Registrado: 04 Abr 2013, 20:22
Ubicación: Montevideo, Uruguay
Contactar:

Re: BASIC:del ZX SPECTRUM al SEGA MEGADRIVE

Mensaje por tacha » 08 Ago 2018, 14:56

Scalling con sprites en SECOND BASIC - MEGADRIVE:

Código: Seleccionar todo

	Enable VBlank
	On VBlank GoSub vint

	Global sprites(80) As Integer
	Global scall_a As Integer
	Global scall_b As Integer
	Global scall_c As Integer
	Global scall_Z As Integer
	Global zoom_fine As Integer
	
	Global spritXY(9) As Integer
	
	Global xsprite(9) As Integer
	Global ysprite(9) As Integer
	Global xxsprite As Integer
	Global yysprite As Integer
	
	Global sprit(9) As Integer
	
	LoadTiles tiles,81,128
	Palettes pal,1,0,16
	
	For f=1 To 80
			sprites(f)=AddSprite(1,1)
			PropSprite sprites(f),127+f,1
	Next f

	xxsprite=200
	yysprite=200
	scall_b=8
	zoom_fine=0
	scall_a=0
	scall_z=0

	Gosub make

	Do
	j=JoyPad(0)
'	End If
	Sleep 3
	
	If j.6 And scall_Z>0 Then
		scall_z--
		GoSub escalame_esta
		GoSub make
	End If
	If j.4 And scall_Z<24 Then
		scall_z++
		GoSub escalame_esta
		GoSub make
	End If
	
	
	Loop




ya:
	scall_b=8
	zoom_fine=0
	scall_a=0

Return


escalame_esta:
		scall_b=(scall_z/8)-1
		scall_b=scall_z-((scall_z/8)-1)
		If scall_z<9 Then
			scall_b=8
			scall_a=scall_z
		End If
		If scall_z>=8 And scall_z<16 Then
			scall_b=7
			scall_a=scall_z-8
		End If
		If scall_z>=16  Then
			scall_b=6
			scall_a=scall_z-16
		End If
		For f=1 To 9
			sprit(f)=f*(scall_b)
		Next f

	Select Case scall_a
		Case 0:
		Exit Select
		Case 1:
			zoom_fine=4
			GoSub escalame_a
		Exit Select
		Case 2:
			zoom_fine=2
			GoSub escalame_a
			zoom_fine=6
			GoSub escalame_a
		
		Exit Select
		Case 3:
			zoom_fine=1
			GoSub escalame_a
			zoom_fine=4
			GoSub escalame_a
			zoom_fine=7
			GoSub escalame_a
		Exit Select
		Case 4:
			zoom_fine=1
			GoSub escalame_a
			zoom_fine=3
			GoSub escalame_a
			zoom_fine=5
			GoSub escalame_a
			zoom_fine=7
			GoSub escalame_a
		Exit Select
		Case 5:
			zoom_fine=1
			GoSub escalame_a
			zoom_fine=2
			GoSub escalame_a
			zoom_fine=4
			GoSub escalame_a
			zoom_fine=6
			GoSub escalame_a
			zoom_fine=7
			GoSub escalame_a
		Exit Select
		Case 6:
			zoom_fine=1
			GoSub escalame_a
			zoom_fine=2
			GoSub escalame_a
			zoom_fine=3
			GoSub escalame_a
			zoom_fine=5
			GoSub escalame_a
			zoom_fine=6
			GoSub escalame_a
			zoom_fine=7
			GoSub escalame_a
		Exit Select
		Case 7:
			zoom_fine=1
			GoSub escalame_a
			zoom_fine=2
			GoSub escalame_a
			zoom_fine=3
			GoSub escalame_a
			zoom_fine=4
			GoSub escalame_a
			zoom_fine=5
			GoSub escalame_a
			zoom_fine=6
			GoSub escalame_a
			zoom_fine=7
			GoSub escalame_a
		Exit Select
		Case 8:
			zoom_fine=1
			GoSub escalame_a
			zoom_fine=2
			GoSub escalame_a
			zoom_fine=3
			GoSub escalame_a
			zoom_fine=4
			GoSub escalame_a
			zoom_fine=5
			GoSub escalame_a
			zoom_fine=6
			GoSub escalame_a
			zoom_fine=7
			GoSub escalame_a
			zoom_fine=8
			GoSub escalame_a
		Exit Select
		Case 9:
		Exit Select
		Case 10:
		Exit Select
	End Select
	
	Return
	
escalame_a:

		For f=zoom_fine To 9
			sprit(f)--
		Next f
	Return
	
make:
		For f=1 To 9
			xsprite(f)=sprit(f)+xxsprite
			ysprite(f)=sprit(f)+yysprite
		Next f
		VINT_move=1
		
		Locate 0,0
		Print "Floppng recontra puto"
	Return


VINT:
	Select Case vint_move
		Case 0:
		Exit Select
		Case 1:
			f=1
			For x=1 To 9
			For y=1 To 9
			'	If f<81 Then
					MoveSprite sprites(f),xsprite(x),ysprite(y)
			'	End If
				f++
			Next y
			Next x	
			vint_move=0
		Exit Select
	End Select

	Return	
pal:
	DataInt	$0E80,$0E80,$0026,$0000,$0246,$0ACE,$0248,$0446
	DataInt	$068A,$0868,$0242,$0C84,$0284,$0A86,$0422,$0000
	
tiles:
	DataLong	$11111111	' Tile #0
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111	' Tile #1
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111112
	DataLong	$11111172	' Tile #2
	DataLong	$11111922
	DataLong	$11111262
	DataLong	$11116633
	DataLong	$11152333
	DataLong	$11163323
	DataLong	$11172223
	DataLong	$11122623
	DataLong	$11222223	' Tile #3
	DataLong	$18226223
	DataLong	$17262233
	DataLong	$12222233
	DataLong	$12262333
	DataLong	$16622233
	DataLong	$12262233
	DataLong	$12222333
	DataLong	$12223333	' Tile #4
	DataLong	$15233333
	DataLong	$11233333
	DataLong	$11233333
	DataLong	$11133333
	DataLong	$11173333
	DataLong	$11117333
	DataLong	$11111523
	DataLong	$11111111	' Tile #5
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111	' Tile #6
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111	' Tile #7
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111	' Tile #8
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111113
	DataLong	$11111133
	DataLong	$11111533
	DataLong	$11111333
	DataLong	$11117333
	DataLong	$11111111	' Tile #9
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111112	' Tile #10
	DataLong	$11111722
	DataLong	$11117222
	DataLong	$11146232
	DataLong	$11262332
	DataLong	$12262326
	DataLong	$26626622
	DataLong	$66322222
	DataLong	$23333223	' Tile #11
	DataLong	$33333262
	DataLong	$33333462
	DataLong	$33333422
	DataLong	$33333666
	DataLong	$33333622
	DataLong	$33333262
	DataLong	$33333266
	DataLong	$33333222	' Tile #12
	DataLong	$33333222
	DataLong	$33333655
	DataLong	$33337555
	DataLong	$33335555
	DataLong	$33335555
	DataLong	$33325555
	DataLong	$33325555
	DataLong	$33365555	' Tile #13
	DataLong	$33365558
	DataLong	$33365558
	DataLong	$33375558
	DataLong	$33375555
	DataLong	$33235555
	DataLong	$32228555
	DataLong	$22222555
	DataLong	$58666855	' Tile #14
	DataLong	$11111155
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$1111111D	' Tile #15
	DataLong	$11111113
	DataLong	$11111113
	DataLong	$11111113
	DataLong	$11111113
	DataLong	$11111183
	DataLong	$11111733
	DataLong	$11117333
	DataLong	$11117333	' Tile #16
	DataLong	$11111333
	DataLong	$11111333
	DataLong	$11117333
	DataLong	$11133333
	DataLong	$11133333
	DataLong	$11333333
	DataLong	$11E33333
	DataLong	$11333333	' Tile #17
	DataLong	$13333333
	DataLong	$73333333
	DataLong	$33333333
	DataLong	$33333333
	DataLong	$33333333
	DataLong	$33333333
	DataLong	$33333333
	DataLong	$11111112	' Tile #18
	DataLong	$11111122
	DataLong	$11111422
	DataLong	$11116222
	DataLong	$11112222
	DataLong	$11162222
	DataLong	$11622222
	DataLong	$16222223
	DataLong	$26222222	' Tile #19
	DataLong	$26233322
	DataLong	$22333333
	DataLong	$23333333
	DataLong	$23333333
	DataLong	$23333333
	DataLong	$23333333
	DataLong	$33333333
	DataLong	$33333333	' Tile #20
	DataLong	$32222233
	DataLong	$22222333
	DataLong	$22222223
	DataLong	$62222222
	DataLong	$66622333
	DataLong	$22222333
	DataLong	$22222322
	DataLong	$22233322	' Tile #21
	DataLong	$33332226
	DataLong	$56333266
	DataLong	$55833222
	DataLong	$55583222
	DataLong	$58556262
	DataLong	$88555222
	DataLong	$88855222
	DataLong	$86855666	' Tile #22
	DataLong	$88855888
	DataLong	$88855555
	DataLong	$88885555
	DataLong	$88855555
	DataLong	$58855555
	DataLong	$55868555
	DataLong	$55588555
	DataLong	$55555555	' Tile #23
	DataLong	$55555555
	DataLong	$55558855
	DataLong	$85558555
	DataLong	$85555555
	DataLong	$55555555
	DataLong	$15555555
	DataLong	$55555555
	DataLong	$35555555	' Tile #24
	DataLong	$35555555
	DataLong	$36555555
	DataLong	$34555555
	DataLong	$33555555
	DataLong	$33355555
	DataLong	$33338555
	DataLong	$33333855
	DataLong	$33333385	' Tile #25
	DataLong	$33333336
	DataLong	$33333333
	DataLong	$33333333
	DataLong	$33333333
	DataLong	$33333333
	DataLong	$33333333
	DataLong	$33333333
	DataLong	$33333333	' Tile #26
	DataLong	$33333333
	DataLong	$33333333
	DataLong	$33333333
	DataLong	$33333333
	DataLong	$33333333
	DataLong	$33333333
	DataLong	$33333333
	DataLong	$22222232	' Tile #27
	DataLong	$22322222
	DataLong	$22222322
	DataLong	$22223222
	DataLong	$22222222
	DataLong	$22222222
	DataLong	$23222222
	DataLong	$32222222
	DataLong	$22222222	' Tile #28
	DataLong	$22222226
	DataLong	$22222222
	DataLong	$32222222
	DataLong	$33322222
	DataLong	$33333222
	DataLong	$33323323
	DataLong	$33333333
	DataLong	$33333333	' Tile #29
	DataLong	$33333333
	DataLong	$33333333
	DataLong	$33333333
	DataLong	$23333333
	DataLong	$33333333
	DataLong	$33333333
	DataLong	$22333332
	DataLong	$66222668	' Tile #30
	DataLong	$62222685
	DataLong	$62226655
	DataLong	$22268855
	DataLong	$22668555
	DataLong	$22685555
	DataLong	$26855555
	DataLong	$26855555
	DataLong	$68555555	' Tile #31
	DataLong	$65555555
	DataLong	$55555555
	DataLong	$55555555
	DataLong	$55555555
	DataLong	$55555555
	DataLong	$55555555
	DataLong	$55555555
	DataLong	$55555555	' Tile #32
	DataLong	$55555555
	DataLong	$55555555
	DataLong	$55555555
	DataLong	$55555555
	DataLong	$55555555
	DataLong	$55555555
	DataLong	$55555555
	DataLong	$55555555	' Tile #33
	DataLong	$55555555
	DataLong	$55555555
	DataLong	$55555555
	DataLong	$55555555
	DataLong	$55555555
	DataLong	$55555555
	DataLong	$55555555
	DataLong	$55555555	' Tile #34
	DataLong	$55555555
	DataLong	$65555555
	DataLong	$38555555
	DataLong	$33655555
	DataLong	$33345555
	DataLong	$33336555
	DataLong	$33333455
	DataLong	$33333338	' Tile #35
	DataLong	$33333333
	DataLong	$33333333
	DataLong	$33333333
	DataLong	$33333333
	DataLong	$33333333
	DataLong	$33333333
	DataLong	$33333333
	DataLong	$22222224	' Tile #36
	DataLong	$22446666
	DataLong	$22266666
	DataLong	$22666666
	DataLong	$22226666
	DataLong	$66266666
	DataLong	$22226666
	DataLong	$66666666
	DataLong	$66666666	' Tile #37
	DataLong	$24688662
	DataLong	$26666662
	DataLong	$26626666
	DataLong	$22662222
	DataLong	$22222333
	DataLong	$33333223
	DataLong	$33333333
	DataLong	$33333333	' Tile #38
	DataLong	$33333333
	DataLong	$33333333
	DataLong	$33333322
	DataLong	$33222223
	DataLong	$33333333
	DataLong	$32266222
	DataLong	$66688665
	DataLong	$55555555	' Tile #39
	DataLong	$55555555
	DataLong	$55555555
	DataLong	$55555555
	DataLong	$55555555
	DataLong	$55555555
	DataLong	$55555586
	DataLong	$55555555
	DataLong	$55555555	' Tile #40
	DataLong	$55555555
	DataLong	$55555558
	DataLong	$55555543
	DataLong	$55555862
	DataLong	$55555586
	DataLong	$55555558
	DataLong	$55555555
	DataLong	$55555555	' Tile #41
	DataLong	$55555555
	DataLong	$55555555
	DataLong	$55555555
	DataLong	$55555555
	DataLong	$55555555
	DataLong	$55555555
	DataLong	$55555555
	DataLong	$55555555	' Tile #42
	DataLong	$55555555
	DataLong	$55555555
	DataLong	$55555555
	DataLong	$55555555
	DataLong	$55555555
	DataLong	$55555555
	DataLong	$55555555
	DataLong	$55555555	' Tile #43
	DataLong	$55555555
	DataLong	$55555555
	DataLong	$55555555
	DataLong	$55555555
	DataLong	$55555555
	DataLong	$55555555
	DataLong	$55555555
	DataLong	$55555555	' Tile #44
	DataLong	$85555555
	DataLong	$37555555
	DataLong	$33375555
	DataLong	$33333785
	DataLong	$33333311
	DataLong	$3333A111
	DataLong	$33331111
	DataLong	$44223332	' Tile #45
	DataLong	$66222322
	DataLong	$66222332
	DataLong	$26623322
	DataLong	$66622232
	DataLong	$66622333
	DataLong	$66222333
	DataLong	$66622222
	DataLong	$62266623	' Tile #46
	DataLong	$62622222
	DataLong	$66662223
	DataLong	$22222223
	DataLong	$23222322
	DataLong	$33333322
	DataLong	$33332233
	DataLong	$33333333
	DataLong	$33333322	' Tile #47
	DataLong	$33333222
	DataLong	$33332222
	DataLong	$23222222
	DataLong	$33222233
	DataLong	$33333326
	DataLong	$22246666
	DataLong	$55886666
	DataLong	$55555866	' Tile #48
	DataLong	$55555558
	DataLong	$55555555
	DataLong	$55555555
	DataLong	$55555555
	DataLong	$55555555
	DataLong	$66668555
	DataLong	$86222265
	DataLong	$55622222	' Tile #49
	DataLong	$55584333
	DataLong	$66688866
	DataLong	$22244485
	DataLong	$33A24666
	DataLong	$47745666
	DataLong	$84455588
	DataLong	$58555558
	DataLong	$55555558	' Tile #50
	DataLong	$55555555
	DataLong	$55555555
	DataLong	$55555555
	DataLong	$55555555
	DataLong	$55555555
	DataLong	$55555555
	DataLong	$55555555
	DataLong	$55555555	' Tile #51
	DataLong	$55555555
	DataLong	$55555555
	DataLong	$55555555
	DataLong	$55555555
	DataLong	$55555555
	DataLong	$55555588
	DataLong	$55555555
	DataLong	$55555555	' Tile #52
	DataLong	$55555555
	DataLong	$66666666
	DataLong	$55662666
	DataLong	$55666662
	DataLong	$55566666
	DataLong	$55566666
	DataLong	$55556666
	DataLong	$55558648	' Tile #53
	DataLong	$55555555
	DataLong	$55555555
	DataLong	$55555555
	DataLong	$55555551
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$22511111	' Tile #54
	DataLong	$62211111
	DataLong	$26621111
	DataLong	$26422111
	DataLong	$46662211
	DataLong	$32666221
	DataLong	$32666222
	DataLong	$32222222
	DataLong	$33333222	' Tile #55
	DataLong	$33333333
	DataLong	$33332233
	DataLong	$32222223
	DataLong	$24662222
	DataLong	$22222222
	DataLong	$32226622
	DataLong	$22266662
	DataLong	$26662262	' Tile #56
	DataLong	$26222222
	DataLong	$22222222
	DataLong	$22233222
	DataLong	$33322222
	DataLong	$22662222
	DataLong	$66622333
	DataLong	$64222223
	DataLong	$22222333	' Tile #57
	DataLong	$66222333
	DataLong	$58662333
	DataLong	$55588623
	DataLong	$55558854
	DataLong	$55555566
	DataLong	$55555555
	DataLong	$55555555
	DataLong	$68555555	' Tile #58
	DataLong	$22455555
	DataLong	$22455555
	DataLong	$55555555
	DataLong	$55555555
	DataLong	$85555555
	DataLong	$85555555
	DataLong	$85555555
	DataLong	$55555556	' Tile #59
	DataLong	$55555563
	DataLong	$55555584
	DataLong	$55555555
	DataLong	$55555555
	DataLong	$55555555
	DataLong	$55555555
	DataLong	$55555555
	DataLong	$55555555	' Tile #60
	DataLong	$55555555
	DataLong	$55555555
	DataLong	$55555555
	DataLong	$55555555
	DataLong	$58555555
	DataLong	$85565555
	DataLong	$88855555
	DataLong	$58885555	' Tile #61
	DataLong	$55885555
	DataLong	$55855551
	DataLong	$66665511
	DataLong	$62685111
	DataLong	$66651111
	DataLong	$66511111
	DataLong	$65111111
	DataLong	$51111111	' Tile #62
	DataLong	$51111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111	' Tile #63
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$21111111
	DataLong	$22111111	' Tile #64
	DataLong	$22211111
	DataLong	$33221111
	DataLong	$33222111
	DataLong	$32333211
	DataLong	$22332221
	DataLong	$22322332
	DataLong	$22233222
	DataLong	$22222232	' Tile #65
	DataLong	$22222333
	DataLong	$22233333
	DataLong	$23333333
	DataLong	$23333333
	DataLong	$33333333
	DataLong	$33333333
	DataLong	$33333333
	DataLong	$33333333	' Tile #66
	DataLong	$33333332
	DataLong	$33333224
	DataLong	$33322222
	DataLong	$22242222
	DataLong	$66626624
	DataLong	$55558666
	DataLong	$55555555
	DataLong	$55555555	' Tile #67
	DataLong	$55555555
	DataLong	$55555555
	DataLong	$55555865
	DataLong	$55522226
	DataLong	$55822261
	DataLong	$586668B1
	DataLong	$66666811
	DataLong	$24662811	' Tile #68
	DataLong	$7C552551
	DataLong	$4C558511
	DataLong	$85551111
	DataLong	$55551111
	DataLong	$55551111
	DataLong	$55551111
	DataLong	$55551111
	DataLong	$55551111	' Tile #69
	DataLong	$55551111
	DataLong	$55551111
	DataLong	$55551111
	DataLong	$55511111
	DataLong	$55511111
	DataLong	$55111111
	DataLong	$55111111
	DataLong	$51111111	' Tile #70
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111	' Tile #71
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111	' Tile #72
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111	' Tile #73
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$51111111
	DataLong	$25111111
	DataLong	$22611111	' Tile #74
	DataLong	$22271111
	DataLong	$33326111
	DataLong	$33322611
	DataLong	$33322211
	DataLong	$33322261
	DataLong	$33322271
	DataLong	$33322621
	DataLong	$33326681	' Tile #75
	DataLong	$33228411
	DataLong	$22226611
	DataLong	$42266511
	DataLong	$23461111
	DataLong	$22711111
	DataLong	$61111111
	DataLong	$51111111
	DataLong	$51111111	' Tile #76
	DataLong	$51111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111	' Tile #77
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111	' Tile #78
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111	' Tile #79
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111	' Tile #80
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111
	DataLong	$11111111

[BBvideo=560,315]https://www.youtube.com/watch?v=E4ckk8t ... e=youtu.be[/BBvideo]
Algun día todos vamos a morir, la vida es momentanea.

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado