Logicielsmoto.com

Nous sommes le 19 Mai 2022, 14:01

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 255 messages ]  Aller à la page Précédente  1 ... 12, 13, 14, 15, 16, 17  Suivante
Auteur Message
MessagePosté: 24 Mai 2021, 17:22 
Hors ligne

Inscription: 13 Juin 2005, 21:50
Messages: 283
Localisation: Planete Zorg (31)
Et si ce bout de code est à la suite du précédent, tu n'as pas besoin de recharger A

Hop 3 octets de plus ;)


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 24 Mai 2021, 17:51 
Hors ligne

Inscription: 06 Avr 2010, 01:59
Messages: 447
donc j'ai juste besoin du premier là ...

le code à la suite est comme ceci :
Code:

INC_gamelevel
        LDA gamelevel   ;|
        INCA            ;| inc level +1
        STA gamelevel   ;|
setLevelsParams
        CMPA #16                ;| if gamelevel < 16
        BLT  setLevelParam      ;| set params from FCB
        BGE  setLevelMaxiParam  ;| else params from last FCB for all gamelevel >= 16
setLevelParam
        *; set ghost scatter time for level
        LDX #GHOST_DATAS_SCATTERTIME-1
        LDA gamelevel                   ;// A est deja connu ? pas besoin alors ! <--------
        LDB A,X
        STB ghost_scatter_delay
         *; set ghost ia bypass move interval for level
        LDX #GHOST_DATAS_IA_INTERVAL-1
        LDA gamelevel                  ;// A est deja connu ? pas besoin alors ! <--------
        LDB A,X
        STB ghost_IA_interval
        *; set bonus by level number
        LDX #BONUS_DATAS_ID-2
        LDA gamelevel                 ;// A est deja connu ? pas besoin alors ! <--------
        LSLA
        LDX A,X
        STX current_bonus_ID
    JMP reset_after_win_next_level

setLevelMaxiParam
..
..
..

_________________
Image


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 24 Mai 2021, 18:18 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1589
Localisation: Brest
Quelques remarques en vrac:
Code:
INC_gamelevel
        LDA gamelevel   ;|
        INCA            ;| inc level +1
        STA gamelevel   ;|
Humm je me demande ici si un INC gamelevel + LDA gamelevel ne serait pas plus rapide. Il faudrait compter les cycles. En tout cas ce serait plus court d'au moins 1 octet (ca peut être plus utile que la vitesse en ce point du code.)
Code:
setLevelsParams
        CMPA #16                ;| if gamelevel < 16
        BLT  setLevelParam      ;| set params from FCB
        BGE  setLevelMaxiParam  ;| else params from last FCB for all gamelevel >= 16
setLevelParam
Ici BLT et BGE sont exclusifs l'un de l'autre. Tu peux donc virer le BLT setLevelParam car on y va forcément si on ne prend pas le BGE.

En outre ce code ressemble à une saturation à 16. Moi perso je le ferais ainsi ce qui a le mérite d'être plus court en fusionnant setLevelParam et setLevelMaxiParam:
Code:
  LDA  #16
  CMPA gamelevel
  BGE  setLevelParam
  LDA  gamelevel
setLevelParam:
  ..
Poursuivons...
Code:
       *; set ghost scatter time for level
        LDX #GHOST_DATAS_SCATTERTIME-1
        LDA gamelevel                   ;// A est deja connu ? pas besoin alors ! <--------
ouaip.
Code:
        LDB A,X
        STB ghost_scatter_delay
*; set ghost ia bypass move interval for level
        LDX #GHOST_DATAS_IA_INTERVAL-1
        LDA gamelevel                  ;// A est deja connu ? pas besoin alors ! <--------
ouaip. C'est l'optim #1: ne pas répéter les choses qu'on a déjà fait.

Bon la suite c'est pareil.

_________________
Good morning, that's a nice Tnetennba


Dernière édition par Samuel Devulder le 24 Mai 2021, 19:30, édité 2 fois.

Haut
 Profil  
Répondre en citant le message  
MessagePosté: 24 Mai 2021, 19:28 
Hors ligne

Inscription: 06 Avr 2010, 01:59
Messages: 447
oui en effet on peut le virer le BLT setLevelParam

vu que setLevelParam est juste dessous !
merci.

[EDIT]
bon bah ça marche nickel, donc reste plus que 529 octets :D

_________________
Image


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 24 Mai 2021, 22:03 
Hors ligne

Inscription: 13 Juin 2005, 21:50
Messages: 283
Localisation: Planete Zorg (31)
Code:

INC_gamelevel
        LDA gamelevel   ;|
        INCA            ;| inc level +1
        STA gamelevel   ;|  inutile si tu fait un STD dans .setLevelParam
setLevelsParams
        CMPA #16                ;| if gamelevel < 16
        *BLT  setLevelParam      ;| set params from FCB -- inutile
        BGE  setLevelMaxiParam  ;| else params from last FCB for all gamelevel >= 16
setLevelParam
        *; set ghost scatter time for level
        LDX #GHOST_DATAS_SCATTERTIME-1
        * LDA gamelevel                   ;// A n'est pas modifié donc inutile
        LDB A,X
        STB ghost_scatter_delay        ;// j'aurais mis STD .gamelevel pour gagner 3 octets en supprimant le STA .gameLevel dans #INC_gameLevel
         *; set ghost ia bypass move interval for level
        LDX #GHOST_DATAS_IA_INTERVAL-1
        * LDA gamelevel                   ;// A n'est pas modifié donc inutile         
        LDB A,X
        STB ghost_IA_interval
        *; set bonus by level number
        LDX #BONUS_DATAS_ID-2
        * LDA gamelevel                   ;// A n'est pas modifié donc inutile           
        LSLA
        LDX A,X
        STX current_bonus_ID
    JMP reset_after_win_next_level

setLevelMaxiParam
..
..
..


11 octets de plus ;)


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 24 Mai 2021, 22:48 
Hors ligne

Inscription: 06 Avr 2010, 01:59
Messages: 447
Décidément y'a un truc qui rentre pas :voyons:

Code:
STB ghost_scatter_delay        ;// j'aurais mis STD .gamelevel pour gagner 3 octets en supprimant le STA .gameLevel dans #INC_gameLevel



Donc je remplace le STB ghost_scatter_delay par STD gamelevel
- en sachant que dans A y'a la valeur de gamelevel (par exemple 2)
- dans B on à donc récupéré #GHOST_DATAS_SCATTERTIME-1 ( 105 )
GHOST_DATAS_SCATTERTIME
FCB 150,130,105,90,80,70,65,50,45,40,35,30,25,20,15,10

comment tu mets donc la valeur 105 dans ghost_scatter_delay :???:

_________________
Image


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 24 Mai 2021, 22:59 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1589
Localisation: Brest
Hmm perso je trouve que le STD pour écrire 2 valeurs en même temps est un nid à bugs. Typiquement si un (futur) chemin d’exécution altère A, ca se mets à déconner sans qu'on sache trop pourquoi. Je ferais ce genre d'optim à ma toute fin si on a vraiment beaucoup à gagner. En cours de dev, c'est faire trop entrer Murphy dans la danse.

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 25 Mai 2021, 05:38 
Hors ligne

Inscription: 13 Juin 2005, 21:50
Messages: 283
Localisation: Planete Zorg (31)
adnz a écrit:
Décidément y'a un truc qui rentre pas :voyons:
comment tu mets donc la valeur 105 dans ghost_scatter_delay :???:

D et l'union des deux accumulateurs A et B
STD .gameLevel c'est la même chose que STA .gameLevel et STB .gameLevel+1

@__sam__
En effet D est sujet à controverse et rend apparemment le programme moins lisible. Mais dans la recherche aux octets il est un bon candidat. ;)


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 25 Mai 2021, 06:19 
Hors ligne

Inscription: 21 Avr 2019, 21:48
Messages: 269
Localisation: Var
Je suis d'accord sur l'aspect "nid à bug" :lol:
De mon coté quand je fais ça j'ajoute une étiquette explicite :

Code:
gamelevel_and_ghost_scatter_delay      ; (dependency) ghost_scatter_delay must follow gamelevel
gamelevel RMB 1
ghost_scatter_delay RMB 1


En fonction de l'usage on sait donc ce qu'on fait :

Code:
   std   gamelevel_and_ghost_scatter_delay
...
   sta   gamelevel
...
   ldb   ghost_scatter_delay


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 25 Mai 2021, 09:28 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1589
Localisation: Brest
Ah c'est pas bête le label explicite. Il faut éviter l'implicite le plus possible pour éviter les bugs.

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 25 Mai 2021, 12:08 
Hors ligne

Inscription: 06 Avr 2010, 01:59
Messages: 447
ha ok , j'ai pigé là :)

En effet je pensais pareil, du moment que dans les commentaires sur les lignes je fais comme une petite notice pour me rappeler que les 2 RMB doivent se suivent et A et B correspondent à quoi, et là plus de soucis de compréhension .

Fallait juste que je comprennent la mécanique :bien:
Merci.

_________________
Image


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 25 Mai 2021, 23:20 
Hors ligne

Inscription: 06 Avr 2010, 01:59
Messages: 447
Bon voilà,

les variables par level sont OK pour :
- graphismes bonus
- moment où le bonus apparait
- vitesse des fantômes
- durée des fantômes en mode fuite lorsque pacman mange une super pac gomme.

Sinon je peux gagner plein plein de place si je mets les 2 gros tableaux (array 2D) en mémoire plutôt que dans des FCB !!!
et si je double la taille du tableau, je pourrais gérer les déplacements des sprites par 2 pixels !!
il me reste plein de place dans les bank !
https://oxustudio.com/to8/forum/optimisation/array2D.png

_________________
Image


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 26 Mai 2021, 03:20 
Hors ligne

Inscription: 06 Avr 2010, 01:59
Messages: 447
pff le bordel !
Car au depart il me fallait un sprite assez grand mais pas trop pour faire un level jouable, d'ou ces proportions...
le déplacement actuel est 4 px en x et 10px en y

- Je bosse à agrandir le tableau pour avoir une definition de "tiles" doublé pour faire les déplacements de sprite tout les 2 px au lieu de 4 en x et 5 px en y
- puis mettre les valeurs en memoire dans une bank au lieu de mettre dans le code des FCB pour libérer de la place dans l'espace non commutable...


https://oxustudio.com/to8/forum/2darray-level-01.png

_________________
Image


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 26 Mai 2021, 06:18 
Hors ligne

Inscription: 21 Avr 2019, 21:48
Messages: 269
Localisation: Var
Prendre le temps de bosser sur ton mécanisme de gestion de la mémoire paginée est une bonne idée.
Une fois ce code "structurel" en place tu auras tout l'espace que tu souhaites pour implémenter de nouvelles choses.

Allez courage !


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 26 Mai 2021, 12:11 
Hors ligne

Inscription: 06 Avr 2010, 01:59
Messages: 447
oui et je pensais aussi que ça peut me permettre de charger d'autre labyrinthe, en sachant qu'un level est constitué de :

- 1 tableau (29x20) de datas pour les Tiles ,pour le type d'élément (vide, mur, pacgum, super pacgum, tunnel L, tunnel R, bonus,...)
- 1 tableau (29x20) pour les fantômes (désignant les intersections pour le choix du calcul de direction, car pas la peine de calculer si y'a pas d'intersection !)
- 1 image (le graphisme complet mur+pacgums) affiché 1 seul fois au début de chaque nouvelle partie (nouvelle partie = après un gameover).

Donc si je mets les 2 tableaux de datas dans un fichier BIN et l'image est déjà dans un fichier BIN !

bah je peux faire d'autres paire de BIN pour créer et charger d'autres labyrinthes :W

_________________
Image


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 255 messages ]  Aller à la page Précédente  1 ... 12, 13, 14, 15, 16, 17  Suivante

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 2 invités


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages
Vous ne pouvez pas joindre des fichiers

Rechercher:
Aller à:  
Développé par phpBB® Forum Software © phpBB Group
Traduction par phpBB-fr.com