Aller au contenu

Sandbox et budgets

Les mods script tournent dans une sandbox. Le principe est simple : un mod ne peut jamais faire planter, geler ou ralentir NeoPiano. S’il dépasse une limite, il est désactivé et le joueur voit pourquoi.

Budget Valeur Si dépassé
Par appel de callback 20 ms Mod désactivé
Chargement + on_mod_init 250 ms Mod désactivé
Par image, partagé entre tous les mods 6 ms Les événements restants sont livrés à l’image suivante
File d’attente d’événements 512 par mod Les plus anciens sont abandonnés
Action Limite
Messages de journal 50 par seconde
Formes créées (spawn_note_mesh) 200 par seconde, 64 par appel
Langage Limite
Lua 4 Mio par mod
WebAssembly 2 Mio de mémoire linéaire, 64 Kio de pile, module de 4 Mo max
Stockage 256 Kio par mod

Lua 5.4 avec les bibliothèques base, string, table, math et utf8. Pour la sécurité :

  • io, os, debug, package et les coroutines ne sont pas disponibles ;
  • load, loadfile, dofile et string.dump sont retirés ;
  • seuls les scripts texte sont acceptés (pas de bytecode) ;
  • print écrit dans le journal du mod ;
  • les fonctions de motifs (string.find, gmatch, gsub) ont leur propre limite : un motif trop complexe désactive le mod au lieu de geler le jeu.
disabled: time limit of a call exceeded (20 ms) in on_note_on
disabled: out of memory (limit 4096 KiB) in on_note_on
disabled: … pattern too complex (step limit)
refused: attempt to load a binary chunk (mode is 't')

Documentation synchronisée avec NeoPiano · commit cbf48cc · 17 octobre 2026