From 4b41376cb54a1a7653900fdad71b8fa96ca24639 Mon Sep 17 00:00:00 2001 From: otya128 Date: Sat, 31 Dec 2016 20:09:38 +0900 Subject: [PATCH] Implement SPSET(3) --- SMILEBASIC/builtinfunctions.d | 11 +++++++++++ SMILEBASIC/sprite.d | 4 ++++ 2 files changed, 15 insertions(+) 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++)