#==============================================================================# ** Scene_Map#------------------------------------------------------------------------------# This class performs map screen processing.#==============================================================================
SIZE =64
PAGE_MAX =3
ROW =2
COL =5
X =0
Y =0
FONT_SIZE =18
SWITCH =1
SWITCH_OPEN =2class Scene_Map
#--------------------------------------------------------------------------# * Main Processing#--------------------------------------------------------------------------alias main_old main
def main
$game_switches[SWITCH_OPEN]=false@spriteBack= Sprite.new@spriteBack.bitmap=RPG::Cache.picture("back1")@spriteSelector= Sprite.new@spriteSelector.bitmap=RPG::Cache.picture("selector")@index=0@x= X
@y= Y
x =20+@index% COL *(SIZE)
y =20+@index/ COL *(SIZE)@spriteSelector.x=@x+ x
@spriteSelector.y=@y+ y
@spriteBack.x=@x@spriteBack.y=@y@window_item= WindowItemCustom.new((COL*SIZE)+48,(ROW*SIZE)+48)@window_item.x=@x@window_item.y=@y@spriteBack.z=@window_item.z-1@spriteSelector.z=@spriteBack.z+1@spriteBack.visible=false@window_item.visible=false@spriteSelector.visible=false
main_old
@spriteBack.bitmap.dispose@spriteBack.dispose@spriteSelector.bitmap.dispose@spriteSelector.dispose@window_item.disposeendalias update_old update
def update
if($game_switches[SWITCH_OPEN])if Input.repeat?(Input::LEFT)if(@index % COL ==0)p=@window_item.getPage-1if(p<1)p= PAGE_MAX
end@window_item.setPage(p)@spriteBack.bitmap=RPG::Cache.picture("back"+p.to_s)@index=(@index +(COL-1))%(ROW * COL)else@index=(@index -1)%(ROW * COL)endendif Input.repeat?(Input::RIGHT)if(@index % COL == COL -1)p=@window_item.getPage+1if(p> PAGE_MAX)p=1end@window_item.setPage(p)@spriteBack.bitmap=RPG::Cache.picture("back"+p.to_s)@index=(@index -(COL-1))%(ROW * COL)else@index=(@index +1)%(ROW * COL)endendif Input.repeat?(Input::UP)@index=(@index - COL)%(ROW * COL)endif Input.repeat?(Input::DOWN)@index=(@index + COL)%(ROW * COL)endif Input.trigger?(Input::C)# If command event ID is valid@item=@window_item.getItem(@index)if@item.common_event_id>0$game_switches[SWITCH]=true# Command event call reservation$game_temp.common_event_id=@item.common_event_id# If consumableif@item.consumable# Decrease used items by 1$game_party.lose_item(@item.id,1)end@window_item.refreshendend
x =20+@index% COL *(SIZE)
y =20+@index/ COL *(SIZE)@spriteSelector.x=@x+ x
@spriteSelector.y=@y+ y
if$game_switches[SWITCH]$game_switches[SWITCH]=false$game_switches[SWITCH_OPEN]=false
Graphics.freeze@spriteBack.visible=false@window_item.visible=false@spriteSelector.visible=false
Graphics.transitionendelseif$game_switches[SWITCH]$game_switches[SWITCH]=false$game_switches[SWITCH_OPEN]=true
Graphics.freeze@spriteBack.visible=true@window_item.visible=true@spriteSelector.visible=true
Graphics.transitionendend
update_old
endend#==============================================================================# ** WindowItemCustom#------------------------------------------------------------------------------#==============================================================================class WindowItemCustom < Window_Base
#--------------------------------------------------------------------------# * Object Initialization# w : Width# h : Height# c : Column# r : Row#--------------------------------------------------------------------------def initialize(w,h)super(0,0,w,h)self.contents= Bitmap.new(w -32, h -32)self.back_opacity=0self.opacity=0self.visible=true@page=1
refresh
enddef getItem(i)return@data[i +(ROW * COL)*(@page -1)]enddef setPage(i)@page= i
refresh
enddef getPage
return@pageend#--------------------------------------------------------------------------# * Refresh#--------------------------------------------------------------------------def refresh
self.contents.clearself.contents.font.color= normal_color
@data=[]for i in1...$data_items.sizeif$game_party.item_number(i)>0@data.push($data_items[i])endend# If item count is not 0, make a bit map and draw all items@item_max=@data.sizeif@item_max>0self.contents= Bitmap.new(width -32, ROW * SIZE +4)self.contents.font.size= FONT_SIZE
index =(ROW * COL)*(@page -1)for i in0...(ROW * COL)if(index+i <@data.size)
draw_item(index, i)endendendend#--------------------------------------------------------------------------# * Draw Item# index : item number#--------------------------------------------------------------------------def draw_item(j,index)
item =@data[j+index]case item
whenRPG::Item
number =$game_party.item_number(item.id)whenRPG::Weapon
number =$game_party.weapon_number(item.id)whenRPG::Armor
number =$game_party.armor_number(item.id)endif item.is_a?(RPG::Item)and$game_party.item_can_use?(item.id)self.contents.font.color= normal_color
elseself.contents.font.color= disabled_color
end
x =4+ index % COL *(SIZE)
y = index / COL * SIZE
bitmap =RPG::Cache.icon(item.icon_name)
opacity =self.contents.font.color== normal_color ? 255 : 128self.contents.blt(x, y +4, bitmap, Rect.new(0,0, SIZE, SIZE), opacity)self.contents.draw_text(x +2, y + SIZE -24,24,32, number.to_s,0)endend
La nouvelle version du script.
J'pense que tu dois pouvoir tout paramétrer comme tu veux avec les Consts en début de script.
ROW, c'est le nombre de ligne ( Donc 2 dans le cas de ton screen ), COL le nombre de colonne ( 5 pour ton screen donc ), PAGE_MAX, le nombre de page à afficher.
Donc si tu veux 1 page de 30 items, tu mets que COL * ROW = 30 ( COL = 5 et ROW = 4 par exemple ), avec PAGE_MAX = 1.
Et de base, le max d'objet est de 99, donc ça gênera pas ^^.
Après, le gros problème de ton système, c'est que si t'as plus d'item que de nombre de slot disponible, les objets n’apparaîtront pas.
( Le joueur les aura bien, mais ils ne pourra pas y accéder. )
Donc si penses y ^^.
( Je prend note de tout les commentaires, même si je n'y répond pas )
Mack - posté le 09/08/2017 à 00:48:28. (2313 messages postés) -
Bah, quand le joueur appuie sur les touches L et R, si il est dans le menu d'item, tu actives l'interrupteur SWITCH, ça fermera le menu d'item, et toi tu appelles ton autre menu.
Et si il est censé être dans les Items après un L / R, tu fermes ton menu et tu actives SWITCH pour ouvrir le menu.
En gros, SWITCH c'est comme un bouton poussoir, quand t'appuie dessus, si la lumière été allumé, elle s'éteint, et si elle été éteinte elle s'allume.
Tandis que SWITCH_OPEN sert juste à savoir si le menu d'Item est ouvert.
( Je prend note de tout les commentaires, même si je n'y répond pas )
La constante SIZE, c'est la taille d'une icone, SWITCH, c'est un interrupteur qui sert à detecter si tu fermes ou ouvre le menu ( CF l'évent de droite pour comprendre, quand t'actives l'interrupteur, le menu s'ouvre / se ferme. ), SWITCH_OPEN c'est pour savoir si le menu est ouvert ou fermé.
Les variables @x / @y correspondent aux coordonnées X/Y de la fenêtre.
En appuyant sur C sur un item, ça appellera l'évent commun lié à cet item.
( Je prend note de tout les commentaires, même si je n'y répond pas )
nbr_occurence =[]# J'ai un doute sur la création du tableau, donc la ligne du dessus sera peut être pas exacte.for i in1..14
j =rand(42)+1while(nbr_occurence[j]<4)# Tu vérifies que t'es pas déjà 4 fois sortie cette valeur.
j =rand(42)+1end# Y a moyen de faire mieux pour le while, mais j'me souviens plus du tout comment faire en ruby# A if j<10
nbr_occurence[j]=4# Si t'as entre 1 et 9 tu mets à 4, comme ça tu peux plus en avoirelse
nbr_occurence[j]++# Sinon, tu augmentes juste le nombre de 1endend
Ça devrait marcher je pense.
( Je prend note de tout les commentaires, même si je n'y répond pas )
Mack - posté le 04/07/2017 à 19:06:22. (2313 messages postés) -
C'est mieux ?
( Perso j'ai un peu du mal avec les dithering pour le feuillage, je le trouve vraiment pas bien fait, mais j'arrive à rien avec >< )
Par contre, les couleurs clairs pour le perso ça vous gène pas ?
J'ai peur que ça soit trop clair, et que du coup on est du mal à le distinguer du décor.
( Après, c'est que du test, donc je changerais le design du perso d'ici que j'ai un truc potable je pense )
1mag0 a dit:
Les couleurs des arbres ne me choque pas, mais il est vrai que les 4 troncs des "gros arbres ronds" ne sont pas super . Je ne suis pas trop fan de l'eau et des falaises. Les textures/motifs sont bon mais ça reste très carré.
Mais sinon l'ensemble est plutôt chouette et le personnage est attachant.
Le fait que ça soit carré, j'verrais p't'être plus tard, mais pour l'instant j'ai la flemme xD.
Konnie a dit:
La palette est trop hétérogène c'est clair! Mais ça à du charme, inspires toi peu-être des couleurs utilisées dans un jeu que t'aimes bien pour changer le contraste entre chaque teinte.
Bah, en fait pour la plupart des couleurs c'est la palettes de Zelda Minish cap ^^".
( Grosso modo, j'ai changé que la couleur de l'eau, la couleur sombre du feuillage, et la couleur claire des petits buissons )
Merci en tout cas ^^.
( Je prend note de tout les commentaires, même si je n'y répond pas )
Mack - posté le 04/07/2017 à 13:34:53. (2313 messages postés) -
Petit test de tileset custom.
J'en suis pas parfaitement convaincu ( notamment au niveau des gros arbres rond, que je trouve vraiment moche, ou les murs qui sont pas tip top ), mais je trouve que dans l'ensemble c'est pas si dégueu ^^.
( Bon, faut aussi voir si j'arrive à faire les animations du personnage, parce que sinon ça sert à rien xD )
( Je prend note de tout les commentaires, même si je n'y répond pas )
Mack - posté le 30/06/2017 à 12:18:13. (2313 messages postés) -
Si si c'est ce que je compte faire ^^.
Mais certaine classes ne sont pas sérializable, donc si quelqu'un essaie de le faire, ça lui crashera à la gueule
( Je prend note de tout les commentaires, même si je n'y répond pas )
Mack - posté le 30/06/2017 à 10:47:03. (2313 messages postés) -
Nope, mais bon, ça devrait pas être trop dur.
( En même temps, j'ai pas grand chose à sauvegarder : la map du joueur, sa pos, et les Switches / Variables. Le seul truc qui pourrait coincé, c'est les variables, comme on peut y mettre n'importe quoi dedans, si on y cale un objet non sauvegardable ça peut foutre la merde. )
Du coup, hier j'ai pas mal tafé, j'ai rajouté la base du son ( Une BGM + plusieurs effets sonore ), j'ai refait les variables / switches, j'ai aussi rajouter le contrôle à la manette, et j'ai corriger pas mal de petits détails.
Petit test de mapping, mais franchement, je trouve ce tileset presque dégueulasse pour les intérieurs :/.
L'HUD est quasiment entièrement fonctionnel, y a juste les armes en hauts à droite qui sont affiché par une simple image, tout le reste c'est codé avec un évent.
J'vais commencé à faire un premier ennemi, et après je ferais surement le système de save.
( Je prend note de tout les commentaires, même si je n'y répond pas )
Mack - posté le 26/06/2017 à 11:49:27. (2313 messages postés) -
Yep je trouve que j'ai eu une superbe idée avec ces Tags.
Ça servira peut être pas à tout le monde, mais ça peut être ultra utile, notament pour des events qui utilise plusieurs events ( un boss avec plusieurs hitbox par exemple ).
En gros dans les gros ajouts fait que je fasse le son, que je refasse les interrupteur ( pour l'instant changer de maps les reset, et même si ça peut être utile faut que j'en mette qui se reset pas ), et que je fasse le système de save .
Après pour l'éditeur ca sera surtout des petites modifications ( Faire l'éditeur d'event proprement, passer par Notepad++ pour chaque events ça va 5minutes, et éventuellement rajouter d'autres fenêtres genre un éditeur d'item, de héros ou ce genre de truc. )
Mais je pense faire un mini projet avant, faire la Doc, et après voir pour les améliorations de l'éditeur.
( Je prend note de tout les commentaires, même si je n'y répond pas )
Mack - posté le 25/06/2017 à 20:43:01. (2313 messages postés) -
Yep, j'ai d'ailleurs changé pas mal de truc pour pas avoir deux projets ( un pour le moteur, et un pour l'éditeur ), mais qu'un seul.
Au final, j'ai mis un semblant de système de plugin :
En gros, sur chaque zone ( donc un lot de 5*5 maps ), on peut définir un évent qui s’effectura sur chaque map.
Et un autre évent qui, lui, est propre à chaque map.
J'ai fait un mini système d'action-RPG avec, donc ça marche plutôt bien.
Pour les évents, j'ai rajouter un système de Tag :
En gros, on peu mettre des évents dans une HashMap avec un String comme clé, du coup ça permet de le retrouver très facilement.
( Par exemple pour mon système d'ARPG, j'ai taggué mon Epée, et quand je devais faire des collisions avec cette dernière, j'allais juste la chercher avec son Tag )
J'ai aussi fait un semblant de gestion des image comme dans RM, j'suis en train de faire un HUD avec.
( Je prend note de tout les commentaires, même si je n'y répond pas )
Mack - posté le 24/06/2017 à 13:02:14. (2313 messages postés) -
wait ça attends en ms ( ou attend qu'on lui redise de recommencer ).
waitFrame attend en frame, c'est ça la différence ^^.
Au final j'ai trouvé pourquoi ça buggué, c'était juste mon système de copier/coller qui me mettais 4000 évents au lieu de 500 :/.
Du coup je tombe effectivement à environ 2 à 3 secondes pour une map de 480 évents, ça dépend de la gueule de l'évent.
Par contre, sur des évents un peu gros, le jeu se met à ramer :'/.
( En même temps, quand je dis un peu gros, c'est 480 évents, qui font 480 boucles chacun. Donc ça me semble un peu normal que dans ce cas là les FPS diminue xD. )
J'vais essayer de voir pour faire une mini démo pour voir comment ça réagit avec de vrai maps et de vrai évent.
( Je prend note de tout les commentaires, même si je n'y répond pas )
Mack - posté le 24/06/2017 à 03:39:40. (2313 messages postés) -
setZ permet de locker la position Z d'un évent ( Donc de le mettre au dessus de tout les évents, ou au contraire, de le mettre en dessous de tous. Utile pour les interrupteur, par exemple ), sinon, selon que l'évent est une case au dessus ou au dessous, il s'affichera par dessous ou par dessus l'autre évent. ( Comme dans RM quoi ), et waitFrame permet de faire attendre l'évent.
Je pensais que ça venait de waitFrame, du coup j'ai mis toute la fonction en commentaire, mais ça change rien :/.
Donc va falloir que je regarde en profondeur ce qu'il se passe :/.
( Je prend note de tout les commentaires, même si je n'y répond pas )
Mack - posté le 23/06/2017 à 22:19:09. (2313 messages postés) -
Bah, l'idée de l'écran de chargement, en soi si c'est pas long, c'est pas génant.
Après, je pense pas utilisé cette solution, mais pas forcement parce que c'est un écran de chargement, mais plutôt parce que chargé 25 maps en continue, ça risque de trop flingué la Ram pour rien :/.
Après, j'ai commencé à opti le truc, je descend de 0.2s à 0.4s contre 0.9s sur une map avec "peu" d'évent ( 14 ), 0.01s sans évent idem avec l'ancienne méthode ( non sans déc ), et 4s à 6s contre 8s avec une map pleine.
Donc c'est pas encore ça, mais ça avance bien.
Après, je viens de changer les évents de tests, et sur une map pleine, je tombe à ... 22 à 30 secondes d'attentes :').
Pourtant, mon évent est pas beaucoup plus compliqué, on est passé de ça :
function create(){self.setCharas("block.png");self.width=12;self.height=12;self.setZ(-1);}
function update(){self.setFrame(1);self.waitFrame(60)self.setFrame(0);self.waitFrame(60)}
function die(){}
function remove(){}
Donc en soit, pas grand chose de différent, et pourtant, le temps d'attente est complètement différent.
Après, je me dis que si le type me calle 480 évent, c'est qu'il est teubé, mais bon, j'vais quand même essayer d'opti au max que je peux.
( Je prend note de tout les commentaires, même si je n'y répond pas )
Mack - posté le 21/06/2017 à 14:29:58. (2313 messages postés) -
Nope, pas de système de plugin de prévu.
( Et je pense pas en mettre, le log est pas destiné aux personnes ne connaissant pas du tout la prog, donc comme ça sera libre, à eux de faire ce qu'ils veulent. )
Du coup ouais c'est la création des Interpreteurs ( la classe ScriptEngine ), et l'interpretation de chaque évent qui prend du temps.
Après, c'est un temps """"honnête"""" : avec une dizaine d'évent sur la map, ça prend à peu près une seconde, mais avec une map pleine d'évents ( donc 30 * 16 = 480 ), ça prend à peine 7 secondes.
Et j'ai aucun lag une fois la map chargée. ( Même avec mes 480 évents. Après, ça reste des évents simples, à voir avec des trucs compliqué )
Donc j'vais voir, p't'être que plutôt que de charger map par map, j'vais charger zone par zone, avec un écran de chargement entre chaque zone.
Comme ça, on pourra passer de map en map sans aucun soucis, et on est pas censé changer de zone sans arrêt, donc on devrait éviter les chargement toute les 10 secondes.
J'vais essayer de voir un peu tout ça d'ici la fin de semaine.
( Je prend note de tout les commentaires, même si je n'y répond pas )
Mack - posté le 21/06/2017 à 13:40:21. (2313 messages postés) -
winterskill a dit:
ah ouais, pas mal! mais tu l'as scripté en js, l'évent ?
en revanche, la map saute, quand tu appuie sur la touche espace...
par contre, le style/apparence des gui sera codé en dur, il sera impossible de le modifier ?
Yep, les évents c'est du JS. Du coup, ça permet de faire des trucs relativement puissant.
Comment ça la map saute quand t'appuie sur espace ?
Pour l'interface, ouais, si tu veux changer des trucs, faudra le recoder.
Roi of the Suisse a dit:
C'est l'interprétation du javascript descriptif de l'évènement qui prend du temps au chargement de la map ?
Est-ce que lors de l'attente entre deux "cinematics" les autres évènements continuent de travailler ?
Je pense que c'est la création des Thread pour chaque évents, suivit du Parser et tout le tintouin. En vrai, j'ai vu que ça patiner en changeant de map, mais comme j'ai fait ça hier à 3h du mat', j'ai pas pris le temps de regarder le pourquoi du comment.
Parce quen en gros, j'ai choisis de faire un système Multi-Threader, mais où le jeu n'effectue qu'un Thread à la fois, selon ce que je lui demande.
( Donc j'execute le Thread principale, puis après j'execute / je reprends les un après les autres les Thread de mes évents, en les mettant en pause quand besoin ( Donc quand y a un déplacement, une cinématics ... ), et à la fin d'une boucle je le freeze pour redonner la main au Thread principale, qui appelle l'évent suivant, et si y a plus d'évent effectue le reste du code.
Faudrait que je regarde comment ça se comporte avec beaucoup d'évent sur une map.
Ouais, pendant une "cinematics", les autres évents sont freeze.
( Je prend note de tout les commentaires, même si je n'y répond pas )
Mack - posté le 21/06/2017 à 11:24:23. (2313 messages postés) -
Bon, finalement, j'ai eu un peu plus de temps pour moi, et surtout un regain de volonté.
Du coup, j'ai pu faire ce système de commande bloquante dans un évent :
Du coup, on peut voir que la caisse à droite fait bien ses mouvement un a un, alors que le code est un truc comme ça :
Pareil pour les cinematics, on voit que les deux se jouent à la suite, en attendant que j'appuie sur Espace à chaque fois.
C'est pas parfait mais dans l'ensemble ça marche plutôt bien.
( Le plus gros problème, c'est que quand je rentre dans une salle, le jeu mets un certains temps à charger les évents.
J'vais essayer de les faire charger pendant le travelling. )
Du coup, j'vais p't'être voir pour faire un mini projet pour montrer de quoi c'est capable.
( Je prend note de tout les commentaires, même si je n'y répond pas )
Mack - posté le 13/06/2017 à 12:19:42. (2313 messages postés) -
Oh, dans les jeux en VR y avait quand même Moss, le jeu avec la souris, qui m'a plutôt intéressé perso.
Après, c'est du PS-VR, donc j'y toucherais surement jamais, mais le jeu avait avait l'air plutôt jolie, et a du potentiel je pense.
( Je prend note de tout les commentaires, même si je n'y répond pas )
Mack - posté le 08/06/2017 à 22:57:27. (2313 messages postés) -
Nope, j'sors d'un mois de projet pour la Fac, et j’enchaîne avec le boulot tout l'été ^^'.
Donc j'vais essayer d'avancer un peu, mais à mon avis, cet été je ferais pas grand chose xD.
( Je prend note de tout les commentaires, même si je n'y répond pas )
Mack - posté le 09/05/2017 à 23:30:01. (2313 messages postés) -
Ah, c'est cool, j'voulais justement retoucher au système de donjon Zelda aléatoire .
Bon, mon niveau d'anglais est vraiment pas terrible, donc à la première écoute, j'ai pas pigé grand chose de ce qu'elle disait, mais j're-regarderais demain ou Jeudi.
( Je prend note de tout les commentaires, même si je n'y répond pas )
Mack - posté le 22/04/2017 à 22:06:54. (2313 messages postés) -
winterskill a dit:
Salut!
J'ai essayé la nouvelle version que tu a uploadé, et voici un petit compte-rendu de mon impression (au cas où il pourrait t'aider) :
Alors, globalement, ça avance bien et vite! Je trouve ton éditeur bien plus agréable à utiliser que celui des RM! (sincèrement). Alors, voilà ce qui est SUPER GENIALISSIME!!!:
- j'aime bien la fenêtre qui t'indique que la sauvegarde à réussie!
- j'aime bien aussi la police
- le logiciel est assez léger!
- les maps générées sont vraiment grandes
- il est simple d'utilisation (il ne demande pas trois mois de domptage avant de donner le meilleur de lui-même)
- il est (très) rapide
Et voici ce qui peut être amélioré :
- comment choisir le tileset qu'on veut utiliser (après l'avoir rajouté dans le dossier "tilesets")?
En dessous du bouton nouveau tileset, t'as un bouton ouvrir. C'est celui là qu'il faut utiliser ^^.
- attention! on ne voit pas les tiles qui sont sur la toute droite, elles sortent de l'écran!
Normalement non. Je pense plutôt que c'est les cases de la map d'à côté que tu dois voir ^^. ( C'est histoire de pas avoir a revenir sur l'ancienne map pour faire un lien propre )
- le ctrlZ ne fonctionne pas
Ah ? Bizarre ça. Peut être que je l'avais pas mise dans cette version je regarderais/
- dans les dialogues, quand on en met trop, ils sortent de l'écran (mais bon, ça à la limite osef il suffit d'en mettre plusieurs à la suite)
Yep. Ça fait comme dans RM quoi. Mais j'ai prévu de regarder comment faire pour afficher plusieurs messages si le texte est trop long.
- en fait on ne peut pas mettre plusieurs evenements à la suite dans une même case...
Yep. C'est le gros problème du système. C'est voulu. Maintenant, si j'arrive à finir le nouveau système ça posera plus de problème ^^.
- on peut toujours pas mettre en plein écran
Cf plus bas.
- l'evenement mob ne fonctionne pas
- dans l'evenement "chest", comment fait-on pour ajouter du contenu au coffre?
Normal, c'est deux options ne sont pas encore faites. Dans cette version, c'était vraiment la base de la base de l'ancien système d'évent.
et pour finir, quelques idées personnelles d'ajouts/changements/suppressions (pioche dedans si tu aime, laisse sinon) :
- quand on fait evenements > teleport > set destination > le_nom_de_ma_map, il faut cliquer sur un bouton rouge pour accepter. Peut-être devrait-tu mettre un bouton vert, non? (c'est plus intuitif)
Au final y auras surement un vrai bouton ^^. Pour l'instant, c'est juste un placeholder.
- activer le bouton "maximiser"
Comme pour le plein écran, perso je deteste ça. Surtout que ça va foutre la merde comme pas possible xD. Mais j'vais essayer de voir.
- il pourrait être pas mal de pouvoir exporter la map sous forme d'image (par exemple si on veut créer une map en panorama pour un jeu RM et qu'on ne veut pas se faire chier avec gimp2 ou photoshop -> on va sur mapEditor, on crée la map et on l'exporte en image puis on l'importe en background dans rm)
Bonne idée. J'verrais pour faire ça en même temps que pour le binaire de Monos.
PS : juste quelques questions :
- est-ce qu'on peut lancer le jeu?
Nope pas dans cette version ^^. J'suis en train de bosser dessus le moteur pour l'instant.
- à quoi sert la deuxième barre d'outils vide en haut? c'est voué à une utilisation future?
Très bonne question xD.
En vrai, c'est surtout que j'ai la flemme de l'enlever, en espérant trouver une idée sur quoi en faire xD.
Mais je pense qu'à terme elle dégagera ^^.
PPS : mais ce scripting, c'est un langage que tu as inventé, ou un standalone intégré, ou un spécifique à cette classe ScriptEngine?
En gros c'est une classe de base de Java, qui permet d’exécuter du code d'un autre langage contenu dans une chaîne de caractère.
L'avantage, c'est que même une fois le programme compiler, je peux continuer à exécuter du code "nouveau".
Si j'arrive à rien avec la mouture actuel, j'partirais surement sur du langage perso, mais pour l'instant c'est du javascript.
Bonne chance ! [/casse-pied]
Merci en tout cas ^^.
( Je prend note de tout les commentaires, même si je n'y répond pas )
Mack - posté le 20/04/2017 à 14:09:15. (2313 messages postés) -
Roi of the Suisse a dit:
- Concernant les passabilités, le personnage a une boite de collision carrée ou ponctuelle ?
- Pourras-tu imposer un déplacement à un évènement si tu ne peux lui faire faire que des actions instantanées ?
- Ça dépend ce que t'entends par ponctuelle. En gros c'est un carré et je regarde où ce trouve le carré dans la grille 16 / 16, ou les hitbox des autres évents.
- Plus ou moins. C'est faisable, mais c'est la merde quoi :/.
( Je prend note de tout les commentaires, même si je n'y répond pas )
Mack - posté le 18/04/2017 à 20:16:03. (2313 messages postés) -
Bah, c'est ce que j'essaie de faire, mais comme j'utilise la classe ScriptEngine, bah, j'peux pas mettre en pause, et reprendre l'exéc du code à chaque frame là où je m'en été arrêté :/.
( Ça me permet juste d'exécuter du code en entier )
J'pense que je suis bon pour faire mon propre parser et interpreter du coup :/.
Roi of the Suisse a dit:
Faire un éditeur de maps, ce n'est pas pareil que faire un moteur de jeu. Réfléchis bien à toute ton architecture avant de te lancer. Sinon tu vas te retrouver coincé et ton projet va finir à la poubelle.
Bah, maintenant que j'ai bien commencé l'Editeur j'attaque le moteur, histoire de justement voir ce qui va pas.
EDIT :
Petit exemple de ce qu'on peut faire avec ce système d'évent.
function create(){
setCharas("switch.png");//# On load le charasself.setPassable(false);//# On dit que le joueur passe pas dessusself.width=12;//# On donne la largeur de la hitboxself.height=12;//# Idem pour la hauteur}
function update(){if(player.active(self)){//# Si le joueur est contre cet event et appuie sur espaceif(self.getGlobalSwitch("switchActive")==false){//# Si l'interrupteur gloabl "switcActive" est sur falseself.setFrame(1);//# Je change la frame d'afficherself.setGlobalSwitch("switchActive",true);//# Et j'inverse le switch}else{self.setFrame(0);//# Idem iciself.setGlobalSwitch("switchActive",false);}}}
function die(){}
function remove(){}
Donc c'est plutôt simple à utiliser, et ça me semble plutôt puissant, tant qu'on doit pas faire attendre l'évent :').
( Je prend note de tout les commentaires, même si je n'y répond pas )
Petite préférence pour le deuxième, mais bon, j'sais pas, ça me semble pas super top.
Sinon, j'ai commencé à me dire que le système d'évent, comme je l'avais prévu, ça risque de franchement pas être top.
Du coup, j'y ai un peu réfléchie, et j'me suis dit que j'aller faire un truc en scripting :
En gros, pour l'instant ( donc dans le très long terme il y aura une véritable interface à la RM ), on programme notre évent, un petit exemple :
function create(){}
function update(){if(contact(player,self)){
callCinematics("forest.png","face1.png","SALUT");
teleport("test",0,5,5);}}
function die(){}
function remove(){}
En gros, cet évent ne fait rien, sauf si le joueur entre en contact avec l'évent, dans ce cas, il ouvre la fenêtre de cinematique ( CF plus haut ), et TP le joueur dans la map test/map0.xml aux positions 5 5.
Le seul vrai soucis que ça me pause, c'est que je peux pas faire attendre le code :/.
En gros, pour la petite explication technique, j'utilise les classes ScriptEngine de Java qui permet d’exécuter du code javascript depuis une String.
Donc quand je load mon évent, je load toute ses fonctions ( dont les principales create/update/remove ), et j'exécute les fonctions aux cas par cas.
( Donc pour update, à chaque frame j'appelle la fonction JS update de tout mes évents. )
Sauf que, comme j’exécute le code dans la boucle principale, je peux pas faire de sleep sans tout freeze, et si je veux faire avec conditions, ça risque d'être très vite la merde ( Surtout si je finis par passer par une interface graphique ).
Donc, la seule solution "simple" qui me vient à l'esprit, c'est de donner un Thread à chaque évent.
Mais j'ai un peu peur que ça fume les performances :/.
Des avis ?
( Je prend note de tout les commentaires, même si je n'y répond pas )
Mack - posté le 15/04/2017 à 21:45:48. (2313 messages postés) -
winterskill a dit:
ah ok. Et pour les events, tu va garder la configuration de rm (popup multi-onglets avec des boutons pour les commandes) ou tu va changer ?
CF les dernier screens ^^.
En gros la fenêtre des tiles sera remplacé par les quelques commandes disponibles. J'pense que je garderais ça comme ça si je dois changer le fonctionnement des évents.
J'ai testé la démo que tu a mis dans le premier post, et c'est plutôt pas mal. En revanche, il y a plusieurs bugs/trucs qui vont pas (en tout cas chez moi) :
* la commande enregistrer ne donne aucun signe de son bon fonctionnement
Effectivement, j'avais jamais pensé à ça, ( dans la plupart des programmes je fais jamais attention à ça,
et d'un côté ça me ferais chier de devoir cliquer tout le temps sur un bouton pour valider la sauvegarde. Mais j'verrais pour mettre une mini pop up quelque part ^^
* je n'ai pas trouvé comment ajouter les évènnements
Pas encore disponible dans cette version. ( Qui est trèèèès vieille par rapport à où j'en suis )
* c'est normal qu'on ne puisse pas mettre en agrandi?
Ouais normal. J'ai bloqué l'aggrandissement, mais je verrais pour permettre de mettre la fenêtre en plus grand tout en gardant le ratio
* j'ai regardé dans les data du logiciel, et les maps générées produisent beaucoup de petits fichiers XML.
Je me permet de proposer humblement quelques solutions pour certains des problèmes :
* pour la commande enregistrer, peut-être que tu pourrais afficher un message qui dit quelque chose du genre "map enregistrée", ou, mieux, proposer de choisir nous-même l'emplacement où on veut sauver la map.
* pour les maps générées, je crois bien que Java possède un bon traitement des archives; tu pourrais générer un seul fichier, en ".map" ou un truc du genre, qui serait une archive zip renommée, et qui contiendrait les fichiers XML. Quand on l'ouvre, le logiciel décompresse une copie de la map et travaille dessus, puis la recompresse et remplace l'ancienne version quand on enregistre.
Ça part contre c'est voulu, et ça changera surement pas. En fait, j'me suis posé la question, tout packé en un seul fichier, ou mettre plusieurs fichiers ? J'me suis dis que tout faire en plusieurs fichiers permet de charger bien plus efficacement les maps.
* Si on peut choisir où mettre ses maps, tu pourrais modifier la commande ouvrir pour qu'on puisse chercher dans l'ordinateur le fichier de la map.
Dans la dernière version, j'ai rajouter un petit fichier .cfg qui permet de dire à l'éditeur où il doit charger toute les ressources ( donc maps, tilesets, autotiles, ... )
* mettre des titres avec les noms des boutons quand on passe dessus (car pour les gens qui ne connaissent pas encore bien le logiciel, on peut mettre du temps à trouver les bons boutons).
On m'à déjà fait la remarque, mais faut que je le fasse xD
Bonne chance et merci d'avoir lu jusqu'au bout!
Merci en tout cas ^^.
J'verrais pour ré-up une version compiler dans pas trop longtemps ^^.
( J'vais essayer de faire l'éditeur de dialog avant. )
( Je prend note de tout les commentaires, même si je n'y répond pas )
Mack - posté le 14/04/2017 à 13:14:17. (2313 messages postés) -
Monos a dit:
Citation:
J'ferais peut être un truc pour exporter seulement le premier layer, mais faire des fichiers Bits à bits ça à l'air d'être un peu la merde en Java, mais y a moyen que ça soit intéressant à faire.
Rien que le premier layers c'est déja un bon pas et un bon truc.
Merci.
Java ne sais pas créer des fichier binaires ?
Aucune idée, j'ai pas encore regarder ^^'.
Je pense que si, y a vraiment de raison que ça soit pas possible.
( Au pire j'verrais pour coder un mini programme annexe en C )
winterskill a dit:
c'est normal l'icone java et le "(60 fps)" en haut de la popup "set destination", ou c'est juste parce que c'est pas finalisé?
Mack a dit:
Ça peut servir aussi, même si Tiled + Photoshop, c'est peut être mieux ^^.
Ouais mais ton logiciel est bien plus simple d'utilisation, pour ceux qui veulent pas s'emmerder avec Photoshop/gimp pour faire leurs maps, ça peut être super!
L'icone, c'est plus ou moins un WIP. Si un jour j'en fais une, j'la remplacerais, sinon ça restera comme ça, c'pas super grave xD.
Les FPS, ouais, c'est une habitude que j'ai de la foutre dans la title bar quand je dois re-coder une boucle principale.
( Parce que oui, cette fenêtre est redessiner en continu xD )
Nemau a dit:
En fait tu es en train tout doucement de créer un RM like ? ^^ Allez, à ce rythme dans un ou deux ans tu nous sors le RM ultime. <3
En vrai, c'est plus ou moins le but ultime du truc :
Faire un éditeur que je modifierais au fur et à mesure de ce que j'aurais besoin ( et ce au travers des différents projet que je ferais ), en essayant de jamais retirer les anciens système, histoire d'avoir le plus de choix possible ^^.
( Je prend note de tout les commentaires, même si je n'y répond pas )
Mack - posté le 12/04/2017 à 01:36:26. (2313 messages postés) -
J'y réfléchirais Monos.
J'ferais peut être un truc pour exporter seulement le premier layer, mais faire des fichiers Bits à bits ça à l'air d'être un peu la merde en Java, mais y a moyen que ça soit intéressant à faire.
( Sinon, pour le lancer, vaut mieux DL le truc en dehors de github, sur Github j'ai mis que les sources, donc c'pas super utile )
En gros, si t'as pas d'évent sur la case, ça te met ça, tu cliques sur le type d'évent que tu veux.
Puis la fenêtre change un peu.
Comme j'ai mis la TP, je peux choisir la destination. Ça m'ouvre la petite fenêtre avec la liste des maps, et après ça ouvre le screen suivant.
On commence par choisir une map dans les carrés à gauche, puis une case sur la map à droite, et on cliques sur le carré rouge pour valider.
Bref, c'est du très gros WIP ( le seul truc qui changera pas c'est les autotiles, dans la prévisualisation de la map, je m'emmerderais pas à les recalculer ^^" ), mais j'pense que dans l'idée, ça sera vraiment comme ça, quand tu veux créer un nouvel évent, tu choisis le type, puis la fenêtre change et prend les options en accord avec le type.
( Je prend note de tout les commentaires, même si je n'y répond pas )
Mack - posté le 08/04/2017 à 13:43:36. (2313 messages postés) -
Akadream a dit:
C'est développé avec quel langage de programmation ?
Yep, c'est du Java.
Citation:
J'ajouterais qu'avec ton outil, il peux permettre de mapper son jeu sans les limitations débiles de RPG maker, pour ensuite l'exporter sur le "parallaxe" du logiciel.
Ça peut servir aussi, même si Tiled + Photoshop, c'est peut être mieux ^^.
Falco a dit:
Pour mon éditeur j'enregistrais la map à chaque action dans un fichier temporaire, suffisait ensuite de charger et annuler en fonction. C'est ce qui est utilisé pour pas mal de logiciels !
C'est vrai que le principe d'enregistrer l'action est pas mal, ainsi tu peux gérer des CTRL Z/Y a l'infie sans soucis, mais plus tu ajouteras des actions, plus tu devrais gérer le système "d'annulation", ça risque de te prendre du temps à chaque fois :P
J'trouve que c'est vraiment une solution dégueux, mais qui simplifierais tellement le système xD.
( Parce que je viens de me rendre compte que ça gére pas du tout le pot de peinture, donc faut que je modifie un peu tout pour le rendre jouable xD. )
Sinon j'ai pas foutu grand chose, j'me suis rendu compte que les icones en 16*16 pour les passabilities, c'était immonde puisqu'on voyais plus la tile en dessous quand on voulait config le tileset.
( Je prend note de tout les commentaires, même si je n'y répond pas )
Mack - posté le 06/04/2017 à 23:43:33. (2313 messages postés) -
Yep, c'est pas si con xD.
J'allais le faire en stockant la map entière à chaque fois, du coups j'avais la flemme, mais juste en stockant l'action faite ( L'id de la tile à remplacé, l'id de la nouvelle tile, la pos x, la pos y, et le layer ) dans une pile.
Du coup c'est bon, ça marche bien ^^.
( Je prend note de tout les commentaires, même si je n'y répond pas )
Mack - posté le 06/04/2017 à 19:27:38. (2313 messages postés) -
winterskill a dit:
Mais en gros, ton éditeur de maps, il permet de créer des maps en dehors de RM, et de les importer dedans après?
Mack a dit:
Honnêtement, je m'attends pas tant que ça à ce que cet editeur soit utilisé par d'autres personnes que moi xD
dommage, j'avais bien envie de l'essayer, moi
En gros, c'est plus pour les gens qui veulent coder leur propres jeux ( sans RM donc ), et qui ont la flemme de refaire entièrement un éditeur de map, ils auront cet éditeurs qu'ils peuvent modifier comme ils veulent.
Après, on peut toujours l'utiliser si on bidouille le moteur de jeu de RM, mais bon, y aurais pas vraiment d’intérêt.
1mag0 a dit:
Citation:
Ton exemple reste assez carré imho. En revanche si on tente un quart de cercle s'étalant sur un carreau tout entier
Dans ton exemple je préfère clairement l'exemple "MV" que l'exemple "XP". Et plutôt que le terme rond, j'aurais plutôt dur dire "arrondis". "L'égout et les douleurs"... J'ai trop vue de tile aux motifs parfaitement carré je crois ...
Citation:
dommage, j'avais bien envie de l'essayer, moi
Le lien est dans le premier post. Je l'ai dl d'ailleurs: ça marche plutôt bien.
Il est un peu lent à charger les tiles et ctrl Z et Y ne marche pas mais je chipote . Mais tout le reste marche nickel chez moi, même tes nouvelles fonctions. Pour le changement des tailles de tiles, j'imagine que ça va être galère à faire ... tant pis!
Par contre un troisième claque au moins et ça serais génial pour moi. Je n'ai pas trouvé ou modifier ...
Mais sinon un grand bravo c'est génial!
CtrlZ/Y ouais, faudrait que je le fasse, mais j'sais pas trop comment faire, donc j'verrais surement plus tard ^^.
En vrai, pour tout ce qui est changement de taille, ça serait pas forcement dur à faire. Le plus gros problème ça serait la taille des éléments ( genre la taille de l'éditeur de tiles, si tu augmentes tout va déborder sur la droite ), mais en bidouillant un tout petit peu le code, ça se fait facilement ^^.
( Je prend note de tout les commentaires, même si je n'y répond pas )
Mack - posté le 06/04/2017 à 01:35:01. (2313 messages postés) -
Merci pour toute ces précisions sur les autotiles xD.
J'pense que pour l'instant j'vais laisser comme c'est ( c'est à dire que je vais laisser le code de RotS légérement modifié xD ), et je changerais peut être plus tard ^^.
J'ai modifié deux trois trucs ce soir, surtout l'ajout des sélections multi tiles, du coup on peut enfin prendre plusieurs tiles ( que ça soit avec le clic droit, ou dans la fenêtre des tiles ) et les dessiner, pour les éléments qui prennent plusieurs tiles, ça va être largement plus simple.
A part ça, je pense que j'ai presque finit toute la partie "Map" de cet éditeur :
Grosso modo, pour la partie vraiment Map, il va me manquer le chargement des autotiles, le fait de pouvoir nommer ses maps comme on veut, et changer un peu la mini map pour permettre de mettre des genres de marqueurs pour différencié les mini map plus facilement.
( Et possiblement permettre de faire plusieurs Tilesets.xml à partir de la même image. Mais bon, en vrai ça me semble inutile, donc à voir. )
Après, va me rester tout ce qui touche aux évents, et aux cinématiques.
( Mais bon, sur ces deux points, je pense que ça va être un truc ultra ultra simplifié. A voir vraiment sur quoi je vais partir, mais je pense que ça sera totalement différent de RM, et surtout beaucoup moins poussé. )
EDIT :
La sélection des autotiles, c'est fait.
En gros, clics gauche sur un autotiles non défini va te le faire définir, et si il est déjà définit va le sélectionner, et clic droit va forcer à redéfinir un autotiles.
Plus que la MiniMap.
( Je prend note de tout les commentaires, même si je n'y répond pas )
Mack - posté le 04/04/2017 à 01:24:22. (2313 messages postés) -
Merci RotS, ça marche plutôt bien .
( Bon, j'ai un peu l'impression que ça bouffe le proc si je met des autotiles de partout comme un cochon. )
J'ai l'impression que y a deux trois problèmes qui ne viennent pas de ce que j'ai changé par contre :
A gauche ce que j'obtiens dans l'éditeur, et à droite l'autotile.
On peut voir que sur la ligne rouge clair, il y a des points bleus, alors qu'il ne devrait pas y en avoir.
Idem pour les points rouges à droite :/
( Après ça vient peut être de moi, mais j'ai pas l'impression. )
J'ai aussi rajouter un layer normal, et un spécial le "top" :
En gros, c'est un layer qui permet de "cacher" certains éléments. Quand le joueur est loin, ce layer est affiché, et si le joueur passe sous une case de ce layer, toute les cases en contacts avec celle du joueur sont caché.
En gros, sur ce screen :
Si mon joueur est dans la maison, le toit disparaît, sinon, il est visible.
J'ai aussi commencé à modifier / rajouter quelques éléments dans le tilesets.
( Genre les arbres de 2*2, les toits, certains cailloux )
C'est pas fou, mais ça me permettra de commencer à mapper un truc ou deux pour commencer le moteur de jeu.
( Je prend note de tout les commentaires, même si je n'y répond pas )
ROtS :
Effectivement, les bulles ça pourrait être une idée, j'vais voir ça.
Les autotiles, j'ai pas encore fais, je sais pas comment je vais les gérer le fais de les choisir / changer. ( Si t'as une solution facile pour les dessiner je suis preneur aussi xD )
Bof, que ce soit XML ou JSON, de toute façon c'est un peu pareil je trouve.
( J'avais un exemple pour le XML sous la main, donc j'ai fais comme ça mais ça aurait aussi bien pu être du JSon )
Honnêtement, je m'attends pas tant que ça à ce que cet editeur soit utilisé par d'autres personnes que moi xD.
J'veux dire, il existe déjà d'autres éditeurs de map "génériques" bien meilleurs, donc je sais très bien que je les battrais jamais. Et par rapport à RM, j'en parle même pas, puisque ce sera infiniment plus simple niveau évent.
Est que je vais vraiment intégré un système d'évent déjà, je pense que si je fais un semblant d'évent, ça serait plus n genre d'éditeur de cinématique ressemblant un peu à ça :
https://youtu.be/qO1tJ_B9UUw?t=8m10s J'vais simplement essayer de faire un éditeur principalement adapté à mon jeu, mais avec le code libre histoire que ça puisse servir de base à n'importe qui.
Puis bon, j'aime bien faire mes propres outils.
( Comme ça je te répond en même temps harusame17 ^^ )
Merci à vous ^^.
( Je prend note de tout les commentaires, même si je n'y répond pas )
Mack - posté le 02/04/2017 à 18:48:00. (2313 messages postés) -
Plutôt que de continuer à balancer sur le topic des screens, j'met ça là, ça sera un peu mieux !
Donc dernière version de mon editeur de map :
J'ai changé la résolution pour faire du 30*16 ( Histoire d'être en 16/9 ).
Ensuite j'ai virer les tiles repides, pour mettre toute les tiles à droites.
Et enfin, j'ai rajouter un système de mini-map en haut à droite :
Comme je pense faire un genre de Zelda Like, pour simplifier le link des cartes, il suffit de cliquer sur une des cases en haut pour ouvrir la map correspondante.
D'ailleurs, dans la partie map, vous pouvez voir 4 bandes de tiles un peu plus sombre que le centre, ça correspond aux tiles des maps adjacentes.
( Bon, il reste encore un gros trou noir, mais j’agrandirais surement la mini map. )
Rappel :
En première ligne, les outils ( Permet de changer l'opacité des autres layers, layer 1, layer 2, pinceau, pot de peinture, gomme, nouveau, ouvrir, sauvegarder )
Ensuite, en bas à droite à côté des tiles:
1 : Nouveau Tilesets. Ouvre le dossier avec tout les tilesets graphiques. ( Si un tileset est déjà associé à cette image, ça le charge. A voir si je garde comme ça )
2 : Ouvrir un tileset. ( Donc le fichier XML avec tout de config, pas juste l'image. )
3 : Sélectionne les tiles.
4 : Éditeur de praticabilité. ( Pour l'instant y en a que 2 )
5 : Éditeur de région. ( Va de 0 à 9 )
6 : Éditeur de "profondeur". ( Va de 0 à 9 ) ( L'icône est horrible, mais je sais pas trop comment la faire ... )
Mack - posté le 29/03/2017 à 23:32:01. (2313 messages postés) -
Là tout de suite, nulle part, mais j'vais voir pour le mettre sur un Git.
( Après, hier j'ai changé quasiment toute la partie chargement des ressources pour mettre d'avoir un .jar en dehors de mon IDE. Ce qui peut être quand même vachement utile :'D )
Merci en tout cas ^^.
Petite question quand même, pour "l'éditeur" de tile, vous souhaiteriez avoir quoi comme option ?
Pour l'instant je pars sur passabilité ( 2, voir 3, comme RMXP ), la profondeur ( Savoir si je dois mettre les personnages devant ou derrière une tile ), et les "régions" ( les terrains Tag de RMXP en gros ).
EDIT2 :
Bon, ça m'a pris presque deux heures, mais j'ai enfin finis le premier jet de l'éditeur de tiles :
1 : Nouveau Tilesets. Ouvre le dossier avec tout les tilesets graphiques. ( Si un tileset est déjà associé à cette image, ça le charge. A voir si je garde comme ça )
2 : Ouvrir un tileset. ( Donc le fichier XML avec tout de config, pas juste l'image. )
3 : Sélectionne les tiles.
4 : Éditeur de praticabilité. ( Pour l'instant y en a que 2 )
5 : Éditeur de région. ( Va de 0 à 9 )
6 : Éditeur de "profondeur". ( Va de 0 à 9 ) ( L'icône est horrible, mais je sais pas trop comment la faire ... )
Le tileset ce sauvegarde si vous fermez l'éditeur de tiles, si vous créez un nouveau tileset, ou si vous en chargez un.
Je sais pas trop ce que je vais faire après.
( Je prend note de tout les commentaires, même si je n'y répond pas )