Files
scummvm-cursorfix/engines/m4/burger/rooms/section9/room951.cpp
2026-02-02 04:50:13 +01:00

677 lines
21 KiB
C++

/* 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 "m4/burger/rooms/section9/room951.h"
#include "m4/adv_r/adv_trigger.h"
#include "m4/burger/vars.h"
#include "m4/m4.h"
namespace M4 {
namespace Burger {
namespace Rooms {
enum scene_triggers {
START_ORION_BURGER_POSTER = 1,
START_PLANET_X_HILLTOP_A,
START_3,
START_4,
START_PLANET_X_LOW_GROUND_SHOT,
START_6,
START_7,
START_PLANET_X_HILLTOP_B,
START_9,
START_10,
START_SPACE_STATION_PANORAMA_A,
START_12,
START_13,
START_CARGO_TRANSFER_AREA_A,
START_15,
START_16,
START_VPS_OFFICE_A,
START_18,
START_19,
START_HOLOGRAM,
START_21,
START_22,
START_VPS_OFFICE_B,
START_24,
START_25,
START_CARGO_TRANSFER_AREA_B,
START_27,
START_28,
START_CARGO_TRANSFER_CONTROLS,
START_30,
START_31,
START_SPACE_STATION_PANORAMA_B,
START_33,
START_34,
START_35,
START_36,
START_37,
START_38,
START_39,
START_40,
START_41,
START_42,
START_43,
START_44,
START_45,
START_46,
START_47,
START_48,
START_50,
START_51,
START_52,
START_53,
START_54,
START_55,
SAVEGAME_CHECK,
LAST_SCENE_TRIGGER = 57
};
static const seriesStreamBreak planet_x_hilltop_a[] = {
// frame sound chan vol trigger flags variable value
{ 0, "951_000", 3, 100, NO_TRIGGER, 0, nullptr, 0 },
{ 15, "951_004", 2, 150, NO_TRIGGER, 0, nullptr, 0 },
{ 36, "951_009", 1, 150, NO_TRIGGER, 1024, nullptr, 0 },
{ 80, "951_004b", 2, 150, NO_TRIGGER, 1024, nullptr, 0 },
{ 114, nullptr, 2, 100, NO_TRIGGER, 0, nullptr, 0 },
{ 124, nullptr, 2, 50, NO_TRIGGER, 0, nullptr, 0 },
{ 134, "951Z001", 2, 230, NO_TRIGGER, 0, nullptr, 0 },
{ 158, "951_006", 1, 255, NO_TRIGGER, 0, nullptr, 0 },
{ 165, nullptr, 0, 0, NO_TRIGGER, 0, nullptr, 0 },
{ -1, nullptr, 0, 0, NO_TRIGGER, 0, nullptr, 0 },
STREAM_BREAK_END
};
static const seriesStreamBreak planet_x_low_shot[] = {
{ 0, nullptr, 2, 0, -1, 2048, nullptr, 0 },
{ 0, "952_003", 1, 200, -1, 0, nullptr, 0 },
{ 21, "952_001", 3, 120, -1, 0, nullptr, 0 },
{ 73, "952_002", 2, 160, -1, 0, nullptr, 0 },
{ 80, "952Z001", 1, 255, -1, 0, nullptr, 0 },
{ 92, "952_005", 2, 160, -1, 0, nullptr, 0 },
{ 111, "952_006", 2, 100, -1, 0, nullptr, 0 },
{ 117, "952_007", 2, 100, -1, 0, nullptr, 0 },
{ 124, "952_004", 1, 225, -1, 0, nullptr, 0 },
{ 136, "952_004", 1, 245, -1, 0, nullptr, 0 },
{ 143, "952_010", 1, 255, -1, 0, nullptr, 0 },
{ 147, "952_004", 1, 235, -1, 0, nullptr, 0 },
{ 153, "952_008", 2, 100, -1, 0, nullptr, 0 },
{ 154, "952_009", 3, 200, -1, 0, nullptr, 0 },
{ 157, nullptr, 0, 0, 52, 0, nullptr, 0 },
STREAM_BREAK_END
};
static const seriesStreamBreak planet_x_hilltop_b[] = {
{ 1, "951_020", 3, 100, -1, 0, nullptr, 0 },
{ 4, "951_007", 2, 125, -1, 0, nullptr, 0 },
{ 7, "951z002", 1, 255, -1, 0, nullptr, 0 },
{ 54, nullptr, 0, 0, 50, 0, nullptr, 0 },
{ 56, "951_008", 2, 150, -1, 0, nullptr, 0 },
{ 75, nullptr, 0, 0, 52, 0, nullptr, 0 },
STREAM_BREAK_END
};
static const seriesStreamBreak panorama_a[] = {
{ 1, "955_001", 1, 150, -1, 0, nullptr, 0 },
{ 7, "955_007", 2, 220, -1, 0, nullptr, 0 },
{ 24, "955_007", 2, 220, -1, 0, nullptr, 0 },
{ 25, nullptr, 2, 0, -1, 2048, nullptr, 0 },
{ 26, "955_007", 2, 220, -1, 0, nullptr, 0 },
{ 35, "955_002", 2, 255, -1, 0, nullptr, 0 },
{ 90, "955_007", 1, 220, -1, 0, nullptr, 0 },
{ 92, nullptr, 1, 0, -1, 2048, nullptr, 0 },
{ 93, "955_007", 1, 220, -1, 0, nullptr, 0 },
{ 99, "955_010", 1, 150, -1, 0, nullptr, 0 },
{ 104, nullptr, 3, 240, -1, 0, nullptr, 0 },
{ 105, nullptr, 3, 220, -1, 0, nullptr, 0 },
{ 105, "955_007", 1, 210, -1, 0, nullptr, 0 },
{ 106, nullptr, 3, 200, -1, 0, nullptr, 0 },
{ 107, nullptr, 3, 190, -1, 0, nullptr, 0 },
{ 108, nullptr, 3, 180, -1, 0, nullptr, 0 },
{ 109, nullptr, 3, 170, -1, 0, nullptr, 0 },
{ 110, nullptr, 3, 160, -1, 0, nullptr, 0 },
{ 111, nullptr, 3, 150, -1, 0, nullptr, 0 },
{ 112, nullptr, 0, 0, 52, 0, nullptr, 0 },
{ 113, nullptr, 3, 140, -1, 0, nullptr, 0 },
{ 114, nullptr, 3, 120, -1, 0, nullptr, 0 },
{ 115, nullptr, 3, 110, -1, 0, nullptr, 0 },
STREAM_BREAK_END
};
static const seriesStreamBreak cargo_transfer_a[] = {
{ 0, nullptr, 3, 100, -1, 0, nullptr, 0 },
{ 1, "956_001", 2, 80, -1, 0, nullptr, 0 },
{ 4, "956v001", 1, 255, -1, 0, nullptr, 0 },
{ 136, nullptr, 0, 0, 52, 0, nullptr, 0 },
STREAM_BREAK_END
};
static const seriesStreamBreak vps_office_a[] = {
{ 1, "957_005", 3, 40, -1, 1024, nullptr, 0 },
{ 1, "957v001", 1, 255, -1, 0, nullptr, 0 },
{ 92, "957v002", 1, 255, -1, 0, nullptr, 0 },
{ 110, "957v003", 1, 255, -1, 0, nullptr, 0 },
{ 125, "957_004", 2, 230, -1, 0, nullptr, 0 },
{ 177, "957_007", 2, 100, -1, 0, nullptr, 0 },
{ 183, "957_001", 2, 150, -1, 0, nullptr, 0 },
{ 191, "957v004", 1, 255, -1, 0, nullptr, 0 },
{ 194, "957_006", 2, 120, -1, 1024, nullptr, 0 },
{ 267, nullptr, 0, 0, 52, 0, nullptr, 0 },
STREAM_BREAK_END
};
static const seriesStreamBreak hologram[] = {
{ 0, "958v001", 1, 255, -1, 0, nullptr, 0 },
{ 0, "957_005", 3, 20, -1, 1024, nullptr, 0 },
{ 1, nullptr, 2, 210, -1, 0, nullptr, 0 },
{ 39, "958_003", 1, 150, -1, 0, nullptr, 0 },
{ 42, "958_001", 1, 200, -1, 0, nullptr, 0 },
{ 52, "958z001", 1, 255, -1, 0, nullptr, 0 },
{ 161, "958_003", 1, 150, -1, 0, nullptr, 0 },
{ 164, "958_004", 2, 200, -1, 0, nullptr, 0 },
{ 170, "958v002", 1, 255, -1, 0, nullptr, 0 },
{ 264, "958z002", 1, 255, -1, 0, nullptr, 0 },
{ 329, "958v003", 1, 255, -1, 0, nullptr, 0 },
{ 362, "958_002", 2, 50, -1, 0, nullptr, 0 },
{ 425, "958v004", 1, 255, -1, 0, nullptr, 0 },
{ 456, nullptr, 0, 0, 52, 0, nullptr, 0 },
STREAM_BREAK_END
};
static const seriesStreamBreak vps_office_b[] = {
{ 0, "957_005", 3, 40, -1, 1024, nullptr, 0 },
{ 8, "957Z001y", 1, 255, -1, 0, nullptr, 0 },
{ 43, "957Z001z", 1, 255, -1, 0, nullptr, 0 },
{ 112, "957V005", 2, 255, -1, 0, nullptr, 0 },
{ 139, "957_002", 1, 255, -1, 0, nullptr, 0 },
{ 154, "957_003", 1, 255, -1, 0, nullptr, 0 },
{ 170, nullptr, 0, 0, 52, 0, nullptr, 0 },
STREAM_BREAK_END
};
static const seriesStreamBreak cargo_transfer_b[] = {
{ 0, "956_020", 1, 130, -1, 0, nullptr, 0 },
{ 0, "956_000", 2, 60, -1, 1024, nullptr, 0 },
{ 0, "956_001", 3, 80, -1, 1024, nullptr, 0 },
{ 29, "956Z002", 1, 255, -1, 0, nullptr, 0 },
{ 67, "956_003", 1, 60, -1, 0, nullptr, 0 },
{ 83, "956Z003", 1, 255, -1, 0, nullptr, 0 },
{ 121, "956_002", 1, 200, -1, 0, nullptr, 0 },
{ 132, nullptr, 0, 0, 52, 0, nullptr, 0 },
STREAM_BREAK_END
};
static const seriesStreamBreak transfer_controls[] = {
{ 0, nullptr, 2, 0, -1, 2048, nullptr, 0 },
{ 0, nullptr, 3, 0, -1, 2048, nullptr, 0 },
{ 0, "956_001", 3, 180, -1, 1024, nullptr, 0 },
{ 1, "959F001", 1, 255, -1, 0, nullptr, 0 },
{ 5, "959_010", 2, 170, -1, 0, nullptr, 0 },
{ 27, "959_010", 2, 170, -1, 0, nullptr, 0 },
{ 36, "959Z001", 1, 255, -1, 0, nullptr, 0 },
{ 43, "959_013", 2, 100, -1, 0, nullptr, 0 },
{ 48, nullptr, 2, 0, -1, 2048, nullptr, 0 },
{ 69, "959Z002", 1, 255, -1, 0, nullptr, 0 },
{ 100, "959F002", 1, 255, -1, 0, nullptr, 0 },
{ 146, "959Z003", 1, 255, -1, 0, nullptr, 0 },
{ 207, "959_002", 2, 150, -1, 0, nullptr, 0 },
{ 226, "959_003", 2, 255, -1, 0, nullptr, 0 },
{ 235, "959_013", 1, 100, -1, 0, nullptr, 0 },
{ 245, nullptr, 1, 0, -1, 2048, nullptr, 0 },
{ 254, "959_010", 2, 170, -1, 0, nullptr, 0 },
{ 257, "959_013", 1, 100, -1, 0, nullptr, 0 },
{ 272, nullptr, 1, 0, -1, 2048, nullptr, 0 },
{ 274, "959_004", 2, 255, -1, 0, nullptr, 0 },
{ 277, "959_005", 2, 255, -1, 0, nullptr, 0 },
{ 288, "959_012", 1, 255, -1, 0, nullptr, 0 },
{ 295, "959_011", 2, 255, -1, 0, nullptr, 0 },
{ 307, "959_005", 1, 200, -1, 0, nullptr, 0 },
{ 311, nullptr, 0, 0, 52, 0, nullptr, 0 },
STREAM_BREAK_END
};
static const seriesStreamBreak panorama_b[] = {
{ 0, "955_000", 3, 180, -1, 1024, nullptr, 0 },
{ 0, "955_003", 2, 150, -1, 0, nullptr, 0 },
{ 2, "955z001", 1, 255, -1, 0, nullptr, 0 },
{ 74, "955_004", 2, 255, -1, 0, nullptr, 0 },
{ 89, "955z002", 1, 255, -1, 0, nullptr, 0 },
{ 125, "955_006", 2, 245, -1, 0, nullptr, 0 },
{ 140, nullptr, 0, 0, -1, 0, nullptr, 0 },
{ 148, nullptr, 0, 0, 52, 0, nullptr, 0 },
STREAM_BREAK_END
};
static const seriesStreamBreak break_961a[] = {
{ 0, nullptr, 0, 0, -1, 0, nullptr, 0 },
{ 1, nullptr, 0, 0, 47, 0, nullptr, 0 },
{ 1, "961_001", 1, 100, -1, 0, nullptr, 0 },
{ 63, "961_002", 1, 180, -1, 0, nullptr, 0 },
{ 143, nullptr, 0, 0, 52, 0, nullptr, 0 },
{ 147, nullptr, 0, 0, 48, 0, nullptr, 0 },
STREAM_BREAK_END
};
static const seriesStreamBreak break_961b[] = {
{ 0, nullptr, 0, 0, -1, 0, nullptr, 0 },
{ 4, "961_003", 1, 255, -1, 0, nullptr, 0 },
{ 19, "961_004", 2, 180, -1, 0, nullptr, 0 },
{ 38, "961_005", 1, 255, -1, 0, nullptr, 0 },
{ 55, nullptr, 0, 0, 52, 0, nullptr, 0 },
STREAM_BREAK_END
};
static const seriesStreamBreak break_961c[] = {
{ 0, nullptr, 0, 0, -1, 0, nullptr, 0 },
{ 1, "961_006", 2, 130, -1, 0, nullptr, 0 },
{ 29, "961_007", 1, 255, -1, 0, nullptr, 0 },
{ 62, "961_008", 1, 255, -1, 0, nullptr, 0 },
{ 75, "961_009", 1, 200, -1, 0, nullptr, 0 },
{ 95, "961_007", 2, 255, -1, 0, nullptr, 0 },
{ 100, nullptr, 3, 240, -1, 0, nullptr, 0 },
{ 101, nullptr, 3, 220, -1, 0, nullptr, 0 },
{ 102, nullptr, 3, 200, -1, 0, nullptr, 0 },
{ 103, nullptr, 3, 180, -1, 0, nullptr, 0 },
{ 104, nullptr, 3, 160, -1, 0, nullptr, 0 },
{ 105, nullptr, 3, 140, -1, 0, nullptr, 0 },
{ 106, nullptr, 3, 120, -1, 0, nullptr, 0 },
{ 107, nullptr, 3, 100, -1, 0, nullptr, 0 },
{ 108, nullptr, 3, 90, -1, 0, nullptr, 0 },
{ 109, nullptr, 3, 80, -1, 0, nullptr, 0 },
{ 110, nullptr, 3, 60, -1, 0, nullptr, 0 },
{ 112, nullptr, 3, 40, -1, 0, nullptr, 0 },
{ 114, nullptr, 3, 20, -1, 0, nullptr, 0 },
{ 116, nullptr, 3, 10, -1, 0, nullptr, 0 },
{ 117, nullptr, 0, 0, 52, 0, nullptr, 0 },
{ 118, nullptr, 3, 0, -1, 0, nullptr, 0 },
STREAM_BREAK_END
};
static const seriesStreamBreak break_961d[] = {
{ -1, nullptr, 0, 0, -1, 0, nullptr, 0 },
{ 0, nullptr, 0, 0, -1, 0, nullptr, 0 },
{ 39, nullptr, 0, 0, 52, 0, nullptr, 0 },
{ 42, nullptr, 0, 0,2048, 0, nullptr, 0 },
STREAM_BREAK_END
};
void Room951::preload() {
_G(player).walker_in_this_scene = false;
}
void Room951::init() {
_G(kernel).suppress_fadeup = true;
pal_fade_set_start(_G(master_palette), 0);
pal_fade_init(_G(master_palette), 0, 255, 100, 40, START_ORION_BURGER_POSTER);
}
void Room951::daemon() {
switch (_G(kernel).trigger) {
case START_ORION_BURGER_POSTER:
digi_stop(1);
digi_stop(2);
digi_stop(3);
if (_G(executing) == WHOLE_GAME) {
digi_preload("951music", -1);
digi_play("951music", 1, 255, START_PLANET_X_HILLTOP_A, -1);
digi_preload("952music", -1);
} else {
// German demo
kernel_timing_trigger(120, START_PLANET_X_HILLTOP_A);
}
digi_preload_stream_breaks(planet_x_hilltop_a);
digi_preload_stream_breaks(planet_x_low_shot);
digi_preload_stream_breaks(planet_x_hilltop_b);
digi_preload_stream_breaks(panorama_a);
digi_preload_stream_breaks(cargo_transfer_a);
break;
case START_PLANET_X_HILLTOP_A:
palette_prep_for_stream();
series_stream_with_breaks(planet_x_hilltop_a, "PLANET X HILLTOP A", 6, 1, START_3);
pal_fade_init(&_G(master_palette)[0], 0, 255, 100, 30, NO_TRIGGER); // Half second fade up
break;
case START_3:
palette_prep_for_stream();
kernel_timing_trigger(TENTH_SECOND, START_4, nullptr);
break;
case START_4:
compact_mem_and_report();
release_trigger_on_digi_state(START_PLANET_X_LOW_GROUND_SHOT, 1, 0);
break;
case START_PLANET_X_LOW_GROUND_SHOT:
series_stream_with_breaks(planet_x_low_shot, "Planet X Low Ground Shot", 6, 1, START_6);
pal_fade_init(&_G(master_palette)[0], 0, 255, 100, 30, NO_TRIGGER); // Half second fade up
break;
case START_6:
palette_prep_for_stream();
kernel_timing_trigger(TENTH_SECOND, START_7, nullptr);
break;
case START_7:
digi_unload_stream_breaks(planet_x_hilltop_a);
compact_mem_and_report();
release_trigger_on_digi_state(START_PLANET_X_HILLTOP_B, 1, 0);
break;
case START_PLANET_X_HILLTOP_B:
series_stream_with_breaks(planet_x_hilltop_b, "Planet X Hilltop B", 6, 1, START_9);
pal_fade_init(&_G(master_palette)[0], 0, 255, 100, 30, NO_TRIGGER); // Half second fade up
break;
case START_9:
palette_prep_for_stream();
kernel_timing_trigger(TENTH_SECOND, START_10, nullptr);
break;
case START_10:
digi_unload_stream_breaks(planet_x_low_shot);
compact_mem_and_report();
digi_preload_stream_breaks(vps_office_a);
digi_preload_stream_breaks(hologram);
digi_preload_stream_breaks(vps_office_b);
release_trigger_on_digi_state(START_SPACE_STATION_PANORAMA_A, 1, 0);
break;
case START_SPACE_STATION_PANORAMA_A:
series_stream_with_breaks(panorama_a, "Space Station Panorama A", 6, 1, START_12);
pal_fade_init(&_G(master_palette)[0], 0, 255, 100, 30, NO_TRIGGER); // Half second fade up
break;
case START_12:
palette_prep_for_stream();
kernel_timing_trigger(TENTH_SECOND, START_13, nullptr);
break;
case START_13:
digi_unload_stream_breaks(planet_x_hilltop_b);
compact_mem_and_report();
release_trigger_on_digi_state(START_CARGO_TRANSFER_AREA_A, 1, 0);
break;
case START_CARGO_TRANSFER_AREA_A:
series_stream_with_breaks(cargo_transfer_a, "Cargo Transfer Area A", 6, 1, START_15);
pal_fade_init(&_G(master_palette)[0], 0, 255, 100, 30, NO_TRIGGER); // Half second fade up
break;
case START_15:
palette_prep_for_stream();
kernel_timing_trigger(TENTH_SECOND, START_16, nullptr);
break;
case START_16:
digi_unload_stream_breaks(panorama_a);
compact_mem_and_report();
release_trigger_on_digi_state(START_VPS_OFFICE_A, 1, 0);
break;
case START_VPS_OFFICE_A:
palette_prep_for_stream();
digi_unload_stream_breaks(panorama_a);
series_stream_with_breaks(vps_office_a, "VP's Office A", 6, 1, START_18);
pal_fade_init(&_G(master_palette)[0], 0, 255, 100, 30, NO_TRIGGER); // Half second fade up
break;
case START_18:
palette_prep_for_stream();
kernel_timing_trigger(TENTH_SECOND, START_19, nullptr);
break;
case START_19:
compact_mem_and_report();
release_trigger_on_digi_state(START_HOLOGRAM, 1, 0);
break;
case START_HOLOGRAM:
digi_unload_stream_breaks(cargo_transfer_a);
series_stream_with_breaks(hologram, "Hologram", 6, 1, START_21);
pal_fade_init(&_G(master_palette)[0], 0, 255, 100, 30, NO_TRIGGER); // Half second fade up
break;
case START_21:
palette_prep_for_stream();
kernel_timing_trigger(TENTH_SECOND, START_22, nullptr);
break;
case START_22:
compact_mem_and_report();
release_trigger_on_digi_state(START_VPS_OFFICE_B, 1, 0);
break;
case START_VPS_OFFICE_B:
series_stream_with_breaks(vps_office_b, "VP's Office B", 6, 1, START_24);
pal_fade_init(&_G(master_palette)[0], 0, 255, 100, 30, NO_TRIGGER); // Half second fade up
break;
case START_24:
palette_prep_for_stream();
kernel_timing_trigger(TENTH_SECOND, START_25, nullptr);
break;
case START_25:
compact_mem_and_report();
digi_preload_stream_breaks(cargo_transfer_b);
release_trigger_on_digi_state(START_CARGO_TRANSFER_AREA_B, 1, 0);
break;
case START_CARGO_TRANSFER_AREA_B:
series_stream_with_breaks(cargo_transfer_b, "Cargo Transfer Area B", 6, 1, START_27);
pal_fade_init(&_G(master_palette)[0], 0, 255, 100, 30, NO_TRIGGER); // Half second fade up
break;
case START_27:
palette_prep_for_stream();
kernel_timing_trigger(TENTH_SECOND, START_28, nullptr);
break;
case START_28:
digi_unload_stream_breaks(vps_office_a);
digi_unload_stream_breaks(hologram);
digi_unload_stream_breaks(vps_office_b);
compact_mem_and_report();
digi_preload_stream_breaks(transfer_controls);
release_trigger_on_digi_state(START_CARGO_TRANSFER_CONTROLS, 1, 0);
break;
case START_CARGO_TRANSFER_CONTROLS:
series_stream_with_breaks(transfer_controls, "Cargo Transfer Controls", 6, 1, START_30);
pal_fade_init(&_G(master_palette)[0], 0, 255, 100, 30, NO_TRIGGER); // Half second fade up
break;
case START_30:
palette_prep_for_stream();
kernel_timing_trigger(TENTH_SECOND, START_31, nullptr);
break;
case START_31:
digi_unload_stream_breaks(cargo_transfer_b);
compact_mem_and_report();
digi_preload_stream_breaks(panorama_b);
release_trigger_on_digi_state(START_SPACE_STATION_PANORAMA_B, 1, 0);
break;
case START_SPACE_STATION_PANORAMA_B:
series_stream_with_breaks(panorama_b, "Space Station Panorama B", 6, 1, START_33);
pal_fade_init(&_G(master_palette)[0], 0, 255, 100, 30, NO_TRIGGER); // Half second fade up
break;
case START_33:
palette_prep_for_stream();
kernel_timing_trigger(TENTH_SECOND, START_34, nullptr);
break;
case START_34:
digi_unload_stream_breaks(transfer_controls);
kernel_timing_trigger(60, START_35, nullptr);
break;
case START_35:
if (_G(executing) == WHOLE_GAME) {
digi_preload_stream_breaks(break_961a);
pal_fade_set_start(_G(master_palette), 0);
series_stream_with_breaks(break_961a, "961a", 6, 1, START_36);
pal_fade_init(_G(master_palette), _G(kernel).first_fade, 255, 100, 60, NO_TRIGGER);
} else {
_G(game).setRoom(901);
}
break;
case START_36:
pal_fade_set_start(_G(master_palette), 0);
pal_cycle_stop();
kernel_timing_trigger(TENTH_SECOND, START_37, nullptr);
break;
case START_37:
compact_mem_and_report();
kernel_timing_trigger(1, START_38, nullptr);
break;
case START_38:
digi_unload_stream_breaks(panorama_b);
digi_preload_stream_breaks(break_961b);
pal_fade_set_start(_G(master_palette), 0);
series_stream_with_breaks(break_961b, "961b", 6, 1, START_39);
pal_fade_init(_G(kernel).first_fade, 255, 100, 30, NO_TRIGGER);
break;
case START_39:
pal_fade_set_start(_G(master_palette), 0);
kernel_timing_trigger(TENTH_SECOND, START_40, nullptr);
break;
case START_40:
compact_mem_and_report();
release_trigger_on_digi_state(START_41, 1, 0);
break;
case START_41:
digi_unload_stream_breaks(break_961a);
digi_preload_stream_breaks(break_961c);
pal_fade_set_start(_G(master_palette), 0);
series_stream_with_breaks(break_961c, "961c", 6, 1, START_42);
pal_fade_init(_G(master_palette), _G(kernel).first_fade, 255, 100, 30, NO_TRIGGER);
break;
case START_42:
pal_fade_set_start(_G(master_palette), 0);
kernel_timing_trigger(TENTH_SECOND, START_43, nullptr);
break;
case START_43:
digi_unload_stream_breaks(break_961b);
compact_mem_and_report();
kernel_trigger_dispatch_now(SAVEGAME_CHECK);
break;
case SAVEGAME_CHECK:
if (_G(executing) == WHOLE_GAME && !g_engine->autosaveExists()) {
_G(game).setRoom(903);
adv_kill_digi_between_rooms(false);
} else {
kernel_trigger_dispatch_now(START_44);
}
break;
case START_44:
pal_fade_set_start(_G(master_palette), 0);
series_stream_with_breaks(break_961d, "961d", 6, 1, START_45);
pal_fade_init(_G(master_palette), _G(kernel).first_fade, 255, 100, 30, -1);
break;
case START_45:
kernel_timing_trigger(TENTH_SECOND, START_46, nullptr);
break;
case START_46:
digi_preload_stream_breaks(break_961c);
digi_preload_stream_breaks(break_961d);
compact_mem_and_report();
release_trigger_on_digi_state(LAST_SCENE_TRIGGER, 1, 0);
break;
case START_47:
pal_cycle_init(224, 254, 4, -1, -1);
break;
case START_48:
pal_cycle_stop();
break;
case START_50:
if (_G(executing) == WHOLE_GAME)
digi_play("952music", 3, 255, -1, -1);
break;
case START_51:
if (_G(executing) == WHOLE_GAME)
digi_play_loop("952music", 3, 255, -1, -1);
break;
case START_52:
pal_fade_init(_G(master_palette), 0, 255, 0, 30, -1);
break;
case START_53:
pal_fade_init(_G(master_palette), 0, 255, 100, 30, -1);
break;
case START_54:
pal_fade_init(_G(master_palette), 0, 255, 0, 60, -1);
break;
case START_55:
pal_fade_init(_G(master_palette), 0, 255, 100, 60, -1);
break;
case LAST_SCENE_TRIGGER:
compact_mem_and_report();
if (_G(executing) == WHOLE_GAME) {
g_vars->initialize_game();
_G(game).setRoom(801);
} else if (g_engine->getLanguage() == Common::EN_ANY) {
_G(game).setRoom(901);
} else {
_G(kernel).force_restart = true;
}
break;
default:
_G(kernel).continue_handling_trigger = true;
break;
}
}
} // namespace Rooms
} // namespace Burger
} // namespace M4