AnteJR / UNIL-GameJam

GameJam pour la carte de voeux 2023
0 stars 0 forks source link

Placement des entités #1

Open AnteJR opened 1 year ago

AnteJR commented 1 year ago

Un meilleur placement des entités est nécessaire. Il doit se faire de façon réfléchie, vu que le jeu n'est pas prévu pour être un infinite runner. Il dépendra évidemment de l'avancement des assets, afin de place de façon la plus judicieuse possible chaque obstacle et "allié".

Pour le moment, Florian est assigné à cette tâche.

astonedf commented 1 year ago

C'est en lien avec le game design aussi pour que le jeu commence avec peu d'ennemis et se complique avec le temps (plus d'ennemis et plus de types d'ennemis) - peut-être moitié-scripté moitié-aléatoire D'ailleurs, si on veut passer sous le vortex il faudra faire attention à pas mettre d'ennemi à ces endroits masqués (je sais pas s'il y en a d'autres?)

AnteJR commented 1 year ago

Pour le moment je ne sais pas si d'autres zones seront couvertes, j'avoue. Il faudra voir avec l'avancement des assets. Je t'assigne aussi pour cette tâche vu le travail de game design.

florian-rieder commented 1 year ago

Pour ce qui est d'éviter de placer des obstacles sur les parties recouvertes par des bâtiments, (comme l'entrée et la sortie du vortex par exemple) il faudra probablement définir ces zones à la main, peut-être plutôt vers la fin du développement, quand on aura la map bien définie.

florian-rieder commented 1 year ago

Hello ! J'ai implémenté ces "deadzones" de façon assez modulaire ! Il suffit de définir ces zones pour chaque asset dans loadAssets.js:

const assetDeadZones = {
    // Le nom de l'asset qui contient une deadzone
    "vortex": [
        {
            start: -112, // position y du début de la deadzone (y=0 en bas de l'image)
            end: -275 // position y de la fin de la deadzone
        },
        {
            start: -596,
            end: -768
        }
    ]
}

Pour trouver les valeurs de start et end, mesurer les distances en pixels depuis le bas de l'image (et penser a les mettre en négatif !):

building_vortex_mesures

florian-rieder commented 1 year ago

Je crois que le système est plus ou moins en place. Il faut encore régler exactement les paramètres et les fonctions de progression (pour l'instant, la distance entre 2 obstacles suit une formule exponentielle inverse, ce qui fait qu'au bout d'un moment il y a une surcharge d'obstacles). Je pense qu'il y aura plus matière à équilibrer ça avec un niveau plus long.

Les mappings des poids pour les types d'obstacles demandent aussi un peu de travail, d'autant plus qu'ils ne semblent pas fonctionner correctement lorsqu'il s'agit de mapper un intervalle croissant vers un intervalle décroissant, produisant des poids négatifs (big no no)

florian-rieder commented 1 year ago

La distance entre les obstacles est maintenant calculée avec un mapping non-linéaire, utilisant une fonction d'easing (voir la doc) pour contrôler la courbe de difficulté selon la distance parcourue, tout en permettant de définir les distances minimales et maximales entre deux obstacles. Il ne reste plus qu'à ajouter une dose d'aléatoire !

Choisir la fonction d'easing avec la variable difficultyCurve, en haut de entitiesManager.js.

AnteJR commented 1 year ago

J'ai rajouté la possibilité pour les deadzones de ne couvrir qu'une moitié de l'écran, afin que les obstacles puissent tout de même spawner de l'autre côté de la route, si elle est dégagée. Je te laisse voir ce que ça donne @florian-rieder, j'ai laissé si besoin l'ancien code que tu avais fait pour gérer les deadzones dans entitiesManagee.js.

florian-rieder commented 1 year ago

C'est une bonne idée ! Après t'as pas forcément choisi la manière la plus facile de faire, alors j'ai simplifié !

AnteJR commented 1 year ago

C'est fantastique, merci beaucoup ! Ouais en lisant ton code, je vois que je me suis bien compliqué la vie hahaha