Skip to content

Commit b4753b5

Browse files
committed
ags3/ags4-auto-test: add character view frame tests
1 parent 4b93f0a commit b4753b5

File tree

6 files changed

+157
-4
lines changed

6 files changed

+157
-4
lines changed

ags3/auto-test/test-characters.asc

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ int GetTestCharactersCount()
44
return 8 + 8
55
+ 24 * 3 // turn on spot animating
66
+ 8 * 3 // idle start time
7+
+ 1 // graphic pos
8+
+ 4 // view frames
79
;
810
}
911

@@ -232,17 +234,85 @@ void TestIdleViewStart()
232234
TestIdleStartsInTime(idler, idle_start_delay, "after custom animate", 0, true);
233235
}
234236

237+
//int test_render_num;
238+
void _TestCharRenderF(Character *testChar, int sprite_num, eFlipDirection flip, const string test_name)
239+
{
240+
Wait(1); // let engine redraw
241+
// IMPORTANT: AGS 3.* has a historical mistake where the object's sprite is drawn 1 pixel higher than necessary
242+
int sprite_w = Game.SpriteWidth[sprite_num];
243+
int sprite_h = Game.SpriteHeight[sprite_num];
244+
int sprite_x = testChar.x - sprite_w / 2;
245+
int sprite_y = testChar.y - sprite_h;
246+
//tap.Comment(String.Format("sprite_x = %d, sprite_y = %d, sprite_w = %d, sprite_h = %d", sprite_x, sprite_y, sprite_w, sprite_h));
247+
//SaveScreenShot(String.Format("_%d.bmp", test_render_num));
248+
//test_render_num++;
249+
tap.ok(GfxComparer.TakeScreenshotAndMatchSprite(sprite_x, sprite_y, sprite_w, sprite_h, sprite_num, flip), test_name);
250+
}
251+
252+
void _TestCharRender(Character *testChar, int sprite_num, const string test_name)
253+
{
254+
_TestCharRenderF(testChar, sprite_num, -1, test_name);
255+
}
256+
257+
void _TestCharViewFrame(Character *testChar, int view, int loop, int frame, const string test_name)
258+
{
259+
testChar.LockViewFrame(view, loop, frame);
260+
ViewFrame* vf = Game.GetViewFrame(view, loop, frame);
261+
eFlipDirection flip = -1;
262+
if (vf.Flipped)
263+
flip = eFlipLeftToRight;
264+
_TestCharRenderF(testChar, vf.Graphic, flip, test_name);
265+
testChar.UnlockView();
266+
}
267+
268+
#define SPRITE_DEFAULT 9
269+
270+
void TestGraphicPosition()
271+
{
272+
cWalker1.LockViewFrame(VFLIP, 0, 0);
273+
_TestCharRender(cWalker1, SPRITE_DEFAULT, "Character: graphic position");
274+
cWalker1.UnlockView();
275+
}
276+
277+
void TestViewRender()
278+
{
279+
_TestCharViewFrame(cWalker1, VFLIP, 0, 0, "Character: view frame 0, normal");
280+
_TestCharViewFrame(cWalker1, VFLIP, 0, 1, "Character: view frame 1, normal");
281+
_TestCharViewFrame(cWalker1, VFLIP, 0, 2, "Character: view frame 2, h-flip");
282+
_TestCharViewFrame(cWalker1, VFLIP, 0, 3, "Character: view frame 3, h-flip");
283+
}
284+
235285
void TestCharacters()
236286
{
237287
tap.Comment("start Character tests");
238288
int old_game_speed = GetGameSpeed();
239289
SetGameSpeed(1000);
240290

291+
cWalker1.on = true;
292+
cWalker2.on = true;
293+
241294
TestChangingDirectionLoop();
242295
TestTurnOnSpotInstant();
243296
TestTurnOnSpotAnimating();
244297
TestIdleViewStart();
245298

299+
// Disable characters and objects, avoid interfering with our tests
300+
for (int i = 0; i < Game.CharacterCount; i++)
301+
character[i].on = false;
302+
for (int i = 0; i < Room.ObjectCount; i++)
303+
object[i].Visible = false;
304+
305+
Game.Camera.SetAt(0, 0);
306+
cWalker1.x = 100;
307+
cWalker1.y = 100;
308+
cWalker1.on = true;
309+
cWalker1.Transparency = 0;
310+
cWalker1.ManualScaling = true;
311+
cWalker1.Scaling = 100;
312+
313+
TestGraphicPosition();
314+
TestViewRender();
315+
246316
SetGameSpeed(old_game_speed);
247317
tap.Comment("end Character tests");
248318
}

ags3/auto-test/test-enginerender.asc

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,12 @@ void TestEngineRender()
115115
// Do not change GUI looks when disabled
116116
SetGameOption(OPT_WHENGUIDISABLED, 2);
117117

118+
// Disable characters and objects, avoid interfering with our tests
119+
for (int i = 0; i < Game.CharacterCount; i++)
120+
character[i].on = false;
121+
for (int i = 0; i < Room.ObjectCount; i++)
122+
object[i].Visible = false;
123+
118124
//
119125
// Object texture update after dynamic sprite change
120126
//

ags3/auto-test/test-objects.asc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ void TestGraphicPosition(Object *testObject)
4040
_TestObjectRender(testObject, SPRITE_DEFAULT, "Object: graphic position");
4141
}
4242

43-
void TestViews(Object *testObject)
43+
void TestViewRender(Object *testObject)
4444
{
4545
_TestObjectViewFrame(testObject, VFLIP, 0, 0, "Object: view frame 0, normal");
4646
_TestObjectViewFrame(testObject, VFLIP, 0, 1, "Object: view frame 1, normal");
@@ -60,7 +60,7 @@ void TestObjects()
6060
oTestObject.Transparency = 0;
6161

6262
TestGraphicPosition(oTestObject);
63-
TestViews(oTestObject);
63+
TestViewRender(oTestObject);
6464

6565
tap.Comment("end View tests");
6666
}

ags4/auto-test/test-characters.asc

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ int GetTestCharactersCount()
44
return 8 + 8
55
+ 24 * 3 // turn on spot animating
66
+ 8 * 3 // idle start time
7+
+ 1 // graphic pos
8+
+ 8 // view frames
79
;
810
}
911

@@ -232,17 +234,86 @@ void TestIdleViewStart()
232234
TestIdleStartsInTime(idler, idle_start_delay, "after custom animate", 0, true);
233235
}
234236

237+
//int test_render_num;
238+
void _TestCharRenderF(Character *testChar, int sprite_num, eFlipDirection flip, const string test_name)
239+
{
240+
Wait(1); // let engine redraw
241+
int sprite_w = Game.SpriteWidth[sprite_num];
242+
int sprite_h = Game.SpriteHeight[sprite_num];
243+
int sprite_x = testChar.x - sprite_w / 2;
244+
int sprite_y = testChar.y - sprite_h + 1;
245+
//tap.Comment(String.Format("sprite_x = %d, sprite_y = %d, sprite_w = %d, sprite_h = %d", sprite_x, sprite_y, sprite_w, sprite_h));
246+
//SaveScreenShot(String.Format("_%d.bmp", test_render_num));
247+
//test_render_num++;
248+
tap.ok(GfxComparer.TakeScreenshotAndMatchSprite(sprite_x, sprite_y, sprite_w, sprite_h, sprite_num, flip), test_name);
249+
}
250+
251+
void _TestCharRender(Character *testChar, int sprite_num, const string test_name)
252+
{
253+
_TestCharRenderF(testChar, sprite_num, eFlipNone, test_name);
254+
}
255+
256+
void _TestCharViewFrame(Character *testChar, int view, int loop, int frame, const string test_name)
257+
{
258+
testChar.LockViewFrame(view, loop, frame);
259+
ViewFrame* vf = Game.GetViewFrame(view, loop, frame);
260+
_TestCharRenderF(testChar, vf.Graphic, vf.Flipped, test_name);
261+
testChar.UnlockView();
262+
}
263+
264+
#define SPRITE_DEFAULT 7
265+
266+
void TestGraphicPosition()
267+
{
268+
cWalker1.LockViewFrame(VFLIP, 0, 0);
269+
_TestCharRender(cWalker1, SPRITE_DEFAULT, "Character: graphic position");
270+
cWalker1.UnlockView();
271+
}
272+
273+
void TestViewRender()
274+
{
275+
_TestCharViewFrame(cWalker1, VFLIP, 0, 0, "Character: view frame 0, normal");
276+
_TestCharViewFrame(cWalker1, VFLIP, 0, 1, "Character: view frame 1, normal");
277+
_TestCharViewFrame(cWalker1, VFLIP, 0, 2, "Character: view frame 2, h-flip");
278+
_TestCharViewFrame(cWalker1, VFLIP, 0, 3, "Character: view frame 3, h-flip");
279+
_TestCharViewFrame(cWalker1, VFLIP, 0, 4, "Character: view frame 4, v-flip");
280+
_TestCharViewFrame(cWalker1, VFLIP, 0, 5, "Character: view frame 5, v-flip");
281+
_TestCharViewFrame(cWalker1, VFLIP, 0, 6, "Character: view frame 6, hv-flip");
282+
_TestCharViewFrame(cWalker1, VFLIP, 0, 7, "Character: view frame 7, hv-flip");
283+
}
284+
235285
void TestCharacters()
236286
{
237287
tap.Comment("start Character tests");
238288
int old_game_speed = GetGameSpeed();
239289
SetGameSpeed(1000);
240290

291+
cWalker1.Enabled = true;
292+
cWalker2.Enabled = true;
293+
241294
TestChangingDirectionLoop();
242295
TestTurnOnSpotInstant();
243296
TestTurnOnSpotAnimating();
244297
TestIdleViewStart();
245298

299+
// Disable characters and objects, avoid interfering with our tests
300+
for (int i = 0; i < Game.CharacterCount; i++)
301+
character[i].Visible = false;
302+
for (int i = 0; i < Room.ObjectCount; i++)
303+
object[i].Visible = false;
304+
305+
Game.Camera.SetAt(0, 0);
306+
cWalker1.x = 100;
307+
cWalker1.y = 100;
308+
cWalker1.Enabled = true;
309+
cWalker1.Visible = true;
310+
cWalker1.Transparency = 0;
311+
cWalker1.ManualScaling = true;
312+
cWalker1.Scaling = 100;
313+
314+
TestGraphicPosition();
315+
TestViewRender();
316+
246317
SetGameSpeed(old_game_speed);
247318
tap.Comment("end Character tests");
248319
}

ags4/auto-test/test-enginerender.asc

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,12 @@ void TestEngineRender()
123123
// Do not change GUI looks when disabled
124124
SetGameOption(OPT_WHENGUIDISABLED, 2);
125125

126+
// Disable characters and objects, avoid interfering with our tests
127+
for (int i = 0; i < Game.CharacterCount; i++)
128+
character[i].Visible = false;
129+
for (int i = 0; i < Room.ObjectCount; i++)
130+
object[i].Visible = false;
131+
126132
//
127133
// Object texture update after dynamic sprite change
128134
//

ags4/auto-test/test-objects.asc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ void TestGraphicPosition(Object *testObject)
3636
_TestObjectRender(testObject, SPRITE_DEFAULT, "Object: graphic position");
3737
}
3838

39-
void TestViews(Object *testObject)
39+
void TestViewRender(Object *testObject)
4040
{
4141
_TestObjectViewFrame(testObject, VFLIP, 0, 0, "Object: view frame 0, normal");
4242
_TestObjectViewFrame(testObject, VFLIP, 0, 1, "Object: view frame 1, normal");
@@ -60,7 +60,7 @@ void TestObjects()
6060
oTestObject.Transparency = 0;
6161

6262
TestGraphicPosition(oTestObject);
63-
TestViews(oTestObject);
63+
TestViewRender(oTestObject);
6464

6565
tap.Comment("end View tests");
6666
}

0 commit comments

Comments
 (0)