[TUTO] Hello IntyBASIC

Page 3 sur 3 Précédent  1, 2, 3

Aller en bas

Re: [TUTO] Hello IntyBASIC

Message par StudioVetea le Dim 4 Nov 2018 - 8:50

Ahah merci !! Very Happy
Oui il est sympa cet Intybasic, j'y retrouve un peu du BEX en lui.
Il me manque à maîtriser ces collisions BG/Sprite de manière à bien gérer les déplacements et proposer de véritables tableaux, voire plus tard des MAP avec scrolling. Wink
Ce qui est bien avec ces contraintes d'un autre âge, c'est de se creuser la tête pour trouver le Gameplay accrocheur ... On est bien loin de RDR2 !  Mr. Green
J'ai pas mal d'idées en tête en tout cas. Wink
Ceci met mes projets MD en pause, mais c'était déjà un peu le cas ... mais je surfais entre du C et du Basic ( voire du C# en // ).
La clairement, on est en face d'un SDK qui permet direct de tirer le max de cette console atypique. 
Mais elle semble en avoir dans le ventre.

StudioVetea
Patient contaminé

Nombre de messages : 411
Date d'inscription : 10/09/2018

http://www.rolango.fr

Revenir en haut Aller en bas

Re: [TUTO] Hello IntyBASIC

Message par Ithus le Dim 4 Nov 2018 - 8:56

Sympa, ça fonctionne bien.
Les sprites et animations sont soignés, mais j'en attendais pas moins. :3
Juste une remarque: l'ennemi de couleur noire est impossible à semer au bout d'un moment.

Je suis content que tu aies envie d'aller encore plus loin. Very Happy
avatar
Ithus
Patient contaminé

Masculin Nombre de messages : 234
Age : 33
Localisation : Loin
Date d'inscription : 26/10/2009

Revenir en haut Aller en bas

Re: [TUTO] Hello IntyBASIC

Message par StudioVetea le Dim 4 Nov 2018 - 9:05

Oui et c'est un peu grâce à toi ! amoureux
Tu es mon FL de l'Intellivision. Wink
Je vais revoir le gameplay et Gamedesign de toute façon. 
C'était histoire de présenter un truc avec un but. ^^
avatar
StudioVetea
Patient contaminé

Masculin Nombre de messages : 411
Age : 47
Localisation : Hérault
Date d'inscription : 10/09/2018

http://www.rolango.fr

Revenir en haut Aller en bas

Re: [TUTO] Hello IntyBASIC

Message par StudioVetea le Dim 4 Nov 2018 - 11:28



Ah que coucou !

Voici un petit update de Get Papi ! ( déjà la v1.1  Mr. Green )

Un petit peu de piment dans le Gameplay :
Les robots dès qu'ils se touchent se réinitialisent ( Vitesse initiale et mode Chasse OFF ). Donc le joueur doit faire en sorte que les Robots croisent leur chemin. Wink

En attendant de trouver comment gérer les TILE/Collision, c'est un peu plus sympa.
De plus, j'ai ajouté un bruit de pas pour les Sprites et augmenter le temps.

Code:
REM ====================================
 REM ====        GET PAPI !!         ====
 REM ====           V1.1             ====
 REM ====  (c) 2018 STUDIO VETEA     ====
 REM ====================================

 INCLUDE "constants.bas"
 REM INCLUDE "title.bas"
 'Fond Vert
 MODE SCREEN_CS, CS_GREEN, GREEN, GREEN,GREEN
 
 'Déclaration Sprites/TILE
 WAIT
 DEFINE DEF00,4,SpritePapiDROITE_0
 WAIT
 DEFINE DEF04,3,SpriteIADroite
 WAIT
 DEFINE DEF07,3,SpriteIABAS
 WAIT
 DEFINE DEF10,3,SpriteIAHAUT
 wait
 DEFINE 13,2,TilesDecor
 WAIT
 
 'Variables
 DIM LVL(5) 'DIF IA sur la durée
 DIM #TEMP(5) 'Tempo DIF IA
 DIM X1(5) 'POSX IA
 DIM Y1(5) 'POSY IA
 DIM INT(5) 'INT IA
 DIM Sens(5) 'DIRECTION IA
 DIM Chemin(5) 'DISTANCE PARCOURUE IA
 DIM CheminMAX(5) 'DISTANCE MAX IA
 DIM TempoAnimation(5) 'TEMPO ANIMATION IA
 DIM TempoIA(5) 'VITESSE IA
 DIM TempoIA_MAX(5) 'VITESSE MAXI IA

Debut:
 CLS
 'Position/Config Sprites
 for i=1 to 4
 X1(i)=random(100)+8
 Y1(i)=random(60)+8
 if y1(i)<15 then y1(i)=16
 Sens(i)=RAND % 4
 CheminMAX(i)=RAND % 75
 TempoIA(i)=0
 INT(i)=RAND % 50
 TempoIA_MAX(i)=15
 LVL(i)=0
 next
 Direction=1 '0 HAUT, 1 BAS, 2 DROITE, 3 GAUCHE
 VitessePapi=3
 TempoPapi=0
 VitessePapiMax=4
 #Temps=0
 X=64
 Y=48
 Ax=0
 Ay=1
 'Background
 restore Map
 for i=0 to 239
 read value
 if value=0 then
 print at (SCREENPOS(Ax,Ay)) color CS_DARKGREEN, "\270"
 else
 '#ADR=$080A
 '#backtab(i)=#ADR+8*8
 end if
 Ax=Ax+1
 if Ax>19 then
 Ay=Ay+1
 Ax=0
 end if
 next
 
 'Affichage du Temps
 print at (SCREENPOS(5,0)) color CS_WHITE, "TIME :"
 print at (SCREENPOS(12,0)) color CS_WHITE, <3>temps

 'Boucle principale
 while 1
 'Gestion temps
 gosub gestionTime
 'Affichage Sprite
 gosub AffSprite
 'Gestion Collision Sprites
 gosub GestionCollision
 wait
 wend
 
'Gestion Collision Sprites
GestionCollision: PROCEDURE

 if FRAME then
 'Detection de Papi COL0 avec les 4 autres Sprites Ennemis après une FRAME
 IF COL0 AND HIT_SPRITE4+HIT_SPRITE5+HIT_SPRITE6+HIT_SPRITE7 THEN gosub CollisionSPRITE
 'Detection entre IA/Ralentissement de l'IA.
 if COL4 and HIT_SPRITE5+HIT_SPRITE6+HIT_SPRITE7 then
 TempoIA_MAX(1)=15
 INT(1)=0
 LVL(1)=0
 #TEMP(1)=0
 end if
 if COL5 and HIT_SPRITE4+HIT_SPRITE6+HIT_SPRITE7 then
 TempoIA_MAX(2)=15
 INT(2)=0
 LVL(2)=0
 #TEMP(2)=0
 end if
 if COL6 and HIT_SPRITE4+HIT_SPRITE5+HIT_SPRITE7 then
 TempoIA_MAX(3)=15
 INT(3)=0
 LVL(3)=0
 #TEMP(3)=0
 end if
 if COL7 and HIT_SPRITE4+HIT_SPRITE5+HIT_SPRITE6 then
 TempoIA_MAX(4)=15
 INT(4)=0
 LVL(4)=0
 #TEMP(4)=0
 end if
 end if

 return
 end
 
'Gestion du temps
GestionTime: PROCEDURE
 FR=FR+1
 if FR=96 then
 #temps=#temps+1:FR=0
 end if
 print at (SCREENPOS(13,0)) color CS_WHITE, <4>#temps
 return
 end
 
'Procedure de Collision Sprite
CollisionSPRITE: PROCEDURE
 FOR color = 0 TO 31
 WAIT
 SPRITE 0,X+HIT+VISIBLE,Y+ZOOMY2,SPR00+(color AND SPR_WHITE)
 SPRITE 1,X+HIT+VISIBLE,Y+ZOOMY2,SPR01+(color AND SPR_RED)
 SPRITE 2,X+HIT+VISIBLE,Y+ZOOMY2,SPR02+(color AND SPR_PINK)
 SPRITE 3,X+HIT+VISIBLE,Y+ZOOMY2,SPR03+(color AND SPR_BLACK)
 
 SOUND 0,(color and 7)*32+32,15
 SOUND 1,(color and 7)*36+32,15
 SOUND 2,(color and 7)*40+32,15
 NEXT
 SOUND 0,,0
 SOUND 1,,0
 SOUND 2,,0

 FOR loop = 0 to 100
 WAIT
 NEXT
 
 'INIT Sprite
 SPRITE 0,0,0
 SPRITE 1,0,0
 SPRITE 2,0,0
 SPRITE 3,0,0
 SPRITE 4,0,0
 SPRITE 5,0,0
 SPRITE 6,0,0
 SPRITE 7,0,0
 
 goto debut
 return
 end

'Procedure de Gestion de Sprite
 AffSprite: PROCEDURE
 'Gestion Vitesse/Active sur si PAD Actif.
 if CONT then VitessePapi=VitessePapi+1
 
 'Animation quand PAD inactif
 if CONT=0 then
 #Miroir=0
 if Direction=0 then DEFINE DEF00, 4, SpritePapiHAUT_1
 if Direction=1 then DEFINE DEF00, 4, SpritePapiBAS_1
 if Direction=2 then DEFINE DEF00, 4, SpritePapiDROITE_1
 if Direction=3 then DEFINE DEF00, 4, SpritePapiDROITE_1:#miroir=FLIPX
 end if
 
 'On peut fixer la vitesse de Papi dans la condition.
 if VitessePapi>VitessePapiMax then
 VitessePapi=0
 TempoPapi=TempoPapi+1
 if TempoPapi>4 then TempoPapi=0
 
 'Papi Commando !
 'Commandes
 'PAD Actif !
 IF CONT1.UP THEN
 Y=Y-1
 Direction=0
 SOUND 1,15,15
 SOUND 1,,0
 if TempoPapi=1 then DEFINE DEF00, 4, SpritePapiHAUT_0
 if TempoPapi=2 then DEFINE DEF00, 4, SpritePapiHAUT_1
 if TempoPapi=3 then DEFINE DEF00, 4, SpritePapiHAUT_2
 if TempoPapi=4 then DEFINE DEF00, 4, SpritePapiHAUT_1
 #miroir=0
 end if
 IF CONT1.DOWN THEN
 Y=Y+1
 Direction=1
 SOUND 1,15,15
 SOUND 1,,0
 if TempoPapi=1 then DEFINE DEF00, 4, SpritePapiBAS_0
 if TempoPapi=2 then DEFINE DEF00, 4, SpritePapiBAS_1
 if TempoPapi=3 then DEFINE DEF00, 4, SpritePapiBAS_2
 if TempoPapi=4 then DEFINE DEF00, 4, SpritePapiBAS_1
 #miroir=0
 end if
 IF CONT1.LEFT THEN
 X=X-1
 Direction=3
 SOUND 1,15,15
 SOUND 1,,0
 #miroir=FLIPX
 if TempoPapi=1 then DEFINE DEF00, 4, SpritePapiDROITE_0
 if TempoPapi=2 then DEFINE DEF00, 4, SpritePapiDROITE_1
 if TempoPapi=3 then DEFINE DEF00, 4, SpritePapiDROITE_2
 if TempoPapi=4 then DEFINE DEF00, 4, SpritePapiDROITE_1
 end if
 IF CONT1.RIGHT THEN
 X=X+1
 Direction=2
 SOUND 1,15,15
 SOUND 1,,0
 if TempoPapi=1 then DEFINE DEF00, 4, SpritePapiDROITE_0
 if TempoPapi=2 then DEFINE DEF00, 4, SpritePapiDROITE_1
 if TempoPapi=3 then DEFINE DEF00, 4, SpritePapiDROITE_2
 if TempoPapi=4 then DEFINE DEF00, 4, SpritePapiDROITE_1
 #miroir=0
 end if
 end if
 
 'Affiche les sprites de Papi
 SPRITE 0,X+VISIBLE+HIT,Y+ZOOMY2+#miroir,SPR00+SPR_WHITE
 SPRITE 1,X+VISIBLE+HIT,Y+ZOOMY2+#miroir,SPR01+SPR_RED
 SPRITE 2,X+VISIBLE+HIT,Y+ZOOMY2+#miroir,SPR02+SPR_PINK
 SPRITE 3,X+VISIBLE+HIT,Y+ZOOMY2+#miroir,SPR03+SPR_BLACK
 
 'Limite
 if Y<16 then Y=16
 if Y>96 then Y=96
 if X>160 then X=160
 if X<8 then X=8
 
 'Sprites Ennemis
 for i=1 to 4
 'Limite Tableau
 if x1(i)<8 then sens(i)=2
 if x1(i)>160 then sens(i)=3
 if y1(i)<16 then sens(i)=1
 if y1(i)>96 then sens(i)=0
 
 'Tempo
 TempoIA(i)=TempoIA(i)+1
 #TEMP(I)=#TEMP(I)+1
 if #TEMP(i)>30000 then #TEMP(i)=30000
 
 'Au fur et a mesure que le temps passe, les choses se corsent ... ^^
 LVL(i)=#TEMP(I)/128
 if LVL(i)>64 then LVL(i)=64
 T_IA=TempoIA_MAX(i)-LVL(i)
 if T_IA<4 then T_IA=3
 INT(i)=INT(i)+(LVL(i)*2)
 
 'Gestion Sprite
 if TempoIA(i)>T_IA then
 'Son
 SOUND 2,500,15
 SOUND 2,,0
 'Tempo Animation
 TempoAnimation(i)=TempoAnimation(i)+1
 if TempoAnimation(i)>4 then TempoAnimation(i)=1
 TempoIA(i)=0
 
 'Gestion IA/Chemin - Pathfinding
 ' Unités Connes
 if Int(i)<25 then
 Chemin(i)=Chemin(i)+1
 if Chemin(i)>CheminMAX(i) then
 sens(i)=random(4)
 Chemin(i)=0
 end if
 else
 'Les unités Intelligentes suivent Papi
 'Calcul de distance
 a=x-x1(i)
 b=y-y1(i)
 'Algo de Pathfinding
 if a>b and b<=8 then
 if x1(i)<x then sens(i)=2 else sens(i)=3
 end if
 if a<=b and b>8 then
 if y1(i)<y then sens(i)=1 else sens(i)=0
 end if
 if y1(i)<y and a<8 then sens(i)=1
 if y1(i)>y and a<8 then sens(i)=0
 end if
 
 'Déplacement IA
 if sens(i)=0 then
 y1(i)=y1(i)-1
 if TempoAnimation(i)=1 then #SPR=SPR10
 if TempoAnimation(i)=2 then #SPR=SPR11
 if TempoAnimation(i)=3 then #SPR=SPR12
 if TempoAnimation(i)=4 then #SPR=SPR11
 #miroir1=0
 end if
 if sens(i)=1 then
 y1(i)=y1(i)+1
 if TempoAnimation(i)=1 then #SPR=SPR07
 if TempoAnimation(i)=2 then #SPR=SPR08
 if TempoAnimation(i)=3 then #SPR=SPR09
 if TempoAnimation(i)=4 then #SPR=SPR08
 #miroir1=0
 end if
 if sens(i)=2 then
 x1(i)=x1(i)+1
 if TempoAnimation(i)=1 then #SPR=SPR04
 if TempoAnimation(i)=2 then #SPR=SPR05
 if TempoAnimation(i)=3 then #SPR=SPR06
 if TempoAnimation(i)=4 then #SPR=SPR05
 #miroir1=0
 end if
 if sens(i)=3 then
 x1(i)=x1(i)-1
 if TempoAnimation(i)=1 then #SPR=SPR04
 if TempoAnimation(i)=2 then #SPR=SPR05
 if TempoAnimation(i)=3 then #SPR=SPR06
 if TempoAnimation(i)=4 then #SPR=SPR05
 #miroir1=FLIPX
 end if

 'Couleur Sprites
 if i=1 then #Color=SPR_BLACK
 if i=2 then #Color=SPR_YELLOW
 if i=3 then #Color=SPR_RED
 if i=4 then #Color=SPR_PINK
 
 'Affichage ennemis
 SPRITE 3+i,x1(i)+VISIBLE+HIT,y1(i)+ZOOMY2+#miroir1,#SPR+#Color
 end if
 
 next
 return

 END
 
Map:
 Data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 Data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 Data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 Data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 Data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 Data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 Data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 Data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 Data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 Data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 Data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 Data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

 
'Sprite Papi
SpritePapiHaut_0:
 'WHITE
 BITMAP ".#....#."
 BITMAP "........"
 BITMAP ".#....#."
 BITMAP "..#..#.."
 BITMAP "........"
 BITMAP "........"
 BITMAP "........"
 BITMAP "........"
 'RED
 BITMAP "........"
 BITMAP "#######."
 BITMAP "........"
 BITMAP "........"
 BITMAP "........"
 BITMAP "........"
 BITMAP "........"
 BITMAP "........"
 'PINK
 BITMAP "..####.."
 BITMAP "........"
 BITMAP "..####.."
 BITMAP "...##..."
 BITMAP "..#....."
 BITMAP ".#...#.."
 BITMAP "......#."
 BITMAP "........"
 'BLACK
 BITMAP "........"
 BITMAP "........"
 BITMAP "........"
 BITMAP "........"
 BITMAP "...###.."
 BITMAP "..###..."
 BITMAP ".##.##.."
 BITMAP ".....##."
 
SpritePapiHaut_1:
 'WHITE
 BITMAP "........"
 BITMAP ".#....#."
 BITMAP "........"
 BITMAP ".#....#."
 BITMAP "..#..#.."
 BITMAP "........"
 BITMAP "........"
 BITMAP "........"
 'RED
 BITMAP "........"
 BITMAP "........"
 BITMAP ".######."
 BITMAP "#......."
 BITMAP "........"
 BITMAP "........"
 BITMAP "........"
 BITMAP "........"
 'PINK
 BITMAP "........"
 BITMAP "..####.."
 BITMAP "........"
 BITMAP "..####.."
 BITMAP "...##..."
 BITMAP "..#..#.."
 BITMAP ".#....#."
 BITMAP "........"
 'BLACK
 BITMAP "........"
 BITMAP "........"
 BITMAP "........"
 BITMAP "........"
 BITMAP "........"
 BITMAP "...##..."
 BITMAP "..####.."
 BITMAP "..####.."
 
SpritePapiHaut_2:
 'WHITE
 BITMAP ".#....#."
 BITMAP "........"
 BITMAP ".#....#."
 BITMAP "..#..#.."
 BITMAP "........"
 BITMAP "........"
 BITMAP "........"
 BITMAP "........"
 'RED
 BITMAP "........"
 BITMAP "#######."
 BITMAP "........"
 BITMAP "........"
 BITMAP "........"
 BITMAP "........"
 BITMAP "........"
 BITMAP "........"
 'PINK
 BITMAP "..####.."
 BITMAP "........"
 BITMAP "..####.."
 BITMAP "...##..."
 BITMAP ".....#.."
 BITMAP "...#..#."
 BITMAP "..#....."
 BITMAP "........"
 'BLACK
 BITMAP "........"
 BITMAP "........"
 BITMAP "........"
 BITMAP "........"
 BITMAP "..###..."
 BITMAP "...###.."
 BITMAP "..##.##."
 BITMAP ".##....."
 
SpritePapiBAS_0:
 'WHITE
 BITMAP ".#....#."
 BITMAP "..#..#.."
 BITMAP ".#....#."
 BITMAP ".#.##.#."
 BITMAP "..####.."
 BITMAP "........"
 BITMAP "........"
 BITMAP "........"
 'RED
 BITMAP "........"
 BITMAP "##.##.#."
 BITMAP "........"
 BITMAP "........"
 BITMAP "........"
 BITMAP "........"
 BITMAP "........"
 BITMAP "........"
 'PINK
 BITMAP "..####.."
 BITMAP "........"
 BITMAP "...##..."
 BITMAP "..#..#.."
 BITMAP "........"
 BITMAP ".#......"
 BITMAP "......#."
 BITMAP "........"
 'BLACK
 BITMAP "........"
 BITMAP "........"
 BITMAP "..#..#.."
 BITMAP "........"
 BITMAP "........"
 BITMAP "..####.."
 BITMAP ".##.##.."
 BITMAP ".....##."
 
SpritePapiBAS_1:
 'WHITE
 BITMAP "........"
 BITMAP ".#....#."
 BITMAP "..#..#.."
 BITMAP ".#....#."
 BITMAP ".#.##.#."
 BITMAP "..####.."
 BITMAP "........"
 BITMAP "........"
 'RED
 BITMAP "........"
 BITMAP "........"
 BITMAP ".#.##.#."
 BITMAP "#......."
 BITMAP "........"
 BITMAP "........"
 BITMAP "........"
 BITMAP "........"
 'PINK
 BITMAP "........"
 BITMAP "..####.."
 BITMAP "........"
 BITMAP "...##..."
 BITMAP "..#..#.."
 BITMAP "........"
 BITMAP ".#....#."
 BITMAP "........"
 'BLACK
 BITMAP "........"
 BITMAP "........"
 BITMAP "........"
 BITMAP "..#..#.."
 BITMAP "........"
 BITMAP "........"
 BITMAP "..####.."
 BITMAP "..####.."
 
SpritePapiBAS_2:
 'WHITE
 BITMAP ".#....#."
 BITMAP "..#..#.."
 BITMAP ".#....#."
 BITMAP ".#.##.#."
 BITMAP "..####.."
 BITMAP "........"
 BITMAP "........"
 BITMAP "........"
 'RED
 BITMAP "........"
 BITMAP "##.##.#."
 BITMAP "........"
 BITMAP "........"
 BITMAP "........"
 BITMAP "........"
 BITMAP "........"
 BITMAP "........"
 'PINK
 BITMAP "..####.."
 BITMAP "........"
 BITMAP "...##..."
 BITMAP "..#..#.."
 BITMAP "........"
 BITMAP "......#."
 BITMAP ".#......"
 BITMAP "........"
 'BLACK
 BITMAP "........"
 BITMAP "........"
 BITMAP "..#..#.."
 BITMAP "........"
 BITMAP "........"
 BITMAP "..####.."
 BITMAP "..##.##."
 BITMAP ".##....."

SpritePapiDROITE_0:
 'WHITE
 BITMAP ".#......"
 BITMAP "..##.##."
 BITMAP ".#......"
 BITMAP ".##.#.#."
 BITMAP "..####.."
 BITMAP "........"
 BITMAP "........"
 BITMAP "........"
 'RED
 BITMAP "........"
 BITMAP "##..#..."
 BITMAP "........"
 BITMAP "........"
 BITMAP "........"
 BITMAP "........"
 BITMAP "........"
 BITMAP "........"
 'PINK
 BITMAP "..#####."
 BITMAP "........"
 BITMAP "..#.#.#."
 BITMAP "...#.#.."
 BITMAP "........"
 BITMAP ".##...#."
 BITMAP ".#......"
 BITMAP "........"
 'BLACK
 BITMAP "........"
 BITMAP "........"
 BITMAP "...#.#.."
 BITMAP "........"
 BITMAP "........"
 BITMAP "...###.."
 BITMAP "..####.."
 BITMAP "..#..##."
 
SpritePapiDROITE_1:
 'WHITE
 BITMAP "........"
 BITMAP ".#......"
 BITMAP "..##.##."
 BITMAP ".#......"
 BITMAP ".##.#.#."
 BITMAP "..####.."
 BITMAP "........"
 BITMAP "........"
 'RED
 BITMAP "........"
 BITMAP "........"
 BITMAP ".#..#..."
 BITMAP "#......."
 BITMAP "........"
 BITMAP "........"
 BITMAP "........"
 BITMAP "........"
 'PINK
 BITMAP "........"
 BITMAP "..#####."
 BITMAP "........"
 BITMAP "..#.#.#."
 BITMAP "...#.#.."
 BITMAP "........"
 BITMAP "..#...#."
 BITMAP "........"
 'BLACK
 BITMAP "........"
 BITMAP "........"
 BITMAP "........"
 BITMAP "...#.#.."
 BITMAP "........"
 BITMAP "........"
 BITMAP "...###.."
 BITMAP "..####.."
 
SpritePapiDROITE_2:
 'WHITE
 BITMAP ".#......"
 BITMAP "..##.##."
 BITMAP ".#......"
 BITMAP ".##.#.#."
 BITMAP "..####.."
 BITMAP "........"
 BITMAP "........"
 BITMAP "........"
 'RED
 BITMAP "........"
 BITMAP "##..#..."
 BITMAP "........"
 BITMAP "........"
 BITMAP "........"
 BITMAP "........"
 BITMAP "........"
 BITMAP "........"
 'PINK
 BITMAP "..#####."
 BITMAP "........"
 BITMAP "..#.#.#."
 BITMAP "...#.#.."
 BITMAP "........"
 BITMAP "...#...."
 BITMAP ".#..#..."
 BITMAP "........"
 'BLACK
 BITMAP "........"
 BITMAP "........"
 BITMAP "...#.#.."
 BITMAP "........"
 BITMAP "........"
 BITMAP "..#.##.."
 BITMAP "..##.##."
 BITMAP ".#...#.."

'Sprite IA
SpriteIAHAUT:
 BITMAP "..####.."
 BITMAP ".######."
 BITMAP ".######."
 BITMAP "..####.."
 BITMAP ".#####.."
 BITMAP "..#####."
 BITMAP ".##.##.."
 BITMAP ".....##."
 
 BITMAP "........"
 BITMAP "..####.."
 BITMAP ".######."
 BITMAP ".######."
 BITMAP "..####.."
 BITMAP ".######."
 BITMAP "..####.."
 BITMAP ".##..##."

 BITMAP "..####.."
 BITMAP ".######."
 BITMAP ".######."
 BITMAP "..####.."
 BITMAP "..#####."
 BITMAP ".#####.."
 BITMAP "..##.##."
 BITMAP ".##....."
 
SpriteIABAS:
 BITMAP "..####.."
 BITMAP ".######."
 BITMAP ".#.##.#."
 BITMAP "..####.."
 BITMAP ".#####.."
 BITMAP "..#####."
 BITMAP ".##.##.."
 BITMAP ".....##."
 
 BITMAP "........"
 BITMAP "..####.."
 BITMAP ".######."
 BITMAP ".#.##.#."
 BITMAP "..####.."
 BITMAP ".######."
 BITMAP "..####.."
 BITMAP ".##..##."
 
 BITMAP "..####.."
 BITMAP ".######."
 BITMAP ".#.##.#."
 BITMAP "..####.."
 BITMAP "..#####."
 BITMAP ".#####.."
 BITMAP "..##.##."
 BITMAP ".##....."
 
SpriteIADroite:
 BITMAP "..####.."
 BITMAP ".####.#."
 BITMAP ".###.##."
 BITMAP "..####.."
 BITMAP "...####."
 BITMAP "...###.."
 BITMAP "..##.##."
 BITMAP "..#....."

 BITMAP "........"
 BITMAP "..####.."
 BITMAP ".####.#."
 BITMAP ".###.##."
 BITMAP "..####.."
 BITMAP "...##..."
 BITMAP "...##..."
 BITMAP "...###.."

 BITMAP "..####.."
 BITMAP ".####.#."
 BITMAP ".###.##."
 BITMAP "..####.."
 BITMAP "...##..."
 BITMAP "..####.."
 BITMAP "...#.##."
 BITMAP "..#....."

TilesDecor:
 REM Rocher
 REM Terrain GRIS 17 (273)
 BITMAP "..####.."
 BITMAP ".####.#."
 BITMAP ".#####.#"
 BITMAP "######.#"
 BITMAP "######.#"
 BITMAP "########"
 BITMAP "########"
 BITMAP "########"
 BITMAP "########"
 
 REM Gazon/BG
 REM Terrain Calque Vert 1 13 (269)
 BITMAP "********"
 BITMAP "***.****"
 BITMAP "********"
 BITMAP "*.******"
 BITMAP "**.*****"
 BITMAP "********"
 BITMAP "*****.**"
 BITMAP "********"
 

Viendra après des bonus pour tirer, augmenter la vitesse ... Et certainement des petites arènes. Wink

GET PAPI !! rambo

Lien pour la version Avancée ( écran Intellivision ):
https://cdn.discordapp.com/attachments/508588885169668096/508613945028771842/Get_Papi_V1.1.zip
avatar
StudioVetea
Patient contaminé

Masculin Nombre de messages : 411
Age : 47
Localisation : Hérault
Date d'inscription : 10/09/2018

http://www.rolango.fr

Revenir en haut Aller en bas

Re: [TUTO] Hello IntyBASIC

Message par Ithus le Dim 4 Nov 2018 - 13:24

thumleft

Quand on regarde le fichier constants.bas, on peut voir que les constantes prédéfinies correspondent à des nombres qu'on peut utiliser pour éviter certaines redondances dans le code et alléger la rom. 
Je sais pas si c'est un super exemple mais ça peut te donner une idée de comment ça marche.
Au lieu de ça:
Code:
'Déplacement IA
 if sens(i)=0 then 
 y1(i)=y1(i)-1
 if TempoAnimation(i)=1 then #SPR=SPR10
 if TempoAnimation(i)=2 then #SPR=SPR11
 if TempoAnimation(i)=3 then #SPR=SPR12
 if TempoAnimation(i)=4 then #SPR=SPR11
 #miroir1=0
 end if
 if sens(i)=1 then 
 y1(i)=y1(i)+1
 if TempoAnimation(i)=1 then #SPR=SPR07
 if TempoAnimation(i)=2 then #SPR=SPR08
 if TempoAnimation(i)=3 then #SPR=SPR09
 if TempoAnimation(i)=4 then #SPR=SPR08
 #miroir1=0
 end if
 if sens(i)=2 then 
 x1(i)=x1(i)+1
 if TempoAnimation(i)=1 then #SPR=SPR04
 if TempoAnimation(i)=2 then #SPR=SPR05
 if TempoAnimation(i)=3 then #SPR=SPR06
 if TempoAnimation(i)=4 then #SPR=SPR05
 #miroir1=0
 end if
 if sens(i)=3 then 
 x1(i)=x1(i)-1
 if TempoAnimation(i)=1 then #SPR=SPR04
 if TempoAnimation(i)=2 then #SPR=SPR05
 if TempoAnimation(i)=3 then #SPR=SPR06
 if TempoAnimation(i)=4 then #SPR=SPR05
 #miroir1=FLIPX
 end if

On peut écrire ça:

Code:
ChoixSprite: Procedure

if TempoAnimation(i)<4 then
 #SPR = #SPR +(TempoAnimation(i)*8)
else
 #SPR = #SPR +(2*8)
end if

End


'Déplacement IA
 
if sens(i)=0 then 
 y1(i)=y1(i)-1
 #SPR=SPR09
 gosub ChoixSprite
 #miroir1=0
 
elseif sens(i)=1 then 
 y1(i)=y1(i)+1
 #SPR=SPR06
 gosub ChoixSprite
 #miroir1=0
  
elseif sens(i)=2 then 
 x1(i)=x1(i)+1
 #SPR=SPR03
 gosub ChoixSprite
 #miroir1=0
 
elseif sens(i)=3 then 
 x1(i)=x1(i)-1
 #SPR=SPR03
 gosub ChoixSprite
 #miroir1=FLIPX
 
end if
Il y a sans doute une meilleure façon de faire mais bon, la rom a déjà perdu un peu de poids. Razz
avatar
Ithus
Patient contaminé

Masculin Nombre de messages : 234
Age : 33
Localisation : Loin
Date d'inscription : 26/10/2009

Revenir en haut Aller en bas

Re: [TUTO] Hello IntyBASIC

Message par StudioVetea le Dim 4 Nov 2018 - 13:29

Merci ! Toujours utile de connaitre ces astuces. Wink
Ou récupère t'on la ROM du jeu par contre ? 
Et quelle est la taille limite d'une ROM ?
avatar
StudioVetea
Patient contaminé

Masculin Nombre de messages : 411
Age : 47
Localisation : Hérault
Date d'inscription : 10/09/2018

http://www.rolango.fr

Revenir en haut Aller en bas

Re: [TUTO] Hello IntyBASIC

Message par StudioVetea le Dim 4 Nov 2018 - 13:38

Get PAPI en vidéo !! Wink
Merci à ShiningBZH pour la vidéo. amoureux

avatar
StudioVetea
Patient contaminé

Masculin Nombre de messages : 411
Age : 47
Localisation : Hérault
Date d'inscription : 10/09/2018

http://www.rolango.fr

Revenir en haut Aller en bas

Re: [TUTO] Hello IntyBASIC

Message par Ithus le Dim 4 Nov 2018 - 13:40

La rom est dans le dossier bin situé dans le dossier de ton projet. Basiquement, tu peux faire une rom de 8 Kilodecles qui affiche en fait une taille de 16 Ko sur un PC. 


Code:
asm ORG $A000

En ajoutant une ligne ou deux d'assembleur dans ce style, tu peux théoriquement monter jusqu'à 42K, soit 84 Ko affichés sur ton PC. (Le SDK fournit un exemple très utile nommé 42k, trouvable dans le dossier Contributions)
Après, je crois que ça complique les choses si tu souhaites que ton jeu sorte sur une vraie cartouche.

Si tu souhaites faire un jeu encore plus gros, c'est possible avec le page flipping. Mais je sais pas comment ça fonctionne (et j'espère ne jamais en avoir besoin). Razz
avatar
Ithus
Patient contaminé

Masculin Nombre de messages : 234
Age : 33
Localisation : Loin
Date d'inscription : 26/10/2009

Revenir en haut Aller en bas

Re: [TUTO] Hello IntyBASIC

Message par drfloyd le Dim 4 Nov 2018 - 13:42

il y a eu des cartouches de 4ko a 24ko je crois

la RAM je sais plus exactement, c'est pas autour de 1,5Ko ?

_______________________________________________________

Mes objets en vente :
http://www.gamopat-forum.com/t98267-la-caverne-du-doc-poilu#2765310
Mon profil Gamopat Advisor :
http://www.gamopat-forum.com/t94659-dr-floyd-advisor





avatar
drfloyd
DOYEN ET PROFESSEUR FOU DE L'HOPITAL

Masculin Nombre de messages : 139646
Age : 49
Localisation : Dpt 62
Date d'inscription : 05/12/2004

http://www.gamopat.com

Revenir en haut Aller en bas

Re: [TUTO] Hello IntyBASIC

Message par Ithus le Dim 4 Nov 2018 - 13:47

Attention, il faut mesurer en Kiledecles, sinon Upsilandre va se fâcher. Very Happy
Apparemment, la rom du homebrew Sydney Hunter fait 83K, soit le double des 42K possibles basiquement.
(lu dans les commentaires de cette vidéo: https://www.youtube.com/watch?v=Z8PJolFGX7I )
avatar
Ithus
Patient contaminé

Masculin Nombre de messages : 234
Age : 33
Localisation : Loin
Date d'inscription : 26/10/2009

Revenir en haut Aller en bas

Re: [TUTO] Hello IntyBASIC

Message par StudioVetea le Lun 5 Nov 2018 - 23:40



Les choses avancent !!
La Mattel, c'est pas de la Barbie !! rambo

Par contre, j'ai un soucis quand des TILES sont trop proche (8 px), ça bloque ...
J'ai totalement revu la manière de gérer les collisions. Ici, on touche un peu à de l'assembleur/Basic via les routines internes de la console.

Ainsi ma routine de collision :
Code:
   'Déclaration Sprites/TILE
   WAIT
   DEFINE DEF00,4,SpritePapiDROITE_0
   WAIT
   DEFINE DEF04,3,SpriteIADroite
   WAIT
   DEFINE DEF07,3,SpriteIABAS
   WAIT
   DEFINE DEF10,3,SpriteIAHAUT
   wait
   DEFINE 13,10,TilesDecor
   WAIT
   
   'Constantes
   CONST MUR_H=$0800+13*8 'Adresse Ecran $0800 + Couleur. Ici NOIR = 0 + Position GRAM * 8 ( TILE 8x8)
   CONST MUR_B=$0800+14*8
   CONST MUR_D=$0800+15*8
   CONST MUR_G=$0800+16*8
   CONST SOL = $0804+17*8   
   CONST MUR = $0800+18*8
   CONST SOL1= $0804+19*8
   
   'Constante Collision Objets
   CONST COL_MURH=BG13
   CONST COL_MURB=BG14
   CONST COL_MURD=BG15
   CONST COL_MURG=BG16
   CONST COL_MUR= BG18

Test_Collision: PROCEDURE
   'Offset Coordonnée
   if UNIT=0 then #offset = x/8+y/8*20 else #offset = xIA/8+yIA/8*20
   COLI=0

   'Test au 4 coins des objets.
   #c  = PEEK($01FF+#offset)
   #c1 = PEEK($0200+#offset)
   #c2 = PEEK($01EC+#offset)
   #c3 = PEEK($01EB+#offset)
   'Test avec les éléments du tableau.
   if (#c=COL_MURH or #c1=COL_MURH or #c2=COL_MURH or #c3=COL_MURH) and #c<>0 then COLI=1:return
   if (#c=COL_MURB or #c1=COL_MURB or #c2=COL_MURB or #c3=COL_MURB) then COLI=1:return
   if (#c=COL_MURB or #c1=COL_MURD or #c2=COL_MURD or #c3=COL_MURD) then COLI=1:return
   if (#c=COL_MURG or #c1=COL_MURG or #c2=COL_MURG or #c3=COL_MURG) then COLI=1:return
   if (#c=COL_MUR or #c1=COL_MUR or #c2=COL_MUR or #c3=COL_MUR) then COLI=1
   end

Bon j'ai différent type de TILE, et on peut donc en fonction de certain TILE, programmer des effets : Blocage, etc ..
avatar
StudioVetea
Patient contaminé

Masculin Nombre de messages : 411
Age : 47
Localisation : Hérault
Date d'inscription : 10/09/2018

http://www.rolango.fr

Revenir en haut Aller en bas

Re: [TUTO] Hello IntyBASIC

Message par Ithus le Mar 6 Nov 2018 - 0:35

Super, tu en es déjà à gérer les collisions sprites/tiles. Pour ma part, j'en ai un peu chié avant de trouver une solution qui fonctionne. ^^
En plus, pour mon jeu, je fais du case-par-case-au-tour-par-tour donc c'est plus simple...
Je serais pas foutu de te dire ce qui va pas dans ton code. Mais ça m'étonnerait pas que tu trouves rapidement. Very Happy

PS: a priori, il vaut mieux privilégier XOR à OR sur Intellivision.
avatar
Ithus
Patient contaminé

Masculin Nombre de messages : 234
Age : 33
Localisation : Loin
Date d'inscription : 26/10/2009

Revenir en haut Aller en bas

Re: [TUTO] Hello IntyBASIC

Message par StudioVetea le Mar 6 Nov 2018 - 6:44

Merci Ithus ! :)
Ces collisions m'ont bien fait suer ... Pas si évident en effet.
La j'ai trouvé la solution, mais il reste toutefois un problème si les TILES sont espacés de 8px ... Mais je vais finir par trouver !! rambo

Pour les OR, je ne savais pas ... Du coup on peut faire un NOT XOR ?  Mr. Green Mr. Green
avatar
StudioVetea
Patient contaminé

Masculin Nombre de messages : 411
Age : 47
Localisation : Hérault
Date d'inscription : 10/09/2018

http://www.rolango.fr

Revenir en haut Aller en bas

Re: [TUTO] Hello IntyBASIC

Message par nemokantio le Ven 9 Nov 2018 - 16:40

Maintenant tu vas m'épater sur intellivision Vetea !
thumleft
Pour cette histoire de or manquant sur le cpu de cette console, je ne pense pas que ça soit un problème pour faire des ou dans les tests de condition du basic ou d'un langage évolué.
C'est plus gênant pour faire un or bit à bit entre deux registres en asm, par contre...

nemokantio
Patient contaminé

Masculin Nombre de messages : 320
Age : 42
Localisation : Delgastan
Date d'inscription : 23/01/2013

Revenir en haut Aller en bas

Re: [TUTO] Hello IntyBASIC

Message par vingazole le Ven 9 Nov 2018 - 20:48

C'est ce que je pensais aussi, mais visiblement le compilateur travaille "à l'ancienne" : il évalue les expressions en 0 (FAUX) ou -1 (VRAI) puis utilise les opérateurs bit à bit pour les combiner !

code généré pour un AND :
Code:

; if (v1=6) and (v2=7) then v3=1

        MVI V1,R0       ; R0=V1
        CMPI #6,R0      ; compare R0 et 6
        MVII #-1,R0     ; R0=-1        
        BEQ T1          ; si la comparaison est vraie (çàd si V1=6) GOTO T1
        INCR R0         ; R0=R0+1 (donc R0=0)
T1:     MVI V2,R1       ; R1=V2
        CMPI #7,R1      ; compare R1 et 7
        MVII #-1,R1     ; R1=-1
        BEQ T2          ; si la comparaison est vraie (çàd si V2=7) GOTO T2
        INCR R1         ; R1=R1+1 (donc R1=0)
T2:     ANDR R1,R0      ; R0=R0 AND R1
        BEQ T3          ; si le résultat du AND est nul GOTO T3
        MVII #1,R0      ; R0=1
        MVO R0,V3       ; V3=R0 (donc V3=1)
T3:

code généré pour un XOR :
Code:

; if (v1=6) xor (v2=7) then v3=2

        MVI V1,R0       ; R0=V1
        CMPI #6,R0      ; compare R0 et 6
        MVII #-1,R0     ; R0=-1
        BEQ T1          ; si la comparaison est vraie (çàd si V1=6) GOTO T1
        INCR R0         ; R0=R0+1 (donc R0=0)
T1:     MVI V2,R1       ; R1=V2
        CMPI #7,R1      ; compare R1 et 7
        MVII #-1,R1     ; R1=-1
        BEQ T2          ; si la comparaison est vraie (çàd si V2=7) GOTO T2
        INCR R1         ; R1=R1+1 (donc R1=0)
T2:     XORR R1,R0      ; R0=R0 XOR R1
        BEQ T3          ; si le résultat du XOR est nul GOTO T3
        MVII #2,R0      ; R0=2
        MVO R0,V3       ; V3=R0 (donc V3=2)
T3:



Pour le OR il utilise la propriété A OR B = (A AND NOT B) XOR B :

code généré pour un OR :
Code:

; if (v1=6) or (v2=7) then v3=3

        MVI V1,R0       ; R0=V1
        CMPI #6,R0      ; compare R0 et 6
        MVII #-1,R0     ; R0=-1
        BEQ T1          ; si la comparaison est vraie (çàd si V1=6) GOTO T1
        INCR R0         ; R0=R0+1 (donc R0=0)
T1:     MVI V2,R1       ; R1=V2
        CMPI #7,R1      ; compare R1 et 7
        MVII #-1,R1     ; R1=-1
        BEQ T2          ; si la comparaison est vraie (çàd si V2=7) GOTO T2
        INCR R1         ; R1=R1+1 (donc R1=0)
T2:     COMR R1         ; R1=NOT R1
        ANDR R1,R0      ; R0=R0 AND R1
        COMR R1         ; R1=NOT R1
        XORR R1,R0      ; R0=R0 XOR R1
        BEQ T3          ; si le résultat du XOR est nul GOTO T3
        MVII #3,R0      ; R0=3
        MVO R0,V3       ; V3=R0 (donc V3=3)
T3:
avatar
vingazole
Infirmier

Masculin Nombre de messages : 4084
Age : 44
Localisation : Nilbog
Date d'inscription : 05/01/2012

Revenir en haut Aller en bas

Re: [TUTO] Hello IntyBASIC

Message par nemokantio le Ven 9 Nov 2018 - 21:15

Oula oui je vois.
Du coup la pénalité est de 3 instructions en plus que si il y avait un OR.
(17 contre 14 pour un test avec and ou xor)
C'est peut être pas si grave non ?
A la limite, ils codent leurs jeux sans s'en soucier, puis ils peuvent essayer une alternative aux tests avec le or et voir si il y a un gain.

Merci pour la très bonne explication Maître Vingazole.
:)

nemokantio
Patient contaminé

Masculin Nombre de messages : 320
Age : 42
Localisation : Delgastan
Date d'inscription : 23/01/2013

Revenir en haut Aller en bas

Re: [TUTO] Hello IntyBASIC

Message par vingazole le Ven 9 Nov 2018 - 21:25

@nemokantio a écrit:C'est peut être pas si grave non ?
Oui, c'est ce que je me disais aussi ! Wink
avatar
vingazole
Infirmier

Masculin Nombre de messages : 4084
Age : 44
Localisation : Nilbog
Date d'inscription : 05/01/2012

Revenir en haut Aller en bas

Re: [TUTO] Hello IntyBASIC

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Page 3 sur 3 Précédent  1, 2, 3

Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum