svn-id: r26482
This commit is contained in:
Travis Howell 2007-04-15 05:33:21 +00:00
parent 2d3e77db85
commit 95661d65af
2 changed files with 164 additions and 152 deletions

View File

@ -630,8 +630,8 @@ protected:
void defineBox(int id, int x, int y, int width, int height, int flags, int verb, Item *item_ptr);
HitArea *findEmptyHitArea();
void resetVerbs();
void setVerb(HitArea * ha);
virtual void resetVerbs();
virtual void setVerb(HitArea * ha);
void hitarea_leave(HitArea * ha, bool state = false);
void leaveHitAreaById(uint hitarea_id);
@ -737,8 +737,8 @@ protected:
void checkUp(WindowBlock *window);
void checkDown(WindowBlock *window);
void inventoryUp(WindowBlock *window);
void inventoryDown(WindowBlock *window);
virtual void inventoryUp(WindowBlock *window);
virtual void inventoryDown(WindowBlock *window);
WindowBlock *openWindow(uint x, uint y, uint w, uint h, uint flags, uint fillColor, uint textColor);
uint getWindowNum(WindowBlock *window);
@ -752,7 +752,7 @@ protected:
HitArea *findBox(uint hitarea_id);
void boxController(uint x, uint y, uint mode);
void handleVerbClicked(uint verb);
void clearName();
virtual void clearName();
void displayName(HitArea * ha);
void resetNameWindow();
void displayBoxStars();
@ -1471,8 +1471,15 @@ public:
virtual void drawMousePointer();
protected:
virtual void drawIconArray(uint i, Item *item_ptr, int line, int classMask);
virtual void resetVerbs();
virtual void setVerb(HitArea * ha);
virtual void inventoryUp(WindowBlock *window);
virtual void inventoryDown(WindowBlock *window);
virtual void clearName();
virtual void drawIconArray(uint i, Item *item_ptr, int line, int classMask);
private:
};
@ -1483,6 +1490,8 @@ public:
virtual void setupOpcodes(OpcodeProc *op);
protected:
virtual void resetVerbs();
private:
};

View File

@ -176,6 +176,14 @@ static const char *const english_verb_prep_names[] = {
"", "", "", "to whom ?"
};
void AGOSEngine_Feeble::clearName() {
stopAnimateSimon2(2, 6);
_lastNameOn = NULL;
_animatePointer = 0;
_mouseAnim = 1;
return;
}
void AGOSEngine::clearName() {
if (getGameType() == GType_ELVIRA1 || getGameType() == GType_ELVIRA2)
return;
@ -186,14 +194,6 @@ void AGOSEngine::clearName() {
HitArea *last;
HitArea *ha;
if (getGameType() == GType_FF || getGameType() == GType_PP) {
stopAnimateSimon2(2, 6);
_lastNameOn = NULL;
_animatePointer = 0;
_mouseAnim = 1;
return;
}
if (getGameType() == GType_SIMON2) {
if (getBitFlag(79)) {
sendSync(202);
@ -474,118 +474,121 @@ void AGOSEngine::defineBox(int id, int x, int y, int width, int height, int flag
_needHitAreaRecalc++;
}
void AGOSEngine_PuzzlePack::resetVerbs() {
_verbHitArea = 300;
}
void AGOSEngine_Feeble::resetVerbs() {
_verbHitArea = 300;
int cursor = 0;
int animMax = 16;
if (getBitFlag(203)) {
cursor = 14;
animMax = 9;
} else if (getBitFlag(204)) {
cursor = 15;
animMax = 9;
} else if (getBitFlag(207)) {
cursor = 26;
animMax = 2;
}
_mouseCursor = cursor;
_mouseAnimMax = animMax;
_mouseAnim = 1;
_needHitAreaRecalc++;
if (getBitFlag(99)) {
setVerb(NULL);
}
}
void AGOSEngine::resetVerbs() {
if (getGameType() == GType_ELVIRA1 || getGameType() == GType_ELVIRA2)
return;
if (getGameType() == GType_PP) {
_verbHitArea = 300;
} else if (getGameType() == GType_FF) {
_verbHitArea = 300;
int cursor = 0;
int animMax = 16;
uint id;
HitArea *ha;
if (getBitFlag(203)) {
cursor = 14;
animMax = 9;
} else if (getBitFlag(204)) {
cursor = 15;
animMax = 9;
} else if (getBitFlag(207)) {
cursor = 26;
animMax = 2;
}
_mouseCursor = cursor;
_mouseAnimMax = animMax;
_mouseAnim = 1;
_needHitAreaRecalc++;
if (getBitFlag(99)) {
setVerb(NULL);
}
if (getGameType() == GType_SIMON2) {
id = 2;
if (!getBitFlag(79))
id = (_mouse.y >= 136) ? 102 : 101;
} else {
uint id;
HitArea *ha;
id = (_mouse.y >= 136) ? 102 : 101;
}
if (getGameType() == GType_SIMON2) {
id = 2;
if (!getBitFlag(79))
id = (_mouse.y >= 136) ? 102 : 101;
} else {
id = (_mouse.y >= 136) ? 102 : 101;
}
_defaultVerb = id;
_defaultVerb = id;
ha = findBox(id);
if (ha == NULL)
return;
ha = findBox(id);
if (ha == NULL)
return;
if (ha->flags & kBFBoxDead) {
_defaultVerb = 999;
_currentVerbBox = NULL;
} else {
_verbHitArea = ha->verb;
setVerb(ha);
}
if (ha->flags & kBFBoxDead) {
_defaultVerb = 999;
_currentVerbBox = NULL;
} else {
_verbHitArea = ha->verb;
setVerb(ha);
}
}
void AGOSEngine::setVerb(HitArea *ha) {
if (getGameType() == GType_PP) {
void AGOSEngine_Feeble::setVerb(HitArea *ha) {
if (getGameType() == GType_PP)
return;
} else if (getGameType() == GType_FF) {
int cursor = _mouseCursor;
if (_noRightClick)
return;
if (cursor > 13)
cursor = 0;
cursor++;
if (cursor == 5)
int cursor = _mouseCursor;
if (_noRightClick)
return;
if (cursor > 13)
cursor = 0;
cursor++;
if (cursor == 5)
cursor = 1;
if (cursor == 4) {
if (getBitFlag(72)) {
cursor = 1;
if (cursor == 4) {
if (getBitFlag(72)) {
cursor = 1;
}
} else if (cursor == 2) {
if (getBitFlag(99)) {
cursor = 3;
}
}
_mouseCursor = cursor;
_mouseAnimMax = (cursor == 4) ? 14: 16;
_mouseAnim = 1;
_needHitAreaRecalc++;
_verbHitArea = cursor + 300;
} else {
HitArea *tmp = _currentVerbBox;
if (ha == tmp)
return;
if (getGameType() == GType_SIMON1) {
if (tmp != NULL) {
tmp->flags |= kBFInvertTouch;
invertBox(tmp, 213, 208, 213, 10);
}
if (ha->flags & kBFBoxSelected)
invertBox(ha, 218, 213, 213, 5);
else
invertBox(ha, 223, 218, 218, 10);
ha->flags &= ~(kBFBoxSelected + kBFInvertTouch);
} else {
if (ha->id < 101)
return;
_mouseCursor = ha->id - 101;
_needHitAreaRecalc++;
} else if (cursor == 2) {
if (getBitFlag(99)) {
cursor = 3;
}
_currentVerbBox = ha;
}
_mouseCursor = cursor;
_mouseAnimMax = (cursor == 4) ? 14: 16;
_mouseAnim = 1;
_needHitAreaRecalc++;
_verbHitArea = cursor + 300;
}
void AGOSEngine::setVerb(HitArea *ha) {
HitArea *tmp = _currentVerbBox;
if (ha == tmp)
return;
if (getGameType() == GType_SIMON1) {
if (tmp != NULL) {
tmp->flags |= kBFInvertTouch;
invertBox(tmp, 213, 208, 213, 10);
}
if (ha->flags & kBFBoxSelected)
invertBox(ha, 218, 213, 213, 5);
else
invertBox(ha, 223, 218, 218, 10);
ha->flags &= ~(kBFBoxSelected + kBFInvertTouch);
} else {
if (ha->id < 101)
return;
_mouseCursor = ha->id - 101;
_needHitAreaRecalc++;
}
_currentVerbBox = ha;
}
void AGOSEngine::hitarea_leave(HitArea *ha, bool state) {
@ -658,55 +661,55 @@ void AGOSEngine::checkDown(WindowBlock *window) {
}
}
void AGOSEngine::inventoryUp(WindowBlock *window) {
if (getGameType() == GType_FF) {
_marks = 0;
void AGOSEngine_Feeble::inventoryUp(WindowBlock *window) {
_marks = 0;
checkUp(window);
animate(4, 9, 21, 0 ,0, 0);
while (1) {
if (_currentBox->id != 0x7FFB || !getBitFlag(89))
break;
checkUp(window);
animate(4, 9, 21, 0 ,0, 0);
while (1) {
if (_currentBox->id != 0x7FFB || !getBitFlag(89))
break;
checkUp(window);
delay(1);
}
waitForMark(2);
checkUp(window);
sendSync(922);
waitForMark(1);
checkUp(window);
} else {
if (window->iconPtr->line == 0)
return;
mouseOff();
uint index = getWindowNum(window);
drawIconArray(index, window->iconPtr->itemRef, window->iconPtr->line - 1, window->iconPtr->classMask);
mouseOn();
delay(1);
}
waitForMark(2);
checkUp(window);
sendSync(922);
waitForMark(1);
checkUp(window);
}
void AGOSEngine::inventoryUp(WindowBlock *window) {
if (window->iconPtr->line == 0)
return;
mouseOff();
uint index = getWindowNum(window);
drawIconArray(index, window->iconPtr->itemRef, window->iconPtr->line - 1, window->iconPtr->classMask);
mouseOn();
}
void AGOSEngine_Feeble::inventoryDown(WindowBlock *window) {
_marks = 0;
checkDown(window);
animate(4, 9, 23, 0, 0, 0);
while (1) {
if (_currentBox->id != 0x7FFC || !getBitFlag(89))
break;
checkDown(window);
delay(1);
}
waitForMark(2);
checkDown(window);
sendSync(924);
waitForMark(1);
checkDown(window);
}
void AGOSEngine::inventoryDown(WindowBlock *window) {
if (getGameType() == GType_FF) {
_marks = 0;
checkDown(window);
animate(4, 9, 23, 0, 0, 0);
while (1) {
if (_currentBox->id != 0x7FFC || !getBitFlag(89))
break;
checkDown(window);
delay(1);
}
waitForMark(2);
checkDown(window);
sendSync(924);
waitForMark(1);
checkDown(window);
} else {
mouseOff();
uint index = getWindowNum(window);
drawIconArray(index, window->iconPtr->itemRef, window->iconPtr->line + 1, window->iconPtr->classMask);
mouseOn();
}
mouseOff();
uint index = getWindowNum(window);
drawIconArray(index, window->iconPtr->itemRef, window->iconPtr->line + 1, window->iconPtr->classMask);
mouseOn();
}
void AGOSEngine::boxController(uint x, uint y, uint mode) {