1

Bonjour (et bonnes fêtes à tous hehe)
Après avoir enfin fini la partie "standard" de mon projet Sonic sur GBA, je me suis attaqué au spécial stage (Sonic 1 sur Mega Drive, celui en rotation). Mais voilà, je ne vois pas du tout comment faire pour détecter les collisions d'une map en rotation.
La GBA fera la rotation d'image en hardware (bon je suis déjà pas sûr au niveau du calcul du centre de rotation pour l'écran, et encore moins s'il faut qu'il corresponde avec la rotation de la map virtuelle de collisions). Après ça, j'ai déjà des problèmes pour trouver quel bloc (16x16) se trouve sur un point donné (et tourné), cependant je devrais y arriver. Mais je suis découragé car c'est bien joli d'avoir le bloc concerné mais pour tester la collision... c'est autre chose! Je connais l'angle mais pas exactement ce qu'il en est du bloc (ça pourrait être celui de gauche ou celui de droite dans l'image ci-dessous par exemple):
_yaronet_sonic_01.PNG
Il doit y avoir un concept mathématique que je ne connais pas. Auriez-vous des idées?
Merci d'avance infiniment. wink
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

2

ben, je vois bien une méthode mais... :]
Je pense que tu peux essayer de travaller en mode non rotationné, juste en changeant l'orientation du vecteur g dans le plan. ça demande une petite modification du moteur du jeu j'immagine, mais tu peux faire tellement de trucs après ça que... love
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

3

Merci.
J'y avais déjà pensé, mais après je bloque pour détecter les collisions avec des blocs qui ne sont plus carrés (pour les raisons que j'ai expliquées plus haut):
_yaronet_sonic_01.PNG
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

4

hmmm...
• GoldenCrystal thinking

Tu fais comment horizontalement pour ce genre de blocs ?
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

5

GoldenCrystal> Tu veux dire, comme dans le moteur standard? Avec une liste des points de collisions horizontaux. Mais ici, je ne devrais pas avoir ce problème car je n'utiliserai pas de pentes mais uniquement des blocs pleins (carrés). wink
Je crois qu'on s'est mal compris. Un bloc lorsqu'il est tourné n'est plus carré et je pensais le gérer comme une plate-forme inclinée. Mais c'est une mauvaise idée je pense smile
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

6

Ha ben dans ce cas je vois pas trop ce qui te pose problème.
Tu as ton vecteur g, qui a une certaine inclinaison, et la pente de tes blocs qui est 0, 90, 180 ou 270. Tu ne restes statiques sur un bloc que si le vecteur g est perpendiculaire dans le bon sens (l'angle (g,m) = 90° et (m,g) = -90° avec m le vecteur de la pente) à la pente du bloc sur lequel tu te trouves, sinon tu peux calculer une vitesse de chute dans la direction du vecteur g sachant que tu gèreras le déplacement comme en mode 'classique' ensuite.
Pour le personnage, 4 points forment un rectangle de collision, qui est toujours vertical dans le monde en rotation, et dont la rotation (par rapport au centre du rectangle) est l'opposé de la rotation du monde dans le mode normal wink Après c'est juste du calcul de collisions tout bête smile
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

7

Merci. Donc si j'ai bien compris, selon ta méthode c'est Sonic qui tourne (et son "carré de collision" associé), et pas le plan de jeu?
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

8

ué voilà happy Mais bon ça doit pouvoir se faire exactement pareil avec le monde en rotation je pense smile
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

9

Merci. smile
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

10

Heu j'ai encore un autre problème en fait.
Tu as ton vecteur g, qui a une certaine inclinaison, et la pente de tes blocs qui est 0, 90, 180 ou 270. Tu ne restes statiques sur un bloc que si le vecteur g est perpendiculaire dans le bon sens (l'angle (g,m) = 90° et (m,g) = -90° avec m le vecteur de la pente) à la pente du bloc sur lequel tu te trouves, sinon tu peux calculer une vitesse de chute dans la direction du vecteur g sachant que tu gèreras le déplacement comme en mode 'classique' ensuite.
Ce n'est pas si simple en fait. Prenons ce cas.
_yaronet_sonic_03.PNG
Sonic est en plein saut. J'ai dessiné (à peu près) sa trajectoire en rouge. Mais lorsqu'il va se taper la tête contre le mur en haut (différence d'angle > 90°), il va en fait coller un moment non parallèlement au sol en prenant une vitesse de sonic.vitesse_y*sin(différenceAngle) non? Je ne vois pas comment exprimer ça en fait. Si je "colle" sonic au plafond, ça ne marche pas vraiment... tu peux essayer la démo (avec VisualBoyAdvance par exemple) et voir comment que ça réagit pas comme dans la réalité (et c'est pas le seul cas sad):
http://membres.lycos.fr/brunni/Temp/Sonic.zip
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

11

Hmm je vois pas trop de problèmes là... Le seul truc c'est que dans les sonic originaux, les cases faisaient rebondir il me semble. Je vais aller regarder ça de plus près parce que j'ai du mal à voir le problème dans ta démo. (Peut être un truc avec la force centrifuge ?) En tout cas joli travail smile
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

12

Merci.
J'ai mis à jour la démo en supprimant le bidouillage avec le plafond. On peut mieux voir le problème ainsi. Ah et avec cette version tu peux revenir en mode normal (Green Hill Act 1) en appuyant sur START si ça t'intéresse (sans le son car trop gros sinon) wink
http://membres.lycos.fr/brunni/Temp/Sonic.zip (118 ko)
Mais bon le truc pour le moment c'est que sa vitesse verticale n'est pas réinitialisée lorsqu'il se tape la tête, et continuant à aller vers le haut (ce qui n'est pas possible), il n'y a que la composante x qui peut changer, ce qui donne un effet ressemblant un peu à l'original mais complètement faux en fait. Je dois transposer sa vitesse y en vitesse x / collé au sol. Mais il n'est pas censé coller à un sol d'un grand angle (~180° lorsqu'il est au-dessus de Sonic). En plus, je ne sais pas combien de temps il peut rester collé au plafond... je pensais jusqu'à ce que sa vitesse soit devenue nulle/négative mais c'est raté. Tu n'aurais pas une autre idée?
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

13

En fait il faudrait probablement que sonic tombe lorsqu'il entre en collision avec une surface au dessus de lui. On va dire que la collision le ralentit. Du coup ta vitesse y devient nulle et sonic tombe, c'est peut-être pas non plus exactement ce que fait le jeu original, mais pour le moment je vois pas trop comment faire autrement. Sinon tu as remarqué qu'on pouvait sauter dés que sonic touchait le décor, et même s'il s'agissait du plafond ?
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

14

Ok merci. J'ai remarqué en effet smile
A part ça tu as essayé la dernière version? Tu penses que les bugs (quand on saute contre une paroi) ne sont pas trop génants? sad
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

15

Hmm bugs quand on saute conre une paroi ? J'ai pas fait très attention à ça... Assez difficile de voir en fait car il n'y a pas de grandes parois. Par contre j'ai remarqué que sonic avait trop d'inertie dans ton jeu: dans les jeux de sonic originaux, tu changes de direction (donc tu freines avant) quasi instantanément (je vais pas donner de timing exact mais approximativement ça doit faire dans les 0.4 s). Sinon les sauts, sont un peu trop influencés par la vitesse horizontale (dans les jeux megadrive, ils le sont aussi, mais beaucoup moins, du moins c'est l'impression que j'ai eu). D'ailleurs j'ai l'impression que la vitesse augmente (peut-être un peu vite) même pendant les sauts, corriger ça devrait déjà rendre tes sauts un peu plus normaux.
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

16

Je ne pense pas que ce soit vraiment ce que tu cherches (ne serait-ce que parce qu'on n'y gère pas de hauteur), mais regarde à tout hasard la demo 3 (il me semble, c'est celle qui se passe de nuit avec des éclairs) de FAT-Engine.
avatar
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Co-admin de TI-Planet.

17

GoldenCrystal> Là tu parles du spécial stage ou du moteur standard (après que tu aies appuyé sur START)?
Parce que dans le moteur standard, c'est voulu. La vitesse normale (sans la super vitesse ni en boule) est plus rapide que dans l'original (8 px/frame contre ~6 je crois dans l'original), ce qui explique ce genre de choses. Mais les prochains niveaux seront faits par moi donc ça ne posera plus de problème je pense. wink
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

18

Huhu ok grin
Je pensais que tu avais quand même du code commun entre les deux ^^
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes