From 9be57613f4f3a21c906cf9de8c905877509331d0 Mon Sep 17 00:00:00 2001 From: otya128 Date: Sun, 30 Aug 2015 09:49:41 +0900 Subject: [PATCH] =?UTF-8?q?SPANIM=E3=81=AE=E6=8C=99=E5=8B=95=E3=82=92?= =?UTF-8?q?=E5=A4=89=E6=9B=B4,SPDEF=E3=81=AE=E6=8C=99=E5=8B=95=E3=82=92?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3,GAME7=E3=81=8C=E5=8B=95=E3=81=8F=E3=82=88?= =?UTF-8?q?=E3=81=86=E3=81=AB=E3=81=AA=E3=81=A3=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SMILEBASIC/TEST.txt | 4 ++++ SMILEBASIC/builtinfunctions.d | 25 +++++++++++++++++++- SMILEBASIC/petitcomputer.d | 1 + SMILEBASIC/sprite.d | 43 +++++++++++++++++++++++++---------- 4 files changed, 60 insertions(+), 13 deletions(-) diff --git a/SMILEBASIC/TEST.txt b/SMILEBASIC/TEST.txt index 120f75b..de1072f 100644 --- a/SMILEBASIC/TEST.txt +++ b/SMILEBASIC/TEST.txt @@ -1,3 +1,7 @@ +SPSET 0,1206 +SPANIM 0,"I",-90,1209,0 +WHILE 1 +WEND DEF TESST X,A$ IF Y<0 THEN Y=28 IF X<0 THEN X=20-(LEN(A$)/2) diff --git a/SMILEBASIC/builtinfunctions.d b/SMILEBASIC/builtinfunctions.d index 0e49c8d..e0bdd97 100644 --- a/SMILEBASIC/builtinfunctions.d +++ b/SMILEBASIC/builtinfunctions.d @@ -234,6 +234,22 @@ class BuiltinFunction static void VISIBLE(PetitComputer p, DefaultValue!(int) console, DefaultValue!(int) graphic, DefaultValue!(int) BG, DefaultValue!(int) sprite) { } + static void XON(PetitComputer p, Value mode/*!?!???!?*/) + { + } + static void XOFF(PetitComputer p, Value mode/*!?!???!?*/) + { + } + static void TOUCH(PetitComputer p, DefaultValue!(int, false) id, out int tm, out int tchx, out int tchy) + { + if(!id.isDefault) + { + writeln("NOTIMPL:TOUCH MPID"); + } + tm = 0; + tchx = 0; + tchy = 0; + } static void XSCREEN(PetitComputer p, int mode, DefaultValue!(int, false) a, DefaultValue!(int, false) b) { a.setDefaultValue(512); @@ -309,6 +325,12 @@ class BuiltinFunction x = 0; y = 0; } + static void STICKEX(PetitComputer p, DefaultValue!(int, false) mp, out int x, out int y) + { + //JOYSTICK? + x = 0; + y = 0; + } static int RGB(int R, int G, int B, DefaultValue!(int, false) _) { if(!_.isDefault) @@ -950,8 +972,9 @@ class BuiltinFunction { p.sprite.getspdef(id, U, V, W, H, HX, HY, A); } - static void SPDEF(PetitComputer p, Value[] va_args) + static void SPDEF(PetitComputer p, Value[] va_args2) { + auto va_args = retro(va_args2); switch(va_args.length) { case 0: diff --git a/SMILEBASIC/petitcomputer.d b/SMILEBASIC/petitcomputer.d index 6372fe0..6b8278b 100644 --- a/SMILEBASIC/petitcomputer.d +++ b/SMILEBASIC/petitcomputer.d @@ -1051,6 +1051,7 @@ class PetitComputer { parser = new Parser( //readText("./SYS/GAME6TALK.TXT").to!wstring + //readText("./SYS/GAME7EXPAD.TXT").to!wstring readText("./SYS/GAME4SHOOTER.TXT").to!wstring //readText("./SYS/GAME2RPG.TXT").to!wstring //readText("./SYS/GAME1DOTRC.TXT").to!wstring diff --git a/SMILEBASIC/sprite.d b/SMILEBASIC/sprite.d index 3fc340e..53e4149 100644 --- a/SMILEBASIC/sprite.d +++ b/SMILEBASIC/sprite.d @@ -273,7 +273,7 @@ struct SpriteData this.define = false; this.attr = SpriteAttr.none; } - void change(SpriteDef s) + void change(ref SpriteDef s) { this.u = s.u; this.v = s.v; @@ -316,6 +316,8 @@ class Sprite { defSPDEFTable[record.I] = SpriteDef(record.X, record.Y, record.W, record.H, record.HX, record.HY, cast(SpriteAttr)record.ATTR); } + //defSPDEFTable[1208].u = 176; + //defSPDEFTable[1208 + 2048].u = 176; spdef; } void spdef() @@ -496,11 +498,11 @@ class Sprite sprite.z = cast(int)(data.old.z + ((data.data.z - data.old.z) / data.frame) * frame); break; case SpriteAnimTarget.UV: - sprite.u = data.old.u + ((data.data.u - data.old.u) / data.frame) * frame; - sprite.v = data.old.v + ((data.data.v - data.old.v) / data.frame) * frame; + sprite.u = data.old.u + cast(int)(((data.data.u - data.old.u) / cast(double)data.frame) * frame); + sprite.v = data.old.v + cast(int)(((data.data.v - data.old.v) / cast(double)data.frame) * frame); break; case SpriteAnimTarget.I: - sprite.defno = data.old.i + ((data.data.i - data.old.i) / data.frame) * frame; + sprite.defno = data.old.i + cast(int)(((data.data.i - data.old.i) / cast(double)data.frame) * frame); spchr(sprite.id, sprite.defno); break; case SpriteAnimTarget.R: @@ -614,17 +616,19 @@ class Sprite } } float disw = 200f, dish = 120f, disw2 = 400f, dish2 = 240f; + int dis; if(petitcom.xscreenmode == 2) { disw = 160f; disw2 = 320f; dish = 240f; dish2 = 480f; + dis = -1; } auto texture = petitcom.GRP[petitcom.sppage].glTexture; float aspect = disw2 / dish2; float z = -0.01f; - int spmax = petitcom.xscreenmode == 1 ? this.spmax : -1;//XSCREENが2,3じゃないと下画面は描画しない + int spmax = petitcom.xscreenmode == 1 ? this.spmax : 512;//XSCREENが2,3じゃないと下画面は描画しない glBindTexture(GL_TEXTURE_2D, texture); glEnable(GL_TEXTURE_2D); // glDisable(GL_TEXTURE_2D); @@ -632,13 +636,6 @@ class Sprite glLoadIdentity(); foreach(i, sprite; zsortedSprites) { - if(i == spmax) - { - disw = 160f; - disw2 = 320f; - glViewport(40, 0, 320, 240); - aspect = disw2 / dish2; - } //定義されてたら動かす if(sprite.define) { @@ -646,6 +643,28 @@ class Sprite } if(sprite.attr & SpriteAttr.show) { + if(dis != -1) + { + if(!dis && sprite.id >= spmax) + { + disw = 160f; + disw2 = 320f; + glViewport(40, 0, 320, 240); + aspect = disw2 / dish2; + dis = true; + } + else + { + if(sprite.id < spmax && dis) + { + disw = 200f; + disw2 = 400f; + glViewport(0, 240, 400, 240); + aspect = disw2 / dish2; + dis = false; + } + } + } int x, y; if(sprite.parent) {