Présentation : "sys4" et mes mods

French
Post Reply
User avatar
sys4
Member
Posts: 51
Joined: Thu Nov 26, 2015 13:57
GitHub: sys4-fr
IRC: sys4
In-game: sys4
Contact:

Présentation : "sys4" et mes mods

by sys4 » Post

Bonjour à tous, je suis Sys4 et c'est mon premier post dans le forum.

Cela fait quelques temps que je joue avec Minetest, depuis la version 0.4.11.

Depuis récemment je suis entrain de me faire mon propre subgames que je nomme "Sys4 Game".
Ce SubGame me permet d'y inclure tous les Mods qui retiennent mon intérêt. Je n'hésite pas d'ailleurs à retoucher les mods soit afin de corriger des bogues, soit pour optimiser la cohabitation entre eux. (Supprimer les nodes en doubles, etc...).

Petit à petit, une idée commença à germer dans ma tête mais je ne sais pas si actuellement cette idée serait réalisable ou bien qu'elle piste dois-je explorer pour la rendre concrète.

Je m'explique :
Dernièrement, en ajoutant dans mon SubGame le mod "Awards", j'ai eu l'idée de m'en servir afin de ne pouvoir faire de la fabrication d'objets qu'à condition d'avoir atteint un certain niveau.

Par exemple, dès le début d'une partie, le joueur n'aura pas la possibilité de construire une hache en bois (même si il dispose les bons ingrédients dans sa grille de craft). Pour débloquer ce craft, il doit impérativement récolter au moins 10 troncs d'arbres. Dès que ce pallier sera atteint, le jeux indiquera au joueur qu'un nouveau craft est disponible en lui fournissant le patron de construction de cet objet.

N'étant que peu expérimenté dans le langage Lua et l'API de Minetest (pour l'instant), je pensais pouvoir définir un craft non pas lors du chargement du jeu, mais dynamiquement pendant son exécution. Or d'après la documentation suivante : http://dev.minetest.net/Global_Minetest_object la définition des crafts d'objets ne peut se faire qu'au chargement du jeux.

Comment d'après vous, les moddeurs, je peux entreprendre cette idée ?

J'aimerais vraiment pouvoir réaliser cette idée et la généraliser aux mods que j'inclut dans mon subGames. Cela donnerait une dimension au jeux beaucoup plus progressive et aurait aussi l'avantage de ne pas perdre le débutant avec des tas et des tas de crafts possibles dès le début de partie du fait de nombreux mods cohabitant ensemblent.

Merci de votre attention et vive la communauté Minetest !
Last edited by sys4 on Thu Mar 17, 2016 13:04, edited 2 times in total.

Minetestforfun
Member
Posts: 940
Joined: Tue Aug 05, 2014 14:09
GitHub: MinetestForFun
IRC: MinetestForFun
In-game: MinetestForFun
Location: On earth
Contact:

Re: Présentation : "sys4" et une question pour mon SubGame

by Minetestforfun » Post

Bonjour et bienvenue,

Ravis de te rencontrer sur le forum :)

Pour ta question je n'en ai aucune idée, cependant pour que tu comprennes mieux les mécanismes qui régissent Minetest, je te conseil vivement ce wiki/guide : http://rubenwardy.com/minetest_modding_book/index.html

A+

User avatar
sys4
Member
Posts: 51
Joined: Thu Nov 26, 2015 13:57
GitHub: sys4-fr
IRC: sys4
In-game: sys4
Contact:

Re: Présentation : "sys4" et une question pour mon SubGame

by sys4 » Post

Bonjour,

Merci pour l'accueil et le lien :)

Oui c'est vrai qu'il me faut acquérir de l'experience dans le modding.
Je débute à peine, je commence seulement à appréhender le fonctionnement de l'API.

Je souhaite de tout coeur apporter ma contribution et j'espère le plus rapidement possible.

Au besoin, j'ouvrirai un topic spécifique sur ma question du post précédent.
En attendant je continue mes investigations et prendre du galon en code Lua.

Content d'être parmis vous :)

A++

User avatar
Delaroyas
Member
Posts: 33
Joined: Tue Sep 30, 2014 23:01
GitHub: Delaroyas
In-game: Delaroyas
Location: Canada
Contact:

Re: Présentation : "sys4" et une question pour mon SubGame

by Delaroyas » Post

Je trouve le concept intéressant. Contrairement à ce que dit la documentation, c'est possible d'ajouter un craft pendant le jeux.
Dans l'exemple suivant, si on fait la commande /addcraft, ça ajoute un craft (terre+terre=gazon)

Code: Select all

minetest.register_chatcommand("addcraft", {
	privs = {interact = true},
	func = function(playername)
	minetest.register_craft({
		output = "default:dirt_with_grass",
		recipe = {	{"default:dirt", "default:dirt"},}
	})
end})
Par contre, c'est pas idéal coté serveur, un joueur qui débloque un craft, débloque le craft pour tous.
Du coté singleplayer il faut aussi penser à loader tous les crafts débloqués au démarrage du monde.

User avatar
sys4
Member
Posts: 51
Joined: Thu Nov 26, 2015 13:57
GitHub: sys4-fr
IRC: sys4
In-game: sys4
Contact:

Re: Présentation : "sys4" et une question pour mon SubGame

by sys4 » Post

Bonjour,

Effectivement, soit la doc est pas à jour ou j'ai mal compris.

J'ai fais des tests et j'arrive bien à créer des crafts de façon dynamique avec la fonction minetest.register_craft().

J'ai donc commencé à implémenter mon idée précédente dans le mod "Awards". Et je dois dire que ça marche plutôt bien :)

Pour l'instant j'ai juste défini un nouveau pallier nommé LumberJack Begins qui permet quand le joueur à récolté 3 blocs de bois de débloquer les crafts d'une hache et d'une pioche en Bois.

Du coup je pense que je vais d'abord faire un mod qui soit fonctionnel avec le jeu de base, soit en faisant un fork du mod "Awards" ou un mod à part entière dépendant de Awards.

Par contre pour que cela fonctionne je dois commenter à la main tout les crafts défini par les autres mods.
Il me faut trouver une solution pour dé-référencer un craft au chargement du monde afin de ne pas toucher au code des autres mods.

@Delaroyas : Ce mod ne sera pas destiné vraisemblablement au mode multi... pour l'instant.

Voilà comment je charge les crafts débloqués au chargement du monde :

Code rajouté à la fin du init.lua du mod Awards :

Code: Select all

-- Sys4 : load craft recipes
local playern = 'singleplayer'

if awards.player(playern) ~= nil then
   local data = awards.players[playern]
   for _, str in pairs(data.unlocked) do
      local def = awards.def[str]
      if def and def.crafts then
        local crafts = def.crafts
        for i=1, #crafts do
          minetest.register_craft(crafts[i])
        end
      end
   end
end
Code rajouté dans la fonction awards.give_achievement(name,award) du fichier api.lua :

Code: Select all

-- Sys4 : Add crafting recipes
if awards.def[award].crafts then
  local crafts = awards.def[award].crafts
    if crafts~=nil then
      for i=1, #crafts do
        minetest.register_craft(crafts[i])
      end
    end
end
Et enfin le code rajouté dans init.lua pour la création d'un niveau personnalisé (Récolte de 3 bûches de bois) :

Code: Select all

-- Lumberjack begins
awards.register_achievement("award_lumberjack_begins", {
  title = S("Lumberjack Begins"),
  description = S("Dig 3 tree blocks."),
  icon = "default_tree.png",
  trigger = {
    type = "dig",
    node = "default:tree",
    target = 3
  },
  crafts = {
    {
      output = 'default:axe_wood',
      recipe = {
        {'group:wood', 'group:wood'},
        {'group:wood', 'group:stick'},
        {'', 'group:stick'}
      }
    },
    {
      output = 'default:pick_wood',
      recipe = {
        {'group:wood', 'group:wood', 'group:wood'},
        {'', 'group:stick', ''},
        {'', 'group:stick', ''}
      }
    },
				  
  },
  -- prizes = {'default:axe_wood', 'default:pick_wood'}
})
J'espère pouvoir bientôt ouvrir un topic dans la section Mods WIP ;)

A++

User avatar
oleastre
Member
Posts: 81
Joined: Wed Aug 13, 2014 21:39
GitHub: oleastre
In-game: oleastre

Re: Présentation : "sys4" et une question pour mon SubGame

by oleastre » Post

Si le but, c'est de transformer tous les crafts, tu peux t'inspirer de ce que fait le mod craft_guide: remplacer la commande "minetest.register_craft" avec ta propre commande.

style:

Code: Select all

local my_register_craft = minetest.register_craft
minetest.register_craft = function (options) 
  ... ajouter le craft dans une liste ...
end

local on_award = function()
  ... un peu de code quand le joueur reçoit l'award pour retrouver le craft...
  my_register_craft(craft)
end


User avatar
oleastre
Member
Posts: 81
Joined: Wed Aug 13, 2014 21:39
GitHub: oleastre
In-game: oleastre

Re: Présentation : "sys4" et une question pour mon SubGame

by oleastre » Post

Je viens de tomber là-dessus en lisant la doc, il existe une fonction "register_on_craft" qui est appelée quand un joueur vient de créer quelque chose.
Si il n'a pas encore débloqué le craft, tu pourrais utiliser cette fonction pour remplacer ce qui est construit par un tas de déchets (style le joueur a tenté de faire quelque chose, mais il n'a réussi qu'à tout réduire en poussière)

Voir: http://rubenwardy.com/minetest_modding_ ... dcraft_inv

User avatar
Delaroyas
Member
Posts: 33
Joined: Tue Sep 30, 2014 23:01
GitHub: Delaroyas
In-game: Delaroyas
Location: Canada
Contact:

Re: Présentation : "sys4" et une question pour mon SubGame

by Delaroyas » Post

oleastre wrote:Je viens de tomber là-dessus en lisant la doc, il existe une fonction "register_on_craft" qui est appelée quand un joueur vient de créer quelque chose.
Si il n'a pas encore débloqué le craft, tu pourrais utiliser cette fonction pour remplacer ce qui est construit par un tas de déchets (style le joueur a tenté de faire quelque chose, mais il n'a réussi qu'à tout réduire en poussière)
C'est une bonne idée... Comme ça, ça pourrait fonctionner en Multi-joueurs.

User avatar
sys4
Member
Posts: 51
Joined: Thu Nov 26, 2015 13:57
GitHub: sys4-fr
IRC: sys4
In-game: sys4
Contact:

Re: Présentation : "sys4" et une question pour mon SubGame

by sys4 » Post

Bonjour,

Merci oleastre pour ce conseil très avisé. Je trouve que c'est une bonne solution aussi.

Je viens de faire un premier test allant dans ce sens et cela est fonctionnel et prometteur.
En plus avec peu de code.

Tant mieux que la partie multi puisse en bénéficier, après tests...

Je vais paufiner tout ça de manière à obtenir un gameplay intéressant... des suggestions ?
Dès que j'aurais une version jouable, j'ouvrirai un topic dédié.

Merci encore une fois, ça m'a vraiment bien aidé :)

A++

User avatar
Gael de Sailly
Member
Posts: 845
Joined: Sun Jan 26, 2014 17:01
GitHub: gaelysam
IRC: Gael-de-Sailly
In-game: Gael-de-Sailly gaelysam
Location: Voiron, France

Re: Présentation : "sys4" et une question pour mon SubGame

by Gael de Sailly » Post

Bonjour,

Pour le développement de mods/subgames, je conseille de mettre le code en ligne pour que d'éventuels contributeurs puissent t'aider plus facilement. Nous somme tous (ou presque!) sur GitHub, site dédié à l'hébergement et au partage de code source. Cet outil n'est pas toujours évident pour les débutants, mais on y gagne énormément en efficacité.
Ce projet est intéressant, cette idée de crafts par niveau je dirai que c'est carrément une révolution dans le gameplay de Minetest. Mais le programme du jeu n'a pas l'air d'être prévu pour ça. On peut toujours ruser, mais le mieux serait de proposer cette idée aux développeurs. Bon, on n'arrive pas toujours bien à se faire entendre, mais ça ne coûte rien d'essayer.
Je propose par exemple d'ajouter un callback minetest.is_craft_possible qui retournerait un booléen. Je pense que ce n'est pas trop difficile à coder.

Modifier chaque mod pour le rendre compatible avec les autres est une étape qui est indispensable, mais beaucoup de modders oublient ou font le minimum. Ça donne des subgames plus ou moins buggés, ou alors même quand ça marche on voit que le fonctionnement du tout n'est pas très harmonieux (je veux dire par exemple quand on voit un palmier de Moretrees dans la neige, quand un mod détruit des blocs qu'un autre mod a défini comme incassables…). Bon les subgames je les connais pas tous mais je n'en ai pas vu un seul qui ait vraiment cette cohérence, à part les plus simples.
Ça demande pas mal de travail, mais je pense que c'est vraiment ça qui rendra le gameplay intéressant. C'est ça le potentiel de Minetest.
Je n'ai pas vu ton code, mais vu comment tu présentes ton projet, ça m'a l'air bien parti :-)
Just realize how bored we would be if the world was perfect.

User avatar
oleastre
Member
Posts: 81
Joined: Wed Aug 13, 2014 21:39
GitHub: oleastre
In-game: oleastre

Re: Présentation : "sys4" et une question pour mon SubGame

by oleastre » Post

C'est une bonne idée d'ajouter un callback.
Je peux essayer de faire ça en c++ et proposer un pull request...

User avatar
sys4
Member
Posts: 51
Joined: Thu Nov 26, 2015 13:57
GitHub: sys4-fr
IRC: sys4
In-game: sys4
Contact:

Re: Présentation : "sys4" et une question pour mon SubGame

by sys4 » Post

Bonjour,

J'ai bien avancé dans mon projet.

Finalement avant de faire un subgame, j'ai d'abord fait un mod nommé 'sys4_achievements'.

Le principe :

Quand vous débutez une partie, vous ne pouvez faire aucun crafts, meme pas ceux de base. Il faut atteindre des objectifs pour pouvoir les débloquer petit à petit. Par exemple au tout début pour pouvoir faire des planches il faut d'abord récolter au moins 50 blocs de bois. Dès que ce pallier est atteint un livre vous est donné où à l'intérieur sont écrits les crafts que vous avez débloqués.

Si vous essayez d'obtenir un craft non débloqué vous obtiendrez un bloc de déchets.

Edit : À ce stade le mod débloque tous les crafts des mods composants le jeux de base minetest_game.
Petit à petit, les crafts de mods supplémentaires seront ajoutés dans le temps.

Si vous voulez l'essayer rendez-vous sur son topic dédié (in English) :
viewtopic.php?f=9&t=13731&sid=358ffb23f ... b64113ec68

Ou bien téléchargez-le directement : Version 0.2
Renommez le dossier extrait en 'sys4_achievements' et placez-le dans le dossier des mods.

Ce mod a une dépendance obligatoire avec le mod 'awards' de Rubenwardy.
Je conseille aussi le mod 'intllib' pour avoir les traductions en Français.

Je prendrai le temps de mettre le code en ligne, mais oui gitHub m'intimide un peu pour l'instant :)
Edit : Le code est en ligne. Voir plus haut.

J'ai bien envie aussi de faire des vidéos pour montrer comment jouer avec ce mod également, mais pareil, il me faut un compte youtube ou qqchose du genre... à suivre...

N'hésitez pas à me donner vos avis et suggestions sur ce mod.

A++

User avatar
sys4
Member
Posts: 51
Joined: Thu Nov 26, 2015 13:57
GitHub: sys4-fr
IRC: sys4
In-game: sys4
Contact:

Re: Présentation : "sys4" et une question pour mon SubGame

by sys4 » Post

Nouvel update qui change pas mal de choses.

Tout d'abord, les trophées (awards) suivent un arbre de compétences. Un peu comme dans Minecraft avec leur système de succès.

Les trophées en Vert sont ceux qui ont été débloqués.
Les trophées en Jaunes sont ceux qui sont débloquable car dépendant de trophées déjà débloqués.
Les trophées en Rouges sont ceux qui ne sont pas encore atteignable car dépendant de trophées non dépbloqués.

Ensuite 2 modes de jeux sont proposés :
- Le premier mode (par défaut) n'est pas bloquant. Il reprend la liste de trophées du mod awards auxquel j'en rajoute de nouveaux. On n'est pas obligé de débloquer ces trophées pour avancer dans le jeux. Malgré tout ces trophées suivent un arbre de compétence.
- Le second mode de jeux est celui que j'ai déjà introduit dans les versions précédentes. Il faut atteindre des trophées pour débloquer les crafts qu'ils autorisent. De même ces trophées suivent un arbre de compétences.

Précision 1 : Avec le mod intllib en dépendance, tout est traduit en français, même les trophées originaux du mod awards.
Précision 2 : Le mod devrait fonctionner en multi puisque repose sur le code de awards. Pas testé encore mais ya pas de raison que ça marche pas.

Rendez-vous sur ma page github pour télécharger cette nouvelle mouture :)
https://github.com/sys4-fr/sys4_achievements

a++

Minetestforfun
Member
Posts: 940
Joined: Tue Aug 05, 2014 14:09
GitHub: MinetestForFun
IRC: MinetestForFun
In-game: MinetestForFun
Location: On earth
Contact:

Re: Présentation : "sys4" et mon mod sys4_achievements

by Minetestforfun » Post

Pourrais tu poster quelques screenshots voir une courte vidéo montrant les avancés de ton mod s'il te plait ?
Ton travail m'intéresse(et je ne dois pas être le seul) et j'aimerais voir les évolutions sans devoir l'installer et lancer un serveur local :D

bref un petit peu de screenshots ou une vidéo sur ta présentation en anglais serait vraiment top, continu ton travail génial :)

User avatar
sys4
Member
Posts: 51
Joined: Thu Nov 26, 2015 13:57
GitHub: sys4-fr
IRC: sys4
In-game: sys4
Contact:

Re: Présentation : "sys4" et mon mod sys4_achievements

by sys4 » Post

J'ai abandonné le développement de sys4_achievements.

À la place j'ai créé le mod sys4_quests qui reprend le même concept que précédemment en s'appuyant exclusivement sur le mod "quests" et non plus sur le mod "awards".

Le code est ainsi plus légé et m'a permis de faire une API destinée aux autres modders qui souhaiteraient inclure des quetes facilement dans leur mods.

N'hésitez pas à me donner votre avis :)

Edit : Le mod est mis à jour pour minetest 0.4.14 (d'ailleur il ne fonctionne qu'avec cette version).
J'ai également amélioré le système de dépendences entre les quetes. Des diagrammes Dia sont disponibles dans le projet pour comprendre la relation entre les quetes.
Et je confirme également qu'il fonctionne en mode multi-joueurs.

Post Reply

Who is online

Users browsing this forum: No registered users and 2 guests