[Scummvm-git-logs] scummvm master -> 5ff4764442b3829e2664e35f211a6c78c49ae11e

Joefish joewinzer at googlemail.com
Wed Feb 6 11:45:42 CET 2019


This automated email contains information about 14 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
480d6c60b8 SUPERNOVA: Adds 'Image' prefix for ImageId constants
d1fb1d45e8 SUPERNOVA: Adds missing image id
1e62c55338 SUPERNOVA: Moves function definitions from rooms.h
c20b960d80 SUPERNOVA: Adds renderImage overload for ImageId
ebaa6739ec SUPERNOVA: Adds Outro image
437b1c0003 SUPERNOVA: Updates NOTES
bd298f3b3d SUPERNOVA: Removes GameManager dependency for Screen
536630aece SUPERNOVA: Removes invalid ImageId entry
641a4307f2 SUPERNOVA: Uses setCurrentImage in renderImage
21c9c885ba SUPERNOVA: Stops time and animations when reading the newspaper
1d00e625cf SUPERNOVA: Fixing header file includes
ff36f94c1f SUPERNOVA: Adds missing initializations
498de6347e SUPERNOVA: Fixes OOB read
5ff4764442 SUPERNOVA: Fixes possible OOB read


Commit: 480d6c60b86c13b7995ec9251e7e3de24270c81a
    https://github.com/scummvm/scummvm/commit/480d6c60b86c13b7995ec9251e7e3de24270c81a
Author: Joseph-Eugene Winzer (joewinzer at googlemail.com)
Date: 2019-02-06T09:42:10+01:00

Commit Message:
SUPERNOVA: Adds 'Image' prefix for ImageId constants

Changed paths:
    engines/supernova/imageid.h


diff --git a/engines/supernova/imageid.h b/engines/supernova/imageid.h
index 7cfa083..e5860f7 100644
--- a/engines/supernova/imageid.h
+++ b/engines/supernova/imageid.h
@@ -27,626 +27,626 @@ namespace Supernova {
 
 enum ImageId {
 	// file 0
-	kAxacussanShipBackground,
-	kAxacussanShipCenterMouthOpen,
-	kAxacussanShipRightMouthOpen,
+	kImageAxacussanShipBackground,
+	kImageAxacussanShipCenterMouthOpen,
+	kImageAxacussanShipRightMouthOpen,
 	// file 1
-	kNewspaper1,
+	kImageNewspaper1,
 	// file 2
-	kNewspaper2,
+	kImageNewspaper2,
 	// file 3
-	kElevatorBackground,
-	kElevatorGreenButton,
-	kElevatorRedButton,
-	kElevatorDoorAnimation1,
-	kElevatorDoorAnimation2,
-	kElevatorDoorAnimation3,
-	kElevatorDoorAnimation4,
-	kElevatorDoorAnimation5,
-	kElevatorDummy1,
-	kElevatorDummy2,
-	kElevatorDummy3,
-	kElevatorDummy4,
+	kImageElevatorBackground,
+	kImageElevatorGreenButton,
+	kImageElevatorRedButton,
+	kImageElevatorDoorAnimation1,
+	kImageElevatorDoorAnimation2,
+	kImageElevatorDoorAnimation3,
+	kImageElevatorDoorAnimation4,
+	kImageElevatorDoorAnimation5,
+	kImageElevatorDummy1,
+	kImageElevatorDummy2,
+	kImageElevatorDummy3,
+	kImageElevatorDummy4,
 	// file 4
-	kShipSpaceBackground,
-	kShipSpaceRope,
-	kShipSpaceDummy1,
-	kShipSpaceDummy2,
+	kImageShipSpaceBackground,
+	kImageShipSpaceRope,
+	kImageShipSpaceDummy1,
+	kImageShipSpaceDummy2,
 	// file 5
-	kBusStationBackground,
-	kBusStationArrived,
-	kBusStationPlantAnimation1,
-	kBusStationPlantAnimation2,
-	kBusStationPlantAnimation3,
-	kBusStationPlantAnimation4,
-	kBusStationPlantAnimation5,
-	kBusStationPlantAnimation6,
-	kBusStationPlantAnimation7,
-	kBusStationDoorOpened,
+	kImageBusStationBackground,
+	kImageBusStationArrived,
+	kImageBusStationPlantAnimation1,
+	kImageBusStationPlantAnimation2,
+	kImageBusStationPlantAnimation3,
+	kImageBusStationPlantAnimation4,
+	kImageBusStationPlantAnimation5,
+	kImageBusStationPlantAnimation6,
+	kImageBusStationPlantAnimation7,
+	kImageBusStationDoorOpened,
 	// file 6
-	kOfficesBackground,
-	kOfficesDoorOpenTopLeft,
-	kOfficesDoorOpenBottomLeft,
-	kOfficesDoorOpenTopRight,
-	kOfficesDoorOpenBottomRight,
-	kOfficesAlienCorridorAnimation1,
-	kOfficesAlienCorridorAnimation2,
-	kOfficesAlienCorridorAnimation3,
-	kOfficesAlienCorridorAnimation4,
-	kOfficesAlienCorridorAnimation5,
-	kOfficesAlienCorridorAnimation6,
-	kOfficesAlienTopOfficeAnimation1,
-	kOfficesAlienTopOfficeAnimation2,
-	kOfficesAlienTopOfficeAnimation3,
-	kOfficesAlienTopOfficeAnimation4,
-	kOfficesAlienTopOfficeAnimation5,
-	kOfficesAlienBottomOfficeAnimation1,
-	kOfficesAlienBottomOfficeAnimation2,
-	kOfficesAlienBottomOfficeAnimation3,
-	kOfficesAlienBottomOfficeAnimation4,
-	kOfficesAlienBottomOfficeAnimation5,
-	kOfficesAlienBottom,
+	kImageOfficesBackground,
+	kImageOfficesDoorOpenTopLeft,
+	kImageOfficesDoorOpenBottomLeft,
+	kImageOfficesDoorOpenTopRight,
+	kImageOfficesDoorOpenBottomRight,
+	kImageOfficesAlienCorridorAnimation1,
+	kImageOfficesAlienCorridorAnimation2,
+	kImageOfficesAlienCorridorAnimation3,
+	kImageOfficesAlienCorridorAnimation4,
+	kImageOfficesAlienCorridorAnimation5,
+	kImageOfficesAlienCorridorAnimation6,
+	kImageOfficesAlienTopOfficeAnimation1,
+	kImageOfficesAlienTopOfficeAnimation2,
+	kImageOfficesAlienTopOfficeAnimation3,
+	kImageOfficesAlienTopOfficeAnimation4,
+	kImageOfficesAlienTopOfficeAnimation5,
+	kImageOfficesAlienBottomOfficeAnimation1,
+	kImageOfficesAlienBottomOfficeAnimation2,
+	kImageOfficesAlienBottomOfficeAnimation3,
+	kImageOfficesAlienBottomOfficeAnimation4,
+	kImageOfficesAlienBottomOfficeAnimation5,
+	kImageOfficesAlienBottom,
 	// file 7
-	kOfficeLeftBackground,
-	kOfficeLeftDecoration,
-	kOfficeLeftMemo,
-	kOfficeLeftGraffiti,
-	kOfficeLeftTerminalSmashed,
-	kOfficeLeftDrawerMoney,
-	kOfficeLeftSafeOpen,
-	kOfficeLeftSafeClosed,
-	kOfficeLeftSafeMoney,
-	kOfficeLeftDoorOpen,
-	kOfficeLeftAlienShootAnimation1,
-	kOfficeLeftAlienShootAnimation2,
-	kOfficeLeftAlienShootAnimation3,
-	kOfficeLeftAlienShootAnimation4,
-	kOfficeLeftAlienShootAnimation5,
-	kOfficeLeftAlienShootAnimation6,
-	kOfficeLeftTerminalText,
-	kOfficeLeftDoorClosed,
-	kOfficeLeftDummy1,
-	kOfficeLeftDummy2,
-	kOfficeLeftDummy3,
-	kOfficeLeftDummy4,
-	kOfficeLeftDummy5,
+	kImageOfficeLeftBackground,
+	kImageOfficeLeftDecoration,
+	kImageOfficeLeftMemo,
+	kImageOfficeLeftGraffiti,
+	kImageOfficeLeftTerminalSmashed,
+	kImageOfficeLeftDrawerMoney,
+	kImageOfficeLeftSafeOpen,
+	kImageOfficeLeftSafeClosed,
+	kImageOfficeLeftSafeMoney,
+	kImageOfficeLeftDoorOpen,
+	kImageOfficeLeftAlienShootAnimation1,
+	kImageOfficeLeftAlienShootAnimation2,
+	kImageOfficeLeftAlienShootAnimation3,
+	kImageOfficeLeftAlienShootAnimation4,
+	kImageOfficeLeftAlienShootAnimation5,
+	kImageOfficeLeftAlienShootAnimation6,
+	kImageOfficeLeftTerminalText,
+	kImageOfficeLeftDoorClosed,
+	kImageOfficeLeftDummy1,
+	kImageOfficeLeftDummy2,
+	kImageOfficeLeftDummy3,
+	kImageOfficeLeftDummy4,
+	kImageOfficeLeftDummy5,
 	// file 8
-	kOfficeRightBackground,
-	kOfficeRightDecorationPictures,
-	kOfficeRightDecorationPlants,
-	kOfficeRightDoorOpen,
-	kOfficeRightTerminalSmashed,
-	kOfficeRightAlienShootAnimation1,
-	kOfficeRightAlienShootAnimation2,
-	kOfficeRightAlienShootAnimation3,
-	kOfficeRightAlienTalking,
-	kOfficeRightDummy1,
-	kOfficeRightDummy2,
-	kOfficeRightDummy3,
-	kOfficeRightDummy4,
+	kImageOfficeRightBackground,
+	kImageOfficeRightDecorationPictures,
+	kImageOfficeRightDecorationPlants,
+	kImageOfficeRightDoorOpen,
+	kImageOfficeRightTerminalSmashed,
+	kImageOfficeRightAlienShootAnimation1,
+	kImageOfficeRightAlienShootAnimation2,
+	kImageOfficeRightAlienShootAnimation3,
+	kImageOfficeRightAlienTalking,
+	kImageOfficeRightDummy1,
+	kImageOfficeRightDummy2,
+	kImageOfficeRightDummy3,
+	kImageOfficeRightDummy4,
 	// file 9
-	kShipCockpitBackground,
-	kShipCockpitPilotAnimation1,
-	kShipCockpitPilotAnimation2,
-	kShipCockpitPilotAnimation3,
-	kShipCockpitPilotAnimation4,
-	kShipCockpitPilotAnimation5,
-	kShipCockpitPilotAnimation6,
-	kShipCockpitPilotAnimation7,
-	kShipCockpitPilotAnimation8,
-	kShipCockpitPilotAnimation9,
-	kShipCockpitPilotAnimation10,
-	kShipCockpitPilotAnimation11,
-	kShipCockpitPilotAnimation12,
-	kShipCockpitPilotAnimation13,
-	kShipCockpitPilotAnimation14,
-	kShipCockpitPilotAnimation15,
-	kShipCockpitPilotAnimation16,
-	kShipCockpitPilotAnimation17,
-	kShipCockpitPilotAnimation18,
-	kShipCockpitPilotAnimation19,
-	kShipCockpitPilotAnimation20,
-	kShipCockpitDisplayStatusAnimation1,
-	kShipCockpitDisplayStatusAnimation2,
-	kShipCockpitWindowRocks,
+	kImageShipCockpitBackground,
+	kImageShipCockpitPilotAnimation1,
+	kImageShipCockpitPilotAnimation2,
+	kImageShipCockpitPilotAnimation3,
+	kImageShipCockpitPilotAnimation4,
+	kImageShipCockpitPilotAnimation5,
+	kImageShipCockpitPilotAnimation6,
+	kImageShipCockpitPilotAnimation7,
+	kImageShipCockpitPilotAnimation8,
+	kImageShipCockpitPilotAnimation9,
+	kImageShipCockpitPilotAnimation10,
+	kImageShipCockpitPilotAnimation11,
+	kImageShipCockpitPilotAnimation12,
+	kImageShipCockpitPilotAnimation13,
+	kImageShipCockpitPilotAnimation14,
+	kImageShipCockpitPilotAnimation15,
+	kImageShipCockpitPilotAnimation16,
+	kImageShipCockpitPilotAnimation17,
+	kImageShipCockpitPilotAnimation18,
+	kImageShipCockpitPilotAnimation19,
+	kImageShipCockpitPilotAnimation20,
+	kImageShipCockpitDisplayStatusAnimation1,
+	kImageShipCockpitDisplayStatusAnimation2,
+	kImageShipCockpitWindowRocks,
 	// file 10
-	kRestaurantEntranceBackground,
-	kRestaurantEntrancePorterAnimation1,
-	kRestaurantEntrancePorterAnimation2,
-	kRestaurantEntrancePorterAnimation3,
-	kRestaurantEntrancePorterAnimation4,
-	kRestaurantEntranceBathroomDoorAnimation1,
-	kRestaurantEntranceBathroomDoorAnimation2,
-	kRestaurantEntranceBathroomDoorAnimation3,
-	kRestaurantEntranceBathroomDoorAnimation4,
-	kRestaurantEntranceBathroomDoorAnimation5,
-	kRestaurantEntranceGreenCandy,
-	kRestaurantEntranceBlueCandy,
-	kRestaurantEntrancePinkCandy,
-	kRestaurantEntranceWhiteCandy,
-	kRestaurantEntranceBlackCandy,
-	kRestaurantEntraceDummy1,
-	kRestaurantEntraceDummy2,
+	kImageRestaurantEntranceBackground,
+	kImageRestaurantEntrancePorterAnimation1,
+	kImageRestaurantEntrancePorterAnimation2,
+	kImageRestaurantEntrancePorterAnimation3,
+	kImageRestaurantEntrancePorterAnimation4,
+	kImageRestaurantEntranceBathroomDoorAnimation1,
+	kImageRestaurantEntranceBathroomDoorAnimation2,
+	kImageRestaurantEntranceBathroomDoorAnimation3,
+	kImageRestaurantEntranceBathroomDoorAnimation4,
+	kImageRestaurantEntranceBathroomDoorAnimation5,
+	kImageRestaurantEntranceGreenCandy,
+	kImageRestaurantEntranceBlueCandy,
+	kImageRestaurantEntrancePinkCandy,
+	kImageRestaurantEntranceWhiteCandy,
+	kImageRestaurantEntranceBlackCandy,
+	kImageRestaurantEntraceDummy1,
+	kImageRestaurantEntraceDummy2,
 	// file 11
-	kDeathScreen,
+	kImageDeathScreen,
 	// file 12
-	kRocksBackground,
-	kRocksRockAnimation1,
-	kRocksRockAnimation2,
-	kRocksRockAnimation3,
+	kImageRocksBackground,
+	kImageRocksRockAnimation1,
+	kImageRocksRockAnimation2,
+	kImageRocksRockAnimation3,
 	// file 13
-	kBluePlanetBackground,
-	kBluePlanetShipAnimation1,
-	kBluePlanetShipAnimation2,
-	kBluePlanetShipAnimation3,
-	kBluePlanetShipAnimation4,
-	kBluePlanetShipAnimation5,
-	kBluePlanetShipAnimation6,
-	kBluePlanetShipAnimation7,
-	kBluePlanetShipAnimation8,
-	kBluePlanetShipAnimation9,
-	kBluePlanetShipAnimation10,
-	kBluePlanetShipAnimation11,
-	kBluePlanetShipAnimation12,
-	kBluePlanetShipAnimation13,
+	kImageBluePlanetBackground,
+	kImageBluePlanetShipAnimation1,
+	kImageBluePlanetShipAnimation2,
+	kImageBluePlanetShipAnimation3,
+	kImageBluePlanetShipAnimation4,
+	kImageBluePlanetShipAnimation5,
+	kImageBluePlanetShipAnimation6,
+	kImageBluePlanetShipAnimation7,
+	kImageBluePlanetShipAnimation8,
+	kImageBluePlanetShipAnimation9,
+	kImageBluePlanetShipAnimation10,
+	kImageBluePlanetShipAnimation11,
+	kImageBluePlanetShipAnimation12,
+	kImageBluePlanetShipAnimation13,
 	// file 14
-	kRogerCrashBackground,
-	kRogerCrashAnimation1,
-	kRogerCrashAnimation2,
-	kRogerCrashAnimation3,
-	kRogerCrashAnimation4,
-	kRogerCrashAnimation5,
-	kRogerCrashAnimation6,
-	kRogerCrashAnimation7,
-	kRogerCrashAnimation8,
-	kRogerCrashAnimation9,
-	kRogerCrashAnimation10,
-	kRogerCrashAnimation11,
-	kRogerCrashAnimation12,
-	kRogerCrashAnimation13,
-	kRogerCrashAnimation14,
-	kRogerCrashAnimation15,
-	kRogerCrashAnimation16,
-	kRogerCrashAnimation17,
-	kRogerCrashAnimation18,
-	kRogerCrashAnimation19,
+	kImageRogerCrashBackground,
+	kImageRogerCrashAnimation1,
+	kImageRogerCrashAnimation2,
+	kImageRogerCrashAnimation3,
+	kImageRogerCrashAnimation4,
+	kImageRogerCrashAnimation5,
+	kImageRogerCrashAnimation6,
+	kImageRogerCrashAnimation7,
+	kImageRogerCrashAnimation8,
+	kImageRogerCrashAnimation9,
+	kImageRogerCrashAnimation10,
+	kImageRogerCrashAnimation11,
+	kImageRogerCrashAnimation12,
+	kImageRogerCrashAnimation13,
+	kImageRogerCrashAnimation14,
+	kImageRogerCrashAnimation15,
+	kImageRogerCrashAnimation16,
+	kImageRogerCrashAnimation17,
+	kImageRogerCrashAnimation18,
+	kImageRogerCrashAnimation19,
 	// file 15
-	kShipCorridorBackground,
-	kShipCorridorCockpitDoorOpen,
-	kShipCorridorSleepCabinDoorAnimation1,
-	kShipCorridorSleepCabinDoorAnimation2,
-	kShipCorridorSleepCabinDoorAnimation3,
-	kShipCorridorDummy1,
+	kImageShipCorridorBackground,
+	kImageShipCorridorCockpitDoorOpen,
+	kImageShipCorridorSleepCabinDoorAnimation1,
+	kImageShipCorridorSleepCabinDoorAnimation2,
+	kImageShipCorridorSleepCabinDoorAnimation3,
+	kImageShipCorridorDummy1,
 	// file 16
-	kAxacussCorridorTileWalled,
-	kAxacussCorridorToLeft,
-	kAxacussCorridorToRight,
-	kAxacussCorridorToTop,
-	kAxacussCorridorToBottom,
-	kAxacussCorridorTile,
-	kAxacussCorridorDoorClosed,
-	kAxacussCorridorDoorOpen,
-	kAxacussCorridorDesk,
-	kAxacussCorridorLaptop,
-	kAxacussCorridorStuff10,
-	kAxacussCorridorStuff11,
-	kAxacussCorridorStuff12,
-	kAxacussCorridorStuff13,
-	kAxacussCorridorStuff14,
-	kAxacussCorridorStuff15,
-	kAxacussCorridorStuff16,
-	kAxacussCorridorStuff17,
-	kAxacussCorridorStuff18,
-	kAxacussCorridorStuff19,
-	kAxacussCorridorStuff21,
-	kAxacussCorridorStuff22,
-	kAxacussCorridorStuff23,
-	kAxacussCorridorStuff24,
-	kAxacussCorridorStuff25,
-	kAxacussCorridorStuff26,
-	kAxacussCorridorStuff27,
-	kAxacussCorridorStuff28,
-	kAxacussCorridorAlarmStatus,
-	kAxacussCorridorAlienRight,
-	kAxacussCorridorAlienLeft,
-	kAxacussCorridorAlienBottom,
-	kAxacussCorridorAlienTop,
-	kAxacussCorridorDummy1,
+	kImageAxacussCorridorTileWalled,
+	kImageAxacussCorridorToLeft,
+	kImageAxacussCorridorToRight,
+	kImageAxacussCorridorToTop,
+	kImageAxacussCorridorToBottom,
+	kImageAxacussCorridorTile,
+	kImageAxacussCorridorDoorClosed,
+	kImageAxacussCorridorDoorOpen,
+	kImageAxacussCorridorDesk,
+	kImageAxacussCorridorLaptop,
+	kImageAxacussCorridorStuff10,
+	kImageAxacussCorridorStuff11,
+	kImageAxacussCorridorStuff12,
+	kImageAxacussCorridorStuff13,
+	kImageAxacussCorridorStuff14,
+	kImageAxacussCorridorStuff15,
+	kImageAxacussCorridorStuff16,
+	kImageAxacussCorridorStuff17,
+	kImageAxacussCorridorStuff18,
+	kImageAxacussCorridorStuff19,
+	kImageAxacussCorridorStuff21,
+	kImageAxacussCorridorStuff22,
+	kImageAxacussCorridorStuff23,
+	kImageAxacussCorridorStuff24,
+	kImageAxacussCorridorStuff25,
+	kImageAxacussCorridorStuff26,
+	kImageAxacussCorridorStuff27,
+	kImageAxacussCorridorStuff28,
+	kImageAxacussCorridorAlarmStatus,
+	kImageAxacussCorridorAlienRight,
+	kImageAxacussCorridorAlienLeft,
+	kImageAxacussCorridorAlienBottom,
+	kImageAxacussCorridorAlienTop,
+	kImageAxacussCorridorDummy1,
 	// file 17
-	kShipCorridorCabinBackground,
-	kShipCorridorCabinL1Open,
-	kShipCorridorCabinL2Open,
-	kShipCorridorCabinL3Open,
-	kShipCorridorCabinR1Open,
-	kShipCorridorCabinR2Open,
-	kShipCorridorCabinR3Open,
-	kShipCorridorCabinAirlockDoorAnimation1,
-	kShipCorridorCabinAirlockDoorAnimation2,
-	kShipCorridorCabinAirlockDoorAnimation3,
-	kShipCorridorCabinDummy1,
-	kShipCorridorCabinDummy2,
-	kShipCorridorCabinDummy3,
-	kShipCorridorCabinDummy4,
-	kShipCorridorCabinDummy5,
-	kShipCorridorCabinDummy6,
+	kImageShipCorridorCabinBackground,
+	kImageShipCorridorCabinL1Open,
+	kImageShipCorridorCabinL2Open,
+	kImageShipCorridorCabinL3Open,
+	kImageShipCorridorCabinR1Open,
+	kImageShipCorridorCabinR2Open,
+	kImageShipCorridorCabinR3Open,
+	kImageShipCorridorCabinAirlockDoorAnimation1,
+	kImageShipCorridorCabinAirlockDoorAnimation2,
+	kImageShipCorridorCabinAirlockDoorAnimation3,
+	kImageShipCorridorCabinDummy1,
+	kImageShipCorridorCabinDummy2,
+	kImageShipCorridorCabinDummy3,
+	kImageShipCorridorCabinDummy4,
+	kImageShipCorridorCabinDummy5,
+	kImageShipCorridorCabinDummy6,
 	// file 18
-	kShipGeneratorBackground,
-	kShipGeneratorHatchOpen,
-	kShipGeneratorJunctionBoxOpen,
-	kShipGeneratorJunctionBoxOffline,
-	kShipGeneratorJunctionBoxDisplay,
-	kShipGeneratorKeycard,
-	kShipGeneratorSpoolFloating,
-	kShipGeneratorSpoolOnGround,
-	kShipGeneratorCableUnplugged,
-	kShipGeneratorCablePluggedIn,
-	kShipGeneratorHatchRocks,
-	kShipGeneratorRopeRocks,
-	kShipGeneratorRopeSpace,
-	kShipGeneratorRopeFloor,
-	kShipGeneratorDummy1,
-	kShipGeneratorDummy2,
-	kShipGeneratorDummy3,
-	kShipGeneratorDummy4,
-	kShipGeneratorDummy5,
-	kShipGeneratorDummy6,
-	kShipGeneratorDummy7,
-	kShipGeneratorDummy8,
+	kImageShipGeneratorBackground,
+	kImageShipGeneratorHatchOpen,
+	kImageShipGeneratorJunctionBoxOpen,
+	kImageShipGeneratorJunctionBoxOffline,
+	kImageShipGeneratorJunctionBoxDisplay,
+	kImageShipGeneratorKeycard,
+	kImageShipGeneratorSpoolFloating,
+	kImageShipGeneratorSpoolOnGround,
+	kImageShipGeneratorCableUnplugged,
+	kImageShipGeneratorCablePluggedIn,
+	kImageShipGeneratorHatchRocks,
+	kImageShipGeneratorRopeRocks,
+	kImageShipGeneratorRopeSpace,
+	kImageShipGeneratorRopeFloor,
+	kImageShipGeneratorDummy1,
+	kImageShipGeneratorDummy2,
+	kImageShipGeneratorDummy3,
+	kImageShipGeneratorDummy4,
+	kImageShipGeneratorDummy5,
+	kImageShipGeneratorDummy6,
+	kImageShipGeneratorDummy7,
+	kImageShipGeneratorDummy8,
 	// file 19
-	kRogerShipBackground,
-	kRogerShipButtonPressed1,
-	kRogerShipButtonPressed2,
-	kRogerShipButtonPressed3,
-	kRogerShipButtonPressed4,
-	kRogerShipCardInSlot,
-	kRogerShipCompartmentOpen,
-	kRogerShipUnknown7,
-	kRogerShipDisplayLeftOn,
-	kRogerShipGreenDisplayAnimation1,
-	kRogerShipGreenDisplayAnimation2,
-	kRogerShipGreenDisplayAnimation3,
-	kRogerShipGreenDisplayAnimation4,
-	kRogerShipGreenDisplayAnimation5,
-	kRogerShipGreenDisplayAnimation6,
-	kRogerShipGreenDisplayAnimation7,
-	kRogerShipBlueDisplayAnimation1,
-	kRogerShipBlueDisplayAnimation2,
-	kRogerShipBlueDisplayAnimation3,
-	kRogerShipBlueDisplayAnimation4,
-	kRogerShipBlueDisplayAnimation5,
-	kRogerShipBlueDisplayAnimation6,
-	kRogerShipBlueDisplayAnimation7,
-	kRogerShipUnknown23,
-	kRogerShipDisplaySinewaveAnimation1,
-	kRogerShipDisplaySinewaveAnimation2,
-	kRogerShipDisplaySinewaveAnimation3,
-	kRogerShipDisplaySinewaveAnimation4,
-	kRogerShipDisplaySinewaveAnimation5,
-	kRogerShipDisplaySinewaveAnimation6,
-	kRogerShipDisplaySinewaveAnimation7,
-	kRogerShipDisplaySinewaveAnimation8,
-	kRogerShipDisplaySinewaveAnimation9,
-	kRogerShipDisplaySinewaveAnimation10,
-	kRogerShipDisplaySinewaveAnimation11,
-	kRogerShipDisplaySinewaveAnimation12,
-	kRogerShipDisplaySinewaveAnimation13,
-	kRogerShipDisplaySinewaveAnimation14,
-	kRogerShipCompartmentContent,
-	kRogerShipDummy1,
-	kRogerShipDummy2,
+	kImageRogerShipBackground,
+	kImageRogerShipButtonPressed1,
+	kImageRogerShipButtonPressed2,
+	kImageRogerShipButtonPressed3,
+	kImageRogerShipButtonPressed4,
+	kImageRogerShipCardInSlot,
+	kImageRogerShipCompartmentOpen,
+	kImageRogerShipUnknown7,
+	kImageRogerShipDisplayLeftOn,
+	kImageRogerShipGreenDisplayAnimation1,
+	kImageRogerShipGreenDisplayAnimation2,
+	kImageRogerShipGreenDisplayAnimation3,
+	kImageRogerShipGreenDisplayAnimation4,
+	kImageRogerShipGreenDisplayAnimation5,
+	kImageRogerShipGreenDisplayAnimation6,
+	kImageRogerShipGreenDisplayAnimation7,
+	kImageRogerShipBlueDisplayAnimation1,
+	kImageRogerShipBlueDisplayAnimation2,
+	kImageRogerShipBlueDisplayAnimation3,
+	kImageRogerShipBlueDisplayAnimation4,
+	kImageRogerShipBlueDisplayAnimation5,
+	kImageRogerShipBlueDisplayAnimation6,
+	kImageRogerShipBlueDisplayAnimation7,
+	kImageRogerShipUnknown23,
+	kImageRogerShipDisplaySinewaveAnimation1,
+	kImageRogerShipDisplaySinewaveAnimation2,
+	kImageRogerShipDisplaySinewaveAnimation3,
+	kImageRogerShipDisplaySinewaveAnimation4,
+	kImageRogerShipDisplaySinewaveAnimation5,
+	kImageRogerShipDisplaySinewaveAnimation6,
+	kImageRogerShipDisplaySinewaveAnimation7,
+	kImageRogerShipDisplaySinewaveAnimation8,
+	kImageRogerShipDisplaySinewaveAnimation9,
+	kImageRogerShipDisplaySinewaveAnimation10,
+	kImageRogerShipDisplaySinewaveAnimation11,
+	kImageRogerShipDisplaySinewaveAnimation12,
+	kImageRogerShipDisplaySinewaveAnimation13,
+	kImageRogerShipDisplaySinewaveAnimation14,
+	kImageRogerShipCompartmentContent,
+	kImageRogerShipDummy1,
+	kImageRogerShipDummy2,
 	// file 20
-	kHelpScreen,
+	kImageHelpScreen,
 	// file 21
-	kShipCabinLeftBackground,
-	kShipCabinLeftPaintingSunset,
-	kShipCabinLeftPaintingLandscape,
-	kShipCabinLeftPaintingAbstract,
-	kShipCabinLeftTableStuff1,
-	kShipCabinLeftCeilingPencil,
-	kShipCabinLeft3Decoration,
-	kShipCabinLeftSocketPluggedIn,
-	kShipCabinLeftVinyl,
-	kShipCabinLeftTurntable,
-	kShipCabinLeftSocketUnplugged,
-	kShipCabinLeftTurntableCableCut,
-	kShipCabinLeftTurntableCable,
-	kShipCabinLeftTurntableAnimation1,
-	kShipCabinLeftTurntableAnimation2,
-	kShipCabinLeftTurntableAnimation3,
-	kShipCabinLeftTableStuff2,
-	kShipCabinLeftLockerOpen,
-	kShipCabinLeftLockerBooksOpen,
-	kShipCabinLeftLockerSpoolOpen,
-	kShipCabinLeftLockerPistolRemoved,
-	kShipCabinLeftLockerSpoolRemoved,
-	kShipCabinLeftBedSafeOpen,
-	kShipCabinLeftBedSafeEmpty,
-	kShipCabinLeftDoorClosed,
-	kShipCabinLeftTurntableCableSparks,
-	kShipCabinLeftTurntableCableCutEnd,
-	kShipCabinLeftDummy1,
-	kShipCabinLeftDummy2,
-	kShipCabinLeftDummy3,
-	kShipCabinLeftDummy4,
-	kShipCabinLeftDummy5,
-	kShipCabinLeftDummy6,
-	kShipCabinLeftDummy7,
-	kShipCabinLeftDummy8,
-	kShipCabinLeftDummy9,
-	kShipCabinLeftDummy10,
-	kShipCabinLeftDummy11,
-	kShipCabinLeftDummy12,
+	kImageShipCabinLeftBackground,
+	kImageShipCabinLeftPaintingSunset,
+	kImageShipCabinLeftPaintingLandscape,
+	kImageShipCabinLeftPaintingAbstract,
+	kImageShipCabinLeftTableStuff1,
+	kImageShipCabinLeftCeilingPencil,
+	kImageShipCabinLeft3Decoration,
+	kImageShipCabinLeftSocketPluggedIn,
+	kImageShipCabinLeftVinyl,
+	kImageShipCabinLeftTurntable,
+	kImageShipCabinLeftSocketUnplugged,
+	kImageShipCabinLeftTurntableCableCut,
+	kImageShipCabinLeftTurntableCable,
+	kImageShipCabinLeftTurntableAnimation1,
+	kImageShipCabinLeftTurntableAnimation2,
+	kImageShipCabinLeftTurntableAnimation3,
+	kImageShipCabinLeftTableStuff2,
+	kImageShipCabinLeftLockerOpen,
+	kImageShipCabinLeftLockerBooksOpen,
+	kImageShipCabinLeftLockerSpoolOpen,
+	kImageShipCabinLeftLockerPistolRemoved,
+	kImageShipCabinLeftLockerSpoolRemoved,
+	kImageShipCabinLeftBedSafeOpen,
+	kImageShipCabinLeftBedSafeEmpty,
+	kImageShipCabinLeftDoorClosed,
+	kImageShipCabinLeftTurntableCableSparks,
+	kImageShipCabinLeftTurntableCableCutEnd,
+	kImageShipCabinLeftDummy1,
+	kImageShipCabinLeftDummy2,
+	kImageShipCabinLeftDummy3,
+	kImageShipCabinLeftDummy4,
+	kImageShipCabinLeftDummy5,
+	kImageShipCabinLeftDummy6,
+	kImageShipCabinLeftDummy7,
+	kImageShipCabinLeftDummy8,
+	kImageShipCabinLeftDummy9,
+	kImageShipCabinLeftDummy10,
+	kImageShipCabinLeftDummy11,
+	kImageShipCabinLeftDummy12,
 	// file 22
-	kShipCabinRightBackground,
-	kShipCabinRightPosterSnowman,
-	kShipCabinRightTableStuff,
-	kShipCabinRightCeilingChess,
-	kShipCabinRightTennisRacket,
-	kShipCabinRightTennisBallsFloating,
-	kShipCabinRightTennisBallsOnGround,
-	kShipCabinRightTableChess,
-	kShipCabinRight2Bed,
-	kShipCabinRightLockerBooksOpen,
-	kShipCabinRightLockerRopeOpen,
-	kShipCabinRightLockerOpen,
-	kShipCabinRightLockerRopeRemoved,
-	kShipCabinRightBedSafeOpen,
-	kShipCabinRightBedSafeEmpty,
-	kShipCabinRightDoorClosed,
-	kShipCabinRightLockerDiscmanRemoved,
-	kShipCabinRightDummy1,
-	kShipCabinRightDummy2,
+	kImageShipCabinRightBackground,
+	kImageShipCabinRightPosterSnowman,
+	kImageShipCabinRightTableStuff,
+	kImageShipCabinRightCeilingChess,
+	kImageShipCabinRightTennisRacket,
+	kImageShipCabinRightTennisBallsFloating,
+	kImageShipCabinRightTennisBallsOnGround,
+	kImageShipCabinRightTableChess,
+	kImageShipCabinRight2Bed,
+	kImageShipCabinRightLockerBooksOpen,
+	kImageShipCabinRightLockerRopeOpen,
+	kImageShipCabinRightLockerOpen,
+	kImageShipCabinRightLockerRopeRemoved,
+	kImageShipCabinRightBedSafeOpen,
+	kImageShipCabinRightBedSafeEmpty,
+	kImageShipCabinRightDoorClosed,
+	kImageShipCabinRightLockerDiscmanRemoved,
+	kImageShipCabinRightDummy1,
+	kImageShipCabinRightDummy2,
 	// file 23
-	kShipBathroomBackground,
+	kImageShipBathroomBackground,
 	// file 24
-	kShipHoldBackgroundFloating,
-	kShipHoldBackgroundOnGround,
-	kShipHoldLandingModuleDoorOpen,
-	kShipHoldGeneratorHatchOpen,
-	kShipHoldLandingModuleSpool,
-	kShipHoldCableToGeneratorUnplugged,
-	kShipHoldCableToGeneratorPluggedIn,
-	kShipHoldDummy1,
-	kShipHoldDummy2,
+	kImageShipHoldBackgroundFloating,
+	kImageShipHoldBackgroundOnGround,
+	kImageShipHoldLandingModuleDoorOpen,
+	kImageShipHoldGeneratorHatchOpen,
+	kImageShipHoldLandingModuleSpool,
+	kImageShipHoldCableToGeneratorUnplugged,
+	kImageShipHoldCableToGeneratorPluggedIn,
+	kImageShipHoldDummy1,
+	kImageShipHoldDummy2,
 	// file 25
-	kShipLandingModuleBackground,
-	kShipLandingModuleDoorClosed,
-	kShipLandingModuleDisplayLeftOn,
-	kShipLandingModuleCablePluggedIn,
-	kShipLandingModuleCableSpoolConnected,
-	kShipLandingModuleCableToHold,
-	kShipLandingModuleDisplayRightOn,
-	kShipLandingModuleDisplayTop1On,
-	kShipLandingModuleDisplayTop2On,
-	kShipLandingModuleDisplayTop3On,
-	kShipLandingModuleCableWithTerminalStrip,
-	kShipLandingModuleDummy1,
-	kShipLandingModuleDummy2,
-	kShipLandingModuleDummy3,
-	kShipLandingModuleDummy4,
-	kShipLandingModuleDummy5,
-	kShipLandingModuleDummy6,
-	kShipLandingModuleDummy7,
-	kShipLandingModuleDummy8,
+	kImageShipLandingModuleBackground,
+	kImageShipLandingModuleDoorClosed,
+	kImageShipLandingModuleDisplayLeftOn,
+	kImageShipLandingModuleCablePluggedIn,
+	kImageShipLandingModuleCableSpoolConnected,
+	kImageShipLandingModuleCableToHold,
+	kImageShipLandingModuleDisplayRightOn,
+	kImageShipLandingModuleDisplayTop1On,
+	kImageShipLandingModuleDisplayTop2On,
+	kImageShipLandingModuleDisplayTop3On,
+	kImageShipLandingModuleCableWithTerminalStrip,
+	kImageShipLandingModuleDummy1,
+	kImageShipLandingModuleDummy2,
+	kImageShipLandingModuleDummy3,
+	kImageShipLandingModuleDummy4,
+	kImageShipLandingModuleDummy5,
+	kImageShipLandingModuleDummy6,
+	kImageShipLandingModuleDummy7,
+	kImageShipLandingModuleDummy8,
 	// file 26
-	kArsanoStar,
+	kImageArsanoStar,
 	// file 27
-	kSaveLoadScreen,
+	kImageSaveLoadScreen,
 	// file 28
-	kRestaurantBackground,
-	kRestaurantAnimation1,
-	kRestaurantAnimation2,
-	kRestaurantAnimation3,
-	kRestaurantAnimation4,
-	kRestaurantAnimation5,
-	kRestaurantAnimation6,
-	kRestaurantAnimation7,
-	kRestaurantAnimation8,
-	kRestaurantAnimation9,
-	kRestaurantAnimation10,
-	kRestaurantAnimation11,
-	kRestaurantAnimation12,
-	kRestaurantAnimation13,
-	kRestaurantAnimation14,
-	kRestaurantAnimation15,
-	kRestaurantAnimation16,
-	kRestaurantAnimation17,
-	kRestaurantAnimation18,
-	kRestaurantAnimation19,
-	kRestaurantAnimation20,
-	kRestaurantAnimation21,
-	kRestaurantAnimation22,
+	kImageRestaurantBackground,
+	kImageRestaurantAnimation1,
+	kImageRestaurantAnimation2,
+	kImageRestaurantAnimation3,
+	kImageRestaurantAnimation4,
+	kImageRestaurantAnimation5,
+	kImageRestaurantAnimation6,
+	kImageRestaurantAnimation7,
+	kImageRestaurantAnimation8,
+	kImageRestaurantAnimation9,
+	kImageRestaurantAnimation10,
+	kImageRestaurantAnimation11,
+	kImageRestaurantAnimation12,
+	kImageRestaurantAnimation13,
+	kImageRestaurantAnimation14,
+	kImageRestaurantAnimation15,
+	kImageRestaurantAnimation16,
+	kImageRestaurantAnimation17,
+	kImageRestaurantAnimation18,
+	kImageRestaurantAnimation19,
+	kImageRestaurantAnimation20,
+	kImageRestaurantAnimation21,
+	kImageRestaurantAnimation22,
 	// file 29
-	kRestaurantRogerBackground,
-	kRestaurantRogerEyes1Closed,
-	kRestaurantRogerMouthOpen,
-	kRestaurantRogerPlayingChess,
-	kRestaurantRogerWalletRemoved,
-	kRestaurantRogerHandAnimation1,
-	kRestaurantRogerHandAnimation2,
-	kRestaurantRogerHandAnimation3,
-	kRestaurantRogerHandAnimation4,
-	kRestaurantRogerHandAnimation5,
-	kRestaurantRogerEyes2Closed,
-	kRestaurantRogerChessBoard,
-	kRestaurantRogerEyes2Open,
-	kRestaurantRogerDummy1,
+	kImageRestaurantRogerBackground,
+	kImageRestaurantRogerEyes1Closed,
+	kImageRestaurantRogerMouthOpen,
+	kImageRestaurantRogerPlayingChess,
+	kImageRestaurantRogerWalletRemoved,
+	kImageRestaurantRogerHandAnimation1,
+	kImageRestaurantRogerHandAnimation2,
+	kImageRestaurantRogerHandAnimation3,
+	kImageRestaurantRogerHandAnimation4,
+	kImageRestaurantRogerHandAnimation5,
+	kImageRestaurantRogerEyes2Closed,
+	kImageRestaurantRogerChessBoard,
+	kImageRestaurantRogerEyes2Open,
+	kImageRestaurantRogerDummy1,
 	// file 30
-	kRogerOutsideBackground,
-	kRogerOutsideMouthOpen,
+	kImageRogerOutsideBackground,
+	kImageRogerOutsideMouthOpen,
 	// file 31
-	kIntroScreenBackground,
-	kIntroScreenShipAnimation1,
-	kIntroScreenShipAnimation2,
-	kIntroScreenShipAnimation3,
-	kIntroScreenShipAnimation4,
-	kIntroScreenShipAnimation5,
-	kIntroScreenShipAnimation6,
+	kImageIntroScreenBackground,
+	kImageIntroScreenShipAnimation1,
+	kImageIntroScreenShipAnimation2,
+	kImageIntroScreenShipAnimation3,
+	kImageIntroScreenShipAnimation4,
+	kImageIntroScreenShipAnimation5,
+	kImageIntroScreenShipAnimation6,
 	// file 32
-	kBusStationSignBackground,
-	kBusStationSignPrice,
-	kBusStationSignPleaseWait,
-	kBusStationSignPleasantFlight,
+	kImageBusStationSignBackground,
+	kImageBusStationSignPrice,
+	kImageBusStationSignPleaseWait,
+	kImageBusStationSignPleasantFlight,
 	// file 33
-	kShipSleepCabinBackground,
-	kShipSleepCabinTerminalWarning,
-	kShipSleepCabinTerminal1,
-	kShipSleepCabinTerminal2,
-	kShipSleepCabinStatusLight,
-	kShipSleepCabinTerminal3,
+	kImageShipSleepCabinBackground,
+	kImageShipSleepCabinTerminalWarning,
+	kImageShipSleepCabinTerminal1,
+	kImageShipSleepCabinTerminal2,
+	kImageShipSleepCabinStatusLight,
+	kImageShipSleepCabinTerminal3,
 	// file 34
-	kShipAirlockBackground,
-	kShipAirlockDoorLeftAnimation1,
-	kShipAirlockDoorLeftAnimation2,
-	kShipAirlockDoorLeftAnimation3,
-	kShipAirlockDoorRightAnimation1,
-	kShipAirlockDoorRightAnimation2,
-	kShipAirlockDoorRightAnimation3,
-	kShipAirlockHelmetRemoved,
-	kShipAirlockSpacesuitRemoved,
-	kShipAirlockSupplyRemoved,
-	kShipAirlockDoorLeftButton,
-	kShipAirlockDoorRightButton,
-	kShipAirlockManometerAnimation1,
-	kShipAirlockManometerAnimation2,
-	kShipAirlockManometerAnimation3,
-	kShipAirlockManometerAnimation4,
-	kShipAirlockManometerAnimation5,
-	kShipAirlockManometerAnimation6,
+	kImageShipAirlockBackground,
+	kImageShipAirlockDoorLeftAnimation1,
+	kImageShipAirlockDoorLeftAnimation2,
+	kImageShipAirlockDoorLeftAnimation3,
+	kImageShipAirlockDoorRightAnimation1,
+	kImageShipAirlockDoorRightAnimation2,
+	kImageShipAirlockDoorRightAnimation3,
+	kImageShipAirlockHelmetRemoved,
+	kImageShipAirlockSpacesuitRemoved,
+	kImageShipAirlockSupplyRemoved,
+	kImageShipAirlockDoorLeftButton,
+	kImageShipAirlockDoorRightButton,
+	kImageShipAirlockManometerAnimation1,
+	kImageShipAirlockManometerAnimation2,
+	kImageShipAirlockManometerAnimation3,
+	kImageShipAirlockManometerAnimation4,
+	kImageShipAirlockManometerAnimation5,
+	kImageShipAirlockManometerAnimation6,
 	// file 35
-	kAxacussSpaceBackground,
-	kAxacussSpaceShipAnimation1,
-	kAxacussSpaceShipAnimation2,
-	kAxacussSpaceShipAnimation3,
-	kAxacussSpaceShipAnimation4,
-	kAxacussSpaceShipAnimation5,
-	kAxacussSpaceShipAnimation6,
-	kAxacussSpaceShipAnimation7,
-	kAxacussSpaceBusAnimation1,
-	kAxacussSpaceBusAnimation2,
-	kAxacussSpaceBusAnimation3,
-	kAxacussSpaceBusAnimation4,
-	kAxacussSpaceBusAnimation5,
-	kAxacussSpaceBusAnimation6,
-	kAxacussSpaceBusAnimation7,
-	kAxacussSpaceBusAnimation8,
-	kAxacussSpaceBusAnimation9,
-	kAxacussSpaceBusAnimation10,
-	kAxacussSpaceBusAnimation11,
-	kAxacussSpaceBusAnimation12,
-	kAxacussSpaceBusAnimation13,
-	kAxacussSpaceBusAnimation14,
+	kImageAxacussSpaceBackground,
+	kImageAxacussSpaceShipAnimation1,
+	kImageAxacussSpaceShipAnimation2,
+	kImageAxacussSpaceShipAnimation3,
+	kImageAxacussSpaceShipAnimation4,
+	kImageAxacussSpaceShipAnimation5,
+	kImageAxacussSpaceShipAnimation6,
+	kImageAxacussSpaceShipAnimation7,
+	kImageAxacussSpaceBusAnimation1,
+	kImageAxacussSpaceBusAnimation2,
+	kImageAxacussSpaceBusAnimation3,
+	kImageAxacussSpaceBusAnimation4,
+	kImageAxacussSpaceBusAnimation5,
+	kImageAxacussSpaceBusAnimation6,
+	kImageAxacussSpaceBusAnimation7,
+	kImageAxacussSpaceBusAnimation8,
+	kImageAxacussSpaceBusAnimation9,
+	kImageAxacussSpaceBusAnimation10,
+	kImageAxacussSpaceBusAnimation11,
+	kImageAxacussSpaceBusAnimation12,
+	kImageAxacussSpaceBusAnimation13,
+	kImageAxacussSpaceBusAnimation14,
 	// file 36
-	kAxacussanCapsuleBackground,
-	kAxacussanCapsuleRobotAnimation1,
-	kAxacussanCapsuleRobotAnimation2,
-	kAxacussanCapsuleRobotAnimation3,
-	kAxacussanCapsuleRobotAnimation4,
-	kAxacussanCapsuleDummy1,
+	kImageAxacussanCapsuleBackground,
+	kImageAxacussanCapsuleRobotAnimation1,
+	kImageAxacussanCapsuleRobotAnimation2,
+	kImageAxacussanCapsuleRobotAnimation3,
+	kImageAxacussanCapsuleRobotAnimation4,
+	kImageAxacussanCapsuleDummy1,
 	// file 37
-	kArsanoMeetupBackground,
-	kArsanoMeetupRestaurantLightAnimation1,
-	kArsanoMeetupRestaurantLightAnimation2,
-	kArsanoMeetupRestaurantLightAnimation3,
-	kArsanoMeetupRestaurantLightAnimation4,
-	kArsanoMeetupRestaurantLightAnimation5,
-	kArsanoMeetupRestaurantDoorAnimation1,
-	kArsanoMeetupRestaurantDoorAnimation2,
-	kArsanoMeetupRestaurantDoorSignAnimation1,
-	kArsanoMeetupRestaurantDoorSignAnimation2,
-	kArsanoMeetupRestaurantDoorSignAnimation3,
-	kArsanoMeetupRestaurantDoorSignAnimation4,
-	kArsanoMeetupRestaurantDoorSignAnimation5,
-	kArsanoMeetupRestaurantSignAnimation1,
-	kArsanoMeetupRestaurantSignAnimation2,
-	kArsanoMeetupRestaurantSignAnimation3,
-	kArsanoMeetupRestaurantSignAnimation4,
-	kArsanoMeetupRestaurantSignAnimation5,
-	kArsanoMeetupRestaurantSignAnimation6,
-	kArsanoMeetupRestaurantSignAnimation7,
-	kArsanoMeetupRestaurantSignAnimation8,
-	kArsanoMeetupRestaurantSignAnimation9,
-	kArsanoMeetupRestaurantSignAnimation10,
-	kArsanoMeetupRestaurantSignAnimation11,
-	kArsanoMeetupRestaurantSignAnimation12,
-	kArsanoMeetupRestaurantSignAnimation13,
-	kArsanoMeetupRestaurantSignAnimation14,
+	kImageArsanoMeetupBackground,
+	kImageArsanoMeetupRestaurantLightAnimation1,
+	kImageArsanoMeetupRestaurantLightAnimation2,
+	kImageArsanoMeetupRestaurantLightAnimation3,
+	kImageArsanoMeetupRestaurantLightAnimation4,
+	kImageArsanoMeetupRestaurantLightAnimation5,
+	kImageArsanoMeetupRestaurantDoorAnimation1,
+	kImageArsanoMeetupRestaurantDoorAnimation2,
+	kImageArsanoMeetupRestaurantDoorSignAnimation1,
+	kImageArsanoMeetupRestaurantDoorSignAnimation2,
+	kImageArsanoMeetupRestaurantDoorSignAnimation3,
+	kImageArsanoMeetupRestaurantDoorSignAnimation4,
+	kImageArsanoMeetupRestaurantDoorSignAnimation5,
+	kImageArsanoMeetupRestaurantSignAnimation1,
+	kImageArsanoMeetupRestaurantSignAnimation2,
+	kImageArsanoMeetupRestaurantSignAnimation3,
+	kImageArsanoMeetupRestaurantSignAnimation4,
+	kImageArsanoMeetupRestaurantSignAnimation5,
+	kImageArsanoMeetupRestaurantSignAnimation6,
+	kImageArsanoMeetupRestaurantSignAnimation7,
+	kImageArsanoMeetupRestaurantSignAnimation8,
+	kImageArsanoMeetupRestaurantSignAnimation9,
+	kImageArsanoMeetupRestaurantSignAnimation10,
+	kImageArsanoMeetupRestaurantSignAnimation11,
+	kImageArsanoMeetupRestaurantSignAnimation12,
+	kImageArsanoMeetupRestaurantSignAnimation13,
+	kImageArsanoMeetupRestaurantSignAnimation14,
 	// file 38
-	kArsanoAfterNovaBackground,
-	kArsanoAfterNovaRogerShipAnimation1,
-	kArsanoAfterNovaRogerShipAnimation2,
-	kArsanoAfterNovaRogerShipAnimation3,
-	kArsanoAfterNovaRogerShipAnimation4,
-	kArsanoAfterNovaRogerShipAnimation5,
-	kArsanoAfterNovaRogerShipAnimation6,
-	kArsanoAfterNovaRogerShipAnimation7,
-	kArsanoAfterNovaRogerShipAnimation8,
-	kArsanoAfterNovaRogerShipAnimation9,
-	kArsanoAfterNovaRogerShipAnimation10,
-	kArsanoAfterNovaRogerShipAnimation11,
-	kArsanoAfterNovaRoger,
+	kImageArsanoAfterNovaBackground,
+	kImageArsanoAfterNovaRogerShipAnimation1,
+	kImageArsanoAfterNovaRogerShipAnimation2,
+	kImageArsanoAfterNovaRogerShipAnimation3,
+	kImageArsanoAfterNovaRogerShipAnimation4,
+	kImageArsanoAfterNovaRogerShipAnimation5,
+	kImageArsanoAfterNovaRogerShipAnimation6,
+	kImageArsanoAfterNovaRogerShipAnimation7,
+	kImageArsanoAfterNovaRogerShipAnimation8,
+	kImageArsanoAfterNovaRogerShipAnimation9,
+	kImageArsanoAfterNovaRogerShipAnimation10,
+	kImageArsanoAfterNovaRogerShipAnimation11,
+	kImageArsanoAfterNovaRoger,
 	// file 39
-	kArsanoDesolate,
+	kImageArsanoDesolate,
 	// file 40
-	kIntersectionBackground,
-	kIntersectionGuardRemoved,
-	kIntersectionGuardMouthOpen,
-	kIntersectionGuardShootAnimation1,
-	kIntersectionGuardShootAnimation2,
-	kIntersectionGuardMouthClosed,
-	kIntersectionDoorOpen,
-	kIntersectoinKeycard,
+	kImageIntersectionBackground,
+	kImageIntersectionGuardRemoved,
+	kImageIntersectionGuardMouthOpen,
+	kImageIntersectionGuardShootAnimation1,
+	kImageIntersectionGuardShootAnimation2,
+	kImageIntersectionGuardMouthClosed,
+	kImageIntersectionDoorOpen,
+	kImageIntersectoinKeycard,
 	// file 41
-	kInformationDeskBackground,
-	kInformationDeskAlienMouthOpen,
-	kInformationDeskAlienHandMoved,
-	kInformationDeskAlienShoot,
+	kImageInformationDeskBackground,
+	kImageInformationDeskAlienMouthOpen,
+	kImageInformationDeskAlienHandMoved,
+	kImageInformationDeskAlienShoot,
 	// file 42
-	kArtGalleryBackground,
-	kArtGalleryAlienShootAnimation1,
-	kArtGalleryAlienShootAnimation2,
-	kArtGalleryAlienShootAnimation3,
-	kArtGalleryThrowingBlockAnimation1,
-	kArtGalleryThrowingBlockAnimation2,
-	kArtGalleryThrowingBlockAnimation3,
-	kArtGalleryThrowingBlockAnimation4,
-	kArtGalleryThrowingBlockAnimation5,
-	kArtGalleryThrowingBlockAnimation6,
-	kArtGalleryThrowingBlockAnimation7,
-	kArtGalleryDummy1,
+	kImageArtGalleryBackground,
+	kImageArtGalleryAlienShootAnimation1,
+	kImageArtGalleryAlienShootAnimation2,
+	kImageArtGalleryAlienShootAnimation3,
+	kImageArtGalleryThrowingBlockAnimation1,
+	kImageArtGalleryThrowingBlockAnimation2,
+	kImageArtGalleryThrowingBlockAnimation3,
+	kImageArtGalleryThrowingBlockAnimation4,
+	kImageArtGalleryThrowingBlockAnimation5,
+	kImageArtGalleryThrowingBlockAnimation6,
+	kImageArtGalleryThrowingBlockAnimation7,
+	kImageArtGalleryDummy1,
 	// file 43
-	kCellBackground,
-	kCellCablePluggedIn,
-	kCellCableUnplugged,
-	kCellCableCutUnplugged,
-	kCellCableCutPluggedIn,
-	kCellCableCutTableUnplugged,
-	kCellCableCutTablePluggedIn,
-	kCellTableTablet,
-	kCellRobotComesAnimation1,
-	kCellRobotComesAnimation2,
-	kCellRobotComesAnimation3,
-	kCellRobotComesAnimation4,
-	kCellRobotComesAnimation5,
-	kCellRobotComesAnimation6,
-	kCellRobotComesAnimation7,
-	kCellRobotComesAnimation8,
-	kCellRobotComesAnimation9,
-	kCellRobotComesAnimation10,
-	kCellRobotComesAnimation11,
-	kCellRobotLeavesAnimation1,
-	kCellRobotLeavesAnimation2,
-	kCellRobotLeavesAnimation3,
-	kCellRobotLeavesAnimation4,
-	kCellRobotLeavesAnimation5,
-	kCellRobotLeavesAnimation6,
-	kCellRobotLeavesAnimation7,
-	kCellRobotLeavesAnimation8,
-	kCellRobotLeavesAnimation9,
-	kCellRobotSparks,
-	kCellRobotBroken,
-	kCellDoorClosed,
-	kCellDummy1
+	kImageCellBackground,
+	kImageCellCablePluggedIn,
+	kImageCellCableUnplugged,
+	kImageCellCableCutUnplugged,
+	kImageCellCableCutPluggedIn,
+	kImageCellCableCutTableUnplugged,
+	kImageCellCableCutTablePluggedIn,
+	kImageCellTableTablet,
+	kImageCellRobotComesAnimation1,
+	kImageCellRobotComesAnimation2,
+	kImageCellRobotComesAnimation3,
+	kImageCellRobotComesAnimation4,
+	kImageCellRobotComesAnimation5,
+	kImageCellRobotComesAnimation6,
+	kImageCellRobotComesAnimation7,
+	kImageCellRobotComesAnimation8,
+	kImageCellRobotComesAnimation9,
+	kImageCellRobotComesAnimation10,
+	kImageCellRobotComesAnimation11,
+	kImageCellRobotLeavesAnimation1,
+	kImageCellRobotLeavesAnimation2,
+	kImageCellRobotLeavesAnimation3,
+	kImageCellRobotLeavesAnimation4,
+	kImageCellRobotLeavesAnimation5,
+	kImageCellRobotLeavesAnimation6,
+	kImageCellRobotLeavesAnimation7,
+	kImageCellRobotLeavesAnimation8,
+	kImageCellRobotLeavesAnimation9,
+	kImageCellRobotSparks,
+	kImageCellRobotBroken,
+	kImageCellDoorClosed,
+	kImageCellDummy1
 };
 
 }


Commit: d1fb1d45e8067414e62c3801bfb565951a5b199b
    https://github.com/scummvm/scummvm/commit/d1fb1d45e8067414e62c3801bfb565951a5b199b
Author: Joseph-Eugene Winzer (joewinzer at googlemail.com)
Date: 2019-02-06T09:42:10+01:00

Commit Message:
SUPERNOVA: Adds missing image id

Changed paths:
    engines/supernova/imageid.h


diff --git a/engines/supernova/imageid.h b/engines/supernova/imageid.h
index e5860f7..c1168c3 100644
--- a/engines/supernova/imageid.h
+++ b/engines/supernova/imageid.h
@@ -238,6 +238,7 @@ enum ImageId {
 	kImageAxacussCorridorStuff17,
 	kImageAxacussCorridorStuff18,
 	kImageAxacussCorridorStuff19,
+	kImageAxacussCorridorStuff20,
 	kImageAxacussCorridorStuff21,
 	kImageAxacussCorridorStuff22,
 	kImageAxacussCorridorStuff23,


Commit: 1e62c5533876eb794b234928a342fcd72688cf84
    https://github.com/scummvm/scummvm/commit/1e62c5533876eb794b234928a342fcd72688cf84
Author: Joseph-Eugene Winzer (joewinzer at googlemail.com)
Date: 2019-02-06T09:42:11+01:00

Commit Message:
SUPERNOVA: Moves function definitions from rooms.h

Changed paths:
    engines/supernova/rooms.cpp
    engines/supernova/rooms.h


diff --git a/engines/supernova/rooms.cpp b/engines/supernova/rooms.cpp
index 9360d58..ce274d6 100644
--- a/engines/supernova/rooms.cpp
+++ b/engines/supernova/rooms.cpp
@@ -30,6 +30,17 @@
 
 namespace Supernova {
 
+Room::Room() {
+	_seen = false;
+	for (int i = 0; i < kMaxSection; ++i)
+		_shown[i] = kShownFalse;
+	for (int i = 0; i < kMaxDialog; ++i)
+		_sentenceRemoved[i] = 0;
+}
+
+Room::~Room() {
+}
+
 bool Room::serialize(Common::WriteStream *out) {
 	if (out->err())
 		return false;
@@ -97,6 +108,73 @@ bool Room::deserialize(Common::ReadStream *in, int version) {
 	return !in->err();
 }
 
+bool Room::hasSeen() {
+	return _seen;
+}
+void Room::setRoomSeen(bool seen) {
+	_seen = seen;
+}
+
+int Room::getFileNumber() const {
+	return _fileNumber;
+}
+RoomId Room::getId() const {
+	return _id;
+}
+
+void Room::setSectionVisible(uint section, bool visible) {
+	_shown[section] = visible ? kShownTrue : kShownFalse;
+}
+
+bool Room::isSectionVisible(uint index) const {
+	return _shown[index] == kShownTrue;
+}
+
+void Room::removeSentence(int sentence, int number) {
+	if (number > 0)
+		_sentenceRemoved[number - 1] |= (1 << sentence);
+}
+
+void Room::addSentence(int sentence, int number) {
+	if (number > 0)
+		_sentenceRemoved[number - 1] &= ~(1 << sentence);
+}
+
+void Room::addAllSentences(int number) {
+	if (number > 0)
+		_sentenceRemoved[number - 1] = 0;
+}
+
+bool Room::sentenceRemoved(int sentence, int number) {
+	if (number <= 0)
+		return false;
+	return (_sentenceRemoved[number - 1] & (1 << sentence));
+}
+
+bool Room::allSentencesRemoved(int maxSentence, int number) {
+	if (number <= 0)
+		return false;
+	for (int i = 0, flag = 1 ; i < maxSentence ; ++i, flag <<= 1)
+		if (!(_sentenceRemoved[number - 1] & flag))
+			return false;
+	return true;
+}
+
+Object *Room::getObject(uint index) {
+	return &_objectState[index];
+}
+
+void Room::animation() {
+}
+
+void Room::onEntrance() {
+}
+
+bool Room::interact(Action verb, Object &obj1, Object &obj2) {
+	return false;
+}
+
+
 Intro::Intro(SupernovaEngine *vm, GameManager *gm) {
 	_vm = vm;
 	_gm = gm;
@@ -523,6 +601,27 @@ void Intro::leaveCutscene() {
 	_vm->_allowLoadGame = true;
 }
 
+ShipCorridor::ShipCorridor(SupernovaEngine *vm, GameManager *gm) {
+	_vm = vm;
+	_gm = gm;
+
+	_fileNumber = 17;
+	_id = CORRIDOR;
+	_shown[0] = kShownTrue;
+	_shown[4] = kShownTrue;
+
+	_objectState[0] = Object(_id, kStringHatch, kStringDefaultDescription, HATCH1, OPENABLE | EXIT, 0, 6, 1, CABIN_L1, 15);
+	_objectState[1] = Object(_id, kStringHatch, kStringDefaultDescription, NULLOBJECT, OPENABLE | EXIT, 1, 7, 2, CABIN_L2, 10);
+	_objectState[2] = Object(_id, kStringHatch, kStringDefaultDescription, NULLOBJECT, OPENABLE | EXIT, 2, 8, 3, CABIN_L3, 5);
+	_objectState[3] = Object(_id, kStringHatch, kStringDefaultDescription, NULLOBJECT, OPENABLE | EXIT, 5, 11, 6, CABIN_R1, 19);
+	_objectState[4] = Object(_id, kStringHatch, kStringDefaultDescription, NULLOBJECT, OPENABLE | EXIT, 4, 10, 5, CABIN_R2, 14);
+	_objectState[5] = Object(_id, kStringHatch, kStringDefaultDescription, NULLOBJECT, OPENABLE | EXIT | OPENED, 9, 3, 4, CABIN_R3, 9);
+	_objectState[6] = Object(_id, kStringHatch, kStringDefaultDescription, NULLOBJECT, OPENABLE | CLOSED | EXIT, 12, 12, 0, AIRLOCK, 2);
+	_objectState[7] = Object(_id, kStringButton, kStringHatchButtonDescription, BUTTON, PRESS, 13, 13, 0, NULLROOM, 0);
+	_objectState[8] = Object(_id, kStringLadder, kStringDefaultDescription, NULLOBJECT, NULLTYPE, 14, 14, 0, NULLROOM, 0);
+	_objectState[9] = Object(_id, kStringExit, kStringDefaultDescription, NULLOBJECT, EXIT, 15, 15, 0, HALL, 22);
+}
+
 bool ShipCorridor::interact(Action verb, Object &obj1, Object &obj2) {
 	if ((verb == ACTION_PRESS) && (obj1._id == BUTTON)) {
 		if (_objectState[6].hasProperty(OPENED)) {
@@ -551,6 +650,22 @@ bool ShipCorridor::interact(Action verb, Object &obj1, Object &obj2) {
 	return false;
 }
 
+ShipHall::ShipHall(SupernovaEngine *vm, GameManager *gm) {
+	_vm = vm;
+	_gm = gm;
+
+	_fileNumber = 15;
+	_id = HALL;
+	_shown[0] = kShownTrue;
+
+	_objectState[0] = Object(_id, kStringHatch, kStringCockpitHatchDescription, NULLOBJECT, OPENABLE | EXIT, 4, 5, 1, COCKPIT, 10);
+	_objectState[1] = Object(_id, kStringHatch, kStringKitchenHatchDescription, KITCHEN_HATCH, OPENABLE | EXIT, 0, 0, 0, NULLROOM, 1);
+	_objectState[2] = Object(_id, kStringHatch, kStringStasisHatchDescription, NULLOBJECT, OPENABLE | CLOSED | EXIT, 1, 1, 2, SLEEP, 8);
+	_objectState[3] = Object(_id, kStringSlot, kStringSlotDescription, SLEEP_SLOT, COMBINABLE, 2, 2, 0, NULLROOM, 0);
+	_objectState[4] = Object(_id, kStringLadder, kStringDefaultDescription, NULLOBJECT, NULLTYPE, 3, SLEEP, 0, NULLROOM, 0);
+	_objectState[5] = Object(_id, kStringCorridor, kStringDefaultDescription, NULLOBJECT, EXIT, 6, 6, 0, CORRIDOR, 19);
+}
+
 bool ShipHall::interact(Action verb, Object &obj1, Object &obj2) {
 	if ((verb == ACTION_OPEN) && (obj1._id == KITCHEN_HATCH)) {
 		_vm->renderMessage(kStringShipHall1);
@@ -582,6 +697,20 @@ bool ShipHall::interact(Action verb, Object &obj1, Object &obj2) {
 	return true;
 }
 
+ShipSleepCabin::ShipSleepCabin(SupernovaEngine *vm, GameManager *gm) {
+	_vm = vm;
+	_gm = gm;
+
+	_fileNumber = 33;
+	_id = SLEEP;
+	_shown[0] = kShownTrue;
+
+	_objectState[0] = Object(_id, kStringHatch, kStringStasisHatchDescription2, CABINS, NULLTYPE, 0, 0, 0, NULLROOM, 0);
+	_objectState[1] = Object(_id, kStringHatch, kStringStasisHatchDescription2, CABIN, NULLTYPE, 1, 1, 0, NULLROOM, 0);
+	_objectState[2] = Object(_id, kStringComputer, kStringDefaultDescription, COMPUTER, NULLTYPE, 2, 2, 0, NULLROOM, 0);
+	_objectState[3] = Object(_id, kStringExit, kStringDefaultDescription, NULLOBJECT, EXIT, 255, 255, 0, HALL, 22);
+}
+
 bool ShipSleepCabin::interact(Action verb, Object &obj1, Object &obj2) {
 	Room *room;
 	Common::String input;
@@ -780,6 +909,20 @@ void ShipSleepCabin::onEntrance() {
 	}
 }
 
+ShipCockpit::ShipCockpit(SupernovaEngine *vm, GameManager *gm) {
+	_vm = vm;
+	_gm = gm;
+
+	_fileNumber = 9;
+	_id = COCKPIT;
+	_shown[0] = kShownTrue;
+
+	_objectState[0] = Object(_id, kStringInstruments, kStringInstrumentsDescription1, INSTRUMENTS, NULLTYPE, 2, 2, 0, NULLROOM, 0);
+	_objectState[1] = Object(_id, kStringMonitor, kStringDefaultDescription, MONITOR, NULLTYPE, 0, 0, 0, NULLROOM, 0);
+	_objectState[2] = Object(_id, kStringMonitor, kStringMonitorDescription, NULLOBJECT, TAKE, 1, 0, 0, NULLROOM, 0);
+	_objectState[3] = Object(_id, kStringExit, kStringDefaultDescription, NULLOBJECT, EXIT, 255, 255, 0, HALL, 22);
+}
+
 bool ShipCockpit::interact(Action verb, Object &obj1, Object &obj2) {
 	// TODO: distance and remaining time not accurate
 
@@ -850,6 +993,69 @@ void ShipCockpit::onEntrance() {
 	setRoomSeen(true);
 }
 
+ShipCabinL1::ShipCabinL1(SupernovaEngine *vm, GameManager *gm) {
+	_vm = vm;
+	_gm = gm;
+
+	_fileNumber = 21;
+	_id = CABIN_L1;
+	_shown[0] = kShownTrue;
+	_shown[1] = kShownTrue;
+	_shown[2] = kShownTrue;
+	_shown[3] = kShownTrue;
+	_shown[4] = kShownTrue;
+	_shown[5] = kShownTrue;
+
+	_objectState[0] = Object(_id, kStringImage, kStringGenericDescription1, NULLOBJECT, UNNECESSARY, 5, 5, 0, NULLROOM, 0);
+	_objectState[1] = Object(_id, kStringImage, kStringGenericDescription2, NULLOBJECT, UNNECESSARY, 6, 6, 0, NULLROOM, 0);
+	_objectState[2] = Object(_id, kStringImage, kStringGenericDescription3, NULLOBJECT, UNNECESSARY, 7, 7, 0, NULLROOM, 0);
+	_objectState[3] = Object(_id, kStringMagnete, kStringMagneteDescription, NULLOBJECT, UNNECESSARY, 8, 8, 0, NULLROOM, 0);
+	_objectState[4] = Object(_id, kStringImage, kStringGenericDescription4, NULLOBJECT, UNNECESSARY, 9, 9, 0);
+	_objectState[5] = Object(_id, kStringPen, kStringPenDescription, PEN, TAKE | COMBINABLE, 10, 10, 5 | 128);
+	_objectState[6] = Object(_id, kStringHatch, kStringDefaultDescription, NULLOBJECT, OPENABLE | OPENED | EXIT, 3, 3, 24 | 128, CORRIDOR, 9);
+	_objectState[7] = Object(_id, kStringSlot, kStringSlotDescription, NULLOBJECT, COMBINABLE, 0, 0, 0);
+	_objectState[8] = Object(_id, kStringShelf, kStringDefaultDescription, NULLOBJECT, OPENABLE | CLOSED, 1, 1, 0);
+	_objectState[9] = Object(_id, kStringCompartment, kStringDefaultDescription, NULLOBJECT, OPENABLE | CLOSED, 2, 2, 0);
+	_objectState[10] = Object(_id, kStringSocket, kStringDefaultDescription, SOCKET, COMBINABLE, 4, 4, 0);
+	_objectState[11] = Object(_id, kStringToilet, kStringDefaultDescription, BATHROOM_DOOR, EXIT, 255, 255, 0, BATHROOM, 22);
+}
+
+ShipCabinL2::ShipCabinL2(SupernovaEngine *vm, GameManager *gm) {
+	_vm = vm;
+	_gm = gm;
+
+	_fileNumber = 21;
+	_id = CABIN_L2;
+	_shown[0] = kShownTrue;
+	_shown[16] = kShownTrue;
+
+	_objectState[0] = Object(_id, kStringSlot,kStringSlotDescription,SLOT_KL1,COMBINABLE,31,31,0);
+	_objectState[1] = Object(_id, kStringSlot,kStringSlotDescription,SLOT_KL2,COMBINABLE,32,32,0);
+	_objectState[2] = Object(_id, kStringSlot,kStringSlotDescription,SLOT_KL3,COMBINABLE,33,33,0);
+	_objectState[3] = Object(_id, kStringSlot,kStringSlotDescription,SLOT_KL4,COMBINABLE,45,45,0);
+	_objectState[4] = Object(_id, kStringShelf,kStringDefaultDescription,SHELF_L1,OPENABLE | CLOSED,25,26,17);
+	_objectState[5] = Object(_id, kStringPistol,kStringPistolDescription,PISTOL,TAKE,39,39,20);
+	_objectState[6] = Object(_id, kStringCompartment,kStringDefaultDescription,SHELF_L2,OPENABLE | CLOSED,27,28,18);
+	_objectState[7] = Object(_id, kStringBooks,kStringBooksDescription,NULLOBJECT,UNNECESSARY,40,40,0);
+	_objectState[8] = Object(_id, kStringCompartment,kStringDefaultDescription,SHELF_L3,OPENABLE | CLOSED,29,30,19);
+	_objectState[9] = Object(_id, kStringSpool,kStringSpoolDescription, SPOOL,TAKE | COMBINABLE,41,41,21);
+	_objectState[10] = Object(_id, kStringCompartment,kStringDefaultDescription,SHELF_L4,OPENABLE | CLOSED,43,44,22);
+	_objectState[11] = Object(_id, kStringBook,kStringDefaultDescription,BOOK2,TAKE,46,46,23);
+	_objectState[12] = Object(_id, kStringUnderwear,kStringUnderwearDescription,NULLOBJECT,UNNECESSARY,34,34,0);
+	_objectState[13] = Object(_id, kStringUnderwear,kStringUnderwearDescription,NULLOBJECT,UNNECESSARY,35,35,0);
+	_objectState[14] = Object(_id, kStringClothes,kStringDefaultDescription,NULLOBJECT,UNNECESSARY,36,36,0);
+	_objectState[15] = Object(_id, kStringJunk,kStringJunkDescription,NULLOBJECT,UNNECESSARY,37,37,0);
+	_objectState[16] = Object(_id, kStringJunk,kStringJunkDescription,NULLOBJECT,UNNECESSARY,38,38,0);
+	_objectState[17] = Object(_id, kStringMagnete,kStringMagneteDescription,NULLOBJECT,UNNECESSARY,23,23,0);
+	_objectState[18] = Object(_id, kStringToilet,kStringDefaultDescription,BATHROOM_DOOR,EXIT,255,255,0,BATHROOM,22);
+	_objectState[19] = Object(_id, kStringHatch,kStringDefaultDescription,NULLOBJECT,OPENABLE | OPENED | EXIT,3,3,24 | 128,CORRIDOR,9);
+	_objectState[20] = Object(_id, kStringSlot,kStringSlotDescription,NULLOBJECT,COMBINABLE,0,0,0);
+	_objectState[21] = Object(_id, kStringShelf,kStringDefaultDescription,NULLOBJECT,OPENABLE | CLOSED,1,1,0);
+	_objectState[22] = Object(_id, kStringCompartment,kStringDefaultDescription,NULLOBJECT,OPENABLE | CLOSED,2,2,0);
+	_objectState[23] = Object(_id, kStringSocket,kStringDefaultDescription,SOCKET,COMBINABLE,4,4,0);
+	_objectState[24] = Object(_id, kStringFolders,kStringFoldersDescription,NULLOBJECT,UNNECESSARY,49,49,0);
+}
+
 bool ShipCabinL2::interact(Action verb, Object &obj1, Object &obj2) {
 	if ((verb == ACTION_USE) && Object::combine(obj1, obj2, SLOT_KL1, KEYCARD2)) {
 		_gm->openLocker(this, getObject(4), getObject(0), 17);
@@ -892,6 +1098,38 @@ bool ShipCabinL2::interact(Action verb, Object &obj1, Object &obj2) {
 	return true;
 }
 
+ShipCabinL3::ShipCabinL3(SupernovaEngine *vm, GameManager *gm) {
+	_vm = vm;
+	_gm = gm;
+
+	_fileNumber = 21;
+	_id = CABIN_L3;
+	_shown[0] = kShownTrue;
+	_shown[6] = kShownTrue;
+	_shown[7] = kShownTrue;
+	_shown[8] = kShownTrue;
+	_shown[9] = kShownTrue;
+	_shown[12] = kShownTrue;
+
+	_objectState[0] = Object(_id, kStringPoster,kStringPosterDescription1,NULLOBJECT,UNNECESSARY,11,11,0);
+	_objectState[1] = Object(_id, kStringPoster,kStringPosterDescription2,NULLOBJECT,UNNECESSARY,12,12,0);
+	_objectState[2] = Object(_id, kStringSpeaker,kStringDefaultDescription,NULLOBJECT,NULLTYPE,13,13,0);
+	_objectState[3] = Object(_id, kStringMagnete,kStringMagneteDescription,NULLOBJECT,UNNECESSARY,14,14,0);
+	_objectState[4] = Object(_id, kStringRecord,kStringRecordDescription,RECORD,TAKE | COMBINABLE,15,15,8 | 128);
+	_objectState[5] = Object(_id, kStringRecordStand,kStringRecordStandDescription,NULLOBJECT,UNNECESSARY,16,16,0);
+	_objectState[6] = Object(_id, kStringButton,kStringDefaultDescription,TURNTABLE_BUTTON,PRESS,22,22,0);
+	_objectState[7] = Object(_id, kStringTurntable,kStringTurntableDescription,TURNTABLE,UNNECESSARY | COMBINABLE,17,17,0);
+	_objectState[8] = Object(_id, kStringWire,kStringDefaultDescription,WIRE,COMBINABLE,18,18,0);
+	_objectState[9] = Object(_id, kStringWire,kStringDefaultDescription,WIRE2,COMBINABLE,19,19,0);
+	_objectState[10] = Object(_id, kStringPlug,kStringDefaultDescription,PLUG,COMBINABLE,20,20,0);
+	_objectState[11] = Object(_id, kStringHatch,kStringDefaultDescription,NULLOBJECT,OPENABLE | OPENED | EXIT,3,3,24 | 128,CORRIDOR,9);
+	_objectState[12] = Object(_id, kStringSlot,kStringSlotDescription,NULLOBJECT,COMBINABLE,0,0,0);
+	_objectState[13] = Object(_id, kStringShelf,kStringDefaultDescription,NULLOBJECT,OPENABLE | CLOSED,1,1,0);
+	_objectState[14] = Object(_id, kStringCompartment,kStringDefaultDescription,NULLOBJECT,OPENABLE | CLOSED,2,2,0);
+	_objectState[15] = Object(_id, kStringSocket,kStringDefaultDescription,SOCKET,COMBINABLE,4,4,0);
+	_objectState[16] = Object(_id, kStringToilet,kStringDefaultDescription,BATHROOM_DOOR,EXIT,255,255,0,BATHROOM,22);
+}
+
 bool ShipCabinL3::interact(Action verb, Object &obj1, Object &obj2) {
 	Room *r;
 
@@ -973,6 +1211,86 @@ bool ShipCabinL3::interact(Action verb, Object &obj1, Object &obj2) {
 	return true;
 }
 
+ShipCabinR1::ShipCabinR1(SupernovaEngine *vm, GameManager *gm) {
+	_vm = vm;
+	_gm = gm;
+
+	_fileNumber = 22;
+	_id = CABIN_R1;
+	_shown[0] = kShownTrue;
+	_shown[1] = kShownTrue;
+	_shown[2] = kShownTrue;
+
+	_objectState[0] = Object(_id, kStringImage,kStringImageDescription1,NULLOBJECT,UNNECESSARY,5,5,0);
+	_objectState[1] = Object(_id, kStringDrawingInstruments,kStringDrawingInstrumentsDescription,NULLOBJECT,UNNECESSARY,6,6,0);
+	_objectState[2] = Object(_id, kStringMagnete,kStringMagneteDescription,NULLOBJECT,UNNECESSARY,7,7,0);
+	_objectState[3] = Object(_id, kStringHatch,kStringDefaultDescription,NULLOBJECT,OPENABLE | OPENED | EXIT,3,3,15 | 128,CORRIDOR,5);
+	_objectState[4] = Object(_id, kStringSlot,kStringSlotDescription,NULLOBJECT,COMBINABLE,0,0,0);
+	_objectState[5] = Object(_id, kStringShelf,kStringDefaultDescription,NULLOBJECT,OPENABLE | CLOSED,1,1,0);
+	_objectState[6] = Object(_id, kStringCompartment,kStringDefaultDescription,NULLOBJECT,OPENABLE | CLOSED,2,2,0);
+	_objectState[7] = Object(_id, kStringSocket,kStringDefaultDescription,SOCKET,COMBINABLE,4,4,0);
+	_objectState[8] = Object(_id, kStringToilet,kStringDefaultDescription,BATHROOM_DOOR,EXIT,255,255,0,BATHROOM,22);
+}
+
+ShipCabinR2::ShipCabinR2(SupernovaEngine *vm, GameManager *gm) {
+	_vm = vm;
+	_gm = gm;
+
+	_fileNumber = 22;
+	_id = CABIN_R2;
+	_shown[0] = kShownTrue;
+	_shown[3] = kShownTrue;
+	_shown[4] = kShownTrue;
+	_shown[5] = kShownTrue;
+
+	_objectState[0] = Object(_id, kStringChessGame,kStringChessGameDescription1,NULLOBJECT,UNNECESSARY,11,11,0);
+	_objectState[1] = Object(_id, kStringTennisRacket,kStringTennisRacketDescription,NULLOBJECT,UNNECESSARY,8,8,0);
+	_objectState[2] = Object(_id, kStringTennisBall,kStringGenericDescription2,NULLOBJECT,UNNECESSARY,9,9,0);
+	_objectState[3] = Object(_id, kStringHatch,kStringDefaultDescription,NULLOBJECT,OPENABLE | OPENED | EXIT,3,3,15 | 128,CORRIDOR,5);
+	_objectState[4] = Object(_id, kStringSlot,kStringSlotDescription,NULLOBJECT,COMBINABLE,0,0,0);
+	_objectState[5] = Object(_id, kStringShelf,kStringDefaultDescription,NULLOBJECT,OPENABLE | CLOSED,1,1,0);
+	_objectState[6] = Object(_id, kStringCompartment,kStringDefaultDescription,NULLOBJECT,OPENABLE | CLOSED,2,2,0);
+	_objectState[7] = Object(_id, kStringSocket,kStringDefaultDescription,SOCKET,COMBINABLE,4,4,0);
+	_objectState[8] = Object(_id, kStringToilet,kStringDefaultDescription,BATHROOM_DOOR,EXIT,255,255,0,BATHROOM,22);
+}
+
+ShipCabinR3::ShipCabinR3(SupernovaEngine *vm, GameManager *gm) {
+	_vm = vm;
+	_gm = gm;
+
+	_fileNumber = 22;
+	_id = CABIN_R3;
+	_shown[0] = kShownTrue;
+	_shown[7] = kShownTrue;
+	_shown[8] = kShownTrue;
+	_shown[15] = kShownTrue;
+
+	_objectState[0] = Object(_id, kStringChessGame,kStringChessGameDescription2,CHESS,TAKE | COMBINABLE,12,12,7 | 128);
+	_objectState[1] = Object(_id, kStringBed,kStringBedDescription,NULLOBJECT,NULLTYPE,13,13,0);
+	_objectState[2] = Object(_id, kStringSlot,kStringSlotDescription,SLOT_K1,COMBINABLE,27,27,0);
+	_objectState[3] = Object(_id, kStringSlot,kStringSlotDescription,SLOT_K2,COMBINABLE,28,28,0);
+	_objectState[4] = Object(_id, kStringSlot,kStringSlotDescription,SLOT_K3,COMBINABLE,29,29,0);
+	_objectState[5] = Object(_id, kStringSlot,kStringSlotDescription,SLOT_K4,COMBINABLE,30,30,0);
+	_objectState[6] = Object(_id, kStringCompartment,kStringCompartmentDescription,SHELF1,OPENABLE | CLOSED,14,18,9);
+	_objectState[7] = Object(_id, kStringAlbums,kStringAlbumsDescription,NULLOBJECT,UNNECESSARY,14,14,0);
+	_objectState[8] = Object(_id, kStringCompartment,kStringCompartmentDescription,SHELF2,OPENABLE | CLOSED,15,19,10);
+	_objectState[9] = Object(_id, kStringRope,kStringRopeDescription,ROPE,TAKE | COMBINABLE,15,15,12);
+	_objectState[10] = Object(_id, kStringShelf,kStringShelfDescription,SHELF3,OPENABLE | CLOSED,16,17,11);
+	_objectState[11] = Object(_id, kStringJunk,kStringJunkDescription,NULLOBJECT,UNNECESSARY,20,20,0);
+	_objectState[12] = Object(_id, kStringClothes,kStringClothesDescription,NULLOBJECT,UNNECESSARY,21,21,0);
+	_objectState[13] = Object(_id, kStringUnderwear,kStringDefaultDescription,NULLOBJECT,UNNECESSARY,22,22,0);
+	_objectState[14] = Object(_id, kStringSocks,kStringDefaultDescription,NULLOBJECT,UNNECESSARY,23,23,0);
+	_objectState[15] = Object(_id, kStringCompartment,kStringCompartmentDescription,SHELF4,OPENABLE | CLOSED,24,25,13);
+	_objectState[16] = Object(_id, kStringBook,kStringBookHitchhiker,BOOK,TAKE,26,26,14);
+	_objectState[17] = Object(_id, kStringDiscman,kStringDiscmanDescription,DISCMAN,TAKE | COMBINABLE,33,33,16);
+	_objectState[18] = Object(_id, kStringHatch,kStringDefaultDescription,NULLOBJECT,OPENABLE | EXIT,3,3,15 | 128,CORRIDOR,5);
+	_objectState[19] = Object(_id, kStringSlot,kStringSlotDescription,NULLOBJECT,COMBINABLE,0,0,0);
+	_objectState[20] = Object(_id, kStringShelf,kStringDefaultDescription,NULLOBJECT,OPENABLE | CLOSED,1,1,0);
+	_objectState[21] = Object(_id, kStringCompartment,kStringDefaultDescription,NULLOBJECT,OPENABLE | CLOSED,2,2,0);
+	_objectState[22] = Object(_id, kStringSocket,kStringDefaultDescription,SOCKET,COMBINABLE,4,4,0);
+	_objectState[23] = Object(_id, kStringToilet,kStringDefaultDescription,BATHROOM_DOOR,EXIT,255,255,0,BATHROOM,22);
+}
+
 bool ShipCabinR3::interact(Action verb, Object &obj1, Object &obj2) {
 	if ((verb == ACTION_USE) && Object::combine(obj1, obj2, SLOT_K1, KEYCARD))
 		_gm->openLocker(this, getObject(6), getObject(2), 9);
@@ -1024,6 +1342,36 @@ void ShipCabinR3::onEntrance() {
 	setRoomSeen(true);
 }
 
+ShipCabinBathroom::ShipCabinBathroom(SupernovaEngine *vm, GameManager *gm) {
+	_vm = vm;
+	_gm = gm;
+
+	_fileNumber = 23;
+	_id = BATHROOM;
+	_shown[0] = kShownTrue;
+
+	_objectState[0] = Object(_id, kStringBathroom,kStringBathroomDescription,TOILET,NULLTYPE,0,0,0);
+	_objectState[1] = Object(_id, kStringShower,kStringDefaultDescription,SHOWER,NULLTYPE,1,1,0);
+	_objectState[2] = Object(_id, kStringExit,kStringDefaultDescription,BATHROOM_EXIT,EXIT,255,255,0,CABIN_R3,2);
+}
+
+ShipAirlock::ShipAirlock(SupernovaEngine *vm, GameManager *gm) {
+	_vm = vm;
+	_gm = gm;
+
+	_fileNumber = 34;
+	_id = AIRLOCK;
+	_shown[0] = kShownTrue;
+	_shown[6] = kShownTrue;
+
+	_objectState[0] = Object(_id, kStringHatch,kStringHatchDescription1,NULLOBJECT,EXIT | OPENABLE | OPENED | CLOSED,0,0,0,CORRIDOR,10);
+	_objectState[1] = Object(_id, kStringHatch,kStringHatchDescription2,NULLOBJECT,EXIT | OPENABLE | CLOSED,1,1,0,HOLD,14);
+	_objectState[2] = Object(_id, kStringButton,kStringDefaultDescription,BUTTON1,PRESS,2,2,0);
+	_objectState[3] = Object(_id, kStringButton,kStringDefaultDescription,BUTTON2,PRESS,3,3,0);
+	_objectState[4] = Object(_id, kStringHelmet,kStringHelmetDescription,HELMET,TAKE,4,4,7);
+	_objectState[5] = Object(_id, kStringSuit,kStringSuitDescription,SUIT,TAKE,5,5,8);
+	_objectState[6] = Object(_id, kStringLifeSupport,kStringLifeSupportDescription,LIFESUPPORT,TAKE,6,6,9);
+}
 
 bool ShipAirlock::interact(Action verb, Object &obj1, Object &obj2) {
 	Room *r;
@@ -1133,6 +1481,28 @@ void ShipAirlock::onEntrance() {
 	setRoomSeen(true);
 }
 
+ShipHold::ShipHold(SupernovaEngine *vm, GameManager *gm) {
+	_vm = vm;
+	_gm = gm;
+
+	_fileNumber = 24;
+	_id = HOLD;
+	_shown[0] = kShownTrue;
+
+	_objectState[0] = Object(_id, kNoString,kStringDefaultDescription,HOLD_WIRE,COMBINABLE,255,255,0);
+	_objectState[1] = Object(_id, kStringScrap,kStringScrapDescription1,SCRAP_LK,NULLTYPE,4,4,0);
+	_objectState[2] = Object(_id, kStringTerminalStrip,kStringDefaultDescription,TERMINALSTRIP,COMBINABLE,255,255,0);
+	_objectState[3] = Object(_id, kStringScrap,kStringScrapDescription2,NULLOBJECT,NULLTYPE,5,5,0);
+	_objectState[4] = Object(_id, kStringReactor,kStringReactorDescription,NULLOBJECT,NULLTYPE,6,6,0);
+	_objectState[5] = Object(_id, kStringNozzle,kStringDefaultDescription,NULLOBJECT,NULLTYPE,7,7,0);
+	_objectState[6] = Object(_id, kStringPumpkin,kStringPumpkinDescription,NULLOBJECT,NULLTYPE,8,8,0);
+	_objectState[7] = Object(_id, kStringHatch,kStringDefaultDescription,LANDINGMOD_OUTERHATCH,EXIT | OPENABLE,1,2,2,LANDINGMODULE,6);
+	_objectState[8] = Object(_id, kStringLandingModule,kStringLandingModuleDescription,NULLOBJECT,NULLTYPE,0,0,0);
+	_objectState[9] = Object(_id, kStringExit,kStringDefaultDescription,NULLOBJECT,EXIT,255,255,0,AIRLOCK,22);
+	_objectState[10] = Object(_id, kStringHatch,kStringHatchDescription3,OUTERHATCH_TOP,EXIT | OPENABLE | OPENED,3,3,0,GENERATOR,8);
+	_objectState[11] = Object(_id, kStringGenerator,kStringGeneratorDescription,GENERATOR_TOP,EXIT,12,12,0,GENERATOR,8);
+}
+
 bool ShipHold::interact(Action verb, Object &obj1, Object &obj2) {
 	Room *room;
 
@@ -1189,6 +1559,22 @@ void ShipHold::onEntrance() {
 	_gm->_rooms[COCKPIT]->setRoomSeen(true);
 }
 
+ShipLandingModule::ShipLandingModule(SupernovaEngine *vm, GameManager *gm) {
+	_vm = vm;
+	_gm = gm;
+
+	_fileNumber = 25;
+	_id = LANDINGMODULE;
+	_shown[0] = kShownTrue;
+
+	_objectState[0] = Object(_id, kStringSocket,kStringDefaultDescription,LANDINGMOD_SOCKET,COMBINABLE,1,1,0);
+	_objectState[1] = Object(_id, kStringButton,kSafetyButtonDescription,LANDINGMOD_BUTTON,PRESS | COMBINABLE,2,2,0);
+	_objectState[2] = Object(_id, kStringMonitor,kStringDefaultDescription,LANDINGMOD_MONITOR,NULLTYPE,3,3,0);
+	_objectState[3] = Object(_id, kStringKeyboard,kStringDefaultDescription,KEYBOARD,NULLTYPE,4,4,0);
+	_objectState[4] = Object(_id, kNoString,kStringDefaultDescription,LANDINGMOD_WIRE,COMBINABLE,255,255,0);
+	_objectState[5] = Object(_id, kStringHatch,kStringDefaultDescription,LANDINGMOD_HATCH,EXIT | OPENABLE | OPENED | COMBINABLE, 0,0,1 | 128,HOLD,10);
+}
+
 bool ShipLandingModule::interact(Action verb, Object &obj1, Object &obj2) {
 	if ((verb == ACTION_PRESS) && (obj1._id == LANDINGMOD_BUTTON))
 		_vm->renderMessage(obj1._description);
@@ -1287,6 +1673,30 @@ bool ShipLandingModule::interact(Action verb, Object &obj1, Object &obj2) {
 	return true;
 }
 
+ShipGenerator::ShipGenerator(SupernovaEngine *vm, GameManager *gm) {
+	_vm = vm;
+	_gm = gm;
+
+	_fileNumber = 18;
+	_id = GENERATOR;
+	_shown[0] = kShownTrue;
+	_shown[5] = kShownTrue;
+
+	_objectState[0] = Object(_id, kStringGeneratorWire,kStringDefaultDescription,GENERATOR_WIRE,COMBINABLE,255,255,0);
+	_objectState[1] = Object(_id, kStringEmptySpool,kStringDefaultDescription,NULLOBJECT,UNNECESSARY,255,255,0);
+	_objectState[2] = Object(_id, kStringKeycard2,kStringKeycard2Description,KEYCARD2,COMBINABLE | TAKE,12,12,5 | 128);
+	_objectState[3] = Object(_id, kStringRope,kStringDefaultDescription,GENERATOR_ROPE,COMBINABLE,255,255,0);
+	_objectState[4] = Object(_id, kStringHatch,kStringHatchDescription3,OUTERHATCH,EXIT | OPENABLE,1,2,1,OUTSIDE,22);
+	_objectState[5] = Object(_id, kStringHatch,kStringDefaultDescription,NULLOBJECT,OPENABLE | CLOSED,3,3,0);
+	_objectState[6] = Object(_id, kStringSlot,kStringSlotDescription,NULLOBJECT,COMBINABLE,4,4,0);
+	_objectState[7] = Object(_id, kStringTrap,kStringDefaultDescription,TRAP,OPENABLE,5,6,2);
+	_objectState[8] = Object(_id, kStringWire,kStringDefaultDescription,NULLOBJECT,NULLTYPE,7,7,0);
+	_objectState[9] = Object(_id, kStringVoltmeter,kStringDefaultDescription,VOLTMETER,NULLTYPE,9,9,0,NULLROOM,0);
+	_objectState[10] = Object(_id, kStringClip,kStringDefaultDescription,CLIP,COMBINABLE,8,8,0);
+	_objectState[11] = Object(_id, kStringWire,kStringWireDescription,SHORT_WIRE,COMBINABLE,10,10,0);
+	_objectState[12] = Object(_id, kStringLadder,kStringDefaultDescription,LADDER,EXIT,0,0,0,HOLD,1);
+}
+
 bool ShipGenerator::interact(Action verb, Object &obj1, Object &obj2) {
 	if ((verb == ACTION_OPEN) && (obj1._id == OUTERHATCH)) {
 		if (obj1.hasProperty(OPENED))
@@ -1430,7 +1840,34 @@ bool ShipGenerator::interact(Action verb, Object &obj1, Object &obj2) {
 	return true;
 }
 
+ShipOuterSpace::ShipOuterSpace(SupernovaEngine *vm, GameManager *gm) {
+	_vm = vm;
+	_gm = gm;
+
+	_fileNumber = 4;
+	_id = OUTSIDE;
+	_shown[0] = kShownTrue;
+
+	_objectState[0] = Object(_id, kStringHatch,kStringDefaultDescription,NULLOBJECT,EXIT,0,0,0,GENERATOR,3);
+	_objectState[1] = Object(_id, kStringRope,kStringDefaultDescription,NULLOBJECT,UNNECESSARY,255,255,0);
+}
+
+
 // Arsano
+ArsanoRocks::ArsanoRocks(SupernovaEngine *vm, GameManager *gm) {
+	_vm = vm;
+	_gm = gm;
+
+	_fileNumber = 12;
+	_id = OUTSIDE;
+	_shown[0] = kShownTrue;
+
+	_objectState[0] = Object(_id, kStringRope,kStringDefaultDescription,NULLOBJECT,UNNECESSARY | EXIT,0,0,0,GENERATOR,12);
+	_objectState[1] = Object(_id, kStringStone,kStringDefaultDescription,STONE,NULLTYPE,1,1,0);
+	_objectState[2] = Object(_id, kStringStone,kStringDefaultDescription,NULLOBJECT,NULLTYPE,2,2,0);
+	_objectState[3] = Object(_id, kStringCaveOpening,kStringCaveOpeningDescription,NULLOBJECT,NULLTYPE,255,255,0,CAVE,1);
+}
+
 void ArsanoRocks::onEntrance() {
 	_gm->great(8);
 }
@@ -1452,6 +1889,33 @@ bool ArsanoRocks::interact(Action verb, Object &obj1, Object &obj2) {
 	return false;
 }
 
+ArsanoCave::ArsanoCave(SupernovaEngine *vm, GameManager *gm) {
+	_vm = vm;
+	_gm = gm;
+
+	_fileNumber = 12;
+	_id = CAVE;
+
+	_objectState[0] = Object(_id, kStringExit,kStringExitDescription,NULLOBJECT,EXIT,255,255,0,ROCKS,22);
+	_objectState[1] = Object(_id, kStringExit,kStringDefaultDescription,NULLOBJECT,EXIT,255,255,0,MEETUP,2);
+}
+
+ArsanoMeetup::ArsanoMeetup(SupernovaEngine *vm, GameManager *gm) {
+	_vm = vm;
+	_gm = gm;
+
+	_fileNumber = 37;
+	_id = MEETUP;
+	_shown[0] = kShownTrue;
+
+	_objectState[0] = Object(_id, kStringCave,kStringDefaultDescription,NULLOBJECT,EXIT,255,255,0,CAVE,22);
+	_objectState[1] = Object(_id, kStringSign,kStringSignDescription,MEETUP_SIGN,NULLTYPE,0,0,0);
+	_objectState[2] = Object(_id, kStringEntrance,kStringDefaultDescription,DOOR,EXIT,1,1,0,ENTRANCE,7);
+	_objectState[3] = Object(_id, kStringStar,kStringDefaultDescription,STAR,NULLTYPE,2,2,0);
+	_objectState[4] = Object(_id, kStringSpaceshift,kStringDefaultDescription,SPACESHIPS,COMBINABLE,3,3,0);
+	_objectState[5] = Object(_id, kStringSpaceshift,kStringDefaultDescription,SPACESHIP,COMBINABLE,4,4,0);
+}
+
 void ArsanoMeetup::onEntrance() {
 	if (isSectionVisible(7)) {
 		_gm->wait(3);
@@ -1525,6 +1989,51 @@ bool ArsanoMeetup::interact(Action verb, Object &obj1, Object &obj2) {
 	return true;
 }
 
+ArsanoEntrance::ArsanoEntrance(SupernovaEngine *vm, GameManager *gm) {
+	_vm = vm;
+	_gm = gm;
+
+	_fileNumber = 10;
+	_id = ENTRANCE;
+	_shown[0] = kShownTrue;
+
+	_objectState[0] = Object(_id, kStringPorter,kStringPorterDescription,PORTER,TALK,0,0,0);
+	_objectState[1] = Object(_id, kStringDoor,kStringDefaultDescription,NULLOBJECT,EXIT | OPENABLE | CLOSED,1,1,0,NULLROOM,5);
+	_objectState[2] = Object(_id, kStringSign,kStringSignDescription,KITCHEN_SIGN,NULLTYPE,2,2,0);
+	_objectState[3] = Object(_id, kStringChewingGum,kStringDefaultDescription,SCHNUCK,TAKE,255,255,10+128);
+	_objectState[4] = Object(_id, kStringGummyBears,kStringDefaultDescription,SCHNUCK,TAKE,255,255,11+128);
+	_objectState[5] = Object(_id, kStringChocolateBall,kStringDefaultDescription,SCHNUCK,TAKE,255,255,12+128);
+	_objectState[6] = Object(_id, kStringEgg,kStringDefaultDescription,EGG,TAKE,255,255,13+128);
+	_objectState[7] = Object(_id, kStringLiquorice,kStringDefaultDescription,SCHNUCK,TAKE,255,255,14+128);
+	_objectState[8] = Object(_id, kStringPill,kStringPillDescription,PILL,TAKE,255,255,0);
+	_objectState[9] = Object(_id, kStringSlot,kStringDefaultDescription,CAR_SLOT,COMBINABLE,6,6,0);
+	_objectState[10] = Object(_id, kStringVendingMachine,kStringVendingMachineDescription,NULLOBJECT,NULLTYPE,5,5,0);
+	_objectState[11] = Object(_id, kStringToilet,kStringToiletDescription,ARSANO_BATHROOM,NULLTYPE,255,255,0);
+	_objectState[12] = Object(_id, kStringButton,kStringDefaultDescription,BATHROOM_BUTTON,PRESS,3,3,0);
+	_objectState[13] = Object(_id, kStringSign,kStringSignDescription,BATHROOM_SIGN,NULLTYPE,4,4,0);
+	_objectState[14] = Object(_id, kStringStaircase,kStringDefaultDescription,STAIRCASE,EXIT,8,8,0,REST,3);
+	_objectState[15] = Object(_id, kStringExit,kStringDefaultDescription,MEETUP_EXIT,EXIT,255,255,0,MEETUP,22);
+	_objectState[16] = Object(_id, kStringCoins,kStringCoinsDescription,COINS,TAKE|COMBINABLE,255,255,0);
+	_objectState[17] = Object(_id, kStringTabletPackage,kStringTabletPackageDescription,PILL_HULL,TAKE,255,255,0);
+
+	_dialog1[0] = kStringArsanoDialog7;
+	_dialog1[1] = kStringArsanoDialog1;
+	_dialog1[2] = kStringArsanoDialog8;
+	_dialog1[3] = kStringArsanoDialog9;
+	_dialog1[4] = kStringDialogSeparator;
+
+	_dialog2[0] = kStringArsanoDialog1;
+	_dialog2[1] = kStringArsanoDialog2;
+	_dialog2[2] = kStringArsanoDialog3;
+	_dialog2[3] = kStringArsanoDialog4;
+	_dialog2[4] = kStringDialogSeparator;
+
+	_dialog3[0] = kStringArsanoDialog5;
+	_dialog3[1] = kStringArsanoDialog6;
+
+	_eyewitness = 5;
+}
+
 void ArsanoEntrance::animation() {
 	if (!_vm->_screen->isMessageShown() && isSectionVisible(kMaxSection - 5)) {
 		_gm->animationOff(); // to avoid recursive call
@@ -1751,6 +2260,21 @@ bool ArsanoEntrance::interact(Action verb, Object &obj1, Object &obj2) {
 	return true;
 }
 
+ArsanoRemaining::ArsanoRemaining(SupernovaEngine *vm, GameManager *gm) {
+	_vm = vm;
+	_gm = gm;
+
+	_fileNumber = 28;
+	_id = REST;
+	_shown[0] = kShownTrue;
+
+	_objectState[0] = Object(_id, kStringStaircase,kStringDefaultDescription,NULLOBJECT,EXIT,0,0,0,ENTRANCE,17);
+	_objectState[1] = Object(_id, kStringChair,kStringDefaultDescription,NULLOBJECT,EXIT,1,1,0,ROGER,2);
+	_objectState[2] = Object(_id, kStringShoes,kStringShoesDescription,NULLOBJECT,NULLTYPE,2,2,0);
+
+	_chewing = kShownTrue;
+}
+
 void ArsanoRemaining::animation() {
 	switch (_i) {
 	case  0:
@@ -1911,6 +2435,32 @@ void ArsanoRemaining::animation() {
 	_gm->setAnimationTimer(3);
 }
 
+ArsanoRoger::ArsanoRoger(SupernovaEngine *vm, GameManager *gm) {
+	_vm = vm;
+	_gm = gm;
+
+	_fileNumber = 29;
+	_id = ROGER;
+	_shown[0] = kShownTrue;
+
+	_objectState[0] = Object(_id, kStringExit,kStringDefaultDescription,NULLOBJECT,EXIT,255,255,0,REST,19);
+	_objectState[1] = Object(_id, kStringFrogFace,kStringDefaultDescription,ROGER_W,TALK,0,0,0);
+	_objectState[2] = Object(_id, kStringScrible,kStringScribleDescription,NULLOBJECT,NULLTYPE,3,3,0);
+	_objectState[3] = Object(_id, kStringWallet,kStringDefaultDescription,WALLET,TAKE,1,1,4);
+	_objectState[4] = Object(_id, kStringMenu,kStringMenuDescription,NULLOBJECT,UNNECESSARY,2,2,0);
+	_objectState[5] = Object(_id, kStringCup,kStringCupDescription,CUP,UNNECESSARY,4,4,0);
+	_objectState[6] = Object(_id, kStringChessGame,kStringDefaultDescription,NULLOBJECT,UNNECESSARY,255,255,0);
+	_objectState[7] = Object(_id, kStringBill,kStringBillDescription,NULLOBJECT,TAKE|COMBINABLE,255,255,0);
+	_objectState[8] = Object(_id, kStringKeycard3,kStringDefaultDescription,KEYCARD_R,TAKE|COMBINABLE,255,255,0);
+
+	_dialog1[0] = kStringDialogArsanoRoger1;
+	_dialog1[1] = kStringDialogArsanoRoger2;
+	_dialog1[2] = kStringDialogArsanoRoger3;
+	_dialog1[3] = kStringDialogSeparator;
+
+	_eyewitness = 5;
+}
+
 void ArsanoRoger::onEntrance() {
 	if (!sentenceRemoved(0, 2)) {
 		_gm->say(kStringArsanoRoger1);
@@ -2035,6 +2585,27 @@ bool ArsanoRoger::interact(Action verb, Object &obj1, Object &obj2) {
 	return true;
 }
 
+ArsanoGlider::ArsanoGlider(SupernovaEngine *vm, GameManager *gm) {
+	_vm = vm;
+	_gm = gm;
+
+	_fileNumber = 19;
+	_id = GLIDER;
+	_shown[0] = kShownTrue;
+
+	_objectState[0] = Object(_id, kStringExit,kStringDefaultDescription,NULLOBJECT,EXIT,255,255,0,MEETUP,15);
+	_objectState[1] = Object(_id, kStringButton,kStringDefaultDescription,GLIDER_BUTTON1,PRESS,0,0,0);
+	_objectState[2] = Object(_id, kStringButton,kStringDefaultDescription,GLIDER_BUTTON2,PRESS,1,1,0);
+	_objectState[3] = Object(_id, kStringButton,kStringDefaultDescription,GLIDER_BUTTON3,PRESS,2,2,0);
+	_objectState[4] = Object(_id, kStringButton,kStringDefaultDescription,GLIDER_BUTTON4,PRESS,3,3,0);
+	_objectState[5] = Object(_id, kStringKeycard,kStringDefaultDescription,GLIDER_KEYCARD,TAKE|COMBINABLE,255,255,0);
+	_objectState[6] = Object(_id, kStringSlot,kStringDefaultDescription,GLIDER_SLOT,COMBINABLE,4,4,0);
+	_objectState[7] = Object(_id, kStringCompartment,kStringDefaultDescription,NULLOBJECT,OPENABLE,5,6,6);
+	_objectState[8] = Object(_id, kStringKeyboard,kStringDefaultDescription,GLIDER_BUTTONS,NULLTYPE,7,7,0);
+	_objectState[9] = Object(_id, kStringAnnouncement,kStringAnnouncementDescription,GLIDER_DISPLAY,NULLTYPE,8,8,0);
+	_objectState[10] = Object(_id, kStringInstruments,kStringAnnouncementDescription,GLIDER_INSTRUMENTS,NULLTYPE,9,9,0);
+}
+
 void ArsanoGlider::animation() {
 	if (isSectionVisible(8)) {
 		setSectionVisible(24 + _sinus, false);
@@ -2112,6 +2683,31 @@ bool ArsanoGlider::interact(Action verb, Object &obj1, Object &obj2) {
 	return true;
 }
 
+ArsanoMeetup2::ArsanoMeetup2(SupernovaEngine *vm, GameManager *gm) {
+	_vm = vm;
+	_gm = gm;
+
+	_fileNumber = 38;
+	_id = MEETUP2;
+	_shown[0] = kShownTrue;
+
+	_objectState[0] = Object(_id, kStringRoger, kStringDefaultDescription, ROGER_W, TALK, 255, 255, 0);
+	_objectState[1] = Object(_id, kStringSpaceshift, kStringDefaultDescription, SPACESHIP, COMBINABLE, 255, 255, 0);
+	_objectState[2] = Object(_id, kStringCave, kStringDefaultDescription, NULLOBJECT, EXIT, 255, 255, 0, CAVE, 22);
+
+	_dialog1[0] = kStringDialogArsanoMeetup2_1;
+	_dialog1[1] = kStringDialogArsanoMeetup2_2;
+	_dialog2[0] = kStringDialogArsanoMeetup2_3;
+	_dialog2[1] = kStringDialogArsanoMeetup2_4;
+	_dialog3[0] = kStringDialogArsanoMeetup2_5;
+	_dialog3[1] = kStringDialogArsanoMeetup2_6;
+	_dialog3[2] = kStringDialogArsanoMeetup2_7;
+	_dialog3[3] = kStringDialogArsanoMeetup2_8;
+	_dialog4[0] = kStringDialogArsanoMeetup2_9;
+	_dialog4[1] = kStringDialogArsanoMeetup2_10;
+	_dialog4[2] = kStringDialogArsanoMeetup2_11;
+}
+
 void ArsanoMeetup2::onEntrance() {
 	if (sentenceRemoved(0, 1)) {
 		if (sentenceRemoved(1, 1))
@@ -2243,6 +2839,30 @@ void ArsanoMeetup2::shipStart() {
 	_vm->renderImage(11 + 128);
 }
 
+ArsanoMeetup3::ArsanoMeetup3(SupernovaEngine *vm, GameManager *gm) {
+	_vm = vm;
+	_gm = gm;
+
+	_fileNumber = 39;
+	_id = MEETUP3;
+	_shown[0] = kShownTrue;
+
+	_objectState[0] = Object(_id, kStringUfo,kStringUfoDescription,UFO,EXIT,0,0,0,NULLROOM,3);
+	_objectState[1] = Object(_id, kStringStar,kStringDefaultDescription,STAR,NULLTYPE,1,1,0);
+	_objectState[2] = Object(_id, kStringCave,kStringDefaultDescription,NULLOBJECT,EXIT,255,255,0,CAVE,22);
+
+	_dialog2[0] = kStringArsanoDialog1;
+	_dialog2[1] = kStringDialogArsanoMeetup3_1;
+	_dialog2[2] = kStringDialogArsanoMeetup3_2;
+	_dialog2[3] = kStringDialogArsanoMeetup3_3;
+	_dialog3[0] = kStringDialogArsanoMeetup3_4;
+	_dialog3[1] = kStringDialogArsanoMeetup3_5;
+
+	_dialogsX[0] = kStringDialogX1;
+	_dialogsX[1] = kStringDialogX2;
+	_dialogsX[2] = kStringDialogX3;
+}
+
 bool ArsanoMeetup3::interact(Action verb, Object &obj1, Object &obj2) {
 	byte row2[6] = {1, 1, 1, 1, 0, 0};
 	byte row3[6] = {1, 1, 0, 0, 0, 0};
@@ -2360,6 +2980,29 @@ bool ArsanoMeetup3::interact(Action verb, Object &obj1, Object &obj2) {
 	return true;
 }
 
+// Axacuss
+AxacussCell::AxacussCell(SupernovaEngine *vm, GameManager *gm) {
+	_vm = vm;
+	_gm = gm;
+
+	_fileNumber = 43;
+	_id = CELL;
+	_shown[0] = kShownTrue;
+	_shown[1] = kShownTrue;
+	_shown[31] = kShownTrue;
+
+	_objectState[0] = Object(_id, kStringButton,kStringDefaultDescription,CELL_BUTTON,PRESS,1,1,0);
+	_objectState[1] = Object(_id, kStringDoor,kStringDefaultDescription,CELL_DOOR,EXIT|OPENABLE|CLOSED,0,0,31+128,CORRIDOR4,1);
+	_objectState[2] = Object(_id, kStringTray,kStringTrayDescription,TRAY,UNNECESSARY,255,255,0);
+	_objectState[3] = Object(_id, kStringLamp,kStringLampDescription,NULLOBJECT,COMBINABLE,3,3,0);
+	_objectState[4] = Object(_id, kStringEyes,kStringEyesDescription,NULLOBJECT,NULLTYPE,4,4,0);
+	_objectState[5] = Object(_id, kStringWire,kStringDefaultDescription,CELL_WIRE,COMBINABLE|TAKE,6,6,0);
+	_objectState[6] = Object(_id, kStringSocket,kStringSocketDescription,SOCKET,COMBINABLE,5,5,0);
+	_objectState[7] = Object(_id, kStringMetalBlock,kStringMetalBlockDescription,MAGNET,TAKE|COMBINABLE,255,255,30);
+	_objectState[8] = Object(_id, kStringRobot,kStringRobotDescription,NULLOBJECT,NULLTYPE,255,255,0);
+	_objectState[9] = Object(_id, kStringTable,kStringTableDescription,CELL_TABLE,COMBINABLE,2,2,0);
+}
+
 void AxacussCell::onEntrance() {
 	if (_gm->_state._dream) {
 		_vm->renderMessage(kStringAxacussCell_1);
@@ -2533,15 +3176,69 @@ bool AxacussCell::interact(Action verb, Object &obj1, Object &obj2) {
 	return true;
 }
 
+AxacussCorridor1::AxacussCorridor1(SupernovaEngine *vm, GameManager *gm) {
+	_vm = vm;
+	_gm = gm;
+
+	_fileNumber = 16;
+	_id = CORRIDOR1;
+	_shown[0] = kShownTrue;
+	_shown[3] = kShownTrue;
+	_shown[4] = kShownTrue;
+	_shown[5] = kShownTrue;
+	_shown[13] = kShownTrue;
+	_shown[21] = kShownTrue;
+	_shown[23] = kShownTrue;
+	_shown[25] = kShownTrue;
+
+	_objectState[0] = Object(_id, kStringExit,kStringDefaultDescription,NULLOBJECT,EXIT,2,2,0,GUARD3,2);
+	_objectState[1] = Object(_id, kStringExit,kStringDefaultDescription,NULLOBJECT,EXIT,3,3,0,CORRIDOR2,22);
+}
 
 void AxacussCorridor1::onEntrance() {
 	_gm->corridorOnEntrance();
 }
 
+
+AxacussCorridor2::AxacussCorridor2(SupernovaEngine *vm, GameManager *gm) {
+	_vm = vm;
+	_gm = gm;
+
+	_fileNumber = 16;
+	_id = CORRIDOR2;
+	_shown[0] = kShownTrue;
+	_shown[2] = kShownTrue;
+	_shown[3] = kShownTrue;
+	_shown[4] = kShownTrue;
+	_shown[5] = kShownTrue;
+	_shown[17] = kShownTrue;
+	_shown[21] = kShownTrue;
+	_shown[24] = kShownTrue;
+
+	_objectState[0] = Object(_id, kStringExit,kStringDefaultDescription,NULLOBJECT,EXIT,2,2,0,CORRIDOR1,2);
+	_objectState[1] = Object(_id, kStringExit,kStringDefaultDescription,NULLOBJECT,EXIT,3,3,0,CORRIDOR3,22);
+	_objectState[2] = Object(_id, kStringExit,kStringDefaultDescription,NULLOBJECT,EXIT,1,1,0,CORRIDOR4,14);
+}
+
 void AxacussCorridor2::onEntrance() {
 	_gm->corridorOnEntrance();
 }
 
+AxacussCorridor3::AxacussCorridor3(SupernovaEngine *vm, GameManager *gm) {
+	_vm = vm;
+	_gm = gm;
+
+	_fileNumber = 16;
+	_id = CORRIDOR3;
+	_shown[0] = kShownTrue;
+	_shown[3] = kShownTrue;
+	_shown[5] = kShownTrue;
+	_shown[19] = kShownTrue;
+	_shown[23] = kShownTrue;
+
+	_objectState[0] = Object(_id, kStringExit,kStringDefaultDescription,NULLOBJECT,EXIT,2,2,0,CORRIDOR2,2);
+}
+
 void AxacussCorridor3::onEntrance() {
 	_gm->corridorOnEntrance();
 }
@@ -2553,6 +3250,31 @@ void AxacussCorridor4::onEntrance() {
 		_gm->busted(0);
 }
 
+AxacussCorridor4::AxacussCorridor4(SupernovaEngine *vm, GameManager *gm) {
+	_vm = vm;
+	_gm = gm;
+
+	_fileNumber = 16;
+	_id = CORRIDOR4;
+	_shown[0] = kShownTrue;
+	_shown[1] = kShownTrue;
+	_shown[2] = kShownTrue;
+	_shown[8] = kShownTrue;
+	_shown[9] = kShownTrue;
+	_shown[11] = kShownTrue;
+	_shown[15] = kShownTrue;
+	_shown[18] = kShownTrue;
+	_shown[20] = kShownTrue;
+	_shown[26] = kShownTrue;
+
+	_objectState[0] = Object(_id, kStringExit,kStringDefaultDescription,NULLOBJECT,EXIT,0,0,0,CORRIDOR2,10);
+	_objectState[1] = Object(_id, kStringExit,kStringDefaultDescription,NULLOBJECT,EXIT,1,1,0,GUARD,14);
+	_objectState[2] = Object(_id, kStringCellDoor,kStringCellDoorDescription,DOOR,EXIT|OPENABLE|OPENED|CLOSED,7,7,0,CELL,16);
+	_objectState[3] = Object(_id, kStringLaptop,kStringDefaultDescription,NEWSPAPER,TAKE,6,6,8);
+	_objectState[4] = Object(_id, kStringWristwatch,kStringDefaultDescription,WATCH,TAKE|COMBINABLE,255,255,8);
+	_objectState[5] = Object(_id, kStringTable,kStringDefaultDescription,TABLE,COMBINABLE,5,5,0);
+}
+
 void AxacussCorridor4::animation() {
 }
 
@@ -2583,6 +3305,41 @@ bool AxacussCorridor4::interact(Action verb, Object &obj1, Object &obj2) {
 	return true;
 }
 
+AxacussCorridor5::AxacussCorridor5(SupernovaEngine *vm, GameManager *gm) {
+	_vm = vm;
+	_gm = gm;
+
+	_fileNumber = 16;
+	_id = CORRIDOR5;
+	_shown[0] = kShownTrue;
+	_shown[3] = kShownTrue;
+	_shown[4] = kShownTrue;
+	_shown[5] = kShownTrue;
+	_shown[12] = kShownTrue;
+	_shown[22] = kShownTrue;
+	_shown[23] = kShownTrue;
+	_shown[24] = kShownTrue;
+
+	_objectState[0] = Object(_id, kStringExit,kStringDefaultDescription,DOOR,EXIT,2,2,0,NULLROOM,2);
+	_objectState[1] = Object(_id, kStringExit,kStringDefaultDescription,NULLOBJECT,EXIT,3,3,0,CORRIDOR6,22);
+
+	_dialog1[0] = kStringDialogAxacussCorridor5_1;
+	_dialog1[1] = kStringDialogAxacussCorridor5_2;
+	_dialog2[0] = kStringDialogAxacussCorridor5_3;
+	_dialog2[1] = kStringDialogAxacussCorridor5_4;
+	_dialog3[0] = kStringDialogAxacussCorridor5_5;
+	_dialog3[1] = kStringDialogAxacussCorridor5_6;
+	_dialog3[2] = kStringDialogAxacussCorridor5_7;
+	_dialog3[3] = kStringDialogAxacussCorridor5_7;
+
+	_rows[0] = 1;
+	_rows[1] = 1;
+	_rows[2] = 1;
+	_rows[3] = 1;
+	_rows[4] = 0;
+	_rows[5] = 0;
+}
+
 void AxacussCorridor5::onEntrance() {
 	_gm->corridorOnEntrance();
 }
@@ -2665,6 +3422,26 @@ bool AxacussCorridor5::interact(Action verb, Object &obj1, Object &obj2) {
 	return false;
 }
 
+AxacussCorridor6::AxacussCorridor6(SupernovaEngine *vm, GameManager *gm) {
+	_vm = vm;
+	_gm = gm;
+
+	_fileNumber = 16;
+	_id = CORRIDOR6;
+	_shown[0] = kShownTrue;
+	_shown[3] = kShownTrue;
+	_shown[4] = kShownTrue;
+	_shown[5] = kShownTrue;
+	_shown[6] = kShownTrue;
+	_shown[22] = kShownTrue;
+	_shown[24] = kShownTrue;
+	_shown[25] = kShownTrue;
+
+	_objectState[0] = Object(_id, kStringExit,kStringDefaultDescription,NULLOBJECT,EXIT,2,2,0,CORRIDOR5,2);
+	_objectState[1] = Object(_id, kStringExit,kStringDefaultDescription,NULLOBJECT,EXIT,3,3,0,CORRIDOR7,22);
+	_objectState[2] = Object(_id, kStringDoor,kStringDefaultDescription,DOOR,OPENABLE|CLOSED,255,255,0,CORRIDOR8,13);
+}
+
 void AxacussCorridor6::onEntrance() {
 	_gm->corridorOnEntrance();
 }
@@ -2685,10 +3462,47 @@ bool AxacussCorridor6::interact(Action verb, Object &obj1, Object &obj2) {
 	return true;
 }
 
+AxacussCorridor7::AxacussCorridor7(SupernovaEngine *vm, GameManager *gm) {
+	_vm = vm;
+	_gm = gm;
+
+	_fileNumber = 16;
+	_id = CORRIDOR7;
+	_shown[0] = kShownTrue;
+	_shown[3] = kShownTrue;
+	_shown[4] = kShownTrue;
+	_shown[5] = kShownTrue;
+	_shown[10] = kShownTrue;
+	_shown[21] = kShownTrue;
+	_shown[24] = kShownTrue;
+	_shown[25] = kShownTrue;
+
+	_objectState[0] = Object(_id, kStringExit,kStringDefaultDescription,NULLOBJECT,EXIT,2,2,0,CORRIDOR6,2);
+	_objectState[1] = Object(_id, kStringExit,kStringDefaultDescription,NULLOBJECT,EXIT,3,3,0,GUARD,22);
+}
+
 void AxacussCorridor7::onEntrance() {
 	_gm->corridorOnEntrance();
 }
 
+AxacussCorridor8::AxacussCorridor8(SupernovaEngine *vm, GameManager *gm) {
+	_vm = vm;
+	_gm = gm;
+
+	_fileNumber = 16;
+	_id = CORRIDOR8;
+	_shown[0] = kShownTrue;
+	_shown[1] = kShownTrue;
+	_shown[4] = kShownTrue;
+	_shown[15] = kShownTrue;
+	_shown[20] = kShownTrue;
+	_shown[22] = kShownTrue;
+	_shown[28] = kShownTrue;
+
+	_objectState[0] = Object(_id, kStringDoor,kStringDefaultDescription,DOOR,EXIT|OPENABLE,0,0,0,CORRIDOR6,10);
+	_objectState[1] = Object(_id, kStringExit,kStringDefaultDescription,NULLOBJECT,EXIT,3,3,0,BCORRIDOR,22);
+}
+
 void AxacussCorridor8::onEntrance() {
 	_gm->corridorOnEntrance();
 }
@@ -2717,6 +3531,24 @@ bool AxacussCorridor8::interact(Action verb, Object &obj1, Object &obj2) {
 	return true;
 }
 
+AxacussCorridor9::AxacussCorridor9(SupernovaEngine *vm, GameManager *gm) {
+	_vm = vm;
+	_gm = gm;
+
+	_fileNumber = 16;
+	_id = CORRIDOR9;
+	_shown[0] = kShownTrue;
+	_shown[1] = kShownTrue;
+	_shown[3] = kShownTrue;
+	_shown[14] = kShownTrue;
+	_shown[19] = kShownTrue;
+	_shown[23] = kShownTrue;
+	_shown[28] = kShownTrue;
+
+	_objectState[0] = Object(_id, kStringExit,kStringDefaultDescription,NULLOBJECT,EXIT,2,2,0,BCORRIDOR,2);
+	_objectState[1] = Object(_id, kStringDoor,kStringDefaultDescription,DOOR,EXIT|OPENABLE,0,0,0,GUARD,10);
+}
+
 void AxacussCorridor9::onEntrance() {
 	_gm->corridorOnEntrance();
 }
@@ -2744,6 +3576,25 @@ bool AxacussCorridor9::interact(Action verb, Object &obj1, Object &obj2) {
 	return true;
 }
 
+AxacussBcorridor::AxacussBcorridor(SupernovaEngine *vm, GameManager *gm) {
+	_vm = vm;
+	_gm = gm;
+
+	_fileNumber = 6;
+	_id = BCORRIDOR;
+	_shown[0] = kShownTrue;
+	_shown[3] = kShownTrue;
+
+	_objectState[0] = Object(_id, kStringPillar,kStringDefaultDescription,PILLAR1,NULLTYPE,4,4,0);
+	_objectState[1] = Object(_id, kStringPillar,kStringDefaultDescription,PILLAR2,NULLTYPE,5,5,0);
+	_objectState[2] = Object(_id, kStringExit,kStringDefaultDescription,NULLOBJECT,EXIT,6,6,0,CORRIDOR8,2);
+	_objectState[3] = Object(_id, kStringExit,kStringDefaultDescription,NULLOBJECT,EXIT,7,7,0,CORRIDOR9,22);
+	_objectState[4] = Object(_id, kStringDoor,kStringDoorDescription1,DOOR1,EXIT|OPENABLE|CLOSED|OCCUPIED,0,0,1,OFFICE_L1,6);
+	_objectState[5] = Object(_id, kStringDoor,kStringDoorDescription2,DOOR2,EXIT|OPENABLE|CLOSED|OCCUPIED,1,1,2,OFFICE_L2,16);
+	_objectState[6] = Object(_id, kStringDoor,kStringDoorDescription3,DOOR3,EXIT|OPENABLE|OPENED,2,2,3,OFFICE_R1,8);
+	_objectState[7] = Object(_id, kStringDoor,kStringDoorDescription4,DOOR4,EXIT|OPENABLE|CLOSED|OCCUPIED,3,3,4,OFFICE_R2,18);
+}
+
 void AxacussBcorridor::onEntrance() {
 	_gm->corridorOnEntrance();
 	if (isSectionVisible(7))
@@ -2827,6 +3678,26 @@ bool AxacussBcorridor::interact(Action verb, Object &obj1, Object &obj2) {
 	return true;
 }
 
+AxacussIntersection::AxacussIntersection(SupernovaEngine *vm, GameManager *gm) {
+	_vm = vm;
+	_gm = gm;
+
+	_fileNumber = 40;
+	_id = GUARD;
+	_shown[0] = kShownTrue;
+
+	_objectState[0] = Object(_id, kStringExit, kStringDefaultDescription, NULLOBJECT, EXIT, 255, 255, 0, CORRIDOR4, 21);
+	_objectState[1] = Object(_id, kStringCorridor, kStringDefaultDescription, NULLOBJECT, EXIT, 3, 3, 0, CORRIDOR7, 5);
+	_objectState[2] = Object(_id, kStringDoor, kStringDefaultDescription, DOOR, EXIT | OPENABLE, 1, 1, 6, CORRIDOR9, 3);
+	_objectState[3] = Object(_id, kStringAxacussan, kStringAxacussanDescription, GUARDIAN, TALK, 0, 0, 0);
+	_objectState[4] = Object(_id, kStringImage, kStringImageDescription2, NULLOBJECT, NULLTYPE, 2, 2, 0);
+	_objectState[5] = Object(_id, kStringMastercard, kStringMastercardDescription, MASTERKEYCARD, TAKE | COMBINABLE, 255, 255, 1);
+
+	_dialogsX[0] = kStringDialogX1;
+	_dialogsX[1] = kStringDialogX2;
+	_dialogsX[2] = kStringDialogX3;
+}
+
 bool AxacussIntersection::interact(Action verb, Object &obj1, Object &obj2) {
 	byte rowsX[6] = {1, 1, 1, 0, 0, 0};
 
@@ -2857,6 +3728,27 @@ bool AxacussIntersection::interact(Action verb, Object &obj1, Object &obj2) {
 	return true;
 }
 
+AxacussExit::AxacussExit(SupernovaEngine *vm, GameManager *gm) {
+	_vm = vm;
+	_gm = gm;
+
+	_fileNumber = 42;
+	_id = GUARD3;
+	_shown[0] = kShownTrue;
+
+	_objectState[0] = Object(_id, kStringExit,kStringDefaultDescription,NULLOBJECT,EXIT,255,255,0,CORRIDOR1,22);
+	_objectState[1] = Object(_id, kStringDoor,kStringDefaultDescription,NULLOBJECT,EXIT|OPENABLE|CLOSED,0,0,0,NULLROOM,20);
+	_objectState[2] = Object(_id, kStringDoor,kStringDefaultDescription,NULLOBJECT,EXIT|OPENABLE|CLOSED,1,1,0,NULLROOM,15);
+	_objectState[3] = Object(_id, kStringDoor,kStringDefaultDescription,DOOR,EXIT|OPENABLE,2,2,11,OFFICE_L,0);
+	_objectState[4] = Object(_id, kStringLamp2,kStringDefaultDescription,LAMP,COMBINABLE,3,3,0);
+	_objectState[5] = Object(_id, kStringAxacussan,kStringDefaultDescription,GUARDIAN,TALK,5,5,0);
+	_objectState[6] = Object(_id, kStringImage,kStringGenericDescription5,NULLOBJECT,NULLTYPE,4,4,0);
+
+	_dialogsX[0] = kStringDialogX1;
+	_dialogsX[1] = kStringDialogX2;
+	_dialogsX[2] = kStringDialogX3;
+}
+
 bool AxacussExit::interact(Action verb, Object &obj1, Object &obj2) {
 	byte rowsX[6] = {1, 1, 1, 0, 0, 0};
 
@@ -2887,6 +3779,25 @@ bool AxacussExit::interact(Action verb, Object &obj1, Object &obj2) {
 	return true;
 }
 
+AxacussOffice1::AxacussOffice1(SupernovaEngine *vm, GameManager *gm) {
+	_vm = vm;
+	_gm = gm;
+
+	_fileNumber = 7;
+	_id = OFFICE_L1;
+	_shown[0] = kShownTrue;
+	_shown[2] = kShownTrue;
+	_shown[7] = kShownTrue;
+	_shown[9] = kShownTrue;
+	_shown[16] = kShownTrue;
+
+	_objectState[0] = Object(_id, kStringDoor,kStringDefaultDescription,DOOR,EXIT|OPENABLE|OPENED,6,6,9,BCORRIDOR,9);
+	_objectState[1] = Object(_id, kStringComputer,kStringDefaultDescription,COMPUTER,COMBINABLE,4,4,0);
+	_objectState[2] = Object(_id, kStringMoney,kStringMoneyDescription1,MONEY,TAKE,255,255,0);
+	_objectState[3] = Object(_id, kStringLocker,kStringLockerDescription,LOCKER,OPENABLE|CLOSED,5,5,0);
+	_objectState[4] = Object(_id, kStringLetter,kStringDefaultDescription,LETTER,UNNECESSARY,3,3,0);
+}
+
 bool AxacussOffice1::interact(Action verb, Object &obj1, Object &obj2) {
 	Common::String input;
 	if ((verb == ACTION_CLOSE) && (obj1._id == DOOR) &&
@@ -2972,6 +3883,24 @@ bool AxacussOffice1::interact(Action verb, Object &obj1, Object &obj2) {
 	return true;
 }
 
+AxacussOffice2::AxacussOffice2(SupernovaEngine *vm, GameManager *gm) {
+	_vm = vm;
+	_gm = gm;
+
+	_fileNumber = 7;
+	_id = OFFICE_L2;
+	_shown[0] = kShownTrue;
+	_shown[1] = kShownTrue;
+	_shown[9] = kShownTrue;
+	_shown[16] = kShownTrue;
+
+	_objectState[0] = Object(_id, kStringDoor,kStringDefaultDescription,DOOR,EXIT|OPENABLE|OPENED,6,6,9,BCORRIDOR,9);
+	_objectState[1] = Object(_id, kStringComputer,kStringDefaultDescription,COMPUTER,COMBINABLE,4,4,0);
+	_objectState[2] = Object(_id, kStringCube,kStringGenericDescription6,NULLOBJECT,NULLTYPE,0,0,0);
+	_objectState[3] = Object(_id, kStringImage,kStringGenericDescription7,NULLOBJECT,NULLTYPE,1,1,0);
+	_objectState[4] = Object(_id, kStringStrangeThing,kStringGenericDescription8,NULLOBJECT,UNNECESSARY,2,2,0);
+}
+
 bool AxacussOffice2::interact(Action verb, Object &obj1, Object &obj2) {
 	if ((verb == ACTION_CLOSE) && (obj1._id == DOOR) &&
 			obj1.hasProperty(OPENED)) {
@@ -2999,6 +3928,24 @@ bool AxacussOffice2::interact(Action verb, Object &obj1, Object &obj2) {
 	return true;
 }
 
+AxacussOffice3::AxacussOffice3(SupernovaEngine *vm, GameManager *gm) {
+	_vm = vm;
+	_gm = gm;
+
+	_fileNumber = 8;
+	_id = OFFICE_R1;
+	_shown[0] = kShownTrue;
+	_shown[1] = kShownTrue;
+	_shown[3] = kShownTrue;
+
+	_objectState[0] = Object(_id, kStringDoor,kStringDefaultDescription,DOOR,EXIT|OPENABLE|OPENED,0,0,3,BCORRIDOR,5);
+	_objectState[1] = Object(_id, kStringComputer,kStringDefaultDescription,COMPUTER,COMBINABLE,4,4,0);
+	_objectState[2] = Object(_id, kStringImage,kStringImageDescription2,NULLOBJECT,UNNECESSARY,1,1,0);
+	_objectState[3] = Object(_id, kStringImage,kStringImageDescription2,PAINTING,UNNECESSARY,2,2,0);
+	_objectState[4] = Object(_id, kStringPlant,kStringDefaultDescription,NULLOBJECT,UNNECESSARY,3,3,0);
+	_objectState[5] = Object(_id, kNoString,kStringDefaultDescription,MONEY,TAKE|COMBINABLE,255,255,0);
+}
+
 bool AxacussOffice3::interact(Action verb, Object &obj1, Object &obj2) {
 	if ((verb == ACTION_CLOSE) && (obj1._id == DOOR) &&
 			obj1.hasProperty(OPENED)) {
@@ -3030,6 +3977,22 @@ bool AxacussOffice3::interact(Action verb, Object &obj1, Object &obj2) {
 	return true;
 }
 
+AxacussOffice4::AxacussOffice4(SupernovaEngine *vm, GameManager *gm) {
+	_vm = vm;
+	_gm = gm;
+
+	_fileNumber = 8;
+	_id = OFFICE_R2;
+	_shown[0] = kShownTrue;
+	_shown[2] = kShownTrue;
+	_shown[3] = kShownTrue;
+
+	_objectState[0] = Object(_id, kStringDoor,kStringDefaultDescription,DOOR,EXIT|OPENABLE|OPENED,0,0,3,BCORRIDOR,5);
+	_objectState[1] = Object(_id, kStringComputer,kStringDefaultDescription,COMPUTER,COMBINABLE,4,4,0);
+	_objectState[2] = Object(_id, kStringStatue,kStringStatueDescription,NULLOBJECT,UNNECESSARY,6,6,0);
+	_objectState[3] = Object(_id, kStringPlant,kStringPlantDescription,NULLOBJECT,UNNECESSARY,5,5,0);
+}
+
 bool AxacussOffice4::interact(Action verb, Object &obj1, Object &obj2) {
 	if ((verb == ACTION_CLOSE) && (obj1._id == DOOR) && obj1.hasProperty(OPENED)) {
 		_vm->renderImage(_gm->invertSection(3));
@@ -3056,6 +4019,23 @@ bool AxacussOffice4::interact(Action verb, Object &obj1, Object &obj2) {
 	return true;
 }
 
+AxacussOffice5::AxacussOffice5(SupernovaEngine *vm, GameManager *gm) {
+	_vm = vm;
+	_gm = gm;
+
+	_fileNumber = 7;
+	_id = OFFICE_L;
+	_shown[0] = kShownTrue;
+	_shown[3] = kShownTrue;
+	_shown[5] = kShownTrue;
+	_shown[17] = kShownTrue;
+
+	_objectState[0] = Object(_id, kStringDoor,kStringDefaultDescription,DOOR,EXIT|OPENABLE|OPENED,6,6,17,GUARD3,9);
+	_objectState[1] = Object(_id, kStringComputer,kStringComputerDescription,COMPUTER,COMBINABLE,4,4,0);
+	_objectState[2] = Object(_id, kStringGraffiti,kStringGraffitiDescription,NULLOBJECT,NULLTYPE,7,7,0);
+	_objectState[3] = Object(_id, kStringMoney,kStringMoneyDescription2,MONEY,TAKE,8,8,0);
+}
+
 void AxacussOffice5::onEntrance() {
 	_gm->great(5);
 }
@@ -3074,6 +4054,20 @@ bool AxacussOffice5::interact(Action verb, Object &obj1, Object &obj2) {
 	return true;
 }
 
+AxacussElevator::AxacussElevator(SupernovaEngine *vm, GameManager *gm) {
+	_vm = vm;
+	_gm = gm;
+
+	_fileNumber = 3;
+	_id = ELEVATOR;
+	_shown[0] = kShownTrue;
+
+	_objectState[0] = Object(_id, kStringButton,kStringDefaultDescription,BUTTON1,PRESS,0,0,0);
+	_objectState[1] = Object(_id, kStringButton,kStringDefaultDescription,BUTTON2,PRESS,1,1,0);
+	_objectState[2] = Object(_id, kStringExit,kStringDefaultDescription,DOOR,EXIT,255,255,0,NULLROOM,22);
+	_objectState[3] = Object(_id, kStringJungle,kStringJungleDescription,JUNGLE,NULLTYPE,255,255,0,STATION,2);
+}
+
 bool AxacussElevator::interact(Action verb, Object &obj1, Object &obj2) {
 	if ((verb == ACTION_WALK) && (obj1._id == DOOR)) {
 		g_system->fillScreen(kColorBlack);
@@ -3135,6 +4129,17 @@ bool AxacussElevator::interact(Action verb, Object &obj1, Object &obj2) {
 	return true;
 }
 
+AxacussStation::AxacussStation(SupernovaEngine *vm, GameManager *gm) {
+	_vm = vm;
+	_gm = gm;
+
+	_fileNumber = 5;
+	_id = STATION;
+	_shown[0] = kShownTrue;
+	_objectState[0] = Object(_id, kStringSign,kStringDefaultDescription,STATION_SIGN,NULLTYPE,0,0,0);
+	_objectState[1] = Object(_id, kStringDoor,kStringDefaultDescription,DOOR,EXIT|OPENABLE|CLOSED,1,1,0,NULLROOM,7);
+}
+
 bool AxacussStation::interact(Action verb, Object &obj1, Object &obj2) {
 	if ((verb == ACTION_LOOK) && (obj1._id == STATION_SIGN)) {
 		_gm->changeRoom(SIGN);
@@ -3150,6 +4155,19 @@ bool AxacussStation::interact(Action verb, Object &obj1, Object &obj2) {
 	return true;
 }
 
+AxacussSign::AxacussSign(SupernovaEngine *vm, GameManager *gm) {
+	_vm = vm;
+	_gm = gm;
+
+	_fileNumber = 32;
+	_id = SIGN;
+	_shown[0] = kShownTrue;
+	_shown[1] = kShownTrue;
+
+	_objectState[0] = Object(_id, kStringExit,kStringDefaultDescription,NULLOBJECT,EXIT,255,255,0,STATION,22);
+	_objectState[1] = Object(_id, kStringSlot,kStringDefaultDescription,STATION_SLOT,COMBINABLE,0,0,0);
+}
+
 bool AxacussSign::interact(Action verb, Object &obj1, Object &obj2) {
 	if ((verb == ACTION_USE) && Object::combine(obj1, obj2, STATION_SLOT, MONEY) &&
 		isSectionVisible(1)) {
@@ -3163,6 +4181,7 @@ bool AxacussSign::interact(Action verb, Object &obj1, Object &obj2) {
 	return false;
 }
 
+
 Outro::Outro(SupernovaEngine *vm, GameManager *gm) {
 	_vm = vm;
 	_gm = gm;
diff --git a/engines/supernova/rooms.h b/engines/supernova/rooms.h
index b76c01f..e544997 100644
--- a/engines/supernova/rooms.h
+++ b/engines/supernova/rooms.h
@@ -39,76 +39,25 @@ class SupernovaEngine;
 
 class Room {
 public:
-	Room() {
-		_seen = false;
-		for (int i = 0; i < kMaxSection; ++i)
-			_shown[i] = kShownFalse;
-		for (int i = 0; i < kMaxDialog; ++i)
-			_sentenceRemoved[i] = 0;
-	}
-
-	bool hasSeen() {
-		return _seen;
-	}
-	void setRoomSeen(bool seen) {
-		_seen = seen;
-	}
-
-	int getFileNumber() const {
-		return _fileNumber;
-	}
-	RoomId getId() const {
-		return _id;
-	}
-
-	void setSectionVisible(uint section, bool visible) {
-		_shown[section] = visible ? kShownTrue : kShownFalse;
-	}
-
-	bool isSectionVisible(uint index) const {
-		return _shown[index] == kShownTrue;
-	}
-
-	void removeSentence(int sentence, int number) {
-		if (number > 0)
-			_sentenceRemoved[number - 1] |= (1 << sentence);
-	}
-
-	void addSentence(int sentence, int number) {
-		if (number > 0)
-			_sentenceRemoved[number - 1] &= ~(1 << sentence);
-	}
-
-	void addAllSentences(int number) {
-		if (number > 0)
-			_sentenceRemoved[number - 1] = 0;
-	}
-
-	bool sentenceRemoved(int sentence, int number) {
-		if (number <= 0)
-			return false;
-		return (_sentenceRemoved[number - 1] & (1 << sentence));
-	}
-
-	bool allSentencesRemoved(int maxSentence, int number) {
-		if (number <= 0)
-			return false;
-		for (int i = 0, flag = 1 ; i < maxSentence ; ++i, flag <<= 1)
-			if (!(_sentenceRemoved[number - 1] & flag))
-				return false;
-		return true;
-	}
-
-	Object *getObject(uint index) {
-		return &_objectState[index];
-	}
-
-	virtual ~Room() {}
-	virtual void animation() {}
-	virtual void onEntrance() {}
-	virtual bool interact(Action verb, Object &obj1, Object &obj2) {
-		return false;
-	}
+	Room();
+
+	bool hasSeen();
+	void setRoomSeen(bool seen);
+	int getFileNumber() const;
+	RoomId getId() const;
+	void setSectionVisible(uint section, bool visible);
+	bool isSectionVisible(uint index) const;
+	void removeSentence(int sentence, int number);
+	void addSentence(int sentence, int number);
+	void addAllSentences(int number);
+	bool sentenceRemoved(int sentence, int number);
+	bool allSentencesRemoved(int maxSentence, int number);
+	Object *getObject(uint index);
+
+	virtual ~Room();
+	virtual void animation();
+	virtual void onEntrance();
+	virtual bool interact(Action verb, Object &obj1, Object &obj2);
 	virtual bool serialize(Common::WriteStream *out);
 	virtual bool deserialize(Common::ReadStream *in, int version);
 
@@ -150,66 +99,21 @@ private:
 // Spaceship
 class ShipCorridor : public Room {
 public:
-	ShipCorridor(SupernovaEngine *vm, GameManager *gm) {
-		_vm = vm;
-		_gm = gm;
-
-		_fileNumber = 17;
-		_id = CORRIDOR;
-		_shown[0] = kShownTrue;
-		_shown[4] = kShownTrue;
-
-		_objectState[0] = Object(_id, kStringHatch, kStringDefaultDescription, HATCH1, OPENABLE | EXIT, 0, 6, 1, CABIN_L1, 15);
-		_objectState[1] = Object(_id, kStringHatch, kStringDefaultDescription, NULLOBJECT, OPENABLE | EXIT, 1, 7, 2, CABIN_L2, 10);
-		_objectState[2] = Object(_id, kStringHatch, kStringDefaultDescription, NULLOBJECT, OPENABLE | EXIT, 2, 8, 3, CABIN_L3, 5);
-		_objectState[3] = Object(_id, kStringHatch, kStringDefaultDescription, NULLOBJECT, OPENABLE | EXIT, 5, 11, 6, CABIN_R1, 19);
-		_objectState[4] = Object(_id, kStringHatch, kStringDefaultDescription, NULLOBJECT, OPENABLE | EXIT, 4, 10, 5, CABIN_R2, 14);
-		_objectState[5] = Object(_id, kStringHatch, kStringDefaultDescription, NULLOBJECT, OPENABLE | EXIT | OPENED, 9, 3, 4, CABIN_R3, 9);
-		_objectState[6] = Object(_id, kStringHatch, kStringDefaultDescription, NULLOBJECT, OPENABLE | CLOSED | EXIT, 12, 12, 0, AIRLOCK, 2);
-		_objectState[7] = Object(_id, kStringButton, kStringHatchButtonDescription, BUTTON, PRESS, 13, 13, 0, NULLROOM, 0);
-		_objectState[8] = Object(_id, kStringLadder, kStringDefaultDescription, NULLOBJECT, NULLTYPE, 14, 14, 0, NULLROOM, 0);
-		_objectState[9] = Object(_id, kStringExit, kStringDefaultDescription, NULLOBJECT, EXIT, 15, 15, 0, HALL, 22);
-	}
+	ShipCorridor(SupernovaEngine *vm, GameManager *gm);
 
 	virtual bool interact(Action verb, Object &obj1, Object &obj2);
 };
 
 class ShipHall: public Room {
 public:
-	ShipHall(SupernovaEngine *vm, GameManager *gm) {
-		_vm = vm;
-		_gm = gm;
-
-		_fileNumber = 15;
-		_id = HALL;
-		_shown[0] = kShownTrue;
-
-		_objectState[0] = Object(_id, kStringHatch, kStringCockpitHatchDescription, NULLOBJECT, OPENABLE | EXIT, 4, 5, 1, COCKPIT, 10);
-		_objectState[1] = Object(_id, kStringHatch, kStringKitchenHatchDescription, KITCHEN_HATCH, OPENABLE | EXIT, 0, 0, 0, NULLROOM, 1);
-		_objectState[2] = Object(_id, kStringHatch, kStringStasisHatchDescription, NULLOBJECT, OPENABLE | CLOSED | EXIT, 1, 1, 2, SLEEP, 8);
-		_objectState[3] = Object(_id, kStringSlot, kStringSlotDescription, SLEEP_SLOT, COMBINABLE, 2, 2, 0, NULLROOM, 0);
-		_objectState[4] = Object(_id, kStringLadder, kStringDefaultDescription, NULLOBJECT, NULLTYPE, 3, SLEEP, 0, NULLROOM, 0);
-		_objectState[5] = Object(_id, kStringCorridor, kStringDefaultDescription, NULLOBJECT, EXIT, 6, 6, 0, CORRIDOR, 19);
-	}
+	ShipHall(SupernovaEngine *vm, GameManager *gm);
 
 	virtual bool interact(Action verb, Object &obj1, Object &obj2);
 };
 
 class ShipSleepCabin: public Room {
 public:
-	ShipSleepCabin(SupernovaEngine *vm, GameManager *gm) {
-		_vm = vm;
-		_gm = gm;
-
-		_fileNumber = 33;
-		_id = SLEEP;
-		_shown[0] = kShownTrue;
-
-		_objectState[0] = Object(_id, kStringHatch, kStringStasisHatchDescription2, CABINS, NULLTYPE, 0, 0, 0, NULLROOM, 0);
-		_objectState[1] = Object(_id, kStringHatch, kStringStasisHatchDescription2, CABIN, NULLTYPE, 1, 1, 0, NULLROOM, 0);
-		_objectState[2] = Object(_id, kStringComputer, kStringDefaultDescription, COMPUTER, NULLTYPE, 2, 2, 0, NULLROOM, 0);
-		_objectState[3] = Object(_id, kStringExit, kStringDefaultDescription, NULLOBJECT, EXIT, 255, 255, 0, HALL, 22);
-	}
+	ShipSleepCabin(SupernovaEngine *vm, GameManager *gm);
 
 	virtual bool interact(Action verb, Object &obj1, Object &obj2);
 	virtual void animation();
@@ -221,19 +125,7 @@ private:
 
 class ShipCockpit : public Room {
 public:
-	ShipCockpit(SupernovaEngine *vm, GameManager *gm) {
-		_vm = vm;
-		_gm = gm;
-
-		_fileNumber = 9;
-		_id = COCKPIT;
-		_shown[0] = kShownTrue;
-
-		_objectState[0] = Object(_id, kStringInstruments, kStringInstrumentsDescription1, INSTRUMENTS, NULLTYPE, 2, 2, 0, NULLROOM, 0);
-		_objectState[1] = Object(_id, kStringMonitor, kStringDefaultDescription, MONITOR, NULLTYPE, 0, 0, 0, NULLROOM, 0);
-		_objectState[2] = Object(_id, kStringMonitor, kStringMonitorDescription, NULLOBJECT, TAKE, 1, 0, 0, NULLROOM, 0);
-		_objectState[3] = Object(_id, kStringExit, kStringDefaultDescription, NULLOBJECT, EXIT, 255, 255, 0, HALL, 22);
-	}
+	ShipCockpit(SupernovaEngine *vm, GameManager *gm);
 
 	virtual bool interact(Action verb, Object &obj1, Object &obj2);
 	virtual void animation();
@@ -245,199 +137,36 @@ private:
 
 class ShipCabinL1: public Room {
 public:
-	ShipCabinL1(SupernovaEngine *vm, GameManager *gm) {
-		_vm = vm;
-		_gm = gm;
-
-		_fileNumber = 21;
-		_id = CABIN_L1;
-		_shown[0] = kShownTrue;
-		_shown[1] = kShownTrue;
-		_shown[2] = kShownTrue;
-		_shown[3] = kShownTrue;
-		_shown[4] = kShownTrue;
-		_shown[5] = kShownTrue;
-
-		_objectState[0] = Object(_id, kStringImage, kStringGenericDescription1, NULLOBJECT, UNNECESSARY, 5, 5, 0, NULLROOM, 0);
-		_objectState[1] = Object(_id, kStringImage, kStringGenericDescription2, NULLOBJECT, UNNECESSARY, 6, 6, 0, NULLROOM, 0);
-		_objectState[2] = Object(_id, kStringImage, kStringGenericDescription3, NULLOBJECT, UNNECESSARY, 7, 7, 0, NULLROOM, 0);
-		_objectState[3] = Object(_id, kStringMagnete, kStringMagneteDescription, NULLOBJECT, UNNECESSARY, 8, 8, 0, NULLROOM, 0);
-		_objectState[4] = Object(_id, kStringImage, kStringGenericDescription4, NULLOBJECT, UNNECESSARY, 9, 9, 0);
-		_objectState[5] = Object(_id, kStringPen, kStringPenDescription, PEN, TAKE | COMBINABLE, 10, 10, 5 | 128);
-		_objectState[6] = Object(_id, kStringHatch, kStringDefaultDescription, NULLOBJECT, OPENABLE | OPENED | EXIT, 3, 3, 24 | 128, CORRIDOR, 9);
-		_objectState[7] = Object(_id, kStringSlot, kStringSlotDescription, NULLOBJECT, COMBINABLE, 0, 0, 0);
-		_objectState[8] = Object(_id, kStringShelf, kStringDefaultDescription, NULLOBJECT, OPENABLE | CLOSED, 1, 1, 0);
-		_objectState[9] = Object(_id, kStringCompartment, kStringDefaultDescription, NULLOBJECT, OPENABLE | CLOSED, 2, 2, 0);
-		_objectState[10] = Object(_id, kStringSocket, kStringDefaultDescription, SOCKET, COMBINABLE, 4, 4, 0);
-		_objectState[11] = Object(_id, kStringToilet, kStringDefaultDescription, BATHROOM_DOOR, EXIT, 255, 255, 0, BATHROOM, 22);
-	}
+	ShipCabinL1(SupernovaEngine *vm, GameManager *gm);
 };
 
 class ShipCabinL2 : public Room {
 public:
-	ShipCabinL2(SupernovaEngine *vm, GameManager *gm) {
-		_vm = vm;
-		_gm = gm;
-
-		_fileNumber = 21;
-		_id = CABIN_L2;
-		_shown[0] = kShownTrue;
-		_shown[16] = kShownTrue;
-
-		_objectState[0] = Object(_id, kStringSlot,kStringSlotDescription,SLOT_KL1,COMBINABLE,31,31,0);
-		_objectState[1] = Object(_id, kStringSlot,kStringSlotDescription,SLOT_KL2,COMBINABLE,32,32,0);
-		_objectState[2] = Object(_id, kStringSlot,kStringSlotDescription,SLOT_KL3,COMBINABLE,33,33,0);
-		_objectState[3] = Object(_id, kStringSlot,kStringSlotDescription,SLOT_KL4,COMBINABLE,45,45,0);
-		_objectState[4] = Object(_id, kStringShelf,kStringDefaultDescription,SHELF_L1,OPENABLE | CLOSED,25,26,17);
-		_objectState[5] = Object(_id, kStringPistol,kStringPistolDescription,PISTOL,TAKE,39,39,20);
-		_objectState[6] = Object(_id, kStringCompartment,kStringDefaultDescription,SHELF_L2,OPENABLE | CLOSED,27,28,18);
-		_objectState[7] = Object(_id, kStringBooks,kStringBooksDescription,NULLOBJECT,UNNECESSARY,40,40,0);
-		_objectState[8] = Object(_id, kStringCompartment,kStringDefaultDescription,SHELF_L3,OPENABLE | CLOSED,29,30,19);
-		_objectState[9] = Object(_id, kStringSpool,kStringSpoolDescription, SPOOL,TAKE | COMBINABLE,41,41,21);
-		_objectState[10] = Object(_id, kStringCompartment,kStringDefaultDescription,SHELF_L4,OPENABLE | CLOSED,43,44,22);
-		_objectState[11] = Object(_id, kStringBook,kStringDefaultDescription,BOOK2,TAKE,46,46,23);
-		_objectState[12] = Object(_id, kStringUnderwear,kStringUnderwearDescription,NULLOBJECT,UNNECESSARY,34,34,0);
-		_objectState[13] = Object(_id, kStringUnderwear,kStringUnderwearDescription,NULLOBJECT,UNNECESSARY,35,35,0);
-		_objectState[14] = Object(_id, kStringClothes,kStringDefaultDescription,NULLOBJECT,UNNECESSARY,36,36,0);
-		_objectState[15] = Object(_id, kStringJunk,kStringJunkDescription,NULLOBJECT,UNNECESSARY,37,37,0);
-		_objectState[16] = Object(_id, kStringJunk,kStringJunkDescription,NULLOBJECT,UNNECESSARY,38,38,0);
-		_objectState[17] = Object(_id, kStringMagnete,kStringMagneteDescription,NULLOBJECT,UNNECESSARY,23,23,0);
-		_objectState[18] = Object(_id, kStringToilet,kStringDefaultDescription,BATHROOM_DOOR,EXIT,255,255,0,BATHROOM,22);
-		_objectState[19] = Object(_id, kStringHatch,kStringDefaultDescription,NULLOBJECT,OPENABLE | OPENED | EXIT,3,3,24 | 128,CORRIDOR,9);
-		_objectState[20] = Object(_id, kStringSlot,kStringSlotDescription,NULLOBJECT,COMBINABLE,0,0,0);
-		_objectState[21] = Object(_id, kStringShelf,kStringDefaultDescription,NULLOBJECT,OPENABLE | CLOSED,1,1,0);
-		_objectState[22] = Object(_id, kStringCompartment,kStringDefaultDescription,NULLOBJECT,OPENABLE | CLOSED,2,2,0);
-		_objectState[23] = Object(_id, kStringSocket,kStringDefaultDescription,SOCKET,COMBINABLE,4,4,0);
-		_objectState[24] = Object(_id, kStringFolders,kStringFoldersDescription,NULLOBJECT,UNNECESSARY,49,49,0);
-	}
+	ShipCabinL2(SupernovaEngine *vm, GameManager *gm);
 
 	virtual bool interact(Action verb, Object &obj1, Object &obj2);
 };
 
 class ShipCabinL3 : public Room {
 public:
-	ShipCabinL3(SupernovaEngine *vm, GameManager *gm) {
-		_vm = vm;
-		_gm = gm;
-
-		_fileNumber = 21;
-		_id = CABIN_L3;
-		_shown[0] = kShownTrue;
-		_shown[6] = kShownTrue;
-		_shown[7] = kShownTrue;
-		_shown[8] = kShownTrue;
-		_shown[9] = kShownTrue;
-		_shown[12] = kShownTrue;
-
-		_objectState[0] = Object(_id, kStringPoster,kStringPosterDescription1,NULLOBJECT,UNNECESSARY,11,11,0);
-		_objectState[1] = Object(_id, kStringPoster,kStringPosterDescription2,NULLOBJECT,UNNECESSARY,12,12,0);
-		_objectState[2] = Object(_id, kStringSpeaker,kStringDefaultDescription,NULLOBJECT,NULLTYPE,13,13,0);
-		_objectState[3] = Object(_id, kStringMagnete,kStringMagneteDescription,NULLOBJECT,UNNECESSARY,14,14,0);
-		_objectState[4] = Object(_id, kStringRecord,kStringRecordDescription,RECORD,TAKE | COMBINABLE,15,15,8 | 128);
-		_objectState[5] = Object(_id, kStringRecordStand,kStringRecordStandDescription,NULLOBJECT,UNNECESSARY,16,16,0);
-		_objectState[6] = Object(_id, kStringButton,kStringDefaultDescription,TURNTABLE_BUTTON,PRESS,22,22,0);
-		_objectState[7] = Object(_id, kStringTurntable,kStringTurntableDescription,TURNTABLE,UNNECESSARY | COMBINABLE,17,17,0);
-		_objectState[8] = Object(_id, kStringWire,kStringDefaultDescription,WIRE,COMBINABLE,18,18,0);
-		_objectState[9] = Object(_id, kStringWire,kStringDefaultDescription,WIRE2,COMBINABLE,19,19,0);
-		_objectState[10] = Object(_id, kStringPlug,kStringDefaultDescription,PLUG,COMBINABLE,20,20,0);
-		_objectState[11] = Object(_id, kStringHatch,kStringDefaultDescription,NULLOBJECT,OPENABLE | OPENED | EXIT,3,3,24 | 128,CORRIDOR,9);
-		_objectState[12] = Object(_id, kStringSlot,kStringSlotDescription,NULLOBJECT,COMBINABLE,0,0,0);
-		_objectState[13] = Object(_id, kStringShelf,kStringDefaultDescription,NULLOBJECT,OPENABLE | CLOSED,1,1,0);
-		_objectState[14] = Object(_id, kStringCompartment,kStringDefaultDescription,NULLOBJECT,OPENABLE | CLOSED,2,2,0);
-		_objectState[15] = Object(_id, kStringSocket,kStringDefaultDescription,SOCKET,COMBINABLE,4,4,0);
-		_objectState[16] = Object(_id, kStringToilet,kStringDefaultDescription,BATHROOM_DOOR,EXIT,255,255,0,BATHROOM,22);
-	}
+	ShipCabinL3(SupernovaEngine *vm, GameManager *gm);
 
 	virtual bool interact(Action verb, Object &obj1, Object &obj2);
 };
 
 class ShipCabinR1 : public Room {
 public:
-	ShipCabinR1(SupernovaEngine *vm, GameManager *gm) {
-		_vm = vm;
-		_gm = gm;
-
-		_fileNumber = 22;
-		_id = CABIN_R1;
-		_shown[0] = kShownTrue;
-		_shown[1] = kShownTrue;
-		_shown[2] = kShownTrue;
-
-		_objectState[0] = Object(_id, kStringImage,kStringImageDescription1,NULLOBJECT,UNNECESSARY,5,5,0);
-		_objectState[1] = Object(_id, kStringDrawingInstruments,kStringDrawingInstrumentsDescription,NULLOBJECT,UNNECESSARY,6,6,0);
-		_objectState[2] = Object(_id, kStringMagnete,kStringMagneteDescription,NULLOBJECT,UNNECESSARY,7,7,0);
-		_objectState[3] = Object(_id, kStringHatch,kStringDefaultDescription,NULLOBJECT,OPENABLE | OPENED | EXIT,3,3,15 | 128,CORRIDOR,5);
-		_objectState[4] = Object(_id, kStringSlot,kStringSlotDescription,NULLOBJECT,COMBINABLE,0,0,0);
-		_objectState[5] = Object(_id, kStringShelf,kStringDefaultDescription,NULLOBJECT,OPENABLE | CLOSED,1,1,0);
-		_objectState[6] = Object(_id, kStringCompartment,kStringDefaultDescription,NULLOBJECT,OPENABLE | CLOSED,2,2,0);
-		_objectState[7] = Object(_id, kStringSocket,kStringDefaultDescription,SOCKET,COMBINABLE,4,4,0);
-		_objectState[8] = Object(_id, kStringToilet,kStringDefaultDescription,BATHROOM_DOOR,EXIT,255,255,0,BATHROOM,22);
-	}
+	ShipCabinR1(SupernovaEngine *vm, GameManager *gm);
 };
 
 class ShipCabinR2 : public Room {
 public:
-	ShipCabinR2(SupernovaEngine *vm, GameManager *gm) {
-		_vm = vm;
-		_gm = gm;
-
-		_fileNumber = 22;
-		_id = CABIN_R2;
-		_shown[0] = kShownTrue;
-		_shown[3] = kShownTrue;
-		_shown[4] = kShownTrue;
-		_shown[5] = kShownTrue;
-
-		_objectState[0] = Object(_id, kStringChessGame,kStringChessGameDescription1,NULLOBJECT,UNNECESSARY,11,11,0);
-		_objectState[1] = Object(_id, kStringTennisRacket,kStringTennisRacketDescription,NULLOBJECT,UNNECESSARY,8,8,0);
-		_objectState[2] = Object(_id, kStringTennisBall,kStringGenericDescription2,NULLOBJECT,UNNECESSARY,9,9,0);
-		_objectState[3] = Object(_id, kStringHatch,kStringDefaultDescription,NULLOBJECT,OPENABLE | OPENED | EXIT,3,3,15 | 128,CORRIDOR,5);
-		_objectState[4] = Object(_id, kStringSlot,kStringSlotDescription,NULLOBJECT,COMBINABLE,0,0,0);
-		_objectState[5] = Object(_id, kStringShelf,kStringDefaultDescription,NULLOBJECT,OPENABLE | CLOSED,1,1,0);
-		_objectState[6] = Object(_id, kStringCompartment,kStringDefaultDescription,NULLOBJECT,OPENABLE | CLOSED,2,2,0);
-		_objectState[7] = Object(_id, kStringSocket,kStringDefaultDescription,SOCKET,COMBINABLE,4,4,0);
-		_objectState[8] = Object(_id, kStringToilet,kStringDefaultDescription,BATHROOM_DOOR,EXIT,255,255,0,BATHROOM,22);
-	}
+	ShipCabinR2(SupernovaEngine *vm, GameManager *gm);
 };
 
 class ShipCabinR3 : public Room {
 public:
-	ShipCabinR3(SupernovaEngine *vm, GameManager *gm) {
-		_vm = vm;
-		_gm = gm;
-
-		_fileNumber = 22;
-		_id = CABIN_R3;
-		_shown[0] = kShownTrue;
-		_shown[7] = kShownTrue;
-		_shown[8] = kShownTrue;
-		_shown[15] = kShownTrue;
-
-		_objectState[0] = Object(_id, kStringChessGame,kStringChessGameDescription2,CHESS,TAKE | COMBINABLE,12,12,7 | 128);
-		_objectState[1] = Object(_id, kStringBed,kStringBedDescription,NULLOBJECT,NULLTYPE,13,13,0);
-		_objectState[2] = Object(_id, kStringSlot,kStringSlotDescription,SLOT_K1,COMBINABLE,27,27,0);
-		_objectState[3] = Object(_id, kStringSlot,kStringSlotDescription,SLOT_K2,COMBINABLE,28,28,0);
-		_objectState[4] = Object(_id, kStringSlot,kStringSlotDescription,SLOT_K3,COMBINABLE,29,29,0);
-		_objectState[5] = Object(_id, kStringSlot,kStringSlotDescription,SLOT_K4,COMBINABLE,30,30,0);
-		_objectState[6] = Object(_id, kStringCompartment,kStringCompartmentDescription,SHELF1,OPENABLE | CLOSED,14,18,9);
-		_objectState[7] = Object(_id, kStringAlbums,kStringAlbumsDescription,NULLOBJECT,UNNECESSARY,14,14,0);
-		_objectState[8] = Object(_id, kStringCompartment,kStringCompartmentDescription,SHELF2,OPENABLE | CLOSED,15,19,10);
-		_objectState[9] = Object(_id, kStringRope,kStringRopeDescription,ROPE,TAKE | COMBINABLE,15,15,12);
-		_objectState[10] = Object(_id, kStringShelf,kStringShelfDescription,SHELF3,OPENABLE | CLOSED,16,17,11);
-		_objectState[11] = Object(_id, kStringJunk,kStringJunkDescription,NULLOBJECT,UNNECESSARY,20,20,0);
-		_objectState[12] = Object(_id, kStringClothes,kStringClothesDescription,NULLOBJECT,UNNECESSARY,21,21,0);
-		_objectState[13] = Object(_id, kStringUnderwear,kStringDefaultDescription,NULLOBJECT,UNNECESSARY,22,22,0);
-		_objectState[14] = Object(_id, kStringSocks,kStringDefaultDescription,NULLOBJECT,UNNECESSARY,23,23,0);
-		_objectState[15] = Object(_id, kStringCompartment,kStringCompartmentDescription,SHELF4,OPENABLE | CLOSED,24,25,13);
-		_objectState[16] = Object(_id, kStringBook,kStringBookHitchhiker,BOOK,TAKE,26,26,14);
-		_objectState[17] = Object(_id, kStringDiscman,kStringDiscmanDescription,DISCMAN,TAKE | COMBINABLE,33,33,16);
-		_objectState[18] = Object(_id, kStringHatch,kStringDefaultDescription,NULLOBJECT,OPENABLE | EXIT,3,3,15 | 128,CORRIDOR,5);
-		_objectState[19] = Object(_id, kStringSlot,kStringSlotDescription,NULLOBJECT,COMBINABLE,0,0,0);
-		_objectState[20] = Object(_id, kStringShelf,kStringDefaultDescription,NULLOBJECT,OPENABLE | CLOSED,1,1,0);
-		_objectState[21] = Object(_id, kStringCompartment,kStringDefaultDescription,NULLOBJECT,OPENABLE | CLOSED,2,2,0);
-		_objectState[22] = Object(_id, kStringSocket,kStringDefaultDescription,SOCKET,COMBINABLE,4,4,0);
-		_objectState[23] = Object(_id, kStringToilet,kStringDefaultDescription,BATHROOM_DOOR,EXIT,255,255,0,BATHROOM,22);
-	}
+	ShipCabinR3(SupernovaEngine *vm, GameManager *gm);
 
 	virtual bool interact(Action verb, Object &obj1, Object &obj2);
 	virtual void onEntrance();
@@ -445,39 +174,12 @@ public:
 
 class ShipCabinBathroom : public Room  {
 public:
-	ShipCabinBathroom(SupernovaEngine *vm, GameManager *gm) {
-		_vm = vm;
-		_gm = gm;
-
-		_fileNumber = 23;
-		_id = BATHROOM;
-		_shown[0] = kShownTrue;
-
-		_objectState[0] = Object(_id, kStringBathroom,kStringBathroomDescription,TOILET,NULLTYPE,0,0,0);
-		_objectState[1] = Object(_id, kStringShower,kStringDefaultDescription,SHOWER,NULLTYPE,1,1,0);
-		_objectState[2] = Object(_id, kStringExit,kStringDefaultDescription,BATHROOM_EXIT,EXIT,255,255,0,CABIN_R3,2);
-	}
+	ShipCabinBathroom(SupernovaEngine *vm, GameManager *gm);
 };
 
 class ShipAirlock : public Room {
 public:
-	ShipAirlock(SupernovaEngine *vm, GameManager *gm) {
-		_vm = vm;
-		_gm = gm;
-
-		_fileNumber = 34;
-		_id = AIRLOCK;
-		_shown[0] = kShownTrue;
-		_shown[6] = kShownTrue;
-
-		_objectState[0] = Object(_id, kStringHatch,kStringHatchDescription1,NULLOBJECT,EXIT | OPENABLE | OPENED | CLOSED,0,0,0,CORRIDOR,10);
-		_objectState[1] = Object(_id, kStringHatch,kStringHatchDescription2,NULLOBJECT,EXIT | OPENABLE | CLOSED,1,1,0,HOLD,14);
-		_objectState[2] = Object(_id, kStringButton,kStringDefaultDescription,BUTTON1,PRESS,2,2,0);
-		_objectState[3] = Object(_id, kStringButton,kStringDefaultDescription,BUTTON2,PRESS,3,3,0);
-		_objectState[4] = Object(_id, kStringHelmet,kStringHelmetDescription,HELMET,TAKE,4,4,7);
-		_objectState[5] = Object(_id, kStringSuit,kStringSuitDescription,SUIT,TAKE,5,5,8);
-		_objectState[6] = Object(_id, kStringLifeSupport,kStringLifeSupportDescription,LIFESUPPORT,TAKE,6,6,9);
-	}
+	ShipAirlock(SupernovaEngine *vm, GameManager *gm);
 
 	virtual bool interact(Action verb, Object &obj1, Object &obj2);
 	virtual void onEntrance();
@@ -485,27 +187,7 @@ public:
 
 class ShipHold : public Room {
 public:
-	ShipHold(SupernovaEngine *vm, GameManager *gm) {
-		_vm = vm;
-		_gm = gm;
-
-		_fileNumber = 24;
-		_id = HOLD;
-		_shown[0] = kShownTrue;
-
-		_objectState[0] = Object(_id, kNoString,kStringDefaultDescription,HOLD_WIRE,COMBINABLE,255,255,0);
-		_objectState[1] = Object(_id, kStringScrap,kStringScrapDescription1,SCRAP_LK,NULLTYPE,4,4,0);
-		_objectState[2] = Object(_id, kStringTerminalStrip,kStringDefaultDescription,TERMINALSTRIP,COMBINABLE,255,255,0);
-		_objectState[3] = Object(_id, kStringScrap,kStringScrapDescription2,NULLOBJECT,NULLTYPE,5,5,0);
-		_objectState[4] = Object(_id, kStringReactor,kStringReactorDescription,NULLOBJECT,NULLTYPE,6,6,0);
-		_objectState[5] = Object(_id, kStringNozzle,kStringDefaultDescription,NULLOBJECT,NULLTYPE,7,7,0);
-		_objectState[6] = Object(_id, kStringPumpkin,kStringPumpkinDescription,NULLOBJECT,NULLTYPE,8,8,0);
-		_objectState[7] = Object(_id, kStringHatch,kStringDefaultDescription,LANDINGMOD_OUTERHATCH,EXIT | OPENABLE,1,2,2,LANDINGMODULE,6);
-		_objectState[8] = Object(_id, kStringLandingModule,kStringLandingModuleDescription,NULLOBJECT,NULLTYPE,0,0,0);
-		_objectState[9] = Object(_id, kStringExit,kStringDefaultDescription,NULLOBJECT,EXIT,255,255,0,AIRLOCK,22);
-		_objectState[10] = Object(_id, kStringHatch,kStringHatchDescription3,OUTERHATCH_TOP,EXIT | OPENABLE | OPENED,3,3,0,GENERATOR,8);
-		_objectState[11] = Object(_id, kStringGenerator,kStringGeneratorDescription,GENERATOR_TOP,EXIT,12,12,0,GENERATOR,8);
-	}
+	ShipHold(SupernovaEngine *vm, GameManager *gm);
 
 	virtual bool interact(Action verb, Object &obj1, Object &obj2);
 	virtual void onEntrance();
@@ -513,119 +195,41 @@ public:
 
 class ShipLandingModule : public Room {
 public:
-	ShipLandingModule(SupernovaEngine *vm, GameManager *gm) {
-		_vm = vm;
-		_gm = gm;
-
-		_fileNumber = 25;
-		_id = LANDINGMODULE;
-		_shown[0] = kShownTrue;
-
-		_objectState[0] = Object(_id, kStringSocket,kStringDefaultDescription,LANDINGMOD_SOCKET,COMBINABLE,1,1,0);
-		_objectState[1] = Object(_id, kStringButton,kSafetyButtonDescription,LANDINGMOD_BUTTON,PRESS | COMBINABLE,2,2,0);
-		_objectState[2] = Object(_id, kStringMonitor,kStringDefaultDescription,LANDINGMOD_MONITOR,NULLTYPE,3,3,0);
-		_objectState[3] = Object(_id, kStringKeyboard,kStringDefaultDescription,KEYBOARD,NULLTYPE,4,4,0);
-		_objectState[4] = Object(_id, kNoString,kStringDefaultDescription,LANDINGMOD_WIRE,COMBINABLE,255,255,0);
-		_objectState[5] = Object(_id, kStringHatch,kStringDefaultDescription,LANDINGMOD_HATCH,EXIT | OPENABLE | OPENED | COMBINABLE, 0,0,1 | 128,HOLD,10);
-	}
+	ShipLandingModule(SupernovaEngine *vm, GameManager *gm);
 
 	virtual bool interact(Action verb, Object &obj1, Object &obj2);
 };
 
 class ShipGenerator : public Room {
 public:
-	ShipGenerator(SupernovaEngine *vm, GameManager *gm) {
-		_vm = vm;
-		_gm = gm;
-
-		_fileNumber = 18;
-		_id = GENERATOR;
-		_shown[0] = kShownTrue;
-		_shown[5] = kShownTrue;
-
-		_objectState[0] = Object(_id, kStringGeneratorWire,kStringDefaultDescription,GENERATOR_WIRE,COMBINABLE,255,255,0);
-		_objectState[1] = Object(_id, kStringEmptySpool,kStringDefaultDescription,NULLOBJECT,UNNECESSARY,255,255,0);
-		_objectState[2] = Object(_id, kStringKeycard2,kStringKeycard2Description,KEYCARD2,COMBINABLE | TAKE,12,12,5 | 128);
-		_objectState[3] = Object(_id, kStringRope,kStringDefaultDescription,GENERATOR_ROPE,COMBINABLE,255,255,0);
-		_objectState[4] = Object(_id, kStringHatch,kStringHatchDescription3,OUTERHATCH,EXIT | OPENABLE,1,2,1,OUTSIDE,22);
-		_objectState[5] = Object(_id, kStringHatch,kStringDefaultDescription,NULLOBJECT,OPENABLE | CLOSED,3,3,0);
-		_objectState[6] = Object(_id, kStringSlot,kStringSlotDescription,NULLOBJECT,COMBINABLE,4,4,0);
-		_objectState[7] = Object(_id, kStringTrap,kStringDefaultDescription,TRAP,OPENABLE,5,6,2);
-		_objectState[8] = Object(_id, kStringWire,kStringDefaultDescription,NULLOBJECT,NULLTYPE,7,7,0);
-		_objectState[9] = Object(_id, kStringVoltmeter,kStringDefaultDescription,VOLTMETER,NULLTYPE,9,9,0,NULLROOM,0);
-		_objectState[10] = Object(_id, kStringClip,kStringDefaultDescription,CLIP,COMBINABLE,8,8,0);
-		_objectState[11] = Object(_id, kStringWire,kStringWireDescription,SHORT_WIRE,COMBINABLE,10,10,0);
-		_objectState[12] = Object(_id, kStringLadder,kStringDefaultDescription,LADDER,EXIT,0,0,0,HOLD,1);
-	}
+	ShipGenerator(SupernovaEngine *vm, GameManager *gm);
 
 	virtual bool interact(Action verb, Object &obj1, Object &obj2);
 };
 
 class ShipOuterSpace : public Room {
 public:
-	ShipOuterSpace(SupernovaEngine *vm, GameManager *gm) {
-		_vm = vm;
-		_gm = gm;
-
-		_fileNumber = 4;
-		_id = OUTSIDE;
-		_shown[0] = kShownTrue;
-
-		_objectState[0] = Object(_id, kStringHatch,kStringDefaultDescription,NULLOBJECT,EXIT,0,0,0,GENERATOR,3);
-		_objectState[1] = Object(_id, kStringRope,kStringDefaultDescription,NULLOBJECT,UNNECESSARY,255,255,0);
-	}
+	ShipOuterSpace(SupernovaEngine *vm, GameManager *gm);
 };
 
+
 // Arsano
 class ArsanoRocks : public Room {
 public:
-	ArsanoRocks(SupernovaEngine *vm, GameManager *gm) {
-		_vm = vm;
-		_gm = gm;
-
-		_fileNumber = 12;
-		_id = OUTSIDE;
-		_shown[0] = kShownTrue;
-
-		_objectState[0] = Object(_id, kStringRope,kStringDefaultDescription,NULLOBJECT,UNNECESSARY | EXIT,0,0,0,GENERATOR,12);
-		_objectState[1] = Object(_id, kStringStone,kStringDefaultDescription,STONE,NULLTYPE,1,1,0);
-		_objectState[2] = Object(_id, kStringStone,kStringDefaultDescription,NULLOBJECT,NULLTYPE,2,2,0);
-		_objectState[3] = Object(_id, kStringCaveOpening,kStringCaveOpeningDescription,NULLOBJECT,NULLTYPE,255,255,0,CAVE,1);
-	}
+	ArsanoRocks(SupernovaEngine *vm, GameManager *gm);
 
 	virtual void onEntrance();
 	virtual bool interact(Action verb, Object &obj1, Object &obj2);
 };
+
 class ArsanoCave : public Room {
 public:
-	ArsanoCave(SupernovaEngine *vm, GameManager *gm) {
-		_vm = vm;
-		_gm = gm;
-
-		_fileNumber = 12;
-		_id = CAVE;
-
-		_objectState[0] = Object(_id, kStringExit,kStringExitDescription,NULLOBJECT,EXIT,255,255,0,ROCKS,22);
-		_objectState[1] = Object(_id, kStringExit,kStringDefaultDescription,NULLOBJECT,EXIT,255,255,0,MEETUP,2);
-	}
+	ArsanoCave(SupernovaEngine *vm, GameManager *gm);
 };
+
 class ArsanoMeetup : public Room {
 public:
-	ArsanoMeetup(SupernovaEngine *vm, GameManager *gm) {
-		_vm = vm;
-		_gm = gm;
-
-		_fileNumber = 37;
-		_id = MEETUP;
-		_shown[0] = kShownTrue;
-
-		_objectState[0] = Object(_id, kStringCave,kStringDefaultDescription,NULLOBJECT,EXIT,255,255,0,CAVE,22);
-		_objectState[1] = Object(_id, kStringSign,kStringSignDescription,MEETUP_SIGN,NULLTYPE,0,0,0);
-		_objectState[2] = Object(_id, kStringEntrance,kStringDefaultDescription,DOOR,EXIT,1,1,0,ENTRANCE,7);
-		_objectState[3] = Object(_id, kStringStar,kStringDefaultDescription,STAR,NULLTYPE,2,2,0);
-		_objectState[4] = Object(_id, kStringSpaceshift,kStringDefaultDescription,SPACESHIPS,COMBINABLE,3,3,0);
-		_objectState[5] = Object(_id, kStringSpaceshift,kStringDefaultDescription,SPACESHIP,COMBINABLE,4,4,0);
-	}
+	ArsanoMeetup(SupernovaEngine *vm, GameManager *gm);
 
 	virtual void onEntrance();
 	virtual void animation();
@@ -635,52 +239,10 @@ private:
 	byte _sign;
 	byte _beacon;
 };
+
 class ArsanoEntrance : public Room {
 public:
-	ArsanoEntrance(SupernovaEngine *vm, GameManager *gm) {
-		_vm = vm;
-		_gm = gm;
-
-		_fileNumber = 10;
-		_id = ENTRANCE;
-		_shown[0] = kShownTrue;
-
-		_objectState[0] = Object(_id, kStringPorter,kStringPorterDescription,PORTER,TALK,0,0,0);
-		_objectState[1] = Object(_id, kStringDoor,kStringDefaultDescription,NULLOBJECT,EXIT | OPENABLE | CLOSED,1,1,0,NULLROOM,5);
-		_objectState[2] = Object(_id, kStringSign,kStringSignDescription,KITCHEN_SIGN,NULLTYPE,2,2,0);
-		_objectState[3] = Object(_id, kStringChewingGum,kStringDefaultDescription,SCHNUCK,TAKE,255,255,10+128);
-		_objectState[4] = Object(_id, kStringGummyBears,kStringDefaultDescription,SCHNUCK,TAKE,255,255,11+128);
-		_objectState[5] = Object(_id, kStringChocolateBall,kStringDefaultDescription,SCHNUCK,TAKE,255,255,12+128);
-		_objectState[6] = Object(_id, kStringEgg,kStringDefaultDescription,EGG,TAKE,255,255,13+128);
-		_objectState[7] = Object(_id, kStringLiquorice,kStringDefaultDescription,SCHNUCK,TAKE,255,255,14+128);
-		_objectState[8] = Object(_id, kStringPill,kStringPillDescription,PILL,TAKE,255,255,0);
-		_objectState[9] = Object(_id, kStringSlot,kStringDefaultDescription,CAR_SLOT,COMBINABLE,6,6,0);
-		_objectState[10] = Object(_id, kStringVendingMachine,kStringVendingMachineDescription,NULLOBJECT,NULLTYPE,5,5,0);
-		_objectState[11] = Object(_id, kStringToilet,kStringToiletDescription,ARSANO_BATHROOM,NULLTYPE,255,255,0);
-		_objectState[12] = Object(_id, kStringButton,kStringDefaultDescription,BATHROOM_BUTTON,PRESS,3,3,0);
-		_objectState[13] = Object(_id, kStringSign,kStringSignDescription,BATHROOM_SIGN,NULLTYPE,4,4,0);
-		_objectState[14] = Object(_id, kStringStaircase,kStringDefaultDescription,STAIRCASE,EXIT,8,8,0,REST,3);
-		_objectState[15] = Object(_id, kStringExit,kStringDefaultDescription,MEETUP_EXIT,EXIT,255,255,0,MEETUP,22);
-		_objectState[16] = Object(_id, kStringCoins,kStringCoinsDescription,COINS,TAKE|COMBINABLE,255,255,0);
-		_objectState[17] = Object(_id, kStringTabletPackage,kStringTabletPackageDescription,PILL_HULL,TAKE,255,255,0);
-
-		_dialog1[0] = kStringArsanoDialog7;
-		_dialog1[1] = kStringArsanoDialog1;
-		_dialog1[2] = kStringArsanoDialog8;
-		_dialog1[3] = kStringArsanoDialog9;
-		_dialog1[4] = kStringDialogSeparator;
-
-		_dialog2[0] = kStringArsanoDialog1;
-		_dialog2[1] = kStringArsanoDialog2;
-		_dialog2[2] = kStringArsanoDialog3;
-		_dialog2[3] = kStringArsanoDialog4;
-		_dialog2[4] = kStringDialogSeparator;
-
-		_dialog3[0] = kStringArsanoDialog5;
-		_dialog3[1] = kStringArsanoDialog6;
-
-		_eyewitness = 5;
-	}
+	ArsanoEntrance(SupernovaEngine *vm, GameManager *gm);
 
 	virtual bool interact(Action verb, Object &obj1, Object &obj2);
 	virtual void animation();
@@ -691,22 +253,10 @@ private:
 	StringId _dialog3[5];
 	byte _eyewitness;
 };
+
 class ArsanoRemaining : public Room {
 public:
-	ArsanoRemaining(SupernovaEngine *vm, GameManager *gm) {
-		_vm = vm;
-		_gm = gm;
-
-		_fileNumber = 28;
-		_id = REST;
-		_shown[0] = kShownTrue;
-
-		_objectState[0] = Object(_id, kStringStaircase,kStringDefaultDescription,NULLOBJECT,EXIT,0,0,0,ENTRANCE,17);
-		_objectState[1] = Object(_id, kStringChair,kStringDefaultDescription,NULLOBJECT,EXIT,1,1,0,ROGER,2);
-		_objectState[2] = Object(_id, kStringShoes,kStringShoesDescription,NULLOBJECT,NULLTYPE,2,2,0);
-
-		_chewing = kShownTrue;
-	}
+	ArsanoRemaining(SupernovaEngine *vm, GameManager *gm);
 
 	virtual void animation();
 
@@ -714,33 +264,10 @@ private:
 	bool _chewing;
 	int _i;
 };
+
 class ArsanoRoger : public Room {
 public:
-	ArsanoRoger(SupernovaEngine *vm, GameManager *gm) {
-		_vm = vm;
-		_gm = gm;
-
-		_fileNumber = 29;
-		_id = ROGER;
-		_shown[0] = kShownTrue;
-
-		_objectState[0] = Object(_id, kStringExit,kStringDefaultDescription,NULLOBJECT,EXIT,255,255,0,REST,19);
-		_objectState[1] = Object(_id, kStringFrogFace,kStringDefaultDescription,ROGER_W,TALK,0,0,0);
-		_objectState[2] = Object(_id, kStringScrible,kStringScribleDescription,NULLOBJECT,NULLTYPE,3,3,0);
-		_objectState[3] = Object(_id, kStringWallet,kStringDefaultDescription,WALLET,TAKE,1,1,4);
-		_objectState[4] = Object(_id, kStringMenu,kStringMenuDescription,NULLOBJECT,UNNECESSARY,2,2,0);
-		_objectState[5] = Object(_id, kStringCup,kStringCupDescription,CUP,UNNECESSARY,4,4,0);
-		_objectState[6] = Object(_id, kStringChessGame,kStringDefaultDescription,NULLOBJECT,UNNECESSARY,255,255,0);
-		_objectState[7] = Object(_id, kStringBill,kStringBillDescription,NULLOBJECT,TAKE|COMBINABLE,255,255,0);
-		_objectState[8] = Object(_id, kStringKeycard3,kStringDefaultDescription,KEYCARD_R,TAKE|COMBINABLE,255,255,0);
-
-		_dialog1[0] = kStringDialogArsanoRoger1;
-		_dialog1[1] = kStringDialogArsanoRoger2;
-		_dialog1[2] = kStringDialogArsanoRoger3;
-		_dialog1[3] = kStringDialogSeparator;
-
-		_eyewitness = 5;
-	}
+	ArsanoRoger(SupernovaEngine *vm, GameManager *gm);
 
 	virtual void animation();
 	virtual void onEntrance();
@@ -751,28 +278,10 @@ private:
 	byte _eyewitness;
 	byte _hands;
 };
+
 class ArsanoGlider : public Room {
 public:
-	ArsanoGlider(SupernovaEngine *vm, GameManager *gm) {
-		_vm = vm;
-		_gm = gm;
-
-		_fileNumber = 19;
-		_id = GLIDER;
-		_shown[0] = kShownTrue;
-
-		_objectState[0] = Object(_id, kStringExit,kStringDefaultDescription,NULLOBJECT,EXIT,255,255,0,MEETUP,15);
-		_objectState[1] = Object(_id, kStringButton,kStringDefaultDescription,GLIDER_BUTTON1,PRESS,0,0,0);
-		_objectState[2] = Object(_id, kStringButton,kStringDefaultDescription,GLIDER_BUTTON2,PRESS,1,1,0);
-		_objectState[3] = Object(_id, kStringButton,kStringDefaultDescription,GLIDER_BUTTON3,PRESS,2,2,0);
-		_objectState[4] = Object(_id, kStringButton,kStringDefaultDescription,GLIDER_BUTTON4,PRESS,3,3,0);
-		_objectState[5] = Object(_id, kStringKeycard,kStringDefaultDescription,GLIDER_KEYCARD,TAKE|COMBINABLE,255,255,0);
-		_objectState[6] = Object(_id, kStringSlot,kStringDefaultDescription,GLIDER_SLOT,COMBINABLE,4,4,0);
-		_objectState[7] = Object(_id, kStringCompartment,kStringDefaultDescription,NULLOBJECT,OPENABLE,5,6,6);
-		_objectState[8] = Object(_id, kStringKeyboard,kStringDefaultDescription,GLIDER_BUTTONS,NULLTYPE,7,7,0);
-		_objectState[9] = Object(_id, kStringAnnouncement,kStringAnnouncementDescription,GLIDER_DISPLAY,NULLTYPE,8,8,0);
-		_objectState[10] = Object(_id, kStringInstruments,kStringAnnouncementDescription,GLIDER_INSTRUMENTS,NULLTYPE,9,9,0);
-	}
+	ArsanoGlider(SupernovaEngine *vm, GameManager *gm);
 
 	virtual void animation();
 	virtual bool interact(Action verb, Object &obj1, Object &obj2);
@@ -780,32 +289,10 @@ public:
 private:
 	byte _sinus;
 };
+
 class ArsanoMeetup2 : public Room {
 public:
-	ArsanoMeetup2(SupernovaEngine *vm, GameManager *gm) {
-		_vm = vm;
-		_gm = gm;
-
-		_fileNumber = 38;
-		_id = MEETUP2;
-		_shown[0] = kShownTrue;
-
-		_objectState[0] = Object(_id, kStringRoger, kStringDefaultDescription, ROGER_W, TALK, 255, 255, 0);
-		_objectState[1] = Object(_id, kStringSpaceshift, kStringDefaultDescription, SPACESHIP, COMBINABLE, 255, 255, 0);
-		_objectState[2] = Object(_id, kStringCave, kStringDefaultDescription, NULLOBJECT, EXIT, 255, 255, 0, CAVE, 22);
-
-		_dialog1[0] = kStringDialogArsanoMeetup2_1;
-		_dialog1[1] = kStringDialogArsanoMeetup2_2;
-		_dialog2[0] = kStringDialogArsanoMeetup2_3;
-		_dialog2[1] = kStringDialogArsanoMeetup2_4;
-		_dialog3[0] = kStringDialogArsanoMeetup2_5;
-		_dialog3[1] = kStringDialogArsanoMeetup2_6;
-		_dialog3[2] = kStringDialogArsanoMeetup2_7;
-		_dialog3[3] = kStringDialogArsanoMeetup2_8;
-		_dialog4[0] = kStringDialogArsanoMeetup2_9;
-		_dialog4[1] = kStringDialogArsanoMeetup2_10;
-		_dialog4[2] = kStringDialogArsanoMeetup2_11;
-	}
+	ArsanoMeetup2(SupernovaEngine *vm, GameManager *gm);
 
 	virtual void onEntrance();
 	virtual bool interact(Action verb, Object &obj1, Object &obj2);
@@ -823,31 +310,10 @@ private:
 	//bool _found;
 	//bool _flug;
 };
+
 class ArsanoMeetup3 : public Room {
 public:
-	ArsanoMeetup3(SupernovaEngine *vm, GameManager *gm) {
-		_vm = vm;
-		_gm = gm;
-
-		_fileNumber = 39;
-		_id = MEETUP3;
-		_shown[0] = kShownTrue;
-
-		_objectState[0] = Object(_id, kStringUfo,kStringUfoDescription,UFO,EXIT,0,0,0,NULLROOM,3);
-		_objectState[1] = Object(_id, kStringStar,kStringDefaultDescription,STAR,NULLTYPE,1,1,0);
-		_objectState[2] = Object(_id, kStringCave,kStringDefaultDescription,NULLOBJECT,EXIT,255,255,0,CAVE,22);
-
-		_dialog2[0] = kStringArsanoDialog1;
-		_dialog2[1] = kStringDialogArsanoMeetup3_1;
-		_dialog2[2] = kStringDialogArsanoMeetup3_2;
-		_dialog2[3] = kStringDialogArsanoMeetup3_3;
-		_dialog3[0] = kStringDialogArsanoMeetup3_4;
-		_dialog3[1] = kStringDialogArsanoMeetup3_5;
-
-		_dialogsX[0] = kStringDialogX1;
-		_dialogsX[1] = kStringDialogX2;
-		_dialogsX[2] = kStringDialogX3;
-	}
+	ArsanoMeetup3(SupernovaEngine *vm, GameManager *gm);
 
 	virtual bool interact(Action verb, Object &obj1, Object &obj2);
 
@@ -857,171 +323,52 @@ private:
 
 	// TODO: Hack, to be move away and renamed when the other uses are found
 	StringId _dialogsX[6];
-	//
 };
 
+
 // Axacuss
 class AxacussCell : public Room {
 public:
-	AxacussCell(SupernovaEngine *vm, GameManager *gm) {
-		_vm = vm;
-		_gm = gm;
-
-		_fileNumber = 43;
-		_id = CELL;
-		_shown[0] = kShownTrue;
-		_shown[1] = kShownTrue;
-		_shown[31] = kShownTrue;
-
-		_objectState[0] = Object(_id, kStringButton,kStringDefaultDescription,CELL_BUTTON,PRESS,1,1,0);
-		_objectState[1] = Object(_id, kStringDoor,kStringDefaultDescription,CELL_DOOR,EXIT|OPENABLE|CLOSED,0,0,31+128,CORRIDOR4,1);
-		_objectState[2] = Object(_id, kStringTray,kStringTrayDescription,TRAY,UNNECESSARY,255,255,0);
-		_objectState[3] = Object(_id, kStringLamp,kStringLampDescription,NULLOBJECT,COMBINABLE,3,3,0);
-		_objectState[4] = Object(_id, kStringEyes,kStringEyesDescription,NULLOBJECT,NULLTYPE,4,4,0);
-		_objectState[5] = Object(_id, kStringWire,kStringDefaultDescription,CELL_WIRE,COMBINABLE|TAKE,6,6,0);
-		_objectState[6] = Object(_id, kStringSocket,kStringSocketDescription,SOCKET,COMBINABLE,5,5,0);
-		_objectState[7] = Object(_id, kStringMetalBlock,kStringMetalBlockDescription,MAGNET,TAKE|COMBINABLE,255,255,30);
-		_objectState[8] = Object(_id, kStringRobot,kStringRobotDescription,NULLOBJECT,NULLTYPE,255,255,0);
-		_objectState[9] = Object(_id, kStringTable,kStringTableDescription,CELL_TABLE,COMBINABLE,2,2,0);
-	}
+	AxacussCell(SupernovaEngine *vm, GameManager *gm);
 
 	virtual bool interact(Action verb, Object &obj1, Object &obj2);
 	virtual void animation();
 	virtual void onEntrance();
 };
+
 class AxacussCorridor1 : public Room {
 public:
-	AxacussCorridor1(SupernovaEngine *vm, GameManager *gm) {
-		_vm = vm;
-		_gm = gm;
-
-		_fileNumber = 16;
-		_id = CORRIDOR1;
-		_shown[0] = kShownTrue;
-		_shown[3] = kShownTrue;
-		_shown[4] = kShownTrue;
-		_shown[5] = kShownTrue;
-		_shown[13] = kShownTrue;
-		_shown[21] = kShownTrue;
-		_shown[23] = kShownTrue;
-		_shown[25] = kShownTrue;
-
-		_objectState[0] = Object(_id, kStringExit,kStringDefaultDescription,NULLOBJECT,EXIT,2,2,0,GUARD3,2);
-		_objectState[1] = Object(_id, kStringExit,kStringDefaultDescription,NULLOBJECT,EXIT,3,3,0,CORRIDOR2,22);
-	}
+	AxacussCorridor1(SupernovaEngine *vm, GameManager *gm);
 
 	virtual void onEntrance();
 };
+
 class AxacussCorridor2 : public Room {
 public:
-	AxacussCorridor2(SupernovaEngine *vm, GameManager *gm) {
-		_vm = vm;
-		_gm = gm;
-
-		_fileNumber = 16;
-		_id = CORRIDOR2;
-		_shown[0] = kShownTrue;
-		_shown[2] = kShownTrue;
-		_shown[3] = kShownTrue;
-		_shown[4] = kShownTrue;
-		_shown[5] = kShownTrue;
-		_shown[17] = kShownTrue;
-		_shown[21] = kShownTrue;
-		_shown[24] = kShownTrue;
-
-		_objectState[0] = Object(_id, kStringExit,kStringDefaultDescription,NULLOBJECT,EXIT,2,2,0,CORRIDOR1,2);
-		_objectState[1] = Object(_id, kStringExit,kStringDefaultDescription,NULLOBJECT,EXIT,3,3,0,CORRIDOR3,22);
-		_objectState[2] = Object(_id, kStringExit,kStringDefaultDescription,NULLOBJECT,EXIT,1,1,0,CORRIDOR4,14);
-	}
+	AxacussCorridor2(SupernovaEngine *vm, GameManager *gm);
 
 	virtual void onEntrance();
 };
+
 class AxacussCorridor3 : public Room {
 public:
-	AxacussCorridor3(SupernovaEngine *vm, GameManager *gm) {
-		_vm = vm;
-		_gm = gm;
-
-		_fileNumber = 16;
-		_id = CORRIDOR3;
-		_shown[0] = kShownTrue;
-		_shown[3] = kShownTrue;
-		_shown[5] = kShownTrue;
-		_shown[19] = kShownTrue;
-		_shown[23] = kShownTrue;
-
-		_objectState[0] = Object(_id, kStringExit,kStringDefaultDescription,NULLOBJECT,EXIT,2,2,0,CORRIDOR2,2);
-	}
+	AxacussCorridor3(SupernovaEngine *vm, GameManager *gm);
 
 	virtual void onEntrance();
 };
+
 class AxacussCorridor4 : public Room {
 public:
-	AxacussCorridor4(SupernovaEngine *vm, GameManager *gm) {
-		_vm = vm;
-		_gm = gm;
-
-		_fileNumber = 16;
-		_id = CORRIDOR4;
-		_shown[0] = kShownTrue;
-		_shown[1] = kShownTrue;
-		_shown[2] = kShownTrue;
-		_shown[8] = kShownTrue;
-		_shown[9] = kShownTrue;
-		_shown[11] = kShownTrue;
-		_shown[15] = kShownTrue;
-		_shown[18] = kShownTrue;
-		_shown[20] = kShownTrue;
-		_shown[26] = kShownTrue;
-
-		_objectState[0] = Object(_id, kStringExit,kStringDefaultDescription,NULLOBJECT,EXIT,0,0,0,CORRIDOR2,10);
-		_objectState[1] = Object(_id, kStringExit,kStringDefaultDescription,NULLOBJECT,EXIT,1,1,0,GUARD,14);
-		_objectState[2] = Object(_id, kStringCellDoor,kStringCellDoorDescription,DOOR,EXIT|OPENABLE|OPENED|CLOSED,7,7,0,CELL,16);
-		_objectState[3] = Object(_id, kStringLaptop,kStringDefaultDescription,NEWSPAPER,TAKE,6,6,8);
-		_objectState[4] = Object(_id, kStringWristwatch,kStringDefaultDescription,WATCH,TAKE|COMBINABLE,255,255,8);
-		_objectState[5] = Object(_id, kStringTable,kStringDefaultDescription,TABLE,COMBINABLE,5,5,0);
-	}
+	AxacussCorridor4(SupernovaEngine *vm, GameManager *gm);
 
 	virtual void onEntrance();
 	virtual void animation();
 	virtual bool interact(Action verb, Object &obj1, Object &obj2);
 };
+
 class AxacussCorridor5 : public Room {
 public:
-	AxacussCorridor5(SupernovaEngine *vm, GameManager *gm) {
-		_vm = vm;
-		_gm = gm;
-
-		_fileNumber = 16;
-		_id = CORRIDOR5;
-		_shown[0] = kShownTrue;
-		_shown[3] = kShownTrue;
-		_shown[4] = kShownTrue;
-		_shown[5] = kShownTrue;
-		_shown[12] = kShownTrue;
-		_shown[22] = kShownTrue;
-		_shown[23] = kShownTrue;
-		_shown[24] = kShownTrue;
-
-		_objectState[0] = Object(_id, kStringExit,kStringDefaultDescription,DOOR,EXIT,2,2,0,NULLROOM,2);
-		_objectState[1] = Object(_id, kStringExit,kStringDefaultDescription,NULLOBJECT,EXIT,3,3,0,CORRIDOR6,22);
-
-		_dialog1[0] = kStringDialogAxacussCorridor5_1;
-		_dialog1[1] = kStringDialogAxacussCorridor5_2;
-		_dialog2[0] = kStringDialogAxacussCorridor5_3;
-		_dialog2[1] = kStringDialogAxacussCorridor5_4;
-		_dialog3[0] = kStringDialogAxacussCorridor5_5;
-		_dialog3[1] = kStringDialogAxacussCorridor5_6;
-		_dialog3[2] = kStringDialogAxacussCorridor5_7;
-		_dialog3[3] = kStringDialogAxacussCorridor5_7;
-
-		_rows[0] = 1;
-		_rows[1] = 1;
-		_rows[2] = 1;
-		_rows[3] = 1;
-		_rows[4] = 0;
-		_rows[5] = 0;
-	}
+	AxacussCorridor5(SupernovaEngine *vm, GameManager *gm);
 
 	virtual void onEntrance();
 	virtual bool interact(Action verb, Object &obj1, Object &obj2);
@@ -1040,118 +387,38 @@ private:
 
 class AxacussCorridor6 : public Room {
 public:
-	AxacussCorridor6(SupernovaEngine *vm, GameManager *gm) {
-		_vm = vm;
-		_gm = gm;
-
-		_fileNumber = 16;
-		_id = CORRIDOR6;
-		_shown[0] = kShownTrue;
-		_shown[3] = kShownTrue;
-		_shown[4] = kShownTrue;
-		_shown[5] = kShownTrue;
-		_shown[6] = kShownTrue;
-		_shown[22] = kShownTrue;
-		_shown[24] = kShownTrue;
-		_shown[25] = kShownTrue;
-
-		_objectState[0] = Object(_id, kStringExit,kStringDefaultDescription,NULLOBJECT,EXIT,2,2,0,CORRIDOR5,2);
-		_objectState[1] = Object(_id, kStringExit,kStringDefaultDescription,NULLOBJECT,EXIT,3,3,0,CORRIDOR7,22);
-		_objectState[2] = Object(_id, kStringDoor,kStringDefaultDescription,DOOR,OPENABLE|CLOSED,255,255,0,CORRIDOR8,13);
-	}
+	AxacussCorridor6(SupernovaEngine *vm, GameManager *gm);
 
 	virtual void onEntrance();
 	virtual bool interact(Action verb, Object &obj1, Object &obj2);
 };
+
 class AxacussCorridor7 : public Room {
 public:
-	AxacussCorridor7(SupernovaEngine *vm, GameManager *gm) {
-		_vm = vm;
-		_gm = gm;
-
-		_fileNumber = 16;
-		_id = CORRIDOR7;
-		_shown[0] = kShownTrue;
-		_shown[3] = kShownTrue;
-		_shown[4] = kShownTrue;
-		_shown[5] = kShownTrue;
-		_shown[10] = kShownTrue;
-		_shown[21] = kShownTrue;
-		_shown[24] = kShownTrue;
-		_shown[25] = kShownTrue;
-
-		_objectState[0] = Object(_id, kStringExit,kStringDefaultDescription,NULLOBJECT,EXIT,2,2,0,CORRIDOR6,2);
-		_objectState[1] = Object(_id, kStringExit,kStringDefaultDescription,NULLOBJECT,EXIT,3,3,0,GUARD,22);
-	}
+	AxacussCorridor7(SupernovaEngine *vm, GameManager *gm);
 
 	virtual void onEntrance();
 };
+
 class AxacussCorridor8 : public Room {
 public:
-	AxacussCorridor8(SupernovaEngine *vm, GameManager *gm) {
-		_vm = vm;
-		_gm = gm;
-
-		_fileNumber = 16;
-		_id = CORRIDOR8;
-		_shown[0] = kShownTrue;
-		_shown[1] = kShownTrue;
-		_shown[4] = kShownTrue;
-		_shown[15] = kShownTrue;
-		_shown[20] = kShownTrue;
-		_shown[22] = kShownTrue;
-		_shown[28] = kShownTrue;
-
-		_objectState[0] = Object(_id, kStringDoor,kStringDefaultDescription,DOOR,EXIT|OPENABLE,0,0,0,CORRIDOR6,10);
-		_objectState[1] = Object(_id, kStringExit,kStringDefaultDescription,NULLOBJECT,EXIT,3,3,0,BCORRIDOR,22);
-	}
+	AxacussCorridor8(SupernovaEngine *vm, GameManager *gm);
 
 	virtual void onEntrance();
 	virtual bool interact(Action verb, Object &obj1, Object &obj2);
 };
+
 class AxacussCorridor9 : public Room {
 public:
-	AxacussCorridor9(SupernovaEngine *vm, GameManager *gm) {
-		_vm = vm;
-		_gm = gm;
-
-		_fileNumber = 16;
-		_id = CORRIDOR9;
-		_shown[0] = kShownTrue;
-		_shown[1] = kShownTrue;
-		_shown[3] = kShownTrue;
-		_shown[14] = kShownTrue;
-		_shown[19] = kShownTrue;
-		_shown[23] = kShownTrue;
-		_shown[28] = kShownTrue;
-
-		_objectState[0] = Object(_id, kStringExit,kStringDefaultDescription,NULLOBJECT,EXIT,2,2,0,BCORRIDOR,2);
-		_objectState[1] = Object(_id, kStringDoor,kStringDefaultDescription,DOOR,EXIT|OPENABLE,0,0,0,GUARD,10);
-	}
+	AxacussCorridor9(SupernovaEngine *vm, GameManager *gm);
 
 	virtual void onEntrance();
 	virtual bool interact(Action verb, Object &obj1, Object &obj2);
 };
+
 class AxacussBcorridor : public Room {
 public:
-	AxacussBcorridor(SupernovaEngine *vm, GameManager *gm) {
-		_vm = vm;
-		_gm = gm;
-
-		_fileNumber = 6;
-		_id = BCORRIDOR;
-		_shown[0] = kShownTrue;
-		_shown[3] = kShownTrue;
-
-		_objectState[0] = Object(_id, kStringPillar,kStringDefaultDescription,PILLAR1,NULLTYPE,4,4,0);
-		_objectState[1] = Object(_id, kStringPillar,kStringDefaultDescription,PILLAR2,NULLTYPE,5,5,0);
-		_objectState[2] = Object(_id, kStringExit,kStringDefaultDescription,NULLOBJECT,EXIT,6,6,0,CORRIDOR8,2);
-		_objectState[3] = Object(_id, kStringExit,kStringDefaultDescription,NULLOBJECT,EXIT,7,7,0,CORRIDOR9,22);
-		_objectState[4] = Object(_id, kStringDoor,kStringDoorDescription1,DOOR1,EXIT|OPENABLE|CLOSED|OCCUPIED,0,0,1,OFFICE_L1,6);
-		_objectState[5] = Object(_id, kStringDoor,kStringDoorDescription2,DOOR2,EXIT|OPENABLE|CLOSED|OCCUPIED,1,1,2,OFFICE_L2,16);
-		_objectState[6] = Object(_id, kStringDoor,kStringDoorDescription3,DOOR3,EXIT|OPENABLE|OPENED,2,2,3,OFFICE_R1,8);
-		_objectState[7] = Object(_id, kStringDoor,kStringDoorDescription4,DOOR4,EXIT|OPENABLE|CLOSED|OCCUPIED,3,3,4,OFFICE_R2,18);
-	}
+	AxacussBcorridor(SupernovaEngine *vm, GameManager *gm);
 
 	virtual void onEntrance();
 	virtual bool interact(Action verb, Object &obj1, Object &obj2);
@@ -1159,25 +426,7 @@ public:
 
 class AxacussIntersection : public Room {
 public:
-	AxacussIntersection(SupernovaEngine *vm, GameManager *gm) {
-		_vm = vm;
-		_gm = gm;
-
-		_fileNumber = 40;
-		_id = GUARD;
-		_shown[0] = kShownTrue;
-
-		_objectState[0] = Object(_id, kStringExit, kStringDefaultDescription, NULLOBJECT, EXIT, 255, 255, 0, CORRIDOR4, 21);
-		_objectState[1] = Object(_id, kStringCorridor, kStringDefaultDescription, NULLOBJECT, EXIT, 3, 3, 0, CORRIDOR7, 5);
-		_objectState[2] = Object(_id, kStringDoor, kStringDefaultDescription, DOOR, EXIT | OPENABLE, 1, 1, 6, CORRIDOR9, 3);
-		_objectState[3] = Object(_id, kStringAxacussan, kStringAxacussanDescription, GUARDIAN, TALK, 0, 0, 0);
-		_objectState[4] = Object(_id, kStringImage, kStringImageDescription2, NULLOBJECT, NULLTYPE, 2, 2, 0);
-		_objectState[5] = Object(_id, kStringMastercard, kStringMastercardDescription, MASTERKEYCARD, TAKE | COMBINABLE, 255, 255, 1);
-
-		_dialogsX[0] = kStringDialogX1;
-		_dialogsX[1] = kStringDialogX2;
-		_dialogsX[2] = kStringDialogX3;
-	}
+	AxacussIntersection(SupernovaEngine *vm, GameManager *gm);
 
 	virtual bool interact(Action verb, Object &obj1, Object &obj2);
 
@@ -1187,188 +436,67 @@ private:
 
 class AxacussExit : public Room {
 public:
-	AxacussExit(SupernovaEngine *vm, GameManager *gm) {
-		_vm = vm;
-		_gm = gm;
-
-		_fileNumber = 42;
-		_id = GUARD3;
-		_shown[0] = kShownTrue;
-
-		_objectState[0] = Object(_id, kStringExit,kStringDefaultDescription,NULLOBJECT,EXIT,255,255,0,CORRIDOR1,22);
-		_objectState[1] = Object(_id, kStringDoor,kStringDefaultDescription,NULLOBJECT,EXIT|OPENABLE|CLOSED,0,0,0,NULLROOM,20);
-		_objectState[2] = Object(_id, kStringDoor,kStringDefaultDescription,NULLOBJECT,EXIT|OPENABLE|CLOSED,1,1,0,NULLROOM,15);
-		_objectState[3] = Object(_id, kStringDoor,kStringDefaultDescription,DOOR,EXIT|OPENABLE,2,2,11,OFFICE_L,0);
-		_objectState[4] = Object(_id, kStringLamp2,kStringDefaultDescription,LAMP,COMBINABLE,3,3,0);
-		_objectState[5] = Object(_id, kStringAxacussan,kStringDefaultDescription,GUARDIAN,TALK,5,5,0);
-		_objectState[6] = Object(_id, kStringImage,kStringGenericDescription5,NULLOBJECT,NULLTYPE,4,4,0);
-
-		_dialogsX[0] = kStringDialogX1;
-		_dialogsX[1] = kStringDialogX2;
-		_dialogsX[2] = kStringDialogX3;
-	}
+	AxacussExit(SupernovaEngine *vm, GameManager *gm);
 
 	virtual bool interact(Action verb, Object &obj1, Object &obj2);
 
 private:
 	StringId _dialogsX[6];
 };
+
 class AxacussOffice1 : public Room {
 public:
-	AxacussOffice1(SupernovaEngine *vm, GameManager *gm) {
-		_vm = vm;
-		_gm = gm;
-
-		_fileNumber = 7;
-		_id = OFFICE_L1;
-		_shown[0] = kShownTrue;
-		_shown[2] = kShownTrue;
-		_shown[7] = kShownTrue;
-		_shown[9] = kShownTrue;
-		_shown[16] = kShownTrue;
-
-		_objectState[0] = Object(_id, kStringDoor,kStringDefaultDescription,DOOR,EXIT|OPENABLE|OPENED,6,6,9,BCORRIDOR,9);
-		_objectState[1] = Object(_id, kStringComputer,kStringDefaultDescription,COMPUTER,COMBINABLE,4,4,0);
-		_objectState[2] = Object(_id, kStringMoney,kStringMoneyDescription1,MONEY,TAKE,255,255,0);
-		_objectState[3] = Object(_id, kStringLocker,kStringLockerDescription,LOCKER,OPENABLE|CLOSED,5,5,0);
-		_objectState[4] = Object(_id, kStringLetter,kStringDefaultDescription,LETTER,UNNECESSARY,3,3,0);
-	}
+	AxacussOffice1(SupernovaEngine *vm, GameManager *gm);
 
 	virtual bool interact(Action verb, Object &obj1, Object &obj2);
 };
+
 class AxacussOffice2 : public Room {
 public:
-	AxacussOffice2(SupernovaEngine *vm, GameManager *gm) {
-		_vm = vm;
-		_gm = gm;
-
-		_fileNumber = 7;
-		_id = OFFICE_L2;
-		_shown[0] = kShownTrue;
-		_shown[1] = kShownTrue;
-		_shown[9] = kShownTrue;
-		_shown[16] = kShownTrue;
-
-		_objectState[0] = Object(_id, kStringDoor,kStringDefaultDescription,DOOR,EXIT|OPENABLE|OPENED,6,6,9,BCORRIDOR,9);
-		_objectState[1] = Object(_id, kStringComputer,kStringDefaultDescription,COMPUTER,COMBINABLE,4,4,0);
-		_objectState[2] = Object(_id, kStringCube,kStringGenericDescription6,NULLOBJECT,NULLTYPE,0,0,0);
-		_objectState[3] = Object(_id, kStringImage,kStringGenericDescription7,NULLOBJECT,NULLTYPE,1,1,0);
-		_objectState[4] = Object(_id, kStringStrangeThing,kStringGenericDescription8,NULLOBJECT,UNNECESSARY,2,2,0);
-	}
+	AxacussOffice2(SupernovaEngine *vm, GameManager *gm);
 
 	virtual bool interact(Action verb, Object &obj1, Object &obj2);
 };
+
 class AxacussOffice3 : public Room {
 public:
-	AxacussOffice3(SupernovaEngine *vm, GameManager *gm) {
-		_vm = vm;
-		_gm = gm;
-
-		_fileNumber = 8;
-		_id = OFFICE_R1;
-		_shown[0] = kShownTrue;
-		_shown[1] = kShownTrue;
-		_shown[3] = kShownTrue;
-
-		_objectState[0] = Object(_id, kStringDoor,kStringDefaultDescription,DOOR,EXIT|OPENABLE|OPENED,0,0,3,BCORRIDOR,5);
-		_objectState[1] = Object(_id, kStringComputer,kStringDefaultDescription,COMPUTER,COMBINABLE,4,4,0);
-		_objectState[2] = Object(_id, kStringImage,kStringImageDescription2,NULLOBJECT,UNNECESSARY,1,1,0);
-		_objectState[3] = Object(_id, kStringImage,kStringImageDescription2,PAINTING,UNNECESSARY,2,2,0);
-		_objectState[4] = Object(_id, kStringPlant,kStringDefaultDescription,NULLOBJECT,UNNECESSARY,3,3,0);
-		_objectState[5] = Object(_id, kNoString,kStringDefaultDescription,MONEY,TAKE|COMBINABLE,255,255,0);
-	}
+	AxacussOffice3(SupernovaEngine *vm, GameManager *gm);
 
 	virtual bool interact(Action verb, Object &obj1, Object &obj2);
 };
+
 class AxacussOffice4 : public Room {
 public:
-	AxacussOffice4(SupernovaEngine *vm, GameManager *gm) {
-		_vm = vm;
-		_gm = gm;
-
-		_fileNumber = 8;
-		_id = OFFICE_R2;
-		_shown[0] = kShownTrue;
-		_shown[2] = kShownTrue;
-		_shown[3] = kShownTrue;
-
-		_objectState[0] = Object(_id, kStringDoor,kStringDefaultDescription,DOOR,EXIT|OPENABLE|OPENED,0,0,3,BCORRIDOR,5);
-		_objectState[1] = Object(_id, kStringComputer,kStringDefaultDescription,COMPUTER,COMBINABLE,4,4,0);
-		_objectState[2] = Object(_id, kStringStatue,kStringStatueDescription,NULLOBJECT,UNNECESSARY,6,6,0);
-		_objectState[3] = Object(_id, kStringPlant,kStringPlantDescription,NULLOBJECT,UNNECESSARY,5,5,0);
-	}
+	AxacussOffice4(SupernovaEngine *vm, GameManager *gm);
 
 	virtual bool interact(Action verb, Object &obj1, Object &obj2);
 };
+
 class AxacussOffice5 : public Room {
 public:
-	AxacussOffice5(SupernovaEngine *vm, GameManager *gm) {
-		_vm = vm;
-		_gm = gm;
-
-		_fileNumber = 7;
-		_id = OFFICE_L;
-		_shown[0] = kShownTrue;
-		_shown[3] = kShownTrue;
-		_shown[5] = kShownTrue;
-		_shown[17] = kShownTrue;
-
-		_objectState[0] = Object(_id, kStringDoor,kStringDefaultDescription,DOOR,EXIT|OPENABLE|OPENED,6,6,17,GUARD3,9);
-		_objectState[1] = Object(_id, kStringComputer,kStringComputerDescription,COMPUTER,COMBINABLE,4,4,0);
-		_objectState[2] = Object(_id, kStringGraffiti,kStringGraffitiDescription,NULLOBJECT,NULLTYPE,7,7,0);
-		_objectState[3] = Object(_id, kStringMoney,kStringMoneyDescription2,MONEY,TAKE,8,8,0);
-	}
+	AxacussOffice5(SupernovaEngine *vm, GameManager *gm);
 
 	virtual void onEntrance();
 	virtual bool interact(Action verb, Object &obj1, Object &obj2);
 };
+
 class AxacussElevator : public Room {
 public:
-	AxacussElevator(SupernovaEngine *vm, GameManager *gm) {
-		_vm = vm;
-		_gm = gm;
-
-		_fileNumber = 3;
-		_id = ELEVATOR;
-		_shown[0] = kShownTrue;
-
-		_objectState[0] = Object(_id, kStringButton,kStringDefaultDescription,BUTTON1,PRESS,0,0,0);
-		_objectState[1] = Object(_id, kStringButton,kStringDefaultDescription,BUTTON2,PRESS,1,1,0);
-		_objectState[2] = Object(_id, kStringExit,kStringDefaultDescription,DOOR,EXIT,255,255,0,NULLROOM,22);
-		_objectState[3] = Object(_id, kStringJungle,kStringJungleDescription,JUNGLE,NULLTYPE,255,255,0,STATION,2);
-	}
+	AxacussElevator(SupernovaEngine *vm, GameManager *gm);
 
 	virtual bool interact(Action verb, Object &obj1, Object &obj2);
 };
+
 class AxacussStation : public Room {
 public:
-	AxacussStation(SupernovaEngine *vm, GameManager *gm) {
-		_vm = vm;
-		_gm = gm;
-
-		_fileNumber = 5;
-		_id = STATION;
-		_shown[0] = kShownTrue;
-		_objectState[0] = Object(_id, kStringSign,kStringDefaultDescription,STATION_SIGN,NULLTYPE,0,0,0);
-		_objectState[1] = Object(_id, kStringDoor,kStringDefaultDescription,DOOR,EXIT|OPENABLE|CLOSED,1,1,0,NULLROOM,7);
-	}
+	AxacussStation(SupernovaEngine *vm, GameManager *gm);
 
 	virtual bool interact(Action verb, Object &obj1, Object &obj2);
 };
+
 class AxacussSign : public Room {
 public:
-	AxacussSign(SupernovaEngine *vm, GameManager *gm) {
-		_vm = vm;
-		_gm = gm;
-
-		_fileNumber = 32;
-		_id = SIGN;
-		_shown[0] = kShownTrue;
-		_shown[1] = kShownTrue;
-
-		_objectState[0] = Object(_id, kStringExit,kStringDefaultDescription,NULLOBJECT,EXIT,255,255,0,STATION,22);
-		_objectState[1] = Object(_id, kStringSlot,kStringDefaultDescription,STATION_SLOT,COMBINABLE,0,0,0);
-	}
+	AxacussSign(SupernovaEngine *vm, GameManager *gm);
 
 	virtual bool interact(Action verb, Object &obj1, Object &obj2);
 };


Commit: c20b960d80376653682e3eac0299f8a931cf66e3
    https://github.com/scummvm/scummvm/commit/c20b960d80376653682e3eac0299f8a931cf66e3
Author: Joseph-Eugene Winzer (joewinzer at googlemail.com)
Date: 2019-02-06T09:42:11+01:00

Commit Message:
SUPERNOVA: Adds renderImage overload for ImageId

Changed paths:
    engines/supernova/supernova.cpp
    engines/supernova/supernova.h


diff --git a/engines/supernova/supernova.cpp b/engines/supernova/supernova.cpp
index 74d815a..833589c 100644
--- a/engines/supernova/supernova.cpp
+++ b/engines/supernova/supernova.cpp
@@ -247,6 +247,10 @@ void SupernovaEngine::renderImage(int section) {
 	_screen->renderImage(section);
 }
 
+void SupernovaEngine::renderImage(ImageId id, bool removeImage) {
+	_screen->renderImage(id, removeImage);
+}
+
 bool SupernovaEngine::setCurrentImage(int filenumber) {
 	return _screen->setCurrentImage(filenumber);
 }
diff --git a/engines/supernova/supernova.h b/engines/supernova/supernova.h
index b4af8b4..c66fd50 100644
--- a/engines/supernova/supernova.h
+++ b/engines/supernova/supernova.h
@@ -35,6 +35,7 @@
 #include "supernova/msn_def.h"
 #include "supernova/rooms.h"
 #include "supernova/sound.h"
+#include "supernova/imageid.h"
 
 namespace Common {
 	class MemoryReadWriteStream;
@@ -102,6 +103,7 @@ public:
 	void paletteFadeOut();
 	void paletteBrightness();
 	void renderImage(int section);
+	void renderImage(ImageId id, bool removeImage = false);
 	bool setCurrentImage(int filenumber);
 	void saveScreen(int x, int y, int width, int height);
 	void saveScreen(const GuiElement &guiElement);


Commit: ebaa6739ec68cf18b8c8a272df8d992a36a4728e
    https://github.com/scummvm/scummvm/commit/ebaa6739ec68cf18b8c8a272df8d992a36a4728e
Author: Joseph-Eugene Winzer (joewinzer at googlemail.com)
Date: 2019-02-06T09:42:11+01:00

Commit Message:
SUPERNOVA: Adds Outro image

msn_data.055 that stores the outro image was missed to be added
to imageInfo and thus not loaded during the engine init/

Changed paths:
    engines/supernova/imageid.h
    engines/supernova/resman.cpp
    engines/supernova/resman.h
    engines/supernova/screenstatic.cpp


diff --git a/engines/supernova/imageid.h b/engines/supernova/imageid.h
index c1168c3..a05b06c 100644
--- a/engines/supernova/imageid.h
+++ b/engines/supernova/imageid.h
@@ -647,7 +647,9 @@ enum ImageId {
 	kImageCellRobotSparks,
 	kImageCellRobotBroken,
 	kImageCellDoorClosed,
-	kImageCellDummy1
+	kImageCellDummy1,
+	// file 55
+	kImageOutroScreen
 };
 
 }
diff --git a/engines/supernova/resman.cpp b/engines/supernova/resman.cpp
index 1c17884..d7ea0b3 100644
--- a/engines/supernova/resman.cpp
+++ b/engines/supernova/resman.cpp
@@ -163,10 +163,12 @@ void ResourceManager::initCursorGraphics() {
 }
 
 void ResourceManager::initImages() {
-	for (int i = 0; i < kNumImageFiles; ++i) {
+	for (int i = 0; i < 44; ++i) {
 		if (!_images[i].init(i))
 			error("Failed reading image file msn_data.%03d", i);
 	}
+	if (!_images[44].init(55))
+			error("Failed reading image file msn_data.055");
 }
 
 Audio::SeekableAudioStream *ResourceManager::getSoundStream(AudioId index) {
@@ -190,9 +192,12 @@ Audio::AudioStream *ResourceManager::getSoundStream(MusicId index) {
 }
 
 const MSNImage *ResourceManager::getImage(int filenumber) const {
-	assert(filenumber < kNumImageFiles);
-
-	return &_images[filenumber];
+	if (filenumber < 44)
+		return &_images[filenumber];
+	else if (filenumber == 55)
+		return &_images[44];
+	else
+		return nullptr;
 }
 
 const byte *ResourceManager::getImage(CursorId id) const {
diff --git a/engines/supernova/resman.h b/engines/supernova/resman.h
index 080ecc5..080497e 100644
--- a/engines/supernova/resman.h
+++ b/engines/supernova/resman.h
@@ -44,7 +44,7 @@ public:
 	};
 
 public:
-	static const int kNumImageFiles = 44;
+	static const int kNumImageFiles = 45;
 
 public:
 	ResourceManager();
diff --git a/engines/supernova/screenstatic.cpp b/engines/supernova/screenstatic.cpp
index db987bf..796c148 100644
--- a/engines/supernova/screenstatic.cpp
+++ b/engines/supernova/screenstatic.cpp
@@ -139,7 +139,8 @@ static const Screen::ImageInfo imageInfo[] = {
 	{43, 12}, {43, 13}, {43, 14}, {43, 15}, {43, 16}, {43, 17},
 	{43, 18}, {43, 19}, {43, 20}, {43, 21}, {43, 22}, {43, 23},
 	{43, 24}, {43, 25}, {43, 26}, {43, 27}, {43, 28}, {43, 29},
-	{43, 30}, {43, 31}
+	{43, 30}, {43, 31},
+	{55,  0}
 };
 
 // Default palette


Commit: 437b1c00036fbdf38688281a898133c3cb7a394f
    https://github.com/scummvm/scummvm/commit/437b1c00036fbdf38688281a898133c3cb7a394f
Author: Joseph-Eugene Winzer (joewinzer at googlemail.com)
Date: 2019-02-06T09:42:11+01:00

Commit Message:
SUPERNOVA: Updates NOTES

The audio samples' offset and corresponding file number are better
described in sound.h. Also the variable timer2 was renamed quite a while
ago and served only as a reference to the original source code.

Changed paths:
    engines/supernova/NOTES


diff --git a/engines/supernova/NOTES b/engines/supernova/NOTES
index 909f4eb..db6d4e2 100644
--- a/engines/supernova/NOTES
+++ b/engines/supernova/NOTES
@@ -1,39 +1,3 @@
-Audio
------------
-
-There may be several sound effects in one file.
-This list shows them and their offsets.
-
-46:
-       0   - Voice "Halt!"
-    2510   -
-    4020   -
-
-47:
-        0   - Voice "Mission Supernova"
-    24010   - Voice "Yeaahh.."
-
-48:
-        0   -
-     2510   -
-    10520   - electric shock
-    13530   - (playing turntable)
-
-50:
-        0   -
-    12786   -
-
-51:
-
-53: Death sound
-
-54:
-        0   - Alarm
-     8010   -
-    24020   - Door sound
-    30030   - Door open
-    31040   - Door close
-
 Engine
 ----------
 MouseFields
@@ -50,9 +14,6 @@ Dimensions
     Exit Maps:          (283, 163) (317, 197)
 
 
-timer2 == animation timer
-
-
 Text
 -------
 AE - 216    ae - 204


Commit: bd298f3b3d9159c4d1be7d007994a69324c3c745
    https://github.com/scummvm/scummvm/commit/bd298f3b3d9159c4d1be7d007994a69324c3c745
Author: Joseph-Eugene Winzer (joewinzer at googlemail.com)
Date: 2019-02-06T09:42:11+01:00

Commit Message:
SUPERNOVA: Removes GameManager dependency for Screen

All calls from Screen member functions to the GameManager instance
are relocated to the wrapper functions in SupernovaEngine.

Changed paths:
    engines/supernova/screen.cpp
    engines/supernova/screen.h
    engines/supernova/supernova.cpp


diff --git a/engines/supernova/screen.cpp b/engines/supernova/screen.cpp
index 2c441ac..124bddd 100644
--- a/engines/supernova/screen.cpp
+++ b/engines/supernova/screen.cpp
@@ -168,9 +168,8 @@ void Marquee::renderCharacter() {
 	}
 }
 
-Screen::Screen(SupernovaEngine *vm, GameManager *gm, ResourceManager *resMan)
+Screen::Screen(SupernovaEngine *vm, ResourceManager *resMan)
 	: _vm(vm)
-	, _gm(gm)
 	, _resMan(resMan)
 	, _currentImage(nullptr)
 	, _viewportBrightness(255)
@@ -208,6 +207,10 @@ const MSNImage *Screen::getCurrentImage() const {
 	return _currentImage;
 }
 
+const Screen::ImageInfo *Screen::getImageInfo(ImageId id) const {
+	return &imageInfo[(int)id];
+}
+
 bool Screen::isMessageShown() const {
 	return _messageShown;
 }
@@ -327,21 +330,16 @@ void Screen::renderText(StringId stringId, int x, int y, byte color) {
 	renderText(_vm->getGameString(stringId), x, y, color);
 }
 
-void Screen::renderImageSection(const MSNImage *image, int section) {
+void Screen::renderImageSection(const MSNImage *image, int section, bool invert) {
 	// Note: inverting means we are removing the section. So we should get the rect for that
 	// section but draw the background (section 0) instead.
-	bool invert = false;
-	if (section > 128) {
-		section -= 128;
-		invert = true;
-	}
 	if (section > image->_numSections - 1)
 		return;
 
 	Common::Rect sectionRect(image->_section[section].x1,
-	                         image->_section[section].y1,
-	                         image->_section[section].x2 + 1,
-	                         image->_section[section].y2 + 1);
+							 image->_section[section].y1,
+							 image->_section[section].x2 + 1,
+							 image->_section[section].y2 + 1);
 	if (image->_filenumber == 1 || image->_filenumber == 2) {
 		sectionRect.setWidth(640);
 		sectionRect.setHeight(480);
@@ -383,11 +381,7 @@ void Screen::renderImage(ImageId id, bool removeImage) {
 	}
 
 	do {
-		if (removeImage)
-			renderImageSection(image, info.section + 128);
-		else
-			renderImageSection(image, info.section);
-
+		renderImageSection(image, info.section, removeImage);
 		info.section = image->_section[info.section].next;
 	} while (info.section != 0);
 }
@@ -396,20 +390,14 @@ void Screen::renderImage(int section) {
 	if (!_currentImage)
 		return;
 
-	bool sectionVisible = true;
-
+	bool removeImage = false;
 	if (section > 128) {
-		sectionVisible = false;
+		removeImage = true;
 		section -= 128;
 	}
 
-	_gm->_currentRoom->setSectionVisible(section, sectionVisible);
-
 	do {
-		if (sectionVisible)
-			renderImageSection(_currentImage, section);
-		else
-			renderImageSection(_currentImage, section + 128);
+		renderImageSection(_currentImage, section, removeImage);
 		section = _currentImage->_section[section].next;
 	} while (section != 0);
 }
@@ -443,7 +431,7 @@ void Screen::renderRoom(Room &room) {
 			int section = i;
 			if (room.isSectionVisible(section)) {
 				do {
-					renderImageSection(_currentImage, section);
+					renderImageSection(_currentImage, section, false);
 					section = _currentImage->_section[section].next;
 				} while (section != 0);
 			}
@@ -554,7 +542,6 @@ void Screen::renderMessage(const char *text, MessagePosition position) {
 	}
 
 	_messageShown = true;
-	_gm->_messageDuration = (Common::strnlen(text, 512) + 20) * _vm->_textSpeed / 10;
 }
 
 void Screen::removeMessage() {
@@ -613,9 +600,9 @@ void Screen::paletteFadeOut() {
 	_vm->_system->updateScreen();
 }
 
-void Screen::paletteFadeIn() {
+void Screen::paletteFadeIn(int maxViewportBrightness) {
 	while (_guiBrightness < 245) {
-		if (_viewportBrightness < _gm->_roomBrightness)
+		if (_viewportBrightness < maxViewportBrightness)
 			_viewportBrightness += 10;
 		_guiBrightness += 10;
 		paletteBrightness();
@@ -623,7 +610,7 @@ void Screen::paletteFadeIn() {
 		_vm->_system->delayMillis(_vm->_delay);
 	}
 	_guiBrightness = 255;
-	_viewportBrightness = _gm->_roomBrightness;
+	_viewportBrightness = maxViewportBrightness;
 	paletteBrightness();
 	_vm->_system->updateScreen();
 }
diff --git a/engines/supernova/screen.h b/engines/supernova/screen.h
index d57fb53..bcffe61 100644
--- a/engines/supernova/screen.h
+++ b/engines/supernova/screen.h
@@ -132,15 +132,16 @@ public:
 	static int textWidth(const Common::String &text);
 
 public:
-	Screen(SupernovaEngine *vm, GameManager *gm, ResourceManager *resMan);
+	Screen(SupernovaEngine *vm, ResourceManager *resMan);
 
 	int getViewportBrightness() const;
 	void setViewportBrightness(int brightness);
 	int getGuiBrightness() const;
 	void setGuiBrightness(int brightness);
 	const MSNImage *getCurrentImage() const;
+	const ImageInfo *getImageInfo(ImageId id) const;
 	bool isMessageShown() const;
-	void paletteFadeIn();
+	void paletteFadeIn(int maxViewportBrightness);
 	void paletteFadeOut();
 	void paletteBrightness();
 	void renderImage(ImageId id, bool removeImage = false);
@@ -174,11 +175,10 @@ public:
 	void update();
 
 private:
-	void renderImageSection(const MSNImage *image, int section);
+	void renderImageSection(const MSNImage *image, int section, bool invert);
 
 private:
 	SupernovaEngine *_vm;
-	GameManager *_gm;
 	ResourceManager *_resMan;
 	const MSNImage *_currentImage;
 	ScreenBufferStack _screenBuffer;
diff --git a/engines/supernova/supernova.cpp b/engines/supernova/supernova.cpp
index 833589c..34d4064 100644
--- a/engines/supernova/supernova.cpp
+++ b/engines/supernova/supernova.cpp
@@ -136,7 +136,7 @@ void SupernovaEngine::init() {
 	_resMan = new ResourceManager();
 	_sound = new Sound(_mixer, _resMan);
 	_gm = new GameManager(this, _sound);
-	_screen = new Screen(this, _gm, _resMan);
+	_screen = new Screen(this, _resMan);
 	_console = new Console(this, _gm);
 
 	setTotalPlayTime(0);
@@ -244,10 +244,16 @@ void SupernovaEngine::playSound(MusicId index) {
 }
 
 void SupernovaEngine::renderImage(int section) {
+	if (section > 128)
+		_gm->_currentRoom->setSectionVisible(section - 128, false);
+	else
+		_gm->_currentRoom->setSectionVisible(section, true);
+
 	_screen->renderImage(section);
 }
 
 void SupernovaEngine::renderImage(ImageId id, bool removeImage) {
+	_gm->_currentRoom->setSectionVisible(_screen->getImageInfo(id)->section, !removeImage);
 	_screen->renderImage(id, removeImage);
 }
 
@@ -271,14 +277,17 @@ void SupernovaEngine::renderRoom(Room &room) {
 }
 
 void SupernovaEngine::renderMessage(const char *text, MessagePosition position) {
+	_gm->_messageDuration = (Common::strnlen(text, 512) + 20) * _textSpeed / 10;
 	_screen->renderMessage(text, position);
 }
 
 void SupernovaEngine::renderMessage(const Common::String &text, MessagePosition position) {
+	_gm->_messageDuration = (text.size() + 20) * _textSpeed / 10;
 	_screen->renderMessage(text, position);
 }
 
 void SupernovaEngine::renderMessage(StringId stringId, MessagePosition position, Common::String var1, Common::String var2) {
+	_gm->_messageDuration = (getGameString(stringId).size() + 20) * _textSpeed / 10;
 	_screen->renderMessage(stringId, position, var1, var2);
 }
 
@@ -329,6 +338,7 @@ void SupernovaEngine::renderBox(int x, int y, int width, int height, byte color)
 void SupernovaEngine::renderBox(const GuiElement &guiElement) {
 	_screen->renderBox(guiElement);
 }
+
 void SupernovaEngine::paletteBrightness() {
 	_screen->paletteBrightness();
 }
@@ -338,7 +348,8 @@ void SupernovaEngine::paletteFadeOut() {
 }
 
 void SupernovaEngine::paletteFadeIn() {
-	_screen->paletteFadeIn();
+	_gm->roomBrightness();
+	_screen->paletteFadeIn(_gm->_roomBrightness);
 }
 
 void SupernovaEngine::setColor63(byte value) {


Commit: 536630aece6dc26a9066e2d68944b924f45eccf7
    https://github.com/scummvm/scummvm/commit/536630aece6dc26a9066e2d68944b924f45eccf7
Author: Joseph-Eugene Winzer (joewinzer at googlemail.com)
Date: 2019-02-06T09:42:11+01:00

Commit Message:
SUPERNOVA: Removes invalid ImageId entry

Changed paths:
    engines/supernova/imageid.h


diff --git a/engines/supernova/imageid.h b/engines/supernova/imageid.h
index a05b06c..95c5b8e 100644
--- a/engines/supernova/imageid.h
+++ b/engines/supernova/imageid.h
@@ -252,7 +252,6 @@ enum ImageId {
 	kImageAxacussCorridorAlienLeft,
 	kImageAxacussCorridorAlienBottom,
 	kImageAxacussCorridorAlienTop,
-	kImageAxacussCorridorDummy1,
 	// file 17
 	kImageShipCorridorCabinBackground,
 	kImageShipCorridorCabinL1Open,


Commit: 641a4307f230152931adb49940c5c72cc839f0cb
    https://github.com/scummvm/scummvm/commit/641a4307f230152931adb49940c5c72cc839f0cb
Author: Joseph-Eugene Winzer (joewinzer at googlemail.com)
Date: 2019-02-06T09:42:11+01:00

Commit Message:
SUPERNOVA: Uses setCurrentImage in renderImage

Although renderImage for ImageId doesn't use _currentImage, it needs to
be set for compatibility with the section based renderImage function.
The functionality doesn't change with this commit, except that the
palette brightness gets updated if the image is in a different file.

Changed paths:
    engines/supernova/screen.cpp


diff --git a/engines/supernova/screen.cpp b/engines/supernova/screen.cpp
index 124bddd..105025e 100644
--- a/engines/supernova/screen.cpp
+++ b/engines/supernova/screen.cpp
@@ -375,10 +375,8 @@ void Screen::renderImage(ImageId id, bool removeImage) {
 	ImageInfo info = imageInfo[id];
 	const MSNImage *image = _resMan->getImage(info.filenumber);
 
-	if (_currentImage != image) {
-		_currentImage = image;
-		_vm->_system->getPaletteManager()->setPalette(image->getPalette(), 16, 239);
-	}
+	if (_currentImage != image)
+		setCurrentImage(info.filenumber);
 
 	do {
 		renderImageSection(image, info.section, removeImage);


Commit: 21c9c885baddf198552c1468878ce32ed3f872aa
    https://github.com/scummvm/scummvm/commit/21c9c885baddf198552c1468878ce32ed3f872aa
Author: Joseph-Eugene Winzer (joewinzer at googlemail.com)
Date: 2019-02-06T09:42:11+01:00

Commit Message:
SUPERNOVA: Stops time and animations when reading the newspaper

After leaving the cell on Arsano there's a desk you need to attach your
watch to and set the alarm to attract the guard in the next room. If the
alarm goes off while reading the newspaper, the game glitches out with
wrong palette colors, scene, ..

Changed paths:
    engines/supernova/state.cpp


diff --git a/engines/supernova/state.cpp b/engines/supernova/state.cpp
index fa53b5e..92a8dfe 100644
--- a/engines/supernova/state.cpp
+++ b/engines/supernova/state.cpp
@@ -2004,6 +2004,9 @@ bool GameManager::genericInteract(Action verb, Object &obj1, Object &obj2) {
 			takeObject(*_rooms[ROGER]->getObject(8));
 		}
 	} else if ((verb == ACTION_LOOK) && (obj1._id == NEWSPAPER)) {
+		animationOff();
+		saveTime();
+
 		_vm->renderMessage(kStringGenericInteract_10);
 		waitOnInput(_messageDuration);
 		_vm->removeMessage();
@@ -2017,6 +2020,9 @@ bool GameManager::genericInteract(Action verb, Object &obj1, Object &obj2) {
 		_vm->renderRoom(*_currentRoom);
 		roomBrightness();
 		_vm->renderMessage(kStringGenericInteract_12);
+
+		loadTime();
+		animationOn();
 	} else if ((verb == ACTION_LOOK) && (obj1._id == KEYCARD2)) {
 		_vm->renderMessage(obj1._description);
 		obj1._description = kStringKeycard2Description2;


Commit: 1d00e625cf4c5248e073a71fc3e6e75780b1c0ca
    https://github.com/scummvm/scummvm/commit/1d00e625cf4c5248e073a71fc3e6e75780b1c0ca
Author: Joseph-Eugene Winzer (joewinzer at googlemail.com)
Date: 2019-02-06T09:42:11+01:00

Commit Message:
SUPERNOVA: Fixing header file includes

Changed paths:
    engines/supernova/msn_def.h
    engines/supernova/rooms.h


diff --git a/engines/supernova/msn_def.h b/engines/supernova/msn_def.h
index 6ce16b8..cb473e7 100644
--- a/engines/supernova/msn_def.h
+++ b/engines/supernova/msn_def.h
@@ -23,6 +23,8 @@
 #ifndef SUPERNOVA_MSN_DEF_H
 #define SUPERNOVA_MSN_DEF_H
 
+#include "common/scummsys.h"
+
 namespace Supernova {
 
 const int kTextSpeed[] = {19, 14, 10, 7, 4};
diff --git a/engines/supernova/rooms.h b/engines/supernova/rooms.h
index e544997..801bfc4 100644
--- a/engines/supernova/rooms.h
+++ b/engines/supernova/rooms.h
@@ -23,9 +23,9 @@
 #ifndef SUPERNOVA_ROOMS_H
 #define SUPERNOVA_ROOMS_H
 
-#include "common/scummsys.h"
+#include "common/str.h"
 
-#include "msn_def.h"
+#include "supernova/msn_def.h"
 
 namespace Common {
 class ReadStream;


Commit: ff36f94c1f6112b4f6318a25c3376d6d53b07b53
    https://github.com/scummvm/scummvm/commit/ff36f94c1f6112b4f6318a25c3376d6d53b07b53
Author: Joseph-Eugene Winzer (joewinzer at googlemail.com)
Date: 2019-02-06T09:42:11+01:00

Commit Message:
SUPERNOVA: Adds missing initializations

Changed paths:
    engines/supernova/graphics.cpp
    engines/supernova/rooms.cpp
    engines/supernova/state.cpp
    engines/supernova/state.h


diff --git a/engines/supernova/graphics.cpp b/engines/supernova/graphics.cpp
index 9a05a42..ff385f9 100644
--- a/engines/supernova/graphics.cpp
+++ b/engines/supernova/graphics.cpp
@@ -42,6 +42,24 @@ MSNImage::MSNImage() {
 	_pitch = 0;
 	_numSections = 0;
 	_numClickFields = 0;
+
+	for (int i = 0; i < kMaxSections; ++i) {
+		_section[i].x1 = 0;
+		_section[i].x2 = 0;
+		_section[i].y1 = 0;
+		_section[i].y2 = 0;
+		_section[i].next = 0;
+		_section[i].addressLow = 0xFFFF;
+		_section[i].addressHigh = 0xFF;
+	}
+
+	for (int i = 0; i < kMaxClickFields; ++i) {
+		_clickField[i].x1 = 0;
+		_clickField[i].x2 = 0;
+		_clickField[i].y1 = 0;
+		_clickField[i].y2 = 0;
+		_clickField[i].next = 0;
+	}
 }
 
 MSNImage::~MSNImage() {
diff --git a/engines/supernova/rooms.cpp b/engines/supernova/rooms.cpp
index ce274d6..18fd64e 100644
--- a/engines/supernova/rooms.cpp
+++ b/engines/supernova/rooms.cpp
@@ -32,6 +32,11 @@ namespace Supernova {
 
 Room::Room() {
 	_seen = false;
+	_fileNumber = 0;
+	_id = NULLROOM;
+	_vm = nullptr;
+	_gm = nullptr;
+
 	for (int i = 0; i < kMaxSection; ++i)
 		_shown[i] = kShownFalse;
 	for (int i = 0; i < kMaxDialog; ++i)
@@ -704,6 +709,7 @@ ShipSleepCabin::ShipSleepCabin(SupernovaEngine *vm, GameManager *gm) {
 	_fileNumber = 33;
 	_id = SLEEP;
 	_shown[0] = kShownTrue;
+	_color = kColorBlack;
 
 	_objectState[0] = Object(_id, kStringHatch, kStringStasisHatchDescription2, CABINS, NULLTYPE, 0, 0, 0, NULLROOM, 0);
 	_objectState[1] = Object(_id, kStringHatch, kStringStasisHatchDescription2, CABIN, NULLTYPE, 1, 1, 0, NULLROOM, 0);
@@ -916,6 +922,7 @@ ShipCockpit::ShipCockpit(SupernovaEngine *vm, GameManager *gm) {
 	_fileNumber = 9;
 	_id = COCKPIT;
 	_shown[0] = kShownTrue;
+	_color = kColorBlack;
 
 	_objectState[0] = Object(_id, kStringInstruments, kStringInstrumentsDescription1, INSTRUMENTS, NULLTYPE, 2, 2, 0, NULLROOM, 0);
 	_objectState[1] = Object(_id, kStringMonitor, kStringDefaultDescription, MONITOR, NULLTYPE, 0, 0, 0, NULLROOM, 0);
@@ -1907,6 +1914,8 @@ ArsanoMeetup::ArsanoMeetup(SupernovaEngine *vm, GameManager *gm) {
 	_fileNumber = 37;
 	_id = MEETUP;
 	_shown[0] = kShownTrue;
+	_sign = 0;
+	_beacon = 0;
 
 	_objectState[0] = Object(_id, kStringCave,kStringDefaultDescription,NULLOBJECT,EXIT,255,255,0,CAVE,22);
 	_objectState[1] = Object(_id, kStringSign,kStringSignDescription,MEETUP_SIGN,NULLTYPE,0,0,0);
@@ -2273,6 +2282,7 @@ ArsanoRemaining::ArsanoRemaining(SupernovaEngine *vm, GameManager *gm) {
 	_objectState[2] = Object(_id, kStringShoes,kStringShoesDescription,NULLOBJECT,NULLTYPE,2,2,0);
 
 	_chewing = kShownTrue;
+	_i = 0;
 }
 
 void ArsanoRemaining::animation() {
@@ -2459,6 +2469,7 @@ ArsanoRoger::ArsanoRoger(SupernovaEngine *vm, GameManager *gm) {
 	_dialog1[3] = kStringDialogSeparator;
 
 	_eyewitness = 5;
+	_hands = 0;
 }
 
 void ArsanoRoger::onEntrance() {
@@ -2592,6 +2603,7 @@ ArsanoGlider::ArsanoGlider(SupernovaEngine *vm, GameManager *gm) {
 	_fileNumber = 19;
 	_id = GLIDER;
 	_shown[0] = kShownTrue;
+	_sinus = 0;
 
 	_objectState[0] = Object(_id, kStringExit,kStringDefaultDescription,NULLOBJECT,EXIT,255,255,0,MEETUP,15);
 	_objectState[1] = Object(_id, kStringButton,kStringDefaultDescription,GLIDER_BUTTON1,PRESS,0,0,0);
diff --git a/engines/supernova/state.cpp b/engines/supernova/state.cpp
index 92a8dfe..8d54bd7 100644
--- a/engines/supernova/state.cpp
+++ b/engines/supernova/state.cpp
@@ -290,7 +290,8 @@ StringId GameManager::guiStatusCommands[] = {
 GameManager::GameManager(SupernovaEngine *vm, Sound *sound)
 	: _inventory(&_nullObject, _inventoryScroll)
 	, _vm(vm)
-	, _sound(sound) {
+    , _sound(sound)
+    , _mouseClickType(Common::EVENT_INVALID) {
 	initRooms();
 	changeRoom(INTRO);
 	initState();
diff --git a/engines/supernova/state.h b/engines/supernova/state.h
index 7d7b228..c044670 100644
--- a/engines/supernova/state.h
+++ b/engines/supernova/state.h
@@ -68,8 +68,10 @@ public:
 	Inventory(Object *nullObject, int &inventoryScroll)
 		: _numObjects(0)
 		, _nullObject(nullObject)
-		, _inventoryScroll(inventoryScroll)
-	{}
+	    , _inventoryScroll(inventoryScroll) {
+		for (int i = 0; i < kMaxCarry; ++i)
+			_inventory[i] = nullptr;
+	}
 
 	void add(Object &obj);
 	void remove(Object &obj);


Commit: 498de6347e969720958960e9fea266fad9959c4c
    https://github.com/scummvm/scummvm/commit/498de6347e969720958960e9fea266fad9959c4c
Author: Joseph-Eugene Winzer (joewinzer at googlemail.com)
Date: 2019-02-06T09:42:11+01:00

Commit Message:
SUPERNOVA: Fixes OOB read

Changed paths:
    engines/supernova/rooms.cpp


diff --git a/engines/supernova/rooms.cpp b/engines/supernova/rooms.cpp
index 18fd64e..10cb988 100644
--- a/engines/supernova/rooms.cpp
+++ b/engines/supernova/rooms.cpp
@@ -57,7 +57,7 @@ bool Room::serialize(Common::WriteStream *out) {
 		out->writeByte(_sentenceRemoved[i]);
 
 	int numObjects = 0;
-	while ((_objectState[numObjects]._id != INVALIDOBJECT) && (numObjects < kMaxObject))
+	while ((numObjects < kMaxObject) && (_objectState[numObjects]._id != INVALIDOBJECT))
 		++numObjects;
 	out->writeSint32LE(numObjects);
 


Commit: 5ff4764442b3829e2664e35f211a6c78c49ae11e
    https://github.com/scummvm/scummvm/commit/5ff4764442b3829e2664e35f211a6c78c49ae11e
Author: Joseph-Eugene Winzer (joewinzer at googlemail.com)
Date: 2019-02-06T09:42:11+01:00

Commit Message:
SUPERNOVA: Fixes possible OOB read

Changed paths:
    engines/supernova/screen.cpp


diff --git a/engines/supernova/screen.cpp b/engines/supernova/screen.cpp
index 105025e..1fa112b 100644
--- a/engines/supernova/screen.cpp
+++ b/engines/supernova/screen.cpp
@@ -385,15 +385,15 @@ void Screen::renderImage(ImageId id, bool removeImage) {
 }
 
 void Screen::renderImage(int section) {
-	if (!_currentImage)
-		return;
-
 	bool removeImage = false;
 	if (section > 128) {
 		removeImage = true;
 		section -= 128;
 	}
 
+	if (!_currentImage || section >= kMaxSection)
+		return;
+
 	do {
 		renderImageSection(_currentImage, section, removeImage);
 		section = _currentImage->_section[section].next;





More information about the Scummvm-git-logs mailing list