From f380d3ded235297a4162ff0735dcb037da813faa Mon Sep 17 00:00:00 2001 From: Strangerke Date: Tue, 14 Feb 2012 19:03:50 +0100 Subject: TSAGE: R2R - Scene 1337: Implement one more large AI function (subCDB90) --- engines/tsage/ringworld2/ringworld2_scenes1.cpp | 314 +++++++++++++++++++++++- engines/tsage/ringworld2/ringworld2_scenes1.h | 4 +- 2 files changed, 313 insertions(+), 5 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.cpp b/engines/tsage/ringworld2/ringworld2_scenes1.cpp index 0745855182..769fd58c78 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes1.cpp @@ -4667,6 +4667,10 @@ void Scene1337::subC51A0(unkObj1337sub1 *subObj1, unkObj1337sub1 *subObj2) { _item1.setAction(&_action13); } +void Scene1337::subC6235(int arg1) { + warning("STUBBED: subC6235()"); +} + void Scene1337::subPostInit() { R2_GLOBALS._v57709 = 0; R2_GLOBALS._v5780C = 0; @@ -4895,9 +4899,311 @@ void Scene1337::subCCF26() { shuffleCards(); _item1.setAction(&_action3); } +void Scene1337::subCD193() { + warning("STUBBED: subCD193()"); +} -void Scene1337::subCDB90(int arg1, Common::Point *pt) { - warning("STUBBED: subCDB90()"); +void Scene1337::subCDB90(int arg1, Common::Point pt) { + bool found = false; + int curReg = R2_GLOBALS._sceneRegions.indexOf(g_globals->_events._mousePos); + + if (arg1 == 3) { + int i; + for (i = 0; i <= 7; i++) { + if ( (subC2BF8(&_arrunkObj1337[2]._arr2[i], pt)) + || (subC2BF8(&_arrunkObj1337[0]._arr2[i], pt)) + || (subC2BF8(&_arrunkObj1337[1]._arr2[i], pt)) + || (subC2BF8(&_arrunkObj1337[3]._arr2[i], pt)) ) { + found = true; + break; + } + } + + if (found) { + switch (curReg) { + case 5: + if (_arrunkObj1337[2]._arr2[i]._field34 != 0) + subC6235(_arrunkObj1337[2]._arr2[i]._field34); + else + actionDisplay(1330, 20, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 10: + if (_arrunkObj1337[3]._arr2[i]._field34 != 0) + subC6235(_arrunkObj1337[3]._arr2[i]._field34); + else + actionDisplay(1330, 22, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 15: + if (_arrunkObj1337[0]._arr2[i]._field34 != 0) + subC6235(_arrunkObj1337[0]._arr2[i]._field34); + else + actionDisplay(1330, 21, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 20: + if (_arrunkObj1337[1]._arr2[i]._field34 != 0) + subC6235(_arrunkObj1337[1]._arr2[i]._field34); + else + actionDisplay(1330, 23, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + default: + break; + } + } else { + if ( (subC2BF8(&_arrunkObj1337[2]._arr3[0], pt)) + || (subC2BF8(&_arrunkObj1337[0]._arr3[0], pt)) + || (subC2BF8(&_arrunkObj1337[1]._arr3[0], pt)) + || (subC2BF8(&_arrunkObj1337[3]._arr3[0], pt)) ) { + found = true; + } + + if (found) { + switch (curReg) { + case 5: + if (_arrunkObj1337[2]._arr3[0]._field34 != 0) + subC6235(_arrunkObj1337[2]._arr3[0]._field34); + else + actionDisplay(1330, 10, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 10: + if (_arrunkObj1337[3]._arr3[0]._field34 != 0) + subC6235(_arrunkObj1337[3]._arr3[0]._field34); + else + actionDisplay(1330, 16, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 15: + if (_arrunkObj1337[0]._arr3[0]._field34 != 0) + subC6235(_arrunkObj1337[3]._arr3[0]._field34); + else + actionDisplay(1330, 13, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 20: + if (_arrunkObj1337[1]._arr3[0]._field34 != 0) + subC6235(_arrunkObj1337[1]._arr3[0]._field34); + else + actionDisplay(1330, 18, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + default: + break; + } + } else { + if (subC2BF8(&_item7, pt)) { + if (_item7._field34 != 0) + subC6235(_item7._field34); + else + actionDisplay(1330, 7, 159, 10, 1, 200, 0, 7, 0, 154, 154); + } else if (_background1._bounds.contains(pt)) { + actionDisplay(1330, 43, 159, 10, 1, 200, 0, 7, 0, 154, 154); + } else if (subC2BF8(&_item8, pt)) { + actionDisplay(1330, 4, 159, 10, 1, 200, 0, 7, 0, 154, 154); + } else if ( (subC2BF8(&_arrunkObj1337[2]._arr4[0], pt)) + || (subC2BF8(&_arrunkObj1337[3]._arr4[0], pt)) + || (subC2BF8(&_arrunkObj1337[0]._arr4[0], pt)) + || (subC2BF8(&_arrunkObj1337[1]._arr4[0], pt)) ) { + actionDisplay(1330, 32, 159, 10, 1, 200, 0, 7, 0, 154, 154); + } else { + if (subC2BF8(&_arrunkObj1337[2]._arr1[0], pt)) + subC6235(_arrunkObj1337[2]._arr1[0]._field34); + else if (subC2BF8(&_arrunkObj1337[2]._arr1[1], pt)) + subC6235(_arrunkObj1337[2]._arr1[1]._field34); + else if (subC2BF8(&_arrunkObj1337[2]._arr1[2], pt)) + subC6235(_arrunkObj1337[2]._arr1[2]._field34); + else if (subC2BF8(&_arrunkObj1337[2]._arr1[3], pt)) + subC6235(_arrunkObj1337[2]._arr1[3]._field34); + else if ((curReg >= 6) || (curReg <= 9)) + actionDisplay(1330, 29, 159, 10, 1, 200, 0, 7, 0, 154, 154); + else if ((curReg >= 11) || (curReg <= 14)) + actionDisplay(1330, 31, 159, 10, 1, 200, 0, 7, 0, 154, 154); + else if ((curReg >= 16) || (curReg <= 19)) + actionDisplay(1330, 30, 159, 10, 1, 200, 0, 7, 0, 154, 154); + else { + switch (curReg) { + case 0: + actionDisplay(1330, 2, 159, 134, 1, 200, 0, 7, 0, 105, 105); + break; + case 5: + actionDisplay(1330, 25, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 10: + actionDisplay(1330, 27, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 15: + actionDisplay(1330, 26, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 20: + actionDisplay(1330, 28, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 21: + actionDisplay(1330, 24, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + default: + break; + } + } + } + } + } + } + + if (arg1 != 1) + return; + + for (int i = 0; i <= 7; i++) { + if (subC2BF8(&_arrunkObj1337[2]._arr2[i], pt)) { + switch (_arrunkObj1337[2]._arr2[i]._field34) { + case 0: + actionDisplay(1330, 11, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 1: + actionDisplay(1330, 54, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + default: + actionDisplay(1330, 34, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + } + found = true; + break; + } else if (subC2BF8(&_arrunkObj1337[0]._arr2[i], pt)) { + switch (_arrunkObj1337[0]._arr2[i]._field34) { + case 0: + actionDisplay(1330, 11, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + default: + actionDisplay(1330, 1, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + } + found = true; + break; + } else if (subC2BF8(&_arrunkObj1337[1]._arr2[i], pt)) { + switch (_arrunkObj1337[1]._arr2[i]._field34) { + case 0: + actionDisplay(1330, 146, 300, 99, 1, 136, 0, 7, 0, 117, 117); + break; + default: + actionDisplay(1330, 144, 300, 99, 1, 136, 0, 7, 0, 117, 117); + break; + } + found = true; + break; + } else if (subC2BF8(&_arrunkObj1337[3]._arr2[i], pt)) { + switch (_arrunkObj1337[3]._arr2[i]._field34) { + case 0: + actionDisplay(1330, 147, 20, 99, 1, 136, 0, 7, 0, 172, 172); + break; + default: + actionDisplay(1330, 145, 20, 99, 1, 136, 0, 7, 0, 172, 172); + break; + } + found = true; + break; + } + } + + if (subC2BF8(&_arrunkObj1337[2]._arr3[0], pt)) { + if (_arrunkObj1337[0]._arr3[0]._field34 != 0) { + actionDisplay(1330, 39, 159, 10, 1, 200, 0, 7, 0, 154, 154); + } else { + actionDisplay(1330, 11, 159, 10, 1, 200, 0, 7, 0, 154, 154); + } + found = true; + } + + if (subC2BF8(&_arrunkObj1337[3]._arr3[0], pt)) { + if (_arrunkObj1337[3]._arr3[0]._field34 != 0) { + actionDisplay(1330, 145, 20, 99, 1, 136, 0, 7, 0, 172, 172); + } else { + actionDisplay(1330, 147, 20, 99, 1, 136, 0, 7, 0, 172, 172); + } + found = true; + } + + if (subC2BF8(&_arrunkObj1337[1]._arr3[0], pt)) { + if (_arrunkObj1337[1]._arr3[0]._field34 != 0) { + actionDisplay(1330, 144, 300, 99, 1, 136, 0, 7, 0, 117, 117); + } else { + actionDisplay(1330, 146, 300, 99, 1, 136, 0, 7, 0, 117, 117); + } + found = true; + } + + if (subC2BF8(&_arrunkObj1337[0]._arr3[0], pt)) { + if (_arrunkObj1337[0]._arr3[0]._field34 != 0) { + actionDisplay(1330, 1, 159, 10, 1, 200, 0, 7, 0, 154, 154); + } else { + actionDisplay(1330, 11, 159, 10, 1, 200, 0, 7, 0, 154, 154); + } + found = true; + } + + if (subC2BF8(&_arrunkObj1337[3]._arr4[0], pt)) { + actionDisplay(1330, 147, 20, 99, 1, 136, 0, 7, 0, 172, 172); + found = true; + } + + if (subC2BF8(&_arrunkObj1337[1]._arr4[0], pt)) { + actionDisplay(1330, 146, 300, 99, 1, 136, 0, 7, 0, 117, 117); + found = true; + } + + if (subC2BF8(&_arrunkObj1337[0]._arr4[0], pt)) { + actionDisplay(1330, 11, 159, 10, 1, 200, 0, 7, 0, 154, 154); + found = true; + } + + if (found) + return; + + if (_background1._bounds.contains(pt)) { + subCD193(); + return; + } + + if (subC2BF8(&_item7, pt)) + actionDisplay(1330, 9, 159, 10, 1, 200, 0, 7, 0, 154, 154); + else if (subC2BF8(&_item8, pt)) + actionDisplay(1330, 5, 159, 10, 1, 200, 0, 7, 0, 154, 154); + else { + switch (curReg) { + case 0: + actionDisplay(1330, 3, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 6: + // no break on purpose + case 7: + // no break on purpose + case 8: + // no break on purpose + case 9: + actionDisplay(1330, 145, 20, 99, 1, 136, 0, 7, 0, 172, 172); + break; + case 10: + actionDisplay(1330, 147, 20, 99, 1, 136, 0, 7, 0, 172, 172); + break; + case 11: + // no break on purpose + case 12: + // no break on purpose + case 13: + // no break on purpose + case 14: + actionDisplay(1330, 1, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 16: + // no break on purpose + case 17: + // no break on purpose + case 18: + // no break on purpose + case 19: + actionDisplay(1330, 144, 300, 99, 1, 136, 0, 7, 0, 117, 117); + break; + case 20: + actionDisplay(1330, 146, 300, 99, 1, 136, 0, 7, 0, 117, 117); + break; + default: + actionDisplay(1330, 11, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + } + } } void Scene1337::subCF31D() { @@ -5197,12 +5503,12 @@ void Scene1337::subD02CA() { } if (di == 4) { - subCDB90(1, &_item6._field36); + subCDB90(1, _item6._field36); subD0281(); return; } } else if (R2_GLOBALS._v57810 == 300) { - subCDB90(3, &_item6._field36); + subCDB90(3, _item6._field36); subD0281(); return; } else { diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.h b/engines/tsage/ringworld2/ringworld2_scenes1.h index 0f22ca646a..913550c223 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.h +++ b/engines/tsage/ringworld2/ringworld2_scenes1.h @@ -343,12 +343,14 @@ public: void subC4CD2(); void subC4CEC(); void subC51A0(unkObj1337sub1 *subObj1, unkObj1337sub1 *subObj2); + void subC6235(int arg1); void subPostInit(); void subCB59B(); void suggestInstructions(); void shuffleCards(); void subCCF26(); - void subCDB90(int arg1, Common::Point *pt); + void subCD193(); + void subCDB90(int arg1, Common::Point pt); void subCF31D(); void subCF979(); void subD026D(); -- cgit v1.2.3