CHEWY: Move ged_user_func room code into their Room classes

This commit is contained in:
Paul Gilbert 2022-01-27 22:28:52 -08:00
parent 3e6c3b31f7
commit 8d9060b9c9
7 changed files with 137 additions and 121 deletions

View File

@ -173,132 +173,16 @@ void check_ged_action(int16 index) {
}
int16 ged_user_func(int16 idx_nr) {
#define GED_FUNC(NUM) case NUM: idx_nr = Room##NUM::gedUserFunc(idx_nr)
switch (idx_nr) {
case 40:
switch (_G(spieler).PersonRoomNr[P_CHEWY]) {
case 8:
if (_G(spieler).R8GTuer)
idx_nr = 0;
break;
case 9:
if (!_G(spieler).R9Gitter)
idx_nr = 0;
break;
case 16:
if (!_G(spieler).R16F5Exit)
idx_nr = 0;
break;
case 17:
if (_G(spieler).R17Location != 1)
idx_nr = 0;
break;
case 21:
if (!_G(spieler).R21Laser2Weg)
idx_nr = 0;
break;
case 31:
if (!_G(spieler).R31KlappeZu)
idx_nr = 0;
break;
case 41:
if (!_G(spieler).R41LolaOk)
idx_nr = 0;
break;
case 52:
if (!_G(spieler).R52LichtAn)
idx_nr = 2;
else
idx_nr = 4;
break;
case 71:
if (!_G(spieler).flags28_2 || !_G(spieler).flags29_4)
idx_nr = 0;
else
idx_nr = 4;
break;
case 76:
return idx_nr;
case 84:
if (!_G(spieler).flags31_1)
_G(spieler).flags31_4 = true;
break;
case 86:
if (!_G(spieler).flags32_2)
idx_nr = 0;
break;
case 94:
if (!_G(spieler).flags35_10)
idx_nr = 0;
break;
case 97:
if (!_G(spieler).flags35_80)
idx_nr = 0;
break;
default:
break;
}
break;
case 41:
switch (_G(spieler).PersonRoomNr[P_CHEWY]) {
case 17:
if (_G(spieler).R17Location != 2)
idx_nr = 0;
break;
case 21:
if (!_G(spieler).R21Laser1Weg) {
idx_nr = 0;
} else
idx_nr = 3;
break;
case 37:
if (!_G(spieler).R37Kloppe)
idx_nr = 0;
break;
case 52:
if (!_G(spieler).R52TuerAuf)
idx_nr = 2;
else
idx_nr = 4;
break;
case 97:
if (!_G(spieler).flags36_20)
idx_nr = 0;
break;
default:
break;
}
break;
case 42:
if (_G(spieler).PersonRoomNr[P_CHEWY] == 97) {
if (!_G(spieler).flags37_1)
idx_nr = 0;
}
break;
GED_FUNC(40);
GED_FUNC(41);
GED_FUNC(42);
default:
break;
}
#undef GED_FUNC
return idx_nr;
}

View File

@ -155,6 +155,87 @@ bool Room40::timer(int16 t_nr, int16 ani_nr) {
return false;
}
int16 Room40::gedUserFunc(int16 idx_nr) {
switch (_G(spieler).PersonRoomNr[P_CHEWY]) {
case 8:
if (_G(spieler).R8GTuer)
idx_nr = 0;
break;
case 9:
if (!_G(spieler).R9Gitter)
idx_nr = 0;
break;
case 16:
if (!_G(spieler).R16F5Exit)
idx_nr = 0;
break;
case 17:
if (_G(spieler).R17Location != 1)
idx_nr = 0;
break;
case 21:
if (!_G(spieler).R21Laser2Weg)
idx_nr = 0;
break;
case 31:
if (!_G(spieler).R31KlappeZu)
idx_nr = 0;
break;
case 41:
if (!_G(spieler).R41LolaOk)
idx_nr = 0;
break;
case 52:
if (!_G(spieler).R52LichtAn)
idx_nr = 2;
else
idx_nr = 4;
break;
case 71:
if (!_G(spieler).flags28_2 || !_G(spieler).flags29_4)
idx_nr = 0;
else
idx_nr = 4;
break;
case 76:
return idx_nr;
case 84:
if (!_G(spieler).flags31_1)
_G(spieler).flags31_4 = true;
break;
case 86:
if (!_G(spieler).flags32_2)
idx_nr = 0;
break;
case 94:
if (!_G(spieler).flags35_10)
idx_nr = 0;
break;
case 97:
if (!_G(spieler).flags35_80)
idx_nr = 0;
break;
default:
break;
}
return idx_nr;
}
void Room40::move_train(int16 mode) {
_G(spieler).R40TrainMove = false;
hide_cur();

View File

@ -36,6 +36,7 @@ public:
static void entry(int16 eib_nr);
static void xit(int16 eib_nr);
static bool timer(int16 t_nr, int16 ani_nr);
static int16 gedUserFunc(int16 idx_nr);
static int16 use_mr_pumpkin();
static void talk_police();

View File

@ -79,6 +79,44 @@ void Room41::xit() {
_G(spieler).R41TrainCount--;
}
int16 Room41::gedUserFunc(int16 idx_nr) {
switch (_G(spieler).PersonRoomNr[P_CHEWY]) {
case 17:
if (_G(spieler).R17Location != 2)
idx_nr = 0;
break;
case 21:
if (!_G(spieler).R21Laser1Weg) {
idx_nr = 0;
} else
idx_nr = 3;
break;
case 37:
if (!_G(spieler).R37Kloppe)
idx_nr = 0;
break;
case 52:
if (!_G(spieler).R52TuerAuf)
idx_nr = 2;
else
idx_nr = 4;
break;
case 97:
if (!_G(spieler).flags36_20)
idx_nr = 0;
break;
default:
break;
}
return idx_nr;
}
void Room41::setup_func() {
if (_G(spieler).PersonRoomNr[P_HOWARD] == 41) {
calc_person_look();

View File

@ -35,6 +35,8 @@ private:
public:
static void entry();
static void xit();
static int16 gedUserFunc(int16 idx_nr);
static int16 use_brief();
static int16 use_lola();
static int16 use_kasse();

View File

@ -67,6 +67,15 @@ void Room42::gedAction(int index) {
calc_xit();
}
int16 Room42::gedUserFunc(int16 idx_nr) {
if (_G(spieler).PersonRoomNr[P_CHEWY] == 97) {
if (!_G(spieler).flags37_1)
idx_nr = 0;
}
return idx_nr;
}
void Room42::setup_func() {
if (!_G(spieler).R42HoToBeamter)
calc_person_look();

View File

@ -33,6 +33,7 @@ private:
public:
static void entry();
static void gedAction(int index);
static int16 gedUserFunc(int16 idx_nr);
static void talk_beamter();
static int16 use_psack();