aboutsummaryrefslogtreecommitdiff
path: root/scumm/script_v8.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'scumm/script_v8.cpp')
-rw-r--r--scumm/script_v8.cpp58
1 files changed, 14 insertions, 44 deletions
diff --git a/scumm/script_v8.cpp b/scumm/script_v8.cpp
index 764820faee..e2c442cf52 100644
--- a/scumm/script_v8.cpp
+++ b/scumm/script_v8.cpp
@@ -22,6 +22,7 @@
#include "stdafx.h"
#include "scumm.h"
#include "actor.h"
+#include "akos.h"
#include "charset.h"
#include "intern.h"
#include "sound.h"
@@ -1469,52 +1470,21 @@ void Scumm_v8::o8_kernelGetFunctions() {
}
case 0xD9: { // actorHit - used, for example, to detect ship collision
// during ship-to-ship combat.
-#if 0
Actor *a = derefActor(args[1], "actorHit");
- int x = args[2];
- int y = args[3];
-
- // TODO: this should perform a collision test, i.e. check if
- // point (x,y) lies on the given actor or not.
- // To achieve this, one needs to consider the current costume
- // etc. What the original code seems to do is to draw the
- // actor/costume (but maybe in a custom buffer?), and let the
- // draw code perform the hit test.
- // But I am not 100% clear on this. For example, it probably
- // shouldn't touch the gfx usage bits, and some other things...
- // So maybe we need dedicated code for this after all?
-
- warning("actorHit(%d, %d, %d) NYI", args[1], x, y);
-
-#endif
-
- push(1); // FIXME - for now always return 1
-/*
- // Rough sketch, thanks to DanielFox and ludde
- struct SomeStruct {
- int RoomHeight, RoomWidth;
- byte *ScreenBuffer;
- }
+ AkosRenderer *ar = (AkosRenderer *) _costumeRenderer;
+ bool old_need_redraw = a->needRedraw;
+
+ ar->_actorHitX = args[2];
+ ar->_actorHitY = args[3] + _screenTop;
+ ar->_actorHitMode = true;
+ ar->_actorHitResult = false;
+
+ a->needRedraw = true;
+ a->drawActorCostume();
+ a->needRedraw = old_need_redraw;
- dword_4FC150 = args[3]; // X
- dword_4FC154 = args[2]; // Y
- Actor &a = pActors[args[1]];
- Point rel = GetScreenCoordsRelativeToRoom(), pt, scale;
- SomeStruct tmp;
-
- pt.x = a.x + a.field_18 - rel.x; // 18/1C are some kind of
- pt.y = a.y + a.field_1C - rel.y; // X/Y offsets...
- scale.x = a.scale_x;
- scale.y = a.scale_y;
-
- dword_4FC148 = 2;
- graphics_getBuffer1Info(&tmp); // Some kind of get_virtscreen?
- chore_drawActor(tmp, actor_nr, &pt, &scale);
-
- if (dword_4FC148 != 1) // Guess this is changed by
- dword_4FC148 = 0; // chore_drawActor
- push(dword_4FC148);
-*/
+ ar->_actorHitMode = false;
+ push(ar->_actorHitResult);
break;
}
case 0xDA: // lipSyncWidth