mirror of
https://github.com/kichikuou/xsystem35-sdl2.git
synced 2026-09-22 22:48:08 +03:00
Match the original engine's patchEC behavior
The patchEC flag is default off, and EC 0 goes through the same width/height adjustment as EC with a registered rectangle.
This commit is contained in:
+3
-3
@@ -562,7 +562,7 @@ void commands2F52() {
|
||||
void commands2F53() {
|
||||
int eFlag = getCaliValue();
|
||||
|
||||
nact->patch_ec = eFlag;
|
||||
nact->patch_ec = (eFlag == 1);
|
||||
|
||||
TRACE("patchEC %d:", eFlag);
|
||||
}
|
||||
@@ -936,7 +936,7 @@ void commands2F6F() {
|
||||
void commands2F70() {
|
||||
int eFlag = getCaliValue();
|
||||
|
||||
nact->patch_emen = eFlag;
|
||||
nact->patch_emen = (eFlag == 1);
|
||||
|
||||
TRACE("patchEMEN %d:", eFlag);
|
||||
}
|
||||
@@ -1152,7 +1152,7 @@ void commands2F85() {
|
||||
void commands2F86() {
|
||||
int eFlag = getCaliValue();
|
||||
|
||||
nact->patch_g0 = eFlag;
|
||||
nact->patch_g0 = (eFlag == 1);
|
||||
|
||||
TRACE("patchG0 %d:", eFlag);
|
||||
}
|
||||
|
||||
+5
-5
@@ -55,13 +55,13 @@ void commandEC() {
|
||||
int num = getCaliValue();
|
||||
Ecomtbl *e;
|
||||
SDL_Rect *r;
|
||||
int adj = nact->patch_ec ? 0 : -1;
|
||||
|
||||
if (num == 0) {
|
||||
r = &nact->ags.view_area;
|
||||
ags_fillRectangle(r->x, r->y, r->w, r->h, 0);
|
||||
ags_updateArea(r->x, r->y, r->w, r->h);
|
||||
ags_fillRectangle(r->x, r->y, r->w + adj, r->h + adj, 0);
|
||||
ags_updateArea(r->x, r->y, r->w + adj, r->h + adj);
|
||||
} else {
|
||||
int adj = (nact->patch_ec == 0) ? -1 : 0;
|
||||
e = &tbl[num - 1];
|
||||
ags_fillRectangle(e->r.x, e->r.y, e->r.w + adj, e->r.h + adj, e->pal);
|
||||
ags_updateArea(e->r.x, e->r.y, e->r.w + adj, e->r.h + adj);
|
||||
@@ -92,7 +92,7 @@ void commandEM() {
|
||||
|
||||
SDL_Point p = {x, y};
|
||||
SDL_Rect r = tbl[num - 1].r;
|
||||
if (nact->patch_emen == 0) {
|
||||
if (!nact->patch_emen) {
|
||||
r.w -= 1;
|
||||
r.h -= 1;
|
||||
}
|
||||
@@ -112,7 +112,7 @@ void commandEN() {
|
||||
|
||||
for (int i = min; i <= max; i++) {
|
||||
SDL_Rect r = tbl[i - 1].r;
|
||||
if (nact->patch_emen == 0) {
|
||||
if (!nact->patch_emen) {
|
||||
r.w -= 1;
|
||||
r.h -= 1;
|
||||
}
|
||||
|
||||
+1
-1
@@ -146,7 +146,7 @@ void commandY() {
|
||||
}
|
||||
break;
|
||||
case 1900:
|
||||
nact->patch_ec = p2;
|
||||
nact->patch_ec = (p2 == 1);
|
||||
// We're sure this game was built for System3.9 v5.50, which by default
|
||||
// routes CD-DA commands to DRIFILE_WAVE.
|
||||
muscd_init_bgm(DRIFILE_WAVE, 999);
|
||||
|
||||
+3
-3
@@ -167,9 +167,9 @@ void nact_init() {
|
||||
|
||||
sel_init();
|
||||
|
||||
nact->patch_ec = 1; // TODO: revisit
|
||||
nact->patch_emen = 0;
|
||||
nact->patch_g0 = 0;
|
||||
nact->patch_ec = false;
|
||||
nact->patch_emen = false;
|
||||
nact->patch_g0 = false;
|
||||
|
||||
msg_msgHankakuMode = 0;
|
||||
}
|
||||
|
||||
+4
-4
@@ -97,10 +97,10 @@ typedef struct {
|
||||
/* 選択肢関連 */
|
||||
sel_t sel;
|
||||
|
||||
/* patch 関連 */
|
||||
int patch_ec; /* see patch_ec command */
|
||||
int patch_emen; /* see patch_emen command */
|
||||
int patch_g0; /* see patch g0 command */
|
||||
/* patch flags */
|
||||
bool patch_ec;
|
||||
bool patch_emen;
|
||||
bool patch_g0;
|
||||
|
||||
/* ain 関連 */
|
||||
S39AIN ain;
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
MS FILE,"patchec.adv":
|
||||
|
||||
; --- EC with a registered rectangle ---
|
||||
; patchEC defaults to off, so EC clears a region 1px narrower and
|
||||
; shorter than the rectangle registered by ES.
|
||||
CF 100,100,40,30,7:
|
||||
ES 1,3,100,100,40,30:
|
||||
EC 1:
|
||||
PT0 RND,120,115: ~AssertEquals RND,3,__LINE__:
|
||||
PT0 RND,138,128: ~AssertEquals RND,3,__LINE__:
|
||||
PT0 RND,139,115: ~AssertEquals RND,7,__LINE__:
|
||||
PT0 RND,120,129: ~AssertEquals RND,7,__LINE__:
|
||||
|
||||
; patchEC 1 disables the adjustment, so EC clears the whole rectangle.
|
||||
CF 100,100,40,30,7:
|
||||
patchEC 1:
|
||||
EC 1:
|
||||
PT0 RND,139,115: ~AssertEquals RND,3,__LINE__:
|
||||
PT0 RND,120,129: ~AssertEquals RND,3,__LINE__:
|
||||
|
||||
; Only eFlag == 1 turns the patch on; any other value restores the bug.
|
||||
CF 100,100,40,30,7:
|
||||
patchEC 2:
|
||||
EC 1:
|
||||
PT0 RND,139,115: ~AssertEquals RND,7,__LINE__:
|
||||
patchEC 0:
|
||||
|
||||
; --- EC 0 clears the current view area, now with the same adjustment ---
|
||||
ZZ5 D18:
|
||||
WV 100,100,50,40:
|
||||
CF 100,100,50,40,7:
|
||||
EC 0:
|
||||
PT0 RND,120,120: ~AssertEquals RND,0,__LINE__:
|
||||
PT0 RND,148,138: ~AssertEquals RND,0,__LINE__:
|
||||
PT0 RND,149,120: ~AssertEquals RND,7,__LINE__:
|
||||
PT0 RND,120,139: ~AssertEquals RND,7,__LINE__:
|
||||
|
||||
CF 100,100,50,40,7:
|
||||
patchEC 1:
|
||||
EC 0:
|
||||
PT0 RND,149,120: ~AssertEquals RND,0,__LINE__:
|
||||
PT0 RND,120,139: ~AssertEquals RND,0,__LINE__:
|
||||
patchEC 0:
|
||||
WV 0,0,D18,D19:
|
||||
|
||||
%0:
|
||||
@@ -0,0 +1,36 @@
|
||||
MS FILE,"patchemen.adv":
|
||||
|
||||
ES 1,0,10,10,20,20:
|
||||
ES 2,0,20,20,20,20:
|
||||
|
||||
; --- EM: point-in-rectangle test ---
|
||||
; patchEMEN defaults to off, so the rectangle is treated as 1px
|
||||
; narrower and shorter than registered by ES.
|
||||
EM 1,RND,10,10: ~AssertEquals RND,1,__LINE__:
|
||||
EM 1,RND,28,28: ~AssertEquals RND,1,__LINE__:
|
||||
EM 1,RND,29,20: ~AssertEquals RND,0,__LINE__:
|
||||
EM 1,RND,20,29: ~AssertEquals RND,0,__LINE__:
|
||||
EM 1,RND,9,10: ~AssertEquals RND,0,__LINE__:
|
||||
|
||||
; patchEMEN 1 disables the adjustment.
|
||||
patchEMEN 1:
|
||||
EM 1,RND,29,29: ~AssertEquals RND,1,__LINE__:
|
||||
EM 1,RND,30,20: ~AssertEquals RND,0,__LINE__:
|
||||
|
||||
; Only eFlag == 1 turns the patch on; any other value restores the bug.
|
||||
patchEMEN 2:
|
||||
EM 1,RND,29,29: ~AssertEquals RND,0,__LINE__:
|
||||
patchEMEN 0:
|
||||
|
||||
; --- EN: number of the rectangle containing the point ---
|
||||
EN RND,1,2,15,15: ~AssertEquals RND,1,__LINE__:
|
||||
EN RND,1,2,25,25: ~AssertEquals RND,2,__LINE__:
|
||||
EN RND,1,2,5,5: ~AssertEquals RND,0,__LINE__:
|
||||
|
||||
; The patch flag also applies to EN's edge handling.
|
||||
EN RND,1,1,29,29: ~AssertEquals RND,0,__LINE__:
|
||||
patchEMEN 1:
|
||||
EN RND,1,1,29,29: ~AssertEquals RND,1,__LINE__:
|
||||
patchEMEN 0:
|
||||
|
||||
%0:
|
||||
@@ -16,6 +16,8 @@
|
||||
%#math.adv:
|
||||
%#variable.adv:
|
||||
%#unitmap.adv:
|
||||
%#patchec.adv:
|
||||
%#patchemen.adv:
|
||||
|
||||
HH0,tests_passed: ' tests passed' R
|
||||
HH0,tests_failed: ' tests failed' R
|
||||
|
||||
@@ -8,6 +8,8 @@ stack.adv
|
||||
math.adv
|
||||
variable.adv
|
||||
unitmap.adv
|
||||
patchec.adv
|
||||
patchemen.adv
|
||||
|
||||
#DLLHeader
|
||||
ShString.HEL
|
||||
|
||||
Binary file not shown.
Reference in New Issue
Block a user