Portail MVCSE
Le code LUA est un langage de programmation libre, réflexif (ayant une capacité d'examination et de modification des structure interne du programme) et impératif (caractéristique commune à beaucoup d'autres langages de programmation faisant référence à la capacité de modifier l'état d'un programme directement lors des exécutions d'instructions et d'opérations). D'après beaucoup de développeurs et informaticiens, par rapport à d'autres, le LUA est l'un des langages de programmation les plus simples et les plus efficaces. Il est même recommandé, lorsqu'on débute, de commencer par l'apprentissage du code LUA en raison de sa simplicité algorithmique et sa facilité dans le codage. LUA, étant écrit en C ANSI, est compatible, supporté par un bon nombre de systèmes notamment les systèmes d'exploitation UNIX. Il a été utilisé pour le développement de différents jeux célèbres comme Minetest (alternative libre de Minecraft), World Of Warcraft, Roblox ou encore certains mod de GTA.
Dans notre cas, Minetest fonctionne majoritairement en LUA, c'est pourquoi les mods, visant à modifier le jeu Minetest, doit être aussi codé en LUA.
Un dossier de mod contient deux fichiers essentiels : le "init.lua" qui renferme l'ensemble du code participant au bon déroulement du processus et le "mod.conf" qui permet de lier d'autres mods entre eux pour créer des dépendances, c'est-à-dire des mods qui ont besoin de d'autres mods pour fonctionner, sinon, Minetest constatera des manques (blocs, effets...) et ne sera pas en mesure d'exécuter le mod. En tant que créateur de mod, il doit spécifier dans le mod.conf, les mods nécessaire à associer pour le bon fonctionnement du sien. SI nécessaire, le dossier de mod doit contenir les éléments associés nécessaire comme les sons, les textures, les effets...
Au sein du init.lua du mod "four colors", le programme a été particulièrement inspiré du premier module (dit "didactique") de la manufacture, avec les quatre cubes de couleur. Pour rappel du principe, à l'activation du levier, l'une des quatre lampes de couleur différente va s'allumer et le joueur va devoir appuyer sur le bouton correspondant de la boîte à boutons parmi les quatre pour ouvrir la Grande Porte de la Manufacture.
Le programme va s'organiser avec la définition des variables et la fonction "main()" qui est chargé de former la boucle.
La fonction main() (
) sera alors créée pour former une boucle infinie.
Dans cette fonction, on temporisera les effets de la fonction avec une fonction de temporisation spécifique à Minetest appelé "minetest.after" (
) avec comme argument un temps donné en secondes et la fonction concerné, pour que la fonction ne puisse pas s'activer lors de la phase d'initialisation du monde.
Au sein de la structure de condition, des éléments vont s'éxecuter progressivement :
est une fonction LUA spécifique de Minetest, accueillant en argument une position et, après le signe d'égalité, un nom de bloc, qui permet de demander au moteur Minetest si le bloc désigné est bel et bien celui posé aux coordonnées saisis.
contiendra le tirage de la fonction
qui permet de tirer un nombre au hasard (dans notre cas, c'est un chiffre entre 1 et 4), pour ensuite utiliser la variable lamp_state (
) pour désigner la cellule correspondante pour la mettre à 1.
Ecape Game Manufacture
Escape Game Manufacture est une animation dirigée par Zoomacom, créée à des fins de médiation numérique en reprenant le site de la manufacture pour créer une forme d'escape game alliant réalité et virtuelle pour résoudre des défis et s'échapper de chaque salle associé à un thème référencée de film, série, etc...Concept et reproductions
Comme dit précédemment, le concept est de reprendre le site de la manufacture ayant servi à l'animation "À l'assaut de la cité interdite" pour y ajouter des lieux, pièces et se servir du concept du zonage pour les défis. Les défis de la Manufacture ont été partiellement repris d'un jeu vidéo de désamorçage de bombe nommé "Keep Talking and Nobody Explodes". L'objectif, étant donc, d'exploiter toutes les capacités du code LUA pour reproduire d'autres défis du jeu.Introduction au LUA
Le code LUA est un langage de programmation libre, réflexif (ayant une capacité d'examination et de modification des structure interne du programme) et impératif (caractéristique commune à beaucoup d'autres langages de programmation faisant référence à la capacité de modifier l'état d'un programme directement lors des exécutions d'instructions et d'opérations). D'après beaucoup de développeurs et informaticiens, par rapport à d'autres, le LUA est l'un des langages de programmation les plus simples et les plus efficaces. Il est même recommandé, lorsqu'on débute, de commencer par l'apprentissage du code LUA en raison de sa simplicité algorithmique et sa facilité dans le codage. LUA, étant écrit en C ANSI, est compatible, supporté par un bon nombre de systèmes notamment les systèmes d'exploitation UNIX. Il a été utilisé pour le développement de différents jeux célèbres comme Minetest (alternative libre de Minecraft), World Of Warcraft, Roblox ou encore certains mod de GTA.
Dans notre cas, Minetest fonctionne majoritairement en LUA, c'est pourquoi les mods, visant à modifier le jeu Minetest, doit être aussi codé en LUA.
Un dossier de mod contient deux fichiers essentiels : le "init.lua" qui renferme l'ensemble du code participant au bon déroulement du processus et le "mod.conf" qui permet de lier d'autres mods entre eux pour créer des dépendances, c'est-à-dire des mods qui ont besoin de d'autres mods pour fonctionner, sinon, Minetest constatera des manques (blocs, effets...) et ne sera pas en mesure d'exécuter le mod. En tant que créateur de mod, il doit spécifier dans le mod.conf, les mods nécessaire à associer pour le bon fonctionnement du sien. SI nécessaire, le dossier de mod doit contenir les éléments associés nécessaire comme les sons, les textures, les effets...
La Grande Porte (Module 1)
local lamp_state = {0, 0, 0, 0} local lamp_pos_red = {x=-57, y=10, z=6} local lamp_pos_green = {x=-57, y=10, z=5} local lamp_pos_yellow = {x=-57, y=10, z=4} local lamp_pos_blue = {x=-57, y=10, z=3} local mese_pos = {x=-58, y=10, z=2} local switch_pos = {x=-58, y=10, z=1} function main() minetest.after(0.1, function() if minetest.get_node(mese_pos).name=="mesecons_extrawires:mese_powered" then local lamp_activation = math.random(1,4) lamp_state[lamp_activation]=1 if lamp_activation == 1 then minetest.set_node(lamp_pos_red, {name="mesecons_lightstone:lightstone_red_on"}) minetest.after(3, function() minetest.set_node(lamp_pos_red, {name="mesecons_lightstone:lightstone_red_off"}) end) elseif lamp_activation == 2 then minetest.set_node(lamp_pos_green, {name="mesecons_lightstone:lightstone_green_on"}) minetest.after(3, function() minetest.set_node(lamp_pos_green, {name="mesecons_lightstone:lightstone_green_off"}) end) elseif lamp_activation == 3 then minetest.set_node(lamp_pos_yellow, {name="mesecons_lightstone:lightstone_yellow_on"}) minetest.after(3, function() minetest.set_node(lamp_pos_yellow, {name="mesecons_lightstone:lightstone_yellow_off"}) end) elseif lamp_activation == 4 then minetest.set_node(lamp_pos_blue, {name="mesecons_lightstone:lightstone_blue_on"}) minetest.after(3, function() minetest.set_node(lamp_pos_blue, {name="mesecons_lightstone:lightstone_blue_off"}) end) minetest.after(3, function() end) else minetest.set_node(lamp_pos_red, {name="mesecons_lightstone:lightstone_red_off"}) minetest.set_node(lamp_pos_yellow, {name="mesecons_lightstone:lightstone_yellow_off"}) minetest.set_node(lamp_pos_green, {name="mesecons_lightstone:lightstone_green_off"}) minetest.set_node(lamp_pos_blue, {name="mesecons_lightstone:lightstone_blue_off"}) end minetest.set_node(mese_pos, {name="default:mese"}) minetest.set_node(switch_pos, {name="mesecons_walllever:wall_lever_off"}) end end) minetest.after(0.1, main) end main()
Au sein du init.lua du mod "four colors", le programme a été particulièrement inspiré du premier module (dit "didactique") de la manufacture, avec les quatre cubes de couleur. Pour rappel du principe, à l'activation du levier, l'une des quatre lampes de couleur différente va s'allumer et le joueur va devoir appuyer sur le bouton correspondant de la boîte à boutons parmi les quatre pour ouvrir la Grande Porte de la Manufacture.
Le programme va s'organiser avec la définition des variables et la fonction "main()" qui est chargé de former la boucle.
-
local lamp_state = {0, 0, 0, 0}
-
local lamp_pos_red = {x=-57, y=10, z=6} local lamp_pos_green = {x=-57, y=10, z=5} local lamp_pos_yellow = {x=-57, y=10, z=4} local lamp_pos_blue = {x=-57, y=10, z=3}
-
local mese_pos = {x=-58, y=10, z=2} local switch_pos = {x=-58, y=10, z=1}
La fonction main() (
function main()
Dans cette fonction, on temporisera les effets de la fonction avec une fonction de temporisation spécifique à Minetest appelé "minetest.after" (
minetest.after(0.1, function()
Au sein de la structure de condition, des éléments vont s'éxecuter progressivement :
-
minetest.get_node(mese_pos).name=="mesecons_extrawires:mese_powered"
minetest.get_node
-
local lamp_activation = math.random(1,4)
lamp_activation
math.random
lamp_state[lamp_activation]=1
- Une fois qu'il a été mis à 1, on coordonne la valeur avec les lampes.