Mack - posté le 30/01/2018 à 02:42:29. (2290 messages postés) -
Nemau a dit:
Kody aussi a adoré ce jeu (si je dis pas de bêtise). Pour ma part ...Quand je vois les screens je trouve l'ambiance assez classique, du coup bof, ça me tente pas trop. Mais je perds peut-être quelque chose.
---
Yooka-Laylee il est bien ? J'avais bien aimé Banjo-Kazooie, du coup...
---
Sinon y a Blossom Tales, un Zelda2D-like qui a l'air pas mal, je songe à le prendre...
Citation:
Grosse déception.
Moi j'ai fui rien qu'en voyant le chara-design.
Pour Blossom Tales, franchement c'est du copié collé des Zelda 2D.
Il prend pas de risque, mais tout ce qu'il fait il le fait bien.
Perso j'ai vraiment beaucoup apprécié le faire.
( Je prend note de tout les commentaires, même si je n'y répond pas )
Mack - posté le 06/12/2017 à 01:07:23. (2290 messages postés) -
Petite vidéo sur le prototype sur lequel je bosse en ce moment :
En gros, c'est censé être un genre de Hand of Fate, en simplifier, et compatible PC / Android.
Les évents sont codé en Lua, comme ça, n'importe qui pourra rajouter ses propres évents.
Il reste encore pas mal de truc à faire ( les 3/4 des systèmes de RPG comme l'inventaire les stats le combat, le système de déplacement sur la carte, bien plus tard le système de génération aléatoire ... ), mais j'trouve que ça commence enfin à ressembler à quelque chose ! .
Après il me restera à faire les évents, et je pense que je vais moins m'amuser à ce moment :'D.
( Si ça intéresse quelqu'un ^^ )
self:setDialog("Salut !".."\nBienvenue dans ce prototype.".."\nJe vais vous montrez les ".."\ndifferents events actuellement\npossible ! :D",0)
d =self:setDialog("D'ou venait vous ? \n *I) Du Sud\n *II) Du Nord\n *III) De l'Ouest\n *IV) De l'Est",4)if(d==0)then
X ="I"
elseif (d==1)then
X ="II"
elseif (d==2)then
X ="III"else
X ="IV"endself:setDialog("Tres bien, vous avez fait le \nchoix numero : "..X.."\n".."Maintenant nous allons lancer\n".."les des : ",0)
a =self:setDice(6)self:setDialog("Vous avez fait "..a.." !\n".."Bravo !\n")print('END')
( Je prend note de tout les commentaires, même si je n'y répond pas )
Mack - posté le 12/10/2017 à 22:10:35. (2290 messages postés) -
Non, mais en français, le g fait gu devant un a, mais pas un e ^^.
Donc la pronontiation fr ça devrait être jerudo.
( Même si perso j'ai toujours dit Gerudo )
( Je prend note de tout les commentaires, même si je n'y répond pas )
Mack - posté le 18/09/2017 à 17:12:01. (2290 messages postés) -
En vrai, y a eu pas mal d'avancement sur le gameplay d'un prototype, et du coup j'ai rajouter deux trois trucs sur le moteur pour aller avec, mais comme pour arriver à un résultat potable pour un proto, il me faut faire du mapping, et que j'ai la flemme, bah j'y ai pas touché depuis un bon mois xD.
Bon, j'ai décidé de reprendre l'éditeur, j'ai quasiment tout recommencé à 0 ( seulement la partie éditeur ), histoire d'avoir un truc un peu plus propre.
J'ai quasiment rattrapé la où j'en été avant, j'ai juste la partie Event à faire, mais bon, vu comment elle marchait avant, la refaire sera pas dur, et après je referais les raccourcis.
J'ai un peu repris, donc j'ai remis les évents ( c'est toujours dégeux de les programmer depuis l'éditeur, donc je passe par Notepad++ en attendant d'arriver à faire un truc correcte, mais au moins ça marche ! ), et surtout j'ai ajouté pas mal de détails sur la personnalisation :
Maintenant, les maps sont plus forcement en 30 * 20, on peut changer la taille comme on veut. Pareil pour le système d'OW avant j'avais limité à 5*5, là y a pas vraiment de limite. ( Après, plus le nombre est grand, moins on verra sur la mini map mais bon. )
J'ai aussi commencé la possibilité de changer la taille des tiles, mais c'est pas encore parfait.
Sur le screen les maps sont en 10*9, avec des tiles de 16*16, sur une OW de 16*16.
On peut aussi changer la taille de l'écran du coup.
Le seul problème pour l'instant, c'est que si la map ne tiens pas en 1 écran, elle scrolle pas quand on s'approche des bords.
Et le dernier point, c'est que le joueur n'est plus hardcodé, il y a un fichier Player.js dans les data qui permet de modifier le comportement.
( Je prend note de tout les commentaires, même si je n'y répond pas )
Mack - posté le 25/08/2017 à 23:42:22. (2290 messages postés) -
Perso, comme Verehn, j'aurais une préférence pour la seconde option.
Trop de hasard risque vraiment de tuer le jeu, comme le dis Verehn, dans The Darkest Dungeon, passé de tout vas pour le mieux, à putain c'est la merde juste parce que t'as pas de bol ... Bof quoi :/.
Après, une autre solution, c'est simplement de garder un plus grand contrôle sur le changement de niveau. Par exemple, quand tu changes de niveau de poinson, t'as 50% de chance de changer que de 1 niveau, 25% de prendre 2 niveaux, 15% d'en prendre 3, et le reste d'en prendre 4.
Ça permet de garder un peu de hasard, ce qui est plutôt cool, mais en gérant bien les %ages, ça permet de pas trop frustrer le joueur.
L'idée de Verehn ou il parle de la constitution du héros, ainsi que de sa forme, je trouve que c'est une très bonne idée.
( Je prend note de tout les commentaires, même si je n'y répond pas )
Mack - posté le 19/08/2017 à 18:43:55. (2290 messages postés) -
Le champ dans la bdd où tu choisis si tu cinle un allié, tout les alliés, un ennemi, tout les ennemis ... Tu prends le premier, celui qui dit que t'as aucune cible.
( Je prend note de tout les commentaires, même si je n'y répond pas )
Mack - posté le 18/08/2017 à 23:42:19. (2290 messages postés) -
Divers petit test de gamedesign.
En vrac, un système d'endurance, qui va avec un système de dash, et un système de combo pour les coups d'épée.
Un système de ciblage des ennemis, qui permet ensuite de tirer avec avec une arme à distance. Si aucun ennemis n'est ciblé, ça part moins vite, mais plus loin.
Tout ( ou presque, les fonctions basiques sont faites en Java ) est codé en JS, avec l'espèces de système de plugin que j'ai mis en place pour mon projet.
C'est loin d'être parfait, mais dans l'ensemble, j'trouve le rendu plutôt cool.
J'vais essayer de peaufiner un peu tout ça ( surtout l'IA des ennemis qui est vraiment pas top ... ), et peut être que quand j'aurais la motiv pour faire du mapping j'essaierais un truc xD.
EDIT : 10/10/2017 :
Avec le Humble Bundle j'me suis pris RM2k3, et du coup j'y ai un peu remis les mains dedans :
Du coup, j'me suis amusé à faire un mini shmup, c'était marrant à faire, j'vais essayer de voir pour l'amélioré encore un peu, voir essayer d'en faire un mini jeu complet.
( Je prend note de tout les commentaires, même si je n'y répond pas )
#==============================================================================# ** 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 =2
SWITCH_TYPE =3
VARIABLE_ITEM =1
VARIABLE_EQUIP_C =2
VARIABLE_EQUIP_B =3class 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@window_item.z=201@spriteBack.z=1@spriteSelector.z=@window_item.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($game_switches[SWITCH_TYPE]==true)$game_variables[VARIABLE_ITEM]=@item$game_switches[SWITCH]=truereturnendif@item.is_a?(RPG::Item)if@item.scope !=0for i in$game_party.actors
used |= i.item_effect(@item)endif@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)endendelse$game_variables[VARIABLE_EQUIP_C]=@itemend@window_item.refreshelse
equip_index =0if(@item.is_a?(RPG::Armor))
equip_index =1+@item.kindend$game_party.actors[0].equip(equip_index,@item.id)$game_system.se_play($data_system.equip_se)@window_item.refreshendendif Input.trigger?(Input::B)# If command event ID is valid@item=@window_item.getItem(@index)if($game_switches[SWITCH_TYPE]==true)$game_variables[VARIABLE_ITEM]=@item$game_switches[SWITCH]=truereturnendif@item.is_a?(RPG::Item)if@item.scope==0$game_variables[VARIABLE_EQUIP_B]=@itemendend@window_item.refreshend
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]@window_item.refresh$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# Also add weapons and items if outside of battleunless$game_temp.in_battlefor i in1...$data_weapons.sizeif$game_party.weapon_number(i)>0@data.push($data_weapons[i])endendfor i in1...$data_armors.sizeif$game_party.armor_number(i)>0@data.push($data_armors[i])endendend# 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)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)endendclass Game_Player
alias update_old update
def update
if($game_switches[SWITCH_OPEN])returnend
update_old
endendclass Game_Party
def calc_nb_Inventory
j =0for i in1...$data_items.sizeif($game_party.item_number(i)>0)
j +=1endend# Also add weapons and items if outside of battleunless$game_temp.in_battlefor i in1...$data_weapons.sizeif$game_party.weapon_number(i)>0
j +=1endendfor i in1...$data_armors.sizeif$game_party.armor_number(i)>0
j +=1endendendreturn j
enddef itemType()
it =$game_variables[VARIABLE_ITEM]if(it ==0)return0endif it.is_a?(RPG::Weapon)return2endif it.is_a?(RPG::Armor)return3endreturn1enddef itemId()
it =$game_variables[VARIABLE_ITEM]if(it ==0)return0endreturn it.idenddef equipCType()
it =$game_variables[VARIABLE_EQUIP_C]if(it ==0)return0endif$game_party.item_number(it.id)<=0$game_variables[VARIABLE_EQUIP_C]=0return0endif it.is_a?(RPG::Weapon)return2endif it.is_a?(RPG::Armor)return3endreturn1enddef equipCId()
it =$game_variables[VARIABLE_EQUIP_C]if(it ==0)return0endif$game_party.item_number(it.id)<=0$game_variables[VARIABLE_EQUIP_C]=0return0endreturn it.idenddef equipBType()
it =$game_variables[VARIABLE_EQUIP_B]if(it ==0)return0endif$game_party.item_number(it.id)<=0$game_variables[VARIABLE_EQUIP_B]=0return0endif it.is_a?(RPG::Weapon)return2endif it.is_a?(RPG::Armor)return3endreturn1enddef equipBId()
it =$game_variables[VARIABLE_EQUIP_B]if(it ==0)return0endif$game_party.item_number(it.id)<=0$game_variables[VARIABLE_EQUIP_B]=0return0endreturn it.idendend
Donc ça marche pareil que pour montrer des items, mais avec les commandes equipCType / equipBType et equipCId / equipBId.
Pour équiper des items, il faut que tu mettes leur cible sur aucune.
Désolé, avec le taf, j'ai pas eu trop le temps :/
( Je prend note de tout les commentaires, même si je n'y répond pas )
Mack - posté le 13/08/2017 à 13:27:12. (2290 messages postés) -
Le problème avec les armes, c'est qu'une fois équipé, elles sont stocké complètement à part, et donc elles ne sont plus compté dans l'inventaire, ni quand on essaye de les retirer.
J'ai bidouiller un truc, mais j'me suis dis après coup que ça pouvait poser des problèmes, genre, on peut équiper deux objets ( sur C et B ), et en même temps une arme.
Du coup, j'vais voir pour retourné avec les armes, et simplement permettre de retirer une arme équipé, et de les compter comme si elles étaient dans l'inventaire.
( Je prend note de tout les commentaires, même si je n'y répond pas )
Donc, là, les pictures passent entre le fond du menu, et les icons des objets.
Dans ce menu, on a aussi les armes / armures.
Ensuite en appuyant sur C, les objets s’utilisent, même les effets de heal, et si c'est un équipement, il s'équipe.
Après, si je peux me permettre :
Mettre les armes / armures dans ce même menu, je suis pas sur que ça soit pertinent.
Ça va bouffer des slots pour le joueur, perso, j'aurais fait deux menus différents, quitte à faire le menu des équipements soit pas accessible partout.
J'ai aussi fait un petit truc pour pouvoir donner / montrer des items à un PNJ.
En gros, en mettant le switch n°SWITCH_TYPE sur true, puis en activant le switch n°SWITCH, le menu s'ouvre, mais quand on cliqueras sur C, ça enverra l'item sélectionné dans la variable VARIABLE_ITEM.
La fonction $game_party.itemType permet de savoir si l'item sélectionné est un objet, une arme, ou une armure.
( 1 c'est un objet, 2 une arme, et 3 une armure. )
Et la fonction $game_party.itemId renvoie son ID.
T'as un petit exemple dans la démo.
Par contre, je viens de voir un bug, si tu ouvres le menu en face d'un PNJ, et que tu utilises un objets, ça active le PNJ comme si le menu était fermé.
Donc ça sera reglé en même temps que le déplacement du joueur.
EDIT de minuit pile :
Donc le lien à été changé, j'ai corrigé le déplacement, et l'activation des évents dans le menu.
( Je prend note de tout les commentaires, même si je n'y répond pas )
#==============================================================================# ** 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)endendclass Game_Party
def calc_nb_Inventory
j =0for i in1...$data_items.sizeif($game_party.item_number(i)>0)
j +=1endendreturn j
endend
T'as juste à appeler $game_party.calc_nb_Inventory pour avoir le nombre d'item différent que le joueur à.
( Et seulement les items d'ailleurs, ce système n'affiche pas les armes. Si t'en as besoin je te le rajoute )
Va donner à la variable X le nombre d'item différent quand tu appelles ce morceau de script.
Le mieux c'est de directement faire tes conditions avec $game_party.calc_nb_Inventory.
Condition, 4 page, Script :
#==============================================================================# ** 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. (2290 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. (2290 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. (2290 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. (2290 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. (2290 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. (2290 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. (2290 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. (2290 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. (2290 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. (2290 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. (2290 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. (2290 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. (2290 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. (2290 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. (2290 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. (2290 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. (2290 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 )