SPANIMの挙動を変更,SPDEFの挙動を修正,GAME7が動くようになった
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user