CHEWY: Added Room3 and Room4 classes

This commit is contained in:
Paul Gilbert 2022-01-03 19:40:51 -08:00
parent 1dc023c837
commit 05e4f0f527
9 changed files with 595 additions and 454 deletions

View File

@ -97,108 +97,6 @@ void load_chewy_taf(int16 taf_nr) {
}
}
#define HAND_NORMAL 68
#define HAND_CLICK 69
#define RAHMEN_ROT 70
#define RAHMEN_GELB 71
int16 r4_sonde_comp() {
int16 ende;
int16 spr_nr;
int16 cur_x;
int16 cur_pos[3][2] = { { 83, 106 },
{ 136, 103 },
{ 188, 101 }
};
int16 console[3][4] = { { 82, 158, 143, 199 },
{ 150, 159, 194, 193 },
{ 201, 154, 262, 193 }
};
cur_2_inventory();
_G(spieler).PersonHide[P_CHEWY] = true;
_G(cur_display) = false;
switch_room(4);
_G(cur_display) = true;
ende = 0;
curblk.sprite = room_blk.DetImage;
cur_x = 1;
spr_nr = RAHMEN_ROT;
cur->move(160, 160);
start_aad(46);
while (!ende) {
maus_action();
if (_G(maus_links_click)) {
switch (in->maus_vector(minfo.x + 17, minfo.y + 7, (int16 *)console, 3)) {
case 0:
if (cur_x > 0)
--cur_x;
else
cur_x = 2;
det->play_sound(0, 1);
break;
case 1:
ende = 1;
spr_nr = RAHMEN_GELB;
det->play_sound(0, 0);
break;
case 2:
if (cur_x < 2)
++cur_x;
else
cur_x = 0;
det->play_sound(0, 2);
break;
}
}
spr_info[0].Image = room_blk.DetImage[spr_nr];
spr_info[0].ZEbene = 0;
spr_info[0].X = cur_pos[cur_x][0];
spr_info[0].Y = cur_pos[cur_x][1];
if (minfo.button == 1 || kbinfo.key_code == ENTER) {
curani.ani_anf = HAND_CLICK;
curani.ani_end = HAND_CLICK;
} else {
curani.ani_anf = HAND_NORMAL;
curani.ani_end = HAND_NORMAL;
}
cursor_wahl(CUR_USER);
_G(spieler).CurHoehe = 16;
in->rectangle(0, 123, 320 - _G(spieler).CurBreite, 194);
if (minfo.y < 124) {
minfo.y = 123;
}
set_up_screen(DO_SETUP);
SHOULD_QUIT_RETURN0;
}
g_events->delay(500);
clear_prog_ani();
_G(spieler).PersonHide[P_CHEWY] = false;
menu_item = CUR_WALK;
cursor_wahl(menu_item);
set_person_pos(118 - CH_HOT_MOV_X,
164 - CH_HOT_MOV_Y, P_CHEWY, P_LEFT);
spieler_vector[P_CHEWY].DelayCount = 0;
_G(maus_links_click) = false;
minfo.button = 0;
_G(spieler).PersonRoomNr[P_CHEWY] = 3;
room->load_room(&room_blk, _G(spieler).PersonRoomNr[P_CHEWY], &_G(spieler));
ERROR
fx_blend = BLEND1;
atds->stop_aad();
return cur_x;
}
void switch_room(int16 nr) {
fx_blend = BLEND1;
exit_room(-1);
@ -210,347 +108,6 @@ void switch_room(int16 nr) {
set_up_screen(DO_SETUP);
}
void r3_terminal() {
show_cur();
_G(auto_obj) = 0;
switch (r4_sonde_comp()) {
case 0:
r3_sonde_aufnahme();
spr_info[0].Image = room_blk.DetImage[120];
spr_info[0].X = 250;
spr_info[0].Y = 2;
spr_info[0].ZEbene = 0;
if (!_G(spieler).R2KabelBork) {
det->stop_detail(5);
start_ani_block(2, ablock3);
if (_G(spieler).R2FussSchleim) {
_G(spieler).R2FussSchleim = 0;
_G(spieler).room_s_obj[SIB_SCHLEIM].ZustandFlipFlop = 1;
}
_G(spieler).PersonHide[P_CHEWY] = true;
start_detail_wait(8, 1, ANI_VOR);
set_up_screen(DO_SETUP);
det->stop_detail(6);
clear_prog_ani();
switch_room(1);
start_ani_block(2, ablock0);
set_person_pos(92, 131, P_CHEWY, P_LEFT);
_G(spieler).PersonHide[P_CHEWY] = false;
} else if (!_G(spieler).R2FussSchleim) {
start_ani_block(2, ablock2);
Room2::jump_out_r1(9);
start_aad_wait(45, -1);
} else {
_G(spieler).PersonHide[P_CHEWY] = true;
start_ani_block(2, ablock1);
_G(spieler).PersonRoomNr[P_CHEWY] = 5;
clear_prog_ani();
_G(auto_obj) = 0;
room->load_room(&room_blk, _G(spieler).PersonRoomNr[P_CHEWY], &_G(spieler));
ERROR
fx_blend = BLEND1;
start_ani_block(3, ablock5);
set_person_pos(91, 107, P_CHEWY, P_LEFT);
_G(spieler).PersonHide[P_CHEWY] = false;
}
clear_prog_ani();
break;
case 1:
_G(auto_obj) = 1;
_G(maus_links_click) = 0;
minfo.button = 0;
stop_person(P_CHEWY);
start_aad_wait(51, -1);
set_up_screen(DO_SETUP);
break;
case 2:
r3_sonde_knarre();
break;
}
}
MovLine sonde_mpkt[3] = {
{ { 13, 45, 75 }, 1, 2 },
{ { 237, 52, 160 }, 1, 2 },
{ { 4, 83, 180 }, 0, 2 }
};
int16 sonde_phasen[4][2] = {
{ 120, 120 },
{ 118, 118 },
{ 141, 141 },
{ 119, 119 }
};
void r3_init_sonde() {
#define SONDE_OBJ 0
#define SONDE_OBJ1 1
_G(auto_obj) = 1;
mov_phasen[SONDE_OBJ].AtsText = 24;
mov_phasen[SONDE_OBJ].Lines = 3;
mov_phasen[SONDE_OBJ].Repeat = 255;
mov_phasen[SONDE_OBJ].ZoomFak = 20;
auto_mov_obj[SONDE_OBJ].Id = AUTO_OBJ0;
auto_mov_vector[SONDE_OBJ].Delay = _G(spieler).DelaySpeed;
auto_mov_obj[SONDE_OBJ].Mode = 1;
init_auto_obj(SONDE_OBJ, &sonde_phasen[0][0], mov_phasen[SONDE_OBJ].Lines, (MovLine *)sonde_mpkt);
}
#define KOPF_SCHUSS 0
#define SONDE_ANI 2
#define SONDE_SHOOT 3
#define SONDE_RET 4
#define SONDE_RAUCH 5
#define SONDE_REIN 6
#define SONDE_GREIF 7
#define SONDE_GREIF1 8
#define SONDE_SPR_R 118
#define SONDE_SPR_L 120
void r3_sonde_knarre() {
MovLine sonde_mpkt1[3] = {
{ { 237, 52, 160 }, 0, 2 },
{ { 13, 45, 75 }, 0, 4 },
{ { 4, 100, 180 }, 1, 2 }
};
MovLine sonde_mpkt2[2] = {
{ { 4, 100, 180 }, 1, 3 },
{ { 13, 45, 75 }, 1, 3 }
};
room_detail_info *rdi;
int16 tmp;
int16 ende;
hide_cur();
rdi = det->get_room_detail_info();
det->load_taf_seq(162, 17, 0);
tmp = _G(zoom_horizont);
_G(zoom_horizont) = 100;
_G(auto_obj) = 1;
mov_phasen[SONDE_OBJ].Lines = 3;
mov_phasen[SONDE_OBJ].Repeat = 1;
mov_phasen[SONDE_OBJ].ZoomFak = 20;
auto_mov_obj[SONDE_OBJ].Id = AUTO_OBJ0;
auto_mov_vector[SONDE_OBJ].Delay = _G(spieler).DelaySpeed;
auto_mov_obj[SONDE_OBJ].Mode = 1;
init_auto_obj(SONDE_OBJ, &sonde_phasen[0][0], mov_phasen[SONDE_OBJ].Lines, (MovLine
*)sonde_mpkt1);
flags.AniUserAction = false;
while (mov_phasen[SONDE_OBJ].Repeat != -1)
set_ani_screen();
det->start_detail(SONDE_SHOOT, 1, ANI_VOR);
ende = 0;
while (!ende) {
clear_prog_ani();
if (rdi->Ainfo[SONDE_SHOOT].ani_count == 170) {
_G(spieler).PersonHide[P_CHEWY] = true;
det->start_detail(KOPF_SCHUSS, 1, ANI_VOR);
}
spr_info[0] = det->plot_detail_sprite(0, 0, SONDE_ANI, SONDE_SPR_R, ANI_HIDE);
spr_info[0].ZEbene = 0;
if (rdi->Ainfo[KOPF_SCHUSS].ani_count >= 13 &&
rdi->Ainfo[KOPF_SCHUSS].ani_count <= 21) {
spr_info[1] = det->plot_detail_sprite(0, 0, KOPF_SCHUSS, 21, ANI_HIDE);
spr_info[1].ZEbene = 190;
}
else if (rdi->Ainfo[KOPF_SCHUSS].ani_count > 21 &&
det->get_ani_status(SONDE_RET) == 0) {
spr_info[2] = det->plot_detail_sprite(0, 0, SONDE_RET, 173, ANI_HIDE);
spr_info[2].ZEbene = 190;
}
if (rdi->Ainfo[SONDE_SHOOT].ani_count == 178) {
det->start_detail(SONDE_RET, 3, ANI_RUECK);
}
if (rdi->Ainfo[KOPF_SCHUSS].ani_count == 28) {
ende = 1;
}
set_ani_screen();
SHOULD_QUIT_RETURN;
}
clear_prog_ani();
det->start_detail(SONDE_RAUCH, 3, ANI_VOR);
ende = 0;
while (det->get_ani_status(SONDE_RAUCH)) {
spr_info[0] = det->plot_detail_sprite(0, 0, SONDE_ANI, SONDE_SPR_R, ANI_HIDE);
spr_info[0].ZEbene = 0;
spr_info[1] = det->plot_detail_sprite(0, 0, SONDE_RET, 173, ANI_HIDE);
spr_info[1].ZEbene = 190;
++ende;
if (ende == 3)
_G(spieler).PersonHide[P_CHEWY] = false;
set_ani_screen();
}
start_aad_wait(53, -1);
clear_prog_ani();
det->start_detail(SONDE_REIN, 1, ANI_RUECK);
while (det->get_ani_status(SONDE_REIN)) {
spr_info[0] = det->plot_detail_sprite(0, 0, SONDE_ANI, SONDE_SPR_R, ANI_HIDE);
spr_info[0].ZEbene = 0;
set_ani_screen();
}
clear_prog_ani();
mov_phasen[SONDE_OBJ].Lines = 2;
mov_phasen[SONDE_OBJ].Repeat = 1;
mov_phasen[SONDE_OBJ].ZoomFak = 28;
init_auto_obj(SONDE_OBJ, &sonde_phasen[0][0], mov_phasen[SONDE_OBJ].Lines, (MovLine
*)sonde_mpkt2);
while (mov_phasen[SONDE_OBJ].Repeat != -1)
set_ani_screen();
det->del_taf_tbl(162, 17, 0);
_G(zoom_horizont) = tmp;
r3_init_sonde();
show_cur();
}
void r3_sonde_aufnahme() {
int16 tmp;
int16 i;
int16 spr_nr;
int16 anistart;
// room_detail_info *rdi;
MovLine sonde_mpkt1[2] = {
{ { 237, 52, 160 }, 0, 2 },
{ { 144, 100, 180 }, 0, 2 }
};
MovLine sonde_mpkt_[4][2] = {
{ { { 144, 100, 180 }, 0, 2 },
{ { 110, 100, 180 }, 0, 2 } },
{ { { 110, 101, 180 }, 0, 3 },
{ { -55, 50, 180 }, 0, 3 } },
{ { { 310, 20, 180 }, 0, 3 },
{ { -55, 20, 180 }, 0, 3 } },
{ { { 310, 2, 180 }, 0, 3 },
{ { 250, 2, 180 }, 0, 3 } }
};
flags.AniUserAction = false;
hide_cur();
/*rdi = */(void)det->get_room_detail_info();
tmp = _G(zoom_horizont);
_G(zoom_horizont) = 100;
anistart = false;
_G(auto_obj) = 1;
mov_phasen[SONDE_OBJ].Lines = 2;
mov_phasen[SONDE_OBJ].Repeat = 1;
mov_phasen[SONDE_OBJ].ZoomFak = 20;
auto_mov_obj[SONDE_OBJ].Id = AUTO_OBJ0;
auto_mov_vector[SONDE_OBJ].Delay = _G(spieler).DelaySpeed;
auto_mov_obj[SONDE_OBJ].Mode = 1;
init_auto_obj(SONDE_OBJ, &sonde_phasen[0][0], mov_phasen[SONDE_OBJ].Lines, (MovLine *)sonde_mpkt1);
while (mov_phasen[SONDE_OBJ].Repeat != -1)
set_ani_screen();
det->start_detail(SONDE_GREIF, 1, ANI_VOR);
while (det->get_ani_status(SONDE_GREIF)) {
clear_prog_ani();
spr_info[0] = det->plot_detail_sprite(0, 0, SONDE_GREIF, SONDE_SPR_L, ANI_HIDE);
spr_info[0].ZEbene = 146;
set_ani_screen();
}
clear_prog_ani();
_G(auto_obj) = 2;
spr_nr = 140;
for (i = 0; i < 4; i++) {
mov_phasen [SONDE_OBJ].Lines = 2;
mov_phasen [SONDE_OBJ].Repeat = 1;
mov_phasen [SONDE_OBJ].ZoomFak = 0;
auto_mov_obj [SONDE_OBJ].Id = AUTO_OBJ0;
auto_mov_obj [SONDE_OBJ].Mode = 1;
auto_mov_vector[SONDE_OBJ].Delay = _G(spieler).DelaySpeed;
init_auto_obj(SONDE_OBJ, &sonde_phasen[0][0], mov_phasen[SONDE_OBJ].Lines, sonde_mpkt_[i]);
mov_phasen [SONDE_OBJ1].Lines = 2;
mov_phasen [SONDE_OBJ1].Repeat = 1;
mov_phasen [SONDE_OBJ1].ZoomFak = 0;
auto_mov_obj [SONDE_OBJ1].Id = AUTO_OBJ1;
auto_mov_obj [SONDE_OBJ1].Mode = 1;
auto_mov_vector[SONDE_OBJ1].Delay = _G(spieler).DelaySpeed;
init_auto_obj(SONDE_OBJ1, &sonde_phasen[0][0], mov_phasen[SONDE_OBJ1].Lines, sonde_mpkt_[i]);
mov_phasen [SONDE_OBJ1].Phase[0][0] = spr_nr;
mov_phasen [SONDE_OBJ1].Phase[0][1] = spr_nr;
while (mov_phasen[SONDE_OBJ].Repeat != -1) {
if (i == 2 || i == 1) {
if (mouse_auto_obj(SONDE_OBJ, 50, 100)) {
if (minfo.button == 1 || kbinfo.key_code == ENTER) {
if (is_cur_inventar(SPINAT_INV)) {
ssi[0].X = 120;
ssi[0].Y = 100;
if (_G(spieler).PersonRoomNr[P_CHEWY] == 3)
start_aad(50);
else
start_aad(44);
del_inventar(_G(spieler).AkInvent);
_G(spieler).R2FussSchleim = 1;
mov_phasen[SONDE_OBJ1].Phase[0][0] = 142;
mov_phasen[SONDE_OBJ1].Phase[0][1] = 149;
auto_mov_vector[SONDE_OBJ1].PhAnz = 8;
anistart = true;
}
}
}
}
set_ani_screen();
if (anistart) {
if (auto_mov_vector[SONDE_OBJ1].PhNr == 7) {
anistart = false;
spr_nr = 149;
mov_phasen[SONDE_OBJ1].Phase[0][0] = spr_nr;
mov_phasen[SONDE_OBJ1].Phase[0][1] = spr_nr;
auto_mov_vector[SONDE_OBJ1].PhAnz = 1;
auto_mov_vector[SONDE_OBJ1].PhNr = 0;
}
}
}
switch (i) {
case 0:
show_cur();
start_aad(52);
flags.AniUserAction = true;
spr_nr = 141;
_G(spieler).PersonHide[P_CHEWY] = true;
det->load_taf_seq(142, 8, 0);
break;
case 1:
switch_room(1);
break;
case 2:
det->del_taf_tbl(142, 7, 0);
flags.AniUserAction = false;
switch_room(2);
break;
}
}
flags.AniUserAction = false;
_G(zoom_horizont) = tmp;
_G(auto_obj) = 0;
}
void r5_knopf() {
int16 str_nr;
if (_G(spieler).R5Terminal) {

View File

@ -26,14 +26,6 @@ namespace Chewy {
void switch_room(int16 nr);
void r3_terminal();
void r3_init_sonde();
void r3_sonde_knarre();
void r3_sonde_aufnahme();
int16 r4_sonde_comp();
void r5_knopf();

View File

@ -51,7 +51,9 @@ MODULE_OBJS = \
types.o \
video/cfo_decoder.o \
rooms/room0.o \
rooms/room2.o
rooms/room2.o \
rooms/room3.o \
rooms/room4.o
# This module can be built as a plugin
ifeq ($(ENABLE_CHEWY), DYNAMIC_PLUGIN)

View File

@ -102,7 +102,7 @@ void play_scene_ani(int16 nr, int16 mode) {
break;
case ROOM_3_1:
r3_terminal();
Room3::terminal();
break;
case ROOM_9_4:
@ -639,7 +639,7 @@ void enter_room(int16 eib_nr) {
break;
case 3:
r3_init_sonde();
Room3::init_sonde();
break;
case 5:

View File

@ -0,0 +1,375 @@
/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
#include "chewy/defines.h"
#include "chewy/events.h"
#include "chewy/global.h"
#include "chewy/ani_dat.h"
#include "chewy/room.h"
#include "chewy/rooms/room2.h"
#include "chewy/rooms/room3.h"
#include "chewy/rooms/room4.h"
namespace Chewy {
namespace Rooms {
#define KOPF_SCHUSS 0
#define SONDE_ANI 2
#define SONDE_SHOOT 3
#define SONDE_RET 4
#define SONDE_RAUCH 5
#define SONDE_REIN 6
#define SONDE_GREIF 7
#define SONDE_GREIF1 8
#define SONDE_SPR_R 118
#define SONDE_SPR_L 120
MovLine SONDE_MPKT[3] = {
{ { 13, 45, 75 }, 1, 2 },
{ { 237, 52, 160 }, 1, 2 },
{ { 4, 83, 180 }, 0, 2 }
};
int16 SONDE_PHASEN[4][2] = {
{ 120, 120 },
{ 118, 118 },
{ 141, 141 },
{ 119, 119 }
};
void Room3::terminal() {
show_cur();
_G(auto_obj) = 0;
switch (Room4::sonde_comp()) {
case 0:
sonde_aufnahme();
spr_info[0].Image = room_blk.DetImage[120];
spr_info[0].X = 250;
spr_info[0].Y = 2;
spr_info[0].ZEbene = 0;
if (!_G(spieler).R2KabelBork) {
det->stop_detail(5);
start_ani_block(2, ablock3);
if (_G(spieler).R2FussSchleim) {
_G(spieler).R2FussSchleim = 0;
_G(spieler).room_s_obj[SIB_SCHLEIM].ZustandFlipFlop = 1;
}
_G(spieler).PersonHide[P_CHEWY] = true;
start_detail_wait(8, 1, ANI_VOR);
set_up_screen(DO_SETUP);
det->stop_detail(6);
clear_prog_ani();
switch_room(1);
start_ani_block(2, ablock0);
set_person_pos(92, 131, P_CHEWY, P_LEFT);
_G(spieler).PersonHide[P_CHEWY] = false;
} else if (!_G(spieler).R2FussSchleim) {
start_ani_block(2, ablock2);
Room2::jump_out_r1(9);
start_aad_wait(45, -1);
} else {
_G(spieler).PersonHide[P_CHEWY] = true;
start_ani_block(2, ablock1);
_G(spieler).PersonRoomNr[P_CHEWY] = 5;
clear_prog_ani();
_G(auto_obj) = 0;
room->load_room(&room_blk, _G(spieler).PersonRoomNr[P_CHEWY], &_G(spieler));
ERROR
fx_blend = BLEND1;
start_ani_block(3, ablock5);
set_person_pos(91, 107, P_CHEWY, P_LEFT);
_G(spieler).PersonHide[P_CHEWY] = false;
}
clear_prog_ani();
break;
case 1:
_G(auto_obj) = 1;
_G(maus_links_click) = 0;
minfo.button = 0;
stop_person(P_CHEWY);
start_aad_wait(51, -1);
set_up_screen(DO_SETUP);
break;
case 2:
sonde_knarre();
break;
}
}
void Room3::init_sonde() {
#define SONDE_OBJ 0
#define SONDE_OBJ1 1
_G(auto_obj) = 1;
mov_phasen[SONDE_OBJ].AtsText = 24;
mov_phasen[SONDE_OBJ].Lines = 3;
mov_phasen[SONDE_OBJ].Repeat = 255;
mov_phasen[SONDE_OBJ].ZoomFak = 20;
auto_mov_obj[SONDE_OBJ].Id = AUTO_OBJ0;
auto_mov_vector[SONDE_OBJ].Delay = _G(spieler).DelaySpeed;
auto_mov_obj[SONDE_OBJ].Mode = 1;
init_auto_obj(SONDE_OBJ, &SONDE_PHASEN[0][0], mov_phasen[SONDE_OBJ].Lines, (MovLine *)SONDE_MPKT);
}
void Room3::sonde_knarre() {
MovLine sonde_mpkt1[3] = {
{ { 237, 52, 160 }, 0, 2 },
{ { 13, 45, 75 }, 0, 4 },
{ { 4, 100, 180 }, 1, 2 }
};
MovLine sonde_mpkt2[2] = {
{ { 4, 100, 180 }, 1, 3 },
{ { 13, 45, 75 }, 1, 3 }
};
room_detail_info *rdi;
int16 tmp;
int16 ende;
hide_cur();
rdi = det->get_room_detail_info();
det->load_taf_seq(162, 17, 0);
tmp = _G(zoom_horizont);
_G(zoom_horizont) = 100;
_G(auto_obj) = 1;
mov_phasen[SONDE_OBJ].Lines = 3;
mov_phasen[SONDE_OBJ].Repeat = 1;
mov_phasen[SONDE_OBJ].ZoomFak = 20;
auto_mov_obj[SONDE_OBJ].Id = AUTO_OBJ0;
auto_mov_vector[SONDE_OBJ].Delay = _G(spieler).DelaySpeed;
auto_mov_obj[SONDE_OBJ].Mode = 1;
init_auto_obj(SONDE_OBJ, &SONDE_PHASEN[0][0], mov_phasen[SONDE_OBJ].Lines, (MovLine
*)sonde_mpkt1);
flags.AniUserAction = false;
while (mov_phasen[SONDE_OBJ].Repeat != -1)
set_ani_screen();
det->start_detail(SONDE_SHOOT, 1, ANI_VOR);
ende = 0;
while (!ende) {
clear_prog_ani();
if (rdi->Ainfo[SONDE_SHOOT].ani_count == 170) {
_G(spieler).PersonHide[P_CHEWY] = true;
det->start_detail(KOPF_SCHUSS, 1, ANI_VOR);
}
spr_info[0] = det->plot_detail_sprite(0, 0, SONDE_ANI, SONDE_SPR_R, ANI_HIDE);
spr_info[0].ZEbene = 0;
if (rdi->Ainfo[KOPF_SCHUSS].ani_count >= 13 &&
rdi->Ainfo[KOPF_SCHUSS].ani_count <= 21) {
spr_info[1] = det->plot_detail_sprite(0, 0, KOPF_SCHUSS, 21, ANI_HIDE);
spr_info[1].ZEbene = 190;
} else if (rdi->Ainfo[KOPF_SCHUSS].ani_count > 21 &&
det->get_ani_status(SONDE_RET) == 0) {
spr_info[2] = det->plot_detail_sprite(0, 0, SONDE_RET, 173, ANI_HIDE);
spr_info[2].ZEbene = 190;
}
if (rdi->Ainfo[SONDE_SHOOT].ani_count == 178) {
det->start_detail(SONDE_RET, 3, ANI_RUECK);
}
if (rdi->Ainfo[KOPF_SCHUSS].ani_count == 28) {
ende = 1;
}
set_ani_screen();
SHOULD_QUIT_RETURN;
}
clear_prog_ani();
det->start_detail(SONDE_RAUCH, 3, ANI_VOR);
ende = 0;
while (det->get_ani_status(SONDE_RAUCH)) {
spr_info[0] = det->plot_detail_sprite(0, 0, SONDE_ANI, SONDE_SPR_R, ANI_HIDE);
spr_info[0].ZEbene = 0;
spr_info[1] = det->plot_detail_sprite(0, 0, SONDE_RET, 173, ANI_HIDE);
spr_info[1].ZEbene = 190;
++ende;
if (ende == 3)
_G(spieler).PersonHide[P_CHEWY] = false;
set_ani_screen();
}
start_aad_wait(53, -1);
clear_prog_ani();
det->start_detail(SONDE_REIN, 1, ANI_RUECK);
while (det->get_ani_status(SONDE_REIN)) {
spr_info[0] = det->plot_detail_sprite(0, 0, SONDE_ANI, SONDE_SPR_R, ANI_HIDE);
spr_info[0].ZEbene = 0;
set_ani_screen();
}
clear_prog_ani();
mov_phasen[SONDE_OBJ].Lines = 2;
mov_phasen[SONDE_OBJ].Repeat = 1;
mov_phasen[SONDE_OBJ].ZoomFak = 28;
init_auto_obj(SONDE_OBJ, &SONDE_PHASEN[0][0], mov_phasen[SONDE_OBJ].Lines, (MovLine
*)sonde_mpkt2);
while (mov_phasen[SONDE_OBJ].Repeat != -1)
set_ani_screen();
det->del_taf_tbl(162, 17, 0);
_G(zoom_horizont) = tmp;
init_sonde();
show_cur();
}
void Room3::sonde_aufnahme() {
int16 tmp;
int16 i;
int16 spr_nr;
int16 anistart;
// room_detail_info *rdi;
MovLine sonde_mpkt1[2] = {
{ { 237, 52, 160 }, 0, 2 },
{ { 144, 100, 180 }, 0, 2 }
};
MovLine sonde_mpkt_[4][2] = {
{ { { 144, 100, 180 }, 0, 2 },
{ { 110, 100, 180 }, 0, 2 } },
{ { { 110, 101, 180 }, 0, 3 },
{ { -55, 50, 180 }, 0, 3 } },
{ { { 310, 20, 180 }, 0, 3 },
{ { -55, 20, 180 }, 0, 3 } },
{ { { 310, 2, 180 }, 0, 3 },
{ { 250, 2, 180 }, 0, 3 } }
};
flags.AniUserAction = false;
hide_cur();
/*rdi = */(void)det->get_room_detail_info();
tmp = _G(zoom_horizont);
_G(zoom_horizont) = 100;
anistart = false;
_G(auto_obj) = 1;
mov_phasen[SONDE_OBJ].Lines = 2;
mov_phasen[SONDE_OBJ].Repeat = 1;
mov_phasen[SONDE_OBJ].ZoomFak = 20;
auto_mov_obj[SONDE_OBJ].Id = AUTO_OBJ0;
auto_mov_vector[SONDE_OBJ].Delay = _G(spieler).DelaySpeed;
auto_mov_obj[SONDE_OBJ].Mode = 1;
init_auto_obj(SONDE_OBJ, &SONDE_PHASEN[0][0], mov_phasen[SONDE_OBJ].Lines, (MovLine *)sonde_mpkt1);
while (mov_phasen[SONDE_OBJ].Repeat != -1)
set_ani_screen();
det->start_detail(SONDE_GREIF, 1, ANI_VOR);
while (det->get_ani_status(SONDE_GREIF)) {
clear_prog_ani();
spr_info[0] = det->plot_detail_sprite(0, 0, SONDE_GREIF, SONDE_SPR_L, ANI_HIDE);
spr_info[0].ZEbene = 146;
set_ani_screen();
}
clear_prog_ani();
_G(auto_obj) = 2;
spr_nr = 140;
for (i = 0; i < 4; i++) {
mov_phasen[SONDE_OBJ].Lines = 2;
mov_phasen[SONDE_OBJ].Repeat = 1;
mov_phasen[SONDE_OBJ].ZoomFak = 0;
auto_mov_obj[SONDE_OBJ].Id = AUTO_OBJ0;
auto_mov_obj[SONDE_OBJ].Mode = 1;
auto_mov_vector[SONDE_OBJ].Delay = _G(spieler).DelaySpeed;
init_auto_obj(SONDE_OBJ, &SONDE_PHASEN[0][0], mov_phasen[SONDE_OBJ].Lines, sonde_mpkt_[i]);
mov_phasen[SONDE_OBJ1].Lines = 2;
mov_phasen[SONDE_OBJ1].Repeat = 1;
mov_phasen[SONDE_OBJ1].ZoomFak = 0;
auto_mov_obj[SONDE_OBJ1].Id = AUTO_OBJ1;
auto_mov_obj[SONDE_OBJ1].Mode = 1;
auto_mov_vector[SONDE_OBJ1].Delay = _G(spieler).DelaySpeed;
init_auto_obj(SONDE_OBJ1, &SONDE_PHASEN[0][0], mov_phasen[SONDE_OBJ1].Lines, sonde_mpkt_[i]);
mov_phasen[SONDE_OBJ1].Phase[0][0] = spr_nr;
mov_phasen[SONDE_OBJ1].Phase[0][1] = spr_nr;
while (mov_phasen[SONDE_OBJ].Repeat != -1) {
if (i == 2 || i == 1) {
if (mouse_auto_obj(SONDE_OBJ, 50, 100)) {
if (minfo.button == 1 || kbinfo.key_code == ENTER) {
if (is_cur_inventar(SPINAT_INV)) {
ssi[0].X = 120;
ssi[0].Y = 100;
if (_G(spieler).PersonRoomNr[P_CHEWY] == 3)
start_aad(50);
else
start_aad(44);
del_inventar(_G(spieler).AkInvent);
_G(spieler).R2FussSchleim = 1;
mov_phasen[SONDE_OBJ1].Phase[0][0] = 142;
mov_phasen[SONDE_OBJ1].Phase[0][1] = 149;
auto_mov_vector[SONDE_OBJ1].PhAnz = 8;
anistart = true;
}
}
}
}
set_ani_screen();
if (anistart) {
if (auto_mov_vector[SONDE_OBJ1].PhNr == 7) {
anistart = false;
spr_nr = 149;
mov_phasen[SONDE_OBJ1].Phase[0][0] = spr_nr;
mov_phasen[SONDE_OBJ1].Phase[0][1] = spr_nr;
auto_mov_vector[SONDE_OBJ1].PhAnz = 1;
auto_mov_vector[SONDE_OBJ1].PhNr = 0;
}
}
}
switch (i) {
case 0:
show_cur();
start_aad(52);
flags.AniUserAction = true;
spr_nr = 141;
_G(spieler).PersonHide[P_CHEWY] = true;
det->load_taf_seq(142, 8, 0);
break;
case 1:
switch_room(1);
break;
case 2:
det->del_taf_tbl(142, 7, 0);
flags.AniUserAction = false;
switch_room(2);
break;
}
}
flags.AniUserAction = false;
_G(zoom_horizont) = tmp;
_G(auto_obj) = 0;
}
} // namespace Rooms
} // namespace Chewy

View File

@ -0,0 +1,40 @@
/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
#ifndef CHEWY_ROOMS_ROOM3_H
#define CHEWY_ROOMS_ROOM3_H
namespace Chewy {
namespace Rooms {
class Room3 {
private:
static void sonde_knarre();
static void sonde_aufnahme();
public:
static void init_sonde();
static void terminal();
};
} // namespace Rooms
} // namespace Chewy
#endif

View File

@ -0,0 +1,135 @@
/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
#include "chewy/defines.h"
#include "chewy/events.h"
#include "chewy/global.h"
#include "chewy/ani_dat.h"
#include "chewy/room.h"
#include "chewy/rooms/room4.h"
namespace Chewy {
namespace Rooms {
#define HAND_NORMAL 68
#define HAND_CLICK 69
#define RAHMEN_ROT 70
#define RAHMEN_GELB 71
int16 Room4::sonde_comp() {
int16 ende;
int16 spr_nr;
int16 cur_x;
int16 cur_pos[3][2] = { { 83, 106 },
{ 136, 103 },
{ 188, 101 }
};
int16 console[3][4] = { { 82, 158, 143, 199 },
{ 150, 159, 194, 193 },
{ 201, 154, 262, 193 }
};
cur_2_inventory();
_G(spieler).PersonHide[P_CHEWY] = true;
_G(cur_display) = false;
switch_room(4);
_G(cur_display) = true;
ende = 0;
curblk.sprite = room_blk.DetImage;
cur_x = 1;
spr_nr = RAHMEN_ROT;
cur->move(160, 160);
start_aad(46);
while (!ende) {
maus_action();
if (_G(maus_links_click)) {
switch (in->maus_vector(minfo.x + 17, minfo.y + 7, (int16 *)console, 3)) {
case 0:
if (cur_x > 0)
--cur_x;
else
cur_x = 2;
det->play_sound(0, 1);
break;
case 1:
ende = 1;
spr_nr = RAHMEN_GELB;
det->play_sound(0, 0);
break;
case 2:
if (cur_x < 2)
++cur_x;
else
cur_x = 0;
det->play_sound(0, 2);
break;
}
}
spr_info[0].Image = room_blk.DetImage[spr_nr];
spr_info[0].ZEbene = 0;
spr_info[0].X = cur_pos[cur_x][0];
spr_info[0].Y = cur_pos[cur_x][1];
if (minfo.button == 1 || kbinfo.key_code == ENTER) {
curani.ani_anf = HAND_CLICK;
curani.ani_end = HAND_CLICK;
} else {
curani.ani_anf = HAND_NORMAL;
curani.ani_end = HAND_NORMAL;
}
cursor_wahl(CUR_USER);
_G(spieler).CurHoehe = 16;
in->rectangle(0, 123, 320 - _G(spieler).CurBreite, 194);
if (minfo.y < 124) {
minfo.y = 123;
}
set_up_screen(DO_SETUP);
SHOULD_QUIT_RETURN0;
}
g_events->delay(500);
clear_prog_ani();
_G(spieler).PersonHide[P_CHEWY] = false;
menu_item = CUR_WALK;
cursor_wahl(menu_item);
set_person_pos(118 - CH_HOT_MOV_X,
164 - CH_HOT_MOV_Y, P_CHEWY, P_LEFT);
spieler_vector[P_CHEWY].DelayCount = 0;
_G(maus_links_click) = false;
minfo.button = 0;
_G(spieler).PersonRoomNr[P_CHEWY] = 3;
room->load_room(&room_blk, _G(spieler).PersonRoomNr[P_CHEWY], &_G(spieler));
ERROR
fx_blend = BLEND1;
atds->stop_aad();
return cur_x;
}
} // namespace Rooms
} // namespace Chewy

View File

@ -0,0 +1,36 @@
/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
#ifndef CHEWY_ROOMS_ROOM4_H
#define CHEWY_ROOMS_ROOM4_H
namespace Chewy {
namespace Rooms {
class Room4 {
public:
static int16 sonde_comp();
};
} // namespace Rooms
} // namespace Chewy
#endif

View File

@ -24,6 +24,8 @@
#include "chewy/rooms/room0.h"
#include "chewy/rooms/room2.h"
#include "chewy/rooms/room3.h"
#include "chewy/rooms/room4.h"
// TODO: Remove one room classes implemented and split up
#include "chewy/episode1.h"
@ -36,6 +38,8 @@ namespace Chewy {
using Chewy::Rooms::Room0;
using Chewy::Rooms::Room2;
using Chewy::Rooms::Room3;
using Chewy::Rooms::Room4;
} // namespace Chewy