diff --git a/SMILEBASIC/builtinfunctions.d b/SMILEBASIC/builtinfunctions.d index 75c3333..1cac4f4 100644 --- a/SMILEBASIC/builtinfunctions.d +++ b/SMILEBASIC/builtinfunctions.d @@ -1474,6 +1474,17 @@ class BuiltinFunction return; p.sprite.spset(ix, u, v, w, h, cast(SpriteAttr)attr); } + static void SPSET(PetitComputer p, int defno, out int ix) + { + if (!p.sprite.isValidDef(defno)) + { + throw new OutOfRange(smilebasicFunctionName, 1); + } + ix = p.sprite.allocSprite(); + if (ix == -1) + return; + p.sprite.spset(ix, defno); + } static void SPCHR(PetitComputer p, int id, int defno, DefaultValue!(int, false) V, DefaultValue!(int, false) W, DefaultValue!(int, false) H, DefaultValue!(int, false) ATTR) { if (!p.sprite.isValidSpriteId(id)) diff --git a/SMILEBASIC/sprite.d b/SMILEBASIC/sprite.d index 2cd9796..0b5cc06 100644 --- a/SMILEBASIC/sprite.d +++ b/SMILEBASIC/sprite.d @@ -823,6 +823,10 @@ class Sprite synchronized (this) sprites[id] = SpriteData(id, spdef, 0/*要調査*/); } + int allocSprite() + { + return allocSprite(0, petitcom.displaynum ? cast(int)sprites.length - spmax - 1 : spmax - 1); + } int allocSprite(int lower, int upper) { for (int i = lower; i <= upper; i++)