[Roi of the Suisse] Collines, nuages, trou du cul

Avatar de l’utilisateur
Zim
Sauveur de princesses
Messages : 1715
Inscription : 18 Mars 2011, 23:47
Localisation : Rennes

[Roi of the Suisse] Collines, nuages, trou du cul

Messagepar Zim » 30 Déc 2015, 19:39

En fait j'écrivais à la base surtout en réaction de ceci :
Non, car ça dépend complètement de ce qu'on veut faire avec RM. Le modèle "event 2000/03" n'est "obsolète" que pour les créateurs de gros projets ambitieux (souvent commerciaux).
Un jeu peut être ambitieux sans avoir à refaire tous les différents aspects du moteur. Les Dragon Quest étaient ambitieux pour plein de raison, et les quatre premiers utilisaient le même moteur.

Avatar de l’utilisateur
Roi of the Suisse
Dompteur de lions
Messages : 362
Inscription : 20 Août 2011, 00:33
Localisation : Rennes aussi

[Roi of the Suisse] Collines, nuages, trou du cul

Messagepar Roi of the Suisse » 30 Déc 2015, 22:06

Mais tout ça tu le comprendras peut-être le jour (hypothétique) où tu essaieras RM 2000/03. :sifflote:D
:fufu: Je ne me reconnais jamais dans ce que tu m'accuses d'être. Tu ne combats que des fantômes : l'idée que tu te fais des opinions des gens, et ils te regardent agiter les bras dans le vide et se disent "quel rigolo ce Némeaux".

J'ai déjà utilisé plusieurs fois RM2003, tu n'étais pas né j'avais déjà fait 3 jeux avec. Je ne l'aime pas, principalement à cause de la non-coloration du code et de l'absence d'interrupteurs locaux.
Et je suis dans le même cas que Gaetz pour RMXP, vu que mon projet ne se conforme pas bien à ce que RM veut qu'on fasse de lui.
:tricot:

Avatar de l’utilisateur
Vincent
Dompteur de lions
Messages : 367
Inscription : 25 Nov 2011, 13:10

[Roi of the Suisse] Collines, nuages, trou du cul

Messagepar Vincent » 31 Déc 2015, 11:32

Pour moi, c'est simple, la problématique est qu'est-ce qui rend le jeu le plus simple à faire et dans le moteur et dans la création de contenu.

Pour mon jeu clone de POP format DBZ, une fois, les bases du moteur posées, chaque écran était assez simple à faire car il n'y avait plus ou moins que le héros à gérer à l'écran.
Je n'aurais jamais été particulièrement limité par rapport à ce que je voulais faire dans ce jeux-là.

Par contre, j'avais commencé un autre projet avec un mix de CBS FF6 avec de la destruction de terrain, du pathfinding, plein de persos, des techniques à gogo.
J'avais genre une centaine de variable par perso pour une douzaine de persos à l'écran.
J'avais codé un cauchemar de pointeurs de pointeurs pour gérer le tout et ça marchait mais c'était difficile à débugger.
Bref très mauvais choix dans ce cas de figure là.

Pour autant, visuellement, le clone de POP faisait plus avancé car gros sprites, plus de couleurs, pas de charsets moches.

Idem récemment, je m'étais attaqué à un plugin de mouvement pixel par pixel avec le plugin de Cherry mais il me manquait l'accès à certaines variables pour que ça fonctionne et Cherry ne pouvait pas me donner cet accès à ce moment-là.
Sans compter les problèmes d'instabilité (peut être due à mon expérience limitée en C++ ?). Toujours est-il que nouvel échec.

RM2K3 est effectivement un jouet authentiquement génial qui peut faire des projets avancés mais pas n'importe lesquels.
Pour autant les RMXP , VX/Ace sont potentiellement plus difficiles d'accès, cela peut poser problème aussi pour créer du contenu si des membres de l'équipe ne maitrise pas.
Une réflexion préalable est nécessaire par rapport à son équipe et à ce qu'on veux faire et ce que chaque logiciel peut faire.

A titre d'exemple, si je veux faire un clone de Wolfenstein 3D, je prends RM2K3, le plugin de Cherry et je fais le rafraichissement d'écran avec ça la fonction draw de http://rpg-maker.cherrytree.at/dynrpg/c ... anvas.html.
Ca serait probablement plus simple que par RMXP , VX/Ace et ça serait super adapté aux maps Rpgmaker.

Avatar de l’utilisateur
Nemau
Dompteur de lions
Messages : 334
Inscription : 08 Jan 2015, 04:56

[Roi of the Suisse] Collines, nuages, trou du cul

Messagepar Nemau » 31 Déc 2015, 22:21

Si, puisque c'est "en tant".
xD Décidément.
Certes, ce que je dis vaut aussi pour RMXP et VX/Ace et le dernier
Pas d'accord (si j'ai bien compris ce que tu voulais dire), car si on ne touche pas aux scripts on peut faire moins de choses niveau programmation.
l'idée que tu te fais des opinions des gens
D'accord, en fait tu adores RM 2003, tu reconnais que dans certains cas il est préférable de l'utiliser plutôt qu'XP, et c'est juste moi qui ne comprends pas quand tu parles. :nerd:
Je ne l'aime pas, principalement à cause de la non-coloration du code et de l'absence d'interrupteurs locaux.
C'est presque aussi idiot que de ne pas aimer un RM parce que son splashscreen (quand tu ouvres le logiciel) est moche. Je caricature un peu, ok la coloration de code c'est pratique, ok les interrupteurs locaux aussi, m'enfin voilà.

RM 2003 est tellement plus permissif niveaux events (et pas qu'events d'ailleurs, par exemple dans XP tu ne peux pas faire boucler les maps, et ce n'est vraiment qu'un exemple parmi des tas), toi tu dis que tu l'aimes moins que les autres à cause de l'absence de deux trucs non indispensables, et après tu t'étonnes que je t'accuses de mal connaître le logiciel ? >x)

Avatar de l’utilisateur
Roi of the Suisse
Dompteur de lions
Messages : 362
Inscription : 20 Août 2011, 00:33
Localisation : Rennes aussi

[Roi of the Suisse] Collines, nuages, trou du cul

Messagepar Roi of the Suisse » 03 Jan 2016, 22:05

Je ne l'aime pas, principalement à cause de la non-coloration du code et de l'absence d'interrupteurs locaux.
C'est presque aussi idiot que de ne pas aimer un RM parce que son splashscreen (quand tu ouvres le logiciel) est moche. Je caricature un peu, ok la coloration de code c'est pratique, ok les interrupteurs locaux aussi, m'enfin voilà.

RM 2003 est tellement plus permissif niveaux events (et pas qu'events d'ailleurs, par exemple dans XP tu ne peux pas faire boucler les maps, et ce n'est vraiment qu'un exemple parmi des tas), toi tu dis que tu l'aimes moins que les autres à cause de l'absence de deux trucs non indispensables, et après tu t'étonnes que je t'accuses de mal connaître le logiciel ? >x)
Ta comparaison avec le splashscreen est à côté de la plaque et dessert ta pensée : c'est un détail facilement réglable, alors que la coloration et les interrupteurs locaux ne sont absolument pas une option. Ton commentaire aurait été beaucoup plus sérieux sans cette phrase.

On ne donne pas de l'importance aux mêmes choses alors.
Pour moi le bouclage de map est un gadget inutile et qui n'a pas de sens (à part pour simuler un rêve ou un labyrinthe magique).
Et au contraire, la coloration est vitale en programmation ; ça fait une dizaine d'années qu'un IDE sans coloration est considéré comme prodigieusement ridicule et handicapant.
Pareillement, les interrupteurs locaux sont ultra utiles, pour faire des objets génériques. La factorisation est la sacro-sainte règle d'une programmation de qualité. Toi qui dis que RM2003 est meilleur car plus accessible (par la non-nécessité des scripts), RM2003 introduit la notion de pointeur (variable contenant un numéro de variable) pour remplacer les interrupteurs locaux, alors que c'est une notion très complexe en informatique (qui est la principale cause d'abandon de l'apprentissage du langage C). Et RMXP se passe brillamment de cette notion.
Donc tu vois, tes arguments peuvent être inversés,et tout se défend.

Avatar de l’utilisateur
Zim
Sauveur de princesses
Messages : 1715
Inscription : 18 Mars 2011, 23:47
Localisation : Rennes

[Roi of the Suisse] Collines, nuages, trou du cul

Messagepar Zim » 03 Jan 2016, 22:20

(Une précision : la coloration syntaxique existe depuis RM2009 de cherry (où tu peux toi-même définir les couleurs, et la taille et le type de la police), et est intégrée par défaut dans la version qu'il a sortie sur steam. Je suis d'accord sur le fait que c'est très utile.)

Avatar de l’utilisateur
Nemau
Dompteur de lions
Messages : 334
Inscription : 08 Jan 2015, 04:56

[Roi of the Suisse] Collines, nuages, trou du cul

Messagepar Nemau » 04 Jan 2016, 16:02

Ta comparaison avec le splashscreen est à côté de la plaque et dessert ta pensée : c'est un détail facilement réglable, alors que la coloration et les interrupteurs locaux ne sont absolument pas une option. Ton commentaire aurait été beaucoup plus sérieux sans cette phrase.
Je caricature un peu, ok la coloration de code c'est pratique, ok les interrupteurs locaux aussi, m'enfin voilà.
Pour moi le bouclage de map est un gadget inutile et qui n'a pas de sens (à part pour simuler un rêve ou un labyrinthe magique).
Ou une world-map, pour les gens qui veulent faire un jeu de type... Attends ça va me revenir... "RPG" je crois que ça s'appelle.


Quoi qu'on veuille faire, on peut se passer de la colorisation de code et des interrupteurs locaux (même si ça prend du coup plus du temps). Si on veut faire une world-map type FF, on ne peut pas se passer du bouclage de map. Et il s'avère également pratique pour les trucs genre la séquence à moto d'Escapade. Et cette histoire de bouclage n'est qu'un exemple des limites d'XP par rapport à 2003.

Avatar de l’utilisateur
Roi of the Suisse
Dompteur de lions
Messages : 362
Inscription : 20 Août 2011, 00:33
Localisation : Rennes aussi

[Roi of the Suisse] Collines, nuages, trou du cul

Messagepar Roi of the Suisse » 06 Jan 2016, 08:51

Une world map est sphérique, alors qu'un bouclage comme le fait RM est torique :crepe:
La moto d'escapade aurait pu être faite avec une picture qui défile. Une worldmap aussi si on y pense.
Quoi qu'on veuille faire, on peut se passer du bouclage de map (même si ça prend du coup plus du temps), mais si on veut faire un jeu un minimum complexe, on ne peut pas se passer de la colorisation et des interrupteurs locaux (pour des raisons organisationnelles et de maintenance applicative), on alors ça tient du mec qui veut faire une tour Eiffel grandeur nature en empilant des allumettes (cf. Aedemphia).
Et cette histoire n'est qu'un exemple des limites de 2003 par rapport à XP.

Avatar de l’utilisateur
Nemau
Dompteur de lions
Messages : 334
Inscription : 08 Jan 2015, 04:56

[Roi of the Suisse] Collines, nuages, trou du cul

Messagepar Nemau » 06 Jan 2016, 20:33

si on veut faire un jeu un minimum complexe
Non, car ça dépend complètement de ce qu'on veut faire avec RM. Le modèle "event 2000/03" n'est "obsolète" que pour les créateurs de gros projets ambitieux (souvent commerciaux).
Donc, oui, si on veut faire un jeu un minimum complexe on n'utilise pas RM 2003. Mais pas XP non plus, ni aucun RM (la preuve, toi-même tu songes à porter KnH sur un moteur plus pertinent). En revanche, si on veut faire un jeu simple (cette simplicité inclut de ne pas se faire chier avec un vrai langage de programmation, ici le Ruby), RM 2003 surpasse XP.

Avatar de l’utilisateur
Roi of the Suisse
Dompteur de lions
Messages : 362
Inscription : 20 Août 2011, 00:33
Localisation : Rennes aussi

[Roi of the Suisse] Collines, nuages, trou du cul

Messagepar Roi of the Suisse » 06 Jan 2016, 23:11

Je ne pense pas que ce soit "se faire chier" que d'observer le code Ruby et de s'essayer à singer son contenu. Avec RM2003, comme je t'ai dit, on manipule des pointeurs, alors qu'avec deux trois fonctions Ruby faites soi-même pour dépanner, on ne manipule jamais de pointeur.
On peut également récupérer des scripts sur des sites pour personnaliser son jeu, sans savoir un seul mot de Ruby. Il n'y a alors rien de chiant.

Avatar de l’utilisateur
Nemau
Dompteur de lions
Messages : 334
Inscription : 08 Jan 2015, 04:56

[Roi of the Suisse] Collines, nuages, trou du cul

Messagepar Nemau » 07 Jan 2016, 16:02

Et ensuite venir se plaindre dans la section d'entraide d'Oniro parce que le script est mal fait, ou parce qu'il rentre en conflit avec d'autres scripts.

Avatar de l’utilisateur
Roi of the Suisse
Dompteur de lions
Messages : 362
Inscription : 20 Août 2011, 00:33
Localisation : Rennes aussi

[Roi of the Suisse] Collines, nuages, trou du cul

Messagepar Roi of the Suisse » 09 Jan 2016, 00:38

On va pas refaire la guerre des RM comme il y a la guerre des navigateurs et la guerre des consoles.
Moi je préfère RMXP, Firefox et la PS2, toi tu préfères RM2003, Opéra et la CDi, c'est comme ça, point, on ne va pas refaire le monde dans ce topic.
:youhou:

Avatar de l’utilisateur
Nemau
Dompteur de lions
Messages : 334
Inscription : 08 Jan 2015, 04:56

[Roi of the Suisse] Collines, nuages, trou du cul

Messagepar Nemau » 09 Jan 2016, 04:51

la CDi
[Nonor Seal of Approval]
on ne va pas refaire le monde dans ce topic.
Traduction : tu fais chier avec ton débat à la con dans mon topic ! =>[]

Avatar de l’utilisateur
Roi of the Suisse
Dompteur de lions
Messages : 362
Inscription : 20 Août 2011, 00:33
Localisation : Rennes aussi

[Roi of the Suisse] Collines, nuages, trou du cul

Messagepar Roi of the Suisse » 09 Jan 2016, 12:11

On peut aller foutre la merde dans le topic de Gaetz si tu veux :flower:

Avatar de l’utilisateur
Roi of the Suisse
Dompteur de lions
Messages : 362
Inscription : 20 Août 2011, 00:33
Localisation : Rennes aussi

[Roi of the Suisse] Collines, nuages, trou du cul

Messagepar Roi of the Suisse » 17 Mars 2016, 10:45

Ceci est le 11111e message du forum et en l’occurrence il n'est pas très intéressant :youhou:

Avatar de l’utilisateur
Roi of the Suisse
Dompteur de lions
Messages : 362
Inscription : 20 Août 2011, 00:33
Localisation : Rennes aussi

[Roi of the Suisse] Collines, nuages, trou du cul

Messagepar Roi of the Suisse » 20 Avr 2016, 23:37

:) Mes avancées récentes

J'ai refait les pots de Kujira no Hara. Ces vieilleries dataient de 2008 ; à l'époque je m'en fichais de fournir un truc propre, mon objectif c'était que ça soit reconnaissable.

Image => Image

J'ai refait aussi les cubes :

Image => Image

J'ai dessiné un ours pour Némau, mais ce n'est qu'une base : Némau va le retoucher un peu. Je ne sais pas s'il va garder le violet, sur un vrai ours ça correspond à du gris foncé ; j'ai remplacé ça par du violet pour faire plus funky, mais ce n'est pas forcément dans l'esprit du jeu (Polaris 03). Ça aurait été parfait pour Kujira cela dit...

Image

J'ai rafistolé un singe pour Nanaky, mais il est trop grand alors il va falloir que je le refasse :

Image

Et j'ai acheté une beatle jaune, la même qu'Araragi. Vroum vroum !

Image

Avatar de l’utilisateur
Vincent
Dompteur de lions
Messages : 367
Inscription : 25 Nov 2011, 13:10

[Roi of the Suisse] Collines, nuages, trou du cul

Messagepar Vincent » 21 Avr 2016, 10:55

Tu te débrouilles bien en pixel art, ça rend très bien ! :pioche:

Avatar de l’utilisateur
PypeBros
Maître des caves
Messages : 172
Inscription : 07 Jan 2014, 15:43

[Roi of the Suisse] Collines, nuages, trou du cul

Messagepar PypeBros » 21 Avr 2016, 13:14

pas à dire: les pots et le cube ont été fameusement améliorés. Je proposerais juste de retoucher un rien l'antialiasing des lignes jaunes sur les pots.
Pour le singe -- très belle progression aussi -- le plus gênant pour l'instant, ce sont les bras. Je les trouves fort raides, et le tramage 1/2 sur l'ensemble du bras n'est pas vraiment idéal pour donner un aspect fourrure. (il faudrait que je retourne voir le post du renard sur Pixelation pour pouvoir donner des conseils plus précis).
Well done :)
Image Vite! venez essayer les jeux de Bilou! (nds)

Avatar de l’utilisateur
Giuliani
A sauté un trou
Messages : 49
Inscription : 11 Mars 2015, 22:42

[Roi of the Suisse] Collines, nuages, trou du cul

Messagepar Giuliani » 21 Avr 2016, 22:52

La beatle jaune est super bien faite, elle a du te prendre un temps fou :fufu:

Sinon très joli travail^^

Avatar de l’utilisateur
Roi of the Suisse
Dompteur de lions
Messages : 362
Inscription : 20 Août 2011, 00:33
Localisation : Rennes aussi

[Roi of the Suisse] Collines, nuages, trou du cul

Messagepar Roi of the Suisse » 22 Avr 2016, 14:05

Merci bienxe.
En effet antialiaser la bande jaune du pot bleu est une bonne idée !

Avatar de l’utilisateur
Roi of the Suisse
Dompteur de lions
Messages : 362
Inscription : 20 Août 2011, 00:33
Localisation : Rennes aussi

[Roi of the Suisse] Collines, nuages, trou du cul

Messagepar Roi of the Suisse » 18 Oct 2016, 17:04

Les dernières avancées sur la version RM de Kujira :

Le désert
Image

Les dernières avancées sur la version Java de Kujira :

Les effets météorologiques :
Image

Image

Au moment même où j'écris, je planche sur les autotiles.

Avatar de l’utilisateur
Vincent
Dompteur de lions
Messages : 367
Inscription : 25 Nov 2011, 13:10

[Roi of the Suisse] Collines, nuages, trou du cul

Messagepar Vincent » 26 Oct 2016, 16:53

Sympa ! J'ai un peu de code en C++ dans mon projet concernant les autotiles, mais ça reste de l'interprétation de l'autotile de Rm2k3 (vu que les maps sont faites sous l'éditeur classique).
Si tu as besoin, je peux t'envoyer des extraits (bien que je sois une mauvais en C++ et que j'ai codé comme je pouvais :cry: )

Avatar de l’utilisateur
Roi of the Suisse
Dompteur de lions
Messages : 362
Inscription : 20 Août 2011, 00:33
Localisation : Rennes aussi

[Roi of the Suisse] Collines, nuages, trou du cul

Messagepar Roi of the Suisse » 26 Oct 2016, 16:59

Cool de trouver quelqu'un d'autre qui a implémenté l'autotile :flower:
On comparera nos codes quand j'aurai fini :mdr:

Je ne rencontre pas de problème particulier. J'espère très vite vous montrer le résultat... qui sera le même que dans RM donc ça ne plongera pas forcément les foules dans un état d'extase extatique.

LE SAVIEZ-VOUS :
La première case de l'autotile, celle qui ne contient que les 4 coins (cas d'un carreau isolé), n'est en réalité pas utilisée dans le cas d'un carreau isolé : en effet les 4 coins utilisés sont ceux des cases 4, 6, 10, 12 de l'autotile :loupe:

Image

Avatar de l’utilisateur
Vincent
Dompteur de lions
Messages : 367
Inscription : 25 Nov 2011, 13:10

[Roi of the Suisse] Collines, nuages, trou du cul

Messagepar Vincent » 26 Oct 2016, 20:08

Bonne idée ! :mdr:
Ça m'a surpris aussi cette facette des autotiles de découpage par petits carrés de 4. :note:

J'ai rajouté une petite touche quand même. Quand tu crées le tileset. Tu peux faire des versions alternatives à chaque case source. Ensuite j'ai un algorithme qui décide quel alternative utiliser. C'est sympa car ça casse le côté repititif des cases sans rajouter du travail à la personne qui utilise le tileset. :crepe:

Avatar de l’utilisateur
Roi of the Suisse
Dompteur de lions
Messages : 362
Inscription : 20 Août 2011, 00:33
Localisation : Rennes aussi

[Roi of the Suisse] Collines, nuages, trou du cul

Messagepar Roi of the Suisse » 27 Oct 2016, 00:10

Wouala :

Image Cet autotile complexe permet de se rendre compte que tous les quarts de carreaux sont importants, et qu'il n'y a pas de redondance comme on pourrait le croire au premier abord.

Image

https://github.com/roiofthesuisse/Kujir ... otile.java

Code : Tout sélectionner

public static final int TAILLE_MORCEAU = Fenetre.TAILLE_D_UN_CARREAU/2; //quart haut gauche public static final int X_PLEIN_HAUT_GAUCHE = 2; public static final int Y_PLEIN_HAUT_GAUCHE = 4; public static final int X_PLEIN_HAUT_GAUCHE_VIDE_A_DROITE = 4; public static final int Y_PLEIN_HAUT_GAUCHE_VIDE_A_DROITE = 4; public static final int X_PLEIN_HAUT_GAUCHE_VIDE_EN_BAS = 2; public static final int Y_PLEIN_HAUT_GAUCHE_VIDE_EN_BAS = 6; public static final int X_PLEIN_HAUT_GAUCHE_VIDE_EN_BAS_ET_A_DROITE = 4; public static final int Y_PLEIN_HAUT_GAUCHE_VIDE_EN_BAS_ET_A_DROITE = 6; public static final int X_COIN_RENTRANT_HAUT_GAUCHE = 4; public static final int Y_COIN_RENTRANT_HAUT_GAUCHE = 0; public static final int X_BORD_VERTICAL_HAUT_GAUCHE_LOIN_D_UN_COIN = 0; public static final int Y_BORD_VERTICAL_HAUT_GAUCHE_LOIN_D_UN_COIN = 4; public static final int X_BORD_VERTICAL_HAUT_GAUCHE_PRES_D_UN_COIN = 0; public static final int Y_BORD_VERTICAL_HAUT_GAUCHE_PRES_D_UN_COIN = 6; public static final int X_BORD_HORIZONTAL_HAUT_GAUCHE_LOIN_D_UN_COIN = 2; public static final int Y_BORD_HORIZONTAL_HAUT_GAUCHE_LOIN_D_UN_COIN = 2; public static final int X_BORD_HORIZONTAL_HAUT_GAUCHE_PRES_D_UN_COIN = 4; public static final int Y_BORD_HORIZONTAL_HAUT_GAUCHE_PRES_D_UN_COIN = 2; public static final int X_COIN_SORTANT_HAUT_GAUCHE = 0; public static final int Y_COIN_SORTANT_HAUT_GAUCHE = 2; //quart haut droite public static final int X_PLEIN_HAUT_DROITE = 3; public static final int Y_PLEIN_HAUT_DROITE = 4; public static final int X_PLEIN_HAUT_DROITE_VIDE_A_GAUCHE = 1; public static final int Y_PLEIN_HAUT_DROITE_VIDE_A_GAUCHE = 4; public static final int X_PLEIN_HAUT_DROITE_VIDE_EN_BAS = 3; public static final int Y_PLEIN_HAUT_DROITE_VIDE_EN_BAS = 6; public static final int X_PLEIN_HAUT_DROITE_VIDE_EN_BAS_ET_A_GAUCHE = 1; public static final int Y_PLEIN_HAUT_DROITE_VIDE_EN_BAS_ET_A_GAUCHE = 6; public static final int X_COIN_RENTRANT_HAUT_DROITE = 5; public static final int Y_COIN_RENTRANT_HAUT_DROITE = 0; public static final int X_BORD_VERTICAL_HAUT_DROITE_LOIN_D_UN_COIN = 5; public static final int Y_BORD_VERTICAL_HAUT_DROITE_LOIN_D_UN_COIN = 4; public static final int X_BORD_VERTICAL_HAUT_DROITE_PRES_D_UN_COIN = 5; public static final int Y_BORD_VERTICAL_HAUT_DROITE_PRES_D_UN_COIN = 6; public static final int X_BORD_HORIZONTAL_HAUT_DROITE_LOIN_D_UN_COIN = 3; public static final int Y_BORD_HORIZONTAL_HAUT_DROITE_LOIN_D_UN_COIN = 2; public static final int X_BORD_HORIZONTAL_HAUT_DROITE_PRES_D_UN_COIN = 1; public static final int Y_BORD_HORIZONTAL_HAUT_DROITE_PRES_D_UN_COIN = 2; public static final int X_COIN_SORTANT_HAUT_DROITE = 5; public static final int Y_COIN_SORTANT_HAUT_DROITE = 2; //quart bas gauche public static final int X_PLEIN_BAS_GAUCHE = 2; public static final int Y_PLEIN_BAS_GAUCHE = 5; public static final int X_PLEIN_BAS_GAUCHE_VIDE_A_DROITE = 4; public static final int Y_PLEIN_BAS_GAUCHE_VIDE_A_DROITE = 5; public static final int X_PLEIN_BAS_GAUCHE_VIDE_EN_HAUT = 2; public static final int Y_PLEIN_BAS_GAUCHE_VIDE_EN_HAUT = 3; public static final int X_PLEIN_BAS_GAUCHE_VIDE_EN_HAUT_ET_A_DROITE = 4; public static final int Y_PLEIN_BAS_GAUCHE_VIDE_EN_HAUT_ET_A_DROITE = 3; public static final int X_COIN_RENTRANT_BAS_GAUCHE = 4; public static final int Y_COIN_RENTRANT_BAS_GAUCHE = 1; public static final int X_BORD_VERTICAL_BAS_GAUCHE_LOIN_D_UN_COIN = 0; public static final int Y_BORD_VERTICAL_BAS_GAUCHE_LOIN_D_UN_COIN = 5; public static final int X_BORD_VERTICAL_BAS_GAUCHE_PRES_D_UN_COIN = 0; public static final int Y_BORD_VERTICAL_BAS_GAUCHE_PRES_D_UN_COIN = 3; public static final int X_BORD_HORIZONTAL_BAS_GAUCHE_LOIN_D_UN_COIN = 2; public static final int Y_BORD_HORIZONTAL_BAS_GAUCHE_LOIN_D_UN_COIN = 7; public static final int X_BORD_HORIZONTAL_BAS_GAUCHE_PRES_D_UN_COIN = 4; public static final int Y_BORD_HORIZONTAL_BAS_GAUCHE_PRES_D_UN_COIN = 7; public static final int X_COIN_SORTANT_BAS_GAUCHE = 0; public static final int Y_COIN_SORTANT_BAS_GAUCHE = 7; //quart bas droite public static final int X_PLEIN_BAS_DROITE = 3; public static final int Y_PLEIN_BAS_DROITE = 5; public static final int X_PLEIN_BAS_DROITE_VIDE_A_GAUCHE = 1; public static final int Y_PLEIN_BAS_DROITE_VIDE_A_GAUCHE = 5; public static final int X_PLEIN_BAS_DROITE_VIDE_EN_HAUT = 3; public static final int Y_PLEIN_BAS_DROITE_VIDE_EN_HAUT = 3; public static final int X_PLEIN_BAS_DROITE_VIDE_EN_HAUT_ET_A_GAUCHE = 1; public static final int Y_PLEIN_BAS_DROITE_VIDE_EN_HAUT_ET_A_GAUCHE = 3; public static final int X_COIN_RENTRANT_BAS_DROITE = 5; public static final int Y_COIN_RENTRANT_BAS_DROITE = 1; public static final int X_BORD_VERTICAL_BAS_DROITE_LOIN_D_UN_COIN = 5; public static final int Y_BORD_VERTICAL_BAS_DROITE_LOIN_D_UN_COIN = 5; public static final int X_BORD_VERTICAL_BAS_DROITE_PRES_D_UN_COIN = 5; public static final int Y_BORD_VERTICAL_BAS_DROITE_PRES_D_UN_COIN = 3; public static final int X_BORD_HORIZONTAL_BAS_DROITE_LOIN_D_UN_COIN = 3; public static final int Y_BORD_HORIZONTAL_BAS_DROITE_LOIN_D_UN_COIN = 7; public static final int X_BORD_HORIZONTAL_BAS_DROITE_PRES_D_UN_COIN = 1; public static final int Y_BORD_HORIZONTAL_BAS_DROITE_PRES_D_UN_COIN = 7; public static final int X_COIN_SORTANT_BAS_DROITE = 5; public static final int Y_COIN_SORTANT_BAS_DROITE = 7; /** * Calculer l'apparence du carreau liable en fonction de son voisinnage. * @param x coordonnee x de la case sur la Map (en nombre de carreaux) * @param y coordonnee y de la case sur la Map (en nombre de carreaux) * @param largeurMap largeur de la Map (en nombre de carreaux) * @param hauteurMap hauteur de la Map (en nombre de carreaux) * @param numeroCarreau numéro de ce carreau de décor issu du Tileset * @param layer une des trois couches de décor de l'éditeur de Maps * @return carreau liable avec la bonne apparence */ public BufferedImage calculerAutotile(final int x, final int y, final int largeurMap, final int hauteurMap, final int numeroCarreau, final int[][] layer) { // On veut déterminer les connexions du carreau boolean connexionBas = false; boolean connexionGauche = false; boolean connexionDroite = false; boolean connexionHaut = false; boolean connexionBasGauche = false; boolean connexionBasDroite = false; boolean connexionHautGauche = false; boolean connexionHautDroite = false; // On considère que le bord de l'écran est liable lui aussi if (y == 0) { //bord supérieur de l'écran connexionHaut = true; connexionHautGauche = true; connexionHautDroite = true; } else if (y == hauteurMap-1) { //bord inférieur de l'écran connexionBas = true; connexionBasGauche = true; connexionBasDroite = true; } if (x == 0) { //bord gauche de l'écran connexionGauche = true; connexionHautGauche = true; connexionBasGauche = true; } else if (x == largeurMap-1) { //bord droit de l'écran connexionDroite = true; connexionHautDroite = true; connexionBasDroite = true; } // On regarde les connexions possibles avec les carreaux voisins int numeroVoisin; if (!connexionHaut) { numeroVoisin = layer[x][y-1]; connexionHaut = (numeroVoisin == numeroCarreau) || this.cousins.contains(numeroVoisin); } if (!connexionBas) { numeroVoisin = layer[x][y+1]; connexionBas = (numeroVoisin == numeroCarreau) || this.cousins.contains(numeroVoisin); } if (!connexionGauche) { numeroVoisin = layer[x-1][y]; connexionGauche = (numeroVoisin == numeroCarreau) || this.cousins.contains(numeroVoisin); } if (!connexionDroite) { numeroVoisin = layer[x+1][y]; connexionDroite = (numeroVoisin == numeroCarreau) || this.cousins.contains(numeroVoisin); } // Selon les cas, ceux-là ne sont pas forcément utiles pour dessiner le carreau if (!connexionHautGauche) { numeroVoisin = layer[x-1][y-1]; connexionHautGauche = (numeroVoisin == numeroCarreau) || this.cousins.contains(numeroVoisin); } if (!connexionHautDroite) { numeroVoisin = layer[x+1][y-1]; connexionHautDroite = numeroVoisin == numeroCarreau || this.cousins.contains(numeroVoisin); } if (!connexionBasGauche) { numeroVoisin = layer[x-1][y+1]; connexionBasGauche = (numeroVoisin == numeroCarreau) || this.cousins.contains(numeroVoisin); } if (!connexionBasDroite) { numeroVoisin = layer[x+1][y+1]; connexionBasDroite = (numeroVoisin == numeroCarreau) || this.cousins.contains(numeroVoisin); } final BufferedImage resultat = new BufferedImage(Fenetre.TAILLE_D_UN_CARREAU, Fenetre.TAILLE_D_UN_CARREAU, Lecteur.TYPE_DES_IMAGES); final Graphics2D g2d = (Graphics2D) resultat.createGraphics(); int xMorceauChoisi; int yMorceauChoisi; //quart haut-gauche du carreau if (connexionHaut) { if (connexionGauche) { if (connexionHautGauche) { if (connexionDroite) { if (connexionBas) { xMorceauChoisi = X_PLEIN_HAUT_GAUCHE; yMorceauChoisi = Y_PLEIN_HAUT_GAUCHE; } else { xMorceauChoisi = X_PLEIN_HAUT_GAUCHE_VIDE_A_DROITE; yMorceauChoisi = Y_PLEIN_HAUT_GAUCHE_VIDE_A_DROITE; } } else { if (connexionBas) { xMorceauChoisi = X_PLEIN_HAUT_GAUCHE_VIDE_EN_BAS; yMorceauChoisi = Y_PLEIN_HAUT_GAUCHE_VIDE_EN_BAS; } else { xMorceauChoisi = X_PLEIN_HAUT_GAUCHE_VIDE_EN_BAS_ET_A_DROITE; yMorceauChoisi = Y_PLEIN_HAUT_GAUCHE_VIDE_EN_BAS_ET_A_DROITE; } } } else { xMorceauChoisi = X_COIN_RENTRANT_HAUT_GAUCHE; yMorceauChoisi = Y_COIN_RENTRANT_HAUT_GAUCHE; } } else { if (connexionBas) { xMorceauChoisi = X_BORD_VERTICAL_HAUT_GAUCHE_LOIN_D_UN_COIN; yMorceauChoisi = Y_BORD_VERTICAL_HAUT_GAUCHE_LOIN_D_UN_COIN; } else { xMorceauChoisi = X_BORD_VERTICAL_HAUT_GAUCHE_PRES_D_UN_COIN; yMorceauChoisi = Y_BORD_VERTICAL_HAUT_GAUCHE_PRES_D_UN_COIN; } } } else { if (connexionGauche) { if (connexionDroite) { xMorceauChoisi = X_BORD_HORIZONTAL_HAUT_GAUCHE_LOIN_D_UN_COIN; yMorceauChoisi = Y_BORD_HORIZONTAL_HAUT_GAUCHE_LOIN_D_UN_COIN; } else { xMorceauChoisi = X_BORD_HORIZONTAL_HAUT_GAUCHE_PRES_D_UN_COIN; yMorceauChoisi = Y_BORD_HORIZONTAL_HAUT_GAUCHE_PRES_D_UN_COIN; } } else { xMorceauChoisi = X_COIN_SORTANT_HAUT_GAUCHE; yMorceauChoisi = Y_COIN_SORTANT_HAUT_GAUCHE; } } g2d.drawImage(this.image, 0, 0, TAILLE_MORCEAU, TAILLE_MORCEAU, xMorceauChoisi*TAILLE_MORCEAU, yMorceauChoisi*TAILLE_MORCEAU, (xMorceauChoisi+1)*TAILLE_MORCEAU, (yMorceauChoisi+1)*TAILLE_MORCEAU, null); //quart haut-droite du carreau if (connexionHaut) { if (connexionDroite) { if (connexionHautDroite) { if (connexionGauche) { if (connexionBas) { xMorceauChoisi = X_PLEIN_HAUT_DROITE; yMorceauChoisi = Y_PLEIN_HAUT_DROITE; } else { xMorceauChoisi = X_PLEIN_HAUT_DROITE_VIDE_EN_BAS; yMorceauChoisi = Y_PLEIN_HAUT_DROITE_VIDE_EN_BAS; } } else { if (connexionBas) { xMorceauChoisi = X_PLEIN_HAUT_DROITE_VIDE_A_GAUCHE; yMorceauChoisi = Y_PLEIN_HAUT_DROITE_VIDE_A_GAUCHE; } else { xMorceauChoisi = X_PLEIN_HAUT_DROITE_VIDE_EN_BAS_ET_A_GAUCHE; yMorceauChoisi = Y_PLEIN_HAUT_DROITE_VIDE_EN_BAS_ET_A_GAUCHE; } } } else { xMorceauChoisi = X_COIN_RENTRANT_HAUT_DROITE; yMorceauChoisi = Y_COIN_RENTRANT_HAUT_DROITE; } } else { if (connexionBas) { xMorceauChoisi = X_BORD_VERTICAL_HAUT_DROITE_LOIN_D_UN_COIN; yMorceauChoisi = Y_BORD_VERTICAL_HAUT_DROITE_LOIN_D_UN_COIN; } else { xMorceauChoisi = X_BORD_VERTICAL_HAUT_DROITE_PRES_D_UN_COIN; yMorceauChoisi = Y_BORD_VERTICAL_HAUT_DROITE_PRES_D_UN_COIN; } } } else { if (connexionDroite) { if (connexionGauche) { xMorceauChoisi = X_BORD_HORIZONTAL_HAUT_DROITE_LOIN_D_UN_COIN; yMorceauChoisi = Y_BORD_HORIZONTAL_HAUT_DROITE_LOIN_D_UN_COIN; } else { xMorceauChoisi = X_BORD_HORIZONTAL_HAUT_DROITE_PRES_D_UN_COIN; yMorceauChoisi = Y_BORD_HORIZONTAL_HAUT_DROITE_PRES_D_UN_COIN; } } else { xMorceauChoisi = X_COIN_SORTANT_HAUT_DROITE; yMorceauChoisi = Y_COIN_SORTANT_HAUT_DROITE; } } g2d.drawImage(this.image, TAILLE_MORCEAU, 0, 2*TAILLE_MORCEAU, TAILLE_MORCEAU, xMorceauChoisi*TAILLE_MORCEAU, yMorceauChoisi*TAILLE_MORCEAU, (xMorceauChoisi+1)*TAILLE_MORCEAU, (yMorceauChoisi+1)*TAILLE_MORCEAU, null); //quart bas-gauche du carreau if (connexionBas) { if (connexionGauche) { if (connexionBasGauche) { if (connexionDroite) { if (connexionHaut) { xMorceauChoisi = X_PLEIN_BAS_GAUCHE; yMorceauChoisi = Y_PLEIN_BAS_GAUCHE; } else { xMorceauChoisi = X_PLEIN_BAS_GAUCHE_VIDE_EN_HAUT; yMorceauChoisi = Y_PLEIN_BAS_GAUCHE_VIDE_EN_HAUT; } } else { if (connexionHaut) { xMorceauChoisi = X_PLEIN_BAS_GAUCHE_VIDE_A_DROITE; yMorceauChoisi = Y_PLEIN_BAS_GAUCHE_VIDE_A_DROITE; } else { xMorceauChoisi = X_PLEIN_BAS_GAUCHE_VIDE_EN_HAUT_ET_A_DROITE; yMorceauChoisi = Y_PLEIN_BAS_GAUCHE_VIDE_EN_HAUT_ET_A_DROITE; } } } else { xMorceauChoisi = X_COIN_RENTRANT_BAS_GAUCHE; yMorceauChoisi = Y_COIN_RENTRANT_BAS_GAUCHE; } } else { if (connexionHaut) { xMorceauChoisi = X_BORD_VERTICAL_BAS_GAUCHE_LOIN_D_UN_COIN; yMorceauChoisi = Y_BORD_VERTICAL_BAS_GAUCHE_LOIN_D_UN_COIN; } else { xMorceauChoisi = X_BORD_VERTICAL_BAS_GAUCHE_PRES_D_UN_COIN; yMorceauChoisi = Y_BORD_VERTICAL_BAS_GAUCHE_PRES_D_UN_COIN; } } } else { if (connexionGauche) { if (connexionDroite) { xMorceauChoisi = X_BORD_HORIZONTAL_BAS_GAUCHE_LOIN_D_UN_COIN; yMorceauChoisi = Y_BORD_HORIZONTAL_BAS_GAUCHE_LOIN_D_UN_COIN; } else { xMorceauChoisi = X_BORD_HORIZONTAL_BAS_GAUCHE_PRES_D_UN_COIN; yMorceauChoisi = Y_BORD_HORIZONTAL_BAS_GAUCHE_PRES_D_UN_COIN; } } else { xMorceauChoisi = X_COIN_SORTANT_BAS_GAUCHE; yMorceauChoisi = Y_COIN_SORTANT_BAS_GAUCHE; } } g2d.drawImage(this.image, 0, TAILLE_MORCEAU, TAILLE_MORCEAU, 2*TAILLE_MORCEAU, xMorceauChoisi*TAILLE_MORCEAU, yMorceauChoisi*TAILLE_MORCEAU, (xMorceauChoisi+1)*TAILLE_MORCEAU, (yMorceauChoisi+1)*TAILLE_MORCEAU, null); //quart bas-droite du carreau if (connexionBas) { if (connexionDroite) { if (connexionBasDroite) { if (connexionGauche) { if (connexionHaut) { xMorceauChoisi = X_PLEIN_BAS_DROITE; yMorceauChoisi = Y_PLEIN_BAS_DROITE; } else { xMorceauChoisi = X_PLEIN_BAS_DROITE_VIDE_EN_HAUT; yMorceauChoisi = Y_PLEIN_BAS_DROITE_VIDE_EN_HAUT; } } else { if (connexionHaut) { xMorceauChoisi = X_PLEIN_BAS_DROITE_VIDE_A_GAUCHE; yMorceauChoisi = Y_PLEIN_BAS_DROITE_VIDE_A_GAUCHE; } else { xMorceauChoisi = X_PLEIN_BAS_DROITE_VIDE_EN_HAUT_ET_A_GAUCHE; yMorceauChoisi = Y_PLEIN_BAS_DROITE_VIDE_EN_HAUT_ET_A_GAUCHE; } } } else { xMorceauChoisi = X_COIN_RENTRANT_BAS_DROITE; yMorceauChoisi = Y_COIN_RENTRANT_BAS_DROITE; } } else { if (connexionHaut) { xMorceauChoisi = X_BORD_VERTICAL_BAS_DROITE_LOIN_D_UN_COIN; yMorceauChoisi = Y_BORD_VERTICAL_BAS_DROITE_LOIN_D_UN_COIN; } else { xMorceauChoisi = X_BORD_VERTICAL_BAS_DROITE_PRES_D_UN_COIN; yMorceauChoisi = Y_BORD_VERTICAL_BAS_DROITE_PRES_D_UN_COIN; } } } else { if (connexionDroite) { if (connexionGauche) { xMorceauChoisi = X_BORD_HORIZONTAL_BAS_DROITE_LOIN_D_UN_COIN; yMorceauChoisi = Y_BORD_HORIZONTAL_BAS_DROITE_LOIN_D_UN_COIN; } else { xMorceauChoisi = X_BORD_HORIZONTAL_BAS_DROITE_PRES_D_UN_COIN; yMorceauChoisi = Y_BORD_HORIZONTAL_BAS_DROITE_PRES_D_UN_COIN; } } else { xMorceauChoisi = X_COIN_SORTANT_BAS_DROITE; yMorceauChoisi = Y_COIN_SORTANT_BAS_DROITE; } } g2d.drawImage(this.image, TAILLE_MORCEAU, TAILLE_MORCEAU, 2*TAILLE_MORCEAU, 2*TAILLE_MORCEAU, xMorceauChoisi*TAILLE_MORCEAU, yMorceauChoisi*TAILLE_MORCEAU, (xMorceauChoisi+1)*TAILLE_MORCEAU, (yMorceauChoisi+1)*TAILLE_MORCEAU, null); return resultat; }


Revenir vers « Espaces personnels »

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 7 invités

cron