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.
Budgets de temps
Section intitulée « Budgets de temps »| 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 |
Budgets d’actions
Section intitulée « Budgets d’actions »| 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 |
Ce qui est disponible en Lua
Section intitulée « Ce qui est disponible en Lua »Lua 5.4 avec les bibliothèques base, string, table, math et utf8. Pour la sécurité :
io,os,debug,packageet les coroutines ne sont pas disponibles ;load,loadfile,dofileetstring.dumpsont 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.
Exemples de désactivations
Section intitulée « Exemples de désactivations »disabled: time limit of a call exceeded (20 ms) in on_note_ondisabled: out of memory (limit 4096 KiB) in on_note_ondisabled: … 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