l'implementazione è abbastanza convoluta e poco chiara ad esempio non capisco la generazione continua del' array nella variabile i creata in ogni instanza da cui la funzione è chiamata.
Oltretutto tale array non viene attualmente utilizzato nel resto del codice.
Non so sulle vecchie versioni, ma su Game Maker Studio sono disponibili le operazioni bitwise per le operazioni sui bit.
A differenza del tuo metodo il valore double viene convertito int 32bit quindi con 32 posizioni invece di 64, ma decisamente più pratico da usare per svariate esigenze es io lo uso per le flag e per impacchettare spacchettare multipli valori da 3 o 4 bit assieme.
La funzione bitwise equivalente a quella che proponi sarebbe (dato che non l'ho testata):
Codice: Seleziona tutto
return (argument0 >> argument1) & 1; //che ritorna 0 o 1 nel caso il bit di argument0 nella posizione argument1 sia settato;
per fare un check di una flag invece si puo' usare semplicemente & eseguibile su bit singolo o bit multipli se si vuole testare piu' flag contemporaneamente.
Codice: Seleziona tutto
var flags_da_testare = 1<<3 | 1<<6 | 1<<7; //costante 1100100 di esempio equivalente a 3 flags che vuoi testare siano settate in una variabile.
if((variabile_flags & flags_da_testare) == flags_da_testare) show_message("ok");
else show_message("una o piu flag non erano settate");