Page 1 sur 1

Besoin de traduire des opérations sur les bits

Posté : mer. 24 févr. 2021, 21:52
par Freddy_Gwendo
Le code suivant représente des bornes

Code : Tout sélectionner

Notation for slot range: slot/range
  where "slot" can be defined as formula: [x,y] means range x to y (inclusive)

CGameAnimationTypeMonster:              (0x7002 + ([0x00,0x1f] << 4))/0xd
                                        (0x7004 + ([0x20,0x2f] << 4))/0xb
                                        (0x7000 + ([0x30,0x3f] << 4))/0xf
                                        (0x7003 + ([0x40,0x4f] << 4))/0xc
                                        (0x7002 + ([0x50,0x5f] << 4))/0xd
                                        (0x7003 + ([0x70,0x7f] << 4))/0xc
                                        (0x7005 + ([0x90,0xaf] << 4))/0xa
                                        (0x7007 + ([0xb0,0xbf] << 4))/0x8
                                        (0x7002 + ([0xc0,0xcf] << 4))/0xd
                                        (0x7002 + ([0xe0,0xef] << 4))/0xd
                                        (0x7000 + ([0xf0,0xff] << 4))/0xf

CGameAnimationTypeMonsterOld:           (0x7000 + ([0x00,0x1f] << 4))/0x1
                                        (0x7000 + ([0x20,0x2f] << 4))/0x3
                                        (0x7000 + ([0x40,0x4f] << 4))/0x2
                                        (0x7000 + ([0x50,0x5f] << 4))/0x1
                                        (0x7000 + ([0x60,0x6f] << 4))/0xf
                                        (0x7000 + ([0x70,0x7f] << 4))/0x2
                                        (0x7000 + ([0x80,0x8f] << 4))/0xf
                                        (0x7000 + ([0x90,0xaf] << 4))/0x4
                                        (0x7000 + ([0xb0,0xbf] << 4))/0x6
                                        (0x7000 + ([0xc0,0xcf] << 4))/0x1
                                        (0x7000 + ([0xd0,0xdf] << 4))/0xf
                                        (0x7000 + ([0xe0,0xef] << 4))/0x1
J'ai du mal avec les expressions [0x20,0x2f] << 4
J'ai beau savoir utiliser le décalage gauche sur un offset, je patauge un peu sur son utilisation dans un intervalle comme dans cette formule.

Quel est le résultat de (0x7000 + ([0x20,0x2f] << 4))/0x3 ? :wacko:

Posté : jeu. 25 févr. 2021, 10:31
par rivvers
Freddy_Gwendo a écrit :
Quel est le résultat de (0x7000 + ([0x20,0x2f] << 4))/0x3 ? :wacko:
Hum, je n'ai jamais vu de décalage sur un intervalle (surtout en hexadécimal) cela va dépendre de la méthode employée mais d'habitude le travail se fait exclusivement sur des bits donc...

En partant de ce principe, cela sera l'équivalent de : ([7200, 72F0])/3

Un décalage à gauche de 4, en théorie, décale de 4 bits soit une multiplication par 2^4, donc 16. Comme le travail se fait en hexadécimal, cela revient simplement à rajouter un 0.
[0x20,0x2F] << 4 revient à [0x200, 0x2F0]
Exactement comme une multiplication par 10 pour la base 10.

Bien sûr une vérification manuelle s'impose pour vérifier la théorie. ;)



edit: en revanche j'ignore si le pas est décalé. Les valeurs de l'intervalle sont-elles 7200, 7201, 7202, 7203,... 72F0 ou bien 7200, 7210, 7220, 7230,... 72F0 ?
J'opterais pour la seconde option.

Posté : jeu. 25 févr. 2021, 10:40
par Freddy_Gwendo
Effectivement, comme toi, je me posais des questions sur l'intervalle. :)

Problème résolu en utilisant WeiDU. Double bonne nouvelle :

1. Mes calculs sont bons. Confirmés par Argent77 dont les explications ont conforté ma première impression (big thanks to you if you pass by ;) ). Mais comme l'hexa et moi, ça fait deux...
2. Pour les ceusses intéressés : il s'agit des slots diponibles pour les animations de type BGII (SPIT et UNSPLIT) dans les moteurs EE.

Une prise de tête pour pas grand chose, si ce n'est qu'ils confirment les paramètres d'une fonction que j'ai écrite il y a un moment pour mon mod et pour IA. Je joins les résultats en annexe.