PICO-8は、扱える数字の範囲が10進数で-32768〜32767.99999しかありません。
– PICO-8 numbers have limited accuracy and range; the minimum step between numbers is approximately 0.00002 (0x0.0001), with a range of -32768 (-0x8000) to approximately 32767.99999 (0x7fff.ffff)
https://www.lexaloffle.com/dl/docs/pico-8_manual.html#Quirks_of_PICO_8
そのため、たとえばシューティングゲームのスコアのようにガンガン数字が増えていくようなものについては、そのままではあっという間に天井が来てしまいます。
内部では37267に収まる範囲で計算し、表示する時に末尾に「00」をつけたりして100倍に見せることはできますが、それでも3276700点でおしまいです。
そこで使えるのが、数字を文字列として扱うことで、上限を超えるスコアを扱うアイデアです。
以下、サンプルコードです。
function calc_large_num(e,v)
-- e: 合計の数字, v: 加算する数字
local total_num, add_num, result, carry=
-- 合計の数字, 加算する数字, 結果, 繰り上がり
tostr(e), tostr(v), "", 0
local total_len, add_len=
-- 合計の数字の桁数, 加算する数字の桁数
#total_num, #add_num
while total_len>0 or add_len>0 or carry>0 do
local digit1,digit2=
-- 合計の数字を末尾から順に取得
tonum(sub(total_num,total_len,total_len)) or 0,
-- 加算する数字を末尾から順に取得
tonum(sub(add_num,add_len,add_len)) or 0
-- それぞれの数字と繰り上がり数字を足す
local sum=digit1+digit2+carry
-- 一の位を取得、結果の先頭に追加
result=(sum%10)..result
-- 繰り上がり数字を取得
carry=flr(sum/10)
-- 次の数字に進む
total_len=max(0,total_len-1)
add_len=max(0,add_len-1)
end
return result
end
calc_large_num(合計する元の数,加算する数)で、合計した数が返ります。
この場合、上記の通り、スコアは数字ではなく文字列として扱っています。

10,000点でも500,000点でも、ボーナススコア出し放題です。