1
0

SPANIMの挙動を変更,SPDEFの挙動を修正,GAME7が動くようになった

This commit is contained in:
otya128
2015-08-30 09:49:41 +09:00
parent 5653150a67
commit 9be57613f4
4 changed files with 60 additions and 13 deletions

View File

@@ -1,3 +1,7 @@
SPSET 0,1206
SPANIM 0,"I",-90,1209,0
WHILE 1
WEND
DEF TESST X,A$ DEF TESST X,A$
IF Y<0 THEN Y=28 IF Y<0 THEN Y=28
IF X<0 THEN X=20-(LEN(A$)/2) IF X<0 THEN X=20-(LEN(A$)/2)

View File

@@ -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 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) static void XSCREEN(PetitComputer p, int mode, DefaultValue!(int, false) a, DefaultValue!(int, false) b)
{ {
a.setDefaultValue(512); a.setDefaultValue(512);
@@ -309,6 +325,12 @@ class BuiltinFunction
x = 0; x = 0;
y = 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) _) static int RGB(int R, int G, int B, DefaultValue!(int, false) _)
{ {
if(!_.isDefault) if(!_.isDefault)
@@ -950,8 +972,9 @@ class BuiltinFunction
{ {
p.sprite.getspdef(id, U, V, W, H, HX, HY, A); 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) switch(va_args.length)
{ {
case 0: case 0:

View File

@@ -1051,6 +1051,7 @@ class PetitComputer
{ {
parser = new Parser( parser = new Parser(
//readText("./SYS/GAME6TALK.TXT").to!wstring //readText("./SYS/GAME6TALK.TXT").to!wstring
//readText("./SYS/GAME7EXPAD.TXT").to!wstring
readText("./SYS/GAME4SHOOTER.TXT").to!wstring readText("./SYS/GAME4SHOOTER.TXT").to!wstring
//readText("./SYS/GAME2RPG.TXT").to!wstring //readText("./SYS/GAME2RPG.TXT").to!wstring
//readText("./SYS/GAME1DOTRC.TXT").to!wstring //readText("./SYS/GAME1DOTRC.TXT").to!wstring

View File

@@ -273,7 +273,7 @@ struct SpriteData
this.define = false; this.define = false;
this.attr = SpriteAttr.none; this.attr = SpriteAttr.none;
} }
void change(SpriteDef s) void change(ref SpriteDef s)
{ {
this.u = s.u; this.u = s.u;
this.v = s.v; 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[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; spdef;
} }
void 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); sprite.z = cast(int)(data.old.z + ((data.data.z - data.old.z) / data.frame) * frame);
break; break;
case SpriteAnimTarget.UV: case SpriteAnimTarget.UV:
sprite.u = data.old.u + ((data.data.u - data.old.u) / 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 + ((data.data.v - data.old.v) / data.frame) * frame; sprite.v = data.old.v + cast(int)(((data.data.v - data.old.v) / cast(double)data.frame) * frame);
break; break;
case SpriteAnimTarget.I: 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); spchr(sprite.id, sprite.defno);
break; break;
case SpriteAnimTarget.R: case SpriteAnimTarget.R:
@@ -614,17 +616,19 @@ class Sprite
} }
} }
float disw = 200f, dish = 120f, disw2 = 400f, dish2 = 240f; float disw = 200f, dish = 120f, disw2 = 400f, dish2 = 240f;
int dis;
if(petitcom.xscreenmode == 2) if(petitcom.xscreenmode == 2)
{ {
disw = 160f; disw = 160f;
disw2 = 320f; disw2 = 320f;
dish = 240f; dish = 240f;
dish2 = 480f; dish2 = 480f;
dis = -1;
} }
auto texture = petitcom.GRP[petitcom.sppage].glTexture; auto texture = petitcom.GRP[petitcom.sppage].glTexture;
float aspect = disw2 / dish2; float aspect = disw2 / dish2;
float z = -0.01f; 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); glBindTexture(GL_TEXTURE_2D, texture);
glEnable(GL_TEXTURE_2D); glEnable(GL_TEXTURE_2D);
// glDisable(GL_TEXTURE_2D); // glDisable(GL_TEXTURE_2D);
@@ -632,13 +636,6 @@ class Sprite
glLoadIdentity(); glLoadIdentity();
foreach(i, sprite; zsortedSprites) foreach(i, sprite; zsortedSprites)
{ {
if(i == spmax)
{
disw = 160f;
disw2 = 320f;
glViewport(40, 0, 320, 240);
aspect = disw2 / dish2;
}
//定義されてたら動かす //定義されてたら動かす
if(sprite.define) if(sprite.define)
{ {
@@ -646,6 +643,28 @@ class Sprite
} }
if(sprite.attr & SpriteAttr.show) 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; int x, y;
if(sprite.parent) if(sprite.parent)
{ {