From c8472f729540d8e858785103bd45af4bc3758d53 Mon Sep 17 00:00:00 2001 From: elasota Date: Mon, 11 Nov 2019 00:11:59 -0500 Subject: [PATCH] Lots of stuff --- .gitignore | 19 + Common.props | 12 + Common/CoreDefs.h | 34 + GlidePort.sln | 81 + GlidePort/GlidePort.vcxproj | 122 + GlidePort/GlidePort.vcxproj.filters | 17 + Glider PRO CW5.mcp | Bin 171219 -> 0 bytes Glider PRO.mcp | Bin 201821 -> 0 bytes GpApp/About.cpp | 258 ++ GpApp/About.h | 10 + GpApp/AnimCursor.cpp | 286 ++ GpApp/AppleEvents.cpp | 202 ++ GpApp/Banner.cpp | 238 ++ GpApp/ColorUtils.cpp | 225 ++ GpApp/Coordinates.cpp | 197 ++ {Sources => GpApp}/DebugUtilities.c | 0 GpApp/DialogUtils.cpp | 807 +++++ GpApp/DialogUtils.h | 47 + GpApp/DynamicMaps.cpp | 798 +++++ {Headers => GpApp}/DynamicMaps.h | 0 GpApp/Dynamics.cpp | 776 +++++ GpApp/Dynamics2.cpp | 589 ++++ GpApp/Dynamics3.cpp | 555 ++++ GpApp/Environ.cpp | 492 +++ GpApp/Environ.h | 37 + GpApp/Events.cpp | 574 ++++ GpApp/Externs.h | 390 +++ GpApp/FileError.cpp | 101 + GpApp/GameOver.cpp | 508 +++ GpApp/GameOver.h | 12 + GpApp/GliderDefines.h | 625 ++++ GpApp/GliderProtos.h | 530 ++++ GpApp/GliderStructs.h | 347 ++ GpApp/GliderVars.h | 59 + GpApp/GpApp.props | 12 + GpApp/GpApp.vcxproj | 204 ++ GpApp/GpApp.vcxproj.filters | 214 ++ GpApp/GpAppInterface.cpp | 57 + GpApp/Grease.cpp | 302 ++ GpApp/HighScores.cpp | 856 +++++ GpApp/House.cpp | 860 +++++ GpApp/House.h | 12 + GpApp/HouseIO.cpp | 707 +++++ GpApp/HouseInfo.cpp | 344 ++ GpApp/HouseLegal.cpp | 1219 +++++++ GpApp/Input.cpp | 399 +++ GpApp/Interactions.cpp | 1777 +++++++++++ GpApp/InterfaceInit.cpp | 220 ++ GpApp/Link.cpp | 397 +++ GpApp/Main.cpp | 389 +++ GpApp/MainWindow.cpp | 602 ++++ GpApp/MainWindow.h | 11 + GpApp/Map.cpp | 797 +++++ GpApp/Map.h | 12 + GpApp/Marquee.cpp | 511 +++ GpApp/Marquee.h | 24 + GpApp/Menu.cpp | 814 +++++ GpApp/Modes.cpp | 640 ++++ GpApp/Music.cpp | 416 +++ GpApp/ObjectAdd.cpp | 1084 +++++++ GpApp/ObjectDraw.cpp | 1406 +++++++++ GpApp/ObjectDraw2.cpp | 1438 +++++++++ GpApp/ObjectDrawAll.cpp | 966 ++++++ GpApp/ObjectEdit.cpp | 2811 +++++++++++++++++ GpApp/ObjectEdit.h | 15 + GpApp/ObjectInfo.cpp | 2568 +++++++++++++++ GpApp/ObjectRects.cpp | 1188 +++++++ GpApp/Objects.cpp | 1001 ++++++ GpApp/Objects.h | 42 + GpApp/Play.cpp | 821 +++++ GpApp/Play.h | 13 + GpApp/Player.cpp | 1605 ++++++++++ GpApp/Player.h | 12 + Prefix.h => GpApp/Prefix.h | 0 GpApp/Prefs.cpp | 269 ++ GpApp/RectUtils.cpp | 318 ++ GpApp/RectUtils.h | 33 + GpApp/Render.cpp | 772 +++++ GpApp/Room.cpp | 1207 +++++++ GpApp/Room.h | 12 + GpApp/RoomGraphics.cpp | 461 +++ GpApp/RoomGraphics.h | 11 + GpApp/RoomInfo.cpp | 908 ++++++ GpApp/RubberBands.cpp | 318 ++ GpApp/RubberBands.h | 12 + GpApp/SavedGames.cpp | 352 +++ GpApp/Scoreboard.cpp | 458 +++ GpApp/Scoreboard.h | 15 + {Sources => GpApp}/Scrap.c | 0 GpApp/SelectHouse.cpp | 676 ++++ GpApp/Settings.cpp | 1482 +++++++++ GpApp/Sound.cpp | 511 +++ GpApp/StringUtils.cpp | 304 ++ GpApp/StructuresInit.cpp | 726 +++++ GpApp/StructuresInit2.cpp | 477 +++ GpApp/Tools.cpp | 546 ++++ GpApp/Tools.h | 12 + GpApp/Transit.cpp | 558 ++++ GpApp/Transitions.cpp | 145 + GpApp/Triggers.cpp | 205 ++ GpApp/Trip.cpp | 245 ++ GpApp/Utilities.cpp | 763 +++++ GpApp/Utilities.h | 11 + {Sources => GpApp}/Validate.c | 0 GpApp/WindowUtils.cpp | 172 + GpApp/x64/Debug/vc141.idb | Bin 0 -> 224256 bytes GpApp2/ApplicationResources.bin | Bin 0 -> 3773184 bytes CarbonLib => GpApp2/CarbonLib | Bin GPLv2-LICENSE.md => GpApp2/GPLv2-LICENSE.md | 0 GpApp2/Glider PRO.bin | Bin 0 -> 3773184 bytes Glider PRO.r => GpApp2/Glider PRO.r | 0 {Houses => GpApp2/Houses}/Art Museum.binhex | 0 {Houses => GpApp2/Houses}/Art Museum.mov | Bin .../Houses}/CD Demo House.binhex | 0 {Houses => GpApp2/Houses}/CD Demo House.mov | Bin .../Houses}/California or Bust!.binhex | 0 .../Houses}/Castle o' the Air.binhex | 0 .../Houses}/Castle o' the Air.mov | Bin .../Houses}/Davis Station.binhex | 0 {Houses => GpApp2/Houses}/Davis Station.mov | Bin {Houses => GpApp2/Houses}/Demo House.binhex | 0 {Houses => GpApp2/Houses}/Demo House.mov | Bin {Houses => GpApp2/Houses}/Empty House.binhex | 0 {Houses => GpApp2/Houses}/Fun House.binhex | 0 {Houses => GpApp2/Houses}/Grand Prix.binhex | 0 {Houses => GpApp2/Houses}/Grand Prix.mov | Bin .../Houses}/ImagineHouse PRO II.binhex | 0 .../Houses}/ImagineHouse PRO II.mov | Bin .../Houses}/In The Mirror.binhex | 0 .../Houses}/Land of Illusion.binhex | 0 .../Houses}/Land of Illusion.mov | Bin {Houses => GpApp2/Houses}/Leviathan.binhex | 0 {Houses => GpApp2/Houses}/Leviathan.mov | Bin {Houses => GpApp2/Houses}/Metropolis.binhex | 0 .../Houses}/Nemo's Market.binhex | 0 {Houses => GpApp2/Houses}/Nemo's Market.mov | Bin .../Houses}/Rainbow's End.binhex | 0 {Houses => GpApp2/Houses}/Rainbow's End.mov | Bin {Houses => GpApp2/Houses}/Sampler.binhex | 0 GpApp2/Houses/Slumberland.bin | Bin 0 -> 1175552 bytes {Houses => GpApp2/Houses}/Slumberland.binhex | 0 {Houses => GpApp2/Houses}/Slumberland.mov | Bin {Houses => GpApp2/Houses}/SpacePods.binhex | 0 {Houses => GpApp2/Houses}/SpacePods.mov | Bin {Houses => GpApp2/Houses}/Teddy World.binhex | 0 {Houses => GpApp2/Houses}/Teddy World.mov | Bin .../Houses}/The Asylum Pro.binhex | 0 {Houses => GpApp2/Houses}/Titanic.binhex | 0 {Houses => GpApp2/Houses}/Titanic.mov | Bin README.md => GpApp2/README.md | 0 GpD3D/EGpDisplayDriverType.h | 8 + GpD3D/GpAppEnvironment.cpp | 130 + GpD3D/GpAppEnvironment.h | 55 + GpD3D/GpCoreDefs.h | 25 + GpD3D/GpD3D.vcxproj | 177 ++ GpD3D/GpD3D.vcxproj.filters | 129 + GpD3D/GpDisplayDriverD3D11.cpp | 290 ++ GpD3D/GpDisplayDriverD3D11.h | 50 + GpD3D/GpDisplayDriverFactory.cpp | 23 + GpD3D/GpDisplayDriverFactory.h | 18 + GpD3D/GpDisplayDriverFactoryD3D11.cpp | 7 + GpD3D/GpDisplayDriverFactoryD3D11.h | 10 + GpD3D/GpDisplayDriverProperties.h | 26 + GpD3D/GpEvent.h | 21 + GpD3D/GpEvent_Win32.cpp | 49 + GpD3D/GpFiber.h | 10 + GpD3D/GpFiberStarter.h | 11 + GpD3D/GpFiberStarter_Win32.cpp | 52 + GpD3D/GpFiber_Win32.cpp | 17 + GpD3D/GpFiber_Win32.h | 15 + GpD3D/GpFileStream_Win32.cpp | 141 + GpD3D/GpFileStream_Win32.h | 30 + GpD3D/GpFileSystem_Win32.cpp | 96 + GpD3D/GpFileSystem_Win32.h | 25 + GpD3D/GpGlobalConfig.cpp | 3 + GpD3D/GpGlobalConfig.h | 10 + GpD3D/GpMain.cpp | 48 + GpD3D/GpMain.h | 6 + GpD3D/GpMain_Win32.cpp | 33 + GpD3D/GpMemoryBuffer.cpp | 49 + GpD3D/GpMemoryBuffer.h | 21 + GpD3D/GpPLGlueDisplayDriver.cpp | 28 + GpD3D/GpPLGlueDisplayDriver.h | 23 + GpD3D/GpRingBuffer.h | 63 + GpD3D/GpSystemServices_Win32.cpp | 19 + GpD3D/GpSystemServices_Win32.h | 19 + GpD3D/GpWindows.h | 16 + GpD3D/IGpDisplayDriver.h | 13 + GpD3D/x64/Debug/vc141.idb | Bin 0 -> 543744 bytes Headers/About.h | 1 - Headers/DialogUtils.h | 1 - Headers/Environ.h | 1 - Headers/Externs.h | 1 - Headers/GameOver.h | 1 - Headers/GliderDefines.h | 1 - Headers/GliderProtos.h | 1 - Headers/GliderStructs.h | 1 - Headers/GliderVars.h | 1 - Headers/House.h | 1 - Headers/MainWindow.h | 1 - Headers/Map.h | 1 - Headers/Marquee.h | 1 - Headers/ObjectEdit.h | 1 - Headers/Objects.h | 1 - Headers/Play.h | 1 - Headers/Player.h | 1 - Headers/RectUtils.h | 1 - Headers/Room.h | 1 - Headers/RoomGraphics.h | 1 - Headers/RubberBands.h | 1 - Headers/Scoreboard.h | 1 - Headers/Tools.h | 1 - Headers/Utilities.h | 1 - MiniRez/MiniRez.cpp | 528 ++++ MiniRez/MiniRez.vcxproj | 136 + MiniRez/MiniRez.vcxproj.filters | 22 + MiniRez/x64/Debug/vc141.idb | Bin 0 -> 175104 bytes PortabilityLayer.props | 12 + PortabilityLayer/AEHandlerDesc.h | 20 + PortabilityLayer/AEManager.cpp | 73 + PortabilityLayer/AEManager.h | 24 + PortabilityLayer/BinHex4.cpp | 302 ++ PortabilityLayer/BinHex4.h | 17 + PortabilityLayer/BinarySearch.h | 36 + PortabilityLayer/BytePack.h | 76 + PortabilityLayer/ByteSwap.cpp | 37 + PortabilityLayer/ByteSwap.h | 18 + PortabilityLayer/ByteUnpack.h | 78 + PortabilityLayer/CFileStream.cpp | 110 + PortabilityLayer/CFileStream.h | 42 + PortabilityLayer/DataTypes.h | 14 + PortabilityLayer/DisplayDeviceManager.cpp | 75 + PortabilityLayer/DisplayDeviceManager.h | 25 + PortabilityLayer/FileManager.cpp | 207 ++ PortabilityLayer/FileManager.h | 31 + PortabilityLayer/FilePermission.h | 15 + PortabilityLayer/GpAppInterface.h | 42 + PortabilityLayer/HostDisplayDriver.cpp | 16 + PortabilityLayer/HostDisplayDriver.h | 21 + PortabilityLayer/HostFileSystem.cpp | 16 + PortabilityLayer/HostFileSystem.h | 25 + PortabilityLayer/HostMemoryBuffer.h | 20 + PortabilityLayer/HostSuspendCallArgument.h | 17 + PortabilityLayer/HostSuspendCallID.h | 15 + PortabilityLayer/HostSuspendHook.cpp | 22 + PortabilityLayer/HostSuspendHook.h | 17 + PortabilityLayer/HostSystemServices.cpp | 16 + PortabilityLayer/HostSystemServices.h | 22 + PortabilityLayer/IOStream.h | 31 + PortabilityLayer/MMBlock.cpp | 12 + PortabilityLayer/MMBlock.h | 20 + PortabilityLayer/MMHandleBlock.cpp | 17 + PortabilityLayer/MMHandleBlock.h | 29 + PortabilityLayer/MacBinary2.cpp | 185 ++ PortabilityLayer/MacBinary2.h | 18 + PortabilityLayer/MacFileInfo.cpp | 63 + PortabilityLayer/MacFileInfo.h | 89 + PortabilityLayer/MacFileMem.cpp | 26 + PortabilityLayer/MacFileMem.h | 52 + PortabilityLayer/MacFileWriteableMem.h | 14 + PortabilityLayer/MacRsrcHeader.h | 21 + PortabilityLayer/MacRsrcMap.h | 20 + PortabilityLayer/MemReaderStream.cpp | 110 + PortabilityLayer/MemReaderStream.h | 37 + PortabilityLayer/MemoryManager.cpp | 106 + PortabilityLayer/MemoryManager.h | 51 + PortabilityLayer/PLAliases.cpp | 7 + PortabilityLayer/PLAliases.h | 9 + PortabilityLayer/PLAppleEvents.cpp | 49 + PortabilityLayer/PLAppleEvents.h | 32 + PortabilityLayer/PLAppleEventsCommonTypes.h | 50 + PortabilityLayer/PLApplication.cpp | 23 + PortabilityLayer/PLApplication.h | 37 + PortabilityLayer/PLBigEndian.h | 212 ++ PortabilityLayer/PLControlDefinitions.cpp | 72 + PortabilityLayer/PLControlDefinitions.h | 49 + PortabilityLayer/PLCore.cpp | 614 ++++ PortabilityLayer/PLCore.h | 411 +++ PortabilityLayer/PLDialogs.cpp | 84 + PortabilityLayer/PLDialogs.h | 57 + PortabilityLayer/PLErrorCodes.h | 32 + PortabilityLayer/PLFolders.h | 1 + PortabilityLayer/PLLowMem.h | 1 + PortabilityLayer/PLMacTypes.h | 1 + PortabilityLayer/PLMenus.cpp | 53 + PortabilityLayer/PLMenus.h | 21 + PortabilityLayer/PLMovies.cpp | 141 + PortabilityLayer/PLMovies.h | 64 + PortabilityLayer/PLNavigation.cpp | 13 + PortabilityLayer/PLNavigation.h | 27 + PortabilityLayer/PLNumberFormatting.cpp | 52 + PortabilityLayer/PLNumberFormatting.h | 9 + PortabilityLayer/PLPalettes.h | 5 + PortabilityLayer/PLPasStr.h | 79 + PortabilityLayer/PLQDOffscreen.cpp | 50 + PortabilityLayer/PLQDOffscreen.h | 51 + PortabilityLayer/PLQuickdraw.cpp | 366 +++ PortabilityLayer/PLQuickdraw.h | 217 ++ PortabilityLayer/PLResourceManager.cpp | 138 + PortabilityLayer/PLResources.cpp | 88 + PortabilityLayer/PLResources.h | 37 + PortabilityLayer/PLScript.h | 1 + PortabilityLayer/PLSound.cpp | 53 + PortabilityLayer/PLSound.h | 56 + PortabilityLayer/PLStringCompare.cpp | 7 + PortabilityLayer/PLStringCompare.h | 10 + PortabilityLayer/PLTextUtils.h | 1 + PortabilityLayer/PLToolUtils.h | 1 + PortabilityLayer/PascalStr.h | 36 + PortabilityLayer/PascalStrLiteral.h | 40 + PortabilityLayer/PortabilityLayer.vcxproj | 238 ++ .../PortabilityLayer.vcxproj.filters | 351 ++ PortabilityLayer/RCPtr.h | 121 + PortabilityLayer/RandomNumberGenerator.cpp | 85 + PortabilityLayer/RandomNumberGenerator.h | 19 + PortabilityLayer/RefCounted.h | 38 + PortabilityLayer/ResTypeID.h | 68 + PortabilityLayer/ResTypeIDCodec.h | 70 + PortabilityLayer/ResourceCompiledRef.cpp | 17 + PortabilityLayer/ResourceCompiledRef.h | 19 + PortabilityLayer/ResourceFile.cpp | 375 +++ PortabilityLayer/ResourceFile.h | 54 + PortabilityLayer/ResourceManager.h | 28 + PortabilityLayer/ScopedArray.h | 83 + PortabilityLayer/ScopedPtr.h | 97 + PortabilityLayer/SmallestInt.h | 100 + PortabilityLayer/UnsafePascalStr.h | 90 + PortabilityLayer/VirtualDirectory.h | 15 + PortabilityLayer/XModemCRC.cpp | 54 + PortabilityLayer/XModemCRC.h | 13 + .../x64/Debug/PortabilityLayer.idb | Bin 0 -> 338944 bytes Sources/About.c | 1 - Sources/AnimCursor.c | 1 - Sources/AppleEvents.c | 1 - Sources/Banner.c | 1 - Sources/ColorUtils.c | 1 - Sources/Coordinates.c | 1 - Sources/DialogUtils.c | 1 - Sources/DynamicMaps.c | 1 - Sources/Dynamics.c | 1 - Sources/Dynamics2.c | 1 - Sources/Dynamics3.c | 1 - Sources/Environ.c | 1 - Sources/Events.c | 1 - Sources/FileError.c | 1 - Sources/GameOver.c | 1 - Sources/Grease.c | 1 - Sources/HighScores.c | 1 - Sources/House.c | 1 - Sources/HouseIO.c | 1 - Sources/HouseInfo.c | 1 - Sources/HouseLegal.c | 1 - Sources/Input.c | 1 - Sources/Interactions.c | 1 - Sources/InterfaceInit.c | 1 - Sources/Link.c | 1 - Sources/Main.c | 1 - Sources/MainWindow.c | 1 - Sources/Map.c | 1 - Sources/Marquee.c | 1 - Sources/Menu.c | 1 - Sources/Modes.c | 1 - Sources/Music.c | 1 - Sources/ObjectAdd.c | 1 - Sources/ObjectDraw.c | 1 - Sources/ObjectDraw2.c | 1 - Sources/ObjectDrawAll.c | 1 - Sources/ObjectEdit.c | 1 - Sources/ObjectInfo.c | 1 - Sources/ObjectRects.c | 1 - Sources/Objects.c | 1 - Sources/Play.c | 1 - Sources/Player.c | 1 - Sources/Prefs.c | 1 - Sources/RectUtils.c | 1 - Sources/Render.c | 1 - Sources/Room.c | 1 - Sources/RoomGraphics.c | 1 - Sources/RoomInfo.c | 1 - Sources/RubberBands.c | 1 - Sources/SavedGames.c | 1 - Sources/Scoreboard.c | 1 - Sources/SelectHouse.c | 1 - Sources/Settings.c | 1 - Sources/Sound.c | 1 - Sources/StringUtils.c | 1 - Sources/StructuresInit.c | 1 - Sources/StructuresInit2.c | 1 - Sources/Tools.c | 1 - Sources/Transit.c | 1 - Sources/Transitions.c | 1 - Sources/Triggers.c | 1 - Sources/Trip.c | 1 - Sources/Utilities.c | 1 - Sources/WindowUtils.c | 1 - hqx2bin/hqx2bin.aps | Bin 0 -> 1308 bytes hqx2bin/hqx2bin.cpp | 76 + hqx2bin/hqx2bin.vcxproj | 136 + hqx2bin/hqx2bin.vcxproj.filters | 22 + hqx2bin/x64/Debug/RCa77828 | Bin 0 -> 2860 bytes hqx2bin/x64/Debug/vc141.idb | Bin 0 -> 60416 bytes hqx2gp/hqx2gp.cpp | 116 + hqx2gp/hqx2gp.vcxproj | 136 + hqx2gp/hqx2gp.vcxproj.filters | 22 + hqx2gp/x64/Debug/vc141.idb | Bin 0 -> 175104 bytes notes.txt | 6 + 406 files changed, 58313 insertions(+), 88 deletions(-) create mode 100644 .gitignore create mode 100644 Common.props create mode 100644 Common/CoreDefs.h create mode 100644 GlidePort.sln create mode 100644 GlidePort/GlidePort.vcxproj create mode 100644 GlidePort/GlidePort.vcxproj.filters delete mode 100755 Glider PRO CW5.mcp delete mode 100755 Glider PRO.mcp create mode 100644 GpApp/About.cpp create mode 100644 GpApp/About.h create mode 100644 GpApp/AnimCursor.cpp create mode 100644 GpApp/AppleEvents.cpp create mode 100644 GpApp/Banner.cpp create mode 100644 GpApp/ColorUtils.cpp create mode 100644 GpApp/Coordinates.cpp rename {Sources => GpApp}/DebugUtilities.c (100%) mode change 100755 => 100644 create mode 100644 GpApp/DialogUtils.cpp create mode 100644 GpApp/DialogUtils.h create mode 100644 GpApp/DynamicMaps.cpp rename {Headers => GpApp}/DynamicMaps.h (100%) mode change 100755 => 100644 create mode 100644 GpApp/Dynamics.cpp create mode 100644 GpApp/Dynamics2.cpp create mode 100644 GpApp/Dynamics3.cpp create mode 100644 GpApp/Environ.cpp create mode 100644 GpApp/Environ.h create mode 100644 GpApp/Events.cpp create mode 100644 GpApp/Externs.h create mode 100644 GpApp/FileError.cpp create mode 100644 GpApp/GameOver.cpp create mode 100644 GpApp/GameOver.h create mode 100644 GpApp/GliderDefines.h create mode 100644 GpApp/GliderProtos.h create mode 100644 GpApp/GliderStructs.h create mode 100644 GpApp/GliderVars.h create mode 100644 GpApp/GpApp.props create mode 100644 GpApp/GpApp.vcxproj create mode 100644 GpApp/GpApp.vcxproj.filters create mode 100644 GpApp/GpAppInterface.cpp create mode 100644 GpApp/Grease.cpp create mode 100644 GpApp/HighScores.cpp create mode 100644 GpApp/House.cpp create mode 100644 GpApp/House.h create mode 100644 GpApp/HouseIO.cpp create mode 100644 GpApp/HouseInfo.cpp create mode 100644 GpApp/HouseLegal.cpp create mode 100644 GpApp/Input.cpp create mode 100644 GpApp/Interactions.cpp create mode 100644 GpApp/InterfaceInit.cpp create mode 100644 GpApp/Link.cpp create mode 100644 GpApp/Main.cpp create mode 100644 GpApp/MainWindow.cpp create mode 100644 GpApp/MainWindow.h create mode 100644 GpApp/Map.cpp create mode 100644 GpApp/Map.h create mode 100644 GpApp/Marquee.cpp create mode 100644 GpApp/Marquee.h create mode 100644 GpApp/Menu.cpp create mode 100644 GpApp/Modes.cpp create mode 100644 GpApp/Music.cpp create mode 100644 GpApp/ObjectAdd.cpp create mode 100644 GpApp/ObjectDraw.cpp create mode 100644 GpApp/ObjectDraw2.cpp create mode 100644 GpApp/ObjectDrawAll.cpp create mode 100644 GpApp/ObjectEdit.cpp create mode 100644 GpApp/ObjectEdit.h create mode 100644 GpApp/ObjectInfo.cpp create mode 100644 GpApp/ObjectRects.cpp create mode 100644 GpApp/Objects.cpp create mode 100644 GpApp/Objects.h create mode 100644 GpApp/Play.cpp create mode 100644 GpApp/Play.h create mode 100644 GpApp/Player.cpp create mode 100644 GpApp/Player.h rename Prefix.h => GpApp/Prefix.h (100%) mode change 100755 => 100644 create mode 100644 GpApp/Prefs.cpp create mode 100644 GpApp/RectUtils.cpp create mode 100644 GpApp/RectUtils.h create mode 100644 GpApp/Render.cpp create mode 100644 GpApp/Room.cpp create mode 100644 GpApp/Room.h create mode 100644 GpApp/RoomGraphics.cpp create mode 100644 GpApp/RoomGraphics.h create mode 100644 GpApp/RoomInfo.cpp create mode 100644 GpApp/RubberBands.cpp create mode 100644 GpApp/RubberBands.h create mode 100644 GpApp/SavedGames.cpp create mode 100644 GpApp/Scoreboard.cpp create mode 100644 GpApp/Scoreboard.h rename {Sources => GpApp}/Scrap.c (100%) mode change 100755 => 100644 create mode 100644 GpApp/SelectHouse.cpp create mode 100644 GpApp/Settings.cpp create mode 100644 GpApp/Sound.cpp create mode 100644 GpApp/StringUtils.cpp create mode 100644 GpApp/StructuresInit.cpp create mode 100644 GpApp/StructuresInit2.cpp create mode 100644 GpApp/Tools.cpp create mode 100644 GpApp/Tools.h create mode 100644 GpApp/Transit.cpp create mode 100644 GpApp/Transitions.cpp create mode 100644 GpApp/Triggers.cpp create mode 100644 GpApp/Trip.cpp create mode 100644 GpApp/Utilities.cpp create mode 100644 GpApp/Utilities.h rename {Sources => GpApp}/Validate.c (100%) mode change 100755 => 100644 create mode 100644 GpApp/WindowUtils.cpp create mode 100644 GpApp/x64/Debug/vc141.idb create mode 100644 GpApp2/ApplicationResources.bin rename CarbonLib => GpApp2/CarbonLib (100%) mode change 100755 => 100644 rename GPLv2-LICENSE.md => GpApp2/GPLv2-LICENSE.md (100%) create mode 100644 GpApp2/Glider PRO.bin rename Glider PRO.r => GpApp2/Glider PRO.r (100%) rename {Houses => GpApp2/Houses}/Art Museum.binhex (100%) rename {Houses => GpApp2/Houses}/Art Museum.mov (100%) mode change 100755 => 100644 rename {Houses => GpApp2/Houses}/CD Demo House.binhex (100%) rename {Houses => GpApp2/Houses}/CD Demo House.mov (100%) mode change 100755 => 100644 rename {Houses => GpApp2/Houses}/California or Bust!.binhex (100%) rename {Houses => GpApp2/Houses}/Castle o' the Air.binhex (100%) rename {Houses => GpApp2/Houses}/Castle o' the Air.mov (100%) mode change 100755 => 100644 rename {Houses => GpApp2/Houses}/Davis Station.binhex (100%) rename {Houses => GpApp2/Houses}/Davis Station.mov (100%) mode change 100755 => 100644 rename {Houses => GpApp2/Houses}/Demo House.binhex (100%) rename {Houses => GpApp2/Houses}/Demo House.mov (100%) mode change 100755 => 100644 rename {Houses => GpApp2/Houses}/Empty House.binhex (100%) rename {Houses => GpApp2/Houses}/Fun House.binhex (100%) rename {Houses => GpApp2/Houses}/Grand Prix.binhex (100%) rename {Houses => GpApp2/Houses}/Grand Prix.mov (100%) mode change 100755 => 100644 rename {Houses => GpApp2/Houses}/ImagineHouse PRO II.binhex (100%) rename {Houses => GpApp2/Houses}/ImagineHouse PRO II.mov (100%) mode change 100755 => 100644 rename {Houses => GpApp2/Houses}/In The Mirror.binhex (100%) rename {Houses => GpApp2/Houses}/Land of Illusion.binhex (100%) rename {Houses => GpApp2/Houses}/Land of Illusion.mov (100%) mode change 100755 => 100644 rename {Houses => GpApp2/Houses}/Leviathan.binhex (100%) rename {Houses => GpApp2/Houses}/Leviathan.mov (100%) mode change 100755 => 100644 rename {Houses => GpApp2/Houses}/Metropolis.binhex (100%) rename {Houses => GpApp2/Houses}/Nemo's Market.binhex (100%) rename {Houses => GpApp2/Houses}/Nemo's Market.mov (100%) mode change 100755 => 100644 rename {Houses => GpApp2/Houses}/Rainbow's End.binhex (100%) rename {Houses => GpApp2/Houses}/Rainbow's End.mov (100%) mode change 100755 => 100644 rename {Houses => GpApp2/Houses}/Sampler.binhex (100%) create mode 100644 GpApp2/Houses/Slumberland.bin rename {Houses => GpApp2/Houses}/Slumberland.binhex (100%) rename {Houses => GpApp2/Houses}/Slumberland.mov (100%) mode change 100755 => 100644 rename {Houses => GpApp2/Houses}/SpacePods.binhex (100%) rename {Houses => GpApp2/Houses}/SpacePods.mov (100%) mode change 100755 => 100644 rename {Houses => GpApp2/Houses}/Teddy World.binhex (100%) rename {Houses => GpApp2/Houses}/Teddy World.mov (100%) mode change 100755 => 100644 rename {Houses => GpApp2/Houses}/The Asylum Pro.binhex (100%) rename {Houses => GpApp2/Houses}/Titanic.binhex (100%) rename {Houses => GpApp2/Houses}/Titanic.mov (100%) mode change 100755 => 100644 rename README.md => GpApp2/README.md (100%) create mode 100644 GpD3D/EGpDisplayDriverType.h create mode 100644 GpD3D/GpAppEnvironment.cpp create mode 100644 GpD3D/GpAppEnvironment.h create mode 100644 GpD3D/GpCoreDefs.h create mode 100644 GpD3D/GpD3D.vcxproj create mode 100644 GpD3D/GpD3D.vcxproj.filters create mode 100644 GpD3D/GpDisplayDriverD3D11.cpp create mode 100644 GpD3D/GpDisplayDriverD3D11.h create mode 100644 GpD3D/GpDisplayDriverFactory.cpp create mode 100644 GpD3D/GpDisplayDriverFactory.h create mode 100644 GpD3D/GpDisplayDriverFactoryD3D11.cpp create mode 100644 GpD3D/GpDisplayDriverFactoryD3D11.h create mode 100644 GpD3D/GpDisplayDriverProperties.h create mode 100644 GpD3D/GpEvent.h create mode 100644 GpD3D/GpEvent_Win32.cpp create mode 100644 GpD3D/GpFiber.h create mode 100644 GpD3D/GpFiberStarter.h create mode 100644 GpD3D/GpFiberStarter_Win32.cpp create mode 100644 GpD3D/GpFiber_Win32.cpp create mode 100644 GpD3D/GpFiber_Win32.h create mode 100644 GpD3D/GpFileStream_Win32.cpp create mode 100644 GpD3D/GpFileStream_Win32.h create mode 100644 GpD3D/GpFileSystem_Win32.cpp create mode 100644 GpD3D/GpFileSystem_Win32.h create mode 100644 GpD3D/GpGlobalConfig.cpp create mode 100644 GpD3D/GpGlobalConfig.h create mode 100644 GpD3D/GpMain.cpp create mode 100644 GpD3D/GpMain.h create mode 100644 GpD3D/GpMain_Win32.cpp create mode 100644 GpD3D/GpMemoryBuffer.cpp create mode 100644 GpD3D/GpMemoryBuffer.h create mode 100644 GpD3D/GpPLGlueDisplayDriver.cpp create mode 100644 GpD3D/GpPLGlueDisplayDriver.h create mode 100644 GpD3D/GpRingBuffer.h create mode 100644 GpD3D/GpSystemServices_Win32.cpp create mode 100644 GpD3D/GpSystemServices_Win32.h create mode 100644 GpD3D/GpWindows.h create mode 100644 GpD3D/IGpDisplayDriver.h create mode 100644 GpD3D/x64/Debug/vc141.idb delete mode 100755 Headers/About.h delete mode 100755 Headers/DialogUtils.h delete mode 100755 Headers/Environ.h delete mode 100755 Headers/Externs.h delete mode 100755 Headers/GameOver.h delete mode 100755 Headers/GliderDefines.h delete mode 100755 Headers/GliderProtos.h delete mode 100755 Headers/GliderStructs.h delete mode 100755 Headers/GliderVars.h delete mode 100755 Headers/House.h delete mode 100755 Headers/MainWindow.h delete mode 100755 Headers/Map.h delete mode 100755 Headers/Marquee.h delete mode 100755 Headers/ObjectEdit.h delete mode 100755 Headers/Objects.h delete mode 100755 Headers/Play.h delete mode 100755 Headers/Player.h delete mode 100755 Headers/RectUtils.h delete mode 100755 Headers/Room.h delete mode 100755 Headers/RoomGraphics.h delete mode 100755 Headers/RubberBands.h delete mode 100755 Headers/Scoreboard.h delete mode 100755 Headers/Tools.h delete mode 100755 Headers/Utilities.h create mode 100644 MiniRez/MiniRez.cpp create mode 100644 MiniRez/MiniRez.vcxproj create mode 100644 MiniRez/MiniRez.vcxproj.filters create mode 100644 MiniRez/x64/Debug/vc141.idb create mode 100644 PortabilityLayer.props create mode 100644 PortabilityLayer/AEHandlerDesc.h create mode 100644 PortabilityLayer/AEManager.cpp create mode 100644 PortabilityLayer/AEManager.h create mode 100644 PortabilityLayer/BinHex4.cpp create mode 100644 PortabilityLayer/BinHex4.h create mode 100644 PortabilityLayer/BinarySearch.h create mode 100644 PortabilityLayer/BytePack.h create mode 100644 PortabilityLayer/ByteSwap.cpp create mode 100644 PortabilityLayer/ByteSwap.h create mode 100644 PortabilityLayer/ByteUnpack.h create mode 100644 PortabilityLayer/CFileStream.cpp create mode 100644 PortabilityLayer/CFileStream.h create mode 100644 PortabilityLayer/DataTypes.h create mode 100644 PortabilityLayer/DisplayDeviceManager.cpp create mode 100644 PortabilityLayer/DisplayDeviceManager.h create mode 100644 PortabilityLayer/FileManager.cpp create mode 100644 PortabilityLayer/FileManager.h create mode 100644 PortabilityLayer/FilePermission.h create mode 100644 PortabilityLayer/GpAppInterface.h create mode 100644 PortabilityLayer/HostDisplayDriver.cpp create mode 100644 PortabilityLayer/HostDisplayDriver.h create mode 100644 PortabilityLayer/HostFileSystem.cpp create mode 100644 PortabilityLayer/HostFileSystem.h create mode 100644 PortabilityLayer/HostMemoryBuffer.h create mode 100644 PortabilityLayer/HostSuspendCallArgument.h create mode 100644 PortabilityLayer/HostSuspendCallID.h create mode 100644 PortabilityLayer/HostSuspendHook.cpp create mode 100644 PortabilityLayer/HostSuspendHook.h create mode 100644 PortabilityLayer/HostSystemServices.cpp create mode 100644 PortabilityLayer/HostSystemServices.h create mode 100644 PortabilityLayer/IOStream.h create mode 100644 PortabilityLayer/MMBlock.cpp create mode 100644 PortabilityLayer/MMBlock.h create mode 100644 PortabilityLayer/MMHandleBlock.cpp create mode 100644 PortabilityLayer/MMHandleBlock.h create mode 100644 PortabilityLayer/MacBinary2.cpp create mode 100644 PortabilityLayer/MacBinary2.h create mode 100644 PortabilityLayer/MacFileInfo.cpp create mode 100644 PortabilityLayer/MacFileInfo.h create mode 100644 PortabilityLayer/MacFileMem.cpp create mode 100644 PortabilityLayer/MacFileMem.h create mode 100644 PortabilityLayer/MacFileWriteableMem.h create mode 100644 PortabilityLayer/MacRsrcHeader.h create mode 100644 PortabilityLayer/MacRsrcMap.h create mode 100644 PortabilityLayer/MemReaderStream.cpp create mode 100644 PortabilityLayer/MemReaderStream.h create mode 100644 PortabilityLayer/MemoryManager.cpp create mode 100644 PortabilityLayer/MemoryManager.h create mode 100644 PortabilityLayer/PLAliases.cpp create mode 100644 PortabilityLayer/PLAliases.h create mode 100644 PortabilityLayer/PLAppleEvents.cpp create mode 100644 PortabilityLayer/PLAppleEvents.h create mode 100644 PortabilityLayer/PLAppleEventsCommonTypes.h create mode 100644 PortabilityLayer/PLApplication.cpp create mode 100644 PortabilityLayer/PLApplication.h create mode 100644 PortabilityLayer/PLBigEndian.h create mode 100644 PortabilityLayer/PLControlDefinitions.cpp create mode 100644 PortabilityLayer/PLControlDefinitions.h create mode 100644 PortabilityLayer/PLCore.cpp create mode 100644 PortabilityLayer/PLCore.h create mode 100644 PortabilityLayer/PLDialogs.cpp create mode 100644 PortabilityLayer/PLDialogs.h create mode 100644 PortabilityLayer/PLErrorCodes.h create mode 100644 PortabilityLayer/PLFolders.h create mode 100644 PortabilityLayer/PLLowMem.h create mode 100644 PortabilityLayer/PLMacTypes.h create mode 100644 PortabilityLayer/PLMenus.cpp create mode 100644 PortabilityLayer/PLMenus.h create mode 100644 PortabilityLayer/PLMovies.cpp create mode 100644 PortabilityLayer/PLMovies.h create mode 100644 PortabilityLayer/PLNavigation.cpp create mode 100644 PortabilityLayer/PLNavigation.h create mode 100644 PortabilityLayer/PLNumberFormatting.cpp create mode 100644 PortabilityLayer/PLNumberFormatting.h create mode 100644 PortabilityLayer/PLPalettes.h create mode 100644 PortabilityLayer/PLPasStr.h create mode 100644 PortabilityLayer/PLQDOffscreen.cpp create mode 100644 PortabilityLayer/PLQDOffscreen.h create mode 100644 PortabilityLayer/PLQuickdraw.cpp create mode 100644 PortabilityLayer/PLQuickdraw.h create mode 100644 PortabilityLayer/PLResourceManager.cpp create mode 100644 PortabilityLayer/PLResources.cpp create mode 100644 PortabilityLayer/PLResources.h create mode 100644 PortabilityLayer/PLScript.h create mode 100644 PortabilityLayer/PLSound.cpp create mode 100644 PortabilityLayer/PLSound.h create mode 100644 PortabilityLayer/PLStringCompare.cpp create mode 100644 PortabilityLayer/PLStringCompare.h create mode 100644 PortabilityLayer/PLTextUtils.h create mode 100644 PortabilityLayer/PLToolUtils.h create mode 100644 PortabilityLayer/PascalStr.h create mode 100644 PortabilityLayer/PascalStrLiteral.h create mode 100644 PortabilityLayer/PortabilityLayer.vcxproj create mode 100644 PortabilityLayer/PortabilityLayer.vcxproj.filters create mode 100644 PortabilityLayer/RCPtr.h create mode 100644 PortabilityLayer/RandomNumberGenerator.cpp create mode 100644 PortabilityLayer/RandomNumberGenerator.h create mode 100644 PortabilityLayer/RefCounted.h create mode 100644 PortabilityLayer/ResTypeID.h create mode 100644 PortabilityLayer/ResTypeIDCodec.h create mode 100644 PortabilityLayer/ResourceCompiledRef.cpp create mode 100644 PortabilityLayer/ResourceCompiledRef.h create mode 100644 PortabilityLayer/ResourceFile.cpp create mode 100644 PortabilityLayer/ResourceFile.h create mode 100644 PortabilityLayer/ResourceManager.h create mode 100644 PortabilityLayer/ScopedArray.h create mode 100644 PortabilityLayer/ScopedPtr.h create mode 100644 PortabilityLayer/SmallestInt.h create mode 100644 PortabilityLayer/UnsafePascalStr.h create mode 100644 PortabilityLayer/VirtualDirectory.h create mode 100644 PortabilityLayer/XModemCRC.cpp create mode 100644 PortabilityLayer/XModemCRC.h create mode 100644 PortabilityLayer/x64/Debug/PortabilityLayer.idb delete mode 100755 Sources/About.c delete mode 100755 Sources/AnimCursor.c delete mode 100755 Sources/AppleEvents.c delete mode 100755 Sources/Banner.c delete mode 100755 Sources/ColorUtils.c delete mode 100755 Sources/Coordinates.c delete mode 100755 Sources/DialogUtils.c delete mode 100755 Sources/DynamicMaps.c delete mode 100755 Sources/Dynamics.c delete mode 100755 Sources/Dynamics2.c delete mode 100755 Sources/Dynamics3.c delete mode 100755 Sources/Environ.c delete mode 100755 Sources/Events.c delete mode 100755 Sources/FileError.c delete mode 100755 Sources/GameOver.c delete mode 100755 Sources/Grease.c delete mode 100755 Sources/HighScores.c delete mode 100755 Sources/House.c delete mode 100755 Sources/HouseIO.c delete mode 100755 Sources/HouseInfo.c delete mode 100755 Sources/HouseLegal.c delete mode 100755 Sources/Input.c delete mode 100755 Sources/Interactions.c delete mode 100755 Sources/InterfaceInit.c delete mode 100755 Sources/Link.c delete mode 100755 Sources/Main.c delete mode 100755 Sources/MainWindow.c delete mode 100755 Sources/Map.c delete mode 100755 Sources/Marquee.c delete mode 100755 Sources/Menu.c delete mode 100755 Sources/Modes.c delete mode 100755 Sources/Music.c delete mode 100755 Sources/ObjectAdd.c delete mode 100755 Sources/ObjectDraw.c delete mode 100755 Sources/ObjectDraw2.c delete mode 100755 Sources/ObjectDrawAll.c delete mode 100755 Sources/ObjectEdit.c delete mode 100755 Sources/ObjectInfo.c delete mode 100755 Sources/ObjectRects.c delete mode 100755 Sources/Objects.c delete mode 100755 Sources/Play.c delete mode 100755 Sources/Player.c delete mode 100755 Sources/Prefs.c delete mode 100755 Sources/RectUtils.c delete mode 100755 Sources/Render.c delete mode 100755 Sources/Room.c delete mode 100755 Sources/RoomGraphics.c delete mode 100755 Sources/RoomInfo.c delete mode 100755 Sources/RubberBands.c delete mode 100755 Sources/SavedGames.c delete mode 100755 Sources/Scoreboard.c delete mode 100755 Sources/SelectHouse.c delete mode 100755 Sources/Settings.c delete mode 100755 Sources/Sound.c delete mode 100755 Sources/StringUtils.c delete mode 100755 Sources/StructuresInit.c delete mode 100755 Sources/StructuresInit2.c delete mode 100755 Sources/Tools.c delete mode 100755 Sources/Transit.c delete mode 100755 Sources/Transitions.c delete mode 100755 Sources/Triggers.c delete mode 100755 Sources/Trip.c delete mode 100755 Sources/Utilities.c delete mode 100755 Sources/WindowUtils.c create mode 100644 hqx2bin/hqx2bin.aps create mode 100644 hqx2bin/hqx2bin.cpp create mode 100644 hqx2bin/hqx2bin.vcxproj create mode 100644 hqx2bin/hqx2bin.vcxproj.filters create mode 100644 hqx2bin/x64/Debug/RCa77828 create mode 100644 hqx2bin/x64/Debug/vc141.idb create mode 100644 hqx2gp/hqx2gp.cpp create mode 100644 hqx2gp/hqx2gp.vcxproj create mode 100644 hqx2gp/hqx2gp.vcxproj.filters create mode 100644 hqx2gp/x64/Debug/vc141.idb create mode 100644 notes.txt diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f42bf03 --- /dev/null +++ b/.gitignore @@ -0,0 +1,19 @@ +*.suo +*.db +*.opendb +*.ipch +*.pch +*.user +*.mcp +*.obj +*.log +*.tlog +*.lastbuildstate +*.dll +*.exe +*.exp +*.ilk +*.lib +*.pdb +.vs/* +Packaged/* diff --git a/Common.props b/Common.props new file mode 100644 index 0000000..81ac958 --- /dev/null +++ b/Common.props @@ -0,0 +1,12 @@ + + + + + + + + $(SolutionDir)Common;%(AdditionalIncludeDirectories) + + + + \ No newline at end of file diff --git a/Common/CoreDefs.h b/Common/CoreDefs.h new file mode 100644 index 0000000..7ff9917 --- /dev/null +++ b/Common/CoreDefs.h @@ -0,0 +1,34 @@ +#pragma once + +#ifndef __PL_COREDEFS_H__ +#define __PL_COREDEFS_H__ + +#if __cplusplus >= 199711L +#define PL_IS_CPP11 1 +#else +#define PL_IS_CPP11 0 +#endif + +#if PL_IS_CPP11 +#define PL_DELETED = delete +#else +#ifndef nullptr +#define nullptr 0 +#endif + +#ifndef override +#define override +#endif + +#ifndef final +#define final +#endif + +#define PL_DELETED +#endif + + +static const size_t PL_SYSTEM_MEMORY_ALIGNMENT = 16; + + +#endif diff --git a/GlidePort.sln b/GlidePort.sln new file mode 100644 index 0000000..8dc0ad4 --- /dev/null +++ b/GlidePort.sln @@ -0,0 +1,81 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.27130.2020 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hqx2bin", "hqx2bin\hqx2bin.vcxproj", "{45B1B18C-C846-4044-9206-74F58DFC5E88}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PortabilityLayer", "PortabilityLayer\PortabilityLayer.vcxproj", "{6EC62B0F-9353-40A4-A510-3788F1368B33}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MiniRez", "MiniRez\MiniRez.vcxproj", "{2FF15659-5C72-48B8-B55B-3C658E4125B5}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GpApp", "GpApp\GpApp.vcxproj", "{6233C3F2-5781-488E-B190-4FA8836F5A77}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GpD3D", "GpD3D\GpD3D.vcxproj", "{0E383EF0-CEF7-4733-87C6-5AC9844AA1EF}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hqx2gp", "hqx2gp\hqx2gp.vcxproj", "{5FDE4822-C771-46A5-B6B2-FD12BACE86BF}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {45B1B18C-C846-4044-9206-74F58DFC5E88}.Debug|x64.ActiveCfg = Debug|x64 + {45B1B18C-C846-4044-9206-74F58DFC5E88}.Debug|x64.Build.0 = Debug|x64 + {45B1B18C-C846-4044-9206-74F58DFC5E88}.Debug|x86.ActiveCfg = Debug|Win32 + {45B1B18C-C846-4044-9206-74F58DFC5E88}.Debug|x86.Build.0 = Debug|Win32 + {45B1B18C-C846-4044-9206-74F58DFC5E88}.Release|x64.ActiveCfg = Release|x64 + {45B1B18C-C846-4044-9206-74F58DFC5E88}.Release|x64.Build.0 = Release|x64 + {45B1B18C-C846-4044-9206-74F58DFC5E88}.Release|x86.ActiveCfg = Release|Win32 + {45B1B18C-C846-4044-9206-74F58DFC5E88}.Release|x86.Build.0 = Release|Win32 + {6EC62B0F-9353-40A4-A510-3788F1368B33}.Debug|x64.ActiveCfg = Debug|x64 + {6EC62B0F-9353-40A4-A510-3788F1368B33}.Debug|x64.Build.0 = Debug|x64 + {6EC62B0F-9353-40A4-A510-3788F1368B33}.Debug|x86.ActiveCfg = Debug|Win32 + {6EC62B0F-9353-40A4-A510-3788F1368B33}.Debug|x86.Build.0 = Debug|Win32 + {6EC62B0F-9353-40A4-A510-3788F1368B33}.Release|x64.ActiveCfg = Release|x64 + {6EC62B0F-9353-40A4-A510-3788F1368B33}.Release|x64.Build.0 = Release|x64 + {6EC62B0F-9353-40A4-A510-3788F1368B33}.Release|x86.ActiveCfg = Release|Win32 + {6EC62B0F-9353-40A4-A510-3788F1368B33}.Release|x86.Build.0 = Release|Win32 + {2FF15659-5C72-48B8-B55B-3C658E4125B5}.Debug|x64.ActiveCfg = Debug|x64 + {2FF15659-5C72-48B8-B55B-3C658E4125B5}.Debug|x64.Build.0 = Debug|x64 + {2FF15659-5C72-48B8-B55B-3C658E4125B5}.Debug|x86.ActiveCfg = Debug|Win32 + {2FF15659-5C72-48B8-B55B-3C658E4125B5}.Debug|x86.Build.0 = Debug|Win32 + {2FF15659-5C72-48B8-B55B-3C658E4125B5}.Release|x64.ActiveCfg = Release|x64 + {2FF15659-5C72-48B8-B55B-3C658E4125B5}.Release|x64.Build.0 = Release|x64 + {2FF15659-5C72-48B8-B55B-3C658E4125B5}.Release|x86.ActiveCfg = Release|Win32 + {2FF15659-5C72-48B8-B55B-3C658E4125B5}.Release|x86.Build.0 = Release|Win32 + {6233C3F2-5781-488E-B190-4FA8836F5A77}.Debug|x64.ActiveCfg = Debug|x64 + {6233C3F2-5781-488E-B190-4FA8836F5A77}.Debug|x64.Build.0 = Debug|x64 + {6233C3F2-5781-488E-B190-4FA8836F5A77}.Debug|x86.ActiveCfg = Debug|Win32 + {6233C3F2-5781-488E-B190-4FA8836F5A77}.Debug|x86.Build.0 = Debug|Win32 + {6233C3F2-5781-488E-B190-4FA8836F5A77}.Release|x64.ActiveCfg = Release|x64 + {6233C3F2-5781-488E-B190-4FA8836F5A77}.Release|x64.Build.0 = Release|x64 + {6233C3F2-5781-488E-B190-4FA8836F5A77}.Release|x86.ActiveCfg = Release|Win32 + {6233C3F2-5781-488E-B190-4FA8836F5A77}.Release|x86.Build.0 = Release|Win32 + {0E383EF0-CEF7-4733-87C6-5AC9844AA1EF}.Debug|x64.ActiveCfg = Debug|x64 + {0E383EF0-CEF7-4733-87C6-5AC9844AA1EF}.Debug|x64.Build.0 = Debug|x64 + {0E383EF0-CEF7-4733-87C6-5AC9844AA1EF}.Debug|x86.ActiveCfg = Debug|Win32 + {0E383EF0-CEF7-4733-87C6-5AC9844AA1EF}.Debug|x86.Build.0 = Debug|Win32 + {0E383EF0-CEF7-4733-87C6-5AC9844AA1EF}.Release|x64.ActiveCfg = Release|x64 + {0E383EF0-CEF7-4733-87C6-5AC9844AA1EF}.Release|x64.Build.0 = Release|x64 + {0E383EF0-CEF7-4733-87C6-5AC9844AA1EF}.Release|x86.ActiveCfg = Release|Win32 + {0E383EF0-CEF7-4733-87C6-5AC9844AA1EF}.Release|x86.Build.0 = Release|Win32 + {5FDE4822-C771-46A5-B6B2-FD12BACE86BF}.Debug|x64.ActiveCfg = Debug|x64 + {5FDE4822-C771-46A5-B6B2-FD12BACE86BF}.Debug|x64.Build.0 = Debug|x64 + {5FDE4822-C771-46A5-B6B2-FD12BACE86BF}.Debug|x86.ActiveCfg = Debug|Win32 + {5FDE4822-C771-46A5-B6B2-FD12BACE86BF}.Debug|x86.Build.0 = Debug|Win32 + {5FDE4822-C771-46A5-B6B2-FD12BACE86BF}.Release|x64.ActiveCfg = Release|x64 + {5FDE4822-C771-46A5-B6B2-FD12BACE86BF}.Release|x64.Build.0 = Release|x64 + {5FDE4822-C771-46A5-B6B2-FD12BACE86BF}.Release|x86.ActiveCfg = Release|Win32 + {5FDE4822-C771-46A5-B6B2-FD12BACE86BF}.Release|x86.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {0D6869A7-07EB-400F-B2AD-48531564555A} + EndGlobalSection +EndGlobal diff --git a/GlidePort/GlidePort.vcxproj b/GlidePort/GlidePort.vcxproj new file mode 100644 index 0000000..ea335fd --- /dev/null +++ b/GlidePort/GlidePort.vcxproj @@ -0,0 +1,122 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 15.0 + {69C3CD2A-3114-4181-884A-C09A4C62FBE0} + GlidePort + 10.0.16299.0 + + + + Application + true + v141 + MultiByte + + + Application + false + v141 + true + MultiByte + + + Application + true + v141 + MultiByte + + + Application + false + v141 + true + MultiByte + + + + + + + + + + + + + + + + + + + + + + + Level3 + Disabled + true + true + + + + + Level3 + Disabled + true + true + + + + + Level3 + MaxSpeed + true + true + true + true + + + true + true + + + + + Level3 + MaxSpeed + true + true + true + true + + + true + true + + + + + + + + \ No newline at end of file diff --git a/GlidePort/GlidePort.vcxproj.filters b/GlidePort/GlidePort.vcxproj.filters new file mode 100644 index 0000000..f81daba --- /dev/null +++ b/GlidePort/GlidePort.vcxproj.filters @@ -0,0 +1,17 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + \ No newline at end of file diff --git a/Glider PRO CW5.mcp b/Glider PRO CW5.mcp deleted file mode 100755 index 85e1daa31260ecbec5c7222dadfc1943e8ed3127..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 171219 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 TDtwak6UyF-za{m1nuPy-% diff --git a/GpApp/About.cpp b/GpApp/About.cpp new file mode 100644 index 0000000..c063b14 --- /dev/null +++ b/GpApp/About.cpp @@ -0,0 +1,258 @@ +//============================================================================ +//---------------------------------------------------------------------------- +// About.c +//---------------------------------------------------------------------------- +//============================================================================ + + +#include "PLNumberFormatting.h" +#include "PLResources.h" +#include "PLSound.h" +#include "PLPasStr.h" +#include "About.h" +#include "DialogUtils.h" +#include "Environ.h" +#include "Externs.h" + + +static void HiLiteOkayButton (void); +static void UnHiLiteOkayButton (void); +static void UpdateMainPict (DialogPtr); +static Boolean AboutFilter (DialogPtr, EventRecord *theEvent, short *hit); + + +static RgnHandle okayButtRgn; +static Rect okayButtonBounds, mainPICTBounds; +static Boolean okayButtIsHiLit, clickedDownInOkay; + + +//============================================================== Functions +//-------------------------------------------------------------- DoAbout +// Brings up the About dialog box. + +void DoAbout (void) +{ + #define kAboutDialogID 150 // res ID of About dialog + #define kTextItemVers 2 // item number of version text + #define kPictItemMain 4 // item number of main PICT + + DialogPtr aboutDialog; + Str255 longVersion; + StringPtr messagePtr; + VersRecHndl version; + Handle itemHandle; + short itemType, hit, wasResFile; + ModalFilterUPP aboutFilterUPP; + + aboutFilterUPP = NewModalFilterUPP(AboutFilter); + + wasResFile = CurResFile(); + UseResFile(thisMac.thisResFile); + + aboutDialog = GetNewDialog(kAboutDialogID, nil, (WindowRef)-1L); +// if (aboutDialog == nil) +// RedAlert(kErrDialogDidntLoad); + + version = (VersRecHndl)GetResource('vers', 1); + if (version != nil) + { + messagePtr = (**version).shortVersion + 1 + (**version).shortVersion[0]; + + BlockMove((Ptr)messagePtr, &longVersion, ((UInt8)*messagePtr) + 1); + SetDialogString(aboutDialog, kTextItemVers, longVersion); + } + + GetDialogItem(aboutDialog, kOkayButton, &itemType, &itemHandle, &okayButtonBounds); + okayButtRgn = NewRgn(); // Create diagonal button region + OpenRgn(); + MoveTo(okayButtonBounds.left + 1, okayButtonBounds.top + 45); + Line(44, -44); // These lines define the region + Line(16, 16); + Line(-44, 44); + Line(-16, -16); + CloseRgn(okayButtRgn); + okayButtIsHiLit = false; // Initially, button is not hilit + clickedDownInOkay = false; // Initially, didn't click in okay button + GetDialogItem(aboutDialog, kPictItemMain, &itemType, &itemHandle, &mainPICTBounds); + + do // Loop until user wants to exit + { + ModalDialog(aboutFilterUPP, &hit); + } + while ((hit != kOkayButton) && (okayButtRgn != nil)); + + if (okayButtRgn != nil) + DisposeRgn(okayButtRgn); // Clean up! + DisposeDialog(aboutDialog); + DisposeModalFilterUPP(aboutFilterUPP); + + UseResFile(wasResFile); +} + +//============================================================== Static Functions +//-------------------------------------------------------------- HiLiteOkayButton +// Draws my pseudo-button to appear as though it is clicked on. + +static void HiLiteOkayButton (void) +{ + #define kOkayButtPICTHiLit 151 // res ID of unhilit button PICT + PicHandle thePict; + + if (!okayButtIsHiLit) + { + thePict = GetPicture(kOkayButtPICTHiLit); + if (thePict != nil) + { + DrawPicture(thePict, &okayButtonBounds); + ReleaseResource((Handle)thePict); + + okayButtIsHiLit = true; + } + } +} + +//-------------------------------------------------------------- UnHiLiteOkayButton + +// Draws my pseudo-button normal (not clicked on). + +static void UnHiLiteOkayButton (void) +{ + #define kOkayButtPICTNotHiLit 150 // res ID of hilit button PICT + PicHandle thePict; + + if (okayButtIsHiLit) + { + thePict = GetPicture(kOkayButtPICTNotHiLit); + if (thePict != nil) + { + DrawPicture(thePict, &okayButtonBounds); + ReleaseResource((Handle)thePict); + + okayButtIsHiLit = false; + } + } +} + +//-------------------------------------------------------------- UpdateMainPict +// Redraws the main graphic in the dialog (in response to an update event). + +static void UpdateMainPict (DialogPtr theDial) +{ + Str255 theStr, theStr2; + long totalSize, contigSize; + + DrawDialog(theDial); + + PasStringCopy(PSTR("Memory: "), theStr); // display free memory + PurgeSpace(&totalSize, &contigSize); + totalSize /= 1024; + NumToString(totalSize, theStr2); + PasStringConcat(theStr, theStr2); + PasStringConcat(theStr, PSTR("K")); + DrawDialogUserText2(theDial, 7, theStr); + + PasStringCopy(PSTR("Screen: "), theStr); // display screen size/depth + NumToString((long)(thisMac.screen.right - thisMac.screen.left), theStr2); + PasStringConcat(theStr, theStr2); + PasStringConcat(theStr, PSTR("x")); + NumToString((long)(thisMac.screen.bottom - thisMac.screen.top), theStr2); + PasStringConcat(theStr, theStr2); + PasStringConcat(theStr, PSTR("x")); + NumToString((long)thisMac.isDepth, theStr2); + PasStringConcat(theStr, theStr2); + DrawDialogUserText2(theDial, 8, theStr); +} + +//-------------------------------------------------------------- AboutFilter +// Dialog filter for the About dialog. + +static Boolean AboutFilter (DialogPtr theDial, EventRecord *theEvent, short *hit) +{ + Point mousePt; + UInt32 dummyLong; + Boolean handledIt; + + if (Button() && clickedDownInOkay) + { + GetMouse(&mousePt); + if(PtInRgn(mousePt, okayButtRgn)) + HiLiteOkayButton(); + else + UnHiLiteOkayButton(); + } + + switch (theEvent->what) + { + case keyDown: + switch ((theEvent->message) & charCodeMask) + { + case kReturnKeyASCII: + case kEnterKeyASCII: + HiLiteOkayButton(); + Delay(8, &dummyLong); + UnHiLiteOkayButton(); + *hit = kOkayButton; + handledIt = true; + break; + + default: + handledIt = false; + } + break; + + case mouseDown: + mousePt = theEvent->where; + GlobalToLocal(&mousePt); + if(PtInRgn(mousePt, okayButtRgn)) + { + clickedDownInOkay = true; + handledIt = false; + } + else + handledIt = false; + break; + + case mouseUp: + mousePt = theEvent->where; + GlobalToLocal(&mousePt); + if(PtInRgn(mousePt, okayButtRgn) && clickedDownInOkay) + { + UnHiLiteOkayButton(); + *hit = kOkayButton; + handledIt = true; + } + else + { + clickedDownInOkay = false; + handledIt = false; + } + break; + + case updateEvt: + if ((WindowPtr)theEvent->message == mainWindow) + { + SetPort((GrafPtr)mainWindow); + BeginUpdate((WindowPtr)theEvent->message); + UpdateMainWindow(); + EndUpdate((WindowPtr)theEvent->message); + SetPortDialogPort(theDial); + handledIt = true; + } + else if ((WindowPtr)theEvent->message == (WindowPtr)theDial) + { + SetPortDialogPort(theDial); + BeginUpdate((WindowPtr)theEvent->message); + UpdateMainPict(theDial); + EndUpdate((WindowPtr)theEvent->message); + handledIt = false; + } + break; + + default: + handledIt = false; + break; + } + + return (handledIt); +} + diff --git a/GpApp/About.h b/GpApp/About.h new file mode 100644 index 0000000..a90709e --- /dev/null +++ b/GpApp/About.h @@ -0,0 +1,10 @@ +//============================================================================ +//---------------------------------------------------------------------------- +// About.h +//---------------------------------------------------------------------------- +//============================================================================ + + +void DoAbout (void); + + diff --git a/GpApp/AnimCursor.cpp b/GpApp/AnimCursor.cpp new file mode 100644 index 0000000..a8cd342 --- /dev/null +++ b/GpApp/AnimCursor.cpp @@ -0,0 +1,286 @@ + +//============================================================================ +//---------------------------------------------------------------------------- +// AnimCursor.c +//---------------------------------------------------------------------------- +//============================================================================ + + +#include "PLResources.h" +#include "PLBigEndian.h" +#include "Externs.h" +#include "Environ.h" + + +#define rAcurID 128 +#define rHandCursorID 1000 + + +typedef struct +{ + BEInt16_t n; + BEInt16_t index; + struct + { + BEInt16_t resID; + BEInt16_t reserved; + } frame[1]; +} acurRec, *acurPtr, **acurHandle; + +typedef struct +{ + struct + { + Handle cursorHdl; + } frame[1]; +} compiledAcurRec, *compiledAcurPtr, **compiledAcurHandle; + + +Boolean GetMonoCursors (acurHandle, compiledAcurHandle); +Boolean GetColorCursors (acurHandle, compiledAcurHandle); +void InitAnimatedCursor (acurHandle); + + +acurHandle animCursorH = nil; +compiledAcurHandle compiledAnimCursorH = nil; +Boolean useColorCursor = false; + + +//============================================================== Functions +//-------------------------------------------------------------- GetMonoCursors + +// Loads b&w cursors (for animated beach ball). + +Boolean GetMonoCursors (acurHandle ballCursH, compiledAcurHandle compiledBallCursH) +{ + short i, j; + CursHandle cursHdl; + + if (ballCursH) // Were we passed a legit acur handle? + { + j = (*ballCursH)->n; // Get number of 'frames' in the acur + for (i = 0; i < j; i++) // Start walking the frames + { + cursHdl = GetCursor((*ballCursH)->frame[i].resID); + if (cursHdl == nil) // Did the cursor load? It didn't?... + { // Well then, toss what we got. + for (j = 0; j < i; j++) + DisposeHandle((*compiledBallCursH)->frame[j].cursorHdl); + return(false); // And report this to mother. + } // However!... + else // If cursor loaded ok... + { // Detach it from the resource map... + DetachResource((Handle)cursHdl); // And assign to our struct + (*compiledBallCursH)->frame[i].cursorHdl = (Handle)cursHdl; + } + } + } + return(true); +} + +//-------------------------------------------------------------- GetColorCursors + +// Loads color cursors (for animated beach ball). + +Boolean GetColorCursors (acurHandle ballCursH, compiledAcurHandle compiledBallCursH) +{ + short i, j; + CCrsrHandle cursHdl; + Boolean result = true; + + if (ballCursH) + { + j = (*ballCursH)->n; // Get the number of cursors + HideCursor(); // Hide the cursor + for (i = 0; i < j; i++) // Walk through the acur resource + { + cursHdl = GetCCursor((*ballCursH)->frame[i].resID); // Get the cursor + if (cursHdl == nil) // Make sure a real cursor was returned + { // If not, trash all cursors loaded + for (j = 0; j < i; j++) + DisposeCCursor((CCrsrHandle)(*compiledBallCursH)->frame[j].cursorHdl); + result = false; // Tell calling proc we failed + break; // And break out of the loop + } + else // But, if the cursor loaded ok + { // add it to our list or cursor handles + (*compiledBallCursH)->frame[i].cursorHdl = (Handle)cursHdl; + SetCCursor((CCrsrHandle)(*compiledBallCursH)->frame[i].cursorHdl); + } + } + InitCursor(); // Show the cursor again (as arrow) + } + return(result); // Return to calling proc w/ results +} + +//-------------------------------------------------------------- InitAnimatedCursor + +// Loads and sets up animated beach ball cursor structures. + +void InitAnimatedCursor (acurHandle ballCursH) +{ + Boolean useColor; + compiledAcurHandle compiledBallCursorH; + + useColor = thisMac.hasColor; + if (ballCursH == nil) + ballCursH = reinterpret_cast(GetResource('acur', 128)); + if (ballCursH && ballCursH != animCursorH) + { + compiledBallCursorH = (compiledAcurHandle)NewHandle(sizeof(compiledAcurRec) * (*ballCursH)->n); + if (!compiledBallCursorH) + RedAlert(kErrFailedResourceLoad); + + HNoPurge((Handle)ballCursH); + MoveHHi((Handle)ballCursH); + HLock((Handle)ballCursH); + if (useColor) + useColor = GetColorCursors(ballCursH, compiledBallCursorH); + if (!useColor && !GetMonoCursors(ballCursH, compiledBallCursorH)) + RedAlert(kErrFailedResourceLoad); + DisposCursors(); + + animCursorH = ballCursH; + compiledAnimCursorH = compiledBallCursorH; + useColorCursor = useColor; + (*ballCursH)->index = 0; + } + else + RedAlert(kErrFailedResourceLoad); +} + +//-------------------------------------------------------------- LoadCursors + +// Just calls the above function. Other code could be added here thoughÉ +// to add additional cursors. + +void LoadCursors (void) +{ + InitAnimatedCursor((acurHandle)GetResource('acur', rAcurID)); +} + +//-------------------------------------------------------------- DisposCursors + +// Disposes of all memory allocated by anaimated beach ball cursors. + +void DisposCursors (void) +{ + register short i, j; + + if (compiledAnimCursorH != nil) + { + j = (*animCursorH)->n; + if (useColorCursor) + { + for (i = 0; i < j; i++) + { + if ((*compiledAnimCursorH)->frame[i].cursorHdl != nil) + DisposeCCursor((CCrsrHandle)(*compiledAnimCursorH)->frame[i].cursorHdl); + } + } + else + { + for (i = 0; i < j; i++) + { + if ((*compiledAnimCursorH)->frame[i].cursorHdl != nil) + DisposeHandle((Handle)(*compiledAnimCursorH)->frame[i].cursorHdl); + } + } + DisposeHandle((Handle)compiledAnimCursorH); + compiledAnimCursorH = nil; + } + + if (animCursorH != nil) + { + ReleaseResource((Handle)animCursorH); + animCursorH = nil; + } +} + +//-------------------------------------------------------------- IncrementCursor + +// Advances the beach ball cursor one frame. + +void IncrementCursor (void) +{ + if (animCursorH == 0) + InitAnimatedCursor(nil); + if (animCursorH) + { + (*animCursorH)->index++; + (*animCursorH)->index %= (*animCursorH)->n; + if (useColorCursor) + { + SetCCursor((CCrsrHandle)(*compiledAnimCursorH)-> + frame[(*animCursorH)->index].cursorHdl); + } + else + { + SetCursor((CursPtr)*(*compiledAnimCursorH)-> + frame[(*animCursorH)->index].cursorHdl); + } + } + else + SetCursor((CursPtr)*GetCursor(watchCursor)); +} + +//-------------------------------------------------------------- DecrementCursor + +// Reverses the beach ball cursor one frame. + +void DecrementCursor (void) +{ + if (animCursorH == 0) + InitAnimatedCursor(nil); + if (animCursorH) + { + (*animCursorH)->index--; + if (((*animCursorH)->index) < 0) + (*animCursorH)->index = ((*animCursorH)->n) - 1; + if (useColorCursor) + { + SetCCursor((CCrsrHandle)(*compiledAnimCursorH)-> + frame[(*animCursorH)->index].cursorHdl); + } + else + { + SetCursor((CursPtr)*(*compiledAnimCursorH)-> + frame[(*animCursorH)->index].cursorHdl); + } + } + else + SetCursor((CursPtr)*GetCursor(watchCursor)); +} + +//-------------------------------------------------------------- SpinCursor + +// Advances the beach ball cursor the number of frames specified. + +void SpinCursor (short incrementIndex) +{ + UInt32 dummyLong; + short i; + + for (i = 0; i < incrementIndex; i++) + { + IncrementCursor(); + Delay(1, &dummyLong); + } +} + +//-------------------------------------------------------------- BackSpinCursor + +// Reverses the beach ball cursor the number of frames specified. + +void BackSpinCursor (short decrementIndex) +{ + UInt32 dummyLong; + short i; + + for (i = 0; i < decrementIndex; i++) + { + DecrementCursor(); + Delay(1, &dummyLong); + } +} + diff --git a/GpApp/AppleEvents.cpp b/GpApp/AppleEvents.cpp new file mode 100644 index 0000000..d4fd275 --- /dev/null +++ b/GpApp/AppleEvents.cpp @@ -0,0 +1,202 @@ + +//============================================================================ +//---------------------------------------------------------------------------- +// AppleEvents.c +//---------------------------------------------------------------------------- +//============================================================================ + + +#include "PLAppleEvents.h" +#include "Externs.h" +#include "House.h" + + +#define kNoPrintingAlert 1031 + + +OSErr DoOpenAppAE (const AppleEvent *, AppleEvent *, UInt32); +OSErr DoOpenDocAE (const AppleEvent *, AppleEvent *, UInt32); +OSErr DoPrintDocAE (const AppleEvent *, AppleEvent *, UInt32); +OSErr DoQuitAE (const AppleEvent *, AppleEvent *, UInt32); +OSErr MyGotRequiredParams (const AppleEvent *); + +AEEventHandlerUPP openAppAEUPP, openDocAEUPP, printDocAEUPP, quitAEUPP; + + +extern FSSpecPtr theHousesSpecs; +extern long incrementModeTime; +extern short thisHouseIndex, splashOriginH, splashOriginV; +extern Boolean quitting; + + +//============================================================== Functions +//-------------------------------------------------------------- DoOpenAppAE +// Handles an "Open Application" Apple Event. + +OSErr DoOpenAppAE (const AppleEvent *theAE, AppleEvent *reply, UInt32 ref) +{ + OSErr theErr; + + theErr = MyGotRequiredParams(theAE); + return (theErr); +} + +//-------------------------------------------------------------- DoOpenDocAE +// Handles an "Open Document" Apple Event. + +OSErr DoOpenDocAE (const AppleEvent *theAE, AppleEvent *reply, UInt32 ref) +{ + FSSpec oneFSS; + FInfo finderInfo; + AEDescList docList; + long itemsInList; + Size actualSize; + AEKeyword keywd; + DescType returnedType; + OSErr theErr, whoCares; + short i; + + theErr = AEGetParamDesc(theAE, keyDirectObject, typeAEList, &docList); + if (theErr != noErr) + { + YellowAlert(kYellowAppleEventErr, theErr); + return (theErr); + } + + theErr = MyGotRequiredParams(theAE); + if (theErr != noErr) + { + whoCares = AEDisposeDesc(&docList); + return (theErr); + } + + theErr = AECountItems(&docList, &itemsInList); + if (theErr != noErr) + { + whoCares = AEDisposeDesc(&docList); + return (theErr); + } + +#ifndef COMPILEDEMO + for (i = 1; i <= itemsInList; i++) + { + theErr = AEGetNthPtr(&docList, i, typeFSS, &keywd, &returnedType, + &oneFSS, sizeof(oneFSS), &actualSize); + if (theErr == noErr) + { + theErr = FSpGetFInfo(&oneFSS, &finderInfo); + if ((theErr == noErr) && (finderInfo.fdType == 'gliH')) + AddExtraHouse(&oneFSS); + } + } + if (itemsInList > 0) + { + theErr = AEGetNthPtr(&docList, 1, typeFSS, &keywd, &returnedType, + &oneFSS, sizeof(oneFSS), &actualSize); + if (theErr == noErr) + { + theErr = FSpGetFInfo(&oneFSS, &finderInfo); + if ((theErr == noErr) && (finderInfo.fdType == 'gliH')) + { + whoCares = CloseHouse(); + PasStringCopy(oneFSS.name, thisHouseName); + BuildHouseList(); + if (OpenHouse()) + whoCares = ReadHouse(); + PasStringCopy(theHousesSpecs[thisHouseIndex].name, thisHouseName); + OpenCloseEditWindows(); + incrementModeTime = TickCount() + kIdleSplashTicks; + if ((theMode == kSplashMode) || (theMode == kPlayMode)) + { + Rect updateRect; + + SetRect(&updateRect, splashOriginH + 474, splashOriginV + 304, splashOriginH + 474 + 166, splashOriginV + 304 + 12); + InvalWindowRect(mainWindow, &updateRect); + } + } + } + InitCursor(); + } +#endif + whoCares = AEDisposeDesc(&docList); + + return theErr; +} + +//-------------------------------------------------------------- DoPrintDocAE +// Handles a "Print Document" Apple Event. + +OSErr DoPrintDocAE (const AppleEvent *theAE, AppleEvent *reply, UInt32 ref) +{ + short hitWhat; + +// CenterAlert(kNoPrintingAlert); + hitWhat = Alert(kNoPrintingAlert, nil); + + return errAEEventNotHandled; +} + +//-------------------------------------------------------------- DoQuitAE +// Handles a "Quit Application" Apple Event. + +OSErr DoQuitAE (const AppleEvent *theAE, AppleEvent *reply, UInt32 ref) +{ + OSErr isHuman; + + isHuman = MyGotRequiredParams(theAE); + if (isHuman == noErr) + quitting = true; + + return isHuman; +} + +//-------------------------------------------------------------- MyGotRequiredParams +// Have no clue! :) + +OSErr MyGotRequiredParams (const AppleEvent *theAE) +{ + DescType returnedType; + Size actualSize; + + return (AEGetAttributePtr(theAE, keyMissedKeywordAttr, typeWildCard, + &returnedType, 0L, 0, &actualSize) == errAEDescNotFound) ? noErr : + errAEParamMissed; +} + +//-------------------------------------------------------------- SetUpAppleEvents +// Initializes all handlers, etc. for dealing with Apple Events. + +void SetUpAppleEvents (void) +{ + OSErr theErr; + + openAppAEUPP = NewAEEventHandlerProc(DoOpenAppAE); + openDocAEUPP = NewAEEventHandlerProc(DoOpenDocAE); + printDocAEUPP = NewAEEventHandlerProc(DoPrintDocAE); + quitAEUPP = NewAEEventHandlerProc(DoQuitAE); + + theErr = AEInstallEventHandler(kCoreEventClass, // install oapp + kAEOpenApplication, openAppAEUPP, 0, false); + if (theErr != noErr) + YellowAlert(kYellowAppleEventErr, theErr); + + theErr = AEInstallEventHandler(kCoreEventClass, // install odoc + kAEOpenDocuments, openDocAEUPP, 0, false); + if (theErr != noErr) + YellowAlert(kYellowAppleEventErr, theErr); + + theErr = AEInstallEventHandler(kCoreEventClass, // install pdoc + kAEPrintDocuments, printDocAEUPP, 0, false); + if (theErr != noErr) + YellowAlert(kYellowAppleEventErr, theErr); + + theErr = AEInstallEventHandler(kCoreEventClass, // install quit + kAEQuitApplication, quitAEUPP, 0, false); + if (theErr != noErr) + YellowAlert(kYellowAppleEventErr, theErr); + + theErr = AESetInteractionAllowed(kAEInteractWithAll); + if (theErr != noErr) + YellowAlert(kYellowAppleEventErr, theErr); +} + diff --git a/GpApp/Banner.cpp b/GpApp/Banner.cpp new file mode 100644 index 0000000..9a393d8 --- /dev/null +++ b/GpApp/Banner.cpp @@ -0,0 +1,238 @@ +//============================================================================ +//---------------------------------------------------------------------------- +// Banner.c +//---------------------------------------------------------------------------- +//============================================================================ + + +#include "PLNumberFormatting.h" +#include "PLPasStr.h" +#include "Externs.h" +#include "Environ.h" +#include "MainWindow.h" +#include "RectUtils.h" +#include "Room.h" +#include "Utilities.h" + + +#define kBannerPageTopPICT 1993 +#define kBannerPageBottomPICT 1992 +#define kBannerPageBottomMask 1991 +#define kStarsRemainingPICT 1017 +#define kStarRemainingPICT 1018 + + +void DrawBanner (Point *); +void DrawBannerMessage (Point); + + +short numStarsRemaining; +Boolean bannerStarCountOn; + +extern Rect justRoomsRect; +extern Boolean quickerTransitions, demoGoing, isUseSecondScreen; + + +//============================================================== Functions +//-------------------------------------------------------------- DrawBanner +// Displays opening banner (when a new game is begun). The banner looksÉ +// like a sheet of notebook paper. The text printed on it is specifiedÉ +// by the author of the house. + +void DrawBanner (Point *topLeft) +{ + CGrafPtr wasCPort; + GDHandle wasWorld; + Rect wholePage, partPage, mapBounds; + GWorldPtr tempMap; + GWorldPtr tempMask; + OSErr theErr; + + GetGWorld(&wasCPort, &wasWorld); + + QSetRect(&wholePage, 0, 0, 330, 220); + mapBounds = thisMac.screen; + ZeroRectCorner(&mapBounds); + CenterRectInRect(&wholePage, &mapBounds); + topLeft->h = wholePage.left; + topLeft->v = wholePage.top; + partPage = wholePage; + partPage.bottom = partPage.top + 190; + SetGWorld(workSrcMap, nil); + LoadScaledGraphic(kBannerPageTopPICT, &partPage); + + partPage = wholePage; + partPage.top = partPage.bottom - 30; + mapBounds = partPage; + ZeroRectCorner(&mapBounds); + theErr = CreateOffScreenGWorld(&tempMap, &mapBounds, kPreferredDepth); + SetGWorld(tempMap, nil); + LoadGraphic(kBannerPageBottomPICT); + + theErr = CreateOffScreenGWorld(&tempMask, &mapBounds, 1); + SetGWorld(tempMask, nil); + LoadGraphic(kBannerPageBottomMask); + + CopyMask((BitMap *)*GetGWorldPixMap(tempMap), + (BitMap *)*GetGWorldPixMap(tempMask), + (BitMap *)*GetGWorldPixMap(workSrcMap), + &mapBounds, &mapBounds, &partPage); + SetPort((GrafPtr)workSrcMap); + + SetGWorld(wasCPort, wasWorld); + DisposeGWorld(tempMap); + DisposeGWorld(tempMask); +} + +//-------------------------------------------------------------- CountStarsInHouse +// Goes through the current house and counts the total number of stars within. + +short CountStarsInHouse (void) +{ + short i, h, numRooms, numStars; + char wasState; + + numStars = 0; + + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + numRooms = (*thisHouse)->nRooms; + for (i = 0; i < numRooms; i++) + { + if ((*thisHouse)->rooms[i].suite != kRoomIsEmpty) + for (h = 0; h < kMaxRoomObs; h++) + { + if ((*thisHouse)->rooms[i].objects[h].what == kStar) + numStars++; + } + } + HSetState((Handle)thisHouse, wasState); + + return (numStars); +} + +//-------------------------------------------------------------- DrawBannerMessage + +// This function prints the author's message acorss the notebook paper banner. + +void DrawBannerMessage (Point topLeft) +{ + Str255 bannerStr, subStr; + short count; + char wasState; + + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + PasStringCopy((*thisHouse)->banner, bannerStr); + HSetState((Handle)thisHouse, wasState); + + TextFont(applFont); + TextFace(bold); + TextSize(12); + ForeColor(blackColor); + count = 0; + do + { + GetLineOfText(bannerStr, count, subStr); + MoveTo(topLeft.h + 16, topLeft.v + 32 + (count * 20)); + DrawString(subStr); + count++; + } + while (subStr[0] > 0); + + if (bannerStarCountOn) + { + if (numStarsRemaining != 1) + GetLocalizedString(1, bannerStr); + else + GetLocalizedString(2, bannerStr); + + NumToString((long)numStarsRemaining, subStr); + PasStringConcat(bannerStr, subStr); + + if (numStarsRemaining != 1) + GetLocalizedString(3, subStr); + else + GetLocalizedString(4, subStr); + PasStringConcat(bannerStr, subStr); + + ForeColor(redColor); + MoveTo(topLeft.h + 16, topLeft.v + 164); + DrawString(bannerStr); + MoveTo(topLeft.h + 16, topLeft.v + 180); + GetLocalizedString(5, subStr); + DrawString(subStr); + } + ForeColor(blackColor); +} + +//-------------------------------------------------------------- BringUpBanner +// Handles bringing up displaying and disposing of the banner. + +void BringUpBanner (void) +{ + Rect wholePage; + Point topLeft; + + DrawBanner(&topLeft); + DrawBannerMessage(topLeft); +// if (quickerTransitions) +// DissBitsChunky(&justRoomsRect); // was workSrcRect +// else +// DissBits(&justRoomsRect); + QSetRect(&wholePage, 0, 0, 330, 220); + QOffsetRect(&wholePage, topLeft.h, topLeft.v); + + CopyBits((BitMap *)*GetGWorldPixMap(backSrcMap), + (BitMap *)*GetGWorldPixMap(workSrcMap), + &wholePage, &wholePage, srcCopy, nil); + + if (demoGoing) + WaitForInputEvent(4); + else + WaitForInputEvent(15); + +// if (quickerTransitions) +// DissBitsChunky(&justRoomsRect); +// else +// DissBits(&justRoomsRect); +} + +//-------------------------------------------------------------- DisplayStarsRemaining +// This brings up a small message indicating the number of stars remainingÉ +// in a house. It comes up when the player gets a star (the game is pausedÉ +// and the user informed as to how many remain). + +void DisplayStarsRemaining (void) +{ + Rect src, bounds; + Str255 theStr; + + SetPortWindowPort(mainWindow); + QSetRect(&bounds, 0, 0, 256, 64); + CenterRectInRect(&bounds, &thisMac.screen); + QOffsetRect(&bounds, -thisMac.screen.left, -thisMac.screen.top); + src = bounds; + InsetRect(&src, 64, 32); + + TextFont(applFont); + TextFace(bold); + TextSize(12); + NumToString((long)numStarsRemaining, theStr); + + QOffsetRect(&bounds, 0, -20); + if (numStarsRemaining < 2) + LoadScaledGraphic(kStarRemainingPICT, &bounds); + else + { + LoadScaledGraphic(kStarsRemainingPICT, &bounds); + MoveTo(bounds.left + 102 - (StringWidth(theStr) / 2), bounds.top + 23); + ColorText(theStr, 4L); + } + + DelayTicks(60); + if (WaitForInputEvent(30)) + RestoreEntireGameScreen(); + CopyRectWorkToMain(&bounds); +} + diff --git a/GpApp/ColorUtils.cpp b/GpApp/ColorUtils.cpp new file mode 100644 index 0000000..f7f45b6 --- /dev/null +++ b/GpApp/ColorUtils.cpp @@ -0,0 +1,225 @@ + +//============================================================================ +//---------------------------------------------------------------------------- +// ColorUtils.c +//---------------------------------------------------------------------------- +//============================================================================ + + +#include "Externs.h" +#include "PLPalettes.h" +#include "PLPasStr.h" + + +//============================================================== Functions +//-------------------------------------------------------------- ColorText + +// Given a string and a color index (index into the current palette),É +// this function draws text in that color. It assumes the current port,É +// the current font, the current pen location, etc. + +void ColorText (StringPtr theStr, long color) +{ + RGBColor theRGBColor, wasColor; + + GetForeColor(&wasColor); + Index2Color(color, &theRGBColor); + RGBForeColor(&theRGBColor); + DrawString(theStr); + RGBForeColor(&wasColor); +} + +//-------------------------------------------------------------- ColorRect + +// Given a rectangle and color index, this function draws a solidÉ +// rectangle in that color. Current port, pen mode, etc. assumed. + +void ColorRect (Rect *theRect, long color) +{ + RGBColor theRGBColor, wasColor; + + GetForeColor(&wasColor); + Index2Color(color, &theRGBColor); + RGBForeColor(&theRGBColor); + PaintRect(theRect); + RGBForeColor(&wasColor); +} + +//-------------------------------------------------------------- ColorOval + +// Given a rectangle and color index, this function draws a solidÉ +// oval in that color. Current port, pen mode, etc. assumed. + +void ColorOval (Rect *theRect, long color) +{ + RGBColor theRGBColor, wasColor; + + GetForeColor(&wasColor); + Index2Color(color, &theRGBColor); + RGBForeColor(&theRGBColor); + PaintOval(theRect); + RGBForeColor(&wasColor); +} + +//-------------------------------------------------------------- ColorRegion + +// Given a region and color index, this function draws a solidÉ +// region in that color. Current port, pen mode, etc. assumed. + +void ColorRegion (RgnHandle theRgn, long color) +{ + RGBColor theRGBColor, wasColor; + + GetForeColor(&wasColor); + Index2Color(color, &theRGBColor); + RGBForeColor(&theRGBColor); + PaintRgn(theRgn); + RGBForeColor(&wasColor); +} + +//-------------------------------------------------------------- ColorLine + +// Given a the end points for a line and color index, this functionÉ +// draws a line in that color. Current port, pen mode, etc. assumed. + +void ColorLine (short h0, short v0, short h1, short v1, long color) +{ + RGBColor theRGBColor, wasColor; + + GetForeColor(&wasColor); + Index2Color(color, &theRGBColor); + RGBForeColor(&theRGBColor); + MoveTo(h0, v0); + LineTo(h1, v1); + RGBForeColor(&wasColor); +} + +//-------------------------------------------------------------- HiliteRect + +// Given a rect and two hilite colors, this function frames the top andÉ +// left edges of the rect with color 1 and frames the bottom and rightÉ +// sides with color 2. A rect can be made to appear "hi-lit" or "3D"É +// in this way. + +void HiliteRect (Rect *theRect, short color1, short color2) +{ + ColorLine(theRect->left, theRect->top, theRect->right - 2, + theRect->top, color1); + ColorLine(theRect->left, theRect->top, theRect->left, + theRect->bottom - 2, color1); + ColorLine(theRect->right - 1, theRect->top, theRect->right - 1, + theRect->bottom - 2, color2); + ColorLine(theRect->left + 1, theRect->bottom - 1, theRect->right - 1, + theRect->bottom - 1, color2); +} + +//-------------------------------------------------------------- ColorFrameRect + +// Given a rectangle and color index, this function frames aÉ +// rectangle in that color. Current port, pen mode, etc. assumed. + +void ColorFrameRect (Rect *theRect, long color) +{ + RGBColor theRGBColor, wasColor; + + GetForeColor(&wasColor); + Index2Color(color, &theRGBColor); + RGBForeColor(&theRGBColor); + FrameRect(theRect); + RGBForeColor(&wasColor); +} + +//-------------------------------------------------------------- ColorFrameWHRect + +// Given a the top-left corner of a rectangle, its width and height,É +// and a color index, this function frames a rectangle in that color. +// Current port, pen mode, etc. assumed. + +void ColorFrameWHRect (short left, short top, short wide, short high, long color) +{ + Rect theRect; + + theRect.left = left; + theRect.top = top; + theRect.right = left + wide; + theRect.bottom = top + high; + ColorFrameRect(&theRect, color); +} + +//-------------------------------------------------------------- ColorFrameOval + +// Given a rectangle and color index, this function frames anÉ +// oval in that color. Current port, pen mode, etc. assumed. + +void ColorFrameOval (Rect *theRect, long color) +{ + RGBColor theRGBColor, wasColor; + + GetForeColor(&wasColor); + Index2Color(color, &theRGBColor); + RGBForeColor(&theRGBColor); + FrameOval(theRect); + RGBForeColor(&wasColor); +} + +//-------------------------------------------------------------- LtGrayForeColor + +// This function finds the closest match to a "light gray" in theÉ +// current palette and sets the pen color to that. + +void LtGrayForeColor (void) +{ + RGBColor color; + + color.red = (unsigned short) 0xBFFF; + color.green = (unsigned short) 0xBFFF; + color.blue = (unsigned short) 0xBFFF; + + RGBForeColor(&color); +} + +//-------------------------------------------------------------- GrayForeColor + +// This function finds the closest match to a "medium gray" in theÉ +// current palette and sets the pen color to that. + +void GrayForeColor (void) +{ + RGBColor color; + + color.red = (unsigned short) 0x7FFF; + color.green = (unsigned short) 0x7FFF; + color.blue = (unsigned short) 0x7FFF; + + RGBForeColor(&color); +} + +//-------------------------------------------------------------- DkGrayForeColor + +// This function finds the closest match to a "dark gray" in theÉ +// current palette and sets the pen color to that. + +void DkGrayForeColor (void) +{ + RGBColor color; + + color.red = (unsigned short) 0x3FFF; + color.green = (unsigned short) 0x3FFF; + color.blue = (unsigned short) 0x3FFF; + + RGBForeColor(&color); +} + +//-------------------------------------------------------------- RestoreColorsSlam + +// This function forces the Macintosh to rebuild the palette. It isÉ +// called to restore a sense or normality after some serious mungingÉ +// with the palette. + +void RestoreColorsSlam (void) +{ + RestoreDeviceClut(nil); + PaintBehind(nil, GetGrayRgn()); + DrawMenuBar(); +} + diff --git a/GpApp/Coordinates.cpp b/GpApp/Coordinates.cpp new file mode 100644 index 0000000..362586c --- /dev/null +++ b/GpApp/Coordinates.cpp @@ -0,0 +1,197 @@ +//============================================================================ +//---------------------------------------------------------------------------- +// Coordinates.c +//---------------------------------------------------------------------------- +//============================================================================ + + +#include "PLNumberFormatting.h" +#include "PLPasStr.h" +#include "Externs.h" +#include "Environ.h" +#include "Marquee.h" +#include "ObjectEdit.h" +#include "RectUtils.h" + + +Rect coordWindowRect; +WindowPtr coordWindow; +short isCoordH, isCoordV; +short coordH, coordV, coordD; +Boolean isCoordOpen; + + +//============================================================== Functions +//-------------------------------------------------------------- SetCoordinateHVD + +// Given a horizontal, vertical and distance value, this functionÉ +// displays these values in the Coordinates window. + +void SetCoordinateHVD (short h, short v, short d) +{ +#ifndef COMPILEDEMO + if (h != -2) + coordH = h; + if (v != -2) + coordV = v; + if (d != -2) + coordD = d; + UpdateCoordWindow(); +#endif +} + +//-------------------------------------------------------------- DeltaCoordinateD + +// When the user is dragging a handle (such as the height of a blower)É +// this function can be called and passed the amount by which the userÉ +// has changed the height (delta). This function then displays it inÉ +// the Coordinate window. + +void DeltaCoordinateD (short d) +{ +#ifndef COMPILEDEMO + coordD = d; + UpdateCoordWindow(); +#endif +} + +//-------------------------------------------------------------- UpdateCoordWindow + +// Completely redraws and updates the Coordinate window. + +void UpdateCoordWindow (void) +{ +#ifndef COMPILEDEMO + Str255 tempStr, numStr; + GrafPtr wasPort; + + if (coordWindow == nil) + return; + + GetPort(&wasPort); + SetPort((GrafPtr)coordWindow); + EraseRect(&coordWindowRect); + + PasStringCopy(PSTR("h: "), tempStr); + if (coordH != -1) + { + NumToString((long)coordH, numStr); + PasStringConcat(tempStr, numStr); + } + else + PasStringConcat(tempStr, PSTR("-")); + MoveTo(5, 12); + DrawString(tempStr); + + PasStringCopy(PSTR("v: "), tempStr); + if (coordV != -1) + { + NumToString((long)coordV, numStr); + PasStringConcat(tempStr, numStr); + } + else + PasStringConcat(tempStr, PSTR("-")); + MoveTo(4, 22); + DrawString(tempStr); + + ForeColor(blueColor); + PasStringCopy(PSTR("d: "), tempStr); + if (coordD != -1) + { + NumToString((long)coordD, numStr); + PasStringConcat(tempStr, numStr); + } + else + PasStringConcat(tempStr, PSTR("-")); + MoveTo(5, 32); + DrawString(tempStr); + ForeColor(blackColor); + + SetPort((GrafPtr)wasPort); +#endif +} + +//-------------------------------------------------------------- OpenCoordWindow +// Brings up the Coordinate window. + +void OpenCoordWindow (void) +{ +#ifndef COMPILEDEMO + Rect src, dest; + Point globalMouse; + short direction, dist; + + if (coordWindow == nil) + { + QSetRect(&coordWindowRect, 0, 0, 50, 38); + if (thisMac.hasColor) + coordWindow = NewCWindow(nil, &coordWindowRect, + PSTR("Tools"), false, kWindoidWDEF, kPutInFront, true, 0L); + else + coordWindow = NewWindow(nil, &coordWindowRect, + PSTR("Tools"), false, kWindoidWDEF, kPutInFront, true, 0L); + + if (coordWindow == nil) + RedAlert(kErrNoMemory); + +// if (OptionKeyDown()) +// { +// isCoordH = qd.screenBits.bounds.right - 55; +// isCoordV = 204; +// } + MoveWindow(coordWindow, isCoordH, isCoordV, true); + globalMouse = MyGetGlobalMouse(); + QSetRect(&src, 0, 0, 1, 1); + QOffsetRect(&src, globalMouse.h, globalMouse.v); + GetWindowRect(coordWindow, &dest); + BringToFront(coordWindow); + ShowHide(coordWindow, true); +// FlagWindowFloating(coordWindow); TEMP - use flaoting windows + HiliteAllWindows(); + + coordH = -1; + coordV = -1; + coordD = -1; + TextFace(applFont); + TextSize(9); + + if (objActive != kNoObjectSelected) + { + if (ObjectHasHandle(&direction, &dist)) + coordD = dist; + SetCoordinateHVD(theMarquee.bounds.left, theMarquee.bounds.top, coordD); + } + } + + UpdateCoordinateCheckmark(true); +#endif +} + +//-------------------------------------------------------------- CloseCoordWindow +// Closes and disposes of the Coordinate window. + +void CloseCoordWindow (void) +{ + CloseThisWindow(&coordWindow); + UpdateCoordinateCheckmark(false); +} + +//-------------------------------------------------------------- ToggleCoordinateWindow +// Toggles the Coordinate windows state between open and closed. + +void ToggleCoordinateWindow (void) +{ +#ifndef COMPILEDEMO + if (coordWindow == nil) + { + OpenCoordWindow(); + isCoordOpen = true; + } + else + { + CloseCoordWindow(); + isCoordOpen = false; + } +#endif +} + diff --git a/Sources/DebugUtilities.c b/GpApp/DebugUtilities.c old mode 100755 new mode 100644 similarity index 100% rename from Sources/DebugUtilities.c rename to GpApp/DebugUtilities.c diff --git a/GpApp/DialogUtils.cpp b/GpApp/DialogUtils.cpp new file mode 100644 index 0000000..85e5c00 --- /dev/null +++ b/GpApp/DialogUtils.cpp @@ -0,0 +1,807 @@ +//============================================================================ +//---------------------------------------------------------------------------- +// DialogUtils.c +//---------------------------------------------------------------------------- +//============================================================================ + + +#include "PLControlDefinitions.h" +#include "PLLowMem.h" +#include "PLNumberFormatting.h" +#include "PLPasStr.h" +#include "DialogUtils.h" +#include "Externs.h" + + +#define kActive 0 +#define kInactive 255 + + +//============================================================== Functions +//-------------------------------------------------------------- BringUpDialog +// Given a dialog pointer and a resource ID, this function brings it upÉ +// centered, visible, and with the default button outlined. + +void BringUpDialog (DialogPtr *theDialog, short dialogID) +{ +// CenterDialog(dialogID); + *theDialog = GetNewDialog(dialogID, nil, kPutInFront); + if (*theDialog == nil) + RedAlert(kErrDialogDidntLoad); + SetPort((GrafPtr)*theDialog); + ShowWindow(GetDialogWindow(*theDialog)); + DrawDefaultButton(*theDialog); +} + +//-------------------------------------------------------------- GetPutDialogCorner +// Determines the upper left corner coordinates needed to properly centerÉ +// the standard Mac PutFile dialog (when you save files). +/* +void GetPutDialogCorner (Point *theCorner) +{ + DialogTHndl dlogHandle; + Rect theScreen, dlogBounds; + Byte wasState; + + theCorner->h = 64; + theCorner->v = 64; + theScreen = qd.screenBits.bounds; + theScreen.top += LMGetMBarHeight(); + OffsetRect(&theScreen, -theScreen.left, -theScreen.top); + + dlogHandle = (DialogTHndl)GetResource('DLOG', sfPutDialogID); + if (dlogHandle != nil) + { + wasState = HGetState((Handle)dlogHandle); + HLock((Handle)dlogHandle); + + dlogBounds = (**dlogHandle).boundsRect; + OffsetRect(&dlogBounds, -dlogBounds.left, -dlogBounds.top); + + theCorner->h = (theScreen.right - dlogBounds.right) / 2; + theCorner->v = (theScreen.bottom - dlogBounds.bottom) / 3; + + HSetState((Handle)dlogHandle, wasState); + } + theCorner->v += LMGetMBarHeight(); +} +*/ + +//-------------------------------------------------------------- GetPutDialogCorner +// Determines the upper left corner coordinates needed to properly centerÉ +// the standard Mac GetFile dialog (when you open files). +/* +void GetGetDialogCorner (Point *theCorner) +{ + DialogTHndl dlogHandle; + Rect theScreen, dlogBounds; + Byte wasState; + + theCorner->h = 64; + theCorner->v = 64; + theScreen = qd.screenBits.bounds; + theScreen.top += LMGetMBarHeight(); + OffsetRect(&theScreen, -theScreen.left, -theScreen.top); + + dlogHandle = (DialogTHndl)GetResource('DLOG', sfGetDialogID); + if (dlogHandle != nil) + { + wasState = HGetState((Handle)dlogHandle); + HLock((Handle)dlogHandle); + + dlogBounds = (**dlogHandle).boundsRect; + OffsetRect(&dlogBounds, -dlogBounds.left, -dlogBounds.top); + + theCorner->h = (theScreen.right - dlogBounds.right) / 2; + theCorner->v = (theScreen.bottom - dlogBounds.bottom) / 3; + + HSetState((Handle)dlogHandle, wasState); + } + theCorner->v += LMGetMBarHeight(); +} +*/ +//-------------------------------------------------------------- CenterDialog +// Given a resource ID for a dialog, this function properly centers it. +/* +void CenterDialog (SInt16 dialogID) +{ + DialogTHndl dlogHandle; + Rect theScreen, dlogBounds; + SInt16 hPos, vPos; + Byte wasState; + + theScreen = qd.screenBits.bounds; + theScreen.top += LMGetMBarHeight(); + + dlogHandle = (DialogTHndl)GetResource('DLOG', dialogID); + if (dlogHandle != nil) + { + wasState = HGetState((Handle)dlogHandle); + HLock((Handle)dlogHandle); + + dlogBounds = (**dlogHandle).boundsRect; + OffsetRect(&dlogBounds, -dlogBounds.left, -dlogBounds.top); + + hPos = ((theScreen.right - theScreen.left) - dlogBounds.right) / 2; + vPos = ((theScreen.bottom - theScreen.top) - dlogBounds.bottom) / 3; + + OffsetRect(&dlogBounds, hPos, vPos + LMGetMBarHeight()); + + (**dlogHandle).boundsRect = dlogBounds; + HSetState((Handle)dlogHandle, wasState); + } +} +*/ +//-------------------------------------------------------------- GetDialogRect +// Determines the bounding rectangle for a given dialog. + +void GetDialogRect (Rect *bounds, short dialogID) +{ + DialogTHndl dlogHandle; + Byte wasState; + + dlogHandle = (DialogTHndl)GetResource('DLOG', dialogID); + if (dlogHandle != nil) + { + wasState = HGetState((Handle)dlogHandle); + HLock((Handle)dlogHandle); + + *bounds = (**dlogHandle).boundsRect; + HSetState((Handle)dlogHandle, wasState); + } +} + +//-------------------------------------------------------------- TrueCenterDialog +// Places a dialog DEAD CENTER (as opposed to 1/3 of the way down asÉ +// is common for Mac dialog centering). +/* +void TrueCenterDialog (short dialogID) +{ + DialogTHndl dlogHandle; + Rect theScreen, dlogBounds; + short hPos, vPos; + Byte wasState; + + theScreen = qd.screenBits.bounds; + theScreen.top += LMGetMBarHeight(); + + dlogHandle = (DialogTHndl)GetResource('DLOG', dialogID); + if (dlogHandle != nil) + { + wasState = HGetState((Handle)dlogHandle); + HLock((Handle)dlogHandle); + + dlogBounds = (**dlogHandle).boundsRect; + OffsetRect(&dlogBounds, theScreen.left - dlogBounds.left, + theScreen.top - dlogBounds.top); + + hPos = ((theScreen.right - theScreen.left) - + (dlogBounds.right - dlogBounds.left)) / 2; + vPos = ((theScreen.bottom - theScreen.top) - + (dlogBounds.bottom - dlogBounds.top)) / 2; + + OffsetRect(&dlogBounds, hPos, vPos + LMGetMBarHeight()); + + (**dlogHandle).boundsRect = dlogBounds; + HSetState((Handle)dlogHandle, wasState); + } +} +*/ +//-------------------------------------------------------------- CenterAlert +// Given an alert ID, this function properly centers it on the main monitor. +/* +void CenterAlert (short alertID) +{ + AlertTHndl alertHandle; + Rect theScreen, alertRect; + short horiOff, vertOff; + Byte wasState; + + theScreen = qd.screenBits.bounds; + theScreen.top += LMGetMBarHeight(); + + alertHandle = (AlertTHndl)GetResource('ALRT', alertID); + if (alertHandle != nil) + { + wasState = HGetState((Handle)alertHandle); + HLock((Handle)alertHandle); + + alertRect = (**alertHandle).boundsRect; + OffsetRect(&alertRect, -alertRect.left, -alertRect.top); + + horiOff = ((theScreen.right - theScreen.left) - alertRect.right) / 2; + vertOff = ((theScreen.bottom - theScreen.top) - alertRect.bottom) / 3; + + OffsetRect(&alertRect, horiOff, vertOff + LMGetMBarHeight()); + + (**alertHandle).boundsRect = alertRect; + HSetState((Handle)alertHandle, wasState); + } +} +*/ +//-------------------------------------------------------------- ZoomOutDialogRect + +// Given a dialog, this function does the "zoom" animation to make theÉ +// the dialog appear to expand from nothingness or zoom in at you. +/* +void ZoomOutDialogRect (short dialogID) +{ + #define kSteps 16 + #define kZoomDelay 1 + DialogTHndl dlogHandle; + GrafPtr wasPort, tempPort; + Rect dlogBounds, zoomRect; + UInt32 dummyLong; + Byte wasState; + short wideStep, highStep, i; + + GetPort(&wasPort); + + tempPort = (GrafPtr)NewPtrClear(sizeof(GrafPort)); + OpenPort(tempPort); + + dlogHandle = (DialogTHndl)GetResource('DLOG', dialogID); + if (dlogHandle != nil) + { + wasState = HGetState((Handle)dlogHandle); + HLock((Handle)dlogHandle); + dlogBounds = (**dlogHandle).boundsRect; + HSetState((Handle)dlogHandle, wasState); + } + + wideStep = ((dlogBounds.right - dlogBounds.left) / 2) / kSteps; + highStep = ((dlogBounds.bottom - dlogBounds.top) / 2) / kSteps; + + SetRect(&zoomRect, dlogBounds.left + (wideStep * kSteps), + dlogBounds.top + (highStep * kSteps), + dlogBounds.right - (wideStep * kSteps), + dlogBounds.bottom - (highStep * kSteps)); + GlobalToLocalRect(&zoomRect); + + PenPat(GetQDGlobalsGray(&dummyPattern)); + PenMode(patXor); + + for (i = 0; i < kSteps; i++) + { + FrameRect(&zoomRect); + Delay(kZoomDelay, &dummyLong); + FrameRect(&zoomRect); + InsetRect(&zoomRect, -wideStep, -highStep); + } + + ClosePort(tempPort); + + SetPort((GrafPtr)wasPort); +} +*/ +//-------------------------------------------------------------- ZoomOutAlertRect + +// Like the above funciton but zooms out alerts instead of dialogs. +/* +void ZoomOutAlertRect (short alertID) +{ + #define kSteps 16 + #define kZoomDelay 1 + AlertTHndl alertHandle; + GrafPtr wasPort, tempPort; + Rect alertBounds, zoomRect; + UInt32 dummyLong; + Byte wasState; + short wideStep, highStep, i; + + GetPort(&wasPort); + + tempPort = (GrafPtr)NewPtrClear(sizeof(GrafPort)); + OpenPort(tempPort); + + alertHandle = (AlertTHndl)GetResource('ALRT', alertID); + if (alertHandle != nil) + { + wasState = HGetState((Handle)alertHandle); + HLock((Handle)alertHandle); + alertBounds = (**alertHandle).boundsRect; + HSetState((Handle)alertHandle, wasState); + } + + wideStep = ((alertBounds.right - alertBounds.left) / 2) / kSteps; + highStep = ((alertBounds.bottom - alertBounds.top) / 2) / kSteps; + + SetRect(&zoomRect, alertBounds.left + (wideStep * kSteps), + alertBounds.top + (highStep * kSteps), + alertBounds.right - (wideStep * kSteps), + alertBounds.bottom - (highStep * kSteps)); + GlobalToLocalRect(&zoomRect); + + PenPat(GetQDGlobalsGray(&dummyPattern)); + PenMode(patXor); + + for (i = 0; i < kSteps; i++) + { + FrameRect(&zoomRect); + Delay(kZoomDelay, &dummyLong); + FrameRect(&zoomRect); + InsetRect(&zoomRect, -wideStep, -highStep); + } + + ClosePort(tempPort); + + SetPort((GrafPtr)wasPort); +} +*/ + +//-------------------------------------------------------------- FlashDialogButton +// Flashes the default dialog button (item = 1) so as to make it appearÉ +// as though the user clicked on it. + +void FlashDialogButton (DialogPtr theDialog, short itemNumber) +{ + Rect itemRect; + Handle itemHandle; + UInt32 dummyLong; + short itemType; + + GetDialogItem(theDialog, itemNumber, &itemType, &itemHandle, &itemRect); + HiliteControl((ControlHandle)itemHandle, kControlButtonPart); + Delay(8, &dummyLong); + HiliteControl((ControlHandle)itemHandle, 0); +} + +//-------------------------------------------------------------- DrawDefaultButton +// Draws a fat outline around the default item (item = 1). This is theÉ +// item that is selected if the user hits the Return key. + +void DrawDefaultButton (DialogPtr theDialog) +{ + Rect itemRect; + Handle itemHandle; + short itemType; + + GetDialogItem(theDialog, 1, &itemType, &itemHandle, &itemRect); + InsetRect(&itemRect, -4, -4); + PenSize(3, 3); + FrameRoundRect(&itemRect, 16, 16); + PenNormal(); +} + +//-------------------------------------------------------------- GetDialogString +// Returns a string from a specific dialog item. + +void GetDialogString (DialogPtr theDialog, short item, StringPtr theString) +{ + Rect itemRect; + Handle itemHandle; + short itemType; + + GetDialogItem(theDialog, item, &itemType, &itemHandle, &itemRect); + GetDialogItemText(itemHandle, theString); +} + +//-------------------------------------------------------------- SetDialogString +// Sets a specific string to a specific dialog item. + +void SetDialogString (DialogPtr theDialog, short item, const PLPasStr &theString) +{ + Rect itemRect; + Handle itemHandle; + short itemType; + + GetDialogItem(theDialog, item, &itemType, &itemHandle, &itemRect); + SetDialogItemText(itemHandle, theString); +} + +//-------------------------------------------------------------- GetDialogStringLen +// Returns the length of a dialog item string (text). + +short GetDialogStringLen (DialogPtr theDialog, short item) +{ + Rect itemRect; + Str255 theString; + Handle itemHandle; + short itemType; + + GetDialogItem(theDialog, item, &itemType, &itemHandle, &itemRect); + GetDialogItemText(itemHandle, theString); + return (theString[0]); +} + +//-------------------------------------------------------------- GetDialogItemValue +// Returns the value or "state" of a dialog item. For checkboxes andÉ +// radio buttons, this may be a 1 or 0. + +void GetDialogItemValue (DialogPtr theDialog, short item, short *theState) +{ + Rect itemRect; + Handle itemHandle; + short itemType; + + GetDialogItem(theDialog, item, &itemType, &itemHandle, &itemRect); + *theState = GetControlValue((ControlHandle)itemHandle); +} + +//-------------------------------------------------------------- SetDialogItemValue +// Sets a specific dialogf items value or state (can set or clearÉ +// checkboxes, radio buttons, etc.). + +void SetDialogItemValue (DialogPtr theDialog, short item, short theState) +{ + Rect itemRect; + Handle itemHandle; + short itemType; + + GetDialogItem(theDialog, item, &itemType, &itemHandle, &itemRect); + SetControlValue((ControlHandle)itemHandle, theState); +} + +//-------------------------------------------------------------- ToggleDialogItemValue +// If item is a checkbox or radio button, its state is toggled. + +void ToggleDialogItemValue (DialogPtr theDialog, short item) +{ + Rect itemRect; + Handle itemHandle; + short itemType, theState; + + GetDialogItem(theDialog, item, &itemType, &itemHandle, &itemRect); + theState = GetControlValue((ControlHandle)itemHandle); + if (theState == 0) + theState = 1; + else + theState = 0; + SetControlValue((ControlHandle)itemHandle, theState); +} + +//-------------------------------------------------------------- SetDialogNumToStr +// Function accepts an integer, converts it to a string and sets aÉ +// dialog items text to this string. + +void SetDialogNumToStr (DialogPtr theDialog, short item, long theNumber) +{ + Str255 theString; + Rect itemRect; + Handle itemHandle; + short itemType; + + NumToString(theNumber, theString); + GetDialogItem(theDialog, item, &itemType, &itemHandle, &itemRect); + SetDialogItemText(itemHandle, theString); +} + +//-------------------------------------------------------------- GetDialogNumFromStr +// Function extracts the text from a dialog item and converts it to anÉ +// integer for returning. + +void GetDialogNumFromStr (DialogPtr theDialog, short item, long *theNumber) +{ + Str255 theString; + Rect itemRect; + Handle itemHandle; + short itemType; + + GetDialogItem(theDialog, item, &itemType, &itemHandle, &itemRect); + GetDialogItemText(itemHandle, theString); + StringToNum(theString, theNumber); +} + +//-------------------------------------------------------------- GetDialogItemRect +// Returns the bounding rectangle of the specified dialog item. + +void GetDialogItemRect (DialogPtr theDialog, short item, Rect *theRect) +{ + Handle itemHandle; + short itemType; + + GetDialogItem(theDialog, item, &itemType, &itemHandle, theRect); +} + +//-------------------------------------------------------------- SetDialogItemRect +// Sets the bounding rectangle of the specified dialog item. Used toÉ +// resize or move a control. + +void SetDialogItemRect (DialogPtr theDialog, short item, Rect *theRect) +{ + Rect oldRect; + Handle itemHandle; + short itemType; + + GetDialogItem(theDialog, item, &itemType, &itemHandle, &oldRect); + OffsetRect(&oldRect, theRect->left - oldRect.left, theRect->top - oldRect.top); + SetDialogItem(theDialog, item, itemType, itemHandle, &oldRect); +} + +//-------------------------------------------------------------- OffsetDialogItemRect +// Moves a dialog item by h and v. + +void OffsetDialogItemRect (DialogPtr theDialog, short item, short h, short v) +{ + Rect oldRect; + Handle itemHandle; + short itemType; + + GetDialogItem(theDialog, item, &itemType, &itemHandle, &oldRect); + OffsetRect(&oldRect, h, v); + SetDialogItem(theDialog, item, itemType, itemHandle, &oldRect); +} + +//-------------------------------------------------------------- SelectFromRadioGroup +// Assuming a series of consecutively numbered radio buttons, this functionÉ +// clears the whole range of them but sets the one specified (as thoughÉ +// the radio buttons are linked and only one can be set at a time). + +void SelectFromRadioGroup (DialogPtr dial, short which, short first, short last) +{ + Rect iRect; + Handle iHandle; + short iType, i; + + for (i = first; i <= last; i++) + { + GetDialogItem(dial, i, &iType, &iHandle, &iRect); + SetControlValue((ControlHandle)iHandle, (short)false); + } + + GetDialogItem(dial, which, &iType, &iHandle, &iRect); + SetControlValue((ControlHandle)iHandle, (short)true); +} + +//-------------------------------------------------------------- AddMenuToPopUp +// Assigns a menu handle to a pop-up dialog item - thus, giving thatÉ +// pop-up item something to pop up. +/* +void AddMenuToPopUp (DialogPtr theDialog, short whichItem, MenuHandle theMenu) +{ + Rect iRect; + Handle iHandle; + short iType; + + GetDialogItem(theDialog, whichItem, &iType, &iHandle, &iRect); + (**(ControlHandle)iHandle).contrlRfCon = (long)theMenu; +} +*/ +//-------------------------------------------------------------- GetPopUpMenuValu +// Returns which item is currently selected in a pop-up menu. + +void GetPopUpMenuValue (DialogPtr theDialog, short whichItem, short *value) +{ + Rect iRect; + Handle iHandle; + short iType; + + GetDialogItem(theDialog, whichItem, &iType, &iHandle, &iRect); + *value = GetControlValue((ControlHandle)iHandle); +} + +//-------------------------------------------------------------- SetPopUpMenuValue +// Forces a specific item to be set (as though selected) in a pop-up menu. + +void SetPopUpMenuValue (DialogPtr theDialog, short whichItem, short value) +{ + Rect iRect; + Handle iHandle; + short iType; + + GetDialogItem(theDialog, whichItem, &iType, &iHandle, &iRect); + SetControlValue((ControlHandle)iHandle, value); +} + +//-------------------------------------------------------------- MyEnableControl +// "Un-grays" or enables a dialog item (usually a button). + +void MyEnableControl (DialogPtr theDialog, short whichItem) +{ + Rect iRect; + Handle iHandle; + short iType; + + GetDialogItem(theDialog, whichItem, &iType, &iHandle, &iRect); + HiliteControl((ControlHandle)iHandle, kActive); +} + +//-------------------------------------------------------------- MyDisableControl +// "Grays out" or disables a dialog item (usually a button). + +void MyDisableControl (DialogPtr theDialog, short whichItem) +{ + Rect iRect; + Handle iHandle; + short iType; + + GetDialogItem(theDialog, whichItem, &iType, &iHandle, &iRect); + HiliteControl((ControlHandle)iHandle, kInactive); +} + +//-------------------------------------------------------------- DrawDialogUserText +// Given a string of text and an item, this function draws the stringÉ +// within the bounding rect of the item. Dialog item assumed to beÉ +// a "user item" (invisible item with only bounds). + +void DrawDialogUserText (DialogPtr dial, short item, StringPtr text, Boolean invert) +{ + Rect iRect; + Handle iHandle; + Str255 newString, stringCopy; + short iType, textLong, i, inset; + + TextFont(applFont); + TextSize(9); + + PasStringCopy(text, stringCopy); + GetDialogItem(dial, item, &iType, &iHandle, &iRect); + if ((StringWidth(stringCopy) + 2) > (iRect.right - iRect.left)) + CollapseStringToWidth(stringCopy, iRect.right - iRect.left - 2); + textLong = stringCopy[0]; + for (i = 0; i < textLong; i++) + newString[i] = stringCopy[i + 1]; + + OffsetRect(&iRect, 0, 1); + EraseRect(&iRect); + OffsetRect(&iRect, 0, -1); + + inset = ((iRect.right - iRect.left) - (StringWidth(stringCopy) + 2)) / 2; + iRect.left += inset; + iRect.right -= inset; + + TETextBox(newString, textLong, &iRect, teCenter); + if (invert) + { + OffsetRect(&iRect, 0, 1); + InvertRect(&iRect); + } +} + +//-------------------------------------------------------------- DrawDialogUserText +// Similar to the above function but doesn't call TETextBox(). Instead,É +// it truncates the string (and appends "É") to the end in order thatÉ +// the string fits within the dialog item's bounds. + +void DrawDialogUserText2 (DialogPtr dial, short item, StringPtr text) +{ + Rect iRect; + Handle iHandle; + Str255 stringCopy; + short iType; + + TextFont(applFont); + TextSize(9); + + PasStringCopy(text, stringCopy); + GetDialogItem(dial, item, &iType, &iHandle, &iRect); + if ((StringWidth(stringCopy) + 2) > (iRect.right - iRect.left)) + CollapseStringToWidth(stringCopy, iRect.right - iRect.left - 2); + MoveTo(iRect.left, iRect.bottom); + DrawString(stringCopy); +} + +//-------------------------------------------------------------- LoadDialogPICT +// Draws a 'PICT' specified by ID within the bounds of the specifiedÉ +// dialog item. + +void LoadDialogPICT (DialogPtr theDialog, short item, short theID) +{ + Rect iRect; + Handle iHandle; + PicHandle thePict; + short iType; + + GetDialogItem(theDialog, item, &iType, &iHandle, &iRect); + thePict = GetPicture(theID); + if (thePict) + DrawPicture(thePict, &iRect); +} + +//-------------------------------------------------------------- FrameDialogItem +// Given a dialog item, this function draws a box around it. + +void FrameDialogItem (DialogPtr theDialog, short item) +{ + Rect itemRect; + Handle itemHandle; + short itemType; + + GetDialogItem(theDialog, item, &itemType, &itemHandle, &itemRect); + FrameRect(&itemRect); +} + +//-------------------------------------------------------------- FrameDialogItemC +// Given a dialog item, this function draws a color (specified) box around it. + +void FrameDialogItemC (DialogPtr theDialog, short item, long color) +{ + RGBColor theRGBColor, wasColor; + Rect itemRect; + Handle itemHandle; + short itemType; + + GetDialogItem(theDialog, item, &itemType, &itemHandle, &itemRect); + GetForeColor(&wasColor); + Index2Color(color, &theRGBColor); + RGBForeColor(&theRGBColor); + FrameRect(&itemRect); + RGBForeColor(&wasColor); +} + +//-------------------------------------------------------------- FrameOvalDialogItem +// Given a dialog item, this function draws an oval around it. + +void FrameOvalDialogItem (DialogPtr theDialog, short item) +{ + Rect itemRect; + Handle itemHandle; + short itemType; + + GetDialogItem(theDialog, item, &itemType, &itemHandle, &itemRect); + FrameOval(&itemRect); +} + +//-------------------------------------------------------------- BorderDialogItem +// Given a dialog item, this function draws any combination of 4 sidesÉ +// of a box around it. Which sides get drawn is encoded in "sides". + +void BorderDialogItem (DialogPtr theDialog, short item, short sides) +{ + Rect itemRect; + Handle itemHandle; + short itemType; + + // 1 = left + // 2 = top + // 4 = bottom + // 8 = right ... so 6 = top & bottom, 15 = all 4 sides + + GetDialogItem(theDialog, item, &itemType, &itemHandle, &itemRect); + + if (sides >= 8) // 8 = right + { + MoveTo(itemRect.right, itemRect.top); + LineTo(itemRect.right, itemRect.bottom); + sides -= 8; + } + if (sides >= 4) // 4 = bottom + { + MoveTo(itemRect.left, itemRect.bottom); + LineTo(itemRect.right, itemRect.bottom); + sides -= 4; + } + if (sides >= 2) // 2 = top + { + MoveTo(itemRect.left, itemRect.top - 1); + LineTo(itemRect.right, itemRect.top - 1); + sides -= 2; + } + if (sides >= 1) // 1 = left + { + MoveTo(itemRect.left - 1, itemRect.top); + LineTo(itemRect.left - 1, itemRect.bottom); + } +} + +//-------------------------------------------------------------- ShadowDialogItem +// Draws a drop shadow to the right and below a specified dialog item. + +void ShadowDialogItem (DialogPtr theDialog, short item, short thickness) +{ + Rect itemRect; + Handle itemHandle; + short itemType; + + GetDialogItem(theDialog, item, &itemType, &itemHandle, &itemRect); + PenSize(thickness, thickness); + MoveTo(itemRect.left + thickness, itemRect.bottom); + Line(itemRect.right - itemRect.left - thickness, 0); + MoveTo(itemRect.right, itemRect.top + thickness); + Line(0, itemRect.bottom - itemRect.top - thickness); + PenNormal(); +} + +//-------------------------------------------------------------- EraseDialogItem +// Erases (but doesn't physically remove) a dialog item. + +void EraseDialogItem (DialogPtr theDialog, short item) +{ + Rect itemRect; + Handle itemHandle; + short itemType; + + GetDialogItem(theDialog, item, &itemType, &itemHandle, &itemRect); + EraseRect(&itemRect); +} + diff --git a/GpApp/DialogUtils.h b/GpApp/DialogUtils.h new file mode 100644 index 0000000..da0f150 --- /dev/null +++ b/GpApp/DialogUtils.h @@ -0,0 +1,47 @@ +//============================================================================ +//---------------------------------------------------------------------------- +// DialogUtils.h +//---------------------------------------------------------------------------- +//============================================================================ + + +#include "PLDialogs.h" + + +void BringUpDialog (DialogPtr *theDialog, short dialogID); +//void GetPutDialogCorner (Point *); +//void GetGetDialogCorner (Point *); +//void CenterDialog (short); +void GetDialogRect (Rect *, short); +//void TrueCenterDialog (short); +//void CenterAlert (short); +//void ZoomOutDialogRect (short); +//void ZoomOutAlertRect (short); +void FlashDialogButton (DialogPtr, short); +void DrawDefaultButton (DialogPtr); +void GetDialogString (DialogPtr, short, StringPtr); +void SetDialogString (DialogPtr, short, const PLPasStr&); +short GetDialogStringLen (DialogPtr, short); +void GetDialogItemValue (DialogPtr, short, short *); +void SetDialogItemValue (DialogPtr, short, short); +void ToggleDialogItemValue (DialogPtr, short); +void SetDialogNumToStr (DialogPtr, short, long); +void GetDialogNumFromStr (DialogPtr, short, long *); +void GetDialogItemRect (DialogPtr, short, Rect *); +void SetDialogItemRect (DialogPtr, short, Rect *); +void OffsetDialogItemRect (DialogPtr, short, short, short); +void SelectFromRadioGroup (DialogPtr, short, short, short); +//void AddMenuToPopUp (DialogPtr, short, MenuHandle); +void GetPopUpMenuValue (DialogPtr, short, short *); +void SetPopUpMenuValue (DialogPtr, short, short); +void MyEnableControl(DialogPtr, short); +void MyDisableControl(DialogPtr, short); +void DrawDialogUserText (DialogPtr, short, StringPtr, Boolean); +void DrawDialogUserText2 (DialogPtr, short, StringPtr); +void LoadDialogPICT (DialogPtr, short, short); +void FrameDialogItem (DialogPtr, short); +void FrameDialogItemC (DialogPtr, short, long); +void FrameOvalDialogItem (DialogPtr, short); +void BorderDialogItem (DialogPtr, short, short); +void ShadowDialogItem (DialogPtr, short, short); +void EraseDialogItem (DialogPtr, short); diff --git a/GpApp/DynamicMaps.cpp b/GpApp/DynamicMaps.cpp new file mode 100644 index 0000000..33ccde6 --- /dev/null +++ b/GpApp/DynamicMaps.cpp @@ -0,0 +1,798 @@ +//============================================================================ +//---------------------------------------------------------------------------- +// DynamicMaps.c +//---------------------------------------------------------------------------- +//============================================================================ + + +#include "Externs.h" +#include "Environ.h" +#include "MainWindow.h" +#include "Objects.h" +#include "RectUtils.h" +#include "Room.h" +#include "Utilities.h" + + +void BackUpFlames (Rect *, short); +void BackUpTikiFlames (Rect *, short); +void BackUpBBQCoals (Rect *, short); +void BackUpPendulum (Rect *, short); +void BackUpStar (Rect *, short); + + +sparklePtr sparkles; +flyingPtPtr flyingPoints; +flamePtr flames, tikiFlames, bbqCoals; +pendulumPtr pendulums; +starPtr theStars; +shredPtr shreds; +Rect pointsSrc[15]; +short numSparkles, numFlyingPts, numChimes; +short numFlames, numSavedMaps, numTikiFlames, numCoals; +short numPendulums, clockFrame, numStars, numShredded; + + +extern savedType savedMaps[]; +extern Rect flame[], tikiFlame[], coals[], pendulumSrc[]; +extern Rect starSrc[]; +extern short numGrease, numDynamics; + + +//============================================================== Functions +//-------------------------------------------------------------- NilSavedMaps +// Deletes array of "dyanmics" offscreen pixmaps. + +void NilSavedMaps (void) +{ + short i; + + for (i = 0; i < kMaxSavedMaps; i++) + { + if (savedMaps[i].map != nil) + { + DisposeGWorld(savedMaps[i].map); +// KillOffScreenPixMap(savedMaps[i].map); + savedMaps[i].map = nil; + } + savedMaps[i].where = -1; + savedMaps[i].who = -1; + } + numSavedMaps = 0; +} + +//-------------------------------------------------------------- BackUpToSavedMap +// Saves a copy of the room behind an object to an array of pixmaps. +// Then when the object in question is drawn, there is a copy of theÉ +// room that it obscured so that, should the player get the object,É +// it can be made to "disappear". + +short BackUpToSavedMap (Rect *theRect, short where, short who) +{ + Rect mapRect; + OSErr theErr; + + if (numSavedMaps >= kMaxSavedMaps) + return(-1); + + mapRect = *theRect; + ZeroRectCorner(&mapRect); + savedMaps[numSavedMaps].dest = *theRect; +// CreateOffScreenPixMap(&mapRect, &savedMaps[numSavedMaps].map); + theErr = CreateOffScreenGWorld(&savedMaps[numSavedMaps].map, &mapRect, kPreferredDepth); + + CopyBits((BitMap *)*GetGWorldPixMap(backSrcMap), + GetPortBitMapForCopyBits(savedMaps[numSavedMaps].map), + theRect, &mapRect, srcCopy, nil); + + savedMaps[numSavedMaps].where = where; + savedMaps[numSavedMaps].who = who; + numSavedMaps++; + + return (numSavedMaps - 1); // return array index +} + +//-------------------------------------------------------------- ReBackUpSavedMap +// This function is similar to the above, but assumes there is alreadyÉ +// a slot in the pixmap array for the object. It re-copies the backgroundÉ +// and is needed when the lights in the room go on or off. + +short ReBackUpSavedMap (Rect *theRect, short where, short who) +{ + Rect mapRect; + short i, foundIndex; + + foundIndex = -1; + + for (i = 0; i < numSavedMaps; i++) + { + if ((savedMaps[i].where == where) && (savedMaps[i].who == who)) + { + foundIndex = i; + mapRect = *theRect; + ZeroRectCorner(&mapRect); + + CopyBits((BitMap *)*GetGWorldPixMap(backSrcMap), + GetPortBitMapForCopyBits(savedMaps[foundIndex].map), + theRect, &mapRect, srcCopy, nil); + + return (foundIndex); + } + } + + return (foundIndex); +} + +//-------------------------------------------------------------- RestoreFromSavedMap + +// This copies the saved background swatch to the screen - effectivelyÉ +// covering up or "erasing" the object. + +void RestoreFromSavedMap (short where, short who, Boolean doSparkle) +{ + Rect mapRect, bounds; + short i; + + for (i = 0; i < numSavedMaps; i++) + { + if ((savedMaps[i].where == where) && (savedMaps[i].who == who) && + (savedMaps[i].map != nil)) + { + mapRect = savedMaps[i].dest; + ZeroRectCorner(&mapRect); + + CopyBits(GetPortBitMapForCopyBits(savedMaps[i].map), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &mapRect, &savedMaps[i].dest, srcCopy, nil); + CopyBits(GetPortBitMapForCopyBits(savedMaps[i].map), + (BitMap *)*GetGWorldPixMap(workSrcMap), + &mapRect, &savedMaps[i].dest, srcCopy, nil); + + AddRectToWorkRects(&savedMaps[i].dest); + + if (doSparkle) + { + bounds = savedMaps[i].dest; + QOffsetRect(&bounds, -playOriginH, -playOriginV); + AddSparkle(&bounds); + PlayPrioritySound(kFadeOutSound, kFadeOutPriority); + } + break; + } + } +} + +//-------------------------------------------------------------- AddSparkle + +// This adds a "sparkle" object to the fixed array of sparkles. + +void AddSparkle (Rect *theRect) +{ + Rect centeredRect; + short i; + + if (numSparkles < kMaxSparkles) + { + theRect->left += playOriginH; + theRect->right += playOriginH; + theRect->top += playOriginV; + theRect->bottom += playOriginV; + + centeredRect = sparkleSrc[0]; + CenterRectInRect(¢eredRect, theRect); + + for (i = 0; i < kMaxSparkles; i++) + if (sparkles[i].mode == -1) + { + sparkles[i].bounds = centeredRect; + sparkles[i].mode = 0; + numSparkles++; + break; + } + } +} + +//-------------------------------------------------------------- AddFlyingPoint + +// This adds a "flying point" object to the array of flying points. + +void AddFlyingPoint (Rect *theRect, short points, short hVel, short vVel) +{ + Rect centeredRect; + short i; + + if (numFlyingPts < kMaxFlyingPts) + { + theRect->left += playOriginH; + theRect->right += playOriginH; + theRect->top += playOriginV; + theRect->bottom += playOriginV; + + centeredRect = pointsSrc[0]; + CenterRectInRect(¢eredRect, theRect); + + for (i = 0; i < kMaxFlyingPts; i++) + if (flyingPoints[i].mode == -1) + { + flyingPoints[i].dest = centeredRect; + flyingPoints[i].whole = centeredRect; + flyingPoints[i].loops = 0; + flyingPoints[i].hVel = hVel; + flyingPoints[i].vVel = vVel; + switch (points) + { + case 100: + flyingPoints[i].start = 12; + flyingPoints[i].stop = 14; + break; + + case 250: + flyingPoints[i].start = 9; + flyingPoints[i].stop = 11; + break; + + case 300: + flyingPoints[i].start = 6; + flyingPoints[i].stop = 8; + break; + + case 500: + flyingPoints[i].start = 3; + flyingPoints[i].stop = 5; + break; + + default: + flyingPoints[i].start = 0; + flyingPoints[i].stop = 2; + break; + } + flyingPoints[i].mode = flyingPoints[i].start; + numFlyingPts++; + break; + } + } +} + +//-------------------------------------------------------------- BackUpFlames + +// This makes copies of the area of the room behind a flame. The flameÉ +// graphic can be "copy masked" to this pixmap then and then simpleÉ +// CopyBits() calls will properly draw the flame on screen with theÉ +// proper background. + +void BackUpFlames (Rect *src, short index) +{ + Rect dest; + short i; + + QSetRect(&dest, 0, 0, 16, 15); + for (i = 0; i < kNumCandleFlames; i++) + { + // Copy background to map. + CopyBits((BitMap *)*GetGWorldPixMap(backSrcMap), + GetPortBitMapForCopyBits(savedMaps[index].map), + src, &dest, srcCopy, nil); + + // Copy flame to map. + CopyMask((BitMap *)*GetGWorldPixMap(blowerSrcMap), + (BitMap *)*GetGWorldPixMap(blowerMaskMap), + GetPortBitMapForCopyBits(savedMaps[index].map), + &flame[i], &flame[i], &dest); + + + QOffsetRect(&dest, 0, 15); + } +} + +//-------------------------------------------------------------- ReBackUpFlames + +// Like the above function but this is called when the lighting changesÉ +// in a room (lights go on or off). + +void ReBackUpFlames (short where, short who) +{ + short i, f; + + for (i = 0; i < numSavedMaps; i++) + { + if ((savedMaps[i].where == where) && (savedMaps[i].who == who)) + { + for (f = 0; f < numFlames; f++) + { + if (flames[f].who == i) + { + BackUpFlames(&flames[f].dest, i); + return; + } + } + } + } +} + +//-------------------------------------------------------------- AddCandleFlame + +// This adds a candle flame to tha array of flames. + +void AddCandleFlame (short where, short who, short h, short v) +{ + Rect src, bounds; + short savedNum; + + if ((numFlames >= kMaxCandles) || (h < 16) || (v < 15)) + return; + + QSetRect(&src, 0, 0, 16, 15); + QOffsetRect(&src, h - 8, v - 15); + if ((thisMac.isDepth == 4) && ((src.left % 2) == 1)) + { + QOffsetRect(&src, -1, 0); + if (src.left < 0) + QOffsetRect(&src, 2, 0); + } + QSetRect(&bounds, 0, 0, 16, 15 * kNumCandleFlames); + savedNum = BackUpToSavedMap(&bounds, where, who); + if (savedNum != -1) + { + BackUpFlames(&src, savedNum); + flames[numFlames].dest = src; + flames[numFlames].mode = RandomInt(kNumCandleFlames); + QSetRect(&flames[numFlames].src, 0, 0, 16, 15); + QOffsetRect(&flames[numFlames].src, 0, flames[numFlames].mode * 15); + flames[numFlames].who = savedNum; + numFlames++; + } +} + +//-------------------------------------------------------------- BackUpTikiFlames +// This is like the function BackUpFlames() but customized for Tiki torches. + +void BackUpTikiFlames (Rect *src, short index) +{ + Rect dest; + short i; + + QSetRect(&dest, 0, 0, 8, 10); + for (i = 0; i < kNumTikiFlames; i++) + { + // copy background to map + CopyBits((BitMap *)*GetGWorldPixMap(backSrcMap), + GetPortBitMapForCopyBits(savedMaps[index].map), + src, &dest, srcCopy, nil); + + // copy flame to map + CopyMask((BitMap *)*GetGWorldPixMap(blowerSrcMap), + (BitMap *)*GetGWorldPixMap(blowerMaskMap), + GetPortBitMapForCopyBits(savedMaps[index].map), + &tikiFlame[i], &tikiFlame[i], &dest); + + QOffsetRect(&dest, 0, 10); + } +} + +//-------------------------------------------------------------- ReBackUpTikiFlames + +// This is like the function ReBackUpFlames() but customized for Tiki torches. + +void ReBackUpTikiFlames (short where, short who) +{ + short i, f; + + for (i = 0; i < numSavedMaps; i++) + { + if ((savedMaps[i].where == where) && (savedMaps[i].who == who)) + { + for (f = 0; f < numTikiFlames; f++) + { + if (tikiFlames[f].who == i) + { + BackUpTikiFlames(&tikiFlames[f].dest, i); + return; + } + } + } + } +} + +//-------------------------------------------------------------- AddTikiFlame + +// This adds a tiki flame to the array of tiki flames. + +void AddTikiFlame (short where, short who, short h, short v) +{ + Rect src, bounds; + short savedNum; + + if ((numTikiFlames >= kMaxTikis) || (h < 8) || (v < 10)) + return; + + QSetRect(&src, 0, 0, 8, 10); + if ((thisMac.isDepth == 4) && ((h % 2) == 1)) + { + h--; + if (h < 0) + h += 2; + } + QOffsetRect(&src, h, v); + QSetRect(&bounds, 0, 0, 8, 10 * kNumTikiFlames); + savedNum = BackUpToSavedMap(&bounds, where, who); + if (savedNum != -1) + { + BackUpTikiFlames(&src, savedNum); + tikiFlames[numTikiFlames].dest = src; + tikiFlames[numTikiFlames].mode = RandomInt(kNumTikiFlames); + QSetRect(&tikiFlames[numTikiFlames].src, 0, 0, 8, 10); + QOffsetRect(&tikiFlames[numTikiFlames].src, 0, + tikiFlames[numTikiFlames].mode * 10); + tikiFlames[numTikiFlames].who = savedNum; + numTikiFlames++; + } +} + +//-------------------------------------------------------------- BackUpBBQCoals + +// Another one - but for BBQ coals. + +void BackUpBBQCoals (Rect *src, short index) +{ + Rect dest; + short i; + + QSetRect(&dest, 0, 0, 32, 9); + for (i = 0; i < kNumBBQCoals; i++) + { + // copy background to map + CopyBits((BitMap *)*GetGWorldPixMap(backSrcMap), + GetPortBitMapForCopyBits(savedMaps[index].map), + src, &dest, srcCopy, nil); + + // copy flame to map + CopyMask((BitMap *)*GetGWorldPixMap(blowerSrcMap), + (BitMap *)*GetGWorldPixMap(blowerMaskMap), + GetPortBitMapForCopyBits(savedMaps[index].map), + &coals[i], &coals[i], &dest); + + QOffsetRect(&dest, 0, 9); + } +} + +//-------------------------------------------------------------- ReBackUpBBQCoals + +// Sense a pattern here? + +void ReBackUpBBQCoals (short where, short who) +{ + short i, f; + + for (i = 0; i < numSavedMaps; i++) + { + if ((savedMaps[i].where == where) && (savedMaps[i].who == who)) + { + for (f = 0; f < numCoals; f++) + { + if (bbqCoals[f].who == i) + { + BackUpBBQCoals(&bbqCoals[f].dest, i); + return; + } + } + } + } +} + +//-------------------------------------------------------------- AddBBQCoals + +// Adds BBQ coals to the array of BBQ coals. + +void AddBBQCoals (short where, short who, short h, short v) +{ + Rect src, bounds; + short savedNum; + + if ((numCoals >= kMaxCoals) || (h < 32) || (v < 9)) + return; + + QSetRect(&src, 0, 0, 32, 9); + if ((thisMac.isDepth == 4) && ((h % 2) == 1)) + { + h--; + if (h < 0) + h += 2; + } + QOffsetRect(&src, h, v); + QSetRect(&bounds, 0, 0, 32, 9 * kNumBBQCoals); + savedNum = BackUpToSavedMap(&bounds, where, who); + if (savedNum != -1) + { + BackUpBBQCoals(&src, savedNum); + bbqCoals[numCoals].dest = src; + bbqCoals[numCoals].mode = RandomInt(kNumBBQCoals); + QSetRect(&bbqCoals[numCoals].src, 0, 0, 32, 9); + QOffsetRect(&bbqCoals[numCoals].src, 0, bbqCoals[numCoals].mode * 9); + bbqCoals[numCoals].who = savedNum; + + numCoals++; + } +} + +//-------------------------------------------------------------- BackUpPendulum +// Just like many of the previous functions, but for the pendulum on theÉ +// cuckoo clock. + +void BackUpPendulum (Rect *src, short index) +{ + Rect dest; + short i; + + QSetRect(&dest, 0, 0, 32, 28); + for (i = 0; i < kNumPendulums; i++) + { + CopyBits((BitMap *)*GetGWorldPixMap(backSrcMap), + GetPortBitMapForCopyBits(savedMaps[index].map), + src, &dest, srcCopy, nil); + + CopyMask((BitMap *)*GetGWorldPixMap(bonusSrcMap), + (BitMap *)*GetGWorldPixMap(bonusMaskMap), + GetPortBitMapForCopyBits(savedMaps[index].map), + &pendulumSrc[i], &pendulumSrc[i], &dest); + + QOffsetRect(&dest, 0, 28); + } +} + +//-------------------------------------------------------------- ReBackUpPendulum + +// Backs up the pendulums in the event of lights going on or off. + +void ReBackUpPendulum (short where, short who) +{ + short i, f; + + for (i = 0; i < numSavedMaps; i++) + { + if ((savedMaps[i].where == where) && (savedMaps[i].who == who)) + { + for (f = 0; f < numPendulums; f++) + { + if (pendulums[f].who == i) + { + BackUpPendulum(&pendulums[f].dest, i); + return; + } + } + } + } +} + +//-------------------------------------------------------------- AddPendulum + +// Adds a pendulum to the array of pendulums. + +void AddPendulum (short where, short who, short h, short v) +{ + Rect src, bounds; + short savedNum; + + if ((numPendulums >= kMaxPendulums) || (h < 32) || (v < 28)) + return; + + clockFrame = 10; + QSetRect(&bounds, 0, 0, 32, 28 * kNumPendulums); + savedNum = BackUpToSavedMap(&bounds, where, who); + if (savedNum != -1) + { + QSetRect(&src, 0, 0, 32, 28); + if ((thisMac.isDepth == 4) && ((h % 2) == 1)) + { + h--; + if (h < 0) + h += 2; + } + QOffsetRect(&src, h, v); + BackUpPendulum (&src, savedNum); + pendulums[numPendulums].dest = src; + pendulums[numPendulums].mode = 1; + if (RandomInt(2) == 0) + pendulums[numPendulums].toOrFro = true; + else + pendulums[numPendulums].toOrFro = false; + pendulums[numPendulums].active = true; + QSetRect(&pendulums[numPendulums].src, 0, 0, 32, 28); + QOffsetRect(&pendulums[numPendulums].src, 0, 28); + pendulums[numPendulums].who = savedNum; + pendulums[numPendulums].where = where; + pendulums[numPendulums].link = who; + numPendulums++; + } +} + +//-------------------------------------------------------------- BackUpStar + +// Makes a copy of background beneath a star. + +void BackUpStar (Rect *src, short index) +{ + Rect dest; + short i; + + QSetRect(&dest, 0, 0, 32, 31); + for (i = 0; i < 6; i++) + { + CopyBits((BitMap *)*GetGWorldPixMap(backSrcMap), + GetPortBitMapForCopyBits(savedMaps[index].map), + src, &dest, srcCopy, nil); + + // copy flame to map + CopyMask((BitMap *)*GetGWorldPixMap(bonusSrcMap), + (BitMap *)*GetGWorldPixMap(bonusMaskMap), + GetPortBitMapForCopyBits(savedMaps[index].map), + &starSrc[i], &starSrc[i], &dest); + + QOffsetRect(&dest, 0, 31); + } +} + +//-------------------------------------------------------------- ReBackUpStar + +// Re-backs up the stars - in the event of lighting switch. + +void ReBackUpStar (short where, short who) +{ + short i, f; + + for (i = 0; i < numSavedMaps; i++) + { + if ((savedMaps[i].where == where) && (savedMaps[i].who == who)) + { + for (f = 0; f < numStars; f++) + { + if (theStars[f].who == i) + { + BackUpStar(&theStars[f].dest, i); + return; + } + } + } + } +} + +//-------------------------------------------------------------- AddStar + +// Adds a star to the star array. + +void AddStar (short where, short who, short h, short v) +{ + Rect src, bounds; + short savedNum; + + if (numStars >= kMaxStars) + return; + + QSetRect(&src, 0, 0, 32, 31); + if ((thisMac.isDepth == 4) && ((h % 2) == 1)) + { + h--; + if (h < 0) + h += 2; + } + QOffsetRect(&src, h, v); + + QSetRect(&bounds, 0, 0, 32, 31 * 6); + savedNum = BackUpToSavedMap(&bounds, where, who); + if (savedNum != -1) + { + BackUpStar(&src, savedNum); + theStars[numStars].dest = src; + theStars[numStars].mode = RandomInt(6); + QSetRect(&theStars[numStars].src, 0, 0, 32, 31); + QOffsetRect(&theStars[numStars].src, 0, theStars[numStars].mode * 31); + theStars[numStars].who = savedNum; + theStars[numStars].link = who; + theStars[numStars].where = where; + + numStars++; + } +} + +//-------------------------------------------------------------- StopPendulum + +// Will set a flag to kill a pendulum. + +void StopPendulum (short where, short who) +{ + short i; + + for (i = 0; i < numPendulums; i++) + { + if ((pendulums[i].link == who) && (pendulums[i].where == where)) + pendulums[i].active = false; + } +} + +//-------------------------------------------------------------- StopStar + +// Will set a flag to kill a star. + +void StopStar (short where, short who) +{ + short i; + + for (i = 0; i < numStars; i++) + { + if ((theStars[i].link == who) && (theStars[i].where == where)) + theStars[i].mode = -1; + } +} + +//-------------------------------------------------------------- AddAShreddedGlider + +// Adds a shredded glider. + +void AddAShreddedGlider (Rect *bounds) +{ + if (numShredded > kMaxShredded) + return; + + shreds[numShredded].bounds.left = bounds->left + 4; + shreds[numShredded].bounds.right = shreds[numShredded].bounds.left + 40; + shreds[numShredded].bounds.top = bounds->top + 14; + shreds[numShredded].bounds.bottom = shreds[numShredded].bounds.top; + shreds[numShredded].frame = 0; + + numShredded++; +} + +//-------------------------------------------------------------- RemoveShreds + +// Remves the shredded glider. + +void RemoveShreds (void) +{ + short largest, who, i; + + largest = 0; + who = -1; + for (i = 0; i < numShredded; i++) + { + if (shreds[i].frame > largest) + { + largest = shreds[i].frame; + who = i; + } + } + + if (who != -1) + { + if (who == (numShredded - 1)) + { + numShredded--; + shreds[who].frame = 0; + } + else + { + numShredded--; + shreds[who].bounds = shreds[numShredded].bounds; + shreds[who].frame = shreds[numShredded].frame; + shreds[numShredded].frame = 0; + } + } +} + +//-------------------------------------------------------------- ZeroFlamesAndTheLike + +// Zeroes all counters that indicate the number of flames, pendulums, etc thereÉ +// are in a room. Called before a room is drawn. As the room is drawn, theÉ +// above functions are called and the counters incremented as objects of theÉ +// specified types are drawn. + +void ZeroFlamesAndTheLike (void) +{ + numFlames = 0; + numTikiFlames = 0; + numCoals = 0; + numPendulums = 0; + numGrease = 0; + numStars = 0; + numShredded = 0; + numChimes = 0; +} + diff --git a/Headers/DynamicMaps.h b/GpApp/DynamicMaps.h old mode 100755 new mode 100644 similarity index 100% rename from Headers/DynamicMaps.h rename to GpApp/DynamicMaps.h diff --git a/GpApp/Dynamics.cpp b/GpApp/Dynamics.cpp new file mode 100644 index 0000000..d8887e2 --- /dev/null +++ b/GpApp/Dynamics.cpp @@ -0,0 +1,776 @@ + +//============================================================================ +//---------------------------------------------------------------------------- +// Dynamics.c +//---------------------------------------------------------------------------- +//============================================================================ + + +#include "Externs.h" +#include "Environ.h" +#include "MainWindow.h" +#include "Objects.h" +#include "RectUtils.h" +#include "Room.h" + + +#define kShoveVelocity 8 + + +Rect breadSrc[kNumBreadPicts]; + +extern dynaPtr dinahs; +extern bandPtr bands; +extern short numBands, tvWithMovieNumber; +extern Boolean evenFrame, twoPlayerGame, onePlayerLeft, playerDead; + + +//============================================================== Functions +//-------------------------------------------------------------- CheckDynamicCollision + +// Checks for a collision betwen the glider and one of the dynamic objects. +// For example, did the glider hit a flying piece of toast? + +void CheckDynamicCollision (short who, gliderPtr thisGlider, Boolean doOffset) +{ + Rect dinahRect; + + dinahRect = dinahs[who].dest; + if (doOffset) + QOffsetRect(&dinahRect, -playOriginH, -playOriginV); + + if (SectGlider(thisGlider, &dinahRect, true)) + { + if ((thisGlider->mode == kGliderNormal) || + (thisGlider->mode == kGliderFaceLeft) || + (thisGlider->mode == kGliderFaceRight) || + (thisGlider->mode == kGliderBurning) || + (thisGlider->mode == kGliderGoingFoil) || + (thisGlider->mode == kGliderLosingFoil)) + { + if ((foilTotal > 0) || (thisGlider->mode == kGliderLosingFoil)) + { + if (IsRectLeftOfRect(&dinahRect, &thisGlider->dest)) + thisGlider->hDesiredVel = kShoveVelocity; + else + thisGlider->hDesiredVel = -kShoveVelocity; + if (dinahs[who].vVel < 0) + thisGlider->vDesiredVel = dinahs[who].vVel; + PlayPrioritySound(kFoilHitSound, kFoilHitPriority); + if ((evenFrame) && (foilTotal > 0)) + { + foilTotal--; + if (foilTotal <= 0) + StartGliderFoilLosing(thisGlider); + } + } + else + { + StartGliderFadingOut(thisGlider); + PlayPrioritySound(kFadeOutSound, kFadeOutPriority); + } + } + } +} + +//-------------------------------------------------------------- DidBandHitDynamic + +// Checks to see if a rubber band struck a dynamic. + +Boolean DidBandHitDynamic (short who) +{ + Rect dinahRect; + short i; + Boolean collided; + + dinahRect = dinahs[who].dest; + + for (i = 0; i < numBands; i++) + { + if (bands[i].dest.bottom < dinahRect.top) + collided = false; + else if (bands[i].dest.top > dinahRect.bottom) + collided = false; + else if (bands[i].dest.right < dinahRect.left) + collided = false; + else if (bands[i].dest.left > dinahRect.right) + collided = false; + else + collided = true; + + if (collided) + break; + } + + return (collided); +} + +//-------------------------------------------------------------- RenderToast + +// The following handful of functions handle drawing specific "dynamic" objecsts. + +void RenderToast (short who) +{ + Rect src, dest; + short vClip; + + if (dinahs[who].moving) + { + dest = dinahs[who].dest; + QOffsetRect(&dest, playOriginH, playOriginV); + src = breadSrc[dinahs[who].frame]; + vClip = dinahs[who].dest.bottom - dinahs[who].hVel; + if (vClip > 0) + { + src.bottom -= vClip; + dest.bottom -= vClip; + } + + CopyMask((BitMap *)*GetGWorldPixMap(toastSrcMap), + (BitMap *)*GetGWorldPixMap(toastMaskMap), + (BitMap *)*GetGWorldPixMap(workSrcMap), + &src, &src, &dest); + + AddRectToBackRects(&dest); + dest = dinahs[who].whole; + QOffsetRect(&dest, playOriginH, playOriginV); + AddRectToWorkRects(&dest); + } +} + +//-------------------------------------------------------------- RenderBalloon + +void RenderBalloon (short who) +{ + Rect src, dest; + + if (dinahs[who].moving) + { + dest = dinahs[who].dest; + QOffsetRect(&dest, playOriginH, playOriginV); + src = balloonSrc[dinahs[who].frame]; + + CopyMask((BitMap *)*GetGWorldPixMap(balloonSrcMap), + (BitMap *)*GetGWorldPixMap(balloonMaskMap), + (BitMap *)*GetGWorldPixMap(workSrcMap), + &src, &src, &dest); + + AddRectToBackRects(&dest); + dest = dinahs[who].whole; + QOffsetRect(&dest, playOriginH, playOriginV); + AddRectToWorkRects(&dest); + } +} + +//-------------------------------------------------------------- RenderCopter + +void RenderCopter (short who) +{ + Rect src, dest; + + if (dinahs[who].moving) + { + dest = dinahs[who].dest; + QOffsetRect(&dest, playOriginH, playOriginV); + src = copterSrc[dinahs[who].frame]; + + CopyMask((BitMap *)*GetGWorldPixMap(copterSrcMap), + (BitMap *)*GetGWorldPixMap(copterMaskMap), + (BitMap *)*GetGWorldPixMap(workSrcMap), + &src, &src, &dest); + + AddRectToBackRects(&dest); + dest = dinahs[who].whole; + QOffsetRect(&dest, playOriginH, playOriginV); + AddRectToWorkRects(&dest); + } +} + +//-------------------------------------------------------------- RenderDart + +void RenderDart (short who) +{ + Rect src, dest; + + if (dinahs[who].moving) + { + dest = dinahs[who].dest; + QOffsetRect(&dest, playOriginH, playOriginV); + src = dartSrc[dinahs[who].frame]; + + CopyMask((BitMap *)*GetGWorldPixMap(dartSrcMap), + (BitMap *)*GetGWorldPixMap(dartMaskMap), + (BitMap *)*GetGWorldPixMap(workSrcMap), + &src, &src, &dest); + + AddRectToBackRects(&dest); + dest = dinahs[who].whole; + QOffsetRect(&dest, playOriginH, playOriginV); + AddRectToWorkRects(&dest); + } +} + +//-------------------------------------------------------------- RenderBall + +void RenderBall (short who) +{ + Rect src, dest; + + dest = dinahs[who].dest; + QOffsetRect(&dest, playOriginH, playOriginV); + src = ballSrc[dinahs[who].frame]; + + CopyMask((BitMap *)*GetGWorldPixMap(ballSrcMap), + (BitMap *)*GetGWorldPixMap(ballMaskMap), + (BitMap *)*GetGWorldPixMap(workSrcMap), + &src, &src, &dest); + + AddRectToBackRects(&dest); + dest = dinahs[who].whole; + QOffsetRect(&dest, playOriginH, playOriginV); + AddRectToWorkRects(&dest); +} + +//-------------------------------------------------------------- RenderDrip + +void RenderDrip (short who) +{ + Rect src, dest; + + dest = dinahs[who].dest; + QOffsetRect(&dest, playOriginH, playOriginV); + src = dripSrc[dinahs[who].frame]; + + CopyMask((BitMap *)*GetGWorldPixMap(dripSrcMap), + (BitMap *)*GetGWorldPixMap(dripMaskMap), + (BitMap *)*GetGWorldPixMap(workSrcMap), + &src, &src, &dest); + + AddRectToBackRects(&dest); + dest = dinahs[who].whole; + QOffsetRect(&dest, playOriginH, playOriginV); + AddRectToWorkRects(&dest); +} + +//-------------------------------------------------------------- RenderFish + +void RenderFish (short who) +{ + Rect src, dest; + + dest = dinahs[who].dest; + QOffsetRect(&dest, playOriginH, playOriginV); + src = fishSrc[dinahs[who].frame]; + + if (dinahs[who].moving) + { + CopyMask((BitMap *)*GetGWorldPixMap(fishSrcMap), + (BitMap *)*GetGWorldPixMap(fishMaskMap), + (BitMap *)*GetGWorldPixMap(workSrcMap), + &src, &src, &dest); + AddRectToBackRects(&dest); + dest = dinahs[who].whole; + QOffsetRect(&dest, playOriginH, playOriginV); + AddRectToWorkRects(&dest); + } + else + { + CopyBits((BitMap *)*GetGWorldPixMap(fishSrcMap), + (BitMap *)*GetGWorldPixMap(workSrcMap), + &src, &dest, srcCopy, nil); + AddRectToBackRects(&dest); + dest = dinahs[who].whole; + QOffsetRect(&dest, playOriginH, playOriginV); + AddRectToWorkRects(&dest); + } +} + +//-------------------------------------------------------------- HandleSparkleObject + +// The following handful of functions are called each game frame and handleÉ +// the movement and state of the various types of dynamic objects. + +void HandleSparkleObject (short who) +{ + Rect tempRect; + + if (dinahs[who].active) // is it on? + { + if (dinahs[who].frame <= 0) // is it idle? + { // it is idle + dinahs[who].timer--; + if (dinahs[who].timer <= 0) + { + dinahs[who].timer = RandomInt(240) + 60;// reset timer + dinahs[who].frame = kNumSparkleModes; // time to sparkle + tempRect = dinahs[who].dest; + AddSparkle(&tempRect); + PlayPrioritySound(kMysticSound, kMysticPriority); + } + } + else // it's sparkling + dinahs[who].frame--; + } + else + { + } +} + +//-------------------------------------------------------------- HandleToast + +void HandleToast (short who) +{ + Rect dest; + + if (dinahs[who].moving) + { + if (evenFrame) + { + dinahs[who].frame++; + if (dinahs[who].frame >= kNumBreadPicts) + dinahs[who].frame = 0; + } + if (twoPlayerGame) + { + if (onePlayerLeft) + { + if (playerDead == theGlider.which) + CheckDynamicCollision(who, &theGlider2, false); + else + CheckDynamicCollision(who, &theGlider, false); + } + else + { + CheckDynamicCollision(who, &theGlider, false); + CheckDynamicCollision(who, &theGlider2, false); + } + } + else + CheckDynamicCollision(who, &theGlider, false); + VOffsetRect(&dinahs[who].dest, dinahs[who].vVel); + dinahs[who].whole = dinahs[who].dest; + if (dinahs[who].vVel > 0) + dinahs[who].whole.top -= dinahs[who].vVel; + else + dinahs[who].whole.bottom -= dinahs[who].vVel; + dinahs[who].vVel++; // falls + if (dinahs[who].vVel > dinahs[who].count) + { + dest = dinahs[who].whole; + QOffsetRect(&dest, playOriginH, playOriginV); + AddRectToWorkRects(&dest); + dinahs[who].moving = false; + dinahs[who].frame = dinahs[who].timer; + PlayPrioritySound(kToastLandSound, kToastLandPriority); + } + } + else + { + if (dinahs[who].active) + dinahs[who].frame--; + if (dinahs[who].frame <= 0) + { + if (dinahs[who].active) + { + dinahs[who].vVel = (short)-dinahs[who].count; + dinahs[who].frame = 0; + dinahs[who].moving = true; + PlayPrioritySound(kToastLaunchSound, kToastLaunchPriority); + } + else + dinahs[who].frame = dinahs[who].timer; + } + } +} + +//-------------------------------------------------------------- HandleMacPlus + +void HandleMacPlus (short who) +{ + if (dinahs[who].timer > 0) + { + dinahs[who].timer--; + if (dinahs[who].active) + { + if (dinahs[who].timer == 0) + AddRectToWorkRects(&dinahs[who].dest); + else if (dinahs[who].timer == 1) + { + PlayPrioritySound(kMacBeepSound, kMacBeepPriority); + CopyBits((BitMap *)*GetGWorldPixMap(applianceSrcMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &plusScreen2, &dinahs[who].dest, + srcCopy, nil); + AddRectToBackRects(&dinahs[who].dest); + } + else if (dinahs[who].timer == 30) + PlayPrioritySound(kMacOnSound, kMacOnPriority); + } + else + { + if (dinahs[who].timer == 0) + AddRectToWorkRects(&dinahs[who].dest); + else if (dinahs[who].timer == 1) + { + PlayPrioritySound(kMacOffSound, kMacOffPriority); + CopyBits((BitMap *)*GetGWorldPixMap(applianceSrcMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &plusScreen1, &dinahs[who].dest, + srcCopy, nil); + AddRectToBackRects(&dinahs[who].dest); + } + } + } +} + +//-------------------------------------------------------------- HandleTV + +void HandleTV (short who) +{ + if (dinahs[who].timer > 0) + { + dinahs[who].timer--; + if (dinahs[who].active) + { + if (dinahs[who].timer == 0) + { + if ((thisMac.hasQT) && (hasMovie) && (tvInRoom) && + (who == tvWithMovieNumber)) + { + } + else + { + AddRectToWorkRects(&dinahs[who].dest); + } + } + else if (dinahs[who].timer == 1) + { + PlayPrioritySound(kTVOnSound, kTVOnPriority); + if ((thisMac.hasQT) && (hasMovie) && (tvInRoom) && + (who == tvWithMovieNumber)) + { + } + else + { + CopyBits((BitMap *)*GetGWorldPixMap(applianceSrcMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &tvScreen2, &dinahs[who].dest, + srcCopy, nil); + AddRectToBackRects(&dinahs[who].dest); + } + } + } + else + { + if (dinahs[who].timer == 0) + AddRectToWorkRects(&dinahs[who].dest); + else if (dinahs[who].timer == 1) + { + PlayPrioritySound(kTVOffSound, kTVOffPriority); + CopyBits((BitMap *)*GetGWorldPixMap(applianceSrcMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &tvScreen1, &dinahs[who].dest, + srcCopy, nil); + AddRectToBackRects(&dinahs[who].dest); + } + } + } +} + +//-------------------------------------------------------------- HandleCoffee + +void HandleCoffee (short who) +{ + if (dinahs[who].timer > 0) + { + dinahs[who].timer--; + if (dinahs[who].active) + { + if (dinahs[who].timer == 0) + { + AddRectToWorkRects(&dinahs[who].dest); + dinahs[who].timer = 200 + RandomInt(200); + } + else if (dinahs[who].timer == 1) + { + PlayPrioritySound(kMacOnSound, kMacOnPriority); + CopyBits((BitMap *)*GetGWorldPixMap(applianceSrcMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &coffeeLight2, &dinahs[who].dest, + srcCopy, nil); + AddRectToBackRects(&dinahs[who].dest); + } + else if (dinahs[who].timer == 100) + { + PlayPrioritySound(kCoffeeSound, kCoffeePriority); + dinahs[who].timer = 200 + RandomInt(200); + } + } + else + { + if (dinahs[who].timer == 0) + AddRectToWorkRects(&dinahs[who].dest); + else if (dinahs[who].timer == 1) + { + PlayPrioritySound(kMacOffSound, kMacOffPriority); + CopyBits((BitMap *)*GetGWorldPixMap(applianceSrcMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &coffeeLight1, &dinahs[who].dest, + srcCopy, nil); + AddRectToBackRects(&dinahs[who].dest); + } + } + } +} + +//-------------------------------------------------------------- HandleOutlet + +void HandleOutlet (short who) +{ + if (dinahs[who].position != 0) + { + dinahs[who].timer--; + + if (twoPlayerGame) + { + if (onePlayerLeft) + { + if (playerDead == theGlider.which) + CheckDynamicCollision(who, &theGlider2, false); + else + CheckDynamicCollision(who, &theGlider, false); + } + else + { + CheckDynamicCollision(who, &theGlider, true); + CheckDynamicCollision(who, &theGlider2, true); + } + } + else + CheckDynamicCollision(who, &theGlider, true); + + if (dinahs[who].timer <= 0) + { + dinahs[who].frame = 0; + dinahs[who].position = 0; + dinahs[who].timer = dinahs[who].count; + } + else + { + if ((dinahs[who].timer % 5) == 0) + PlayPrioritySound(kZapSound, kZapPriority); + dinahs[who].frame++; + if (dinahs[who].frame >= kNumOutletPicts) + dinahs[who].frame = 1; + } + + if ((dinahs[who].position != 0) || (dinahs[who].hVel > 0)) + { + CopyBits((BitMap *)*GetGWorldPixMap(applianceSrcMap), + (BitMap *)*GetGWorldPixMap(workSrcMap), + &outletSrc[dinahs[who].frame], + &dinahs[who].dest, + srcCopy, nil); + } + else + { +// SetPort((GrafPtr)workSrcMap); + PaintRect(&dinahs[who].dest); + } + AddRectToWorkRects(&dinahs[who].dest); + } + else + { + if (dinahs[who].active) + dinahs[who].timer--; + + if (dinahs[who].timer <= 0) + { + if (dinahs[who].active) + { + dinahs[who].position = 1; + dinahs[who].timer = kLengthOfZap; + PlayPrioritySound(kZapSound, kZapPriority); + } + else + dinahs[who].timer = dinahs[who].count; + } + } +} + +//-------------------------------------------------------------- HandleVCR + +void HandleVCR (short who) +{ + if (dinahs[who].timer > 0) + { + dinahs[who].timer--; + if (dinahs[who].active) + { + if (dinahs[who].timer == 0) + { + AddRectToWorkRects(&dinahs[who].dest); + dinahs[who].timer = 115; + } + else if (dinahs[who].timer == 5) + PlayPrioritySound(kMacOnSound, kMacOnPriority); + else if (dinahs[who].timer == 1) + { + PlayPrioritySound(kVCRSound, kVCRPriority); + CopyBits((BitMap *)*GetGWorldPixMap(applianceSrcMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &vcrTime2, &dinahs[who].dest, + srcCopy, nil); + AddRectToBackRects(&dinahs[who].dest); + } + else if (dinahs[who].timer == 100) + { + AddRectToWorkRects(&dinahs[who].dest); + dinahs[who].timer = 115; + dinahs[who].frame = 1 - dinahs[who].frame; + } + else if (dinahs[who].timer == 101) + { + if (dinahs[who].frame == 0) + { + CopyBits((BitMap *)*GetGWorldPixMap(applianceSrcMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &vcrTime2, &dinahs[who].dest, + srcCopy, nil); + AddRectToBackRects(&dinahs[who].dest); + } + else + { + CopyBits((BitMap *)*GetGWorldPixMap(applianceSrcMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &vcrTime1, &dinahs[who].dest, + srcCopy, nil); + AddRectToBackRects(&dinahs[who].dest); + } + } + } + else + { + if (dinahs[who].timer == 0) + AddRectToWorkRects(&dinahs[who].dest); + else if (dinahs[who].timer == 1) + { + PlayPrioritySound(kMacOffSound, kMacOffPriority); + CopyBits((BitMap *)*GetGWorldPixMap(applianceSrcMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &vcrTime1, &dinahs[who].dest, + srcCopy, nil); + AddRectToBackRects(&dinahs[who].dest); + } + } + } +} + +//-------------------------------------------------------------- HandleStereo + +void HandleStereo (short who) +{ + if (dinahs[who].timer > 0) + { + dinahs[who].timer--; + if (dinahs[who].active) + { + if (dinahs[who].timer == 0) + { + AddRectToWorkRects(&dinahs[who].dest); + ToggleMusicWhilePlaying(); + } + else if (dinahs[who].timer == 1) + { + PlayPrioritySound(kMacOnSound, kMacOnPriority); + CopyBits((BitMap *)*GetGWorldPixMap(applianceSrcMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &stereoLight2, &dinahs[who].dest, + srcCopy, nil); + AddRectToBackRects(&dinahs[who].dest); + } + } + else + { + if (dinahs[who].timer == 0) + { + AddRectToWorkRects(&dinahs[who].dest); + ToggleMusicWhilePlaying(); + } + else if (dinahs[who].timer == 1) + { + PlayPrioritySound(kMacOffSound, kMacOffPriority); + CopyBits((BitMap *)*GetGWorldPixMap(applianceSrcMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &stereoLight1, &dinahs[who].dest, + srcCopy, nil); + AddRectToBackRects(&dinahs[who].dest); + } + } + } +} + +//-------------------------------------------------------------- HandleMicrowave + +void HandleMicrowave (short who) +{ + Rect dest; + + if (dinahs[who].timer > 0) + { + dinahs[who].timer--; + if (dinahs[who].active) + { + if (dinahs[who].timer == 0) + AddRectToWorkRects(&dinahs[who].dest); + else if (dinahs[who].timer == 1) + { + PlayPrioritySound(kMacOnSound, kMacOnPriority); + dest = dinahs[who].dest; + dest.right = dest.left + 16; + CopyBits((BitMap *)*GetGWorldPixMap(applianceSrcMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + µOn, &dest, + srcCopy, nil); + QOffsetRect(&dest, 16, 0); + CopyBits((BitMap *)*GetGWorldPixMap(applianceSrcMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + µOn, &dest, + srcCopy, nil); + QOffsetRect(&dest, 16, 0); + CopyBits((BitMap *)*GetGWorldPixMap(applianceSrcMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + µOn, &dest, + srcCopy, nil); + AddRectToBackRects(&dinahs[who].dest); + } + } + else + { + if (dinahs[who].timer == 0) + AddRectToWorkRects(&dinahs[who].dest); + else if (dinahs[who].timer == 1) + { + PlayPrioritySound(kMacOffSound, kMacOffPriority); + dest = dinahs[who].dest; + dest.right = dest.left + 16; + CopyBits((BitMap *)*GetGWorldPixMap(applianceSrcMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + µOff, &dest, + srcCopy, nil); + QOffsetRect(&dest, 16, 0); + CopyBits((BitMap *)*GetGWorldPixMap(applianceSrcMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + µOff, &dest, + srcCopy, nil); + QOffsetRect(&dest, 16, 0); + CopyBits((BitMap *)*GetGWorldPixMap(applianceSrcMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + µOff, &dest, + srcCopy, nil); + AddRectToBackRects(&dinahs[who].dest); + } + } + } +} + diff --git a/GpApp/Dynamics2.cpp b/GpApp/Dynamics2.cpp new file mode 100644 index 0000000..212640f --- /dev/null +++ b/GpApp/Dynamics2.cpp @@ -0,0 +1,589 @@ + +//============================================================================ +//---------------------------------------------------------------------------- +// Dynamics2.c +//---------------------------------------------------------------------------- +//============================================================================ + + +#include "Externs.h" +#include "RectUtils.h" + + +#define kBalloonStop 8 +#define kBalloonStart 310 +#define kCopterStart 8 +#define kCopterStop 310 +#define kDartVelocity 6 +#define kDartStop 310 +#define kEnemyDropSpeed 8 + + +extern dynaPtr dinahs; +extern short numBands; +extern Boolean evenFrame, twoPlayerGame, onePlayerLeft, playerDead; + + +//============================================================== Functions +//-------------------------------------------------------------- HandleBalloon + +void HandleBalloon (short who) +{ + Rect dest; + + if (dinahs[who].moving) + { + if (dinahs[who].vVel < 0) + { + if (evenFrame) + { + dinahs[who].frame++; + if (dinahs[who].frame >= 6) + dinahs[who].frame = 0; + } + if (twoPlayerGame) + { + if (onePlayerLeft) + { + if (playerDead == theGlider.which) + CheckDynamicCollision(who, &theGlider2, false); + else + CheckDynamicCollision(who, &theGlider, false); + } + else + { + CheckDynamicCollision(who, &theGlider, false); + CheckDynamicCollision(who, &theGlider2, false); + } + } + else + CheckDynamicCollision(who, &theGlider, false); + + if ((numBands > 0) && (DidBandHitDynamic(who))) + { + dinahs[who].frame = 6; + dinahs[who].vVel = kEnemyDropSpeed; + PlayPrioritySound(kPopSound, kPopPriority); + } + else + { + VOffsetRect(&dinahs[who].dest, dinahs[who].vVel); + dinahs[who].whole = dinahs[who].dest; + dinahs[who].whole.bottom -= dinahs[who].vVel; + } + } + else + { + if (evenFrame) + { + dinahs[who].frame++; + if (dinahs[who].frame >= 8) + dinahs[who].frame = 6; + } + + VOffsetRect(&dinahs[who].dest, dinahs[who].vVel); + dinahs[who].whole = dinahs[who].dest; + dinahs[who].whole.top -= dinahs[who].vVel; + } + + if ((dinahs[who].dest.top <= kBalloonStop) || + (dinahs[who].dest.bottom >= kBalloonStart)) + { + dest = dinahs[who].whole; + QOffsetRect(&dest, playOriginH, playOriginV); + AddRectToWorkRects(&dest); + dest = dinahs[who].dest; + AddSparkle(&dest); + PlayPrioritySound(kEnemyOutSound, kEnemyOutPriority); + dinahs[who].moving = false; + dinahs[who].vVel = -2; + dinahs[who].timer = dinahs[who].count; + dinahs[who].dest.bottom = kBalloonStart; + dinahs[who].dest.top = dinahs[who].dest.bottom - + RectTall(&balloonSrc[0]); + dinahs[who].whole = dinahs[who].dest; + } + } + else // balloon is idle, waiting to appear + { + if (dinahs[who].active) + { + dinahs[who].timer--; + if (dinahs[who].timer <= 0) + { + dinahs[who].moving = true; + if (dinahs[who].count < kStartSparkle) + { + dest = dinahs[who].dest; + AddSparkle(&dest); + PlayPrioritySound(kEnemyInSound, kEnemyInPriority); + } + } + else if (dinahs[who].timer == kStartSparkle) + { + dest = dinahs[who].dest; + AddSparkle(&dest); + PlayPrioritySound(kEnemyInSound, kEnemyInPriority); + } + } + } +} + +//-------------------------------------------------------------- HandleCopter + +void HandleCopter (short who) +{ + Rect dest; + + if (dinahs[who].moving) // is 'copter about? + { + if (dinahs[who].hVel != 0) // 'copter was not shot + { + dinahs[who].frame++; + if (dinahs[who].frame >= 8) + dinahs[who].frame = 0; + if (twoPlayerGame) + { + if (onePlayerLeft) + { + if (playerDead == theGlider.which) + CheckDynamicCollision(who, &theGlider2, false); + else + CheckDynamicCollision(who, &theGlider, false); + } + else + { + CheckDynamicCollision(who, &theGlider, false); + CheckDynamicCollision(who, &theGlider2, false); + } + } + else + CheckDynamicCollision(who, &theGlider, false); + if ((numBands > 0) && (DidBandHitDynamic(who))) + { + dinahs[who].frame = 8; + dinahs[who].hVel = 0; + dinahs[who].vVel = kEnemyDropSpeed; + PlayPrioritySound(kPaperCrunchSound, kPaperCrunchPriority); + } + else + { + HOffsetRect(&dinahs[who].dest, dinahs[who].hVel); + VOffsetRect(&dinahs[who].dest, dinahs[who].vVel); + dinahs[who].whole = dinahs[who].dest; + dinahs[who].whole.top -= dinahs[who].vVel; + if (dinahs[who].hVel < 0) + dinahs[who].whole.right -= dinahs[who].hVel; + else + dinahs[who].whole.left -= dinahs[who].hVel; + } + } + else // 'copter was shot + { + dinahs[who].frame++; + if (dinahs[who].frame >= 10) + dinahs[who].frame = 8; + VOffsetRect(&dinahs[who].dest, dinahs[who].vVel); + dinahs[who].whole = dinahs[who].dest; + dinahs[who].whole.top -= dinahs[who].vVel; + } + + if ((dinahs[who].dest.top <= kCopterStart) || + (dinahs[who].dest.bottom >= kCopterStop)) + { + dest = dinahs[who].whole; + QOffsetRect(&dest, playOriginH, playOriginV); + AddRectToWorkRects(&dest); + dest = dinahs[who].dest; + AddSparkle(&dest); + PlayPrioritySound(kEnemyOutSound, kEnemyOutPriority); + dinahs[who].moving = false; + dinahs[who].vVel = 2; + if (dinahs[who].type == kCopterLf) + dinahs[who].hVel = -1; + else + dinahs[who].hVel = 1; + dinahs[who].timer = dinahs[who].count; + dinahs[who].dest.top = kCopterStart; + dinahs[who].dest.bottom = dinahs[who].dest.top + + RectTall(&copterSrc[0]); + dinahs[who].dest.left = dinahs[who].position; + dinahs[who].dest.right = dinahs[who].dest.left + 32; + dinahs[who].whole = dinahs[who].dest; + } + } + else + { + if (dinahs[who].active) + { + dinahs[who].timer--; + if (dinahs[who].timer <= 0) + { + dinahs[who].moving = true; + if (dinahs[who].count < kStartSparkle) + { + dest = dinahs[who].dest; + AddSparkle(&dest); + PlayPrioritySound(kEnemyInSound, kEnemyInPriority); + } + } + else if (dinahs[who].timer == kStartSparkle) + { + dest = dinahs[who].dest; + AddSparkle(&dest); + PlayPrioritySound(kEnemyInSound, kEnemyInPriority); + } + } + } +} + +//-------------------------------------------------------------- HandleDart + +void HandleDart (short who) +{ + Rect dest; + + if (dinahs[who].moving) // Dart has appeared + { + if (dinahs[who].hVel != 0) // meaning it isn't falling + { + if (twoPlayerGame) + { + if (onePlayerLeft) + { + if (playerDead == theGlider.which) + CheckDynamicCollision(who, &theGlider2, false); + else + CheckDynamicCollision(who, &theGlider, false); + } + else + { + CheckDynamicCollision(who, &theGlider, false); + CheckDynamicCollision(who, &theGlider2, false); + } + } + else + CheckDynamicCollision(who, &theGlider, false); + if ((numBands > 0) && (DidBandHitDynamic(who))) + { + if (dinahs[who].type == kDartLf) + dinahs[who].frame = 1; + else + dinahs[who].frame = 3; + dinahs[who].hVel = 0; + dinahs[who].vVel = kEnemyDropSpeed; + PlayPrioritySound(kPaperCrunchSound, kPaperCrunchPriority); + } + else + { + HOffsetRect(&dinahs[who].dest, dinahs[who].hVel); + VOffsetRect(&dinahs[who].dest, dinahs[who].vVel); + dinahs[who].whole = dinahs[who].dest; + dinahs[who].whole.top -= dinahs[who].vVel; + if (dinahs[who].hVel < 0) + dinahs[who].whole.right -= dinahs[who].hVel; + else + dinahs[who].whole.left -= dinahs[who].hVel; + } + } + else // dart is falling straight down + { + VOffsetRect(&dinahs[who].dest, dinahs[who].vVel); + dinahs[who].whole = dinahs[who].dest; + dinahs[who].whole.top -= dinahs[who].vVel; + } + + if ((dinahs[who].dest.left <= 0) || + (dinahs[who].dest.right >= kRoomWide) || + (dinahs[who].dest.bottom >= kDartStop)) + { + dest = dinahs[who].whole; + QOffsetRect(&dest, playOriginH, playOriginV); + AddRectToWorkRects(&dest); + dest = dinahs[who].dest; + AddSparkle(&dest); + PlayPrioritySound(kEnemyOutSound, kEnemyOutPriority); + dinahs[who].moving = false; + dinahs[who].vVel = 2; + if (dinahs[who].type == kDartLf) + { + dinahs[who].frame = 0; + dinahs[who].hVel = -kDartVelocity; + dinahs[who].dest.right = kRoomWide; + dinahs[who].dest.left = dinahs[who].dest.right - + RectWide(&dartSrc[0]); + } + else + { + dinahs[who].frame = 2; + dinahs[who].hVel = kDartVelocity; + dinahs[who].dest.left = 0; + dinahs[who].dest.right = dinahs[who].dest.left + + RectWide(&dartSrc[0]); + } + dinahs[who].timer = dinahs[who].count; + dinahs[who].dest.top = dinahs[who].position; + dinahs[who].dest.bottom = dinahs[who].dest.top + + RectTall(&dartSrc[0]); + dinahs[who].whole = dinahs[who].dest; + } + } + else + { + if (dinahs[who].active) + { + dinahs[who].timer--; + if (dinahs[who].timer <= 0) + { + dinahs[who].moving = true; + if (dinahs[who].count < kStartSparkle) + { + dest = dinahs[who].dest; + AddSparkle(&dest); + PlayPrioritySound(kEnemyInSound, kEnemyInPriority); + } + } + else if (dinahs[who].timer == kStartSparkle) + { + dest = dinahs[who].dest; + AddSparkle(&dest); + PlayPrioritySound(kEnemyInSound, kEnemyInPriority); + } + } + } +} + +//-------------------------------------------------------------- HandleBall + +void HandleBall (short who) +{ + if (twoPlayerGame) + { + if (onePlayerLeft) + { + if (playerDead == theGlider.which) + CheckDynamicCollision(who, &theGlider2, false); + else + CheckDynamicCollision(who, &theGlider, false); + } + else + { + CheckDynamicCollision(who, &theGlider, false); + CheckDynamicCollision(who, &theGlider2, false); + } + } + else + CheckDynamicCollision(who, &theGlider, false); + + if (dinahs[who].moving) // is ball bouncing? + { + VOffsetRect(&dinahs[who].dest, dinahs[who].vVel); + if (dinahs[who].dest.bottom >= dinahs[who].position) // bounce! + { + dinahs[who].whole = dinahs[who].dest; + dinahs[who].whole.top -= dinahs[who].vVel; + dinahs[who].whole.bottom = dinahs[who].position; + dinahs[who].dest.bottom = dinahs[who].position; + dinahs[who].dest.top = dinahs[who].dest.bottom - 32; + if (dinahs[who].active) + dinahs[who].vVel = dinahs[who].count; + else + { + dinahs[who].vVel = -((dinahs[who].vVel * 3) / 4); + if (dinahs[who].vVel == 0) + dinahs[who].moving = false; // stop bounce + } + if (dinahs[who].whole.bottom < dinahs[who].dest.bottom) + dinahs[who].whole.bottom = dinahs[who].dest.bottom; + PlayPrioritySound(kBounceSound, kBouncePriority); + if (dinahs[who].moving) + dinahs[who].frame = 1; + } + else + { + dinahs[who].whole = dinahs[who].dest; + if (dinahs[who].vVel > 0) + dinahs[who].whole.top -= dinahs[who].vVel; + else + dinahs[who].whole.bottom -= dinahs[who].vVel; + if (evenFrame) + dinahs[who].vVel++; + dinahs[who].frame = 0; + } + } + else + { + if (dinahs[who].active) + { + dinahs[who].vVel = dinahs[who].count; + dinahs[who].moving = true; + evenFrame = true; + } + } +} + +//-------------------------------------------------------------- HandleDrip + +void HandleDrip (short who) +{ + Rect dest; + + if (dinahs[who].moving) + { + if (evenFrame) + dinahs[who].frame = 9 - dinahs[who].frame; + if (twoPlayerGame) + { + if (onePlayerLeft) + { + if (playerDead == theGlider.which) + CheckDynamicCollision(who, &theGlider2, false); + else + CheckDynamicCollision(who, &theGlider, false); + } + else + { + CheckDynamicCollision(who, &theGlider, false); + CheckDynamicCollision(who, &theGlider2, false); + } + } + else + CheckDynamicCollision(who, &theGlider, false); + + VOffsetRect(&dinahs[who].dest, dinahs[who].vVel); + if (dinahs[who].dest.bottom >= dinahs[who].position) + { + dest = dinahs[who].whole; + QOffsetRect(&dest, playOriginH, playOriginV); + AddRectToWorkRects(&dest); + dinahs[who].dest.top = dinahs[who].hVel; + dinahs[who].dest.bottom = dinahs[who].dest.top + 12; + PlayPrioritySound(kDropSound, kDropPriority); + dinahs[who].vVel = 0; + dinahs[who].timer = dinahs[who].count; + dinahs[who].frame = 3; + dinahs[who].moving = false; + } + else + { + dinahs[who].whole = dinahs[who].dest; + dinahs[who].whole.top -= dinahs[who].vVel; + if (evenFrame) + dinahs[who].vVel++; + } + } + else + { + if (dinahs[who].active) + { + dinahs[who].timer--; + + if (dinahs[who].timer == 6) + dinahs[who].frame = 0; + else if (dinahs[who].timer == 4) + dinahs[who].frame = 1; + else if (dinahs[who].timer == 2) + dinahs[who].frame = 2; + else if (dinahs[who].timer <= 0) + { + VOffsetRect(&dinahs[who].dest, 3); + dinahs[who].whole = dinahs[who].dest; + dinahs[who].moving = true; + dinahs[who].frame = 4; + PlayPrioritySound(kDripSound, kDripPriority); + } + } + } +} + +//-------------------------------------------------------------- HandleFish + +void HandleFish (short who) +{ + Rect dest; + + if (dinahs[who].moving) // fish leaping + { + if ((dinahs[who].vVel >= 0) && (dinahs[who].frame < 7)) + dinahs[who].frame++; + if (twoPlayerGame) + { + if (onePlayerLeft) + { + if (playerDead == theGlider.which) + CheckDynamicCollision(who, &theGlider2, false); + else + CheckDynamicCollision(who, &theGlider, false); + } + else + { + CheckDynamicCollision(who, &theGlider, false); + CheckDynamicCollision(who, &theGlider2, false); + } + } + else + CheckDynamicCollision(who, &theGlider, false); + + VOffsetRect(&dinahs[who].dest, dinahs[who].vVel); + if (dinahs[who].dest.bottom >= dinahs[who].position) // splash down + { + dest = dinahs[who].whole; + QOffsetRect(&dest, playOriginH, playOriginV); + AddRectToWorkRects(&dest); + dinahs[who].dest.bottom = dinahs[who].position; + dinahs[who].dest.top = dinahs[who].dest.bottom - 16; + dinahs[who].whole = dinahs[who].dest; + dinahs[who].whole.top -= 2; + PlayPrioritySound(kDropSound, kDropPriority); + dinahs[who].vVel = dinahs[who].count; + dinahs[who].timer = dinahs[who].hVel; + dinahs[who].frame = 0; + dinahs[who].moving = false; + PlayPrioritySound(kFishInSound, kFishInPriority); + } + else + { + dinahs[who].whole = dinahs[who].dest; + if (dinahs[who].vVel > 0) + dinahs[who].whole.top -= dinahs[who].vVel; + else + dinahs[who].whole.bottom -= dinahs[who].vVel; + if (evenFrame) + dinahs[who].vVel++; + } + } + else // fish idle + { + dinahs[who].whole = dinahs[who].dest; + if ((dinahs[who].timer & 0x0003) == 0x0003) + { + dinahs[who].frame++; + if (dinahs[who].frame > 3) + dinahs[who].frame = 0; + if ((dinahs[who].frame == 1) || (dinahs[who].frame == 2)) + { + dinahs[who].dest.top++; + dinahs[who].dest.bottom++; + dinahs[who].whole.bottom++; + } + else + { + dinahs[who].dest.top--; + dinahs[who].dest.bottom--; + dinahs[who].whole.top--; + } + } + if (dinahs[who].active) + { + dinahs[who].timer--; + if (dinahs[who].timer <= 0) // fish leaps + { + dinahs[who].whole = dinahs[who].dest; + dinahs[who].moving = true; + dinahs[who].frame = 4; + PlayPrioritySound(kFishOutSound, kFishOutPriority); + } + } + } +} + diff --git a/GpApp/Dynamics3.cpp b/GpApp/Dynamics3.cpp new file mode 100644 index 0000000..5011153 --- /dev/null +++ b/GpApp/Dynamics3.cpp @@ -0,0 +1,555 @@ + +//============================================================================ +//---------------------------------------------------------------------------- +// Dynamics3.c +//---------------------------------------------------------------------------- +//============================================================================ + + +#include "Externs.h" +#include "RectUtils.h" + + +#define kBalloonStart 310 +#define kCopterStart 8 +#define kDartVelocity 6 + + +dynaPtr dinahs; +short numDynamics; + +extern Rect breadSrc[]; +extern short numLights; +extern Boolean evenFrame; + + +//============================================================== Functions +//-------------------------------------------------------------- HandleDynamics + +// This is the master function that calls all the specific handlers above. + +void HandleDynamics (void) +{ + short i; + + for (i = 0; i < numDynamics; i++) + { + switch (dinahs[i].type) + { + case kSparkle: + HandleSparkleObject(i); + break; + + case kToaster: + HandleToast(i); + break; + + case kMacPlus: + HandleMacPlus(i); + break; + + case kTV: + HandleTV(i); + break; + + case kCoffee: + HandleCoffee(i); + break; + + case kOutlet: + HandleOutlet(i); + break; + + case kVCR: + HandleVCR(i); + break; + + case kStereo: + HandleStereo(i); + break; + + case kMicrowave: + HandleMicrowave(i); + break; + + case kBalloon: + HandleBalloon(i); + break; + + case kCopterLf: + case kCopterRt: + HandleCopter(i); + break; + + case kDartLf: + case kDartRt: + HandleDart(i); + break; + + case kBall: + HandleBall(i); + break; + + case kDrip: + HandleDrip(i); + break; + + case kFish: + HandleFish(i); + break; + + default: + break; + } + } +} + +//-------------------------------------------------------------- HandleDynamics + +// This is the master function that calls all the various rendering handlersÉ +// above. + +void RenderDynamics (void) +{ + short i; + + for (i = 0; i < numDynamics; i++) + { + switch (dinahs[i].type) + { + case kToaster: + RenderToast(i); + break; + + case kBalloon: + RenderBalloon(i); + break; + + case kCopterLf: + case kCopterRt: + RenderCopter(i); + break; + + case kDartLf: + case kDartRt: + RenderDart(i); + break; + + case kBall: + RenderBall(i); + break; + + case kDrip: + RenderDrip(i); + break; + + case kFish: + RenderFish(i); + break; + + default: + break; + } + } +} + +//-------------------------------------------------------------- ZeroDinahs + +// This clears all dynamics - zeros them all out. Used to initialize them. + +void ZeroDinahs (void) +{ + short i; + + for (i = 0; i < kMaxDynamicObs; i++) + { + dinahs[i].type = kObjectIsEmpty; + QSetRect(&dinahs[i].dest, 0, 0, 0, 0); + QSetRect(&dinahs[i].whole, 0, 0, 0, 0); + dinahs[i].hVel = 0; + dinahs[i].vVel = 0; + dinahs[i].count = 0; + dinahs[i].frame = 0; + dinahs[i].timer = 0; + dinahs[i].position = 0; + dinahs[i].room = 0; + dinahs[i].byte0 = 0; + dinahs[i].active = false; + } + numDynamics = 0; +} + +//-------------------------------------------------------------- AddDynamicObject + +// When a room is being drawn, various dynamic objects are pointed here. +// This function sets up the structures to handle them. + +short AddDynamicObject (short what, Rect *where, objectType *who, + short room, short index, Boolean isOn) +{ + short position, velocity; + Boolean lilFrame; + + if (numDynamics >= kMaxDynamicObs) + return (-1); + + dinahs[numDynamics].type = what; + switch (what) + { + case kSparkle: + dinahs[numDynamics].dest = sparkleSrc[0]; + ZeroRectCorner(&dinahs[numDynamics].dest); + QOffsetRect(&dinahs[numDynamics].dest, where->left, where->top); + dinahs[numDynamics].whole = dinahs[numDynamics].dest; + dinahs[numDynamics].hVel = 0; + dinahs[numDynamics].vVel = 0; + dinahs[numDynamics].count = 0; + dinahs[numDynamics].frame = 0; + dinahs[numDynamics].timer = RandomInt(60) + 15; + dinahs[numDynamics].position = 0; + dinahs[numDynamics].room = room; + dinahs[numDynamics].byte0 = (Byte)index; + dinahs[numDynamics].byte1 = 0; + dinahs[numDynamics].moving = false; + dinahs[numDynamics].active = isOn; + break; + + case kToaster: + dinahs[numDynamics].dest = breadSrc[0]; + CenterRectInRect(&dinahs[numDynamics].dest, where); + VOffsetRect(&dinahs[numDynamics].dest, + where->top - dinahs[numDynamics].dest.top); + dinahs[numDynamics].whole = dinahs[numDynamics].dest; + dinahs[numDynamics].hVel = where->top + 2; // hVel used as clip + position = who->data.g.height; // reverse engineer init. vel. + velocity = 0; + do + { + velocity++; + position -= velocity; + } + while (position > 0); + dinahs[numDynamics].vVel = -velocity; + dinahs[numDynamics].count = velocity; // count = initial velocity + dinahs[numDynamics].frame = (short)who->data.g.delay * 3; + dinahs[numDynamics].timer = dinahs[numDynamics].frame; + dinahs[numDynamics].position = 0; // launch/idle state + dinahs[numDynamics].room = room; + dinahs[numDynamics].byte0 = (Byte)index; + dinahs[numDynamics].byte1 = 0; + dinahs[numDynamics].moving = false; + dinahs[numDynamics].active = isOn; + break; + + case kMacPlus: + dinahs[numDynamics].dest = plusScreen1; + ZeroRectCorner(&dinahs[numDynamics].dest); + QOffsetRect(&dinahs[numDynamics].dest, + where->left + playOriginH + 10, + where->top + playOriginV + 7); + dinahs[numDynamics].whole = dinahs[numDynamics].dest; + dinahs[numDynamics].hVel = 0; + dinahs[numDynamics].vVel = 0; + dinahs[numDynamics].count = 0; + dinahs[numDynamics].frame = 0; + dinahs[numDynamics].timer = 0; + dinahs[numDynamics].position = 0; + dinahs[numDynamics].room = room; + dinahs[numDynamics].byte0 = (Byte)index; + dinahs[numDynamics].byte1 = 0; + dinahs[numDynamics].moving = false; + dinahs[numDynamics].active = isOn; + break; + + case kTV: + dinahs[numDynamics].dest = tvScreen1; + ZeroRectCorner(&dinahs[numDynamics].dest); + QOffsetRect(&dinahs[numDynamics].dest, + where->left + playOriginH + 17, + where->top + playOriginV + 10); + dinahs[numDynamics].whole = dinahs[numDynamics].dest; + dinahs[numDynamics].hVel = 0; + dinahs[numDynamics].vVel = 0; + dinahs[numDynamics].count = 0; + dinahs[numDynamics].frame = 0; + dinahs[numDynamics].timer = 0; + dinahs[numDynamics].position = 0; + dinahs[numDynamics].room = room; + dinahs[numDynamics].byte0 = (Byte)index; + dinahs[numDynamics].byte1 = 0; + dinahs[numDynamics].moving = false; + dinahs[numDynamics].active = isOn; + break; + + case kCoffee: + dinahs[numDynamics].dest = coffeeLight1; + ZeroRectCorner(&dinahs[numDynamics].dest); + QOffsetRect(&dinahs[numDynamics].dest, + where->left + playOriginH + 32, + where->top + playOriginV + 57); + dinahs[numDynamics].whole = dinahs[numDynamics].dest; + dinahs[numDynamics].hVel = 0; + dinahs[numDynamics].vVel = 0; + dinahs[numDynamics].count = 0; + dinahs[numDynamics].frame = 0; + if (isOn) + dinahs[numDynamics].timer = 200; + else + dinahs[numDynamics].timer = 0; + dinahs[numDynamics].position = 0; + dinahs[numDynamics].room = room; + dinahs[numDynamics].byte0 = (Byte)index; + dinahs[numDynamics].byte1 = 0; + dinahs[numDynamics].moving = false; + dinahs[numDynamics].active = isOn; + break; + + case kOutlet: + dinahs[numDynamics].dest = outletSrc[0]; + ZeroRectCorner(&dinahs[numDynamics].dest); + QOffsetRect(&dinahs[numDynamics].dest, + where->left + playOriginH, + where->top + playOriginV); + dinahs[numDynamics].whole = dinahs[numDynamics].dest; + dinahs[numDynamics].hVel = numLights; + dinahs[numDynamics].vVel = 0; + dinahs[numDynamics].count = ((short)who->data.g.delay * 6) / kTicksPerFrame; + dinahs[numDynamics].frame = 0; + dinahs[numDynamics].timer = dinahs[numDynamics].count; + dinahs[numDynamics].position = 0; // launch/idle state + dinahs[numDynamics].room = room; + dinahs[numDynamics].byte0 = (Byte)index; + dinahs[numDynamics].byte1 = 0; + dinahs[numDynamics].moving = false; + dinahs[numDynamics].active = isOn; + break; + + case kVCR: + dinahs[numDynamics].dest = vcrTime1; + ZeroRectCorner(&dinahs[numDynamics].dest); + QOffsetRect(&dinahs[numDynamics].dest, + where->left + playOriginH + 64, + where->top + playOriginV + 6); + dinahs[numDynamics].whole = dinahs[numDynamics].dest; + dinahs[numDynamics].hVel = 0; + dinahs[numDynamics].vVel = 0; + dinahs[numDynamics].count = 0; + dinahs[numDynamics].frame = 0; + if (isOn) + dinahs[numDynamics].timer = 115; + else + dinahs[numDynamics].timer = 0; + dinahs[numDynamics].position = 0; + dinahs[numDynamics].room = room; + dinahs[numDynamics].byte0 = (Byte)index; + dinahs[numDynamics].byte1 = 0; + dinahs[numDynamics].moving = false; + dinahs[numDynamics].active = isOn; + break; + + case kStereo: + dinahs[numDynamics].dest = stereoLight1; + ZeroRectCorner(&dinahs[numDynamics].dest); + QOffsetRect(&dinahs[numDynamics].dest, + where->left + playOriginH + 56, + where->top + playOriginV + 20); + dinahs[numDynamics].whole = dinahs[numDynamics].dest; + dinahs[numDynamics].hVel = 0; + dinahs[numDynamics].vVel = 0; + dinahs[numDynamics].count = 0; + dinahs[numDynamics].frame = 0; + dinahs[numDynamics].timer = 0; + dinahs[numDynamics].position = 0; + dinahs[numDynamics].room = room; + dinahs[numDynamics].byte0 = (Byte)index; + dinahs[numDynamics].byte1 = 0; + dinahs[numDynamics].moving = false; + dinahs[numDynamics].active = isOn; + break; + + case kMicrowave: + dinahs[numDynamics].dest = microOn; + ZeroRectCorner(&dinahs[numDynamics].dest); + QOffsetRect(&dinahs[numDynamics].dest, + where->left + playOriginH + 14, + where->top + playOriginV + 13); + dinahs[numDynamics].dest.right = dinahs[numDynamics].dest.left + 48; + dinahs[numDynamics].whole = dinahs[numDynamics].dest; + dinahs[numDynamics].hVel = 0; + dinahs[numDynamics].vVel = 0; + dinahs[numDynamics].count = 0; + dinahs[numDynamics].frame = 0; + dinahs[numDynamics].timer = 0; + dinahs[numDynamics].position = 0; + dinahs[numDynamics].room = room; + dinahs[numDynamics].byte0 = (Byte)index; + dinahs[numDynamics].byte1 = 0; + dinahs[numDynamics].moving = false; + dinahs[numDynamics].active = isOn; + break; + + case kBalloon: + dinahs[numDynamics].dest = balloonSrc[0]; + ZeroRectCorner(&dinahs[numDynamics].dest); + QOffsetRect(&dinahs[numDynamics].dest, where->left, 0); + dinahs[numDynamics].dest.bottom = kBalloonStart; + dinahs[numDynamics].dest.top = dinahs[numDynamics].dest.bottom - + RectTall(&balloonSrc[0]); + dinahs[numDynamics].whole = dinahs[numDynamics].dest; + dinahs[numDynamics].hVel = 0; + dinahs[numDynamics].vVel = -2; + dinahs[numDynamics].count = ((short)who->data.h.delay * 6) / kTicksPerFrame; + dinahs[numDynamics].frame = 0; + dinahs[numDynamics].timer = dinahs[numDynamics].count; + dinahs[numDynamics].position = 0; + dinahs[numDynamics].room = room; + dinahs[numDynamics].byte0 = (Byte)index; + dinahs[numDynamics].byte1 = 0; + dinahs[numDynamics].moving = false; + dinahs[numDynamics].active = isOn; // initially idle + break; + + case kCopterLf: + case kCopterRt: + dinahs[numDynamics].dest = copterSrc[0]; + ZeroRectCorner(&dinahs[numDynamics].dest); + QOffsetRect(&dinahs[numDynamics].dest, where->left, 0); + dinahs[numDynamics].dest.top = kCopterStart; + dinahs[numDynamics].dest.bottom = dinahs[numDynamics].dest.top + + RectTall(&copterSrc[0]); + dinahs[numDynamics].whole = dinahs[numDynamics].dest; + if (what == kCopterLf) + dinahs[numDynamics].hVel = -1; + else + dinahs[numDynamics].hVel = 1; + dinahs[numDynamics].vVel = 2; + dinahs[numDynamics].count = ((short)who->data.h.delay * 6) / kTicksPerFrame; + dinahs[numDynamics].frame = 0; + dinahs[numDynamics].timer = dinahs[numDynamics].count; + dinahs[numDynamics].position = dinahs[numDynamics].dest.left; + dinahs[numDynamics].room = room; + dinahs[numDynamics].byte0 = (Byte)index; + dinahs[numDynamics].byte1 = 0; + dinahs[numDynamics].moving = false; + dinahs[numDynamics].active = isOn; // initially idle + break; + + case kDartLf: + case kDartRt: + dinahs[numDynamics].dest = dartSrc[0]; + ZeroRectCorner(&dinahs[numDynamics].dest); + if (what == kDartLf) + { + QOffsetRect(&dinahs[numDynamics].dest, + kRoomWide - RectWide(&dartSrc[0]), where->top); + dinahs[numDynamics].hVel = -kDartVelocity; + dinahs[numDynamics].frame = 0; + } + else + { + QOffsetRect(&dinahs[numDynamics].dest, 0, where->top); + dinahs[numDynamics].hVel = kDartVelocity; + dinahs[numDynamics].frame = 2; + } + dinahs[numDynamics].whole = dinahs[numDynamics].dest; + dinahs[numDynamics].vVel = 2; + dinahs[numDynamics].count = ((short)who->data.h.delay * 6) / kTicksPerFrame; + dinahs[numDynamics].timer = dinahs[numDynamics].count; + dinahs[numDynamics].position = dinahs[numDynamics].dest.top; + dinahs[numDynamics].byte0 = (Byte)index; + dinahs[numDynamics].byte1 = 0; + dinahs[numDynamics].moving = false; + dinahs[numDynamics].active = isOn; // initially idle + break; + + case kBall: + dinahs[numDynamics].dest = ballSrc[0]; + ZeroRectCorner(&dinahs[numDynamics].dest); + QOffsetRect(&dinahs[numDynamics].dest, + where->left, where->top); + dinahs[numDynamics].whole = dinahs[numDynamics].dest; + dinahs[numDynamics].hVel = 0; + position = who->data.h.length; // reverse engineer init. vel. + velocity = 0; + evenFrame = true; + lilFrame = true; + do + { + if (lilFrame) + velocity++; + lilFrame = !lilFrame; + position -= velocity; + } + while (position > 0); + dinahs[numDynamics].vVel = -velocity; + dinahs[numDynamics].moving = false; + dinahs[numDynamics].count = -velocity; // count = initial velocity + dinahs[numDynamics].frame = 0; + dinahs[numDynamics].timer = 0; + dinahs[numDynamics].position = dinahs[numDynamics].dest.bottom; + dinahs[numDynamics].room = room; + dinahs[numDynamics].byte0 = (Byte)index; + dinahs[numDynamics].byte1 = 0; + dinahs[numDynamics].active = isOn; + break; + + case kDrip: + dinahs[numDynamics].dest = dripSrc[0]; + CenterRectInRect(&dinahs[numDynamics].dest, where); + VOffsetRect(&dinahs[numDynamics].dest, + where->top - dinahs[numDynamics].dest.top); + dinahs[numDynamics].whole = dinahs[numDynamics].dest; + dinahs[numDynamics].hVel = dinahs[numDynamics].dest.top; // remember + dinahs[numDynamics].vVel = 0; + dinahs[numDynamics].count = ((short)who->data.h.delay * 6) / kTicksPerFrame; + dinahs[numDynamics].frame = 3; + dinahs[numDynamics].timer = dinahs[numDynamics].count; + dinahs[numDynamics].position = dinahs[numDynamics].dest.top + + who->data.h.length; + dinahs[numDynamics].room = room; + dinahs[numDynamics].byte0 = (Byte)index; + dinahs[numDynamics].byte1 = 0; + dinahs[numDynamics].moving = false; + dinahs[numDynamics].active = isOn; + break; + + case kFish: + dinahs[numDynamics].dest = fishSrc[0]; + QOffsetRect(&dinahs[numDynamics].dest, + where->left + 10, where->top + 8); + dinahs[numDynamics].whole = dinahs[numDynamics].dest; + dinahs[numDynamics].hVel = ((short)who->data.h.delay * 6) / kTicksPerFrame; + position = who->data.g.height; // reverse engineer init. vel. + velocity = 0; + evenFrame = true; + lilFrame = true; + do + { + if (lilFrame) + velocity++; + lilFrame = !lilFrame; + position -= velocity; + } + while (position > 0); + dinahs[numDynamics].vVel = -velocity; + dinahs[numDynamics].count = -velocity; // count = initial velocity + dinahs[numDynamics].frame = 0; + dinahs[numDynamics].timer = dinahs[numDynamics].hVel; + dinahs[numDynamics].position = dinahs[numDynamics].dest.bottom; + dinahs[numDynamics].room = room; + dinahs[numDynamics].byte0 = (Byte)index; + dinahs[numDynamics].byte1 = 0; + dinahs[numDynamics].moving = false; + dinahs[numDynamics].active = isOn; + break; + + default: + return (-1); + break; + } + + numDynamics++; + + return (numDynamics - 1); +} + diff --git a/GpApp/Environ.cpp b/GpApp/Environ.cpp new file mode 100644 index 0000000..6f45c19 --- /dev/null +++ b/GpApp/Environ.cpp @@ -0,0 +1,492 @@ + +//============================================================================ +//---------------------------------------------------------------------------- +// Environ.c +//---------------------------------------------------------------------------- +//============================================================================ + + +#include "PLResources.h" +#include "PLPasStr.h" +#include "Externs.h" +#include "Environ.h" +#include "HostDisplayDriver.h" + + +#define kSwitchDepthAlert 130 +#define kSetMemoryAlert 180 +#define kLowMemoryAlert 181 +#define kWNETrap 0x60 +#define kSetDepthTrap 0xA2 +#define kUnimpTrap 0x9F +#define kGestaltTrap 0xAD + +#define kDisplay9Inch 1 +#define kDisplay12Inch 2 +#define kDisplay13Inch 3 + + +typedef struct +{ + short flags; + long mem1; + long mem2; +} sizeType; + + +//short GetThisVolumeRefNum (void); +//long GetThisCurrentDirectoryID (void); +//Boolean TrapExists (short); +//Boolean DoWeHaveGestalt (void); +//Boolean DoWeHaveWNE (void); +//Boolean DoWeHaveColor (void); +//Boolean DoWeHaveSystem602 (void); +//Boolean DoWeHaveSystem605 (void); +//Boolean DoWeHaveSystem7 (void); +//Boolean DoWeHaveSoundManager3 (void); +Boolean DoWeHaveQuickTime (void); +Boolean DoWeHaveDragManager (void); +//Boolean CanWeDisplay4Bit (GDHandle); +//Boolean CanWeDisplay1Bit (GDHandle); +short HowManyUsableScreens (Boolean, Boolean, Boolean); +void GetDeviceRect (Rect *); +Boolean AreWeColorOrGrayscale (void); +void SwitchDepthOrAbort (void); + + +macEnviron thisMac; + +extern short isDepthPref; +extern Boolean dontLoadMusic, dontLoadSounds; + + +//============================================================== Functions +//-------------------------------------------------------------- GetThisVolumeRefNum +// Get a hard reference number for the current drive volume this app is on. +/* +short GetThisVolumeRefNum (void) +{ + OSErr theErr; + short vRef; + + theErr = GetVol(nil, &vRef); + return (vRef); +} +*/ +//-------------------------------------------------------------- GetThisCurrentDirectoryID +// Get a hard ID number for the current directory volume this app is in. +/* +long GetThisCurrentDirectoryID (void) +{ + long dirID; + + dirID = LMGetCurDirStore(); + return (dirID); +} +*/ +//-------------------------------------------------------------- TrapExists +// Returns whether or not a ToolBox trap exists for the users ROMs/System. +/* +Boolean TrapExists (short trapNumber) +{ + return ((NGetTrapAddress(trapNumber, ToolTrap) != + NGetTrapAddress(kUnimpTrap, ToolTrap))); +} +*/ +//-------------------------------------------------------------- DoWeHaveGestalt + +// Specifically tests for the availablity of the Gestalt() trap. +/* +Boolean DoWeHaveGestalt (void) +{ + return (TrapExists(kGestaltTrap)); +} +*/ +//-------------------------------------------------------------- DoWeHaveWNE + +// Specifically tests for the availablity of the WaitNextEvent() trap. +/* +Boolean DoWeHaveWNE (void) +{ + return (TrapExists(kWNETrap)); +} +*/ +//-------------------------------------------------------------- DoWeHaveColor +// Determines if ROMs support Color QuickDraw (monitor not neccessarily color). +/* +Boolean DoWeHaveColor (void) +{ + SysEnvRec thisWorld; + + SysEnvirons(2, &thisWorld); + return (thisWorld.hasColorQD); +} +*/ +//-------------------------------------------------------------- DoWeHaveSystem602 +// Determines if the System version is at least 6.0.2 or more recent. +/* +Boolean DoWeHaveSystem602 (void) +{ + SysEnvRec thisWorld; + Boolean haveIt; + + SysEnvirons(2, &thisWorld); + if (thisWorld.systemVersion >= 0x0602) + haveIt = true; + else + haveIt = false; + return (haveIt); +} +*/ +//-------------------------------------------------------------- DoWeHaveSystem605 +// Determines if the System version is at least 6.0.5 or more recent. +/* +Boolean DoWeHaveSystem605 (void) +{ + SysEnvRec thisWorld; + Boolean haveIt; + + SysEnvirons(2, &thisWorld); + if (thisWorld.systemVersion >= 0x0605) + haveIt = true; + else + haveIt = false; + return (haveIt); +} +/ +//-------------------------------------------------------------- DoWeHaveSystem7 + +// Determines if the System version is at least 7.0.0 or more recent. + +Boolean DoWeHaveSystem7 (void) +{ + SysEnvRec thisWorld; + Boolean haveIt; + + SysEnvirons(2, &thisWorld); + if (thisWorld.systemVersion >= 0x0700) + haveIt = true; + else + haveIt = false; + return (haveIt); +} + +//-------------------------------------------------------------- DoWeHaveSoundManager3 +// Determines if the Sound Manager version is at least 3.0.0 or more recent. +/* +Boolean DoWeHaveSoundManager3 (void) +{ +// NumVersion version; + Boolean hasIt; + + hasIt = true; + + version = SndSoundManagerVersion(); + hasIt = (version.majorRev >= 3); + + return hasIt; +} +*/ +//-------------------------------------------------------------- DoWeHaveQuickTime + +Boolean DoWeHaveQuickTime (void) +{ + return true; +} + +//-------------------------------------------------------------- DoWeHaveDragManager + +Boolean DoWeHaveDragManager (void) +{ + return true; +} + +//-------------------------------------------------------------- WhatsOurDepth + +// Determines the pixel bit depth for current device (monitor). + +short WhatsOurDepth (void) +{ + return 8; +} + +void SwitchToDepth (short, Boolean) +{ +} + +//-------------------------------------------------------------- CanWeDisplay4Bit +// Determines if device (monitor) capable of supporting 4 bit (16 colors/grays). +/* +Boolean CanWeDisplay4Bit (GDHandle theDevice) +{ + short canDepth; + Boolean canDo; + + canDo = false; + canDepth = HasDepth(theDevice, 4, 1, 0); + if (canDepth != 0) + canDo = true; + + return (canDo); +} +*/ +//-------------------------------------------------------------- CanWeDisplay1Bit +// Determines if device (monitor) capable of supporting 1 bit (black & white). +/* +Boolean CanWeDisplay1Bit (GDHandle theDevice) +{ + short canDepth; + Boolean canDo; + + canDo = false; + canDepth = HasDepth(theDevice, 1, 1, 0); + if (canDepth != 0) + canDo = true; + + return (canDo); +} +*/ +//-------------------------------------------------------------- HowManyUsableScreens + +// Counts the number of monitors that meet the depth criteria passed in. + +short HowManyUsableScreens (Boolean use1Bit, Boolean use4Bit, Boolean use8Bit) +{ + return 1; +} + +//-------------------------------------------------------------- CheckOurEnvirons +// Calls all the above functions in order to fill out a sort of "spec sheet"É +// for the current Mac. + +void CheckOurEnvirons (void) +{ + thisMac.thisResFile = CurResFile(); + thisMac.vRefNum = 0; // TEMP + thisMac.dirID = 0; // TEMP + thisMac.hasGestalt = true; // TEMP + thisMac.hasWNE = true; // TEMP + thisMac.hasColor = true; // TEMP + thisMac.canSwitch = true; // TEMP + thisMac.hasSystem7 = true; // TEMP + thisMac.hasSM3 = true; // TEMP + thisMac.hasQT = DoWeHaveQuickTime(); + thisMac.hasDrag = DoWeHaveDragManager(); + + FindOurDevice(); + thisMac.can1Bit = true; + thisMac.can4Bit = true; + thisMac.can8Bit = true; + thisMac.numScreens = HowManyUsableScreens(false, true, true); + GetDeviceRect(&thisMac.screen); + + thisMac.wasDepth = WhatsOurDepth(); + thisMac.wasColorOrGray = AreWeColorOrGrayscale(); +} + +//-------------------------------------------------------------- ReflectMonitor2Environs +// Tests second monitor (if available) for specific bit depth capabilities. +/* +void ReflectSecondMonitorEnvirons (Boolean use1Bit, Boolean use4Bit, Boolean use8Bit) +{ + GDHandle tempGDevice; + + tempGDevice = GetDeviceList(); + while (tempGDevice != nil) + { + if (TestDeviceAttribute(tempGDevice, screenDevice)) + if ((use1Bit && CanWeDisplay1Bit(tempGDevice)) || + (use4Bit && CanWeDisplay4Bit(tempGDevice)) || + (use8Bit && CanWeDisplay8Bit(tempGDevice))) + if (!TestDeviceAttribute(tempGDevice, mainScreen)) + { + thisGDevice = tempGDevice; + thisMac.can1Bit = CanWeDisplay1Bit(thisGDevice); + thisMac.can4Bit = CanWeDisplay4Bit(thisGDevice); + thisMac.can8Bit = CanWeDisplay8Bit(thisGDevice); + thisMac.wasDepth = WhatsOurDepth(); + thisMac.wasColorOrGray = AreWeColorOrGrayscale(); + GetDeviceRect(&thisMac.screen); + break; + } + tempGDevice = GetNextDevice(tempGDevice); + } +} +*/ +//-------------------------------------------------------------- HandleDepthSwitching + +// Handles setting up a monitor's depth to play on. + +void HandleDepthSwitching (void) +{ + if (thisMac.hasColor) + { + switch (isDepthPref) + { + case kSwitchIfNeeded: + if ((thisMac.wasDepth != 8) && + ((thisMac.wasDepth != 4) || (thisMac.wasColorOrGray))) + SwitchDepthOrAbort(); + break; + + case kSwitchTo256Colors: + if (thisMac.wasDepth != 8) + { + if (thisMac.can8Bit) + SwitchToDepth(8, true); + else + SwitchDepthOrAbort(); + } + break; + + case kSwitchTo16Grays: + if ((thisMac.wasDepth != 4) || (thisMac.wasColorOrGray)) + { + if (thisMac.can4Bit) + SwitchToDepth(4, false); + else + SwitchDepthOrAbort(); + } + break; + + default: + break; + } + } + + thisMac.isDepth = WhatsOurDepth(); +} + +//-------------------------------------------------------------- RestoreColorDepth + +// Restores a monitor to its previous depth when we quit (if we changed it). + +void RestoreColorDepth (void) +{ + if ((thisMac.hasColor) && ((thisMac.wasDepth != thisMac.isDepth) || + (thisMac.wasColorOrGray != AreWeColorOrGrayscale()))) + SwitchToDepth(thisMac.wasDepth, true); +} + +//-------------------------------------------------------------- CheckMemorySize + +// Tests for a specific amount of memory available. If the required memoryÉ +// is not available, attempts to turn off various game features (music, etc.)É +// in order to accomodate the constrained memory available. + +void CheckMemorySize (void) +{ + #define kBaseBytesNeeded 614400L // 600K Base memory + #define kPaddingBytes 204800L // 200K Padding + long bytesNeeded, bytesAvail; + long soundBytes, musicBytes; + + dontLoadMusic = false; + dontLoadSounds = false; + + bytesNeeded = kBaseBytesNeeded; // base memory + soundBytes = SoundBytesNeeded(); // sound memory + if (soundBytes <= 0L) + RedAlert(kErrNoMemory); + else + bytesNeeded += soundBytes; + musicBytes = MusicBytesNeeded(); // music memory + if (musicBytes <= 0L) + RedAlert(kErrNoMemory); + else + bytesNeeded += musicBytes; + bytesNeeded += 4L * (long)thisMac.screen.bottom; // main screen + bytesNeeded += (((long)houseRect.right - (long)houseRect.left) * + ((long)houseRect.bottom + 1 - (long)houseRect.top) * + (long)thisMac.isDepth) / 8L; // work map + bytesNeeded += 4L * (long)houseRect.bottom; + bytesNeeded += (((long)houseRect.right - (long)houseRect.left) * + ((long)houseRect.bottom + 1 - (long)houseRect.top) * + (long)thisMac.isDepth) / 8L; // back map + bytesNeeded += 4L * houseRect.bottom; + bytesNeeded += (((long)houseRect.right - (long)houseRect.left) * 21 * + (long)thisMac.isDepth) / 8L; // scoreboard map + bytesNeeded += (6396L * (long)thisMac.isDepth) / 8L; // more scoreboard + bytesNeeded += (32112L * (long)thisMac.isDepth) / 8L; // glider map + bytesNeeded += (32112L * (long)thisMac.isDepth) / 8L; // glider2 map + bytesNeeded += 32064L / 8L; // glider mask + bytesNeeded += (912L * (long)thisMac.isDepth) / 8L; // glider shadow + bytesNeeded += 864L / 8L; // shadow mask + bytesNeeded += (304L * (long)thisMac.isDepth) / 8L; // rubber bands + bytesNeeded += 288L / 8L; // bands mask + bytesNeeded += (19344L * (long)thisMac.isDepth) / 8L; // blower map + bytesNeeded += 19344L / 8L; // blower mask + bytesNeeded += (17856L * (long)thisMac.isDepth) / 8L; // furniture map + bytesNeeded += 17792L / 8L; // furniture mask + bytesNeeded += (33264L * (long)thisMac.isDepth) / 8L; // prizes map + bytesNeeded += 33176L / 8L; // prizes mask + bytesNeeded += (2904L * (long)thisMac.isDepth) / 8L; // points map + bytesNeeded += 2880L / 8L; // points mask + bytesNeeded += (1848L * (long)thisMac.isDepth) / 8L; // transport map + bytesNeeded += 1792L / 8L; // transport mask + bytesNeeded += (3360L * (long)thisMac.isDepth) / 8L; // switches map + bytesNeeded += (9144L * (long)thisMac.isDepth) / 8L; // lights map + bytesNeeded += 9072L / 8L; // lights mask + bytesNeeded += (21600L * (long)thisMac.isDepth) / 8L; // appliances map + bytesNeeded += 21520L / 8L; // appliances mask + bytesNeeded += (5600L * (long)thisMac.isDepth) / 8L; // toast map + bytesNeeded += 5568L / 8L; // toast mask + bytesNeeded += (1440L * (long)thisMac.isDepth) / 8L; // shredded map + bytesNeeded += 1400L / 8L; // shredded mask + bytesNeeded += (5784L * (long)thisMac.isDepth) / 8L; // balloon map + bytesNeeded += 5760L / 8L; // balloon mask + bytesNeeded += (9632L * (long)thisMac.isDepth) / 8L; // copter map + bytesNeeded += 9600L / 8L; // copter mask + bytesNeeded += (4928L * (long)thisMac.isDepth) / 8L; // dart map + bytesNeeded += 4864L / 8L; // dart mask + bytesNeeded += (2080L * (long)thisMac.isDepth) / 8L; // ball map + bytesNeeded += 2048L / 8L; // ball mask + bytesNeeded += (1168L * (long)thisMac.isDepth) / 8L; // drip map + bytesNeeded += 1152L / 8L; // drip mask + bytesNeeded += (1224L * (long)thisMac.isDepth) / 8L; // enemy map + bytesNeeded += 1188L / 8L; // enemy mask + bytesNeeded += (2064L * (long)thisMac.isDepth) / 8L; // fish map + bytesNeeded += 2048L / 8L; // fish mask + bytesNeeded += (8960L * (long)thisMac.isDepth) / 8L; // clutter map + bytesNeeded += 8832L / 8L; // clutter mask + bytesNeeded += (23040L * (long)thisMac.isDepth) / 8L; // support map + bytesNeeded += (4320L * (long)thisMac.isDepth) / 8L; // angel map + bytesNeeded += 4224L / 8L; // angel mask + bytesNeeded += sizeof(roomType); + bytesNeeded += sizeof(hotObject) * kMaxHotSpots; + bytesNeeded += sizeof(sparkleType) * kMaxSparkles; + bytesNeeded += sizeof(flyingPtType) * kMaxFlyingPts; + bytesNeeded += sizeof(flameType) * kMaxCandles; + bytesNeeded += sizeof(flameType) * kMaxTikis; + bytesNeeded += sizeof(flameType) * kMaxCoals; + bytesNeeded += sizeof(pendulumType) * kMaxPendulums; + bytesNeeded += sizeof(savedType) * kMaxSavedMaps; + bytesNeeded += sizeof(bandType) * kMaxRubberBands; + bytesNeeded += sizeof(greaseType) * kMaxGrease; + bytesNeeded += sizeof(starType) * kMaxStars; + bytesNeeded += sizeof(shredType) * kMaxShredded; + bytesNeeded += sizeof(dynaType) * kMaxDynamicObs; + bytesNeeded += sizeof(objDataType) * kMaxMasterObjects; + bytesNeeded += kDemoLength; SpinCursor(1); + + bytesAvail = FreeMem(); SpinCursor(1); +} + +void GetDeviceRect(Rect *rect) +{ + unsigned int width; + unsigned int height; + PortabilityLayer::HostDisplayDriver::GetInstance()->GetDisplayResolution(width, height); + + SetRect(rect, 0, 0, static_cast(width), static_cast(height)); +} + +Boolean AreWeColorOrGrayscale() +{ + // ... As opposed to B&W + return true; +} + +void SwitchDepthOrAbort(void) +{ +} diff --git a/GpApp/Environ.h b/GpApp/Environ.h new file mode 100644 index 0000000..b344799 --- /dev/null +++ b/GpApp/Environ.h @@ -0,0 +1,37 @@ +//============================================================================ +//---------------------------------------------------------------------------- +// Environ.h +//---------------------------------------------------------------------------- +//============================================================================ + + +#include "PLQuickdraw.h" + + +typedef struct +{ + Rect screen, gray; + long dirID; + short wasDepth, isDepth; + short thisResFile; + short numScreens; + short vRefNum; + Boolean can1Bit; + Boolean can4Bit; + Boolean can8Bit; + Boolean wasColorOrGray; + Boolean hasWNE; + Boolean hasSystem7; + Boolean hasColor; + Boolean hasGestalt; + Boolean canSwitch; + Boolean canColor; + Boolean hasSM3; + Boolean hasQT; + Boolean hasDrag; +} macEnviron; + + +extern macEnviron thisMac; + + diff --git a/GpApp/Events.cpp b/GpApp/Events.cpp new file mode 100644 index 0000000..fae5158 --- /dev/null +++ b/GpApp/Events.cpp @@ -0,0 +1,574 @@ + +//============================================================================ +//---------------------------------------------------------------------------- +// Events.c +//---------------------------------------------------------------------------- +//============================================================================ + + +#include "PLAppleEvents.h" +#include "PLToolUtils.h" +#include "PLQuickdraw.h" +#include "Externs.h" +#include "Environ.h" +#include "House.h" +#include "ObjectEdit.h" + + +short BitchAboutColorDepth (void); +void HandleMouseEvent (EventRecord *); +void HandleKeyEvent (EventRecord *); +void HandleUpdateEvent (EventRecord *); +void HandleOSEvent (EventRecord *); +void HandleHighLevelEvent (EventRecord *); +void HandleIdleTask (void); +void IncrementMode (void); + + +long lastUp, incrementModeTime; +UInt32 doubleTime; +Point lastWhere; +short idleMode; +Boolean doAutoDemo, switchedOut; + +extern WindowPtr mapWindow, toolsWindow, linkWindow; +extern WindowPtr menuWindow; +extern short isEditH, isEditV, isMapH, isMapV, isToolsH, isToolsV; +extern short isLinkH, isLinkV, isCoordH, isCoordV; +extern Boolean quitting, isMusicOn, failedMusic; +extern Boolean autoRoomEdit, newRoomNow, isPlayMusicIdle; + + +//============================================================== Functions +//-------------------------------------------------------------- BitchAboutColorDepth +// Display a dialog that alerts the user that they have switched the bitÉ +// depth of the monitor under our noses. They must return it to previous. + +short BitchAboutColorDepth (void) +{ + #define kColorSwitchedAlert 1042 + short sheSaid; + +// CenterAlert(kColorSwitchedAlert); + sheSaid = Alert(kColorSwitchedAlert, nil); + + return (sheSaid); +} + +//-------------------------------------------------------------- HandleMouseEvent +// Handle a mouse click event. + +void HandleMouseEvent (EventRecord *theEvent) +{ + WindowPtr whichWindow; + long menuChoice, newSize; + short thePart, hDelta, vDelta; + Boolean isDoubleClick; + + thePart = FindWindow(theEvent->where, &whichWindow); + + switch (thePart) + { + case inSysWindow: +// SystemClick(theEvent, whichWindow); + break; + + case inMenuBar: + menuChoice = MenuSelect(theEvent->where); + DoMenuChoice(menuChoice); + break; + + case inDrag: + DragWindow(whichWindow, theEvent->where, &thisMac.screen); + if (whichWindow == mainWindow) + { + SendBehind(mainWindow, (WindowPtr)0L); + GetWindowLeftTop(whichWindow, &isEditH, &isEditV); + } + else if (whichWindow == mapWindow) + GetWindowLeftTop(whichWindow, &isMapH, &isMapV); + else if (whichWindow == toolsWindow) + GetWindowLeftTop(whichWindow, &isToolsH, &isToolsV); + else if (whichWindow == linkWindow) + GetWindowLeftTop(whichWindow, &isLinkH, &isLinkV); + else if (whichWindow == coordWindow) + GetWindowLeftTop(whichWindow, &isCoordH, &isCoordV); + HiliteAllWindows(); + break; + + case inGoAway: + if (TrackGoAway(whichWindow,theEvent->where)) + { + if (whichWindow == mapWindow) + ToggleMapWindow(); + else if (whichWindow == toolsWindow) + ToggleToolsWindow(); + else if (whichWindow == linkWindow) + CloseLinkWindow(); + else if (whichWindow == coordWindow) + ToggleCoordinateWindow(); + } + break; + + case inGrow: + if (whichWindow == mapWindow) + { + newSize = GrowWindow(mapWindow, theEvent->where, &thisMac.gray); + ResizeMapWindow(LoWord(newSize), HiWord(newSize)); + } + break; + + case inZoomIn: + case inZoomOut: + if (TrackBox(whichWindow, theEvent->where, thePart)) + ZoomWindow(whichWindow, thePart, true); + break; + + case inContent: + if (whichWindow == mainWindow) + { + hDelta = theEvent->where.h - lastWhere.h; + if (hDelta < 0) + hDelta = -hDelta; + vDelta = theEvent->where.v - lastWhere.v; + if (vDelta < 0) + vDelta = -vDelta; + if (((theEvent->when - lastUp) < doubleTime) && (hDelta < 5) && + (vDelta < 5)) + isDoubleClick = true; + else + { + isDoubleClick = false; + lastUp = theEvent->when; + lastWhere = theEvent->where; + } + HandleMainClick(theEvent->where, isDoubleClick); + } + else if (whichWindow == mapWindow) + HandleMapClick(theEvent); + else if (whichWindow == toolsWindow) + HandleToolsClick(theEvent->where); + else if (whichWindow == linkWindow) + HandleLinkClick(theEvent->where); + break; + + default: + break; + } +} + +//-------------------------------------------------------------- HandleKeyEvent +// Handle a key-down event. + +void HandleKeyEvent (EventRecord *theEvent) +{ + char theChar; + Boolean shiftDown, commandDown, optionDown; + + theChar = theEvent->message & charCodeMask; + shiftDown = ((theEvent->modifiers & shiftKey) != 0); + commandDown = ((theEvent->modifiers & cmdKey) != 0); + optionDown = ((theEvent->modifiers & optionKey) != 0); + + if ((commandDown) && (!optionDown)) + DoMenuChoice(MenuKey(theChar)); + else + { + switch (theChar) + { + case kHelpKeyASCII: + break; + + case kPageUpKeyASCII: + if (houseUnlocked) + PrevToolMode(); + break; + + case kPageDownKeyASCII: + if (houseUnlocked) + NextToolMode(); + break; + +#if BUILD_ARCADE_VERSION + + case kLeftArrowKeyASCII: + DoOptionsMenu(iHighScores); + break; + + case kRightArrowKeyASCII: + DoOptionsMenu(iHelp); + break; + + case kUpArrowKeyASCII: + DoGameMenu(iNewGame); + break; + + case kDownArrowKeyASCII: + DoGameMenu(iNewGame); + break; + +#else + + case kLeftArrowKeyASCII: + if (houseUnlocked) + { + if (objActive == kNoObjectSelected) + SelectNeighborRoom(kRoomToLeft); + else + MoveObject(kBumpLeft, shiftDown); + } + break; + + case kRightArrowKeyASCII: + if (houseUnlocked) + { + if (objActive == kNoObjectSelected) + SelectNeighborRoom(kRoomToRight); + else + MoveObject(kBumpRight, shiftDown); + } + break; + + case kUpArrowKeyASCII: + if (houseUnlocked) + { + if (objActive == kNoObjectSelected) + SelectNeighborRoom(kRoomAbove); + else + MoveObject(kBumpUp, shiftDown); + } + break; + + case kDownArrowKeyASCII: + if (houseUnlocked) + { + if (objActive == kNoObjectSelected) + SelectNeighborRoom(kRoomBelow); + else + MoveObject(kBumpDown, shiftDown); + } + break; + +#endif + + case kDeleteKeyASCII: + if (houseUnlocked) + { + if (objActive == kNoObjectSelected) + DeleteRoom(true); + else + DeleteObject(); + } + break; + + case kTabKeyASCII: + if ((theMode == kEditMode) && (houseUnlocked)) + { + if (shiftDown) + SelectPrevObject(); + else + SelectNextObject(); + } + break; + + case kEscapeKeyASCII: + if ((theMode == kEditMode) && (houseUnlocked)) + DeselectObject(); + break; + + case kAKeyASCII: + case kCapAKeyASCII: + if ((theMode == kEditMode) && (houseUnlocked)) + SetSpecificToolMode(kApplianceMode); + break; + + case kBKeyASCII: + case kCapBKeyASCII: + if ((theMode == kEditMode) && (houseUnlocked)) + SetSpecificToolMode(kBlowerMode); + break; + + case kCKeyASCII: + case kCapCKeyASCII: + if ((theMode == kEditMode) && (houseUnlocked)) + SetSpecificToolMode(kClutterMode); + break; + + case kEKeyASCII: + case kCapEKeyASCII: + if ((theMode == kEditMode) && (houseUnlocked)) + SetSpecificToolMode(kEnemyMode); + break; + + case kFKeyASCII: + case kCapFKeyASCII: + if ((theMode == kEditMode) && (houseUnlocked)) + SetSpecificToolMode(kFurnitureMode); + break; + + case kLKeyASCII: + case kCapLKeyASCII: + if ((theMode == kEditMode) && (houseUnlocked)) + SetSpecificToolMode(kLightMode); + break; + + case kPKeyASCII: + case kCapPKeyASCII: + if ((theMode == kEditMode) && (houseUnlocked)) + SetSpecificToolMode(kBonusMode); + break; + + case kSKeyASCII: + case kCapSKeyASCII: + if ((theMode == kEditMode) && (houseUnlocked)) + SetSpecificToolMode(kSwitchMode); + break; + + case kTKeyASCII: + case kCapTKeyASCII: + if ((theMode == kEditMode) && (houseUnlocked)) + SetSpecificToolMode(kTransportMode); + break; + + default: + break; + } + } +} + +//-------------------------------------------------------------- HandleUpdateEvent +// Handle an update event. + +void HandleUpdateEvent (EventRecord *theEvent) +{ + if ((WindowPtr)theEvent->message == mainWindow) + { + SetPort((GrafPtr)mainWindow); + BeginUpdate(mainWindow); + UpdateMainWindow(); + EndUpdate(mainWindow); + } + else if ((WindowPtr)theEvent->message == mapWindow) + { + SetPort((GrafPtr)mapWindow); + BeginUpdate(mapWindow); + UpdateMapWindow(); + EndUpdate(mapWindow); + } + else if ((WindowPtr)theEvent->message == toolsWindow) + { + SetPort((GrafPtr)toolsWindow); + BeginUpdate(toolsWindow); + UpdateToolsWindow(); + EndUpdate(toolsWindow); + } + else if ((WindowPtr)theEvent->message == linkWindow) + { + SetPort((GrafPtr)linkWindow); + BeginUpdate(linkWindow); + UpdateLinkWindow(); + EndUpdate(linkWindow); + } + else if ((WindowPtr)theEvent->message == coordWindow) + { + SetPort((GrafPtr)coordWindow); + BeginUpdate(coordWindow); + UpdateCoordWindow(); + EndUpdate(coordWindow); + } + else if ((WindowPtr)theEvent->message == menuWindow) + { + SetPort((GrafPtr)menuWindow); + BeginUpdate(menuWindow); + UpdateMenuBarWindow(); + EndUpdate(menuWindow); + } +} + +//-------------------------------------------------------------- HandleOSEvent +// Handle an OS Event (MultiFinder - user has switched in or out of app). + +void HandleOSEvent (EventRecord *theEvent) +{ + OSErr theErr; + short buttonHit; + + if (theEvent->message & 0x01000000) // suspend or resume event + { + if (theEvent->message & 0x00000001) // resume event + { + if (WhatsOurDepth() != thisMac.isDepth) + { + buttonHit = BitchAboutColorDepth(); + if (buttonHit == 1) // player wants to Quit + { +#ifndef COMPILEDEMO + if (QuerySaveChanges()) + quitting = true; +#else + quitting = true; +#endif + } + else + { + SwitchToDepth(thisMac.isDepth, thisMac.wasColorOrGray); + } + } + switchedOut = false; + InitCursor(); + if ((isPlayMusicIdle) && (theMode != kEditMode)) + { + theErr = StartMusic(); + if (theErr != noErr) + { + YellowAlert(kYellowNoMusic, theErr); + failedMusic = true; + } + } + incrementModeTime = TickCount() + kIdleSplashTicks; + +#ifndef COMPILEDEMO +// if (theMode == kEditMode) +// SeeIfValidScrapAvailable(true); +#endif + } + else // suspend event + { + switchedOut = true; + InitCursor(); + if ((isMusicOn) && (theMode != kEditMode)) + StopTheMusic(); + } + } +} + +//-------------------------------------------------------------- HandleHighLevelEvent +// Handle an AppleEvent (Open Document, Quit Application, etc.). + +void HandleHighLevelEvent (EventRecord *theEvent) +{ + OSErr theErr; + + theErr = AEProcessAppleEvent(theEvent); + if ((theErr != noErr) && (theErr != errAEEventNotHandled)) + YellowAlert(kYellowAppleEventErr, theErr); +} + +//-------------------------------------------------------------- HandleIdleTask +// Handle some processing during event lulls. + +void HandleIdleTask (void) +{ + if (theMode == kEditMode) + { + SetPort((GrafPtr)mainWindow); + DoMarquee(); + + if ((autoRoomEdit) && (newRoomNow)) + { + if (theMode == kEditMode) + DoRoomInfo(); + newRoomNow = false; + } + } +} + +//-------------------------------------------------------------- HandleEvent +// "Master" function that tests for events and calls the above functions toÉ +// handle each event type. Not called during and actual game. + +void HandleEvent (void) +{ + KeyMap eventKeys; + EventRecord theEvent; + long sleep = 2; + Boolean itHappened = true; + + GetKeys(eventKeys); + if ((BitTst(&eventKeys, kCommandKeyMap)) && + (BitTst(&eventKeys, kOptionKeyMap))) + { + HiliteAllObjects(); + } + else if ((BitTst(&eventKeys, kOptionKeyMap)) && (theMode == kEditMode) && + (houseUnlocked)) + { + EraseSelectedTool(); + SelectTool(kSelectTool); + } + + //if (thisMac.hasWNE) + // itHappened = WaitNextEvent(everyEvent, &theEvent, sleep, nil); + //else + { + // SystemTask(); + itHappened = GetNextEvent(everyEvent, &theEvent); + } + + if (itHappened) + { + switch (theEvent.what) + { + case mouseDown: + HandleMouseEvent(&theEvent); + break; + + case keyDown: + case autoKey: + HandleKeyEvent(&theEvent); + break; + + case updateEvt: + HandleUpdateEvent(&theEvent); + break; + + case osEvt: + HandleOSEvent(&theEvent); + break; + + case kHighLevelEvent: + HandleHighLevelEvent(&theEvent); + break; + } + } + else + HandleIdleTask(); + + if ((theMode == kSplashMode) && doAutoDemo && !switchedOut) + { + if (TickCount() >= incrementModeTime) + DoDemoGame(); + } +} + +//-------------------------------------------------------------- HiliteAllWindows + +// Ugly kludge in order to keep "floating windows" (palettes) on top ofÉ +// the main window. + +void HiliteAllWindows (void) +{ + if (mainWindow != nil) + HiliteWindow(mainWindow, true); + if (mapWindow != nil) + HiliteWindow(mapWindow, true); + if (toolsWindow != nil) + HiliteWindow(toolsWindow, true); + if (coordWindow != nil) + HiliteWindow(coordWindow, true); + if (linkWindow != nil) + HiliteWindow(linkWindow, true); +} + +//-------------------------------------------------------------- IgnoreThisClick + +// Another inelegant kludge designed to temporarily prevent an unwantedÉ +// double-click to be registered. + +void IgnoreThisClick (void) +{ + lastUp -= doubleTime; + lastWhere.h = -100; + lastWhere.v = -100; +} + diff --git a/GpApp/Externs.h b/GpApp/Externs.h new file mode 100644 index 0000000..0fb58ab --- /dev/null +++ b/GpApp/Externs.h @@ -0,0 +1,390 @@ + +//============================================================================ +//---------------------------------------------------------------------------- +// Externs.h +//---------------------------------------------------------------------------- +//============================================================================ + + +#pragma once + + +#include "PLMenus.h" + + +#define kPreferredDepth 8 + + +#define kNilPointer 0L +#define kPutInFront (WindowPtr)-1L +#define kNormalUpdates TRUE +#define kOneKilobyte 1024 +#define kOkayButton 1 +#define kCancelButton 2 +#define kControlActive 0 +#define kControlInactive 255 +#define kAsynch TRUE +#define kSynch FALSE + +#define kHomeKeyASCII 0x01 +#define kEnterKeyASCII 0x03 +#define kEndKeyASCII 0x04 +#define kHelpKeyASCII 0x05 +#define kDeleteKeyASCII 0x08 +#define kTabKeyASCII 0x09 +#define kPageUpKeyASCII 0x0B +#define kPageDownKeyASCII 0x0C +#define kReturnKeyASCII 0x0D +#define kFunctionKeyASCII 0x10 +#define kClearKeyASCII 0x1A +#define kEscapeKeyASCII 0x1B +#define kLeftArrowKeyASCII 0x1C +#define kRightArrowKeyASCII 0x1D +#define kUpArrowKeyASCII 0x1E +#define kDownArrowKeyASCII 0x1F +#define kSpaceBarASCII 0x20 +#define kExclamationASCII 0x21 +#define kPlusKeyASCII 0x2B +#define kMinusKeyASCII 0x2D +#define k0KeyASCII 0x30 +#define k1KeyASCII 0x31 +#define k2KeyASCII 0x32 +#define k3KeyASCII 0x33 +#define k4KeyASCII 0x34 +#define k5KeyASCII 0x35 +#define k6KeyASCII 0x36 +#define k7KeyASCII 0x37 +#define k8KeyASCII 0x38 +#define k9KeyASCII 0x39 + +#define kCapAKeyASCII 0x41 +#define kCapBKeyASCII 0x42 +#define kCapCKeyASCII 0x43 +#define kCapDKeyASCII 0x44 +#define kCapEKeyASCII 0x45 +#define kCapFKeyASCII 0x46 +#define kCapGKeyASCII 0x47 +#define kCapHKeyASCII 0x48 +#define kCapIKeyASCII 0x49 +#define kCapJKeyASCII 0x4A +#define kCapKKeyASCII 0x4B +#define kCapLKeyASCII 0x4C +#define kCapMKeyASCII 0x4D +#define kCapNKeyASCII 0x4E +#define kCapOKeyASCII 0x4F +#define kCapPKeyASCII 0x50 +#define kCapQKeyASCII 0x51 +#define kCapRKeyASCII 0x52 +#define kCapSKeyASCII 0x53 +#define kCapTKeyASCII 0x54 +#define kCapUKeyASCII 0x55 +#define kCapVKeyASCII 0x56 +#define kCapWKeyASCII 0x57 +#define kCapXKeyASCII 0x58 +#define kCapYKeyASCII 0x59 +#define kCapZKeyASCII 0x5A + +#define kAKeyASCII 0x61 +#define kBKeyASCII 0x62 +#define kCKeyASCII 0x63 +#define kDKeyASCII 0x64 +#define kEKeyASCII 0x65 +#define kFKeyASCII 0x66 +#define kGKeyASCII 0x67 +#define kHKeyASCII 0x68 +#define kIKeyASCII 0x69 +#define kJKeyASCII 0x6A +#define kKKeyASCII 0x6B +#define kLKeyASCII 0x6C +#define kMKeyASCII 0x6D +#define kNKeyASCII 0x6E +#define kOKeyASCII 0x6F +#define kPKeyASCII 0x70 +#define kQKeyASCII 0x71 +#define kRKeyASCII 0x72 +#define kSKeyASCII 0x73 +#define kTKeyASCII 0x74 +#define kUKeyASCII 0x75 +#define kVKeyASCII 0x76 +#define kWKeyASCII 0x77 +#define kXKeyASCII 0x78 +#define kYKeyASCII 0x79 +#define kZKeyASCII 0x7A +#define kForwardDeleteASCII 0x7F + +#define kPlusKeypadMap 66 // key map offset for + on keypad +#define kMinusKeypadMap 73 // key map offset for - on keypad +#define kTimesKeypadMap 68 // key map offset for * on keypad +#define k0KeypadMap 85 // key map offset for 0 on keypad +#define k1KeypadMap 84 // key map offset for 1 on keypad +#define k2KeypadMap 83 // key map offset for 2 on keypad +#define k3KeypadMap 82 // key map offset for 3 on keypad +#define k4KeypadMap 81 // key map offset for 4 on keypad +#define k5KeypadMap 80 // key map offset for 5 on keypad +#define k6KeypadMap 95 // key map offset for 6 on keypad +#define k7KeypadMap 94 // key map offset for 7 on keypad +#define k8KeypadMap 92 // key map offset for 8 on keypad +#define k9KeypadMap 91 // key map offset for 9 on keypad + +#define kUpArrowKeyMap 121 // key map offset for up arrow +#define kDownArrowKeyMap 122 // key map offset for down arrow +#define kRightArrowKeyMap 123 // key map offset for right arrow +#define kLeftArrowKeyMap 124 // key map offset for left arrow + +#define kAKeyMap 7 +#define kBKeyMap 12 +#define kCKeyMap 15 +#define kDKeyMap 5 +#define kEKeyMap 9 +#define kFKeyMap 4 +#define kGKeyMap 2 +#define kHKeyMap 3 +#define kMKeyMap 41 +#define kNKeyMap 42 +#define kOKeyMap 24 +#define kPKeyMap 36 +#define kQKeyMap 11 +#define kRKeyMap 8 +#define kSKeyMap 6 +#define kTKeyMap 22 +#define kVKeyMap 14 +#define kWKeyMap 10 +#define kXKeyMap 0 +#define kZKeyMap 1 +#define kPeriodKeyMap 40 +#define kCommandKeyMap 48 +#define kEscKeyMap 50 +#define kDeleteKeyMap 52 +#define kSpaceBarMap 54 +#define kTabKeyMap 55 +#define kControlKeyMap 60 +#define kOptionKeyMap 61 +#define kCapsLockKeyMap 62 +#define kShiftKeyMap 63 + +#define kTabRawKey 0x30 // key map offset for Tab key +#define kClearRawKey 0x47 // key map offset for Clear key +#define kF5RawKey 0x60 // key map offset for F5 +#define kF6RawKey 0x61 // key map offset for F6 +#define kF7RawKey 0x62 // key map offset for F7 +#define kF3RawKey 0x63 // key map offset for F3 +#define kF8RawKey 0x64 // key map offset for F8 +#define kF9RawKey 0x65 // key map offset for F9 +#define kF11RawKey 0x67 // key map offset for F11 +#define kF13RawKey 0x69 // key map offset for F13 +#define kF14RawKey 0x6B // key map offset for F14 +#define kF10RawKey 0x6D // key map offset for F10 +#define kF12RawKey 0x6F // key map offset for F12 +#define kF15RawKey 0x71 // key map offset for F15 +#define kF4RawKey 0x76 // key map offset for F4 +#define kF2RawKey 0x78 // key map offset for F2 +#define kF1RawKey 0x7A // key map offset for F1 + +#define kErrUnnaccounted 1 +#define kErrNoMemory 2 +#define kErrDialogDidntLoad 3 +#define kErrFailedResourceLoad 4 +#define kErrFailedGraphicLoad 5 +#define kErrFailedOurDirect 6 +#define kErrFailedValidation 7 +#define kErrNeedSystem7 8 +#define kErrFailedGetDevice 9 +#define kErrFailedMemoryOperation 10 +#define kErrFailedCatSearch 11 +#define kErrNeedColorQD 12 +#define kErrNeed16Or256Colors 13 + +#define iAbout 1 +#define iNewGame 1 +#define iTwoPlayer 2 +#define iOpenSavedGame 3 +#define iLoadHouse 5 +#define iQuit 7 +#define iEditor 1 +#define iHighScores 3 +#define iPrefs 4 +#define iHelp 5 +#define iNewHouse 1 +#define iSave 2 +#define iHouse 4 +#define iRoom 5 +#define iObject 6 +#define iCut 8 +#define iCopy 9 +#define iPaste 10 +#define iClear 11 +#define iDuplicate 12 +#define iBringForward 14 +#define iSendBack 15 +#define iGoToRoom 17 +#define iMapWindow 19 +#define iObjectWindow 20 +#define iCoordinateWindow 21 + +//-------------------------------------------------------------- Structs +/* +typedef short SICN[16]; +typedef SICN *SICNList; +typedef SICNList *SICNHand; +*/ + +typedef struct +{ + Str32 wasDefaultName; + Str15 wasLeftName, wasRightName; + Str15 wasBattName, wasBandName; + Str15 wasHighName; + Str31 wasHighBanner; +// long encrypted, fakeLong; + long wasLeftMap, wasRightMap; + long wasBattMap, wasBandMap; + short wasVolume; + short prefVersion; + short wasMaxFiles; + short wasEditH, wasEditV; + short wasMapH, wasMapV; + short wasMapWide, wasMapHigh; + short wasToolsH, wasToolsV; + short wasLinkH, wasLinkV; + short wasCoordH, wasCoordV; + short isMapLeft, isMapTop; + short wasNumNeighbors; + short wasDepthPref; + short wasToolGroup; + short smWarnings; + short wasFloor, wasSuite; + Boolean wasZooms, wasMusicOn; + Boolean wasAutoEdit, wasDoColorFade; + Boolean wasMapOpen, wasToolsOpen; + Boolean wasCoordOpen, wasQuickTrans; + Boolean wasIdleMusic, wasGameMusic; + Boolean wasEscPauseKey; + Boolean wasDoAutoDemo, wasScreen2; + Boolean wasDoBackground, wasHouseChecks; + Boolean wasPrettyMap, wasBitchDialogs; +} prefsInfo; + +//-------------------------------------------------------------- Prototypes + +void DoAbout (void); // --- About.c + +void LoadCursors (void); // --- AnimCursor.c +void DisposCursors (void); +void IncrementCursor (void); +void DecrementCursor (void); +void SpinCursor (short); +void BackSpinCursor (short); + +void ColorText (StringPtr, long); // --- ColorUtils.c +void ColorRect (Rect *, long); +void ColorOval (Rect *, long); +void ColorRegion (RgnHandle, long); +void ColorLine (short, short, short, short, long); +void HiliteRect (Rect *, short, short); +void ColorFrameRect (Rect *, long); +void ColorFrameWHRect (short, short, short, short, long); +void ColorFrameOval (Rect *, long); +void LtGrayForeColor (void); +void GrayForeColor (void); +void DkGrayForeColor (void); +void RestoreColorsSlam (void); + +void MonitorWait (void); // --- DebugUtils.c +void DisplayRect (Rect *); +void FlashRect (Rect *); +void CheckLegitRect(Rect *, Rect *); +void DisplayLong (long); +void DisplayShort (short); +void FlashLong (long); +void FlashShort (short); +void DoBarGraph (short, short, short, short); +short BetaOkay (void); +void DebugNum (long); +void DisplayCTSeed (CGrafPtr); +void FillScreenRed (void); +void DumpToResEditFile (Ptr, long); + +void HandleEvent (void); // --- Event.c +void HiliteAllWindows (void); +void IgnoreThisClick (void); + +short WhatsOurDepth (void); // --- Environs.c +void SwitchToDepth (short, Boolean); +void CheckOurEnvirons (void); +//void ReflectSecondMonitorEnvirons (Boolean, Boolean, Boolean); +void HandleDepthSwitching (void); +void RestoreColorDepth (void); +void CheckMemorySize (void); +void SetAppMemorySize (long); + +Boolean CheckFileError (short, const PLPasStr &); // --- File Error.c + +Boolean SavePrefs (prefsInfo *, short); // --- Prefs.c +Boolean LoadPrefs (prefsInfo *, short); + +void PasStringCopy (StringPtr, StringPtr); // --- StringUtils.c +short WhichStringFirst (StringPtr, StringPtr); +void PasStringCopyNum (StringPtr, StringPtr, short); +void PasStringConcat (StringPtr, const PLPasStr &); +void GetLineOfText (StringPtr, short, StringPtr); +void WrapText (StringPtr, short); +void GetFirstWordOfString (StringPtr, StringPtr); +void CollapseStringToWidth (StringPtr, short); +void GetChooserName (StringPtr); +StringPtr GetLocalizedString (short, StringPtr); + +Point MyGetGlobalMouse (void); // --- Utilities.c +void ToolBoxInit (void); +void FindOurDevice (void); +short RandomInt (short); +long RandomLong (long); +void InitRandomLongQUS (void); +UInt32 RandomLongQUS (void); +//void CenterAlert (short); +void RedAlert (short); +//void CreateOffScreenBitMap (Rect *, GrafPtr *); +//void CreateOffScreenPixMap (Rect *, CGrafPtr *); +//void KillOffScreenPixMap (CGrafPtr); +//void KillOffScreenBitMap (GrafPtr); +void LoadGraphic (short); +void LoadScaledGraphic (short, Rect *); +//void PlotSICN (Rect *, SICNHand, long); +void LargeIconPlot (Rect *, short); +void DrawCIcon (short, short, short); +char KeyMapOffsetFromRawKey (char); +long LongSquareRoot (long); +//void HideMenuBarOld (void); +//void ShowMenuBarOld (void); +Boolean WaitForInputEvent (short); +void WaitCommandQReleased (void); +char GetKeyMapFromMessage (intptr_t); +void GetKeyName (intptr_t, StringPtr); +Boolean OptionKeyDown (void); +long ExtractCTSeed (CGrafPtr); +//void ForceCTSeed (CGrafPtr, long); +void DelayTicks (long); +void UnivGetSoundVolume (short *, Boolean); +void UnivSetSoundVolume (short, Boolean); + +Boolean ValidInstallation (Boolean); // --- Validate.c + +void GetWindowLeftTop (WindowPtr, short *, short *); // --- WindowUtils.c +void GetWindowRect (WindowPtr, Rect *); +void GetLocalWindowRect (WindowPtr, Rect *); +//void FlagWindowFloating (WindowPtr); +//Boolean IsWindowFloating (WindowPtr); +void OpenMessageWindow (const PLPasStr&); +void SetMessageWindowMessage (StringPtr); +void CloseMessageWindow (void); +void CloseThisWindow (WindowPtr *); + +#ifdef powerc +// extern pascal void SetSoundVol(short level); // for old Sound Manager +// extern pascal void GetSoundVol(short *level) +// THREEWORDINLINE(0x4218, 0x10B8, 0x0260); +#endif + +#include "GliderDefines.h" +#include "GliderStructs.h" +#include "GliderVars.h" +#include "GliderProtos.h" \ No newline at end of file diff --git a/GpApp/FileError.cpp b/GpApp/FileError.cpp new file mode 100644 index 0000000..07ac86a --- /dev/null +++ b/GpApp/FileError.cpp @@ -0,0 +1,101 @@ + +//============================================================================ +//---------------------------------------------------------------------------- +// FileError.c +//---------------------------------------------------------------------------- +//============================================================================ + + +#include "PLNumberFormatting.h" +#include "PLTextUtils.h" +#include "PLPasStr.h" +#include "Externs.h" + + +#define rFileErrorAlert 140 +#define rFileErrorStrings 140 + + +//============================================================== Functions +//-------------------------------------------------------------- CheckFileError + +// Given a result code (returned from a previous file operation) thisÉ +// function cheks to see if the result code is an error and, if it isÉ +// a common error for which I have a string message, I bring up anÉ +// alert with the error message. If it is an unusual error, I stillÉ +// bring up an alert but with "Miscellaneous file error" and theÉ +// error ID. + +Boolean CheckFileError (short resultCode, const PLPasStr &fileName) +{ + short dummyInt, stringIndex; + Str255 errMessage, errNumString; + + if (resultCode == noErr) // No problems? Then cruise + return(true); + + switch (resultCode) + { + case dirFulErr: + stringIndex = 2; + break; + case dskFulErr: + stringIndex = 3; + break; + case ioErr: + stringIndex = 4; + break; + case bdNamErr: + stringIndex = 5; + break; + case fnOpnErr: + stringIndex = 6; + break; + case mFulErr: + stringIndex = 7; + break; + case tmfoErr: + stringIndex = 8; + break; + case wPrErr: + stringIndex = 9; + break; + case fLckdErr: + stringIndex = 10; + break; + case vLckdErr: + stringIndex = 11; + break; + case fBsyErr: + stringIndex = 12; + break; + case dupFNErr: + stringIndex = 13; + break; + case opWrErr: + stringIndex = 14; + break; + case volOffLinErr: + stringIndex = 15; + break; + case permErr: + stringIndex = 16; + break; + case wrPermErr: + stringIndex = 17; + break; + default: + stringIndex = 1; + break; + } + InitCursor(); + + GetIndString(errMessage, rFileErrorStrings, stringIndex); + NumToString((long)resultCode, errNumString); + ParamText(errMessage, errNumString, fileName, PSTR("")); + +// CenterAlert(rFileErrorAlert); + dummyInt = Alert(rFileErrorAlert, 0L); + + return(false); +} diff --git a/GpApp/GameOver.cpp b/GpApp/GameOver.cpp new file mode 100644 index 0000000..d553cc2 --- /dev/null +++ b/GpApp/GameOver.cpp @@ -0,0 +1,508 @@ +//============================================================================ +//---------------------------------------------------------------------------- +// GameOver.c +//---------------------------------------------------------------------------- +//============================================================================ + + +#include "PLToolUtils.h" +#include "PLPasStr.h" +#include "Externs.h" +#include "Environ.h" +#include "MainWindow.h" +#include "Objects.h" +#include "RectUtils.h" +#include "Utilities.h" + + +#define kNumCountDownFrames 16 +#define kPageFrames 14 +#define kPagesPictID 1990 +#define kPagesMaskID 1989 +#define kLettersPictID 1988 +#define kMilkywayPictID 1021 + + +typedef struct +{ + Rect dest, was; + short frame, counter; + Boolean stuck; +} pageType, *pagePtr; + + +void DoGameOverStarAnimation (void); +void SetUpFinalScreen (void); +void InitDiedGameOver (void); +void HandlePages (void); +void DrawPages (void); + + +pageType pages[8]; +Rect pageSrcRect, pageSrc[kPageFrames], lettersSrc[8], angelSrcRect; +RgnHandle roomRgn; +GWorldPtr pageSrcMap, gameOverSrcMap, angelSrcMap; +GWorldPtr pageMaskMap, angelMaskMap; +short countDown, stopPages, pagesStuck; +Boolean gameOver; + +extern Rect justRoomsRect; +extern short splashOriginH, splashOriginV, numWork2Main; +extern short numBack2Work; +extern Boolean playing, shadowVisible, demoGoing; + + +//============================================================== Functions +//-------------------------------------------------------------- DoGameOver + +// Handles a game over. This is a game over where the player hasÉ +// completed the house. + +void DoGameOver (void) +{ + playing = false; + SetUpFinalScreen(); + SetPort((GrafPtr)mainWindow); + ColorRect(&mainWindowRect, 244); + DoGameOverStarAnimation(); + if (!TestHighScore()) + RedrawSplashScreen(); +} + +//-------------------------------------------------------------- SetUpFinalScreen + +// This sets up the game over screen (again, this function is for whenÉ +// the player completes the house). + +void SetUpFinalScreen (void) +{ + Rect tempRect; + Str255 tempStr, subStr; + short count, offset, i, textDown; + char wasState; + + SetPort((GrafPtr)workSrcMap); + ColorRect(&workSrcRect, 244); + QSetRect(&tempRect, 0, 0, 640, 460); + CenterRectInRect(&tempRect, &workSrcRect); + LoadScaledGraphic(kMilkywayPictID, &tempRect); + textDown = tempRect.top; + if (textDown < 0) + textDown = 0; + + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + PasStringCopy((*thisHouse)->trailer, tempStr); + HSetState((Handle)thisHouse, wasState); + + count = 0; + do + { + GetLineOfText(tempStr, count, subStr); + offset = ((thisMac.screen.right - thisMac.screen.left) - + TextWidth(subStr, 1, subStr[0])) / 2; + TextFont(applFont); + TextFace(bold); + TextSize(12); + ForeColor(blackColor); + MoveTo(offset + 1, textDown + 33 + (count * 20)); + DrawString(subStr); + ForeColor(whiteColor); + MoveTo(offset, textDown + 32 + (count * 20)); + DrawString(subStr); + ForeColor(blackColor); + count++; + } + while (subStr[0] > 0); + + CopyRectWorkToBack(&workSrcRect); + + for (i = 0; i < 5; i++) // initialize the falling stars + { + pages[i].dest = starSrc[0]; + QOffsetRect(&pages[i].dest, + workSrcRect.right + RandomInt(workSrcRect.right / 5) + + (workSrcRect.right/ 4) * i, + RandomInt(workSrcRect.bottom) - workSrcRect.bottom / 2); + pages[i].was = pages[i].dest; + pages[i].frame = RandomInt(6); + } +} + +//-------------------------------------------------------------- DoGameOverStarAnimation + +// This handles the falling stars and the flying angel when a playerÉ +// completes a house. + +void DoGameOverStarAnimation (void) +{ + #define kStarFalls 8 + EventRecord theEvent; + KeyMap theKeys; + Rect angelDest; + long nextLoop; + short which, i, count, pass; + Boolean noInteruption; + + angelDest = angelSrcRect; + QOffsetRect(&angelDest, -96, 0); + noInteruption = true; + nextLoop = TickCount() + 2; + count = 0; + pass = 0; + FlushEvents(everyEvent, 0); + + while (noInteruption) + { + if ((angelDest.left % 32) == 0) // add a star + { + PlayPrioritySound(kMysticSound, kMysticPriority); + which = angelDest.left / 32; + which = which % 5; + ZeroRectCorner(&pages[which].dest); + QOffsetRect(&pages[which].dest, angelDest.left, angelDest.bottom); + if (count < (which + 1)) + count = which + 1; + } + + for (i = 0; i < count; i++) + { + pages[i].frame++; + if (pages[i].frame >= 6) + pages[i].frame = 0; + + CopyMask((BitMap *)*GetGWorldPixMap(bonusSrcMap), + (BitMap *)*GetGWorldPixMap(bonusMaskMap), + (BitMap *)*GetGWorldPixMap(workSrcMap), + &starSrc[pages[i].frame], + &starSrc[pages[i].frame], + &pages[i].dest); + + pages[i].was = pages[i].dest; + pages[i].was.top -= kStarFalls; + + AddRectToWorkRectsWhole(&pages[i].was); + AddRectToBackRects(&pages[i].dest); + + if (pages[i].dest.top < workSrcRect.bottom) + QOffsetRect(&pages[i].dest, 0, kStarFalls); + } + + if (angelDest.left <= (workSrcRect.right + 2)) + { + CopyMask((BitMap *)*GetGWorldPixMap(angelSrcMap), + (BitMap *)*GetGWorldPixMap(angelMaskMap), + (BitMap *)*GetGWorldPixMap(workSrcMap), + &angelSrcRect, &angelSrcRect, &angelDest); + angelDest.left -= 2; + AddRectToWorkRectsWhole(&angelDest); + angelDest.left += 2; + AddRectToBackRects(&angelDest); + QOffsetRect(&angelDest, 2, 0); + pass = 0; + } + + CopyRectsQD(); + + numWork2Main = 0; + numBack2Work = 0; + + do + { + GetKeys(theKeys); + if ((BitTst(&theKeys, kCommandKeyMap)) || (BitTst(&theKeys, kOptionKeyMap)) || + (BitTst(&theKeys, kShiftKeyMap)) || (BitTst(&theKeys, kControlKeyMap))) + noInteruption = false; + if (GetNextEvent(everyEvent, &theEvent)) + if ((theEvent.what == mouseDown) || (theEvent.what == keyDown)) + noInteruption = false; + } + while (TickCount() < nextLoop); + nextLoop = TickCount() + 2; + + if (pass < 80) + pass++; + else + { + WaitForInputEvent(5); + noInteruption = false; + } + } +} + +//-------------------------------------------------------------- FlagGameOver + +// Called to indicate (flag) that a game is over. Actual game overÉ +// sequence comes up after a short delay. + +void FlagGameOver (void) +{ + gameOver = true; + countDown = kNumCountDownFrames; + SetMusicalMode(kPlayWholeScoreMode); +} + +//-------------------------------------------------------------- InitDiedGameOver +// This is called when a game is over due to the fact that the playerÉ +// lost their last glider (died), not due to getting through the entireÉ +// house. This function initializes the strucures/variables. + +void InitDiedGameOver (void) +{ + #define kPageSpacing 40 + #define kPageRightOffset 128 + #define kPageBackUp 128 + short i; + CGrafPtr wasCPort; + GDHandle wasWorld; + OSErr theErr; + + GetGWorld(&wasCPort, &wasWorld); + + QSetRect(&pageSrcRect, 0, 0, 25, 32 * 8); + theErr = CreateOffScreenGWorld(&gameOverSrcMap, &pageSrcRect, kPreferredDepth); + SetGWorld(gameOverSrcMap, nil); + LoadGraphic(kLettersPictID); + + QSetRect(&pageSrcRect, 0, 0, 32, 32 * kPageFrames); + theErr = CreateOffScreenGWorld(&pageSrcMap, &pageSrcRect, kPreferredDepth); + SetGWorld(pageSrcMap, nil); + LoadGraphic(kPagesPictID); + + theErr = CreateOffScreenGWorld(&pageMaskMap, &pageSrcRect, 1); + SetGWorld(pageMaskMap, nil); + LoadGraphic(kPagesMaskID); + + for (i = 0; i < kPageFrames; i++) // initialize src page rects + { + QSetRect(&pageSrc[i], 0, 0, 32, 32); + QOffsetRect(&pageSrc[i], 0, 32 * i); + } + + for (i = 0; i < 8; i++) // initialize dest page rects + { + QSetRect(&pages[i].dest, 0, 0, 32, 32); + CenterRectInRect(&pages[i].dest, &thisMac.screen); + QOffsetRect(&pages[i].dest, -thisMac.screen.left, -thisMac.screen.top); + if (i < 4) + QOffsetRect(&pages[i].dest, -kPageSpacing * (4 - i), 0); + else + QOffsetRect(&pages[i].dest, kPageSpacing * (i - 3), 0); + QOffsetRect(&pages[i].dest, (thisMac.screen.right - thisMac.screen.left) / -2, + (thisMac.screen.right - thisMac.screen.left) / -2); + if (pages[i].dest.left % 2 == 1) + QOffsetRect(&pages[i].dest, 1, 0); + pages[i].was = pages[i].dest; + pages[i].frame = 0; + pages[i].counter = RandomInt(32); + pages[i].stuck = false; + } + + for (i = 0; i < 8; i++) + { + QSetRect(&lettersSrc[i], 0, 0, 25, 32); + QOffsetRect(&lettersSrc[i], 0, 32 * i); + } + + roomRgn = NewRgn(); + RectRgn(roomRgn, &justRoomsRect); + pagesStuck = 0; + stopPages = ((thisMac.screen.bottom - thisMac.screen.top) / 2) - 16; +} + +//-------------------------------------------------------------- HandlePages + +// This handles the pieces of paper that blow across the screen. + +void HandlePages (void) +{ + short i; + + for (i = 0; i < 8; i++) + { + if ((pages[i].dest.bottom + RandomInt(8)) > stopPages) + { + pages[i].frame = 0; + if (!pages[i].stuck) + { + pages[i].dest.right = pages[i].dest.left + 25; + pages[i].stuck = true; + pagesStuck++; + } + } + else + { + if (pages[i].frame == 0) + { + pages[i].counter--; + if (pages[i].counter <= 0) + pages[i].frame = 1; + } + else if (pages[i].frame == 7) + { + pages[i].counter--; + if (pages[i].counter <= 0) + { + pages[i].frame = 8; + if (RandomInt(2) == 0) + PlayPrioritySound(kPaper3Sound, kPapersPriority); + else + PlayPrioritySound(kPaper4Sound, kPapersPriority); + } + else + QOffsetRect(&pages[i].dest, 10, 10); + } + else + { + pages[i].frame++; + switch (pages[i].frame) + { + case 5: + QOffsetRect(&pages[i].dest, 6, 6); + break; + + case 6: + QOffsetRect(&pages[i].dest, 8, 8); + break; + + case 7: + QOffsetRect(&pages[i].dest, 8, 8); + pages[i].counter = RandomInt(4) + 4; + break; + + case 8: + case 9: + QOffsetRect(&pages[i].dest, 8, 8); + break; + + case 10: + QOffsetRect(&pages[i].dest, 6, 6); + break; + + case kPageFrames: + QOffsetRect(&pages[i].dest, 8, 0); + pages[i].frame = 0; + pages[i].counter = RandomInt(8) + 8; + if (RandomInt(2) == 0) + PlayPrioritySound(kPaper1Sound, kPapersPriority); + else + PlayPrioritySound(kPaper2Sound, kPapersPriority); + break; + } + } + } + } +} + +//-------------------------------------------------------------- DrawPages + +// This function does the drawing for the pieces of paper that blowÉ +// across the screen. + +void DrawPages (void) +{ + short i; + + for (i = 0; i < 8; i++) + { + if (pages[i].stuck) + { + CopyBits((BitMap *)*GetGWorldPixMap(gameOverSrcMap), + (BitMap *)*GetGWorldPixMap(workSrcMap), + &lettersSrc[i], &pages[i].dest, + srcCopy, roomRgn); + } + else + { + CopyMask((BitMap *)*GetGWorldPixMap(pageSrcMap), + (BitMap *)*GetGWorldPixMap(pageMaskMap), + (BitMap *)*GetGWorldPixMap(workSrcMap), + &pageSrc[pages[i].frame], + &pageSrc[pages[i].frame], + &pages[i].dest); + } + + QUnionSimilarRect(&pages[i].dest, &pages[i].was, &pages[i].was); + AddRectToWorkRects(&pages[i].was); + AddRectToBackRects(&pages[i].dest); + + CopyRectsQD(); + + numWork2Main = 0; + numBack2Work = 0; + + pages[i].was = pages[i].dest; + } +} + +//-------------------------------------------------------------- DoDiedGameOver + +// This is called when a game is over due to the fact that the playerÉ +// lost their last glider (died), not due to getting through the entireÉ +// house. + +void DoDiedGameOver (void) +{ + EventRecord theEvent; + KeyMap theKeys; + long nextLoop; + Boolean userAborted; + + userAborted = false; + InitDiedGameOver(); + CopyRectMainToWork(&workSrcRect); + CopyRectMainToBack(&workSrcRect); + FlushEvents(everyEvent, 0); + + nextLoop = TickCount() + 2; + while (pagesStuck < 8) + { + HandlePages(); + DrawPages(); + do + { + GetKeys(theKeys); + if ((BitTst(&theKeys, kCommandKeyMap)) || (BitTst(&theKeys, kOptionKeyMap)) || + (BitTst(&theKeys, kShiftKeyMap)) || (BitTst(&theKeys, kControlKeyMap))) + { + pagesStuck = 8; + userAborted = true; + } + if (GetNextEvent(everyEvent, &theEvent)) + if ((theEvent.what == mouseDown) || (theEvent.what == keyDown)) + { + pagesStuck = 8; + userAborted = true; + } + } + while (TickCount() < nextLoop); + nextLoop = TickCount() + 2; + } + + if (roomRgn != nil) + DisposeRgn(roomRgn); + + DisposeGWorld(pageSrcMap); + pageSrcMap = nil; + + DisposeGWorld(pageMaskMap); + pageMaskMap = nil; + + DisposeGWorld(gameOverSrcMap); + gameOverSrcMap = nil; + playing = false; + + if (demoGoing) + { + if (!userAborted) + WaitForInputEvent(1); + } + else + { + if (!userAborted) + WaitForInputEvent(10); + TestHighScore(); + } + RedrawSplashScreen(); +} + diff --git a/GpApp/GameOver.h b/GpApp/GameOver.h new file mode 100644 index 0000000..b71723e --- /dev/null +++ b/GpApp/GameOver.h @@ -0,0 +1,12 @@ +//============================================================================ +//---------------------------------------------------------------------------- +// GameOver.h +//---------------------------------------------------------------------------- +//============================================================================ + + +#include "PLQDOffscreen.h" + + +extern GWorldPtr angelSrcMap; +extern GWorldPtr angelMaskMap; diff --git a/GpApp/GliderDefines.h b/GpApp/GliderDefines.h new file mode 100644 index 0000000..175eb3d --- /dev/null +++ b/GpApp/GliderDefines.h @@ -0,0 +1,625 @@ + +//============================================================================ +//---------------------------------------------------------------------------- +// GliderDefines.h +//---------------------------------------------------------------------------- +//============================================================================ + + +//============================================================== Defines + +//#define CREATEDEMODATA +//#define COMPILEDEMO +//#define CAREFULDEBUG +#define COMPILENOCP +#define COMPILEQT +#define BUILD_ARCADE_VERSION 1 + +#define kYellowUnaccounted 1 +#define kYellowFailedResOpen 2 +#define kYellowFailedResAdd 3 +#define kYellowFailedResCreate 4 +#define kYellowNoHouses 5 +#define kYellowNewerVersion 6 +#define kYellowNoBackground 7 +#define kYellowIllegalRoomNum 8 +#define kYellowNoBoundsRes 9 +#define kYellowScrapError 10 +#define kYellowNoMemory 11 +#define kYellowFailedWrite 12 +#define kYellowNoMusic 13 +#define kYellowFailedSound 14 +#define kYellowAppleEventErr 15 +#define kYellowOpenedOldHouse 16 +#define kYellowLostAllHouses 17 +#define kYellowFailedSaveGame 18 +#define kYellowSavedTimeWrong 19 +#define kYellowSavedVersWrong 20 +#define kYellowSavedRoomsWrong 21 +#define kYellowQTMovieNotLoaded 22 +#define kYellowNoRooms 23 +#define kYellowCantOrderLinks 24 + +#define kSwitchIfNeeded 0 +#define kSwitchTo256Colors 1 +#define kSwitchTo16Grays 2 + +#define kProdGameScoreMode -4 +#define kKickGameScoreMode -3 +#define kPlayGameScoreMode -2 +#define kPlayWholeScoreMode -1 +#define kPlayChorus 4 +#define kPlayRefrainSparse1 5 +#define kPlayRefrainSparse2 6 + +#define kHitWallSound 0 // ¥¥¥¥¥¥ +#define kFadeInSound 1 // ¥¥ +#define kFadeOutSound 2 // ¥¥¥¥¥¥ +#define kBeepsSound 3 // ¥¥ +#define kBuzzerSound 4 // ¥¥¥¥¥¥ +#define kDingSound 5 // +#define kEnergizeSound 6 // ¥¥¥¥¥¥ +#define kFollowSound 7 // ¥¥ ¥¥ +#define kMicrowavedSound 8 // ¥¥ ¥¥ +#define kSwitchSound 9 // ¥¥ ¥¥ +#define kBirdSound 10 // ¥¥¥¥¥¥ +#define kCuckooSound 11 // +#define kTikSound 12 // ¥¥ ¥¥ +#define kTokSound 13 // ¥¥ ¥¥ +#define kBlowerOn 14 // ¥¥ ¥¥ +#define kBlowerOff 15 // ¥¥ ¥¥ +#define kCaughtFireSound 16 // ¥¥¥¥¥¥ +#define kScoreTikSound 17 // +#define kThrustSound 18 // ¥¥¥ ¥¥ +#define kFizzleSound 19 // ¥¥¥¥ ¥¥ +#define kFireBandSound 20 // ¥¥ ¥¥ ¥¥ +#define kBandReboundSound 21 // ¥¥ ¥¥¥¥ +#define kGreaseSpillSound 22 // ¥¥ ¥¥¥ +#define kChordSound 23 // +#define kVCRSound 24 // ¥¥¥¥¥¥¥ +#define kFoilHitSound 25 // ¥¥ ¥¥ +#define kShredSound 26 // ¥¥ ¥¥ +#define kToastLaunchSound 27 // ¥¥ ¥¥ +#define kToastLandSound 28 // ¥¥¥¥¥¥¥ +#define kMacOnSound 29 // +#define kMacBeepSound 30 // +#define kMacOffSound 31 // +#define kTVOnSound 32 // +#define kTVOffSound 33 // ¥¥¥¥¥¥ +#define kCoffeeSound 34 // ¥¥ +#define kMysticSound 35 // ¥¥¥¥¥¥ +#define kZapSound 36 // ¥¥ +#define kPopSound 37 // ¥¥¥¥¥¥ +#define kEnemyInSound 38 // +#define kEnemyOutSound 39 // ¥¥¥¥¥¥ +#define kPaperCrunchSound 40 // ¥¥ ¥¥ +#define kBounceSound 41 // ¥¥ ¥¥ +#define kDripSound 42 // ¥¥ ¥¥ +#define kDropSound 43 // ¥¥¥¥¥¥ +#define kFishOutSound 44 // +#define kFishInSound 45 // ¥¥ ¥¥ +#define kDontExitSound 46 // ¥¥ ¥¥ +#define kSizzleSound 47 // ¥¥ ¥¥ +#define kPaper1Sound 48 // ¥¥ ¥¥ +#define kPaper2Sound 49 // ¥¥¥¥¥¥ +#define kPaper3Sound 50 // +#define kPaper4Sound 51 // ¥¥¥ ¥¥ +#define kTypingSound 52 // ¥¥¥¥ ¥¥ +#define kCarriageSound 53 // ¥¥ ¥¥ ¥¥ +#define kChord2Sound 54 // ¥¥ ¥¥¥¥ +#define kPhoneRingSound 55 // ¥¥ ¥¥¥ +#define kChime1Sound 56 // +#define kChime2Sound 57 // ¥¥¥¥¥¥¥ +#define kWebTwangSound 58 // ¥¥ ¥¥ +#define kTransOutSound 59 // ¥¥ ¥¥ +#define kTransInSound 60 // ¥¥ ¥¥ +#define kBonusSound 61 // ¥¥¥¥¥¥¥ +#define kHissSound 62 // +#define kTriggerSound 63 + +#define kHitWallPriority 100 // ¥¥¥¥¥¥ +#define kScoreTikPriority 101 // ¥¥ +#define kBandReboundPriority 102 // ¥¥¥¥¥¥ +#define kDontExitPriority 103 // ¥¥ +#define kTikPriority 200 // ¥¥¥¥¥¥ +#define kTokPriority 201 // +#define kMysticPriority 202 // ¥¥¥¥¥¥ +#define kChime1Priority 203 // ¥¥ ¥¥ +#define kChime2Priority 204 // ¥¥ ¥¥ +#define kThrustPriority 300 // ¥¥ ¥¥ +#define kFireBandPriority 301 // ¥¥¥¥¥¥ +#define kChordPriority 302 // +#define kVCRPriority 303 // ¥¥ ¥¥ +#define kToastLaunchPriority 304 // ¥¥ ¥¥ +#define kToastLandPriority 305 // ¥¥ ¥¥ +#define kCoffeePriority 306 // ¥¥ ¥¥ +#define kBouncePriority 307 // ¥¥¥¥¥¥ +#define kDripPriority 308 // +#define kDropPriority 309 // ¥¥¥ ¥¥ +#define kWebTwangPriority 310 // ¥¥¥¥ ¥¥ +#define kHissPriority 311 // ¥¥ ¥¥ ¥¥ +#define kFoilHitPriority 400 // ¥¥ ¥¥¥¥ +#define kMacOnPriority 401 // ¥¥ ¥¥¥ +#define kMacOffPriority 402 // +#define kMacBeepPriority 403 // ¥¥¥¥¥¥¥ +#define kTVOnPriority 404 // ¥¥ ¥¥ +#define kTVOffPriority 405 // ¥¥ ¥¥ +#define kZapPriority 406 // ¥¥ ¥¥ +#define kPopPriority 407 // ¥¥¥¥¥¥¥ +#define kEnemyInPriority 408 // +#define kEnemyOutPriority 409 // +#define kPaperCrunchPriority 410 // +#define kFishOutPriority 411 // +#define kFishInPriority 412 // +#define kSizzlePriority 413 +#define kPhoneRingPriority 500 +#define kSwitchPriority 700 +#define kBlowerOnPriority 701 +#define kBlowerOffPriority 702 +#define kFizzlePriority 703 +#define kBeepsPriority 800 +#define kBuzzerPriority 801 +#define kDingPriority 802 +#define kEnergizePriority 803 +#define kBirdPriority 804 +#define kCuckooPriority 805 +#define kGreaseSpillPriority 806 +#define kPapersPriority 807 +#define kTypingPriority 808 +#define kCarriagePriority 809 +#define kChord2Priority 810 +#define kMicrowavedPriority 811 +#define kBonusPriority 812 +#define kFadeInPriority 900 +#define kFadeOutPriority 901 +#define kCaughtFirePriority 902 +#define kShredPriority 903 +#define kFollowPriority 904 +#define kTransInPriority 905 +#define kTransOutPriority 906 +#define kTriggerPriority 999 + +#define kArrowCursor 0 +#define kBeamCursor 1 +#define kHandCursor 2 + +#define kAppleMenuID 128 +#define kGameMenuID 129 +#define kOptionsMenuID 130 +#define kHouseMenuID 131 + +#define kSplashMode 0 +#define kEditMode 1 +#define kPlayMode 2 + +#define kIdleSplashMode 0 +#define kIdleDemoMode 1 +#define kIdleSplashTicks 7200L // 2 minutes +#define kIdleLastMode 1 + +#define kRoomAbove 1 +#define kRoomBelow 2 +#define kRoomToRight 3 +#define kRoomToLeft 4 + +#define kBumpUp 1 +#define kBumpDown 2 +#define kBumpRight 3 +#define kBumpLeft 4 + +#define kAbove 1 +#define kToRight 2 +#define kBelow 3 +#define kToLeft 4 +#define kBottomCorner 5 +#define kTopCorner 6 + +#define kCentralRoom 0 +#define kNorthRoom 1 +#define kNorthEastRoom 2 +#define kEastRoom 3 +#define kSouthEastRoom 4 +#define kSouthRoom 5 +#define kSouthWestRoom 6 +#define kWestRoom 7 +#define kNorthWestRoom 8 + +#define kSimpleRoom 2000 +#define kPaneledRoom 2001 +#define kBasement 2002 +#define kChildsRoom 2003 +#define kAsianRoom 2004 +#define kUnfinishedRoom 2005 +#define kSwingersRoom 2006 +#define kBathroom 2007 +#define kLibrary 2008 +#define kGarden 2009 +#define kSkywalk 2010 +#define kDirt 2011 +#define kMeadow 2012 +#define kField 2013 +#define kRoof 2014 +#define kSky 2015 +#define kStratosphere 2016 +#define kStars 2017 + +#define kMapRoomHeight 20 +#define kMapRoomWidth 32 + +#define kMaxScores 10 +#define kMaxRoomObs 24 +#define kMaxSparkles 3 +#define kNumSparkleModes 5 +#define kMaxFlyingPts 3 +#define kMaxFlyingPointsLoop 24 +#define kMaxCandles 20 +#define kMaxTikis 8 +#define kMaxCoals 8 +#define kMaxPendulums 8 +#define kMaxHotSpots 56 +#define kMaxSavedMaps 24 +#define kMaxRubberBands 2 +#define kMaxGrease 16 +#define kMaxStars 4 +#define kMaxShredded 4 +#define kMaxDynamicObs 18 +#define kMaxMasterObjects 216 // kMaxRoomObs * 9 +#define kMaxViewWidth 1536 +#define kMaxViewHeight 1026 + +#define kSelectTool 0 + +#define kBlowerMode 1 +#define kFurnitureMode 2 +#define kBonusMode 3 +#define kTransportMode 4 +#define kSwitchMode 5 +#define kLightMode 6 +#define kApplianceMode 7 +#define kEnemyMode 8 +#define kClutterMode 9 + +#define kIgnoreIt 0 // ¥¥¥¥¥¥ +#define kLiftIt 1 // ¥¥ ¥¥ +#define kDropIt 2 // ¥¥¥¥¥¥¥¥ +#define kPushItLeft 3 // ¥¥ ¥¥ +#define kPushItRight 4 // ¥¥ ¥¥ +#define kDissolveIt 5 // +#define kRewardIt 6 // ¥¥¥¥¥¥ +#define kMoveItUp 7 // ¥¥ ¥¥ +#define kMoveItDown 8 // ¥¥ +#define kSwitchIt 9 // ¥¥ ¥¥ +#define kShredIt 10 // ¥¥¥¥¥¥ +#define kStrumIt 11 // +#define kTriggerIt 12 // ¥¥¥¥¥¥¥¥ +#define kBurnIt 13 // ¥¥ +#define kSlideIt 14 // ¥¥ +#define kTransportIt 15 // ¥¥ +#define kIgnoreLeftWall 16 // ¥¥ +#define kIgnoreRightWall 17 // +#define kMailItLeft 18 // ¥¥¥¥¥¥ +#define kMailItRight 19 // ¥¥ +#define kDuctItDown 20 // ¥¥ +#define kDuctItUp 21 // ¥¥ +#define kMicrowaveIt 22 // ¥¥¥¥¥¥ +#define kIgnoreGround 23 // +#define kBounceIt 24 // +#define kChimeIt 25 // ¥¥ +#define kWebIt 26 // ¥¥ +#define kSoundIt 27 + +#define kFloorVent 0x01 // Blowers +#define kCeilingVent 0x02 +#define kFloorBlower 0x03 +#define kCeilingBlower 0x04 +#define kSewerGrate 0x05 +#define kLeftFan 0x06 +#define kRightFan 0x07 +#define kTaper 0x08 +#define kCandle 0x09 +#define kStubby 0x0A +#define kTiki 0x0B +#define kBBQ 0x0C +#define kInvisBlower 0x0D +#define kGrecoVent 0x0E +#define kSewerBlower 0x0F +#define kLiftArea 0x10 + +#define kTable 0x11 // Furniture +#define kShelf 0x12 +#define kCabinet 0x13 +#define kFilingCabinet 0x14 +#define kWasteBasket 0x15 +#define kMilkCrate 0x16 +#define kCounter 0x17 +#define kDresser 0x18 +#define kDeckTable 0x19 +#define kStool 0x1A +#define kTrunk 0x1B +#define kInvisObstacle 0x1C +#define kManhole 0x1D +#define kBooks 0x1E +#define kInvisBounce 0x1F + +#define kRedClock 0x21 // Prizes +#define kBlueClock 0x22 +#define kYellowClock 0x23 +#define kCuckoo 0x24 +#define kPaper 0x25 +#define kBattery 0x26 +#define kBands 0x27 +#define kGreaseRt 0x28 +#define kGreaseLf 0x29 +#define kFoil 0x2A +#define kInvisBonus 0x2B +#define kStar 0x2C +#define kSparkle 0x2D +#define kHelium 0x2E +#define kSlider 0x2F + +#define kUpStairs 0x31 // Transport +#define kDownStairs 0x32 +#define kMailboxLf 0x33 +#define kMailboxRt 0x34 +#define kFloorTrans 0x35 +#define kCeilingTrans 0x36 +#define kDoorInLf 0x37 +#define kDoorInRt 0x38 +#define kDoorExRt 0x39 +#define kDoorExLf 0x3A +#define kWindowInLf 0x3B +#define kWindowInRt 0x3C +#define kWindowExRt 0x3D +#define kWindowExLf 0x3E +#define kInvisTrans 0x3F +#define kDeluxeTrans 0x40 + +#define kLightSwitch 0x41 // Switches +#define kMachineSwitch 0x42 +#define kThermostat 0x43 +#define kPowerSwitch 0x44 +#define kKnifeSwitch 0x45 +#define kInvisSwitch 0x46 +#define kTrigger 0x47 +#define kLgTrigger 0x48 +#define kSoundTrigger 0x49 + +#define kCeilingLight 0x51 // Lights +#define kLightBulb 0x52 +#define kTableLamp 0x53 +#define kHipLamp 0x54 +#define kDecoLamp 0x55 +#define kFlourescent 0x56 +#define kTrackLight 0x57 +#define kInvisLight 0x58 + +#define kShredder 0x61 // Appliances +#define kToaster 0x62 +#define kMacPlus 0x63 +#define kGuitar 0x64 +#define kTV 0x65 +#define kCoffee 0x66 +#define kOutlet 0x67 +#define kVCR 0x68 +#define kStereo 0x69 +#define kMicrowave 0x6A +#define kCinderBlock 0x6B +#define kFlowerBox 0x6C +#define kCDs 0x6D +#define kCustomPict 0x6E + +#define kBalloon 0x71 // Enemies +#define kCopterLf 0x72 +#define kCopterRt 0x73 +#define kDartLf 0x74 +#define kDartRt 0x75 +#define kBall 0x76 +#define kDrip 0x77 +#define kFish 0x78 +#define kCobweb 0x79 + +#define kOzma 0x81 // Clutter +#define kMirror 0x82 +#define kMousehole 0x83 +#define kFireplace 0x84 +#define kFlower 0x85 +#define kWallWindow 0x86 +#define kBear 0x87 +#define kCalendar 0x88 +#define kVase1 0x89 +#define kVase2 0x8A +#define kBulletin 0x8B +#define kCloud 0x8C +#define kFaucet 0x8D +#define kRug 0x8E +#define kChimes 0x8F + +#define kNumSrcRects 0x90 + +#define kTableThick 8 +#define kShelfThick 6 +#define kToggle 0 +#define kForceOn 1 +#define kForceOff 2 +#define kOneShot 3 +#define kNumTrackLights 3 +#define kNumOutletPicts 4 +#define kNumCandleFlames 5 +#define kNumTikiFlames 5 +#define kNumBBQCoals 4 +#define kNumPendulums 3 +#define kNumBreadPicts 6 +#define kNumBalloonFrames 8 +#define kNumCopterFrames 10 +#define kNumDartFrames 4 +#define kNumBallFrames 2 +#define kNumDripFrames 6 +#define kNumFishFrames 8 +#define kNumFlowers 6 + +#define kNumMarqueePats 7 +#define kObjectNameStrings 1007 + +#define kSwitchLinkOnly 3 +#define kTriggerLinkOnly 4 +#define kTransportLinkOnly 5 + +#define kFloorVentTop 305 +#define kCeilingVentTop 8 +#define kFloorBlowerTop 304 +#define kCeilingBlowerTop 5 +#define kSewerGrateTop 303 +#define kCeilingTransTop 6 +#define kFloorTransTop 302 +#define kStairsTop 28 +#define kCounterBottom 304 +#define kDresserBottom 293 +#define kCeilingLightTop 4 +#define kHipLampTop 23 +#define kDecoLampTop 91 +#define kFlourescentTop 12 +#define kTrackLightTop 5 + +#define kDoorInTop 0 +#define kDoorInLfLeft 0 +#define kDoorInRtLeft 368 +#define kDoorExTop 0 +#define kDoorExLfLeft 0 +#define kDoorExRtLeft 496 +#define kWindowInTop 64 +#define kWindowInLfLeft 0 +#define kWindowInRtLeft 492 +#define kWindowExTop 64 +#define kWindowExLfLeft 0 +#define kWindowExRtLeft 496 + +#define kNumTiles 8 +#define kTileWide 64 +#define kTileHigh 322 +#define kRoomWide 512 // kNumTiles * kTileWide +#define kFloorSupportTall 44 +#define kVertLocalOffset 322 // kTileHigh - 39 (was 283, then 295) + +#define kCeilingLimit 8 +#define kFloorLimit 312 +#define kRoofLimit 122 +#define kLeftWallLimit 12 +#define kNoLeftWallLimit -24 // 0 - (kGliderWide / 2) +#define kRightWallLimit 500 +#define kNoRightWallLimit 536 // kRoomWide + (kGliderWide / 2) +#define kNoCeilingLimit -10 +#define kNoFloorLimit 332 + +#define kScoreboardHigh 0 +#define kScoreboardLow 1 +#define kScoreboardTall 20 + +#define kHouseVersion 0x0200 +#define kNewHouseVersion 0x0300 +#define kBaseBackgroundID 2000 +#define kFirstOutdoorBack 2009 +#define kNumBackgrounds 18 +#define kUserBackground 3000 +#define kUserStructureRange 3300 +#define kSplash8BitPICT 1000 +#define kRoomIsEmpty -1 +#define kObjectIsEmpty -1 +#define kNoObjectSelected -1 +#define kInitialGliderSelected -2 +#define kLeftGliderSelected -3 +#define kRightGliderSelected -4 +#define kWindoidWDEF 2048 +#define kWindoidGrowWDEF 2064 +#define kTicksPerFrame 2 +#define kStarPictID 1995 +#define kNumUndergroundFloors 8 +#define kRoomVisitScore 100 +#define kRedClockPoints 100 +#define kBlueClockPoints 300 +#define kYellowClockPoints 500 +#define kCuckooClockPoints 1000 +#define kStarPoints 5000 +#define kRedOrangeColor8 23 // actually, 18 +#define kMaxNumRoomsH 128 +#define kMaxNumRoomsV 64 +#define kStartSparkle 4 +#define kLengthOfZap 30 + +#define kGliderWide 48 +#define kGliderHigh 20 +#define kHalfGliderWide 24 +#define kGliderBurningHigh 26 +#define kShadowHigh 9 +#define kShadowTop 306 +#define kFaceRight TRUE +#define kFaceLeft FALSE +#define kPlayer1 TRUE +#define kPlayer2 FALSE +#define kNumGliderSrcRects 31 +#define kNumShadowSrcRects 2 +#define kFirstAboutFaceFrame 18 +#define kLastAboutFaceFrame 20 +#define kWasBurning 2 +#define kLeftFadeOffset 7 +#define kLastFadeSequence 16 +#define kGliderFoil2PictID 3963 +#define kGlider2PictID 3974 +#define kGliderFoilPictID 3976 +#define kGliderPictID 3999 +#define kGliderStartsDown 32 + +#define kGliderNormal 0 // ¥¥ ¥¥ +#define kGliderFadingIn 1 // ¥¥¥ ¥¥¥ +#define kGliderFadingOut 2 // ¥¥ ¥¥ ¥¥ +#define kGliderGoingUp 3 // ¥¥ ¥¥ +#define kGliderComingUp 4 // ¥¥ ¥¥ +#define kGliderGoingDown 5 // +#define kGliderComingDown 6 // ¥¥¥¥¥¥ +#define kGliderFaceLeft 7 // ¥¥ ¥¥ +#define kGliderFaceRight 8 // ¥¥ ¥¥ +#define kGliderBurning 9 // ¥¥ ¥¥ +#define kGliderTransporting 10 // ¥¥¥¥¥¥ +#define kGliderDuctingDown 11 // +#define kGliderDuctingUp 12 // ¥¥¥¥¥¥¥ +#define kGliderDuctingIn 13 // ¥¥ ¥¥ +#define kGliderMailInLeft 14 // ¥¥ ¥¥ +#define kGliderMailOutLeft 15 // ¥¥ ¥¥ +#define kGliderMailInRight 16 // ¥¥¥¥¥¥¥ +#define kGliderMailOutRight 17 // +#define kGliderGoingFoil 18 // ¥¥¥¥¥¥¥¥ +#define kGliderLosingFoil 19 // ¥¥ +#define kGliderShredding 20 // ¥¥¥¥ +#define kGliderInLimbo 21 // ¥¥ +#define kGliderIdle 22 // ¥¥¥¥¥¥¥¥ +#define kGliderTransportingIn 23 + +#define kPlayerIsDeadForever -69 +#define kPlayerMailedOut -12 +#define kPlayerDuckedOut -11 +#define kPlayerTransportedOut -10 +#define kPlayerEscapingDownStairs -9 +#define kPlayerEscapingUpStairs -8 +#define kPlayerEscapedDownStairs -7 +#define kPlayerEscapedUpStairs -6 +#define kPlayerEscapedDown -5 +#define kPlayerEscapedUp -4 +#define kPlayerEscapedLeft -3 +#define kPlayerEscapedRight -2 +#define kNoOneEscaped -1 + +#define kLinkedToOther 0 +#define kLinkedToLeftMailbox 1 +#define kLinkedToRightMailbox 2 +#define kLinkedToCeilingDuct 3 +#define kLinkedToFloorDuct 4 + +#define kResumeGameMode 0 +#define kNewGameMode 1 + +#define kNormalTitleMode 0 +#define kEscapedTitleMode 1 +#define kSavingTitleMode 2 + +#define kScoreboardPictID 1997 + +#define kDemoLength 6702 diff --git a/GpApp/GliderProtos.h b/GpApp/GliderProtos.h new file mode 100644 index 0000000..45bfdc5 --- /dev/null +++ b/GpApp/GliderProtos.h @@ -0,0 +1,530 @@ + +//============================================================================ +//---------------------------------------------------------------------------- +// GliderProtos.h +//---------------------------------------------------------------------------- +//============================================================================ + + +//-------------------------------------------------------------- Prototypes + +void SetUpAppleEvents (void); // --- AppleEvents.c + +void BringUpBanner (void); // --- Banner.c +SInt16 CountStarsInHouse (void); +void DisplayStarsRemaining (void); + +void SetCoordinateHVD (SInt16, SInt16, SInt16); // --- Coordinate.c +void DeltaCoordinateD (SInt16); +void UpdateCoordWindow (void); +void OpenCoordWindow (void); +void CloseCoordWindow (void); +void ToggleCoordinateWindow (void); + +void NilSavedMaps (void); // --- DynamicMaps.c +SInt16 BackUpToSavedMap (Rect *, SInt16, SInt16); +SInt16 ReBackUpSavedMap (Rect *, SInt16, SInt16); +void RestoreFromSavedMap (SInt16, SInt16, Boolean); +void AddSparkle (Rect *); +void AddFlyingPoint (Rect *, SInt16, SInt16, SInt16); +void ReBackUpFlames (SInt16, SInt16); +void AddCandleFlame (SInt16, SInt16, SInt16, SInt16); +void ReBackUpTikiFlames (SInt16, SInt16); +void AddTikiFlame (SInt16, SInt16, SInt16, SInt16); +void ReBackUpBBQCoals (SInt16, SInt16); +void AddBBQCoals (SInt16, SInt16, SInt16, SInt16); +void ReBackUpPendulum (SInt16, SInt16); +void AddPendulum (SInt16, SInt16, SInt16, SInt16); +void ReBackUpStar (SInt16, SInt16); +void AddStar (SInt16, SInt16, SInt16, SInt16); +void StopPendulum (SInt16, SInt16); +void StopStar (SInt16, SInt16); +void AddAShreddedGlider (Rect *); +void RemoveShreds (void); +void ZeroFlamesAndTheLike (void); + +void CheckDynamicCollision (SInt16, gliderPtr, Boolean); // --- Dynamics.c +Boolean DidBandHitDynamic (SInt16); +void RenderToast (SInt16); +void RenderBalloon (SInt16); +void RenderCopter (SInt16); +void RenderDart (SInt16); +void RenderBall (SInt16); +void RenderDrip (SInt16); +void RenderFish (SInt16); +void HandleSparkleObject (SInt16); +void HandleToast (SInt16); +void HandleMacPlus (SInt16); +void HandleTV (SInt16); +void HandleCoffee (SInt16); +void HandleOutlet (SInt16); +void HandleVCR (SInt16); +void HandleStereo (SInt16); +void HandleMicrowave (SInt16); + +void HandleBalloon (SInt16); // --- Dynamics2.c +void HandleCopter (SInt16); +void HandleDart (SInt16); +void HandleBall (SInt16); +void HandleDrip (SInt16); +void HandleFish (SInt16); + +void HandleDynamics (void); // --- Dynamics3.c +void RenderDynamics (void); +void ZeroDinahs (void); +SInt16 AddDynamicObject (SInt16, Rect *, objectType *, SInt16, SInt16, Boolean); + +void DoGameOver (void); // --- GameOver.c +void FlagGameOver (void); +void DoDiedGameOver (void); + +void HandleGrease (void); // --- Grease.c +SInt16 ReBackUpGrease (SInt16, SInt16); +SInt16 AddGrease (SInt16, SInt16, SInt16, SInt16, SInt16, Boolean); +void SpillGrease (SInt16, SInt16); +void RedrawAllGrease (void); + +void DoHighScores (void); // --- HighScores.c +void SortHighScores (void); +void ZeroHighScores (void); +void ZeroAllButHighestScore (void); +Boolean TestHighScore (void); +Boolean WriteScoresToDisk (void); +Boolean ReadScoresFromDisk (void); + +Boolean CreateNewHouse (void); // --- House.c +Boolean InitializeEmptyHouse (void); +SInt16 RealRoomNumberCount (void); +SInt16 GetFirstRoomNumber (void); +void WhereDoesGliderBegin (Rect *, SInt16); +Boolean HouseHasOriginalPicts (void); +SInt16 CountHouseLinks (void); +void GenerateLinksList (void); +void SortRoomsObjects (SInt16); +void SortHouseObjects (void); +SInt16 CountRoomsVisited (void); +void GenerateRetroLinks (void); +void DoGoToDialog (void); +void ConvertHouseVer1To2 (void); +void ShiftWholeHouse (SInt16); + +void DoHouseInfo (void); // --- HouseInfo.c + +Boolean OpenHouse (void); // --- HouseIO.c +Boolean OpenSpecificHouse (FSSpec *); +Boolean SaveHouseAs (void); +Boolean ReadHouse (void); +Boolean WriteHouse (Boolean); +Boolean CloseHouse (void); +void OpenHouseResFork (void); +void CloseHouseResFork (void); +Boolean QuerySaveChanges (void); +void YellowAlert (SInt16, SInt16); + +Boolean KeepObjectLegal (void); // --- HouseLegal.c +void CheckHouseForProblems (void); + +Boolean SectGlider (gliderPtr, Rect *, Boolean); // --- Interactions.c +void HandleSwitches (hotPtr); +void HandleInteraction (void); +void FlagStillOvers (gliderPtr); + +void InitializeMenus (void); // --- InterfaceInit.c +void GetExtraCursors (void); +void VariableInit (void); + +void GetDemoInput (gliderPtr); // --- Input.c +void GetInput (gliderPtr); + +SInt16 MergeFloorSuite (SInt16, SInt16); // --- Link.c +void ExtractFloorSuite (SInt16, SInt16 *, SInt16 *); +void UpdateLinkControl (void); +void UpdateLinkWindow (void); +void OpenLinkWindow (void); +void CloseLinkWindow (void); +void HandleLinkClick (Point); + +void RedrawSplashScreen (void); // --- MainWindow.c +void UpdateMainWindow (void); +void UpdateMenuBarWindow (void); +void OpenMainWindow (void); +void CloseMainWindow (void); +void ZoomBetweenWindows (void); +void UpdateEditWindowTitle (void); +void HandleMainClick (Point, Boolean); +//void WashColorIn (void); + +void CenterMapOnRoom (SInt16, SInt16); // --- Map.c +Boolean ThisRoomVisibleOnMap (void); +void FindNewActiveRoomRect (void); +void FlagMapRoomsForUpdate (void); +void UpdateMapWindow (void); +void ResizeMapWindow (SInt16, SInt16); +void OpenMapWindow (void); +void CloseMapWindow (void); +void ToggleMapWindow (void); +void HandleMapClick (EventRecord *); +void MoveRoom (Point); + +void DoMarquee (void); // --- Marquee.c +void StartMarquee (Rect *); +void StartMarqueeHandled (Rect *, SInt16, SInt16); +void StopMarquee (void); +void PauseMarquee (void); +void ResumeMarquee (void); +void DragOutMarqueeRect (Point, Rect *); +void DragMarqueeRect (Point, Rect *, Boolean, Boolean); +void DragMarqueeHandle (Point, SInt16 *); +void DragMarqueeCorner (Point, SInt16 *, SInt16 *, Boolean); +Boolean MarqueeHasHandles (SInt16 *, SInt16 *); +Boolean PtInMarqueeHandle (Point); +void SetMarqueeGliderRect (SInt16, SInt16); +void InitMarquee (void); + +void UpdateClipboardMenus (void); // --- Menu.c +void DoAppleMenu (SInt16); +void DoGameMenu (SInt16); +void DoOptionsMenu (SInt16); +void DoHouseMenu (SInt16); +void DoMenuChoice (long); +void UpdateMenus (Boolean); +void UpdateMapCheckmark (Boolean); +void UpdateToolsCheckmark (Boolean); +void UpdateCoordinateCheckmark (Boolean); +#ifdef COMPILEDEMO +void DoNotInDemo (void); +#endif +void OpenCloseEditWindows (void); + +void StartGliderFadingIn (gliderPtr); // --- Modes.c +void StartGliderTransportingIn (gliderPtr); +void StartGliderFadingOut (gliderPtr); +void StartGliderGoingUpStairs (gliderPtr); +void StartGliderGoingDownStairs (gliderPtr); +void StartGliderMailingIn (gliderPtr, Rect *, hotPtr); +void StartGliderMailingOut (gliderPtr); +void StartGliderDuctingDown (gliderPtr, Rect *, hotPtr); +void StartGliderDuctingUp (gliderPtr, Rect *, hotPtr); +void StartGliderDuctingIn (gliderPtr); +void StartGliderTransporting (gliderPtr, hotPtr); +void FlagGliderNormal (gliderPtr); +void FlagGliderShredding (gliderPtr, Rect *); +void FlagGliderBurning (gliderPtr); +void FlagGliderFaceLeft (gliderPtr); +void FlagGliderFaceRight (gliderPtr); +void FlagGliderInLimbo (gliderPtr, Boolean); +void UndoGliderLimbo (gliderPtr); +void ToggleGliderFacing (gliderPtr); +void InsureGliderFacingRight (gliderPtr); +void InsureGliderFacingLeft (gliderPtr); +void ReadyGliderForTripUpStairs (gliderPtr); +void ReadyGliderForTripDownStairs (gliderPtr); +void StartGliderFoilGoing (gliderPtr); +void StartGliderFoilLosing (gliderPtr); +void TagGliderIdle (gliderPtr); + +OSErr StartMusic (void); // --- Music.c +void StopTheMusic (void); +void ToggleMusicWhilePlaying (void); +void SetMusicalMode (SInt16); +void InitMusic (void); +void KillMusic (void); +long MusicBytesNeeded (void); +void TellHerNoMusic (void); + +Boolean AddNewObject (Point, SInt16, Boolean); // --- ObjectAdd.c +SInt16 FindObjectSlotInRoom (SInt16); +Boolean DoesRoomNumHaveObject (SInt16, SInt16); +void ShoutNoMoreObjects (void); + +void DrawSimpleBlowers (SInt16, Rect *); // --- ObjectDraw.c +void DrawTiki (Rect *, SInt16); +void DrawInvisibleBlower (Rect *); +void DrawLiftArea (Rect *); +void DrawTable (Rect *, SInt16); +void DrawShelf (Rect *); +void DrawCabinet (Rect *); +void DrawSimpleFurniture (SInt16, Rect *); +void DrawCounter (Rect *); +void DrawDresser (Rect *); +void DrawDeckTable (Rect *, SInt16); +void DrawStool (Rect *, SInt16); +void DrawInvisObstacle (Rect *); +void DrawInvisBounce (Rect *); +void DrawRedClock (Rect *); +void DrawBlueClock (Rect *); +void DrawYellowClock (Rect *); +void DrawCuckoo (Rect *); +void DrawSimplePrizes (SInt16, Rect *); +void DrawGreaseRt (Rect *, SInt16, Boolean); +void DrawGreaseLf (Rect *, SInt16, Boolean); +void DrawFoil (Rect *); +void DrawInvisBonus (Rect *); +void DrawSlider (Rect *); + +void DrawMailboxLeft (Rect *, SInt16); // --- ObjectDraw2.c +void DrawMailboxRight (Rect *, SInt16); +void DrawSimpleTransport (SInt16, Rect *); +void DrawInvisTransport (Rect *); +void DrawLightSwitch (Rect *, Boolean); +void DrawMachineSwitch (Rect *, Boolean); +void DrawThermostat (Rect *, Boolean); +void DrawPowerSwitch (Rect *, Boolean); +void DrawKnifeSwitch (Rect *, Boolean); +void DrawInvisibleSwitch (Rect *); +void DrawTrigger (Rect *); +void DrawSoundTrigger (Rect *); +void DrawSimpleLight (SInt16, Rect *); +void DrawFlourescent (Rect *); +void DrawSimpleAppliance (SInt16, Rect *); +void DrawMacPlus (Rect *, Boolean, Boolean); +void DrawTrackLight (Rect *); +void DrawInvisLight (Rect *); +void DrawTV (Rect *, Boolean, Boolean); +void DrawCoffee (Rect *, Boolean, Boolean); +void DrawOutlet (Rect *); +void DrawVCR (Rect *, Boolean, Boolean); +void DrawStereo (Rect *, Boolean, Boolean); +void DrawMicrowave (Rect *, Boolean, Boolean); +void DrawBalloon (Rect *); +void DrawCopter (Rect *); +void DrawDart (Rect *, SInt16); +void DrawBall (SInt16, Rect *); +void DrawFish (SInt16, Rect *); +void DrawDrip (Rect *); +void DrawMirror (Rect *); +void DrawSimpleClutter (SInt16, Rect *); +void DrawFlower (Rect *, SInt16); +void DrawWallWindow (Rect *); +void DrawCalendar (Rect *); +void DrawBulletin (Rect *); +void DrawPictObject (SInt16, Rect *); +void DrawPictWithMaskObject (SInt16, Rect *); +void DrawPictSansWhiteObject (SInt16, Rect *); +void DrawCustPictSansWhite (SInt16, Rect *); + +void DrawARoomsObjects (SInt16, Boolean); // --- ObjectDrawAll.c + +void DoSelectionClick (Point, Boolean); // --- ObjectEdit.c +void DoNewObjectClick (Point); +void DeleteObject (void); +void DuplicateObject (void); +void MoveObject (SInt16, Boolean); +void DeselectObject (void); +Boolean ObjectHasHandle (SInt16 *, SInt16 *); +void HandleBlowerGlider (void); +void SelectNextObject (void); +void SelectPrevObject (void); +void GetThisRoomsObjRects (void); +void DrawThisRoomsObjects (void); +void HiliteAllObjects (void); +void GoToObjectInRoom (SInt16, SInt16, SInt16); +void GoToObjectInRoomNum (SInt16, SInt16); + +void DoObjectInfo (void); // --- ObjectInfo.c + +void GetObjectRect (objectPtr, Rect *); // --- ObjectRects.c +SInt16 CreateActiveRects (SInt16); +SInt16 VerticalRoomOffset (SInt16); +void OffsetRectRoomRelative (Rect *, SInt16); +SInt16 GetUpStairsRightEdge (void); +SInt16 GetDownStairsLeftEdge (void); + +SInt16 GetRoomLinked (objectType *); // --- Objects.c +Boolean ObjectIsLinkTransport (objectType *); +Boolean ObjectIsLinkSwitch (objectType *); +void ListAllLocalObjects (void); +Boolean SetObjectState (SInt16, SInt16, SInt16, SInt16); +Boolean GetObjectState (SInt16, SInt16); +void BringSendFrontBack (Boolean); +Boolean IsThisValid (SInt16, SInt16); +void AddTempManholeRect (Rect *); + +void NewGame (SInt16); // --- Play.c +void DoDemoGame (void); +void HideGlider (gliderPtr); +void StrikeChime (void); +void RestoreEntireGameScreen (void); + +void HandleGlider (gliderPtr); // --- Player.c +void FinishGliderUpStairs (gliderPtr); +void FinishGliderDownStairs (gliderPtr); +void FinishGliderDuctingIn (gliderPtr); +void DeckGliderInFoil (gliderPtr); +void RemoveFoilFromGlider (gliderPtr); +void OffsetGlider (gliderPtr, SInt16); +void OffAMortal (gliderPtr); + +void AddRectToWorkRects (Rect *); // --- Render.c +void AddRectToBackRects (Rect *); +void AddRectToWorkRectsWhole (Rect *); +void RenderGlider (gliderPtr, Boolean); +void CopyRectsQD (void); +void DirectWork2Main8 (Rect *); +void DirectBack2Work8 (Rect *); +void DirectGeneric2Work8 (long, long, Rect *, Rect *); +void DirectWork2Main4 (Rect *); +void DirectBack2Work4 (Rect *); +void DirectGeneric2Work4 (long, long, Rect *, Rect *); +void CopyRectsAssm (void); +void DirectFillBack8 (Rect *, Byte); +void DirectFillWork8 (Rect *, Byte); +void DirectFillBack4 (Rect *, Byte); +void DirectFillWork4 (Rect *, Byte); +void RenderFrame (void); +void InitGarbageRects (void); +void CopyRectBackToWork (Rect *); +void CopyRectWorkToBack (Rect *); +void CopyRectWorkToMain (Rect *); +void CopyRectMainToWork (Rect *); +void CopyRectMainToBack (Rect *); +void AddToMirrorRegion (Rect *); +void ZeroMirrorRegion (void); + +void SetInitialTiles (SInt16, Boolean); // --- Room.c +Boolean CreateNewRoom (SInt16, SInt16); +void DoRoomInfo (void); +void ReadyBackground (SInt16, SInt16 *); +void ReflectCurrentRoom (Boolean); +void CopyRoomToThisRoom (SInt16); +void CopyThisRoomToRoom (void); +void ForceThisRoom (SInt16); +Boolean RoomExists (SInt16, SInt16, SInt16 *); +Boolean RoomNumExists (SInt16); +void DeleteRoom (Boolean); +SInt16 DoesNeighborRoomExist (SInt16); +void SelectNeighborRoom (SInt16); +SInt16 GetNeighborRoomNumber (SInt16); +Boolean GetRoomFloorSuite (SInt16, SInt16 *, SInt16 *); +SInt16 GetRoomNumber (SInt16, SInt16); +Boolean IsRoomAStructure (SInt16); +void DetermineRoomOpenings (void); +SInt16 GetOriginalBounding (SInt16); +SInt16 GetNumberOfLights (SInt16); +Boolean IsShadowVisible (void); +Boolean DoesRoomHaveFloor (void); +Boolean DoesRoomHaveCeiling (void); + +void ReadyLevel (void); // --- RoomGraphics.c +void DrawLocale (void); +void RedrawRoomLighting (void); + +Boolean PictIDExists (SInt16); // --- RoomInfo.c + +void HandleBands (void); // --- RubberBands.c +Boolean AddBand (gliderPtr, SInt16, SInt16, Boolean); +void KillAllBands (void); + +void SaveGame2 (void); // --- SavedGames.c +Boolean OpenSavedGame (void); +void SaveGame (Boolean); + +void RefreshScoreboard (SInt16); // --- Scoreboard.c +void HandleDynamicScoreboard (void); +void QuickGlidersRefresh (void); +void QuickScoreRefresh (void); +void QuickBatteryRefresh (Boolean); +void QuickBandsRefresh (Boolean); +void QuickFoilRefresh (Boolean); +void HandleScore (void); +void AdjustScoreboardHeight (void); +void BlackenScoreboard (void); + +//void PutRoomScrap (void); // --- Scrap.c +//void PutObjectScrap (void); +void GetRoomScrap (void); +void GetObjectScrap (void); +//void SeeIfValidScrapAvailable (Boolean); +Boolean HasDragManager (void); +//Boolean DragRoom (EventRecord *, Rect *, SInt16); + +void DoLoadHouse (void); // --- SelectHouse.c +void BuildHouseList (void); +void AddExtraHouse (FSSpec *); + +void DoSettingsMain (void); // --- Settings.c + +void PlayPrioritySound (SInt16, SInt16); // --- Sound.c +void FlushAnyTriggerPlaying (void); +void PlaySound0 (SInt16, SInt16); +void PlaySound1 (SInt16, SInt16); +void PlaySound2 (SInt16, SInt16); +OSErr LoadTriggerSound (SInt16); +void DumpTriggerSound (void); +void InitSound (void); +void KillSound (void); +long SoundBytesNeeded (void); +void TellHerNoSounds (void); +void BitchAboutSM3 (void); + +void InitScoreboardMap (void); // --- StructuresInit.c +void InitGliderMap (void); +void InitBlowers (void); +void InitFurniture (void); +void InitPrizes (void); +void InitTransports (void); +void InitSwitches (void); +void InitLights (void); +void InitAppliances (void); +void InitEnemies (void); + +void CreateOffscreens (void); // --- StructuresInit2.c +void CreatePointers (void); +void InitSrcRects (void); + +void UpdateToolsWindow (void); // --- Tools.c +void EraseSelectedTool (void); +void SelectTool (SInt16); +void OpenToolsWindow (void); +void CloseToolsWindow (void); +void ToggleToolsWindow (void); +void HandleToolsClick (Point); +void NextToolMode (void); +void PrevToolMode (void); +void SetSpecificToolMode (SInt16); + +SInt16 WhatAreWeLinkedTo (SInt16, Byte); // --- Transit.c +void ReadyGliderFromTransit (gliderPtr, SInt16); +void MoveRoomToRoom (gliderPtr, SInt16); +void TransportRoomToRoom (gliderPtr); +void MoveDuctToDuct (gliderPtr); +void MoveMailToMail (gliderPtr); +void ForceKillGlider (void); +void FollowTheLeader (void); + +void PourScreenOn (Rect *); // --- Transitions.c +void WipeScreenOn (SInt16, Rect *); +void DumpScreenOn (Rect *); +//void DissBits (Rect *); +//void DissBitsChunky (Rect *); +//void FillColorNoise (Rect *); +//void FillSnow (Rect *); + +void ToggleToaster (SInt16); // --- Trip.c +void ToggleMacPlus (SInt16); +void ToggleTV (SInt16); +void ToggleCoffee (SInt16); +void ToggleOutlet (SInt16); +void ToggleVCR (SInt16); +void ToggleStereos (SInt16); +void ToggleMicrowave (SInt16); +void ToggleBalloon (SInt16); +void ToggleCopter (SInt16); +void ToggleDart (SInt16); +void ToggleBall (SInt16); +void ToggleDrip (SInt16); +void ToggleFish (SInt16); +void TriggerSwitch (SInt16); +void TriggerToast (SInt16); +void TriggerOutlet (SInt16); +void TriggerDrip (SInt16); +void TriggerFish (SInt16); +void TriggerBalloon (SInt16); +void TriggerCopter (SInt16); +void TriggerDart (SInt16); +void UpdateOutletsLighting (SInt16, SInt16); + +void ArmTrigger (hotPtr); // --- Triggers.c +void HandleTriggers (void); +void ZeroTriggers (void); + diff --git a/GpApp/GliderStructs.h b/GpApp/GliderStructs.h new file mode 100644 index 0000000..3c569ba --- /dev/null +++ b/GpApp/GliderStructs.h @@ -0,0 +1,347 @@ +//============================================================================ +//---------------------------------------------------------------------------- +// GliderStructs.h +//---------------------------------------------------------------------------- +//============================================================================ + + +#include "PLQDOffscreen.h" + + +typedef struct +{ + Point topLeft; // 4 + short distance; // 2 + Boolean initial; // 1 + Boolean state; // 1 F. lf. dn. rt. up + Byte vector; // 1 | x | x | x | x | 8 | 4 | 2 | 1 | + Byte tall; // 1 +} blowerType; // total = 10 + +typedef struct +{ + Rect bounds; // 8 + short pict; // 2 +} furnitureType; // total = 10 + +typedef struct +{ + Point topLeft; // 4 + short length; // 2 grease spill + short points; // 2 invis bonus + Boolean state; // 1 + Boolean initial; // 1 +} bonusType; // total = 10 + +typedef struct +{ + Point topLeft; // 4 + short tall; // 2 invis transport + short where; // 2 + Byte who; // 1 + Byte wide; // 1 +} transportType; // total = 10 + +typedef struct +{ + Point topLeft; // 4 + short delay; // 2 + short where; // 2 + Byte who; // 1 + Byte type; // 1 +} switchType; // total = 10 + +typedef struct +{ + Point topLeft; // 4 + short length; // 2 + Byte byte0; // 1 + Byte byte1; // 1 + Boolean initial; // 1 + Boolean state; // 1 +} lightType; // total = 10 + +typedef struct +{ + Point topLeft; // 4 + short height; // 2 toaster, pict ID + Byte byte0; // 1 + Byte delay; // 1 + Boolean initial; // 1 + Boolean state; // 1 +} applianceType; // total = 10 + +typedef struct +{ + Point topLeft; // 4 + short length; // 2 + Byte delay; // 1 + Byte byte0; // 1 + Boolean initial; // 1 + Boolean state; // 1 +} enemyType; // total = 10 + +typedef struct +{ + Rect bounds; // 8 + short pict; // 2 +} clutterType; // total = 10 + +typedef struct +{ + short what; // 2 + union + { + blowerType a; + furnitureType b; + bonusType c; + transportType d; + switchType e; + lightType f; + applianceType g; + enemyType h; + clutterType i; + } data; // 10 +} objectType, *objectPtr; // total = 12 + +typedef struct +{ + Str31 banner; // 32 = 32 + Str15 names[kMaxScores]; // 16 * 10 = 160 + Int32 scores[kMaxScores]; // 4 * 10 = 40 + UInt32 timeStamps[kMaxScores]; // 4 * 10 = 40 + short levels[kMaxScores]; // 2 * 10 = 20 +} scoresType; // total = 292 + +typedef struct +{ + short version; // 2 + short wasStarsLeft; // 2 + UInt32 timeStamp; // 4 + Point where; // 4 + Int32 score; // 4 + Int32 unusedLong; // 4 + Int32 unusedLong2; // 4 + short energy; // 2 + short bands; // 2 + short roomNumber; // 2 + short gliderState; // 2 + short numGliders; // 2 + short foil; // 2 + short unusedShort; // 2 + Boolean facing; // 1 + Boolean showFoil; // 1 +} gameType; // total = 40 + +typedef struct +{ + short unusedShort; // 2 + Byte unusedByte; // 1 + Boolean visited; // 1 + objectType objects[kMaxRoomObs]; // 24 * 12 +} savedRoom, *saveRoomPtr; // total = 292 + +typedef struct +{ + FSSpec house; // 70 + short version; // 2 + short wasStarsLeft; // 2 + long timeStamp; // 4 + Point where; // 4 + long score; // 4 + long unusedLong; // 4 + long unusedLong2; // 4 + short energy; // 2 + short bands; // 2 + short roomNumber; // 2 + short gliderState; // 2 + short numGliders; // 2 + short foil; // 2 + short nRooms; // 2 + Boolean facing; // 1 + Boolean showFoil; // 1 + savedRoom savedData[1]; // 4 +} game2Type, *gamePtr; // total = 114 + +typedef struct +{ + Str27 name; // 28 + short bounds; // 2 + Byte leftStart; // 1 + Byte rightStart; // 1 + Byte unusedByte; // 1 + Boolean visited; // 1 + short background; // 2 + short tiles[kNumTiles]; // 2 * 8 + short floor, suite; // 2 + 2 + short openings; // 2 + short numObjects; // 2 + objectType objects[kMaxRoomObs]; // 24 * 12 +} roomType, *roomPtr; // total = 348 + +typedef struct +{ + short version; // 2 + short unusedShort; // 2 + long timeStamp; // 4 + long flags; // 4 (bit 0 = wardBit) + Point initial; // 4 + Str255 banner; // 256 + Str255 trailer; // 256 + scoresType highScores; // 292 + gameType savedGame; // 40 + Boolean hasGame; // 1 + Boolean unusedBoolean; // 1 + short firstRoom; // 2 + short nRooms; // 2 + roomType rooms[1]; // 348 * nRooms +} houseType, *housePtr, **houseHand; // total = 866 + + +typedef struct +{ + Rect src, mask, dest, whole; + Rect destShadow, wholeShadow; + Rect clip, enteredRect; + Int32 leftKey, rightKey; + Int32 battKey, bandKey; + short hVel, vVel; + short wasHVel, wasVVel; + short vDesiredVel, hDesiredVel; + short mode, frame, wasMode; + Boolean facing, tipped; + Boolean sliding, ignoreLeft, ignoreRight; + Boolean fireHeld, which; + Boolean heldLeft, heldRight; + Boolean dontDraw, ignoreGround; +} gliderType, *gliderPtr; + +typedef struct +{ + Rect bounds; + short action; + short who; + Boolean isOn, stillOver; + Boolean doScrutinize; +} hotObject, *hotPtr; + +typedef struct +{ + Rect dest; + GWorldPtr map; + short where; + short who; +} savedType, *savedPtr; + +typedef struct +{ + Rect bounds; + short mode; +} sparkleType, *sparklePtr; + +typedef struct +{ + Rect dest, whole; + short start; + short stop; + short mode; + short loops; + short hVel, vVel; +} flyingPtType, *flyingPtPtr; + +typedef struct +{ + Rect dest, src; + short mode; + short who; +} flameType, *flamePtr; + +typedef struct +{ + Rect dest, src; + short mode, where; + short who, link; + Boolean toOrFro, active; +} pendulumType, *pendulumPtr; + +typedef struct +{ + Boolean left; + Boolean top; + Boolean right; + Boolean bottom; +} boundsType, *boundsPtr, **boundsHand; + +typedef struct +{ + Rect dest; + short mode, count; + short hVel, vVel; +} bandType, *bandPtr; + +typedef struct +{ + short srcRoom, srcObj; + short destRoom, destObj; +} linksType, *linksPtr; + +typedef struct +{ + Rect dest; + short mapNum, mode; + short who, where; + short start, stop; + short frame, hotNum; + Boolean isRight; +} greaseType, *greasePtr; + +typedef struct +{ + Rect dest, src; + short mode, who; + short link, where; +} starType, *starPtr; + +typedef struct +{ + Rect bounds; + short frame; +} shredType, *shredPtr; + +typedef struct +{ + Rect dest; + Rect whole; + short hVel, vVel; + short type, count; + short frame, timer; + short position, room; + Byte byte0, byte1; + Boolean moving, active; +} dynaType, *dynaPtr; + +typedef struct +{ + short roomNum; // room # object in (real number) + short objectNum; // obj. # in house (real number) + short roomLink; // room # object linked to (if any) + short objectLink; // obj. # object linked to (if any) + short localLink; // index in master list if exists + short hotNum; // index into active rects (if any) + short dynaNum; // index into dinahs (if any) + objectType theObject; // actual object data +} objDataType, *objDataPtr; + +typedef struct +{ + Int32 frame; + char key; + char padding; +} demoType, *demoPtr; + +typedef struct +{ + short room; + short object; +} retroLink, *retroLinkPtr; + + diff --git a/GpApp/GliderVars.h b/GpApp/GliderVars.h new file mode 100644 index 0000000..5c5285e --- /dev/null +++ b/GpApp/GliderVars.h @@ -0,0 +1,59 @@ +//============================================================================ +//---------------------------------------------------------------------------- +// GliderVars.h +//---------------------------------------------------------------------------- +//============================================================================ + + +#include "PLMovies.h" + + +extern Rect blowerSrcRect; +extern Rect flame[], tikiFlame[]; +extern Rect coals[]; +extern Rect furnitureSrcRect; +extern Rect tableSrc, shelfSrc, hingeSrc, handleSrc, knobSrc; +extern Rect leftFootSrc, rightFootSrc, deckSrc; +extern Rect bonusSrcRect; +extern Rect pointsSrcRect; +extern Rect starSrc[], sparkleSrc[]; +extern Rect digits[], pendulumSrc[], greaseSrcRt[], greaseSrcLf[]; +extern Rect transSrcRect; +extern Rect switchSrcRect; +extern Rect lightSwitchSrc[], machineSwitchSrc[], thermostatSrc[]; +extern Rect powerSrc[], knifeSwitchSrc[]; +extern Rect lightSrcRect; +extern Rect flourescentSrc1, flourescentSrc2; +extern Rect trackLightSrc[]; +extern Rect applianceSrcRect, toastSrcRect, shredSrcRect; // Appliances +extern Rect plusScreen1, plusScreen2, tvScreen1, tvScreen2; +extern Rect coffeeLight1, coffeeLight2, vcrTime1, vcrTime2; +extern Rect stereoLight1, stereoLight2, microOn, microOff; +extern Rect outletSrc[]; +extern Rect balloonSrcRect, copterSrcRect, dartSrcRect; // Enemies +extern Rect ballSrcRect, dripSrcRect, enemySrcRect; +extern Rect fishSrcRect; +extern Rect balloonSrc[], copterSrc[], dartSrc[]; +extern Rect ballSrc[], dripSrc[], fishSrc[]; +extern Rect clutterSrcRect; +extern Rect flowerSrc[]; +extern Rect *srcRects; + +extern Movie theMovie; +extern Rect movieRect; +extern Boolean hasMovie, tvInRoom; + +extern gliderType theGlider, theGlider2; +extern objDataPtr masterObjects; +extern Rect workSrcRect; +extern Rect backSrcRect; +extern Rect mainWindowRect, houseRect; +extern houseHand thisHouse; +extern roomPtr thisRoom; +extern WindowPtr mainWindow, coordWindow; +extern long theScore; +extern short playOriginH, playOriginV; +extern short thisRoomNumber, theMode, batteryTotal, bandsTotal; +extern short foilTotal, mortals, numMasterObjects, previousRoom; +extern Boolean fileDirty, gameDirty, showFoil, doZooms, isPlayMusicGame; + diff --git a/GpApp/GpApp.props b/GpApp/GpApp.props new file mode 100644 index 0000000..b82aa3f --- /dev/null +++ b/GpApp/GpApp.props @@ -0,0 +1,12 @@ + + + + + + + + GP_APP_DLL;GP_APP_DLL_EXPORT;%(PreprocessorDefinitions) + + + + \ No newline at end of file diff --git a/GpApp/GpApp.vcxproj b/GpApp/GpApp.vcxproj new file mode 100644 index 0000000..b492b47 --- /dev/null +++ b/GpApp/GpApp.vcxproj @@ -0,0 +1,204 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 15.0 + {6233C3F2-5781-488E-B190-4FA8836F5A77} + GpApp + 10.0.17763.0 + + + + Application + true + v141 + MultiByte + + + Application + false + v141 + true + MultiByte + + + DynamicLibrary + true + v141 + MultiByte + + + DynamicLibrary + false + v141 + true + MultiByte + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Level3 + Disabled + true + true + + + + + Level3 + Disabled + true + true + + + + + Level3 + MaxSpeed + true + true + true + true + + + true + true + + + + + Level3 + MaxSpeed + true + true + true + true + + + true + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {6ec62b0f-9353-40a4-a510-3788f1368b33} + + + + + + \ No newline at end of file diff --git a/GpApp/GpApp.vcxproj.filters b/GpApp/GpApp.vcxproj.filters new file mode 100644 index 0000000..10d281f --- /dev/null +++ b/GpApp/GpApp.vcxproj.filters @@ -0,0 +1,214 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + \ No newline at end of file diff --git a/GpApp/GpAppInterface.cpp b/GpApp/GpAppInterface.cpp new file mode 100644 index 0000000..cf166ab --- /dev/null +++ b/GpApp/GpAppInterface.cpp @@ -0,0 +1,57 @@ +#include "GpAppInterface.h" + +#include "DisplayDeviceManager.h" +#include "HostFileSystem.h" +#include "HostDisplayDriver.h" +#include "HostSystemServices.h" + +int gpAppMain(); + +class GpAppInterfaceImpl final : public GpAppInterface +{ +public: + int ApplicationMain() override; + void PL_IncrementTickCounter(uint32_t count) override; + void PL_HostFileSystem_SetInstance(PortabilityLayer::HostFileSystem *instance) override; + void PL_HostDisplayDriver_SetInstance(PortabilityLayer::HostDisplayDriver *instance) override; + void PL_HostSystemServices_SetInstance(PortabilityLayer::HostSystemServices *instance) override; + void PL_InstallHostSuspendHook(PortabilityLayer::HostSuspendHook_t hook, void *context) override; +}; + + +int GpAppInterfaceImpl::ApplicationMain() +{ + return gpAppMain(); +} + +void GpAppInterfaceImpl::PL_IncrementTickCounter(uint32_t count) +{ + PortabilityLayer::DisplayDeviceManager::GetInstance()->IncrementTickCount(count); +} + +void GpAppInterfaceImpl::PL_HostFileSystem_SetInstance(PortabilityLayer::HostFileSystem *instance) +{ + PortabilityLayer::HostFileSystem::SetInstance(instance); +} + +void GpAppInterfaceImpl::PL_HostDisplayDriver_SetInstance(PortabilityLayer::HostDisplayDriver *instance) +{ + PortabilityLayer::HostDisplayDriver::SetInstance(instance); +} + +void GpAppInterfaceImpl::PL_HostSystemServices_SetInstance(PortabilityLayer::HostSystemServices *instance) +{ + PortabilityLayer::HostSystemServices::SetInstance(instance); +} + +void GpAppInterfaceImpl::PL_InstallHostSuspendHook(PortabilityLayer::HostSuspendHook_t hook, void *context) +{ + PortabilityLayer::InstallHostSuspendHook(hook, context); +} + +static GpAppInterfaceImpl gs_application; + +extern "C" GpAppInterface *GpAppInterface_Get() +{ + return &gs_application; +} diff --git a/GpApp/Grease.cpp b/GpApp/Grease.cpp new file mode 100644 index 0000000..8a04045 --- /dev/null +++ b/GpApp/Grease.cpp @@ -0,0 +1,302 @@ + +//============================================================================ +//---------------------------------------------------------------------------- +// Grease.c +//---------------------------------------------------------------------------- +//============================================================================ + + +#include "Externs.h" +#include "Environ.h" +#include "MainWindow.h" +#include "Objects.h" +#include "RectUtils.h" +#include "Room.h" + + +#define kGreaseIdle 0 +#define kGreaseFalling 1 +#define kGreaseSpreading 2 +#define kGreaseSpiltIdle 3 + + +void BackupGrease (Rect *, short, Boolean); + + +greasePtr grease; +short numGrease; + +extern hotPtr hotSpots; +extern savedType savedMaps[]; +extern Point shieldPt; +extern Rect greaseSrcRt[], greaseSrcLf[], shieldRect; + + +//============================================================== Functions +//-------------------------------------------------------------- HandleGrease + +// Goes through all grease objects currently on screen and handlesÉ +// them. If they're upright, nothing happens, but if they're inÉ +// the course of falling or spilling, this function will handleÉ +// advancing the spill, etc. + +void HandleGrease (void) +{ + Rect src; + short i; + + if (numGrease == 0) + return; + + for (i = 0; i < numGrease; i++) + { + if (grease[i].mode == kGreaseFalling) + { + grease[i].frame++; + if (grease[i].frame >= 3) // grease completely tipped + { + grease[i].frame = 3; + grease[i].mode = kGreaseSpreading; + hotSpots[grease[i].hotNum].action = kSlideIt; + hotSpots[grease[i].hotNum].isOn = true; + if (grease[i].isRight) + QSetRect(&src, 0, -2, 2, 0); + else + QSetRect(&src, -2, -2, 0, 0); + QOffsetRect(&src, -playOriginH, -playOriginV); + QOffsetRect(&src, grease[i].start, grease[i].dest.bottom); + hotSpots[grease[i].hotNum].bounds = src; + } + + QSetRect(&src, 0, 0, 32, 27); + QOffsetRect(&src, 0, grease[i].frame * 27); + CopyBits((BitMap *)*GetGWorldPixMap(savedMaps[grease[i].mapNum].map), + (BitMap *)*GetGWorldPixMap(workSrcMap), + &src, &grease[i].dest, + srcCopy, nil); + CopyBits((BitMap *)*GetGWorldPixMap(savedMaps[grease[i].mapNum].map), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &src, &grease[i].dest, + srcCopy, nil); + + AddRectToWorkRects(&grease[i].dest); + if (grease[i].isRight) + QOffsetRect(&grease[i].dest, 2, 0); + else + QOffsetRect(&grease[i].dest, -2, 0); + } + else if (grease[i].mode == kGreaseSpreading) + { + if (grease[i].isRight) + { + QSetRect(&src, 0, -2, 2, 0); + QOffsetRect(&src, grease[i].start, grease[i].dest.bottom); + grease[i].start += 2; + hotSpots[grease[i].hotNum].bounds.right += 2; + } + else + { + QSetRect(&src, -2, -2, 0, 0); + QOffsetRect(&src, grease[i].start, grease[i].dest.bottom); + grease[i].start -= 2; + hotSpots[grease[i].hotNum].bounds.left -= 2; + } + + { + CGrafPtr wasCPort; + GDHandle wasWorld; + + GetGWorld(&wasCPort, &wasWorld); + + SetGWorld(backSrcMap, nil); + PaintRect(&src); + + SetGWorld(workSrcMap, nil); + PaintRect(&src); + AddRectToWorkRects(&src); + + SetGWorld(wasCPort, wasWorld); + } + + if (grease[i].isRight) + { + if (grease[i].start >= grease[i].stop) + grease[i].mode = kGreaseSpiltIdle; + } + else + { + if (grease[i].start <= grease[i].stop) + grease[i].mode = kGreaseSpiltIdle; + } + } + } +} + +//-------------------------------------------------------------- BackupGrease +// This makes copies of the region of the screen the grease is aboutÉ +// to be drawn to. It is called in the "set up" when a player hasÉ +// just entered a new room. The "grease jar falling over" animationÉ +// is set up here. + +void BackupGrease (Rect *src, short index, Boolean isRight) +{ + Rect dest; + short i; + + QSetRect(&dest, 0, 0, 32, 27); + for (i = 0; i < 4; i++) + { + CopyBits((BitMap *)*GetGWorldPixMap(backSrcMap), + (BitMap *)*GetGWorldPixMap(savedMaps[index].map), + src, &dest, srcCopy, nil); + + if (isRight) + { + CopyMask((BitMap *)*GetGWorldPixMap(bonusSrcMap), + (BitMap *)*GetGWorldPixMap(bonusMaskMap), + (BitMap *)*GetGWorldPixMap(savedMaps[index].map), + &greaseSrcRt[i], &greaseSrcRt[i], &dest); + QOffsetRect(src, 2, 0); + } + else + { + CopyMask((BitMap *)*GetGWorldPixMap(bonusSrcMap), + (BitMap *)*GetGWorldPixMap(bonusMaskMap), + (BitMap *)*GetGWorldPixMap(savedMaps[index].map), + &greaseSrcLf[i], &greaseSrcLf[i], &dest); + QOffsetRect(src, -2, 0); + } + QOffsetRect(&dest, 0, 27); + } + +} + +//-------------------------------------------------------------- ReBackUpGrease +// Just like th eabove function but it is called while the player isÉ +// active in a room and has changed the lighting situation (like turnedÉ +// off or on the lights). It assumes certain data strucutures areÉ +// already declared from an earlier call to the above funciton. + +short ReBackUpGrease (short where, short who) +{ + Rect src; + short i; + + for (i = 0; i < numGrease; i++) + { + if ((grease[i].where == where) && (grease[i].who == who)) + { + if ((grease[i].mode == kGreaseIdle) || (grease[i].mode == kGreaseFalling)) + { + src = grease[i].dest; + BackupGrease(&src, grease[i].mapNum, grease[i].isRight); + } + return (i); + } + } + + return (-1); +} + +//-------------------------------------------------------------- AddGrease + +// Called when a new room is being set up during a game. This addsÉ +// another jar of grease to the queue of jars to be handled. + +short AddGrease (short where, short who, short h, short v, + short distance, Boolean isRight) +{ + Rect src, bounds; + short savedNum; + + if (numGrease >= kMaxGrease) + return (-1); + + QSetRect(&src, 0, 0, 32, 27); + QOffsetRect(&src, h, v); + + QSetRect(&bounds, 0, 0, 32, 27 * 4); + savedNum = BackUpToSavedMap(&bounds, where, who); + if (savedNum != -1) + { + BackupGrease (&src, savedNum, isRight); + if (isRight) + QOffsetRect(&src, -8, 0); + else + QOffsetRect(&src, 8, 0); + grease[numGrease].who = who; + grease[numGrease].where = where; + grease[numGrease].dest = src; + grease[numGrease].mapNum = savedNum; + grease[numGrease].mode = kGreaseIdle; + grease[numGrease].frame = -1; + if (isRight) + { + grease[numGrease].isRight = true; + grease[numGrease].start = src.right + 4; + grease[numGrease].stop = src.right + distance; + } + else + { + grease[numGrease].isRight = false; + grease[numGrease].start = src.left - 4; + grease[numGrease].stop = src.left - distance; + } + numGrease++; + + return (numGrease - 1); + } + else + return (-1); +} + +//-------------------------------------------------------------- SpillGrease + +// A player has knocked a jar of grease over - this function flags that. + +void SpillGrease (short who, short index) +{ + if (grease[who].mode == kGreaseIdle) + { + grease[who].mode = kGreaseFalling; + grease[who].hotNum = index; + PlayPrioritySound(kGreaseSpillSound, kGreaseSpillPriority); + } +} + +//-------------------------------------------------------------- RedrawAllGrease +// Called to redraw all the black lines of spilt grease. + +void RedrawAllGrease (void) +{ + CGrafPtr wasCPort; + GDHandle wasWorld; + Rect src; + short i; + + if (numGrease == 0) + return; + + for (i = 0; i < numGrease; i++) + { + src = hotSpots[grease[i].hotNum].bounds; + if ((grease[i].where == thisRoomNumber) && + ((src.bottom - src.top) == 2) && + (grease[i].mode != kGreaseIdle)) + { + QOffsetRect(&src, playOriginH, playOriginV); + + GetGWorld(&wasCPort, &wasWorld); + + SetGWorld(backSrcMap, nil); + PaintRect(&src); + + SetGWorld(workSrcMap, nil); + PaintRect(&src); + AddRectToWorkRects(&src); + + SetGWorld(wasCPort, wasWorld); + } + } +} + diff --git a/GpApp/HighScores.cpp b/GpApp/HighScores.cpp new file mode 100644 index 0000000..d59df57 --- /dev/null +++ b/GpApp/HighScores.cpp @@ -0,0 +1,856 @@ + +//============================================================================ +//---------------------------------------------------------------------------- +// HighScores.c +//---------------------------------------------------------------------------- +//============================================================================ + + +#include "PLFolders.h" +#include "PLNumberFormatting.h" +#include "PLScript.h" +#include "PLSound.h" +#include "PLStringCompare.h" +#include "DialogUtils.h" +#include "Externs.h" +#include "Environ.h" +#include "House.h" +#include "MainWindow.h" +#include "RectUtils.h" +#include "Utilities.h" + + +#define kHighScoresPictID 1994 +#define kHighScoresMaskID 1998 +#define kHighNameDialogID 1020 +#define kHighBannerDialogID 1021 +#define kHighNameItem 2 +#define kNameNCharsItem 5 +#define kHighBannerItem 2 +#define kBannerScoreNCharsItem 5 + + +void DrawHighScores (void); +void UpdateNameDialog (DialogPtr); +Boolean NameFilter (DialogPtr, EventRecord *, short *); +void GetHighScoreName (short); +void UpdateBannerDialog (DialogPtr); +Boolean BannerFilter (DialogPtr, EventRecord *, short *); +void GetHighScoreBanner (void); +Boolean CreateScoresFolder (long *); +Boolean FindHighScoresFolder (short *, long *); +Boolean OpenHighScoresFile (FSSpec *, short *); + + +Str31 highBanner; +Str15 highName; +short lastHighScore; +Boolean keyStroke; + +extern short splashOriginH, splashOriginV; +extern Boolean quickerTransitions, resumedSavedGame; + + +//============================================================== Functions +//-------------------------------------------------------------- DoHighScores +// Handles fading in and cleaning up the high scores screen. + +void DoHighScores (void) +{ + Rect tempRect; + + SpinCursor(3); + SetPort((GrafPtr)workSrcMap); + PaintRect(&workSrcRect); + QSetRect(&tempRect, 0, 0, 640, 480); + QOffsetRect(&tempRect, splashOriginH, splashOriginV); + LoadScaledGraphic(kStarPictID, &tempRect); +// if (quickerTransitions) +// DissBitsChunky(&workSrcRect); +// else +// DissBits(&workSrcRect); + SpinCursor(3); + SetPort((GrafPtr)workSrcMap); + DrawHighScores(); + SpinCursor(3); +// if (quickerTransitions) +// DissBitsChunky(&workSrcRect); +// else +// DissBits(&workSrcRect); + InitCursor(); + DelayTicks(60); + WaitForInputEvent(30); + + RedrawSplashScreen(); +} + +//-------------------------------------------------------------- DrawHighScores +// Draws the actual scores on the screen. + +#define kScoreSpacing 18 +#define kScoreWide 352 +#define kKimsLifted 4 + +void DrawHighScores (void) +{ + GWorldPtr tempMap, tempMask; + CGrafPtr wasCPort; + GDHandle wasWorld; + OSErr theErr; + houseType *thisHousePtr; + Rect tempRect, tempRect2; + Str255 tempStr; + short scoreLeft, bannerWidth, i, dropIt; + char wasState; + + scoreLeft = ((thisMac.screen.right - thisMac.screen.left) - kScoreWide) / 2; + dropIt = 129 + splashOriginV; + + GetGWorld(&wasCPort, &wasWorld); + + QSetRect(&tempRect, 0, 0, 332, 30); + theErr = CreateOffScreenGWorld(&tempMap, &tempRect, kPreferredDepth); + SetGWorld(tempMap, nil); + LoadGraphic(kHighScoresPictID); + + theErr = CreateOffScreenGWorld(&tempMask, &tempRect, 1); + SetGWorld(tempMask, nil); + LoadGraphic(kHighScoresMaskID); + + tempRect2 = tempRect; + QOffsetRect(&tempRect2, scoreLeft + (kScoreWide - 332) / 2, dropIt - 60); + + CopyMask((BitMap *)*GetGWorldPixMap(tempMap), + (BitMap *)*GetGWorldPixMap(tempMask), + (BitMap *)*GetGWorldPixMap(workSrcMap), + &tempRect, &tempRect, &tempRect2); + + DisposeGWorld(tempMap); + DisposeGWorld(tempMask); + + SetGWorld(wasCPort, wasWorld); + + TextFont(applFont); + TextFace(bold); + TextSize(14); + + PasStringCopy(PSTR("¥ "), tempStr); + PasStringConcat(tempStr, thisHouseName); + PasStringConcat(tempStr, PSTR(" ¥")); + MoveTo(scoreLeft + ((kScoreWide - StringWidth(tempStr)) / 2) - 1, dropIt - 66); + ForeColor(blackColor); + DrawString(tempStr); + MoveTo(scoreLeft + ((kScoreWide - StringWidth(tempStr)) / 2), dropIt - 65); + ForeColor(cyanColor); + DrawString(tempStr); + ForeColor(blackColor); + + TextFont(applFont); + TextFace(bold); + TextSize(12); + + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + thisHousePtr = *thisHouse; + // message for score #1 + PasStringCopy(thisHousePtr->highScores.banner, tempStr); + bannerWidth = StringWidth(tempStr); + ForeColor(blackColor); + MoveTo(scoreLeft + (kScoreWide - bannerWidth) / 2, dropIt - kKimsLifted); + DrawString(tempStr); + ForeColor(yellowColor); + MoveTo(scoreLeft + (kScoreWide - bannerWidth) / 2, dropIt - kKimsLifted - 1); + DrawString(tempStr); + + QSetRect(&tempRect, 0, 0, bannerWidth + 8, kScoreSpacing); + QOffsetRect(&tempRect, scoreLeft - 3 + (kScoreWide - bannerWidth) / 2, + dropIt + 5 - kScoreSpacing - kKimsLifted); + ForeColor(blackColor); + FrameRect(&tempRect); + QOffsetRect(&tempRect, -1, -1); + ForeColor(yellowColor); + FrameRect(&tempRect); + + for (i = 0; i < kMaxScores; i++) + { + if (thisHousePtr->highScores.scores[i] > 0L) + { + SpinCursor(1); + NumToString((long)i + 1L, tempStr); // draw placing number + ForeColor(blackColor); + if (i == 0) + MoveTo(scoreLeft + 1, dropIt - kScoreSpacing - kKimsLifted); + else + MoveTo(scoreLeft + 1, dropIt + (i * kScoreSpacing)); + DrawString(tempStr); + if (i == lastHighScore) + ForeColor(whiteColor); + else + ForeColor(cyanColor); + if (i == 0) + MoveTo(scoreLeft + 0, dropIt - 1 - kScoreSpacing - kKimsLifted); + else + MoveTo(scoreLeft + 0, dropIt - 1 + (i * kScoreSpacing)); + DrawString(tempStr); + // draw high score name + PasStringCopy(thisHousePtr->highScores.names[i], tempStr); + ForeColor(blackColor); + if (i == 0) + MoveTo(scoreLeft + 31, dropIt - kScoreSpacing - kKimsLifted); + else + MoveTo(scoreLeft + 31, dropIt + (i * kScoreSpacing)); + DrawString(tempStr); + if (i == lastHighScore) + ForeColor(whiteColor); + else + ForeColor(yellowColor); + if (i == 0) + MoveTo(scoreLeft + 30, dropIt - 1 - kScoreSpacing - kKimsLifted); + else + MoveTo(scoreLeft + 30, dropIt - 1 + (i * kScoreSpacing)); + DrawString(tempStr); + // draw level number + NumToString(thisHousePtr->highScores.levels[i], tempStr); + ForeColor(blackColor); + if (i == 0) + MoveTo(scoreLeft + 161, dropIt - kScoreSpacing - kKimsLifted); + else + MoveTo(scoreLeft + 161, dropIt + (i * kScoreSpacing)); + DrawString(tempStr); + if (i == lastHighScore) + ForeColor(whiteColor); + else + ForeColor(yellowColor); + if (i == 0) + MoveTo(scoreLeft + 160, dropIt - 1 - kScoreSpacing - kKimsLifted); + else + MoveTo(scoreLeft + 160, dropIt - 1 + (i * kScoreSpacing)); + DrawString(tempStr); + // draw word "rooms" + if (thisHousePtr->highScores.levels[i] == 1) + GetLocalizedString(6, tempStr); + else + GetLocalizedString(7, tempStr); + ForeColor(blackColor); + if (i == 0) + MoveTo(scoreLeft + 193, dropIt - kScoreSpacing - kKimsLifted); + else + MoveTo(scoreLeft + 193, dropIt + (i * kScoreSpacing)); + DrawString(tempStr); + ForeColor(cyanColor); + if (i == 0) + MoveTo(scoreLeft + 192, dropIt - 1 - kScoreSpacing - kKimsLifted); + else + MoveTo(scoreLeft + 192, dropIt - 1 + (i * kScoreSpacing)); + DrawString(tempStr); + // draw high score points + NumToString(thisHousePtr->highScores.scores[i], tempStr); + ForeColor(blackColor); + if (i == 0) + MoveTo(scoreLeft + 291, dropIt - kScoreSpacing - kKimsLifted); + else + MoveTo(scoreLeft + 291, dropIt + (i * kScoreSpacing)); + DrawString(tempStr); + if (i == lastHighScore) + ForeColor(whiteColor); + else + ForeColor(yellowColor); + if (i == 0) + MoveTo(scoreLeft + 290, dropIt - 1 - kScoreSpacing - kKimsLifted); + else + MoveTo(scoreLeft + 290, dropIt - 1 + (i * kScoreSpacing)); + DrawString(tempStr); + } + } + + ForeColor(blueColor); + TextFont(applFont); + TextFace(bold); + TextSize(9); + MoveTo(scoreLeft + 80, dropIt - 1 + (10 * kScoreSpacing)); + GetLocalizedString(8, tempStr); + DrawString(tempStr); + + ForeColor(blackColor); + HSetState((Handle)thisHouse, wasState); +} + +//-------------------------------------------------------------- SortHighScores +// This does a simple sort of the high scores. + +void SortHighScores (void) +{ + scoresType tempScores; + houseType *thisHousePtr; + long greatest; + short i, h, which; + char wasState; + + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + thisHousePtr = *thisHouse; + + for (h = 0; h < kMaxScores; h++) + { + greatest = -1L; + which = -1; + for (i = 0; i < kMaxScores; i++) + { + if (thisHousePtr->highScores.scores[i] > greatest) + { + greatest = thisHousePtr->highScores.scores[i]; + which = i; + } + } + if (which != -1) + { + PasStringCopy(thisHousePtr->highScores.names[which], tempScores.names[h]); + tempScores.scores[h] = thisHousePtr->highScores.scores[which]; + tempScores.timeStamps[h] = thisHousePtr->highScores.timeStamps[which]; + tempScores.levels[h] = thisHousePtr->highScores.levels[which]; + thisHousePtr->highScores.scores[which] = -1L; + } + } + PasStringCopy(thisHousePtr->highScores.banner, tempScores.banner); + thisHousePtr->highScores = tempScores; + + HSetState((Handle)thisHouse, wasState); +} + +//-------------------------------------------------------------- ZeroHighScores +// This funciton goes through and resets or "zeros" all high scores. + +void ZeroHighScores (void) +{ + houseType *thisHousePtr; + short i; + char wasState; + + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + thisHousePtr = *thisHouse; + + PasStringCopy(thisHouseName, thisHousePtr->highScores.banner); + for (i = 0; i < kMaxScores; i++) + { + PasStringCopy(PSTR("--------------"), thisHousePtr->highScores.names[i]); + thisHousePtr->highScores.scores[i] = 0L; + thisHousePtr->highScores.timeStamps[i] = 0L; + thisHousePtr->highScores.levels[i] = 0; + } + + HSetState((Handle)thisHouse, wasState); +} + +//-------------------------------------------------------------- ZeroAllButHighestScore +// Like the above, but this function preserves the highest score. + +void ZeroAllButHighestScore (void) +{ + houseType *thisHousePtr; + short i; + char wasState; + + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + thisHousePtr = *thisHouse; + + for (i = 1; i < kMaxScores; i++) + { + PasStringCopy(PSTR("--------------"), thisHousePtr->highScores.names[i]); + thisHousePtr->highScores.scores[i] = 0L; + thisHousePtr->highScores.timeStamps[i] = 0L; + thisHousePtr->highScores.levels[i] = 0; + } + + HSetState((Handle)thisHouse, wasState); +} + +//-------------------------------------------------------------- TestHighScore +// This function is called after a game ends in order to test theÉ +// current high score against the high score list. It returns trueÉ +// if the player is on the high score list now. + +Boolean TestHighScore (void) +{ + houseType *thisHousePtr; + short placing, i; + char wasState; + + if (resumedSavedGame) + return (false); + + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + thisHousePtr = *thisHouse; + + lastHighScore = -1; + placing = -1; + + for (i = 0; i < kMaxScores; i++) + { + if (theScore > thisHousePtr->highScores.scores[i]) + { + placing = i; + lastHighScore = i; + break; + } + } + + if (placing != -1) + { + FlushEvents(everyEvent, 0); + GetHighScoreName(placing + 1); + PasStringCopy(highName, thisHousePtr->highScores.names[kMaxScores - 1]); + if (placing == 0) + { + GetHighScoreBanner(); + PasStringCopy(highBanner, thisHousePtr->highScores.banner); + } + thisHousePtr->highScores.scores[kMaxScores - 1] = theScore; + GetDateTime(&thisHousePtr->highScores.timeStamps[kMaxScores - 1]); + thisHousePtr->highScores.levels[kMaxScores - 1] = CountRoomsVisited(); + SortHighScores(); + gameDirty = true; + } + + HSetState((Handle)thisHouse, wasState); + + if (placing != -1) + { + DoHighScores(); + return (true); + } + else + return (false); +} + +//-------------------------------------------------------------- UpdateNameDialog +// Redraws the "Enter High Score Name" dialog. + +void UpdateNameDialog (DialogPtr theDialog) +{ + short nChars; + + DrawDialog(theDialog); + DrawDefaultButton(theDialog); + + nChars = GetDialogStringLen(theDialog, kHighNameItem); + SetDialogNumToStr(theDialog, kNameNCharsItem, (long)nChars); +} + +//-------------------------------------------------------------- NameFilter +// Dialog filter for the "Enter High Score Name" dialog. + +Boolean NameFilter (DialogPtr dial, EventRecord *event, short *item) +{ + short nChars; + + if (keyStroke) + { + nChars = GetDialogStringLen(dial, kHighNameItem); + SetDialogNumToStr(dial, kNameNCharsItem, (long)nChars); + keyStroke = false; + } + + switch (event->what) + { + case keyDown: + keyStroke = true; + switch ((event->message) & charCodeMask) + { + case kReturnKeyASCII: + case kEnterKeyASCII: + PlayPrioritySound(kCarriageSound, kCarriagePriority); + FlashDialogButton(dial, kOkayButton); + *item = kOkayButton; + return(true); + break; + + case kTabKeyASCII: + SelectDialogItemText(dial, kHighNameItem, 0, 1024); + return(false); + break; + + default: + PlayPrioritySound(kTypingSound, kTypingPriority); + return(false); + } + break; + + case updateEvt: + BeginUpdate(GetDialogWindow(dial)); + UpdateNameDialog(dial); + EndUpdate(GetDialogWindow(dial)); + event->what = nullEvent; + return(false); + break; + + default: + return(false); + break; + } +} + +//-------------------------------------------------------------- GetHighScoreName +// Brings up a dialog to get player's name (due to a high score). + +void GetHighScoreName (short place) +{ + DialogPtr theDial; + Str255 scoreStr, placeStr, tempStr; + short item; + Boolean leaving; + ModalFilterUPP nameFilterUPP; + + nameFilterUPP = NewModalFilterUPP(NameFilter); + + InitCursor(); + NumToString(theScore, scoreStr); + NumToString((long)place, placeStr); + ParamText(scoreStr, placeStr, thisHouseName, PSTR("")); + PlayPrioritySound(kEnergizeSound, kEnergizePriority); + BringUpDialog(&theDial, kHighNameDialogID); + FlushEvents(everyEvent, 0); + SetDialogString(theDial, kHighNameItem, highName); + SelectDialogItemText(theDial, kHighNameItem, 0, 1024); + leaving = false; + + while (!leaving) + { + ModalDialog(nameFilterUPP, &item); + + if (item == kOkayButton) + { + GetDialogString(theDial, kHighNameItem, tempStr); + PasStringCopyNum(tempStr, highName, 15); + leaving = true; + } + } + + DisposeDialog(theDial); + DisposeModalFilterUPP(nameFilterUPP); +} + +//-------------------------------------------------------------- UpdateBannerDialog +// Redraws the "Enter Message" dialog. + +void UpdateBannerDialog (DialogPtr theDialog) +{ + short nChars; + + DrawDialog(theDialog); + DrawDefaultButton(theDialog); + + nChars = GetDialogStringLen(theDialog, kHighBannerItem); + SetDialogNumToStr(theDialog, kBannerScoreNCharsItem, (long)nChars); +} + +//-------------------------------------------------------------- BannerFilter +// Dialog filter for the "Enter Message" dialog. + +Boolean BannerFilter (DialogPtr dial, EventRecord *event, short *item) +{ + short nChars; + + if (keyStroke) + { + nChars = GetDialogStringLen(dial, kHighBannerItem); + SetDialogNumToStr(dial, kBannerScoreNCharsItem, (long)nChars); + keyStroke = false; + } + + switch (event->what) + { + + case keyDown: + keyStroke = true; + switch ((event->message) & charCodeMask) + { + case kReturnKeyASCII: + case kEnterKeyASCII: + PlayPrioritySound(kCarriageSound, kCarriagePriority); + FlashDialogButton(dial, kOkayButton); + *item = kOkayButton; + return(true); + break; + + case kTabKeyASCII: + SelectDialogItemText(dial, kHighBannerItem, 0, 1024); + return(false); + break; + + default: + PlayPrioritySound(kTypingSound, kTypingPriority); + return(false); + } + break; + + case updateEvt: + BeginUpdate(GetDialogWindow(dial)); + UpdateBannerDialog(dial); + EndUpdate(GetDialogWindow(dial)); + event->what = nullEvent; + return(false); + break; + + default: + return(false); + break; + } +} + +//-------------------------------------------------------------- GetHighScoreBanner +// A player who gets the #1 slot gets to enter a short message (thatÉ +// appears across the top of the high scores list). This dialogÉ +// gets that message. + +void GetHighScoreBanner (void) +{ + DialogPtr theDial; + Str255 tempStr; + short item; + Boolean leaving; + ModalFilterUPP bannerFilterUPP; + + bannerFilterUPP = NewModalFilterUPP(BannerFilter); + + PlayPrioritySound(kEnergizeSound, kEnergizePriority); + BringUpDialog(&theDial, kHighBannerDialogID); + SetDialogString(theDial, kHighBannerItem, highBanner); + SelectDialogItemText(theDial, kHighBannerItem, 0, 1024); + leaving = false; + + while (!leaving) + { + ModalDialog(bannerFilterUPP, &item); + + if (item == kOkayButton) + { + GetDialogString(theDial, kHighBannerItem, tempStr); + PasStringCopyNum(tempStr, highBanner, 31); + leaving = true; + } + } + + DisposeDialog(theDial); + DisposeModalFilterUPP(bannerFilterUPP); +} + +//-------------------------------------------------------------- CreateScoresFolder + +Boolean CreateScoresFolder (long *scoresDirID) +{ + FSSpec scoresSpec; + long prefsDirID; + OSErr theErr; + short volRefNum; + + theErr = FindFolder(kOnSystemDisk, kPreferencesFolderType, kCreateFolder, + &volRefNum, &prefsDirID); + if (!CheckFileError(theErr, PSTR("Prefs Folder"))) + return (false); + + theErr = FSMakeFSSpec(volRefNum, prefsDirID, PSTR("G-PRO Scores Ä"), &scoresSpec); + + theErr = FSpDirCreate(&scoresSpec, smSystemScript, scoresDirID); + if (!CheckFileError(theErr, PSTR("High Scores Folder"))) + return (false); + + return (true); +} + +//-------------------------------------------------------------- FindHighScoresFolder + +Boolean FindHighScoresFolder (short *volRefNum, long *scoresDirID) +{ + CInfoPBRec theBlock; + Str255 nameString; + long prefsDirID; + OSErr theErr; + short count; + Boolean foundIt; + + theErr = FindFolder(kOnSystemDisk, kPreferencesFolderType, kCreateFolder, + volRefNum, &prefsDirID); + if (!CheckFileError(theErr, PSTR("Prefs Folder"))) + return (false); + + PasStringCopy(PSTR("G-PRO Scores Ä"), nameString); + count = 1; + foundIt = false; + + theBlock.dirInfo.ioCompletion = nil; + theBlock.dirInfo.ioVRefNum = *volRefNum; + theBlock.dirInfo.ioNamePtr = nameString; + + while ((theErr == noErr) && (!foundIt)) + { + theBlock.dirInfo.ioFDirIndex = count; + theBlock.dirInfo.ioDrDirID = prefsDirID; + theErr = PBGetCatInfo(&theBlock, false); + if (theErr == noErr) + { + if ((theBlock.dirInfo.ioFlAttrib & 0x10) == 0x10) + { + if (EqualString(theBlock.dirInfo.ioNamePtr, PSTR("G-PRO Scores Ä"), + true, true)) + { + foundIt = true; + *scoresDirID = theBlock.dirInfo.ioDrDirID; + } + } + count++; + } + } + + if (theErr == fnfErr) + { + if (CreateScoresFolder(scoresDirID)) + return (true); + else + return (false); + } + else + return (true); +} + +//-------------------------------------------------------------- OpenHighScoresFile + +Boolean OpenHighScoresFile (FSSpec *scoreSpec, short *scoresRefNum) +{ + OSErr theErr; + + theErr = FSpOpenDF(scoreSpec, fsCurPerm, scoresRefNum); + if (theErr == fnfErr) + { + theErr = FSpCreate(scoreSpec, 'ozm5', 'gliS', smSystemScript); + if (!CheckFileError(theErr, PSTR("New High Scores File"))) + return (false); + theErr = FSpOpenDF(scoreSpec, fsCurPerm, scoresRefNum); + if (!CheckFileError(theErr, PSTR("High Score"))) + return (false); + } + else if (!CheckFileError(theErr, PSTR("High Score"))) + return (false); + + return (true); +} + +//-------------------------------------------------------------- WriteScoresToDisk + +Boolean WriteScoresToDisk (void) +{ + scoresType *theScores; + FSSpec scoreSpec; + long dirID, byteCount; + OSErr theErr; + short volRefNum, scoresRefNum; + char wasState; + + if (!FindHighScoresFolder(&volRefNum, &dirID)) + { + SysBeep(1); + return (false); + } + + theErr = FSMakeFSSpec(volRefNum, dirID, thisHouseName, &scoreSpec); + if (!OpenHighScoresFile(&scoreSpec, &scoresRefNum)) + { + SysBeep(1); + return (false); + } + + theErr = SetFPos(scoresRefNum, fsFromStart, 0L); + if (!CheckFileError(theErr, PSTR("High Scores File"))) + { + theErr = FSClose(scoresRefNum); + return(false); + } + + byteCount = sizeof(scoresType); + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + theScores = &((*thisHouse)->highScores); + + theErr = FSWrite(scoresRefNum, &byteCount, (Ptr)theScores); + if (!CheckFileError(theErr, PSTR("High Scores File"))) + { + HSetState((Handle)thisHouse, wasState); + theErr = FSClose(scoresRefNum); + return(false); + } + HSetState((Handle)thisHouse, wasState); + + theErr = SetEOF(scoresRefNum, byteCount); + if (!CheckFileError(theErr, PSTR("High Scores File"))) + { + theErr = FSClose(scoresRefNum); + return(false); + } + + theErr = FSClose(scoresRefNum); + if (!CheckFileError(theErr, PSTR("High Scores File"))) + return(false); + + return (true); +} + +//-------------------------------------------------------------- ReadScoresFromDisk + +Boolean ReadScoresFromDisk (void) +{ + scoresType *theScores; + FSSpec scoreSpec; + long dirID, byteCount; + OSErr theErr; + short volRefNum, scoresRefNum; + char wasState; + + if (!FindHighScoresFolder(&volRefNum, &dirID)) + { + SysBeep(1); + return (false); + } + + theErr = FSMakeFSSpec(volRefNum, dirID, thisHouseName, &scoreSpec); + if (!OpenHighScoresFile(&scoreSpec, &scoresRefNum)) + { + SysBeep(1); + return (false); + } + + theErr = GetEOF(scoresRefNum, &byteCount); + if (!CheckFileError(theErr, PSTR("High Scores File"))) + { + theErr = FSClose(scoresRefNum); + return (false); + } + + theErr = SetFPos(scoresRefNum, fsFromStart, 0L); + if (!CheckFileError(theErr, PSTR("High Scores File"))) + { + theErr = FSClose(scoresRefNum); + return (false); + } + + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + theScores = &((*thisHouse)->highScores); + + theErr = FSRead(scoresRefNum, &byteCount, theScores); + if (!CheckFileError(theErr, PSTR("High Scores File"))) + { + HSetState((Handle)thisHouse, wasState); + theErr = FSClose(scoresRefNum); + return (false); + } + HSetState((Handle)thisHouse, wasState); + + theErr = FSClose(scoresRefNum); + if (!CheckFileError(theErr, PSTR("High Scores File"))) + return(false); + + return (true); +} + diff --git a/GpApp/House.cpp b/GpApp/House.cpp new file mode 100644 index 0000000..ec0abbe --- /dev/null +++ b/GpApp/House.cpp @@ -0,0 +1,860 @@ +//============================================================================ +//---------------------------------------------------------------------------- +// House.c +//---------------------------------------------------------------------------- +//============================================================================ + +#include "PLAppleEvents.h" +#include "PLNavigation.h" +#include "PLNumberFormatting.h" +#include "PLPasStr.h" +#include "PLResources.h" +#include "PLSound.h" +#include "DialogUtils.h" +#include "Externs.h" +#include "House.h" +#include "RectUtils.h" + + +#define kGoToDialogID 1043 + + +void UpdateGoToDialog (DialogPtr); +Boolean GoToFilter (DialogPtr, EventRecord *, short *); + + +houseHand thisHouse; +linksPtr linksList; +Str32 thisHouseName; +short srcLocations[kMaxRoomObs]; +short destLocations[kMaxRoomObs]; +short wasFloor, wasSuite; +retroLink retroLinkList[kMaxRoomObs]; +Boolean houseUnlocked; + + +extern gameType smallGame; +extern short numberRooms, mapLeftRoom, mapTopRoom, numStarsRemaining; +extern Boolean houseOpen, noRoomAtAll; +extern Boolean twoPlayerGame, wardBitSet, phoneBitSet; + + +//============================================================== Functions +//-------------------------------------------------------------- CreateNewHouse +// Called to create a new house file. + +#ifndef COMPILEDEMO +Boolean CreateNewHouse (void) +{ + AEKeyword theKeyword; + DescType actualType; + Size actualSize; + NavReplyRecord theReply; + NavDialogOptions dialogOptions; + FSSpec tempSpec; + FSSpec theSpec; + OSErr theErr; + + theErr = NavGetDefaultDialogOptions(&dialogOptions); + theErr = NavPutFile(nil, &theReply, &dialogOptions, nil, 'gliH', 'ozm5', nil); + if (theErr == userCanceledErr) + return false; + if (!theReply.validRecord) + return (false); + + theErr = AEGetNthPtr(&(theReply.selection), 1, typeFSS, &theKeyword, + &actualType, &theSpec, sizeof(FSSpec), &actualSize); + + if (theReply.replacing) + { + theErr = FSMakeFSSpec(theSpec.vRefNum, theSpec.parID, + theSpec.name, &tempSpec); + if (!CheckFileError(theErr, theSpec.name)) + return (false); + + theErr = FSpDelete(&tempSpec); + if (!CheckFileError(theErr, theSpec.name)) + return (false); + } + + if (houseOpen) + { + if (!CloseHouse()) + return (false); + } + + theErr = FSpCreate(&theSpec, 'ozm5', 'gliH', theReply.keyScript); + if (!CheckFileError(theErr, PSTR("New House"))) + return (false); + HCreateResFile(theSpec.vRefNum, theSpec.parID, theSpec.name); + if (ResError() != noErr) + YellowAlert(kYellowFailedResCreate, ResError()); + + PasStringCopy(theSpec.name, thisHouseName); + AddExtraHouse(&theSpec); + BuildHouseList(); + InitCursor(); + if (!OpenHouse()) + return (false); + + return (true); +} +#endif + +//-------------------------------------------------------------- InitializeEmptyHouse + +// Initializes all the structures for an empty (new) house. + +#ifndef COMPILEDEMO +Boolean InitializeEmptyHouse (void) +{ + houseType *thisHousePtr; + Str255 tempStr; + + if (thisHouse != nil) + DisposeHandle((Handle)thisHouse); + + thisHouse = (houseHand)NewHandle(sizeof(houseType)); + + if (thisHouse == nil) + { + YellowAlert(kYellowUnaccounted, 1); + return (false); + } + + HLock((Handle)thisHouse); + thisHousePtr = *thisHouse; + + thisHousePtr->version = kHouseVersion; + thisHousePtr->firstRoom = -1; + thisHousePtr->timeStamp = 0L; + thisHousePtr->flags = 0L; + thisHousePtr->initial.h = 32; + thisHousePtr->initial.v = 32; + ZeroHighScores(); + + GetLocalizedString(11, tempStr); + PasStringCopy(tempStr, thisHousePtr->banner); + GetLocalizedString(12, tempStr); + PasStringCopy(tempStr, thisHousePtr->trailer); + thisHousePtr->hasGame = false; + thisHousePtr->nRooms = 0; + + wardBitSet = false; + phoneBitSet = false; + + HUnlock((Handle)thisHouse); + + numberRooms = 0; + mapLeftRoom = 60; + mapTopRoom = 50; + thisRoomNumber = kRoomIsEmpty; + previousRoom = -1; + houseUnlocked = true; + OpenMapWindow(); + UpdateMapWindow(); + noRoomAtAll = true; + fileDirty = true; + UpdateMenus(false); + ReflectCurrentRoom(true); + + return (true); +} +#endif + +//-------------------------------------------------------------- RealRoomNumberCount + +// Returns the real number of rooms in a house (some rooms may stillÉ +// be place-holders - they were deleted earlier and are flagged asÉ +// deleted but still occupy space in the file). + +short RealRoomNumberCount (void) +{ + short realRoomCount, i; + char wasState; + + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + realRoomCount = (*thisHouse)->nRooms; + if (realRoomCount != 0) + { + for (i = 0; i < (*thisHouse)->nRooms; i++) + { + if ((*thisHouse)->rooms[i].suite == kRoomIsEmpty) + realRoomCount--; + } + } + HSetState((Handle)thisHouse, wasState); + + return (realRoomCount); +} + +//-------------------------------------------------------------- GetFirstRoomNumber + +// Returns the room number (indicee into house file) of the room whereÉ +// the player is to begin. + +short GetFirstRoomNumber (void) +{ + short firstRoom; + char wasState; + + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + if ((*thisHouse)->nRooms <= 0) + { + firstRoom = -1; + noRoomAtAll = true; + } + else + { + firstRoom = (*thisHouse)->firstRoom; + if ((firstRoom >= (*thisHouse)->nRooms) || (firstRoom < 0)) + firstRoom = 0; + } + HSetState((Handle)thisHouse, wasState); + + return (firstRoom); +} + +//-------------------------------------------------------------- WhereDoesGliderBegin + +// Returns a rectangle indicating where in the first room the player'sÉ +// glider is to appear. + +void WhereDoesGliderBegin (Rect *theRect, short mode) +{ + Point initialPt; + char wasState; + + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + + if (mode == kResumeGameMode) + initialPt = smallGame.where; + else if (mode == kNewGameMode) + initialPt = (*thisHouse)->initial; + + HSetState((Handle)thisHouse, wasState); + QSetRect(theRect, 0, 0, kGliderWide, kGliderHigh); + QOffsetRect(theRect, initialPt.h, initialPt.v); +} + +//-------------------------------------------------------------- HouseHasOriginalPicts + +// Returns true is the current house has custom artwork imbedded. + +Boolean HouseHasOriginalPicts (void) +{ + short nPicts; + + nPicts = Count1Resources('PICT'); + return (nPicts > 0); +} + +//-------------------------------------------------------------- CountHouseLinks + +// Counts up the number of linked objects in a house. + +short CountHouseLinks (void) +{ + houseType *thisHousePtr; + short numRooms, numLinks; + short r, i, what; + char wasState; + + numLinks = 0; + + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + thisHousePtr = *thisHouse; + numRooms = thisHousePtr->nRooms; + + for (r = 0; r < numRooms; r++) + { + for (i = 0; i < kMaxRoomObs; i++) + { + what = thisHousePtr->rooms[r].objects[i].what; + switch (what) + { + case kLightSwitch: + case kMachineSwitch: + case kThermostat: + case kPowerSwitch: + case kKnifeSwitch: + case kInvisSwitch: + case kTrigger: + case kLgTrigger: + if (thisHousePtr->rooms[r].objects[i].data.e.where != -1) + numLinks++; + break; + + case kMailboxLf: + case kMailboxRt: + case kFloorTrans: + case kCeilingTrans: + case kInvisTrans: + case kDeluxeTrans: + if (thisHousePtr->rooms[r].objects[i].data.d.where != -1) + numLinks++; + break; + } + } + } + + HSetState((Handle)thisHouse, wasState); + + return (numLinks); +} + +//-------------------------------------------------------------- GenerateLinksList + +// Generates a list of all objects that have links and what roomsÉ +// and objects they are linked to. It is called in order to preserveÉ +// the links if the objects or rooms in a house are to be shuffledÉ +// around. + +#ifndef COMPILEDEMO +void GenerateLinksList (void) +{ + houseType *thisHousePtr; + objectType thisObject; + short numLinks, numRooms, r, i, what; + short floor, suite, roomLinked, objectLinked; + char wasState; + + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + thisHousePtr = *thisHouse; + numRooms = thisHousePtr->nRooms; + + numLinks = 0; + + for (r = 0; r < numRooms; r++) + { + for (i = 0; i < kMaxRoomObs; i++) + { + what = thisHousePtr->rooms[r].objects[i].what; + switch (what) + { + case kLightSwitch: + case kMachineSwitch: + case kThermostat: + case kPowerSwitch: + case kKnifeSwitch: + case kInvisSwitch: + case kTrigger: + case kLgTrigger: + thisObject = thisHousePtr->rooms[r].objects[i]; + if (thisObject.data.e.where != -1) + { + ExtractFloorSuite(thisObject.data.e.where, &floor, &suite); + roomLinked = GetRoomNumber(floor, suite); + objectLinked = (short)thisObject.data.e.who; + linksList[numLinks].srcRoom = r; + linksList[numLinks].srcObj = i; + linksList[numLinks].destRoom = roomLinked; + linksList[numLinks].destObj = objectLinked; + numLinks++; + } + break; + + case kMailboxLf: + case kMailboxRt: + case kFloorTrans: + case kCeilingTrans: + case kInvisTrans: + case kDeluxeTrans: + thisObject = thisHousePtr->rooms[r].objects[i]; + if (thisObject.data.d.where != -1) + { + ExtractFloorSuite(thisObject.data.d.where, &floor, &suite); + roomLinked = GetRoomNumber(floor, suite); + objectLinked = (short)thisObject.data.d.who; + linksList[numLinks].srcRoom = r; + linksList[numLinks].srcObj = i; + linksList[numLinks].destRoom = roomLinked; + linksList[numLinks].destObj = objectLinked; + numLinks++; + } + break; + } + } + } + + HSetState((Handle)thisHouse, wasState); +} +#endif + +//-------------------------------------------------------------- SortRoomObjects + +// I'm a little fuzzy on what this does. + +#ifndef COMPILEDEMO +void SortRoomsObjects (short which) +{ + short probe, probe2, room, obj; + Boolean busy, looking; + + busy = true; + probe = 0; + + do + { + if ((*thisHouse)->rooms[which].objects[probe].what == kObjectIsEmpty) + { + looking = true; + probe2 = probe + 1; // begin by looking at the next object + do + { + if ((*thisHouse)->rooms[which].objects[probe2].what != kObjectIsEmpty) + { + (*thisHouse)->rooms[which].objects[probe] = + (*thisHouse)->rooms[which].objects[probe2]; + (*thisHouse)->rooms[which].objects[probe2].what = kObjectIsEmpty; + if (srcLocations[probe2] != -1) + linksList[srcLocations[probe2]].srcObj = probe; + if (destLocations[probe2] != -1) + { + linksList[destLocations[probe2]].destObj = probe; + room = linksList[destLocations[probe2]].srcRoom; + obj = linksList[destLocations[probe2]].srcObj; + (*thisHouse)->rooms[room].objects[obj].data.e.who = static_cast(probe); + } + fileDirty = true; + looking = false; + } + probe2++; + if ((probe2 >= kMaxRoomObs) && (looking)) + { + looking = false; + busy = false; + } + } + while (looking); + } + probe++; + if (probe >= (kMaxRoomObs - 1)) + busy = false; + } + while (busy); +} +#endif + +//-------------------------------------------------------------- SortHouseObjects + +// I'm a little fuzzy on what this does exactly either. + +#ifndef COMPILEDEMO +void SortHouseObjects (void) +{ + houseType *thisHousePtr; + short numLinks, numRooms, r, i, l; + char wasState; + + SpinCursor(3); + + CopyThisRoomToRoom(); + + numLinks = CountHouseLinks(); + if (numLinks == 0) + return; + + linksList = nil; + linksList = (linksPtr)NewPtr(sizeof(linksType) * numLinks); + if (linksList == nil) + RedAlert(kErrNoMemory); + + GenerateLinksList(); + + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + thisHousePtr = *thisHouse; + numRooms = thisHousePtr->nRooms; + + for (r = 0; r < numRooms; r++) + { + for (i = 0; i < kMaxRoomObs; i++) // initialize arrays + { + srcLocations[i] = -1; + destLocations[i] = -1; + } + + for (i = 0; i < kMaxRoomObs; i++) // walk object list + { + for (l = 0; l < numLinks; l++) // walk link list + { + if ((linksList[l].srcRoom == r) && (linksList[l].srcObj == i)) + srcLocations[i] = l; + if ((linksList[l].destRoom == r) && (linksList[l].destObj == i)) + destLocations[i] = l; + } + } + SortRoomsObjects(r); + + if ((r & 0x0007) == 0x0007) + IncrementCursor(); + } + + SpinCursor(3); + HSetState((Handle)thisHouse, wasState); + if (linksList != nil) + DisposePtr((Ptr)linksList); + ForceThisRoom(thisRoomNumber); +} +#endif + +//-------------------------------------------------------------- CountRoomsVisited + +// Goes through and counts the number of rooms a player has been to inÉ +// the current game. + +short CountRoomsVisited (void) +{ + houseType *thisHousePtr; + short numRooms, r, count; + char wasState; + + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + thisHousePtr = *thisHouse; + numRooms = thisHousePtr->nRooms; + count = 0; + + for (r = 0; r < numRooms; r++) + { + if (thisHousePtr->rooms[r].visited) + count++; + } + + HSetState((Handle)thisHouse, wasState); + return (count); +} + +//-------------------------------------------------------------- GenerateRetroLinks + +// Walk entire house looking for objects which are linked to objectsÉ +// in the current room. + +void GenerateRetroLinks (void) +{ + houseType *thisHousePtr; + objectType thisObject; + short i, r, numRooms, floor, suite; + short what, roomLinked, objectLinked; + char wasState; + + for (i = 0; i < kMaxRoomObs; i++) // Initialize array. + retroLinkList[i].room = -1; + + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + thisHousePtr = *thisHouse; + numRooms = thisHousePtr->nRooms; + + for (r = 0; r < numRooms; r++) + { + for (i = 0; i < kMaxRoomObs; i++) + { + what = thisHousePtr->rooms[r].objects[i].what; + switch (what) + { + case kLightSwitch: + case kMachineSwitch: + case kThermostat: + case kPowerSwitch: + case kKnifeSwitch: + case kInvisSwitch: + case kTrigger: + case kLgTrigger: + thisObject = thisHousePtr->rooms[r].objects[i]; + if (thisObject.data.e.where != -1) + { + ExtractFloorSuite(thisObject.data.e.where, &floor, &suite); + roomLinked = GetRoomNumber(floor, suite); + if (roomLinked == thisRoomNumber) + { + objectLinked = (short)thisObject.data.e.who; + if (retroLinkList[objectLinked].room == -1) + { + retroLinkList[objectLinked].room = r; + retroLinkList[objectLinked].object = i; + } + } + } + break; + + case kMailboxLf: + case kMailboxRt: + case kFloorTrans: + case kCeilingTrans: + case kInvisTrans: + case kDeluxeTrans: + thisObject = thisHousePtr->rooms[r].objects[i]; + if (thisObject.data.d.where != -1) + { + ExtractFloorSuite(thisObject.data.d.where, &floor, &suite); + roomLinked = GetRoomNumber(floor, suite); + if (roomLinked == thisRoomNumber) + { + objectLinked = (short)thisObject.data.d.who; + if (retroLinkList[objectLinked].room == -1) + { + retroLinkList[objectLinked].room = r; + retroLinkList[objectLinked].object = i; + } + } + } + break; + } + } + } + + HSetState((Handle)thisHouse, wasState); +} + +//-------------------------------------------------------------- UpdateGoToDialog +// Redraws the "Go To Room..." dialog. + +void UpdateGoToDialog (DialogPtr theDialog) +{ + DrawDialog(theDialog); + DrawDefaultButton(theDialog); + FrameDialogItemC(theDialog, 10, kRedOrangeColor8); +} + +//-------------------------------------------------------------- GoToFilter +// Dialog filter for the "Go To Room..." dialog. + +Boolean GoToFilter (DialogPtr dial, EventRecord *event, short *item) +{ + switch (event->what) + { + case keyDown: + switch ((event->message) & charCodeMask) + { + case kReturnKeyASCII: + case kEnterKeyASCII: + FlashDialogButton(dial, kOkayButton); + *item = kOkayButton; + return(true); + break; + + default: + return(false); + } + break; + + case updateEvt: + SetPort((GrafPtr)dial); + BeginUpdate(GetDialogWindow(dial)); + UpdateGoToDialog(dial); + EndUpdate(GetDialogWindow(dial)); + event->what = nullEvent; + return(false); + break; + + default: + return(false); + break; + } +} + +//-------------------------------------------------------------- DoGoToDialog + +// "Go To Room..." dialog. + + void DoGoToDialog (void) + { + #define kGoToFirstButt 2 + #define kGoToPrevButt 3 + #define kGoToFSButt 4 + #define kFloorEditText 5 + #define kSuiteEditText 6 + DialogPtr theDialog; + long tempLong; + short item, roomToGoTo; + Boolean leaving, canceled; + ModalFilterUPP goToFilterUPP; + + goToFilterUPP = NewModalFilterUPP(GoToFilter); + BringUpDialog(&theDialog, kGoToDialogID); + + if (GetFirstRoomNumber() == thisRoomNumber) + MyDisableControl(theDialog, kGoToFirstButt); + if ((!RoomNumExists(previousRoom)) || (previousRoom == thisRoomNumber)) + MyDisableControl(theDialog, kGoToPrevButt); + + SetDialogNumToStr(theDialog, kFloorEditText, (long)wasFloor); + SetDialogNumToStr(theDialog, kSuiteEditText, (long)wasSuite); + SelectDialogItemText(theDialog, kFloorEditText, 0, 1024); + + leaving = false; + canceled = false; + + while (!leaving) + { + ModalDialog(goToFilterUPP, &item); + + if (item == kOkayButton) + { + roomToGoTo = -1; + canceled = true; + leaving = true; + } + else if (item == kGoToFirstButt) + { + roomToGoTo = GetFirstRoomNumber(); + leaving = true; + } + else if (item == kGoToPrevButt) + { + roomToGoTo = previousRoom; + leaving = true; + } + else if (item == kGoToFSButt) + { + GetDialogNumFromStr(theDialog, kFloorEditText, &tempLong); + wasFloor = (short)tempLong; + GetDialogNumFromStr(theDialog, kSuiteEditText, &tempLong); + wasSuite = (short)tempLong; + roomToGoTo = GetRoomNumber(wasFloor, wasSuite); + leaving = true; + } + } + + DisposeDialog(theDialog); + DisposeModalFilterUPP(goToFilterUPP); + + if (!canceled) + { + if (RoomNumExists(roomToGoTo)) + { + DeselectObject(); + CopyRoomToThisRoom(roomToGoTo); + ReflectCurrentRoom(false); + } + else + SysBeep(1); + } +} + +//-------------------------------------------------------------- ConvertHouseVer1To2 + +// This function goes through an old version 1 house and converts itÉ +// to version 2. + +void ConvertHouseVer1To2 (void) +{ + Str255 roomStr, message; + short wasRoom, floor, suite; + short i, h, numRooms; + char wasState; + + CopyThisRoomToRoom(); + wasRoom = thisRoomNumber; + GetLocalizedString(13, message); + OpenMessageWindow(message); + + SpinCursor(3); + + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + + numRooms = (*thisHouse)->nRooms; + for (i = 0; i < numRooms; i++) + { + if ((*thisHouse)->rooms[i].suite != kRoomIsEmpty) + { + NumToString((long)i, roomStr); + GetLocalizedString(14, message); + PasStringConcat(message, roomStr); + SetMessageWindowMessage(message); + SpinCursor(1); + + ForceThisRoom(i); + for (h = 0; h < kMaxRoomObs; h++) + { + switch (thisRoom->objects[h].what) + { + case kMailboxLf: + case kMailboxRt: + case kFloorTrans: + case kCeilingTrans: + case kInvisTrans: + case kDeluxeTrans: + if (thisRoom->objects[h].data.d.where != -1) + { + ExtractFloorSuite(thisRoom->objects[h].data.d.where, &floor, &suite); + floor += kNumUndergroundFloors; + thisRoom->objects[h].data.d.where = MergeFloorSuite(floor, suite); + } + break; + + case kLightSwitch: + case kMachineSwitch: + case kThermostat: + case kPowerSwitch: + case kKnifeSwitch: + case kInvisSwitch: + case kTrigger: + case kLgTrigger: + if (thisRoom->objects[h].data.e.where != -1) + { + ExtractFloorSuite(thisRoom->objects[h].data.e.where, &floor, &suite); + floor += kNumUndergroundFloors; + thisRoom->objects[h].data.e.where = MergeFloorSuite(floor, suite); + } + break; + } + } + CopyThisRoomToRoom(); + } + } + + (*thisHouse)->version = kHouseVersion; + HSetState((Handle)thisHouse, wasState); + + InitCursor(); + CloseMessageWindow(); + ForceThisRoom(wasRoom); +} + +//-------------------------------------------------------------- ShiftWholeHouse + +void ShiftWholeHouse (short howFar) +{ + short wasRoom; + short i, h, numRooms; + char wasState; + + OpenMessageWindow(PSTR("Shifting Whole HouseÉ")); + SpinCursor(3); + + CopyThisRoomToRoom(); + wasRoom = thisRoomNumber; + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + numRooms = (*thisHouse)->nRooms; + + for (i = 0; i < numRooms; i++) + { + if ((*thisHouse)->rooms[i].suite != kRoomIsEmpty) + { + SpinCursor(1); + + ForceThisRoom(i); + for (h = 0; h < kMaxRoomObs; h++) + { + } + CopyThisRoomToRoom(); + } + } + + HSetState((Handle)thisHouse, wasState); + ForceThisRoom(wasRoom); + + InitCursor(); + CloseMessageWindow(); +} + diff --git a/GpApp/House.h b/GpApp/House.h new file mode 100644 index 0000000..51a39c7 --- /dev/null +++ b/GpApp/House.h @@ -0,0 +1,12 @@ +//============================================================================ +//---------------------------------------------------------------------------- +// House.h +//---------------------------------------------------------------------------- +//============================================================================ + + +#include "PLMacTypes.h" + + +extern Str32 thisHouseName; +extern Boolean houseUnlocked; diff --git a/GpApp/HouseIO.cpp b/GpApp/HouseIO.cpp new file mode 100644 index 0000000..9114376 --- /dev/null +++ b/GpApp/HouseIO.cpp @@ -0,0 +1,707 @@ + +//============================================================================ +//---------------------------------------------------------------------------- +// HouseIO.c +//---------------------------------------------------------------------------- +//============================================================================ + + +#include "PLAliases.h" +#include "PLMovies.h" +#include "PLResources.h" +#include "PLStringCompare.h" +#include "PLTextUtils.h" +#include "PLPasStr.h" +#include "Externs.h" +#include "Environ.h" +#include "House.h" +#include "ObjectEdit.h" + + +#define kSaveChangesAlert 1002 +#define kSaveChanges 1 +#define kDiscardChanges 2 + + +void LoopMovie (void); +void OpenHouseMovie (void); +void CloseHouseMovie (void); +Boolean IsFileReadOnly (FSSpec *); + + +Movie theMovie; +Rect movieRect; +short houseRefNum, houseResFork, wasHouseVersion; +Boolean houseOpen, fileDirty, gameDirty; +Boolean changeLockStateOfHouse, saveHouseLocked, houseIsReadOnly; +Boolean hasMovie, tvInRoom; + +extern FSSpecPtr theHousesSpecs; +extern short thisHouseIndex, tvWithMovieNumber; +extern short numberRooms, housesFound; +extern Boolean noRoomAtAll, quitting, wardBitSet; +extern Boolean phoneBitSet, bannerStarCountOn; + + +//============================================================== Functions +//-------------------------------------------------------------- LoopMovie + +void LoopMovie (void) +{ + Handle theLoop; + UserData theUserData; + short theCount; + + theLoop = NewHandle(sizeof(long)); + (** (long **) theLoop) = 0; + theUserData = GetMovieUserData(theMovie); + theCount = CountUserDataType(theUserData, 'LOOP'); + while (theCount--) + { + RemoveUserData(theUserData, 'LOOP', 1); + } + AddUserData(theUserData, theLoop, 'LOOP'); +} + +//-------------------------------------------------------------- OpenHouseMovie + +void OpenHouseMovie (void) +{ +#ifdef COMPILEQT + TimeBase theTime; + FSSpec theSpec; + FInfo finderInfo; + Handle spaceSaver; + OSErr theErr; + short movieRefNum; + Boolean dataRefWasChanged; + + if (thisMac.hasQT) + { + theSpec = theHousesSpecs[thisHouseIndex]; + PasStringConcat(theSpec.name, PSTR(".mov")); + + theErr = FSpGetFInfo(&theSpec, &finderInfo); + if (theErr != noErr) + return; + + theErr = OpenMovieFile(&theSpec, &movieRefNum, fsCurPerm); + if (theErr != noErr) + { + YellowAlert(kYellowQTMovieNotLoaded, theErr); + return; + } + + theErr = NewMovieFromFile(&theMovie, movieRefNum, nil, theSpec.name, + newMovieActive, &dataRefWasChanged); + if (theErr != noErr) + { + YellowAlert(kYellowQTMovieNotLoaded, theErr); + theErr = CloseMovieFile(movieRefNum); + return; + } + theErr = CloseMovieFile(movieRefNum); + + spaceSaver = NewHandle(307200L); + if (spaceSaver == nil) + { + YellowAlert(kYellowQTMovieNotLoaded, 749); + CloseHouseMovie(); + return; + } + + GoToBeginningOfMovie(theMovie); + theErr = LoadMovieIntoRam(theMovie, + GetMovieTime(theMovie, 0L), GetMovieDuration(theMovie), 0); + if (theErr != noErr) + { + YellowAlert(kYellowQTMovieNotLoaded, theErr); + DisposeHandle(spaceSaver); + CloseHouseMovie(); + return; + } + DisposeHandle(spaceSaver); + + theErr = PrerollMovie(theMovie, 0, 0x000F0000); + if (theErr != noErr) + { + YellowAlert(kYellowQTMovieNotLoaded, theErr); + CloseHouseMovie(); + return; + } + + theTime = GetMovieTimeBase(theMovie); + SetTimeBaseFlags(theTime, loopTimeBase); + SetMovieMasterTimeBase(theMovie, theTime, nil); + LoopMovie(); + + GetMovieBox(theMovie, &movieRect); + + hasMovie = true; + } +#endif +} + +//-------------------------------------------------------------- CloseHouseMovie + +void CloseHouseMovie (void) +{ +#ifdef COMPILEQT + OSErr theErr; + + if ((thisMac.hasQT) && (hasMovie)) + { + theErr = LoadMovieIntoRam(theMovie, + GetMovieTime(theMovie, 0L), GetMovieDuration(theMovie), flushFromRam); + DisposeMovie(theMovie); + } +#endif + hasMovie = false; +} + +//-------------------------------------------------------------- OpenHouse +// Opens a house (whatever current selection is). Returns true if all went well. + +Boolean OpenHouse (void) +{ + OSErr theErr; + Boolean targetIsFolder, wasAliased; + + if (houseOpen) + { + if (!CloseHouse()) + return(false); + } + if ((housesFound < 1) || (thisHouseIndex == -1)) + return(false); + + theErr = ResolveAliasFile(&theHousesSpecs[thisHouseIndex], true, + &targetIsFolder, &wasAliased); + if (!CheckFileError(theErr, thisHouseName)) + return (false); + + #ifdef COMPILEDEMO + if (!EqualString(theHousesSpecs[thisHouseIndex].name, "\pDemo House", false, true)) + return (false); + #endif + + houseIsReadOnly = IsFileReadOnly(&theHousesSpecs[thisHouseIndex]); + + theErr = FSpOpenDF(&theHousesSpecs[thisHouseIndex], fsCurPerm, &houseRefNum); + if (!CheckFileError(theErr, thisHouseName)) + return (false); + + houseOpen = true; + OpenHouseResFork(); + + hasMovie = false; + tvInRoom = false; + tvWithMovieNumber = -1; + OpenHouseMovie(); + + return (true); +} + +//-------------------------------------------------------------- OpenSpecificHouse +// Opens the specific house passed in. + +#ifndef COMPILEDEMO +Boolean OpenSpecificHouse (FSSpec *specs) +{ + short i; + Boolean itOpened; + + if ((housesFound < 1) || (thisHouseIndex == -1)) + return (false); + + itOpened = true; + + for (i = 0; i < housesFound; i++) + { + if ((theHousesSpecs[i].vRefNum == specs->vRefNum) && + (theHousesSpecs[i].parID == specs->parID) && + (EqualString(theHousesSpecs[i].name, specs->name, false, true))) + { + thisHouseIndex = i; + PasStringCopy(theHousesSpecs[thisHouseIndex].name, thisHouseName); + if (OpenHouse()) + itOpened = ReadHouse(); + else + itOpened = false; + break; + } + } + + return (itOpened); +} +#endif + +//-------------------------------------------------------------- SaveHouseAs + +#ifndef COMPILEDEMO +Boolean SaveHouseAs (void) +{ + // TEMP - fix this later -- use NavServices (see House.c) +/* + StandardFileReply theReply; + FSSpec oldHouse; + OSErr theErr; + Boolean noProblems; + Str255 tempStr; + + noProblems = true; + + GetLocalizedString(15, tempStr); + StandardPutFile(tempStr, thisHouseName, &theReply); + if (theReply.sfGood) + { + oldHouse = theHousesSpecs[thisHouseIndex]; + + CloseHouseResFork(); // close this house file + theErr = FSClose(houseRefNum); + if (theErr != noErr) + { + CheckFileError(theErr, "\pPreferences"); + return(false); + } + // create new house file + theErr = FSpCreate(&theReply.sfFile, 'ozm5', 'gliH', theReply.sfScript); + if (!CheckFileError(theErr, theReply.sfFile.name)) + return (false); + HCreateResFile(theReply.sfFile.vRefNum, theReply.sfFile.parID, + theReply.sfFile.name); + if (ResError() != noErr) + YellowAlert(kYellowFailedResCreate, ResError()); + PasStringCopy(theReply.sfFile.name, thisHouseName); + // open new house data fork + theErr = FSpOpenDF(&theReply.sfFile, fsRdWrPerm, &houseRefNum); + if (!CheckFileError(theErr, thisHouseName)) + return (false); + + houseOpen = true; + + noProblems = WriteHouse(false); // write out house data + if (!noProblems) + return(false); + + BuildHouseList(); + if (OpenSpecificHouse(&theReply.sfFile)) // open new house again + { + } + else + { + if (OpenSpecificHouse(&oldHouse)) + { + YellowAlert(kYellowOpenedOldHouse, 0); + } + else + { + YellowAlert(kYellowLostAllHouses, 0); + noProblems = false; + } + } + } + + + return (noProblems); + */ + return false; +} +#endif + +//-------------------------------------------------------------- ReadHouse +// With a house open, this function reads in the actual bits of dataÉ +// into memory. + +Boolean ReadHouse (void) +{ + long byteCount; + OSErr theErr; + short whichRoom; + + if (!houseOpen) + { + YellowAlert(kYellowUnaccounted, 2); + return (false); + } + + if (gameDirty || fileDirty) + { + if (houseIsReadOnly) + { + if (!WriteScoresToDisk()) + { + YellowAlert(kYellowFailedWrite, 0); + return(false); + } + } + else if (!WriteHouse(false)) + return(false); + } + + theErr = GetEOF(houseRefNum, &byteCount); + if (theErr != noErr) + { + CheckFileError(theErr, thisHouseName); + return(false); + } + + #ifdef COMPILEDEMO + if (byteCount != 16526L) + return (false); + #endif + + if (thisHouse != nil) + DisposeHandle((Handle)thisHouse); + + thisHouse = (houseHand)NewHandle(byteCount); + if (thisHouse == nil) + { + YellowAlert(kYellowNoMemory, 10); + return(false); + } + MoveHHi((Handle)thisHouse); + + theErr = SetFPos(houseRefNum, fsFromStart, 0L); + if (theErr != noErr) + { + CheckFileError(theErr, thisHouseName); + return(false); + } + + HLock((Handle)thisHouse); + theErr = FSRead(houseRefNum, &byteCount, *thisHouse); + if (theErr != noErr) + { + CheckFileError(theErr, thisHouseName); + HUnlock((Handle)thisHouse); + return(false); + } + + numberRooms = (*thisHouse)->nRooms; + #ifdef COMPILEDEMO + if (numberRooms != 45) + return (false); + #endif + if ((numberRooms < 1) || (byteCount == 0L)) + { + numberRooms = 0; + noRoomAtAll = true; + YellowAlert(kYellowNoRooms, 0); + HUnlock((Handle)thisHouse); + return(false); + } + + wasHouseVersion = (*thisHouse)->version; + if (wasHouseVersion >= kNewHouseVersion) + { + YellowAlert(kYellowNewerVersion, 0); + HUnlock((Handle)thisHouse); + return(false); + } + + houseUnlocked = (((*thisHouse)->timeStamp & 0x00000001) == 0); + #ifdef COMPILEDEMO + if (houseUnlocked) + return (false); + #endif + changeLockStateOfHouse = false; + saveHouseLocked = false; + + whichRoom = (*thisHouse)->firstRoom; + #ifdef COMPILEDEMO + if (whichRoom != 0) + return (false); + #endif + + wardBitSet = (((*thisHouse)->flags & 0x00000001) == 0x00000001); + phoneBitSet = (((*thisHouse)->flags & 0x00000002) == 0x00000002); + bannerStarCountOn = (((*thisHouse)->flags & 0x00000004) == 0x00000000); + + HUnlock((Handle)thisHouse); + + noRoomAtAll = (RealRoomNumberCount() == 0); + thisRoomNumber = -1; + previousRoom = -1; + if (!noRoomAtAll) + CopyRoomToThisRoom(whichRoom); + + if (houseIsReadOnly) + { + houseUnlocked = false; + if (ReadScoresFromDisk()) + { + } + } + + objActive = kNoObjectSelected; + ReflectCurrentRoom(true); + gameDirty = false; + fileDirty = false; + UpdateMenus(false); + + return (true); +} + +//-------------------------------------------------------------- WriteHouse +// This function writes out the house data to disk. + +Boolean WriteHouse (Boolean checkIt) +{ + UInt32 timeStamp; + long byteCount; + OSErr theErr; + + if (!houseOpen) + { + YellowAlert(kYellowUnaccounted, 4); + return (false); + } + + theErr = SetFPos(houseRefNum, fsFromStart, 0L); + if (theErr != noErr) + { + CheckFileError(theErr, thisHouseName); + return(false); + } + + CopyThisRoomToRoom(); + + if (checkIt) + CheckHouseForProblems(); + + HLock((Handle)thisHouse); + byteCount = GetHandleSize((Handle)thisHouse); + + if (fileDirty) + { + GetDateTime(&timeStamp); + timeStamp &= 0x7FFFFFFF; + + if (changeLockStateOfHouse) + houseUnlocked = !saveHouseLocked; + + if (houseUnlocked) // house unlocked + timeStamp &= 0x7FFFFFFE; + else + timeStamp |= 0x00000001; + (*thisHouse)->timeStamp = (long)timeStamp; + (*thisHouse)->version = wasHouseVersion; + } + + theErr = FSWrite(houseRefNum, &byteCount, *thisHouse); + if (theErr != noErr) + { + CheckFileError(theErr, thisHouseName); + HUnlock((Handle)thisHouse); + return(false); + } + + theErr = SetEOF(houseRefNum, byteCount); + if (theErr != noErr) + { + CheckFileError(theErr, thisHouseName); + HUnlock((Handle)thisHouse); + return(false); + } + + HUnlock((Handle)thisHouse); + + if (changeLockStateOfHouse) + { + changeLockStateOfHouse = false; + ReflectCurrentRoom(true); + } + + gameDirty = false; + fileDirty = false; + UpdateMenus(false); + return (true); +} + +//-------------------------------------------------------------- CloseHouse +// This function closes the current house that is open. + +Boolean CloseHouse (void) +{ + OSErr theErr; + + if (!houseOpen) + return (true); + + if (gameDirty) + { + if (houseIsReadOnly) + { + if (!WriteScoresToDisk()) + YellowAlert(kYellowFailedWrite, 0); + } + else if (!WriteHouse(theMode == kEditMode)) + YellowAlert(kYellowFailedWrite, 0); + } + else if (fileDirty) + { +#ifndef COMPILEDEMO + if (!QuerySaveChanges()) // false signifies user canceled + return(false); +#endif + } + + CloseHouseResFork(); + CloseHouseMovie(); + + theErr = FSClose(houseRefNum); + if (theErr != noErr) + { + CheckFileError(theErr, thisHouseName); + return(false); + } + + houseOpen = false; + + return (true); +} + +//-------------------------------------------------------------- OpenHouseResFork +// Opens the resource fork of the current house that is open. + +void OpenHouseResFork (void) +{ + if (houseResFork == -1) + { + houseResFork = FSpOpenResFile(&theHousesSpecs[thisHouseIndex], fsCurPerm); + if (houseResFork == -1) + YellowAlert(kYellowFailedResOpen, ResError()); + else + UseResFile(houseResFork); + } +} + +//-------------------------------------------------------------- CloseHouseResFork +// Closes the resource fork of the current house that is open. + +void CloseHouseResFork (void) +{ + if (houseResFork != -1) + { + CloseResFile(houseResFork); + houseResFork = -1; + } +} + +//-------------------------------------------------------------- QuerySaveChanges +// If changes were made, this function will present the user with aÉ +// dialog asking them if they would like to save the changes. + +#ifndef COMPILEDEMO +Boolean QuerySaveChanges (void) +{ + short hitWhat; + Boolean whoCares; + + if (!fileDirty) + return(true); + + InitCursor(); +// CenterAlert(kSaveChangesAlert); + ParamText(thisHouseName, PSTR(""), PSTR(""), PSTR("")); + hitWhat = Alert(kSaveChangesAlert, nil); + if (hitWhat == kSaveChanges) + { + if (wasHouseVersion < kHouseVersion) + ConvertHouseVer1To2(); + wasHouseVersion = kHouseVersion; + if (WriteHouse(true)) + return (true); + else + return (false); + } + else if (hitWhat == kDiscardChanges) + { + fileDirty = false; + if (!quitting) + { + whoCares = CloseHouse(); + if (OpenHouse()) + whoCares = ReadHouse(); + } + UpdateMenus(false); + return (true); + } + else + return (false); +} +#endif + +//-------------------------------------------------------------- YellowAlert +// This is a dialog used to present an error code and explanationÉ +// to the user when a non-lethal error has occurred. Ideally, ofÉ +// course, this never is called. + +void YellowAlert (short whichAlert, short identifier) +{ + #define kYellowAlert 1006 + Str255 errStr, errNumStr; + short whoCares; + + InitCursor(); + + GetIndString(errStr, kYellowAlert, whichAlert); + NumToString((long)identifier, errNumStr); + +// CenterAlert(kYellowAlert); + ParamText(errStr, errNumStr, PSTR(""), PSTR("")); + + whoCares = Alert(kYellowAlert, nil); +} + +//-------------------------------------------------------------- IsFileReadOnly + +Boolean IsFileReadOnly (FSSpec *theSpec) +{ + return false; + /* + Str255 tempStr; + ParamBlockRec theBlock; + HParamBlockRec hBlock; + VolumeParam *volPtr; + OSErr theErr; + + volPtr = (VolumeParam *)&theBlock; + volPtr->ioCompletion = nil; + volPtr->ioVolIndex = 0; + volPtr->ioNamePtr = tempStr; + volPtr->ioVRefNum = theSpec->vRefNum; + + theErr = PBGetVInfo(&theBlock, false); + if (CheckFileError(theErr, "\pRead/Write")) + { + if (((volPtr->ioVAtrb & 0x0080) == 0x0080) || + ((volPtr->ioVAtrb & 0x8000) == 0x8000)) + return (true); // soft/hard locked bits + else + { + hBlock.fileParam.ioCompletion = nil; + hBlock.fileParam.ioVRefNum = theSpec->vRefNum; + hBlock.fileParam.ioFVersNum = 0; + hBlock.fileParam.ioFDirIndex = 0; + hBlock.fileParam.ioNamePtr = theSpec->name; + hBlock.fileParam.ioDirID = theSpec->parID; + + theErr = PBHGetFInfo(&hBlock, false); + if (CheckFileError(theErr, "\pRead/Write")) + { + if ((hBlock.fileParam.ioFlAttrib & 0x0001) == 0x0001) + return (true); + else + return (false); + } + else + return (false); + } + } + else + return (false); + */ +} + diff --git a/GpApp/HouseInfo.cpp b/GpApp/HouseInfo.cpp new file mode 100644 index 0000000..67d7301 --- /dev/null +++ b/GpApp/HouseInfo.cpp @@ -0,0 +1,344 @@ + +//============================================================================ +//---------------------------------------------------------------------------- +// HouseInfo.c +//---------------------------------------------------------------------------- +//============================================================================ + + +#include "PLNumberFormatting.h" +#include "PLPasStr.h" +#include "Externs.h" +#include "DialogUtils.h" + + +#define kHouseInfoDialogID 1001 +#define kBannerTextItem 4 +#define kLockHouseButton 6 +#define kClearScoresButton 9 +#define kTrailerTextItem 11 +#define kNoPhoneCheck 14 +#define kBannerNCharsItem 15 +#define kTrailerNCharsItem 16 +#define kHouseSizeItem 18 +#define kLockHouseAlert 1029 +#define kZeroScoresAlert 1032 + + +long CountTotalHousePoints (void); +void UpdateHouseInfoDialog (DialogPtr); +Boolean HouseFilter (DialogPtr, EventRecord *, short *); +Boolean WarnLockingHouse (void); +void HowToZeroScores (void); + + +Str255 banner, trailer; +Rect houseEditText1, houseEditText2; +short houseCursorIs; +Boolean keyHit, tempPhoneBit; + +extern Cursor beamCursor; +extern Boolean noRoomAtAll, changeLockStateOfHouse, saveHouseLocked; +extern Boolean phoneBitSet; + +#ifndef COMPILEDEMO + + +//============================================================== Functions +//-------------------------------------------------------------- CountTotalHousePoints + +// The following functions all handle the "House Info" dialog in the editor. + +long CountTotalHousePoints (void) +{ + long pointTotal; + short numRooms, h, i; + char wasState; + + pointTotal = (long)RealRoomNumberCount() * (long)kRoomVisitScore; + + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + + numRooms = (*thisHouse)->nRooms; + for (i = 0; i < numRooms; i++) + { + if ((*thisHouse)->rooms[i].suite != kRoomIsEmpty) + { + for (h = 0; h < kMaxRoomObs; h++) + { + switch ((*thisHouse)->rooms[i].objects[h].what) + { + case kRedClock: + pointTotal += kRedClockPoints; + break; + + case kBlueClock: + pointTotal += kBlueClockPoints; + break; + + case kYellowClock: + pointTotal += kYellowClockPoints; + break; + + case kCuckoo: + pointTotal += kCuckooClockPoints; + break; + + case kStar: + pointTotal += kStarPoints; + break; + + case kInvisBonus: + pointTotal += (*thisHouse)->rooms[i].objects[h].data.c.points; + break; + + default: + break; + } + } + } + } + + HSetState((Handle)thisHouse, wasState); + + return (pointTotal); +} + +//-------------------------------------------------------------- UpdateHouseInfoDialog + +void UpdateHouseInfoDialog (DialogPtr theDialog) +{ + short nChars; + + DrawDialog(theDialog); + nChars = GetDialogStringLen(theDialog, kBannerTextItem); + SetDialogNumToStr(theDialog, kBannerNCharsItem, (long)nChars); + nChars = GetDialogStringLen(theDialog, kTrailerTextItem); + SetDialogNumToStr(theDialog, kTrailerNCharsItem, (long)nChars); + SetDialogNumToStr(theDialog, kHouseSizeItem, CountTotalHousePoints()); + FrameDialogItemC(theDialog, 10, kRedOrangeColor8); + SetDialogItemValue(theDialog, kNoPhoneCheck, (short)tempPhoneBit); +} + +//-------------------------------------------------------------- HouseFilter + +Boolean HouseFilter (DialogPtr dial, EventRecord *event, short *item) +{ + Point mouseIs; + short nChars; + + if (keyHit) + { + nChars = GetDialogStringLen(dial, kBannerTextItem); + SetDialogNumToStr(dial, kBannerNCharsItem, (long)nChars); + nChars = GetDialogStringLen(dial, kTrailerTextItem); + SetDialogNumToStr(dial, kTrailerNCharsItem, (long)nChars); + keyHit = false; + } + + switch (event->what) + { + case keyDown: + switch ((event->message) & charCodeMask) + { + case kEnterKeyASCII: + FlashDialogButton(dial, kOkayButton); + *item = kOkayButton; + return(true); + break; + + case kEscapeKeyASCII: + FlashDialogButton(dial, kCancelButton); + *item = kCancelButton; + return(true); + break; + + default: + keyHit = true; + return(false); + } + break; + + case mouseDown: + return(false); + break; + + case mouseUp: + return(false); + break; + + case updateEvt: + SetPort((GrafPtr)dial); + BeginUpdate(GetDialogWindow(dial)); + UpdateHouseInfoDialog(dial); + EndUpdate(GetDialogWindow(dial)); + event->what = nullEvent; + return(false); + break; + + default: + mouseIs = event->where; + GlobalToLocal(&mouseIs); + if ((PtInRect(mouseIs, &houseEditText1)) || + (PtInRect(mouseIs, &houseEditText2))) + { + if (houseCursorIs != kBeamCursor) + { + SetCursor(&beamCursor); + houseCursorIs = kBeamCursor; + } + } + else + { + if (houseCursorIs != kArrowCursor) + { + InitCursor(); + houseCursorIs = kArrowCursor; + } + } + return(false); + break; + } +} + +//-------------------------------------------------------------- DoHouseInfo + +void DoHouseInfo (void) +{ + DialogPtr houseInfoDialog; + Str255 versStr, loVers, nRoomsStr; + long h, v; + short item, numRooms, version; + char wasState; + Boolean leaving; + ModalFilterUPP houseFilterUPP; + + houseFilterUPP = NewModalFilterUPP(HouseFilter); + tempPhoneBit = phoneBitSet; + + wasState = HGetState((Handle)thisHouse); + numRooms = RealRoomNumberCount(); + HLock((Handle)thisHouse); + PasStringCopy((*thisHouse)->banner, banner); + PasStringCopy((*thisHouse)->trailer, trailer); + version = (*thisHouse)->version; + if (!noRoomAtAll) + { + h = (long)(*thisHouse)->rooms[(*thisHouse)->firstRoom].suite; + v = (long)(*thisHouse)->rooms[(*thisHouse)->firstRoom].floor; + } + HSetState((Handle)thisHouse, wasState); + + NumToString((long)version >> 8, versStr); // Convert version to two stringsÉ + NumToString((long)version % 0x0100, loVers); // the 1's and 1/10th's part. + NumToString((long)numRooms, nRoomsStr); // Number of rooms -> string. + + ParamText(versStr, loVers, nRoomsStr, PSTR("")); + +// CenterDialog(kHouseInfoDialogID); + houseInfoDialog = GetNewDialog(kHouseInfoDialogID, nil, kPutInFront); + if (houseInfoDialog == nil) + RedAlert(kErrDialogDidntLoad); + SetPort((GrafPtr)houseInfoDialog); + ShowWindow(GetDialogWindow(houseInfoDialog)); + + SetDialogString(houseInfoDialog, kBannerTextItem, banner); + SetDialogString(houseInfoDialog, kTrailerTextItem, trailer); + SelectDialogItemText(houseInfoDialog, kBannerTextItem, 0, 1024); + GetDialogItemRect(houseInfoDialog, kBannerTextItem, &houseEditText1); + GetDialogItemRect(houseInfoDialog, kTrailerTextItem, &houseEditText2); + houseCursorIs = kArrowCursor; + leaving = false; + + while (!leaving) + { + ModalDialog(houseFilterUPP, &item); + + if (item == kOkayButton) + { + GetDialogString(houseInfoDialog, kBannerTextItem, banner); + GetDialogString(houseInfoDialog, kTrailerTextItem, trailer); + + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + PasStringCopyNum(banner, (*thisHouse)->banner, 255); + PasStringCopyNum(trailer, (*thisHouse)->trailer, 255); + if (tempPhoneBit != phoneBitSet) + { + phoneBitSet = tempPhoneBit; + if (phoneBitSet) + (*thisHouse)->flags = (*thisHouse)->flags | 0x00000002; + else + (*thisHouse)->flags = (*thisHouse)->flags & 0xFFFFDFFD; + } + HSetState((Handle)thisHouse, wasState); + + fileDirty = true; + UpdateMenus(false); + leaving = true; + } + else if (item == kCancelButton) + leaving = true; + else if (item == kLockHouseButton) + { + if (WarnLockingHouse()) + { + changeLockStateOfHouse = true; + saveHouseLocked = true; + fileDirty = true; + UpdateMenus(false); + } + } + else if (item == kClearScoresButton) + HowToZeroScores(); + else if (item == kNoPhoneCheck) + { + tempPhoneBit = !tempPhoneBit; + SetDialogItemValue(houseInfoDialog, kNoPhoneCheck, (short)tempPhoneBit); + } + } + InitCursor(); + DisposeDialog(houseInfoDialog); + DisposeModalFilterUPP(houseFilterUPP); +} + +//-------------------------------------------------------------- WarnLockingHouse + +Boolean WarnLockingHouse (void) +{ + short hitWhat; + +// CenterAlert(kLockHouseAlert); + hitWhat = Alert(kLockHouseAlert, nil); + + return (hitWhat == 1); +} + +//-------------------------------------------------------------- HowToZeroScores + +void HowToZeroScores (void) +{ + short hitWhat; + +// CenterAlert(kZeroScoresAlert); + hitWhat = Alert(kZeroScoresAlert, nil); + + switch (hitWhat) + { + case 2: // zero all + ZeroHighScores(); + fileDirty = true; + UpdateMenus(false); + break; + + case 3: // zero all but highest + ZeroAllButHighestScore(); + fileDirty = true; + UpdateMenus(false); + break; + } +} + +#endif + diff --git a/GpApp/HouseLegal.cpp b/GpApp/HouseLegal.cpp new file mode 100644 index 0000000..ac8e711 --- /dev/null +++ b/GpApp/HouseLegal.cpp @@ -0,0 +1,1219 @@ + +//============================================================================ +//---------------------------------------------------------------------------- +// HouseLegal.c +//---------------------------------------------------------------------------- +//============================================================================ + + +#include "PLNumberFormatting.h" +#include "PLStringCompare.h" +#include "Externs.h" +#include "ObjectEdit.h" +#include "RectUtils.h" + + +void WrapBannerAndTrailer (void); +void ValidateNumberOfRooms (void); +void CheckDuplicateFloorSuite (void); +void CompressHouse (void); +void LopOffExtraRooms (void); +void ValidateRoomNumbers (void); +void CountUntitledRooms (void); +void CheckRoomNameLength (void); +void MakeSureNumObjectsJives (void); +void KeepAllObjectsLegal (void); +void CheckForStaircasePairs (void); + + +short houseErrors, wasRoom; +Boolean isHouseChecks; + +extern short numberRooms; + + +//============================================================== Functions +//-------------------------------------------------------------- KeepObjectLegal + +// Does a test of the current object active for any illegal boundsÉ +// or values. It corrects the erros and returns true if any changesÉ +// were made. + +Boolean KeepObjectLegal (void) +{ + objectType *theObject; + Rect bounds, roomRect; + short direction, dist; + char wasState; + Boolean unchanged; + + unchanged = true; +#ifndef COMPILEDEMO + + theObject = &thisRoom->objects[objActive]; + + if (objActive == kInitialGliderSelected) + { + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + if ((*thisHouse)->initial.h < 0) + (*thisHouse)->initial.h = 0; + if ((*thisHouse)->initial.v < 0) + (*thisHouse)->initial.v = 0; + if ((*thisHouse)->initial.h > (kRoomWide - kGliderWide)) + (*thisHouse)->initial.h = kRoomWide - kGliderWide; + if ((*thisHouse)->initial.v > (kTileHigh - kGliderHigh)) + (*thisHouse)->initial.v = kTileHigh - kGliderHigh; + HSetState((Handle)thisHouse, wasState); + return (true); + } + + QSetRect(&roomRect, 0, 0, kRoomWide, kTileHigh); + + switch (theObject->what) + { + case kFloorVent: + case kCeilingVent: + case kFloorBlower: + case kCeilingBlower: + case kSewerGrate: + case kLeftFan: + case kRightFan: + case kTaper: + case kCandle: + case kStubby: + case kTiki: + case kBBQ: + case kInvisBlower: + case kGrecoVent: + case kSewerBlower: + case kLiftArea: + GetObjectRect(&thisRoom->objects[objActive], &bounds); + if (ForceRectInRect(&bounds, &roomRect)) + { + theObject->data.a.topLeft.h = bounds.left; + theObject->data.a.topLeft.v = bounds.top; + unchanged = false; + if (theObject->what == kLiftArea) + { + theObject->data.a.distance = RectWide(&bounds); + theObject->data.a.tall = RectTall(&bounds) / 2; + } + } + if ((theObject->what == kStubby) && (theObject->data.a.topLeft.h % 2 == 0)) + { + theObject->data.a.topLeft.h--; + unchanged = false; + } + if (((theObject->what == kTaper) || (theObject->what == kCandle) || + (theObject->what == kTiki) || (theObject->what == kBBQ)) && + (theObject->data.a.topLeft.h % 2 != 0)) + { + theObject->data.a.topLeft.h--; + unchanged = false; + } + if ((theObject->what == kFloorVent) && (theObject->data.a.topLeft.v != kFloorVentTop)) + { + theObject->data.a.topLeft.v = kFloorVentTop; + theObject->data.a.distance += 2; + } + if ((theObject->what == kFloorBlower) && + (theObject->data.a.topLeft.v != kFloorBlowerTop)) + { + theObject->data.a.topLeft.v = kFloorBlowerTop; + theObject->data.a.distance += 2; + } + if ((theObject->what == kSewerGrate) && + (theObject->data.a.topLeft.v != kSewerGrateTop)) + { + theObject->data.a.topLeft.v = kSewerGrateTop; + theObject->data.a.distance += 2; + } + if ((theObject->what == kFloorTrans) && + (theObject->data.a.topLeft.v != kFloorTransTop)) + { + theObject->data.a.topLeft.v = kFloorTransTop; + theObject->data.a.distance += 2; + } + if (ObjectHasHandle(&direction, &dist)) + { + switch (direction) + { + case kAbove: + dist = bounds.top - dist; + if ((theObject->what == kFloorVent) || + (theObject->what == kFloorBlower) || + (theObject->what == kTaper) || + (theObject->what == kCandle) || + (theObject->what == kStubby)) + { + if (dist < 36) + { + theObject->data.a.distance += dist - 36; + unchanged = false; + } + } + else + { + if (dist < 0) + { + theObject->data.a.distance += dist; + unchanged = false; + } + } + break; + + case kToRight: + dist = bounds.right + dist; + if (dist > kRoomWide) + { + theObject->data.a.distance += (kRoomWide - dist); + unchanged = false; + } + break; + + case kBelow: + dist = bounds.bottom + dist; + if (dist > kTileHigh) + { + theObject->data.a.distance += (kTileHigh - dist); + unchanged = false; + } + break; + + case kToLeft: + dist = bounds.left - dist; + if (dist < 0) + { + theObject->data.a.distance += dist; + unchanged = false; + } + break; + } + } + break; + + case kTable: + case kShelf: + case kCabinet: + case kFilingCabinet: + case kWasteBasket: + case kMilkCrate: + case kCounter: + case kDresser: + case kDeckTable: + case kStool: + case kTrunk: + case kInvisObstacle: + case kManhole: + case kBooks: + case kInvisBounce: + GetObjectRect(&thisRoom->objects[objActive], &bounds); + if (ForceRectInRect(&bounds, &roomRect)) + { + theObject->data.b.bounds = bounds; + unchanged = false; + } + if ((theObject->what == kManhole) && + (((bounds.left - 3) % 64) != 0)) + { + theObject->data.b.bounds.left = + (((bounds.left + 29) / 64) * 64) + 3; + theObject->data.b.bounds.right = + theObject->data.b.bounds.left + + RectWide(&srcRects[kManhole]); + unchanged = false; + } + break; + + case kRedClock: + case kBlueClock: + case kYellowClock: + case kCuckoo: + case kPaper: + case kBattery: + case kBands: + case kGreaseRt: + case kGreaseLf: + case kFoil: + case kInvisBonus: + case kStar: + case kSparkle: + case kHelium: + case kSlider: + GetObjectRect(&thisRoom->objects[objActive], &bounds); + if (ForceRectInRect(&bounds, &roomRect)) + { + theObject->data.c.topLeft.h = bounds.left; + theObject->data.c.topLeft.v = bounds.top; + unchanged = false; + } + if ((theObject->what == kGreaseRt) && + (bounds.right + theObject->data.c.length > kRoomWide)) + { + theObject->data.c.length = kRoomWide - bounds.right; + unchanged = false; + } + else if ((theObject->what == kGreaseLf) && + (bounds.left - theObject->data.c.length < 0)) + { + theObject->data.c.length = bounds.left; + unchanged = false; + } + else if ((theObject->what == kSlider) && + (bounds.left + theObject->data.c.length > kRoomWide)) + { + theObject->data.c.length = kRoomWide - bounds.left; + unchanged = false; + } + if (theObject->data.c.topLeft.h % 2 != 0) + { + theObject->data.c.topLeft.h--; + unchanged = false; + } + if ((theObject->what != kStar) && + (theObject->data.c.length % 2 != 0)) + { + theObject->data.c.length--; + unchanged = false; + } + break; + + case kUpStairs: + case kDownStairs: + case kMailboxLf: + case kMailboxRt: + case kFloorTrans: + case kCeilingTrans: + case kDoorInLf: + case kDoorInRt: + case kDoorExRt: + case kDoorExLf: + case kWindowInLf: + case kWindowInRt: + case kWindowExRt: + case kWindowExLf: + case kInvisTrans: + case kDeluxeTrans: + GetObjectRect(&thisRoom->objects[objActive], &bounds); + if (ForceRectInRect(&bounds, &roomRect)) + { + theObject->data.d.topLeft.h = bounds.left; + theObject->data.d.topLeft.v = bounds.top; + unchanged = false; + if (theObject->what == kDeluxeTrans) + { + theObject->data.d.tall = ((RectWide(&bounds) / 4) << 8) + + (RectTall(&bounds) / 4); + } + } + if ((theObject->what == kDoorInLf) || + (theObject->what == kDoorInRt)) + { + if (theObject->data.d.topLeft.h + + HalfRectWide(&srcRects[kDoorInLf]) > (kRoomWide / 2)) + { + theObject->data.d.topLeft.h = kDoorInRtLeft; + theObject->what = kDoorInRt; + } + else + { + theObject->data.d.topLeft.h = kDoorInLfLeft; + theObject->what = kDoorInLf; + } + } + if ((theObject->what == kDoorExRt) || + (theObject->what == kDoorExLf)) + { + if (theObject->data.d.topLeft.h + + HalfRectWide(&srcRects[kDoorExRt]) > (kRoomWide / 2)) + { + theObject->data.d.topLeft.h = kDoorExRtLeft; + theObject->what = kDoorExRt; + } + else + { + theObject->data.d.topLeft.h = kDoorExLfLeft; + theObject->what = kDoorExLf; + } + } + if ((theObject->what == kWindowInLf) || + (theObject->what == kWindowInRt)) + { + if (theObject->data.d.topLeft.h + + HalfRectWide(&srcRects[kWindowInLf]) > (kRoomWide / 2)) + { + theObject->data.d.topLeft.h = kWindowInRtLeft; + theObject->what = kWindowInRt; + } + else + { + theObject->data.d.topLeft.h = kWindowInLfLeft; + theObject->what = kWindowInLf; + } + } + if ((theObject->what == kWindowExRt) || + (theObject->what == kWindowExLf)) + { + if (theObject->data.d.topLeft.h + + HalfRectWide(&srcRects[kWindowExRt]) > (kRoomWide / 2)) + { + theObject->data.d.topLeft.h = kWindowExRtLeft; + theObject->what = kWindowExRt; + } + else + { + theObject->data.d.topLeft.h = kWindowExLfLeft; + theObject->what = kWindowExLf; + } + } + + if ((theObject->what == kInvisTrans) && + ((theObject->data.d.topLeft.v + + theObject->data.d.tall) > kTileHigh)) + { + theObject->data.d.tall = kTileHigh - + theObject->data.d.topLeft.v; + unchanged = false; + } + if ((theObject->what == kInvisTrans) && + (theObject->data.d.wide < 0)) + { + theObject->data.d.wide = 0; + unchanged = false; + } + break; + + case kLightSwitch: + case kMachineSwitch: + case kThermostat: + case kPowerSwitch: + case kKnifeSwitch: + case kInvisSwitch: + case kTrigger: + case kLgTrigger: + case kSoundTrigger: + GetObjectRect(&thisRoom->objects[objActive], &bounds); + if (ForceRectInRect(&bounds, &roomRect)) + { + theObject->data.e.topLeft.h = bounds.left; + theObject->data.e.topLeft.v = bounds.top; + unchanged = false; + } + if (theObject->data.e.topLeft.h % 2 != 0) + { + theObject->data.e.topLeft.h--; + unchanged = false; + } + break; + + case kCeilingLight: + case kLightBulb: + case kTableLamp: + case kHipLamp: + case kDecoLamp: + case kFlourescent: + case kTrackLight: + case kInvisLight: + GetObjectRect(&thisRoom->objects[objActive], &bounds); + if (ForceRectInRect(&bounds, &roomRect)) + { + if ((theObject->what == kFlourescent) || (theObject->what == kTrackLight)) + { + if (theObject->data.f.topLeft.h < bounds.left) + theObject->data.f.topLeft.h = bounds.left; + + if (theObject->data.f.topLeft.v < bounds.top) + theObject->data.f.topLeft.v = bounds.top; + + if ((theObject->data.f.topLeft.h + theObject->data.f.length) > bounds.right) + theObject->data.f.length = bounds.right - theObject->data.f.topLeft.h; + } + else + { + theObject->data.f.topLeft.h = bounds.left; + theObject->data.f.topLeft.v = bounds.top; + } + unchanged = false; + } + if (((theObject->what == kFlourescent) || + (theObject->what == kTrackLight)) && + ((bounds.right > kRoomWide) || (bounds.left < 0))) + { + if (theObject->data.f.topLeft.h < 0) + { + theObject->data.f.topLeft.h = 0; + unchanged = false; + } + if (bounds.left < 0) + { + bounds.left = 0; + unchanged = false; + } + if (theObject->data.f.topLeft.h > kRoomWide) + { + theObject->data.f.topLeft.h = kRoomWide; + unchanged = false; + } + if (bounds.right > kRoomWide) + { + bounds.right = kRoomWide; + unchanged = false; + } + theObject->data.f.length = kRoomWide - bounds.left; + } + break; + + case kShredder: + case kToaster: + case kMacPlus: + case kGuitar: + case kTV: + case kCoffee: + case kOutlet: + case kVCR: + case kStereo: + case kMicrowave: + case kCinderBlock: + case kFlowerBox: + case kCDs: + case kCustomPict: + GetObjectRect(&thisRoom->objects[objActive], &bounds); + if (ForceRectInRect(&bounds, &roomRect)) + { + theObject->data.g.topLeft.h = bounds.left; + theObject->data.g.topLeft.v = bounds.top; + unchanged = false; + } + if ((theObject->what == kToaster) && + (bounds.top - theObject->data.g.height < 0)) + { + theObject->data.g.height = bounds.top; + unchanged = false; + } + if ((theObject->what == kTV) && + (theObject->data.g.topLeft.h % 2 == 0)) + { + theObject->data.g.topLeft.h--; + unchanged = false; + } + if (((theObject->what == kToaster) || + (theObject->what == kMacPlus) || + (theObject->what == kCoffee) || + (theObject->what == kOutlet) || + (theObject->what == kVCR) || + (theObject->what == kStereo) || + (theObject->what == kMicrowave)) && + (theObject->data.g.topLeft.h % 2 != 0)) + { + theObject->data.g.topLeft.h--; + unchanged = false; + } + break; + + case kBalloon: + case kCopterLf: + case kCopterRt: + case kDartLf: + case kDartRt: + case kBall: + case kDrip: + case kFish: + case kCobweb: + GetObjectRect(&thisRoom->objects[objActive], &bounds); + if (ForceRectInRect(&bounds, &roomRect)) + { + theObject->data.h.topLeft.h = bounds.left; + theObject->data.h.topLeft.v = bounds.top; + unchanged = false; + } + if (((theObject->what == kBall) || + (theObject->what == kFish)) && + (bounds.top - theObject->data.h.length < 0)) + { + theObject->data.h.length = bounds.top; + unchanged = false; + } + if ((theObject->what == kDrip) && + (bounds.bottom + theObject->data.h.length > kTileHigh)) + { + theObject->data.h.length = kTileHigh - bounds.bottom; + unchanged = false; + } + if (((theObject->what == kBalloon) || + (theObject->what == kCopterLf) || + (theObject->what == kCopterRt) || + (theObject->what == kBall) || + (theObject->what == kDrip) || + (theObject->what == kFish)) && + (theObject->data.h.topLeft.h % 2 != 0)) + { + theObject->data.h.topLeft.h--; + unchanged = false; + } + break; + + case kOzma: + case kMirror: + case kMousehole: + case kFireplace: + case kFlower: + case kWallWindow: + case kBear: + case kCalendar: + case kVase1: + case kVase2: + case kBulletin: + case kCloud: + case kFaucet: + case kRug: + case kChimes: + GetObjectRect(&thisRoom->objects[objActive], &bounds); + if (ForceRectInRect(&bounds, &roomRect)) + { + theObject->data.i.bounds = bounds; + unchanged = false; + } + if (theObject->what == kMirror) + { + if (theObject->data.i.bounds.left % 2 != 0) + { + theObject->data.i.bounds.left--; + unchanged = false; + } + if (theObject->data.i.bounds.right % 2 != 0) + { + theObject->data.i.bounds.right--; + unchanged = false; + } + } + break; + + } + +#endif + + return (unchanged); +} + +//-------------------------------------------------------------- WrapBannerAndTrailer + +// Tries to wrap around the text of the banner and trailer messages. + +#ifndef COMPILEDEMO +void WrapBannerAndTrailer (void) +{ + char wasState; + + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + + WrapText((*thisHouse)->banner, 40); + WrapText((*thisHouse)->trailer, 64); + + HSetState((Handle)thisHouse, wasState); +} + +//-------------------------------------------------------------- ValidateNumberOfRooms + +// Makes sure the number of room count and actual number of rooms match. + +void ValidateNumberOfRooms (void) +{ + long countedRooms, reportsRooms; + char wasState; + + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + + reportsRooms = (long)(*thisHouse)->nRooms; + countedRooms = (GetHandleSize((Handle)thisHouse) - + sizeof(houseType)) / sizeof(roomType); + if (reportsRooms != countedRooms) + { + (*thisHouse)->nRooms = (short)countedRooms; + numberRooms = (*thisHouse)->nRooms; + houseErrors++; + } + + HSetState((Handle)thisHouse, wasState); +} + +//-------------------------------------------------------------- CheckDuplicateFloorSuite + +// Error check, looks for rooms with the same floor suite (stacked). + +void CheckDuplicateFloorSuite (void) +{ + #define kRoomsTimesSuites 8192 + short i, numRooms, bitPlace; + char *pidgeonHoles; + char wasState; + + pidgeonHoles = (char *)NewPtrClear(sizeof(char) * kRoomsTimesSuites); + if (pidgeonHoles == nil) + return; + + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + + numRooms = (*thisHouse)->nRooms; + for (i = 0; i < numRooms; i++) + { + if ((*thisHouse)->rooms[i].suite != kRoomIsEmpty) + { + bitPlace = (((*thisHouse)->rooms[i].floor + 7) * 128) + + (*thisHouse)->rooms[i].suite; + if ((bitPlace < 0) || (bitPlace >= 8192)) + DebugStr(PSTR("Blew array")); + if (pidgeonHoles[bitPlace] != 0) + { + houseErrors++; + (*thisHouse)->rooms[i].suite = kRoomIsEmpty; + } + else + pidgeonHoles[bitPlace]++; + } + } + + HSetState((Handle)thisHouse, wasState); + + DisposePtr((Ptr)pidgeonHoles); +} + +//-------------------------------------------------------------- CompressHouse + +// Removes place-holder (deleted) rooms from the middle of the file. + +void CompressHouse (void) +{ + short wasFirstRoom, roomNumber, probe; + char wasState; + Boolean compressing, probing; + + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + + wasFirstRoom = (*thisHouse)->firstRoom; + compressing = true; + roomNumber = (*thisHouse)->nRooms - 1; // start with last room + do + { + if ((*thisHouse)->rooms[roomNumber].suite != kRoomIsEmpty) + { // if not an empty roomÉ + probe = 0; // start looking for empty slot + probing = true; + do + { // test room at probe to see if empty + if ((*thisHouse)->rooms[probe].suite == kRoomIsEmpty) + { // if it is, copy room there + (*thisHouse)->rooms[probe] = (*thisHouse)->rooms[roomNumber]; + (*thisHouse)->rooms[roomNumber].suite = kRoomIsEmpty; + if (roomNumber == wasFirstRoom) + (*thisHouse)->firstRoom = probe; + if (roomNumber == wasRoom) + wasRoom = probe; + probing = false; + } + probe++; // bump probe up to next room + if ((probing) && (probe >= roomNumber)) + { // we reached the current room + probing = false; // we can look no further + compressing = false; // so we can compress no more + } + } + while (probing); + } + roomNumber--; // go on to room preceding + if (roomNumber <= 0) // stop if we reach the first room + compressing = false; + } + while (compressing); + + HSetState((Handle)thisHouse, wasState); +} + +//-------------------------------------------------------------- LopOffExtraRooms + +// Deletes all empty rooms hanging off the end of the house file. + +void LopOffExtraRooms (void) +{ + long newSize; + short r, count; + char wasState; + Str255 message; + + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + + count = 0; + r = (*thisHouse)->nRooms; // begin at last room + do + { + r--; // look for trailing empties + if ((*thisHouse)->rooms[r].suite == kRoomIsEmpty) + count++; + else + r = 0; + } + while (r > 0); + + if (count > 0) // if there were trailing emptiesÉ + { + r = (*thisHouse)->nRooms - count; + newSize = sizeof(houseType) + (sizeof(roomType) * (long)r); + HUnlock((Handle)thisHouse); // resize house handle (shrink) + SetHandleSize((Handle)thisHouse, newSize); + if (MemError() != noErr) // problem? + { + ForeColor(redColor); + GetLocalizedString(16, message); + SetMessageWindowMessage(message); + } + HLock((Handle)thisHouse); // reflect new room count + (*thisHouse)->nRooms -= count; + numberRooms = (*thisHouse)->nRooms; + } + HSetState((Handle)thisHouse, wasState); +} + +//-------------------------------------------------------------- ValidateRoomNumbers + +// Error check - ensures that the floor and suite numbers are within legal ranges. + +void ValidateRoomNumbers (void) +{ + short i, numRooms; + char wasState; + Str255 message; + + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + + numRooms = (*thisHouse)->nRooms; + if (numRooms < 0) + { + (*thisHouse)->nRooms = 0; + numRooms = 0; + } + for (i = 0; i < numRooms; i++) + { + if ((*thisHouse)->rooms[i].suite != kRoomIsEmpty) + { + if (((*thisHouse)->rooms[i].floor > 56) || + ((*thisHouse)->rooms[i].floor < -7)) + { + (*thisHouse)->rooms[i].suite = kRoomIsEmpty; + ForeColor(redColor); + GetLocalizedString(17, message); + SetMessageWindowMessage(message); + houseErrors++; + ForeColor(blackColor); + } + if (((*thisHouse)->rooms[i].suite >= 128) || + ((*thisHouse)->rooms[i].suite < 0)) + { + (*thisHouse)->rooms[i].suite = kRoomIsEmpty; + ForeColor(redColor); + GetLocalizedString(18, message); + SetMessageWindowMessage(message); + houseErrors++; + ForeColor(blackColor); + } + } + } + + HSetState((Handle)thisHouse, wasState); +} + +//-------------------------------------------------------------- CountUntitledRooms + +// Returns the number of rooms left "Untitled". + +void CountUntitledRooms (void) +{ + short i, numRooms; + char wasState; + + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + + numRooms = (*thisHouse)->nRooms; + for (i = 0; i < numRooms; i++) + { + if (((*thisHouse)->rooms[i].suite != kRoomIsEmpty) && + (EqualString((*thisHouse)->rooms[i].name, PSTR("Untitled Room"), false, true))) + houseErrors++; + } + + HSetState((Handle)thisHouse, wasState); +} + +//-------------------------------------------------------------- CheckRoomNameLength + +// Error check - ensures the length of the room name is legal. + +void CheckRoomNameLength (void) +{ + short i, numRooms; + char wasState; + + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + + numRooms = (*thisHouse)->nRooms; + for (i = 0; i < numRooms; i++) + { + (*thisHouse)->rooms[i].unusedByte = 0; + + if (((*thisHouse)->rooms[i].suite != kRoomIsEmpty) && + ((*thisHouse)->rooms[i].name[0] > 27)) + { + (*thisHouse)->rooms[i].name[0] = 27; + houseErrors++; + } + } + + HSetState((Handle)thisHouse, wasState); +} + +//-------------------------------------------------------------- MakeSureNumObjectsJives + +// Error check - ensures the actual count of objects equals number of objects. + +void MakeSureNumObjectsJives (void) +{ + short i, h, numRooms, count; + char wasState; + + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + + numRooms = (*thisHouse)->nRooms; + for (i = 0; i < numRooms; i++) + { + if ((*thisHouse)->rooms[i].suite != kRoomIsEmpty) + { + count = 0; + for (h = 0; h < kMaxRoomObs; h++) + { + if ((*thisHouse)->rooms[i].objects[h].what != kObjectIsEmpty) + count++; + } + if (count != (*thisHouse)->rooms[i].numObjects) + { + houseErrors++; + (*thisHouse)->rooms[i].numObjects = count; + } + } + } + + HSetState((Handle)thisHouse, wasState); +} + +//-------------------------------------------------------------- KeepAllObjectsLegal + +// Repeatedly calls KeepObjectLegal() on ALL objects in a house. Wow! + +void KeepAllObjectsLegal (void) +{ + short i, h, numRooms; + char wasState; + Str255 message; + + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + + numRooms = (*thisHouse)->nRooms; + for (i = 0; i < numRooms; i++) + { + if ((*thisHouse)->rooms[i].suite != kRoomIsEmpty) + { + ForceThisRoom(i); + for (h = 0; h < kMaxRoomObs; h++) + { + objActive = h; + if (thisRoom->objects[objActive].what != kObjectIsEmpty) + { + if (!KeepObjectLegal()) + { + ForeColor(redColor); + GetLocalizedString(19, message); + SetMessageWindowMessage(message); + houseErrors++; + ForeColor(blackColor); + DelayTicks(60); + } + } + } + CopyThisRoomToRoom(); + } + } + + HSetState((Handle)thisHouse, wasState); +} + +//-------------------------------------------------------------- CheckForStaircasePairs + +// Ensures that for every up-stair there is a down-stair. + +void CheckForStaircasePairs (void) +{ + short i, h, g, numRooms, neighbor; + char wasState; + Boolean hasStairs; + Str255 message; + + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + + numRooms = (*thisHouse)->nRooms; + for (i = 0; i < numRooms; i++) + { + if ((*thisHouse)->rooms[i].suite != kRoomIsEmpty) + { + for (h = 0; h < kMaxRoomObs; h++) + { + if ((*thisHouse)->rooms[i].objects[h].what == kUpStairs) + { + thisRoomNumber = i; + neighbor = GetNeighborRoomNumber(kNorthRoom); + if (neighbor == kRoomIsEmpty) + { + ForeColor(redColor); + GetLocalizedString(20, message); + SetMessageWindowMessage(message); + ForeColor(blackColor); + DelayTicks(60); + } + else + { + hasStairs = false; + for (g = 0; g < kMaxRoomObs; g++) + { + if ((*thisHouse)->rooms[neighbor].objects[g].what == + kDownStairs) + hasStairs = true; + } + if (!hasStairs) + { + ForeColor(redColor); + GetLocalizedString(21, message); + SetMessageWindowMessage(message); + ForeColor(blackColor); + DelayTicks(60); + } + } + } + else if ((*thisHouse)->rooms[i].objects[h].what == kDownStairs) + { + thisRoomNumber = i; + neighbor = GetNeighborRoomNumber(kSouthRoom); + if (neighbor == kRoomIsEmpty) + { + ForeColor(redColor); + GetLocalizedString(22, message); + SetMessageWindowMessage(message); + ForeColor(blackColor); + DelayTicks(60); + } + else + { + hasStairs = false; + for (g = 0; g < kMaxRoomObs; g++) + { + if ((*thisHouse)->rooms[neighbor].objects[g].what == + kUpStairs) + hasStairs = true; + } + if (!hasStairs) + { + ForeColor(redColor); + GetLocalizedString(23, message); + SetMessageWindowMessage(message); + ForeColor(blackColor); + DelayTicks(60); + } + } + } + } + } + } + + HSetState((Handle)thisHouse, wasState); +} +#endif + +//-------------------------------------------------------------- CheckHouseForProblems + +// Calls all the above functions and reports (and corrects) errors. + +void CheckHouseForProblems (void) +{ +#ifndef COMPILEDEMO + Str255 message, message2; + short wasActive; + + houseErrors = 0; + CopyThisRoomToRoom(); + wasRoom = thisRoomNumber; + wasActive = objActive; + GetLocalizedString(24, message); + OpenMessageWindow(message); + + SpinCursor(3); + GetLocalizedString(25, message); + SetMessageWindowMessage(message); + WrapBannerAndTrailer(); + + if (isHouseChecks) + { + SpinCursor(3); + GetLocalizedString(26, message); + SetMessageWindowMessage(message); + ValidateNumberOfRooms(); + if (houseErrors != 0) + { + GetLocalizedString(27, message); + SetMessageWindowMessage(message); + DelayTicks(60); + houseErrors = 0; + } + } + + if (isHouseChecks) + { + SpinCursor(3); + houseErrors = 0; + CheckDuplicateFloorSuite(); + if (houseErrors != 0) + { + NumToString((long)houseErrors, message); + GetLocalizedString(28, message2); + PasStringConcat(message, message2); + ForeColor(redColor); + SetMessageWindowMessage(message); + ForeColor(blackColor); + DelayTicks(45); + } + } + + SpinCursor(3); + CompressHouse(); + SpinCursor(3); + LopOffExtraRooms(); + + if (isHouseChecks) + { + SpinCursor(3); + ValidateRoomNumbers(); + if (houseErrors != 0) + { + NumToString((long)houseErrors, message); + GetLocalizedString(29, message2); + PasStringConcat(message, message2); + ForeColor(redColor); + SetMessageWindowMessage(message); + ForeColor(blackColor); + DelayTicks(60); + } + } + + if (isHouseChecks) + { + SpinCursor(3); + houseErrors = 0; + CountUntitledRooms(); + if (houseErrors != 0) + { + NumToString((long)houseErrors, message); + GetLocalizedString(30, message2); + PasStringConcat(message, message2); + ForeColor(blueColor); + SetMessageWindowMessage(message); + ForeColor(blackColor); + DelayTicks(45); + } + } + + if (isHouseChecks) + { + SpinCursor(3); + houseErrors = 0; + CheckRoomNameLength(); + if (houseErrors != 0) + { + NumToString((long)houseErrors, message); + GetLocalizedString(31, message2); + PasStringConcat(message, message2); + ForeColor(blueColor); + SetMessageWindowMessage(message); + ForeColor(blackColor); + DelayTicks(45); + } + } + + if (isHouseChecks) + { + SpinCursor(3); + houseErrors = 0; + MakeSureNumObjectsJives(); + if (houseErrors != 0) + { + NumToString((long)houseErrors, message); + GetLocalizedString(32, message2); + PasStringConcat(message, message2); + ForeColor(redColor); + SetMessageWindowMessage(message); + ForeColor(blackColor); + DelayTicks(60); + } + } + + if (isHouseChecks) + { + SpinCursor(3); + houseErrors = 0; + GetLocalizedString(33, message); + SetMessageWindowMessage(message); + KeepAllObjectsLegal(); + if (houseErrors != 0) + { + NumToString((long)houseErrors, message); + GetLocalizedString(34, message2); + PasStringConcat(message, message2); + ForeColor(redColor); + SetMessageWindowMessage(message); + ForeColor(blackColor); + DelayTicks(60); + } + } + + if (isHouseChecks) + { + SpinCursor(3); + houseErrors = 0; + CheckForStaircasePairs(); + } + + if (isHouseChecks) + { + SpinCursor(3); + if (CountStarsInHouse() < 1) + { + ForeColor(redColor); + GetLocalizedString(35, message); + SetMessageWindowMessage(message); + ForeColor(blackColor); + DelayTicks(60); + } + } + + InitCursor(); + CloseMessageWindow(); + ForceThisRoom(wasRoom); + objActive = wasActive; +#endif +} + diff --git a/GpApp/Input.cpp b/GpApp/Input.cpp new file mode 100644 index 0000000..76ce835 --- /dev/null +++ b/GpApp/Input.cpp @@ -0,0 +1,399 @@ +//============================================================================ +//---------------------------------------------------------------------------- +// Input.c +//---------------------------------------------------------------------------- +//============================================================================ + + +#include "PLToolUtils.h" +#include "PLDialogs.h" +#include "Externs.h" +#include "MainWindow.h" +#include "RectUtils.h" + + +#define kNormalThrust 5 +#define kHyperThrust 8 +#define kHeliumLift 4 +#define kEscPausePictID 1015 +#define kTabPausePictID 1016 +#define kSavingGameDial 1042 + + +void LogDemoKey (char); +void DoCommandKey (void); +void DoPause (void); +void DoBatteryEngaged (gliderPtr); +void DoHeliumEngaged (gliderPtr); +Boolean QuerySaveGame (void); + + +demoPtr demoData; +KeyMap theKeys; +DialogPtr saveDial; +short demoIndex, batteryFrame; +Boolean isEscPauseKey, paused, batteryWasEngaged; + +extern long gameFrame; +extern short otherPlayerEscaped; +extern Boolean quitting, playing, onePlayerLeft, twoPlayerGame, demoGoing; + + +//============================================================== Functions +//-------------------------------------------------------------- LogDemoKey + +void LogDemoKey (char keyIs) +{ + demoData[demoIndex].frame = gameFrame; + demoData[demoIndex].key = keyIs; + demoIndex++; +} + +//-------------------------------------------------------------- DoCommandKey + +void DoCommandKey (void) +{ + if (BitTst(&theKeys, kQKeyMap)) + { + playing = false; + paused = false; + if ((!twoPlayerGame) && (!demoGoing)) + { + if (QuerySaveGame()) + SaveGame2(); // New save game. + } + } + else if ((BitTst(&theKeys, kSKeyMap)) && (!twoPlayerGame)) + { + RefreshScoreboard(kSavingTitleMode); + SaveGame2(); // New save game. + HideCursor(); + CopyRectWorkToMain(&workSrcRect); + RefreshScoreboard(kNormalTitleMode); + } +} + +//-------------------------------------------------------------- DoPause + +void DoPause (void) +{ + Rect bounds; + + SetPort((GrafPtr)mainWindow); + QSetRect(&bounds, 0, 0, 214, 54); + CenterRectInRect(&bounds, &houseRect); + if (isEscPauseKey) + LoadScaledGraphic(kEscPausePictID, &bounds); + else + LoadScaledGraphic(kTabPausePictID, &bounds); + + do + { + GetKeys(theKeys); + } + while ((isEscPauseKey && BitTst(&theKeys, kEscKeyMap)) || + (!isEscPauseKey && BitTst(&theKeys, kTabKeyMap))); + + paused = true; + while (paused) + { + GetKeys(theKeys); + if ((isEscPauseKey && BitTst(&theKeys, kEscKeyMap)) || + (!isEscPauseKey && BitTst(&theKeys, kTabKeyMap))) + paused = false; + else if (BitTst(&theKeys, kCommandKeyMap)) + DoCommandKey(); + } + + CopyBits((BitMap *)*GetGWorldPixMap(workSrcMap), + GetPortBitMapForCopyBits(GetWindowPort(mainWindow)), + &bounds, &bounds, srcCopy, nil); + + do + { + GetKeys(theKeys); + } + while ((isEscPauseKey && BitTst(&theKeys, kEscKeyMap)) || + (!isEscPauseKey && BitTst(&theKeys, kTabKeyMap))); +} + +//-------------------------------------------------------------- DoBatteryEngaged + +void DoBatteryEngaged (gliderPtr thisGlider) +{ + if (thisGlider->facing == kFaceLeft) + { + if (thisGlider->tipped) + thisGlider->hVel += kHyperThrust; + else + thisGlider->hVel -= kHyperThrust; + } + else + { + if (thisGlider->tipped) + thisGlider->hVel -= kHyperThrust; + else + thisGlider->hVel += kHyperThrust; + } + + batteryTotal--; + + if (batteryTotal == 0) + { + QuickBatteryRefresh(false); + PlayPrioritySound(kFizzleSound, kFizzlePriority); + } + else + { + if (!batteryWasEngaged) + batteryFrame = 0; + if (batteryFrame == 0) + PlayPrioritySound(kThrustSound, kThrustPriority); + batteryFrame++; + if (batteryFrame >= 4) + batteryFrame = 0; + batteryWasEngaged = true; + } +} + +//-------------------------------------------------------------- DoHeliumEngaged + +void DoHeliumEngaged (gliderPtr thisGlider) +{ + thisGlider->vDesiredVel = -kHeliumLift; + batteryTotal++; + + if (batteryTotal == 0) + { + QuickBatteryRefresh(false); + PlayPrioritySound(kFizzleSound, kFizzlePriority); + batteryWasEngaged = false; + } + else + { + if (!batteryWasEngaged) + batteryFrame = 0; + if (batteryFrame == 0) + PlayPrioritySound(kHissSound, kHissPriority); + batteryFrame++; + if (batteryFrame >= 4) + batteryFrame = 0; + batteryWasEngaged = true; + } +} + +//-------------------------------------------------------------- GetDemoInput + + void GetDemoInput (gliderPtr thisGlider) + { + if (thisGlider->which == kPlayer1) + { + GetKeys(theKeys); + +#if BUILD_ARCADE_VERSION + + if ((BitTst(&theKeys, thisGlider->leftKey)) || + (BitTst(&theKeys, thisGlider->rightKey)) || + (BitTst(&theKeys, thisGlider->battKey)) || + (BitTst(&theKeys, thisGlider->bandKey))) + { + playing = false; + paused = false; + } + +#else + + if (BitTst(&theKeys, kCommandKeyMap)) + DoCommandKey(); + +#endif + } + + if (thisGlider->mode == kGliderBurning) + { + if (thisGlider->facing == kFaceLeft) + thisGlider->hDesiredVel -= kNormalThrust; + else + thisGlider->hDesiredVel += kNormalThrust; + } + else + { + thisGlider->heldLeft = false; + thisGlider->heldRight = false; + thisGlider->tipped = false; + + if (gameFrame == (long)demoData[demoIndex].frame) + { + switch (demoData[demoIndex].key) + { + case 0: // left key + thisGlider->hDesiredVel += kNormalThrust; + thisGlider->tipped = (thisGlider->facing == kFaceLeft); + thisGlider->heldRight = true; + thisGlider->fireHeld = false; + break; + + case 1: // right key + thisGlider->hDesiredVel -= kNormalThrust; + thisGlider->tipped = (thisGlider->facing == kFaceRight); + thisGlider->heldLeft = true; + thisGlider->fireHeld = false; + break; + + case 2: // battery key + if (batteryTotal > 0) + DoBatteryEngaged(thisGlider); + else + DoHeliumEngaged(thisGlider); + thisGlider->fireHeld = false; + break; + + case 3: // rubber band key + if (!thisGlider->fireHeld) + { + if (AddBand(thisGlider, thisGlider->dest.left + 24, + thisGlider->dest.top + 10, thisGlider->facing)) + { + bandsTotal--; + if (bandsTotal <= 0) + QuickBandsRefresh(false); + + thisGlider->fireHeld = true; + } + } + break; + } + + demoIndex++; + } + else + thisGlider->fireHeld = false; + + if ((isEscPauseKey && BitTst(&theKeys, kEscKeyMap)) || + (!isEscPauseKey && BitTst(&theKeys, kTabKeyMap))) + { + DoPause(); + } + } + } + +//-------------------------------------------------------------- GetInput + +void GetInput (gliderPtr thisGlider) +{ + if (thisGlider->which == kPlayer1) + { + GetKeys(theKeys); + if (BitTst(&theKeys, kCommandKeyMap)) + DoCommandKey(); + } + + if (thisGlider->mode == kGliderBurning) + { + if (thisGlider->facing == kFaceLeft) + thisGlider->hDesiredVel -= kNormalThrust; + else + thisGlider->hDesiredVel += kNormalThrust; + } + else + { + thisGlider->heldLeft = false; + thisGlider->heldRight = false; + if (BitTst(&theKeys, thisGlider->rightKey)) // right key + { + #ifdef CREATEDEMODATA + LogDemoKey(0); + #endif + if (BitTst(&theKeys, thisGlider->leftKey)) + { + ToggleGliderFacing(thisGlider); + thisGlider->heldLeft = true; + } + else + { + thisGlider->hDesiredVel += kNormalThrust; + thisGlider->tipped = (thisGlider->facing == kFaceLeft); + thisGlider->heldRight = true; + } + } + else if (BitTst(&theKeys, thisGlider->leftKey)) // left key + { + #ifdef CREATEDEMODATA + LogDemoKey(1); + #endif + thisGlider->hDesiredVel -= kNormalThrust; + thisGlider->tipped = (thisGlider->facing == kFaceRight); + thisGlider->heldLeft = true; + } + else + thisGlider->tipped = false; + + if ((BitTst(&theKeys, thisGlider->battKey)) && (batteryTotal != 0) && + (thisGlider->mode == kGliderNormal)) + { + #ifdef CREATEDEMODATA + LogDemoKey(2); + #endif + if (batteryTotal > 0) + DoBatteryEngaged(thisGlider); + else + DoHeliumEngaged(thisGlider); + } + else + batteryWasEngaged = false; + + if ((BitTst(&theKeys, thisGlider->bandKey)) && (bandsTotal > 0) && + (thisGlider->mode == kGliderNormal)) + { + #ifdef CREATEDEMODATA + LogDemoKey(3); + #endif + if (!thisGlider->fireHeld) + { + if (AddBand(thisGlider, thisGlider->dest.left + 24, + thisGlider->dest.top + 10, thisGlider->facing)) + { + bandsTotal--; + if (bandsTotal <= 0) + QuickBandsRefresh(false); + + thisGlider->fireHeld = true; + } + } + } + else + thisGlider->fireHeld = false; + + if ((otherPlayerEscaped != kNoOneEscaped) && + (BitTst(&theKeys, kDeleteKeyMap)) && + (thisGlider->which) && (!onePlayerLeft)) + { + ForceKillGlider(); + } + + if ((isEscPauseKey && BitTst(&theKeys, kEscKeyMap)) || + (!isEscPauseKey && BitTst(&theKeys, kTabKeyMap))) + { + DoPause(); + } + } +} + +//-------------------------------------------------------------- QuerySaveGame + +Boolean QuerySaveGame (void) +{ + #define kSaveGameAlert 1041 + #define kYesSaveGameButton 1 + short hitWhat; + + InitCursor(); + FlushEvents(everyEvent, 0); +// CenterAlert(kSaveGameAlert); + hitWhat = Alert(kSaveGameAlert, nil); + if (hitWhat == kYesSaveGameButton) + return (true); + else + return (false); +} + diff --git a/GpApp/Interactions.cpp b/GpApp/Interactions.cpp new file mode 100644 index 0000000..739cd9d --- /dev/null +++ b/GpApp/Interactions.cpp @@ -0,0 +1,1777 @@ + +//============================================================================ +//---------------------------------------------------------------------------- +// Interactions.c +//---------------------------------------------------------------------------- +//============================================================================ + + +#include "Externs.h" +#include "RectUtils.h" + + +#define kFloorVentLift -6 +#define kCeilingVentDrop 8 +#define kFanStrength 12 +#define kBatterySupply 50 // about 2 rooms worth of thrust +#define kHeliumSupply 150 +#define kBandsSupply 8 +#define kFoilSupply 8 + + +Boolean GliderHitTop (gliderPtr, Rect *); +Boolean GliderInRect (gliderPtr, Rect *); +void BounceGlider (gliderPtr, Rect *); +void CheckEscapeUpTwo (gliderPtr); +void CheckEscapeUp (gliderPtr); +void CheckEscapeDownTwo (gliderPtr); +void CheckEscapeDown (gliderPtr); +void CheckRoofCollision (gliderPtr); +void CheckEscapeLeftTwo (gliderPtr); +void CheckEscapeLeft (gliderPtr); +void CheckEscapeRightTwo (gliderPtr); +void CheckEscapeRight (gliderPtr); +void CheckGliderInRoom (gliderPtr); +void HandleRewards (gliderPtr, hotPtr); +void HandleMicrowaveAction (hotPtr, gliderPtr); +void HandleHotSpotCollision (gliderPtr, hotPtr, short); +void CheckForHotSpots (void); +void WebGlider (gliderPtr, Rect *); + + +short otherPlayerEscaped, activeRectEscaped; + +extern hotPtr hotSpots; +extern short nHotSpots, leftThresh, rightThresh, thisTiles[]; +extern short localNumbers[], thisBackground, numStarsRemaining; +extern Boolean leftOpen, rightOpen, topOpen, bottomOpen, evenFrame; +extern Boolean twoPlayerGame, newState, onePlayerLeft, playerDead; + + +//============================================================== Functions +//-------------------------------------------------------------- GliderHitSides + +Boolean GliderHitTop (gliderPtr thisGlider, Rect *theRect) +{ + Rect glideBounds; + short offset; + Boolean hitTop; + + glideBounds.left = thisGlider->dest.left + 5; + glideBounds.top = thisGlider->dest.top + 5; + glideBounds.right = thisGlider->dest.right - 5; + glideBounds.bottom = thisGlider->dest.bottom - 5; + + glideBounds.left -= thisGlider->wasHVel; + glideBounds.right -= thisGlider->wasHVel; + + if (theRect->bottom < glideBounds.top) + hitTop = false; + else if (theRect->top > glideBounds.bottom) + hitTop = false; + else if (theRect->right < glideBounds.left) + hitTop = false; + else if (theRect->left > glideBounds.right) + hitTop = false; + else + hitTop = true; + + if (!hitTop) + { + PlayPrioritySound(kFoilHitSound, kFoilHitPriority); + foilTotal--; + if (foilTotal <= 0) + StartGliderFoilLosing(thisGlider); + + glideBounds.left += thisGlider->wasHVel; + glideBounds.right += thisGlider->wasHVel; + if (thisGlider->hVel > 0) + offset = 2 + glideBounds.right - theRect->left; + else + offset = 2 + glideBounds.left - theRect->right; + + thisGlider->hVel = -thisGlider->hVel - offset; + } + + return (hitTop); +} + +//-------------------------------------------------------------- SectGlider + +Boolean SectGlider (gliderPtr thisGlider, Rect *theRect, Boolean scrutinize) +{ + Rect glideBounds; + Boolean itHit; + + glideBounds = thisGlider->dest; + if (thisGlider->mode == kGliderBurning) + glideBounds.top += 6; + + if (scrutinize) + { + glideBounds.left += 5; + glideBounds.top += 5; + glideBounds.right -= 5; + glideBounds.bottom -= 5; + } + + if (theRect->bottom < glideBounds.top) + itHit = false; + else if (theRect->top > glideBounds.bottom) + itHit = false; + else if (theRect->right < glideBounds.left) + itHit = false; + else if (theRect->left > glideBounds.right) + itHit = false; + else + itHit = true; + + return (itHit); +} + +//-------------------------------------------------------------- GliderInRect + +Boolean GliderInRect (gliderPtr thisGlider, Rect *theRect) +{ + Rect glideBounds; + + glideBounds = thisGlider->dest; + + if (glideBounds.top < theRect->top) + return (false); + else if (glideBounds.bottom > theRect->bottom) + return (false); + else if (glideBounds.left < theRect->left) + return (false); + else if (glideBounds.right > theRect->right) + return (false); + else + return (true); +} + +//-------------------------------------------------------------- BounceGlider + +void BounceGlider (gliderPtr thisGlider, Rect *theRect) +{ + Rect glideBounds; + + glideBounds = thisGlider->dest; + if ((theRect->right - glideBounds.left) < (glideBounds.right - theRect->left)) + thisGlider->hVel = theRect->right - glideBounds.left; + else + thisGlider->hVel = theRect->left - glideBounds.right; + if (foilTotal > 0) + PlayPrioritySound(kFoilHitSound, kFoilHitPriority); + else + PlayPrioritySound(kHitWallSound, kHitWallPriority); +} + +//-------------------------------------------------------------- CheckEscapeUpTwo + +void CheckEscapeUpTwo (gliderPtr thisGlider) +{ + short offset, leftTile, rightTile; + + if (topOpen) + { + if (thisGlider->dest.top < kNoCeilingLimit) + { + if (otherPlayerEscaped == kNoOneEscaped) + { + otherPlayerEscaped = kPlayerEscapedUp; + RefreshScoreboard(kEscapedTitleMode); + FlagGliderInLimbo(thisGlider, true); + } + else if (otherPlayerEscaped == kPlayerEscapedUp) + { + otherPlayerEscaped = kNoOneEscaped; + MoveRoomToRoom(thisGlider, kAbove); + } + else + { + PlayPrioritySound(kDontExitSound, kDontExitPriority); + offset = kNoCeilingLimit - thisGlider->dest.top; + thisGlider->vVel = -thisGlider->vVel + offset; + } + } + } + else if (thisBackground == kDirt) + { + leftTile = thisGlider->dest.left >> 6; // Ö 64 + rightTile = thisGlider->dest.right >> 6; // Ö 64 + + if ((leftTile >= 0) && (leftTile < 8) && + (rightTile >= 0) && (rightTile < 8)) + { + if (((thisTiles[leftTile] == 5) || + (thisTiles[leftTile] == 6)) && + ((thisTiles[rightTile] == 5) || + (thisTiles[rightTile] == 6))) + { + if (thisGlider->dest.top < kNoCeilingLimit) + { + if (otherPlayerEscaped == kNoOneEscaped) + { + otherPlayerEscaped = kPlayerEscapedUp; + RefreshScoreboard(kEscapedTitleMode); + FlagGliderInLimbo(thisGlider, true); + } + else if (otherPlayerEscaped == kPlayerEscapedUp) + { + otherPlayerEscaped = kNoOneEscaped; + MoveRoomToRoom(thisGlider, kAbove); + } + else + { + PlayPrioritySound(kDontExitSound, kDontExitPriority); + offset = kNoCeilingLimit - thisGlider->dest.top; + thisGlider->vVel = -thisGlider->vVel + offset; + } + } + } + else + thisGlider->vVel = kCeilingLimit - thisGlider->dest.top; + } + else + thisGlider->vVel = kCeilingLimit - thisGlider->dest.top; + } + else + thisGlider->vVel = kCeilingLimit - thisGlider->dest.top; +} + +//-------------------------------------------------------------- CheckEscapeUp + +void CheckEscapeUp (gliderPtr thisGlider) +{ + short leftTile, rightTile; + + if (topOpen) + { + if (thisGlider->dest.top < kNoCeilingLimit) + { + MoveRoomToRoom(thisGlider, kAbove); + } + } + else if (thisBackground == kDirt) + { + leftTile = thisGlider->dest.left >> 6; // Ö 64 + rightTile = thisGlider->dest.right >> 6; // Ö 64 + + if ((leftTile >= 0) && (leftTile < 8) && + (rightTile >= 0) && (rightTile < 8)) + { + if (((thisTiles[leftTile] == 5) || + (thisTiles[leftTile] == 6)) && + ((thisTiles[rightTile] == 5) || + (thisTiles[rightTile] == 6))) + { + if (thisGlider->dest.top < kNoCeilingLimit) + MoveRoomToRoom(thisGlider, kAbove); + } + else + thisGlider->vVel = kCeilingLimit - thisGlider->dest.top; + } + else + thisGlider->vVel = kCeilingLimit - thisGlider->dest.top; + } + else + thisGlider->vVel = kCeilingLimit - thisGlider->dest.top; +} + +//-------------------------------------------------------------- CheckEscapeDownTwo + +void CheckEscapeDownTwo (gliderPtr thisGlider) +{ + short offset, leftTile, rightTile; + + if (bottomOpen) + { + if (thisGlider->dest.bottom > kNoFloorLimit) + { + if (otherPlayerEscaped == kNoOneEscaped) + { + otherPlayerEscaped = kPlayerEscapedDown; + RefreshScoreboard(kEscapedTitleMode); + FlagGliderInLimbo(thisGlider, true); + } + else if (otherPlayerEscaped == kPlayerEscapedDown) + { + otherPlayerEscaped = kNoOneEscaped; + MoveRoomToRoom(thisGlider, kBelow); + } + else + { + PlayPrioritySound(kDontExitSound, kDontExitPriority); + offset = kNoFloorLimit - thisGlider->dest.bottom; + thisGlider->vVel = -thisGlider->vVel + offset; + } + } + } + else if (thisBackground == kDirt) + { + leftTile = thisGlider->dest.left >> 6; // Ö 64 + rightTile = thisGlider->dest.right >> 6; // Ö 64 + + if ((leftTile >= 0) && (leftTile < 8) && + (rightTile >= 0) && (rightTile < 8)) + { + if (((thisTiles[leftTile] == 2) || + (thisTiles[leftTile] == 3)) && + ((thisTiles[rightTile] == 2) || + (thisTiles[rightTile] == 3))) + { + if (thisGlider->dest.bottom > kNoFloorLimit) + { + if (otherPlayerEscaped == kNoOneEscaped) + { + otherPlayerEscaped = kPlayerEscapedDown; + RefreshScoreboard(kEscapedTitleMode); + FlagGliderInLimbo(thisGlider, true); + } + else if (otherPlayerEscaped == kPlayerEscapedDown) + { + otherPlayerEscaped = kNoOneEscaped; + MoveRoomToRoom(thisGlider, kBelow); + } + else + { + PlayPrioritySound(kDontExitSound, kDontExitPriority); + offset = kNoFloorLimit - thisGlider->dest.bottom; + thisGlider->vVel = -thisGlider->vVel + offset; + } + } + } + else + { + if (thisGlider->ignoreGround) + { + if (thisGlider->dest.bottom > kNoFloorLimit) + MoveRoomToRoom(thisGlider, kBelow); + } + else + { + thisGlider->vVel = kFloorLimit - thisGlider->dest.bottom; + StartGliderFadingOut(thisGlider); + PlayPrioritySound(kFadeOutSound, kFadeOutPriority); + } + } + } + } + else + { + if (thisGlider->ignoreGround) + { + if (thisGlider->dest.bottom > kNoFloorLimit) + MoveRoomToRoom(thisGlider, kBelow); + } + else + { + thisGlider->vVel = kFloorLimit - thisGlider->dest.bottom; + StartGliderFadingOut(thisGlider); + PlayPrioritySound(kFadeOutSound, kFadeOutPriority); + } + } +} + +//-------------------------------------------------------------- CheckEscapeDown + +void CheckEscapeDown (gliderPtr thisGlider) +{ + short leftTile, rightTile; + + if (bottomOpen) + { + if (thisGlider->dest.bottom > kNoFloorLimit) + { + MoveRoomToRoom(thisGlider, kBelow); + } + } + else if (thisBackground == kDirt) + { + leftTile = thisGlider->dest.left >> 6; // Ö 64 + rightTile = thisGlider->dest.right >> 6; // Ö 64 + + if ((leftTile >= 0) && (leftTile < 8) && (rightTile >= 0) && (rightTile < 8)) + { + if (((thisTiles[leftTile] == 2) || (thisTiles[leftTile] == 3)) && + ((thisTiles[rightTile] == 2) || (thisTiles[rightTile] == 3))) + { + if (thisGlider->dest.bottom > kNoFloorLimit) + MoveRoomToRoom(thisGlider, kBelow); + } + else + { + if (thisGlider->ignoreGround) + { + if (thisGlider->dest.bottom > kNoFloorLimit) + MoveRoomToRoom(thisGlider, kBelow); + } + else + { + thisGlider->vVel = kFloorLimit - thisGlider->dest.bottom; + StartGliderFadingOut(thisGlider); + PlayPrioritySound(kFadeOutSound, kFadeOutPriority); + } + } + } + else + { + if (thisGlider->ignoreGround) + { + if (thisGlider->dest.bottom > kNoFloorLimit) + MoveRoomToRoom(thisGlider, kBelow); + } + else + { + thisGlider->vVel = kFloorLimit - thisGlider->dest.bottom; + StartGliderFadingOut(thisGlider); + PlayPrioritySound(kFadeOutSound, kFadeOutPriority); + } + } + } + else + { + if (thisGlider->ignoreGround) + { + if (thisGlider->dest.bottom > kNoFloorLimit) + MoveRoomToRoom(thisGlider, kBelow); + } + else + { + thisGlider->vVel = kFloorLimit - thisGlider->dest.bottom; + StartGliderFadingOut(thisGlider); + PlayPrioritySound(kFadeOutSound, kFadeOutPriority); + } + } +} + +//-------------------------------------------------------------- CheckRoofCollision + +void CheckRoofCollision (gliderPtr thisGlider) +{ + short offset, tileOver; + + offset = (thisGlider->dest.left + kHalfGliderWide) >> 6; // Ö 64 + if ((offset >= 0) && (offset <= 7) && (!thisGlider->sliding)) + { + tileOver = thisTiles[offset]; + if (tileOver == 1) + { + if (((thisGlider->dest.left + kHalfGliderWide) - (offset << 6)) > + (250 - thisGlider->dest.bottom)) + { + thisGlider->vVel = kFloorLimit - thisGlider->dest.bottom; + StartGliderFadingOut(thisGlider); + PlayPrioritySound(kFadeOutSound, kFadeOutPriority); + } + } + else if (tileOver == 2) + { + if (((thisGlider->dest.left + kHalfGliderWide) - (offset << 6)) > + (186 - thisGlider->dest.bottom)) + { + thisGlider->vVel = kFloorLimit - thisGlider->dest.bottom; + StartGliderFadingOut(thisGlider); + PlayPrioritySound(kFadeOutSound, kFadeOutPriority); + } + } + else if (tileOver == 5) + { + if ((64 - ((thisGlider->dest.left + kHalfGliderWide) - (offset << 6))) > + (186 - thisGlider->dest.bottom)) + { + thisGlider->vVel = kFloorLimit - thisGlider->dest.bottom; + StartGliderFadingOut(thisGlider); + PlayPrioritySound(kFadeOutSound, kFadeOutPriority); + } + } + else if (tileOver == 6) + { + if ((64 - ((thisGlider->dest.left + kHalfGliderWide) - (offset << 6))) > + (250 - thisGlider->dest.bottom)) + { + thisGlider->vVel = kFloorLimit - thisGlider->dest.bottom; + StartGliderFadingOut(thisGlider); + PlayPrioritySound(kFadeOutSound, kFadeOutPriority); + } + } + else + { + thisGlider->vVel = kFloorLimit - thisGlider->dest.bottom; + StartGliderFadingOut(thisGlider); + PlayPrioritySound(kFadeOutSound, kFadeOutPriority); + } + } +} + +//-------------------------------------------------------------- CheckEscapeLeftTwo + +void CheckEscapeLeftTwo (gliderPtr thisGlider) +{ + short offset; + + if (leftThresh == kLeftWallLimit) + { + if (thisGlider->ignoreLeft) + { + if (thisGlider->dest.left < kNoLeftWallLimit) + { + if (otherPlayerEscaped == kNoOneEscaped) + { + otherPlayerEscaped = kPlayerEscapedLeft; + RefreshScoreboard(kEscapedTitleMode); + FlagGliderInLimbo(thisGlider, true); + } + else if (otherPlayerEscaped == kPlayerEscapedLeft) + { + otherPlayerEscaped = kNoOneEscaped; + MoveRoomToRoom(thisGlider, kToLeft); + } + else + { + PlayPrioritySound(kDontExitSound, kDontExitPriority); + offset = kNoLeftWallLimit - thisGlider->dest.left; + thisGlider->hVel = -thisGlider->hVel + offset; + } + } + } + else + { + if (foilTotal > 0) + PlayPrioritySound(kFoilHitSound, kFoilHitPriority); + else + PlayPrioritySound(kHitWallSound, kHitWallPriority); + offset = kLeftWallLimit - thisGlider->dest.left; + thisGlider->hVel = -thisGlider->hVel + offset; + } + } + else + { + if (otherPlayerEscaped == kNoOneEscaped) + { + otherPlayerEscaped = kPlayerEscapedLeft; + RefreshScoreboard(kEscapedTitleMode); + FlagGliderInLimbo(thisGlider, true); + } + else if (otherPlayerEscaped == kPlayerEscapedLeft) + { + otherPlayerEscaped = kNoOneEscaped; + MoveRoomToRoom(thisGlider, kToLeft); + } + else + { + PlayPrioritySound(kDontExitSound, kDontExitPriority); + offset = kNoLeftWallLimit - thisGlider->dest.left; + thisGlider->hVel = -thisGlider->hVel + offset; + } + } +} + +//-------------------------------------------------------------- CheckEscapeLeft + +void CheckEscapeLeft (gliderPtr thisGlider) +{ + short offset; + + if (leftThresh == kLeftWallLimit) + { + if (thisGlider->ignoreLeft) + { + if (thisGlider->dest.left < kNoLeftWallLimit) + MoveRoomToRoom(thisGlider, kToLeft); + } + else + { + if (foilTotal > 0) + PlayPrioritySound(kFoilHitSound, kFoilHitPriority); + else + PlayPrioritySound(kHitWallSound, kHitWallPriority); + offset = kLeftWallLimit - thisGlider->dest.left; + thisGlider->hVel = -thisGlider->hVel + offset; + } + } + else + MoveRoomToRoom(thisGlider, kToLeft); +} + +//-------------------------------------------------------------- CheckEscapeRightTwo + +void CheckEscapeRightTwo (gliderPtr thisGlider) +{ + short offset; + + if (rightThresh == kRightWallLimit) + { + if (thisGlider->ignoreRight) + { + if (thisGlider->dest.right > kNoRightWallLimit) + { + if (otherPlayerEscaped == kNoOneEscaped) + { + otherPlayerEscaped = kPlayerEscapedRight; + RefreshScoreboard(kEscapedTitleMode); + FlagGliderInLimbo(thisGlider, true); + } + else if (otherPlayerEscaped == kPlayerEscapedRight) + { + otherPlayerEscaped = kNoOneEscaped; + MoveRoomToRoom(thisGlider, kToRight); + } + else + { + PlayPrioritySound(kDontExitSound, kDontExitPriority); + offset = kNoRightWallLimit - thisGlider->dest.right; + thisGlider->hVel = -thisGlider->hVel + offset; + } + } + } + else + { + if (foilTotal > 0) + PlayPrioritySound(kFoilHitSound, kFoilHitPriority); + else + PlayPrioritySound(kHitWallSound, kHitWallPriority); + offset = kRightWallLimit - thisGlider->dest.right; + thisGlider->hVel = -thisGlider->hVel + offset; + } + } + else + { + if (otherPlayerEscaped == kNoOneEscaped) + { + otherPlayerEscaped = kPlayerEscapedRight; + RefreshScoreboard(kEscapedTitleMode); + FlagGliderInLimbo(thisGlider, true); + } + else if (otherPlayerEscaped == kPlayerEscapedRight) + { + otherPlayerEscaped = kNoOneEscaped; + MoveRoomToRoom(thisGlider, kToRight); + } + else + { + PlayPrioritySound(kDontExitSound, kDontExitPriority); + offset = kNoRightWallLimit - thisGlider->dest.right; + thisGlider->hVel = -thisGlider->hVel + offset; + } + } +} + +//-------------------------------------------------------------- CheckEscapeRight + +void CheckEscapeRight (gliderPtr thisGlider) +{ + short offset; + + if (rightThresh == kRightWallLimit) + { + if (thisGlider->ignoreRight) + { + if (thisGlider->dest.right > kNoRightWallLimit) + MoveRoomToRoom(thisGlider, kToRight); + } + else + { + if (foilTotal > 0) + PlayPrioritySound(kFoilHitSound, kFoilHitPriority); + else + PlayPrioritySound(kHitWallSound, kHitWallPriority); + offset = kRightWallLimit - thisGlider->dest.right; + thisGlider->hVel = -thisGlider->hVel + offset; + } + } + else + MoveRoomToRoom(thisGlider, kToRight); +} + +//-------------------------------------------------------------- CheckGliderInRoom + +void CheckGliderInRoom (gliderPtr thisGlider) +{ + if ((thisGlider->mode == kGliderNormal) || + (thisGlider->mode == kGliderFaceLeft) || + (thisGlider->mode == kGliderFaceRight) || + (thisGlider->mode == kGliderBurning)) + { + if (thisGlider->dest.top < kCeilingLimit) + { + if (thisGlider->mode == kGliderBurning) + { + thisGlider->wasMode = 0; + StartGliderFadingOut(thisGlider); + PlayPrioritySound(kFadeOutSound, kFadeOutPriority); + } + else if ((twoPlayerGame) && (!onePlayerLeft)) + CheckEscapeUpTwo(thisGlider); + else + CheckEscapeUp(thisGlider); + } + else if (thisGlider->dest.bottom > kFloorLimit) + { + if (thisGlider->mode == kGliderBurning) + { + thisGlider->wasMode = 0; + StartGliderFadingOut(thisGlider); + PlayPrioritySound(kFadeOutSound, kFadeOutPriority); + } + else if ((twoPlayerGame) && (!onePlayerLeft)) + CheckEscapeDownTwo(thisGlider); + else + CheckEscapeDown(thisGlider); + } + else if ((thisBackground == kRoof) && (thisGlider->dest.bottom > kRoofLimit)) + CheckRoofCollision(thisGlider); + + if (thisGlider->dest.left < leftThresh) + { + if (thisGlider->mode == kGliderBurning) + { + thisGlider->wasMode = 0; + StartGliderFadingOut(thisGlider); + PlayPrioritySound(kFadeOutSound, kFadeOutPriority); + } + else if((twoPlayerGame) && (!onePlayerLeft)) + CheckEscapeLeftTwo(thisGlider); + else + CheckEscapeLeft(thisGlider); + } + else if (thisGlider->dest.right > rightThresh) + { + if (thisGlider->mode == kGliderBurning) + { + thisGlider->wasMode = 0; + StartGliderFadingOut(thisGlider); + PlayPrioritySound(kFadeOutSound, kFadeOutPriority); + } + else if ((twoPlayerGame) && (!onePlayerLeft)) + CheckEscapeRightTwo(thisGlider); + else + CheckEscapeRight(thisGlider); + } + } +} + +//-------------------------------------------------------------- HandleRewards + +void HandleRewards (gliderPtr thisGlider, hotPtr who) +{ + Rect bounds; + short whoLinked, points; + + whoLinked = who->who; + bounds = who->bounds; + + switch (masterObjects[whoLinked].theObject.what) + { + case kRedClock: + if (SetObjectState(thisRoomNumber, masterObjects[whoLinked].objectNum, + 0, whoLinked)) + { + PlayPrioritySound(kBeepsSound, kBeepsPriority); + RestoreFromSavedMap(thisRoomNumber, + masterObjects[whoLinked].objectNum, false); + AddFlyingPoint(&bounds, 100, thisGlider->hVel / 2, thisGlider->vVel / 2); + thisGlider->hVel /= 4; + thisGlider->vVel /= 4; + theScore += kRedClockPoints; + RedrawAllGrease(); + } + who->isOn = false; + break; + + case kBlueClock: + if (SetObjectState(thisRoomNumber, masterObjects[whoLinked].objectNum, + 0, whoLinked)) + { + PlayPrioritySound(kBuzzerSound, kBuzzerPriority); + RestoreFromSavedMap(thisRoomNumber, + masterObjects[whoLinked].objectNum, false); + AddFlyingPoint(&bounds, 300, thisGlider->hVel / 2, thisGlider->vVel / 2); + thisGlider->hVel /= 4; + thisGlider->vVel /= 4; + theScore += kBlueClockPoints; + RedrawAllGrease(); + } + who->isOn = false; + break; + + case kYellowClock: + if (SetObjectState(thisRoomNumber, masterObjects[whoLinked].objectNum, + 0, whoLinked)) + { + PlayPrioritySound(kDingSound, kDingPriority); + RestoreFromSavedMap(thisRoomNumber, + masterObjects[whoLinked].objectNum, false); + AddFlyingPoint(&bounds, 500, thisGlider->hVel / 2, thisGlider->vVel / 2); + thisGlider->hVel /= 4; + thisGlider->vVel /= 4; + theScore += kYellowClockPoints; + RedrawAllGrease(); + } + who->isOn = false; + break; + + case kCuckoo: + if (SetObjectState(thisRoomNumber, masterObjects[whoLinked].objectNum, + 0, whoLinked)) + { + PlayPrioritySound(kCuckooSound, kCuckooPriority); + RestoreFromSavedMap(thisRoomNumber, + masterObjects[whoLinked].objectNum, false); + StopPendulum(thisRoomNumber, masterObjects[whoLinked].objectNum); + AddFlyingPoint(&bounds, 1000, thisGlider->hVel / 2, thisGlider->vVel / 2); + thisGlider->hVel /= 4; + thisGlider->vVel /= 4; + theScore += kCuckooClockPoints; + RedrawAllGrease(); + } + who->isOn = false; + break; + + case kPaper: + if (SetObjectState(thisRoomNumber, masterObjects[whoLinked].objectNum, + 0, whoLinked)) + { + PlayPrioritySound(kEnergizeSound, kEnergizePriority); + RestoreFromSavedMap(thisRoomNumber, + masterObjects[whoLinked].objectNum, false); + AddSparkle(&bounds); + thisGlider->hVel /= 2; + thisGlider->vVel /= 2; + mortals++; + if ((twoPlayerGame) && (!onePlayerLeft)) + mortals++; + QuickGlidersRefresh(); + RedrawAllGrease(); + } + who->isOn = false; + break; + + case kBattery: + if (SetObjectState(thisRoomNumber, masterObjects[whoLinked].objectNum, + 0, whoLinked)) + { + PlayPrioritySound(kEnergizeSound, kEnergizePriority); + RestoreFromSavedMap(thisRoomNumber, + masterObjects[whoLinked].objectNum, false); + AddSparkle(&bounds); + thisGlider->hVel /= 2; + thisGlider->vVel /= 2; + if (batteryTotal > 0) // positive number means battery power + batteryTotal += kBatterySupply; + else // negative number means helium gas + batteryTotal = kBatterySupply; + if ((twoPlayerGame) && (!onePlayerLeft)) + batteryTotal += kBatterySupply; + QuickBatteryRefresh(false); + RedrawAllGrease(); + } + who->isOn = false; + break; + + case kBands: + if (SetObjectState(thisRoomNumber, masterObjects[whoLinked].objectNum, + 0, whoLinked)) + { + PlayPrioritySound(kEnergizeSound, kEnergizePriority); + RestoreFromSavedMap(thisRoomNumber, + masterObjects[whoLinked].objectNum, false); + AddSparkle(&bounds); + thisGlider->hVel /= 2; + thisGlider->vVel /= 2; + bandsTotal += kBandsSupply; + if ((twoPlayerGame) && (!onePlayerLeft)) + bandsTotal += kBandsSupply; + QuickBandsRefresh(false); + RedrawAllGrease(); + } + who->isOn = false; + break; + + case kGreaseRt: + case kGreaseLf: + if (SetObjectState(thisRoomNumber, masterObjects[whoLinked].objectNum, + 0, whoLinked)) + SpillGrease(masterObjects[whoLinked].dynaNum, + masterObjects[whoLinked].hotNum); + who->isOn = false; + break; + + case kFoil: + if (SetObjectState(thisRoomNumber, masterObjects[whoLinked].objectNum, + 0, whoLinked)) + { + PlayPrioritySound(kEnergizeSound, kEnergizePriority); + RestoreFromSavedMap(thisRoomNumber, + masterObjects[whoLinked].objectNum, false); + AddSparkle(&bounds); + thisGlider->hVel /= 2; + thisGlider->vVel /= 2; + foilTotal += kFoilSupply; + if ((twoPlayerGame) && (!onePlayerLeft)) + foilTotal += kFoilSupply; + StartGliderFoilGoing(thisGlider); + RedrawAllGrease(); + } + who->isOn = false; + break; + + case kInvisBonus: + points = masterObjects[whoLinked].theObject.data.c.points; + if (SetObjectState(thisRoomNumber, masterObjects[whoLinked].objectNum, + 0, whoLinked)) + { + PlayPrioritySound(kBonusSound, kBonusPriority); + AddFlyingPoint(&bounds, points, thisGlider->hVel / 2, thisGlider->vVel / 2); + thisGlider->hVel /= 4; + thisGlider->vVel /= 4; + theScore += points; + } + who->isOn = false; + break; + + case kStar: + if (SetObjectState(thisRoomNumber, masterObjects[whoLinked].objectNum, + 0, whoLinked)) + { + PlayPrioritySound(kEnergizeSound, kEnergizePriority); + RestoreFromSavedMap(thisRoomNumber, + masterObjects[whoLinked].objectNum, false); + AddSparkle(&bounds); + StopStar(thisRoomNumber, masterObjects[whoLinked].objectNum); + numStarsRemaining--; + if (numStarsRemaining <= 0) + FlagGameOver(); + else + DisplayStarsRemaining(); + RedrawAllGrease(); + theScore += kStarPoints; + } + who->isOn = false; + break; + + case kSparkle: + break; + + case kHelium: + if (SetObjectState(thisRoomNumber, masterObjects[whoLinked].objectNum, + 0, whoLinked)) + { + PlayPrioritySound(kEnergizeSound, kEnergizePriority); + RestoreFromSavedMap(thisRoomNumber, + masterObjects[whoLinked].objectNum, false); + AddSparkle(&bounds); + thisGlider->hVel /= 2; + thisGlider->vVel /= 2; + if (batteryTotal < 0) // if negative, it is already helium gas + batteryTotal -= kHeliumSupply; + else // if positive, it is battery power + batteryTotal = -kHeliumSupply; + if ((twoPlayerGame) && (!onePlayerLeft)) + batteryTotal -= kHeliumSupply; + QuickBatteryRefresh(false); + RedrawAllGrease(); + } + who->isOn = false; + break; + + case kSlider: + break; + } +} + +//-------------------------------------------------------------- HandleSwitches + +void HandleSwitches (hotPtr who) +{ + Rect newRect, bounds; + short whoLinked, roomLinked, objectLinked, linkIndex; + + if (who->stillOver) + return; + + whoLinked = who->who; // what is switch's obj. # + roomLinked = masterObjects[whoLinked].roomLink; + objectLinked = masterObjects[whoLinked].objectLink; + linkIndex = masterObjects[whoLinked].localLink; + // change state of linked obj. + if (SetObjectState(roomLinked, objectLinked, + masterObjects[whoLinked].theObject.data.e.type, linkIndex)) + { + newRect = who->bounds; + QOffsetRect(&newRect, playOriginH, playOriginV); + switch (masterObjects[whoLinked].theObject.what) + { + case kLightSwitch: + PlayPrioritySound(kSwitchSound, kSwitchPriority); + DrawLightSwitch(&newRect, newState); + break; + + case kMachineSwitch: + PlayPrioritySound(kSwitchSound, kSwitchPriority); + DrawMachineSwitch(&newRect, newState); + break; + + case kThermostat: + PlayPrioritySound(kSwitchSound, kSwitchPriority); + DrawThermostat(&newRect, newState); + break; + + case kPowerSwitch: + PlayPrioritySound(kSwitchSound, kSwitchPriority); + DrawPowerSwitch(&newRect, newState); + break; + + case kKnifeSwitch: + PlayPrioritySound(kSwitchSound, kSwitchPriority); + DrawKnifeSwitch(&newRect, newState); + break; + + case kInvisSwitch: + break; + } + CopyRectBackToWork(&newRect); + AddRectToWorkRects(&newRect); + + if (linkIndex != -1) + { + switch (masterObjects[linkIndex].theObject.what) + { + case kRedClock: + case kBlueClock: + case kYellowClock: + case kPaper: + case kBattery: + case kBands: + case kFoil: + case kStar: + case kHelium: + RestoreFromSavedMap(roomLinked, objectLinked, true); + AddSparkle(&bounds); + break; + + case kCuckoo: + RestoreFromSavedMap(roomLinked, objectLinked, true); + StopPendulum(roomLinked, objectLinked); + break; + + case kGreaseRt: + case kGreaseLf: + SpillGrease(masterObjects[linkIndex].dynaNum, + masterObjects[linkIndex].hotNum); + break; + + case kInvisBonus: + case kSlider: + break; + + case kDeluxeTrans: + break; + + case kSoundTrigger: + PlayPrioritySound(kTriggerSound, kTriggerPriority); + break; + + case kCeilingLight: + case kLightBulb: + case kTableLamp: + case kHipLamp: + case kDecoLamp: + case kFlourescent: + case kTrackLight: + case kInvisLight: + RedrawRoomLighting(); + break; + + case kShredder: + break; + + case kToaster: + ToggleToaster(masterObjects[linkIndex].dynaNum); + break; + + case kMacPlus: + ToggleMacPlus(masterObjects[linkIndex].dynaNum); + break; + + case kGuitar: + PlayPrioritySound(kChordSound, kChordPriority); + break; + + case kTV: + ToggleTV(masterObjects[linkIndex].dynaNum); + break; + + case kCoffee: + ToggleCoffee(masterObjects[linkIndex].dynaNum); + break; + + case kOutlet: + ToggleOutlet(masterObjects[linkIndex].dynaNum); + break; + + case kVCR: + ToggleVCR(masterObjects[linkIndex].dynaNum); + break; + + case kStereo: + ToggleStereos(masterObjects[linkIndex].dynaNum); + break; + + case kMicrowave: + ToggleMicrowave(masterObjects[linkIndex].dynaNum); + break; + + case kBalloon: + ToggleBalloon(masterObjects[linkIndex].dynaNum); + break; + + case kCopterLf: + case kCopterRt: + ToggleCopter(masterObjects[linkIndex].dynaNum); + break; + + case kDartLf: + case kDartRt: + ToggleDart(masterObjects[linkIndex].dynaNum); + break; + + case kBall: + ToggleBall(masterObjects[linkIndex].dynaNum); + break; + + case kDrip: + ToggleDrip(masterObjects[linkIndex].dynaNum); + break; + + case kFish: + ToggleFish(masterObjects[linkIndex].dynaNum); + break; + } + } + } + + who->stillOver = true; +} + +//-------------------------------------------------------------- HandleMicrowaveAction + +void HandleMicrowaveAction (hotPtr who, gliderPtr thisGlider) +{ + short whoLinked, kills; + Boolean killed; + + if (who->stillOver) + return; + + killed = false; + whoLinked = who->who; // what is microwave's obj. # + if (masterObjects[whoLinked].theObject.data.g.state) + { + kills = (short)masterObjects[whoLinked].theObject.data.g.byte0; + if (((kills & 0x0001) == 0x0001) && (bandsTotal > 0)) + { + bandsTotal = 0; + killed = true; + QuickBandsRefresh(false); + } + if (((kills & 0x0002) == 0x0002) && (batteryTotal != 0)) + { + batteryTotal = 0; + killed = true; + QuickBatteryRefresh(false); + } + if (((kills & 0x0004) == 0x0004) && (foilTotal > 0)) + { + foilTotal = 0; + killed = true; + StartGliderFoilLosing(thisGlider); + } + } + + if (killed) + PlayPrioritySound(kMicrowavedSound, kMicrowavedPriority); +} + +//-------------------------------------------------------------- HandleHotSpotCollision + +void HandleHotSpotCollision (gliderPtr thisGlider, hotPtr who, short index) +{ + switch (who->action) + { + case kLiftIt: + thisGlider->vDesiredVel = kFloorVentLift; + break; + + case kDropIt: + thisGlider->vDesiredVel = kCeilingVentDrop; + break; + + case kPushItLeft: + thisGlider->hDesiredVel += -kFanStrength; + break; + + case kPushItRight: + thisGlider->hDesiredVel += kFanStrength; + break; + + case kDissolveIt: + if (thisGlider->mode != kGliderFadingOut) + { + if ((foilTotal > 0) || (thisGlider->mode == kGliderLosingFoil)) + { + if (GliderHitTop(thisGlider, &(who->bounds))) + { + StartGliderFadingOut(thisGlider); + PlayPrioritySound(kFadeOutSound, kFadeOutPriority); + } + else + { + if (foilTotal > 0) + { + foilTotal--; + if (foilTotal <= 0) + StartGliderFoilLosing(thisGlider); + } + } + } + else + { + StartGliderFadingOut(thisGlider); + PlayPrioritySound(kFadeOutSound, kFadeOutPriority); + } + } + break; + + case kRewardIt: + HandleRewards(thisGlider, who); + break; + + case kMoveItUp: + if (!thisGlider->heldRight && GliderInRect(thisGlider, &who->bounds)) + { + if (thisGlider->mode == kGliderBurning) + { + thisGlider->wasMode = 0; + StartGliderFadingOut(thisGlider); + PlayPrioritySound(kFadeOutSound, kFadeOutPriority); + } + else if ((twoPlayerGame) && (!onePlayerLeft)) + { + if (otherPlayerEscaped == kNoOneEscaped) + { + if ((thisGlider->mode != kGliderGoingUp) && + (thisGlider->mode != kGliderInLimbo)) + { + otherPlayerEscaped = kPlayerEscapingUpStairs; + RefreshScoreboard(kEscapedTitleMode); + StartGliderGoingUpStairs(thisGlider); + } + } + else if (otherPlayerEscaped == kPlayerEscapedUpStairs) + { + if ((thisGlider->mode != kGliderGoingUp) && + (thisGlider->mode != kGliderInLimbo)) + { + StartGliderGoingUpStairs(thisGlider); + } + } + } + else + StartGliderGoingUpStairs(thisGlider); + } + break; + + case kMoveItDown: + if (!thisGlider->heldLeft && GliderInRect(thisGlider, &who->bounds)) + { + if (thisGlider->mode == kGliderBurning) + { + thisGlider->wasMode = 0; + StartGliderFadingOut(thisGlider); + PlayPrioritySound(kFadeOutSound, kFadeOutPriority); + } + else if ((twoPlayerGame) && (!onePlayerLeft)) + { + if (otherPlayerEscaped == kNoOneEscaped) + { + if ((thisGlider->mode != kGliderGoingDown) && + (thisGlider->mode != kGliderInLimbo)) + { + otherPlayerEscaped = kPlayerEscapingDownStairs; + RefreshScoreboard(kEscapedTitleMode); + StartGliderGoingDownStairs(thisGlider); + } + } + else if (otherPlayerEscaped == kPlayerEscapedDownStairs) + { + if ((thisGlider->mode != kGliderGoingDown) && + (thisGlider->mode != kGliderInLimbo)) + { + StartGliderGoingDownStairs(thisGlider); + } + } + } + else + StartGliderGoingDownStairs(thisGlider); + } + break; + + case kSwitchIt: + HandleSwitches(who); + break; + + case kShredIt: + if ((thisGlider->mode != kGliderShredding) && + (GliderInRect(thisGlider, &who->bounds))) + { + if ((foilTotal > 0) || (thisGlider->mode == kGliderLosingFoil)) + { + PlayPrioritySound(kFoilHitSound, kFoilHitPriority); + if (foilTotal > 0) + { + foilTotal--; + if (foilTotal <= 0) + StartGliderFoilLosing(thisGlider); + } + } + else + FlagGliderShredding(thisGlider, &who->bounds); + } + break; + + case kStrumIt: + if (!who->stillOver) + { + PlayPrioritySound(kChordSound, kChordPriority); + who->stillOver = true; + } + break; + + case kTriggerIt: + case kLgTrigger: + ArmTrigger(who); + break; + + case kBurnIt: + if ((thisGlider->mode != kGliderBurning) && + (thisGlider->mode != kGliderFadingOut)) + { + if ((foilTotal > 0) || (thisGlider->mode == kGliderLosingFoil)) + { + thisGlider->vDesiredVel = kFloorVentLift; + if (foilTotal > 0) + { + PlayPrioritySound(kSizzleSound, kSizzlePriority); + foilTotal--; + if (foilTotal <= 0) + StartGliderFoilLosing(thisGlider); + } + } + else + FlagGliderBurning(thisGlider); + } + break; + + case kSlideIt: + thisGlider->sliding = true; + thisGlider->vVel = who->bounds.top - thisGlider->dest.bottom; + break; + + case kTransportIt: + if (thisGlider->mode == kGliderBurning) + { + thisGlider->wasMode = 0; + StartGliderFadingOut(thisGlider); + PlayPrioritySound(kFadeOutSound, kFadeOutPriority); + } + else if ((GliderInRect(thisGlider, &who->bounds)) && + (thisGlider->mode != kGliderTransporting) && + (thisGlider->mode != kGliderFadingOut)) + { + if ((twoPlayerGame) && (!onePlayerLeft)) + { + if (otherPlayerEscaped == kNoOneEscaped) + { + if (thisGlider->mode != kGliderInLimbo) + { + activeRectEscaped = index; + StartGliderTransporting(thisGlider, who); + } + } + else if (otherPlayerEscaped == kPlayerTransportedOut) + { + if ((thisGlider->mode != kGliderInLimbo) && + (activeRectEscaped == index)) + { + StartGliderTransporting(thisGlider, who); + } + } + } + else + StartGliderTransporting(thisGlider, who); + } + break; + + case kIgnoreLeftWall: + thisGlider->ignoreLeft = true; + break; + + case kIgnoreRightWall: + thisGlider->ignoreRight = true; + break; + + case kMailItLeft: // mailbox open to right + if (thisGlider->mode == kGliderBurning) + { + thisGlider->wasMode = 0; + StartGliderFadingOut(thisGlider); + PlayPrioritySound(kFadeOutSound, kFadeOutPriority); + } + else if ((GliderInRect(thisGlider, &who->bounds)) && + (thisGlider->mode != kGliderMailOutRight) && + (thisGlider->mode != kGliderMailInLeft) && + (thisGlider->mode != kGliderFadingOut) && + (((thisGlider->facing == kFaceRight) && (!thisGlider->tipped)) || + ((thisGlider->facing == kFaceLeft) && (thisGlider->tipped)))) + { + if ((twoPlayerGame) && (!onePlayerLeft)) // two gliders to handle + { + if (otherPlayerEscaped == kNoOneEscaped) // other glider in room + { + if (thisGlider->mode != kGliderInLimbo) // this glider is active + { + activeRectEscaped = index; + StartGliderMailingIn(thisGlider, &who->bounds, who); + thisGlider->mode = kGliderMailInLeft; + } + } + else if (otherPlayerEscaped == kPlayerMailedOut) + { // other glider left here + if ((thisGlider->mode != kGliderInLimbo) && + (activeRectEscaped == index)) + { // []_ <--G + StartGliderMailingIn(thisGlider, &who->bounds, who); + thisGlider->mode = kGliderMailInLeft; + } + } + } + else // only 1 glider in game + { + StartGliderMailingIn(thisGlider, &who->bounds, who); + thisGlider->mode = kGliderMailInLeft; + } + } + break; + + case kMailItRight: // mailbox open to left + if (thisGlider->mode == kGliderBurning) + { + thisGlider->wasMode = 0; + StartGliderFadingOut(thisGlider); + PlayPrioritySound(kFadeOutSound, kFadeOutPriority); + } + else if ((GliderInRect(thisGlider, &who->bounds)) && + (thisGlider->mode != kGliderMailOutLeft) && + (thisGlider->mode != kGliderMailInRight) && + (thisGlider->mode != kGliderFadingOut) && + (((thisGlider->facing == kFaceRight) && (thisGlider->tipped)) || + ((thisGlider->facing == kFaceLeft) && (!thisGlider->tipped)))) + { + if ((twoPlayerGame) && (!onePlayerLeft)) + { + if (otherPlayerEscaped == kNoOneEscaped) + { + if (thisGlider->mode != kGliderInLimbo) + { + activeRectEscaped = index; + StartGliderMailingIn(thisGlider, &who->bounds, who); + thisGlider->mode = kGliderMailInRight; + } + } + else if (otherPlayerEscaped == kPlayerMailedOut) + { + if ((thisGlider->mode != kGliderInLimbo) && + (activeRectEscaped == index)) + { + StartGliderMailingIn(thisGlider, &who->bounds, who); + thisGlider->mode = kGliderMailInRight; + } + } + } + else + { + StartGliderMailingIn(thisGlider, &who->bounds, who); + thisGlider->mode = kGliderMailInRight; + } + } + break; + + case kDuctItDown: + if (thisGlider->mode == kGliderBurning) + { + thisGlider->wasMode = 0; + StartGliderFadingOut(thisGlider); + PlayPrioritySound(kFadeOutSound, kFadeOutPriority); + } + else if ((GliderInRect(thisGlider, &who->bounds)) && + (thisGlider->mode != kGliderDuctingDown) && + (thisGlider->mode != kGliderFadingOut)) + { + if ((twoPlayerGame) && (!onePlayerLeft)) + { + if (otherPlayerEscaped == kNoOneEscaped) + { + if (thisGlider->mode != kGliderInLimbo) + { + activeRectEscaped = index; + StartGliderDuctingDown(thisGlider, &who->bounds, who); + } + } + else if (otherPlayerEscaped == kPlayerDuckedOut) + { + if ((thisGlider->mode != kGliderInLimbo) && + (activeRectEscaped == index)) + StartGliderDuctingDown(thisGlider, &who->bounds, who); + } + } + else + StartGliderDuctingDown(thisGlider, &who->bounds, who); + } + break; + + case kDuctItUp: + if (thisGlider->mode == kGliderBurning) + { + thisGlider->wasMode = 0; + StartGliderFadingOut(thisGlider); + PlayPrioritySound(kFadeOutSound, kFadeOutPriority); + } + else if ((GliderInRect(thisGlider, &who->bounds)) && + (thisGlider->mode != kGliderDuctingUp) && + (thisGlider->mode != kGliderDuctingIn) && + (thisGlider->mode != kGliderFadingOut) && + (!who->stillOver)) + { + if ((twoPlayerGame) && (!onePlayerLeft)) + { + if (otherPlayerEscaped == kNoOneEscaped) + { + if (thisGlider->mode != kGliderInLimbo) + { + activeRectEscaped = index; + StartGliderDuctingUp(thisGlider, &who->bounds, who); + } + } + else if (otherPlayerEscaped == kPlayerDuckedOut) + { + if ((thisGlider->mode != kGliderInLimbo) && + (activeRectEscaped == index)) + StartGliderDuctingUp(thisGlider, &who->bounds, who); + } + } + else + { + StartGliderDuctingUp(thisGlider, &who->bounds, who); + who->stillOver = true; + } + } + break; + + case kMicrowaveIt: + if (GliderInRect(thisGlider, &who->bounds)) + HandleMicrowaveAction(who, thisGlider); + break; + + case kIgnoreGround: + thisGlider->ignoreGround = true; + break; + + case kBounceIt: + BounceGlider(thisGlider, &who->bounds); + break; + + case kChimeIt: + if (!who->stillOver) + { + StrikeChime(); + who->stillOver = true; + } + break; + + case kWebIt: + if ((GliderInRect(thisGlider, &who->bounds)) && + (thisGlider->mode != kGliderBurning)) + WebGlider(thisGlider, &who->bounds); + else if ((thisGlider->mode == kGliderBurning) && + (GliderInRect(thisGlider, &who->bounds))) + { + thisGlider->wasMode = 0; + StartGliderFadingOut(thisGlider); + PlayPrioritySound(kFadeOutSound, kFadeOutPriority); + } + break; + + case kSoundIt: + if (!who->stillOver) + { + PlayPrioritySound(kTriggerSound, kTriggerPriority); + who->stillOver = true; + } + break; + } +} + +//-------------------------------------------------------------- CheckForHotSpots + +void CheckForHotSpots (void) +{ + short i; + Boolean hitObject; + + for (i = 0; i < nHotSpots; i++) + { + if (hotSpots[i].isOn) + { + if (twoPlayerGame) + { + hitObject = false; + if (SectGlider(&theGlider, &hotSpots[i].bounds, + hotSpots[i].doScrutinize)) + { + if (onePlayerLeft) + { + if (playerDead == kPlayer2) + { + HandleHotSpotCollision(&theGlider, &hotSpots[i], i); + hitObject = true; + } + } + else + { + HandleHotSpotCollision(&theGlider, &hotSpots[i], i); + hitObject = true; + } + } + + if (SectGlider(&theGlider2, &hotSpots[i].bounds, + hotSpots[i].doScrutinize)) + { + if (onePlayerLeft) + { + if (playerDead == kPlayer1) + { + HandleHotSpotCollision(&theGlider2, &hotSpots[i], i); + hitObject = true; + } + } + else + { + HandleHotSpotCollision(&theGlider2, &hotSpots[i], i); + hitObject = true; + } + } + if (!hitObject) + hotSpots[i].stillOver = false; + } + else + { + if (SectGlider(&theGlider, &hotSpots[i].bounds, + hotSpots[i].doScrutinize)) + HandleHotSpotCollision(&theGlider, &hotSpots[i], i); + else + hotSpots[i].stillOver = false; + } + } + } +} + +//-------------------------------------------------------------- HandleInteraction + +void HandleInteraction (void) +{ + CheckForHotSpots(); + if (twoPlayerGame) + { + if (onePlayerLeft) + { + if (playerDead == kPlayer1) + CheckGliderInRoom(&theGlider2); + else + CheckGliderInRoom(&theGlider); + } + else + { + CheckGliderInRoom(&theGlider); + CheckGliderInRoom(&theGlider2); + } + } + else + CheckGliderInRoom(&theGlider); +} + +//-------------------------------------------------------------- FlagStillOvers + +void FlagStillOvers (gliderPtr thisGlider) +{ + short i; + + for (i = 0; i < nHotSpots; i++) + { + if (hotSpots[i].isOn) + { + if (SectGlider(thisGlider, &hotSpots[i].bounds, + hotSpots[i].doScrutinize)) + hotSpots[i].stillOver = true; + else + hotSpots[i].stillOver = false; + } + else + hotSpots[i].stillOver = false; + } +} + +//-------------------------------------------------------------- WebGlider + +void WebGlider (gliderPtr thisGlider, Rect *webBounds) +{ + #define kKillWebbedGlider 150 + short hDist, vDist; + + if ((thisGlider->mode == kGliderBurning) && (GliderInRect(thisGlider, webBounds))) + { + thisGlider->wasMode = 0; + StartGliderFadingOut(thisGlider); + PlayPrioritySound(kFadeOutSound, kFadeOutPriority); + return; + } + + hDist = ((webBounds->right - thisGlider->dest.right) + + (webBounds->left - thisGlider->dest.left)) >> 3; + vDist = ((webBounds->bottom - thisGlider->dest.bottom) + + (webBounds->top - thisGlider->dest.top)) >> 3; + + if (thisGlider->hDesiredVel != 0) + { + if (evenFrame) + { + thisGlider->hVel = hDist; + thisGlider->vVel = vDist; + PlayPrioritySound(kWebTwangSound, kWebTwangPriority); + } + } + else + { + thisGlider->hDesiredVel = 0; + thisGlider->vDesiredVel = 0; + } + + thisGlider->wasMode++; + if (thisGlider->wasMode >= kKillWebbedGlider) + { + thisGlider->wasMode = 0; + StartGliderFadingOut(thisGlider); + PlayPrioritySound(kFadeOutSound, kFadeOutPriority); + } +} + diff --git a/GpApp/InterfaceInit.cpp b/GpApp/InterfaceInit.cpp new file mode 100644 index 0000000..0ca097c --- /dev/null +++ b/GpApp/InterfaceInit.cpp @@ -0,0 +1,220 @@ + +//============================================================================ +//---------------------------------------------------------------------------- +// InterfaceInit.c +//---------------------------------------------------------------------------- +//============================================================================ + + +#include "Externs.h" +#include "Environ.h" +#include "Map.h" +#include "RectUtils.h" +#include "Tools.h" + + +#define kHandCursorID 128 +#define kVertCursorID 129 +#define kHoriCursorID 130 +#define kDiagCursorID 131 + + +extern RgnHandle mirrorRgn; +extern WindowPtr mapWindow, toolsWindow, linkWindow; +extern WindowPtr menuWindow; +extern Rect shieldRect, boardSrcRect, localRoomsDest[]; +extern CursHandle handCursorH, beamCursorH, vertCursorH, horiCursorH; +extern CursHandle diagCursorH; +extern Cursor handCursor, beamCursor, vertCursor, horiCursor; +extern Cursor diagCursor; +extern MenuHandle appleMenu, gameMenu, optionsMenu, houseMenu; +extern Point shieldPt; +extern long incrementModeTime; +extern UInt32 doubleTime; +extern short fadeInSequence[], idleMode; +extern short toolSelected, lastBackground, wasFlower, numExtraHouses; +extern short houseResFork, lastHighScore, maxFiles, willMaxFiles; +extern Boolean quitting, playing, fadeGraysOut; +extern Boolean houseOpen, newRoomNow, evenFrame, menusUp, demoGoing; +extern Boolean twoPlayerGame, paused, hasMirror, splashDrawn; + + +//============================================================== Functions +//-------------------------------------------------------------- InitializeMenus + +// The menus are loaded from disk and the menu bar set up and drawn. + +void InitializeMenus (void) +{ + appleMenu = GetMenu(kAppleMenuID); + if (appleMenu == nil) + RedAlert(kErrFailedResourceLoad); + AppendResMenu(appleMenu, 'DRVR'); + InsertMenu(appleMenu, 0); + + gameMenu = GetMenu(kGameMenuID); + if (gameMenu == nil) + RedAlert(kErrFailedResourceLoad); + InsertMenu(gameMenu, 0); + + optionsMenu = GetMenu(kOptionsMenuID); + if (optionsMenu == nil) + RedAlert(kErrFailedResourceLoad); + InsertMenu(optionsMenu, 0); + + menusUp = true; + DrawMenuBar(); + + houseMenu = GetMenu(kHouseMenuID); + if (houseMenu == nil) + RedAlert(kErrFailedResourceLoad); + + UpdateMenus(false); +} + +//-------------------------------------------------------------- GetExtraCursors + +// Extra cursors (custom cursors) like the "hand" and various roomÉ +// editing cursors are loaded up. + +void GetExtraCursors (void) +{ + handCursorH = GetCursor(kHandCursorID); + if (handCursorH == nil) + RedAlert(kErrFailedResourceLoad); + HLock((Handle)handCursorH); + handCursor = **handCursorH; + + beamCursorH = GetCursor(iBeamCursor); + if (beamCursorH == nil) + RedAlert(kErrFailedResourceLoad); + HLock((Handle)beamCursorH); + beamCursor = **beamCursorH; + + vertCursorH = GetCursor(kVertCursorID); + if (vertCursorH == nil) + RedAlert(kErrFailedResourceLoad); + HLock((Handle)vertCursorH); + vertCursor = **vertCursorH; + + horiCursorH = GetCursor(kHoriCursorID); + if (horiCursorH == nil) + RedAlert(kErrFailedResourceLoad); + HLock((Handle)horiCursorH); + horiCursor = **horiCursorH; + + diagCursorH = GetCursor(kDiagCursorID); + if (diagCursorH == nil) + RedAlert(kErrFailedResourceLoad); + HLock((Handle)diagCursorH); + diagCursor = **diagCursorH; +} + +//-------------------------------------------------------------- VariableInit + +// All the simple interface variables are intialized here - Booleans,É +// shorts, a few Rects, etc. + +void VariableInit (void) +{ + short i; + + shieldPt.h = 0; + shieldPt.v = 0; + shieldRect = thisMac.screen; + + menusUp = false; + quitting = false; + houseOpen = false; + newRoomNow = false; + playing = false; + evenFrame = false; + if (thisMac.isDepth == 8) + fadeGraysOut = true; + else + fadeGraysOut = false; + twoPlayerGame = false; + paused = false; + hasMirror = false; + demoGoing = false; +// scrapIsARoom = true; + splashDrawn = false; + +#ifndef COMPILEDEMO +// SeeIfValidScrapAvailable(false); +#endif + + theGlider.which = kPlayer1; + theGlider2.leftKey = kControlKeyMap; + theGlider2.rightKey = kCommandKeyMap; + theGlider2.battKey = kOptionKeyMap; + theGlider2.bandKey = kShiftKeyMap; + theGlider2.which = kPlayer2; + + theMode = kSplashMode; + thisRoomNumber = 0; + previousRoom = -1; + toolSelected = kSelectTool; + houseResFork = -1; + lastBackground = kBaseBackgroundID; + wasFlower = RandomInt(kNumFlowers); + lastHighScore = -1; + idleMode = kIdleSplashMode; + incrementModeTime = TickCount() + kIdleSplashTicks; + willMaxFiles = maxFiles; + numExtraHouses = 0; + + fadeInSequence[0] = 4; // 4 + fadeInSequence[1] = 5; + fadeInSequence[2] = 6; + fadeInSequence[3] = 7; + fadeInSequence[4] = 5; // 5 + fadeInSequence[5] = 6; + fadeInSequence[6] = 7; + fadeInSequence[7] = 8; + fadeInSequence[8] = 6; // 6 + fadeInSequence[9] = 7; + fadeInSequence[10] = 8; + fadeInSequence[11] = 9; + fadeInSequence[12] = 7; // 7 + fadeInSequence[13] = 8; + fadeInSequence[14] = 9; + fadeInSequence[15] = 10; + + doubleTime = GetDblTime(); + + mirrorRgn = nil; + mainWindow = nil; + mapWindow = nil; + toolsWindow = nil; + linkWindow = nil; + coordWindow = nil; + toolSrcMap = nil; + nailSrcMap = nil; + menuWindow = nil; + + houseRect = thisMac.screen; + houseRect.bottom -= kScoreboardTall; + if (houseRect.right > kMaxViewWidth) + houseRect.right = kMaxViewWidth; + if (houseRect.bottom > kMaxViewHeight) + houseRect.bottom = kMaxViewHeight; + + playOriginH = (RectWide(&thisMac.screen) - kRoomWide) / 2; + playOriginV = (RectTall(&thisMac.screen) - kTileHigh) / 2; + + for (i = 0; i < 9; i++) + { + QSetRect(&localRoomsDest[i], 0, 0, kRoomWide, kTileHigh); + QOffsetRect(&localRoomsDest[i], playOriginH, playOriginV); + } + QOffsetRect(&localRoomsDest[kNorthRoom], 0, -kVertLocalOffset); + QOffsetRect(&localRoomsDest[kNorthEastRoom], kRoomWide, -kVertLocalOffset); + QOffsetRect(&localRoomsDest[kEastRoom], kRoomWide, 0); + QOffsetRect(&localRoomsDest[kSouthEastRoom], kRoomWide, kVertLocalOffset); + QOffsetRect(&localRoomsDest[kSouthRoom], 0, kVertLocalOffset); + QOffsetRect(&localRoomsDest[kSouthWestRoom], -kRoomWide, kVertLocalOffset); + QOffsetRect(&localRoomsDest[kWestRoom], -kRoomWide, 0); + QOffsetRect(&localRoomsDest[kNorthWestRoom], -kRoomWide, -kVertLocalOffset); +} + diff --git a/GpApp/Link.cpp b/GpApp/Link.cpp new file mode 100644 index 0000000..0bb9171 --- /dev/null +++ b/GpApp/Link.cpp @@ -0,0 +1,397 @@ + +//============================================================================ +//---------------------------------------------------------------------------- +// Link.c +//---------------------------------------------------------------------------- +//============================================================================ + +#include "PLControlDefinitions.h" +#include "PLPasStr.h" +#include "Externs.h" +#include "Environ.h" +#include "ObjectEdit.h" +#include "RectUtils.h" + + +#define kLinkControlID 130 +#define kUnlinkControlID 131 + + +void DoLink (void); +void DoUnlink (void); + + +Rect linkWindowRect; +ControlHandle linkControl, unlinkControl; +WindowPtr linkWindow; +short isLinkH, isLinkV, linkRoom, linkType; +Byte linkObject; +Boolean isLinkOpen, linkerIsSwitch; + + +//============================================================== Functions +//-------------------------------------------------------------- MergeFloorSuite + +short MergeFloorSuite (short floor, short suite) +{ + return ((suite * 100) + floor); +} + +//-------------------------------------------------------------- ExtractFloorSuite + +void ExtractFloorSuite (short combo, short *floor, short *suite) +{ + if ((*thisHouse)->version < 0x0200) // old floor/suite combo + { + *floor = (combo / 100) - kNumUndergroundFloors; + *suite = combo % 100; + } + else + { + *suite = combo / 100; + *floor = (combo % 100) - kNumUndergroundFloors; + } +} + +//-------------------------------------------------------------- UpdateLinkControl + +void UpdateLinkControl (void) +{ +#ifndef COMPILEDEMO + if (linkWindow == nil) + return; + + switch (linkType) + { + case kSwitchLinkOnly: + if (objActive == kNoObjectSelected) + HiliteControl(linkControl, kControlInactive); + else + switch (thisRoom->objects[objActive].what) + { + case kFloorVent: + case kCeilingVent: + case kFloorBlower: + case kCeilingBlower: + case kSewerGrate: + case kLeftFan: + case kRightFan: + case kInvisBlower: + case kGrecoVent: + case kSewerBlower: + case kLiftArea: + case kRedClock: + case kBlueClock: + case kYellowClock: + case kCuckoo: + case kPaper: + case kBattery: + case kBands: + case kFoil: + case kInvisBonus: + case kHelium: + case kDeluxeTrans: + case kCeilingLight: + case kLightBulb: + case kTableLamp: + case kHipLamp: + case kDecoLamp: + case kFlourescent: + case kTrackLight: + case kInvisLight: + case kShredder: + case kToaster: + case kMacPlus: + case kTV: + case kCoffee: + case kOutlet: + case kVCR: + case kStereo: + case kMicrowave: + case kBalloon: + case kCopterLf: + case kCopterRt: + case kDartLf: + case kDartRt: + case kBall: + case kDrip: + case kFish: + HiliteControl(linkControl, kControlActive); + break; + + default: + HiliteControl(linkControl, kControlInactive); + break; + } + break; + + case kTriggerLinkOnly: + if (objActive == kNoObjectSelected) + HiliteControl(linkControl, kControlInactive); + else + switch (thisRoom->objects[objActive].what) + { + case kGreaseRt: + case kGreaseLf: + case kToaster: + case kGuitar: + case kCoffee: + case kOutlet: + case kBalloon: + case kCopterLf: + case kCopterRt: + case kDartLf: + case kDartRt: + case kDrip: + case kFish: + HiliteControl(linkControl, kControlActive); + break; + + case kLightSwitch: + case kMachineSwitch: + case kThermostat: + case kPowerSwitch: + case kKnifeSwitch: + case kInvisSwitch: + if (linkRoom == thisRoomNumber) + HiliteControl(linkControl, kControlActive); + break; + + default: + HiliteControl(linkControl, kControlInactive); + break; + } + break; + + case kTransportLinkOnly: + if (objActive == kNoObjectSelected) + HiliteControl(linkControl, kControlInactive); + else + switch (thisRoom->objects[objActive].what) + { + case kMailboxLf: + case kMailboxRt: + case kCeilingTrans: + case kInvisTrans: + case kDeluxeTrans: + case kInvisLight: + case kOzma: + case kMirror: + case kFireplace: + case kWallWindow: + case kCalendar: + case kBulletin: + case kCloud: + HiliteControl(linkControl, kControlActive); + break; + + default: + HiliteControl(linkControl, kControlInactive); + break; + } + break; + } +#endif +} + +//-------------------------------------------------------------- UpdateLinkWindow + +void UpdateLinkWindow (void) +{ +#ifndef COMPILEDEMO + if (linkWindow == nil) + return; + + SetPortWindowPort(linkWindow); + DrawControls(linkWindow); + UpdateLinkControl(); +#endif +} + +//-------------------------------------------------------------- OpenLinkWindow + +void OpenLinkWindow (void) +{ +#ifndef COMPILEDEMO + Rect src, dest; + Point globalMouse; + + if (linkWindow == nil) + { + QSetRect(&linkWindowRect, 0, 0, 129, 30); + if (thisMac.hasColor) + linkWindow = NewCWindow(nil, &linkWindowRect, + PSTR("Link"), false, kWindoidWDEF, kPutInFront, true, 0L); + else + linkWindow = NewWindow(nil, &linkWindowRect, + PSTR("Link"), false, kWindoidWDEF, kPutInFront, true, 0L); + + MoveWindow(linkWindow, isLinkH, isLinkV, true); + globalMouse = MyGetGlobalMouse(); + QSetRect(&src, 0, 0, 1, 1); + QOffsetRect(&src, globalMouse.h, globalMouse.v); + GetWindowRect(linkWindow, &dest); + BringToFront(linkWindow); + ShowHide(linkWindow, true); +// FlagWindowFloating(linkWindow); TEMP - use flaoting windows + HiliteAllWindows(); + + linkControl = GetNewControl(kLinkControlID, linkWindow); + if (linkControl == nil) + RedAlert(kErrFailedResourceLoad); + + unlinkControl = GetNewControl(kUnlinkControlID, linkWindow); + if (unlinkControl == nil) + RedAlert(kErrFailedResourceLoad); + + linkRoom = -1; + linkObject = 255; + + isLinkOpen = true; + } +#endif +} + +//-------------------------------------------------------------- CloseLinkWindow + +void CloseLinkWindow (void) +{ +#ifndef COMPILEDEMO + if (linkWindow != nil) + DisposeWindow(linkWindow); + + linkWindow = nil; + isLinkOpen = false; +#endif +} + +//-------------------------------------------------------------- DoLink + +#ifndef COMPILEDEMO +void DoLink (void) +{ + short floor, suite; + char wasState; + + if (GetRoomFloorSuite(thisRoomNumber, &floor, &suite)) + { + floor += kNumUndergroundFloors; + if (thisRoomNumber == linkRoom) + { + if (linkerIsSwitch) + { + thisRoom->objects[linkObject].data.e.where = + MergeFloorSuite(floor, suite); + thisRoom->objects[linkObject].data.e.who = + objActive; + } + else + { + thisRoom->objects[linkObject].data.d.where = + MergeFloorSuite(floor, suite); + thisRoom->objects[linkObject].data.d.who = + objActive; + } + } + else + { + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + if (linkerIsSwitch) + { + (*thisHouse)->rooms[linkRoom].objects[linkObject].data.e.where = + MergeFloorSuite(floor, suite); + (*thisHouse)->rooms[linkRoom].objects[linkObject].data.e.who = + objActive; + } + else // linker is transport + { + (*thisHouse)->rooms[linkRoom].objects[linkObject].data.d.where = + MergeFloorSuite(floor, suite); + (*thisHouse)->rooms[linkRoom].objects[linkObject].data.d.who = + objActive; + } + HSetState((Handle)thisHouse, wasState); + } + fileDirty = true; + UpdateMenus(false); + CloseLinkWindow(); + } +} +#endif + +//-------------------------------------------------------------- DoUnlink + +#ifndef COMPILEDEMO +void DoUnlink (void) +{ + char wasState; + + if (thisRoomNumber == linkRoom) + { + if (linkerIsSwitch) + { + thisRoom->objects[linkObject].data.e.where = -1; + thisRoom->objects[linkObject].data.e.who = 255; + } + else + { + thisRoom->objects[linkObject].data.d.where = -1; + thisRoom->objects[linkObject].data.d.who = 255; + } + } + else + { + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + if (linkerIsSwitch) + { + (*thisHouse)->rooms[linkRoom].objects[linkObject].data.e.where = -1; + (*thisHouse)->rooms[linkRoom].objects[linkObject].data.e.who = 255; + } + else + { + (*thisHouse)->rooms[linkRoom].objects[linkObject].data.d.where = -1; + (*thisHouse)->rooms[linkRoom].objects[linkObject].data.d.who = 255; + } + HSetState((Handle)thisHouse, wasState); + } + fileDirty = true; + UpdateMenus(false); + CloseLinkWindow(); +} +#endif + +//-------------------------------------------------------------- HandleLinkClick + +void HandleLinkClick (Point wherePt) +{ +#ifndef COMPILEDEMO + ControlHandle theControl; + short part; + + if (linkWindow == nil) + return; + + SetPortWindowPort(linkWindow); + GlobalToLocal(&wherePt); + + part = FindControl(wherePt, linkWindow, &theControl); + if ((theControl != nil) && (part != 0)) + { + part = TrackControl(theControl, wherePt, nil); + if (part != 0) + { + if (theControl == linkControl) + DoLink(); + else if (theControl == unlinkControl) + DoUnlink(); + + if (thisRoomNumber == linkRoom) + CopyThisRoomToRoom(); + GenerateRetroLinks(); + } + } +#endif +} + diff --git a/GpApp/Main.cpp b/GpApp/Main.cpp new file mode 100644 index 0000000..2abae42 --- /dev/null +++ b/GpApp/Main.cpp @@ -0,0 +1,389 @@ +//============================================================================ +//---------------------------------------------------------------------------- +// Glider PRO 1.0.4 +// by john calhoun +//---------------------------------------------------------------------------- +//============================================================================ + + +#include "PLApplication.h" +#include "Externs.h" +#include "Environ.h" +#include "House.h" + + +#define kPrefsVersion 0x0034 + + +void ReadInPrefs (void); +void WriteOutPrefs (void); +int main(int argc, const char **argv); + + +short isVolume, wasVolume; +short isDepthPref, dataResFile, numSMWarnings; +Boolean quitting, doZooms, quickerTransitions, isUseSecondScreen; + + +extern Str31 highBanner; +extern Str15 leftName, rightName, batteryName, bandName; +extern Str15 highName; +//extern long encryptedNumber; +extern short maxFiles, numNeighbors, houseRefNum, willMaxFiles; +extern short isEditH, isEditV, isMapH, isMapV; +extern short isToolsH, isToolsV, isCoordH, isCoordV; +extern short isLinkH, isLinkV, toolMode, mapLeftRoom, mapTopRoom; +extern short mapRoomsWide, mapRoomsHigh, wasFloor, wasSuite; +extern Boolean isMusicOn, isSoundOn, isPlayMusicIdle, isHouseChecks; +extern Boolean houseOpen, isDoColorFade, isEscPauseKey; +extern Boolean autoRoomEdit, doAutoDemo, doBackground; +extern Boolean isMapOpen, isToolsOpen, isCoordOpen; +extern Boolean doPrettyMap, doBitchDialogs; +//extern Boolean didValidation; + +//============================================================== Functions +//-------------------------------------------------------------- ReadInPrefs + +// Called only once when game launches - reads in the preferences savedÉ +// from the last time Glider PRO was launched. If no prefs are found,É +// it assigns default settings. + +void ReadInPrefs (void) +{ + prefsInfo thePrefs; + + if (LoadPrefs(&thePrefs, kPrefsVersion)) + { +#ifdef COMPILEDEMO + PasStringCopy("\pDemo House", thisHouseName); +#else + PasStringCopy(thePrefs.wasDefaultName, thisHouseName); +#endif + PasStringCopy(thePrefs.wasLeftName, leftName); + PasStringCopy(thePrefs.wasRightName, rightName); + PasStringCopy(thePrefs.wasBattName, batteryName); + PasStringCopy(thePrefs.wasBandName, bandName); + PasStringCopy(thePrefs.wasHighName, highName); + PasStringCopy(thePrefs.wasHighBanner, highBanner); + theGlider.leftKey = thePrefs.wasLeftMap; + theGlider.rightKey = thePrefs.wasRightMap; + theGlider.battKey = thePrefs.wasBattMap; + theGlider.bandKey = thePrefs.wasBandMap; +#ifndef COMPILEDEMO +#ifndef COMPILENOCP + encryptedNumber = thePrefs.encrypted; +#endif // COMPILENOCP +#endif // COMPILEDEMO + isVolume = thePrefs.wasVolume; + isDepthPref = thePrefs.wasDepthPref; + isMusicOn = thePrefs.wasMusicOn; + doZooms = thePrefs.wasZooms; + quickerTransitions = thePrefs.wasQuickTrans; + isDoColorFade = thePrefs.wasDoColorFade; + isPlayMusicIdle = thePrefs.wasIdleMusic; + isPlayMusicGame = thePrefs.wasGameMusic; + isHouseChecks = thePrefs.wasHouseChecks; + maxFiles = thePrefs.wasMaxFiles; + if ((maxFiles < 12) || (maxFiles > 500)) + maxFiles = 12; + isEditH = thePrefs.wasEditH; + isEditV = thePrefs.wasEditV; + isMapH = thePrefs.wasMapH; + isMapV = thePrefs.wasMapV; + mapRoomsWide = thePrefs.wasMapWide; + mapRoomsHigh = thePrefs.wasMapHigh; + isToolsH = thePrefs.wasToolsH; + isToolsV = thePrefs.wasToolsV; + isLinkH = thePrefs.wasLinkH; + isLinkV = thePrefs.wasLinkV; + isCoordH = thePrefs.wasCoordH; + isCoordV = thePrefs.wasCoordV; + mapLeftRoom = thePrefs.isMapLeft; + mapTopRoom = thePrefs.isMapTop; + wasFloor = thePrefs.wasFloor; + wasSuite = thePrefs.wasSuite; + numSMWarnings = thePrefs.smWarnings; + autoRoomEdit = thePrefs.wasAutoEdit; + isMapOpen = thePrefs.wasMapOpen; + isToolsOpen = thePrefs.wasToolsOpen; + isCoordOpen = thePrefs.wasCoordOpen; + numNeighbors = thePrefs.wasNumNeighbors; + toolMode = thePrefs.wasToolGroup; + doAutoDemo = thePrefs.wasDoAutoDemo; + isEscPauseKey = thePrefs.wasEscPauseKey; + isUseSecondScreen = thePrefs.wasScreen2; + if (thisMac.numScreens < 2) + isUseSecondScreen = false; + doBackground = thePrefs.wasDoBackground; + doPrettyMap = thePrefs.wasPrettyMap; + doBitchDialogs = thePrefs.wasBitchDialogs; + } + else + { +#ifdef COMPILEDEMO + PasStringCopy("\pDemo House", thisHouseName); +#else + PasStringCopy(PSTR("Slumberland"), thisHouseName); +#endif + PasStringCopy(PSTR("lf arrow"), leftName); + PasStringCopy(PSTR("rt arrow"), rightName); + PasStringCopy(PSTR("dn arrow"), batteryName); + PasStringCopy(PSTR("up arrow"), bandName); + PasStringCopy(PSTR("Your Name"), highName); + PasStringCopy(PSTR("Your Message Here"), highBanner); + theGlider.leftKey = kLeftArrowKeyMap; + theGlider.rightKey = kRightArrowKeyMap; + theGlider.battKey = kDownArrowKeyMap; + theGlider.bandKey = kUpArrowKeyMap; + + UnivGetSoundVolume(&isVolume, thisMac.hasSM3); + if (isVolume < 1) + isVolume = 1; + else if (isVolume > 3) + isVolume = 3; + + isDepthPref = kSwitchIfNeeded; + isSoundOn = true; + isMusicOn = true; + isPlayMusicIdle = true; + isPlayMusicGame = true; + isHouseChecks = true; + doZooms = true; + quickerTransitions = false; + numNeighbors = 9; + isDoColorFade = true; + maxFiles = 48; + willMaxFiles = 48; + isEditH = 3; + isEditV = 41; + isMapH = 3; +// isMapV = qd.screenBits.bounds.bottom - 100; + isMapV = 100; + mapRoomsWide = 15; + mapRoomsHigh = 4; +// isToolsH = qd.screenBits.bounds.right - 120; + isToolsH = 100; + isToolsV = 35; + isLinkH = 50; + isLinkV = 80; +// isCoordH = qd.screenBits.bounds.right - 55; + isCoordH = 50; + isCoordV = 204; + mapLeftRoom = 60; + mapTopRoom = 50; + wasFloor = 0; + wasSuite = 0; + numSMWarnings = 0; + autoRoomEdit = true; + isMapOpen = true; + isToolsOpen = true; + isCoordOpen = false; + toolMode = kBlowerMode; + doAutoDemo = true; + isEscPauseKey = false; + isUseSecondScreen = false; + doBackground = false; + doPrettyMap = false; + doBitchDialogs = true; + } + + if ((numNeighbors > 1) && (thisMac.screen.right <= 512)) + numNeighbors = 1; + + UnivGetSoundVolume(&wasVolume, thisMac.hasSM3); + UnivSetSoundVolume(isVolume, thisMac.hasSM3); + + if (isVolume == 0) + isSoundOn = false; + else + isSoundOn = true; +} + +//-------------------------------------------------------------- WriteOutPrefs + +// Called just before Glider PRO quits. This function writes outÉ +// the user preferences to disk. + +void WriteOutPrefs (void) +{ + prefsInfo thePrefs; + + UnivGetSoundVolume(&isVolume, thisMac.hasSM3); + +#ifdef COMPILEDEMO + PasStringCopy("\pDemo House", thePrefs.wasDefaultName); +#else + PasStringCopy(thisHouseName, thePrefs.wasDefaultName); +#endif + PasStringCopy(leftName, thePrefs.wasLeftName); + PasStringCopy(rightName, thePrefs.wasRightName); + PasStringCopy(batteryName, thePrefs.wasBattName); + PasStringCopy(bandName, thePrefs.wasBandName); + PasStringCopy(highName, thePrefs.wasHighName); + PasStringCopy(highBanner, thePrefs.wasHighBanner); + thePrefs.wasLeftMap = theGlider.leftKey; + thePrefs.wasRightMap = theGlider.rightKey; + thePrefs.wasBattMap = theGlider.battKey; + thePrefs.wasBandMap = theGlider.bandKey; +#ifndef COMPILEDEMO +#ifndef COMPILENOCP + thePrefs.encrypted = encryptedNumber; + thePrefs.fakeLong = Random(); +#endif // COMPILENOCP +#endif // COMPILEDEMO + thePrefs.wasVolume = isVolume; + thePrefs.wasDepthPref = isDepthPref; + thePrefs.wasMusicOn = isMusicOn; + thePrefs.wasZooms = doZooms; + thePrefs.wasQuickTrans = quickerTransitions; + thePrefs.wasDoColorFade = isDoColorFade; + thePrefs.wasIdleMusic = isPlayMusicIdle; + thePrefs.wasGameMusic = isPlayMusicGame; + thePrefs.wasHouseChecks = isHouseChecks; + thePrefs.wasMaxFiles = willMaxFiles; + thePrefs.wasEditH = isEditH; + thePrefs.wasEditV = isEditV; + thePrefs.wasMapH = isMapH; + thePrefs.wasMapV = isMapV; + thePrefs.wasMapWide = mapRoomsWide; + thePrefs.wasMapHigh = mapRoomsHigh; + thePrefs.wasToolsH = isToolsH; + thePrefs.wasToolsV = isToolsV; + thePrefs.isMapLeft = mapLeftRoom; + thePrefs.isMapTop = mapTopRoom; + thePrefs.wasFloor = wasFloor; + thePrefs.wasSuite = wasSuite; + thePrefs.wasLinkH = isLinkH; + thePrefs.wasLinkV = isLinkV; + thePrefs.wasCoordH = isCoordH; + thePrefs.wasCoordV = isCoordV; + thePrefs.smWarnings = numSMWarnings; + thePrefs.wasAutoEdit = autoRoomEdit; + thePrefs.wasMapOpen = isMapOpen; + thePrefs.wasToolsOpen = isToolsOpen; + thePrefs.wasCoordOpen = isCoordOpen; + thePrefs.wasNumNeighbors = numNeighbors; + thePrefs.wasToolGroup = toolMode; + thePrefs.wasDoAutoDemo = doAutoDemo; + thePrefs.wasEscPauseKey = isEscPauseKey; + thePrefs.wasScreen2 = isUseSecondScreen; + thePrefs.wasDoBackground = doBackground; + thePrefs.wasPrettyMap = doPrettyMap; + thePrefs.wasBitchDialogs = doBitchDialogs; + + if (!SavePrefs(&thePrefs, kPrefsVersion)) + SysBeep(1); + + UnivSetSoundVolume(wasVolume, thisMac.hasSM3); +} + +//-------------------------------------------------------------- main +// Here is main(). The first function called when Glider PRO comes up. + +int gpAppMain() +{ +// long wasSeed; + long theErr; + OSErr fileErr; + Boolean whoCares, copyGood; + + PL_Init(); + + ToolBoxInit(); + CheckOurEnvirons(); + if (!thisMac.hasColor) + RedAlert(kErrNeedColorQD); + if (!thisMac.hasSystem7) + RedAlert(kErrNeedSystem7); + if (thisMac.numScreens == 0) + RedAlert(kErrNeed16Or256Colors); +// dataResFile = OpenResFile("\pMermaid"); + SetUpAppleEvents(); + LoadCursors(); + ReadInPrefs(); + +#if defined COMPILEDEMO + copyGood = true; +#elif defined COMPILENOCP +// didValidation = false; + copyGood = true; +#else + didValidation = false; + copyGood = ValidInstallation(true); + if (!copyGood) + encryptedNumber = 0L; + else if (didValidation) + WriteOutPrefs(); SpinCursor(3); +#endif + +// if ((thisMac.numScreens > 1) && (isUseSecondScreen)) +// ReflectSecondMonitorEnvirons(false, true, true); + HandleDepthSwitching(); + VariableInit(); SpinCursor(2); + CheckMemorySize(); + GetExtraCursors(); SpinCursor(2); + InitMarquee(); + CreatePointers(); SpinCursor(2); + InitSrcRects(); + CreateOffscreens(); SpinCursor(2); + OpenMainWindow(); + + if (thisMac.hasQT) + { + theErr = EnterMovies(); + if (theErr != noErr) + thisMac.hasQT = false; + } + + InitSound(); SpinCursor(2); + InitMusic(); SpinCursor(2); + BuildHouseList(); + if (OpenHouse()) + whoCares = ReadHouse(); + + PlayPrioritySound(kBirdSound, kBirdPriority); + DelayTicks(6); + InitializeMenus(); InitCursor(); + +#if BUILD_ARCADE_VERSION +// HideMenuBarOld(); +#endif + +// if ((isDoColorFade) && (thisMac.isDepth == 8)) +// { +// wasSeed = ExtractCTSeed((CGrafPtr)mainWindow); +// WashColorIn(); +// ForceCTSeed((CGrafPtr)mainWindow, wasSeed); +// } +// if ((!thisMac.hasSM3) && (numSMWarnings < 3)) +// { +// numSMWarnings++; +// BitchAboutSM3(); +// } + + while (!quitting) // this is the main loop + HandleEvent(); +/* +#if BUILD_ARCADE_VERSION + ShowMenuBarOld(); +#endif +*/ + KillMusic(); + KillSound(); + if (houseOpen) + { + if (!CloseHouse()) + { + CloseHouseResFork(); + fileErr = FSClose(houseRefNum); + houseOpen = false; + } + } + WriteOutPrefs(); + RestoreColorDepth(); + PL_DEAD(FlushEvents(everyEvent, 0)); +// theErr = LoadScrap(); + + return 0; +} + diff --git a/GpApp/MainWindow.cpp b/GpApp/MainWindow.cpp new file mode 100644 index 0000000..88f2b46 --- /dev/null +++ b/GpApp/MainWindow.cpp @@ -0,0 +1,602 @@ +//============================================================================ +//---------------------------------------------------------------------------- +// MainWindow.c +//---------------------------------------------------------------------------- +//============================================================================ + + +#include "PLNumberFormatting.h" +#include "PLToolUtils.h" +#include "PLPasStr.h" +#include "Externs.h" +#include "Environ.h" +#include "House.h" +#include "RectUtils.h" + + +#define kMainWindowID 128 +#define kEditWindowID 129 +#define kMenuWindowID 130 + + +void DrawOnSplash (void); +void SetPaletteToGrays (void); +void HardDrawMainWindow (void); +void RestoreColorsSlam (void); + + +CTabHandle theCTab; +PixMapHandle thePMap; +ColorSpec * wasColors; +ColorSpec * newColors; +CursHandle handCursorH, beamCursorH, vertCursorH, horiCursorH; +CursHandle diagCursorH; +Cursor handCursor, beamCursor, vertCursor, horiCursor; +Cursor diagCursor; +Rect workSrcRect; +GWorldPtr workSrcMap; +Rect mainWindowRect; +WindowPtr mainWindow, menuWindow; +short isEditH, isEditV; +short playOriginH, playOriginV; +short splashOriginH, splashOriginV; +short theMode; +Boolean fadeGraysOut, isDoColorFade, splashDrawn; + +extern GDHandle thisGDevice; +extern short toolSelected; +extern Boolean noRoomAtAll, isUseSecondScreen; +extern Boolean quickerTransitions, houseIsReadOnly; + + +//============================================================== Functions +//-------------------------------------------------------------- DrawOnSplash + +// Draws additional text on top of splash screen. + +void DrawOnSplash (void) +{ + Str255 houseLoadedStr; + + PasStringCopy(PSTR("House: "), houseLoadedStr); + PasStringConcat(houseLoadedStr, thisHouseName); + if ((thisMac.hasQT) && (hasMovie)) + PasStringConcat(houseLoadedStr, PSTR(" (QT)")); + TextSize(9); + TextFace(1); + TextFont(applFont); + MoveTo(splashOriginH + 436, splashOriginV + 314); + if (thisMac.isDepth == 4) + { + ForeColor(whiteColor); + DrawString(houseLoadedStr); + ForeColor(blackColor); + } + else + { + if (houseIsReadOnly) + ColorText(houseLoadedStr, 5L); + else + ColorText(houseLoadedStr, 28L); + } + + #if defined(powerc) || defined(__powerc) + TextSize(12); + TextFace(0); + TextFont(systemFont); + ForeColor(blackColor); + MoveTo(splashOriginH + 5, splashOriginV + 457); + DrawString("\pPowerPC Native!"); + ForeColor(whiteColor); + MoveTo(splashOriginH + 4, splashOriginV + 456); + DrawString("\pPowerPC Native!"); + ForeColor(blackColor); + #endif +} + +//-------------------------------------------------------------- RedrawSplashScreen + +void RedrawSplashScreen (void) +{ + Rect tempRect; + + SetPort((GrafPtr)workSrcMap); + PaintRect(&workSrcRect); + QSetRect(&tempRect, 0, 0, 640, 460); + QOffsetRect(&tempRect, splashOriginH, splashOriginV); + LoadScaledGraphic(kSplash8BitPICT, &tempRect); + DrawOnSplash(); + SetPortWindowPort(mainWindow); +// if (quickerTransitions) +// DissBitsChunky(&workSrcRect); +// else +// DissBits(&workSrcRect); + CopyRectMainToWork(&workSrcRect); +} + +//-------------------------------------------------------------- UpdateMainWindow + +// Redraws the main window (depends on mode were in - splash, editing, playing). + +void UpdateMainWindow (void) +{ + Rect tempRect; + RgnHandle dummyRgn; + + dummyRgn = NewRgn(); + SetPortWindowPort(mainWindow); + + if (theMode == kEditMode) + { + PauseMarquee(); + CopyBits((BitMap *)*GetGWorldPixMap(workSrcMap), + GetPortBitMapForCopyBits(GetWindowPort(mainWindow)), + &mainWindowRect, &mainWindowRect, srcCopy, + GetPortVisibleRegion(GetWindowPort(mainWindow), dummyRgn)); + ResumeMarquee(); + } + else if ((theMode == kSplashMode) || (theMode == kPlayMode)) + { + SetPort((GrafPtr)workSrcMap); + PaintRect(&workSrcRect); + QSetRect(&tempRect, 0, 0, 640, 460); + QOffsetRect(&tempRect, splashOriginH, splashOriginV); + LoadScaledGraphic(kSplash8BitPICT, &tempRect); + CopyBits((BitMap *)*GetGWorldPixMap(workSrcMap), + GetPortBitMapForCopyBits(GetWindowPort(mainWindow)), + &workSrcRect, &mainWindowRect, srcCopy, + GetPortVisibleRegion(GetWindowPort(mainWindow), dummyRgn)); + SetPortWindowPort(mainWindow); + + DrawOnSplash(); + } + + DisposeRgn(dummyRgn); + splashDrawn = true; +} + +//-------------------------------------------------------------- UpdateMenuBarWindow +// Ugly kludge to cover over the menu bar when playing game on 2nd monitor. + +void UpdateMenuBarWindow (void) +{ + Rect bounds; + + if (menuWindow == nil) + return; + + GetLocalWindowRect(menuWindow, &bounds); + PaintRect(&bounds); +} + +//-------------------------------------------------------------- OpenMainWindow +// Opens up the main window (how it does this depends on mode were in). + +void OpenMainWindow (void) +{ +// long wasSeed; + short whichRoom; + + if (mainWindow != nil) + { + YellowAlert(kYellowUnaccounted, 6); + return; + } + + if (theMode == kEditMode) + { + if (menuWindow != nil) + DisposeWindow(menuWindow); + menuWindow = nil; + + QSetRect(&mainWindowRect, 0, 0, 512, 322); + mainWindow = GetNewCWindow(kEditWindowID, nil, kPutInFront); + SizeWindow(mainWindow, mainWindowRect.right, + mainWindowRect.bottom, false); + + if (OptionKeyDown()) + { + isEditH = 3; + isEditV = 41; + } + MoveWindow(mainWindow, isEditH, isEditV, true); + ShowWindow(mainWindow); + SetPortWindowPort(mainWindow); + ClipRect(&mainWindowRect); + ForeColor(blackColor); + BackColor(whiteColor); + + whichRoom = GetFirstRoomNumber(); + CopyRoomToThisRoom(whichRoom); + ReflectCurrentRoom(false); + } + else + { + if (menuWindow == nil) + { + menuWindow = GetNewCWindow(kMenuWindowID, nil, kPutInFront); + SizeWindow(menuWindow, RectWide(&thisMac.screen), 20, false); + MoveWindow(menuWindow, thisMac.screen.left, + thisMac.screen.top, true); + ShowWindow(menuWindow); + } + mainWindowRect = thisMac.screen; + ZeroRectCorner(&mainWindowRect); + mainWindowRect.bottom -= 20; // thisMac.menuHigh + mainWindow = GetNewCWindow(kMainWindowID, nil, kPutInFront); + SizeWindow(mainWindow, mainWindowRect.right - mainWindowRect.left, + mainWindowRect.bottom - mainWindowRect.top, false); + MoveWindow(mainWindow, thisMac.screen.left, + thisMac.screen.top + 20, true); // thisMac.menuHigh + ShowWindow(mainWindow); + SetPortWindowPort(mainWindow); + ClipRect(&mainWindowRect); +// CopyRgn(mainWindow->clipRgn, mainWindow->visRgn); + ForeColor(blackColor); + BackColor(whiteColor); + PaintRect(&mainWindowRect); + + splashOriginH = ((thisMac.screen.right - thisMac.screen.left) - 640) / 2; + if (splashOriginH < 0) + splashOriginH = 0; + splashOriginV = ((thisMac.screen.bottom - thisMac.screen.top) - 480) / 2; + if (splashOriginV < 0) + splashOriginV = 0; + + SetPort((GrafPtr)workSrcMap); + PaintRect(&workSrcRect); + LoadGraphic(kSplash8BitPICT); + +// if ((fadeGraysOut) && (isDoColorFade)) +// { +// wasSeed = ExtractCTSeed((CGrafPtr)mainWindow); +// SetPortWindowPort(mainWindow); +// SetPaletteToGrays(); +// HardDrawMainWindow(); +// fadeGraysOut = false; +// ForceCTSeed((CGrafPtr)mainWindow, wasSeed); +// } + + SetPortWindowPort(mainWindow); + } +} + +//-------------------------------------------------------------- CloseMainWindow + +// Closes the main window. + +void CloseMainWindow (void) +{ + if (mainWindow != nil) + DisposeWindow(mainWindow); + mainWindow = nil; +} + +//-------------------------------------------------------------- ZoomBetweenWindows +// Zooms from one window size to another. Just for effect. + +/* +#ifndef COMPILEDEMO +void ZoomBetweenWindows (void) +{ + Rect aRect; + short h, v; + + if (theMode == kEditMode) + { + QSetRect(&aRect, 0, 0, 512, 342); + QOffsetRect(&aRect, isEditH, isEditV); + ZoomRectToRect(&(thisMac.screen), &aRect); + } + else + { + aRect = mainWindow->portRect; + GetWindowLeftTop(mainWindow, &h, &v); + QOffsetRect(&aRect, h, v); + ZoomRectToRect(&aRect, &(thisMac.screen)); + } +} +#endif +*/ + +//-------------------------------------------------------------- UpdateEditWindowTitle +// Handles changing the title across the top of the main window. OnlyÉ +// relevant when editing a house (room title displayed in window title). + +#ifndef COMPILEDEMO +void UpdateEditWindowTitle (void) +{ + Str255 newTitle, tempStr; + + if (mainWindow == nil) + return; + + PasStringCopy(thisHouseName, newTitle); + PasStringConcat(newTitle, PSTR(" - ")); + if (noRoomAtAll) + PasStringConcat(newTitle, PSTR("No rooms")); + else if (houseUnlocked) + { + PasStringConcat(newTitle, thisRoom->name); + PasStringConcat(newTitle, PSTR(" (")); + NumToString((long)thisRoom->floor, tempStr); + PasStringConcat(newTitle, tempStr); + PasStringConcat(newTitle, PSTR(", ")); + NumToString((long)thisRoom->suite, tempStr); + PasStringConcat(newTitle, tempStr); + PasStringConcat(newTitle, PSTR(")")); + } + else + PasStringConcat(newTitle, PSTR("House Locked")); + SetWTitle(mainWindow, newTitle); +} +#endif + +//-------------------------------------------------------------- HandleMainClick + +// Handle a mouse click in the main window (relevant only when editing). + +void HandleMainClick (Point wherePt, Boolean isDoubleClick) +{ + KeyMap theseKeys; + + if ((theMode != kEditMode) || (mainWindow == nil) || + (!houseUnlocked)) + return; + + SetPortWindowPort(mainWindow); + GlobalToLocal(&wherePt); + + if (toolSelected == kSelectTool) + DoSelectionClick(wherePt, isDoubleClick); + else + DoNewObjectClick(wherePt); + + GetKeys(theseKeys); + if (!BitTst(&theseKeys, kShiftKeyMap)) + { + EraseSelectedTool(); + SelectTool(kSelectTool); + } +} + +//-------------------------------------------------------------- ShowMenuBarOld +// Displays the menu bar (after having been hidden). +/* +void ShowMenuBarOld (void) +{ + Rect theRect; + GrafPtr wasPort, tempPort; + RgnHandle worldRgn, menuBarRgn; + + if (LMGetMBarHeight() == 0) + { + GetPort(&wasPort); + tempPort = (GrafPtr)NewPtrClear(sizeof(GrafPort)); + OpenPort(tempPort); + SetPort((GrafPtr)tempPort); + + LMSetMBarHeight(thisMac.menuHigh); + + theRect = (**GetGrayRgn()).rgnBBox; + UnionRect(&theRect, &qd.screenBits.bounds, &theRect); + worldRgn = NewRgn(); + OpenRgn(); + FrameRoundRect(&theRect, 16, 16); + CloseRgn(worldRgn); + + theRect = qd.screenBits.bounds; + theRect.bottom = theRect.top + thisMac.menuHigh; + menuBarRgn = NewRgn(); + RectRgn(menuBarRgn, &theRect); + + SectRgn(worldRgn, menuBarRgn, menuBarRgn); // /------------------\ + DisposeRgn(worldRgn); // |__________________| + + UnionRgn(tempPort->visRgn, menuBarRgn, tempPort->visRgn); + DiffRgn(tempPort->visRgn, menuBarRgn, tempPort->visRgn); + DisposeRgn(menuBarRgn); + + ClosePort(tempPort); + SetPort((GrafPtr)wasPort); + + DrawMenuBar(); + } +} +*/ +//-------------------------------------------------------------- HideMenuBarOld +// Hides the menu bar - completely erasing it from the screen. +/* +void HideMenuBarOld (void) +{ + Rect theRect; + RgnHandle worldRgn, menuBarRgn; + GrafPtr wasPort, tempPort; + + if (LMGetMBarHeight() != 0) + { + GetPort(&wasPort); + tempPort = (GrafPtr)NewPtrClear(sizeof(GrafPort)); + OpenPort(tempPort); + SetPort((GrafPtr)tempPort); + + LMSetMBarHeight(0); + + theRect = (**GetGrayRgn()).rgnBBox; + UnionRect(&theRect, &qd.screenBits.bounds, &theRect); + worldRgn = NewRgn(); + OpenRgn(); + FrameRoundRect(&theRect, 16, 16); + CloseRgn(worldRgn); + + theRect = qd.screenBits.bounds; + theRect.bottom = theRect.top + thisMac.menuHigh; + menuBarRgn = NewRgn(); + RectRgn(menuBarRgn, &theRect); + + SectRgn(worldRgn, menuBarRgn, menuBarRgn); // /------------------\ + DisposeRgn(worldRgn); // |__________________| + + UnionRgn(tempPort->visRgn, menuBarRgn, tempPort->visRgn); + DisposeRgn(menuBarRgn); + + PaintRect(&theRect); + + ClosePort(tempPort); + SetPort((GrafPtr)wasPort); + } +} +*/ +//-------------------------------------------------------------- SetPaletteToGrays + +// Sets up a gray palette corresponding in luminance to the standard colorÉ +// palette. This is to facilitate the gray->color fade when the game comes up. +/* +void SetPaletteToGrays (void) +{ + GDHandle theDevice; + long longGray; + short i; + char wasState; + + wasState = HGetState((Handle)thisGDevice); + HLock((Handle)thisGDevice); + thePMap = (*thisGDevice)->gdPMap; + HSetState((Handle)thisGDevice, wasState); + + theCTab = (*thePMap)->pmTable; + wasColors = nil; + wasColors = (ColorSpec*)NewPtr(sizeof(ColorSpec) * 256); + if (wasColors == nil) + RedAlert(kErrNoMemory); + + newColors = nil; + newColors = (ColorSpec*)NewPtr(sizeof(ColorSpec) * 256); + if (newColors == nil) + RedAlert(kErrNoMemory); + + for (i = 0; i < 256; i++) + { + wasColors[i] = (*theCTab)->ctTable[i]; + newColors[i] = (*theCTab)->ctTable[i]; + + if (i != 5) + { + longGray = ((long)newColors[i].rgb.red * 3L) / 10L + + ((long)newColors[i].rgb.green * 6L) / 10L + + ((long)newColors[i].rgb.blue * 1L) / 10L; + + newColors[i].rgb.red = (unsigned short)longGray; + newColors[i].rgb.green = (unsigned short)longGray; + newColors[i].rgb.blue = (unsigned short)longGray; + } + } + + theDevice = GetGDevice(); + SetGDevice(thisGDevice); + SetEntries(0, 255, newColors); + SetGDevice(theDevice); +} +*/ +//-------------------------------------------------------------- HardDrawMainWindow +// Ignores the ToolBox - this function draws direct to screen in order toÉ +// circumvent the Toolbox's attempt to color-match to the current palette. +/* +void HardDrawMainWindow (void) +{ + PixMapHandle pixMapH; + Point offsetPt; + long srcRowBytes, destRowBytes; + long src; + long dest; + short i, w; + SInt8 mode; + char wasState; + + wasState = HGetState((Handle)thisGDevice); + HLock((Handle)thisGDevice); + pixMapH = (**thisGDevice).gdPMap; + HSetState((Handle)thisGDevice, wasState); + + srcRowBytes = (long)((*(workSrcMap->portPixMap))->rowBytes & 0x7FFF); + destRowBytes = (**pixMapH).rowBytes & 0x7FFF; + src = (long)((*(workSrcMap->portPixMap))->baseAddr); + dest = (long)((**pixMapH).baseAddr) + splashOriginH + + ((splashOriginV + thisMac.menuHigh) * destRowBytes); + + offsetPt.h = 0; + offsetPt.v = 0; + ShieldCursor(&mainWindowRect, offsetPt); + mode = true32b; + SwapMMUMode(&mode); + for (i = 0; i < 460; i++) + { + for (w = 0; w < 160; w++) + { + *(long *)dest = *(long *)src; + dest += 4L; + src += 4L; + } + src -= 640; + dest -= 640; + src += srcRowBytes; + dest += destRowBytes; + } + SwapMMUMode(&mode); + ShowCursor(); +} +*/ +//-------------------------------------------------------------- WashColorIn +// Slowly walks the palette from its gray luminance state to the full colorÉ +// palette. In this way, color appears to slowly wash in. +/* +void WashColorIn (void) +{ + #define kGray2ColorSteps 180 + GDHandle theDevice; + long longDelta; + short i, c; + + theDevice = GetGDevice(); + SetGDevice(thisGDevice); + + for (i = 0; i < kGray2ColorSteps; i++) + { + for (c = 0; c < 256; c++) + { + if (c != 5) + { + longDelta = (((long)wasColors[c].rgb.red - + (long)newColors[c].rgb.red) / + (long)(kGray2ColorSteps - i)) + (long)newColors[c].rgb.red; + newColors[c].rgb.red = (unsigned short)longDelta; + + longDelta = (((long)wasColors[c].rgb.green - + (long)newColors[c].rgb.green) / + (long)(kGray2ColorSteps - i)) + + (long)newColors[c].rgb.green; + newColors[c].rgb.green = (unsigned short)longDelta; + + longDelta = (((long)wasColors[c].rgb.blue - + (long)newColors[c].rgb.blue) / + (long)(kGray2ColorSteps - i)) + + (long)newColors[c].rgb.blue; + newColors[c].rgb.blue = (unsigned short)longDelta; + } + } + SetEntries(0, 255, newColors); + if (Button()) + break; + } + + SetEntries(0, 255, wasColors); + SetGDevice(theDevice); + + RestoreColorsSlam(); + + if (wasColors != nil) + DisposePtr((Ptr)wasColors); + if (newColors != nil) + DisposePtr((Ptr)newColors); +} +*/ diff --git a/GpApp/MainWindow.h b/GpApp/MainWindow.h new file mode 100644 index 0000000..46bfe37 --- /dev/null +++ b/GpApp/MainWindow.h @@ -0,0 +1,11 @@ +//============================================================================ +//---------------------------------------------------------------------------- +// MainWindow.h +//---------------------------------------------------------------------------- +//============================================================================ + + +#include "PLQDOffscreen.h" + + +extern GWorldPtr workSrcMap; diff --git a/GpApp/Map.cpp b/GpApp/Map.cpp new file mode 100644 index 0000000..bace10e --- /dev/null +++ b/GpApp/Map.cpp @@ -0,0 +1,797 @@ +//============================================================================ +//---------------------------------------------------------------------------- +// Map.c +//---------------------------------------------------------------------------- +//============================================================================ + + +#include "PLControlDefinitions.h" +#include "PLResources.h" +#include "PLPasStr.h" +#include "Externs.h" +#include "Environ.h" +#include "House.h" +#include "RectUtils.h" +#include "Utilities.h" + + +#define kMapRoomsHigh 9 // was 7 +#define kMapRoomsWide 9 // was 7 +#define kMapScrollBarWidth 16 +#define kHScrollRef 5L +#define kVScrollRef 27L +#define kMapGroundValue 56 +#define kNewRoomAlert 1004 +#define kYesDoNewRoom 1 +#define kThumbnailPictID 1010 + + +void LoadGraphicPlus (short, Rect *); +void RedrawMapContents (void); +void LiveHScrollAction (ControlHandle, short); +void LiveVScrollAction (ControlHandle, short); +Boolean QueryNewRoom (void); +void CreateNailOffscreen (void); +void KillNailOffscreen (void); + +Rect nailSrcRect, activeRoomRect, wasActiveRoomRect; +Rect mapHScrollRect, mapVScrollRect, mapCenterRect; +Rect mapWindowRect; +GWorldPtr nailSrcMap; +WindowPtr mapWindow; +ControlHandle mapHScroll, mapVScroll; +short isMapH, isMapV, mapRoomsHigh, mapRoomsWide; +short mapLeftRoom, mapTopRoom; +Boolean isMapOpen, doPrettyMap; + +extern Boolean doBitchDialogs; + + +//============================================================== Functions +//-------------------------------------------------------------- ThisRoomVisibleOnMap + +#ifndef COMPILEDEMO +Boolean ThisRoomVisibleOnMap (void) +{ + short h, v; + + h = thisRoom->suite; + v = kMapGroundValue - thisRoom->floor; + + if ((h < mapLeftRoom) || (v < mapTopRoom) || + (h >= (mapLeftRoom + mapRoomsWide)) || + (v >= (mapTopRoom + mapRoomsHigh))) + return (false); + else + return (true); +} +#endif + +//-------------------------------------------------------------- CenterMapOnRoom + +#ifndef COMPILEDEMO +void CenterMapOnRoom (short h, short v) +{ + if (mapWindow == nil) + return; + + mapLeftRoom = h - (mapRoomsWide / 2); + mapTopRoom = (kMapGroundValue - v) - (mapRoomsHigh / 2); + + if (mapLeftRoom < 0) + mapLeftRoom = 0; + else if (mapLeftRoom > (kMaxNumRoomsH - mapRoomsWide)) + mapLeftRoom = kMaxNumRoomsH - mapRoomsWide; + + if (mapTopRoom < 0) + mapTopRoom = 0; + else if (mapTopRoom > (kMaxNumRoomsV - mapRoomsHigh)) + mapTopRoom = kMaxNumRoomsV - mapRoomsHigh; + + if (mapWindow != nil) + { + SetControlValue(mapHScroll, mapLeftRoom); + SetControlValue(mapVScroll, mapTopRoom); + } +} +#endif + +//-------------------------------------------------------------- FlagMapRoomsForUpdate + +#ifndef COMPILEDEMO +void FlagMapRoomsForUpdate (void) +{ + if (mapWindow == nil) + return; + +// SetPortWindowPort(mapWindow); + InvalWindowRect(mapWindow, &wasActiveRoomRect); + InvalWindowRect(mapWindow, &activeRoomRect); +} +#endif + +//-------------------------------------------------------------- FindNewActiveRoomRect + +#ifndef COMPILEDEMO +void FindNewActiveRoomRect (void) +{ + Rect aRoom; + short h, i; + short floor, suite, whoCares; + char wasState; + Boolean activeRoomVisible; + + if (mapWindow == nil) + return; + + activeRoomVisible = false; + + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + + for (i = 0; i < mapRoomsHigh; i++) + { + for (h = 0; h < mapRoomsWide; h++) + { + QSetRect(&aRoom, 0, 0, kMapRoomWidth, kMapRoomHeight); + QOffsetRect(&aRoom, kMapRoomWidth * h, kMapRoomHeight * i); + + suite = h + mapLeftRoom; + floor = kMapGroundValue - (i + mapTopRoom); + if ((RoomExists(suite, floor, &whoCares)) && (houseUnlocked)) + { + if (whoCares == thisRoomNumber) + { + wasActiveRoomRect = activeRoomRect; + activeRoomRect = aRoom; + activeRoomVisible = true; + } + } + } + } + + HSetState((Handle)thisHouse, wasState); + + if (activeRoomVisible) + { + activeRoomRect.right++; + activeRoomRect.bottom++; + InsetRect(&activeRoomRect, -1, -1); + } +} +#endif + +//-------------------------------------------------------------- LoadGraphicPlus + +void LoadGraphicPlus (short resID, Rect *theRect) +{ + PicHandle thePicture; + + thePicture = GetPicture(resID); + if (thePicture == nil) + { + thePicture = (PicHandle)GetResource('Date', resID); + if (thePicture == nil) + { + return; + } + } + DrawPicture(thePicture, theRect); + ReleaseResource((Handle)thePicture); +} + +//-------------------------------------------------------------- RedrawMapContents + +#ifndef COMPILEDEMO +void RedrawMapContents (void) +{ + Rect newClip, aRoom, src; + RgnHandle wasClip; + short h, i, groundLevel; + short floor, suite, whoCares, type; + char wasState; + Boolean activeRoomVisible; + + if (mapWindow == nil) + return; + + activeRoomVisible = false; + groundLevel = kMapGroundValue - mapTopRoom; + + newClip.left = mapWindowRect.left; + newClip.top = mapWindowRect.top; + newClip.right = mapWindowRect.right + 2 - kMapScrollBarWidth; + newClip.bottom = mapWindowRect.bottom + 2 - kMapScrollBarWidth; + + SetPort((GrafPtr)mapWindow); + wasClip = NewRgn(); + if (wasClip != nil) + { + GetClip(wasClip); + ClipRect(&newClip); + } + + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + + for (i = 0; i < mapRoomsHigh; i++) + { + for (h = 0; h < mapRoomsWide; h++) + { + QSetRect(&aRoom, 0, 0, kMapRoomWidth, kMapRoomHeight); + QOffsetRect(&aRoom, kMapRoomWidth * h, kMapRoomHeight * i); + + suite = h + mapLeftRoom; + floor = kMapGroundValue - (i + mapTopRoom); + if ((RoomExists(suite, floor, &whoCares)) && (houseUnlocked)) + { + PenNormal(); + type = (*thisHouse)->rooms[whoCares].background - kBaseBackgroundID; + if (type > kNumBackgrounds) + { + if (!doPrettyMap) + type = kNumBackgrounds; // Draw "?" thumbnail. + } + ForeColor(blackColor); + if (type > kNumBackgrounds) // Do a "pretty" thumbnail. + { + LoadGraphicPlus(type + kBaseBackgroundID, &aRoom); + } + else + { + QSetRect(&src, 0, 0, kMapRoomWidth, kMapRoomHeight); + QOffsetRect(&src, 0, type * kMapRoomHeight); + CopyBits((BitMap *)*GetGWorldPixMap(nailSrcMap), + GetPortBitMapForCopyBits(GetWindowPort(mapWindow)), + &src, &aRoom, srcCopy, nil); + } + + if (whoCares == thisRoomNumber) + { + activeRoomRect = aRoom; + activeRoomVisible = true; + } + } + else + { + Pattern dummyPat; + + PenPat(GetQDGlobalsGray(&dummyPat)); + if (i >= groundLevel) + ForeColor(greenColor); + else + ForeColor(blueColor); + PaintRect(&aRoom); + } + } + } + + HSetState((Handle)thisHouse, wasState); + + ForeColor(blackColor); + PenNormal(); + + for (i = 1; i < mapRoomsWide; i++) + { + MoveTo(i * kMapRoomWidth, 0); + Line(0, mapRoomsHigh * kMapRoomHeight); + } + + for (i = 1; i < mapRoomsHigh; i++) + { + MoveTo(0, i * kMapRoomHeight); + Line(mapRoomsWide * kMapRoomWidth, 0); + } + + if (activeRoomVisible) + { + ForeColor(redColor); + activeRoomRect.right++; + activeRoomRect.bottom++; + FrameRect(&activeRoomRect); + InsetRect(&activeRoomRect, 1, 1); + FrameRect(&activeRoomRect); + ForeColor(blackColor); + InsetRect(&activeRoomRect, -1, -1); + } + + if (wasClip != nil) + { + SetClip(wasClip); + DisposeRgn(wasClip); + } +} +#endif + +//-------------------------------------------------------------- UpdateMapWindow + +void UpdateMapWindow (void) +{ + #ifndef COMPILEDEMO + if (mapWindow == nil) + return; + + SetControlValue(mapHScroll, mapLeftRoom); + SetControlValue(mapVScroll, mapTopRoom); + + SetPortWindowPort(mapWindow); + DrawControls(mapWindow); + DrawGrowIcon(mapWindow); + RedrawMapContents(); + #endif +} + +//-------------------------------------------------------------- ResizeMapWindow + +void ResizeMapWindow (short newH, short newV) +{ +#ifndef COMPILEDEMO + if ((newH == 0) && (newV == 0)) + return; + + SetPortWindowPort(mapWindow); + mapRoomsWide = newH / kMapRoomWidth; + if (mapRoomsWide < 3) + mapRoomsWide = 3; + mapRoomsHigh = newV / kMapRoomHeight; + if (mapRoomsHigh < 3) + mapRoomsHigh = 3; + QSetRect(&mapWindowRect, 0, 0, + mapRoomsWide * kMapRoomWidth + kMapScrollBarWidth - 2, + mapRoomsHigh * kMapRoomHeight + kMapScrollBarWidth - 2); + EraseRect(&mapWindowRect); + SizeWindow(mapWindow, mapWindowRect.right, mapWindowRect.bottom, true); + + SetControlMaximum(mapHScroll, kMaxNumRoomsH - mapRoomsWide); + MoveControl(mapHScroll, 0, mapWindowRect.bottom - kMapScrollBarWidth + 2); + SizeControl(mapHScroll, mapWindowRect.right - kMapScrollBarWidth + 3, + kMapScrollBarWidth); + mapLeftRoom = GetControlValue(mapHScroll); + + SetControlMaximum(mapVScroll, kMaxNumRoomsV - mapRoomsHigh); + MoveControl(mapVScroll, mapWindowRect.right - kMapScrollBarWidth + 2, 0); + SizeControl(mapVScroll, kMapScrollBarWidth, + mapWindowRect.bottom - kMapScrollBarWidth + 3); + mapTopRoom = GetControlValue(mapVScroll); + + InvalWindowRect(mapWindow, &mapWindowRect); +#endif +} + +//-------------------------------------------------------------- OpenMapWindow + +void OpenMapWindow (void) +{ +#ifndef COMPILEDEMO + Rect src, dest; + Point globalMouse; + + if (mapWindow == nil) + { + CreateNailOffscreen(); + QSetRect(&mapWindowRect, 0, 0, + mapRoomsWide * kMapRoomWidth + kMapScrollBarWidth - 2, + mapRoomsHigh * kMapRoomHeight + kMapScrollBarWidth - 2); + mapWindow = NewCWindow(nil, &mapWindowRect, + PSTR("Map"), false, kWindoidGrowWDEF, kPutInFront, true, 0L); + + if (mapWindow == nil) + RedAlert(kErrNoMemory); + +// if (OptionKeyDown()) +// { +// isMapH = 3; +// isMapV = qd.screenBits.bounds.bottom - 100; +// } + MoveWindow(mapWindow, isMapH, isMapV, true); + globalMouse = MyGetGlobalMouse(); + QSetRect(&wasActiveRoomRect, 0, 0, 1, 1); + QSetRect(&activeRoomRect, 0, 0, 1, 1); + QSetRect(&src, 0, 0, 1, 1); + QOffsetRect(&src, globalMouse.h, globalMouse.v); + GetWindowRect(mapWindow, &dest); + BringToFront(mapWindow); + ShowHide(mapWindow, true); +// FlagWindowFloating(mapWindow); TEMP - use flaoting windows + HiliteAllWindows(); + + SetPort((GrafPtr)mapWindow); + SetOrigin(1, 1); + QSetRect(&mapHScrollRect, -1, mapRoomsHigh * kMapRoomHeight, + mapRoomsWide * kMapRoomWidth + 1, + mapRoomsHigh * kMapRoomHeight + kMapScrollBarWidth); + QSetRect(&mapVScrollRect, mapRoomsWide * kMapRoomWidth, -1, + mapRoomsWide * kMapRoomWidth + kMapScrollBarWidth, + mapRoomsHigh * kMapRoomHeight + 1); + mapHScroll = NewControl(mapWindow, &mapHScrollRect, PSTR(""), true, mapLeftRoom, + 0, kMaxNumRoomsH - mapRoomsWide, scrollBarProc, kHScrollRef); + if (mapHScroll == nil) + RedAlert(kErrNoMemory); + + mapVScroll = NewControl(mapWindow, &mapVScrollRect, PSTR(""), true, mapTopRoom, + 0, kMaxNumRoomsV - mapRoomsHigh, scrollBarProc, kVScrollRef); + if (mapVScroll == nil) + RedAlert(kErrNoMemory); + + QSetRect(&mapCenterRect, -16, -16, 0, 0); + QOffsetRect(&mapCenterRect, mapWindowRect.right + 2, + mapWindowRect.bottom + 2); + + CenterMapOnRoom(thisRoom->suite, thisRoom->floor); + } + + UpdateMapCheckmark(true); +#endif +} + +//-------------------------------------------------------------- CloseMapWindow + +void CloseMapWindow (void) +{ +#ifndef COMPILEDEMO + CloseThisWindow(&mapWindow); + UpdateMapCheckmark(false); +#endif +} + +//-------------------------------------------------------------- ToggleMapWindow + +void ToggleMapWindow (void) +{ +#ifndef COMPILEDEMO + if (mapWindow == nil) + { + OpenMapWindow(); + isMapOpen = true; + } + else + { + CloseMapWindow(); + isMapOpen = false; + } +#endif +} + +//-------------------------------------------------------------- LiveHScrollAction +#ifndef COMPILEDEMO + +void LiveHScrollAction (ControlHandle theControl, short thePart) +{ + short wasValue, newValue; + + switch (thePart) + { + case kControlUpButtonPart: + wasValue = GetControlValue(theControl); + SetControlValue(theControl, wasValue - 1); + if (GetControlValue(theControl) != wasValue) + { + mapLeftRoom = GetControlValue(theControl); + RedrawMapContents(); + } + break; + + case kControlDownButtonPart: + wasValue = GetControlValue(theControl); + SetControlValue(theControl, wasValue + 1); + if (GetControlValue(theControl) != wasValue) + { + mapLeftRoom = GetControlValue(theControl); + RedrawMapContents(); + } + break; + + case kControlPageUpPart: + wasValue = GetControlValue(theControl); + newValue = wasValue - (mapRoomsWide / 2); + SetControlValue(theControl, newValue); + if (GetControlValue(theControl) != wasValue) + { + mapLeftRoom = GetControlValue(theControl); + RedrawMapContents(); + } + break; + + case kControlPageDownPart: + wasValue = GetControlValue(theControl); + newValue = wasValue + (mapRoomsWide / 2); + SetControlValue(theControl, newValue); + if (GetControlValue(theControl) != wasValue) + { + mapLeftRoom = GetControlValue(theControl); + RedrawMapContents(); + } + break; + + case kControlIndicatorPart: + break; + } +} +#endif + +//-------------------------------------------------------------- LiveVScrollAction +#ifndef COMPILEDEMO + +void LiveVScrollAction (ControlHandle theControl, short thePart) +{ + short wasValue, newValue; + + switch (thePart) + { + case kControlUpButtonPart: + wasValue = GetControlValue(theControl); + SetControlValue(theControl, wasValue - 1); + if (GetControlValue(theControl) != wasValue) + { + mapTopRoom = GetControlValue(theControl); + RedrawMapContents(); + } + break; + + case kControlDownButtonPart: + wasValue = GetControlValue(theControl); + SetControlValue(theControl, wasValue + 1); + if (GetControlValue(theControl) != wasValue) + { + mapTopRoom = GetControlValue(theControl); + RedrawMapContents(); + } + break; + + case kControlPageUpPart: + wasValue = GetControlValue(theControl); + newValue = wasValue - (mapRoomsHigh / 2); + SetControlValue(theControl, newValue); + if (GetControlValue(theControl) != wasValue) + { + mapTopRoom = GetControlValue(theControl); + RedrawMapContents(); + } + break; + + case kControlPageDownPart: + wasValue = GetControlValue(theControl); + newValue = wasValue + (mapRoomsHigh / 2); + SetControlValue(theControl, newValue); + if (GetControlValue(theControl) != wasValue) + { + mapTopRoom = GetControlValue(theControl); + RedrawMapContents(); + } + break; + + case kControlIndicatorPart: + break; + } +} +#endif + +//-------------------------------------------------------------- HandleMapClick + +void HandleMapClick (EventRecord *theEvent) +{ +#ifndef COMPILEDEMO + Rect aRoom; + ControlHandle whichControl; + Point wherePt, globalWhere; + long controlRef; + short whichPart, localH, localV; + short roomH, roomV, itsNumber; + ControlActionUPP scrollHActionUPP, scrollVActionUPP; + + wherePt = theEvent->where; + + scrollHActionUPP = NewControlActionUPP(LiveHScrollAction); + scrollVActionUPP = NewControlActionUPP(LiveVScrollAction); + + if (mapWindow == nil) + return; + + SetPortWindowPort(mapWindow); + globalWhere = wherePt; + GlobalToLocal(&wherePt); + wherePt.h -= 1; + wherePt.v -= 1; + + whichPart = FindControl(wherePt, mapWindow, &whichControl); + if (whichPart == 0) // User clicked in map content area. + { + localH = wherePt.h / kMapRoomWidth; + localV = wherePt.v / kMapRoomHeight; + + if ((localH >= mapRoomsWide) || (localV >= mapRoomsHigh)) + return; + + roomH = localH + mapLeftRoom; + roomV = kMapGroundValue - (localV + mapTopRoom); + + if (RoomExists(roomH, roomV, &itsNumber)) + { + CopyRoomToThisRoom(itsNumber); + DeselectObject(); + ReflectCurrentRoom(false); + + if (thisMac.hasDrag) + { + SetPortWindowPort(mainWindow); + QSetRect(&aRoom, 0, 0, kMapRoomWidth, kMapRoomHeight); + CenterRectOnPoint(&aRoom, globalWhere); +// if (DragRoom(theEvent, &aRoom, itsNumber)) +// { // TEMP disabled. +// } + } + } + else + { + if (doBitchDialogs) + { + if (QueryNewRoom()) + { + if (!CreateNewRoom(roomH, roomV)) + { + YellowAlert(kYellowUnaccounted, 11); + return; + } + else + { + DeselectObject(); + ReflectCurrentRoom(false); + } + } + else + return; + } + else + { + if (!CreateNewRoom(roomH, roomV)) + { + YellowAlert(kYellowUnaccounted, 11); + return; + } + else + { + DeselectObject(); + ReflectCurrentRoom(false); + } + } + } + } + else + { + controlRef = GetControlReference(whichControl); + if (controlRef == kHScrollRef) + { + switch (whichPart) + { + case kControlUpButtonPart: + case kControlDownButtonPart: + case kControlPageUpPart: + case kControlPageDownPart: + if (TrackControl(whichControl, wherePt, scrollHActionUPP)) + { + + } + break; + + case kControlIndicatorPart: + if (TrackControl(whichControl, wherePt, nil)) + { + mapLeftRoom = GetControlValue(whichControl); + RedrawMapContents(); + } + break; + } + } + else if (controlRef == kVScrollRef) + { + switch (whichPart) + { + case kControlUpButtonPart: + case kControlDownButtonPart: + case kControlPageUpPart: + case kControlPageDownPart: + if (TrackControl(whichControl, wherePt, scrollVActionUPP)) + { + + } + break; + + case kControlIndicatorPart: + if (TrackControl(whichControl, wherePt, nil)) + { + mapTopRoom = GetControlValue(whichControl); + RedrawMapContents(); + } + break; + } + } + } + + DisposeControlActionUPP(scrollHActionUPP); + DisposeControlActionUPP(scrollVActionUPP); +#endif +} + +//-------------------------------------------------------------- QueryNewRoom + +#ifndef COMPILEDEMO +Boolean QueryNewRoom (void) +{ + short hitWhat; + +// CenterAlert(kNewRoomAlert); + hitWhat = Alert(kNewRoomAlert, nil); + if (hitWhat == kYesDoNewRoom) + return (true); + else + return (false); +} +#endif + +//-------------------------------------------------------------- CreateNailOffscreen + +#ifndef COMPILEDEMO +void CreateNailOffscreen (void) +{ + CGrafPtr wasCPort; + GDHandle wasWorld; + OSErr theErr; + + if (nailSrcMap == nil) + { + GetGWorld(&wasCPort, &wasWorld); + + QSetRect(&nailSrcRect, 0, 0, kMapRoomWidth, kMapRoomHeight * (kNumBackgrounds + 1)); + theErr = CreateOffScreenGWorld(&nailSrcMap, &nailSrcRect, kPreferredDepth); + SetGWorld(nailSrcMap, nil); + LoadGraphic(kThumbnailPictID); + + SetGWorld(wasCPort, wasWorld); + } +} +#endif + +//-------------------------------------------------------------- KillNailOffscreen + +#ifndef COMPILEDEMO +void KillNailOffscreen (void) +{ + if (nailSrcMap != nil) + { +// KillOffScreenPixMap(nailSrcMap); + DisposeGWorld(nailSrcMap); + nailSrcMap = nil; + } +} +#endif + +//-------------------------------------------------------------- MoveRoom + +void MoveRoom (Point wherePt) +{ + short localH, localV; + short roomH, roomV, itsNumber; + + localH = wherePt.h / kMapRoomWidth; + localV = wherePt.v / kMapRoomHeight; + + if ((localH >= mapRoomsWide) || (localV >= mapRoomsHigh)) + return; + + roomH = localH + mapLeftRoom; + roomV = kMapGroundValue - (localV + mapTopRoom); + + if (RoomExists(roomH, roomV, &itsNumber)) + { + + } + else + { + thisRoom->floor = roomV; + thisRoom->suite = roomH; + fileDirty = true; + UpdateMenus(false); + RedrawMapContents(); + } +} + diff --git a/GpApp/Map.h b/GpApp/Map.h new file mode 100644 index 0000000..a9ed724 --- /dev/null +++ b/GpApp/Map.h @@ -0,0 +1,12 @@ +//============================================================================ +//---------------------------------------------------------------------------- +// Map.h +//---------------------------------------------------------------------------- +//============================================================================ + + +#include "PLQDOffscreen.h" + + +extern GWorldPtr nailSrcMap; +extern WindowPtr mapWindow; diff --git a/GpApp/Marquee.cpp b/GpApp/Marquee.cpp new file mode 100644 index 0000000..7e9d70d --- /dev/null +++ b/GpApp/Marquee.cpp @@ -0,0 +1,511 @@ +//============================================================================ +//---------------------------------------------------------------------------- +// Marquee.c +//---------------------------------------------------------------------------- +//============================================================================ + + +#include "Externs.h" +#include "Marquee.h" +#include "Objects.h" +#include "ObjectEdit.h" +#include "RectUtils.h" + + +#define kMarqueePatListID 128 +#define kHandleSideLong 9 + + +void DrawGliderMarquee (void); +void DrawMarquee (void); + + +marquee theMarquee; +Rect marqueeGliderRect; +Boolean gliderMarqueeUp; + + +extern Cursor handCursor, vertCursor, horiCursor, diagCursor; +extern Rect leftStartGliderSrc; + + +//============================================================== Functions +//-------------------------------------------------------------- DoMarquee + +void DoMarquee (void) +{ + if ((!theMarquee.active) || (theMarquee.paused)) + return; + + SetPortWindowPort(mainWindow); + PenMode(patXor); + PenPat(&theMarquee.pats[theMarquee.index]); + DrawMarquee(); + theMarquee.index++; + if (theMarquee.index >= kNumMarqueePats) + theMarquee.index = 0; + PenPat(&theMarquee.pats[theMarquee.index]); + DrawMarquee(); + PenNormal(); +} + +//-------------------------------------------------------------- StartMarquee + +void StartMarquee (Rect *theRect) +{ + if (theMarquee.active) + StopMarquee(); + + if (objActive == kNoObjectSelected) + return; + + SetPortWindowPort(mainWindow); + theMarquee.bounds = *theRect; + theMarquee.active = true; + theMarquee.paused = false; + theMarquee.handled = false; + PenMode(patXor); + PenPat(&theMarquee.pats[theMarquee.index]); + DrawMarquee(); + PenNormal(); + SetCoordinateHVD(theMarquee.bounds.left, theMarquee.bounds.top, -1); +} + +//-------------------------------------------------------------- StartMarqueeHandled + +void StartMarqueeHandled (Rect *theRect, short direction, short dist) +{ + if (theMarquee.active) + StopMarquee(); + + if (objActive == kNoObjectSelected) + return; + + SetPortWindowPort(mainWindow); + theMarquee.bounds = *theRect; + theMarquee.active = true; + theMarquee.paused = false; + theMarquee.handled = true; + QSetRect(&theMarquee.handle, 0, 0, kHandleSideLong, kHandleSideLong); + QOffsetRect(&theMarquee.handle, kHandleSideLong / -2, kHandleSideLong / -2); + switch (direction) + { + case kAbove: + QOffsetRect(&theMarquee.handle, theMarquee.bounds.left, + theMarquee.bounds.top); + QOffsetRect(&theMarquee.handle, HalfRectWide(&theMarquee.bounds), -dist); + break; + + case kToRight: + QOffsetRect(&theMarquee.handle, theMarquee.bounds.right, + theMarquee.bounds.top); + QOffsetRect(&theMarquee.handle, dist, HalfRectTall(&theMarquee.bounds)); + break; + + case kBelow: + QOffsetRect(&theMarquee.handle, theMarquee.bounds.left, + theMarquee.bounds.bottom); + QOffsetRect(&theMarquee.handle, HalfRectWide(&theMarquee.bounds), dist); + break; + + case kToLeft: + QOffsetRect(&theMarquee.handle, theMarquee.bounds.left, + theMarquee.bounds.top); + QOffsetRect(&theMarquee.handle, -dist, HalfRectTall(&theMarquee.bounds)); + break; + + case kBottomCorner: + QOffsetRect(&theMarquee.handle, theMarquee.bounds.right, + theMarquee.bounds.bottom); + break; + + case kTopCorner: + QOffsetRect(&theMarquee.handle, theMarquee.bounds.right, + theMarquee.bounds.top); + break; + } + theMarquee.direction = direction; + theMarquee.dist = dist; + + PenMode(patXor); + PenPat(&theMarquee.pats[theMarquee.index]); + DrawMarquee(); + PenNormal(); + SetCoordinateHVD(theMarquee.bounds.left, theMarquee.bounds.top, dist); +} + +//-------------------------------------------------------------- StopMarquee + +void StopMarquee (void) +{ + if (gliderMarqueeUp) + { + DrawGliderMarquee(); + gliderMarqueeUp = false; + } + + if (!theMarquee.active) + return; + + SetPortWindowPort(mainWindow); + PenMode(patXor); + PenPat(&theMarquee.pats[theMarquee.index]); + DrawMarquee(); + PenNormal(); + theMarquee.active = false; + SetCoordinateHVD(-1, -1, -1); +} + +//-------------------------------------------------------------- PauseMarquee + +void PauseMarquee (void) +{ + if (!theMarquee.active) + return; + + theMarquee.paused = true; + StopMarquee(); +} + +//-------------------------------------------------------------- ResumeMarquee + +void ResumeMarquee (void) +{ + if (!theMarquee.paused) + return; + + if (theMarquee.handled) + { + StartMarqueeHandled(&theMarquee.bounds, theMarquee.direction, theMarquee.dist); + HandleBlowerGlider(); + } + else + StartMarquee(&theMarquee.bounds); +} + +//-------------------------------------------------------------- DragOutMarqueeRect + +void DragOutMarqueeRect (Point start, Rect *theRect) +{ + Point wasPt, newPt; + + SetPortWindowPort(mainWindow); + InitCursor(); + QSetRect(theRect, start.h, start.v, start.h, start.v); + PenMode(patXor); + PenPat(&theMarquee.pats[theMarquee.index]); + FrameRect(theRect); + wasPt = start; + + while (WaitMouseUp()) + { + GetMouse(&newPt); + if (DeltaPoint(wasPt, newPt)) + { + FrameRect(theRect); + QSetRect(theRect, start.h, start.v, newPt.h, newPt.v); + NormalizeRect(theRect); + FrameRect(theRect); + wasPt = newPt; + } + } + FrameRect(theRect); + PenNormal(); +} + +//-------------------------------------------------------------- DragMarqueeRect + +void DragMarqueeRect (Point start, Rect *theRect, Boolean lockH, Boolean lockV) +{ + Point wasPt, newPt; + short deltaH, deltaV; + + SetCursor(&handCursor); + StopMarquee(); + PenMode(patXor); + PenPat(&theMarquee.pats[theMarquee.index]); + theMarquee.bounds = *theRect; + FrameRect(&theMarquee.bounds); + + wasPt = start; + while (WaitMouseUp()) + { + GetMouse(&newPt); + if (DeltaPoint(wasPt, newPt)) + { + if (lockV) + deltaH = 0; + else + deltaH = newPt.h - wasPt.h; + if (lockH) + deltaV = 0; + else + deltaV = newPt.v - wasPt.v; + FrameRect(&theMarquee.bounds); + QOffsetRect(&theMarquee.bounds, deltaH, deltaV); + FrameRect(&theMarquee.bounds); + wasPt = newPt; + SetCoordinateHVD(theMarquee.bounds.left, theMarquee.bounds.top, -2); + } + } + FrameRect(&theMarquee.bounds); + *theRect = theMarquee.bounds; + PenNormal(); + InitCursor(); +} + +//-------------------------------------------------------------- DragMarqueeHandle + +void DragMarqueeHandle (Point start, short *dragged) +{ + Point wasPt, newPt; + short deltaH, deltaV; + + if ((theMarquee.direction == kAbove) || (theMarquee.direction == kBelow)) + SetCursor(&vertCursor); + else + SetCursor(&horiCursor); + StopMarquee(); + PenMode(patXor); + PenPat(&theMarquee.pats[theMarquee.index]); + FrameRect(&theMarquee.bounds); + PaintRect(&theMarquee.handle); + + wasPt = start; + while (WaitMouseUp()) + { + GetMouse(&newPt); + if (DeltaPoint(wasPt, newPt)) + { + switch (theMarquee.direction) + { + case kAbove: + deltaH = 0; + deltaV = newPt.v - wasPt.v; + *dragged -= deltaV; + if (*dragged <= 0) + { + deltaV += *dragged; + *dragged = 0; + } + DeltaCoordinateD(*dragged); + break; + + case kToRight: + deltaH = newPt.h - wasPt.h; + deltaV = 0; + *dragged += deltaH; + if (*dragged <= 0) + { + deltaH -= *dragged; + *dragged = 0; + } + DeltaCoordinateD(*dragged); + break; + + case kBelow: + deltaH = 0; + deltaV = newPt.v - wasPt.v; + *dragged += deltaV; + if (*dragged <= 0) + { + deltaV -= *dragged; + *dragged = 0; + } + DeltaCoordinateD(*dragged); + break; + + case kToLeft: + deltaH = newPt.h - wasPt.h; + deltaV = 0; + *dragged -= deltaH; + if (*dragged <= 0) + { + deltaH += *dragged; + *dragged = 0; + } + DeltaCoordinateD(*dragged); + break; + } + + PaintRect(&theMarquee.handle); + QOffsetRect(&theMarquee.handle, deltaH, deltaV); + PaintRect(&theMarquee.handle); + wasPt = newPt; + } + } + FrameRect(&theMarquee.bounds); + PaintRect(&theMarquee.handle); + PenNormal(); + InitCursor(); +} + +//-------------------------------------------------------------- DragMarqueeCorner + +void DragMarqueeCorner (Point start, short *hDragged, short *vDragged, Boolean isTop) +{ + Point wasPt, newPt; + short deltaH, deltaV; + + SetCursor(&diagCursor); + StopMarquee(); + PenMode(patXor); + PenPat(&theMarquee.pats[theMarquee.index]); + FrameRect(&theMarquee.bounds); + PaintRect(&theMarquee.handle); + + wasPt = start; + while (WaitMouseUp()) + { + GetMouse(&newPt); + if (DeltaPoint(wasPt, newPt)) + { + deltaH = newPt.h - wasPt.h; + if (isTop) + deltaV = wasPt.v - newPt.v; + else + deltaV = newPt.v - wasPt.v; + *hDragged += deltaH; + if (*hDragged <= 0) + { + deltaH -= *hDragged; + *hDragged = 0; + } + *vDragged += deltaV; + if (*vDragged <= 0) + { + deltaV -= *vDragged; + *vDragged = 0; + } + FrameRect(&theMarquee.bounds); + PaintRect(&theMarquee.handle); + if (isTop) + { + QOffsetRect(&theMarquee.handle, deltaH, -deltaV); + theMarquee.bounds.right += deltaH; + theMarquee.bounds.top -= deltaV; + } + else + { + QOffsetRect(&theMarquee.handle, deltaH, deltaV); + theMarquee.bounds.right += deltaH; + theMarquee.bounds.bottom += deltaV; + } + FrameRect(&theMarquee.bounds); + PaintRect(&theMarquee.handle); + wasPt = newPt; + } + } + FrameRect(&theMarquee.bounds); + PaintRect(&theMarquee.handle); + PenNormal(); + InitCursor(); +} + +//-------------------------------------------------------------- MarqueeHasHandles + +Boolean MarqueeHasHandles (short *direction, short *dist) +{ + if (theMarquee.handled) + { + *direction = theMarquee.direction; + *dist = theMarquee.dist; + return (true); + } + else + { + *direction = 0; + *dist = 0; + return (false); + } +} + +//-------------------------------------------------------------- PtInMarqueeHandle + +Boolean PtInMarqueeHandle (Point where) +{ + return (PtInRect(where, &theMarquee.handle)); +} + +//-------------------------------------------------------------- DrawGliderMarquee + +void DrawGliderMarquee (void) +{ + CopyBits((BitMap *)*GetGWorldPixMap(blowerMaskMap), + GetPortBitMapForCopyBits(GetWindowPort(mainWindow)), + &leftStartGliderSrc, + &marqueeGliderRect, + srcXor, nil); +} + +//-------------------------------------------------------------- SetMarqueeGliderCenter + +void SetMarqueeGliderRect (short h, short v) +{ + marqueeGliderRect = leftStartGliderSrc; + ZeroRectCorner(&marqueeGliderRect); + QOffsetRect(&marqueeGliderRect, h - kHalfGliderWide, v - kGliderHigh); + + DrawGliderMarquee(); + gliderMarqueeUp = true; +} + +//-------------------------------------------------------------- DrawMarquee + +void DrawMarquee (void) +{ + FrameRect(&theMarquee.bounds); + if (theMarquee.handled) + { + PaintRect(&theMarquee.handle); + switch (theMarquee.direction) + { + case kAbove: + MoveTo(theMarquee.handle.left + (kHandleSideLong / 2), + theMarquee.handle.bottom); + LineTo(theMarquee.handle.left + (kHandleSideLong / 2), + theMarquee.bounds.top - 1); + break; + + case kToRight: + MoveTo(theMarquee.handle.left, + theMarquee.handle.top + (kHandleSideLong / 2)); + LineTo(theMarquee.bounds.right, + theMarquee.handle.top + (kHandleSideLong / 2)); + break; + + case kBelow: + MoveTo(theMarquee.handle.left + (kHandleSideLong / 2), + theMarquee.handle.top - 1); + LineTo(theMarquee.handle.left + (kHandleSideLong / 2), + theMarquee.bounds.bottom); + break; + + case kToLeft: + MoveTo(theMarquee.handle.right, + theMarquee.handle.top + (kHandleSideLong / 2)); + LineTo(theMarquee.bounds.left, + theMarquee.handle.top + (kHandleSideLong / 2)); + break; + } + } + + if (gliderMarqueeUp) + DrawGliderMarquee(); +} + +//-------------------------------------------------------------- InitMarquee + +void InitMarquee (void) +{ + short i; + + for (i = 0; i < kNumMarqueePats; i++) + GetIndPattern(&theMarquee.pats[i], kMarqueePatListID, i + 1); + theMarquee.index = 0; + theMarquee.active = false; + theMarquee.paused = false; + theMarquee.handled = false; + gliderMarqueeUp = false; +} + diff --git a/GpApp/Marquee.h b/GpApp/Marquee.h new file mode 100644 index 0000000..09d324c --- /dev/null +++ b/GpApp/Marquee.h @@ -0,0 +1,24 @@ +//============================================================================ +//---------------------------------------------------------------------------- +// Marquee.h +//---------------------------------------------------------------------------- +//============================================================================ + + +#pragma once + + +#include "PLQuickdraw.h" + + +typedef struct +{ + Pattern pats[kNumMarqueePats]; + Rect bounds, handle; + short index, direction, dist; + Boolean active, paused, handled; +} marquee; + + +extern marquee theMarquee; + diff --git a/GpApp/Menu.cpp b/GpApp/Menu.cpp new file mode 100644 index 0000000..da07779 --- /dev/null +++ b/GpApp/Menu.cpp @@ -0,0 +1,814 @@ + +//============================================================================ +//---------------------------------------------------------------------------- +// Menu.c +//---------------------------------------------------------------------------- +//============================================================================ + + +//#include +#include "PLNumberFormatting.h" +#include "PLPasStr.h" +#include "PLToolUtils.h" +#include "DialogUtils.h" +#include "Externs.h" +#include "House.h" +#include "ObjectEdit.h" + + +#define kSheWantsNewGame 1 +#define kSheWantsResumeGame 2 + + +void UpdateMenusEditMode (void); +void UpdateMenusNonEditMode (void); +void UpdateMenusHouseOpen (void); +void UpdateMenusHouseClosed (void); +void UpdateResumeDialog (DialogPtr); +Boolean ResumeFilter (DialogPtr, EventRecord *, short *); +short QueryResumeGame (void); +void HeyYourPissingAHighScore (void); + + +MenuHandle appleMenu, gameMenu, optionsMenu, houseMenu; +Boolean menusUp, resumedSavedGame; + + +extern long incrementModeTime; +extern short demoHouseIndex, wasHouseVersion; +extern short splashOriginH, splashOriginV, numberRooms; +extern Boolean quitting, noRoomAtAll, twoPlayerGame; +extern Boolean isMapOpen, isToolsOpen, isPlayMusicIdle; +extern Boolean isCoordOpen, failedMusic, splashDrawn; +extern Boolean houseOpen; + + +//============================================================== Functions +//-------------------------------------------------------------- UpdateMenusEditMode +// Sets the menus to reflect that user is in edit mode. + +void UpdateMenusEditMode (void) +{ + DisableMenuItem(gameMenu, iNewGame); + DisableMenuItem(gameMenu, iTwoPlayer); + DisableMenuItem(gameMenu, iOpenSavedGame); + DisableMenuItem(optionsMenu, iHighScores); + DisableMenuItem(optionsMenu, iHelp); + CheckMenuItem(optionsMenu, iEditor, true); +} + +//-------------------------------------------------------------- UpdateMenusNonEditMode +// Sets the menus to reflect that user is NOT in edit mode. + +void UpdateMenusNonEditMode (void) +{ + if ((noRoomAtAll) || (!houseOpen) || (numberRooms <= 0)) + { + DisableMenuItem(gameMenu, iNewGame); + DisableMenuItem(gameMenu, iTwoPlayer); + DisableMenuItem(gameMenu, iOpenSavedGame); + if (houseOpen) + { + EnableMenuItem(gameMenu, iLoadHouse); + EnableMenuItem(optionsMenu, iHighScores); + } + else + { + DisableMenuItem(gameMenu, iLoadHouse); + DisableMenuItem(optionsMenu, iHighScores); + } + } + else + { + EnableMenuItem(gameMenu, iNewGame); + EnableMenuItem(gameMenu, iTwoPlayer); + EnableMenuItem(gameMenu, iOpenSavedGame); + EnableMenuItem(gameMenu, iLoadHouse); + EnableMenuItem(optionsMenu, iHighScores); + } + if (demoHouseIndex == -1) + DisableMenuItem(optionsMenu, iHelp); + else + EnableMenuItem(optionsMenu, iHelp); + CheckMenuItem(optionsMenu, iEditor, false); +} + +//-------------------------------------------------------------- UpdateMenusHouseOpen +// Sets the menus to reflect that a house is currently open. + +void UpdateMenusHouseOpen (void) +{ + EnableMenuItem(gameMenu, iLoadHouse); + if ((fileDirty) && (houseUnlocked)) + EnableMenuItem(houseMenu, iSave); + else + DisableMenuItem(houseMenu, iSave); + if (houseUnlocked) + { + // EnableMenuItem(houseMenu, iSaveAs); + EnableMenuItem(houseMenu, iHouse); + } + else + { + // DisableMenuItem(houseMenu, iSaveAs); + DisableMenuItem(houseMenu, iHouse); + } + if ((noRoomAtAll) || (!houseUnlocked)) + DisableMenuItem(houseMenu, iRoom); + else + EnableMenuItem(houseMenu, iRoom); + if ((objActive == kNoObjectSelected) || (!houseUnlocked)) + { + DisableMenuItem(houseMenu, iObject); + DisableMenuItem(houseMenu, iBringForward); + DisableMenuItem(houseMenu, iSendBack); + } + else + { + EnableMenuItem(houseMenu, iObject); + if ((objActive == kInitialGliderSelected) || + (objActive == kLeftGliderSelected) || + (objActive == kRightGliderSelected)) + { + DisableMenuItem(houseMenu, iBringForward); + DisableMenuItem(houseMenu, iSendBack); + } + else + { + EnableMenuItem(houseMenu, iBringForward); + EnableMenuItem(houseMenu, iSendBack); + } + } +} + +//-------------------------------------------------------------- UpdateMenusHouseClosed +// Sets the menus to reflect that a house is NOT currently open. + +void UpdateMenusHouseClosed (void) +{ + DisableMenuItem(gameMenu, iLoadHouse); + DisableMenuItem(houseMenu, iSave); + // DisableMenuItem(houseMenu, iSaveAs); + DisableMenuItem(houseMenu, iHouse); + DisableMenuItem(houseMenu, iRoom); + DisableMenuItem(houseMenu, iObject); + DisableMenuItem(houseMenu, iCut); + DisableMenuItem(houseMenu, iCopy); + DisableMenuItem(houseMenu, iPaste); + DisableMenuItem(houseMenu, iClear); + DisableMenuItem(houseMenu, iDuplicate); +} + +//-------------------------------------------------------------- UpdateClipboardMenus +// Set the Cut/Copy/Paste menus to reflect if we have data in theÉ +// Mac's "clipboard" or not. + +void UpdateClipboardMenus (void) +{ + Str255 title; + + if (!houseOpen) + return; + + if (houseUnlocked) + { + if (objActive > kNoObjectSelected) + { + GetLocalizedString(36, title); + SetMenuItemText(houseMenu, iCut, title); + GetLocalizedString(37, title); + SetMenuItemText(houseMenu, iCopy, title); + GetLocalizedString(38, title); + SetMenuItemText(houseMenu, iClear, title); + EnableMenuItem(houseMenu, iDuplicate); + } + else + { + GetLocalizedString(39, title); + SetMenuItemText(houseMenu, iCut, title); + GetLocalizedString(40, title); + SetMenuItemText(houseMenu, iCopy, title); + GetLocalizedString(41, title); + SetMenuItemText(houseMenu, iClear, title); + DisableMenuItem(houseMenu, iDuplicate); + } + + EnableMenuItem(houseMenu, iCut); + EnableMenuItem(houseMenu, iCopy); +// if (hasScrap) +// { +// EnableMenuItem(houseMenu, iPaste); +// if (scrapIsARoom) +// { +// GetLocalizedString(42, title); +// SetMenuItemText(houseMenu, iPaste, title); +// } +// else +// { +// GetLocalizedString(43, title); +// SetMenuItemText(houseMenu, iPaste, title); +// } +// } +// else + { + DisableMenuItem(houseMenu, iPaste); + GetLocalizedString(44, title); + SetMenuItemText(houseMenu, iPaste, title); + } + EnableMenuItem(houseMenu, iClear); + EnableMenuItem(houseMenu, iGoToRoom); + EnableMenuItem(houseMenu, iMapWindow); + EnableMenuItem(houseMenu, iObjectWindow); + EnableMenuItem(houseMenu, iCoordinateWindow); + } + else + { + DisableMenuItem(houseMenu, iCut); + DisableMenuItem(houseMenu, iCopy); + DisableMenuItem(houseMenu, iPaste); + DisableMenuItem(houseMenu, iClear); + DisableMenuItem(houseMenu, iDuplicate); + DisableMenuItem(houseMenu, iGoToRoom); + DisableMenuItem(houseMenu, iMapWindow); + DisableMenuItem(houseMenu, iObjectWindow); + DisableMenuItem(houseMenu, iCoordinateWindow); + } +} + +//-------------------------------------------------------------- UpdateMenus +// Called whenever a significant change to the environment has takenÉ +// place and some of the menu states may have changes (for example,É +// a menui was grayed out before becuase it wasn't an option - nowÉ +// perhaps the situation has changed and we want the menu to be "usable"). + +void UpdateMenus (Boolean newMode) +{ + if (!menusUp) + return; + + if (newMode) + { + if (theMode == kEditMode) + InsertMenu(houseMenu, 0); + else + DeleteMenu(kHouseMenuID); + } + + if (theMode == kEditMode) + { + UpdateMenusEditMode(); + if (houseOpen) + { + UpdateMenusHouseOpen(); + UpdateClipboardMenus(); + } + else + UpdateMenusHouseClosed(); + UpdateLinkControl(); + } + else + UpdateMenusNonEditMode(); + + DrawMenuBar(); +} + +//-------------------------------------------------------------- DoAppleMenu +// Handle the Apple menu (About box and desk accessories). + +void DoAppleMenu (short theItem) +{ +// Str255 daName; +// GrafPtr wasPort; +// short daNumber; + + switch (theItem) + { + case iAbout: + DoAbout(); + break; + + default: +// GetMenuItemText(appleMenu, theItem, daName); +// GetPort(&wasPort); +// daNumber = OpenDeskAccesory(daName); +// SetPort((GrafPtr)wasPort); + break; + } +} + +//-------------------------------------------------------------- DoGameMenu +// Handle the user selecting an item from the Game menu. + +void DoGameMenu (short theItem) +{ + switch (theItem) + { + case iNewGame: + twoPlayerGame = false; + resumedSavedGame = false; + NewGame(kNewGameMode); + break; + + case iTwoPlayer: + twoPlayerGame = true; + resumedSavedGame = false; + NewGame(kNewGameMode); + break; + + case iOpenSavedGame: + resumedSavedGame = true; + HeyYourPissingAHighScore(); + if (OpenSavedGame()) + { + twoPlayerGame = false; + NewGame(kResumeGameMode); + } + break; + + case iLoadHouse: +#ifdef COMPILEDEMO + DoNotInDemo(); +#else + if (splashDrawn) + { + DoLoadHouse(); + OpenCloseEditWindows(); + UpdateMenus(false); + incrementModeTime = TickCount() + kIdleSplashTicks; + if ((theMode == kSplashMode) || (theMode == kPlayMode)) + { + Rect updateRect; + + SetRect(&updateRect, splashOriginH + 474, splashOriginV + 304, splashOriginH + 474 + 166, splashOriginV + 304 + 12); + InvalWindowRect(mainWindow, &updateRect); + } + } +#endif + break; + + case iQuit: +#ifndef COMPILEDEMO + quitting = true; + if (!QuerySaveChanges()) + quitting = false; +#else + quitting = true; +#endif + break; + + default: + break; + } +} + +//-------------------------------------------------------------- DoOptionsMenu +// Handle the user selecting an item from the Options menu. + +void DoOptionsMenu (short theItem) +{ +#ifndef COMPILEDEMO + OSErr theErr; +#endif + + switch (theItem) + { + case iEditor: +#ifdef COMPILEDEMO + DoNotInDemo(); +#else + if (theMode == kEditMode) // switching to splash mode + { + if (fileDirty) + SortHouseObjects(); + if (!QuerySaveChanges()) + break; + theMode = kSplashMode; + CloseMapWindow(); + CloseToolsWindow(); + CloseCoordWindow(); + CloseLinkWindow(); + DeselectObject(); + StopMarquee(); + if (isPlayMusicIdle) + { + theErr = StartMusic(); + if (theErr != noErr) + { + YellowAlert(kYellowNoMusic, theErr); + failedMusic = true; + } + } + CloseMainWindow(); + OpenMainWindow(); + incrementModeTime = TickCount() + kIdleSplashTicks; + } + else if (theMode == kSplashMode) // switching to edit mode + { + theMode = kEditMode; + StopTheMusic(); + CloseMainWindow(); + OpenMainWindow(); + OpenCloseEditWindows(); + } + InitCursor(); + UpdateMenus(true); +#endif + break; + + case iHighScores: + DoHighScores(); + incrementModeTime = TickCount() + kIdleSplashTicks; + break; + + case iPrefs: + DoSettingsMain(); + incrementModeTime = TickCount() + kIdleSplashTicks; + break; + + case iHelp: + DoDemoGame(); + break; + } +} + +//-------------------------------------------------------------- DoHouseMenu +// Handle the user selecting an item from the House menu (only in Edit mode). + +void DoHouseMenu (short theItem) +{ +#ifndef COMPILEDEMO + short direction, dist; + Boolean whoCares; + + switch (theItem) + { + case iNewHouse: + if (CreateNewHouse()) + { + whoCares = InitializeEmptyHouse(); + OpenCloseEditWindows(); + } + break; + + case iSave: + DeselectObject(); + if (fileDirty) + SortHouseObjects(); + if ((fileDirty) && (houseUnlocked)) + { +// SaveGame(false); + if (wasHouseVersion < kHouseVersion) + ConvertHouseVer1To2(); + wasHouseVersion = kHouseVersion; + whoCares = WriteHouse(true); + ForceThisRoom(thisRoomNumber); + ReadyBackground(thisRoom->background, thisRoom->tiles); + GetThisRoomsObjRects(); + DrawThisRoomsObjects(); + } + break; + +// case iSaveAs: +// whoCares = SaveHouseAs(); +// break; + + case iHouse: + if (houseUnlocked) + DoHouseInfo(); + break; + + case iRoom: + if (houseUnlocked) + DoRoomInfo(); + break; + + case iObject: + if (houseUnlocked) + { + DoObjectInfo(); + if (ObjectHasHandle(&direction, &dist)) + { + StartMarqueeHandled(&roomObjectRects[objActive], direction, dist); + HandleBlowerGlider(); + } + else + StartMarquee(&roomObjectRects[objActive]); + } + break; + + case iCut: + if (houseUnlocked) + { + if (objActive > kNoObjectSelected) + { +// PutObjectScrap(); + DeleteObject(); + } + else + { +// PutRoomScrap(); + DeleteRoom(false); + } + UpdateClipboardMenus(); + } + break; + + case iCopy: + if (houseUnlocked) + { +// if (objActive > kNoObjectSelected) +// PutObjectScrap(); +// else +// PutRoomScrap(); + UpdateClipboardMenus(); + } + break; + + case iPaste: + if (houseUnlocked) + { +/* if (scrapIsARoom) + GetRoomScrap(); + else + GetObjectScrap(); + UpdateClipboardMenus(); +*/ + } + break; + + case iClear: + if (houseUnlocked) + { + if (objActive > kNoObjectSelected) + DeleteObject(); + else + DeleteRoom(false); + UpdateClipboardMenus(); + } + break; + + case iDuplicate: + if (houseUnlocked) + DuplicateObject(); + break; + + case iBringForward: + if (houseUnlocked) + BringSendFrontBack(true); + break; + + case iSendBack: + if (houseUnlocked) + BringSendFrontBack(false); + break; + + case iGoToRoom: + if (houseUnlocked) + DoGoToDialog(); + break; + + case iMapWindow: + if (houseUnlocked) + ToggleMapWindow(); + break; + + case iObjectWindow: + if (houseUnlocked) + ToggleToolsWindow(); + break; + + case iCoordinateWindow: + if (houseUnlocked) + ToggleCoordinateWindow(); + break; + } +#endif +} + +//-------------------------------------------------------------- DoMenuChoice +// Users has selected a menu item - determin which menu was selectedÉ +// and call the appropriate function above. + +void DoMenuChoice (long menuChoice) +{ + short theMenu, theItem; + + if (menuChoice == 0) + return; + + theMenu = HiWord(menuChoice); + theItem = LoWord(menuChoice); + + switch (theMenu) + { + case kAppleMenuID: + DoAppleMenu(theItem); + break; + + case kGameMenuID: + DoGameMenu(theItem); + break; + + case kOptionsMenuID: + DoOptionsMenu(theItem); + break; + + case kHouseMenuID: + DoHouseMenu(theItem); + break; + } + + HiliteMenu(0); +} + +//-------------------------------------------------------------- UpdateMapCheckmark +// Checks or unchecks the Map Window item (to indicate if open or not). + +void UpdateMapCheckmark (Boolean checkIt) +{ + if (!menusUp) + return; + + CheckMenuItem(houseMenu, iMapWindow, checkIt); +} + +//-------------------------------------------------------------- UpdateToolsCheckmark +// Checks or unchecks the Tools Window item (to indicate if open or not). + +void UpdateToolsCheckmark (Boolean checkIt) +{ + if (!menusUp) + return; + + CheckMenuItem(houseMenu, iObjectWindow, checkIt); +} + +//-------------------------------------------------------------- UpdateCoordinateCheckmark +// Checks or unchecks the Coordinates Window item (to indicate if open or not). + +void UpdateCoordinateCheckmark (Boolean checkIt) +{ + if (!menusUp) + return; + + CheckMenuItem(houseMenu, iCoordinateWindow, checkIt); +} + +//-------------------------------------------------------------- UpdateResumeDialog +// Update function for Resume dialog (below). + +void UpdateResumeDialog (DialogPtr theDialog) +{ + DrawDialog(theDialog); + DrawDefaultButton(theDialog); +} + +//-------------------------------------------------------------- ResumeFilter +// Dialog filter for the Resume dialog (below). + +Boolean ResumeFilter (DialogPtr dial, EventRecord *event, short *item) +{ + switch (event->what) + { + case keyDown: + switch ((event->message) & charCodeMask) + { + case kReturnKeyASCII: + case kEnterKeyASCII: + FlashDialogButton(dial, kOkayButton); + *item = kOkayButton; + return(true); + break; + + default: + return(false); + } + break; + + case updateEvt: + if ((WindowPtr)event->message == GetDialogWindow(dial)) + { + SetPort((GrafPtr)dial); + BeginUpdate(GetDialogWindow(dial)); + UpdateResumeDialog(dial); + EndUpdate(GetDialogWindow(dial)); + event->what = nullEvent; + } + return(false); + break; + + default: + return(false); + break; + } +} + +//-------------------------------------------------------------- QueryResumeGame +// Dialog that asks user whether they want to resume a saved game orÉ +// begin a new one. It displays a little info on the state of theirÉ +// saved game (number of glider left, points, etc.). + +short QueryResumeGame (void) +{ + #define kResumeGameDial 1025 + DialogPtr theDial; + houseType *thisHousePtr; + Str255 scoreStr, glidStr; + long hadPoints; + short hitWhat, hadGliders; + char wasState; + Boolean leaving; + ModalFilterUPP resumeFilterUPP; + + resumeFilterUPP = NewModalFilterUPP(ResumeFilter); + + wasState = HGetState((Handle)thisHouse); // get score & num. gliders + HLock((Handle)thisHouse); + thisHousePtr = *thisHouse; + hadPoints = thisHousePtr->savedGame.score; + hadGliders = thisHousePtr->savedGame.numGliders; + HSetState((Handle)thisHouse, wasState); + NumToString(hadPoints, scoreStr); // param text strings + NumToString((long)hadGliders, glidStr); + if (hadGliders == 1) + ParamText(glidStr, PSTR(""), scoreStr, PSTR("")); + else + ParamText(glidStr, PSTR("s"), scoreStr, PSTR("")); + +// CenterDialog(kResumeGameDial); + theDial = GetNewDialog(kResumeGameDial, nil, kPutInFront); + if (theDial == nil) + RedAlert(kErrDialogDidntLoad); + SetPort((GrafPtr)theDial); + + ShowWindow(GetDialogWindow(theDial)); + DrawDefaultButton(theDial); + leaving = false; + + while (!leaving) + { + ModalDialog(resumeFilterUPP, &hitWhat); + if ((hitWhat == kSheWantsNewGame) || (hitWhat == kSheWantsResumeGame)) + { + leaving = true; + } + } + DisposeDialog(theDial); + DisposeModalFilterUPP(resumeFilterUPP); + + return (hitWhat); +} + +//-------------------------------------------------------------- DoNotInDemo +// Only compiled for "demo version" of Glider PRO. It brings up aÉ +// dialog that says, essentially, "x" feature is not implemented inÉ +// the demo version. + +#ifdef COMPILEDEMO +void DoNotInDemo (void) +{ + #define kNotInDemoAlert 1037 + short whoCares; + +// CenterAlert(kNotInDemoAlert); + whoCares = Alert(kNotInDemoAlert, nil); +} +#endif + +//-------------------------------------------------------------- HeyYourPissingAHighScore + +void HeyYourPissingAHighScore (void) +{ + #define kNoHighScoreAlert 1046 + short whoCares; + +// CenterAlert(kNoHighScoreAlert); + whoCares = Alert(kNoHighScoreAlert, nil); +} + +//-------------------------------------------------------------- OpenCloseEditWindows +// Function goes through and either closes or opens all the variousÉ +// editing windows (in response to switching in or out of editor). + +void OpenCloseEditWindows (void) +{ + if (theMode == kEditMode) + { + if (houseUnlocked) + { + if (isMapOpen) + OpenMapWindow(); + if (isToolsOpen) + OpenToolsWindow(); + if (isCoordOpen) + OpenCoordWindow(); + } + else + { + CloseMapWindow(); + CloseToolsWindow(); + CloseCoordWindow(); + } + } +} + diff --git a/GpApp/Modes.cpp b/GpApp/Modes.cpp new file mode 100644 index 0000000..03f7a3b --- /dev/null +++ b/GpApp/Modes.cpp @@ -0,0 +1,640 @@ + +//============================================================================ +//---------------------------------------------------------------------------- +// Modes.c +//---------------------------------------------------------------------------- +//============================================================================ + + +#include "Externs.h" +#include "RectUtils.h" + + +short saidFollow; + +extern Rect gliderSrc[]; +extern Rect transRect; +extern short fadeInSequence[], linkedToWhat; +extern short rightClip, leftClip, transRoom; +extern Boolean hasMirror, shadowVisible, firstPlayer, twoPlayerGame; +extern Boolean onePlayerLeft, playerDead; + +//============================================================== Functions +//-------------------------------------------------------------- StartGliderFadingIn + +void StartGliderFadingIn (gliderPtr thisGlider) +{ + if (foilTotal <= 0) + showFoil = false; + + thisGlider->mode = kGliderFadingIn; + thisGlider->whole = thisGlider->dest; + thisGlider->frame = 0; + thisGlider->dontDraw = false; + if (thisGlider->facing == kFaceLeft) + { + thisGlider->src = + gliderSrc[fadeInSequence[thisGlider->frame] + kLeftFadeOffset]; + thisGlider->mask = + gliderSrc[fadeInSequence[thisGlider->frame] + kLeftFadeOffset]; + } + else + { + thisGlider->src = gliderSrc[fadeInSequence[thisGlider->frame]]; + thisGlider->mask = gliderSrc[fadeInSequence[thisGlider->frame]]; + } +} + +//-------------------------------------------------------------- StartGliderTransportingIn + +void StartGliderTransportingIn (gliderPtr thisGlider) +{ + if (foilTotal <= 0) + showFoil = false; + + thisGlider->mode = kGliderTransportingIn; + thisGlider->whole = thisGlider->dest; + thisGlider->frame = 0; + thisGlider->dontDraw = false; + if (thisGlider->facing == kFaceLeft) + { + thisGlider->src = + gliderSrc[fadeInSequence[thisGlider->frame] + kLeftFadeOffset]; + thisGlider->mask = + gliderSrc[fadeInSequence[thisGlider->frame] + kLeftFadeOffset]; + } + else + { + thisGlider->src = gliderSrc[fadeInSequence[thisGlider->frame]]; + thisGlider->mask = gliderSrc[fadeInSequence[thisGlider->frame]]; + } +} + +//-------------------------------------------------------------- StartGliderFadingOut + +void StartGliderFadingOut (gliderPtr thisGlider) +{ + Rect tempBounds; + + if (thisGlider->mode == kGliderFadingOut) + return; + + if (thisGlider->mode == kGliderGoingFoil) + DeckGliderInFoil(thisGlider); + else if (thisGlider->mode == kGliderLosingFoil) + RemoveFoilFromGlider(thisGlider); + + if (RectTall(&thisGlider->dest) > kGliderHigh) + { + tempBounds = thisGlider->dest; + QOffsetRect(&tempBounds, playOriginH, playOriginV); + AddRectToWorkRects(&tempBounds); + if (hasMirror) + { + tempBounds = thisGlider->dest; + QOffsetRect(&tempBounds, playOriginH - 20, playOriginV - 16); + AddRectToWorkRects(&tempBounds); + } + thisGlider->dest.right = thisGlider->dest.left + kGliderWide; + thisGlider->dest.top = thisGlider->dest.bottom - kGliderHigh; + } + thisGlider->mode = kGliderFadingOut; + thisGlider->whole = thisGlider->dest; + thisGlider->frame = kLastFadeSequence - 1; + if (thisGlider->facing == kFaceLeft) + { + thisGlider->src = + gliderSrc[fadeInSequence[thisGlider->frame] + kLeftFadeOffset]; + thisGlider->mask = + gliderSrc[fadeInSequence[thisGlider->frame] + kLeftFadeOffset]; + } + else + { + thisGlider->src = gliderSrc[fadeInSequence[thisGlider->frame]]; + thisGlider->mask = gliderSrc[fadeInSequence[thisGlider->frame]]; + } +} + +//-------------------------------------------------------------- StartGliderGoingUpStairs + +void StartGliderGoingUpStairs (gliderPtr thisGlider) +{ + if (thisGlider->mode == kGliderGoingFoil) + DeckGliderInFoil(thisGlider); + else if (thisGlider->mode == kGliderLosingFoil) + RemoveFoilFromGlider(thisGlider); + + if (thisGlider->mode == kGliderBurning) + thisGlider->frame = kWasBurning; + else + thisGlider->frame = 0; + + thisGlider->mode = kGliderGoingUp; +} + +//-------------------------------------------------------------- StartGliderGoingDownStairs + +void StartGliderGoingDownStairs (gliderPtr thisGlider) +{ + if (thisGlider->mode == kGliderGoingFoil) + DeckGliderInFoil(thisGlider); + else if (thisGlider->mode == kGliderLosingFoil) + RemoveFoilFromGlider(thisGlider); + + if (thisGlider->mode == kGliderBurning) + thisGlider->frame = kWasBurning; + else + thisGlider->frame = 0; + + thisGlider->mode = kGliderGoingDown; + rightClip = GetUpStairsRightEdge(); +} + +//-------------------------------------------------------------- StartGliderMailingIn + +void StartGliderMailingIn (gliderPtr thisGlider, Rect *bounds, hotPtr who) +{ + short topSought, whoLinked; + Byte objLinked; + char wasState; + + PlayPrioritySound(kTransOutSound, kTransOutPriority); + + whoLinked = who->who; + transRoom = masterObjects[whoLinked].roomLink; + objLinked = masterObjects[whoLinked].objectLink; + linkedToWhat = WhatAreWeLinkedTo(transRoom, objLinked); + + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + GetObjectRect(&(*thisHouse)->rooms[transRoom].objects[objLinked], &transRect); + HSetState((Handle)thisHouse, wasState); + + thisGlider->frame = 0; + thisGlider->clip = *bounds; + topSought = bounds->bottom - RectTall(&thisGlider->dest); + thisGlider->clip.top = topSought; +} + +//-------------------------------------------------------------- StartGliderMailingOut + +void StartGliderMailingOut (gliderPtr thisGlider) +{ + if (thisGlider->mode == kGliderGoingFoil) + DeckGliderInFoil(thisGlider); + else if (thisGlider->mode == kGliderLosingFoil) + RemoveFoilFromGlider(thisGlider); + + if (linkedToWhat == kLinkedToLeftMailbox) + { + thisGlider->facing = kFaceLeft; + thisGlider->mode = kGliderMailOutLeft; + thisGlider->src = gliderSrc[2]; + thisGlider->mask = gliderSrc[2]; + } + else + { + thisGlider->facing = kFaceRight; + thisGlider->mode = kGliderMailOutRight; + thisGlider->src = gliderSrc[0]; + thisGlider->mask = gliderSrc[0]; + } + + thisGlider->hVel = 0; + thisGlider->vVel = 0; + thisGlider->hDesiredVel = 0; + thisGlider->vDesiredVel = 0; + thisGlider->tipped = false; + thisGlider->dontDraw = false; +} + +//-------------------------------------------------------------- StartGliderDuctingDown + +void StartGliderDuctingDown (gliderPtr thisGlider, Rect *bounds, hotPtr who) +{ + short leftSought, whoLinked; + Byte objLinked; + char wasState; + + PlayPrioritySound(kTransOutSound, kTransOutPriority); + + if (thisGlider->mode == kGliderGoingFoil) + DeckGliderInFoil(thisGlider); + else if (thisGlider->mode == kGliderLosingFoil) + RemoveFoilFromGlider(thisGlider); + + whoLinked = who->who; + transRoom = masterObjects[whoLinked].roomLink; + objLinked = masterObjects[whoLinked].objectLink; + linkedToWhat = WhatAreWeLinkedTo(transRoom, objLinked); + + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + GetObjectRect(&(*thisHouse)->rooms[transRoom].objects[objLinked], &transRect); + HSetState((Handle)thisHouse, wasState); + + thisGlider->frame = 0; + thisGlider->clip = *bounds; + leftSought = bounds->left + ((RectWide(bounds) - kGliderWide) / 2); + thisGlider->clip.left = leftSought; + + thisGlider->mode = kGliderDuctingDown; +} + +//-------------------------------------------------------------- StartGliderDuctingUp + +void StartGliderDuctingUp (gliderPtr thisGlider, Rect *bounds, hotPtr who) +{ + short leftSought, whoLinked; + Byte objLinked; + char wasState; + + PlayPrioritySound(kTransOutSound, kTransOutPriority); + + if (thisGlider->mode == kGliderGoingFoil) + DeckGliderInFoil(thisGlider); + else if (thisGlider->mode == kGliderLosingFoil) + RemoveFoilFromGlider(thisGlider); + + whoLinked = who->who; + transRoom = masterObjects[whoLinked].roomLink; + objLinked = masterObjects[whoLinked].objectLink; + linkedToWhat = WhatAreWeLinkedTo(transRoom, objLinked); + + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + GetObjectRect(&(*thisHouse)->rooms[transRoom].objects[objLinked], &transRect); + HSetState((Handle)thisHouse, wasState); + + thisGlider->frame = 0; + thisGlider->clip = *bounds; + leftSought = bounds->left + ((RectWide(bounds) - kGliderWide) / 2); + thisGlider->clip.left = leftSought; + + thisGlider->mode = kGliderDuctingUp; +} + +//-------------------------------------------------------------- StartGliderDuctingIn + +void StartGliderDuctingIn (gliderPtr thisGlider) +{ + thisGlider->mode = kGliderDuctingIn; + thisGlider->whole = thisGlider->dest; + thisGlider->dontDraw = false; +} + +//-------------------------------------------------------------- StartGliderTransporting + +void StartGliderTransporting (gliderPtr thisGlider, hotPtr who) +{ + short whoLinked; + Byte objLinked; + char wasState; + + PlayPrioritySound(kTransOutSound, kTransOutPriority); + + if (thisGlider->mode == kGliderGoingFoil) + DeckGliderInFoil(thisGlider); + else if (thisGlider->mode == kGliderLosingFoil) + RemoveFoilFromGlider(thisGlider); + + whoLinked = who->who; + transRoom = masterObjects[whoLinked].roomLink; + objLinked = masterObjects[whoLinked].objectLink; + linkedToWhat = WhatAreWeLinkedTo(transRoom, objLinked); + + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + GetObjectRect(&(*thisHouse)->rooms[transRoom].objects[objLinked], &transRect); + HSetState((Handle)thisHouse, wasState); + + thisGlider->dest.right = thisGlider->dest.left + kGliderWide; + thisGlider->dest.bottom = thisGlider->dest.top + kGliderHigh; + thisGlider->destShadow.right = thisGlider->destShadow.left + kGliderWide; + thisGlider->destShadow.bottom = thisGlider->destShadow.top + kShadowHigh; + thisGlider->mode = kGliderTransporting; + thisGlider->whole = thisGlider->dest; + thisGlider->frame = kLastFadeSequence - 1; + if (thisGlider->facing == kFaceLeft) + { + thisGlider->src = + gliderSrc[fadeInSequence[thisGlider->frame] + kLeftFadeOffset]; + thisGlider->mask = + gliderSrc[fadeInSequence[thisGlider->frame] + kLeftFadeOffset]; + } + else + { + thisGlider->src = gliderSrc[fadeInSequence[thisGlider->frame]]; + thisGlider->mask = gliderSrc[fadeInSequence[thisGlider->frame]]; + } +} + +//-------------------------------------------------------------- FlagGliderNormal + +void FlagGliderNormal (gliderPtr thisGlider) +{ + thisGlider->dest.right = thisGlider->dest.left + kGliderWide; + thisGlider->dest.bottom = thisGlider->dest.top + kGliderHigh; + thisGlider->destShadow.right = thisGlider->destShadow.left + kGliderWide; + thisGlider->destShadow.bottom = thisGlider->destShadow.top + kShadowHigh; + thisGlider->mode = kGliderNormal; + if (thisGlider->facing == kFaceLeft) + { + thisGlider->src = gliderSrc[2]; + thisGlider->mask = gliderSrc[2]; + } + else + { + thisGlider->src = gliderSrc[0]; + thisGlider->mask = gliderSrc[0]; + } + thisGlider->hVel = 0; + thisGlider->vVel = 0; + thisGlider->hDesiredVel = 0; + thisGlider->vDesiredVel = 0; + thisGlider->tipped = false; + thisGlider->ignoreLeft = false; + thisGlider->ignoreRight = false; + thisGlider->ignoreGround = false; + thisGlider->dontDraw = false; + thisGlider->frame = 0; + shadowVisible = IsShadowVisible(); +} + +//-------------------------------------------------------------- FlagGliderShredding + +void FlagGliderShredding (gliderPtr thisGlider, Rect *bounds) +{ + PlayPrioritySound(kCaughtFireSound, kCaughtFirePriority); + thisGlider->dest.left = bounds->left + 36; + thisGlider->dest.right = thisGlider->dest.left + kGliderWide; + thisGlider->dest.bottom = thisGlider->dest.top + kGliderHigh; + if (thisGlider->dest.left > thisGlider->whole.left) + { + thisGlider->whole.right = thisGlider->dest.right; + thisGlider->wholeShadow.right = thisGlider->dest.right; + } + else + { + thisGlider->whole.left = thisGlider->dest.left; + thisGlider->wholeShadow.left = thisGlider->dest.left; + } + thisGlider->destShadow.left = thisGlider->dest.left; + thisGlider->destShadow.right = thisGlider->destShadow.left + kGliderWide; + thisGlider->destShadow.bottom = thisGlider->destShadow.top + kShadowHigh; + thisGlider->mode = kGliderShredding; + if (thisGlider->facing == kFaceLeft) + { + thisGlider->src = gliderSrc[2]; + thisGlider->mask = gliderSrc[2]; + } + else + { + thisGlider->src = gliderSrc[0]; + thisGlider->mask = gliderSrc[0]; + } + thisGlider->hVel = 0; + thisGlider->vVel = 0; + thisGlider->hDesiredVel = 0; + thisGlider->vDesiredVel = 0; + thisGlider->frame = bounds->bottom - 3; + thisGlider->tipped = false; +} + +//-------------------------------------------------------------- FlagGliderBurning + +void FlagGliderBurning (gliderPtr thisGlider) +{ + #define kFramesToBurn 60 + + PlayPrioritySound(kCaughtFireSound, kCaughtFirePriority); + + thisGlider->dest.right = thisGlider->dest.left + kGliderWide; + thisGlider->dest.top = thisGlider->dest.bottom - kGliderBurningHigh; + thisGlider->destShadow.right = thisGlider->destShadow.left + kGliderWide; + thisGlider->destShadow.bottom = thisGlider->destShadow.top + kShadowHigh; + thisGlider->mode = kGliderBurning; + if (thisGlider->facing == kFaceLeft) + { + thisGlider->src = gliderSrc[25]; + thisGlider->mask = gliderSrc[25]; + } + else + { + thisGlider->src = gliderSrc[21]; + thisGlider->mask = gliderSrc[21]; + } + thisGlider->hVel = 0; + thisGlider->vVel = 0; + thisGlider->hDesiredVel = 0; + thisGlider->vDesiredVel = 0; + thisGlider->frame = 0; + thisGlider->wasMode = kFramesToBurn; // used to count down burning + thisGlider->tipped = false; +} + +//-------------------------------------------------------------- FlagGliderFaceLeft + +void FlagGliderFaceLeft (gliderPtr thisGlider) +{ + thisGlider->mode = kGliderFaceLeft; + thisGlider->frame = kLastAboutFaceFrame; + thisGlider->src = gliderSrc[kLastAboutFaceFrame]; + thisGlider->mask = gliderSrc[kLastAboutFaceFrame]; +} + +//-------------------------------------------------------------- FlagGliderFaceRight + +void FlagGliderFaceRight (gliderPtr thisGlider) +{ + thisGlider->mode = kGliderFaceRight; + thisGlider->frame = kFirstAboutFaceFrame; + thisGlider->src = gliderSrc[kFirstAboutFaceFrame]; + thisGlider->mask = gliderSrc[kFirstAboutFaceFrame]; +} + +//-------------------------------------------------------------- FlagGliderInLimbo + +void FlagGliderInLimbo (gliderPtr thisGlider, Boolean sayIt) +{ + thisGlider->wasMode = thisGlider->mode; + thisGlider->mode = kGliderInLimbo; + if ((sayIt) && (saidFollow < 3)) + { + PlayPrioritySound(kFollowSound, kFollowPriority); + saidFollow++; + } + firstPlayer = thisGlider->which; +} + +//-------------------------------------------------------------- UndoGliderLimbo + +void UndoGliderLimbo (gliderPtr thisGlider) +{ + if ((twoPlayerGame) && (onePlayerLeft) && (thisGlider->which == playerDead)) + return; + + if (thisGlider->mode == kGliderInLimbo) + thisGlider->mode = thisGlider->wasMode; + thisGlider->dontDraw = false; +} + +//-------------------------------------------------------------- ToggleGliderFacing + +void ToggleGliderFacing (gliderPtr thisGlider) +{ + if (thisGlider->mode != kGliderNormal) + return; + + if (thisGlider->facing == kFaceLeft) + FlagGliderFaceRight(thisGlider); + else + FlagGliderFaceLeft(thisGlider); +} + +//-------------------------------------------------------------- InsureGliderFacingRight + +void InsureGliderFacingRight (gliderPtr thisGlider) +{ + if ((twoPlayerGame) && (onePlayerLeft) && (thisGlider->which == playerDead)) + return; + + if ((thisGlider->facing == kFaceLeft) && (thisGlider->mode != kGliderBurning)) + FlagGliderFaceRight(thisGlider); +} + +//-------------------------------------------------------------- InsureGliderFacingLeft + +void InsureGliderFacingLeft (gliderPtr thisGlider) +{ + if ((twoPlayerGame) && (onePlayerLeft) && (thisGlider->which == playerDead)) + return; + + if ((thisGlider->facing == kFaceRight) && (thisGlider->mode != kGliderBurning)) + FlagGliderFaceLeft(thisGlider); +} + +//-------------------------------------------------------------- ReadyGliderForTripUpStairs + +void ReadyGliderForTripUpStairs (gliderPtr thisGlider) +{ + #define kVGliderAppearsComingUp 100 + + if ((twoPlayerGame) && (thisGlider->which == playerDead) && (onePlayerLeft)) + return; + + thisGlider->facing = kFaceLeft; + thisGlider->mode = kGliderComingUp; + thisGlider->src = gliderSrc[2]; + thisGlider->mask = gliderSrc[2]; + thisGlider->hVel = 0; + thisGlider->vVel = 0; + thisGlider->hDesiredVel = 0; + thisGlider->vDesiredVel = 0; + thisGlider->tipped = false; + + rightClip = GetUpStairsRightEdge(); + thisGlider->dest = thisGlider->src; + ZeroRectCorner(&thisGlider->dest); + QOffsetRect(&thisGlider->dest, rightClip, kVGliderAppearsComingUp); + thisGlider->whole = thisGlider->dest; + thisGlider->destShadow.left = thisGlider->dest.left; + thisGlider->destShadow.right = thisGlider->dest.right; + thisGlider->wholeShadow = thisGlider->destShadow; + + FinishGliderUpStairs(thisGlider); +} + +//-------------------------------------------------------------- ReadyGliderForTripDownStairs + +void ReadyGliderForTripDownStairs (gliderPtr thisGlider) +{ + #define kVGliderAppearsComingDown 100 + + if ((twoPlayerGame) && (thisGlider->which == playerDead) && (onePlayerLeft)) + return; + + thisGlider->facing = kFaceRight; + thisGlider->mode = kGliderComingDown; + thisGlider->src = gliderSrc[0]; + thisGlider->mask = gliderSrc[0]; + thisGlider->hVel = 0; + thisGlider->vVel = 0; + thisGlider->hDesiredVel = 0; + thisGlider->vDesiredVel = 0; + thisGlider->tipped = false; + + leftClip = GetDownStairsLeftEdge(); + thisGlider->dest = thisGlider->src; + ZeroRectCorner(&thisGlider->dest); + QOffsetRect(&thisGlider->dest, leftClip - kGliderWide, kVGliderAppearsComingDown); + thisGlider->whole = thisGlider->dest; + thisGlider->destShadow.left = thisGlider->dest.left; + thisGlider->destShadow.right = thisGlider->dest.right; + thisGlider->wholeShadow = thisGlider->destShadow; + + FinishGliderDownStairs(thisGlider); +} + +//-------------------------------------------------------------- StartGliderFoilGoing + +void StartGliderFoilGoing (gliderPtr thisGlider) +{ + if ((thisGlider->mode == kGliderGoingFoil) || (thisGlider->mode == kGliderInLimbo)) + return; + + QuickFoilRefresh(false); + + thisGlider->mode = kGliderGoingFoil; + thisGlider->whole = thisGlider->dest; + thisGlider->frame = 0; + if (thisGlider->facing == kFaceLeft) + { + thisGlider->src = gliderSrc[(10 - thisGlider->frame) + kLeftFadeOffset]; + thisGlider->mask = gliderSrc[(10 - thisGlider->frame) + kLeftFadeOffset]; + } + else + { + thisGlider->src = gliderSrc[10 - thisGlider->frame]; + thisGlider->mask = gliderSrc[10 - thisGlider->frame]; + } +} + +//-------------------------------------------------------------- StartGliderFoilLosing + +void StartGliderFoilLosing (gliderPtr thisGlider) +{ + if ((thisGlider->mode == kGliderLosingFoil) || + (thisGlider->mode == kGliderInLimbo)) + return; + + QuickFoilRefresh(false); + PlayPrioritySound(kFizzleSound, kFizzlePriority); + + thisGlider->mode = kGliderLosingFoil; + thisGlider->whole = thisGlider->dest; + thisGlider->frame = 0; + if (thisGlider->facing == kFaceLeft) + { + thisGlider->src = gliderSrc[(10 - thisGlider->frame) + kLeftFadeOffset]; + thisGlider->mask = gliderSrc[(10 - thisGlider->frame) + kLeftFadeOffset]; + } + else + { + thisGlider->src = gliderSrc[10 - thisGlider->frame]; + thisGlider->mask = gliderSrc[10 - thisGlider->frame]; + } +} + +//-------------------------------------------------------------- TagGliderIdle + +void TagGliderIdle (gliderPtr thisGlider) +{ + if ((twoPlayerGame) && (onePlayerLeft) && (thisGlider->which == playerDead)) + return; + + thisGlider->wasMode = thisGlider->mode; + thisGlider->mode = kGliderIdle; + thisGlider->hVel = 30; // used for 30 frame delay +} + diff --git a/GpApp/Music.cpp b/GpApp/Music.cpp new file mode 100644 index 0000000..f6d9962 --- /dev/null +++ b/GpApp/Music.cpp @@ -0,0 +1,416 @@ + +//============================================================================ +//---------------------------------------------------------------------------- +// Music.c +//---------------------------------------------------------------------------- +//============================================================================ + + +#include "PLResources.h" +#include "PLSound.h" +#include "Environ.h" +#include "Externs.h" + + +#define kBaseBufferMusicID 2000 +#define kMaxMusic 7 +#define kLastMusicPiece 16 +#define kLastGamePiece 6 + + +void MusicCallBack (SndChannelPtr, SndCommand *); +OSErr LoadMusicSounds (void); +OSErr DumpMusicSounds (void); +OSErr OpenMusicChannel (void); +OSErr CloseMusicChannel (void); + + +SndCallBackUPP musicCallBackUPP; +SndChannelPtr musicChannel; +Ptr theMusicData[kMaxMusic]; +short musicSoundID, musicCursor; +short musicScore[kLastMusicPiece]; +short gameScore[kLastGamePiece]; +short musicMode; +Boolean isMusicOn, isPlayMusicIdle, isPlayMusicGame; +Boolean failedMusic, dontLoadMusic; + +extern Boolean isSoundOn; + + +//============================================================== Functions +//-------------------------------------------------------------- StartMusic + +OSErr StartMusic (void) +{ + SndCommand theCommand; + OSErr theErr; + short soundVolume; + + theErr = noErr; + + if (dontLoadMusic) + return(theErr); + + UnivGetSoundVolume(&soundVolume, thisMac.hasSM3); + + if ((soundVolume != 0) && (!failedMusic)) + { + theCommand.cmd = bufferCmd; + theCommand.param1 = 0; + theCommand.param2 = (intptr_t)(theMusicData[musicSoundID]); + theErr = SndDoCommand(musicChannel, &theCommand, false); + if (theErr != noErr) + return (theErr); + + // GP: No idea what "1964" means + theCommand.cmd = nullCmd; + theCommand.param1 = 1964; + theCommand.param2 = 0; + theErr = SndDoCommand(musicChannel, &theCommand, false); + if (theErr != noErr) + return (theErr); + + musicCursor++; + if (musicCursor >= kLastMusicPiece) + musicCursor = 0; + musicSoundID = musicScore[musicCursor]; + + theCommand.cmd = bufferCmd; + theCommand.param1 = 0; + theCommand.param2 = (intptr_t)(theMusicData[musicSoundID]); + theErr = SndDoCommand(musicChannel, &theCommand, false); + if (theErr != noErr) + return (theErr); + + theCommand.cmd = callBackCmd; + theCommand.param1 = 0; + theCommand.param2 = 0; + theErr = SndDoCommand(musicChannel, &theCommand, false); + + isMusicOn = true; + } + + return (theErr); +} + +//-------------------------------------------------------------- StopTheMusic + +void StopTheMusic (void) +{ + SndCommand theCommand; + OSErr theErr; + + if (dontLoadMusic) + return; + + theErr = noErr; + if ((isMusicOn) && (!failedMusic)) + { + theCommand.cmd = flushCmd; + theCommand.param1 = 0; + theCommand.param2 = 0L; + theErr = SndDoImmediate(musicChannel, &theCommand); + + theCommand.cmd = quietCmd; + theCommand.param1 = 0; + theCommand.param2 = 0L; + theErr = SndDoImmediate(musicChannel, &theCommand); + + isMusicOn = false; + } +} + +//-------------------------------------------------------------- ToggleMusicWhilePlaying + +void ToggleMusicWhilePlaying (void) +{ + OSErr theErr; + + if (dontLoadMusic) + return; + + if (isPlayMusicGame) + { + if (!isMusicOn) + theErr = StartMusic(); + } + else + { + if (isMusicOn) + StopTheMusic(); + } +} + +//-------------------------------------------------------------- SetMusicalPiece + +void SetMusicalMode (short newMode) +{ + if (dontLoadMusic) + return; + + switch (newMode) + { + case kKickGameScoreMode: + musicCursor = 2; + break; + + case kProdGameScoreMode: + musicCursor = -1; + break; + + default: + musicMode = newMode; + musicCursor = 0; + break; + } +} + +//-------------------------------------------------------------- MusicCallBack + +void MusicCallBack (SndChannelPtr theChannel, SndCommand *theCommand) +{ + OSErr theErr; + +// gameA5 = theCommand.param2; +// thisA5 = SetA5(gameA5); + + switch (musicMode) + { + case kPlayGameScoreMode: + musicCursor++; + if (musicCursor >= kLastGamePiece) + musicCursor = 1; + musicSoundID = gameScore[musicCursor]; + if (musicSoundID < 0) + { + musicCursor += musicSoundID; + musicSoundID = gameScore[musicCursor]; + } + break; + + case kPlayWholeScoreMode: + musicCursor++; + if (musicCursor >= kLastMusicPiece - 1) + musicCursor = 0; + musicSoundID = musicScore[musicCursor]; + break; + + default: + musicSoundID = musicMode; + break; + } + + theCommand->cmd = bufferCmd; + theCommand->param1 = 0; + theCommand->param2 = (intptr_t)(theMusicData[musicSoundID]); + theErr = SndDoCommand(musicChannel, theCommand, false); + + theCommand->cmd = callBackCmd; + theCommand->param1 = 0; + theCommand->param2 = 0; + theErr = SndDoCommand(musicChannel, theCommand, false); +} + +//-------------------------------------------------------------- LoadMusicSounds + +OSErr LoadMusicSounds (void) +{ + Handle theSound; + long soundDataSize; + OSErr theErr; + short i; + + theErr = noErr; + + for (i = 0; i < kMaxMusic; i++) + theMusicData[i] = nil; + + for (i = 0; i < kMaxMusic; i++) + { + theSound = GetResource('snd ', i + kBaseBufferMusicID); + if (theSound == nil) + return (MemError()); + + HLock(theSound); + soundDataSize = GetHandleSize(theSound) - 20L; + HUnlock(theSound); + + theMusicData[i] = NewPtr(soundDataSize); + if (theMusicData[i] == nil) + return (MemError()); + + HLock(theSound); + BlockMove((Ptr)(static_cast(*theSound) + 20L), theMusicData[i], soundDataSize); + ReleaseResource(theSound); + } + return (theErr); +} + +//-------------------------------------------------------------- DumpMusicSounds + +OSErr DumpMusicSounds (void) +{ + OSErr theErr; + short i; + + theErr = noErr; + + for (i = 0; i < kMaxMusic; i++) + { + if (theMusicData[i] != nil) + DisposePtr(theMusicData[i]); + theMusicData[i] = nil; + } + + return (theErr); +} + +//-------------------------------------------------------------- OpenMusicChannel + +OSErr OpenMusicChannel (void) +{ + OSErr theErr; + + musicCallBackUPP = NewSndCallBackProc(MusicCallBack); + + theErr = noErr; + + if (musicChannel != nil) + return (theErr); + + musicChannel = nil; + theErr = SndNewChannel(&musicChannel, + sampledSynth, initNoInterp + initMono, + (SndCallBackUPP)musicCallBackUPP); + + return (theErr); +} + +//-------------------------------------------------------------- CloseMusicChannel + +OSErr CloseMusicChannel (void) +{ + OSErr theErr; + + theErr = noErr; + + if (musicChannel != nil) + theErr = SndDisposeChannel(musicChannel, true); + musicChannel = nil; + + DisposeSndCallBackUPP(musicCallBackUPP); + + return (theErr); +} + +//-------------------------------------------------------------- InitMusic + +void InitMusic (void) +{ + OSErr theErr; + + if (dontLoadMusic) + return; + + musicChannel = nil; + + failedMusic = false; + isMusicOn = false; + theErr = LoadMusicSounds(); + if (theErr != noErr) + { + YellowAlert(kYellowNoMusic, theErr); + failedMusic = true; + return; + } + theErr = OpenMusicChannel(); + + musicScore[0] = 0; + musicScore[1] = 1; + musicScore[2] = 2; + musicScore[3] = 3; + musicScore[4] = 4; + musicScore[5] = 4; + musicScore[6] = 0; + musicScore[7] = 1; + musicScore[8] = 2; + musicScore[9] = 3; + musicScore[10] = kPlayChorus; + musicScore[11] = kPlayChorus; + musicScore[12] = kPlayRefrainSparse1; + musicScore[13] = kPlayRefrainSparse2; + musicScore[14] = kPlayChorus; + musicScore[15] = kPlayChorus; + + gameScore[0] = kPlayRefrainSparse2; + gameScore[1] = kPlayRefrainSparse1; + gameScore[2] = -1; + gameScore[3] = kPlayRefrainSparse2; + gameScore[4] = kPlayChorus; + gameScore[5] = kPlayChorus; + + musicCursor = 0; + musicSoundID = musicScore[musicCursor]; + musicMode = kPlayWholeScoreMode; + + if (isPlayMusicIdle) + { + theErr = StartMusic(); + if (theErr != noErr) + { + YellowAlert(kYellowNoMusic, theErr); + failedMusic = true; + } + } +} + +//-------------------------------------------------------------- KillMusic + +void KillMusic (void) +{ + OSErr theErr; + + if (dontLoadMusic) + return; + + theErr = DumpMusicSounds(); + theErr = CloseMusicChannel(); +} + +//-------------------------------------------------------------- MusicBytesNeeded + +long MusicBytesNeeded (void) +{ + Handle theSound; + long totalBytes; + short i; + + totalBytes = 0L; + SetResLoad(false); + for (i = 0; i < kMaxMusic; i++) + { + theSound = GetResource('snd ', i + kBaseBufferMusicID); + if (theSound == nil) + { + SetResLoad(true); + return ((long)ResError()); + } + totalBytes += GetMaxResourceSize(theSound); +// ReleaseResource(theSound); + } + SetResLoad(true); + return totalBytes; +} + +//-------------------------------------------------------------- TellHerNoMusic + +void TellHerNoMusic (void) +{ + #define kNoMemForMusicAlert 1038 + short hitWhat; + +// CenterAlert(kNoMemForMusicAlert); + hitWhat = Alert(kNoMemForMusicAlert, nil); +} + diff --git a/GpApp/ObjectAdd.cpp b/GpApp/ObjectAdd.cpp new file mode 100644 index 0000000..4008c61 --- /dev/null +++ b/GpApp/ObjectAdd.cpp @@ -0,0 +1,1084 @@ + +//============================================================================ +//---------------------------------------------------------------------------- +// ObjectAdd.c +//---------------------------------------------------------------------------- +//============================================================================ + + +#include "PLToolUtils.h" +#include "Externs.h" +#include "ObjectEdit.h" +#include "RectUtils.h" + + +#define kNoMoreObjectsAlert 1008 +#define kNoMoreSpecialAlert 1028 +#define kMaxSoundTriggers 1 +#define kMaxStairs 1 +#define kMouseholeBottom 295 +#define kFireplaceBottom 297 +#define kManholeSits 322 +#define kGrecoVentTop 303 +#define kSewerBlowerTop 292 + + +short FindEmptyObjectSlot (void); +short HowManyCandleObjects (void); +short HowManyTikiObjects (void); +short HowManyBBQObjects (void); +short HowManyCuckooObjects (void); +short HowManyBandsObjects (void); +short HowManyGreaseObjects (void); +short HowManyStarsObjects (void); +short HowManySoundObjects (void); +short HowManyUpStairsObjects (void); +short HowManyDownStairsObjects (void); +short HowManyShredderObjects (void); +short HowManyDynamicObjects (void); +void ShoutNoMoreSpecialObjects (void); + + +short wasFlower; + + +//============================================================== Functions +//-------------------------------------------------------------- AddNewObject + +Boolean AddNewObject (Point where, short what, Boolean showItNow) +{ + KeyMap theseKeys; + Rect srcRect, newRect; + short direction, dist; + Boolean handled, drawWholeRoom; + +#ifndef COMPILEDEMO + + objActive = FindEmptyObjectSlot(); + if (objActive == -1) + { + ShoutNoMoreObjects(); + return (false); + } + + drawWholeRoom = false; + + switch (what) + { + case kFloorVent: + case kFloorBlower: + case kSewerGrate: + case kTaper: + case kCandle: + case kStubby: + case kTiki: + case kBBQ: + case kInvisBlower: + case kGrecoVent: + case kSewerBlower: + case kLiftArea: + if (((what == kTaper) || (what == kCandle) || (what == kStubby)) && + (HowManyCandleObjects() >= kMaxCandles)) + { + ShoutNoMoreSpecialObjects(); + return (false); + } + else if ((what == kTiki) && (HowManyTikiObjects() >= kMaxTikis)) + { + ShoutNoMoreSpecialObjects(); + return (false); + } + else if ((what == kBBQ) && (HowManyBBQObjects() >= kMaxCoals)) + { + ShoutNoMoreSpecialObjects(); + return (false); + } + srcRect = srcRects[what]; + thisRoom->objects[objActive].data.a.topLeft.h = where.h - HalfRectWide(&srcRect); + QSetRect(&newRect, 0, 0, RectWide(&srcRect), RectTall(&srcRect)); + if (what == kFloorVent) + thisRoom->objects[objActive].data.a.topLeft.v = kFloorVentTop; + else if (what == kFloorBlower) + thisRoom->objects[objActive].data.a.topLeft.v = kFloorBlowerTop; + else if ((what == kTaper) || (what == kCandle) || (what == kStubby) || + (what == kTiki) || (what == kBBQ) || (what == kInvisBlower) || + (what == kLiftArea)) + thisRoom->objects[objActive].data.a.topLeft.v = where.v - HalfRectTall(&srcRect); + else if (what == kGrecoVent) + thisRoom->objects[objActive].data.a.topLeft.v = kGrecoVentTop; + else if (what == kSewerBlower) + thisRoom->objects[objActive].data.a.topLeft.v = kSewerBlowerTop; + QOffsetRect(&newRect, thisRoom->objects[objActive].data.a.topLeft.h, + thisRoom->objects[objActive].data.a.topLeft.v); + thisRoom->objects[objActive].data.a.distance = 64; + thisRoom->objects[objActive].data.a.initial = true; + thisRoom->objects[objActive].data.a.state = true; + thisRoom->objects[objActive].data.a.vector = 0x01; + if (what == kLiftArea) + thisRoom->objects[objActive].data.a.tall = 0x10; + else + thisRoom->objects[objActive].data.a.tall = 0x00; + break; + + case kCeilingVent: + case kCeilingBlower: + srcRect = srcRects[what]; + thisRoom->objects[objActive].data.a.topLeft.h = where.h - HalfRectWide(&srcRect); + QSetRect(&newRect, 0, 0, RectWide(&srcRect), RectTall(&srcRect)); + if (what == kCeilingVent) + thisRoom->objects[objActive].data.a.topLeft.v = kCeilingVentTop; + else if (what == kCeilingBlower) + thisRoom->objects[objActive].data.a.topLeft.v = kCeilingBlowerTop; + QOffsetRect(&newRect, thisRoom->objects[objActive].data.a.topLeft.h, + thisRoom->objects[objActive].data.a.topLeft.v); + thisRoom->objects[objActive].data.a.distance = 32; + thisRoom->objects[objActive].data.a.initial = true; + thisRoom->objects[objActive].data.a.state = true; + thisRoom->objects[objActive].data.a.vector = 0x04; + break; + + case kLeftFan: + thisRoom->objects[objActive].data.a.topLeft.h = + where.h - HalfRectWide(&srcRects[kLeftFan]); + thisRoom->objects[objActive].data.a.topLeft.v = + where.v - HalfRectTall(&srcRects[kLeftFan]); + QSetRect(&newRect, 0, 0, RectWide(&srcRects[kLeftFan]), + RectTall(&srcRects[kLeftFan])); + QOffsetRect(&newRect, thisRoom->objects[objActive].data.a.topLeft.h, + thisRoom->objects[objActive].data.a.topLeft.v); + thisRoom->objects[objActive].data.a.distance = 32; + thisRoom->objects[objActive].data.a.initial = true; + thisRoom->objects[objActive].data.a.state = true; + thisRoom->objects[objActive].data.a.vector = 0x08; + break; + + case kRightFan: + thisRoom->objects[objActive].data.a.topLeft.h = + where.h - HalfRectWide(&srcRects[kRightFan]); + thisRoom->objects[objActive].data.a.topLeft.v = + where.v - HalfRectTall(&srcRects[kRightFan]); + QSetRect(&newRect, 0, 0, RectWide(&srcRects[kRightFan]), RectTall(&srcRects[kRightFan])); + QOffsetRect(&newRect, thisRoom->objects[objActive].data.a.topLeft.h, + thisRoom->objects[objActive].data.a.topLeft.v); + thisRoom->objects[objActive].data.a.distance = 32; + thisRoom->objects[objActive].data.a.initial = true; + thisRoom->objects[objActive].data.a.state = true; + thisRoom->objects[objActive].data.a.vector = 0x02; + break; + + case kTable: + case kShelf: + case kCabinet: + case kFilingCabinet: + case kWasteBasket: + case kMilkCrate: + case kCounter: + case kDresser: + case kDeckTable: + case kStool: + case kTrunk: + case kInvisObstacle: + case kBooks: + case kInvisBounce: + newRect = srcRects[what]; + CenterRectOnPoint(&newRect, where); + if (what == kCounter) + newRect.bottom = kCounterBottom; + else if (what == kDresser) + newRect.bottom = kDresserBottom; + thisRoom->objects[objActive].data.b.bounds = newRect; + thisRoom->objects[objActive].data.b.pict = 0; + break; + + case kManhole: + newRect = srcRects[kManhole]; + CenterRectOnPoint(&newRect, where); + newRect.left = (((newRect.left - 3) / 64) * 64) + 3; + newRect.right = newRect.left + RectWide(&srcRects[kManhole]); + newRect.bottom = kManholeSits; + newRect.top = newRect.bottom - RectTall(&srcRects[kManhole]); + thisRoom->objects[objActive].data.b.bounds = newRect; + thisRoom->objects[objActive].data.b.pict = 0; + break; + + case kRedClock: + case kBlueClock: + case kYellowClock: + case kCuckoo: + case kPaper: + case kBattery: + case kBands: + case kFoil: + case kStar: + case kSparkle: + case kHelium: + if ((what == kCuckoo) && (HowManyCuckooObjects() >= kMaxPendulums)) + { + ShoutNoMoreSpecialObjects(); + return (false); + } + else if ((what == kBands) && (HowManyBandsObjects() >= kMaxRubberBands)) + { + ShoutNoMoreSpecialObjects(); + return (false); + } + else if ((what == kStar) && (HowManyStarsObjects() >= kMaxStars)) + { + ShoutNoMoreSpecialObjects(); + return (false); + } + else if ((what == kSparkle) && (HowManyDynamicObjects() >= kMaxDynamicObs)) + { + ShoutNoMoreSpecialObjects(); + return (false); + } + thisRoom->objects[objActive].data.c.topLeft.h = + where.h - HalfRectWide(&srcRects[what]); + thisRoom->objects[objActive].data.c.topLeft.v = + where.v - HalfRectTall(&srcRects[what]); + QSetRect(&newRect, 0, 0, RectWide(&srcRects[what]), + RectTall(&srcRects[what])); + QOffsetRect(&newRect, thisRoom->objects[objActive].data.c.topLeft.h, + thisRoom->objects[objActive].data.c.topLeft.v); + thisRoom->objects[objActive].data.c.length = 0; + thisRoom->objects[objActive].data.c.points = 0; + thisRoom->objects[objActive].data.c.state = true; + thisRoom->objects[objActive].data.c.initial = true; + break; + + case kGreaseRt: + case kGreaseLf: + if (HowManyGreaseObjects() >= kMaxGrease) + { + ShoutNoMoreSpecialObjects(); + return (false); + } + thisRoom->objects[objActive].data.c.topLeft.h = + where.h - HalfRectWide(&srcRects[what]); + thisRoom->objects[objActive].data.c.topLeft.v = + where.v - HalfRectTall(&srcRects[what]); + QSetRect(&newRect, 0, 0, RectWide(&srcRects[what]), RectTall(&srcRects[what])); + QOffsetRect(&newRect, thisRoom->objects[objActive].data.c.topLeft.h, + thisRoom->objects[objActive].data.c.topLeft.v); + thisRoom->objects[objActive].data.c.length = 64; + thisRoom->objects[objActive].data.c.points = 0; + thisRoom->objects[objActive].data.c.state = true; + thisRoom->objects[objActive].data.c.initial = true; + break; + + case kInvisBonus: + thisRoom->objects[objActive].data.c.topLeft.h = + where.h - HalfRectWide(&srcRects[what]); + thisRoom->objects[objActive].data.c.topLeft.v = + where.v - HalfRectTall(&srcRects[what]); + QSetRect(&newRect, 0, 0, RectWide(&srcRects[what]), RectTall(&srcRects[what])); + QOffsetRect(&newRect, thisRoom->objects[objActive].data.c.topLeft.h, + thisRoom->objects[objActive].data.c.topLeft.v); + thisRoom->objects[objActive].data.c.length = 0; + thisRoom->objects[objActive].data.c.points = 100; + thisRoom->objects[objActive].data.c.state = true; + thisRoom->objects[objActive].data.c.initial = true; + break; + + case kSlider: + thisRoom->objects[objActive].data.c.topLeft.h = + where.h - HalfRectWide(&srcRects[what]); + thisRoom->objects[objActive].data.c.topLeft.v = + where.v - HalfRectTall(&srcRects[what]); + QSetRect(&newRect, 0, 0, RectWide(&srcRects[what]), RectTall(&srcRects[what])); + QOffsetRect(&newRect, thisRoom->objects[objActive].data.c.topLeft.h, + thisRoom->objects[objActive].data.c.topLeft.v); + thisRoom->objects[objActive].data.c.length = 64; + thisRoom->objects[objActive].data.c.points = 0; + thisRoom->objects[objActive].data.c.state = true; + thisRoom->objects[objActive].data.c.initial = true; + break; + + case kUpStairs: + case kDownStairs: + if ((what == kUpStairs) && (HowManyUpStairsObjects() >= kMaxStairs)) + { + ShoutNoMoreSpecialObjects(); + return (false); + } + else if ((what == kDownStairs) && (HowManyDownStairsObjects() >= kMaxStairs)) + { + ShoutNoMoreSpecialObjects(); + return (false); + } + thisRoom->objects[objActive].data.d.topLeft.h = + where.h - HalfRectWide(&srcRects[what]); + thisRoom->objects[objActive].data.d.topLeft.v = kStairsTop; + QSetRect(&newRect, 0, 0, RectWide(&srcRects[what]), + RectTall(&srcRects[what])); + QOffsetRect(&newRect, thisRoom->objects[objActive].data.d.topLeft.h, + thisRoom->objects[objActive].data.d.topLeft.v); + thisRoom->objects[objActive].data.d.tall = 0; + thisRoom->objects[objActive].data.d.where = -1; + thisRoom->objects[objActive].data.d.who = 255; + thisRoom->objects[objActive].data.d.wide = 0; + break; + + case kMailboxLf: + case kMailboxRt: + thisRoom->objects[objActive].data.d.topLeft.h = + where.h - HalfRectWide(&srcRects[what]); + thisRoom->objects[objActive].data.d.topLeft.v = + where.v - HalfRectTall(&srcRects[what]); + QSetRect(&newRect, 0, 0, RectWide(&srcRects[what]), + RectTall(&srcRects[what])); + QOffsetRect(&newRect, thisRoom->objects[objActive].data.d.topLeft.h, + thisRoom->objects[objActive].data.d.topLeft.v); + thisRoom->objects[objActive].data.d.tall = 0; + thisRoom->objects[objActive].data.d.where = -1; + thisRoom->objects[objActive].data.d.who = 255; + thisRoom->objects[objActive].data.d.wide = 0; + break; + + case kFloorTrans: + thisRoom->objects[objActive].data.d.topLeft.h = + where.h - HalfRectWide(&srcRects[what]); + thisRoom->objects[objActive].data.d.topLeft.v = kFloorTransTop; + QSetRect(&newRect, 0, 0, RectWide(&srcRects[what]), + RectTall(&srcRects[what])); + QOffsetRect(&newRect, thisRoom->objects[objActive].data.d.topLeft.h, + thisRoom->objects[objActive].data.d.topLeft.v); + thisRoom->objects[objActive].data.d.tall = 0; + thisRoom->objects[objActive].data.d.where = -1; + thisRoom->objects[objActive].data.d.who = 255; + thisRoom->objects[objActive].data.d.wide = 0; + break; + + case kCeilingTrans: + thisRoom->objects[objActive].data.d.topLeft.h = + where.h - HalfRectWide(&srcRects[what]); + thisRoom->objects[objActive].data.d.topLeft.v = kCeilingTransTop; + QSetRect(&newRect, 0, 0, RectWide(&srcRects[what]), + RectTall(&srcRects[what])); + QOffsetRect(&newRect, thisRoom->objects[objActive].data.d.topLeft.h, + thisRoom->objects[objActive].data.d.topLeft.v); + thisRoom->objects[objActive].data.d.tall = 0; + thisRoom->objects[objActive].data.d.where = -1; + thisRoom->objects[objActive].data.d.who = 255; + thisRoom->objects[objActive].data.d.wide = 0; + break; + + case kDoorInLf: + case kDoorInRt: + case kDoorExRt: + case kDoorExLf: + case kWindowInLf: + case kWindowInRt: + case kWindowExRt: + case kWindowExLf: + if ((what == kDoorInLf) || (what == kDoorInRt)) + { + if (where.h > (kRoomWide / 2)) + { + what = kDoorInRt; + thisRoom->objects[objActive].what = kDoorInRt; + thisRoom->objects[objActive].data.d.topLeft.h = kDoorInRtLeft; + thisRoom->objects[objActive].data.d.topLeft.v = kDoorInTop; + } + else + { + what = kDoorInLf; + thisRoom->objects[objActive].what = kDoorInLf; + thisRoom->objects[objActive].data.d.topLeft.h = kDoorInLfLeft; + thisRoom->objects[objActive].data.d.topLeft.v = kDoorInTop; + } + } + else if ((what == kDoorExRt) || (what == kDoorExLf)) + { + if (where.h > (kRoomWide / 2)) + { + what = kDoorExRt; + thisRoom->objects[objActive].what = kDoorExRt; + thisRoom->objects[objActive].data.d.topLeft.h = kDoorExRtLeft; + thisRoom->objects[objActive].data.d.topLeft.v = kDoorExTop; + } + else + { + what = kDoorExLf; + thisRoom->objects[objActive].what = kDoorExLf; + thisRoom->objects[objActive].data.d.topLeft.h = kDoorExLfLeft; + thisRoom->objects[objActive].data.d.topLeft.v = kDoorExTop; + } + } + else if ((what == kWindowInLf) || (what == kWindowInRt)) + { + if (where.h > (kRoomWide / 2)) + { + what = kWindowInRt; + thisRoom->objects[objActive].what = kWindowInRt; + thisRoom->objects[objActive].data.d.topLeft.h = kWindowInRtLeft; + thisRoom->objects[objActive].data.d.topLeft.v = kWindowInTop; + } + else + { + what = kWindowInLf; + thisRoom->objects[objActive].what = kWindowInLf; + thisRoom->objects[objActive].data.d.topLeft.h = kWindowInLfLeft; + thisRoom->objects[objActive].data.d.topLeft.v = kWindowInTop; + } + } + else if ((what == kWindowExRt) || (what == kWindowExLf)) + { + if (where.h > (kRoomWide / 2)) + { + what = kWindowExRt; + thisRoom->objects[objActive].what = kWindowExRt; + thisRoom->objects[objActive].data.d.topLeft.h = kWindowExRtLeft; + thisRoom->objects[objActive].data.d.topLeft.v = kWindowExTop; + } + else + { + what = kWindowExLf; + thisRoom->objects[objActive].what = kWindowExLf; + thisRoom->objects[objActive].data.d.topLeft.h = kWindowExLfLeft; + thisRoom->objects[objActive].data.d.topLeft.v = kWindowExTop; + } + } + QSetRect(&newRect, 0, 0, RectWide(&srcRects[what]), + RectTall(&srcRects[what])); + QOffsetRect(&newRect, thisRoom->objects[objActive].data.d.topLeft.h, + thisRoom->objects[objActive].data.d.topLeft.v); + thisRoom->objects[objActive].data.d.tall = 0; + thisRoom->objects[objActive].data.d.where = -1; + thisRoom->objects[objActive].data.d.who = 255; + thisRoom->objects[objActive].data.d.wide = 0; + drawWholeRoom = true; + break; + + case kInvisTrans: + newRect = srcRects[what]; + CenterRectOnPoint(&newRect, where); + thisRoom->objects[objActive].data.d.topLeft.h = newRect.left; + thisRoom->objects[objActive].data.d.topLeft.v = newRect.top; + thisRoom->objects[objActive].data.d.tall = newRect.bottom - newRect.top; + thisRoom->objects[objActive].data.d.where = -1; + thisRoom->objects[objActive].data.d.who = 255; + thisRoom->objects[objActive].data.d.wide = 0; + break; + + case kDeluxeTrans: + newRect = srcRects[what]; + CenterRectOnPoint(&newRect, where); + thisRoom->objects[objActive].data.d.topLeft.h = newRect.left; + thisRoom->objects[objActive].data.d.topLeft.v = newRect.top; + thisRoom->objects[objActive].data.d.tall = 0x1010; // 64 x 64 + thisRoom->objects[objActive].data.d.where = -1; + thisRoom->objects[objActive].data.d.who = 255; + thisRoom->objects[objActive].data.d.wide = 0x10; // Initially on + break; + + case kLightSwitch: + case kMachineSwitch: + case kThermostat: + case kPowerSwitch: + case kKnifeSwitch: + case kInvisSwitch: + case kTrigger: + case kLgTrigger: + case kSoundTrigger: + if ((what == kSoundTrigger) && (HowManySoundObjects() >= kMaxSoundTriggers)) + { + ShoutNoMoreSpecialObjects(); + return (false); + } + thisRoom->objects[objActive].data.e.topLeft.h = + where.h - HalfRectWide(&srcRects[what]); + thisRoom->objects[objActive].data.e.topLeft.v = + where.v - HalfRectTall(&srcRects[what]); + QSetRect(&newRect, 0, 0, RectWide(&srcRects[what]), + RectTall(&srcRects[what])); + QOffsetRect(&newRect, thisRoom->objects[objActive].data.e.topLeft.h, + thisRoom->objects[objActive].data.e.topLeft.v); + thisRoom->objects[objActive].data.e.delay = 0; + if (what == kSoundTrigger) + thisRoom->objects[objActive].data.e.where = 3000; + else + thisRoom->objects[objActive].data.e.where = -1; + thisRoom->objects[objActive].data.e.who = 255; + if ((what == kTrigger) || (what == kLgTrigger)) + thisRoom->objects[objActive].data.e.type = kOneShot; + else + thisRoom->objects[objActive].data.e.type = kToggle; + break; + + case kCeilingLight: + case kLightBulb: + case kTableLamp: + case kHipLamp: + case kDecoLamp: + case kFlourescent: + case kTrackLight: + case kInvisLight: + if (what == kCeilingLight) + { + thisRoom->objects[objActive].data.f.topLeft.h = + where.h - HalfRectWide(&srcRects[what]); + thisRoom->objects[objActive].data.f.topLeft.v = kCeilingLightTop; + QSetRect(&newRect, 0, 0, RectWide(&srcRects[what]), + RectTall(&srcRects[what])); + QOffsetRect(&newRect, thisRoom->objects[objActive].data.f.topLeft.h, + thisRoom->objects[objActive].data.f.topLeft.v); + thisRoom->objects[objActive].data.f.length = 64; + } + else if (what == kHipLamp) + { + thisRoom->objects[objActive].data.f.topLeft.h = + where.h - HalfRectWide(&srcRects[what]); + thisRoom->objects[objActive].data.f.topLeft.v = kHipLampTop; + QSetRect(&newRect, 0, 0, RectWide(&srcRects[what]), + RectTall(&srcRects[what])); + QOffsetRect(&newRect, thisRoom->objects[objActive].data.f.topLeft.h, + thisRoom->objects[objActive].data.f.topLeft.v); + thisRoom->objects[objActive].data.f.length = 0; + } + else if (what == kDecoLamp) + { + thisRoom->objects[objActive].data.f.topLeft.h = + where.h - HalfRectWide(&srcRects[what]); + thisRoom->objects[objActive].data.f.topLeft.v = kDecoLampTop; + QSetRect(&newRect, 0, 0, RectWide(&srcRects[what]), + RectTall(&srcRects[what])); + QOffsetRect(&newRect, thisRoom->objects[objActive].data.f.topLeft.h, + thisRoom->objects[objActive].data.f.topLeft.v); + thisRoom->objects[objActive].data.f.length = 0; + } + else if (what == kFlourescent) + { + thisRoom->objects[objActive].data.f.topLeft.h = + where.h - HalfRectWide(&srcRects[what]); + thisRoom->objects[objActive].data.f.topLeft.v = kFlourescentTop; + newRect = srcRects[what]; + QOffsetRect(&newRect, thisRoom->objects[objActive].data.f.topLeft.h, + thisRoom->objects[objActive].data.f.topLeft.v); + thisRoom->objects[objActive].data.f.length = 64; + } + else if (what == kTrackLight) + { + thisRoom->objects[objActive].data.f.topLeft.h = + where.h - HalfRectWide(&srcRects[what]); + thisRoom->objects[objActive].data.f.topLeft.v = kTrackLightTop; + newRect = srcRects[what]; + QOffsetRect(&newRect, thisRoom->objects[objActive].data.f.topLeft.h, + thisRoom->objects[objActive].data.f.topLeft.v); + thisRoom->objects[objActive].data.f.length = 64; + } + else + { + thisRoom->objects[objActive].data.f.topLeft.h = + where.h - HalfRectWide(&srcRects[what]); + thisRoom->objects[objActive].data.f.topLeft.v = + where.v - HalfRectTall(&srcRects[what]); + QSetRect(&newRect, 0, 0, RectWide(&srcRects[what]), + RectTall(&srcRects[what])); + QOffsetRect(&newRect, thisRoom->objects[objActive].data.f.topLeft.h, + thisRoom->objects[objActive].data.f.topLeft.v); + thisRoom->objects[objActive].data.f.length = 0; + } + thisRoom->objects[objActive].data.f.initial = true; + thisRoom->objects[objActive].data.f.state = true; + thisRoom->objects[objActive].data.f.byte0 = 0; + thisRoom->objects[objActive].data.f.byte1 = 0; + drawWholeRoom = true; + break; + + case kShredder: + case kToaster: + case kMacPlus: + case kGuitar: + case kTV: + case kCoffee: + case kOutlet: + case kVCR: + case kStereo: + case kMicrowave: + case kCinderBlock: + case kFlowerBox: + case kCDs: + case kCustomPict: + if ((what != kGuitar) && (what != kCinderBlock) && (what != kFlowerBox) && + (what != kCDs) && (what != kCustomPict) && + (HowManyShredderObjects() >= kMaxShredded)) + { + ShoutNoMoreSpecialObjects(); + return (false); + } + thisRoom->objects[objActive].data.g.topLeft.h = + where.h - HalfRectWide(&srcRects[what]); + thisRoom->objects[objActive].data.g.topLeft.v = + where.v - HalfRectTall(&srcRects[what]); + QSetRect(&newRect, 0, 0, RectWide(&srcRects[what]), + RectTall(&srcRects[what])); + QOffsetRect(&newRect, thisRoom->objects[objActive].data.g.topLeft.h, + thisRoom->objects[objActive].data.g.topLeft.v); + if (what == kToaster) + { + thisRoom->objects[objActive].data.g.height = 64; + thisRoom->objects[objActive].data.g.delay = 10 + RandomInt(10); + } + else if (what == kOutlet) + { + thisRoom->objects[objActive].data.g.height = 0; + thisRoom->objects[objActive].data.g.delay = 10 + RandomInt(10); + } + else if (what == kCustomPict) + { + thisRoom->objects[objActive].data.g.height = 10000; + thisRoom->objects[objActive].data.g.delay = 0; + } + else + { + thisRoom->objects[objActive].data.g.height = 0; + thisRoom->objects[objActive].data.g.delay = 0; + } + if (what == kMicrowave) + thisRoom->objects[objActive].data.g.byte0 = 7; + else + thisRoom->objects[objActive].data.g.byte0 = 0; + thisRoom->objects[objActive].data.g.initial = true; + thisRoom->objects[objActive].data.g.state = true; + break; + + case kBalloon: + case kCopterLf: + case kCopterRt: + case kDartLf: + case kDartRt: + case kCobweb: + if ((what != kCobweb) && (HowManyDynamicObjects() >= kMaxDynamicObs)) + { + ShoutNoMoreSpecialObjects(); + return (false); + } + if (what == kDartLf) + { + thisRoom->objects[objActive].data.h.topLeft.h = + kRoomWide - RectWide(&srcRects[what]); + } + else if (what == kDartRt) + { + thisRoom->objects[objActive].data.h.topLeft.h = 0; + } + else + { + thisRoom->objects[objActive].data.h.topLeft.h = + where.h - HalfRectWide(&srcRects[what]); + } + if ((what == kDartLf) || (what == kDartRt) || (what == kCobweb)) + { + thisRoom->objects[objActive].data.h.topLeft.v = + where.v - HalfRectTall(&srcRects[what]); + } + else + { + thisRoom->objects[objActive].data.h.topLeft.v = + (kTileHigh / 2) - HalfRectTall(&srcRects[what]); + } + QSetRect(&newRect, 0, 0, RectWide(&srcRects[what]), + RectTall(&srcRects[what])); + QOffsetRect(&newRect, thisRoom->objects[objActive].data.h.topLeft.h, + thisRoom->objects[objActive].data.h.topLeft.v); + thisRoom->objects[objActive].data.h.length = 0; + if (what == kCobweb) + thisRoom->objects[objActive].data.h.delay = 0; + else + thisRoom->objects[objActive].data.h.delay = 10 + RandomInt(10); + thisRoom->objects[objActive].data.h.byte0 = 0; + thisRoom->objects[objActive].data.h.initial = true; + thisRoom->objects[objActive].data.h.state = true; + break; + + case kBall: + case kDrip: + case kFish: + if (HowManyDynamicObjects() >= kMaxDynamicObs) + { + ShoutNoMoreSpecialObjects(); + return (false); + } + thisRoom->objects[objActive].data.h.topLeft.h = + where.h - HalfRectWide(&srcRects[what]); + thisRoom->objects[objActive].data.h.topLeft.v = + where.v - HalfRectTall(&srcRects[what]); + QSetRect(&newRect, 0, 0, RectWide(&srcRects[what]), + RectTall(&srcRects[what])); + QOffsetRect(&newRect, thisRoom->objects[objActive].data.h.topLeft.h, + thisRoom->objects[objActive].data.h.topLeft.v); + thisRoom->objects[objActive].data.h.length = 64; + if (what == kBall) + thisRoom->objects[objActive].data.h.delay = 0; + else + thisRoom->objects[objActive].data.h.delay = 10 + RandomInt(10); + thisRoom->objects[objActive].data.h.byte0 = 0; + thisRoom->objects[objActive].data.h.initial = true; + thisRoom->objects[objActive].data.h.state = true; + break; + + case kMousehole: + newRect = srcRects[what]; + CenterRectOnPoint(&newRect, where); + newRect.bottom = kMouseholeBottom; + newRect.top = newRect.bottom - RectTall(&srcRects[what]); + thisRoom->objects[objActive].data.i.bounds = newRect; + thisRoom->objects[objActive].data.i.pict = 0; + break; + + case kFireplace: + newRect = srcRects[what]; + CenterRectOnPoint(&newRect, where); + newRect.bottom = kFireplaceBottom; + newRect.top = newRect.bottom - RectTall(&srcRects[what]); + thisRoom->objects[objActive].data.i.bounds = newRect; + thisRoom->objects[objActive].data.i.pict = 0; + break; + + case kFlower: + GetKeys(theseKeys); + if (!BitTst(&theseKeys, kShiftKeyMap)) + wasFlower = RandomInt(kNumFlowers); + newRect = flowerSrc[wasFlower]; + CenterRectOnPoint(&newRect, where); + thisRoom->objects[objActive].data.i.bounds = newRect; + thisRoom->objects[objActive].data.i.pict = wasFlower; + break; + + case kOzma: + case kMirror: + case kWallWindow: + case kBear: + case kCalendar: + case kVase1: + case kVase2: + case kBulletin: + case kCloud: + case kFaucet: + case kRug: + case kChimes: + newRect = srcRects[what]; + CenterRectOnPoint(&newRect, where); + thisRoom->objects[objActive].data.i.bounds = newRect; + thisRoom->objects[objActive].data.i.pict = 0; + break; + + default: + return (false); + break; + } + + thisRoom->objects[objActive].what = what; + thisRoom->numObjects++; + if (KeepObjectLegal()) + { + } + fileDirty = true; + UpdateMenus(false); + handled = ObjectHasHandle(&direction, &dist); + + if (showItNow) + { + if (drawWholeRoom) + ReadyBackground(thisRoom->background, thisRoom->tiles); + GetThisRoomsObjRects(); + DrawThisRoomsObjects(); + InvalWindowRect(mainWindow, &mainWindowRect); + + if (handled) + { + StartMarqueeHandled(&roomObjectRects[objActive], direction, dist); + HandleBlowerGlider(); + } + else + StartMarquee(&roomObjectRects[objActive]); + } + +#endif + + return (true); +} + +//-------------------------------------------------------------- FindEmptyObjectSlot + +#ifndef COMPILEDEMO +short FindEmptyObjectSlot (void) +{ + short i, emptySlot; + + emptySlot = -1; + for (i = 0; i < kMaxRoomObs; i++) + if (thisRoom->objects[i].what == kObjectIsEmpty) + { + emptySlot = i; + break; + } + + return (emptySlot); +} + +//-------------------------------------------------------------- FindObjectSlotInRoom + +short FindObjectSlotInRoom (short roomNumber) +{ + roomType *testRoomPtr; + short i, emptySlot; + char wasState; + + emptySlot = -1; + + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + testRoomPtr = &((*thisHouse)->rooms[roomNumber]); + + for (i = 0; i < kMaxRoomObs; i++) + if (testRoomPtr->objects[i].what == kObjectIsEmpty) + { + emptySlot = i; + break; + } + + + HSetState((Handle)thisHouse, wasState); + + return (emptySlot); +} + +//-------------------------------------------------------------- DoesRoomNumHaveObject + +Boolean DoesRoomNumHaveObject (short room, short what) +{ + roomType *testRoomPtr; + short i; + char wasState; + Boolean hasIt; + + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + testRoomPtr = &((*thisHouse)->rooms[room]); + + hasIt = false; + + for (i = 0; i < kMaxRoomObs; i++) + if (testRoomPtr->objects[i].what == what) + { + hasIt = true; + break; + } + + + HSetState((Handle)thisHouse, wasState); + + return (hasIt); +} + +//-------------------------------------------------------------- ShoutNoMoreObjects + +void ShoutNoMoreObjects (void) +{ + short hitWhat; + +// CenterAlert(kNoMoreObjectsAlert); + hitWhat = Alert(kNoMoreObjectsAlert, nil); +} + +//-------------------------------------------------------------- HowManyCandleObjects + +short HowManyCandleObjects (void) +{ + short i, aCandle; + + aCandle = 0; + for (i = 0; i < kMaxRoomObs; i++) + if ((thisRoom->objects[i].what == kTaper) || + (thisRoom->objects[i].what == kCandle) || + (thisRoom->objects[i].what == kStubby)) + aCandle++; + + return (aCandle); +} + +//-------------------------------------------------------------- HowManyTikiObjects + +short HowManyTikiObjects (void) +{ + short i, aTiki; + + aTiki = 0; + for (i = 0; i < kMaxRoomObs; i++) + if (thisRoom->objects[i].what == kTiki) + aTiki++; + + return (aTiki); +} + +//-------------------------------------------------------------- HowManyBBQObjects + +short HowManyBBQObjects (void) +{ + short i, aBBQ; + + aBBQ = 0; + for (i = 0; i < kMaxRoomObs; i++) + if (thisRoom->objects[i].what == kBBQ) + aBBQ++; + + return (aBBQ); +} + +//-------------------------------------------------------------- HowManyCuckooObjects + +short HowManyCuckooObjects (void) +{ + short i, aCuckoo; + + aCuckoo = 0; + for (i = 0; i < kMaxRoomObs; i++) + if (thisRoom->objects[i].what == kCuckoo) + aCuckoo++; + + return (aCuckoo); +} + +//-------------------------------------------------------------- HowManyBandsObjects + +short HowManyBandsObjects (void) +{ + short i, aBands; + + aBands = 0; + for (i = 0; i < kMaxRoomObs; i++) + if (thisRoom->objects[i].what == kBands) + aBands++; + + return (aBands); +} + +//-------------------------------------------------------------- HowManyGreaseObjects + +short HowManyGreaseObjects (void) +{ + short i, aGrease; + + aGrease = 0; + for (i = 0; i < kMaxRoomObs; i++) + if ((thisRoom->objects[i].what == kGreaseRt) || + (thisRoom->objects[i].what == kGreaseLf)) + aGrease++; + + return (aGrease); +} + +//-------------------------------------------------------------- HowManyStarsObjects + +short HowManyStarsObjects (void) +{ + short i, aStar; + + aStar = 0; + for (i = 0; i < kMaxRoomObs; i++) + if (thisRoom->objects[i].what == kStar) + aStar++; + + return (aStar); +} + +//-------------------------------------------------------------- HowManySoundObjects + +short HowManySoundObjects (void) +{ + short i, aSound; + + aSound = 0; + for (i = 0; i < kMaxRoomObs; i++) + if (thisRoom->objects[i].what == kSoundTrigger) + aSound++; + + return (aSound); +} + +//-------------------------------------------------------------- HowManyUpStairsObjects + +short HowManyUpStairsObjects (void) +{ + short i, aStair; + + aStair = 0; + for (i = 0; i < kMaxRoomObs; i++) + if (thisRoom->objects[i].what == kUpStairs) + aStair++; + + return (aStair); +} + +//-------------------------------------------------------------- HowManyDownStairsObjects + +short HowManyDownStairsObjects (void) +{ + short i, aStair; + + aStair = 0; + for (i = 0; i < kMaxRoomObs; i++) + if (thisRoom->objects[i].what == kDownStairs) + aStair++; + + return (aStair); +} + +//-------------------------------------------------------------- HowManyShredderObjects + +short HowManyShredderObjects (void) +{ + short i, aShredder; + + aShredder = 0; + for (i = 0; i < kMaxRoomObs; i++) + if (thisRoom->objects[i].what == kShredder) + aShredder++; + + return (aShredder); +} + +//-------------------------------------------------------------- HowManyDynamicObjects + +short HowManyDynamicObjects (void) +{ + short i, aDinah; + + aDinah = 0; + for (i = 0; i < kMaxRoomObs; i++) + if ((thisRoom->objects[i].what == kSparkle) || + (thisRoom->objects[i].what == kToaster) || + (thisRoom->objects[i].what == kMacPlus) || + (thisRoom->objects[i].what == kTV) || + (thisRoom->objects[i].what == kCoffee) || + (thisRoom->objects[i].what == kOutlet) || + (thisRoom->objects[i].what == kVCR) || + (thisRoom->objects[i].what == kStereo) || + (thisRoom->objects[i].what == kMicrowave) || + (thisRoom->objects[i].what == kBalloon) || + (thisRoom->objects[i].what == kCopterLf) || + (thisRoom->objects[i].what == kCopterRt) || + (thisRoom->objects[i].what == kDartLf) || + (thisRoom->objects[i].what == kDartRt) || + (thisRoom->objects[i].what == kBall) || + (thisRoom->objects[i].what == kDrip) || + (thisRoom->objects[i].what == kFish)) + aDinah++; + + return (aDinah); +} + +//-------------------------------------------------------------- ShoutNoMoreSpecialObjects + +void ShoutNoMoreSpecialObjects (void) +{ + short hitWhat; + +// CenterAlert(kNoMoreSpecialAlert); + hitWhat = Alert(kNoMoreSpecialAlert, nil); +} + +#endif + diff --git a/GpApp/ObjectDraw.cpp b/GpApp/ObjectDraw.cpp new file mode 100644 index 0000000..4d8d765 --- /dev/null +++ b/GpApp/ObjectDraw.cpp @@ -0,0 +1,1406 @@ + +//============================================================================ +//---------------------------------------------------------------------------- +// ObjectDraw.c +//---------------------------------------------------------------------------- +//============================================================================ + + +#include "Externs.h" +#include "Environ.h" +#include "Objects.h" +#include "RectUtils.h" +#include "Room.h" + + +#define k8WhiteColor 0 +#define kYellowColor 5 +#define kGoldColor 11 +#define k8RedColor 35 +#define kPaleVioletColor 42 +#define k8LtTanColor 52 +#define k8BambooColor 53 +#define kDarkFleshColor 58 +#define k8TanColor 94 +#define k8PissYellowColor 95 +#define k8OrangeColor 59 +#define k8BrownColor 137 +#define k8Red4Color 143 +#define k8SkyColor 150 +#define k8EarthBlueColor 170 +#define k8DkRedColor 222 +#define k8DkRed2Color 223 +#define kIntenseGreenColor 225 +#define kIntenseBlueColor 235 +#define k8PumpkinColor 101 +#define k8LtstGrayColor 245 +#define k8LtstGray2Color 246 +#define k8LtstGray3Color 43 +#define k8LtstGray4Color 247 +#define k8LtstGray5Color 248 +#define k8LtGrayColor 249 +#define k8GrayColor 250 +#define k8Gray2Color 251 +#define k8DkGrayColor 252 +#define k8DkGray2Color 253 +#define k8DkGray3Color 172 +#define k8DkstGrayColor 254 +#define k8BlackColor 255 + + +void DrawClockDigit (short, Rect *); +void DrawClockHands (Point, short, short); +void DrawLargeClockHands (Point, short, short); + + +//============================================================== Functions +//-------------------------------------------------------------- DrawSimpleBlowers + +void DrawSimpleBlowers (short what, Rect *theRect) +{ + CopyMask((BitMap *)*GetGWorldPixMap(blowerSrcMap), + (BitMap *)*GetGWorldPixMap(blowerMaskMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &srcRects[what], &srcRects[what], theRect); +} + +//-------------------------------------------------------------- DrawTiki + +void DrawTiki (Rect *theRect, short down) +{ +#define kTikiPoleBase 300 + long darkGrayC, lightWoodC, darkWoodC; + CGrafPtr wasCPort; + GDHandle wasWorld; + + GetGWorld(&wasCPort, &wasWorld); + SetGWorld(backSrcMap, nil); + + if (thisMac.isDepth == 4) + { + darkGrayC = 14; + lightWoodC = 6; + darkWoodC = 9; + } + else + { + darkGrayC = k8DkstGrayColor; + lightWoodC = k8BambooColor; + darkWoodC = k8PissYellowColor; + } + + if (theRect->bottom < kTikiPoleBase + down) + { + ColorLine(theRect->left + 11, theRect->bottom - 1, + theRect->left + 11, kTikiPoleBase + down - 1, darkGrayC); + ColorLine(theRect->left + 12, theRect->bottom - 1, + theRect->left + 12, kTikiPoleBase + down, lightWoodC); + ColorLine(theRect->left + 13, theRect->bottom - 1, + theRect->left + 13, kTikiPoleBase + down, darkWoodC); + ColorLine(theRect->left + 14, theRect->bottom - 1, + theRect->left + 14, kTikiPoleBase + down, darkWoodC); + ColorLine(theRect->left + 15, theRect->bottom - 1, + theRect->left + 15, kTikiPoleBase + down - 1, darkGrayC); + } + + SetGWorld(wasCPort, wasWorld); + + CopyMask((BitMap *)*GetGWorldPixMap(blowerSrcMap), + (BitMap *)*GetGWorldPixMap(blowerMaskMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &srcRects[kTiki], &srcRects[kTiki], theRect); +} + +//-------------------------------------------------------------- DrawInvisibleBlower + +void DrawInvisibleBlower (Rect *theRect) +{ + Rect tempRect; + CGrafPtr wasCPort; + GDHandle wasWorld; + + GetGWorld(&wasCPort, &wasWorld); + SetGWorld(backSrcMap, nil); + + QSetRect(&tempRect, 0, 0, 24, 24); + QOffsetRect(&tempRect, theRect->left, theRect->top); + + ColorFrameRect(&tempRect, 192); + SetGWorld(wasCPort, wasWorld); +} + +//-------------------------------------------------------------- DrawLiftArea + +void DrawLiftArea (Rect *theRect) +{ + CGrafPtr wasCPort; + GDHandle wasWorld; + + GetGWorld(&wasCPort, &wasWorld); + SetGWorld(backSrcMap, nil); + ColorFrameRect(theRect, 192); + SetGWorld(wasCPort, wasWorld); +} + +//-------------------------------------------------------------- DrawTable + +void DrawTable (Rect *tableTop, short down) +{ + #define kTableBaseTop 296 + #define kTableShadowTop 312 + #define kTableShadowOffset 12 + Rect tempRect; + long brownC, tanC, dkRedC, blackC; + short hCenter, vShadow; + CGrafPtr wasCPort; + GDHandle wasWorld; + Pattern dummyPattern; + + if (thisMac.isDepth == 4) + { + brownC = 11; + tanC = 9; + dkRedC = 14; + blackC = 15; + } + else + { + brownC = k8BrownColor; + tanC = k8TanColor; + dkRedC = k8DkRed2Color; + blackC = k8BlackColor; + } + + GetGWorld(&wasCPort, &wasWorld); + SetGWorld(backSrcMap, nil); + + QSetRect(&tempRect, tableTop->left, 0, tableTop->right, + RectWide(tableTop) / 10); + QOffsetRect(&tempRect, 0, + -HalfRectTall(&tempRect) + kTableShadowTop + down); + QOffsetRect(&tempRect, kTableShadowOffset, -kTableShadowOffset); + PenPat(GetQDGlobalsGray(&dummyPattern)); + PenMode(patOr); + if (thisMac.isDepth == 4) + ColorOval(&tempRect, 15); + else + ColorOval(&tempRect, k8DkstGrayColor); + PenNormal(); + + InsetRect(tableTop, 0, 1); + ColorRect(tableTop, brownC); + InsetRect(tableTop, 0, -1); + + ColorLine(tableTop->left, tableTop->top + 1, + tableTop->left, tableTop->top + 1, k8WhiteColor); + ColorLine(tableTop->left + 1, tableTop->top, + tableTop->right - 2, tableTop->top, k8WhiteColor); + ColorLine(tableTop->right - 1, tableTop->top + 1, + tableTop->right - 1, tableTop->top + 1, k8WhiteColor); + + ColorLine(tableTop->left + 1, tableTop->top + 1, + tableTop->right - 2, tableTop->top + 1, tanC); + ColorLine(tableTop->left, tableTop->top + 2, + tableTop->left, tableTop->bottom - 2, tanC); + + ColorLine(tableTop->left + 1, tableTop->bottom - 1, + tableTop->right - 2, tableTop->bottom - 1, blackC); + ColorLine(tableTop->right - 1, tableTop->top + 2, + tableTop->right - 1, tableTop->bottom - 2, blackC); + + ColorLine(tableTop->left + 1, tableTop->bottom - 2, + tableTop->right - 2, tableTop->bottom - 2, dkRedC); + + if (tableTop->bottom < kTableBaseTop + down) + { + hCenter = (tableTop->left + tableTop->right) / 2; + + ColorLine(hCenter - 3, tableTop->bottom, + hCenter - 3, kTableBaseTop + down, blackC); + ColorLine(hCenter - 2, tableTop->bottom, + hCenter - 2, kTableBaseTop + down, k8LtGrayColor); + ColorLine(hCenter - 1, tableTop->bottom, + hCenter - 1, kTableBaseTop + down, k8GrayColor); + ColorLine(hCenter, tableTop->bottom, + hCenter, kTableBaseTop + down, k8DkGrayColor); + ColorLine(hCenter + 1, tableTop->bottom, + hCenter + 1, kTableBaseTop + down, blackC); + + vShadow = tableTop->bottom + RectWide(tableTop) / 4 - 2; + if (vShadow > kTableBaseTop + down) + { + ColorLine(hCenter - 2, tableTop->bottom, + hCenter - 2, kTableBaseTop + down, k8DkGrayColor); + ColorLine(hCenter - 1, tableTop->bottom, + hCenter - 1, kTableBaseTop + down, k8DkGrayColor); + ColorLine(hCenter, tableTop->bottom, + hCenter, kTableBaseTop + down, blackC); + } + else + { + ColorLine(hCenter - 2, tableTop->bottom, + hCenter - 2, vShadow, k8DkGrayColor); + ColorLine(hCenter - 1, tableTop->bottom, + hCenter - 1, vShadow + 1, k8DkGrayColor); + ColorLine(hCenter, tableTop->bottom, + hCenter, vShadow + 2, blackC); + } + } + + SetGWorld(wasCPort, wasWorld); + + tempRect = tableSrc; + QOffsetRect(&tempRect, -HalfRectWide(&tableSrc) + tableTop->left + + HalfRectWide(tableTop), kTableBaseTop + down); + CopyMask((BitMap *)*GetGWorldPixMap(furnitureSrcMap), + (BitMap *)*GetGWorldPixMap(furnitureMaskMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &tableSrc, &tableSrc, &tempRect); +} + +//-------------------------------------------------------------- DrawShelf + +void DrawShelf (Rect *shelfTop) +{ + #define kBracketInset 18 + #define kShelfDeep 4 + #define kBracketThick 5 + #define kShelfShadowOff 12 + Rect tempRect; + long brownC, ltTanC, tanC, dkRedC, blackC; + RgnHandle shadowRgn; + CGrafPtr wasCPort; + GDHandle wasWorld; + Pattern dummyPattern; + + if (thisMac.isDepth == 4) + { + brownC = 11; + ltTanC = 7; + tanC = 9; + dkRedC = 14; + blackC = 15; + } + else + { + brownC = k8BrownColor; + ltTanC = k8LtTanColor; + tanC = k8TanColor; + dkRedC = k8DkRed2Color; + blackC = k8BlackColor; + } + + GetGWorld(&wasCPort, &wasWorld); + SetGWorld(backSrcMap, nil); + + MoveTo(shelfTop->left, shelfTop->bottom); + shadowRgn = NewRgn(); + if (shadowRgn == nil) + RedAlert(kErrUnnaccounted); + OpenRgn(); + Line(kShelfShadowOff, kShelfShadowOff); + Line(RectWide(shelfTop) - kShelfDeep, 0); + Line(0, -kShelfThick + 1); + Line(-kShelfShadowOff, -kShelfShadowOff); + LineTo(shelfTop->left, shelfTop->bottom); + CloseRgn(shadowRgn); + PenPat(GetQDGlobalsGray(&dummyPattern)); + PenMode(patOr); + if (thisMac.isDepth == 4) + ColorRegion(shadowRgn, 15); + else + ColorRegion(shadowRgn, k8DkstGrayColor); + PenNormal(); + DisposeRgn(shadowRgn); + + InsetRect(shelfTop, 0, 1); + ColorRect(shelfTop, brownC); + InsetRect(shelfTop, 0, -1); + + ColorLine(shelfTop->left + 1, shelfTop->top, + shelfTop->left + 1 + kShelfDeep, shelfTop->top, ltTanC); + ColorLine(shelfTop->left, shelfTop->top + 1, + shelfTop->left + kShelfDeep, shelfTop->top + 1, tanC); + ColorLine(shelfTop->left, shelfTop->top + 2, + shelfTop->left + kShelfDeep, shelfTop->top + 2, tanC); + ColorLine(shelfTop->left, shelfTop->top + 3, + shelfTop->left + kShelfDeep, shelfTop->top + 3, tanC); + ColorLine(shelfTop->left + 1, shelfTop->bottom - 1, + shelfTop->left + 1 + kShelfDeep, shelfTop->bottom - 1, dkRedC); + ColorLine(shelfTop->left + 2 + kShelfDeep, shelfTop->bottom - 1, + shelfTop->right - 2, shelfTop->bottom - 1, blackC); + ColorLine(shelfTop->left + 2 + kShelfDeep, shelfTop->top, + shelfTop->right - 2, shelfTop->top, tanC); + ColorLine(shelfTop->right - 1, shelfTop->top + 1, + shelfTop->right - 1, shelfTop->bottom - 2, blackC); + + SetGWorld(wasCPort, wasWorld); + + tempRect = shelfSrc; + ZeroRectCorner(&tempRect); + QOffsetRect(&tempRect, shelfTop->left + kBracketInset, shelfTop->bottom); + CopyMask((BitMap *)*GetGWorldPixMap(furnitureSrcMap), + (BitMap *)*GetGWorldPixMap(furnitureMaskMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &shelfSrc, &shelfSrc, &tempRect); + + ZeroRectCorner(&tempRect); + QOffsetRect(&tempRect, shelfTop->right - kBracketInset - kShelfDeep - + kBracketThick, shelfTop->bottom); + CopyMask((BitMap *)*GetGWorldPixMap(furnitureSrcMap), + (BitMap *)*GetGWorldPixMap(furnitureMaskMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &shelfSrc, &shelfSrc, &tempRect); +} + +//-------------------------------------------------------------- DrawCabinet + +void DrawCabinet (Rect *cabinet) +{ + #define kCabinetDeep 4 + #define kCabinetShadowOff 6 + Rect tempRect; + long brownC, dkGrayC, ltTanC, tanC, dkRedC, blackC; + RgnHandle shadowRgn; + CGrafPtr wasCPort; + GDHandle wasWorld; + Pattern dummyPattern; + + if (thisMac.isDepth == 4) + { + brownC = 11; + dkGrayC = 14; + ltTanC = 7; + tanC = 9; + dkRedC = 14; + blackC = 15; + } + else + { + brownC = k8BrownColor; + dkGrayC = k8DkstGrayColor; + ltTanC = k8LtTanColor; + tanC = k8TanColor; + dkRedC = k8DkRed2Color; + blackC = k8BlackColor; + } + + GetGWorld(&wasCPort, &wasWorld); + SetGWorld(backSrcMap, nil); + + MoveTo(cabinet->left, cabinet->bottom); + shadowRgn = NewRgn(); + if (shadowRgn == nil) + RedAlert(kErrUnnaccounted); + OpenRgn(); + Line(kCabinetShadowOff, kCabinetShadowOff); + Line(RectWide(cabinet), 0); + Line(0, -RectTall(cabinet) + kCabinetDeep); + Line(-kCabinetShadowOff, -kCabinetShadowOff); + LineTo(cabinet->left, cabinet->bottom); + CloseRgn(shadowRgn); + PenPat(GetQDGlobalsGray(&dummyPattern)); + PenMode(patOr); + if (thisMac.isDepth == 4) + ColorRegion(shadowRgn, 15); + else + ColorRegion(shadowRgn, dkGrayC); + PenNormal(); + DisposeRgn(shadowRgn); + + InsetRect(cabinet, 1, 1); // fill bulk of cabinet brown + ColorRect(cabinet, brownC); + InsetRect(cabinet, -1, -1); + + tempRect = *cabinet; // add lighter left side + tempRect.right = tempRect.left + kCabinetDeep; + ColorRect(&tempRect, tanC); + // hilight top edge + ColorLine(cabinet->left + 1, cabinet->top + 1, + cabinet->left + kCabinetDeep, cabinet->top + 1, ltTanC); + ColorLine(cabinet->left + kCabinetDeep, cabinet->top + 1, + cabinet->right - 3, cabinet->top + 1, tanC); + // shadow bottom edge + + ColorLine(cabinet->left + kCabinetDeep + 3, cabinet->top + 5, + cabinet->left + kCabinetDeep + 3, cabinet->bottom - 6, tanC); + ColorLine(cabinet->left + kCabinetDeep + 4, cabinet->top + 5, + cabinet->left + kCabinetDeep + 4, cabinet->bottom - 6, tanC); + ColorLine(cabinet->left + kCabinetDeep + 9, cabinet->top + 10, + cabinet->left + kCabinetDeep + 9, cabinet->bottom - 11, dkGrayC); + + ColorLine(cabinet->right - 4, cabinet->top + 6, + cabinet->right - 4, cabinet->bottom - 5, dkRedC); + ColorLine(cabinet->right - 5, cabinet->top + 5, + cabinet->right - 5, cabinet->bottom - 6, dkGrayC); + ColorLine(cabinet->right - 10, cabinet->top + 10, + cabinet->right - 10, cabinet->bottom - 11, tanC); + + ColorLine(cabinet->left + kCabinetDeep + 4, cabinet->top + 4, + cabinet->left + kCabinetDeep + 4, cabinet->top + 4, ltTanC); + ColorLine(cabinet->left + kCabinetDeep + 5, cabinet->top + 4, + cabinet->right - 6, cabinet->top + 4, tanC); + ColorLine(cabinet->left + kCabinetDeep + 10, cabinet->top + 9, + cabinet->right - 11, cabinet->top + 9, dkGrayC); + + ColorLine(cabinet->right - 5, cabinet->bottom - 5, + cabinet->right - 5, cabinet->bottom - 5, dkRedC); + ColorLine(cabinet->left + kCabinetDeep + 6, cabinet->bottom - 4, + cabinet->right - 5, cabinet->bottom - 4, dkRedC); + ColorLine(cabinet->left + kCabinetDeep + 5, cabinet->bottom - 5, + cabinet->right - 6, cabinet->bottom - 5, dkGrayC); + + ColorLine(cabinet->left + kCabinetDeep + 10, cabinet->bottom - 10, + cabinet->right - 11, cabinet->bottom - 10, tanC); + + SetGWorld(wasCPort, wasWorld); + + tempRect = hingeSrc; + ZeroRectCorner(&tempRect); + QOffsetRect(&tempRect, cabinet->left + kCabinetDeep + 2, cabinet->top + 10); + CopyMask((BitMap *)*GetGWorldPixMap(furnitureSrcMap), + (BitMap *)*GetGWorldPixMap(furnitureMaskMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &hingeSrc, &hingeSrc, &tempRect); + + tempRect = hingeSrc; + ZeroRectCorner(&tempRect); + QOffsetRect(&tempRect, cabinet->left + kCabinetDeep + 2, cabinet->bottom - 26); + CopyMask((BitMap *)*GetGWorldPixMap(furnitureSrcMap), + (BitMap *)*GetGWorldPixMap(furnitureMaskMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &hingeSrc, &hingeSrc, &tempRect); + + tempRect = handleSrc; + ZeroRectCorner(&tempRect); + QOffsetRect(&tempRect, cabinet->right - 8, cabinet->top + + HalfRectTall(cabinet) - HalfRectTall(&handleSrc)); + CopyMask((BitMap *)*GetGWorldPixMap(furnitureSrcMap), + (BitMap *)*GetGWorldPixMap(furnitureMaskMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &handleSrc, &handleSrc, &tempRect); + + FrameRect(cabinet); +} + +//-------------------------------------------------------------- DrawSimpleFurniture + +void DrawSimpleFurniture (short what, Rect *theRect) +{ + CopyMask((BitMap *)*GetGWorldPixMap(furnitureSrcMap), + (BitMap *)*GetGWorldPixMap(furnitureMaskMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &srcRects[what], &srcRects[what], theRect); +} + +//-------------------------------------------------------------- DrawCounter + +void DrawCounter (Rect *counter) +{ + #define kCounterFooterHigh 12 + #define kCounterStripWide 6 + #define kCounterStripTall 29 + #define kCounterPanelDrop 12 + Rect tempRect; + RgnHandle shadowRgn; + long brownC, dkGrayC, tanC, blackC, dkstRedC; + short nRects, width, i; + CGrafPtr wasCPort; + GDHandle wasWorld; + Pattern dummyPattern; + + if (thisMac.isDepth == 4) + { + brownC = 11; + dkGrayC = 14; + tanC = 9; + blackC = 15; + dkstRedC = 15; + } + else + { + brownC = k8BrownColor; + dkGrayC = k8DkstGrayColor; + tanC = k8TanColor; + blackC = k8BlackColor; + dkstRedC = k8DkRed2Color; + } + + GetGWorld(&wasCPort, &wasWorld); + SetGWorld(backSrcMap, nil); + + MoveTo(counter->right - 2, counter->bottom); + shadowRgn = NewRgn(); + if (shadowRgn == nil) + RedAlert(kErrUnnaccounted); + OpenRgn(); + Line(10, -10); + Line(0, -RectTall(counter) + 29); + Line(2, 0); + Line(0, -7); + Line(-12, -12); + LineTo(counter->right - 2, counter->bottom); + CloseRgn(shadowRgn); + PenPat(GetQDGlobalsGray(&dummyPattern)); + PenMode(patOr); + if (thisMac.isDepth == 4) + ColorRegion(shadowRgn, 15); + else + ColorRegion(shadowRgn, dkGrayC); + PenNormal(); + DisposeRgn(shadowRgn); + + InsetRect(counter, 2, 2); + ColorRect(counter, brownC); + InsetRect(counter, -2, -2); + + tempRect = *counter; + tempRect.top = tempRect.bottom - kCounterFooterHigh; + tempRect.left += 2; + tempRect.right -= 2; + ColorRect(&tempRect, dkGrayC); + ColorLine(counter->left + 2, counter->bottom - kCounterFooterHigh, + counter->right - 3, counter->bottom - kCounterFooterHigh, blackC); + ColorLine(counter->left + 2, counter->bottom - kCounterFooterHigh + 1, + counter->right - 3, counter->bottom - kCounterFooterHigh + 1, blackC); + ColorLine(counter->right - 3, counter->bottom - kCounterFooterHigh, + counter->right - 3, counter->bottom - 1, blackC); + ColorLine(counter->left + 2, counter->bottom - kCounterFooterHigh, + counter->left + 2, counter->bottom - 1, k8DkGrayColor); + + ColorLine(counter->right - 2, counter->top, + counter->right - 2, counter->bottom - kCounterFooterHigh - 1, dkstRedC); + ColorLine(counter->left + 1, counter->top + 8, + counter->left + 1, counter->bottom - kCounterFooterHigh - 1, tanC); + + if (thisMac.isDepth == 4) + { + ColorLine(counter->left - 1, counter->top, + counter->right, counter->top, 1); + ColorLine(counter->left - 1, counter->top + 1, + counter->right, counter->top + 1, 2); + ColorLine(counter->left - 1, counter->top + 2, + counter->right, counter->top + 2, 3); + ColorLine(counter->left - 1, counter->top + 3, + counter->right, counter->top + 3, 4); + ColorLine(counter->left - 1, counter->top + 4, + counter->right, counter->top + 4, 5); + ColorLine(counter->left - 1, counter->top + 5, + counter->right, counter->top + 5, 5); + ColorLine(counter->left - 1, counter->top + 6, + counter->right, counter->top + 6, 5); + ColorLine(counter->left - 1, counter->top, + counter->left - 1, counter->top + 6, 1); + } + else + { + ColorLine(counter->left - 1, counter->top, + counter->right, counter->top, k8LtstGrayColor); + ColorLine(counter->left - 1, counter->top + 1, + counter->right, counter->top + 1, k8LtstGray2Color); + ColorLine(counter->left - 1, counter->top + 2, + counter->right, counter->top + 2, k8LtstGray3Color); + ColorLine(counter->left - 1, counter->top + 3, + counter->right, counter->top + 3, k8LtstGray4Color); + ColorLine(counter->left - 1, counter->top + 4, + counter->right, counter->top + 4, k8LtstGray5Color); + ColorLine(counter->left - 1, counter->top + 5, + counter->right, counter->top + 5, k8LtstGray5Color); + ColorLine(counter->left - 1, counter->top + 6, + counter->right, counter->top + 6, k8LtstGray5Color); + ColorLine(counter->left - 1, counter->top, + counter->left - 1, counter->top + 6, k8LtstGrayColor); + } + + ColorLine(counter->right, counter->top, + counter->right, counter->top + 6, k8LtGrayColor); + ColorLine(counter->left + 1, counter->top + 7, + counter->right - 2, counter->top + 7, dkstRedC); + ColorLine(counter->left + 1, counter->top + 8, + counter->right - 2, counter->top + 8, dkstRedC); + + SetGWorld(wasCPort, wasWorld); + + nRects = RectWide(counter) / 40; + if (nRects == 0) + nRects = 1; + width = ((RectWide(counter) - kCounterStripWide) / nRects) - kCounterStripWide; + QSetRect(&tempRect, 0, 0, width, RectTall(counter) - kCounterStripTall); + QOffsetRect(&tempRect, counter->left + kCounterStripWide, + counter->top + kCounterPanelDrop); + for (i = 0; i < nRects; i++) + { + HiliteRect(&tempRect, tanC, dkstRedC); + InsetRect(&tempRect, 4, 4); + HiliteRect(&tempRect, dkstRedC, tanC); + InsetRect(&tempRect, -4, -4); + QOffsetRect(&tempRect, kCounterStripWide + width, 0); + } +} + +//-------------------------------------------------------------- DrawDresser + +void DrawDresser (Rect *dresser) +{ + #define kDresserTopThick 4 + #define kDresserCrease 9 + #define kDresserDrawerDrop 12 + #define kDresserSideSpare 14 + Rect tempRect, dest; + long yellowC, brownC, dkGrayC, ltTanC, dkstRedC; + RgnHandle shadowRgn; + short nRects, height, i; + CGrafPtr wasCPort; + GDHandle wasWorld; + Pattern dummyPattern; + + if (thisMac.isDepth == 4) + { + yellowC = 9; + brownC = 11; + dkGrayC = 14; + ltTanC = 7; + dkstRedC = 15; + } + else + { + yellowC = k8PissYellowColor; + brownC = k8BrownColor; + dkGrayC = k8DkstGrayColor; + ltTanC = k8LtTanColor; + dkstRedC = k8DkRed2Color; + } + + GetGWorld(&wasCPort, &wasWorld); + SetGWorld(backSrcMap, nil); + + MoveTo(dresser->left + 10, dresser->bottom + 9); + shadowRgn = NewRgn(); + if (shadowRgn == nil) + RedAlert(kErrUnnaccounted); + OpenRgn(); + Line(RectWide(dresser) - 11, 0); + Line(9, -9); + Line(0, -RectTall(dresser) + 12); + Line(-9, -9); + Line(-RectWide(dresser) + 11, 0); + LineTo(dresser->left + 10, dresser->bottom + 9); + CloseRgn(shadowRgn); + PenPat(GetQDGlobalsGray(&dummyPattern)); + PenMode(patOr); + if (thisMac.isDepth == 4) + ColorRegion(shadowRgn, 15); + else + ColorRegion(shadowRgn, k8DkstGrayColor); + PenNormal(); + DisposeRgn(shadowRgn); + + InsetRect(dresser, 2, 2); + ColorRect(dresser, k8PumpkinColor); + HiliteRect(dresser, k8OrangeColor, dkstRedC); + InsetRect(dresser, -2, -2); + + tempRect = *dresser; + tempRect.bottom = tempRect.top + kDresserTopThick; + ColorRect(&tempRect, k8PissYellowColor); + HiliteRect(&tempRect, ltTanC, dkstRedC); + ColorLine(dresser->left + 2, dresser->top + kDresserTopThick, + dresser->right - 3, dresser->top + kDresserTopThick, k8Red4Color); + + ColorLine(dresser->left + kDresserCrease, dresser->top + kDresserTopThick + 1, + dresser->left + kDresserCrease, dresser->bottom - 4, k8Red4Color); + ColorLine(dresser->right - kDresserCrease, dresser->top + kDresserTopThick + 1, + dresser->right - kDresserCrease, dresser->bottom - 4, k8OrangeColor); + + nRects = RectTall(dresser) / 30; + if (nRects == 0) + nRects = 1; + height = (RectTall(dresser) - 14) / nRects - 4; + QSetRect(&tempRect, 0, 0, RectWide(dresser) - kDresserSideSpare, height); + QOffsetRect(&tempRect, dresser->left + 7, dresser->top + 10); + for (i = 0; i < nRects; i++) + { + ColorLine(tempRect.left + 1, tempRect.bottom, + tempRect.right, tempRect.bottom, dkstRedC); + ColorLine(tempRect.right, tempRect.top + 1, + tempRect.right, tempRect.bottom, dkstRedC); + ColorRect(&tempRect, yellowC); + HiliteRect(&tempRect, ltTanC, brownC); + InsetRect(&tempRect, 1, 1); + HiliteRect(&tempRect, ltTanC, brownC); + InsetRect(&tempRect, -1, -1); + + QSetRect(&dest, -4, -4, 4, 4); + QOffsetRect(&dest, HalfRectTall(&tempRect), HalfRectTall(&tempRect)); + QOffsetRect(&dest, tempRect.left, tempRect.top); + CopyBits((BitMap *)*GetGWorldPixMap(furnitureSrcMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &knobSrc, &dest, srcCopy, nil); + + QSetRect(&dest, -4, -4, 4, 4); + QOffsetRect(&dest, -HalfRectTall(&tempRect), HalfRectTall(&tempRect)); + QOffsetRect(&dest, tempRect.right, tempRect.top); + CopyBits((BitMap *)*GetGWorldPixMap(furnitureSrcMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &knobSrc, &dest, srcCopy, nil); + + QOffsetRect(&tempRect, 0, kDresserTopThick + height); + } + + SetGWorld(wasCPort, wasWorld); + + dest = leftFootSrc; + ZeroRectCorner(&dest); + QOffsetRect(&dest, dresser->left + 6, dresser->bottom - 2); + + CopyMask((BitMap *)*GetGWorldPixMap(furnitureSrcMap), + (BitMap *)*GetGWorldPixMap(furnitureMaskMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &leftFootSrc, &leftFootSrc, &dest); + + dest = rightFootSrc; + ZeroRectCorner(&dest); + QOffsetRect(&dest, dresser->right - 19, dresser->bottom - 2); + + CopyMask((BitMap *)*GetGWorldPixMap(furnitureSrcMap), + (BitMap *)*GetGWorldPixMap(furnitureMaskMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &rightFootSrc, &rightFootSrc, &dest); +} + +//-------------------------------------------------------------- DrawDeckTable + +void DrawDeckTable (Rect *tableTop, short down) +{ + #define kTableBaseTop 296 + #define kTableShadowTop 312 + #define kTableShadowOffset 12 + + Rect tempRect; + long bambooC, brownC, dkGrayC; + short hCenter, vShadow; + CGrafPtr wasCPort; + GDHandle wasWorld; + Pattern dummyPattern; + + if (thisMac.isDepth == 4) + { + bambooC = 6; + brownC = 11; + dkGrayC = 14; + } + else + { + bambooC = k8BambooColor; + brownC = k8BrownColor; + dkGrayC = k8DkstGrayColor; + } + + GetGWorld(&wasCPort, &wasWorld); + SetGWorld(backSrcMap, nil); + + QSetRect(&tempRect, tableTop->left, 0, tableTop->right, + RectWide(tableTop) / 10); + QOffsetRect(&tempRect, 0, + -HalfRectTall(&tempRect) + kTableShadowTop + down); + QOffsetRect(&tempRect, kTableShadowOffset, -kTableShadowOffset); + PenPat(GetQDGlobalsGray(&dummyPattern)); + PenMode(patOr); + ColorOval(&tempRect, dkGrayC); + PenNormal(); + + InsetRect(tableTop, 0, 1); + ColorRect(tableTop, kGoldColor); + InsetRect(tableTop, 0, -1); + + ColorLine(tableTop->left, tableTop->top + 1, + tableTop->left, tableTop->top + 1, k8WhiteColor); + ColorLine(tableTop->left + 1, tableTop->top, + tableTop->right - 2, tableTop->top, k8WhiteColor); + ColorLine(tableTop->right - 1, tableTop->top + 1, + tableTop->right - 1, tableTop->top + 1, k8WhiteColor); + + ColorLine(tableTop->left + 1, tableTop->top + 1, + tableTop->right - 2, tableTop->top + 1, kYellowColor); + ColorLine(tableTop->left, tableTop->top + 2, + tableTop->left, tableTop->bottom - 2, kYellowColor); + + ColorLine(tableTop->left + 1, tableTop->bottom - 1, + tableTop->right - 2, tableTop->bottom - 1, brownC); + ColorLine(tableTop->right - 1, tableTop->top + 2, + tableTop->right - 1, tableTop->bottom - 2, brownC); + + ColorLine(tableTop->left + 1, tableTop->bottom - 2, + tableTop->right - 2, tableTop->bottom - 2, bambooC); + + if (tableTop->bottom < kTableBaseTop + down) + { + hCenter = (tableTop->left + tableTop->right) / 2; + + ColorLine(hCenter - 3, tableTop->bottom, + hCenter - 3, kTableBaseTop + down, dkGrayC); + ColorLine(hCenter - 2, tableTop->bottom, + hCenter - 2, kTableBaseTop + down, k8WhiteColor); + ColorLine(hCenter - 1, tableTop->bottom, + hCenter - 1, kTableBaseTop + down, k8WhiteColor); + ColorLine(hCenter, tableTop->bottom, + hCenter, kTableBaseTop + down, k8LtGrayColor); + ColorLine(hCenter + 1, tableTop->bottom, + hCenter + 1, kTableBaseTop + down, dkGrayC); + + vShadow = tableTop->bottom + RectWide(tableTop) / 4 - 2; + if (vShadow > kTableBaseTop + down) + { + ColorLine(hCenter - 2, tableTop->bottom, + hCenter - 2, kTableBaseTop + down, k8LtGrayColor); + ColorLine(hCenter - 1, tableTop->bottom, + hCenter - 1, kTableBaseTop + down, k8LtGrayColor); + ColorLine(hCenter, tableTop->bottom, + hCenter, kTableBaseTop + down, dkGrayC); + } + else + { + ColorLine(hCenter - 2, tableTop->bottom, + hCenter - 2, vShadow, k8LtGrayColor); + ColorLine(hCenter - 1, tableTop->bottom, + hCenter - 1, vShadow + 1, k8LtGrayColor); + ColorLine(hCenter, tableTop->bottom, + hCenter, vShadow + 2, dkGrayC); + } + } + + SetGWorld(wasCPort, wasWorld); + + tempRect = deckSrc; + ZeroRectCorner(&tempRect); + QOffsetRect(&tempRect, -HalfRectWide(&deckSrc) + tableTop->left + + HalfRectWide(tableTop), kTableBaseTop + down); + CopyMask((BitMap *)*GetGWorldPixMap(furnitureSrcMap), + (BitMap *)*GetGWorldPixMap(furnitureMaskMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &deckSrc, &deckSrc, &tempRect); +} + +//-------------------------------------------------------------- DrawStool + +void DrawStool (Rect *theRect, short down) +{ + #define kStoolBase 304 + long grayC, dkGrayC; + CGrafPtr wasCPort; + GDHandle wasWorld; + + GetGWorld(&wasCPort, &wasWorld); + SetGWorld(backSrcMap, nil); + + if (thisMac.isDepth == 4) + { + grayC = 13; + dkGrayC = 14; + } + else + { + grayC = k8DkGray2Color; + dkGrayC = k8DkstGrayColor; + } + + if (theRect->bottom < kStoolBase + down) + { + ColorLine(theRect->left + 21, theRect->bottom - 1, + theRect->left + 21, kStoolBase + down - 1, k8DkGrayColor); + ColorLine(theRect->left + 22, theRect->bottom - 1, + theRect->left + 22, kStoolBase + down, k8Gray2Color); + ColorLine(theRect->left + 23, theRect->bottom - 1, + theRect->left + 23, kStoolBase + down, k8DkGrayColor); + ColorLine(theRect->left + 24, theRect->bottom - 1, + theRect->left + 24, kStoolBase + down, k8DkGray3Color); + ColorLine(theRect->left + 25, theRect->bottom - 1, + theRect->left + 25, kStoolBase + down, grayC); + ColorLine(theRect->left + 26, theRect->bottom - 1, + theRect->left + 26, kStoolBase + down - 1, dkGrayC); + } + + SetGWorld(wasCPort, wasWorld); + + CopyMask((BitMap *)*GetGWorldPixMap(furnitureSrcMap), + (BitMap *)*GetGWorldPixMap(furnitureMaskMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &srcRects[kStool], &srcRects[kStool], theRect); +} + +//-------------------------------------------------------------- DrawInvisObstacle + +void DrawInvisObstacle (Rect *theRect) +{ + CGrafPtr wasCPort; + GDHandle wasWorld; + + GetGWorld(&wasCPort, &wasWorld); + SetGWorld(backSrcMap, nil); + ColorFrameRect(theRect, k8BrownColor); + SetGWorld(wasCPort, wasWorld); +} + +//-------------------------------------------------------------- DrawInvisBounce + +void DrawInvisBounce (Rect *theRect) +{ + CGrafPtr wasCPort; + GDHandle wasWorld; + + GetGWorld(&wasCPort, &wasWorld); + SetGWorld(backSrcMap, nil); + ColorFrameRect(theRect, k8RedColor); + SetGWorld(wasCPort, wasWorld); +} + +//-------------------------------------------------------------- DrawRedClock + +void DrawRedClock (Rect *theRect) +{ + DateTimeRec timeRec; + Rect dest; + short hour, minutes; + + CopyMask((BitMap *)*GetGWorldPixMap(bonusSrcMap), + (BitMap *)*GetGWorldPixMap(bonusMaskMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &srcRects[kRedClock], &srcRects[kRedClock], theRect); + + GetTime(&timeRec); + hour = timeRec.hour % 12; + if (hour == 0) + hour = 12; + minutes = timeRec.minute; + + QSetRect(&dest, 0, 0, 4, 6); + QOffsetRect(&dest, theRect->left + 5, theRect->top + 7); + if (hour > 9) + DrawClockDigit(hour / 10, &dest); + QOffsetRect(&dest, 4, 0); + DrawClockDigit(hour % 10, &dest); + QOffsetRect(&dest, 6, 0); + DrawClockDigit(minutes / 10, &dest); + QOffsetRect(&dest, 4, 0); + DrawClockDigit(minutes % 10, &dest); +} + +//-------------------------------------------------------------- DrawClockDigit + +void DrawClockDigit (short number, Rect *dest) +{ + CopyBits((BitMap *)*GetGWorldPixMap(bonusSrcMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &digits[number], dest, srcCopy, nil); +} + +//-------------------------------------------------------------- DrawBlueClock + +void DrawBlueClock (Rect *theRect) +{ + DateTimeRec timeRec; + Point dest; + short hour, minutes; + + CopyMask((BitMap *)*GetGWorldPixMap(bonusSrcMap), + (BitMap *)*GetGWorldPixMap(bonusMaskMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &srcRects[kBlueClock], &srcRects[kBlueClock], theRect); + + dest.h = theRect->left + 13; + dest.v = theRect->top + 13; + GetTime(&timeRec); + hour = timeRec.hour % 12; + minutes = ((timeRec.minute + 2) / 5) % 12; + DrawClockHands(dest, minutes, hour); +} + +//-------------------------------------------------------------- DrawYellowClock + +void DrawYellowClock (Rect *theRect) +{ + DateTimeRec timeRec; + Point dest; + short hour, minutes; + + CopyMask((BitMap *)*GetGWorldPixMap(bonusSrcMap), + (BitMap *)*GetGWorldPixMap(bonusMaskMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &srcRects[kYellowClock], &srcRects[kYellowClock], theRect); + + dest.h = theRect->left + 13; + dest.v = theRect->top + 15; + GetTime(&timeRec); + hour = timeRec.hour % 12; + minutes = ((timeRec.minute + 2) / 5) % 12; + DrawClockHands(dest, minutes, hour); +} + +//-------------------------------------------------------------- DrawCuckoo + +void DrawCuckoo (Rect *theRect) +{ + DateTimeRec timeRec; + Point dest; + short hour, minutes; + + CopyMask((BitMap *)*GetGWorldPixMap(bonusSrcMap), + (BitMap *)*GetGWorldPixMap(bonusMaskMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &srcRects[kCuckoo], &srcRects[kCuckoo], theRect); + + dest.h = theRect->left + 19; + dest.v = theRect->top + 31; + GetTime(&timeRec); + hour = timeRec.hour % 12; + minutes = ((timeRec.minute + 2) / 5) % 12; + DrawLargeClockHands(dest, minutes, hour); +} + +//-------------------------------------------------------------- DrawClockHands + +void DrawClockHands (Point where, short bigHand, short littleHand) +{ + CGrafPtr wasCPort; + GDHandle wasWorld; + + GetGWorld(&wasCPort, &wasWorld); + SetGWorld(backSrcMap, nil); + MoveTo(where.h, where.v); + switch (bigHand) + { + case 0: + Line(0, -6); + break; + + case 1: + Line(3, -5); + break; + + case 2: + Line(5, -3); + break; + + case 3: + Line(6, 0); + break; + + case 4: + Line(5, 3); + break; + + case 5: + Line(3, 5); + break; + + case 6: + Line(0, 6); + break; + + case 7: + Line(-3, 5); + break; + + case 8: + Line(-5, 3); + break; + + case 9: + Line(-6, 0); + break; + + case 10: + Line(-5, -3); + break; + + case 11: + Line(-3, -5); + break; + } + + MoveTo(where.h, where.v); + switch (littleHand) + { + case 0: + Line(0, -4); + break; + + case 1: + Line(2, -3); + break; + + case 2: + Line(3, -2); + break; + + case 3: + Line(4, 0); + break; + + case 4: + Line(3, 2); + break; + + case 5: + Line(2, 3); + break; + + case 6: + Line(0, 4); + break; + + case 7: + Line(-2, 3); + break; + + case 8: + Line(-3, 2); + break; + + case 9: + Line(-4, 0); + break; + + case 10: + Line(-3, -2); + break; + + case 11: + Line(-2, -3); + break; + } + + SetGWorld(wasCPort, wasWorld); +} + +//-------------------------------------------------------------- DrawClockHands + +void DrawLargeClockHands (Point where, short bigHand, short littleHand) +{ + CGrafPtr wasCPort; + GDHandle wasWorld; + + GetGWorld(&wasCPort, &wasWorld); + SetGWorld(backSrcMap, nil); + ForeColor(whiteColor); + + MoveTo(where.h, where.v); + switch (bigHand) + { + case 0: + Line(0, -10); + break; + + case 1: + Line(5, -9); + break; + + case 2: + Line(9, -5); + break; + + case 3: + Line(10, 0); + break; + + case 4: + Line(9, 5); + break; + + case 5: + Line(5, 9); + break; + + case 6: + Line(0, 10); + break; + + case 7: + Line(-5, 9); + break; + + case 8: + Line(-9, 5); + break; + + case 9: + Line(-10, 0); + break; + + case 10: + Line(-9, -5); + break; + + case 11: + Line(-5, -9); + break; + } + + MoveTo(where.h, where.v); + switch (littleHand) + { + case 0: + Line(0, -6); + break; + + case 1: + Line(3, -5); + break; + + case 2: + Line(5, -3); + break; + + case 3: + Line(6, 0); + break; + + case 4: + Line(5, 3); + break; + + case 5: + Line(3, 5); + break; + + case 6: + Line(0, 6); + break; + + case 7: + Line(-3, 5); + break; + + case 8: + Line(-5, 3); + break; + + case 9: + Line(-6, 0); + break; + + case 10: + Line(-5, -3); + break; + + case 11: + Line(-3, -5); + break; + } + + ForeColor(blackColor); + SetGWorld(wasCPort, wasWorld); +} + +//-------------------------------------------------------------- DrawSimplePrizes + +void DrawSimplePrizes (short what, Rect *theRect) +{ + CopyMask((BitMap *)*GetGWorldPixMap(bonusSrcMap), + (BitMap *)*GetGWorldPixMap(bonusMaskMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &srcRects[what], &srcRects[what], theRect); +} + +//-------------------------------------------------------------- DrawGreaseRt + +void DrawGreaseRt (Rect *theRect, short distance, Boolean state) +{ + Rect spill, dest; + CGrafPtr wasCPort; + GDHandle wasWorld; + + dest = *theRect; + if (state) // grease upright + { + CopyMask((BitMap *)*GetGWorldPixMap(bonusSrcMap), + (BitMap *)*GetGWorldPixMap(bonusMaskMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &greaseSrcRt[0], &greaseSrcRt[0], &dest); + } + else // grease spilled + { + QOffsetRect(&dest, 6, 0); + CopyMask((BitMap *)*GetGWorldPixMap(bonusSrcMap), + (BitMap *)*GetGWorldPixMap(bonusMaskMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &greaseSrcRt[3], &greaseSrcRt[3], &dest); + + GetGWorld(&wasCPort, &wasWorld); + SetGWorld(backSrcMap, nil); + QSetRect(&spill, 0, -2, distance - 5, 0); + QOffsetRect(&spill, dest.right - 1, dest.bottom); + PaintRect(&spill); + SetGWorld(wasCPort, wasWorld); + } +} + +//-------------------------------------------------------------- DrawGreaseLf + +void DrawGreaseLf (Rect *theRect, short distance, Boolean state) +{ + Rect spill, dest; + CGrafPtr wasCPort; + GDHandle wasWorld; + + dest = *theRect; + if (state) // grease upright + { + CopyMask((BitMap *)*GetGWorldPixMap(bonusSrcMap), + (BitMap *)*GetGWorldPixMap(bonusMaskMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &greaseSrcLf[0], &greaseSrcLf[0], &dest); + } + else // grease spilled + { + QOffsetRect(&dest, -6, 0); + CopyMask((BitMap *)*GetGWorldPixMap(bonusSrcMap), + (BitMap *)*GetGWorldPixMap(bonusMaskMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &greaseSrcLf[3], &greaseSrcLf[3], &dest); + + GetGWorld(&wasCPort, &wasWorld); + SetGWorld(backSrcMap, nil); + QSetRect(&spill, -distance + 5, -2, 0, 0); + QOffsetRect(&spill, dest.left + 1, dest.bottom); + PaintRect(&spill); + SetGWorld(wasCPort, wasWorld); + } +} + +//-------------------------------------------------------------- DrawBands + +void DrawFoil (Rect *theRect) +{ + CopyMask((BitMap *)*GetGWorldPixMap(bonusSrcMap), + (BitMap *)*GetGWorldPixMap(bonusMaskMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &srcRects[kFoil], &srcRects[kFoil], theRect); +} + +//-------------------------------------------------------------- DrawInvisBonus + +void DrawInvisBonus (Rect *theRect) +{ + CGrafPtr wasCPort; + GDHandle wasWorld; + + GetGWorld(&wasCPort, &wasWorld); + SetGWorld(backSrcMap, nil); + ColorFrameOval(theRect, 227); + SetGWorld(wasCPort, wasWorld); +} + +//-------------------------------------------------------------- DrawSlider + +void DrawSlider (Rect *theRect) +{ + CGrafPtr wasCPort; + GDHandle wasWorld; + + GetGWorld(&wasCPort, &wasWorld); + SetGWorld(backSrcMap, nil); + FrameRect(theRect); + SetGWorld(wasCPort, wasWorld); +} + diff --git a/GpApp/ObjectDraw2.cpp b/GpApp/ObjectDraw2.cpp new file mode 100644 index 0000000..f03ebd8 --- /dev/null +++ b/GpApp/ObjectDraw2.cpp @@ -0,0 +1,1438 @@ + +//============================================================================ +//---------------------------------------------------------------------------- +// ObjectDraw2.c +//---------------------------------------------------------------------------- +//============================================================================ + + +#include "PLResources.h" +#include "PLTextUtils.h" +#include "PLPasStr.h" +#include "Externs.h" +#include "Environ.h" +#include "Objects.h" +#include "RectUtils.h" +#include "Room.h" +#include "Utilities.h" + + +#define k8WhiteColor 0 +#define kIntenseYellowColor 5 +#define kPaleVioletColor 42 +#define kDarkFleshColor 58 +#define k8TanColor 94 +#define k8PissYellowColor 95 +#define k8BrownColor 137 +#define k8SkyColor 150 +#define k8EarthBlueColor 170 +#define k8DkRed2Color 223 +#define kIntenseGreenColor 225 +#define kIntenseBlueColor 235 +#define k8LtstGrayColor 245 +#define k8LtstGray4Color 247 +#define k8LtstGray5Color 248 +#define k8LtGrayColor 249 +#define k8Gray2Color 251 +#define k8DkGrayColor 252 +#define k8DkGray2Color 253 + +#define kBBQMaskID 3900 +#define kUpStairsMaskID 3901 +#define kTrunkMaskID 3902 +#define kMailboxRightMaskID 3903 +#define kMailboxLeftMaskID 3904 +#define kDoorInLeftMaskID 3905 +#define kDoorInRightMaskID 3906 +#define kWindowInLeftMaskID 3907 +#define kWindowInRightMaskID 3908 +#define kHipLampMaskID 3909 +#define kDecoLampMaskID 3910 +#define kGuitarMaskID 3911 +#define kTVMaskID 3912 +#define kVCRMaskID 3913 +#define kStereoMaskID 3914 +#define kMicrowaveMaskID 3915 +#define kFireplaceMaskID 3916 +#define kBearMaskID 3917 +#define kVase1MaskID 3918 +#define kVase2MaskID 3919 +#define kManholeMaskID 3920 +#define kBooksMaskID 3922 +#define kCloudMaskID 3921 +#define kRugMaskID 3923 +#define kChimesMaskID 3924 +#define kCinderMaskID 3925 +#define kFlowerBoxMaskID 3926 +#define kCobwebMaskID 3927 +#define kCobwebPictID 3958 +#define kFlowerBoxPictID 3959 +#define kCinderPictID 3960 +#define kChimesPictID 3961 +#define kRugPictID 3962 +#define kBooksPictID 3964 +#define kCloudPictID 3965 +#define kBulletinPictID 3966 +#define kManholePictID 3967 +#define kVase2PictID 3968 +#define kVase1PictID 3969 +#define kCalendarPictID 3970 +#define kMicrowavePictID 3971 +#define kBearPictID 3972 +#define kFireplacePictID 3973 +#define kOzmaPictID 3975 +#define kWindowExRightPictID 3977 +#define kWindowExLeftPictID 3978 +#define kWindowInRightPictID 3979 +#define kWindowInLeftPictID 3980 +#define kDoorExLeftPictID 3981 +#define kDoorExRightPictID 3982 +#define kDoorInRightPictID 3983 +#define kDoorInLeftPictID 3984 +#define kMailboxRightPictID 3985 +#define kMailboxLeftPictID 3986 +#define kTrunkPictID 3987 +#define kBBQPictID 3988 +#define kStereoPictID 3989 +#define kVCRPictID 3990 +#define kGuitarPictID 3991 +#define kTVPictID 3992 +#define kDecoLampPictID 3993 +#define kHipLampPictID 3994 +#define kFilingCabinetPictID 3995 +#define kDownStairsPictID 3996 +#define kUpStairsPictID 3997 + +#define kMailboxBase 296 +#define kMonthStringID 1005 + + +//============================================================== Functions +//-------------------------------------------------------------- DrawMailboxLeft + +void DrawMailboxLeft (Rect *theRect, short down) +{ + Rect bounds; + GWorldPtr tempMap; + GWorldPtr tempMask; + long darkGrayC, lightWoodC, darkWoodC; + CGrafPtr wasCPort; + GDHandle wasWorld; + OSErr theErr; + + GetGWorld(&wasCPort, &wasWorld); + SetGWorld(backSrcMap, nil); + + if (thisMac.isDepth == 4) + { + darkGrayC = 13; + lightWoodC = 9; + darkWoodC = 11; + } + else + { + darkGrayC = k8DkGray2Color; + lightWoodC = k8PissYellowColor; + darkWoodC = k8BrownColor; + } + + if (theRect->bottom < down + kMailboxBase) + { + ColorLine(theRect->left + 49, theRect->bottom, + theRect->left + 49, down + kMailboxBase, darkGrayC); + ColorLine(theRect->left + 50, theRect->bottom, + theRect->left + 50, down + kMailboxBase + 1, lightWoodC); + ColorLine(theRect->left + 51, theRect->bottom, + theRect->left + 51, down + kMailboxBase + 2, lightWoodC); + ColorLine(theRect->left + 52, theRect->bottom, + theRect->left + 52, down + kMailboxBase + 3, lightWoodC); + ColorLine(theRect->left + 53, theRect->bottom, + theRect->left + 53, down + kMailboxBase + 3, darkWoodC); + ColorLine(theRect->left + 54, theRect->bottom, + theRect->left + 54, down + kMailboxBase + 3, darkWoodC); + ColorLine(theRect->left + 55, theRect->bottom, + theRect->left + 55, down + kMailboxBase + 3, darkWoodC); + ColorLine(theRect->left + 56, theRect->bottom, + theRect->left + 56, down + kMailboxBase + 3, darkWoodC); + ColorLine(theRect->left + 57, theRect->bottom, + theRect->left + 57, down + kMailboxBase + 3, darkWoodC); + ColorLine(theRect->left + 58, theRect->bottom, + theRect->left + 58, down + kMailboxBase + 3, darkWoodC); + ColorLine(theRect->left + 59, theRect->bottom, + theRect->left + 59, down + kMailboxBase + 3, darkWoodC); + ColorLine(theRect->left + 60, theRect->bottom, + theRect->left + 60, down + kMailboxBase + 3, darkWoodC); + ColorLine(theRect->left + 61, theRect->bottom, + theRect->left + 61, down + kMailboxBase + 3, darkWoodC); + ColorLine(theRect->left + 62, theRect->bottom, + theRect->left + 62, down + kMailboxBase + 3, darkGrayC); + } + + SetGWorld(wasCPort, wasWorld); + + bounds = srcRects[kMailboxLf]; + theErr = CreateOffScreenGWorld(&tempMap, &bounds, kPreferredDepth); + SetGWorld(tempMap, nil); + LoadGraphic(kMailboxLeftPictID); + + theErr = CreateOffScreenGWorld(&tempMask, &bounds, 1); + SetGWorld(tempMask, nil); + LoadGraphic(kMailboxLeftMaskID); + + CopyMask((BitMap *)*GetGWorldPixMap(tempMap), + (BitMap *)*GetGWorldPixMap(tempMask), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &srcRects[kMailboxLf], &srcRects[kMailboxLf], theRect); + + SetGWorld(wasCPort, wasWorld); + + DisposeGWorld(tempMap); + DisposeGWorld(tempMask); +// SetPort((GrafPtr)backSrcMap); +} + +//-------------------------------------------------------------- DrawMailboxRight + +void DrawMailboxRight (Rect *theRect, short down) +{ + Rect bounds; + GWorldPtr tempMap; + GWorldPtr tempMask; + long darkGrayC, lightWoodC, darkWoodC; + CGrafPtr wasCPort; + GDHandle wasWorld; + OSErr theErr; + + GetGWorld(&wasCPort, &wasWorld); + SetGWorld(backSrcMap, nil); + + if (thisMac.isDepth == 4) + { + darkGrayC = 13; + lightWoodC = 9; + darkWoodC = 11; + } + else + { + darkGrayC = k8DkGray2Color; + lightWoodC = k8PissYellowColor; + darkWoodC = k8BrownColor; + } + + if (theRect->bottom < down + kMailboxBase) + { + ColorLine(theRect->left + 34, theRect->bottom, + theRect->left + 34, down + kMailboxBase, darkGrayC); + ColorLine(theRect->left + 35, theRect->bottom, + theRect->left + 35, down + kMailboxBase + 1, lightWoodC); + ColorLine(theRect->left + 36, theRect->bottom, + theRect->left + 36, down + kMailboxBase + 2, lightWoodC); + ColorLine(theRect->left + 37, theRect->bottom, + theRect->left + 37, down + kMailboxBase + 3, lightWoodC); + ColorLine(theRect->left + 38, theRect->bottom, + theRect->left + 38, down + kMailboxBase + 3, darkWoodC); + ColorLine(theRect->left + 39, theRect->bottom, + theRect->left + 39, down + kMailboxBase + 3, darkWoodC); + ColorLine(theRect->left + 40, theRect->bottom, + theRect->left + 40, down + kMailboxBase + 3, darkWoodC); + ColorLine(theRect->left + 41, theRect->bottom, + theRect->left + 41, down + kMailboxBase + 3, darkWoodC); + ColorLine(theRect->left + 42, theRect->bottom, + theRect->left + 42, down + kMailboxBase + 3, darkWoodC); + ColorLine(theRect->left + 43, theRect->bottom, + theRect->left + 43, down + kMailboxBase + 3, darkWoodC); + ColorLine(theRect->left + 44, theRect->bottom, + theRect->left + 44, down + kMailboxBase + 3, darkWoodC); + ColorLine(theRect->left + 45, theRect->bottom, + theRect->left + 45, down + kMailboxBase + 3, darkWoodC); + ColorLine(theRect->left + 46, theRect->bottom, + theRect->left + 46, down + kMailboxBase + 3, darkWoodC); + ColorLine(theRect->left + 47, theRect->bottom, + theRect->left + 47, down + kMailboxBase + 3, darkGrayC); + } + + SetGWorld(wasCPort, wasWorld); + + bounds = srcRects[kMailboxRt]; + theErr = CreateOffScreenGWorld(&tempMap, &bounds, kPreferredDepth); + SetGWorld(tempMap, nil); + LoadGraphic(kMailboxRightPictID); + + theErr = CreateOffScreenGWorld(&tempMask, &bounds, 1); + SetGWorld(tempMask, nil); + LoadGraphic(kMailboxRightMaskID); + + CopyMask((BitMap *)*GetGWorldPixMap(tempMap), + (BitMap *)*GetGWorldPixMap(tempMask), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &srcRects[kMailboxRt], &srcRects[kMailboxRt], theRect); + + SetGWorld(wasCPort, wasWorld); + + DisposeGWorld(tempMap); + DisposeGWorld(tempMask); +// SetPort((GrafPtr)backSrcMap); +} + +//-------------------------------------------------------------- DrawSimpleTransport + +void DrawSimpleTransport (short what, Rect *theRect) +{ + CopyMask((BitMap *)*GetGWorldPixMap(transSrcMap), + (BitMap *)*GetGWorldPixMap(transMaskMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &srcRects[what], &srcRects[what], theRect); +} + +//-------------------------------------------------------------- DrawInvisTransport + +void DrawInvisTransport (Rect *theRect) +{ + CGrafPtr wasCPort; + GDHandle wasWorld; + + GetGWorld(&wasCPort, &wasWorld); + SetGWorld(backSrcMap, nil); + ColorFrameRect(theRect, 32); + SetGWorld(wasCPort, wasWorld); +} + +//-------------------------------------------------------------- DrawLightSwitch + +void DrawLightSwitch (Rect *theRect, Boolean state) +{ + if (state) + { + CopyBits((BitMap *)*GetGWorldPixMap(switchSrcMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &lightSwitchSrc[0], theRect, srcCopy, nil); + } + else + { + CopyBits((BitMap *)*GetGWorldPixMap(switchSrcMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &lightSwitchSrc[1], theRect, srcCopy, nil); + } +} + +//-------------------------------------------------------------- DrawMachineSwitch + +void DrawMachineSwitch (Rect *theRect, Boolean state) +{ + if (state) + CopyBits((BitMap *)*GetGWorldPixMap(switchSrcMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &machineSwitchSrc[0], theRect, srcCopy, nil); + else + CopyBits((BitMap *)*GetGWorldPixMap(switchSrcMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &machineSwitchSrc[1], theRect, srcCopy, nil); +} + +//-------------------------------------------------------------- DrawThermostat + +void DrawThermostat (Rect *theRect, Boolean state) +{ + if (state) + CopyBits((BitMap *)*GetGWorldPixMap(switchSrcMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &thermostatSrc[0], theRect, srcCopy, nil); + else + CopyBits((BitMap *)*GetGWorldPixMap(switchSrcMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &thermostatSrc[1], theRect, srcCopy, nil); +} + +//-------------------------------------------------------------- DrawPowerSwitch + +void DrawPowerSwitch (Rect *theRect, Boolean state) +{ + if (state) + CopyBits((BitMap *)*GetGWorldPixMap(switchSrcMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &powerSrc[0], theRect, srcCopy, nil); + else + CopyBits((BitMap *)*GetGWorldPixMap(switchSrcMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &powerSrc[1], theRect, srcCopy, nil); +} + +//-------------------------------------------------------------- DrawKnifeSwitch + +void DrawKnifeSwitch (Rect *theRect, Boolean state) +{ + if (state) + CopyBits((BitMap *)*GetGWorldPixMap(switchSrcMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &knifeSwitchSrc[0], theRect, srcCopy, nil); + else + CopyBits((BitMap *)*GetGWorldPixMap(switchSrcMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &knifeSwitchSrc[1], theRect, srcCopy, nil); +} + +//-------------------------------------------------------------- DrawInvisibleSwitch + +void DrawInvisibleSwitch (Rect *theRect) +{ + CGrafPtr wasCPort; + GDHandle wasWorld; + + GetGWorld(&wasCPort, &wasWorld); + SetGWorld(backSrcMap, nil); + ColorFrameRect(theRect, kIntenseGreenColor); + SetGWorld(wasCPort, wasWorld); +} + +//-------------------------------------------------------------- DrawTrigger + +void DrawTrigger (Rect *theRect) +{ + CGrafPtr wasCPort; + GDHandle wasWorld; + + GetGWorld(&wasCPort, &wasWorld); + SetGWorld(backSrcMap, nil); + ColorFrameRect(theRect, kIntenseBlueColor); + SetGWorld(wasCPort, wasWorld); +} + +//-------------------------------------------------------------- DrawSoundTrigger + +void DrawSoundTrigger (Rect *theRect) +{ + CGrafPtr wasCPort; + GDHandle wasWorld; + + GetGWorld(&wasCPort, &wasWorld); + SetGWorld(backSrcMap, nil); + ColorFrameRect(theRect, kIntenseYellowColor); + SetGWorld(wasCPort, wasWorld); +} + +//-------------------------------------------------------------- DrawSimpleLight + +void DrawSimpleLight (short what, Rect *theRect) +{ + CopyMask((BitMap *)*GetGWorldPixMap(lightSrcMap), + (BitMap *)*GetGWorldPixMap(lightMaskMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &srcRects[what], &srcRects[what], theRect); +} + +//-------------------------------------------------------------- DrawFlourescent + +void DrawFlourescent (Rect *theRect) +{ + Rect partRect; + long grayC, gray2C, gray3C, gray4C, violetC; + CGrafPtr wasCPort; + GDHandle wasWorld; + + if (thisMac.isDepth == 4) + { + grayC = 7L; + gray2C = 5L; + gray3C = 4L; + gray4C = 1L; + violetC = 3L; + } + else + { + grayC = k8LtGrayColor; + gray2C = k8LtstGray5Color; + gray3C = k8LtstGray4Color; + gray4C = k8LtstGrayColor; + violetC = kPaleVioletColor; + } + + GetGWorld(&wasCPort, &wasWorld); + SetGWorld(backSrcMap, nil); + + ColorLine(theRect->left + 16, theRect->top, + theRect->right - 17, theRect->top, grayC); + ColorLine(theRect->left + 16, theRect->top + 1, + theRect->right - 17, theRect->top + 1, gray2C); + ColorLine(theRect->left + 16, theRect->top + 2, + theRect->right - 17, theRect->top + 2, gray2C); + ColorLine(theRect->left + 16, theRect->top + 3, + theRect->right - 17, theRect->top + 3, gray3C); + ColorLine(theRect->left + 16, theRect->top + 4, + theRect->right - 17, theRect->top + 4, gray4C); + ColorLine(theRect->left + 16, theRect->top + 5, + theRect->right - 17, theRect->top + 5, violetC); + ColorLine(theRect->left + 16, theRect->top + 6, + theRect->right - 17, theRect->top + 6, k8WhiteColor); + ColorLine(theRect->left + 16, theRect->top + 7, + theRect->right - 17, theRect->top + 7, k8WhiteColor); + ColorLine(theRect->left + 16, theRect->top + 8, + theRect->right - 17, theRect->top + 8, k8WhiteColor); + ColorLine(theRect->left + 16, theRect->top + 9, + theRect->right - 17, theRect->top + 9, k8WhiteColor); + ColorLine(theRect->left + 16, theRect->top + 10, + theRect->right - 17, theRect->top + 10, k8WhiteColor); + ColorLine(theRect->left + 16, theRect->top + 11, + theRect->right - 17, theRect->top + 11, violetC); + + SetGWorld(wasCPort, wasWorld); + + partRect = flourescentSrc1; + ZeroRectCorner(&partRect); + QOffsetRect(&partRect, theRect->left, theRect->top); + + CopyMask((BitMap *)*GetGWorldPixMap(lightSrcMap), + (BitMap *)*GetGWorldPixMap(lightMaskMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &flourescentSrc1, &flourescentSrc1, &partRect); + + partRect = flourescentSrc2; + ZeroRectCorner(&partRect); + QOffsetRect(&partRect, -partRect.right, 0); + QOffsetRect(&partRect, theRect->right, theRect->top); + + CopyMask((BitMap *)*GetGWorldPixMap(lightSrcMap), + (BitMap *)*GetGWorldPixMap(lightMaskMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &flourescentSrc2, &flourescentSrc2, &partRect); +} + +//-------------------------------------------------------------- DrawTrackLight + +void DrawTrackLight (Rect *theRect) +{ + #define kTrackLightSpacing 64 + Rect partRect; + long grayC, gray2C, gray3C, gray4C; + short which, howMany, i, spread; + CGrafPtr wasCPort; + GDHandle wasWorld; + + if (thisMac.isDepth == 4) + { + grayC = 7L; + gray2C = 8L; + gray3C = 4L; + gray4C = 11L; + } + else + { + grayC = k8LtGrayColor; + gray2C = k8Gray2Color; + gray3C = k8LtstGray4Color; + gray4C = k8DkGrayColor; + } + + GetGWorld(&wasCPort, &wasWorld); + SetGWorld(backSrcMap, nil); + + ColorLine(theRect->left, theRect->top - 3, + theRect->right - 1, theRect->top - 3, gray2C); + ColorLine(theRect->left, theRect->top - 2, + theRect->right - 1, theRect->top - 2, grayC); + ColorLine(theRect->left, theRect->top - 1, + theRect->right - 1, theRect->top - 1, grayC); + ColorLine(theRect->left, theRect->top, + theRect->right - 1, theRect->top, gray3C); + ColorLine(theRect->left, theRect->top + 1, + theRect->right - 1, theRect->top + 1, gray4C); + ColorLine(theRect->left, theRect->top + 2, + theRect->right - 1, theRect->top + 2, gray3C); + + SetGWorld(wasCPort, wasWorld); + + partRect = trackLightSrc[0]; // left most track light + ZeroRectCorner(&partRect); + QOffsetRect(&partRect, theRect->left, theRect->top); + which = 0; + CopyMask((BitMap *)*GetGWorldPixMap(lightSrcMap), + (BitMap *)*GetGWorldPixMap(lightMaskMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &trackLightSrc[which], &trackLightSrc[which], &partRect); + + partRect = trackLightSrc[0]; // right most track light + ZeroRectCorner(&partRect); + QOffsetRect(&partRect, -partRect.right, 0); + QOffsetRect(&partRect, theRect->right, theRect->top); + which = 2; + CopyMask((BitMap *)*GetGWorldPixMap(lightSrcMap), + (BitMap *)*GetGWorldPixMap(lightMaskMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &trackLightSrc[which], &trackLightSrc[which], &partRect); + + howMany = ((RectWide(theRect) - RectWide(&trackLightSrc[0])) / + kTrackLightSpacing) - 1; + if (howMany > 0) + { + which = 0; + spread = (RectWide(theRect) - RectWide(&trackLightSrc[0])) / (howMany + 1); + for (i = 0; i < howMany; i++) + { + partRect = trackLightSrc[0]; // filler track lights + ZeroRectCorner(&partRect); + QOffsetRect(&partRect, theRect->left, theRect->top); + QOffsetRect(&partRect, spread * (i + 1), 0); + which++; + if (which >= kNumTrackLights) + which = 0; + CopyMask((BitMap *)*GetGWorldPixMap(lightSrcMap), + (BitMap *)*GetGWorldPixMap(lightMaskMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &trackLightSrc[which], &trackLightSrc[which], &partRect); + } + } +} + +//-------------------------------------------------------------- DrawInvisLight + +void DrawInvisLight (Rect *theRect) +{ + CGrafPtr wasCPort; + GDHandle wasWorld; + + GetGWorld(&wasCPort, &wasWorld); + SetGWorld(backSrcMap, nil); + ColorFrameOval(theRect, 17); + SetGWorld(wasCPort, wasWorld); +} + +//-------------------------------------------------------------- DrawSimpleAppliance + +void DrawSimpleAppliance (short what, Rect *theRect) +{ + CopyMask((BitMap *)*GetGWorldPixMap(applianceSrcMap), + (BitMap *)*GetGWorldPixMap(applianceMaskMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &srcRects[what], &srcRects[what], theRect); +} + +//-------------------------------------------------------------- DrawMacPlus + +void DrawMacPlus (Rect *theRect, Boolean isOn, Boolean isLit) +{ + Rect screen; + + if (isLit) + { + CopyMask((BitMap *)*GetGWorldPixMap(applianceSrcMap), + (BitMap *)*GetGWorldPixMap(applianceMaskMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &srcRects[kMacPlus], &srcRects[kMacPlus], theRect); + } + + screen = plusScreen1; + ZeroRectCorner(&screen); + QOffsetRect(&screen, theRect->left + 10, theRect->top + 7); + if (isOn) + { + CopyBits((BitMap *)*GetGWorldPixMap(applianceSrcMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &plusScreen2, &screen, srcCopy, nil); + } + else + { + CopyBits((BitMap *)*GetGWorldPixMap(applianceSrcMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &plusScreen1, &screen, srcCopy, nil); + } +} + +//-------------------------------------------------------------- DrawTV + +void DrawTV (Rect *theRect, Boolean isOn, Boolean isLit) +{ + Rect bounds; + GWorldPtr tempMap; + GWorldPtr tempMask; + CGrafPtr wasCPort; + GDHandle wasWorld; + OSErr theErr; + + if (isLit) + { + GetGWorld(&wasCPort, &wasWorld); + + bounds = srcRects[kTV]; + theErr = CreateOffScreenGWorld(&tempMap, &bounds, kPreferredDepth); + SetGWorld(tempMap, nil); + LoadGraphic(kTVPictID); + + theErr = CreateOffScreenGWorld(&tempMask, &bounds, 1); + SetGWorld(tempMask, nil); + LoadGraphic(kTVMaskID); + + CopyMask((BitMap *)*GetGWorldPixMap(tempMap), + (BitMap *)*GetGWorldPixMap(tempMask), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &srcRects[kTV], &srcRects[kTV], theRect); + + SetGWorld(wasCPort, wasWorld); + + DisposeGWorld(tempMap); + DisposeGWorld(tempMask); +// SetPort((GrafPtr)backSrcMap); + } + + bounds = tvScreen1; + ZeroRectCorner(&bounds); + QOffsetRect(&bounds, theRect->left + 17, theRect->top + 10); + if (isOn) + { + CopyBits((BitMap *)*GetGWorldPixMap(applianceSrcMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &tvScreen2, &bounds, srcCopy, nil); + } + else + { + CopyBits((BitMap *)*GetGWorldPixMap(applianceSrcMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &tvScreen1, &bounds, srcCopy, nil); + } +} + +//-------------------------------------------------------------- DrawCoffee + +void DrawCoffee (Rect *theRect, Boolean isOn, Boolean isLit) +{ + Rect light; + + if (isLit) + { + CopyMask((BitMap *)*GetGWorldPixMap(applianceSrcMap), + (BitMap *)*GetGWorldPixMap(applianceMaskMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &srcRects[kCoffee], &srcRects[kCoffee], theRect); + } + + light = coffeeLight1; + ZeroRectCorner(&light); + QOffsetRect(&light, theRect->left + 32, theRect->top + 57); + if (isOn) + { + CopyBits((BitMap *)*GetGWorldPixMap(applianceSrcMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &coffeeLight2, &light, srcCopy, nil); + } + else + { + CopyBits((BitMap *)*GetGWorldPixMap(applianceSrcMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &coffeeLight1, &light, srcCopy, nil); + } +} + +//-------------------------------------------------------------- DrawOutlet + +void DrawOutlet (Rect *theRect) +{ + CopyMask((BitMap *)*GetGWorldPixMap(applianceSrcMap), + (BitMap *)*GetGWorldPixMap(applianceMaskMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &srcRects[kOutlet], &srcRects[kOutlet], theRect); +} + +//-------------------------------------------------------------- DrawVCR + +void DrawVCR (Rect *theRect, Boolean isOn, Boolean isLit) +{ + Rect bounds; + GWorldPtr tempMap; + GWorldPtr tempMask; + CGrafPtr wasCPort; + GDHandle wasWorld; + OSErr theErr; + + if (isLit) + { + GetGWorld(&wasCPort, &wasWorld); + + bounds = srcRects[kVCR]; + theErr = CreateOffScreenGWorld(&tempMap, &bounds, kPreferredDepth); + SetGWorld(tempMap, nil); + LoadGraphic(kVCRPictID); + + theErr = CreateOffScreenGWorld(&tempMask, &bounds, 1); + SetGWorld(tempMask, nil); + LoadGraphic(kVCRMaskID); + + CopyMask((BitMap *)*GetGWorldPixMap(tempMap), + (BitMap *)*GetGWorldPixMap(tempMask), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &srcRects[kVCR], &srcRects[kVCR], theRect); + + SetGWorld(wasCPort, wasWorld); + + DisposeGWorld(tempMap); + DisposeGWorld(tempMask); + +// SetPort((GrafPtr)backSrcMap); + } + + bounds = vcrTime1; + ZeroRectCorner(&bounds); + QOffsetRect(&bounds, theRect->left + 64, theRect->top + 6); + if (isOn) + { + CopyBits((BitMap *)*GetGWorldPixMap(applianceSrcMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &vcrTime2, &bounds, srcCopy, nil); + } + else + { + CopyBits((BitMap *)*GetGWorldPixMap(applianceSrcMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &vcrTime1, &bounds, srcCopy, nil); + } +} + +//-------------------------------------------------------------- DrawStereo + +void DrawStereo (Rect *theRect, Boolean isOn, Boolean isLit) +{ + Rect bounds; + GWorldPtr tempMap; + GWorldPtr tempMask; + CGrafPtr wasCPort; + GDHandle wasWorld; + OSErr theErr; + + + if (isLit) + { + GetGWorld(&wasCPort, &wasWorld); + + bounds = srcRects[kStereo]; + theErr = CreateOffScreenGWorld(&tempMap, &bounds, kPreferredDepth); + SetGWorld(tempMap, nil); + LoadGraphic(kStereoPictID); + + theErr = CreateOffScreenGWorld(&tempMask, &bounds, 1); + SetGWorld(tempMask, nil); + LoadGraphic(kStereoMaskID); + + CopyMask((BitMap *)*GetGWorldPixMap(tempMap), + (BitMap *)*GetGWorldPixMap(tempMask), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &srcRects[kStereo], &srcRects[kStereo], theRect); + + SetGWorld(wasCPort, wasWorld); + + DisposeGWorld(tempMap); + DisposeGWorld(tempMask); + +// SetPort((GrafPtr)backSrcMap); + } + + bounds = stereoLight1; + ZeroRectCorner(&bounds); + QOffsetRect(&bounds, theRect->left + 56, theRect->top + 20); + if (isOn) + { + CopyBits((BitMap *)*GetGWorldPixMap(applianceSrcMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &stereoLight2, &bounds, srcCopy, nil); + } + else + { + CopyBits((BitMap *)*GetGWorldPixMap(applianceSrcMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &stereoLight1, &bounds, srcCopy, nil); + } +} + +//-------------------------------------------------------------- DrawMicrowave + +void DrawMicrowave (Rect *theRect, Boolean isOn, Boolean isLit) +{ + Rect bounds; + GWorldPtr tempMap; + GWorldPtr tempMask; + CGrafPtr wasCPort; + GDHandle wasWorld; + OSErr theErr; + + + if (isLit) + { + GetGWorld(&wasCPort, &wasWorld); + + bounds = srcRects[kMicrowave]; + theErr = CreateOffScreenGWorld(&tempMap, &bounds, kPreferredDepth); + SetGWorld(tempMap, nil); + LoadGraphic(kMicrowavePictID); + + theErr = CreateOffScreenGWorld(&tempMask, &bounds, 1); + SetGWorld(tempMask, nil); + LoadGraphic(kMicrowaveMaskID); + + CopyMask((BitMap *)*GetGWorldPixMap(tempMap), + (BitMap *)*GetGWorldPixMap(tempMask), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &srcRects[kMicrowave], &srcRects[kMicrowave], theRect); + + SetGWorld(wasCPort, wasWorld); + + DisposeGWorld(tempMap); + DisposeGWorld(tempMask); + +// SetPort((GrafPtr)backSrcMap); + } + + bounds = microOn; + ZeroRectCorner(&bounds); + QOffsetRect(&bounds, theRect->left + 14, theRect->top + 13); + if (isOn) + { + CopyBits((BitMap *)*GetGWorldPixMap(applianceSrcMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + µOn, &bounds, srcCopy, nil); + QOffsetRect(&bounds, 16, 0); + CopyBits((BitMap *)*GetGWorldPixMap(applianceSrcMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + µOn, &bounds, srcCopy, nil); + QOffsetRect(&bounds, 16, 0); + CopyBits((BitMap *)*GetGWorldPixMap(applianceSrcMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + µOn, &bounds, srcCopy, nil); + } + else if (isLit) + { + CopyBits((BitMap *)*GetGWorldPixMap(applianceSrcMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + µOff, &bounds, srcCopy, nil); + QOffsetRect(&bounds, 16, 0); + CopyBits((BitMap *)*GetGWorldPixMap(applianceSrcMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + µOff, &bounds, srcCopy, nil); + QOffsetRect(&bounds, 16, 0); + CopyBits((BitMap *)*GetGWorldPixMap(applianceSrcMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + µOff, &bounds, srcCopy, nil); + } +} + +//-------------------------------------------------------------- DrawBalloon + +void DrawBalloon (Rect *theRect) +{ + CopyMask((BitMap *)*GetGWorldPixMap(balloonSrcMap), + (BitMap *)*GetGWorldPixMap(balloonMaskMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &balloonSrc[1], &balloonSrc[1], theRect); +} + +//-------------------------------------------------------------- DrawCopter + +void DrawCopter (Rect *theRect) +{ + CopyMask((BitMap *)*GetGWorldPixMap(copterSrcMap), + (BitMap *)*GetGWorldPixMap(copterMaskMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &copterSrc[1], &copterSrc[1], theRect); +} + +//-------------------------------------------------------------- DrawDart + +void DrawDart (Rect *theRect, short which) +{ + if (which == kDartLf) + { + CopyMask((BitMap *)*GetGWorldPixMap(dartSrcMap), + (BitMap *)*GetGWorldPixMap(dartMaskMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &dartSrc[0], &dartSrc[0], theRect); + } + else + { + CopyMask((BitMap *)*GetGWorldPixMap(dartSrcMap), + (BitMap *)*GetGWorldPixMap(dartMaskMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &dartSrc[2], &dartSrc[2], theRect); + } +} + +//-------------------------------------------------------------- DrawBall + +void DrawBall (short what, Rect *theRect) +{ + CopyMask((BitMap *)*GetGWorldPixMap(ballSrcMap), + (BitMap *)*GetGWorldPixMap(ballMaskMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &srcRects[what], &srcRects[what], theRect); +} + +//-------------------------------------------------------------- DrawFish + +void DrawFish (short what, Rect *theRect) +{ + CopyMask((BitMap *)*GetGWorldPixMap(enemySrcMap), + (BitMap *)*GetGWorldPixMap(enemyMaskMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &srcRects[what], &srcRects[what], theRect); +} + +//-------------------------------------------------------------- DrawDrip + +void DrawDrip (Rect *theRect) +{ + CopyMask((BitMap *)*GetGWorldPixMap(dripSrcMap), + (BitMap *)*GetGWorldPixMap(dripMaskMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &dripSrc[3], &dripSrc[3], theRect); +} + +//-------------------------------------------------------------- DrawMirror + +void DrawMirror (Rect *mirror) +{ + Rect tempRect; + long grayC; + CGrafPtr wasCPort; + GDHandle wasWorld; + + if (thisMac.isDepth == 4) + { + grayC = 13; + } + else + { + grayC = k8DkGray2Color; + } + + GetGWorld(&wasCPort, &wasWorld); + SetGWorld(backSrcMap, nil); + + tempRect = *mirror; + ColorRect(&tempRect, k8WhiteColor); + ColorFrameRect(&tempRect, grayC); + InsetRect(&tempRect, 1, 1); + ColorFrameRect(&tempRect, k8EarthBlueColor); + InsetRect(&tempRect, 1, 1); + ColorFrameRect(&tempRect, k8EarthBlueColor); + InsetRect(&tempRect, 1, 1); + ColorFrameRect(&tempRect, grayC); + + SetGWorld(wasCPort, wasWorld); +} + +//-------------------------------------------------------------- DrawSimpleClutter + +void DrawSimpleClutter (short what, Rect *theRect) +{ + CopyMask((BitMap *)*GetGWorldPixMap(clutterSrcMap), + (BitMap *)*GetGWorldPixMap(clutterMaskMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &srcRects[what], &srcRects[what], theRect); +} + +//-------------------------------------------------------------- DrawFlower + +void DrawFlower (Rect *theRect, short which) +{ + CopyMask((BitMap *)*GetGWorldPixMap(clutterSrcMap), + (BitMap *)*GetGWorldPixMap(clutterMaskMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &flowerSrc[which], &flowerSrc[which], theRect); +} + +//-------------------------------------------------------------- DrawWallWindow + +void DrawWallWindow (Rect *window) +{ + #define kWindowSillThick 7 + Rect tempRect, tempRect2; + long brownC, tanC, dkstRedC; + short halfWay; + CGrafPtr wasCPort; + GDHandle wasWorld; + + if (thisMac.isDepth == 4) + { + brownC = 11; + tanC = 9; + dkstRedC = 15; + } + else + { + brownC = k8BrownColor; + tanC = k8TanColor; + dkstRedC = k8DkRed2Color; + } + + GetGWorld(&wasCPort, &wasWorld); + SetGWorld(backSrcMap, nil); + + tempRect = *window; + InsetRect(&tempRect, 3, 0); + ColorRect(&tempRect, brownC); + HiliteRect(&tempRect, tanC, dkstRedC); + + tempRect = *window; // top sill + tempRect.bottom = tempRect.top + kWindowSillThick; + tempRect.left++; + tempRect.right--; + ColorRect(&tempRect, brownC); + HiliteRect(&tempRect, tanC, dkstRedC); + tempRect.left--; + tempRect.right++; + tempRect.top += 2; + tempRect.bottom -= 2; + ColorRect(&tempRect, brownC); + HiliteRect(&tempRect, tanC, dkstRedC); + + tempRect = *window; // bottom sill + tempRect.top = tempRect.bottom - kWindowSillThick; + QOffsetRect(&tempRect, 0, -4); + tempRect.left++; + tempRect.right--; + ColorRect(&tempRect, brownC); + HiliteRect(&tempRect, tanC, dkstRedC); + tempRect.left--; + tempRect.right++; + tempRect.top += 2; + tempRect.bottom -= 2; + ColorRect(&tempRect, brownC); + HiliteRect(&tempRect, tanC, dkstRedC); + + tempRect = *window; // inside frame + tempRect.left += 8; + tempRect.right -= 8; + tempRect.top += 11; + tempRect.bottom -= 15; + HiliteRect(&tempRect, dkstRedC, tanC); + + halfWay = (tempRect.top + tempRect.bottom) / 2; + + tempRect2 = tempRect; // top pane + tempRect2.bottom = halfWay + 2; + InsetRect(&tempRect2, 5, 5); + HiliteRect(&tempRect2, dkstRedC, tanC); + InsetRect(&tempRect2, 1, 1); + if (thisMac.isDepth == 4) + ColorRect(&tempRect2, 5); + else + ColorRect(&tempRect2, k8SkyColor); + + tempRect2 = tempRect; // bottom pane + tempRect2.top = halfWay - 3; + InsetRect(&tempRect2, 5, 5); + HiliteRect(&tempRect2, dkstRedC, tanC); + InsetRect(&tempRect2, 1, 1); + if (thisMac.isDepth == 4) + ColorRect(&tempRect2, 5); + else + ColorRect(&tempRect2, k8SkyColor); + + ColorLine(tempRect2.left - 5, tempRect2.top - 7, + tempRect2.right + 5, tempRect2.top - 7, tanC); + + SetGWorld(wasCPort, wasWorld); +} + +//-------------------------------------------------------------- DrawCalendar + +void DrawCalendar (Rect *theRect) +{ + DateTimeRec timeRec; + Rect bounds; + PicHandle thePicture; + Str255 monthStr; + CGrafPtr wasCPort; + GDHandle wasWorld; + + GetGWorld(&wasCPort, &wasWorld); + SetGWorld(backSrcMap, nil); + + thePicture = GetPicture(kCalendarPictID); + if (thePicture == nil) + RedAlert(kErrFailedGraphicLoad); + + HLock((Handle)thePicture); + bounds = (*thePicture)->picFrame; + HUnlock((Handle)thePicture); + QOffsetRect(&bounds, -bounds.left, -bounds.top); + QOffsetRect(&bounds, theRect->left, theRect->top); + DrawPicture(thePicture, &bounds); + ReleaseResource((Handle)thePicture); + + SetPort((GrafPtr)backSrcMap); + TextFace(bold); + TextFont(applFont); + TextSize(9); + GetTime(&timeRec); + GetIndString(monthStr, kMonthStringID, timeRec.month); + MoveTo(theRect->left + ((64 - StringWidth(monthStr)) / 2), theRect->top + 55); + ColorText(monthStr, kDarkFleshColor); + + SetGWorld(wasCPort, wasWorld); +} + +//-------------------------------------------------------------- DrawBulletin + +void DrawBulletin (Rect *theRect) +{ + Rect bounds; + PicHandle thePicture; + CGrafPtr wasCPort; + GDHandle wasWorld; + + GetGWorld(&wasCPort, &wasWorld); + SetGWorld(backSrcMap, nil); + + thePicture = GetPicture(kBulletinPictID); + if (thePicture == nil) + RedAlert(kErrFailedGraphicLoad); + + HLock((Handle)thePicture); + bounds = (*thePicture)->picFrame; + HUnlock((Handle)thePicture); + QOffsetRect(&bounds, -bounds.left, -bounds.top); + QOffsetRect(&bounds, theRect->left, theRect->top); + DrawPicture(thePicture, &bounds); + ReleaseResource((Handle)thePicture); + + SetGWorld(wasCPort, wasWorld); +} + +//-------------------------------------------------------------- DrawPictObject + +void DrawPictObject (short what, Rect *theRect) +{ + Rect bounds; + PicHandle thePicture; + short pictID; + CGrafPtr wasCPort; + GDHandle wasWorld; + + switch (what) + { + case kFilingCabinet: + pictID = kFilingCabinetPictID; + break; + + case kDownStairs: + pictID = kDownStairsPictID; + break; + + case kDoorExRt: + pictID = kDoorExRightPictID; + break; + + case kDoorExLf: + pictID = kDoorExLeftPictID; + break; + + case kWindowExRt: + pictID = kWindowExRightPictID; + break; + + case kWindowExLf: + pictID = kWindowExLeftPictID; + break; + + case kOzma: + pictID = kOzmaPictID; + break; + } + + GetGWorld(&wasCPort, &wasWorld); + SetGWorld(backSrcMap, nil); + + thePicture = GetPicture(pictID); + if (thePicture == nil) + RedAlert(kErrFailedGraphicLoad); + + bounds = srcRects[what]; + QOffsetRect(&bounds, theRect->left, theRect->top); + DrawPicture(thePicture, &bounds); + ReleaseResource((Handle)thePicture); + + SetGWorld(wasCPort, wasWorld); +} + +//-------------------------------------------------------------- DrawPictWithMaskObject + +void DrawPictWithMaskObject (short what, Rect *theRect) +{ + Rect bounds; + GWorldPtr tempMap; + GWorldPtr tempMask; + short pictID, maskID; + CGrafPtr wasCPort; + GDHandle wasWorld; + OSErr theErr; + + GetGWorld(&wasCPort, &wasWorld); + + switch (what) + { + case kCobweb: + pictID = kCobwebPictID; + maskID = kCobwebMaskID; + break; + + case kCloud: + pictID = kCloudPictID; + maskID = kCloudMaskID; + break; + } + + bounds = srcRects[what]; + theErr = CreateOffScreenGWorld(&tempMap, &bounds, kPreferredDepth); + SetGWorld(tempMap, nil); + LoadGraphic(pictID); + + theErr = CreateOffScreenGWorld(&tempMask, &bounds, 1); + SetGWorld(tempMask, nil); + LoadGraphic(maskID); + + CopyMask((BitMap *)*GetGWorldPixMap(tempMap), + (BitMap *)*GetGWorldPixMap(tempMask), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &srcRects[what], &srcRects[what], theRect); + + SetGWorld(wasCPort, wasWorld); + + DisposeGWorld(tempMap); + DisposeGWorld(tempMask); + +// SetPort((GrafPtr)backSrcMap); +} + +//-------------------------------------------------------------- DrawPictSansWhiteObject + +void DrawPictSansWhiteObject (short what, Rect *theRect) +{ + Rect bounds; + CGrafPtr tempMap; + short pictID; + CGrafPtr wasCPort; + GDHandle wasWorld; + OSErr theErr; + + GetGWorld(&wasCPort, &wasWorld); + + switch (what) + { + case kBBQ: + pictID = kBBQPictID; + break; + + case kTrunk: + pictID = kTrunkPictID; + break; + + case kManhole: + pictID = kManholePictID; + break; + + case kBooks: + pictID = kBooksPictID; + break; + + case kUpStairs: + pictID = kUpStairsPictID; + break; + + case kDoorInLf: + pictID = kDoorInLeftPictID; + break; + + case kDoorInRt: + pictID = kDoorInRightPictID; + break; + + case kWindowInLf: + pictID = kWindowInLeftPictID; + break; + + case kWindowInRt: + pictID = kWindowInRightPictID; + break; + + case kHipLamp: + pictID = kHipLampPictID; + break; + + case kDecoLamp: + pictID = kDecoLampPictID; + break; + + case kGuitar: + pictID = kGuitarPictID; + break; + + case kCinderBlock: + pictID = kCinderPictID; + break; + + case kFlowerBox: + pictID = kFlowerBoxPictID; + break; + + case kFireplace: + pictID = kFireplacePictID; + break; + + case kBear: + pictID = kBearPictID; + break; + + case kVase1: + pictID = kVase1PictID; + break; + + case kVase2: + pictID = kVase2PictID; + break; + + case kRug: + pictID = kRugPictID; + break; + + case kChimes: + pictID = kChimesPictID; + break; + } + + bounds = srcRects[what]; + theErr = CreateOffScreenGWorld(&tempMap, &bounds, kPreferredDepth); + SetGWorld(tempMap, nil); + LoadGraphic(pictID); + + CopyBits((BitMap *)*GetGWorldPixMap(tempMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &srcRects[what], theRect, transparent, nil); + + SetGWorld(wasCPort, wasWorld); + + DisposeGWorld(tempMap); +// SetPort((GrafPtr)backSrcMap); +} +//-------------------------------------------------------------- DrawCustPictSansWhite + +void DrawCustPictSansWhite (short pictID, Rect *theRect) +{ + Rect bounds; + GWorldPtr tempMap; + CGrafPtr wasCPort; + GDHandle wasWorld; + OSErr theErr; + + GetGWorld(&wasCPort, &wasWorld); + + bounds = *theRect; + ZeroRectCorner(&bounds); + theErr = CreateOffScreenGWorld(&tempMap, &bounds, kPreferredDepth); + SetGWorld(tempMap, nil); + LoadGraphic(pictID); + + CopyBits((BitMap *)*GetGWorldPixMap(tempMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &bounds, theRect, transparent, nil); + + SetGWorld(wasCPort, wasWorld); + + DisposeGWorld(tempMap); +// SetPort((GrafPtr)backSrcMap); +} + diff --git a/GpApp/ObjectDrawAll.cpp b/GpApp/ObjectDrawAll.cpp new file mode 100644 index 0000000..cacae68 --- /dev/null +++ b/GpApp/ObjectDrawAll.cpp @@ -0,0 +1,966 @@ + +//============================================================================ +//---------------------------------------------------------------------------- +// ObjectDrawAll.c +//---------------------------------------------------------------------------- +//============================================================================ + + +#include "Externs.h" +#include "Environ.h" +#include "RectUtils.h" + + +extern Rect localRoomsDest[], movieRect; +extern short localNumbers[]; +extern short numLights, tvWithMovieNumber; +extern Boolean tvOn; + + +//============================================================== Functions +//-------------------------------------------------------------- DrawARoomsObjects + +void DrawARoomsObjects (short neighbor, Boolean redraw) +{ + objectType thisObject; + Rect whoCares, itsRect, rectA, rectB, testRect; + RgnHandle theRgn; + short i, legit, dynamicNum, n; + short floor, suite, room, obj; + char wasState; + Boolean isLit; + + if (localNumbers[neighbor] == kRoomIsEmpty) + return; + + testRect = houseRect; + ZeroRectCorner(&testRect); + isLit = (numLights > 0); + + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + + for (i = 0; i < kMaxRoomObs; i++) + { + dynamicNum = -1; + legit = -1; + + if (IsThisValid(localNumbers[neighbor], i)) + { + thisObject = (*thisHouse)->rooms[localNumbers[neighbor]].objects[i]; + switch (thisObject.what) + { + case kObjectIsEmpty: + break; + + case kFloorVent: + case kCeilingVent: + case kFloorBlower: + case kCeilingBlower: + case kSewerGrate: + case kLeftFan: + case kRightFan: + case kGrecoVent: + case kSewerBlower: + GetObjectRect(&thisObject, &itsRect); + OffsetRectRoomRelative(&itsRect, neighbor); + if ((SectRect(&itsRect, &testRect, &whoCares)) && isLit) + DrawSimpleBlowers(thisObject.what, &itsRect); + break; + + case kTaper: + GetObjectRect(&thisObject, &itsRect); + OffsetRectRoomRelative(&itsRect, neighbor); + if (SectRect(&itsRect, &testRect, &whoCares)) + { + if (isLit) + DrawSimpleBlowers(thisObject.what, &itsRect); + if (neighbor == kCentralRoom) + { + if (redraw) + ReBackUpFlames(localNumbers[neighbor], i); + else + AddCandleFlame(localNumbers[neighbor], i, + itsRect.left + 10, itsRect.top + 7); + } + else + { + QSetRect(&rectA, 0, 0, 16, 15); + QOffsetRect(&rectA, itsRect.left + 10 - 8, itsRect.top + 7 - 15); + rectB = localRoomsDest[kCentralRoom]; + rectB.top -= kFloorSupportTall; + rectB.bottom += kFloorSupportTall; + if (!SectRect(&rectA, &rectB, &whoCares)) + { + if (redraw) + ReBackUpFlames(localNumbers[neighbor], i); + else + AddCandleFlame(localNumbers[neighbor], i, + itsRect.left + 10, itsRect.top + 7); + } + } + } + break; + + case kCandle: + GetObjectRect(&thisObject, &itsRect); + OffsetRectRoomRelative(&itsRect, neighbor); + if (SectRect(&itsRect, &testRect, &whoCares)) + { + if (isLit) + DrawSimpleBlowers(thisObject.what, &itsRect); + if (neighbor == kCentralRoom) + { + if (redraw) + ReBackUpFlames(localNumbers[neighbor], i); + else + AddCandleFlame(localNumbers[neighbor], i, + itsRect.left + 14, itsRect.top + 7); + } + else + { + QSetRect(&rectA, 0, 0, 16, 15); + QOffsetRect(&rectA, itsRect.left + 14 - 8, itsRect.top + 7 - 15); + rectB = localRoomsDest[kCentralRoom]; + rectB.top -= kFloorSupportTall; + rectB.bottom += kFloorSupportTall; + if (!SectRect(&rectA, &rectB, &whoCares)) + { + if (redraw) + ReBackUpFlames(localNumbers[neighbor], i); + else + AddCandleFlame(localNumbers[neighbor], i, + itsRect.left + 14, itsRect.top + 7); + } + } + } + break; + + case kStubby: + GetObjectRect(&thisObject, &itsRect); + OffsetRectRoomRelative(&itsRect, neighbor); + if (SectRect(&itsRect, &testRect, &whoCares)) + { + if (isLit) + DrawSimpleBlowers(thisObject.what, &itsRect); + if (neighbor == kCentralRoom) + { + if (redraw) + ReBackUpFlames(localNumbers[neighbor], i); + else + AddCandleFlame(localNumbers[neighbor], i, + itsRect.left + 9, itsRect.top + 7); + } + else + { + QSetRect(&rectA, 0, 0, 16, 15); + QOffsetRect(&rectA, itsRect.left + 9 - 8, itsRect.top + 7 - 15); + rectB = localRoomsDest[kCentralRoom]; + rectB.top -= kFloorSupportTall; + rectB.bottom += kFloorSupportTall; + if (!SectRect(&rectA, &rectB, &whoCares)) + { + if (redraw) + ReBackUpFlames(localNumbers[neighbor], i); + else + AddCandleFlame(localNumbers[neighbor], i, + itsRect.left + 9, itsRect.top + 7); + } + } + } + break; + + case kTiki: + GetObjectRect(&thisObject, &itsRect); + OffsetRectRoomRelative(&itsRect, neighbor); + if (isLit) + DrawTiki(&itsRect, playOriginV + VerticalRoomOffset(neighbor)); + if (redraw) + ReBackUpTikiFlames(localNumbers[neighbor], i); + else + AddTikiFlame(localNumbers[neighbor], i, + itsRect.left + 10, itsRect.top - 9); + break; + + case kBBQ: + GetObjectRect(&thisObject, &itsRect); + OffsetRectRoomRelative(&itsRect, neighbor); + if (SectRect(&itsRect, &testRect, &whoCares)) + { + if (isLit) + DrawPictSansWhiteObject(thisObject.what, &itsRect); + if (redraw) + ReBackUpBBQCoals(localNumbers[neighbor], i); + else + AddBBQCoals(localNumbers[neighbor], i, + itsRect.left + 16, itsRect.top + 9); + } + break; + + case kInvisBlower: + case kLiftArea: + break; + + case kTable: + GetObjectRect(&thisObject, &itsRect); + OffsetRectRoomRelative(&itsRect, neighbor); + if (isLit) + DrawTable(&itsRect, playOriginV); + break; + + case kShelf: + GetObjectRect(&thisObject, &itsRect); + OffsetRectRoomRelative(&itsRect, neighbor); + if (isLit) + DrawShelf(&itsRect); + break; + + case kCabinet: + GetObjectRect(&thisObject, &itsRect); + OffsetRectRoomRelative(&itsRect, neighbor); + if ((SectRect(&itsRect, &testRect, &whoCares)) && isLit) + DrawCabinet(&itsRect); + break; + + case kFilingCabinet: + case kOzma: + GetObjectRect(&thisObject, &itsRect); + OffsetRectRoomRelative(&itsRect, neighbor); + if ((SectRect(&itsRect, &testRect, &whoCares)) && isLit) + DrawPictObject(thisObject.what, &itsRect); + break; + + case kWasteBasket: + case kMilkCrate: + GetObjectRect(&thisObject, &itsRect); + OffsetRectRoomRelative(&itsRect, neighbor); + if ((SectRect(&itsRect, &testRect, &whoCares)) && isLit) + DrawSimpleFurniture(thisObject.what, &itsRect); + break; + + case kCounter: + GetObjectRect(&thisObject, &itsRect); + OffsetRectRoomRelative(&itsRect, neighbor); + if ((SectRect(&itsRect, &testRect, &whoCares)) && isLit) + DrawCounter(&itsRect); + break; + + case kDresser: + GetObjectRect(&thisObject, &itsRect); + OffsetRectRoomRelative(&itsRect, neighbor); + if (isLit) + DrawDresser(&itsRect); + break; + + case kDeckTable: + GetObjectRect(&thisObject, &itsRect); + OffsetRectRoomRelative(&itsRect, neighbor); + if (isLit) + DrawDeckTable(&itsRect, playOriginV); + break; + + case kStool: + GetObjectRect(&thisObject, &itsRect); + OffsetRectRoomRelative(&itsRect, neighbor); + if (isLit) + DrawStool(&itsRect, playOriginV + VerticalRoomOffset(neighbor)); + break; + + case kInvisObstacle: + break; + + case kManhole: + GetObjectRect(&thisObject, &itsRect); + OffsetRectRoomRelative(&itsRect, neighbor); + if (SectRect(&itsRect, &testRect, &whoCares)) + { + AddTempManholeRect(&itsRect); + if (isLit) + DrawPictSansWhiteObject(thisObject.what, &itsRect); + } + break; + + case kInvisBounce: + break; + + case kRedClock: + GetObjectRect(&thisObject, &itsRect); + OffsetRectRoomRelative(&itsRect, neighbor); + if (SectRect(&itsRect, &testRect, &whoCares)) + { + if (redraw) + legit = ReBackUpSavedMap(&itsRect, localNumbers[neighbor], i); + else + legit = BackUpToSavedMap(&itsRect, localNumbers[neighbor], i); + if (legit != -1) + DrawRedClock(&itsRect); + } + break; + + case kBlueClock: + GetObjectRect(&thisObject, &itsRect); + OffsetRectRoomRelative(&itsRect, neighbor); + if (SectRect(&itsRect, &testRect, &whoCares)) + { + if (redraw) + legit = ReBackUpSavedMap(&itsRect, localNumbers[neighbor], i); + else + legit = BackUpToSavedMap(&itsRect, localNumbers[neighbor], i); + if (legit != -1) + DrawBlueClock(&itsRect); + } + break; + + case kYellowClock: + GetObjectRect(&thisObject, &itsRect); + OffsetRectRoomRelative(&itsRect, neighbor); + if (SectRect(&itsRect, &testRect, &whoCares)) + { + if (redraw) + legit = ReBackUpSavedMap(&itsRect, localNumbers[neighbor], i); + else + legit = BackUpToSavedMap(&itsRect, localNumbers[neighbor], i); + if (legit != -1) + DrawYellowClock(&itsRect); + } + break; + + case kCuckoo: + GetObjectRect(&thisObject, &itsRect); + OffsetRectRoomRelative(&itsRect, neighbor); + if (SectRect(&itsRect, &testRect, &whoCares)) + { + if (redraw) + legit = ReBackUpSavedMap(&itsRect, localNumbers[neighbor], i); + else + legit = BackUpToSavedMap(&itsRect, localNumbers[neighbor], i); + if (legit != -1) + { + DrawCuckoo(&itsRect); + if (redraw) + ReBackUpPendulum(localNumbers[neighbor], i); + else + AddPendulum(localNumbers[neighbor], i, + itsRect.left + 4, itsRect.top + 46); + } + } + break; + + case kPaper: + case kBattery: + case kBands: + case kHelium: + GetObjectRect(&thisObject, &itsRect); + OffsetRectRoomRelative(&itsRect, neighbor); + if (SectRect(&itsRect, &testRect, &whoCares)) + { + if (redraw) + legit = ReBackUpSavedMap(&itsRect, localNumbers[neighbor], i); + else + legit = BackUpToSavedMap(&itsRect, localNumbers[neighbor], i); + if (legit != -1) + DrawSimplePrizes(thisObject.what, &itsRect); + } + break; + + case kGreaseRt: + GetObjectRect(&thisObject, &itsRect); + OffsetRectRoomRelative(&itsRect, neighbor); + if (thisObject.data.c.state) // standing + { + if (SectRect(&itsRect, &testRect, &whoCares)) + { + if (redraw) + dynamicNum = ReBackUpGrease(localNumbers[neighbor], i); + else + dynamicNum = AddGrease(localNumbers[neighbor], i, + itsRect.left, itsRect.top, + thisObject.data.c.length, true); + if (dynamicNum != -1) + DrawGreaseRt(&itsRect, thisObject.data.c.length, true); + } + } + else // fallen + DrawGreaseRt(&itsRect, thisObject.data.c.length, false); + break; + + case kGreaseLf: + GetObjectRect(&thisObject, &itsRect); + OffsetRectRoomRelative(&itsRect, neighbor); + if (thisObject.data.c.state) + { + if (SectRect(&itsRect, &testRect, &whoCares)) + { + if (redraw) + dynamicNum = ReBackUpGrease(localNumbers[neighbor], i); + else + dynamicNum = AddGrease(localNumbers[neighbor], i, + itsRect.left, itsRect.top, + thisObject.data.c.length, false); + if (dynamicNum != -1) + DrawGreaseLf(&itsRect, thisObject.data.c.length, true); + } + } + else + DrawGreaseLf(&itsRect, thisObject.data.c.length, false); + break; + + case kFoil: + GetObjectRect(&thisObject, &itsRect); + OffsetRectRoomRelative(&itsRect, neighbor); + if (SectRect(&itsRect, &testRect, &whoCares)) + { + if (redraw) + legit = ReBackUpSavedMap(&itsRect, localNumbers[neighbor], i); + else + legit = BackUpToSavedMap(&itsRect, localNumbers[neighbor], i); + if (legit != -1) + DrawFoil(&itsRect); + } + break; + + case kInvisBonus: + case kSlider: + break; + + case kStar: + GetObjectRect(&thisObject, &itsRect); + OffsetRectRoomRelative(&itsRect, neighbor); + if (SectRect(&itsRect, &testRect, &whoCares)) + { + if (redraw) + legit = ReBackUpSavedMap(&itsRect, localNumbers[neighbor], i); + else + legit = BackUpToSavedMap(&itsRect, localNumbers[neighbor], i); + if (legit != -1) + { + if (redraw) + ReBackUpStar(localNumbers[neighbor], i); + else + AddStar(localNumbers[neighbor], i, itsRect.left, + itsRect.top); + DrawSimplePrizes(thisObject.what, &itsRect); + } + } + break; + + case kSparkle: + GetObjectRect(&thisObject, &itsRect); + OffsetRectRoomRelative(&itsRect, neighbor); + if (SectRect(&itsRect, &testRect, &whoCares)) + { + if ((!redraw) && (neighbor == kCentralRoom)) + { + rectA = itsRect; + QOffsetRect(&rectA, -playOriginH, -playOriginV); + dynamicNum = AddDynamicObject(kSparkle, &rectA, &thisObject, + localNumbers[neighbor], i, thisObject.data.c.state); + } + } + break; + + case kUpStairs: + case kDoorInLf: + case kDoorInRt: + case kWindowInLf: + case kWindowInRt: + GetObjectRect(&thisObject, &itsRect); + OffsetRectRoomRelative(&itsRect, neighbor); + if (SectRect(&itsRect, &testRect, &whoCares)) + DrawPictSansWhiteObject(thisObject.what, &itsRect); + break; + + case kDownStairs: + case kDoorExRt: + case kDoorExLf: + case kWindowExRt: + case kWindowExLf: + GetObjectRect(&thisObject, &itsRect); + OffsetRectRoomRelative(&itsRect, neighbor); + if (SectRect(&itsRect, &testRect, &whoCares)) + DrawPictObject(thisObject.what, &itsRect); + break; + + case kMailboxLf: + GetObjectRect(&thisObject, &itsRect); + OffsetRectRoomRelative(&itsRect, neighbor); + DrawMailboxLeft(&itsRect, playOriginV + VerticalRoomOffset(neighbor)); + break; + + case kMailboxRt: + GetObjectRect(&thisObject, &itsRect); + OffsetRectRoomRelative(&itsRect, neighbor); + DrawMailboxRight(&itsRect, playOriginV + VerticalRoomOffset(neighbor)); + break; + + case kFloorTrans: + case kCeilingTrans: + GetObjectRect(&thisObject, &itsRect); + OffsetRectRoomRelative(&itsRect, neighbor); + if (SectRect(&itsRect, &testRect, &whoCares)) + DrawSimpleTransport(thisObject.what, &itsRect); + break; + + case kInvisTrans: + case kDeluxeTrans: + break; + + case kLightSwitch: + GetObjectRect(&thisObject, &itsRect); + OffsetRectRoomRelative(&itsRect, neighbor); + if (SectRect(&itsRect, &testRect, &whoCares)) + { + ExtractFloorSuite(thisObject.data.e.where, &floor, &suite); + room = GetRoomNumber(floor, suite); + obj = (short)thisObject.data.e.who; + DrawLightSwitch(&itsRect, GetObjectState(room, obj)); + } + dynamicNum = masterObjects[i].hotNum; + break; + + case kMachineSwitch: + GetObjectRect(&thisObject, &itsRect); + OffsetRectRoomRelative(&itsRect, neighbor); + if (SectRect(&itsRect, &testRect, &whoCares)) + { + ExtractFloorSuite(thisObject.data.e.where, &floor, &suite); + room = GetRoomNumber(floor, suite); + obj = (short)thisObject.data.e.who; + DrawMachineSwitch(&itsRect, GetObjectState(room, obj)); + } + dynamicNum = masterObjects[i].hotNum; + break; + + case kThermostat: + GetObjectRect(&thisObject, &itsRect); + OffsetRectRoomRelative(&itsRect, neighbor); + if (SectRect(&itsRect, &testRect, &whoCares)) + { + ExtractFloorSuite(thisObject.data.e.where, &floor, &suite); + room = GetRoomNumber(floor, suite); + obj = (short)thisObject.data.e.who; + DrawThermostat(&itsRect, GetObjectState(room, obj)); + } + dynamicNum = masterObjects[i].hotNum; + break; + + case kPowerSwitch: + GetObjectRect(&thisObject, &itsRect); + OffsetRectRoomRelative(&itsRect, neighbor); + if (SectRect(&itsRect, &testRect, &whoCares)) + { + ExtractFloorSuite(thisObject.data.e.where, &floor, &suite); + room = GetRoomNumber(floor, suite); + obj = (short)thisObject.data.e.who; + DrawPowerSwitch(&itsRect, GetObjectState(room, obj)); + } + dynamicNum = masterObjects[i].hotNum; + break; + + case kKnifeSwitch: + GetObjectRect(&thisObject, &itsRect); + OffsetRectRoomRelative(&itsRect, neighbor); + if (SectRect(&itsRect, &testRect, &whoCares)) + { + ExtractFloorSuite(thisObject.data.e.where, &floor, &suite); + room = GetRoomNumber(floor, suite); + obj = (short)thisObject.data.e.who; + DrawKnifeSwitch(&itsRect, GetObjectState(room, obj)); + } + dynamicNum = masterObjects[i].hotNum; + break; + + case kInvisSwitch: + dynamicNum = masterObjects[i].hotNum; + break; + + case kTrigger: + case kLgTrigger: + case kSoundTrigger: + break; + + case kCeilingLight: + case kLightBulb: + case kTableLamp: + GetObjectRect(&thisObject, &itsRect); + OffsetRectRoomRelative(&itsRect, neighbor); + if ((SectRect(&itsRect, &testRect, &whoCares)) && isLit) + DrawSimpleLight(thisObject.what, &itsRect); + break; + + case kTrunk: + case kBooks: + case kHipLamp: + case kDecoLamp: + case kGuitar: + case kCinderBlock: + case kFlowerBox: + case kFireplace: + case kBear: + case kVase1: + case kVase2: + case kRug: + case kChimes: + GetObjectRect(&thisObject, &itsRect); + OffsetRectRoomRelative(&itsRect, neighbor); + if ((SectRect(&itsRect, &testRect, &whoCares)) && isLit) + DrawPictSansWhiteObject(thisObject.what, &itsRect); + break; + + case kCustomPict: + GetObjectRect(&thisObject, &itsRect); + OffsetRectRoomRelative(&itsRect, neighbor); + if ((SectRect(&itsRect, &testRect, &whoCares)) && isLit) + DrawCustPictSansWhite(thisObject.data.g.height, &itsRect); + break; + + case kFlourescent: + GetObjectRect(&thisObject, &itsRect); + OffsetRectRoomRelative(&itsRect, neighbor); + if ((SectRect(&itsRect, &testRect, &whoCares)) && isLit) + DrawFlourescent(&itsRect); + break; + + case kTrackLight: + GetObjectRect(&thisObject, &itsRect); + OffsetRectRoomRelative(&itsRect, neighbor); + if ((SectRect(&itsRect, &testRect, &whoCares)) && isLit) + DrawTrackLight(&itsRect); + break; + + case kInvisLight: + break; + + case kShredder: + case kCDs: + GetObjectRect(&thisObject, &itsRect); + OffsetRectRoomRelative(&itsRect, neighbor); + if ((SectRect(&itsRect, &testRect, &whoCares)) && isLit) + DrawSimpleAppliance(thisObject.what, &itsRect); + break; + + case kToaster: + GetObjectRect(&thisObject, &itsRect); + OffsetRectRoomRelative(&itsRect, neighbor); + if (SectRect(&itsRect, &testRect, &whoCares)) + { + DrawSimpleAppliance(thisObject.what, &itsRect); + if ((!redraw) && (neighbor == kCentralRoom)) + { + rectA = itsRect; + QOffsetRect(&rectA, -playOriginH, -playOriginV); + dynamicNum = AddDynamicObject(kToaster, &rectA, &thisObject, + localNumbers[neighbor], i, thisObject.data.g.state); + } + } + break; + + case kMacPlus: + GetObjectRect(&thisObject, &itsRect); + OffsetRectRoomRelative(&itsRect, neighbor); + if (SectRect(&itsRect, &testRect, &whoCares)) + { + DrawMacPlus(&itsRect, thisObject.data.g.state, isLit); + if (!redraw) + { + rectA = itsRect; + QOffsetRect(&rectA, -playOriginH, -playOriginV); + dynamicNum = AddDynamicObject(kMacPlus, &rectA, &thisObject, + localNumbers[neighbor], i, thisObject.data.g.state); + } + } + break; + + case kTV: + GetObjectRect(&thisObject, &itsRect); + OffsetRectRoomRelative(&itsRect, neighbor); + if (SectRect(&itsRect, &testRect, &whoCares)) + { +#ifdef COMPILEQT + if ((thisMac.hasQT) && (hasMovie) && (neighbor == kCentralRoom) && + (!tvInRoom)) + { + whoCares = tvScreen1; + ZeroRectCorner(&whoCares); + OffsetRect(&whoCares, itsRect.left + 17, itsRect.top + 10); + GetMovieBox(theMovie, &movieRect); + CenterRectInRect(&movieRect, &whoCares); + SetMovieBox(theMovie, &movieRect); + theRgn = NewRgn(); + RectRgn(theRgn, &whoCares); + SetMovieDisplayClipRgn(theMovie, theRgn); + DisposeRgn(theRgn); + tvOn = thisObject.data.g.state; + } +#endif + DrawTV(&itsRect, thisObject.data.g.state, isLit); + if (!redraw) + { + rectA = itsRect; + QOffsetRect(&rectA, -playOriginH, -playOriginV); + dynamicNum = AddDynamicObject(kTV, &rectA, &thisObject, + localNumbers[neighbor], i, thisObject.data.g.state); +#ifdef COMPILEQT + if ((thisMac.hasQT) && (hasMovie) && (neighbor == kCentralRoom) && + (!tvInRoom)) + { + tvWithMovieNumber = dynamicNum; + tvInRoom = true; + } +#endif + } + } + break; + + case kCoffee: + GetObjectRect(&thisObject, &itsRect); + OffsetRectRoomRelative(&itsRect, neighbor); + if (SectRect(&itsRect, &testRect, &whoCares)) + { + DrawCoffee(&itsRect, thisObject.data.g.state, isLit); + if (!redraw) + { + rectA = itsRect; + QOffsetRect(&rectA, -playOriginH, -playOriginV); + dynamicNum = AddDynamicObject(kCoffee, &rectA, &thisObject, + localNumbers[neighbor], i, thisObject.data.g.state); + } + } + break; + + case kOutlet: + GetObjectRect(&thisObject, &itsRect); + OffsetRectRoomRelative(&itsRect, neighbor); + if (SectRect(&itsRect, &testRect, &whoCares)) + { + if (isLit) + DrawOutlet(&itsRect); + if (!redraw) + { + rectA = itsRect; + QOffsetRect(&rectA, -playOriginH, -playOriginV); + dynamicNum = AddDynamicObject(kOutlet, &rectA, &thisObject, + localNumbers[neighbor], i, thisObject.data.g.state); + } + } + break; + + case kVCR: + GetObjectRect(&thisObject, &itsRect); + OffsetRectRoomRelative(&itsRect, neighbor); + if (SectRect(&itsRect, &testRect, &whoCares)) + { + DrawVCR(&itsRect, thisObject.data.g.state, isLit); + if (!redraw) + { + rectA = itsRect; + QOffsetRect(&rectA, -playOriginH, -playOriginV); + dynamicNum = AddDynamicObject(kVCR, &rectA, &thisObject, + localNumbers[neighbor], i, thisObject.data.g.state); + } + } + break; + + case kStereo: + GetObjectRect(&thisObject, &itsRect); + OffsetRectRoomRelative(&itsRect, neighbor); + if (SectRect(&itsRect, &testRect, &whoCares)) + { + DrawStereo(&itsRect, isPlayMusicGame, isLit); + if (!redraw) + { + rectA = itsRect; + QOffsetRect(&rectA, -playOriginH, -playOriginV); + dynamicNum = AddDynamicObject(kStereo, &rectA, &thisObject, + localNumbers[neighbor], i, thisObject.data.g.state); + } + } + break; + + case kMicrowave: + GetObjectRect(&thisObject, &itsRect); + OffsetRectRoomRelative(&itsRect, neighbor); + if (SectRect(&itsRect, &testRect, &whoCares)) + { + DrawMicrowave(&itsRect, thisObject.data.g.state, isLit); + if (!redraw) + { + rectA = itsRect; + QOffsetRect(&rectA, -playOriginH, -playOriginV); + dynamicNum = AddDynamicObject(kMicrowave, &rectA, &thisObject, + localNumbers[neighbor], i, thisObject.data.g.state); + } + } + break; + + case kBalloon: + if ((neighbor == kCentralRoom) && (!redraw)) + { + GetObjectRect(&thisObject, &itsRect); + OffsetRectRoomRelative(&itsRect, neighbor); + QOffsetRect(&itsRect, -playOriginH, -playOriginV); + dynamicNum = AddDynamicObject(kBalloon, &itsRect, &thisObject, + localNumbers[neighbor], i, thisObject.data.h.state); + } + break; + + case kCopterLf: + if ((neighbor == kCentralRoom) && (!redraw)) + { + GetObjectRect(&thisObject, &itsRect); + OffsetRectRoomRelative(&itsRect, neighbor); + QOffsetRect(&itsRect, -playOriginH, -playOriginV); + dynamicNum = AddDynamicObject(kCopterLf, &itsRect, &thisObject, + localNumbers[neighbor], i, thisObject.data.h.state); + } + break; + + case kCopterRt: + if ((neighbor == kCentralRoom) && (!redraw)) + { + GetObjectRect(&thisObject, &itsRect); + OffsetRectRoomRelative(&itsRect, neighbor); + QOffsetRect(&itsRect, -playOriginH, -playOriginV); + dynamicNum = AddDynamicObject(kCopterRt, &itsRect, &thisObject, + localNumbers[neighbor], i, thisObject.data.h.state); + } + break; + + case kDartLf: + if ((neighbor == kCentralRoom) && (!redraw)) + { + GetObjectRect(&thisObject, &itsRect); + OffsetRectRoomRelative(&itsRect, neighbor); + QOffsetRect(&itsRect, -playOriginH, -playOriginV); + dynamicNum = AddDynamicObject(kDartLf, &itsRect, &thisObject, + localNumbers[neighbor], i, thisObject.data.h.state); + } + break; + + case kDartRt: + if ((neighbor == kCentralRoom) && (!redraw)) + { + GetObjectRect(&thisObject, &itsRect); + OffsetRectRoomRelative(&itsRect, neighbor); + QOffsetRect(&itsRect, -playOriginH, -playOriginV); + dynamicNum = AddDynamicObject(kDartRt, &itsRect, &thisObject, + localNumbers[neighbor], i, thisObject.data.h.state); + } + break; + + case kBall: + if ((neighbor == kCentralRoom) && (!redraw)) + { + GetObjectRect(&thisObject, &itsRect); + OffsetRectRoomRelative(&itsRect, neighbor); + QOffsetRect(&itsRect, -playOriginH, -playOriginV); + dynamicNum = AddDynamicObject(kBall, &itsRect, &thisObject, + localNumbers[neighbor], i, thisObject.data.h.state); + } + break; + + case kDrip: + GetObjectRect(&thisObject, &itsRect); + OffsetRectRoomRelative(&itsRect, neighbor); + if (SectRect(&itsRect, &testRect, &whoCares)) + { + DrawDrip(&itsRect); + if ((!redraw) && (neighbor == kCentralRoom)) + { + rectA = itsRect; + QOffsetRect(&rectA, -playOriginH, -playOriginV); + dynamicNum = AddDynamicObject(kDrip, &rectA, &thisObject, + localNumbers[neighbor], i, thisObject.data.h.state); + } + } + break; + + case kFish: + GetObjectRect(&thisObject, &itsRect); + OffsetRectRoomRelative(&itsRect, neighbor); + if (SectRect(&itsRect, &testRect, &whoCares)) + { + DrawFish(thisObject.what, &itsRect); + if ((!redraw) && (neighbor == kCentralRoom)) + { + rectA = itsRect; + QOffsetRect(&rectA, -playOriginH, -playOriginV); + dynamicNum = AddDynamicObject(kFish, &rectA, &thisObject, + localNumbers[neighbor], i, thisObject.data.h.state); + } + } + break; + + case kCobweb: + case kCloud: + GetObjectRect(&thisObject, &itsRect); + OffsetRectRoomRelative(&itsRect, neighbor); + if ((SectRect(&itsRect, &testRect, &whoCares)) && isLit) + DrawPictWithMaskObject(thisObject.what, &itsRect); + break; + + case kMirror: + GetObjectRect(&thisObject, &itsRect); + OffsetRectRoomRelative(&itsRect, neighbor); + if ((SectRect(&itsRect, &testRect, &whoCares)) && isLit) + DrawMirror(&itsRect); + if ((neighbor == kCentralRoom) && (!redraw)) + { + InsetRect(&itsRect, 4, 4); + AddToMirrorRegion(&itsRect); + } + break; + + case kMousehole: + case kFaucet: + GetObjectRect(&thisObject, &itsRect); + OffsetRectRoomRelative(&itsRect, neighbor); + if ((SectRect(&itsRect, &testRect, &whoCares)) && isLit) + DrawSimpleClutter(thisObject.what, &itsRect); + break; + + case kFlower: + GetObjectRect(&thisObject, &itsRect); + OffsetRectRoomRelative(&itsRect, neighbor); + if ((SectRect(&itsRect, &testRect, &whoCares)) && isLit) + DrawFlower(&itsRect, thisObject.data.i.pict); + break; + + case kWallWindow: + GetObjectRect(&thisObject, &itsRect); + OffsetRectRoomRelative(&itsRect, neighbor); + if (SectRect(&itsRect, &testRect, &whoCares)) + DrawWallWindow(&itsRect); + break; + + case kCalendar: + GetObjectRect(&thisObject, &itsRect); + OffsetRectRoomRelative(&itsRect, neighbor); + if ((SectRect(&itsRect, &testRect, &whoCares)) && isLit) + DrawCalendar(&itsRect); + break; + + case kBulletin: + GetObjectRect(&thisObject, &itsRect); + OffsetRectRoomRelative(&itsRect, neighbor); + if ((SectRect(&itsRect, &testRect, &whoCares)) && isLit) + DrawBulletin(&itsRect); + break; + + } + } + + if (!redraw) // set up links + { + for (n = 0; n < numMasterObjects; n++) + { + if ((masterObjects[n].objectNum == i) && + (masterObjects[n].roomNum == localNumbers[neighbor])) + masterObjects[n].dynaNum = dynamicNum; + } + } + } + + HSetState((Handle)thisHouse, wasState); +} + diff --git a/GpApp/ObjectEdit.cpp b/GpApp/ObjectEdit.cpp new file mode 100644 index 0000000..f9da849 --- /dev/null +++ b/GpApp/ObjectEdit.cpp @@ -0,0 +1,2811 @@ +//============================================================================ +//---------------------------------------------------------------------------- +// ObjectEdit.c +//---------------------------------------------------------------------------- +//============================================================================ + + +#include "PLSound.h" +#include "PLToolUtils.h" +#include "PLPasStr.h" +#include "Externs.h" +#include "House.h" +#include "MainWindow.h" +#include "Marquee.h" +#include "ObjectEdit.h" +#include "Objects.h" +#include "Play.h" +#include "RectUtils.h" +#include "Room.h" + + +short FindObjectSelected (Point); +void DragHandle (Point); +void DragObject (Point); +void AddObjectPairing (void); +Boolean ObjectIsUpBlower (objectType *); + + +Rect roomObjectRects[kMaxRoomObs]; +Rect initialGliderRect; +Rect leftStartGliderSrc, rightStartGliderSrc; +Rect leftStartGliderDest, rightStartGliderDest; +short objActive; +Boolean isFirstRoom; + + +extern retroLink retroLinkList[]; +extern Rect gliderSrc[kNumGliderSrcRects]; +extern short toolSelected, toolMode; +extern Boolean noRoomAtAll; + + +//============================================================== Functions +//-------------------------------------------------------------- FindObjectSelected + +#ifndef COMPILEDEMO +short FindObjectSelected (Point where) +{ + short found, i; + + found = kNoObjectSelected; + + if (PtInRect(where, &initialGliderRect)) + return (kInitialGliderSelected); + else if (PtInRect(where, &leftStartGliderDest)) + return (kLeftGliderSelected); + else if (PtInRect(where, &rightStartGliderDest)) + return (kRightGliderSelected); + + for (i = kMaxRoomObs - 1; i >= 0; i--) + { + if (PtInRect(where, &roomObjectRects[i])) + { + found = i; + break; + } + } + return (found); +} +#endif + +//-------------------------------------------------------------- DoSelectionClick + +void DoSelectionClick (Point where, Boolean isDoubleClick) +{ +#ifndef COMPILEDEMO + short direction, dist; + + StopMarquee(); + + if ((PtInMarqueeHandle(where)) && (objActive != kNoObjectSelected)) + { + if (StillDown()) + DragHandle(where); + if (ObjectHasHandle(&direction, &dist)) + { + StartMarqueeHandled(&roomObjectRects[objActive], direction, dist); + HandleBlowerGlider(); + } + else + StartMarquee(&roomObjectRects[objActive]); + } + else + { + objActive = FindObjectSelected(where); + if (objActive == kNoObjectSelected) + { + if (isDoubleClick) + DoRoomInfo(); + } + else + { + if (isDoubleClick) + { + DoObjectInfo(); + if (ObjectHasHandle(&direction, &dist)) + { + StartMarqueeHandled(&roomObjectRects[objActive], direction, dist); + HandleBlowerGlider(); + } + else + StartMarquee(&roomObjectRects[objActive]); + } + else + { + if (StillDown()) + DragObject(where); + if (ObjectHasHandle(&direction, &dist)) + { + StartMarqueeHandled(&roomObjectRects[objActive], direction, dist); + HandleBlowerGlider(); + } + else + { + if (objActive == kInitialGliderSelected) + StartMarquee(&initialGliderRect); + else if (objActive == kLeftGliderSelected) + StartMarquee(&leftStartGliderDest); + else if (objActive == kRightGliderSelected) + StartMarquee(&rightStartGliderDest); + else + StartMarquee(&roomObjectRects[objActive]); + } + } + } + } + UpdateMenus(false); +#endif +} + +//-------------------------------------------------------------- DragHandle + +#ifndef COMPILEDEMO +void DragHandle (Point where) +{ + short hDelta, vDelta; + Boolean whoCares; + + switch (thisRoom->objects[objActive].what) + { + case kFloorVent: + case kCeilingVent: + case kFloorBlower: + case kCeilingBlower: + case kSewerGrate: + case kTaper: + case kCandle: + case kStubby: + case kTiki: + case kBBQ: + case kGrecoVent: + case kSewerBlower: + vDelta = thisRoom->objects[objActive].data.a.distance; + DragMarqueeHandle(where, &vDelta); + thisRoom->objects[objActive].data.a.distance = vDelta; + whoCares = KeepObjectLegal(); + break; + + case kLiftArea: + hDelta = thisRoom->objects[objActive].data.a.distance; + vDelta = thisRoom->objects[objActive].data.a.tall * 2; + DragMarqueeCorner(where, &hDelta, &vDelta, false); + thisRoom->objects[objActive].data.a.distance = hDelta; + thisRoom->objects[objActive].data.a.tall = vDelta / 2; + whoCares = KeepObjectLegal(); + InvalWindowRect(mainWindow, &mainWindowRect); + GetThisRoomsObjRects(); + ReadyBackground(thisRoom->background, thisRoom->tiles); + DrawThisRoomsObjects(); + break; + + case kLeftFan: + case kRightFan: + hDelta = thisRoom->objects[objActive].data.a.distance; + DragMarqueeHandle(where, &hDelta); + thisRoom->objects[objActive].data.a.distance = hDelta; + whoCares = KeepObjectLegal(); + break; + + case kInvisBlower: + if (((thisRoom->objects[objActive].data.a.vector & 0x0F) == 1) || + ((thisRoom->objects[objActive].data.a.vector & 0x0F) == 4)) + { + vDelta = thisRoom->objects[objActive].data.a.distance; + DragMarqueeHandle(where, &vDelta); + thisRoom->objects[objActive].data.a.distance = vDelta; + } + else + { + hDelta = thisRoom->objects[objActive].data.a.distance; + DragMarqueeHandle(where, &hDelta); + thisRoom->objects[objActive].data.a.distance = hDelta; + } + whoCares = KeepObjectLegal(); + break; + + case kTable: + case kShelf: + case kDeckTable: + hDelta = RectWide(&thisRoom->objects[objActive].data.b.bounds); + DragMarqueeHandle(where, &hDelta); + thisRoom->objects[objActive].data.b.bounds.right = + thisRoom->objects[objActive].data.b.bounds.left + hDelta; + whoCares = KeepObjectLegal(); + InvalWindowRect(mainWindow, &mainWindowRect); + GetThisRoomsObjRects(); + ReadyBackground(thisRoom->background, thisRoom->tiles); + DrawThisRoomsObjects(); + break; + + case kCabinet: + case kInvisObstacle: + case kInvisBounce: + hDelta = RectWide(&thisRoom->objects[objActive].data.b.bounds); + vDelta = RectTall(&thisRoom->objects[objActive].data.b.bounds); + DragMarqueeCorner(where, &hDelta, &vDelta, false); + thisRoom->objects[objActive].data.b.bounds.right = + thisRoom->objects[objActive].data.b.bounds.left + hDelta; + thisRoom->objects[objActive].data.b.bounds.bottom = + thisRoom->objects[objActive].data.b.bounds.top + vDelta; + whoCares = KeepObjectLegal(); + InvalWindowRect(mainWindow, &mainWindowRect); + GetThisRoomsObjRects(); + ReadyBackground(thisRoom->background, thisRoom->tiles); + DrawThisRoomsObjects(); + break; + + case kCounter: + case kDresser: + hDelta = RectWide(&thisRoom->objects[objActive].data.b.bounds); + vDelta = RectTall(&thisRoom->objects[objActive].data.b.bounds); + DragMarqueeCorner(where, &hDelta, &vDelta, true); + thisRoom->objects[objActive].data.b.bounds.right = + thisRoom->objects[objActive].data.b.bounds.left + hDelta; + thisRoom->objects[objActive].data.b.bounds.top = + thisRoom->objects[objActive].data.b.bounds.bottom - vDelta; + whoCares = KeepObjectLegal(); + InvalWindowRect(mainWindow, &mainWindowRect); + GetThisRoomsObjRects(); + ReadyBackground(thisRoom->background, thisRoom->tiles); + DrawThisRoomsObjects(); + break; + + case kGreaseRt: + case kGreaseLf: + case kSlider: + hDelta = thisRoom->objects[objActive].data.c.length; + DragMarqueeHandle(where, &hDelta); + thisRoom->objects[objActive].data.c.length = hDelta; + whoCares = KeepObjectLegal(); + InvalWindowRect(mainWindow, &mainWindowRect); + GetThisRoomsObjRects(); + ReadyBackground(thisRoom->background, thisRoom->tiles); + DrawThisRoomsObjects(); + break; + + case kInvisTrans: + hDelta = thisRoom->objects[objActive].data.d.wide; + vDelta = thisRoom->objects[objActive].data.d.tall; + DragMarqueeCorner(where, &hDelta, &vDelta, false); + if (hDelta > 127) + hDelta = 127; + thisRoom->objects[objActive].data.d.wide = (Byte)hDelta; + thisRoom->objects[objActive].data.d.tall = vDelta; + whoCares = KeepObjectLegal(); + InvalWindowRect(mainWindow, &mainWindowRect); + GetThisRoomsObjRects(); + ReadyBackground(thisRoom->background, thisRoom->tiles); + DrawThisRoomsObjects(); + break; + + case kDeluxeTrans: + hDelta = ((thisRoom->objects[objActive].data.d.tall & 0xFF00) >> 8) * 4; + vDelta = (thisRoom->objects[objActive].data.d.tall & 0x00FF) * 4; + DragMarqueeCorner(where, &hDelta, &vDelta, false); + if (hDelta < 64) + hDelta = 64; + if (vDelta < 32) + vDelta = 32; + thisRoom->objects[objActive].data.d.tall = ((hDelta / 4) << 8) + (vDelta / 4); + whoCares = KeepObjectLegal(); + InvalWindowRect(mainWindow, &mainWindowRect); + GetThisRoomsObjRects(); + ReadyBackground(thisRoom->background, thisRoom->tiles); + DrawThisRoomsObjects(); + break; + + case kFlourescent: + case kTrackLight: + hDelta = thisRoom->objects[objActive].data.f.length; + DragMarqueeHandle(where, &hDelta); + thisRoom->objects[objActive].data.f.length = hDelta; + whoCares = KeepObjectLegal(); + InvalWindowRect(mainWindow, &mainWindowRect); + GetThisRoomsObjRects(); + ReadyBackground(thisRoom->background, thisRoom->tiles); + DrawThisRoomsObjects(); + break; + + case kToaster: + vDelta = thisRoom->objects[objActive].data.g.height; + DragMarqueeHandle(where, &vDelta); + thisRoom->objects[objActive].data.g.height = vDelta; + whoCares = KeepObjectLegal(); + break; + + case kBall: + case kDrip: + case kFish: + vDelta = thisRoom->objects[objActive].data.h.length; + DragMarqueeHandle(where, &vDelta); + thisRoom->objects[objActive].data.h.length = vDelta; + whoCares = KeepObjectLegal(); + break; + + case kMirror: + case kWallWindow: + hDelta = RectWide(&thisRoom->objects[objActive].data.i.bounds); + vDelta = RectTall(&thisRoom->objects[objActive].data.i.bounds); + DragMarqueeCorner(where, &hDelta, &vDelta, false); + thisRoom->objects[objActive].data.i.bounds.right = + thisRoom->objects[objActive].data.i.bounds.left + hDelta; + thisRoom->objects[objActive].data.i.bounds.bottom = + thisRoom->objects[objActive].data.i.bounds.top + vDelta; + whoCares = KeepObjectLegal(); + InvalWindowRect(mainWindow, &mainWindowRect); + GetThisRoomsObjRects(); + ReadyBackground(thisRoom->background, thisRoom->tiles); + DrawThisRoomsObjects(); + break; + + } + + fileDirty = true; + UpdateMenus(false); +} +#endif + +//-------------------------------------------------------------- DragObject + +#ifndef COMPILEDEMO +void DragObject (Point where) +{ + Rect newRect, wasRect; + short deltaH, deltaV, increment; + char wasState; + Boolean invalAll; + + if (objActive == kInitialGliderSelected) + { + wasRect = initialGliderRect; + newRect = initialGliderRect; + DragMarqueeRect(where, &newRect, false, false); + } + else if (objActive == kLeftGliderSelected) + { + wasRect = leftStartGliderDest; + newRect = leftStartGliderDest; + DragMarqueeRect(where, &newRect, false, true); + } + else if (objActive == kRightGliderSelected) + { + wasRect = rightStartGliderDest; + newRect = rightStartGliderDest; + DragMarqueeRect(where, &newRect, false, true); + } + else + { + wasRect = roomObjectRects[objActive]; + newRect = roomObjectRects[objActive]; + switch (thisRoom->objects[objActive].what) + { + case kFloorVent: + case kCeilingVent: + case kFloorBlower: + case kCeilingBlower: + case kSewerGrate: + case kGrecoVent: + case kSewerBlower: + case kManhole: + case kUpStairs: + case kDownStairs: + case kCeilingLight: + case kHipLamp: + case kDecoLamp: + case kFlourescent: + case kFloorTrans: + case kCeilingTrans: + case kDoorInLf: + case kDoorInRt: + case kDoorExRt: + case kDoorExLf: + case kWindowInLf: + case kWindowInRt: + case kWindowExRt: + case kWindowExLf: + case kBalloon: + case kCopterLf: + case kCopterRt: + case kMousehole: + case kFireplace: + DragMarqueeRect(where, &newRect, true, false); + invalAll = false; + break; + + case kDartLf: + case kDartRt: + DragMarqueeRect(where, &newRect, false, true); + invalAll = false; + break; + + case kTiki: + case kTable: + case kShelf: + case kCabinet: + case kDeckTable: + case kStool: + case kInvisObstacle: + case kInvisBounce: + case kGreaseRt: + case kGreaseLf: + case kSlider: + case kMailboxLf: + case kMailboxRt: + case kInvisTrans: + case kDeluxeTrans: + case kMirror: + case kWallWindow: + DragMarqueeRect(where, &newRect, false, false); + invalAll = true; + break; + + case kCounter: + case kDresser: + case kTrackLight: + DragMarqueeRect(where, &newRect, true, false); + invalAll = true; + break; + + case kRedClock: + case kBlueClock: + case kYellowClock: + case kCuckoo: + case kPaper: + case kBattery: + case kBands: + case kFoil: + case kInvisBonus: + case kStar: + case kSparkle: + case kHelium: + case kLeftFan: + case kRightFan: + case kTaper: + case kCandle: + case kStubby: + case kBBQ: + case kInvisBlower: + case kLiftArea: + case kFilingCabinet: + case kWasteBasket: + case kMilkCrate: + case kTrunk: + case kBooks: + case kLightSwitch: + case kMachineSwitch: + case kThermostat: + case kPowerSwitch: + case kKnifeSwitch: + case kInvisSwitch: + case kTrigger: + case kLgTrigger: + case kSoundTrigger: + case kLightBulb: + case kTableLamp: + case kInvisLight: + case kShredder: + case kToaster: + case kMacPlus: + case kGuitar: + case kTV: + case kCoffee: + case kOutlet: + case kVCR: + case kStereo: + case kMicrowave: + case kCinderBlock: + case kFlowerBox: + case kCDs: + case kCustomPict: + case kBall: + case kDrip: + case kFish: + case kCobweb: + case kOzma: + case kFlower: + case kBear: + case kCalendar: + case kVase1: + case kVase2: + case kBulletin: + case kCloud: + case kFaucet: + case kRug: + case kChimes: + DragMarqueeRect(where, &newRect, false, false); + invalAll = false; + break; + } + } + + deltaH = newRect.left - wasRect.left; + deltaV = newRect.top - wasRect.top; + if ((deltaH != 0) || (deltaV != 0)) + { + fileDirty = true; + UpdateMenus(false); + } + + if (objActive == kInitialGliderSelected) + { + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + (*thisHouse)->initial.h += deltaH; + (*thisHouse)->initial.v += deltaV; + HSetState((Handle)thisHouse, wasState); + } + else if (objActive == kLeftGliderSelected) + { + increment = thisRoom->leftStart + deltaV; + if (increment > 255) + increment = 255; + else if (increment < 0) + increment = 0; + thisRoom->leftStart = (Byte)increment; + QSetRect(&leftStartGliderDest, 0, 0, 48, 16); + QOffsetRect(&leftStartGliderDest, 0, + kGliderStartsDown + (short)thisRoom->leftStart); + } + else if (objActive == kRightGliderSelected) + { + increment = thisRoom->rightStart + deltaV; + if (increment > 255) + increment = 255; + else if (increment < 0) + increment = 0; + thisRoom->rightStart = (Byte)increment; + QSetRect(&rightStartGliderDest, 0, 0, 48, 16); + QOffsetRect(&rightStartGliderDest, 0, + kGliderStartsDown + (short)thisRoom->rightStart); + } + else + { + switch (thisRoom->objects[objActive].what) + { + case kFloorVent: + case kCeilingVent: + case kFloorBlower: + case kCeilingBlower: + case kSewerGrate: + case kGrecoVent: + case kSewerBlower: + thisRoom->objects[objActive].data.a.topLeft.h += deltaH; + break; + + case kLeftFan: + case kRightFan: + case kTaper: + case kCandle: + case kStubby: + case kTiki: + case kBBQ: + case kInvisBlower: + case kLiftArea: + thisRoom->objects[objActive].data.a.topLeft.h += deltaH; + thisRoom->objects[objActive].data.a.topLeft.v += deltaV; + break; + + case kTable: + case kShelf: + case kCabinet: + case kFilingCabinet: + case kWasteBasket: + case kMilkCrate: + case kDeckTable: + case kStool: + case kTrunk: + case kInvisObstacle: + case kBooks: + case kInvisBounce: + thisRoom->objects[objActive].data.b.bounds.left += deltaH; + thisRoom->objects[objActive].data.b.bounds.right += deltaH; + thisRoom->objects[objActive].data.b.bounds.top += deltaV; + thisRoom->objects[objActive].data.b.bounds.bottom += deltaV; + break; + + case kCounter: + case kDresser: + case kManhole: + thisRoom->objects[objActive].data.b.bounds.left += deltaH; + thisRoom->objects[objActive].data.b.bounds.right += deltaH; + break; + + case kRedClock: + case kBlueClock: + case kYellowClock: + case kCuckoo: + case kPaper: + case kBattery: + case kBands: + case kGreaseRt: + case kGreaseLf: + case kFoil: + case kInvisBonus: + case kStar: + case kSparkle: + case kHelium: + case kSlider: + thisRoom->objects[objActive].data.c.topLeft.h += deltaH; + thisRoom->objects[objActive].data.c.topLeft.v += deltaV; + break; + + case kUpStairs: + case kDownStairs: + case kFloorTrans: + case kCeilingTrans: + case kDoorInLf: + case kDoorInRt: + case kDoorExRt: + case kDoorExLf: + case kWindowInLf: + case kWindowInRt: + case kWindowExRt: + case kWindowExLf: + thisRoom->objects[objActive].data.d.topLeft.h += deltaH; + break; + + case kMailboxLf: + case kMailboxRt: + case kInvisTrans: + case kDeluxeTrans: + thisRoom->objects[objActive].data.d.topLeft.h += deltaH; + thisRoom->objects[objActive].data.d.topLeft.v += deltaV; + break; + + case kLightSwitch: + case kMachineSwitch: + case kThermostat: + case kPowerSwitch: + case kKnifeSwitch: + case kInvisSwitch: + case kTrigger: + case kLgTrigger: + case kSoundTrigger: + thisRoom->objects[objActive].data.e.topLeft.h += deltaH; + thisRoom->objects[objActive].data.e.topLeft.v += deltaV; + break; + + case kCeilingLight: + case kHipLamp: + case kDecoLamp: + case kFlourescent: + case kTrackLight: + thisRoom->objects[objActive].data.f.topLeft.h += deltaH; + break; + + case kLightBulb: + case kTableLamp: + case kInvisLight: + thisRoom->objects[objActive].data.f.topLeft.h += deltaH; + thisRoom->objects[objActive].data.f.topLeft.v += deltaV; + break; + + case kShredder: + case kToaster: + case kMacPlus: + case kGuitar: + case kTV: + case kCoffee: + case kOutlet: + case kVCR: + case kStereo: + case kMicrowave: + case kCinderBlock: + case kFlowerBox: + case kCDs: + case kCustomPict: + thisRoom->objects[objActive].data.g.topLeft.h += deltaH; + thisRoom->objects[objActive].data.g.topLeft.v += deltaV; + break; + + case kBalloon: + case kCopterLf: + case kCopterRt: + thisRoom->objects[objActive].data.h.topLeft.h += deltaH; + break; + + case kDartLf: + case kDartRt: + thisRoom->objects[objActive].data.h.topLeft.v += deltaV; + break; + + case kBall: + case kDrip: + case kFish: + case kCobweb: + thisRoom->objects[objActive].data.h.topLeft.h += deltaH; + thisRoom->objects[objActive].data.h.topLeft.v += deltaV; + break; + + case kOzma: + case kMirror: + case kFlower: + case kWallWindow: + case kBear: + case kCalendar: + case kVase1: + case kVase2: + case kBulletin: + case kCloud: + case kFaucet: + case kRug: + case kChimes: + thisRoom->objects[objActive].data.i.bounds.left += deltaH; + thisRoom->objects[objActive].data.i.bounds.right += deltaH; + thisRoom->objects[objActive].data.i.bounds.top += deltaV; + thisRoom->objects[objActive].data.i.bounds.bottom += deltaV; + break; + + case kMousehole: + case kFireplace: + thisRoom->objects[objActive].data.i.bounds.left += deltaH; + thisRoom->objects[objActive].data.i.bounds.right += deltaH; + break; + } + } + + if (KeepObjectLegal()) + { + } + GetThisRoomsObjRects(); + if (invalAll) + InvalWindowRect(mainWindow, &mainWindowRect); + else + { + InvalWindowRect(mainWindow, &wasRect); + if (objActive == kInitialGliderSelected) + InvalWindowRect(mainWindow, &initialGliderRect); + else if (objActive == kLeftGliderSelected) + InvalWindowRect(mainWindow, &leftStartGliderDest); + else if (objActive == kRightGliderSelected) + InvalWindowRect(mainWindow, &rightStartGliderDest); + else + InvalWindowRect(mainWindow, &roomObjectRects[objActive]); + } + + ReadyBackground(thisRoom->background, thisRoom->tiles); + DrawThisRoomsObjects(); +} +#endif + +//-------------------------------------------------------------- DoNewObjectClick + +void DoNewObjectClick (Point where) +{ +#ifndef COMPILEDEMO + short whatObject; + + StopMarquee(); + objActive = kNoObjectSelected; + + whatObject = toolSelected + ((toolMode - 1) * 0x0010); + if (AddNewObject(where, whatObject, true)) + IgnoreThisClick(); + UpdateMenus(false); + + AddObjectPairing(); +#endif +} + +//-------------------------------------------------------------- AddObjectPairing + +void AddObjectPairing (void) +{ + roomType *testRoomPtr; + short roomNum, emptySlot; + char wasState; + Str255 message; + + if (thisRoom->objects[objActive].what == kDoorInRt) + { + roomNum = DoesNeighborRoomExist(kRoomToRight); + if (roomNum != -1) + { + emptySlot = FindObjectSlotInRoom(roomNum); + if ((emptySlot != -1) && (!DoesRoomNumHaveObject(roomNum, kDoorExLf))) + { + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + testRoomPtr = &((*thisHouse)->rooms[roomNum]); + + testRoomPtr->objects[emptySlot].what = kDoorExLf; + testRoomPtr->objects[emptySlot].data.d.topLeft.h = kDoorExLfLeft; + testRoomPtr->objects[emptySlot].data.d.topLeft.v = kDoorExTop; + testRoomPtr->objects[emptySlot].data.d.tall = 0; + testRoomPtr->objects[emptySlot].data.d.where = -1; + testRoomPtr->objects[emptySlot].data.d.who = 255; + testRoomPtr->objects[emptySlot].data.d.wide = 0; + + testRoomPtr->numObjects++; + HSetState((Handle)thisHouse, wasState); + + GetLocalizedString(45, message); + OpenMessageWindow(message); + ForeColor(blueColor); + GetLocalizedString(46, message); + SetMessageWindowMessage(message); + ForeColor(blackColor); + DelayTicks(60); + CloseMessageWindow(); + } + } + } + else if (thisRoom->objects[objActive].what == kDoorInLf) + { + roomNum = DoesNeighborRoomExist(kRoomToLeft); + if (roomNum != -1) + { + emptySlot = FindObjectSlotInRoom(roomNum); + if ((emptySlot != -1) && (!DoesRoomNumHaveObject(roomNum, kDoorExRt))) + { + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + testRoomPtr = &((*thisHouse)->rooms[roomNum]); + + testRoomPtr->objects[emptySlot].what = kDoorExRt; + testRoomPtr->objects[emptySlot].data.d.topLeft.h = kDoorExRtLeft; + testRoomPtr->objects[emptySlot].data.d.topLeft.v = kDoorExTop; + testRoomPtr->objects[emptySlot].data.d.tall = 0; + testRoomPtr->objects[emptySlot].data.d.where = -1; + testRoomPtr->objects[emptySlot].data.d.who = 255; + testRoomPtr->objects[emptySlot].data.d.wide = 0; + + testRoomPtr->numObjects++; + + HSetState((Handle)thisHouse, wasState); + + GetLocalizedString(45, message); + OpenMessageWindow(message); + ForeColor(blueColor); + GetLocalizedString(46, message); + SetMessageWindowMessage(message); + ForeColor(blackColor); + DelayTicks(60); + CloseMessageWindow(); + } + } + } + else if (thisRoom->objects[objActive].what == kDoorExRt) + { + roomNum = DoesNeighborRoomExist(kRoomToRight); + if (roomNum != -1) + { + emptySlot = FindObjectSlotInRoom(roomNum); + if ((emptySlot != -1) && (!DoesRoomNumHaveObject(roomNum, kDoorInLfLeft))) + { + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + testRoomPtr = &((*thisHouse)->rooms[roomNum]); + + testRoomPtr->objects[emptySlot].what = kDoorInLf; + testRoomPtr->objects[emptySlot].data.d.topLeft.h = kDoorInLfLeft; + testRoomPtr->objects[emptySlot].data.d.topLeft.v = kDoorInTop; + testRoomPtr->objects[emptySlot].data.d.tall = 0; + testRoomPtr->objects[emptySlot].data.d.where = -1; + testRoomPtr->objects[emptySlot].data.d.who = 255; + testRoomPtr->objects[emptySlot].data.d.wide = 0; + + testRoomPtr->numObjects++; + + HSetState((Handle)thisHouse, wasState); + + GetLocalizedString(45, message); + OpenMessageWindow(message); + ForeColor(blueColor); + GetLocalizedString(47, message); + SetMessageWindowMessage(message); + ForeColor(blackColor); + DelayTicks(60); + CloseMessageWindow(); + } + } + } + else if (thisRoom->objects[objActive].what == kDoorExLf) + { + roomNum = DoesNeighborRoomExist(kRoomToLeft); + if (roomNum != -1) + { + emptySlot = FindObjectSlotInRoom(roomNum); + if ((emptySlot != -1) && (!DoesRoomNumHaveObject(roomNum, kDoorInRtLeft))) + { + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + testRoomPtr = &((*thisHouse)->rooms[roomNum]); + + testRoomPtr->objects[emptySlot].what = kDoorInRt; + testRoomPtr->objects[emptySlot].data.d.topLeft.h = kDoorInRtLeft; + testRoomPtr->objects[emptySlot].data.d.topLeft.v = kDoorInTop; + testRoomPtr->objects[emptySlot].data.d.tall = 0; + testRoomPtr->objects[emptySlot].data.d.where = -1; + testRoomPtr->objects[emptySlot].data.d.who = 255; + testRoomPtr->objects[emptySlot].data.d.wide = 0; + + testRoomPtr->numObjects++; + + HSetState((Handle)thisHouse, wasState); + + GetLocalizedString(45, message); + OpenMessageWindow(message); + ForeColor(blueColor); + GetLocalizedString(47, message); + SetMessageWindowMessage(message); + ForeColor(blackColor); + DelayTicks(60); + CloseMessageWindow(); + } + } + } + else if (thisRoom->objects[objActive].what == kWindowInLf) + { + roomNum = DoesNeighborRoomExist(kRoomToLeft); + if (roomNum != -1) + { + emptySlot = FindObjectSlotInRoom(roomNum); + if ((emptySlot != -1) && (!DoesRoomNumHaveObject(roomNum, kWindowExRt))) + { + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + testRoomPtr = &((*thisHouse)->rooms[roomNum]); + + testRoomPtr->objects[emptySlot].what = kWindowExRt; + testRoomPtr->objects[emptySlot].data.d.topLeft.h = kWindowExRtLeft; + testRoomPtr->objects[emptySlot].data.d.topLeft.v = kWindowExTop; + testRoomPtr->objects[emptySlot].data.d.tall = 0; + testRoomPtr->objects[emptySlot].data.d.where = -1; + testRoomPtr->objects[emptySlot].data.d.who = 255; + testRoomPtr->objects[emptySlot].data.d.wide = 0; + + testRoomPtr->numObjects++; + + HSetState((Handle)thisHouse, wasState); + + GetLocalizedString(45, message); + OpenMessageWindow(message); + ForeColor(blueColor); + GetLocalizedString(48, message); + SetMessageWindowMessage(message); + ForeColor(blackColor); + DelayTicks(60); + CloseMessageWindow(); + } + } + } + else if (thisRoom->objects[objActive].what == kWindowInRt) + { + roomNum = DoesNeighborRoomExist(kRoomToRight); + if (roomNum != -1) + { + emptySlot = FindObjectSlotInRoom(roomNum); + if ((emptySlot != -1) && (!DoesRoomNumHaveObject(roomNum, kWindowExLf))) + { + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + testRoomPtr = &((*thisHouse)->rooms[roomNum]); + + testRoomPtr->objects[emptySlot].what = kWindowExLf; + testRoomPtr->objects[emptySlot].data.d.topLeft.h = kWindowExLfLeft; + testRoomPtr->objects[emptySlot].data.d.topLeft.v = kWindowExTop; + testRoomPtr->objects[emptySlot].data.d.tall = 0; + testRoomPtr->objects[emptySlot].data.d.where = -1; + testRoomPtr->objects[emptySlot].data.d.who = 255; + testRoomPtr->objects[emptySlot].data.d.wide = 0; + + testRoomPtr->numObjects++; + + HSetState((Handle)thisHouse, wasState); + + GetLocalizedString(45, message); + OpenMessageWindow(message); + ForeColor(blueColor); + GetLocalizedString(48, message); + SetMessageWindowMessage(message); + ForeColor(blackColor); + DelayTicks(60); + CloseMessageWindow(); + } + } + } + else if (thisRoom->objects[objActive].what == kWindowExRt) + { + roomNum = DoesNeighborRoomExist(kRoomToRight); + if (roomNum != -1) + { + emptySlot = FindObjectSlotInRoom(roomNum); + if ((emptySlot != -1) && (!DoesRoomNumHaveObject(roomNum, kWindowInLf))) + { + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + testRoomPtr = &((*thisHouse)->rooms[roomNum]); + + testRoomPtr->objects[emptySlot].what = kWindowInLf; + testRoomPtr->objects[emptySlot].data.d.topLeft.h = kWindowInLfLeft; + testRoomPtr->objects[emptySlot].data.d.topLeft.v = kWindowInTop; + testRoomPtr->objects[emptySlot].data.d.tall = 0; + testRoomPtr->objects[emptySlot].data.d.where = -1; + testRoomPtr->objects[emptySlot].data.d.who = 255; + testRoomPtr->objects[emptySlot].data.d.wide = 0; + + testRoomPtr->numObjects++; + + HSetState((Handle)thisHouse, wasState); + + GetLocalizedString(45, message); + OpenMessageWindow(message); + ForeColor(blueColor); + GetLocalizedString(49, message); + SetMessageWindowMessage(message); + ForeColor(blackColor); + DelayTicks(60); + CloseMessageWindow(); + } + } + } + else if (thisRoom->objects[objActive].what == kWindowExLf) + { + roomNum = DoesNeighborRoomExist(kRoomToLeft); + if (roomNum != -1) + { + emptySlot = FindObjectSlotInRoom(roomNum); + if ((emptySlot != -1) && (!DoesRoomNumHaveObject(roomNum, kWindowInRt))) + { + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + testRoomPtr = &((*thisHouse)->rooms[roomNum]); + + testRoomPtr->objects[emptySlot].what = kWindowInRt; + testRoomPtr->objects[emptySlot].data.d.topLeft.h = kWindowInRtLeft; + testRoomPtr->objects[emptySlot].data.d.topLeft.v = kWindowInTop; + testRoomPtr->objects[emptySlot].data.d.tall = 0; + testRoomPtr->objects[emptySlot].data.d.where = -1; + testRoomPtr->objects[emptySlot].data.d.who = 255; + testRoomPtr->objects[emptySlot].data.d.wide = 0; + + testRoomPtr->numObjects++; + + HSetState((Handle)thisHouse, wasState); + + GetLocalizedString(45, message); + OpenMessageWindow(message); + ForeColor(blueColor); + GetLocalizedString(49, message); + SetMessageWindowMessage(message); + ForeColor(blackColor); + DelayTicks(60); + CloseMessageWindow(); + } + } + } + else if (thisRoom->objects[objActive].what == kUpStairs) + { + roomNum = DoesNeighborRoomExist(kRoomAbove); + if (roomNum != -1) + { + emptySlot = FindObjectSlotInRoom(roomNum); + if ((emptySlot != -1) && (!DoesRoomNumHaveObject(roomNum, kDownStairs))) + { + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + testRoomPtr = &((*thisHouse)->rooms[roomNum]); + + testRoomPtr->objects[emptySlot].what = kDownStairs; + testRoomPtr->objects[emptySlot].data.d.topLeft.h = + thisRoom->objects[objActive].data.d.topLeft.h; + testRoomPtr->objects[emptySlot].data.d.topLeft.v = kStairsTop; + testRoomPtr->objects[emptySlot].data.d.tall = 0; + testRoomPtr->objects[emptySlot].data.d.where = -1; + testRoomPtr->objects[emptySlot].data.d.who = 255; + testRoomPtr->objects[emptySlot].data.d.wide = 0; + + testRoomPtr->numObjects++; + + HSetState((Handle)thisHouse, wasState); + + GetLocalizedString(45, message); + OpenMessageWindow(message); + ForeColor(blueColor); + GetLocalizedString(50, message); + SetMessageWindowMessage(message); + ForeColor(blackColor); + DelayTicks(60); + CloseMessageWindow(); + } + } + } + else if (thisRoom->objects[objActive].what == kDownStairs) + { + roomNum = DoesNeighborRoomExist(kRoomBelow); + if (roomNum != -1) + { + emptySlot = FindObjectSlotInRoom(roomNum); + if ((emptySlot != -1) && (!DoesRoomNumHaveObject(roomNum, kUpStairs))) + { + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + testRoomPtr = &((*thisHouse)->rooms[roomNum]); + + testRoomPtr->objects[emptySlot].what = kUpStairs; + testRoomPtr->objects[emptySlot].data.d.topLeft.h = + thisRoom->objects[objActive].data.d.topLeft.h; + testRoomPtr->objects[emptySlot].data.d.topLeft.v = kStairsTop; + testRoomPtr->objects[emptySlot].data.d.tall = 0; + testRoomPtr->objects[emptySlot].data.d.where = -1; + testRoomPtr->objects[emptySlot].data.d.who = 255; + testRoomPtr->objects[emptySlot].data.d.wide = 0; + + testRoomPtr->numObjects++; + + HSetState((Handle)thisHouse, wasState); + + GetLocalizedString(45, message); + OpenMessageWindow(message); + ForeColor(blueColor); + GetLocalizedString(51, message); + SetMessageWindowMessage(message); + ForeColor(blackColor); + DelayTicks(60); + CloseMessageWindow(); + } + } + } +} + +//-------------------------------------------------------------- DeleteObject + +void DeleteObject (void) +{ +#ifndef COMPILEDEMO + short i; + + if ((theMode != kEditMode) || (objActive == kNoObjectSelected)) + return; + + if ((objActive == kInitialGliderSelected) || + (objActive == kLeftGliderSelected) || + (objActive == kRightGliderSelected)) + { + SysBeep(1); + return; + } + + for (i = 0; i < kMaxRoomObs; i++) + { + if ((retroLinkList[i].room == thisRoomNumber) && + (retroLinkList[i].object == objActive)) + retroLinkList[i].room = -1; + } + + thisRoom->objects[objActive].what = kObjectIsEmpty; + thisRoom->numObjects--; + fileDirty = true; + UpdateMenus(false); + InvalWindowRect(mainWindow, &mainWindowRect); + QSetRect(&roomObjectRects[objActive], -1, -1, 0, 0); + DeselectObject(); + ReadyBackground(thisRoom->background, thisRoom->tiles); + DrawThisRoomsObjects(); +#endif +} + +//-------------------------------------------------------------- DuplicateObject + +void DuplicateObject (void) +{ + objectType tempObject; + Point placePt; + short direction, dist; + Boolean handled; + + tempObject = thisRoom->objects[objActive]; + + placePt.h = roomObjectRects[objActive].left + + HalfRectWide(&roomObjectRects[objActive]) + 64; + placePt.v = roomObjectRects[objActive].top + + HalfRectTall(&roomObjectRects[objActive]); + + StopMarquee(); + + if (AddNewObject(placePt, tempObject.what, false)) + { + switch (tempObject.what) + { + case kFloorVent: case kCeilingVent: case kFloorBlower: + case kCeilingBlower: case kSewerGrate: case kLeftFan: + case kRightFan: case kTaper: case kCandle: + case kStubby: case kTiki: case kBBQ: + case kInvisBlower: case kGrecoVent: case kSewerBlower: + thisRoom->objects[objActive].data.a.distance = tempObject.data.a.distance; + thisRoom->objects[objActive].data.a.initial = tempObject.data.a.initial; + thisRoom->objects[objActive].data.a.state = tempObject.data.a.state; + thisRoom->objects[objActive].data.a.vector = tempObject.data.a.vector; + thisRoom->objects[objActive].data.a.tall = tempObject.data.a.tall; + break; + + case kLiftArea: + thisRoom->objects[objActive].data.a.topLeft.h = tempObject.data.a.topLeft.h + 64; + thisRoom->objects[objActive].data.a.topLeft.v = tempObject.data.a.topLeft.v; + thisRoom->objects[objActive].data.a.distance = tempObject.data.a.distance; + thisRoom->objects[objActive].data.a.initial = tempObject.data.a.initial; + thisRoom->objects[objActive].data.a.state = tempObject.data.a.state; + thisRoom->objects[objActive].data.a.vector = tempObject.data.a.vector; + thisRoom->objects[objActive].data.a.tall = tempObject.data.a.tall; + break; + + case kFilingCabinet: case kWasteBasket: case kMilkCrate: + case kStool: case kTrunk: case kManhole: + case kBooks: + thisRoom->objects[objActive].data.b.pict = tempObject.data.b.pict; + break; + + case kTable: case kShelf: case kCabinet: + case kCounter: case kDresser: case kDeckTable: + case kInvisObstacle: case kInvisBounce: + thisRoom->objects[objActive].data.b.bounds = tempObject.data.b.bounds; + QOffsetRect(&thisRoom->objects[objActive].data.b.bounds, 64, 0); + thisRoom->objects[objActive].data.b.pict = tempObject.data.b.pict; + break; + + case kRedClock: case kBlueClock: case kYellowClock: + case kCuckoo: case kPaper: case kBattery: + case kBands: case kGreaseRt: case kGreaseLf: + case kFoil: case kInvisBonus: case kStar: + case kSparkle: case kHelium: + thisRoom->objects[objActive].data.c.length = tempObject.data.c.length; + thisRoom->objects[objActive].data.c.points = tempObject.data.c.points; + thisRoom->objects[objActive].data.c.state = tempObject.data.c.state; + thisRoom->objects[objActive].data.c.initial = tempObject.data.c.initial; + break; + + case kSlider: + thisRoom->objects[objActive].data.c.topLeft.h = tempObject.data.c.topLeft.h + 64; + thisRoom->objects[objActive].data.c.length = tempObject.data.c.length; + thisRoom->objects[objActive].data.c.points = tempObject.data.c.points; + thisRoom->objects[objActive].data.c.state = tempObject.data.c.state; + thisRoom->objects[objActive].data.c.initial = tempObject.data.c.initial; + break; + + case kUpStairs: case kDownStairs: case kMailboxLf: + case kMailboxRt: case kFloorTrans: case kCeilingTrans: + case kDoorInLf: case kDoorInRt: case kDoorExRt: + case kDoorExLf: case kWindowInLf: case kWindowInRt: + case kWindowExRt: case kWindowExLf: + thisRoom->objects[objActive].data.d.tall = tempObject.data.d.tall; + thisRoom->objects[objActive].data.d.where = tempObject.data.d.where; + thisRoom->objects[objActive].data.d.who = tempObject.data.d.who; + thisRoom->objects[objActive].data.d.wide = tempObject.data.d.wide; + break; + + case kInvisTrans: case kDeluxeTrans: + thisRoom->objects[objActive].data.d.topLeft.h = tempObject.data.d.topLeft.h + 64; + thisRoom->objects[objActive].data.d.topLeft.v = tempObject.data.d.topLeft.v; + thisRoom->objects[objActive].data.d.tall = tempObject.data.d.tall; + thisRoom->objects[objActive].data.d.where = tempObject.data.d.where; + thisRoom->objects[objActive].data.d.who = tempObject.data.d.who; + thisRoom->objects[objActive].data.d.wide = tempObject.data.d.wide; + break; + + case kLightSwitch: case kMachineSwitch: case kThermostat: + case kPowerSwitch: case kKnifeSwitch: case kInvisSwitch: + case kTrigger: case kLgTrigger: case kSoundTrigger: + thisRoom->objects[objActive].data.e.delay = tempObject.data.e.delay; + thisRoom->objects[objActive].data.e.where = tempObject.data.e.where; + thisRoom->objects[objActive].data.e.who = tempObject.data.e.who; + thisRoom->objects[objActive].data.e.type = tempObject.data.e.type; + break; + + case kCeilingLight: case kLightBulb: case kTableLamp: + case kHipLamp: case kDecoLamp: case kFlourescent: + case kTrackLight: case kInvisLight: + thisRoom->objects[objActive].data.f.length = tempObject.data.f.length; + thisRoom->objects[objActive].data.f.byte0 = tempObject.data.f.byte0; + thisRoom->objects[objActive].data.f.byte1 = tempObject.data.f.byte1; + thisRoom->objects[objActive].data.f.initial = tempObject.data.f.initial; + thisRoom->objects[objActive].data.f.state = tempObject.data.f.state; + break; + + case kShredder: case kToaster: case kMacPlus: + case kGuitar: case kTV: case kCoffee: + case kOutlet: case kVCR: case kStereo: + case kMicrowave: case kCinderBlock: case kFlowerBox: + case kCDs: + thisRoom->objects[objActive].data.g.height = tempObject.data.g.height; + thisRoom->objects[objActive].data.g.byte0 = tempObject.data.g.byte0; + thisRoom->objects[objActive].data.g.delay = tempObject.data.g.delay; + thisRoom->objects[objActive].data.g.initial = tempObject.data.g.initial; + thisRoom->objects[objActive].data.g.state = tempObject.data.g.state; + break; + + case kCustomPict: + thisRoom->objects[objActive].data.g.topLeft.h = + tempObject.data.g.topLeft.h + 64; + thisRoom->objects[objActive].data.g.topLeft.v = tempObject.data.g.topLeft.v; + thisRoom->objects[objActive].data.g.height = tempObject.data.g.height; + thisRoom->objects[objActive].data.g.byte0 = tempObject.data.g.byte0; + thisRoom->objects[objActive].data.g.delay = tempObject.data.g.delay; + thisRoom->objects[objActive].data.g.initial = tempObject.data.g.initial; + thisRoom->objects[objActive].data.g.state = tempObject.data.g.state; + break; + + case kBalloon: case kCopterLf: case kCopterRt: + case kDartLf: case kDartRt: case kBall: + case kDrip: case kFish: case kCobweb: + thisRoom->objects[objActive].data.h.length = tempObject.data.h.length; + thisRoom->objects[objActive].data.h.delay = tempObject.data.h.delay; + thisRoom->objects[objActive].data.h.byte0 = tempObject.data.h.byte0; + thisRoom->objects[objActive].data.h.initial = tempObject.data.h.initial; + thisRoom->objects[objActive].data.h.state = tempObject.data.h.state; + break; + + case kOzma: case kMousehole: case kFireplace: + case kBear: case kCalendar: case kVase1: + case kVase2: case kBulletin: case kCloud: + case kFaucet: case kRug: case kChimes: + thisRoom->objects[objActive].data.i.pict = tempObject.data.i.pict; + break; + + case kMirror: case kFlower: case kWallWindow: + thisRoom->objects[objActive].data.i.bounds = tempObject.data.i.bounds; + QOffsetRect(&thisRoom->objects[objActive].data.i.bounds, 64, 0); + thisRoom->objects[objActive].data.i.pict = tempObject.data.i.pict; + break; + } + + if (KeepObjectLegal()) + { + } + handled = ObjectHasHandle(&direction, &dist); + + ReadyBackground(thisRoom->background, thisRoom->tiles); + GetThisRoomsObjRects(); + DrawThisRoomsObjects(); + InvalWindowRect(mainWindow, &mainWindowRect); + + if (handled) + { + StartMarqueeHandled(&roomObjectRects[objActive], direction, dist); + HandleBlowerGlider(); + } + else + StartMarquee(&roomObjectRects[objActive]); + } +} + +//-------------------------------------------------------------- MoveObject + +void MoveObject (short whichWay, Boolean shiftDown) +{ +#ifndef COMPILEDEMO + Rect wasRect; + short deltaH, deltaV, increment; + short dist, direction; + char wasState; + + if (theMode != kEditMode) + return; + + StopMarquee(); + + if (shiftDown) + increment = 10; + else + { + if (objActive == kInitialGliderSelected) + { + increment = 1; + } + else + { + if ((whichWay == kBumpRight) || (whichWay == kBumpLeft)) + { + switch (thisRoom->objects[objActive].what) + { + case kTaper: + case kCandle: + case kStubby: + case kTiki: + case kBBQ: + case kRedClock: + case kBlueClock: + case kYellowClock: + case kCuckoo: + case kPaper: + case kBattery: + case kBands: + case kGreaseRt: + case kGreaseLf: + case kFoil: + case kInvisBonus: + case kStar: + case kSparkle: + case kHelium: + case kSlider: + case kLightSwitch: + case kMachineSwitch: + case kThermostat: + case kPowerSwitch: + case kKnifeSwitch: + case kInvisSwitch: + case kTrigger: + case kLgTrigger: + case kSoundTrigger: + case kToaster: + case kMacPlus: + case kTV: + case kCoffee: + case kOutlet: + case kVCR: + case kStereo: + case kMicrowave: + case kBalloon: + case kCopterLf: + case kCopterRt: + case kBall: + case kDrip: + case kFish: + case kMirror: + increment = 2; + break; + + case kManhole: + increment = 64; + break; + + default: + increment = 1; + break; + } + } + else + increment = 1; + } + } + + switch (whichWay) + { + case kBumpUp: + deltaH = 0; + deltaV = -increment; + break; + + case kBumpDown: + deltaH = 0; + deltaV = increment; + break; + + case kBumpRight: + deltaH = increment; + deltaV = 0; + break; + + case kBumpLeft: + deltaH = -increment; + deltaV = 0; + break; + } + + if (objActive == kInitialGliderSelected) + { + wasRect = initialGliderRect; + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + (*thisHouse)->initial.h += deltaH; + (*thisHouse)->initial.v += deltaV; + HSetState((Handle)thisHouse, wasState); + } + else if (objActive == kLeftGliderSelected) + { + wasRect = leftStartGliderDest; + increment = thisRoom->leftStart + deltaV; + if (increment > 255) + increment = 255; + else if (increment < 0) + increment = 0; + thisRoom->leftStart = (Byte)increment; + QSetRect(&leftStartGliderDest, 0, 0, 48, 16); + QOffsetRect(&leftStartGliderDest, 0, + kGliderStartsDown + (short)thisRoom->leftStart); + } + else if (objActive == kRightGliderSelected) + { + wasRect = rightStartGliderDest; + increment = thisRoom->rightStart + deltaV; + if (increment > 255) + increment = 255; + else if (increment < 0) + increment = 0; + thisRoom->rightStart = (Byte)increment; + QSetRect(&rightStartGliderDest, 0, 0, 48, 16); + QOffsetRect(&rightStartGliderDest, kRoomWide - 48, + kGliderStartsDown + (short)thisRoom->rightStart); + } + else + { + wasRect = roomObjectRects[objActive]; + switch (thisRoom->objects[objActive].what) + { + case kFloorVent: + case kCeilingVent: + case kFloorBlower: + case kCeilingBlower: + case kSewerGrate: + case kGrecoVent: + case kSewerBlower: + thisRoom->objects[objActive].data.a.topLeft.h += deltaH; + break; + + case kLeftFan: + case kRightFan: + case kTaper: + case kCandle: + case kStubby: + case kTiki: + case kBBQ: + case kInvisBlower: + case kLiftArea: + thisRoom->objects[objActive].data.a.topLeft.h += deltaH; + thisRoom->objects[objActive].data.a.topLeft.v += deltaV; + break; + + case kTable: + case kShelf: + case kCabinet: + case kFilingCabinet: + case kWasteBasket: + case kMilkCrate: + case kDeckTable: + case kStool: + case kTrunk: + case kInvisObstacle: + case kBooks: + case kInvisBounce: + thisRoom->objects[objActive].data.b.bounds.left += deltaH; + thisRoom->objects[objActive].data.b.bounds.right += deltaH; + thisRoom->objects[objActive].data.b.bounds.top += deltaV; + thisRoom->objects[objActive].data.b.bounds.bottom += deltaV; + break; + + case kCounter: + case kDresser: + case kManhole: + thisRoom->objects[objActive].data.b.bounds.left += deltaH; + thisRoom->objects[objActive].data.b.bounds.right += deltaH; + break; + + case kRedClock: + case kBlueClock: + case kYellowClock: + case kCuckoo: + case kPaper: + case kBattery: + case kBands: + case kGreaseRt: + case kGreaseLf: + case kFoil: + case kInvisBonus: + case kStar: + case kSparkle: + case kHelium: + case kSlider: + thisRoom->objects[objActive].data.c.topLeft.h += deltaH; + thisRoom->objects[objActive].data.c.topLeft.v += deltaV; + break; + + case kUpStairs: + case kDownStairs: + case kFloorTrans: + case kCeilingTrans: + thisRoom->objects[objActive].data.d.topLeft.h += deltaH; + break; + + case kMailboxLf: + case kMailboxRt: + case kInvisTrans: + case kDeluxeTrans: + thisRoom->objects[objActive].data.d.topLeft.h += deltaH; + thisRoom->objects[objActive].data.d.topLeft.v += deltaV; + break; + + case kLightSwitch: + case kMachineSwitch: + case kThermostat: + case kPowerSwitch: + case kKnifeSwitch: + case kInvisSwitch: + case kTrigger: + case kLgTrigger: + case kSoundTrigger: + thisRoom->objects[objActive].data.e.topLeft.h += deltaH; + thisRoom->objects[objActive].data.e.topLeft.v += deltaV; + break; + + case kCeilingLight: + case kHipLamp: + case kDecoLamp: + case kFlourescent: + case kTrackLight: + thisRoom->objects[objActive].data.f.topLeft.h += deltaH; + break; + + case kLightBulb: + case kTableLamp: + case kInvisLight: + thisRoom->objects[objActive].data.f.topLeft.h += deltaH; + thisRoom->objects[objActive].data.f.topLeft.v += deltaV; + break; + + case kShredder: + case kToaster: + case kMacPlus: + case kGuitar: + case kTV: + case kCoffee: + case kOutlet: + case kVCR: + case kStereo: + case kMicrowave: + case kCinderBlock: + case kFlowerBox: + case kCDs: + case kCustomPict: + thisRoom->objects[objActive].data.g.topLeft.h += deltaH; + thisRoom->objects[objActive].data.g.topLeft.v += deltaV; + break; + + case kBalloon: + case kCopterLf: + case kCopterRt: + thisRoom->objects[objActive].data.h.topLeft.h += deltaH; + break; + + case kDartLf: + case kDartRt: + thisRoom->objects[objActive].data.h.topLeft.v += deltaV; + break; + + case kBall: + case kDrip: + case kFish: + case kCobweb: + thisRoom->objects[objActive].data.h.topLeft.h += deltaH; + thisRoom->objects[objActive].data.h.topLeft.v += deltaV; + break; + + case kOzma: + case kMirror: + case kFlower: + case kWallWindow: + case kBear: + case kCalendar: + case kVase1: + case kVase2: + case kBulletin: + case kCloud: + case kFaucet: + case kRug: + case kChimes: + thisRoom->objects[objActive].data.i.bounds.left += deltaH; + thisRoom->objects[objActive].data.i.bounds.right += deltaH; + thisRoom->objects[objActive].data.i.bounds.top += deltaV; + thisRoom->objects[objActive].data.i.bounds.bottom += deltaV; + break; + + case kMousehole: + case kFireplace: + thisRoom->objects[objActive].data.i.bounds.left += deltaH; + thisRoom->objects[objActive].data.i.bounds.right += deltaH; + break; + + } + } + + if (KeepObjectLegal()) + { + } + fileDirty = true; + UpdateMenus(false); + GetThisRoomsObjRects(); + + if (objActive == kInitialGliderSelected) + { + InvalWindowRect(mainWindow, &wasRect); + InvalWindowRect(mainWindow, &initialGliderRect); + } + else if (objActive == kLeftGliderSelected) + { + InvalWindowRect(mainWindow, &wasRect); + InvalWindowRect(mainWindow, &leftStartGliderDest); + } + else if (objActive == kRightGliderSelected) + { + InvalWindowRect(mainWindow, &wasRect); + InvalWindowRect(mainWindow, &rightStartGliderDest); + } + else + { + switch (thisRoom->objects[objActive].what) + { + case kTiki: + case kTable: + case kShelf: + case kCabinet: + case kDeckTable: + case kStool: + case kCounter: + case kDresser: + case kGreaseRt: + case kGreaseLf: + case kSlider: + case kMailboxLf: + case kMailboxRt: + case kTrackLight: + case kMirror: + case kWallWindow: + InvalWindowRect(mainWindow, &mainWindowRect); + break; + + default: + InvalWindowRect(mainWindow, &wasRect); + InvalWindowRect(mainWindow, &roomObjectRects[objActive]); + break; + } + } + + ReadyBackground(thisRoom->background, thisRoom->tiles); + DrawThisRoomsObjects(); + + if (ObjectHasHandle(&direction, &dist)) + { + StartMarqueeHandled(&roomObjectRects[objActive], direction, dist); + HandleBlowerGlider(); + } + else + { + if (objActive == kInitialGliderSelected) + StartMarquee(&initialGliderRect); + else if (objActive == kLeftGliderSelected) + StartMarquee(&leftStartGliderDest); + else if (objActive == kRightGliderSelected) + StartMarquee(&rightStartGliderDest); + else + StartMarquee(&roomObjectRects[objActive]); + } +#endif +} + +//-------------------------------------------------------------- DeselectObject + +void DeselectObject (void) +{ +#ifndef COMPILEDEMO + if ((theMode != kEditMode) || (objActive == kNoObjectSelected)) + return; + + objActive = kNoObjectSelected; + StopMarquee(); + UpdateMenus(false); +#endif +} + +//-------------------------------------------------------------- ObjectHasHandle + +#ifndef COMPILEDEMO +Boolean ObjectHasHandle (short *direction, short *dist) +{ + if ((objActive == kInitialGliderSelected) || + (objActive == kNoObjectSelected)) + return (false); + + switch (thisRoom->objects[objActive].what) + { + case kFloorVent: + case kFloorBlower: + case kSewerGrate: + case kTaper: + case kCandle: + case kStubby: + case kTiki: + case kBBQ: + case kGrecoVent: + case kSewerBlower: + *direction = kAbove; + *dist = thisRoom->objects[objActive].data.a.distance; + return (true); + break; + + case kCeilingVent: + case kCeilingBlower: + *direction = kBelow; + *dist = thisRoom->objects[objActive].data.a.distance; + return (true); + break; + + case kLeftFan: + *direction = kToLeft; + *dist = thisRoom->objects[objActive].data.a.distance; + return (true); + break; + + case kRightFan: + *direction = kToRight; + *dist = thisRoom->objects[objActive].data.a.distance; + return (true); + break; + + case kInvisBlower: + switch (thisRoom->objects[objActive].data.a.vector & 0x0F) + { + case 1: // up + *direction = kAbove; + break; + + case 2: // right + *direction = kToRight; + break; + + case 4: // down + *direction = kBelow; + break; + + case 8: // left + *direction = kToLeft; + break; + } + *dist = thisRoom->objects[objActive].data.a.distance; + return (true); + break; + + case kTable: + case kShelf: + case kDeckTable: + *direction = kToRight; + *dist = 0; + return (true); + break; + + case kLiftArea: + case kCabinet: + case kInvisObstacle: + case kInvisBounce: + case kMirror: + case kWallWindow: + *direction = kBottomCorner; + *dist = 0; + return (true); + break; + + case kCounter: + case kDresser: + *direction = kTopCorner; + *dist = 0; + return (true); + break; + + case kGreaseRt: + *direction = kToRight; + *dist = thisRoom->objects[objActive].data.c.length; + return (true); + break; + + case kGreaseLf: + *direction = kToLeft; + *dist = thisRoom->objects[objActive].data.c.length; + return (true); + break; + + case kSlider: + *direction = kToRight; + *dist = 0; + return (true); + break; + + case kInvisTrans: + case kDeluxeTrans: + *direction = kBottomCorner; + *dist = 0; + return (true); + break; + + case kFlourescent: + case kTrackLight: + *direction = kToRight; + *dist = 0; + return (true); + break; + + case kToaster: + *direction = kAbove; + *dist = thisRoom->objects[objActive].data.g.height; + return (true); + break; + + case kBall: + case kFish: + *direction = kAbove; + *dist = thisRoom->objects[objActive].data.h.length; + return (true); + break; + + case kDrip: + *direction = kBelow; + *dist = thisRoom->objects[objActive].data.h.length; + return (true); + break; + + default: + return (false); + break; + } +} +#endif + +//-------------------------------------------------------------- ObjectIsUpBlower + +Boolean ObjectIsUpBlower (objectType *who) +{ + if ((who->what == kFloorVent) || (who->what == kFloorBlower) || + (who->what == kSewerGrate) || (who->what == kTaper) || + (who->what == kCandle) || (who->what == kStubby) || + (who->what == kTiki) || (who->what == kBBQ) || + (who->what == kGrecoVent) || (who->what == kSewerBlower)) + return (true); + else if ((who->what == kInvisBlower) || (who->what == kLiftArea)) + { + if ((who->data.a.vector & 0x01) == 0x01) + return (true); + else + return (false); + } + else + return (false); +} + +//-------------------------------------------------------------- HandleBlowerGlider + +void HandleBlowerGlider (void) +{ +#ifndef COMPILEDEMO + short direction, dist; + + if (ObjectIsUpBlower(&thisRoom->objects[objActive])) + { + if (ObjectHasHandle(&direction, &dist)) + { + SetMarqueeGliderRect(((roomObjectRects[objActive].right + + roomObjectRects[objActive].left) / 2), + roomObjectRects[objActive].top - dist); + } + } +#endif +} + +//-------------------------------------------------------------- SelectNextObject + +void SelectNextObject (void) +{ +#ifndef COMPILEDEMO + short direction, dist; + Boolean noneFound; + + if ((theMode != kEditMode) || (thisRoom->numObjects <= 0)) + return; + + noneFound = true; + + while (noneFound) + { + objActive++; + if (objActive >= kMaxRoomObs) + objActive = 0; + if (thisRoom->objects[objActive].what != kObjectIsEmpty) + noneFound = false; + } + + UpdateMenus(false); + if (ObjectHasHandle(&direction, &dist)) + { + StartMarqueeHandled(&roomObjectRects[objActive], direction, dist); + HandleBlowerGlider(); + } + else + StartMarquee(&roomObjectRects[objActive]); +#endif +} + +//-------------------------------------------------------------- SelectPrevObject + +void SelectPrevObject (void) +{ +#ifndef COMPILEDEMO + short direction, dist; + Boolean noneFound; + + if ((theMode != kEditMode) || (thisRoom->numObjects <= 0)) + return; + + noneFound = true; + + while (noneFound) + { + objActive--; + if (objActive < 0) + objActive = kMaxRoomObs - 1; + if (thisRoom->objects[objActive].what != kObjectIsEmpty) + noneFound = false; + } + + UpdateMenus(false); + if (ObjectHasHandle(&direction, &dist)) + { + StartMarqueeHandled(&roomObjectRects[objActive], direction, dist); + HandleBlowerGlider(); + } + else + StartMarquee(&roomObjectRects[objActive]); +#endif +} + +//-------------------------------------------------------------- GetThisRoomsObjRects + +#ifndef COMPILEDEMO +void GetThisRoomsObjRects (void) +{ + PicHandle thePict; + short i, wide, tall; + + isFirstRoom = (GetFirstRoomNumber() == thisRoomNumber); + + if ((isFirstRoom) && (!noRoomAtAll) && (houseUnlocked)) + WhereDoesGliderBegin(&initialGliderRect, kNewGameMode); + else + QSetRect(&initialGliderRect, 0, 0, 0, 0); + + QSetRect(&leftStartGliderDest, 0, 0, 48, 16); + QOffsetRect(&leftStartGliderDest, 0, + kGliderStartsDown + (short)thisRoom->leftStart); + + QSetRect(&rightStartGliderDest, 0, 0, 48, 16); + QOffsetRect(&rightStartGliderDest, kRoomWide - 48, + kGliderStartsDown + (short)thisRoom->rightStart); + + if ((noRoomAtAll) || (!houseUnlocked)) + { + return; + } + else + { + for (i = 0; i < kMaxRoomObs; i++) + { + switch (thisRoom->objects[i].what) + { + case kObjectIsEmpty: + QSetRect(&roomObjectRects[i], -2, -2, -1, -1); + break; + + case kFloorVent: + case kCeilingVent: + case kFloorBlower: + case kCeilingBlower: + case kSewerGrate: + case kLeftFan: + case kRightFan: + case kTaper: + case kCandle: + case kStubby: + case kTiki: + case kBBQ: + case kInvisBlower: + case kGrecoVent: + case kSewerBlower: + roomObjectRects[i] = srcRects[thisRoom->objects[i].what]; + ZeroRectCorner(&roomObjectRects[i]); + QOffsetRect(&roomObjectRects[i], + thisRoom->objects[i].data.a.topLeft.h, + thisRoom->objects[i].data.a.topLeft.v); + break; + + case kLiftArea: + QSetRect(&roomObjectRects[i], 0, 0, + thisRoom->objects[i].data.a.distance, + thisRoom->objects[i].data.a.tall * 2); + QOffsetRect(&roomObjectRects[i], + thisRoom->objects[i].data.a.topLeft.h, + thisRoom->objects[i].data.a.topLeft.v); + break; + + case kTable: + case kShelf: + case kCabinet: + case kFilingCabinet: + case kWasteBasket: + case kMilkCrate: + case kCounter: + case kDresser: + case kDeckTable: + case kStool: + case kTrunk: + case kInvisObstacle: + case kManhole: + case kBooks: + case kInvisBounce: + roomObjectRects[i] = thisRoom->objects[i].data.b.bounds; + break; + + case kRedClock: + case kBlueClock: + case kYellowClock: + case kCuckoo: + case kPaper: + case kBattery: + case kBands: + case kFoil: + case kInvisBonus: + case kStar: + case kSparkle: + case kHelium: + roomObjectRects[i] = srcRects[thisRoom->objects[i].what]; + ZeroRectCorner(&roomObjectRects[i]); + QOffsetRect(&roomObjectRects[i], + thisRoom->objects[i].data.c.topLeft.h, + thisRoom->objects[i].data.c.topLeft.v); + break; + + case kGreaseRt: + roomObjectRects[i] = srcRects[thisRoom->objects[i].what]; + ZeroRectCorner(&roomObjectRects[i]); + QOffsetRect(&roomObjectRects[i], + thisRoom->objects[i].data.c.topLeft.h, + thisRoom->objects[i].data.c.topLeft.v); + if (!thisRoom->objects[i].data.c.initial) + QOffsetRect(&roomObjectRects[i], 8, 0); + break; + + case kGreaseLf: + roomObjectRects[i] = srcRects[thisRoom->objects[i].what]; + ZeroRectCorner(&roomObjectRects[i]); + QOffsetRect(&roomObjectRects[i], + thisRoom->objects[i].data.c.topLeft.h, + thisRoom->objects[i].data.c.topLeft.v); + if (!thisRoom->objects[i].data.c.initial) + QOffsetRect(&roomObjectRects[i], -8, 0); + break; + + case kSlider: + roomObjectRects[i] = srcRects[thisRoom->objects[i].what]; + ZeroRectCorner(&roomObjectRects[i]); + QOffsetRect(&roomObjectRects[i], + thisRoom->objects[i].data.c.topLeft.h, + thisRoom->objects[i].data.c.topLeft.v); + roomObjectRects[i].right = roomObjectRects[i].left + + thisRoom->objects[i].data.c.length; + break; + + case kUpStairs: + case kDownStairs: + case kMailboxLf: + case kMailboxRt: + case kFloorTrans: + case kCeilingTrans: + case kDoorInLf: + case kDoorInRt: + case kDoorExRt: + case kDoorExLf: + case kWindowInLf: + case kWindowInRt: + case kWindowExRt: + case kWindowExLf: + roomObjectRects[i] = srcRects[thisRoom->objects[i].what]; + ZeroRectCorner(&roomObjectRects[i]); + QOffsetRect(&roomObjectRects[i], + thisRoom->objects[i].data.d.topLeft.h, + thisRoom->objects[i].data.d.topLeft.v); + break; + + case kInvisTrans: + roomObjectRects[i] = srcRects[thisRoom->objects[i].what]; + ZeroRectCorner(&roomObjectRects[i]); + QOffsetRect(&roomObjectRects[i], + thisRoom->objects[i].data.d.topLeft.h, + thisRoom->objects[i].data.d.topLeft.v); + roomObjectRects[i].bottom = roomObjectRects[i].top + + thisRoom->objects[i].data.d.tall; + roomObjectRects[i].right += (short)thisRoom->objects[i].data.d.wide; + break; + + case kDeluxeTrans: // Uses a kludge to get width & height (x4) + wide = (thisRoom->objects[i].data.d.tall & 0xFF00) >> 8; + tall = thisRoom->objects[i].data.d.tall & 0x00FF; + QSetRect(&roomObjectRects[i], 0, 0, wide * 4, tall * 4); + QOffsetRect(&roomObjectRects[i], + thisRoom->objects[i].data.d.topLeft.h, + thisRoom->objects[i].data.d.topLeft.v); + break; + + case kLightSwitch: + case kMachineSwitch: + case kThermostat: + case kPowerSwitch: + case kKnifeSwitch: + case kInvisSwitch: + case kTrigger: + case kLgTrigger: + case kSoundTrigger: + roomObjectRects[i] = srcRects[thisRoom->objects[i].what]; + ZeroRectCorner(&roomObjectRects[i]); + QOffsetRect(&roomObjectRects[i], + thisRoom->objects[i].data.e.topLeft.h, + thisRoom->objects[i].data.e.topLeft.v); + break; + + case kCeilingLight: + case kLightBulb: + case kTableLamp: + case kHipLamp: + case kDecoLamp: + case kInvisLight: + roomObjectRects[i] = srcRects[thisRoom->objects[i].what]; + ZeroRectCorner(&roomObjectRects[i]); + QOffsetRect(&roomObjectRects[i], + thisRoom->objects[i].data.f.topLeft.h, + thisRoom->objects[i].data.f.topLeft.v); + break; + + case kFlourescent: + case kTrackLight: + roomObjectRects[i] = srcRects[thisRoom->objects[i].what]; + ZeroRectCorner(&roomObjectRects[i]); + roomObjectRects[i].right = thisRoom->objects[i].data.f.length; + QOffsetRect(&roomObjectRects[i], + thisRoom->objects[i].data.f.topLeft.h, + thisRoom->objects[i].data.f.topLeft.v); + break; + + case kShredder: + case kToaster: + case kMacPlus: + case kGuitar: + case kTV: + case kCoffee: + case kOutlet: + case kVCR: + case kStereo: + case kMicrowave: + case kCinderBlock: + case kFlowerBox: + case kCDs: + roomObjectRects[i] = srcRects[thisRoom->objects[i].what]; + ZeroRectCorner(&roomObjectRects[i]); + QOffsetRect(&roomObjectRects[i], + thisRoom->objects[i].data.g.topLeft.h, + thisRoom->objects[i].data.g.topLeft.v); + break; + + case kCustomPict: + thePict = GetPicture(thisRoom->objects[i].data.g.height); + if (thePict == nil) + { + thisRoom->objects[i].data.g.height = 10000; + roomObjectRects[i] = srcRects[thisRoom->objects[i].what]; + } + else + { + HLock((Handle)thePict); + roomObjectRects[i] = (*thePict)->picFrame; + HUnlock((Handle)thePict); + } + ZeroRectCorner(&roomObjectRects[i]); + QOffsetRect(&roomObjectRects[i], + thisRoom->objects[i].data.g.topLeft.h, + thisRoom->objects[i].data.g.topLeft.v); + break; + + case kBalloon: + case kCopterLf: + case kCopterRt: + case kDartLf: + case kDartRt: + case kBall: + case kDrip: + case kFish: + case kCobweb: + roomObjectRects[i] = srcRects[thisRoom->objects[i].what]; + ZeroRectCorner(&roomObjectRects[i]); + QOffsetRect(&roomObjectRects[i], + thisRoom->objects[i].data.h.topLeft.h, + thisRoom->objects[i].data.h.topLeft.v); + break; + + case kOzma: + case kMirror: + case kMousehole: + case kFireplace: + case kFlower: + case kWallWindow: + case kBear: + case kCalendar: + case kVase1: + case kVase2: + case kBulletin: + case kCloud: + case kFaucet: + case kRug: + case kChimes: + roomObjectRects[i] = thisRoom->objects[i].data.i.bounds; + break; + + default: + QSetRect(&roomObjectRects[i], -2, -2, -1, -1); + break; + + } + } + } +} +#endif + +//-------------------------------------------------------------- DrawThisRoomsObjects + +#ifndef COMPILEDEMO +void DrawThisRoomsObjects (void) +{ + Rect tempRect; + short i; + CGrafPtr wasCPort; + GDHandle wasWorld; + Pattern dummyPattern; + + GetGWorld(&wasCPort, &wasWorld); + SetGWorld(backSrcMap, nil); + + if ((noRoomAtAll) || (!houseUnlocked)) + return; + else + { + if (GetNumberOfLights(thisRoomNumber) <= 0) + { + PenMode(srcOr); + PenPat(GetQDGlobalsGray(&dummyPattern)); + PaintRect(&backSrcRect); + PenNormal(); + } + + for (i = 0; i < kMaxRoomObs; i++) + { + switch (thisRoom->objects[i].what) + { + case kObjectIsEmpty: + break; + + case kFloorVent: + case kCeilingVent: + case kFloorBlower: + case kCeilingBlower: + case kSewerGrate: + case kLeftFan: + case kRightFan: + case kTaper: + case kCandle: + case kStubby: + case kGrecoVent: + case kSewerBlower: + DrawSimpleBlowers(thisRoom->objects[i].what, &roomObjectRects[i]); + break; + + case kTiki: + DrawTiki(&roomObjectRects[i], 0); + break; + + case kInvisBlower: + DrawInvisibleBlower(&roomObjectRects[i]); + break; + + case kLiftArea: + DrawLiftArea(&roomObjectRects[i]); + break; + + case kTable: + DrawTable(&roomObjectRects[i], 0); + break; + + case kShelf: + DrawShelf(&roomObjectRects[i]); + break; + + case kCabinet: + DrawCabinet(&roomObjectRects[i]); + break; + + case kFilingCabinet: + case kDownStairs: + case kDoorExRt: + case kDoorExLf: + case kWindowExRt: + case kWindowExLf: + case kOzma: + DrawPictObject(thisRoom->objects[i].what, &roomObjectRects[i]); + break; + + case kWasteBasket: + case kMilkCrate: + DrawSimpleFurniture(thisRoom->objects[i].what, &roomObjectRects[i]); + break; + + case kCounter: + DrawCounter(&roomObjectRects[i]); + break; + + case kDresser: + DrawDresser(&roomObjectRects[i]); + break; + + case kDeckTable: + DrawDeckTable(&roomObjectRects[i], 0); + break; + + case kStool: + DrawStool(&roomObjectRects[i], 0); + break; + + case kInvisObstacle: + DrawInvisObstacle(&roomObjectRects[i]); + break; + + case kInvisBounce: + DrawInvisBounce(&roomObjectRects[i]); + break; + + case kRedClock: + DrawRedClock(&roomObjectRects[i]); + break; + + case kBlueClock: + DrawBlueClock(&roomObjectRects[i]); + break; + + case kYellowClock: + DrawYellowClock(&roomObjectRects[i]); + break; + + case kCuckoo: + DrawCuckoo(&roomObjectRects[i]); + break; + + case kPaper: + case kBattery: + case kBands: + case kStar: + case kSparkle: + case kHelium: + DrawSimplePrizes(thisRoom->objects[i].what, &roomObjectRects[i]); + break; + + case kGreaseRt: + tempRect = roomObjectRects[i]; + if (!thisRoom->objects[i].data.c.initial) + QOffsetRect(&tempRect, -8, 0); + DrawGreaseRt(&tempRect, thisRoom->objects[i].data.c.length, + thisRoom->objects[i].data.c.initial); + break; + + case kGreaseLf: + tempRect = roomObjectRects[i]; + if (!thisRoom->objects[i].data.c.initial) + QOffsetRect(&tempRect, 8, 0); + DrawGreaseLf(&tempRect, thisRoom->objects[i].data.c.length, + thisRoom->objects[i].data.c.initial); + break; + + case kFoil: + DrawFoil(&roomObjectRects[i]); + break; + + case kInvisBonus: + DrawInvisBonus(&roomObjectRects[i]); + break; + + case kSlider: + DrawSlider(&roomObjectRects[i]); + break; + + case kBBQ: + case kTrunk: + case kManhole: + case kBooks: + case kUpStairs: + case kDoorInLf: + case kDoorInRt: + case kWindowInLf: + case kWindowInRt: + case kHipLamp: + case kDecoLamp: + case kGuitar: + case kCinderBlock: + case kFlowerBox: + case kFireplace: + case kBear: + case kVase1: + case kVase2: + case kRug: + case kChimes: + DrawPictSansWhiteObject(thisRoom->objects[i].what, &roomObjectRects[i]); + break; + + case kCustomPict: + DrawCustPictSansWhite(thisRoom->objects[i].data.g.height, + &roomObjectRects[i]); + break; + + case kMailboxLf: + DrawMailboxLeft(&roomObjectRects[i], 0); + break; + + case kMailboxRt: + DrawMailboxRight(&roomObjectRects[i], 0); + break; + + case kFloorTrans: + case kCeilingTrans: + DrawSimpleTransport(thisRoom->objects[i].what, &roomObjectRects[i]); + break; + + case kInvisTrans: + case kDeluxeTrans: + DrawInvisTransport(&roomObjectRects[i]); + break; + + case kLightSwitch: + DrawLightSwitch(&roomObjectRects[i], true); + break; + + case kMachineSwitch: + DrawMachineSwitch(&roomObjectRects[i], true); + break; + + case kThermostat: + DrawThermostat(&roomObjectRects[i], true); + break; + + case kPowerSwitch: + DrawPowerSwitch(&roomObjectRects[i], true); + break; + + case kKnifeSwitch: + DrawKnifeSwitch(&roomObjectRects[i], true); + break; + + case kInvisSwitch: + DrawInvisibleSwitch(&roomObjectRects[i]); + break; + + case kTrigger: + case kLgTrigger: + DrawTrigger(&roomObjectRects[i]); + break; + + case kSoundTrigger: + DrawSoundTrigger(&roomObjectRects[i]); + break; + + case kCeilingLight: + case kLightBulb: + case kTableLamp: + DrawSimpleLight(thisRoom->objects[i].what, &roomObjectRects[i]); + break; + + case kFlourescent: + DrawFlourescent(&roomObjectRects[i]); + break; + + case kTrackLight: + DrawTrackLight(&roomObjectRects[i]); + break; + + case kInvisLight: + DrawInvisLight(&roomObjectRects[i]); + break; + + case kShredder: + case kToaster: + case kCDs: + DrawSimpleAppliance(thisRoom->objects[i].what, &roomObjectRects[i]); + break; + + case kMacPlus: + DrawMacPlus(&roomObjectRects[i], + thisRoom->objects[i].data.g.initial, true); + break; + + case kTV: + DrawTV(&roomObjectRects[i], + thisRoom->objects[i].data.g.initial, true); + break; + + case kCoffee: + DrawCoffee(&roomObjectRects[i], + thisRoom->objects[i].data.g.initial, true); + break; + + case kOutlet: + DrawOutlet(&roomObjectRects[i]); + break; + + case kVCR: + DrawVCR(&roomObjectRects[i], + thisRoom->objects[i].data.g.initial, true); + break; + + case kStereo: + DrawStereo(&roomObjectRects[i], isPlayMusicGame, true); + break; + + case kMicrowave: + DrawMicrowave(&roomObjectRects[i], + thisRoom->objects[i].data.g.initial, true); + break; + + case kBalloon: + DrawBalloon(&roomObjectRects[i]); + break; + + case kCopterLf: + case kCopterRt: + DrawCopter(&roomObjectRects[i]); + break; + + case kDartLf: + case kDartRt: + DrawDart(&roomObjectRects[i], thisRoom->objects[i].what); + break; + + case kBall: + DrawBall(thisRoom->objects[i].what, &roomObjectRects[i]); + break; + + case kDrip: + DrawDrip(&roomObjectRects[i]); + break; + + case kFish: + DrawFish(thisRoom->objects[i].what, &roomObjectRects[i]); + break; + + case kCobweb: + case kCloud: + DrawPictWithMaskObject(thisRoom->objects[i].what, &roomObjectRects[i]); + break; + + case kMirror: + DrawMirror(&roomObjectRects[i]); + break; + + case kMousehole: + case kFaucet: + DrawSimpleClutter(thisRoom->objects[i].what, &roomObjectRects[i]); + break; + + case kFlower: + DrawFlower(&roomObjectRects[i], thisRoom->objects[i].data.i.pict); + break; + + case kWallWindow: + DrawWallWindow(&roomObjectRects[i]); + break; + + case kCalendar: + DrawCalendar(&roomObjectRects[i]); + break; + + case kBulletin: + DrawBulletin(&roomObjectRects[i]); + break; + + default: + break; + } + } + } + + SetGWorld(wasCPort, wasWorld); + + if (isFirstRoom) + { + CopyMask((BitMap *)*GetGWorldPixMap(glidSrcMap), + (BitMap *)*GetGWorldPixMap(glidMaskMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &gliderSrc[0], &gliderSrc[0], &initialGliderRect); + } + + CopyMask((BitMap *)*GetGWorldPixMap(blowerSrcMap), + (BitMap *)*GetGWorldPixMap(blowerMaskMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &leftStartGliderSrc, &leftStartGliderSrc, &leftStartGliderDest); + + CopyMask((BitMap *)*GetGWorldPixMap(blowerSrcMap), + (BitMap *)*GetGWorldPixMap(blowerMaskMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &rightStartGliderSrc, &rightStartGliderSrc, &rightStartGliderDest); + + CopyBits((BitMap *)*GetGWorldPixMap(backSrcMap), + (BitMap *)*GetGWorldPixMap(workSrcMap), + &backSrcRect, &backSrcRect, srcCopy, nil); +} +#endif + +//-------------------------------------------------------------- HiliteAllObjects + +void HiliteAllObjects (void) +{ +#ifndef COMPILEDEMO + KeyMap theseKeys; + short i; + Pattern dummyPattern; + + if (theMode != kEditMode) + return; + + PauseMarquee(); + SetPort((GrafPtr)mainWindow); + PenPat(GetQDGlobalsGray(&dummyPattern)); + PenMode(patXor); + + for (i = 0; i < kMaxRoomObs; i++) + FrameRect(&roomObjectRects[i]); + + do + { + GetKeys(theseKeys); + } + while ((BitTst(&theseKeys, kCommandKeyMap)) && + (BitTst(&theseKeys, kOptionKeyMap))); + + for (i = 0; i < kMaxRoomObs; i++) + FrameRect(&roomObjectRects[i]); + + PenNormal(); + ResumeMarquee(); +#endif +} + +//-------------------------------------------------------------- GoToObjectInRoom + +void GoToObjectInRoom (short object, short floor, short suite) +{ + #ifndef COMPILEDEMO + short itsNumber, direction, dist; + + if (RoomExists(suite, floor, &itsNumber)) + { + if (itsNumber != thisRoomNumber) + { + CopyRoomToThisRoom(itsNumber); + DeselectObject(); + ReflectCurrentRoom(false); + } + else + DeselectObject(); + + if (thisRoom->objects[object].what != kObjectIsEmpty) + { + objActive = object; + if (ObjectHasHandle(&direction, &dist)) + { + StartMarqueeHandled(&roomObjectRects[objActive], direction, dist); + HandleBlowerGlider(); + } + else + StartMarquee(&roomObjectRects[objActive]); + UpdateMenus(false); + } + } + #endif +} + +//-------------------------------------------------------------- GoToObjectInRoomNum + +void GoToObjectInRoomNum (short object, short roomNum) +{ + short floor, suite; + + if (GetRoomFloorSuite(roomNum, &floor, &suite)) + GoToObjectInRoom(object, floor, suite); +} + diff --git a/GpApp/ObjectEdit.h b/GpApp/ObjectEdit.h new file mode 100644 index 0000000..5d29758 --- /dev/null +++ b/GpApp/ObjectEdit.h @@ -0,0 +1,15 @@ +//============================================================================ +//---------------------------------------------------------------------------- +// ObjectEdit.h +//---------------------------------------------------------------------------- +//============================================================================ + + +#pragma once + + +#include "PLQuickdraw.h" + + +extern Rect roomObjectRects[]; +extern short objActive; diff --git a/GpApp/ObjectInfo.cpp b/GpApp/ObjectInfo.cpp new file mode 100644 index 0000000..cfe09b4 --- /dev/null +++ b/GpApp/ObjectInfo.cpp @@ -0,0 +1,2568 @@ + +//============================================================================ +//---------------------------------------------------------------------------- +// ObjectInfo.c +//---------------------------------------------------------------------------- +//============================================================================ + + +#include "PLNumberFormatting.h" +#include "PLSound.h" +#include "PLTextUtils.h" +#include "PLPasStr.h" +#include "DialogUtils.h" +#include "Externs.h" +#include "ObjectEdit.h" +#include "RectUtils.h" + + +#define kBlowerInfoDialogID 1007 +#define kFurnitureInfoDialogID 1010 +#define kSwitchInfoDialogID 1011 +#define kLightInfoDialogID 1013 +#define kApplianceInfoDialogID 1014 +#define kInvisBonusInfoDialogID 1015 +#define kGreaseInfoDialogID 1019 +#define kTransInfoDialogID 1022 +#define kEnemyInfoDialogID 1027 +#define kFlowerInfoDialogID 1033 +#define kTriggerInfoDialogID 1034 +#define kMicrowaveInfoDialogID 1035 +#define kCustPictInfoDialogID 1045 +#define kCustPictIDItem 7 +#define kInitialStateCheckbox 6 +#define kForceCheckbox 7 +#define kDirectionText 9 +#define kLeftFacingRadio 16 +#define kRightFacingRadio 17 +#define kToggleRadio 6 +#define kForceOnRadio 7 +#define kForceOffRadio 8 +#define kDelay3Item 6 +#define kDelayItem 8 +#define kDelayLabelItem 9 +#define k100PtRadio 6 +#define k300PtRadio 7 +#define k500PtRadio 8 +#define kGreaseItem 6 +#define kLinkTransButton 6 +#define kInitialStateCheckbox3 13 +#define kTransRoomText 8 +#define kTransObjectText 9 +#define kKillBandsCheckbox 8 +#define kKillBatteryCheckbox 9 +#define kKillFoilCheckbox 10 +#define kDelay2Item 7 +#define kDelay2LabelItem 8 +#define kDelay2LabelItem2 9 +#define kInitialStateCheckbox2 10 +#define kRadioFlower1 6 +#define kRadioFlower6 11 +#define kFlowerCancel 12 +#define kGotoButton1 11 +#define kGotoButton2 14 + + +void UpdateBlowerInfo (DialogPtr); +void UpdateFurnitureInfo (DialogPtr); +void UpdateCustPictInfo (DialogPtr); +void UpdateSwitchInfo (DialogPtr); +void UpdateTriggerInfo (DialogPtr); +void UpdateLightInfo (DialogPtr); +void UpdateApplianceInfo (DialogPtr); +void UpdateMicrowaveInfo (DialogPtr); +void UpdateGreaseInfo (DialogPtr); +void UpdateInvisBonusInfo (DialogPtr); +void UpdateTransInfo (DialogPtr); +void UpdateEnemyInfo (DialogPtr); +void UpdateFlowerInfo (DialogPtr); +Boolean BlowerFilter (DialogPtr, EventRecord *, short *); +Boolean FurnitureFilter (DialogPtr, EventRecord *, short *); +Boolean CustPictFilter (DialogPtr, EventRecord *, short *); +Boolean SwitchFilter (DialogPtr, EventRecord *, short *); +Boolean TriggerFilter (DialogPtr, EventRecord *, short *); +Boolean LightFilter (DialogPtr, EventRecord *, short *); +Boolean ApplianceFilter (DialogPtr, EventRecord *, short *); +Boolean MicrowaveFilter (DialogPtr, EventRecord *, short *); +Boolean GreaseFilter (DialogPtr, EventRecord *, short *); +Boolean InvisBonusFilter (DialogPtr, EventRecord *, short *); +Boolean TransFilter (DialogPtr, EventRecord *, short *); +Boolean EnemyFilter (DialogPtr, EventRecord *, short *); +Boolean FlowerFilter (DialogPtr, EventRecord *, short *); +void DoBlowerObjectInfo (short); +void DoFurnitureObjectInfo (void); +void DoCustPictObjectInfo (void); +void DoSwitchObjectInfo (void); +void DoTriggerObjectInfo (void); +void DoLightObjectInfo (void); +void DoApplianceObjectInfo (short); +void DoMicrowaveObjectInfo (void); +void DoGreaseObjectInfo (void); +void DoInvisBonusObjectInfo (void); +void DoTransObjectInfo (short); +void DoEnemyObjectInfo (short); +void DoFlowerObjectInfo (void); + + +short newDirection, newPoint; +Byte newType; + +extern retroLink retroLinkList[]; +extern short linkRoom, linkType, wasFlower; +extern Byte linkObject; +extern Boolean linkerIsSwitch; + + +#ifndef COMPILEDEMO + +//============================================================== Functions +//-------------------------------------------------------------- UpdateBlowerInfo + +void UpdateBlowerInfo (DialogPtr theDialog) +{ + #define kArrowheadLength 4 + Rect bounds; + + DrawDialog(theDialog); + DrawDefaultButton(theDialog); + FrameDialogItemC(theDialog, 5, kRedOrangeColor8); + + if ((thisRoom->objects[objActive].what != kLeftFan) && + (thisRoom->objects[objActive].what != kRightFan)) + { + GetDialogItemRect(theDialog, 8, &bounds); + bounds.right += 2; + bounds.bottom += 2; + EraseRect(&bounds); + bounds.right -= 2; + bounds.bottom -= 2; + PenSize(2, 2); + + switch (newDirection) + { + case 1: // up + MoveTo(bounds.left + HalfRectWide(&bounds), bounds.top); + Line(0, RectTall(&bounds)); + MoveTo(bounds.left + HalfRectWide(&bounds), bounds.top); + Line(kArrowheadLength, kArrowheadLength); + MoveTo(bounds.left + HalfRectWide(&bounds), bounds.top); + Line(-kArrowheadLength, kArrowheadLength); + break; + + case 2: // right + MoveTo(bounds.right, bounds.top + HalfRectTall(&bounds)); + Line(-RectWide(&bounds), 0); + MoveTo(bounds.right, bounds.top + HalfRectTall(&bounds)); + Line(-kArrowheadLength, kArrowheadLength); + MoveTo(bounds.right, bounds.top + HalfRectTall(&bounds)); + Line(-kArrowheadLength, -kArrowheadLength); + break; + + case 4: // down + MoveTo(bounds.left + HalfRectWide(&bounds), bounds.top); + Line(0, RectTall(&bounds)); + MoveTo(bounds.left + HalfRectWide(&bounds), bounds.bottom); + Line(kArrowheadLength, -kArrowheadLength); + MoveTo(bounds.left + HalfRectWide(&bounds), bounds.bottom); + Line(-kArrowheadLength, -kArrowheadLength); + break; + + case 8: // left + MoveTo(bounds.left, bounds.top + HalfRectTall(&bounds)); + Line(RectWide(&bounds), 0); + MoveTo(bounds.left, bounds.top + HalfRectTall(&bounds)); + Line(kArrowheadLength, -kArrowheadLength); + MoveTo(bounds.left, bounds.top + HalfRectTall(&bounds)); + Line(kArrowheadLength, kArrowheadLength); + break; + + default: + break; + } + + PenNormal(); + + if ((thisRoom->objects[objActive].what == kInvisBlower) || + (thisRoom->objects[objActive].what == kLiftArea)) + { + switch (newDirection) + { + case 1: // up + EraseDialogItem(theDialog, 11); + FrameOvalDialogItem(theDialog, 12); + FrameOvalDialogItem(theDialog, 13); + FrameOvalDialogItem(theDialog, 14); + break; + + case 2: // right + FrameOvalDialogItem(theDialog, 11); + EraseDialogItem(theDialog, 12); + FrameOvalDialogItem(theDialog, 13); + FrameOvalDialogItem(theDialog, 14); + break; + + case 4: // down + FrameOvalDialogItem(theDialog, 11); + FrameOvalDialogItem(theDialog, 12); + EraseDialogItem(theDialog, 13); + FrameOvalDialogItem(theDialog, 14); + break; + + case 8: // left + FrameOvalDialogItem(theDialog, 11); + FrameOvalDialogItem(theDialog, 12); + FrameOvalDialogItem(theDialog, 13); + EraseDialogItem(theDialog, 14); + break; + } + } + } +} + +//-------------------------------------------------------------- UpdateFurnitureInfo + +void UpdateFurnitureInfo (DialogPtr theDialog) +{ + DrawDialog(theDialog); + DrawDefaultButton(theDialog); + FrameDialogItemC(theDialog, 4, kRedOrangeColor8); +} + +//-------------------------------------------------------------- UpdateCustPictInfo + +void UpdateCustPictInfo (DialogPtr theDialog) +{ + DrawDialog(theDialog); + DrawDefaultButton(theDialog); + FrameDialogItemC(theDialog, 5, kRedOrangeColor8); +} + +//-------------------------------------------------------------- UpdateSwitchInfo + +void UpdateSwitchInfo (DialogPtr theDialog) +{ + DrawDialog(theDialog); + DrawDefaultButton(theDialog); + SelectFromRadioGroup(theDialog, newType + kToggleRadio, + kToggleRadio, kForceOffRadio); + FrameDialogItemC(theDialog, 4, kRedOrangeColor8); + FrameDialogItemC(theDialog, 13, kRedOrangeColor8); +} + +//-------------------------------------------------------------- UpdateTriggerInfo + +void UpdateTriggerInfo (DialogPtr theDialog) +{ + DrawDialog(theDialog); + DrawDefaultButton(theDialog); + FrameDialogItemC(theDialog, 4, kRedOrangeColor8); + FrameDialogItemC(theDialog, 13, kRedOrangeColor8); +} + +//-------------------------------------------------------------- UpdateLightInfo + +void UpdateLightInfo (DialogPtr theDialog) +{ + DrawDialog(theDialog); + DrawDefaultButton(theDialog); + FrameDialogItemC(theDialog, 5, kRedOrangeColor8); +} + +//-------------------------------------------------------------- UpdateApplianceInfo + +void UpdateApplianceInfo (DialogPtr theDialog) +{ + DrawDialog(theDialog); + DrawDefaultButton(theDialog); + FrameDialogItemC(theDialog, 5, kRedOrangeColor8); +} + +//-------------------------------------------------------------- UpdateMicrowaveInfo + +void UpdateMicrowaveInfo (DialogPtr theDialog) +{ + DrawDialog(theDialog); + DrawDefaultButton(theDialog); + FrameDialogItemC(theDialog, 5, kRedOrangeColor8); +} + +//-------------------------------------------------------------- UpdateGreaseInfo + +void UpdateGreaseInfo (DialogPtr theDialog) +{ + DrawDialog(theDialog); + DrawDefaultButton(theDialog); + FrameDialogItemC(theDialog, 5, kRedOrangeColor8); +} + +//-------------------------------------------------------------- UpdateInvisBonusInfo + +void UpdateInvisBonusInfo (DialogPtr theDialog) +{ + DrawDialog(theDialog); + DrawDefaultButton(theDialog); + SelectFromRadioGroup(theDialog, newPoint + k100PtRadio, + k100PtRadio, k500PtRadio); + FrameDialogItemC(theDialog, 4, kRedOrangeColor8); +} + +//-------------------------------------------------------------- UpdateTransInfo + +void UpdateTransInfo (DialogPtr theDialog) +{ + DrawDialog(theDialog); + DrawDefaultButton(theDialog); + FrameDialogItemC(theDialog, 4, kRedOrangeColor8); + FrameDialogItemC(theDialog, 10, kRedOrangeColor8); +} + +//-------------------------------------------------------------- UpdateEnemyInfo + +void UpdateEnemyInfo (DialogPtr theDialog) +{ + DrawDialog(theDialog); + DrawDefaultButton(theDialog); + FrameDialogItemC(theDialog, 4, kRedOrangeColor8); +} + +//-------------------------------------------------------------- UpdateFlowerInfo + +void UpdateFlowerInfo (DialogPtr theDialog) +{ + DrawDialog(theDialog); + DrawDefaultButton(theDialog); + FrameDialogItemC(theDialog, 4, kRedOrangeColor8); +} + +//-------------------------------------------------------------- BlowerFilter + +Boolean BlowerFilter (DialogPtr dial, EventRecord *event, short *item) +{ + switch (event->what) + { + case keyDown: + switch ((event->message) & charCodeMask) + { + case kReturnKeyASCII: + case kEnterKeyASCII: + FlashDialogButton(dial, kOkayButton); + *item = kOkayButton; + return(true); + break; + + case kEscapeKeyASCII: + FlashDialogButton(dial, kCancelButton); + *item = kCancelButton; + return(true); + break; + + case kTabKeyASCII: +// SelectDialogItemText(dial, kRoomNameItem, 0, 1024); + return(true); + break; + + default: + return(false); + } + break; + + case mouseDown: + return(false); + break; + + case mouseUp: + return(false); + break; + + case updateEvt: + SetPort((GrafPtr)dial); + BeginUpdate(GetDialogWindow(dial)); + UpdateBlowerInfo(dial); + EndUpdate(GetDialogWindow(dial)); + event->what = nullEvent; + return(false); + break; + + default: + return(false); + break; + } +} + +//-------------------------------------------------------------- FurnitureFilter + +Boolean FurnitureFilter (DialogPtr dial, EventRecord *event, short *item) +{ + switch (event->what) + { + case keyDown: + switch ((event->message) & charCodeMask) + { + case kReturnKeyASCII: + case kEnterKeyASCII: + FlashDialogButton(dial, kOkayButton); + *item = kOkayButton; + return(true); + break; + + default: + return(false); + } + break; + + case updateEvt: + SetPort((GrafPtr)dial); + BeginUpdate(GetDialogWindow(dial)); + UpdateFurnitureInfo(dial); + EndUpdate(GetDialogWindow(dial)); + event->what = nullEvent; + return(false); + break; + + default: + return(false); + break; + } +} + +//-------------------------------------------------------------- CustPictFilter + +Boolean CustPictFilter (DialogPtr dial, EventRecord *event, short *item) +{ + switch (event->what) + { + case keyDown: + switch ((event->message) & charCodeMask) + { + case kReturnKeyASCII: + case kEnterKeyASCII: + FlashDialogButton(dial, kOkayButton); + *item = kOkayButton; + return(true); + break; + + default: + return(false); + } + break; + + case updateEvt: + SetPort((GrafPtr)dial); + BeginUpdate(GetDialogWindow(dial)); + UpdateCustPictInfo(dial); + EndUpdate(GetDialogWindow(dial)); + event->what = nullEvent; + return(false); + break; + + default: + return(false); + break; + } +} + +//-------------------------------------------------------------- SwitchFilter + +Boolean SwitchFilter (DialogPtr dial, EventRecord *event, short *item) +{ + switch (event->what) + { + case keyDown: + switch ((event->message) & charCodeMask) + { + case kReturnKeyASCII: + case kEnterKeyASCII: + FlashDialogButton(dial, kOkayButton); + *item = kOkayButton; + return(true); + break; + + case kEscapeKeyASCII: + FlashDialogButton(dial, kCancelButton); + *item = kCancelButton; + return(true); + break; + + default: + return(false); + } + break; + + case updateEvt: + SetPort((GrafPtr)dial); + BeginUpdate(GetDialogWindow(dial)); + UpdateSwitchInfo(dial); + EndUpdate(GetDialogWindow(dial)); + event->what = nullEvent; + return(false); + break; + + default: + return(false); + break; + } +} + +//-------------------------------------------------------------- TriggerFilter + +Boolean TriggerFilter (DialogPtr dial, EventRecord *event, short *item) +{ + switch (event->what) + { + case keyDown: + switch ((event->message) & charCodeMask) + { + case kReturnKeyASCII: + case kEnterKeyASCII: + FlashDialogButton(dial, kOkayButton); + *item = kOkayButton; + return(true); + break; + + case kEscapeKeyASCII: + FlashDialogButton(dial, kCancelButton); + *item = kCancelButton; + return(true); + break; + + case kTabKeyASCII: + SelectDialogItemText(dial, kDelay3Item, 0, 1024); + return(true); + break; + + default: + return(false); + } + break; + + case updateEvt: + SetPort((GrafPtr)dial); + BeginUpdate(GetDialogWindow(dial)); + UpdateTriggerInfo(dial); + EndUpdate(GetDialogWindow(dial)); + event->what = nullEvent; + return(false); + break; + + default: + return(false); + break; + } +} + +//-------------------------------------------------------------- LightFilter + +Boolean LightFilter (DialogPtr dial, EventRecord *event, short *item) +{ + switch (event->what) + { + case keyDown: + switch ((event->message) & charCodeMask) + { + case kReturnKeyASCII: + case kEnterKeyASCII: + FlashDialogButton(dial, kOkayButton); + *item = kOkayButton; + return(true); + break; + + case kEscapeKeyASCII: + FlashDialogButton(dial, kCancelButton); + *item = kCancelButton; + return(true); + break; + + default: + return(false); + } + break; + + case mouseDown: + return(false); + break; + + case mouseUp: + return(false); + break; + + case updateEvt: + SetPort((GrafPtr)dial); + BeginUpdate(GetDialogWindow(dial)); + UpdateLightInfo(dial); + EndUpdate(GetDialogWindow(dial)); + event->what = nullEvent; + return(false); + break; + + default: + return(false); + break; + } +} + +//-------------------------------------------------------------- ApplianceFilter + +Boolean ApplianceFilter (DialogPtr dial, EventRecord *event, short *item) +{ + switch (event->what) + { + case keyDown: + switch ((event->message) & charCodeMask) + { + case kReturnKeyASCII: + case kEnterKeyASCII: + FlashDialogButton(dial, kOkayButton); + *item = kOkayButton; + return(true); + break; + + case kEscapeKeyASCII: + FlashDialogButton(dial, kCancelButton); + *item = kCancelButton; + return(true); + break; + + case kTabKeyASCII: + SelectDialogItemText(dial, kDelayItem, 0, 1024); + return(true); + break; + + default: + return(false); + } + break; + + case mouseDown: + return(false); + break; + + case mouseUp: + return(false); + break; + + case updateEvt: + SetPort((GrafPtr)dial); + BeginUpdate(GetDialogWindow(dial)); + UpdateApplianceInfo(dial); + EndUpdate(GetDialogWindow(dial)); + event->what = nullEvent; + return(false); + break; + + default: + return(false); + break; + } +} + +//-------------------------------------------------------------- MicrowaveFilter + +Boolean MicrowaveFilter (DialogPtr dial, EventRecord *event, short *item) +{ + switch (event->what) + { + case keyDown: + switch ((event->message) & charCodeMask) + { + case kReturnKeyASCII: + case kEnterKeyASCII: + FlashDialogButton(dial, kOkayButton); + *item = kOkayButton; + return(true); + break; + + case kEscapeKeyASCII: + FlashDialogButton(dial, kCancelButton); + *item = kCancelButton; + return(true); + break; + + default: + return(false); + } + break; + + case mouseDown: + return(false); + break; + + case mouseUp: + return(false); + break; + + case updateEvt: + SetPort((GrafPtr)dial); + BeginUpdate(GetDialogWindow(dial)); + UpdateMicrowaveInfo(dial); + EndUpdate(GetDialogWindow(dial)); + event->what = nullEvent; + return(false); + break; + + default: + return(false); + break; + } +} + +//-------------------------------------------------------------- GreaseFilter + +Boolean GreaseFilter (DialogPtr dial, EventRecord *event, short *item) +{ + switch (event->what) + { + case keyDown: + switch ((event->message) & charCodeMask) + { + case kReturnKeyASCII: + case kEnterKeyASCII: + FlashDialogButton(dial, kOkayButton); + *item = kOkayButton; + return(true); + break; + + case kEscapeKeyASCII: + FlashDialogButton(dial, kCancelButton); + *item = kCancelButton; + return(true); + break; + + default: + return(false); + } + break; + + case updateEvt: + SetPort((GrafPtr)dial); + BeginUpdate(GetDialogWindow(dial)); + UpdateGreaseInfo(dial); + EndUpdate(GetDialogWindow(dial)); + event->what = nullEvent; + return(false); + break; + + default: + return(false); + break; + } +} + +//-------------------------------------------------------------- InvisBonusFilter + +Boolean InvisBonusFilter (DialogPtr dial, EventRecord *event, short *item) +{ + switch (event->what) + { + case keyDown: + switch ((event->message) & charCodeMask) + { + case kReturnKeyASCII: + case kEnterKeyASCII: + FlashDialogButton(dial, kOkayButton); + *item = kOkayButton; + return(true); + break; + + default: + return(false); + } + break; + + case updateEvt: + SetPort((GrafPtr)dial); + BeginUpdate(GetDialogWindow(dial)); + UpdateInvisBonusInfo(dial); + EndUpdate(GetDialogWindow(dial)); + event->what = nullEvent; + return(false); + break; + + default: + return(false); + break; + } +} + +//-------------------------------------------------------------- TransFilter + +Boolean TransFilter (DialogPtr dial, EventRecord *event, short *item) +{ + switch (event->what) + { + case keyDown: + switch ((event->message) & charCodeMask) + { + case kReturnKeyASCII: + case kEnterKeyASCII: + FlashDialogButton(dial, kOkayButton); + *item = kOkayButton; + return(true); + break; + + case kEscapeKeyASCII: + FlashDialogButton(dial, kCancelButton); + *item = kCancelButton; + return(true); + break; + + default: + return(false); + } + break; + + case updateEvt: + SetPort((GrafPtr)dial); + BeginUpdate(GetDialogWindow(dial)); + UpdateTransInfo(dial); + EndUpdate(GetDialogWindow(dial)); + event->what = nullEvent; + return(false); + break; + + default: + return(false); + break; + } +} + +//-------------------------------------------------------------- EnemyFilter + +Boolean EnemyFilter (DialogPtr dial, EventRecord *event, short *item) +{ + switch (event->what) + { + case keyDown: + switch ((event->message) & charCodeMask) + { + case kReturnKeyASCII: + case kEnterKeyASCII: + FlashDialogButton(dial, kOkayButton); + *item = kOkayButton; + return(true); + break; + + case kEscapeKeyASCII: + FlashDialogButton(dial, kCancelButton); + *item = kCancelButton; + return(true); + break; + + case kTabKeyASCII: + SelectDialogItemText(dial, kDelay2Item, 0, 1024); + return(true); + break; + + default: + return(false); + } + break; + + case mouseDown: + return(false); + break; + + case mouseUp: + return(false); + break; + + case updateEvt: + SetPort((GrafPtr)dial); + BeginUpdate(GetDialogWindow(dial)); + UpdateEnemyInfo(dial); + EndUpdate(GetDialogWindow(dial)); + event->what = nullEvent; + return(false); + break; + + default: + return(false); + break; + } +} + +//-------------------------------------------------------------- EnemyFilter + +Boolean FlowerFilter (DialogPtr dial, EventRecord *event, short *item) +{ + switch (event->what) + { + case keyDown: + switch ((event->message) & charCodeMask) + { + case kReturnKeyASCII: + case kEnterKeyASCII: + FlashDialogButton(dial, kOkayButton); + *item = kOkayButton; + return(true); + break; + + case kEscapeKeyASCII: + FlashDialogButton(dial, kCancelButton); + *item = kCancelButton; + return(true); + break; + + default: + return(false); + } + break; + + case mouseDown: + return(false); + break; + + case mouseUp: + return(false); + break; + + case updateEvt: + SetPort((GrafPtr)dial); + BeginUpdate(GetDialogWindow(dial)); + UpdateFlowerInfo(dial); + EndUpdate(GetDialogWindow(dial)); + event->what = nullEvent; + return(false); + break; + + default: + return(false); + break; + } +} + +//-------------------------------------------------------------- DoBlowerObjectInfo + +void DoBlowerObjectInfo (short what) +{ + DialogPtr infoDial; + Str255 numberStr, kindStr, distStr; + short item, initial; + Boolean leaving, doReturn, leftFacing; + ModalFilterUPP blowerFilterUPP; + + blowerFilterUPP = NewModalFilterUPP(BlowerFilter); + + NumToString(objActive + 1, numberStr); + GetIndString(kindStr, kObjectNameStrings, thisRoom->objects[objActive].what); + NumToString(thisRoom->objects[objActive].data.a.distance, distStr); + ParamText(numberStr, kindStr, distStr, PSTR("")); + +// CenterDialog(kBlowerInfoDialogID); + infoDial = GetNewDialog(kBlowerInfoDialogID, nil, kPutInFront); + if (infoDial == nil) + RedAlert(kErrDialogDidntLoad); + SetPort((GrafPtr)infoDial); + + newDirection = thisRoom->objects[objActive].data.a.vector & 0x0F; + if (thisRoom->objects[objActive].data.a.initial) + SetDialogItemValue(infoDial, kInitialStateCheckbox, 1); + else + SetDialogItemValue(infoDial, kInitialStateCheckbox, 0); + + if ((what == kTaper) || (what == kCandle) || (what == kStubby) || + (what == kTiki) || (what == kBBQ)) + { + HideDialogItem(infoDial, kInitialStateCheckbox); + } + + if ((what == kLeftFan) || (what == kRightFan)) + { + if (what == kLeftFan) + { + SelectFromRadioGroup(infoDial, kLeftFacingRadio, + kLeftFacingRadio, kRightFacingRadio); + leftFacing = true; + } + else + { + SelectFromRadioGroup(infoDial, kRightFacingRadio, + kLeftFacingRadio, kRightFacingRadio); + leftFacing = false; + } + HideDialogItem(infoDial, kDirectionText); + } + else + { + HideDialogItem(infoDial, kLeftFacingRadio); + HideDialogItem(infoDial, kRightFacingRadio); + } + + if (retroLinkList[objActive].room == -1) + HideDialogItem(infoDial, 15); + + ShowWindow(GetDialogWindow(infoDial)); + + leaving = false; + doReturn = false; + + while (!leaving) + { + ModalDialog(blowerFilterUPP, &item); + + if (item == kOkayButton) + { + GetDialogItemValue(infoDial, kInitialStateCheckbox, &initial); + if (initial == 1) + thisRoom->objects[objActive].data.a.initial = true; + else + thisRoom->objects[objActive].data.a.initial = false; + thisRoom->objects[objActive].data.a.vector = (Byte)newDirection; + if ((what == kLeftFan) || (what == kRightFan)) + { + if (leftFacing) + thisRoom->objects[objActive].what = kLeftFan; + else + thisRoom->objects[objActive].what = kRightFan; + if (KeepObjectLegal()) + { + } + InvalWindowRect(mainWindow, &mainWindowRect); + GetThisRoomsObjRects(); + ReadyBackground(thisRoom->background, thisRoom->tiles); + DrawThisRoomsObjects(); + } + fileDirty = true; + UpdateMenus(false); + leaving = true; + } + else if (item == kCancelButton) + leaving = true; + else if (item == kInitialStateCheckbox) + ToggleDialogItemValue(infoDial, kInitialStateCheckbox); + else if (item == 15) // Linked From? button. + { + GetDialogItemValue(infoDial, kInitialStateCheckbox, &initial); + if (initial == 1) + thisRoom->objects[objActive].data.a.initial = true; + else + thisRoom->objects[objActive].data.a.initial = false; + thisRoom->objects[objActive].data.a.vector = (Byte)newDirection; + if ((what == kLeftFan) || (what == kRightFan)) + { + if (leftFacing) + thisRoom->objects[objActive].what = kLeftFan; + else + thisRoom->objects[objActive].what = kRightFan; + if (KeepObjectLegal()) + { + } + InvalWindowRect(mainWindow, &mainWindowRect); + GetThisRoomsObjRects(); + ReadyBackground(thisRoom->background, thisRoom->tiles); + DrawThisRoomsObjects(); + } + fileDirty = true; + UpdateMenus(false); + leaving = true; + doReturn = true; + } + else if (item == kLeftFacingRadio) + { + leftFacing = true; + SelectFromRadioGroup(infoDial, kLeftFacingRadio, kLeftFacingRadio, + kRightFacingRadio); + } + else if (item == kRightFacingRadio) + { + leftFacing = false; + SelectFromRadioGroup(infoDial, kRightFacingRadio, kLeftFacingRadio, + kRightFacingRadio); + } + else if ((thisRoom->objects[objActive].what == kInvisBlower) || + (thisRoom->objects[objActive].what == kLiftArea)) + { + switch (item) + { + case 11: + newDirection = 0x01; + break; + + case 12: + newDirection = 0x02; + break; + + case 13: + newDirection = 0x04; + break; + + case 14: + newDirection = 0x08; + break; + } + UpdateBlowerInfo(infoDial); + } + } + + DisposeDialog(infoDial); + DisposeModalFilterUPP(blowerFilterUPP); + + if (doReturn) + { + GoToObjectInRoomNum(retroLinkList[objActive].object, + retroLinkList[objActive].room); + } +} + +//-------------------------------------------------------------- DoFurnitureObjectInfo + +void DoFurnitureObjectInfo (void) +{ + DialogPtr infoDial; + Str255 numberStr, kindStr; + short item; + Boolean leaving, doReturn; + ModalFilterUPP furnitureFilterUPP; + + furnitureFilterUPP = NewModalFilterUPP(FurnitureFilter); + + if (objActive == kInitialGliderSelected) + { + PasStringCopy(PSTR("-"), numberStr); + PasStringCopy(PSTR("Glider Begins"), kindStr); + } + else if (objActive == kLeftGliderSelected) + { + PasStringCopy(PSTR("-"), numberStr); + PasStringCopy(PSTR("New Glider (left)"), kindStr); + } + else if (objActive == kRightGliderSelected) + { + PasStringCopy(PSTR("-"), numberStr); + PasStringCopy(PSTR("New Glider (right)"), kindStr); + } + else + { + NumToString(objActive + 1, numberStr); + GetIndString(kindStr, kObjectNameStrings, thisRoom->objects[objActive].what); + } + ParamText(numberStr, kindStr, PSTR(""), PSTR("")); + + BringUpDialog(&infoDial, kFurnitureInfoDialogID); + + if ((objActive < 0) || (retroLinkList[objActive].room == -1)) + HideDialogItem(infoDial, 6); + + leaving = false; + doReturn = false; + + while (!leaving) + { + ModalDialog(furnitureFilterUPP, &item); + + if (item == kOkayButton) + leaving = true; + else if (item == 6) // Linked From? button. + { + leaving = true; + doReturn = true; + } + } + + DisposeDialog(infoDial); + DisposeModalFilterUPP(furnitureFilterUPP); + + if (doReturn) + { + GoToObjectInRoomNum(retroLinkList[objActive].object, + retroLinkList[objActive].room); + } +} + +//-------------------------------------------------------------- DoCustPictObjectInfo + +void DoCustPictObjectInfo (void) +{ + DialogPtr infoDial; + Str255 numberStr, kindStr; + long wasPict; + short item; + Boolean leaving; + ModalFilterUPP custPictFilterUPP; + + custPictFilterUPP = NewModalFilterUPP(CustPictFilter); + + NumToString(objActive + 1, numberStr); + GetIndString(kindStr, kObjectNameStrings, thisRoom->objects[objActive].what); + if (thisRoom->objects[objActive].what == kCustomPict) + ParamText(numberStr, kindStr, PSTR("PICT"), PSTR("10000")); + else + ParamText(numberStr, kindStr, PSTR("Sound"), PSTR("3000")); + + BringUpDialog(&infoDial, kCustPictInfoDialogID); + if (thisRoom->objects[objActive].what == kCustomPict) + { + wasPict = (long)(thisRoom->objects[objActive].data.g.height); + SetDialogNumToStr(infoDial, kCustPictIDItem, wasPict); + } + else + { + wasPict = (long)(thisRoom->objects[objActive].data.e.where); + SetDialogNumToStr(infoDial, kCustPictIDItem, wasPict); + } + SelectDialogItemText(infoDial, kCustPictIDItem, 0, 1024); + leaving = false; + + while (!leaving) + { + ModalDialog(custPictFilterUPP, &item); + + if (item == kOkayButton) + { + GetDialogNumFromStr(infoDial, kCustPictIDItem, &wasPict); + if (thisRoom->objects[objActive].what == kCustomPict) + { + if ((wasPict < 10000L) || (wasPict > 32767L)) + { + SysBeep(1); + wasPict = (long)(thisRoom->objects[objActive].data.g.height); + SetDialogNumToStr(infoDial, kCustPictIDItem, wasPict); + SelectDialogItemText(infoDial, kCustPictIDItem, 0, 1024); + } + else + { + thisRoom->objects[objActive].data.g.height = (short)wasPict; + if (KeepObjectLegal()) + { + } + fileDirty = true; + UpdateMenus(false); + InvalWindowRect(mainWindow, &mainWindowRect); + GetThisRoomsObjRects(); + ReadyBackground(thisRoom->background, thisRoom->tiles); + DrawThisRoomsObjects(); + leaving = true; + } + } + else + { + if ((wasPict < 3000L) || (wasPict > 32767L)) + { + SysBeep(1); + wasPict = (long)(thisRoom->objects[objActive].data.e.where); + SetDialogNumToStr(infoDial, kCustPictIDItem, wasPict); + SelectDialogItemText(infoDial, kCustPictIDItem, 0, 1024); + } + else + { + thisRoom->objects[objActive].data.e.where = (short)wasPict; + fileDirty = true; + UpdateMenus(false); + InvalWindowRect(mainWindow, &mainWindowRect); + GetThisRoomsObjRects(); + ReadyBackground(thisRoom->background, thisRoom->tiles); + DrawThisRoomsObjects(); + leaving = true; + } + } + } + else if (item == kCancelButton) + { + leaving = true; + } + } + + DisposeDialog(infoDial); + DisposeModalFilterUPP(custPictFilterUPP); +} + +//-------------------------------------------------------------- DoSwitchObjectInfo + +void DoSwitchObjectInfo (void) +{ + DialogPtr infoDial; + Str255 numberStr, kindStr, roomStr, tempStr, objStr; + short item, floor, suite; + Boolean leaving, doLink, doGoTo, doReturn; + ModalFilterUPP switchFilterUPP; + + switchFilterUPP = NewModalFilterUPP(SwitchFilter); + + NumToString(objActive + 1, numberStr); + GetIndString(kindStr, kObjectNameStrings, thisRoom->objects[objActive].what); + if (thisRoom->objects[objActive].data.e.where == -1) + PasStringCopy(PSTR("none"), roomStr); + else + { + ExtractFloorSuite(thisRoom->objects[objActive].data.e.where, &floor, &suite); + NumToString((long)floor, roomStr); + PasStringConcat(roomStr, PSTR(" / ")); + NumToString((long)suite, tempStr); + PasStringConcat(roomStr, tempStr); + } + + if (thisRoom->objects[objActive].data.e.who == 255) + PasStringCopy(PSTR("none"), objStr); + else + NumToString((long)thisRoom->objects[objActive].data.e.who + 1, objStr); + + ParamText(numberStr, kindStr, roomStr, objStr); + newType = thisRoom->objects[objActive].data.e.type; + + BringUpDialog(&infoDial, kSwitchInfoDialogID); + leaving = false; + doLink = false; + doGoTo = false; + doReturn = false; + + if (thisRoom->objects[objActive].data.e.who == 255) + MyDisableControl(infoDial, kGotoButton2); + + if (retroLinkList[objActive].room == -1) + HideDialogItem(infoDial, 15); + + while (!leaving) + { + ModalDialog(switchFilterUPP, &item); + + if (item == kOkayButton) + { + thisRoom->objects[objActive].data.e.type = newType; + fileDirty = true; + UpdateMenus(false); + leaving = true; + } + else if (item == kCancelButton) + leaving = true; + else if (item == kToggleRadio) + { + SelectFromRadioGroup(infoDial, item, kToggleRadio, kForceOffRadio); + newType = kToggle; + } + else if (item == kForceOnRadio) + { + SelectFromRadioGroup(infoDial, item, kToggleRadio, kForceOffRadio); + newType = kForceOn; + } + else if (item == kForceOffRadio) + { + SelectFromRadioGroup(infoDial, item, kToggleRadio, kForceOffRadio); + newType = kForceOff; + } + else if (item == 9) + { + thisRoom->objects[objActive].data.e.type = newType; + fileDirty = true; + UpdateMenus(false); + leaving = true; + doLink = true; + } + else if (item == kGotoButton2) + { + thisRoom->objects[objActive].data.e.type = newType; + fileDirty = true; + UpdateMenus(false); + leaving = true; + doGoTo = true; + } + else if (item == 15) // Linked From? button. + { + thisRoom->objects[objActive].data.e.type = newType; + fileDirty = true; + UpdateMenus(false); + leaving = true; + doReturn = true; + } + } + + DisposeDialog(infoDial); + DisposeModalFilterUPP(switchFilterUPP); + + if (doLink) + { + linkType = kSwitchLinkOnly; + linkerIsSwitch = true; + OpenLinkWindow(); + linkRoom = thisRoomNumber; + linkObject = (Byte)objActive; + DeselectObject(); + } + else if (doGoTo) + { + GoToObjectInRoom((short)thisRoom->objects[objActive].data.e.who, floor, suite); + } + else if (doReturn) + { + GoToObjectInRoomNum(retroLinkList[objActive].object, + retroLinkList[objActive].room); + } +} + +//-------------------------------------------------------------- DoTriggerObjectInfo + +void DoTriggerObjectInfo (void) +{ + DialogPtr infoDial; + Str255 numberStr, kindStr, roomStr, tempStr, objStr; + long delayIs; + short item, floor, suite; + Boolean leaving, doLink, doGoTo, doReturn; + ModalFilterUPP triggerFilterUPP; + + triggerFilterUPP = NewModalFilterUPP(TriggerFilter); + + NumToString(objActive + 1, numberStr); + GetIndString(kindStr, kObjectNameStrings, thisRoom->objects[objActive].what); + if (thisRoom->objects[objActive].data.e.where == -1) + PasStringCopy(PSTR("none"), roomStr); + else + { + ExtractFloorSuite(thisRoom->objects[objActive].data.e.where, &floor, &suite); + NumToString((long)floor, roomStr); + PasStringConcat(roomStr, PSTR(" / ")); + NumToString((long)suite, tempStr); + PasStringConcat(roomStr, tempStr); + } + + if (thisRoom->objects[objActive].data.e.who == 255) + PasStringCopy(PSTR("none"), objStr); + else + NumToString((long)thisRoom->objects[objActive].data.e.who + 1, objStr); + + ParamText(numberStr, kindStr, roomStr, objStr); + newType = thisRoom->objects[objActive].data.e.type; + + BringUpDialog(&infoDial, kTriggerInfoDialogID); + leaving = false; + doLink = false; + doGoTo = false; + doReturn = false; + + if (retroLinkList[objActive].room == -1) + HideDialogItem(infoDial, 15); + + if (thisRoom->objects[objActive].data.e.who == 255) + MyDisableControl(infoDial, kGotoButton2); + + SetDialogNumToStr(infoDial, kDelay3Item, + (long)thisRoom->objects[objActive].data.e.delay); + SelectDialogItemText(infoDial, kDelay3Item, 0, 1024); + + while (!leaving) + { + ModalDialog(triggerFilterUPP, &item); + + if (item == kOkayButton) + { + GetDialogNumFromStr(infoDial, kDelay3Item, &delayIs); + if ((delayIs < 0L) || (delayIs > 32767L)) + { + SysBeep(1); + SetDialogNumToStr(infoDial, kDelay3Item, + (long)thisRoom->objects[objActive].data.e.delay); + SelectDialogItemText(infoDial, kDelay3Item, 0, 1024); + } + else + { + thisRoom->objects[objActive].data.e.delay = (short)delayIs; + fileDirty = true; + UpdateMenus(false); + leaving = true; + } + } + else if (item == kCancelButton) + leaving = true; + else if (item == 9) + { + GetDialogNumFromStr(infoDial, kDelay3Item, &delayIs); + if ((delayIs < 0L) || (delayIs > 32767L)) + { + SysBeep(1); + SetDialogNumToStr(infoDial, kDelay3Item, + (long)thisRoom->objects[objActive].data.e.delay); + SelectDialogItemText(infoDial, kDelay3Item, 0, 1024); + } + else + { + thisRoom->objects[objActive].data.e.delay = (short)delayIs; + fileDirty = true; + UpdateMenus(false); + leaving = true; + doLink = true; + } + } + else if (item == kGotoButton2) + { + GetDialogNumFromStr(infoDial, kDelay3Item, &delayIs); + if ((delayIs < 0L) || (delayIs > 32767L)) + { + SysBeep(1); + SetDialogNumToStr(infoDial, kDelay3Item, + (long)thisRoom->objects[objActive].data.e.delay); + SelectDialogItemText(infoDial, kDelay3Item, 0, 1024); + } + else + { + thisRoom->objects[objActive].data.e.delay = (short)delayIs; + fileDirty = true; + UpdateMenus(false); + leaving = true; + doGoTo = true; + } + } + else if (item == 15) // Linked From? button. + { + GetDialogNumFromStr(infoDial, kDelay3Item, &delayIs); + if ((delayIs < 0L) || (delayIs > 32767L)) + { + SysBeep(1); + SetDialogNumToStr(infoDial, kDelay3Item, + (long)thisRoom->objects[objActive].data.e.delay); + SelectDialogItemText(infoDial, kDelay3Item, 0, 1024); + } + else + { + thisRoom->objects[objActive].data.e.delay = (short)delayIs; + fileDirty = true; + UpdateMenus(false); + leaving = true; + doReturn = true; + } + } + } + + DisposeDialog(infoDial); + DisposeModalFilterUPP(triggerFilterUPP); + + if (doLink) + { + linkType = kTriggerLinkOnly; + linkerIsSwitch = true; + OpenLinkWindow(); + linkRoom = thisRoomNumber; + linkObject = (Byte)objActive; + DeselectObject(); + } + else if (doGoTo) + { + GoToObjectInRoom((short)thisRoom->objects[objActive].data.e.who, floor, suite); + } + else if (doReturn) + { + GoToObjectInRoomNum(retroLinkList[objActive].object, + retroLinkList[objActive].room); + } +} + +//-------------------------------------------------------------- DoLightObjectInfo + +void DoLightObjectInfo (void) +{ + DialogPtr infoDial; + Str255 numberStr, kindStr; + short item, initial; + Boolean leaving, doReturn; + ModalFilterUPP lightFilterUPP; + + lightFilterUPP = NewModalFilterUPP(LightFilter); + + NumToString(objActive + 1, numberStr); + GetIndString(kindStr, kObjectNameStrings, thisRoom->objects[objActive].what); + ParamText(numberStr, kindStr, PSTR(""), PSTR("")); + +// CenterDialog(kLightInfoDialogID); + infoDial = GetNewDialog(kLightInfoDialogID, nil, kPutInFront); + if (infoDial == nil) + RedAlert(kErrDialogDidntLoad); + SetPort((GrafPtr)infoDial); + + if (thisRoom->objects[objActive].data.f.initial) + SetDialogItemValue(infoDial, kInitialStateCheckbox, 1); + else + SetDialogItemValue(infoDial, kInitialStateCheckbox, 0); + + if (retroLinkList[objActive].room == -1) + HideDialogItem(infoDial, 8); + + ShowWindow(GetDialogWindow(infoDial)); + + leaving = false; + doReturn = false; + + while (!leaving) + { + ModalDialog(lightFilterUPP, &item); + + if (item == kOkayButton) + { + GetDialogItemValue(infoDial, kInitialStateCheckbox, &initial); + if (initial == 1) + thisRoom->objects[objActive].data.f.initial = true; + else + thisRoom->objects[objActive].data.f.initial = false; + + ReadyBackground(thisRoom->background, thisRoom->tiles); + DrawThisRoomsObjects(); + InvalWindowRect(mainWindow, &mainWindowRect); + fileDirty = true; + UpdateMenus(false); + leaving = true; + } + else if (item == kCancelButton) + leaving = true; + else if (item == kInitialStateCheckbox) + ToggleDialogItemValue(infoDial, kInitialStateCheckbox); + else if (item == 8) // Linked From? button. + { + GetDialogItemValue(infoDial, kInitialStateCheckbox, &initial); + if (initial == 1) + thisRoom->objects[objActive].data.f.initial = true; + else + thisRoom->objects[objActive].data.f.initial = false; + + ReadyBackground(thisRoom->background, thisRoom->tiles); + DrawThisRoomsObjects(); + InvalWindowRect(mainWindow, &mainWindowRect); + fileDirty = true; + UpdateMenus(false); + leaving = true; + doReturn = true; + } + } + + DisposeDialog(infoDial); + DisposeModalFilterUPP(lightFilterUPP); + + if (doReturn) + { + GoToObjectInRoomNum(retroLinkList[objActive].object, + retroLinkList[objActive].room); + } +} + +//-------------------------------------------------------------- DoApplianceObjectInfo + +void DoApplianceObjectInfo (short what) +{ + DialogPtr infoDial; + Str255 numberStr, kindStr; + long delay; + short item, initial; + Boolean leaving, doReturn; + ModalFilterUPP applianceFilterUPP; + + applianceFilterUPP = NewModalFilterUPP(ApplianceFilter); + + NumToString(objActive + 1, numberStr); + GetIndString(kindStr, kObjectNameStrings, thisRoom->objects[objActive].what); + ParamText(numberStr, kindStr, PSTR(""), PSTR("")); + + BringUpDialog(&infoDial, kApplianceInfoDialogID); + + if (retroLinkList[objActive].room == -1) + HideDialogItem(infoDial, 10); + + if (thisRoom->objects[objActive].data.g.initial) + SetDialogItemValue(infoDial, kInitialStateCheckbox, 1); + else + SetDialogItemValue(infoDial, kInitialStateCheckbox, 0); + + if ((what == kShredder) || (what == kMacPlus) || (what == kTV) || + (what == kCoffee) || (what == kVCR) || (what == kMicrowave)) + { + HideDialogItem(infoDial, kDelayItem); + HideDialogItem(infoDial, kDelayLabelItem); + } + + delay = thisRoom->objects[objActive].data.g.delay; + SetDialogNumToStr(infoDial, kDelayItem, (long)delay); + SelectDialogItemText(infoDial, kDelayItem, 0, 1024); + + leaving = false; + doReturn = false; + + while (!leaving) + { + ModalDialog(applianceFilterUPP, &item); + + if (item == kOkayButton) + { + GetDialogNumFromStr(infoDial, kDelayItem, &delay); + if ((delay < 0L) || (delay > 255L)) + { + SysBeep(0); + delay = thisRoom->objects[objActive].data.g.delay; + SetDialogNumToStr(infoDial, kDelayItem, (long)delay); + SelectDialogItemText(infoDial, kDelayItem, 0, 1024); + } + else + { + thisRoom->objects[objActive].data.g.delay = (Byte)delay; + GetDialogItemValue(infoDial, kInitialStateCheckbox, &initial); + if (initial == 1) + thisRoom->objects[objActive].data.g.initial = true; + else + thisRoom->objects[objActive].data.g.initial = false; + fileDirty = true; + UpdateMenus(false); + InvalWindowRect(mainWindow, &mainWindowRect); + GetThisRoomsObjRects(); + ReadyBackground(thisRoom->background, thisRoom->tiles); + DrawThisRoomsObjects(); + leaving = true; + } + } + else if (item == kCancelButton) + leaving = true; + else if (item == kInitialStateCheckbox) + ToggleDialogItemValue(infoDial, kInitialStateCheckbox); + else if (item == 10) // Linked From? button. + { + GetDialogNumFromStr(infoDial, kDelayItem, &delay); + if ((delay < 0L) || (delay > 255L)) + { + SysBeep(0); + delay = thisRoom->objects[objActive].data.g.delay; + SetDialogNumToStr(infoDial, kDelayItem, (long)delay); + SelectDialogItemText(infoDial, kDelayItem, 0, 1024); + } + else + { + thisRoom->objects[objActive].data.g.delay = (Byte)delay; + GetDialogItemValue(infoDial, kInitialStateCheckbox, &initial); + if (initial == 1) + thisRoom->objects[objActive].data.g.initial = true; + else + thisRoom->objects[objActive].data.g.initial = false; + fileDirty = true; + UpdateMenus(false); + InvalWindowRect(mainWindow, &mainWindowRect); + GetThisRoomsObjRects(); + ReadyBackground(thisRoom->background, thisRoom->tiles); + DrawThisRoomsObjects(); + leaving = true; + doReturn = true; + } + } + } + + DisposeDialog(infoDial); + DisposeModalFilterUPP(applianceFilterUPP); + + if (doReturn) + { + GoToObjectInRoomNum(retroLinkList[objActive].object, + retroLinkList[objActive].room); + } +} + +//-------------------------------------------------------------- DoMicrowaveObjectInfo + +void DoMicrowaveObjectInfo (void) +{ + DialogPtr infoDial; + Str255 numberStr, kindStr; + short item, initial, kills; + Boolean leaving, doReturn; + ModalFilterUPP microwaveFilterUPP; + + microwaveFilterUPP = NewModalFilterUPP(MicrowaveFilter); + + NumToString(objActive + 1, numberStr); + GetIndString(kindStr, kObjectNameStrings, thisRoom->objects[objActive].what); + ParamText(numberStr, kindStr, PSTR(""), PSTR("")); + + BringUpDialog(&infoDial, kMicrowaveInfoDialogID); + + if (retroLinkList[objActive].room == -1) + HideDialogItem(infoDial, 11); + + if (thisRoom->objects[objActive].data.g.initial) + SetDialogItemValue(infoDial, kInitialStateCheckbox, 1); + else + SetDialogItemValue(infoDial, kInitialStateCheckbox, 0); + + kills = (short)thisRoom->objects[objActive].data.g.byte0; + if ((kills & 0x0001) == 0x0001) + SetDialogItemValue(infoDial, kKillBandsCheckbox, 1); + else + SetDialogItemValue(infoDial, kKillBandsCheckbox, 0); + if ((kills & 0x0002) == 0x0002) + SetDialogItemValue(infoDial, kKillBatteryCheckbox, 1); + else + SetDialogItemValue(infoDial, kKillBatteryCheckbox, 0); + if ((kills & 0x0004) == 0x0004) + SetDialogItemValue(infoDial, kKillFoilCheckbox, 1); + else + SetDialogItemValue(infoDial, kKillFoilCheckbox, 0); + + leaving = false; + doReturn = false; + + while (!leaving) + { + ModalDialog(microwaveFilterUPP, &item); + + if (item == kOkayButton) + { + GetDialogItemValue(infoDial, kInitialStateCheckbox, &initial); + if (initial == 1) + thisRoom->objects[objActive].data.g.initial = true; + else + thisRoom->objects[objActive].data.g.initial = false; + kills = 0; + GetDialogItemValue(infoDial, kKillBandsCheckbox, &initial); + if (initial == 1) + kills += 1; + GetDialogItemValue(infoDial, kKillBatteryCheckbox, &initial); + if (initial == 1) + kills += 2; + GetDialogItemValue(infoDial, kKillFoilCheckbox, &initial); + if (initial == 1) + kills += 4; + thisRoom->objects[objActive].data.g.byte0 = (Byte)kills; + + fileDirty = true; + UpdateMenus(false); + InvalWindowRect(mainWindow, &mainWindowRect); + GetThisRoomsObjRects(); + ReadyBackground(thisRoom->background, thisRoom->tiles); + DrawThisRoomsObjects(); + leaving = true; + } + else if (item == kCancelButton) + leaving = true; + else if (item == kInitialStateCheckbox) + ToggleDialogItemValue(infoDial, kInitialStateCheckbox); + else if (item == kKillBandsCheckbox) + ToggleDialogItemValue(infoDial, kKillBandsCheckbox); + else if (item == kKillBatteryCheckbox) + ToggleDialogItemValue(infoDial, kKillBatteryCheckbox); + else if (item == kKillFoilCheckbox) + ToggleDialogItemValue(infoDial, kKillFoilCheckbox); + else if (item == 11) // Linked From? button. + { + GetDialogItemValue(infoDial, kInitialStateCheckbox, &initial); + if (initial == 1) + thisRoom->objects[objActive].data.g.initial = true; + else + thisRoom->objects[objActive].data.g.initial = false; + kills = 0; + GetDialogItemValue(infoDial, kKillBandsCheckbox, &initial); + if (initial == 1) + kills += 1; + GetDialogItemValue(infoDial, kKillBatteryCheckbox, &initial); + if (initial == 1) + kills += 2; + GetDialogItemValue(infoDial, kKillFoilCheckbox, &initial); + if (initial == 1) + kills += 4; + thisRoom->objects[objActive].data.g.byte0 = (Byte)kills; + + fileDirty = true; + UpdateMenus(false); + InvalWindowRect(mainWindow, &mainWindowRect); + GetThisRoomsObjRects(); + ReadyBackground(thisRoom->background, thisRoom->tiles); + DrawThisRoomsObjects(); + leaving = true; + doReturn = true; + } + } + + DisposeDialog(infoDial); + DisposeModalFilterUPP(microwaveFilterUPP); + + if (doReturn) + { + GoToObjectInRoomNum(retroLinkList[objActive].object, + retroLinkList[objActive].room); + } +} + +//-------------------------------------------------------------- DoGreaseObjectInfo + +void DoGreaseObjectInfo (void) +{ + DialogPtr infoDial; + Str255 numberStr, kindStr; + short item; + Boolean leaving, wasSpilled, doReturn; + ModalFilterUPP greaseFilterUPP; + + greaseFilterUPP = NewModalFilterUPP(GreaseFilter); + + NumToString(objActive + 1, numberStr); + GetIndString(kindStr, kObjectNameStrings, thisRoom->objects[objActive].what); + ParamText(numberStr, kindStr, PSTR(""), PSTR("")); + + BringUpDialog(&infoDial, kGreaseInfoDialogID); + + if (retroLinkList[objActive].room == -1) + HideDialogItem(infoDial, 8); + + wasSpilled = !(thisRoom->objects[objActive].data.c.initial); + SetDialogItemValue(infoDial, kGreaseItem, (short)wasSpilled); + leaving = false; + doReturn = false; + + while (!leaving) + { + ModalDialog(greaseFilterUPP, &item); + + if (item == kOkayButton) + { + thisRoom->objects[objActive].data.c.initial = !wasSpilled; + fileDirty = true; + UpdateMenus(false); + InvalWindowRect(mainWindow, &mainWindowRect); + GetThisRoomsObjRects(); + ReadyBackground(thisRoom->background, thisRoom->tiles); + DrawThisRoomsObjects(); + leaving = true; + } + else if (item == kCancelButton) + { + leaving = true; + } + else if (item == kGreaseItem) + { + wasSpilled = !wasSpilled; + SetDialogItemValue(infoDial, kGreaseItem, (short)wasSpilled); + } + else if (item == 8) // Linked From? button. + { + thisRoom->objects[objActive].data.c.initial = !wasSpilled; + fileDirty = true; + UpdateMenus(false); + InvalWindowRect(mainWindow, &mainWindowRect); + GetThisRoomsObjRects(); + ReadyBackground(thisRoom->background, thisRoom->tiles); + DrawThisRoomsObjects(); + leaving = true; + doReturn = true; + } + } + + DisposeDialog(infoDial); + DisposeModalFilterUPP(greaseFilterUPP); + + if (doReturn) + { + GoToObjectInRoomNum(retroLinkList[objActive].object, + retroLinkList[objActive].room); + } +} + +//-------------------------------------------------------------- DoInvisBonusObjectInfo + +void DoInvisBonusObjectInfo (void) +{ + DialogPtr infoDial; + Str255 numberStr, kindStr; + short item; + Boolean leaving, doReturn; + ModalFilterUPP invisBonusFilterUPP; + + invisBonusFilterUPP = NewModalFilterUPP(InvisBonusFilter); + + NumToString(objActive + 1, numberStr); + GetIndString(kindStr, kObjectNameStrings, thisRoom->objects[objActive].what); + ParamText(numberStr, kindStr, PSTR(""), PSTR("")); + + switch (thisRoom->objects[objActive].data.c.points) + { + case 300: + newPoint = 1; + break; + + case 500: + newPoint = 2; + break; + + default: + newPoint = 0; + break; + } + + BringUpDialog(&infoDial, kInvisBonusInfoDialogID); + + if (retroLinkList[objActive].room == -1) + HideDialogItem(infoDial, 9); + + leaving = false; + doReturn = false; + + while (!leaving) + { + ModalDialog(invisBonusFilterUPP, &item); + + if (item == kOkayButton) + { + switch (newPoint) + { + case 0: + thisRoom->objects[objActive].data.c.points = 100; + break; + + case 1: + thisRoom->objects[objActive].data.c.points = 300; + break; + + case 2: + thisRoom->objects[objActive].data.c.points = 500; + break; + } + fileDirty = true; + UpdateMenus(false); + leaving = true; + } + else if (item == kCancelButton) + leaving = true; + else if (item == k100PtRadio) + { + SelectFromRadioGroup(infoDial, item, k100PtRadio, k500PtRadio); + newPoint = 0; + } + else if (item == k300PtRadio) + { + SelectFromRadioGroup(infoDial, item, k100PtRadio, k500PtRadio); + newPoint = 1; + } + else if (item == k500PtRadio) + { + SelectFromRadioGroup(infoDial, item, k100PtRadio, k500PtRadio); + newPoint = 2; + } + else if (item == 9) // Linked From? button. + { + switch (newPoint) + { + case 0: + thisRoom->objects[objActive].data.c.points = 100; + break; + + case 1: + thisRoom->objects[objActive].data.c.points = 300; + break; + + case 2: + thisRoom->objects[objActive].data.c.points = 500; + break; + } + fileDirty = true; + UpdateMenus(false); + leaving = true; + doReturn = true; + } + } + + DisposeDialog(infoDial); + DisposeModalFilterUPP(invisBonusFilterUPP); + + if (doReturn) + { + GoToObjectInRoomNum(retroLinkList[objActive].object, + retroLinkList[objActive].room); + } +} + +//-------------------------------------------------------------- DoTransObjectInfo + +void DoTransObjectInfo (short what) +{ + DialogPtr infoDial; + Str255 numberStr, kindStr, roomStr, tempStr, objStr; + short item, floor, suite; + Boolean leaving, doLink, doGoTo, doReturn, wasState; + ModalFilterUPP transFilterUPP; + + transFilterUPP = NewModalFilterUPP(TransFilter); + + NumToString(objActive + 1, numberStr); + GetIndString(kindStr, kObjectNameStrings, thisRoom->objects[objActive].what); + if (thisRoom->objects[objActive].data.d.where == -1) + PasStringCopy(PSTR("none"), roomStr); + else + { + ExtractFloorSuite(thisRoom->objects[objActive].data.d.where, &floor, &suite); + NumToString((long)floor, roomStr); + PasStringConcat(roomStr, PSTR(" / ")); + NumToString((long)suite, tempStr); + PasStringConcat(roomStr, tempStr); + } + + if (thisRoom->objects[objActive].data.d.who == 255) + PasStringCopy(PSTR("none"), objStr); + else + NumToString((long)thisRoom->objects[objActive].data.d.who + 1, objStr); + + ParamText(numberStr, kindStr, roomStr, objStr); + + BringUpDialog(&infoDial, kTransInfoDialogID); + + if (retroLinkList[objActive].room == -1) + HideDialogItem(infoDial, 12); + if (what != kDeluxeTrans) + HideDialogItem(infoDial, kInitialStateCheckbox3); + else + { + wasState = (thisRoom->objects[objActive].data.d.wide & 0xF0) >> 4; + SetDialogItemValue(infoDial, kInitialStateCheckbox3, (short)wasState); + } + + leaving = false; + doLink = false; + doGoTo = false; + doReturn = false; + + if (thisRoom->objects[objActive].data.d.who == 255) + MyDisableControl(infoDial, kGotoButton1); + + while (!leaving) + { + ModalDialog(transFilterUPP, &item); + + if (item == kOkayButton) + { + if (what == kDeluxeTrans) + thisRoom->objects[objActive].data.d.wide = wasState << 4; + fileDirty = true; + UpdateMenus(false); + leaving = true; + } + else if (item == kCancelButton) + leaving = true; + else if (item == kLinkTransButton) + { + if (what == kDeluxeTrans) + thisRoom->objects[objActive].data.d.wide = wasState << 4; + fileDirty = true; + UpdateMenus(false); + leaving = true; + doLink = true; + } + else if (item == kGotoButton1) + { + if (what == kDeluxeTrans) + thisRoom->objects[objActive].data.d.wide = wasState << 4; + fileDirty = true; + UpdateMenus(false); + leaving = true; + doGoTo = true; + } + else if (item == 12) // Linked From? button. + { + if (what == kDeluxeTrans) + thisRoom->objects[objActive].data.d.wide = wasState << 4; + fileDirty = true; + UpdateMenus(false); + leaving = true; + doReturn = true; + } + else if (item == kInitialStateCheckbox3) + { + wasState = !wasState; + SetDialogItemValue(infoDial, kInitialStateCheckbox3, (short)wasState); + } + } + + DisposeDialog(infoDial); + DisposeModalFilterUPP(transFilterUPP); + + if (doLink) + { + linkType = kTransportLinkOnly; + linkerIsSwitch = false; + OpenLinkWindow(); + linkRoom = thisRoomNumber; + linkObject = (Byte)objActive; + DeselectObject(); + } + else if (doGoTo) + { + GoToObjectInRoom((short)thisRoom->objects[objActive].data.d.who, floor, suite); + } + else if (doReturn) + { + GoToObjectInRoomNum(retroLinkList[objActive].object, + retroLinkList[objActive].room); + } +} + +//-------------------------------------------------------------- DoEnemyObjectInfo + +void DoEnemyObjectInfo (short what) +{ + DialogPtr infoDial; + Str255 numberStr, kindStr; + long delay; + short item, initial; + Boolean leaving, doReturn; + ModalFilterUPP enemyFilterUPP; + + enemyFilterUPP = NewModalFilterUPP(EnemyFilter); + + NumToString(objActive + 1, numberStr); + GetIndString(kindStr, kObjectNameStrings, thisRoom->objects[objActive].what); + ParamText(numberStr, kindStr, PSTR(""), PSTR("")); + + BringUpDialog(&infoDial, kEnemyInfoDialogID); + + if (retroLinkList[objActive].room == -1) + HideDialogItem(infoDial, 11); + + delay = thisRoom->objects[objActive].data.h.delay; + SetDialogNumToStr(infoDial, kDelay2Item, (long)delay); + SelectDialogItemText(infoDial, kDelay2Item, 0, 1024); + + if (thisRoom->objects[objActive].data.h.initial) + SetDialogItemValue(infoDial, kInitialStateCheckbox2, 1); + else + SetDialogItemValue(infoDial, kInitialStateCheckbox2, 0); + + if (what == kBall) + { + HideDialogItem(infoDial, kDelay2Item); + HideDialogItem(infoDial, 8); + HideDialogItem(infoDial, 9); + } + + leaving = false; + doReturn = false; + + while (!leaving) + { + ModalDialog(enemyFilterUPP, &item); + + if (item == kOkayButton) + { + GetDialogNumFromStr(infoDial, kDelay2Item, &delay); + if (((delay < 0L) || (delay > 255L)) && (what != kBall)) + { + SysBeep(0); + delay = thisRoom->objects[objActive].data.h.delay; + SetDialogNumToStr(infoDial, kDelay2Item, (long)delay); + SelectDialogItemText(infoDial, kDelay2Item, 0, 1024); + } + else + { + GetDialogItemValue(infoDial, kInitialStateCheckbox2, &initial); + if (initial == 1) + thisRoom->objects[objActive].data.h.initial = true; + else + thisRoom->objects[objActive].data.h.initial = false; + if (what != kBall) + thisRoom->objects[objActive].data.h.delay = (Byte)delay; + fileDirty = true; + UpdateMenus(false); + leaving = true; + } + } + else if (item == kCancelButton) + leaving = true; + else if (item == kInitialStateCheckbox2) + ToggleDialogItemValue(infoDial, kInitialStateCheckbox2); + else if (item == 11) // Linked From? button. + { + GetDialogNumFromStr(infoDial, kDelay2Item, &delay); + if (((delay < 0L) || (delay > 255L)) && (what != kBall)) + { + SysBeep(0); + delay = thisRoom->objects[objActive].data.h.delay; + SetDialogNumToStr(infoDial, kDelay2Item, (long)delay); + SelectDialogItemText(infoDial, kDelay2Item, 0, 1024); + } + else + { + GetDialogItemValue(infoDial, kInitialStateCheckbox2, &initial); + if (initial == 1) + thisRoom->objects[objActive].data.h.initial = true; + else + thisRoom->objects[objActive].data.h.initial = false; + if (what != kBall) + thisRoom->objects[objActive].data.h.delay = (Byte)delay; + fileDirty = true; + UpdateMenus(false); + leaving = true; + doReturn = true; + } + } + } + + DisposeDialog(infoDial); + DisposeModalFilterUPP(enemyFilterUPP); + + if (doReturn) + { + GoToObjectInRoomNum(retroLinkList[objActive].object, + retroLinkList[objActive].room); + } +} + +//-------------------------------------------------------------- DoFlowerObjectInfo + +void DoFlowerObjectInfo (void) +{ + DialogPtr infoDial; + Str255 numberStr, kindStr; + short item, flower; + Boolean leaving, doReturn; + ModalFilterUPP flowerFilterUPP; + + flowerFilterUPP = NewModalFilterUPP(FlowerFilter); + + NumToString(objActive + 1, numberStr); + GetIndString(kindStr, kObjectNameStrings, thisRoom->objects[objActive].what); + ParamText(numberStr, kindStr, PSTR(""), PSTR("")); + + BringUpDialog(&infoDial, kFlowerInfoDialogID); + + if (retroLinkList[objActive].room == -1) + HideDialogItem(infoDial, 13); + + flower = thisRoom->objects[objActive].data.i.pict + kRadioFlower1; + SelectFromRadioGroup(infoDial, flower, kRadioFlower1, kRadioFlower6); + + leaving = false; + doReturn = false; + + while (!leaving) + { + ModalDialog(flowerFilterUPP, &item); + + if (item == kOkayButton) + { + flower -= kRadioFlower1; + if (flower != thisRoom->objects[objActive].data.i.pict) + { + InvalWindowRect(mainWindow, &thisRoom->objects[objActive].data.i.bounds); + thisRoom->objects[objActive].data.i.bounds.right = + thisRoom->objects[objActive].data.i.bounds.left + + RectWide(&flowerSrc[flower]); + thisRoom->objects[objActive].data.i.bounds.top = + thisRoom->objects[objActive].data.i.bounds.bottom - + RectTall(&flowerSrc[flower]); + thisRoom->objects[objActive].data.i.pict = flower; + InvalWindowRect(mainWindow, &thisRoom->objects[objActive].data.i.bounds); + GetThisRoomsObjRects(); + ReadyBackground(thisRoom->background, thisRoom->tiles); + DrawThisRoomsObjects(); + fileDirty = true; + UpdateMenus(false); + wasFlower = flower; + } + leaving = true; + } + else if ((item >= kRadioFlower1) && (item <= kRadioFlower6)) + { + flower = item; + SelectFromRadioGroup(infoDial, flower, kRadioFlower1, kRadioFlower6); + } + else if (item == kFlowerCancel) + { + leaving = true; + } + else if (item == 13) // Linked From? button. + { + flower -= kRadioFlower1; + if (flower != thisRoom->objects[objActive].data.i.pict) + { + InvalWindowRect(mainWindow, &thisRoom->objects[objActive].data.i.bounds); + thisRoom->objects[objActive].data.i.bounds.right = + thisRoom->objects[objActive].data.i.bounds.left + + RectWide(&flowerSrc[flower]); + thisRoom->objects[objActive].data.i.bounds.top = + thisRoom->objects[objActive].data.i.bounds.bottom - + RectTall(&flowerSrc[flower]); + thisRoom->objects[objActive].data.i.pict = flower; + InvalWindowRect(mainWindow, &thisRoom->objects[objActive].data.i.bounds); + GetThisRoomsObjRects(); + ReadyBackground(thisRoom->background, thisRoom->tiles); + DrawThisRoomsObjects(); + fileDirty = true; + UpdateMenus(false); + wasFlower = flower; + } + leaving = true; + doReturn = true; + } + } + + DisposeDialog(infoDial); + DisposeModalFilterUPP(flowerFilterUPP); + + if (doReturn) + { + GoToObjectInRoomNum(retroLinkList[objActive].object, + retroLinkList[objActive].room); + } +} + +//-------------------------------------------------------------- DoObjectInfo + +void DoObjectInfo (void) +{ + if ((objActive == kInitialGliderSelected) || + (objActive == kLeftGliderSelected) || + (objActive == kRightGliderSelected)) + { + DoFurnitureObjectInfo(); + return; + } + + switch (thisRoom->objects[objActive].what) + { + case kFloorVent: + case kCeilingVent: + case kFloorBlower: + case kCeilingBlower: + case kSewerGrate: + case kLeftFan: + case kRightFan: + case kTaper: + case kCandle: + case kStubby: + case kTiki: + case kBBQ: + case kInvisBlower: + case kGrecoVent: + case kSewerBlower: + case kLiftArea: + DoBlowerObjectInfo(thisRoom->objects[objActive].what); + break; + + case kTable: + case kShelf: + case kCabinet: + case kFilingCabinet: + case kWasteBasket: + case kMilkCrate: + case kCounter: + case kDresser: + case kDeckTable: + case kStool: + case kTrunk: + case kInvisObstacle: + case kManhole: + case kBooks: + case kInvisBounce: + case kRedClock: + case kBlueClock: + case kYellowClock: + case kCuckoo: + case kPaper: + case kBattery: + case kBands: + case kFoil: + case kStar: + case kSparkle: + case kHelium: + case kSlider: + case kUpStairs: + case kDownStairs: + case kDoorInLf: + case kDoorInRt: + case kDoorExRt: + case kDoorExLf: + case kWindowInLf: + case kWindowInRt: + case kWindowExRt: + case kWindowExLf: + case kCinderBlock: + case kFlowerBox: + case kCDs: + case kGuitar: + case kStereo: + case kCobweb: + case kOzma: + case kMirror: + case kMousehole: + case kFireplace: + case kWallWindow: + case kBear: + case kCalendar: + case kVase1: + case kVase2: + case kBulletin: + case kCloud: + case kFaucet: + case kRug: + case kChimes: + DoFurnitureObjectInfo(); + break; + + case kGreaseRt: + case kGreaseLf: + DoGreaseObjectInfo(); + break; + + case kInvisBonus: + DoInvisBonusObjectInfo(); + break; + + case kMailboxLf: + case kMailboxRt: + case kFloorTrans: + case kCeilingTrans: + case kInvisTrans: + case kDeluxeTrans: + DoTransObjectInfo(thisRoom->objects[objActive].what); + break; + + case kLightSwitch: + case kMachineSwitch: + case kThermostat: + case kPowerSwitch: + case kKnifeSwitch: + case kInvisSwitch: + DoSwitchObjectInfo(); + break; + + case kTrigger: + case kLgTrigger: + DoTriggerObjectInfo(); + break; + + case kCeilingLight: + case kLightBulb: + case kTableLamp: + case kHipLamp: + case kDecoLamp: + case kFlourescent: + case kTrackLight: + case kInvisLight: + DoLightObjectInfo(); + break; + + case kShredder: + case kToaster: + case kMacPlus: + case kTV: + case kCoffee: + case kOutlet: + case kVCR: + DoApplianceObjectInfo(thisRoom->objects[objActive].what); + break; + + case kMicrowave: + DoMicrowaveObjectInfo(); + break; + + case kBalloon: + case kCopterLf: + case kCopterRt: + case kDartLf: + case kDartRt: + case kBall: + case kDrip: + case kFish: + DoEnemyObjectInfo(thisRoom->objects[objActive].what); + break; + + case kFlower: + DoFlowerObjectInfo(); + break; + + case kSoundTrigger: + case kCustomPict: + DoCustPictObjectInfo(); + break; + + default: + SysBeep(1); + break; + } +} + +#endif + diff --git a/GpApp/ObjectRects.cpp b/GpApp/ObjectRects.cpp new file mode 100644 index 0000000..e3f8ab1 --- /dev/null +++ b/GpApp/ObjectRects.cpp @@ -0,0 +1,1188 @@ + +//============================================================================ +//---------------------------------------------------------------------------- +// ObjectRects.c +//---------------------------------------------------------------------------- +//============================================================================ + + +#include "Externs.h" +#include "RectUtils.h" + + +#define kFloorColumnWide 4 +#define kCeilingColumnWide 24 +#define kFanColumnThick 16 +#define kFanColumnDown 20 +#define kDeadlyFlameHeight 24 +#define kStoolThick 25 +#define kShredderActiveHigh 40 + + +short AddActiveRect (Rect *, short, short, Boolean, Boolean); + + +extern hotPtr hotSpots; +extern short nHotSpots, numChimes; + + +//============================================================== Functions +//-------------------------------------------------------------- GetObjectRect + +void GetObjectRect (objectPtr who, Rect *itsRect) +{ + PicHandle thePict; + short wide, tall; + + switch (who->what) + { + case kObjectIsEmpty: + QSetRect(itsRect, 0, 0, 0, 0); + break; + + case kFloorVent: + case kCeilingVent: + case kFloorBlower: + case kCeilingBlower: + case kSewerGrate: + case kLeftFan: + case kRightFan: + case kTaper: + case kCandle: + case kStubby: + case kTiki: + case kBBQ: + case kInvisBlower: + case kGrecoVent: + case kSewerBlower: + *itsRect = srcRects[who->what]; + ZeroRectCorner(itsRect); + QOffsetRect(itsRect, who->data.a.topLeft.h, who->data.a.topLeft.v); + break; + + case kLiftArea: + QSetRect(itsRect, 0, 0, who->data.a.distance, who->data.a.tall * 2); + QOffsetRect(itsRect, who->data.a.topLeft.h, who->data.a.topLeft.v); + break; + + *itsRect = srcRects[who->what]; + ZeroRectCorner(itsRect); + QOffsetRect(itsRect, who->data.a.topLeft.h, who->data.a.topLeft.v); + break; + + case kTable: + case kShelf: + case kCabinet: + case kFilingCabinet: + case kWasteBasket: + case kMilkCrate: + case kCounter: + case kDresser: + case kStool: + case kTrunk: + case kDeckTable: + case kInvisObstacle: + case kManhole: + case kBooks: + case kInvisBounce: + *itsRect = who->data.b.bounds; + break; + + case kRedClock: + case kBlueClock: + case kYellowClock: + case kCuckoo: + case kPaper: + case kBattery: + case kBands: + case kGreaseRt: + case kGreaseLf: + case kFoil: + case kInvisBonus: + case kStar: + case kSparkle: + case kHelium: + *itsRect = srcRects[who->what]; + ZeroRectCorner(itsRect); + QOffsetRect(itsRect, + who->data.c.topLeft.h, + who->data.c.topLeft.v); + break; + + case kSlider: + *itsRect = srcRects[who->what]; + ZeroRectCorner(itsRect); + QOffsetRect(itsRect, + who->data.c.topLeft.h, + who->data.c.topLeft.v); + itsRect->right = itsRect->left + who->data.c.length; + break; + + case kUpStairs: + case kDownStairs: + case kMailboxLf: + case kMailboxRt: + case kFloorTrans: + case kCeilingTrans: + case kDoorInLf: + case kDoorInRt: + case kDoorExRt: + case kDoorExLf: + case kWindowInLf: + case kWindowInRt: + case kWindowExRt: + case kWindowExLf: + *itsRect = srcRects[who->what]; + ZeroRectCorner(itsRect); + QOffsetRect(itsRect, + who->data.d.topLeft.h, + who->data.d.topLeft.v); + break; + + case kInvisTrans: + *itsRect = srcRects[who->what]; + ZeroRectCorner(itsRect); + QOffsetRect(itsRect, + who->data.d.topLeft.h, + who->data.d.topLeft.v); + itsRect->bottom = itsRect->top + who->data.d.tall; + itsRect->right += (short)who->data.d.wide; + break; + + case kDeluxeTrans: + wide = (who->data.d.tall & 0xFF00) >> 8; // Get high byte + tall = who->data.d.tall & 0x00FF; // Get low byte + QSetRect(itsRect, 0, 0, wide * 4, tall * 4); // Scale by 4 + QOffsetRect(itsRect, + who->data.d.topLeft.h, + who->data.d.topLeft.v); + break; + + case kLightSwitch: + case kMachineSwitch: + case kThermostat: + case kPowerSwitch: + case kKnifeSwitch: + case kInvisSwitch: + case kTrigger: + case kLgTrigger: + case kSoundTrigger: + *itsRect = srcRects[who->what]; + ZeroRectCorner(itsRect); + QOffsetRect(itsRect, + who->data.e.topLeft.h, + who->data.e.topLeft.v); + break; + + case kCeilingLight: + case kLightBulb: + case kTableLamp: + case kHipLamp: + case kDecoLamp: + case kInvisLight: + *itsRect = srcRects[who->what]; + ZeroRectCorner(itsRect); + QOffsetRect(itsRect, + who->data.f.topLeft.h, + who->data.f.topLeft.v); + break; + + case kFlourescent: + case kTrackLight: + *itsRect = srcRects[who->what]; + ZeroRectCorner(itsRect); + itsRect->right = who->data.f.length; + QOffsetRect(itsRect, + who->data.f.topLeft.h, + who->data.f.topLeft.v); + break; + + case kShredder: + case kToaster: + case kMacPlus: + case kGuitar: + case kTV: + case kCoffee: + case kOutlet: + case kVCR: + case kStereo: + case kMicrowave: + case kCinderBlock: + case kFlowerBox: + case kCDs: + *itsRect = srcRects[who->what]; + ZeroRectCorner(itsRect); + QOffsetRect(itsRect, + who->data.g.topLeft.h, + who->data.g.topLeft.v); + break; + + case kCustomPict: + thePict = GetPicture(who->data.g.height); + if (thePict == nil) + { + who->data.g.height = 10000; + *itsRect = srcRects[who->what]; + } + else + { + HLock((Handle)thePict); + *itsRect = (*thePict)->picFrame; + HUnlock((Handle)thePict); + } + ZeroRectCorner(itsRect); + QOffsetRect(itsRect, + who->data.g.topLeft.h, + who->data.g.topLeft.v); + break; + + case kBalloon: + case kCopterLf: + case kCopterRt: + case kDartLf: + case kDartRt: + case kBall: + case kDrip: + case kFish: + case kCobweb: + *itsRect = srcRects[who->what]; + ZeroRectCorner(itsRect); + QOffsetRect(itsRect, + who->data.h.topLeft.h, + who->data.h.topLeft.v); + break; + + case kOzma: + case kMirror: + case kMousehole: + case kFireplace: + case kFlower: + case kWallWindow: + case kBear: + case kCalendar: + case kVase1: + case kVase2: + case kBulletin: + case kCloud: + case kFaucet: + case kRug: + case kChimes: + *itsRect = who->data.i.bounds; + break; + } +} + +//-------------------------------------------------------------- AddActiveRect + +short AddActiveRect (Rect *bounds, short action, short who, Boolean isOn, + Boolean doScrutinize) +{ + if (nHotSpots >= kMaxHotSpots) + return (-1); + + hotSpots[nHotSpots].bounds = *bounds; // the active rect + hotSpots[nHotSpots].action = action; // what it does + hotSpots[nHotSpots].who = who; // local obj. linked to + hotSpots[nHotSpots].isOn = isOn; // is it active? + hotSpots[nHotSpots].stillOver = false; + hotSpots[nHotSpots].doScrutinize = doScrutinize; + nHotSpots++; + + return (nHotSpots - 1); +} + +//-------------------------------------------------------------- CreateActiveRects + +short CreateActiveRects (short who) +{ + objectType theObject; + Rect bounds; + short hotSpotNumber, wide, tall; + Boolean isOn; + + hotSpotNumber = -1; + theObject = masterObjects[who].theObject; + + switch (theObject.what) + { + case kObjectIsEmpty: + break; + + case kFloorVent: + QSetRect(&bounds, 0, -theObject.data.a.distance, kFloorColumnWide, 0); + QOffsetRect(&bounds, + HalfRectWide(&srcRects[kFloorVent]) - kFloorColumnWide / 2, 0); + QOffsetRect(&bounds, theObject.data.a.topLeft.h, + theObject.data.a.topLeft.v); + hotSpotNumber = AddActiveRect(&bounds, kLiftIt, who, theObject.data.a.state, + false); + break; + + case kCeilingVent: + QSetRect(&bounds, 0, 0, kCeilingColumnWide, theObject.data.a.distance); + QOffsetRect(&bounds, + HalfRectWide(&srcRects[kCeilingVent]) - kCeilingColumnWide / 2, + 0); + QOffsetRect(&bounds, + theObject.data.a.topLeft.h, + theObject.data.a.topLeft.v); + hotSpotNumber = AddActiveRect(&bounds, kDropIt, who, theObject.data.a.state, + false); + break; + + case kFloorBlower: + QSetRect(&bounds, 0, -theObject.data.a.distance, kFloorColumnWide, 0); + QOffsetRect(&bounds, + HalfRectWide(&srcRects[kFloorBlower]) - kFloorColumnWide / 2, + 0); + QOffsetRect(&bounds, + theObject.data.a.topLeft.h, + theObject.data.a.topLeft.v); + hotSpotNumber = AddActiveRect(&bounds, kLiftIt, who, theObject.data.a.state, + false); + break; + + case kCeilingBlower: + QSetRect(&bounds, 0, 0, kCeilingColumnWide, theObject.data.a.distance); + QOffsetRect(&bounds, + HalfRectWide(&srcRects[kCeilingBlower]) - kCeilingColumnWide / 2, + 0); + QOffsetRect(&bounds, + theObject.data.a.topLeft.h, + theObject.data.a.topLeft.v); + hotSpotNumber = AddActiveRect(&bounds, kDropIt, who, theObject.data.a.state, + false); + break; + + case kSewerGrate: + QSetRect(&bounds, 0, -theObject.data.a.distance, kFloorColumnWide, 0); + QOffsetRect(&bounds, + HalfRectWide(&srcRects[kSewerGrate]) - kFloorColumnWide / 2, + 0); + QOffsetRect(&bounds, + theObject.data.a.topLeft.h, + theObject.data.a.topLeft.v); + hotSpotNumber = AddActiveRect(&bounds, kLiftIt, who, theObject.data.a.state, + false); + break; + + case kLeftFan: + QSetRect(&bounds, 0, 0, 13, 43); + QOffsetRect(&bounds, + theObject.data.a.topLeft.h + 16, + theObject.data.a.topLeft.v + 12); + hotSpotNumber = AddActiveRect(&bounds, kDissolveIt, who, true, true); + QSetRect(&bounds, 0, 0, theObject.data.a.distance, kFanColumnThick); + QOffsetRect(&bounds, -(theObject.data.a.distance), kFanColumnDown); + QOffsetRect(&bounds, + theObject.data.a.topLeft.h, + theObject.data.a.topLeft.v); + hotSpotNumber = AddActiveRect(&bounds, kPushItLeft, who, + theObject.data.a.state, false); + break; + + case kRightFan: + QSetRect(&bounds, 0, 0, 13, 43); + QOffsetRect(&bounds, + theObject.data.a.topLeft.h + 6, + theObject.data.a.topLeft.v + 12); + hotSpotNumber = AddActiveRect(&bounds, kDissolveIt, who, true, true); + QSetRect(&bounds, 0, 0, theObject.data.a.distance, kFanColumnThick); + QOffsetRect(&bounds, RectWide(&srcRects[kRightFan]), kFanColumnDown); + QOffsetRect(&bounds, + theObject.data.a.topLeft.h, + theObject.data.a.topLeft.v); + hotSpotNumber = AddActiveRect(&bounds, kPushItRight, who, + theObject.data.a.state, false); + break; + + case kTaper: + QSetRect(&bounds, 0, -theObject.data.a.distance, kFloorColumnWide, 0); + QOffsetRect(&bounds, + HalfRectWide(&srcRects[kTaper]) - kFloorColumnWide / 2, + 0); + QOffsetRect(&bounds, + theObject.data.a.topLeft.h, + theObject.data.a.topLeft.v); + if ((bounds.bottom - bounds.top) > kDeadlyFlameHeight) + { + bounds.bottom -= kDeadlyFlameHeight; + hotSpotNumber = AddActiveRect(&bounds, kLiftIt, who, true, false); + bounds.bottom += kDeadlyFlameHeight; + bounds.top = bounds.bottom - kDeadlyFlameHeight + 2; + hotSpotNumber = AddActiveRect(&bounds, kBurnIt, who, true, false); + } + else + hotSpotNumber = AddActiveRect(&bounds, kBurnIt, who, true, false); + QSetRect(&bounds, 0, 0, 7, 48); + QOffsetRect(&bounds, + theObject.data.a.topLeft.h + 6, + theObject.data.a.topLeft.v + 11); + hotSpotNumber = AddActiveRect(&bounds, kDissolveIt, who, true, true); + break; + + case kCandle: + QSetRect(&bounds, 0, -theObject.data.a.distance, kFloorColumnWide, 0); + QOffsetRect(&bounds, + HalfRectWide(&srcRects[kCandle]) - kFloorColumnWide / 2, + 0); + QOffsetRect(&bounds, + theObject.data.a.topLeft.h - 2, + theObject.data.a.topLeft.v); + if ((bounds.bottom - bounds.top) > kDeadlyFlameHeight) + { + bounds.bottom -= kDeadlyFlameHeight; + hotSpotNumber = AddActiveRect(&bounds, kLiftIt, who, true, false); + bounds.bottom += kDeadlyFlameHeight; + bounds.top = bounds.bottom - kDeadlyFlameHeight + 2; + hotSpotNumber = AddActiveRect(&bounds, kBurnIt, who, true, false); + } + else + hotSpotNumber = AddActiveRect(&bounds, kBurnIt, who, true, false); + QSetRect(&bounds, 0, 0, 8, 20); + QOffsetRect(&bounds, + theObject.data.a.topLeft.h + 9, + theObject.data.a.topLeft.v + 11); + hotSpotNumber = AddActiveRect(&bounds, kDissolveIt, who, true, true); + break; + + case kStubby: + QSetRect(&bounds, 0, -theObject.data.a.distance, kFloorColumnWide, 0); + QOffsetRect(&bounds, + (HalfRectWide(&srcRects[kStubby]) - kFloorColumnWide / 2) - 1, + 0); + QOffsetRect(&bounds, + theObject.data.a.topLeft.h, + theObject.data.a.topLeft.v); + if ((bounds.bottom - bounds.top) > kDeadlyFlameHeight) + { + bounds.bottom -= kDeadlyFlameHeight; + hotSpotNumber = AddActiveRect(&bounds, kLiftIt, who, true, false); + bounds.bottom += kDeadlyFlameHeight; + bounds.top = bounds.bottom - kDeadlyFlameHeight + 2; + hotSpotNumber = AddActiveRect(&bounds, kBurnIt, who, true, false); + } + else + hotSpotNumber = AddActiveRect(&bounds, kBurnIt, who, true, false); + QSetRect(&bounds, 0, 0, 15, 26); + QOffsetRect(&bounds, + theObject.data.a.topLeft.h + 1, + theObject.data.a.topLeft.v + 11); + hotSpotNumber = AddActiveRect(&bounds, kDissolveIt, who, true, true); + break; + + case kTiki: + QSetRect(&bounds, 0, -theObject.data.a.distance, kFloorColumnWide, 0); + QOffsetRect(&bounds, + HalfRectWide(&srcRects[kTiki]) - kFloorColumnWide / 2, + 0); + QOffsetRect(&bounds, + theObject.data.a.topLeft.h, + theObject.data.a.topLeft.v); + if ((bounds.bottom - bounds.top) > kDeadlyFlameHeight) + { + bounds.bottom -= kDeadlyFlameHeight; + hotSpotNumber = AddActiveRect(&bounds, kLiftIt, who, true, false); + bounds.bottom += kDeadlyFlameHeight; + bounds.top = bounds.bottom - kDeadlyFlameHeight + 2; + hotSpotNumber = AddActiveRect(&bounds, kBurnIt, who, true, false); + } + else + hotSpotNumber = AddActiveRect(&bounds, kBurnIt, who, true, false); + QSetRect(&bounds, 0, 0, 15, 14); + QOffsetRect(&bounds, + theObject.data.a.topLeft.h + 6, + theObject.data.a.topLeft.v + 6); + hotSpotNumber = AddActiveRect(&bounds, kDissolveIt, who, true, true); + break; + + case kBBQ: + QSetRect(&bounds, 0, -theObject.data.a.distance, kFloorColumnWide, 8); + QOffsetRect(&bounds, + HalfRectWide(&srcRects[kBBQ]) - kFloorColumnWide / 2, 0); + QOffsetRect(&bounds, theObject.data.a.topLeft.h, + theObject.data.a.topLeft.v); + if ((bounds.bottom - bounds.top) > kDeadlyFlameHeight) + { + bounds.bottom -= kDeadlyFlameHeight; + hotSpotNumber = AddActiveRect(&bounds, kLiftIt, who, true, false); + bounds.bottom += kDeadlyFlameHeight; + bounds.top = bounds.bottom - kDeadlyFlameHeight + 2; + hotSpotNumber = AddActiveRect(&bounds, kBurnIt, who, true, false); + } + else + hotSpotNumber = AddActiveRect(&bounds, kBurnIt, who, true, false); + QSetRect(&bounds, 0, 0, 52, 17); + QOffsetRect(&bounds, + theObject.data.a.topLeft.h + 6, + theObject.data.a.topLeft.v + 8); + hotSpotNumber = AddActiveRect(&bounds, kDissolveIt, who, true, true); + break; + + case kInvisBlower: + switch (theObject.data.a.vector & 0x0F) + { + case 1: // up + QSetRect(&bounds, 0, -theObject.data.a.distance - 24, + kFloorColumnWide, 0); + QOffsetRect(&bounds, 12 - kFloorColumnWide / 2, 24); + QOffsetRect(&bounds, theObject.data.a.topLeft.h, + theObject.data.a.topLeft.v); + hotSpotNumber = AddActiveRect(&bounds, kLiftIt, who, theObject.data.a.state, + false); + break; + + case 2: // right + QSetRect(&bounds, 0, 0, theObject.data.a.distance + 24, + kFanColumnThick); + QOffsetRect(&bounds, 0, 12 - kFanColumnThick / 2); + QOffsetRect(&bounds, theObject.data.a.topLeft.h, + theObject.data.a.topLeft.v); + hotSpotNumber = AddActiveRect(&bounds, kPushItRight, who, + theObject.data.a.state, false); + break; + + case 4: // down + QSetRect(&bounds, 0, 0, kFloorColumnWide, + theObject.data.a.distance + 24); + QOffsetRect(&bounds, 12 - kFloorColumnWide / 2, 0); + QOffsetRect(&bounds, theObject.data.a.topLeft.h, + theObject.data.a.topLeft.v); + hotSpotNumber = AddActiveRect(&bounds, kDropIt, who, + theObject.data.a.state, false); + break; + + case 8: // left + QSetRect(&bounds, 0, 0, theObject.data.a.distance + 24, kFanColumnThick); + QOffsetRect(&bounds, -(theObject.data.a.distance), 12 - kFanColumnThick / 2); + QOffsetRect(&bounds, theObject.data.a.topLeft.h, + theObject.data.a.topLeft.v); + hotSpotNumber = AddActiveRect(&bounds, kPushItLeft, who, + theObject.data.a.state, false); + break; + } + break; + + case kGrecoVent: + QSetRect(&bounds, 0, -theObject.data.a.distance, kFloorColumnWide, 0); + QOffsetRect(&bounds, + HalfRectWide(&srcRects[kGrecoVent]) - kFloorColumnWide / 2, + 0); + QOffsetRect(&bounds, + theObject.data.a.topLeft.h, + theObject.data.a.topLeft.v); + hotSpotNumber = AddActiveRect(&bounds, kLiftIt, who, + theObject.data.a.state, false); + break; + + case kSewerBlower: + QSetRect(&bounds, 0, -theObject.data.a.distance, kFloorColumnWide, 0); + QOffsetRect(&bounds, + HalfRectWide(&srcRects[kSewerBlower]) - kFloorColumnWide / 2, + 0); + QOffsetRect(&bounds, + theObject.data.a.topLeft.h, + theObject.data.a.topLeft.v); + hotSpotNumber = AddActiveRect(&bounds, kLiftIt, who, + theObject.data.a.state, false); + break; + + case kLiftArea: + QSetRect(&bounds, 0, 0, theObject.data.a.distance, theObject.data.a.tall * 2); + QOffsetRect(&bounds, + theObject.data.a.topLeft.h, + theObject.data.a.topLeft.v); + switch (theObject.data.a.vector & 0x0F) + { + case 1: // up + hotSpotNumber = AddActiveRect(&bounds, kLiftIt, who, theObject.data.a.state, + false); + break; + + case 2: // right + hotSpotNumber = AddActiveRect(&bounds, kPushItRight, who, + theObject.data.a.state, false); + break; + + case 4: // down + hotSpotNumber = AddActiveRect(&bounds, kDropIt, who, + theObject.data.a.state, false); + break; + + case 8: // left + hotSpotNumber = AddActiveRect(&bounds, kPushItLeft, who, + theObject.data.a.state, false); + break; + } + break; + + case kTable: + case kShelf: + case kCabinet: + case kFilingCabinet: + case kWasteBasket: + case kMilkCrate: + case kCounter: + case kDresser: + case kDeckTable: + case kTrunk: + case kInvisObstacle: + bounds = theObject.data.b.bounds; + hotSpotNumber = AddActiveRect(&bounds, kDissolveIt, who, true, true); + break; + + case kBooks: + bounds = theObject.data.b.bounds; + bounds.right -= 2; + hotSpotNumber = AddActiveRect(&bounds, kDissolveIt, who, true, true); + break; + + case kManhole: + bounds = theObject.data.b.bounds; + bounds.left += kGliderWide + 3; + bounds.right -= kGliderWide + 3; + bounds.top = kFloorLimit - 1; + bounds.bottom = kTileHigh; + hotSpotNumber = AddActiveRect(&bounds, kIgnoreGround, who, true, false); + break; + + case kInvisBounce: + bounds = theObject.data.b.bounds; + hotSpotNumber = AddActiveRect(&bounds, kBounceIt, who, true, true); + break; + + case kStool: + bounds = theObject.data.b.bounds; + InsetRect(&bounds, 1, 1); + bounds.bottom = bounds.top + kStoolThick; + hotSpotNumber = AddActiveRect(&bounds, kDissolveIt, who, true, true); + break; + + case kRedClock: + case kBlueClock: + case kYellowClock: + case kCuckoo: + case kPaper: + case kBattery: + case kBands: + case kFoil: + case kInvisBonus: + case kStar: + case kHelium: + bounds = srcRects[theObject.what]; + ZeroRectCorner(&bounds); + QOffsetRect(&bounds, + theObject.data.c.topLeft.h, + theObject.data.c.topLeft.v); + hotSpotNumber = AddActiveRect(&bounds, kRewardIt, who, + theObject.data.c.state, false); + break; + + case kGreaseRt: + if (theObject.data.c.state) + { + bounds = srcRects[theObject.what]; + ZeroRectCorner(&bounds); + QOffsetRect(&bounds, theObject.data.c.topLeft.h, + theObject.data.c.topLeft.v); + hotSpotNumber = AddActiveRect(&bounds, kRewardIt, who, true, false); + } + else + { + QSetRect(&bounds, 0, -2, theObject.data.c.length - 5, 0); + QOffsetRect(&bounds, 32 - 1, 27); + QOffsetRect(&bounds, theObject.data.c.topLeft.h, + theObject.data.c.topLeft.v); + hotSpotNumber = AddActiveRect(&bounds, kSlideIt, who, true, false); + } + break; + + case kGreaseLf: + if (theObject.data.c.state) + { + bounds = srcRects[theObject.what]; + ZeroRectCorner(&bounds); + QOffsetRect(&bounds, theObject.data.c.topLeft.h, + theObject.data.c.topLeft.v); + hotSpotNumber = AddActiveRect(&bounds, kRewardIt, who, true, false); + } + else + { + QSetRect(&bounds, -theObject.data.c.length + 5, -2, 0, 0); + QOffsetRect(&bounds, 1, 27); + QOffsetRect(&bounds, theObject.data.c.topLeft.h, + theObject.data.c.topLeft.v); + hotSpotNumber = AddActiveRect(&bounds, kSlideIt, who, true, false); + } + break; + + case kSparkle: + bounds = srcRects[theObject.what]; + ZeroRectCorner(&bounds); + QOffsetRect(&bounds, + theObject.data.c.topLeft.h, + theObject.data.c.topLeft.v); + break; + + case kSlider: + QSetRect(&bounds, 0, 0, theObject.data.c.length, 16); + QOffsetRect(&bounds, theObject.data.c.topLeft.h, + theObject.data.c.topLeft.v); + hotSpotNumber = AddActiveRect(&bounds, kSlideIt, who, true, false); + break; + + case kUpStairs: + QSetRect(&bounds, 0, 0, 112, 32); + QOffsetRect(&bounds, + theObject.data.d.topLeft.h, + theObject.data.d.topLeft.v); + hotSpotNumber = AddActiveRect(&bounds, kMoveItUp, who, true, false); + break; + + case kDownStairs: + QSetRect(&bounds, -80, -56, 0, 0); + QOffsetRect(&bounds, srcRects[kDownStairs].right, 170); + QOffsetRect(&bounds, + theObject.data.d.topLeft.h, + theObject.data.d.topLeft.v); + hotSpotNumber = AddActiveRect(&bounds, kMoveItDown, who, true, false); + break; + + case kMailboxLf: + if (theObject.data.d.who != 255) + { + QSetRect(&bounds, -72, 0, 0, 40); + QOffsetRect(&bounds, 30, 16); + QOffsetRect(&bounds, + theObject.data.d.topLeft.h, + theObject.data.d.topLeft.v); + hotSpotNumber = AddActiveRect(&bounds, kMailItLeft, who, true, false); + } + break; + + case kMailboxRt: + if (theObject.data.d.who != 255) + { + QSetRect(&bounds, 0, 0, 72, 40); + QOffsetRect(&bounds, 79, 16); + QOffsetRect(&bounds, + theObject.data.d.topLeft.h, + theObject.data.d.topLeft.v); + hotSpotNumber = AddActiveRect(&bounds, kMailItRight, who, true, false); + } + break; + + case kFloorTrans: + if (theObject.data.d.who != 255) + { + QSetRect(&bounds, 0, -48, 76, 0); + QOffsetRect(&bounds, -8, RectTall(&srcRects[kFloorTrans])); + QOffsetRect(&bounds, + theObject.data.d.topLeft.h, + theObject.data.d.topLeft.v); + hotSpotNumber = AddActiveRect(&bounds, kDuctItDown, who, true, false); + } + break; + + case kCeilingTrans: + if (theObject.data.d.who != 255) + { + QSetRect(&bounds, 0, 0, 76, 48); + QOffsetRect(&bounds, -8, 0); + QOffsetRect(&bounds, + theObject.data.d.topLeft.h, + theObject.data.d.topLeft.v); + hotSpotNumber = AddActiveRect(&bounds, kDuctItUp, who, true, false); + } + break; + + case kDoorInLf: + QSetRect(&bounds, 0, 0, 16, 240); + QOffsetRect(&bounds, 0, 52); + QOffsetRect(&bounds, + theObject.data.d.topLeft.h, + theObject.data.d.topLeft.v); + hotSpotNumber = AddActiveRect(&bounds, kIgnoreLeftWall, who, true, false); + break; + + case kDoorInRt: + QSetRect(&bounds, 0, 0, 16, 240); + QOffsetRect(&bounds, 128, 52); + QOffsetRect(&bounds, + theObject.data.d.topLeft.h, + theObject.data.d.topLeft.v); + hotSpotNumber = AddActiveRect(&bounds, kIgnoreRightWall, who, true, false); + break; + + case kDoorExRt: + QSetRect(&bounds, 0, 0, 16, 240); + QOffsetRect(&bounds, 0, 52); + QOffsetRect(&bounds, + theObject.data.d.topLeft.h, + theObject.data.d.topLeft.v); + hotSpotNumber = AddActiveRect(&bounds, kIgnoreRightWall, who, true, false); + break; + + case kDoorExLf: + QSetRect(&bounds, 0, 0, 16, 240); + QOffsetRect(&bounds, 0, 52); + QOffsetRect(&bounds, + theObject.data.d.topLeft.h, + theObject.data.d.topLeft.v); + hotSpotNumber = AddActiveRect(&bounds, kIgnoreLeftWall, who, true, false); + break; + + case kWindowInLf: + QSetRect(&bounds, 0, 0, 16, 44); + QOffsetRect(&bounds, 0, 96); + QOffsetRect(&bounds, + theObject.data.d.topLeft.h, + theObject.data.d.topLeft.v); + hotSpotNumber = AddActiveRect(&bounds, kIgnoreLeftWall, who, true, false); + break; + + case kWindowInRt: + QSetRect(&bounds, 0, 0, 16, 44); + QOffsetRect(&bounds, 4, 96); + QOffsetRect(&bounds, + theObject.data.d.topLeft.h, + theObject.data.d.topLeft.v); + hotSpotNumber = AddActiveRect(&bounds, kIgnoreRightWall, who, true, false); + break; + + case kWindowExRt: + QSetRect(&bounds, 0, 0, 16, 44); + QOffsetRect(&bounds, 0, 96); + QOffsetRect(&bounds, + theObject.data.d.topLeft.h, + theObject.data.d.topLeft.v); + hotSpotNumber = AddActiveRect(&bounds, kIgnoreRightWall, who, true, false); + break; + + case kWindowExLf: + QSetRect(&bounds, 0, 0, 16, 44); + QOffsetRect(&bounds, 0, 96); + QOffsetRect(&bounds, + theObject.data.d.topLeft.h, + theObject.data.d.topLeft.v); + hotSpotNumber = AddActiveRect(&bounds, kIgnoreLeftWall, who, true, false); + break; + + case kInvisTrans: + if (theObject.data.d.who != 255) + { + QSetRect(&bounds, 0, 0, 64, 32); + QOffsetRect(&bounds, + theObject.data.d.topLeft.h, + theObject.data.d.topLeft.v); + bounds.bottom = bounds.top + theObject.data.d.tall; + bounds.right += (short)theObject.data.d.wide; + hotSpotNumber = AddActiveRect(&bounds, kTransportIt, who, true, false); + } + break; + + case kDeluxeTrans: + if (theObject.data.d.who != 255) + { + wide = (theObject.data.d.tall & 0xFF00) >> 8; // Get high byte + tall = theObject.data.d.tall & 0x00FF; // Get low byte + QSetRect(&bounds, 0, 0, wide * 4, tall * 4); // Scale by 4 + QOffsetRect(&bounds, + theObject.data.d.topLeft.h, + theObject.data.d.topLeft.v); + isOn = theObject.data.d.wide & 0x0F; + hotSpotNumber = AddActiveRect(&bounds, kTransportIt, who, isOn, false); + } + break; + + case kLightSwitch: + case kMachineSwitch: + case kThermostat: + case kPowerSwitch: + case kKnifeSwitch: + case kInvisSwitch: + case kTrigger: + case kLgTrigger: + bounds = srcRects[theObject.what]; + ZeroRectCorner(&bounds); + QOffsetRect(&bounds, + theObject.data.e.topLeft.h, + theObject.data.e.topLeft.v); + if ((theObject.what == kTrigger) || (theObject.what == kLgTrigger)) + { + if (theObject.data.e.where != -1) + hotSpotNumber = AddActiveRect(&bounds, kTriggerIt, who, true, false); + } + else + { + if (theObject.data.e.where != -1) + hotSpotNumber = AddActiveRect(&bounds, kSwitchIt, who, true, false); + } + break; + + case kSoundTrigger: + QSetRect(&bounds, 0, 0, 48, 48); + QOffsetRect(&bounds, theObject.data.e.topLeft.h, theObject.data.e.topLeft.v); + if (LoadTriggerSound(theObject.data.e.where) == noErr) + hotSpotNumber = AddActiveRect(&bounds, kSoundIt, who, true, false); + break; + + case kCeilingLight: + case kLightBulb: + case kTableLamp: + case kHipLamp: + case kDecoLamp: + case kFlourescent: + case kTrackLight: + case kInvisLight: + break; + + case kShredder: + bounds = srcRects[theObject.what]; + bounds.bottom = bounds.top + kShredderActiveHigh; + bounds.right += 48; + ZeroRectCorner(&bounds); + QOffsetRect(&bounds, theObject.data.g.topLeft.h, + theObject.data.g.topLeft.v); + QOffsetRect(&bounds, -24, -36); + hotSpotNumber = AddActiveRect(&bounds, kShredIt, who, + theObject.data.g.state, true); + break; + + case kGuitar: + QSetRect(&bounds, 0, 0, 8, 96); + QOffsetRect(&bounds, theObject.data.g.topLeft.h + 34, + theObject.data.g.topLeft.v + 32); + hotSpotNumber = AddActiveRect(&bounds, kStrumIt, who, true, false); + break; + + case kOutlet: + bounds = srcRects[theObject.what]; + ZeroRectCorner(&bounds); + QOffsetRect(&bounds, + theObject.data.g.topLeft.h, + theObject.data.g.topLeft.v); + hotSpotNumber = AddActiveRect(&bounds, kIgnoreIt, who, + theObject.data.g.state, false); + break; + + case kMicrowave: + bounds = srcRects[theObject.what]; + ZeroRectCorner(&bounds); + QOffsetRect(&bounds, + theObject.data.g.topLeft.h, + theObject.data.g.topLeft.v); + hotSpotNumber = AddActiveRect(&bounds, kDissolveIt, who, true, true); + bounds.bottom = bounds.top; + bounds.top = 0; + hotSpotNumber = AddActiveRect(&bounds, kMicrowaveIt, who, true, true); + break; + + case kToaster: + case kMacPlus: + case kTV: + case kCoffee: + case kVCR: + case kStereo: + case kCinderBlock: + case kFlowerBox: + case kCDs: + bounds = srcRects[theObject.what]; + ZeroRectCorner(&bounds); + QOffsetRect(&bounds, + theObject.data.g.topLeft.h, + theObject.data.g.topLeft.v); + hotSpotNumber = AddActiveRect(&bounds, kDissolveIt, who, true, true); + break; + + case kCustomPict: + break; + + case kBalloon: + case kCopterLf: + case kCopterRt: + case kDartLf: + case kDartRt: + case kBall: + case kDrip: + bounds = srcRects[theObject.what]; + ZeroRectCorner(&bounds); + QOffsetRect(&bounds, + theObject.data.h.topLeft.h, + theObject.data.h.topLeft.v); + hotSpotNumber = AddActiveRect(&bounds, kIgnoreIt, who, true, false); + break; + + case kFish: + bounds = srcRects[theObject.what]; + ZeroRectCorner(&bounds); + QOffsetRect(&bounds, + theObject.data.h.topLeft.h, + theObject.data.h.topLeft.v); + hotSpotNumber = AddActiveRect(&bounds, kDissolveIt, who, true, true); + break; + + case kCobweb: + bounds = srcRects[theObject.what]; + ZeroRectCorner(&bounds); + QOffsetRect(&bounds, + theObject.data.h.topLeft.h, + theObject.data.h.topLeft.v); + InsetRect(&bounds, -24, -10); + hotSpotNumber = AddActiveRect(&bounds, kWebIt, who, true, true); + break; + + case kOzma: + case kMirror: + case kMousehole: + case kFireplace: + case kFlower: + case kWallWindow: + case kBear: + case kCalendar: + case kVase1: + case kVase2: + case kBulletin: + case kCloud: + case kFaucet: + case kRug: + break; + + case kChimes: + numChimes++; + bounds = srcRects[kChimes]; + ZeroRectCorner(&bounds); + QOffsetRect(&bounds, + theObject.data.i.bounds.left, + theObject.data.i.bounds.top); + hotSpotNumber = AddActiveRect(&bounds, kChimeIt, who, true, false); + break; + } + + return (hotSpotNumber); +} + +//-------------------------------------------------------------- VerticalRoomOffset + +short VerticalRoomOffset (short neighbor) +{ + short offset; + + offset = 0; + + switch (neighbor) + { + case kNorthRoom: + case kNorthEastRoom: + case kNorthWestRoom: + offset -= kVertLocalOffset; + break; + + case kSouthEastRoom: + case kSouthRoom: + case kSouthWestRoom: + offset += kVertLocalOffset; + break; + } + + return (offset); +} + +//-------------------------------------------------------------- OffsetRectRoomRelative + +void OffsetRectRoomRelative (Rect *theRect, short neighbor) +{ + QOffsetRect(theRect, playOriginH, playOriginV); + + switch (neighbor) + { + case kNorthRoom: + QOffsetRect(theRect, 0, -kVertLocalOffset); + break; + + case kNorthEastRoom: + QOffsetRect(theRect, kRoomWide, -kVertLocalOffset); + break; + + case kEastRoom: + QOffsetRect(theRect, kRoomWide, 0); + break; + + case kSouthEastRoom: + QOffsetRect(theRect, kRoomWide, kVertLocalOffset); + break; + + case kSouthRoom: + QOffsetRect(theRect, 0, kVertLocalOffset); + break; + + case kSouthWestRoom: + QOffsetRect(theRect, -kRoomWide, kVertLocalOffset); + break; + + case kWestRoom: + QOffsetRect(theRect, -kRoomWide, 0); + break; + + case kNorthWestRoom: + QOffsetRect(theRect, -kRoomWide, -kVertLocalOffset); + break; + } +} + +//-------------------------------------------------------------- GetUpStairsRightEdge + +short GetUpStairsRightEdge (void) +{ + objectType thisObject; + short i, rightEdge; + char wasState; + + rightEdge = kRoomWide; + + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + + for (i = 0; i < kMaxRoomObs; i++) + { + thisObject = (*thisHouse)->rooms[thisRoomNumber].objects[i]; + if (thisObject.what == kDownStairs) + { + rightEdge = thisObject.data.d.topLeft.h + srcRects[kDownStairs].right - 1; + break; + } + } + + HSetState((Handle)thisHouse, wasState); + + return (rightEdge); +} + +//-------------------------------------------------------------- GetDownStairsLeftEdge + +short GetDownStairsLeftEdge (void) +{ + objectType thisObject; + short i, leftEdge; + char wasState; + + leftEdge = 0; + + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + + for (i = 0; i < kMaxRoomObs; i++) + { + thisObject = (*thisHouse)->rooms[thisRoomNumber].objects[i]; + if (thisObject.what == kUpStairs) + { + leftEdge = thisObject.data.d.topLeft.h + 1; + break; + } + } + + HSetState((Handle)thisHouse, wasState); + + return (leftEdge); +} + diff --git a/GpApp/Objects.cpp b/GpApp/Objects.cpp new file mode 100644 index 0000000..6158186 --- /dev/null +++ b/GpApp/Objects.cpp @@ -0,0 +1,1001 @@ +//============================================================================ +//---------------------------------------------------------------------------- +// Objects.c +//---------------------------------------------------------------------------- +//============================================================================ + + +#include "Externs.h" +#include "ObjectEdit.h" + + +#define kMaxTempManholes 8 + + +short GetObjectLinked (objectType *); +void ListOneRoomsObjects (short); + + +Rect blowerSrcRect; // Blowers +GWorldPtr blowerSrcMap; +GWorldPtr blowerMaskMap; +Rect flame[kNumCandleFlames], tikiFlame[kNumTikiFlames]; +Rect coals[kNumBBQCoals]; +Rect furnitureSrcRect; // Furniture +GWorldPtr furnitureSrcMap; +GWorldPtr furnitureMaskMap; +Rect tableSrc, shelfSrc, hingeSrc, handleSrc, knobSrc; +Rect leftFootSrc, rightFootSrc, deckSrc; +Rect bonusSrcRect; // Bonuses +GWorldPtr bonusSrcMap; +GWorldPtr bonusMaskMap; +Rect pointsSrcRect; +GWorldPtr pointsSrcMap; +GWorldPtr pointsMaskMap; +Rect starSrc[6], sparkleSrc[kNumSparkleModes]; +Rect digits[11], pendulumSrc[3], greaseSrcRt[4], greaseSrcLf[4]; +Rect transSrcRect; // Transport +GWorldPtr transSrcMap; +GWorldPtr transMaskMap; +Rect switchSrcRect; // Switches +GWorldPtr switchSrcMap; +Rect lightSwitchSrc[2], machineSwitchSrc[2], thermostatSrc[2]; +Rect powerSrc[2], knifeSwitchSrc[2]; +Rect lightSrcRect; // Lights +GWorldPtr lightSrcMap; +GWorldPtr lightMaskMap; +Rect flourescentSrc1, flourescentSrc2, trackLightSrc[kNumTrackLights]; +Rect applianceSrcRect, toastSrcRect, shredSrcRect; // Appliances +GWorldPtr applianceSrcMap, toastSrcMap, shredSrcMap; +GWorldPtr applianceMaskMap, toastMaskMap, shredMaskMap; +Rect plusScreen1, plusScreen2, tvScreen1, tvScreen2; +Rect coffeeLight1, coffeeLight2, vcrTime1, vcrTime2; +Rect stereoLight1, stereoLight2, microOn, microOff; +Rect outletSrc[kNumOutletPicts]; +Rect balloonSrcRect, copterSrcRect, dartSrcRect; // Enemies +Rect ballSrcRect, dripSrcRect, enemySrcRect; +Rect fishSrcRect; +GWorldPtr balloonSrcMap, copterSrcMap, dartSrcMap; +GWorldPtr ballSrcMap, dripSrcMap, enemySrcMap; +GWorldPtr fishSrcMap; +GWorldPtr balloonMaskMap, copterMaskMap, dartMaskMap; +GWorldPtr ballMaskMap, dripMaskMap, enemyMaskMap; +GWorldPtr fishMaskMap; +Rect balloonSrc[kNumBalloonFrames], copterSrc[kNumCopterFrames]; +Rect dartSrc[kNumDartFrames], ballSrc[kNumBallFrames]; +Rect dripSrc[kNumDripFrames], fishSrc[kNumFishFrames]; +GWorldPtr clutterSrcMap; // Clutter +GWorldPtr clutterMaskMap; +Rect clutterSrcRect; +Rect flowerSrc[kNumFlowers]; +Rect *srcRects; +Rect tempManholes[kMaxTempManholes]; +savedType savedMaps[kMaxSavedMaps]; +objDataPtr masterObjects; +hotPtr hotSpots; +short nLocalObj, nHotSpots, numMasterObjects, numLocalMasterObjects; +short numTempManholes, tvWithMovieNumber; +Boolean newState; + +extern linksPtr linksList; +extern short srcLocations[], destLocations[]; +extern short localNumbers[]; +extern short numNeighbors; + + +//============================================================== Functions +//-------------------------------------------------------------- IsThisValid + +Boolean IsThisValid (short where, short who) +{ + char wasState; + Boolean itsGood; + + itsGood = true; + + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + switch ((*thisHouse)->rooms[where].objects[who].what) + { + case kObjectIsEmpty: + itsGood = false; + break; + + case kRedClock: + case kBlueClock: + case kYellowClock: + case kCuckoo: + case kPaper: + case kBattery: + case kBands: + case kFoil: + case kInvisBonus: + case kStar: + case kSparkle: + case kHelium: + itsGood = (*thisHouse)->rooms[where].objects[who].data.c.state; + break; + } + HSetState((Handle)thisHouse, wasState); + + return (itsGood); +} + +//-------------------------------------------------------------- GetRoomLinked + +short GetRoomLinked (objectType *who) +{ + short compoundRoomNumber, whereLinked; + short floor, suite; + + switch (who->what) + { + case kMailboxLf: + case kMailboxRt: + case kFloorTrans: + case kCeilingTrans: + case kInvisTrans: + case kDeluxeTrans: + compoundRoomNumber = who->data.d.where; + if (compoundRoomNumber != -1) // is object linked + { + ExtractFloorSuite(compoundRoomNumber, &floor, &suite); + whereLinked = GetRoomNumber(floor, suite); + } + else + whereLinked = -1; // not linked + break; + + case kLightSwitch: + case kMachineSwitch: + case kThermostat: + case kPowerSwitch: + case kKnifeSwitch: + case kInvisSwitch: + case kTrigger: + case kLgTrigger: + compoundRoomNumber = who->data.e.where; + if (compoundRoomNumber != -1) // is object linked + { + ExtractFloorSuite(compoundRoomNumber, &floor, &suite); + whereLinked = GetRoomNumber(floor, suite); + } + else + whereLinked = -1; // not linked + break; + + default: + whereLinked = -1; + break; + } + + return (whereLinked); +} + +//-------------------------------------------------------------- GetObjectLinked + +short GetObjectLinked (objectType *who) +{ + short whoLinked; + + switch (who->what) + { + case kMailboxLf: + case kMailboxRt: + case kFloorTrans: + case kCeilingTrans: + case kInvisTrans: + case kDeluxeTrans: + if (who->data.d.who != 255) // is it linked? + whoLinked = (short)who->data.d.who; + else + whoLinked = -1; // object not linked + break; + + case kLightSwitch: + case kMachineSwitch: + case kThermostat: + case kPowerSwitch: + case kKnifeSwitch: + case kInvisSwitch: + case kTrigger: + case kLgTrigger: + if (who->data.e.who != 255) // is it linked? + whoLinked = (short)who->data.e.who; + else + whoLinked = -1; // object not linked + break; + + default: + whoLinked = -1; + break; + } + + return (whoLinked); +} + +//-------------------------------------------------------------- ObjectIsLinkTransport + +Boolean ObjectIsLinkTransport (objectType *who) +{ + Boolean itIs; + + itIs = false; + if ((who->what == kMailboxLf) || (who->what == kMailboxRt) || + (who->what == kFloorTrans) || (who->what == kCeilingTrans) || + (who->what == kInvisTrans) || (who->what == kDeluxeTrans)) + { + itIs = true; + } + + return (itIs); +} + +//-------------------------------------------------------------- ObjectIsLinkSwitch + +Boolean ObjectIsLinkSwitch (objectType *who) +{ + Boolean itIs; + + itIs = false; + if ((who->what == kLightSwitch) || (who->what == kMachineSwitch) || + (who->what == kThermostat) || (who->what == kPowerSwitch) || + (who->what == kKnifeSwitch) || (who->what == kInvisSwitch) || + (who->what == kTrigger) || (who->what == kLgTrigger)) + { + itIs = true; + } + + return (itIs); +} + +//-------------------------------------------------------------- ListOneRoomsObjects + +void ListOneRoomsObjects (short where) +{ + objectType thisObject; + short roomNum, n; + char wasState; + + roomNum = localNumbers[where]; + if (roomNum == kRoomIsEmpty) + return; + + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + for (n = 0; n < kMaxRoomObs; n++) + { + if (numMasterObjects < kMaxMasterObjects) + { + thisObject = (*thisHouse)->rooms[roomNum].objects[n]; + + masterObjects[numMasterObjects].roomNum = roomNum; + masterObjects[numMasterObjects].objectNum = n; + masterObjects[numMasterObjects].roomLink = + GetRoomLinked(&thisObject); + masterObjects[numMasterObjects].objectLink = + GetObjectLinked(&thisObject); + masterObjects[numMasterObjects].localLink = -1; + + masterObjects[numMasterObjects].theObject = + (*thisHouse)->rooms[roomNum].objects[n]; + + if ((where == kCentralRoom) && (IsThisValid(roomNum, n))) + masterObjects[numMasterObjects].hotNum = CreateActiveRects(n); + else + masterObjects[numMasterObjects].hotNum = -1; + masterObjects[numMasterObjects].dynaNum = -1; + + numMasterObjects++; + + if (where == kCentralRoom) + numLocalMasterObjects++; + } + } + HSetState((Handle)thisHouse, wasState); +} + +//-------------------------------------------------------------- ListAllLocalObjects + +void ListAllLocalObjects (void) +{ + short i, n; + char wasState; + + numMasterObjects = 0; + numLocalMasterObjects = 0; + nHotSpots = 0; + + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + + ListOneRoomsObjects(kCentralRoom); + + if (numNeighbors > 1) + { + ListOneRoomsObjects(kEastRoom); + ListOneRoomsObjects(kWestRoom); + } + + if (numNeighbors > 3) + { + ListOneRoomsObjects(kNorthRoom); + ListOneRoomsObjects(kNorthEastRoom); + ListOneRoomsObjects(kSouthEastRoom); + ListOneRoomsObjects(kSouthRoom); + ListOneRoomsObjects(kSouthWestRoom); + ListOneRoomsObjects(kNorthWestRoom); + } + + HSetState((Handle)thisHouse, wasState); + + for (i = 0; i < numMasterObjects; i++) // correlate links withÉ + { // index into this list + if ((masterObjects[i].roomLink != -1) && // if object has a link + (masterObjects[i].objectLink != -1)) + { + for (n = 0; n < numMasterObjects; n++) // search for the objectÉ + { // linked to in this list + if ((masterObjects[i].roomLink == masterObjects[n].roomNum) && + (masterObjects[i].objectLink == masterObjects[n].objectNum)) + { + masterObjects[i].localLink = n; // log the index + } + } + } + } +} + +//-------------------------------------------------------------- AddTempManholeRect + +void AddTempManholeRect (Rect *manHole) +{ + Rect tempRect; + + if (numTempManholes < kMaxTempManholes) + { + tempRect = *manHole; + tempRect.bottom = tempRect.top + kFloorSupportTall; + tempManholes[numTempManholes] = tempRect; + numTempManholes++; + } +} + +//-------------------------------------------------------------- SetObjectState + +Boolean SetObjectState (short room, short object, short action, short local) +{ + char wasState; + Boolean changed; + + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + switch ((*thisHouse)->rooms[room].objects[object].what) + { + case kFloorVent: + case kCeilingVent: + case kFloorBlower: + case kCeilingBlower: + case kLeftFan: + case kRightFan: + case kSewerGrate: + case kInvisBlower: + case kGrecoVent: + case kSewerBlower: + case kLiftArea: + switch (action) + { + case kToggle: + newState = !(*thisHouse)->rooms[room].objects[object].data.a.state; + (*thisHouse)->rooms[room].objects[object].data.a.state = newState; + changed = true; + break; + + case kForceOn: + changed = ((*thisHouse)->rooms[room].objects[object].data.a.state == false); + newState = true; + (*thisHouse)->rooms[room].objects[object].data.a.state = newState; + break; + + case kForceOff: + changed = ((*thisHouse)->rooms[room].objects[object].data.a.state == PL_TRUE); + newState = false; + (*thisHouse)->rooms[room].objects[object].data.a.state = newState; + break; + } + if ((changed) && (local != -1)) + { + masterObjects[local].theObject.data.a.state = newState; + if (room == thisRoomNumber) + thisRoom->objects[object].data.a.state = newState; + if (newState) + PlayPrioritySound(kBlowerOn, kBlowerOnPriority); + else + PlayPrioritySound(kBlowerOff, kBlowerOffPriority); + if (masterObjects[local].hotNum != -1) + hotSpots[masterObjects[local].hotNum].isOn = newState; + } + break; + + case kTaper: + case kCandle: + case kStubby: + case kTiki: + case kBBQ: + changed = false; // Cannot switch on/off these + break; + + case kTable: + case kShelf: + case kCabinet: + case kFilingCabinet: + case kWasteBasket: + case kMilkCrate: + case kCounter: + case kDresser: + case kStool: + case kTrunk: + case kDeckTable: + case kInvisObstacle: + case kManhole: + case kBooks: + case kInvisBounce: + changed = false; // Cannot switch on/off these + break; + + case kRedClock: + case kBlueClock: + case kYellowClock: + case kCuckoo: + case kPaper: + case kBattery: + case kBands: + case kGreaseRt: + case kGreaseLf: + case kFoil: + case kInvisBonus: + case kStar: + case kSparkle: + case kHelium: + changed = ((*thisHouse)->rooms[room].objects[object].data.c.state == PL_TRUE); + newState = false; + (*thisHouse)->rooms[room].objects[object].data.c.state = newState; + if ((changed) && (local != -1)) + { + masterObjects[local].theObject.data.a.state = false; + if (room == thisRoomNumber) + { + thisRoom->objects[object].data.c.state = false; + if (masterObjects[local].hotNum != -1) + hotSpots[masterObjects[local].hotNum].isOn = false; + } + } + break; + + case kSlider: + break; + + case kUpStairs: + case kDownStairs: + case kMailboxLf: + case kMailboxRt: + case kFloorTrans: + case kCeilingTrans: + case kDoorInLf: + case kDoorInRt: + case kDoorExRt: + case kDoorExLf: + case kWindowInLf: + case kWindowInRt: + case kWindowExRt: + case kWindowExLf: + case kInvisTrans: + changed = false; + break; + + case kDeluxeTrans: + switch (action) + { + case kToggle: + newState = (*thisHouse)->rooms[room].objects[object].data.d.wide & 0x0F; + newState = !newState; + (*thisHouse)->rooms[room].objects[object].data.d.wide &= 0xF0; + (*thisHouse)->rooms[room].objects[object].data.d.wide += newState; + changed = true; + break; + + case kForceOn: + changed = (((*thisHouse)->rooms[room].objects[object].data.d.wide & 0x0F) == 0x00); + newState = true; + (*thisHouse)->rooms[room].objects[object].data.d.wide &= 0xF0; + (*thisHouse)->rooms[room].objects[object].data.d.wide += newState; + break; + + case kForceOff: + changed = (((*thisHouse)->rooms[room].objects[object].data.d.wide & 0x0F) != 0x00); + newState = false; + (*thisHouse)->rooms[room].objects[object].data.d.wide &= 0xF0; + (*thisHouse)->rooms[room].objects[object].data.d.wide += newState; + break; + } + if ((changed) && (local != -1)) + { + masterObjects[local].theObject.data.d.wide = + (*thisHouse)->rooms[room].objects[object].data.d.wide; + if (room == thisRoomNumber) + thisRoom->objects[object].data.d.wide = + (*thisHouse)->rooms[room].objects[object].data.d.wide; + if (masterObjects[local].hotNum != -1) + hotSpots[masterObjects[local].hotNum].isOn = newState; + } + break; + + case kLightSwitch: + case kMachineSwitch: + case kThermostat: + case kPowerSwitch: + case kInvisSwitch: + case kTrigger: + case kLgTrigger: + case kSoundTrigger: + changed = false; + break; + + case kCeilingLight: + case kLightBulb: + case kTableLamp: + case kHipLamp: + case kDecoLamp: + case kFlourescent: + case kTrackLight: + case kInvisLight: + switch (action) + { + case kToggle: + newState = !(*thisHouse)->rooms[room].objects[object].data.f.state; + (*thisHouse)->rooms[room].objects[object].data.f.state = newState; + changed = true; + break; + + case kForceOn: + changed = ((*thisHouse)->rooms[room].objects[object].data.f.state == false); + newState = true; + (*thisHouse)->rooms[room].objects[object].data.f.state = newState; + break; + + case kForceOff: + changed = ((*thisHouse)->rooms[room].objects[object].data.f.state == PL_TRUE); + newState = false; + (*thisHouse)->rooms[room].objects[object].data.f.state = newState; + break; + } + if ((changed) && (local != -1)) + { + masterObjects[local].theObject.data.f.state = newState; + if (room == thisRoomNumber) + thisRoom->objects[object].data.f.state = newState; + } + break; + + case kGuitar: // really no point to change this state + changed = false; + break; + + case kStereo: + newState = !isPlayMusicGame; + isPlayMusicGame = newState; + changed = true; + break; + + case kShredder: + case kToaster: + case kMacPlus: + case kTV: + case kCoffee: + case kOutlet: + case kVCR: + case kMicrowave: + switch (action) + { + case kToggle: + newState = !(*thisHouse)->rooms[room].objects[object].data.g.state; + (*thisHouse)->rooms[room].objects[object].data.g.state = newState; + changed = true; + break; + + case kForceOn: + changed = ((*thisHouse)->rooms[room].objects[object].data.g.state == false); + newState = true; + (*thisHouse)->rooms[room].objects[object].data.g.state = newState; + break; + + case kForceOff: + changed = ((*thisHouse)->rooms[room].objects[object].data.g.state == PL_TRUE); + newState = false; + (*thisHouse)->rooms[room].objects[object].data.g.state = newState; + break; + } + if ((changed) && (local != -1)) + { + masterObjects[local].theObject.data.g.state = newState; + if (room == thisRoomNumber) + { + thisRoom->objects[object].data.g.state = newState; + if ((*thisHouse)->rooms[room].objects[object].what == kShredder) + hotSpots[masterObjects[local].hotNum].isOn = newState; + } + } + break; + + case kCinderBlock: + case kFlowerBox: + case kCDs: + case kCustomPict: + changed = false; + break; + + case kBalloon: + case kCopterLf: + case kCopterRt: + case kDartLf: + case kDartRt: + case kBall: + case kDrip: + case kFish: + switch (action) + { + case kToggle: + newState = !(*thisHouse)->rooms[room].objects[object].data.h.state; + (*thisHouse)->rooms[room].objects[object].data.h.state = newState; + changed = true; + break; + + case kForceOn: + changed = ((*thisHouse)->rooms[room].objects[object].data.h.state == false); + newState = true; + (*thisHouse)->rooms[room].objects[object].data.h.state = newState; + break; + + case kForceOff: + changed = ((*thisHouse)->rooms[room].objects[object].data.h.state == PL_TRUE); + newState = false; + (*thisHouse)->rooms[room].objects[object].data.h.state = newState; + break; + } + if ((changed) && (local != -1)) + { + masterObjects[local].theObject.data.h.state = newState; + if (room == thisRoomNumber) + thisRoom->objects[object].data.h.state = newState; + } + break; + + case kCobweb: + changed = false; + break; + + case kOzma: + case kMirror: + case kMousehole: + case kFireplace: + case kFlower: + case kWallWindow: + case kBear: + case kCalendar: + case kVase1: + case kVase2: + case kBulletin: + case kCloud: + case kFaucet: + case kRug: + case kChimes: + changed = false; + break; + + } + HSetState((Handle)thisHouse, wasState); + + return (changed); +} + +//-------------------------------------------------------------- GetObjectState + +Boolean GetObjectState (short room, short object) +{ + char wasState; + Boolean theState; + + theState = true; + + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + switch ((*thisHouse)->rooms[room].objects[object].what) + { + case kFloorVent: + case kCeilingVent: + case kFloorBlower: + case kCeilingBlower: + case kLeftFan: + case kRightFan: + case kSewerGrate: + case kInvisBlower: + case kGrecoVent: + case kSewerBlower: + case kLiftArea: + theState = (*thisHouse)->rooms[room].objects[object].data.a.state; + break; + + case kTaper: + case kCandle: + case kStubby: + case kTiki: + case kBBQ: + break; + + case kTable: + case kShelf: + case kCabinet: + case kFilingCabinet: + case kWasteBasket: + case kMilkCrate: + case kCounter: + case kDresser: + case kDeckTable: + case kStool: + case kTrunk: + case kInvisObstacle: + case kManhole: + case kBooks: + case kInvisBounce: + break; + + case kRedClock: + case kBlueClock: + case kYellowClock: + case kCuckoo: + case kPaper: + case kBattery: + case kBands: + case kGreaseRt: + case kGreaseLf: + case kFoil: + case kInvisBonus: + case kStar: + case kSparkle: + case kHelium: + theState = (*thisHouse)->rooms[room].objects[object].data.c.state; + break; + + case kSlider: + break; + + case kUpStairs: + case kDownStairs: + case kMailboxLf: + case kMailboxRt: + case kFloorTrans: + case kCeilingTrans: + case kDoorInLf: + case kDoorInRt: + case kDoorExRt: + case kDoorExLf: + case kWindowInLf: + case kWindowInRt: + case kWindowExRt: + case kWindowExLf: + case kInvisTrans: + break; + + case kDeluxeTrans: + theState = (*thisHouse)->rooms[room].objects[object].data.d.wide & 0x0F; + break; + + case kLightSwitch: + case kMachineSwitch: + case kThermostat: + case kPowerSwitch: + case kInvisSwitch: + case kTrigger: + case kLgTrigger: + case kSoundTrigger: + break; + + case kCeilingLight: + case kLightBulb: + case kTableLamp: + case kHipLamp: + case kDecoLamp: + case kFlourescent: + case kTrackLight: + case kInvisLight: + theState = (*thisHouse)->rooms[room].objects[object].data.f.state; + break; + + case kStereo: + theState = isPlayMusicGame; + break; + + case kShredder: + case kToaster: + case kMacPlus: + case kGuitar: + case kTV: + case kCoffee: + case kOutlet: + case kVCR: + case kMicrowave: + theState = (*thisHouse)->rooms[room].objects[object].data.g.state; + break; + + case kCinderBlock: + case kFlowerBox: + case kCDs: + case kCustomPict: + break; + + case kBalloon: + case kCopterLf: + case kCopterRt: + case kDartLf: + case kDartRt: + case kBall: + case kDrip: + case kFish: + theState = (*thisHouse)->rooms[room].objects[object].data.h.state; + break; + + case kCobweb: + break; + + case kOzma: + case kMirror: + case kMousehole: + case kFireplace: + case kFlower: + case kWallWindow: + case kBear: + case kCalendar: + case kVase1: + case kVase2: + case kBulletin: + case kCloud: + case kFaucet: + case kRug: + case kChimes: + break; + } + + HSetState((Handle)thisHouse, wasState); + + return (theState); +} + +//-------------------------------------------------------------- SendObjectToBack + +#ifndef COMPILEDEMO +void BringSendFrontBack (Boolean bringFront) +{ + houseType *thisHousePtr; + objectType savedObject; + short numLinks, i; + short srcRoom, srcObj; + short sorting[kMaxRoomObs]; + short sorted[kMaxRoomObs]; + char wasState; + + if (bringFront) // No need to bring to frontÉ + { // or send to back if the objectÉ + if (objActive == (kMaxRoomObs - 1)) // in question is already front- + return; // most or backmost. + } + else + { + if (objActive == 0) + return; + } + + CopyThisRoomToRoom(); // Any changes to room writtenÉ + // back to the house handle. + numLinks = CountHouseLinks(); // Determine space needed for all links. + if (numLinks != 0) // Create links list of ALL house links. + { + linksList = nil; + linksList = (linksPtr)NewPtr(sizeof(linksType) * numLinks); + if (linksList == nil) + { + YellowAlert(kYellowCantOrderLinks, MemError()); + return; + } + GenerateLinksList(); // Fill in links list with src/destÉ + } // data on objects and room numbers. + + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); // Lock down house. + thisHousePtr = *thisHouse; // Get a pointer to house structure. + + for (i = 0; i < kMaxRoomObs; i++) // Set up an ordered array. + sorting[i] = i; + + savedObject = (*thisHouse)->rooms[thisRoomNumber].objects[objActive]; + + if (bringFront) + { + for (i = objActive; i < kMaxRoomObs - 1; i++) + { // Pull all objects down to fill hole. + (*thisHouse)->rooms[thisRoomNumber].objects[i] = + (*thisHouse)->rooms[thisRoomNumber].objects[i + 1]; + sorting[i] = sorting[i + 1]; + SpinCursor(2); + } + // Insert object at end of array. + (*thisHouse)->rooms[thisRoomNumber].objects[kMaxRoomObs - 1] = savedObject; + sorting[kMaxRoomObs - 1] = objActive; + } + else + { + for (i = objActive; i > 0; i--) + { // Move all objects up to fill hole. + (*thisHouse)->rooms[thisRoomNumber].objects[i] = + (*thisHouse)->rooms[thisRoomNumber].objects[i - 1]; + sorting[i] = sorting[i - 1]; + SpinCursor(2); + } + // Insert object at beginning of array. + (*thisHouse)->rooms[thisRoomNumber].objects[0] = savedObject; + sorting[0] = objActive; + } + + for (i = 0; i < kMaxRoomObs; i++) // Set up retro-ordered array. + sorted[sorting[i]] = i; + + for (i = 0; i < numLinks; i++) // Walk links list in order to assignÉ + { // corrected links to objects moved. + if (linksList[i].destRoom == thisRoomNumber) + { // Does link point to room we re-ordered? + srcRoom = linksList[i].srcRoom; // Room where-which an object is linked from. + if (srcRoom == thisRoomNumber) // Handle special case for local links. + srcObj = sorted[linksList[i].srcObj]; + else + srcObj = linksList[i].srcObj; + + switch ((*thisHouse)->rooms[srcRoom].objects[srcObj].what) + { + case kLightSwitch: + case kMachineSwitch: + case kThermostat: + case kPowerSwitch: + case kKnifeSwitch: + case kInvisSwitch: + case kTrigger: + case kLgTrigger: + (*thisHouse)->rooms[srcRoom].objects[srcObj].data.d.who = + sorted[linksList[i].destObj]; + break; + + default: + (*thisHouse)->rooms[srcRoom].objects[srcObj].data.e.who = + sorted[linksList[i].destObj]; + break; + } + } + } + + HSetState((Handle)thisHouse, wasState); + if (linksList != nil) + DisposePtr((Ptr)linksList); + + ForceThisRoom(thisRoomNumber); + + fileDirty = true; + UpdateMenus(false); + InvalWindowRect(mainWindow, &mainWindowRect); + DeselectObject(); + GetThisRoomsObjRects(); + ReadyBackground(thisRoom->background, thisRoom->tiles); + DrawThisRoomsObjects(); + GenerateRetroLinks(); + + InitCursor(); +} +#endif + diff --git a/GpApp/Objects.h b/GpApp/Objects.h new file mode 100644 index 0000000..32aa0aa --- /dev/null +++ b/GpApp/Objects.h @@ -0,0 +1,42 @@ +//============================================================================ +//---------------------------------------------------------------------------- +// Objects.h +//---------------------------------------------------------------------------- +//============================================================================ + + +extern GWorldPtr blowerSrcMap; +extern GWorldPtr blowerMaskMap; +extern GWorldPtr furnitureSrcMap; +extern GWorldPtr furnitureMaskMap; +extern GWorldPtr bonusSrcMap; +extern GWorldPtr bonusMaskMap; +extern GWorldPtr pointsSrcMap; +extern GWorldPtr pointsMaskMap; +extern GWorldPtr transSrcMap; +extern GWorldPtr transMaskMap; +extern GWorldPtr switchSrcMap; +extern GWorldPtr lightSrcMap; +extern GWorldPtr lightMaskMap; +extern GWorldPtr applianceSrcMap; +extern GWorldPtr applianceMaskMap; +extern GWorldPtr toastSrcMap; +extern GWorldPtr toastMaskMap; +extern GWorldPtr shredSrcMap; +extern GWorldPtr shredMaskMap; +extern GWorldPtr balloonSrcMap; +extern GWorldPtr balloonMaskMap; +extern GWorldPtr copterSrcMap; +extern GWorldPtr copterMaskMap; +extern GWorldPtr dartSrcMap; +extern GWorldPtr dartMaskMap; +extern GWorldPtr ballSrcMap; +extern GWorldPtr ballMaskMap; +extern GWorldPtr dripSrcMap; +extern GWorldPtr dripMaskMap; +extern GWorldPtr enemySrcMap; +extern GWorldPtr enemyMaskMap; +extern GWorldPtr fishSrcMap; +extern GWorldPtr fishMaskMap; +extern GWorldPtr clutterSrcMap; +extern GWorldPtr clutterMaskMap; diff --git a/GpApp/Play.cpp b/GpApp/Play.cpp new file mode 100644 index 0000000..f5a87d3 --- /dev/null +++ b/GpApp/Play.cpp @@ -0,0 +1,821 @@ + +//============================================================================ +//---------------------------------------------------------------------------- +// Play.c +//---------------------------------------------------------------------------- +//============================================================================ + + +#include "PLResources.h" +#include "Externs.h" +#include "Environ.h" +#include "House.h" +#include "MainWindow.h" +#include "RectUtils.h" +#include "Scoreboard.h" + + +#define kHouseBannerAlert 1009 +#define kInitialGliders 2 +#define kRingDelay 90 +#define kRingSpread 25000 // 25000 +#define kRingBaseDelay 5000 // 5000 +#define kChimeDelay 180 + + +typedef struct +{ + short nextRing; + short rings; + short delay; +} phoneType, *phonePtr; + + +void InitGlider (gliderPtr, short); +void SetHouseToFirstRoom (void); +void SetHouseToSavedRoom (void); +void HandlePlayEvent (void); +void PlayGame (void); +void HandleRoomVisitation (void); +void SetObjectsToDefaults (void); +void InitTelephone (void); +void HandleTelephone (void); +Boolean DoesStarCodeExist (short); +short GetNumStarsRemaining (short, short); + + +phoneType thePhone, theChimes; +Rect glidSrcRect, justRoomsRect; +GWorldPtr glidSrcMap, glid2SrcMap; +GWorldPtr glidMaskMap; +long gameFrame; +short batteryTotal, bandsTotal, foilTotal, mortals; +Boolean playing, evenFrame, twoPlayerGame, showFoil, demoGoing; +Boolean doBackground, playerSuicide, phoneBitSet, tvOn; + +extern WindowPtr menuWindow; +extern FSSpecPtr theHousesSpecs; +extern demoPtr demoData; +extern gameType smallGame; +extern Rect gliderSrc[kNumGliderSrcRects]; +extern Rect boardDestRect, boardSrcRect; +extern long incrementModeTime; +extern short numBands, otherPlayerEscaped, demoIndex, demoHouseIndex; +extern short splashOriginH, splashOriginV, countDown, thisHouseIndex; +extern short numStarsRemaining, numChimes, saidFollow; +extern Boolean quitting, isMusicOn, gameOver, hasMirror, onePlayerLeft; +extern Boolean isPlayMusicIdle, failedMusic, quickerTransitions; +extern Boolean switchedOut; + + +//============================================================== Functions +//-------------------------------------------------------------- NewGame + +void NewGame (short mode) +{ + Rect tempRect; + Size freeBytes, growBytes; + OSErr theErr; + Boolean wasPlayMusicPref; + + AdjustScoreboardHeight(); + gameOver = false; + theMode = kPlayMode; + if (isPlayMusicGame) + { + if (!isMusicOn) + { + theErr = StartMusic(); + if (theErr != noErr) + { + YellowAlert(kYellowNoMusic, theErr); + failedMusic = true; + } + } + SetMusicalMode(kPlayGameScoreMode); + } + else + { + if (isMusicOn) + StopTheMusic(); + } + if (mode != kResumeGameMode) + SetObjectsToDefaults(); + HideCursor(); + if (mode == kResumeGameMode) + SetHouseToSavedRoom(); + else if (mode == kNewGameMode) + SetHouseToFirstRoom(); + DetermineRoomOpenings(); + NilSavedMaps(); + + gameFrame = 0L; + numBands = 0; + demoIndex = 0; + saidFollow = 0; + otherPlayerEscaped = kNoOneEscaped; + onePlayerLeft = false; + playerSuicide = false; + + if (twoPlayerGame) // initialize glider(s) + { + InitGlider(&theGlider, kNewGameMode); + InitGlider(&theGlider2, kNewGameMode); + SetPort((GrafPtr)glidSrcMap); + LoadGraphic(kGliderPictID); + SetPort((GrafPtr)glid2SrcMap); + LoadGraphic(kGlider2PictID); + } + else + { + InitGlider(&theGlider, mode); + SetPort((GrafPtr)glidSrcMap); + LoadGraphic(kGliderPictID); + SetPort((GrafPtr)glid2SrcMap); + LoadGraphic(kGliderFoilPictID); + } + +#if !BUILD_ARCADE_VERSION +// HideMenuBarOld(); // TEMP +#endif + + SetPort((GrafPtr)mainWindow); // paint strip on screen black + tempRect = thisMac.screen; + tempRect.top = tempRect.bottom - 20; // thisMac.menuHigh + PaintRect(&tempRect); + +#ifdef COMPILEQT + if ((thisMac.hasQT) && (hasMovie)) + { + SetMovieGWorld(theMovie, (CGrafPtr)mainWindow, nil); + } +#endif + + SetPort((GrafPtr)workSrcMap); + PaintRect(&workSrcRect); +// if (quickerTransitions) +// DissBitsChunky(&workSrcRect); +// else +// DissBits(&workSrcRect); + +// DebugStr("\pIf screen isn't black, exit to shell."); // TEMP TEMP TEMP + + DrawLocale(); + RefreshScoreboard(kNormalTitleMode); +// if (quickerTransitions) +// DissBitsChunky(&justRoomsRect); +// else +// DissBits(&justRoomsRect); + if (mode == kNewGameMode) + { + BringUpBanner(); + DumpScreenOn(&justRoomsRect); + } + else if (mode == kResumeGameMode) + { + DisplayStarsRemaining(); + DumpScreenOn(&justRoomsRect); + } + else + { + DumpScreenOn(&justRoomsRect); + } + + InitGarbageRects(); + StartGliderFadingIn(&theGlider); + if (twoPlayerGame) + { + StartGliderFadingIn(&theGlider2); + TagGliderIdle(&theGlider2); + theGlider2.dontDraw = true; + } + InitTelephone(); + wasPlayMusicPref = isPlayMusicGame; + + freeBytes = MaxMem(&growBytes); + +#ifdef CREATEDEMODATA + SysBeep(1); +#endif + +#ifdef COMPILEQT + if ((thisMac.hasQT) && (hasMovie) && (tvInRoom)) + { + SetMovieActive(theMovie, true); + if (tvOn) + { + StartMovie(theMovie); + MoviesTask(theMovie, 0); + } + } +#endif + + playing = true; // everything before this line is game set-up + PlayGame(); // everything following is after a game has ended + +#ifdef CREATEDEMODATA + DumpToResEditFile((Ptr)demoData, sizeof(demoType) * (long)demoIndex); +#endif + + isPlayMusicGame = wasPlayMusicPref; + ZeroMirrorRegion(); + +#ifdef COMPILEQT + if ((thisMac.hasQT) && (hasMovie) && (tvInRoom)) + { + tvInRoom = false; + StopMovie(theMovie); + SetMovieActive(theMovie, false); + } +#endif + + twoPlayerGame = false; + theMode = kSplashMode; + InitCursor(); + if (isPlayMusicIdle) + { + if (!isMusicOn) + { + theErr = StartMusic(); + if (theErr != noErr) + { + YellowAlert(kYellowNoMusic, theErr); + failedMusic = true; + } + } + SetMusicalMode(kPlayWholeScoreMode); + } + else + { + if (isMusicOn) + StopTheMusic(); + } + NilSavedMaps(); + SetPortWindowPort(mainWindow); + BlackenScoreboard(); + UpdateMenus(false); + + if (!gameOver) + { + CGrafPtr wasCPort; + GDHandle wasWorld; + + GetGWorld(&wasCPort, &wasWorld); + + InvalWindowRect(mainWindow, &mainWindowRect); + + SetGWorld(workSrcMap, nil); + PaintRect(&workSrcRect); + QSetRect(&tempRect, 0, 0, 640, 460); + QOffsetRect(&tempRect, splashOriginH, splashOriginV); + LoadScaledGraphic(kSplash8BitPICT, &tempRect); + + SetGWorld(wasCPort, wasWorld); + } + WaitCommandQReleased(); + demoGoing = false; + incrementModeTime = TickCount() + kIdleSplashTicks; +} + +//-------------------------------------------------------------- DoDemoGame + +void DoDemoGame (void) +{ + short wasHouseIndex; + Boolean whoCares; + + wasHouseIndex = thisHouseIndex; + whoCares = CloseHouse(); + thisHouseIndex = demoHouseIndex; + PasStringCopy(theHousesSpecs[thisHouseIndex].name, thisHouseName); + if (OpenHouse()) + { + whoCares = ReadHouse(); + demoGoing = true; + NewGame(kNewGameMode); + } + whoCares = CloseHouse(); + thisHouseIndex = wasHouseIndex; + PasStringCopy(theHousesSpecs[thisHouseIndex].name, thisHouseName); + if (OpenHouse()) + whoCares = ReadHouse(); + incrementModeTime = TickCount() + kIdleSplashTicks; +} + +//-------------------------------------------------------------- InitGlider + +void InitGlider (gliderPtr thisGlider, short mode) +{ + WhereDoesGliderBegin(&thisGlider->dest, mode); + + if (mode == kResumeGameMode) + numStarsRemaining = smallGame.wasStarsLeft; + else if (mode == kNewGameMode) + numStarsRemaining = CountStarsInHouse(); + + if (mode == kResumeGameMode) + { + theScore = smallGame.score; + mortals = smallGame.numGliders; + batteryTotal = smallGame.energy; + bandsTotal = smallGame.bands; + foilTotal = smallGame.foil; + thisGlider->mode = smallGame.gliderState; + thisGlider->facing = smallGame.facing; + showFoil = smallGame.showFoil; + + switch (thisGlider->mode) + { + case kGliderBurning: + FlagGliderBurning(thisGlider); + break; + + default: + FlagGliderNormal(thisGlider); + break; + } + } + else + { + theScore = 0L; + mortals = kInitialGliders; + if (twoPlayerGame) + mortals += kInitialGliders; + batteryTotal = 0; + bandsTotal = 0; + foilTotal = 0; + thisGlider->mode = kGliderNormal; + thisGlider->facing = kFaceRight; + thisGlider->src = gliderSrc[0]; + thisGlider->mask = gliderSrc[0]; + showFoil = false; + } + + QSetRect(&thisGlider->destShadow, 0, 0, kGliderWide, kShadowHigh); + QOffsetRect(&thisGlider->destShadow, thisGlider->dest.left, kShadowTop); + thisGlider->wholeShadow = thisGlider->destShadow; + + thisGlider->hVel = 0; + thisGlider->vVel = 0; + thisGlider->hDesiredVel = 0; + thisGlider->vDesiredVel = 0; + + thisGlider->tipped = false; + thisGlider->sliding = false; + thisGlider->dontDraw = false; +} + +//-------------------------------------------------------------- SetHouseToFirstRoom + +void SetHouseToFirstRoom (void) +{ + short firstRoom; + + firstRoom = GetFirstRoomNumber(); + ForceThisRoom(firstRoom); +} + +//-------------------------------------------------------------- SetHouseToSavedRoom + +void SetHouseToSavedRoom (void) +{ + ForceThisRoom(smallGame.roomNumber); +} + +//-------------------------------------------------------------- HandlePlayEvent + +void HandlePlayEvent (void) +{ + EventRecord theEvent; + GrafPtr wasPort; + long sleep = 2; + + if (WaitNextEvent(everyEvent, &theEvent, sleep, nil)) + { + if ((theEvent.what == updateEvt) && + ((WindowPtr)theEvent.message == mainWindow)) + { + GetPort(&wasPort); + SetPortWindowPort(mainWindow); + BeginUpdate(mainWindow); + CopyBits((BitMap *)*GetGWorldPixMap(workSrcMap), + GetPortBitMapForCopyBits(GetWindowPort(mainWindow)), + &justRoomsRect, &justRoomsRect, srcCopy, nil); + RefreshScoreboard(kNormalTitleMode); + EndUpdate(mainWindow); + SetPort(wasPort); + } + else if ((theEvent.what == osEvt) && (theEvent.message & 0x01000000)) + { + if (theEvent.message & 0x00000001) // resume event + { + switchedOut = false; + ToggleMusicWhilePlaying(); + HideCursor(); +// HideMenuBarOld(); // TEMP + } + else // suspend event + { + InitCursor(); + switchedOut = true; + ToggleMusicWhilePlaying(); +// ShowMenuBarOld(); // TEMP replace with Carbon calls + } + } + } +} + +//-------------------------------------------------------------- PlayGame + +void PlayGame (void) +{ + while ((playing) && (!quitting)) + { + gameFrame++; + evenFrame = !evenFrame; + + if (doBackground) + { + do + { + HandlePlayEvent(); + } while (switchedOut); + } + + HandleTelephone(); + + if (twoPlayerGame) + { + HandleDynamics(); + if (!gameOver) + { + GetInput(&theGlider); + GetInput(&theGlider2); + HandleInteraction(); + } + HandleTriggers(); + HandleBands(); + if (!gameOver) + { + HandleGlider(&theGlider); + HandleGlider(&theGlider2); + } + if (playing) + { +#ifdef COMPILEQT + if ((thisMac.hasQT) && (hasMovie) && (tvInRoom) && (tvOn)) + MoviesTask(theMovie, 0); +#endif + RenderFrame(); + HandleDynamicScoreboard(); + } + } + else + { + HandleDynamics(); + if (!gameOver) + { + if (demoGoing) + GetDemoInput(&theGlider); + else + GetInput(&theGlider); + HandleInteraction(); + } + HandleTriggers(); + HandleBands(); + if (!gameOver) + HandleGlider(&theGlider); + if (playing) + { +#ifdef COMPILEQT + if ((thisMac.hasQT) && (hasMovie) && (tvInRoom) && (tvOn)) + MoviesTask(theMovie, 0); +#endif + RenderFrame(); + HandleDynamicScoreboard(); + } + } + + if (gameOver) + { + countDown--; + if (countDown <= 0) + { + CGrafPtr wasCPort; + GDHandle wasWorld; + + GetGWorld(&wasCPort, &wasWorld); + + HideGlider(&theGlider); + RefreshScoreboard(kNormalTitleMode); + +#if BUILD_ARCADE_VERSION + // Need to paint over the scoreboard black. + + SetGWorld(boardSrcMap, nil); + PaintRect(&boardSrcRect); + + CopyBits((BitMap *)*GetGWorldPixMap(boardSrcMap), + GetPortBitMapForCopyBits(GetWindowPort(mainWindow)), + &boardSrcRect, &boardDestRect, srcCopy, 0L); + + { + Rect bounds; + PicHandle thePicture; + SInt16 hOffset; + + if (boardSrcRect.right >= 640) + hOffset = (RectWide(&boardSrcRect) - kMaxViewWidth) / 2; + else + hOffset = -576; + thePicture = GetPicture(kScoreboardPictID); + if (!thePicture) + RedAlert(kErrFailedGraphicLoad); + HLock((Handle)thePicture); + bounds = (*thePicture)->picFrame; + HUnlock((Handle)thePicture); + QOffsetRect(&bounds, -bounds.left, -bounds.top); + QOffsetRect(&bounds, hOffset, 0); + DrawPicture(thePicture, &bounds); + ReleaseResource((Handle)thePicture); + } +#else +// ShowMenuBarOld(); // TEMP +#endif + + if (mortals < 0) + DoDiedGameOver(); + else + DoGameOver(); + + SetGWorld(wasCPort, wasWorld); + } + } + } + +#if BUILD_ARCADE_VERSION + { + CGrafPtr wasCPort; + GDHandle wasWorld; + + GetGWorld(&wasCPort, &wasWorld); + + SetGWorld(boardSrcMap, nil); + PaintRect(&boardSrcRect); + + CopyBits((BitMap *)*GetGWorldPixMap(boardSrcMap), + GetPortBitMapForCopyBits(GetWindowPort(mainWindow)), + &boardSrcRect, &boardDestRect, srcCopy, 0L); + + SetGWorld(wasCPort, wasWorld); + } + + { + Rect bounds; + PicHandle thePicture; + SInt16 hOffset; + + if (boardSrcRect.right >= 640) + hOffset = (RectWide(&boardSrcRect) - kMaxViewWidth) / 2; + else + hOffset = -576; + thePicture = GetPicture(kScoreboardPictID); + if (!thePicture) + RedAlert(kErrFailedGraphicLoad); + HLock((Handle)thePicture); + bounds = (*thePicture)->picFrame; + HUnlock((Handle)thePicture); + QOffsetRect(&bounds, -bounds.left, -bounds.top); + QOffsetRect(&bounds, hOffset, 0); + DrawPicture(thePicture, &bounds); + ReleaseResource((Handle)thePicture); + } + +#else + +// ShowMenuBarOld(); // TEMP + +#endif +} + +//-------------------------------------------------------------- SetObjectsToDefaults + +void SetObjectsToDefaults (void) +{ + houseType *thisHousePtr; + short numRooms; + short r, i; + char wasState; + Boolean initState; + + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + thisHousePtr = *thisHouse; + + numRooms = thisHousePtr->nRooms; + + for (r = 0; r < numRooms; r++) + { + thisHousePtr->rooms[r].visited = false; + for (i = 0; i < kMaxRoomObs; i++) + { + switch (thisHousePtr->rooms[r].objects[i].what) + { + case kFloorVent: + case kCeilingVent: + case kFloorBlower: + case kCeilingBlower: + case kLeftFan: + case kRightFan: + case kSewerGrate: + case kInvisBlower: + case kGrecoVent: + case kSewerBlower: + case kLiftArea: + thisHousePtr->rooms[r].objects[i].data.a.state = + thisHousePtr->rooms[r].objects[i].data.a.initial; + break; + + case kRedClock: + case kBlueClock: + case kYellowClock: + case kCuckoo: + case kPaper: + case kBattery: + case kBands: + case kGreaseRt: + case kGreaseLf: + case kFoil: + case kInvisBonus: + case kStar: + case kSparkle: + case kHelium: + thisHousePtr->rooms[r].objects[i].data.c.state = + thisHousePtr->rooms[r].objects[i].data.c.initial; + break; + + case kDeluxeTrans: + initState = (thisHousePtr->rooms[r].objects[i].data.d.wide & 0xF0) >> 4; + thisHousePtr->rooms[r].objects[i].data.d.wide &= 0xF0; + thisHousePtr->rooms[r].objects[i].data.d.wide += initState; + break; + + case kCeilingLight: + case kLightBulb: + case kTableLamp: + case kHipLamp: + case kDecoLamp: + case kFlourescent: + case kTrackLight: + case kInvisLight: + thisHousePtr->rooms[r].objects[i].data.f.state = + thisHousePtr->rooms[r].objects[i].data.f.initial; + break; + + case kStereo: + thisHousePtr->rooms[r].objects[i].data.g.state = isPlayMusicGame; + break; + + case kShredder: + case kToaster: + case kMacPlus: + case kGuitar: + case kTV: + case kCoffee: + case kOutlet: + case kVCR: + case kMicrowave: + thisHousePtr->rooms[r].objects[i].data.g.state = + thisHousePtr->rooms[r].objects[i].data.g.initial; + break; + + case kBalloon: + case kCopterLf: + case kCopterRt: + case kDartLf: + case kDartRt: + case kBall: + case kDrip: + case kFish: + thisHousePtr->rooms[r].objects[i].data.h.state = + thisHousePtr->rooms[r].objects[i].data.h.initial; + break; + + } + } + } + HSetState((Handle)thisHouse, wasState); +} + +//-------------------------------------------------------------- HideGlider + +void HideGlider (gliderPtr thisGlider) +{ + Rect tempRect; + + tempRect = thisGlider->whole; + QOffsetRect(&tempRect, playOriginH, playOriginV); + CopyRectWorkToMain(&tempRect); + + if (hasMirror) + { + QOffsetRect(&tempRect, -20, -16); + CopyRectWorkToMain(&tempRect); + } + + tempRect = thisGlider->wholeShadow; + QOffsetRect(&tempRect, playOriginH, playOriginV); + CopyRectWorkToMain(&tempRect); +} + +//-------------------------------------------------------------- InitTelephone + +void InitTelephone (void) +{ + thePhone.nextRing = RandomInt(kRingSpread) + kRingBaseDelay; + thePhone.rings = RandomInt(3) + 3; + thePhone.delay = kRingDelay; + + theChimes.nextRing = RandomInt(kChimeDelay) + 1; +} + +//-------------------------------------------------------------- HandleTelephone + +void HandleTelephone (void) +{ + short delayTime; + + if (!phoneBitSet) + { + if (thePhone.nextRing == 0) + { + if (thePhone.delay == 0) + { + thePhone.delay = kRingDelay; + PlayPrioritySound(kPhoneRingSound, kPhoneRingPriority); + thePhone.rings--; + if (thePhone.rings == 0) + { + thePhone.nextRing = RandomInt(kRingSpread) + kRingBaseDelay; + thePhone.rings = RandomInt(3) + 3; + } + } + else + thePhone.delay--; + } + else + thePhone.nextRing--; + } + // handle also the wind chimes (if they are present) + + if (numChimes > 0) + { + if (theChimes.nextRing == 0) + { + if (RandomInt(2) == 0) + PlayPrioritySound(kChime1Sound, kChime1Priority); + else + PlayPrioritySound(kChime2Sound, kChime2Priority); + + delayTime = kChimeDelay / numChimes; + if (delayTime < 2) + delayTime = 2; + + theChimes.nextRing = RandomInt(delayTime) + 1; + } + else + theChimes.nextRing--; + } +} + +//-------------------------------------------------------------- StrikeChime + +void StrikeChime (void) +{ + theChimes.nextRing = 0; +} + +//-------------------------------------------------------------- RestoreEntireGameScreen + +void RestoreEntireGameScreen (void) +{ + Rect tempRect; + + HideCursor(); + +#if !BUILD_ARCADE_VERSION +// HideMenuBarOld(); // TEMP +#endif + + SetPort((GrafPtr)mainWindow); + tempRect = thisMac.screen; + PaintRect(&tempRect); + + DrawLocale(); + RefreshScoreboard(kNormalTitleMode); +// if (quickerTransitions) +// DissBitsChunky(&justRoomsRect); +// else +// DissBits(&justRoomsRect); +} + diff --git a/GpApp/Play.h b/GpApp/Play.h new file mode 100644 index 0000000..2851a12 --- /dev/null +++ b/GpApp/Play.h @@ -0,0 +1,13 @@ +//============================================================================ +//---------------------------------------------------------------------------- +// Play.h +//---------------------------------------------------------------------------- +//============================================================================ + + +#include "PLQDOffscreen.h" + + +extern GWorldPtr glidSrcMap; +extern GWorldPtr glid2SrcMap; +extern GWorldPtr glidMaskMap; diff --git a/GpApp/Player.cpp b/GpApp/Player.cpp new file mode 100644 index 0000000..1e9597f --- /dev/null +++ b/GpApp/Player.cpp @@ -0,0 +1,1605 @@ +//============================================================================ +//---------------------------------------------------------------------------- +// Player.c +//---------------------------------------------------------------------------- +//============================================================================ + + +#include "Externs.h" +#include "Play.h" +#include "RectUtils.h" + + +#define kGravity 3 +#define kHImpulse 2 +#define kVImpulse 2 +#define kMaxHVel 16 +#define kShredderCountdown -68 + + +void MoveGlider (gliderPtr); +void MoveGliderNormal (gliderPtr); +void MoveGliderBurning (gliderPtr); +void FadeGliderIn (gliderPtr); +void TransportGliderIn (gliderPtr); +void FadeGliderOut (gliderPtr); +void MoveGliderUpStairs (gliderPtr); +void MoveGliderDownStairs (gliderPtr); +void MoveGliderFaceLeft (gliderPtr); +void MoveGliderFaceRight (gliderPtr); +void TransportGliderOut (gliderPtr); +void MoveGliderDownDuct (gliderPtr); +void MoveGliderUpDuct (gliderPtr); +void MoveGliderInMailLeft (gliderPtr); +void MoveGliderInMailRight (gliderPtr); +void FinishGliderMailingLeft (gliderPtr); +void FinishGliderMailingRight (gliderPtr); +void MoveGliderFoilGoing (gliderPtr); +void MoveGliderFoilLosing (gliderPtr); +void MoveGliderShredding (gliderPtr); +void HandleIdleGlider (gliderPtr); + + +gliderType theGlider, theGlider2; +Rect shadowSrcRect; +GWorldPtr shadowSrcMap; +GWorldPtr shadowMaskMap; +Rect shadowSrc[kNumShadowSrcRects]; +Rect gliderSrc[kNumGliderSrcRects]; +Rect transRect; +long theScore; +short fadeInSequence[kLastFadeSequence]; +short rightClip, leftClip, transRoom; +Boolean shadowVisible, onePlayerLeft, playerDead; + + +extern short numShredded, otherPlayerEscaped; +extern Boolean playing, twoPlayerGame, gameOver, hasMirror; +extern Boolean takingTheStairs, playerSuicide; + + +//============================================================== Functions +//-------------------------------------------------------------- MoveGlider + +void MoveGlider (gliderPtr thisGlider) +{ + if (thisGlider->hVel > thisGlider->hDesiredVel) + { + thisGlider->hVel -= kHImpulse; + if (thisGlider->hVel < thisGlider->hDesiredVel) + thisGlider->hVel = thisGlider->hDesiredVel; + } + else if (thisGlider->hVel < thisGlider->hDesiredVel) + { + thisGlider->hVel += kHImpulse; + if (thisGlider->hVel > thisGlider->hDesiredVel) + thisGlider->hVel = thisGlider->hDesiredVel; + } + thisGlider->hDesiredVel = 0; + + if (thisGlider->vVel > thisGlider->vDesiredVel) + { + thisGlider->vVel -= kVImpulse; + if (thisGlider->vVel < thisGlider->vDesiredVel) + thisGlider->vVel = thisGlider->vDesiredVel; + } + else if (thisGlider->vVel < thisGlider->vDesiredVel) + { + thisGlider->vVel += kVImpulse; + if (thisGlider->vVel > thisGlider->vDesiredVel) + thisGlider->vVel = thisGlider->vDesiredVel; + } + thisGlider->vDesiredVel = kGravity; + + if (thisGlider->hVel < 0) + { + if (thisGlider->hVel < -kMaxHVel) + thisGlider->hVel = -kMaxHVel; + + thisGlider->wasHVel = thisGlider->hVel; + + thisGlider->whole.right = thisGlider->dest.right; + thisGlider->dest.left += thisGlider->hVel; + thisGlider->dest.right += thisGlider->hVel; + thisGlider->whole.left = thisGlider->dest.left; + + thisGlider->wholeShadow.right = thisGlider->destShadow.right; + thisGlider->destShadow.left += thisGlider->hVel; + thisGlider->destShadow.right += thisGlider->hVel; + thisGlider->wholeShadow.left = thisGlider->destShadow.left; + } + else + { + if (thisGlider->hVel > kMaxHVel) + thisGlider->hVel = kMaxHVel; + + thisGlider->wasHVel = thisGlider->hVel; + + thisGlider->whole.left = thisGlider->dest.left; + thisGlider->dest.left += thisGlider->hVel; + thisGlider->dest.right += thisGlider->hVel; + thisGlider->whole.right = thisGlider->dest.right; + + thisGlider->wholeShadow.left = thisGlider->destShadow.left; + thisGlider->destShadow.left += thisGlider->hVel; + thisGlider->destShadow.right += thisGlider->hVel; + thisGlider->wholeShadow.right = thisGlider->destShadow.right; + } + + if (thisGlider->vVel < 0) + { + thisGlider->wasVVel = thisGlider->vVel; + + thisGlider->whole.bottom = thisGlider->dest.bottom; + thisGlider->dest.top += thisGlider->vVel; + thisGlider->dest.bottom += thisGlider->vVel; + thisGlider->whole.top = thisGlider->dest.top; + } + else + { + thisGlider->wasVVel = thisGlider->vVel; + + thisGlider->whole.top = thisGlider->dest.top; + thisGlider->dest.top += thisGlider->vVel; + thisGlider->dest.bottom += thisGlider->vVel; + thisGlider->whole.bottom = thisGlider->dest.bottom; + } +} + +//-------------------------------------------------------------- MoveGliderNormal + +void MoveGliderNormal (gliderPtr thisGlider) +{ + if (thisGlider->facing == kFaceLeft) + { + if (thisGlider->sliding) + { + thisGlider->src = gliderSrc[30]; + thisGlider->mask = gliderSrc[30]; + thisGlider->sliding = false; + } + else + { + if (thisGlider->tipped) + { + thisGlider->src = gliderSrc[3]; + thisGlider->mask = gliderSrc[3]; + } + else + { + thisGlider->src = gliderSrc[2]; + thisGlider->mask = gliderSrc[2]; + } + } + } + else + { + if (thisGlider->sliding) + { + thisGlider->src = gliderSrc[29]; + thisGlider->mask = gliderSrc[29]; + thisGlider->sliding = false; + } + else + { + if (thisGlider->tipped) + { + thisGlider->src = gliderSrc[1]; + thisGlider->mask = gliderSrc[1]; + } + else + { + thisGlider->src = gliderSrc[0]; + thisGlider->mask = gliderSrc[0]; + } + } + } + + MoveGlider(thisGlider); +} + +//-------------------------------------------------------------- MoveGliderBurning + +void MoveGliderBurning (gliderPtr thisGlider) +{ + thisGlider->frame++; + if (thisGlider->frame > 3) + thisGlider->frame = 0; + + if (thisGlider->facing == kFaceLeft) + { + thisGlider->src = gliderSrc[25 + thisGlider->frame]; + thisGlider->mask = gliderSrc[25 + thisGlider->frame]; + } + else + { + thisGlider->src = gliderSrc[21 + thisGlider->frame]; + thisGlider->mask = gliderSrc[21 + thisGlider->frame]; + } + + thisGlider->wasMode--; + if (thisGlider->wasMode <= 0) + { + StartGliderFadingOut(thisGlider); + PlayPrioritySound(kFadeOutSound, kFadeOutPriority); + } + MoveGlider(thisGlider); +} + +//-------------------------------------------------------------- FadeGliderIn + +void FadeGliderIn (gliderPtr thisGlider) +{ + if (thisGlider->frame == 0) + PlayPrioritySound(kFadeInSound, kFadeInPriority); + + thisGlider->frame++; + if (thisGlider->frame >= kLastFadeSequence) + { + FlagGliderNormal(thisGlider); + thisGlider->enteredRect = thisGlider->dest; + } + else + { + if (thisGlider->facing == kFaceLeft) + { + thisGlider->src = gliderSrc[fadeInSequence[thisGlider->frame] + + kLeftFadeOffset]; + thisGlider->mask = gliderSrc[fadeInSequence[thisGlider->frame] + + kLeftFadeOffset]; + } + else + { + thisGlider->src = gliderSrc[fadeInSequence[thisGlider->frame]]; + thisGlider->mask = gliderSrc[fadeInSequence[thisGlider->frame]]; + } + } +} + +//-------------------------------------------------------------- TransportGliderIn + +void TransportGliderIn (gliderPtr thisGlider) +{ + if (thisGlider->frame == 0) + PlayPrioritySound(kTransInSound, kTransInPriority); + + thisGlider->frame++; + if (thisGlider->frame >= kLastFadeSequence) + { + FlagGliderNormal(thisGlider); + thisGlider->enteredRect = thisGlider->dest; + } + else + { + if (thisGlider->facing == kFaceLeft) + { + thisGlider->src = gliderSrc[fadeInSequence[thisGlider->frame] + + kLeftFadeOffset]; + thisGlider->mask = gliderSrc[fadeInSequence[thisGlider->frame] + + kLeftFadeOffset]; + } + else + { + thisGlider->src = gliderSrc[fadeInSequence[thisGlider->frame]]; + thisGlider->mask = gliderSrc[fadeInSequence[thisGlider->frame]]; + } + } +} + +//-------------------------------------------------------------- FadeGliderOut + +void FadeGliderOut (gliderPtr thisGlider) +{ + thisGlider->frame--; + if (thisGlider->frame < 0) + OffAMortal(thisGlider); + else + { + if (thisGlider->facing == kFaceLeft) + { + thisGlider->src = gliderSrc[fadeInSequence[thisGlider->frame] + + kLeftFadeOffset]; + thisGlider->mask = gliderSrc[fadeInSequence[thisGlider->frame] + + kLeftFadeOffset]; + } + else + { + thisGlider->src = gliderSrc[fadeInSequence[thisGlider->frame]]; + thisGlider->mask = gliderSrc[fadeInSequence[thisGlider->frame]]; + } + } +} + +//-------------------------------------------------------------- MoveGliderUpStairs + +void MoveGliderUpStairs (gliderPtr thisGlider) +{ + #define kClimbStairsSpeed -4 + short vNotClipped; + + if (thisGlider->facing == kFaceLeft) + { + thisGlider->src = gliderSrc[2]; + thisGlider->mask = gliderSrc[2]; + } + else + { + thisGlider->src = gliderSrc[1]; + thisGlider->mask = gliderSrc[1]; + } + + thisGlider->whole.bottom = thisGlider->dest.bottom; + thisGlider->dest.top += kClimbStairsSpeed; + thisGlider->dest.bottom += kClimbStairsSpeed; + thisGlider->whole.top = thisGlider->dest.top; + + vNotClipped = thisGlider->dest.bottom - 29; + if (vNotClipped < kGliderHigh) + { + if (vNotClipped <= 0) + { + thisGlider->dest.top = thisGlider->dest.bottom; + thisGlider->src.top = thisGlider->src.bottom; + thisGlider->mask.top = thisGlider->mask.bottom; + takingTheStairs = true; + if (twoPlayerGame) + { + if (onePlayerLeft) + { + if (playerDead == kPlayer1) + MoveRoomToRoom(&theGlider2, kAbove); + else + MoveRoomToRoom(&theGlider, kAbove); + } + else + { + if (otherPlayerEscaped == kPlayerEscapedUpStairs) + { + otherPlayerEscaped = kNoOneEscaped; + MoveRoomToRoom(thisGlider, kAbove); + } + else + { + otherPlayerEscaped = kPlayerEscapedUpStairs; + RefreshScoreboard(kEscapedTitleMode); + FlagGliderInLimbo(thisGlider, true); + } + } + } + else + MoveRoomToRoom(thisGlider, kAbove); + } + else + { + thisGlider->dest.top = thisGlider->dest.bottom - vNotClipped; + thisGlider->src.top = thisGlider->src.bottom - vNotClipped; + thisGlider->mask.top = thisGlider->mask.bottom - vNotClipped; + } + } +} + +//-------------------------------------------------------------- FinishGliderUpStairs + +void FinishGliderUpStairs (gliderPtr thisGlider) +{ + #define kVClimbStairsSpeed -4 + #define kHClimbStairsSpeed -4 + short hNotClipped; + + thisGlider->src = gliderSrc[2]; + thisGlider->mask = gliderSrc[2]; + + thisGlider->whole.bottom = thisGlider->dest.bottom; + thisGlider->dest.top += kVClimbStairsSpeed; + thisGlider->dest.bottom += kVClimbStairsSpeed; + thisGlider->whole.top = thisGlider->dest.top; + + thisGlider->whole.right = thisGlider->dest.right; + thisGlider->dest.left += kHClimbStairsSpeed; + thisGlider->dest.right += kHClimbStairsSpeed; + thisGlider->whole.left = thisGlider->dest.left; + + thisGlider->wholeShadow.right = thisGlider->destShadow.right; + thisGlider->destShadow.left += kHClimbStairsSpeed; + thisGlider->destShadow.right += kHClimbStairsSpeed; + thisGlider->wholeShadow.left = thisGlider->destShadow.left; + + hNotClipped = rightClip - thisGlider->dest.left; + if (hNotClipped < kGliderWide) + { + thisGlider->dest.right = thisGlider->dest.left + hNotClipped; + thisGlider->src.right = thisGlider->src.left + hNotClipped; + thisGlider->mask.right = thisGlider->mask.left + hNotClipped; + thisGlider->destShadow.right = thisGlider->dest.right; + } + else + { + if (thisGlider->frame == kWasBurning) + FlagGliderBurning(thisGlider); + else + FlagGliderNormal(thisGlider); + thisGlider->hVel = kHClimbStairsSpeed; + thisGlider->hDesiredVel = kHClimbStairsSpeed; + thisGlider->vVel = kVClimbStairsSpeed; + thisGlider->vDesiredVel = kVClimbStairsSpeed; + thisGlider->enteredRect = thisGlider->dest; + } +} + +//-------------------------------------------------------------- MoveGliderDownStairs + +void MoveGliderDownStairs (gliderPtr thisGlider) +{ + #define kVDropStairsSpeed 4 + #define kHDropStairsSpeed 4 + short hNotClipped; + + if (thisGlider->facing == kFaceLeft) + { + thisGlider->src = gliderSrc[2]; + thisGlider->mask = gliderSrc[2]; + } + else + { + thisGlider->src = gliderSrc[0]; + thisGlider->mask = gliderSrc[0]; + } + + thisGlider->whole.left = thisGlider->dest.left; + thisGlider->dest.left += kHDropStairsSpeed; + thisGlider->dest.right += kHDropStairsSpeed; + thisGlider->whole.right = thisGlider->dest.right; + + thisGlider->wholeShadow.left = thisGlider->destShadow.left; + thisGlider->destShadow.left += kHDropStairsSpeed; + thisGlider->destShadow.right += kHDropStairsSpeed; + thisGlider->wholeShadow.right = thisGlider->destShadow.right; + + thisGlider->whole.top = thisGlider->dest.top; + thisGlider->dest.top += kVDropStairsSpeed; + thisGlider->dest.bottom += kVDropStairsSpeed; + thisGlider->whole.bottom = thisGlider->dest.bottom; + + hNotClipped = rightClip - thisGlider->dest.left; + if (hNotClipped < kGliderWide) + { + if (hNotClipped <= 0) + { + thisGlider->dest.right = thisGlider->dest.left; + thisGlider->src.right = thisGlider->src.left; + thisGlider->mask.right = thisGlider->mask.left; + thisGlider->destShadow.right = thisGlider->dest.right; + takingTheStairs = true; + if (twoPlayerGame) + { + if (onePlayerLeft) + { + if (playerDead == kPlayer1) + MoveRoomToRoom(&theGlider2, kBelow); + else + MoveRoomToRoom(&theGlider, kBelow); + } + else + { + if (otherPlayerEscaped == kPlayerEscapedDownStairs) + { + otherPlayerEscaped = kNoOneEscaped; + MoveRoomToRoom(thisGlider, kBelow); + } + else + { + otherPlayerEscaped = kPlayerEscapedDownStairs; + RefreshScoreboard(kEscapedTitleMode); + FlagGliderInLimbo(thisGlider, true); + } + } + } + else + MoveRoomToRoom(thisGlider, kBelow); + } + else + { + thisGlider->dest.right = thisGlider->dest.left + hNotClipped; + thisGlider->src.right = thisGlider->src.left + hNotClipped; + thisGlider->mask.right = thisGlider->mask.left + hNotClipped; + thisGlider->destShadow.right = thisGlider->dest.right; + } + } +} + +//-------------------------------------------------------------- FinishGliderDownStairs + +void FinishGliderDownStairs (gliderPtr thisGlider) +{ + #define kVDropStairsSpeed 4 + #define kHDropStairsSpeed 4 + short hNotClipped; + + thisGlider->src = gliderSrc[0]; + thisGlider->mask = gliderSrc[0]; + + thisGlider->whole.left = thisGlider->dest.left; + thisGlider->dest.left += kHDropStairsSpeed; + thisGlider->dest.right += kHDropStairsSpeed; + thisGlider->whole.right = thisGlider->dest.right; + + thisGlider->wholeShadow.left = thisGlider->destShadow.left; + thisGlider->destShadow.left += kHDropStairsSpeed; + thisGlider->destShadow.right += kHDropStairsSpeed; + thisGlider->wholeShadow.right = thisGlider->destShadow.right; + + thisGlider->whole.top = thisGlider->dest.top; + thisGlider->dest.top += kVDropStairsSpeed; + thisGlider->dest.bottom += kVDropStairsSpeed; + thisGlider->whole.bottom = thisGlider->dest.bottom; + + hNotClipped = thisGlider->dest.right - leftClip; + if (hNotClipped < kGliderWide) + { + thisGlider->dest.left = thisGlider->dest.right - hNotClipped; + thisGlider->src.left = thisGlider->src.right - hNotClipped; + thisGlider->mask.left = thisGlider->mask.right - hNotClipped; + thisGlider->destShadow.left = thisGlider->dest.left; + } + else + { + if (thisGlider->frame == kWasBurning) + FlagGliderBurning(thisGlider); + else + FlagGliderNormal(thisGlider); + thisGlider->hVel = kHDropStairsSpeed; + thisGlider->hDesiredVel = kHDropStairsSpeed; + thisGlider->vVel = kVDropStairsSpeed; + thisGlider->vDesiredVel = kVDropStairsSpeed; + thisGlider->enteredRect = thisGlider->dest; + } +} + +//-------------------------------------------------------------- MoveGliderFaceLeft + +void MoveGliderFaceLeft (gliderPtr thisGlider) +{ + thisGlider->src = gliderSrc[thisGlider->frame]; + thisGlider->mask = gliderSrc[thisGlider->frame]; + + MoveGlider(thisGlider); + + thisGlider->frame--; + if (thisGlider->frame < kFirstAboutFaceFrame) + { + thisGlider->mode = kGliderNormal; + thisGlider->facing = kFaceLeft; + } +} + +//-------------------------------------------------------------- MoveGliderFaceRight + +void MoveGliderFaceRight (gliderPtr thisGlider) +{ + thisGlider->src = gliderSrc[thisGlider->frame]; + thisGlider->mask = gliderSrc[thisGlider->frame]; + + MoveGlider(thisGlider); + + thisGlider->frame++; + if (thisGlider->frame > kLastAboutFaceFrame) + { + thisGlider->mode = kGliderNormal; + thisGlider->facing = kFaceRight; + } +} + +//-------------------------------------------------------------- TransportGliderOut + +void TransportGliderOut (gliderPtr thisGlider) +{ + Rect tempRect; + + thisGlider->frame--; + if (thisGlider->frame < 0) + { + tempRect = thisGlider->whole; + QOffsetRect(&tempRect, playOriginH, playOriginV); + CopyRectWorkToMain(&tempRect); + tempRect = thisGlider->wholeShadow; + QOffsetRect(&tempRect, playOriginH, playOriginV); + CopyRectWorkToMain(&tempRect); + thisGlider->dontDraw = true; + + if (twoPlayerGame) + { + if (onePlayerLeft) + { + if (playerDead == kPlayer1) + TransportRoomToRoom(&theGlider2); + else + TransportRoomToRoom(&theGlider); + } + else + { + if (otherPlayerEscaped == kPlayerTransportedOut) + { + otherPlayerEscaped = kNoOneEscaped; + TransportRoomToRoom(thisGlider); + } + else + { + otherPlayerEscaped = kPlayerTransportedOut; + RefreshScoreboard(kEscapedTitleMode); + FlagGliderInLimbo(thisGlider, true); + } + } + } + else + { + TransportRoomToRoom(thisGlider); + } + } + else + { + if (thisGlider->facing == kFaceLeft) + { + thisGlider->src = gliderSrc[fadeInSequence[thisGlider->frame] + + kLeftFadeOffset]; + thisGlider->mask = gliderSrc[fadeInSequence[thisGlider->frame] + + kLeftFadeOffset]; + } + else + { + thisGlider->src = gliderSrc[fadeInSequence[thisGlider->frame]]; + thisGlider->mask = gliderSrc[fadeInSequence[thisGlider->frame]]; + } + } +} + +//-------------------------------------------------------------- MoveGliderDownDuct + +void MoveGliderDownDuct (gliderPtr thisGlider) +{ + #define kVDropDuctSpeed 4 + Rect tempRect; + short vNotClipped; + + if (thisGlider->facing == kFaceLeft) + { + thisGlider->src = gliderSrc[2]; + thisGlider->mask = gliderSrc[2]; + } + else + { + thisGlider->src = gliderSrc[0]; + thisGlider->mask = gliderSrc[0]; + } + + if (thisGlider->dest.left < thisGlider->clip.left) + { + thisGlider->whole.left = thisGlider->dest.left; + thisGlider->dest.left++; + thisGlider->dest.right++; + thisGlider->whole.right = thisGlider->dest.right; + + thisGlider->wholeShadow.left = thisGlider->destShadow.left; + thisGlider->destShadow.left++; + thisGlider->destShadow.right++; + thisGlider->wholeShadow.right = thisGlider->destShadow.right; + } + else if (thisGlider->dest.left > thisGlider->clip.left) + { + thisGlider->whole.right = thisGlider->dest.right; + thisGlider->dest.left--; + thisGlider->dest.right--; + thisGlider->whole.left = thisGlider->dest.left; + + thisGlider->wholeShadow.right = thisGlider->destShadow.right; + thisGlider->destShadow.left--; + thisGlider->destShadow.right--; + thisGlider->wholeShadow.left = thisGlider->destShadow.left; + } + + thisGlider->whole.top = thisGlider->dest.top; + thisGlider->dest.top += kVDropDuctSpeed; + thisGlider->dest.bottom += kVDropDuctSpeed; + thisGlider->whole.bottom = thisGlider->dest.bottom; + + vNotClipped = 315 - thisGlider->dest.top; + if (vNotClipped < kGliderHigh) + { + if (vNotClipped <= 0) + { + tempRect = thisGlider->whole; + QOffsetRect(&tempRect, playOriginH, playOriginV); + CopyRectWorkToMain(&tempRect); + tempRect = thisGlider->wholeShadow; + QOffsetRect(&tempRect, playOriginH, playOriginV); + CopyRectWorkToMain(&tempRect); + thisGlider->dontDraw = true; + if (twoPlayerGame) + { + if (onePlayerLeft) + { + if (playerDead == kPlayer1) + MoveDuctToDuct(&theGlider2); + else + MoveDuctToDuct(&theGlider); + } + else + { + if (otherPlayerEscaped == kPlayerDuckedOut) + { + otherPlayerEscaped = kNoOneEscaped; + MoveDuctToDuct(thisGlider); + } + else + { + otherPlayerEscaped = kPlayerDuckedOut; + RefreshScoreboard(kEscapedTitleMode); + FlagGliderInLimbo(thisGlider, true); + } + } + } + else + MoveDuctToDuct(thisGlider); + } + else + { + thisGlider->dest.bottom = thisGlider->dest.top + vNotClipped; + thisGlider->src.bottom = thisGlider->src.top + vNotClipped; + thisGlider->mask.bottom = thisGlider->mask.top + vNotClipped; + } + } +} + +//-------------------------------------------------------------- MoveGliderUpDuct + +void MoveGliderUpDuct (gliderPtr thisGlider) +{ + #define kVRiseDuctSpeed -4 + Rect tempRect; + short vNotClipped; + + if (thisGlider->facing == kFaceLeft) + { + thisGlider->src = gliderSrc[2]; + thisGlider->mask = gliderSrc[2]; + } + else + { + thisGlider->src = gliderSrc[0]; + thisGlider->mask = gliderSrc[0]; + } + + if (thisGlider->dest.left < thisGlider->clip.left) + { + thisGlider->whole.left = thisGlider->dest.left; + thisGlider->dest.left++; + thisGlider->dest.right++; + thisGlider->whole.right = thisGlider->dest.right; + + thisGlider->wholeShadow.left = thisGlider->destShadow.left; + thisGlider->destShadow.left++; + thisGlider->destShadow.right++; + thisGlider->wholeShadow.right = thisGlider->destShadow.right; + } + else if (thisGlider->dest.left > thisGlider->clip.left) + { + thisGlider->whole.right = thisGlider->dest.right; + thisGlider->dest.left--; + thisGlider->dest.right--; + thisGlider->whole.left = thisGlider->dest.left; + + thisGlider->wholeShadow.right = thisGlider->destShadow.right; + thisGlider->destShadow.left--; + thisGlider->destShadow.right--; + thisGlider->wholeShadow.left = thisGlider->destShadow.left; + } + + thisGlider->whole.bottom = thisGlider->dest.bottom; + thisGlider->dest.top += kVRiseDuctSpeed; + thisGlider->dest.bottom += kVRiseDuctSpeed; + thisGlider->whole.top = thisGlider->dest.top; + + vNotClipped = thisGlider->dest.bottom - (kCeilingTransTop + 1); + if (vNotClipped < kGliderHigh) + { + if (vNotClipped <= 0) + { + tempRect = thisGlider->whole; + QOffsetRect(&tempRect, playOriginH, playOriginV); + CopyRectWorkToMain(&tempRect); + tempRect = thisGlider->wholeShadow; + QOffsetRect(&tempRect, playOriginH, playOriginV); + CopyRectWorkToMain(&tempRect); + thisGlider->dontDraw = true; + if (twoPlayerGame) + { + if (onePlayerLeft) + { + if (playerDead == kPlayer1) + MoveDuctToDuct(&theGlider2); + else + MoveDuctToDuct(&theGlider); + } + else + { + if (otherPlayerEscaped == kPlayerDuckedOut) + { + otherPlayerEscaped = kNoOneEscaped; + MoveDuctToDuct(thisGlider); + } + else + { + otherPlayerEscaped = kPlayerDuckedOut; + RefreshScoreboard(kEscapedTitleMode); + FlagGliderInLimbo(thisGlider, true); + } + } + } + else + MoveDuctToDuct(thisGlider); + } + else + { + thisGlider->dest.top = thisGlider->dest.bottom - vNotClipped; + thisGlider->src.top = thisGlider->src.bottom - vNotClipped; + thisGlider->mask.top = thisGlider->mask.bottom - vNotClipped; + } + } +} + +//-------------------------------------------------------------- FinishGliderMailingLeft + +void FinishGliderMailingLeft (gliderPtr thisGlider) +{ + #define kHPushMailSpeed -4 + short hNotClipped; + + if (thisGlider->dest.left == thisGlider->dest.right) + PlayPrioritySound(kTransInSound, kTransInPriority); + + thisGlider->whole.right = thisGlider->dest.right; + thisGlider->dest.left += kHPushMailSpeed; + thisGlider->dest.right += kHPushMailSpeed; + thisGlider->whole.left = thisGlider->dest.left; + + thisGlider->wholeShadow.right = thisGlider->destShadow.right; + thisGlider->destShadow.left += kHPushMailSpeed; + thisGlider->destShadow.right += kHPushMailSpeed; + thisGlider->wholeShadow.left = thisGlider->destShadow.left; + + hNotClipped = thisGlider->clip.right - thisGlider->dest.left; + if (hNotClipped < kGliderWide) + { + thisGlider->dest.right = thisGlider->dest.left + hNotClipped; + thisGlider->src.right = thisGlider->src.left + hNotClipped; + thisGlider->mask.right = thisGlider->mask.left + hNotClipped; + thisGlider->destShadow.right = thisGlider->dest.right; + } + else + { + if (thisGlider->frame == kWasBurning) + FlagGliderBurning(thisGlider); + else + FlagGliderNormal(thisGlider); + thisGlider->enteredRect = thisGlider->dest; + } +} + +//-------------------------------------------------------------- FinishGliderMailingRight + +void FinishGliderMailingRight (gliderPtr thisGlider) +{ + #define kHPushMailRtSpeed 4 + short hNotClipped; + + if (thisGlider->dest.left == thisGlider->dest.right) + PlayPrioritySound(kTransInSound, kTransInPriority); + + thisGlider->whole.left = thisGlider->dest.left; + thisGlider->dest.left += kHPushMailRtSpeed; + thisGlider->dest.right += kHPushMailRtSpeed; + thisGlider->whole.right = thisGlider->dest.right; + + thisGlider->wholeShadow.left = thisGlider->destShadow.left; + thisGlider->destShadow.left += kHPushMailRtSpeed; + thisGlider->destShadow.right += kHPushMailRtSpeed; + thisGlider->wholeShadow.right = thisGlider->destShadow.right; + + hNotClipped = thisGlider->dest.right - thisGlider->clip.left; + if (hNotClipped < kGliderWide) + { + thisGlider->dest.left = thisGlider->dest.right - hNotClipped; + thisGlider->src.left = thisGlider->src.right - hNotClipped; + thisGlider->mask.left = thisGlider->mask.right - hNotClipped; + thisGlider->destShadow.left = thisGlider->dest.left; + } + else + { + if (thisGlider->frame == kWasBurning) + FlagGliderBurning(thisGlider); + else + FlagGliderNormal(thisGlider); + thisGlider->enteredRect = thisGlider->dest; + } +} + +//-------------------------------------------------------------- FinishGliderDuctingIn + +void FinishGliderDuctingIn (gliderPtr thisGlider) +{ + #define kVDropStairsSpeed 4 + short vNotClipped; + + if (thisGlider->dest.top == thisGlider->dest.bottom) + PlayPrioritySound(kTransInSound, kTransInPriority); + + thisGlider->whole.top = thisGlider->dest.top; + thisGlider->dest.top += kVDropDuctSpeed; + thisGlider->dest.bottom += kVDropDuctSpeed; + thisGlider->whole.bottom = thisGlider->dest.bottom; + + vNotClipped = thisGlider->dest.bottom - (kCeilingTransTop + 1); + if (vNotClipped < kGliderHigh) + { + thisGlider->dest.top = thisGlider->dest.bottom - vNotClipped; + thisGlider->src.top = thisGlider->src.bottom - vNotClipped; + thisGlider->mask.top = thisGlider->mask.bottom - vNotClipped; + } + else + { + if (thisGlider->frame == kWasBurning) + FlagGliderBurning(thisGlider); + else + FlagGliderNormal(thisGlider); + thisGlider->enteredRect = thisGlider->dest; + FlagStillOvers(thisGlider); + } +} + +//-------------------------------------------------------------- MoveGliderInMailLeft + +void MoveGliderInMailLeft (gliderPtr thisGlider) +{ + #define kHMailPullSpeed 4 + #define kVMailDropSpeed 2 + Rect tempRect; + short fromIdealTop, hNotClipped; + + if (thisGlider->facing == kFaceLeft) + { + thisGlider->src = gliderSrc[2]; + thisGlider->mask = gliderSrc[2]; + } + else + { + thisGlider->src = gliderSrc[0]; + thisGlider->mask = gliderSrc[0]; + } + + if (thisGlider->dest.top < thisGlider->clip.top) + { + fromIdealTop = thisGlider->clip.top - thisGlider->dest.top; + if (fromIdealTop > kVMailDropSpeed) + fromIdealTop = kVMailDropSpeed; + + thisGlider->whole.top = thisGlider->dest.top; + thisGlider->dest.top += fromIdealTop; + thisGlider->dest.bottom += fromIdealTop; + thisGlider->whole.bottom = thisGlider->dest.bottom; + } + + thisGlider->whole.left = thisGlider->dest.left; + thisGlider->dest.left += kHMailPullSpeed; + thisGlider->dest.right += kHMailPullSpeed; + thisGlider->whole.right = thisGlider->dest.right; + + thisGlider->wholeShadow.left = thisGlider->destShadow.left; + thisGlider->destShadow.left += kHMailPullSpeed; + thisGlider->destShadow.right += kHMailPullSpeed; + thisGlider->wholeShadow.right = thisGlider->destShadow.right; + + hNotClipped = thisGlider->clip.right - thisGlider->dest.left; + if (hNotClipped < kGliderWide) + { + if (hNotClipped <= 0) + { + tempRect = thisGlider->whole; + QOffsetRect(&tempRect, playOriginH, playOriginV); + CopyRectWorkToMain(&tempRect); + tempRect = thisGlider->wholeShadow; + QOffsetRect(&tempRect, playOriginH, playOriginV); + CopyRectWorkToMain(&tempRect); + thisGlider->dontDraw = true; + if (twoPlayerGame) + { + if (onePlayerLeft) + { + if (playerDead == kPlayer1) + MoveMailToMail(&theGlider2); + else + MoveMailToMail(&theGlider); + } + else + { + if (otherPlayerEscaped == kPlayerMailedOut) + { + otherPlayerEscaped = kNoOneEscaped; + MoveMailToMail(thisGlider); + } + else + { + otherPlayerEscaped = kPlayerMailedOut; + RefreshScoreboard(kEscapedTitleMode); + FlagGliderInLimbo(thisGlider, true); + } + } + } + else + MoveMailToMail(thisGlider); + } + else + { + thisGlider->dest.right = thisGlider->dest.left + hNotClipped; + thisGlider->src.right = thisGlider->src.left + hNotClipped; + thisGlider->mask.right = thisGlider->mask.left + hNotClipped; + thisGlider->destShadow.right = thisGlider->dest.right; + } + } +} + +//-------------------------------------------------------------- MoveGliderInMailRight + +void MoveGliderInMailRight (gliderPtr thisGlider) +{ + #define kHMailPullRtSpeed -4 + #define kVMailDropSpeed 2 + Rect tempRect; + short fromIdealTop, hNotClipped; + + if (thisGlider->facing == kFaceLeft) + { + thisGlider->src = gliderSrc[2]; + thisGlider->mask = gliderSrc[2]; + } + else + { + thisGlider->src = gliderSrc[0]; + thisGlider->mask = gliderSrc[0]; + } + + if (thisGlider->dest.top < thisGlider->clip.top) + { + fromIdealTop = thisGlider->clip.top - thisGlider->dest.top; + if (fromIdealTop > kVMailDropSpeed) + fromIdealTop = kVMailDropSpeed; + + thisGlider->whole.top = thisGlider->dest.top; + thisGlider->dest.top += fromIdealTop; + thisGlider->dest.bottom += fromIdealTop; + thisGlider->whole.bottom = thisGlider->dest.bottom; + } + + thisGlider->whole.right = thisGlider->dest.right; + thisGlider->dest.left += kHMailPullRtSpeed; + thisGlider->dest.right += kHMailPullRtSpeed; + thisGlider->whole.left = thisGlider->dest.left; + + thisGlider->wholeShadow.right = thisGlider->destShadow.right; + thisGlider->destShadow.left += kHMailPullRtSpeed; + thisGlider->destShadow.right += kHMailPullRtSpeed; + thisGlider->wholeShadow.left = thisGlider->destShadow.left; + + hNotClipped = thisGlider->dest.right - thisGlider->clip.left; + if (hNotClipped < kGliderWide) + { + if (hNotClipped <= 0) + { + tempRect = thisGlider->whole; + QOffsetRect(&tempRect, playOriginH, playOriginV); + CopyRectWorkToMain(&tempRect); + tempRect = thisGlider->wholeShadow; + QOffsetRect(&tempRect, playOriginH, playOriginV); + CopyRectWorkToMain(&tempRect); + thisGlider->dontDraw = true; + if (twoPlayerGame) + { + if (onePlayerLeft) + { + if (playerDead == kPlayer1) + MoveMailToMail(&theGlider2); + else + MoveMailToMail(&theGlider); + } + else + { + if (otherPlayerEscaped == kPlayerMailedOut) + { + otherPlayerEscaped = kNoOneEscaped; + MoveMailToMail(thisGlider); + } + else + { + otherPlayerEscaped = kPlayerMailedOut; + RefreshScoreboard(kEscapedTitleMode); + FlagGliderInLimbo(thisGlider, true); + } + } + } + else + MoveMailToMail(thisGlider); + } + else + { + thisGlider->dest.left = thisGlider->dest.right - hNotClipped; + thisGlider->src.left = thisGlider->src.right - hNotClipped; + thisGlider->mask.left = thisGlider->mask.right - hNotClipped; + thisGlider->destShadow.left = thisGlider->dest.left; + } + } +} + +//-------------------------------------------------------------- DeckGliderInFoil + +void DeckGliderInFoil (gliderPtr thisGlider) +{ + showFoil = true; + + if (twoPlayerGame) + { + SetPort((GrafPtr)glidSrcMap); + LoadGraphic(kGliderFoilPictID); + SetPort((GrafPtr)glid2SrcMap); + LoadGraphic(kGliderFoil2PictID); + } + + if (thisGlider->facing == kFaceLeft) + { + thisGlider->src = gliderSrc[(thisGlider->frame + 2) + + kLeftFadeOffset]; + thisGlider->mask = gliderSrc[(thisGlider->frame + 2) + + kLeftFadeOffset]; + } + else + { + thisGlider->src = gliderSrc[thisGlider->frame + 2]; + thisGlider->mask = gliderSrc[thisGlider->frame + 2]; + } +} + +//-------------------------------------------------------------- MoveGliderFoilGoing + +void MoveGliderFoilGoing (gliderPtr thisGlider) +{ + thisGlider->frame++; + if (thisGlider->frame > 8) + { + FlagGliderNormal(thisGlider); + } + else + { + if (thisGlider->frame < 5) + { + if (thisGlider->facing == kFaceLeft) + { + thisGlider->src = gliderSrc[(10 - thisGlider->frame) + + kLeftFadeOffset]; + thisGlider->mask = gliderSrc[(10 - thisGlider->frame) + + kLeftFadeOffset]; + } + else + { + thisGlider->src = gliderSrc[10 - thisGlider->frame]; + thisGlider->mask = gliderSrc[10 - thisGlider->frame]; + } + } + else + DeckGliderInFoil(thisGlider); + } + MoveGlider(thisGlider); +} + +//-------------------------------------------------------------- xxxx + +void RemoveFoilFromGlider (gliderPtr thisGlider) +{ + showFoil = false; + + if (twoPlayerGame) + { + SetPort((GrafPtr)glidSrcMap); + LoadGraphic(kGliderPictID); + SetPort((GrafPtr)glid2SrcMap); + LoadGraphic(kGlider2PictID); + } + + if (thisGlider->facing == kFaceLeft) + { + thisGlider->src = gliderSrc[(thisGlider->frame + 2) + + kLeftFadeOffset]; + thisGlider->mask = gliderSrc[(thisGlider->frame + 2) + + kLeftFadeOffset]; + } + else + { + thisGlider->src = gliderSrc[thisGlider->frame + 2]; + thisGlider->mask = gliderSrc[thisGlider->frame + 2]; + } +} + +//-------------------------------------------------------------- MoveGliderFoilLosing + +void MoveGliderFoilLosing (gliderPtr thisGlider) +{ + thisGlider->frame++; + if (thisGlider->frame > 8) + FlagGliderNormal(thisGlider); + else + { + if (thisGlider->frame < 5) + { + if (thisGlider->facing == kFaceLeft) + { + thisGlider->src = gliderSrc[(10 - thisGlider->frame) + + kLeftFadeOffset]; + thisGlider->mask = gliderSrc[(10 - thisGlider->frame) + + kLeftFadeOffset]; + } + else + { + thisGlider->src = gliderSrc[10 - thisGlider->frame]; + thisGlider->mask = gliderSrc[10 - thisGlider->frame]; + } + } + else + RemoveFoilFromGlider(thisGlider); + } + MoveGlider(thisGlider); +} + +//-------------------------------------------------------------- MoveGliderShredding + +void MoveGliderShredding (gliderPtr thisGlider) +{ + #define kDropShredSlow 1 + #define kDropShredFast 4 + short vNotClipped; + + if (thisGlider->frame > 0) + { + if (thisGlider->facing == kFaceLeft) + { + thisGlider->src = gliderSrc[2]; + thisGlider->mask = gliderSrc[2]; + } + else + { + thisGlider->src = gliderSrc[0]; + thisGlider->mask = gliderSrc[0]; + } + + vNotClipped = thisGlider->frame - thisGlider->dest.top; + if (vNotClipped < kGliderHigh) + { + thisGlider->whole.top = thisGlider->dest.top; + thisGlider->dest.top += kDropShredSlow; + thisGlider->dest.bottom += kDropShredSlow; + thisGlider->whole.bottom = thisGlider->dest.bottom; + shadowVisible = false; + PlayPrioritySound(kShredSound, kShredPriority); + } + else + { + thisGlider->whole.top = thisGlider->dest.top; + thisGlider->dest.top += kDropShredFast; + thisGlider->dest.bottom += kDropShredFast; + thisGlider->whole.bottom = thisGlider->dest.bottom; + } + + vNotClipped = thisGlider->frame - thisGlider->dest.top; + if (vNotClipped < kGliderHigh) + { + if (vNotClipped <= 0) + { + AddAShreddedGlider(&thisGlider->dest); + thisGlider->frame = kShredderCountdown; + } + else + { + thisGlider->dest.bottom = thisGlider->dest.top + vNotClipped; + thisGlider->src.bottom = thisGlider->src.top + vNotClipped; + thisGlider->mask.bottom = thisGlider->mask.top + vNotClipped; + } + } + } + else + { + thisGlider->frame++; + if (thisGlider->frame >= 0) + OffAMortal(thisGlider); + } +} + +//-------------------------------------------------------------- HandleIdleGlider + +void HandleIdleGlider (gliderPtr thisGlider) +{ + thisGlider->hVel--; + if (thisGlider->hVel <= 0) + { + thisGlider->mode = thisGlider->wasMode; + thisGlider->dontDraw = false; + } +} + +//-------------------------------------------------------------- HandleGlider + +void HandleGlider (gliderPtr thisGlider) +{ + switch (thisGlider->mode) + { + case kGliderNormal: + MoveGliderNormal(thisGlider); + break; + + case kGliderFadingIn: + FadeGliderIn(thisGlider); + break; + + case kGliderFadingOut: + FadeGliderOut(thisGlider); + break; + + case kGliderGoingUp: + MoveGliderUpStairs(thisGlider); + break; + + case kGliderComingUp: + FinishGliderUpStairs(thisGlider); + break; + + case kGliderGoingDown: + MoveGliderDownStairs(thisGlider); + break; + + case kGliderComingDown: + FinishGliderDownStairs(thisGlider); + break; + + case kGliderFaceLeft: + MoveGliderFaceLeft(thisGlider); + break; + + case kGliderFaceRight: + MoveGliderFaceRight(thisGlider); + break; + + case kGliderBurning: + MoveGliderBurning(thisGlider); + break; + + case kGliderTransporting: + TransportGliderOut(thisGlider); + break; + + case kGliderDuctingDown: + MoveGliderDownDuct(thisGlider); + break; + + case kGliderDuctingUp: + MoveGliderUpDuct(thisGlider); + break; + + case kGliderDuctingIn: + FinishGliderDuctingIn(thisGlider); + break; + + case kGliderMailInLeft: + MoveGliderInMailLeft(thisGlider); + break; + + case kGliderMailOutLeft: // <-- G _[] + FinishGliderMailingLeft(thisGlider); + break; + + case kGliderMailInRight: + MoveGliderInMailRight(thisGlider); + break; + + case kGliderMailOutRight: // []_ G --> + FinishGliderMailingRight(thisGlider); + break; + + case kGliderGoingFoil: + MoveGliderFoilGoing(thisGlider); + break; + + case kGliderLosingFoil: + MoveGliderFoilLosing(thisGlider); + break; + + case kGliderShredding: + MoveGliderShredding(thisGlider); + break; + + case kGliderInLimbo: + break; + + case kGliderIdle: + HandleIdleGlider(thisGlider); + break; + + case kGliderTransportingIn: + TransportGliderIn(thisGlider); + break; + + } + + thisGlider->ignoreLeft = false; + thisGlider->ignoreRight = false; + thisGlider->ignoreGround = false; +} + +//-------------------------------------------------------------- OffsetGlider + +void OffsetGlider (gliderPtr thisGlider, short where) +{ + if ((twoPlayerGame) && (onePlayerLeft) && (thisGlider->which == playerDead)) + return; + + switch (where) + { + case kToRight: + thisGlider->dest.left += kRoomWide; + thisGlider->dest.right += kRoomWide; + thisGlider->destShadow.left += kRoomWide; + thisGlider->destShadow.right += kRoomWide; + thisGlider->whole = thisGlider->dest; + thisGlider->wholeShadow = thisGlider->destShadow; + break; + + case kToLeft: + thisGlider->dest.left -= kRoomWide; + thisGlider->dest.right -= kRoomWide; + thisGlider->destShadow.left -= kRoomWide; + thisGlider->destShadow.right -= kRoomWide; + thisGlider->whole = thisGlider->dest; + thisGlider->wholeShadow = thisGlider->destShadow; + break; + + case kAbove: + thisGlider->dest.top -= kTileHigh; + thisGlider->dest.bottom -= kTileHigh; + thisGlider->whole = thisGlider->dest; + break; + + case kBelow: + thisGlider->dest.top += kTileHigh; + thisGlider->dest.bottom += kTileHigh; + thisGlider->whole = thisGlider->dest; + break; + } +} + +//-------------------------------------------------------------- OffAMortal + +void OffAMortal (gliderPtr thisGlider) +{ + if (gameOver) + return; + + if (numShredded > 0) + RemoveShreds(); + + mortals--; + if (mortals < 0) + { + HideGlider(thisGlider); + if (twoPlayerGame) + { + if (mortals < -1) // both players are now dead + { + FlagGameOver(); + thisGlider->dontDraw = true; + } + else + { + FlagGliderInLimbo(thisGlider, false); + thisGlider->dontDraw = true; + onePlayerLeft = true; + playerDead = thisGlider->which; + } + } + else + { + FlagGameOver(); + thisGlider->dontDraw = true; + } + } + else + { + QuickGlidersRefresh(); + HideGlider(thisGlider); + } + + if (mortals >= 0) + { + if (thisGlider->mode == kGliderGoingFoil) + DeckGliderInFoil(thisGlider); + + FlagGliderNormal(thisGlider); + if (playerSuicide) + FollowTheLeader(); + else + { + StartGliderFadingIn(thisGlider); + thisGlider->dest = thisGlider->enteredRect; + thisGlider->whole = thisGlider->dest; + thisGlider->destShadow.left = thisGlider->dest.left; + thisGlider->destShadow.right = thisGlider->dest.right; + thisGlider->wholeShadow = thisGlider->destShadow; + } + } + else if ((mortals == -1) && (onePlayerLeft) && (!gameOver)) + { + switch (otherPlayerEscaped) + { + case kPlayerEscapedUp: + case kPlayerEscapingUpStairs: + case kPlayerEscapedUpStairs: + if (playerDead == kPlayer1) + MoveRoomToRoom(&theGlider2, kAbove); + else + MoveRoomToRoom(&theGlider, kAbove); + break; + + case kPlayerEscapedDown: + case kPlayerEscapingDownStairs: + case kPlayerEscapedDownStairs: + if (playerDead == kPlayer1) + MoveRoomToRoom(&theGlider2, kBelow); + else + MoveRoomToRoom(&theGlider, kBelow); + break; + + case kPlayerEscapedLeft: + if (playerDead == kPlayer1) + MoveRoomToRoom(&theGlider2, kToLeft); + else + MoveRoomToRoom(&theGlider, kToLeft); + break; + + case kPlayerEscapedRight: + if (playerDead == kPlayer1) + MoveRoomToRoom(&theGlider2, kToRight); + else + MoveRoomToRoom(&theGlider, kToRight); + break; + + case kPlayerTransportedOut: + if (playerDead == kPlayer1) + TransportRoomToRoom(&theGlider2); + else + TransportRoomToRoom(&theGlider); + break; + + case kPlayerMailedOut: + if (playerDead == kPlayer1) + MoveMailToMail(&theGlider2); + else + MoveMailToMail(&theGlider); + break; + + case kPlayerDuckedOut: + if (playerDead == kPlayer1) + MoveDuctToDuct(&theGlider2); + else + MoveDuctToDuct(&theGlider); + break; + + default: + break; + } + + otherPlayerEscaped = kPlayerIsDeadForever; + } +} + diff --git a/GpApp/Player.h b/GpApp/Player.h new file mode 100644 index 0000000..669f23a --- /dev/null +++ b/GpApp/Player.h @@ -0,0 +1,12 @@ +//============================================================================ +//---------------------------------------------------------------------------- +// Player.h +//---------------------------------------------------------------------------- +//============================================================================ + + +#include "PLQDOffscreen.h" + + +extern GWorldPtr shadowSrcMap; +extern GWorldPtr shadowMaskMap; diff --git a/Prefix.h b/GpApp/Prefix.h old mode 100755 new mode 100644 similarity index 100% rename from Prefix.h rename to GpApp/Prefix.h diff --git a/GpApp/Prefs.cpp b/GpApp/Prefs.cpp new file mode 100644 index 0000000..10cd308 --- /dev/null +++ b/GpApp/Prefs.cpp @@ -0,0 +1,269 @@ + +//============================================================================ +//---------------------------------------------------------------------------- +// Prefs.c +//---------------------------------------------------------------------------- +//============================================================================ + +#include "PLPasStr.h" +#include "Externs.h" +#include "Environ.h" + + +#define kPrefCreatorType 'ozm5' +#define kPrefFileType 'gliP' +#define kPrefFileName PSTR("Glider Prefs") +#define kDefaultPrefFName PSTR("Preferences") +#define kPrefsStringsID 160 +#define kNewPrefsAlertID 160 +#define kPrefsFNameIndex 1 + + +Boolean CanUseFindFolder (void); +Boolean GetPrefsFPath (long *, short *); +Boolean CreatePrefsFolder (short *); +Boolean WritePrefs (long *, short *, prefsInfo *); +OSErr ReadPrefs (long *, short *, prefsInfo *); +Boolean DeletePrefs (long *, short *); +void BringUpDeletePrefsAlert (void); + + +//============================================================== Functions +//-------------------------------------------------------------- CanUseFindFolder + +Boolean CanUseFindFolder (void) +{ + return true; +} + +//-------------------------------------------------------------- GetPrefsFPath + +Boolean GetPrefsFPath (long *prefDirID, short *systemVolRef) +{ + OSErr theErr; + + theErr = FindFolder(kOnSystemDisk, kPreferencesFolderType, kCreateFolder, + systemVolRef, prefDirID); + if (theErr != noErr) + return(false); + + return(true); +} + +//-------------------------------------------------------------- CreatePrefsFolder + +Boolean CreatePrefsFolder (short *systemVolRef) +{ + HFileParam fileParamBlock; + Str255 folderName; + OSErr theErr; + + GetIndString(folderName, kPrefsStringsID, kPrefsFNameIndex); + + fileParamBlock.ioVRefNum = *systemVolRef; + fileParamBlock.ioDirID = 0; + fileParamBlock.ioNamePtr = folderName; + fileParamBlock.ioCompletion = nil; + + theErr = PBDirCreate(&fileParamBlock, false); + if (theErr != noErr) + { + CheckFileError(theErr, PSTR("Preferences")); + return(false); + } + return(true); +} + +//-------------------------------------------------------------- WritePrefs + +Boolean WritePrefs (long *prefDirID, short *systemVolRef, prefsInfo *thePrefs) +{ + OSErr theErr; + short fileRefNum; + long byteCount; + FSSpec theSpecs; + Str255 fileName; + + PasStringCopy(kPrefFileName, fileName); + + theErr = FSMakeFSSpec(*systemVolRef, *prefDirID, fileName, &theSpecs); + if (theErr != noErr) + { + if (theErr != fnfErr) + { + CheckFileError(theErr, PSTR("Preferences")); + return(false); + } + theErr = FSpCreate(&theSpecs, kPrefCreatorType, kPrefFileType, smSystemScript); + if (theErr != noErr) + { + CheckFileError(theErr, PSTR("Preferences")); + return(false); + } + } + theErr = FSpOpenDF(&theSpecs, fsRdWrPerm, &fileRefNum); + if (theErr != noErr) + { + CheckFileError(theErr, PSTR("Preferences")); + return(false); + } + + byteCount = sizeof(*thePrefs); + + theErr = FSWrite(fileRefNum, &byteCount, thePrefs); + if (theErr != noErr) + { + CheckFileError(theErr, PSTR("Preferences")); + return(false); + } + + theErr = FSClose(fileRefNum); + if (theErr != noErr) + { + CheckFileError(theErr, PSTR("Preferences")); + return(false); + } + + return(true); +} + +//-------------------------------------------------------------- SavePrefs + +Boolean SavePrefs (prefsInfo *thePrefs, short versionNow) +{ + long prefDirID; + short systemVolRef; + + thePrefs->prefVersion = versionNow; + + if (!GetPrefsFPath(&prefDirID, &systemVolRef)) + return(false); + + if (!WritePrefs(&prefDirID, &systemVolRef, thePrefs)) + return(false); + + return(true); +} + +//-------------------------------------------------------------- ReadPrefs + +OSErr ReadPrefs (long *prefDirID, short *systemVolRef, prefsInfo *thePrefs) +{ + OSErr theErr; + short fileRefNum; + long byteCount; + FSSpec theSpecs; + Str255 fileName; + + PasStringCopy(kPrefFileName, fileName); + + theErr = FSMakeFSSpec(*systemVolRef, *prefDirID, fileName, &theSpecs); + if (theErr != noErr) + { + if (theErr == fnfErr) + return(theErr); + else + { + CheckFileError(theErr, PSTR("Preferences")); + return(theErr); + } + } + + theErr = FSpOpenDF(&theSpecs, fsRdWrPerm, &fileRefNum); + if (theErr != noErr) + { + CheckFileError(theErr, PSTR("Preferences")); + return(theErr); + } + + byteCount = sizeof(*thePrefs); + + theErr = FSRead(fileRefNum, &byteCount, thePrefs); + if (theErr != noErr) + { + if (theErr == eofErr) + theErr = FSClose(fileRefNum); + else + { + CheckFileError(theErr, PSTR("Preferences")); + theErr = FSClose(fileRefNum); + } + return(theErr); + } + + theErr = FSClose(fileRefNum); + if (theErr != noErr) + { + CheckFileError(theErr, PSTR("Preferences")); + return(theErr); + } + + return(theErr); +} + +//-------------------------------------------------------------- DeletePrefs + +Boolean DeletePrefs (long *dirID, short *volRef) +{ + FSSpec theSpecs; + Str255 fileName; + OSErr theErr; + + PasStringCopy(kPrefFileName, fileName); + + theErr = FSMakeFSSpec(*volRef, *dirID, fileName, &theSpecs); + if (theErr != noErr) + return(false); + else + theErr = FSpDelete(&theSpecs); + + if (theErr != noErr) + return(false); + + return(true); +} + +//-------------------------------------------------------------- LoadPrefs + +Boolean LoadPrefs (prefsInfo *thePrefs, short versionNeed) +{ + long prefDirID; + OSErr theErr; + short systemVolRef; + Boolean noProblems; + + noProblems = GetPrefsFPath(&prefDirID, &systemVolRef); + if (!noProblems) + return(false); + + theErr = ReadPrefs(&prefDirID, &systemVolRef, thePrefs); + if (theErr == eofErr) + { + BringUpDeletePrefsAlert(); + noProblems = DeletePrefs(&prefDirID, &systemVolRef); + return (false); + } + else if (theErr != noErr) + return (false); + + if (thePrefs->prefVersion != versionNeed) + { + BringUpDeletePrefsAlert(); + noProblems = DeletePrefs(&prefDirID, &systemVolRef); + return(false); + } + + return (true); +} + +//-------------------------------------------------------------- BringUpDeletePrefsAlert + +void BringUpDeletePrefsAlert (void) +{ + short whoCares; + + InitCursor(); +// CenterAlert(kNewPrefsAlertID); + whoCares = Alert(kNewPrefsAlertID, nil); +} + diff --git a/GpApp/RectUtils.cpp b/GpApp/RectUtils.cpp new file mode 100644 index 0000000..c001c2b --- /dev/null +++ b/GpApp/RectUtils.cpp @@ -0,0 +1,318 @@ +//============================================================================ +//---------------------------------------------------------------------------- +// RectUtils.c +//---------------------------------------------------------------------------- +//============================================================================ + + + +#include "Externs.h" +#include "RectUtils.h" + + + +//============================================================== Functions +//-------------------------------------------------------------- FrameWHRect +// Given the top left corner and a width and height, this functionÉ +// simply creates the necessary rectangle and frames it. + +void FrameWHRect (short left, short top, short wide, short high) +{ + Rect theRect; + + theRect.left = left; + theRect.top = top; + theRect.right = left + wide; + theRect.bottom = top + high; + FrameRect(&theRect); +} + +//-------------------------------------------------------------- NormalizeRect +// This function ensures that a rect's top is less than it's bottomÉ +// and that left is less than right. + +void NormalizeRect (Rect *theRect) +{ + short tempSide; + + if (theRect->left > theRect->right) + { + tempSide = theRect->left; + theRect->left = theRect->right; + theRect->right = tempSide; + } + + if (theRect->top > theRect->bottom) + { + tempSide = theRect->top; + theRect->top = theRect->bottom; + theRect->bottom = tempSide; + } +} + +//-------------------------------------------------------------- ZeroRectCorner +// The rect passed in is slid over so that its top left corner isÉ +// at coordinates (0, 0). + +void ZeroRectCorner (Rect *theRect) // Offset rect to (0, 0) +{ + theRect->right -= theRect->left; + theRect->bottom -= theRect->top; + theRect->left = 0; + theRect->top = 0; +} + +//-------------------------------------------------------------- CenterRectOnPoint +// Given a rectangle and a point, this function centers the rectangleÉ +// on that point. + +void CenterRectOnPoint (Rect *theRect, Point where) +{ + ZeroRectCorner(theRect); + QOffsetRect(theRect, -HalfRectWide(theRect), -HalfRectTall(theRect)); + QOffsetRect(theRect, where.h, where.v); +} + +//-------------------------------------------------------------- HalfRectWide +// Given a rectangle, this function returns the rect's width divided by 2. + +short HalfRectWide (Rect *theRect) +{ + return ((theRect->right - theRect->left) / 2); +} + +//-------------------------------------------------------------- HalfRectTall +// Given a rectangle, this function returns the rect's height divided by 2. + +short HalfRectTall (Rect *theRect) +{ + return ((theRect->bottom - theRect->top) / 2); +} + +//-------------------------------------------------------------- RectWide +// Given a rectangle, this simple function returns the rect's width. + +short RectWide (Rect *theRect) +{ + return (theRect->right - theRect->left); +} + +//-------------------------------------------------------------- RectTall +// Given a rectangle, this simple function returns the rect's height. + +short RectTall (Rect *theRect) +{ + return (theRect->bottom - theRect->top); +} + +//-------------------------------------------------------------- GlobalToLocalRect + +// This function offsets a rectangle from global to local coordinates. +// The "local" coordinate system is assumed to be the current port (window). + +void GlobalToLocalRect (Rect *theRect) +{ + Point upperLeftPt; + + upperLeftPt.h = 0; + upperLeftPt.v = 0; + GlobalToLocal(&upperLeftPt); + QOffsetRect(theRect, upperLeftPt.h, upperLeftPt.v); +} + +//-------------------------------------------------------------- LocalToGlobalRect + +// This function offsets a rectangle from local to global coordinates. +// The "local" coordinate system is assumed to be the current port (window). + +void LocalToGlobalRect (Rect *theRect) +{ + Point upperLeftPt; + + upperLeftPt.h = 0; + upperLeftPt.v = 0; + LocalToGlobal(&upperLeftPt); + QOffsetRect(theRect, upperLeftPt.h, upperLeftPt.v); +} + +//-------------------------------------------------------------- CenterRectInRect +// Given two rectangles, this function centers the first rectangleÉ +// within the second. The second rect is unchanged. + +void CenterRectInRect (Rect *rectA, Rect *rectB) +{ + short widthA, tallA; + + widthA = RectWide(rectA); + tallA = RectTall(rectA); + + rectA->left = rectB->left + (RectWide(rectB) - widthA) / 2; + rectA->right = rectA->left + widthA; + + rectA->top = rectB->top + (RectTall(rectB) - tallA) / 2; + rectA->bottom = rectA->top + tallA; +} + +//-------------------------------------------------------------- HOffsetRect + +// Just a simple function to offset a rectangle horizontally only. + +void HOffsetRect (Rect *theRect, short h) +{ + theRect->left += h; + theRect->right += h; +} + +//-------------------------------------------------------------- VOffsetRect + +// Just a simple function to offset a rectangle vertically only. + +void VOffsetRect (Rect *theRect, short v) +{ + theRect->top += v; + theRect->bottom += v; +} + +//-------------------------------------------------------------- IsRectLeftOfRect + +// Given two rects, this function returns true if the first rectangleÉ +// is to the left of the second. + +Boolean IsRectLeftOfRect (Rect *rect1, Rect *rect2) +{ + short offset; + + offset = (rect1->right - rect1->left) - (rect2->right - rect2->left) / 2; + if ((rect1->left) < (rect2->left + offset)) + return (true); + else + return (false); +} + +//-------------------------------------------------------------- QOffsetRect + +// This duplicates a Mac ToolBox call, but since it's local, it's faster. +// It offsets a rectangle both vertically and horizontally. + +void QOffsetRect (Rect *theRect, short h, short v) +{ + theRect->right += h; + theRect->left += h; + theRect->bottom += v; + theRect->top += v; +} + +//-------------------------------------------------------------- QSetRect + +// This also duplicates a ToolBox call. It's needed often though, soÉ +// any gains in speed are nice. It sets up a rect structure. + +void QSetRect (Rect *theRect, short l, short t, short r, short b) +{ + theRect->left = l; + theRect->top = t; + theRect->right = r; + theRect->bottom = b; +} + +//-------------------------------------------------------------- ForceRectInRect +// Given a source rectangle and a bounding rectangle, this functionÉ +// will clip the source rect so that it is entirely within the boundingÉ +// rect. It returns true if any clippiung was necessary. + +Boolean ForceRectInRect (Rect *small, Rect *large) +{ + SInt16 hOff, vOff; + Boolean changed; + + changed = false; + + NormalizeRect(small); + + if ((small->bottom - small->top) > (large->bottom - large->top)) + { + small->bottom = small->top + (large->bottom - large->top); + changed = true; + } + + if ((small->right - small->left) > (large->right - large->left)) + { + small->right = small->left + (large->right - large->left); + changed = true; + } + + hOff = large->left - small->left; + if (hOff > 0) + { + OffsetRect(small, hOff, 0); + changed = true; + } + hOff = large->right - small->right; + if (hOff < 0) + { + OffsetRect(small, hOff, 0); + changed = true; + } + vOff = large->top - small->top; + if (vOff > 0) + { + OffsetRect(small, 0, vOff); + changed = true; + } + vOff = large->bottom - small->bottom; + if (vOff < 0) + { + OffsetRect(small, 0, vOff); + changed = true; + } + + return changed; +} + +//-------------------------------------------------------------- QUnionSimilarRect + +// Given 2 rects that are assumed to have the same width and height,É +// this function returns a 3rd rect that is the union of those two. + +void QUnionSimilarRect (Rect *rectA, Rect *rectB, Rect *rectC) +{ + if (rectA->left < rectB->left) + rectC->left = rectA->left; + else + rectC->left = rectB->left; + + if (rectA->top < rectB->top) + rectC->top = rectA->top; + else + rectC->top = rectB->top; + + if (rectA->right > rectB->right) + rectC->right = rectA->right; + else + rectC->right = rectB->right; + + if (rectA->bottom > rectB->bottom) + rectC->bottom = rectA->bottom; + else + rectC->bottom = rectB->bottom; +} + +//-------------------------------------------------------------- FrameRectSansCorners +// This is similar to the ToolBox FrameRect() call. However, it doesn'tÉ +// draw the pixels in the 4 corners of the Rect. + +void FrameRectSansCorners (Rect *theRect) +{ + MoveTo(theRect->left + 1, theRect->top); + LineTo(theRect->right - 2, theRect->top); + + MoveTo(theRect->right - 1, theRect->top + 1); + LineTo(theRect->right - 1, theRect->bottom - 2); + + MoveTo(theRect->left + 1, theRect->bottom - 1); + LineTo(theRect->right - 2, theRect->bottom - 1); + + MoveTo(theRect->left, theRect->top + 1); + LineTo(theRect->left, theRect->bottom - 2); +} + diff --git a/GpApp/RectUtils.h b/GpApp/RectUtils.h new file mode 100644 index 0000000..7184e01 --- /dev/null +++ b/GpApp/RectUtils.h @@ -0,0 +1,33 @@ +//============================================================================ +//---------------------------------------------------------------------------- +// RectUtils.h +//---------------------------------------------------------------------------- +//============================================================================ + + +#pragma once + + +#include "PLQuickdraw.h" + + +void FrameWHRect (short, short, short, short); +void NormalizeRect (Rect *); +void ZeroRectCorner (Rect *); +void CenterRectOnPoint (Rect *, Point); +short HalfRectWide (Rect *); +short HalfRectTall (Rect *); +short RectWide (Rect *); +short RectTall (Rect *); +void GlobalToLocalRect (Rect *); +void LocalToGlobalRect (Rect *); +void CenterRectInRect (Rect *, Rect *); +void HOffsetRect (Rect *, short); +void VOffsetRect (Rect *, short); +Boolean IsRectLeftOfRect (Rect *, Rect *); +void QOffsetRect (Rect *, short, short); +void QSetRect (Rect *, short, short, short, short); +Boolean ForceRectInRect (Rect *, Rect *); +void QUnionSimilarRect (Rect *, Rect *, Rect *); +void FrameRectSansCorners (Rect *); +void SetEraseRect (short, short, short, short); diff --git a/GpApp/Render.cpp b/GpApp/Render.cpp new file mode 100644 index 0000000..94a3b87 --- /dev/null +++ b/GpApp/Render.cpp @@ -0,0 +1,772 @@ + +//============================================================================ +//---------------------------------------------------------------------------- +// Render.c +//---------------------------------------------------------------------------- +//============================================================================ + + +#include "Externs.h" +#include "Environ.h" +#include "MainWindow.h" +#include "Objects.h" +#include "Play.h" +#include "Player.h" +#include "RectUtils.h" +#include "Room.h" +#include "RubberBands.h" + + +#define kMaxGarbageRects 48 + + +void DrawReflection (gliderPtr, Boolean); +void RenderFlames (void); +void RenderPendulums (void); +void RenderFlyingPoints (void); +void RenderSparkles (void); +void RenderStars (void); +void RenderBands (void); +void RenderShreds (void); +void CopyRectsQD (void); +void CopyRectsAssm (void); + + +Rect work2MainRects[kMaxGarbageRects]; +Rect back2WorkRects[kMaxGarbageRects]; +Rect shieldRect; +RgnHandle mirrorRgn; +Point shieldPt; +long nextFrame; +short numWork2Main, numBack2Work; +Boolean hasMirror; + +extern bandPtr bands; +extern sparklePtr sparkles; +extern flyingPtPtr flyingPoints; +extern flamePtr flames, tikiFlames, bbqCoals; +extern pendulumPtr pendulums; +extern starPtr theStars; +extern shredPtr shreds; +extern Rect sparkleSrc[]; +extern Rect pointsSrc[]; +extern Rect bandRects[]; +extern savedType savedMaps[]; +extern Rect shadowSrc[], justRoomsRect, movieRect; +extern short numBands, numStars, numShredded; +extern short numSparkles, numFlyingPts, numPendulums, clockFrame; +extern short numFlames, numSavedMaps, numTikiFlames, numCoals; +extern Boolean evenFrame, shadowVisible, twoPlayerGame, tvOn; + + +//============================================================== Functions +//-------------------------------------------------------------- AddRectToWorkRects + +void AddRectToWorkRects (Rect *theRect) +{ + if (numWork2Main < (kMaxGarbageRects - 1)) + { + work2MainRects[numWork2Main] = *theRect; + if (work2MainRects[numWork2Main].left < justRoomsRect.left) + work2MainRects[numWork2Main].left = justRoomsRect.left; + else if (work2MainRects[numWork2Main].right > justRoomsRect.right) + work2MainRects[numWork2Main].right = justRoomsRect.right; + if (work2MainRects[numWork2Main].top < justRoomsRect.top) + work2MainRects[numWork2Main].top = justRoomsRect.top; + else if (work2MainRects[numWork2Main].bottom > justRoomsRect.bottom) + work2MainRects[numWork2Main].bottom = justRoomsRect.bottom; + numWork2Main++; + } +} + +//-------------------------------------------------------------- AddRectToBackRects + +void AddRectToBackRects (Rect *theRect) +{ + if (numBack2Work < (kMaxGarbageRects - 1)) + { + back2WorkRects[numBack2Work] = *theRect; + if (back2WorkRects[numBack2Work].left < 0) + back2WorkRects[numBack2Work].left = 0; + else if (back2WorkRects[numBack2Work].right > workSrcRect.right) + back2WorkRects[numBack2Work].right = workSrcRect.right; + if (back2WorkRects[numBack2Work].top < 0) + back2WorkRects[numBack2Work].top = 0; + else if (back2WorkRects[numBack2Work].bottom > workSrcRect.bottom) + back2WorkRects[numBack2Work].bottom = workSrcRect.bottom; + numBack2Work++; + } +} + +//-------------------------------------------------------------- AddRectToWorkRectsWhole + +void AddRectToWorkRectsWhole (Rect *theRect) +{ + if (numWork2Main < (kMaxGarbageRects - 1)) + { + if ((theRect->right <= workSrcRect.left) || + (theRect->bottom <= workSrcRect.top) || + (theRect->left >= workSrcRect.right) || + (theRect->top >= workSrcRect.bottom)) + return; + + work2MainRects[numWork2Main] = *theRect; + + if (work2MainRects[numWork2Main].left < workSrcRect.left) + work2MainRects[numWork2Main].left = workSrcRect.left; + else if (work2MainRects[numWork2Main].right > workSrcRect.right) + work2MainRects[numWork2Main].right = workSrcRect.right; + if (work2MainRects[numWork2Main].top < workSrcRect.top) + work2MainRects[numWork2Main].top = workSrcRect.top; + else if (work2MainRects[numWork2Main].bottom > workSrcRect.bottom) + work2MainRects[numWork2Main].bottom = workSrcRect.bottom; + + if ((work2MainRects[numWork2Main].right == + work2MainRects[numWork2Main].left) || + (work2MainRects[numWork2Main].top == + work2MainRects[numWork2Main].bottom)) + return; + + numWork2Main++; + } +} + +//-------------------------------------------------------------- DrawReflection + +void DrawReflection (gliderPtr thisGlider, Boolean oneOrTwo) +{ + RgnHandle wasClip; + Rect src, dest; + short which; + + if (thisGlider->dontDraw) + return; + + if (thisGlider->facing == kFaceRight) + which = 0; + else + which = 1; + + dest = thisGlider->dest; + QOffsetRect(&dest, playOriginH - 20, playOriginV - 16); + + wasClip = NewRgn(); + if (wasClip == nil) + return; + + SetPort((GrafPtr)workSrcMap); + GetClip(wasClip); + SetClip(mirrorRgn); + + if (oneOrTwo) + { + if (showFoil) + CopyMask((BitMap *)*GetGWorldPixMap(glid2SrcMap), + (BitMap *)*GetGWorldPixMap(glidMaskMap), + (BitMap *)*GetGWorldPixMap(workSrcMap), + &thisGlider->src, &thisGlider->mask, &dest); + else + CopyMask((BitMap *)*GetGWorldPixMap(glidSrcMap), + (BitMap *)*GetGWorldPixMap(glidMaskMap), + (BitMap *)*GetGWorldPixMap(workSrcMap), + &thisGlider->src, &thisGlider->mask, &dest); + } + else + { + CopyMask((BitMap *)*GetGWorldPixMap(glid2SrcMap), + (BitMap *)*GetGWorldPixMap(glidMaskMap), + (BitMap *)*GetGWorldPixMap(workSrcMap), + &thisGlider->src, &thisGlider->mask, &dest); + } + + SetClip(wasClip); + DisposeRgn(wasClip); + + src =thisGlider->whole; + QOffsetRect(&src, playOriginH - 20, playOriginV - 16); + AddRectToWorkRects(&src); + AddRectToBackRects(&dest); +} + +//-------------------------------------------------------------- RenderFlames + +void RenderFlames (void) +{ + short i; + + if ((numFlames == 0) && (numTikiFlames == 0) && (numCoals == 0)) + return; + + for (i = 0; i < numFlames; i++) + { + flames[i].mode++; + flames[i].src.top += 15; + flames[i].src.bottom += 15; + if (flames[i].mode >= kNumCandleFlames) + { + flames[i].mode = 0; + flames[i].src.top = 0; + flames[i].src.bottom = 15; + } + + CopyBits((BitMap *)*GetGWorldPixMap(savedMaps[flames[i].who].map), + (BitMap *)*GetGWorldPixMap(workSrcMap), + &flames[i].src, &flames[i].dest, srcCopy, nil); + + AddRectToWorkRects(&flames[i].dest); + } + + for (i = 0; i < numTikiFlames; i++) + { + tikiFlames[i].mode++; + tikiFlames[i].src.top += 10; + tikiFlames[i].src.bottom += 10; + if (tikiFlames[i].mode >= kNumTikiFlames) + { + tikiFlames[i].mode = 0; + tikiFlames[i].src.top = 0; + tikiFlames[i].src.bottom = 10; + } + + CopyBits((BitMap *)*GetGWorldPixMap(savedMaps[tikiFlames[i].who].map), + (BitMap *)*GetGWorldPixMap(workSrcMap), + &tikiFlames[i].src, &tikiFlames[i].dest, srcCopy, nil); + + AddRectToWorkRects(&tikiFlames[i].dest); + } + + for (i = 0; i < numCoals; i++) + { + bbqCoals[i].mode++; + bbqCoals[i].src.top += 9; + bbqCoals[i].src.bottom += 9; + if (bbqCoals[i].mode >= kNumBBQCoals) + { + bbqCoals[i].mode = 0; + bbqCoals[i].src.top = 0; + bbqCoals[i].src.bottom = 9; + } + + CopyBits((BitMap *)*GetGWorldPixMap(savedMaps[bbqCoals[i].who].map), + (BitMap *)*GetGWorldPixMap(workSrcMap), + &bbqCoals[i].src, &bbqCoals[i].dest, srcCopy, nil); + + AddRectToWorkRects(&bbqCoals[i].dest); + } +} + +//-------------------------------------------------------------- RenderPendulums + +void RenderPendulums (void) +{ + short i; + Boolean playedTikTok; + + playedTikTok = false; + + if (numPendulums == 0) + return; + + clockFrame++; + if ((clockFrame == 10) || (clockFrame == 15)) + { + if (clockFrame >= 15) + clockFrame = 0; + + for (i = 0; i < numPendulums; i++) + { + if (pendulums[i].active) + { + if (pendulums[i].toOrFro) + { + pendulums[i].mode++; + pendulums[i].src.top += 28; + pendulums[i].src.bottom += 28; + + if (pendulums[i].mode >= 2) + { + pendulums[i].toOrFro = !pendulums[i].toOrFro; + if (!playedTikTok) + { + PlayPrioritySound(kTikSound, kTikPriority); + playedTikTok = true; + } + } + } + else + { + pendulums[i].mode--; + pendulums[i].src.top -= 28; + pendulums[i].src.bottom -= 28; + + if (pendulums[i].mode <= 0) + { + pendulums[i].toOrFro = !pendulums[i].toOrFro; + if (!playedTikTok) + { + PlayPrioritySound(kTokSound, kTokPriority); + playedTikTok = true; + } + } + } + + CopyBits((BitMap *)*GetGWorldPixMap(savedMaps[pendulums[i].who].map), + (BitMap *)*GetGWorldPixMap(workSrcMap), + &pendulums[i].src, &pendulums[i].dest, srcCopy, nil); + + AddRectToWorkRects(&pendulums[i].dest); + } + } + } +} + +//-------------------------------------------------------------- RenderFlyingPoints + +void RenderFlyingPoints (void) +{ + short i; + + if (numFlyingPts == 0) + return; + + for (i = 0; i < kMaxFlyingPts; i++) + { + if (flyingPoints[i].mode != -1) + { + if (flyingPoints[i].mode > flyingPoints[i].stop) + { + flyingPoints[i].mode = flyingPoints[i].start; + flyingPoints[i].loops++; + } + + if (flyingPoints[i].loops >= kMaxFlyingPointsLoop) + { + AddRectToWorkRects(&flyingPoints[i].dest); + flyingPoints[i].mode = -1; + numFlyingPts--; + } + else + { + flyingPoints[i].dest.left += flyingPoints[i].hVel; + flyingPoints[i].dest.right += flyingPoints[i].hVel; + + if (flyingPoints[i].hVel > 0) + flyingPoints[i].whole.right = flyingPoints[i].dest.right; + else + flyingPoints[i].whole.left = flyingPoints[i].dest.left; + + flyingPoints[i].dest.top += flyingPoints[i].vVel; + flyingPoints[i].dest.bottom += flyingPoints[i].vVel; + + if (flyingPoints[i].vVel > 0) + flyingPoints[i].whole.bottom = flyingPoints[i].dest.bottom; + else + flyingPoints[i].whole.top = flyingPoints[i].dest.top; + + CopyMask((BitMap *)*GetGWorldPixMap(pointsSrcMap), + (BitMap *)*GetGWorldPixMap(pointsMaskMap), + (BitMap *)*GetGWorldPixMap(workSrcMap), + &pointsSrc[flyingPoints[i].mode], + &pointsSrc[flyingPoints[i].mode], + &flyingPoints[i].dest); + + AddRectToWorkRects(&flyingPoints[i].whole); + AddRectToBackRects(&flyingPoints[i].dest); + flyingPoints[i].whole = flyingPoints[i].dest; + flyingPoints[i].mode++; + } + } + } +} + +//-------------------------------------------------------------- RenderSparkles + +void RenderSparkles (void) +{ + short i; + + if (numSparkles == 0) + return; + + for (i = 0; i < kMaxSparkles; i++) + { + if (sparkles[i].mode != -1) + { + if (sparkles[i].mode >= kNumSparkleModes) + { + AddRectToWorkRects(&sparkles[i].bounds); + sparkles[i].mode = -1; + numSparkles--; + } + else + { + CopyMask((BitMap *)*GetGWorldPixMap(bonusSrcMap), + (BitMap *)*GetGWorldPixMap(bonusMaskMap), + (BitMap *)*GetGWorldPixMap(workSrcMap), + &sparkleSrc[sparkles[i].mode], + &sparkleSrc[sparkles[i].mode], + &sparkles[i].bounds); + + AddRectToWorkRects(&sparkles[i].bounds); + AddRectToBackRects(&sparkles[i].bounds); + sparkles[i].mode++; + } + } + } +} + +//-------------------------------------------------------------- RenderStars + +void RenderStars (void) +{ + short i; + + if (numStars == 0) + return; + + for (i = 0; i < numStars; i++) + { + if (theStars[i].mode != -1) + { + theStars[i].mode++; + theStars[i].src.top += 31; + theStars[i].src.bottom += 31; + if (theStars[i].mode >= 6) + { + theStars[i].mode = 0; + theStars[i].src.top = 0; + theStars[i].src.bottom = 31; + } + + CopyBits((BitMap *)*GetGWorldPixMap(savedMaps[theStars[i].who].map), + (BitMap *)*GetGWorldPixMap(workSrcMap), + &theStars[i].src, &theStars[i].dest, srcCopy, nil); + + AddRectToWorkRects(&theStars[i].dest); + } + } +} + +//-------------------------------------------------------------- RenderGlider + +void RenderGlider (gliderPtr thisGlider, Boolean oneOrTwo) +{ + Rect src, dest; + short which; + + if (thisGlider->dontDraw) + return; + + if (thisGlider->facing == kFaceRight) + which = 0; + else + which = 1; + + if (shadowVisible) + { + dest = thisGlider->destShadow; + QOffsetRect(&dest, playOriginH, playOriginV); + + if ((thisGlider->mode == kGliderComingUp) || + (thisGlider->mode == kGliderGoingDown)) + { + src = shadowSrc[which]; + src.right = src.left + (dest.right - dest.left); + + CopyMask((BitMap *)*GetGWorldPixMap(shadowSrcMap), + (BitMap *)*GetGWorldPixMap(shadowMaskMap), + (BitMap *)*GetGWorldPixMap(workSrcMap), + &src, &src, &dest); + } + else if (thisGlider->mode == kGliderComingDown) + { + src = shadowSrc[which]; + src.left = src.right - (dest.right - dest.left); + + CopyMask((BitMap *)*GetGWorldPixMap(shadowSrcMap), + (BitMap *)*GetGWorldPixMap(shadowMaskMap), + (BitMap *)*GetGWorldPixMap(workSrcMap), + &src, &src, &dest); + } + else + CopyMask((BitMap *)*GetGWorldPixMap(shadowSrcMap), + (BitMap *)*GetGWorldPixMap(shadowMaskMap), + (BitMap *)*GetGWorldPixMap(workSrcMap), + &shadowSrc[which], &shadowSrc[which], &dest); + src =thisGlider->wholeShadow; + QOffsetRect(&src, playOriginH, playOriginV); + AddRectToWorkRects(&src); + AddRectToBackRects(&dest); + } + + dest = thisGlider->dest; + QOffsetRect(&dest, playOriginH, playOriginV); + + if (oneOrTwo) + { + if ((!twoPlayerGame) && (showFoil)) + CopyMask((BitMap *)*GetGWorldPixMap(glid2SrcMap), + (BitMap *)*GetGWorldPixMap(glidMaskMap), + (BitMap *)*GetGWorldPixMap(workSrcMap), + &thisGlider->src, &thisGlider->mask, &dest); + else + CopyMask((BitMap *)*GetGWorldPixMap(glidSrcMap), + (BitMap *)*GetGWorldPixMap(glidMaskMap), + (BitMap *)*GetGWorldPixMap(workSrcMap), + &thisGlider->src, &thisGlider->mask, &dest); + } + else + { + CopyMask((BitMap *)*GetGWorldPixMap(glid2SrcMap), + (BitMap *)*GetGWorldPixMap(glidMaskMap), + (BitMap *)*GetGWorldPixMap(workSrcMap), + &thisGlider->src, &thisGlider->mask, &dest); + } + + src =thisGlider->whole; + QOffsetRect(&src, playOriginH, playOriginV); + AddRectToWorkRects(&src); + AddRectToBackRects(&dest); +} + +//-------------------------------------------------------------- RenderBands + +void RenderBands (void) +{ + Rect dest; + short i; + + if (numBands == 0) + return; + + for (i = 0; i < numBands; i++) + { + dest = bands[i].dest; + QOffsetRect(&dest, playOriginH, playOriginV); + CopyMask((BitMap *)*GetGWorldPixMap(bandsSrcMap), + (BitMap *)*GetGWorldPixMap(bandsMaskMap), + (BitMap *)*GetGWorldPixMap(workSrcMap), + &bandRects[bands[i].mode], + &bandRects[bands[i].mode], &dest); + + AddRectToWorkRects(&dest); + AddRectToBackRects(&dest); + } +} + +//-------------------------------------------------------------- RenderShreds + +void RenderShreds (void) +{ + Rect src, dest; + short i, high; + + if (numShredded > 0) + { + for (i = 0; i < numShredded; i++) + { + if (shreds[i].frame == 0) + { + shreds[i].bounds.bottom += 1; + high = shreds[i].bounds.bottom - shreds[i].bounds.top; + if (high >= 35) + shreds[i].frame = 1; + src = shredSrcRect; + src.top = src.bottom - high; + dest = shreds[i].bounds; + QOffsetRect(&dest, playOriginH, playOriginV); + CopyMask((BitMap *)*GetGWorldPixMap(shredSrcMap), + (BitMap *)*GetGWorldPixMap(shredMaskMap), + (BitMap *)*GetGWorldPixMap(workSrcMap), + &src, &src, &dest); + AddRectToBackRects(&dest); + dest.top--; + AddRectToWorkRects(&dest); + PlayPrioritySound(kShredSound, kShredPriority); + } + else if (shreds[i].frame < 20) + { + shreds[i].bounds.top += 4; + shreds[i].bounds.bottom += 4; + dest = shreds[i].bounds; + QOffsetRect(&dest, playOriginH, playOriginV); + shreds[i].frame++; + if (shreds[i].frame < 20) + { + CopyMask((BitMap *)*GetGWorldPixMap(shredSrcMap), + (BitMap *)*GetGWorldPixMap(shredMaskMap), + (BitMap *)*GetGWorldPixMap(workSrcMap), + &shredSrcRect, &shredSrcRect, &dest); + } + else + { + AddSparkle(&shreds[i].bounds); + PlayPrioritySound(kFadeOutSound, kFadeOutPriority); + } + AddRectToBackRects(&dest); + dest.top -= 4; + AddRectToWorkRects(&dest); + } + } + } +} + +//-------------------------------------------------------------- CopyRectsQD + +void CopyRectsQD (void) +{ + short i; + + for (i = 0; i < numWork2Main; i++) + { + CopyBits((BitMap *)*GetGWorldPixMap(workSrcMap), + GetPortBitMapForCopyBits(GetWindowPort(mainWindow)), + &work2MainRects[i], &work2MainRects[i], + srcCopy, nil); + } + + for (i = 0; i < numBack2Work; i++) + { + CopyBits((BitMap *)*GetGWorldPixMap(backSrcMap), + (BitMap *)*GetGWorldPixMap(workSrcMap), + &back2WorkRects[i], &back2WorkRects[i], + srcCopy, nil); + } +} + +//-------------------------------------------------------------- RenderFrame + +void RenderFrame (void) +{ + if (hasMirror) + { + DrawReflection(&theGlider, true); + if (twoPlayerGame) + DrawReflection(&theGlider2, false); + } + HandleGrease(); + RenderPendulums(); + if (evenFrame) + RenderFlames(); + else + RenderStars(); + RenderDynamics(); + RenderFlyingPoints(); + RenderSparkles(); + RenderGlider(&theGlider, true); + if (twoPlayerGame) + RenderGlider(&theGlider2, false); + RenderShreds(); + RenderBands(); + + while (TickCount() < nextFrame) + { + } + nextFrame = TickCount() + kTicksPerFrame; + + CopyRectsQD(); + + numWork2Main = 0; + numBack2Work = 0; +} + +//-------------------------------------------------------------- InitGarbageRects + +void InitGarbageRects (void) +{ + short i; + + numWork2Main = 0; + numBack2Work = 0; + + numSparkles = 0; + for (i = 0; i < kMaxSparkles; i++) + sparkles[i].mode = -1; + + numFlyingPts = 0; + for (i = 0; i < kMaxFlyingPts; i++) + flyingPoints[i].mode = -1; + + nextFrame = TickCount() + kTicksPerFrame; +} + +//-------------------------------------------------------------- CopyRectBackToWork + +void CopyRectBackToWork (Rect *theRect) +{ + CopyBits((BitMap *)*GetGWorldPixMap(backSrcMap), + (BitMap *)*GetGWorldPixMap(workSrcMap), + theRect, theRect, srcCopy, nil); +} + +//-------------------------------------------------------------- CopyRectWorkToBack + +void CopyRectWorkToBack (Rect *theRect) +{ + CopyBits((BitMap *)*GetGWorldPixMap(workSrcMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + theRect, theRect, srcCopy, nil); +} + +//-------------------------------------------------------------- CopyRectWorkToMain + +void CopyRectWorkToMain (Rect *theRect) +{ + CopyBits((BitMap *)*GetGWorldPixMap(workSrcMap), + GetPortBitMapForCopyBits(GetWindowPort(mainWindow)), + theRect, theRect, srcCopy, nil); +} + +//-------------------------------------------------------------- CopyRectMainToWork + +void CopyRectMainToWork (Rect *theRect) +{ + CopyBits(GetPortBitMapForCopyBits(GetWindowPort(mainWindow)), + (BitMap *)*GetGWorldPixMap(workSrcMap), + theRect, theRect, srcCopy, nil); +} + +//-------------------------------------------------------------- CopyRectMainToBack + +void CopyRectMainToBack (Rect *theRect) +{ + CopyBits(GetPortBitMapForCopyBits(GetWindowPort(mainWindow)), + (BitMap *)*GetGWorldPixMap(backSrcMap), + theRect, theRect, srcCopy, nil); +} + +//-------------------------------------------------------------- AddToMirrorRegion + +void AddToMirrorRegion (Rect *theRect) +{ + RgnHandle tempRgn; + + if (mirrorRgn == nil) + { + mirrorRgn = NewRgn(); + if (mirrorRgn != nil) + RectRgn(mirrorRgn, theRect); + } + else + { + tempRgn = NewRgn(); + if (tempRgn != nil) + { + RectRgn(tempRgn, theRect); + UnionRgn(mirrorRgn, tempRgn, mirrorRgn); + DisposeRgn(tempRgn); + } + } + hasMirror = true; +} + +//-------------------------------------------------------------- ZeroMirrorRegion + +void ZeroMirrorRegion (void) +{ + if (mirrorRgn != nil) + DisposeRgn(mirrorRgn); + mirrorRgn = nil; + hasMirror = false; +} + diff --git a/GpApp/Room.cpp b/GpApp/Room.cpp new file mode 100644 index 0000000..a72e742 --- /dev/null +++ b/GpApp/Room.cpp @@ -0,0 +1,1207 @@ +//============================================================================ +//---------------------------------------------------------------------------- +// Room.c +//---------------------------------------------------------------------------- +//============================================================================ + + +#include "PLResources.h" +#include "PLToolUtils.h" +#include "PLPasStr.h" +#include "Externs.h" +#include "House.h" +#include "MainWindow.h" +#include "RectUtils.h" + + +#define kDeleteRoomAlert 1005 +#define kYesDoDeleteRoom 1 + + +Boolean QueryDeleteRoom (void); +void SetToNearestNeighborRoom (short, short); + + +roomPtr thisRoom; +Rect backSrcRect; +GWorldPtr backSrcMap; +short numberRooms, thisRoomNumber, previousRoom; +short leftThresh, rightThresh, lastBackground; +Boolean autoRoomEdit, newRoomNow, noRoomAtAll; +Boolean leftOpen, rightOpen, topOpen, bottomOpen; +Boolean doBitchDialogs; + +extern short tempTiles[]; + + +//============================================================== Functions +//-------------------------------------------------------------- SetInitialTiles + +#ifndef COMPILEDEMO +void SetInitialTiles (short background, Boolean doRoom) +{ + short i; + + if (background >= kUserBackground) + { + for (i = 0; i < kNumTiles; i++) + { + if (doRoom) + thisRoom->tiles[i] = i; + else + tempTiles[i] = i; + } + } + else + { + switch (background) + { + case kSimpleRoom: + case kPaneledRoom: + case kBasement: + case kChildsRoom: + case kAsianRoom: + case kUnfinishedRoom: + case kSwingersRoom: + case kBathroom: + case kLibrary: + for (i = 0; i < kNumTiles; i++) + { + if (doRoom) + thisRoom->tiles[i] = 1; + else + tempTiles[i] = 1; + } + if (doRoom) + { + thisRoom->tiles[0] = 0; + thisRoom->tiles[kNumTiles - 1] = kNumTiles - 1; + } + else + { + tempTiles[0] = 0; + tempTiles[kNumTiles - 1] = kNumTiles - 1; + } + break; + + case kSkywalk: + for (i = 0; i < kNumTiles; i++) + { + if (doRoom) + thisRoom->tiles[i] = i; + else + tempTiles[i] = i; + } + break; + + case kField: + case kGarden: + case kDirt: + for (i = 0; i < kNumTiles; i++) + { + if (doRoom) + thisRoom->tiles[i] = 0; + else + tempTiles[i] = 0; + } + break; + + case kMeadow: + for (i = 0; i < kNumTiles; i++) + { + if (doRoom) + thisRoom->tiles[i] = 1; + else + tempTiles[i] = 1; + } + break; + + case kRoof: + for (i = 0; i < kNumTiles; i++) + { + if (doRoom) + thisRoom->tiles[i] = 3; + else + tempTiles[i] = 3; + } + break; + + case kSky: + for (i = 0; i < kNumTiles; i++) + { + if (doRoom) + thisRoom->tiles[i] = 2; + else + tempTiles[i] = 2; + } + break; + + case kStratosphere: + case kStars: + for (i = 0; i < kNumTiles; i++) + { + if (doRoom) + thisRoom->tiles[i] = i; + else + tempTiles[i] = i; + } + break; + + default: + break; + } + } +} +#endif + +//-------------------------------------------------------------- CreateNewRoom + +#ifndef COMPILEDEMO +Boolean CreateNewRoom (short h, short v) +{ + KeyMap theKeys; + long howMuch; + OSErr theErr; + short i, availableRoom; + char wasState; + + CopyThisRoomToRoom(); // save off current room + + PasStringCopy(PSTR("Untitled Room"), thisRoom->name); + thisRoom->leftStart = 32; // fill out fields of new room + thisRoom->rightStart = 32; + thisRoom->bounds = 0; + thisRoom->unusedByte = 0; + thisRoom->visited = false; + thisRoom->background = lastBackground; + SetInitialTiles(thisRoom->background, true); + thisRoom->floor = v; + thisRoom->suite = h; + thisRoom->openings = 0; + thisRoom->numObjects = 0; + for (i = 0; i < kMaxRoomObs; i++) // zero out all objects + thisRoom->objects[i].what = kObjectIsEmpty; + + wasState = HGetState((Handle)thisHouse); + MoveHHi((Handle)thisHouse); + HLock((Handle)thisHouse); + availableRoom = -1; // assume no available rooms + if ((*thisHouse)->nRooms > 0) // look for an empty room + for (i = 0; i < (*thisHouse)->nRooms; i++) + if ((*thisHouse)->rooms[i].suite == kRoomIsEmpty) + { + availableRoom = i; + break; + } + + if (availableRoom == -1) // found no available rooms + { + HUnlock((Handle)thisHouse); + howMuch = sizeof(roomType); // add new room to end of house + theErr = PtrAndHand((Ptr)thisRoom, (Handle)thisHouse, howMuch); + if (theErr != noErr) + { + YellowAlert(kYellowUnaccounted, theErr); + MoveHHi((Handle)thisHouse); + HLock((Handle)thisHouse); + return (false); + } + MoveHHi((Handle)thisHouse); + HLock((Handle)thisHouse); + (*thisHouse)->nRooms++; // increment nRooms + numberRooms = (*thisHouse)->nRooms; + previousRoom = thisRoomNumber; + thisRoomNumber = numberRooms - 1; + } + else + { + previousRoom = thisRoomNumber; + thisRoomNumber = availableRoom; + } + + if (noRoomAtAll) + (*thisHouse)->firstRoom = thisRoomNumber; + + HSetState((Handle)thisHouse, wasState); + + CopyThisRoomToRoom(); + UpdateEditWindowTitle(); + noRoomAtAll = false; + fileDirty = true; + UpdateMenus(false); + + GetKeys(theKeys); + if (BitTst(&theKeys, kShiftKeyMap)) + newRoomNow = false; + else + newRoomNow = autoRoomEdit; // Flag to bring up RoomInfo + + return (true); +} +#endif + +//-------------------------------------------------------------- ReadyBackground + +void ReadyBackground (short theID, short *theTiles) +{ + Rect src, dest; + PicHandle thePicture; + short i; + + SetPort((GrafPtr)workSrcMap); + + if ((noRoomAtAll) || (!houseUnlocked)) + { + LtGrayForeColor(); + PaintRect(&workSrcRect); + ForeColor(blackColor); + MoveTo(10, 20); + if (houseUnlocked) + DrawString(PSTR("No rooms")); + else + DrawString(PSTR("Nothing to show")); + + CopyBits((BitMap *)*GetGWorldPixMap(workSrcMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &workSrcRect, &workSrcRect, srcCopy, nil); + return; + } + + thePicture = GetPicture(theID); + if (thePicture == nil) + { + thePicture = (PicHandle)GetResource('Date', theID); + if (thePicture == nil) + { + YellowAlert(kYellowNoBackground, 0); + return; + } + } + + HLock((Handle)thePicture); + dest = (*thePicture)->picFrame; + HUnlock((Handle)thePicture); + QOffsetRect(&dest, -dest.left, -dest.top); + DrawPicture(thePicture, &dest); + ReleaseResource((Handle)thePicture); + + QSetRect(&src, 0, 0, kTileWide, kTileHigh); + QSetRect(&dest, 0, 0, kTileWide, kTileHigh); + for (i = 0; i < kNumTiles; i++) + { + src.left = theTiles[i] * kTileWide; + src.right = src.left + kTileWide; + CopyBits((BitMap *)*GetGWorldPixMap(workSrcMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &src, &dest, srcCopy, nil); + QOffsetRect(&dest, kTileWide, 0); + } + + QSetRect(&src, 0, 0, kRoomWide, kTileHigh); + QSetRect(&dest, 0, 0, kRoomWide, kTileHigh); + CopyBits((BitMap *)*GetGWorldPixMap(backSrcMap), + (BitMap *)*GetGWorldPixMap(workSrcMap), + &src, &dest, srcCopy, nil); +} + +//-------------------------------------------------------------- ReflectCurrentRoom + +void ReflectCurrentRoom (Boolean forceMapRedraw) +{ +#ifndef COMPILEDEMO + if (theMode != kEditMode) + return; + + if ((noRoomAtAll) || (!houseUnlocked)) + { + CenterMapOnRoom(64, 1); + UpdateMapWindow(); + } + else + { + if ((!ThisRoomVisibleOnMap()) || (forceMapRedraw)) + { + CenterMapOnRoom(thisRoom->suite, thisRoom->floor); + UpdateMapWindow(); // whole map window redrawm + } + else + { + FindNewActiveRoomRect(); // find newly selected room rect + FlagMapRoomsForUpdate(); // redraw only the portions required + } + } + GenerateRetroLinks(); + UpdateEditWindowTitle(); + ReadyBackground(thisRoom->background, thisRoom->tiles); + GetThisRoomsObjRects(); + DrawThisRoomsObjects(); + InvalWindowRect(mainWindow, &mainWindowRect); +#endif +} + +//-------------------------------------------------------------- CopyRoomToThisRoom + +void CopyRoomToThisRoom (short roomNumber) +{ + if (roomNumber == -1) + return; + + CopyThisRoomToRoom(); // copy back to house + ForceThisRoom(roomNumber); // load new room from house +} + +//-------------------------------------------------------------- CopyThisRoomToRoom + +void CopyThisRoomToRoom (void) +{ + char tagByte; + + if ((noRoomAtAll) || (thisRoomNumber == -1)) + return; + + tagByte = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); // copy back to house + (*thisHouse)->rooms[thisRoomNumber] = *thisRoom; + HSetState((Handle)thisHouse, tagByte); +} + +//-------------------------------------------------------------- ForceThisRoom + +void ForceThisRoom (short roomNumber) +{ + char tagByte; + + if (roomNumber == -1) + return; + + tagByte = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + if (roomNumber < (*thisHouse)->nRooms) + *thisRoom = (*thisHouse)->rooms[roomNumber]; + else + YellowAlert(kYellowIllegalRoomNum, 0); + HSetState((Handle)thisHouse, tagByte); + + previousRoom = thisRoomNumber; + thisRoomNumber = roomNumber; +} + +//-------------------------------------------------------------- RoomExists + +Boolean RoomExists (short suite, short floor, short *roomNum) +{ + // pass in a suite and floor; returns true is it is a legitimate room + houseType *thisHousePtr; + short i; + char wasState; + Boolean foundIt; + + foundIt = false; + + if (suite < 0) + return (foundIt); + + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + thisHousePtr = *thisHouse; + + for (i = 0; i < numberRooms; i++) + { + if ((thisHousePtr->rooms[i].floor == floor) && + (thisHousePtr->rooms[i].suite == suite)) + { + foundIt = true; + *roomNum = i; + break; + } + } + + HSetState((Handle)thisHouse, wasState); + + return (foundIt); +} + +//-------------------------------------------------------------- RoomNumExists + +Boolean RoomNumExists (short roomNum) +{ + short floor, suite, whoCares; + Boolean exists; + + exists = false; + if (GetRoomFloorSuite(roomNum, &floor, &suite)) + exists = RoomExists(suite, floor, &whoCares); + + return (exists); +} + +//-------------------------------------------------------------- DeleteRoom + +void DeleteRoom (Boolean doWarn) +{ +#ifndef COMPILEDEMO + short wasFloor, wasSuite; + char wasState; + Boolean firstDeleted; + + if ((theMode != kEditMode) || (noRoomAtAll)) + return; + + if (doWarn) + { + if (!QueryDeleteRoom()) + return; + } + + DeselectObject(); + + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + wasFloor = (*thisHouse)->rooms[thisRoomNumber].floor; + wasSuite = (*thisHouse)->rooms[thisRoomNumber].suite; + firstDeleted = ((*thisHouse)->firstRoom == thisRoomNumber); // is room "first" + thisRoom->suite = kRoomIsEmpty; + (*thisHouse)->rooms[thisRoomNumber].suite = kRoomIsEmpty; + HSetState((Handle)thisHouse, wasState); + + noRoomAtAll = (RealRoomNumberCount() == 0); // see if now no rooms + if (noRoomAtAll) + thisRoomNumber = kRoomIsEmpty; + else + SetToNearestNeighborRoom(wasFloor, wasSuite); + + if (firstDeleted) + { + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + (*thisHouse)->firstRoom = thisRoomNumber; + HSetState((Handle)thisHouse, wasState); + } + + newRoomNow = false; + fileDirty = true; + UpdateMenus(false); + ReflectCurrentRoom(false); +#endif +} + +//-------------------------------------------------------------- QueryDeleteRoom + +#ifndef COMPILEDEMO +Boolean QueryDeleteRoom (void) +{ + short hitWhat; + +// CenterAlert(kDeleteRoomAlert); + hitWhat = Alert(kDeleteRoomAlert, nil); + if (hitWhat == kYesDoDeleteRoom) + return (true); + else + return (false); +} +#endif + +//-------------------------------------------------------------- DoesNeighborRoomExist + +short DoesNeighborRoomExist (short whichNeighbor) +{ +#ifndef COMPILEDEMO + short newH, newV, newRoomNumber; + + if (theMode != kEditMode) + return(-1); + + newH = thisRoom->suite; + newV = thisRoom->floor; + + switch (whichNeighbor) + { + case kRoomAbove: + newV++; + break; + + case kRoomBelow: + newV--; + break; + + case kRoomToRight: + newH++; + break; + + case kRoomToLeft: + newH--; + break; + } + + if (RoomExists(newH, newV, &newRoomNumber)) + return (newRoomNumber); + else + return (-1); +#endif +} + +//-------------------------------------------------------------- SelectNeighborRoom + +void SelectNeighborRoom (short whichNeighbor) +{ +#ifndef COMPILEDEMO + short newRoomNumber; + + newRoomNumber = DoesNeighborRoomExist(whichNeighbor); + + if (newRoomNumber != -1) + { + DeselectObject(); + CopyRoomToThisRoom(newRoomNumber); + ReflectCurrentRoom(false); + } +#endif +} + +//-------------------------------------------------------------- GetNeighborRoomNumber + +short GetNeighborRoomNumber (short which) +{ + short hDelta, vDelta, i; + short roomH, roomV; + short roomNum; + char wasState; + + switch (which) + { + case kCentralRoom: + hDelta = 0; + vDelta = 0; + break; + + case kNorthRoom: + hDelta = 0; + vDelta = 1; + break; + + case kNorthEastRoom: + hDelta = 1; + vDelta = 1; + break; + + case kEastRoom: + hDelta = 1; + vDelta = 0; + break; + + case kSouthEastRoom: + hDelta = 1; + vDelta = -1; + break; + + case kSouthRoom: + hDelta = 0; + vDelta = -1; + break; + + case kSouthWestRoom: + hDelta = -1; + vDelta = -1; + break; + + case kWestRoom: + hDelta = -1; + vDelta = 0; + break; + + case kNorthWestRoom: + hDelta = -1; + vDelta = 1; + break; + } + + roomNum = kRoomIsEmpty; + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + roomH = (*thisHouse)->rooms[thisRoomNumber].suite + hDelta; + roomV = (*thisHouse)->rooms[thisRoomNumber].floor + vDelta; + + for (i = 0; i < numberRooms; i++) + { + if (((*thisHouse)->rooms[i].suite == roomH) && + ((*thisHouse)->rooms[i].floor == roomV)) + { + roomNum = i; + break; + } + } + HSetState((Handle)thisHouse, wasState); + + return (roomNum); +} + +//-------------------------------------------------------------- SetToNearestNeighborRoom + +void SetToNearestNeighborRoom (short wasFloor, short wasSuite) +{ + // searches in a clockwise spiral pattern (from thisRoom) for aÉ + // legitimate neighboring room - then sets thisRoom to it + short distance, h, v; + short hStep, vStep; + short testRoomNum, testH, testV; + char wasState; + Boolean finished; + + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + + finished = false; + distance = 1; // we begin our walk a distance of one from source room + h = -1; // we begin with the neighbor to the leftÉ + v = 0; // and on the same floor + hStep = 0; // we don't 'walk' left or rightÉ + vStep = -1; // instead, we 'walk' up + + do + { + testH = wasSuite + h; + testV = wasFloor + v; + + if (RoomExists(testH, testV, &testRoomNum)) // if a legitimate room + { + CopyRoomToThisRoom(testRoomNum); + finished = true; + } + else + { + h += hStep; + v += vStep; + if ((h > distance) || (h < -distance) || (v > distance) || (v < -distance)) + { // we have walked beyond the bounds of our spiral + if ((hStep == -1) && (vStep == 0)) // we expand our spiral out + { + distance++; + hStep = 0; // begin travelling up again + vStep = -1; + } + else + { + h -= hStep; // first, back up a step + v -= vStep; + + if (hStep == 0) // we were travelling up or down + { + if (vStep == -1) // we were travelling upÉ + hStep = 1; // so begin travelling right + else // we were travelling downÉ + hStep = -1; // so begin travelling left + vStep = 0; + } + else + { + hStep = 0; // begin travelling down + vStep = 1; + } + h += hStep; // proceed a step now + v += vStep; + } + } + } + } while (!finished); + + HSetState((Handle)thisHouse, wasState); +} + +//-------------------------------------------------------------- GetRoomFloorSuite + +Boolean GetRoomFloorSuite (short room, short *floor, short *suite) +{ + char wasState; + Boolean isRoom; + + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + if ((*thisHouse)->rooms[room].suite == kRoomIsEmpty) + { + *floor = 0; + *suite = kRoomIsEmpty; + isRoom = false; + } + else + { + *suite = (*thisHouse)->rooms[room].suite; + *floor = (*thisHouse)->rooms[room].floor; + isRoom = true; + } + HSetState((Handle)thisHouse, wasState); + + return (isRoom); +} + +//-------------------------------------------------------------- GetRoomNumber + +short GetRoomNumber (short floor, short suite) +{ + // pass in a floor and suite; returns the room index into the house file + short roomNum, i; + char wasState; + + roomNum = kRoomIsEmpty; + + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + for (i = 0; i < numberRooms; i++) + { + if (((*thisHouse)->rooms[i].suite == suite) && + ((*thisHouse)->rooms[i].floor == floor)) + { + roomNum = i; + break; + } + } + HSetState((Handle)thisHouse, wasState); + + return (roomNum); +} + +//-------------------------------------------------------------- IsRoomAStructure + +Boolean IsRoomAStructure (short roomNum) +{ + char wasState; + Boolean isStructure; + + if (roomNum == kRoomIsEmpty) + return (false); + + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + if ((*thisHouse)->rooms[roomNum].background >= kUserBackground) + { + if ((*thisHouse)->rooms[roomNum].bounds != 0) + { + isStructure = (((*thisHouse)->rooms[roomNum].bounds & 32) == 32); + } + else + { + if ((*thisHouse)->rooms[roomNum].background < kUserStructureRange) + isStructure = true; + else + isStructure = false; + } + } + else + { + switch ((*thisHouse)->rooms[roomNum].background) + { + case kPaneledRoom: + case kSimpleRoom: + case kChildsRoom: + case kAsianRoom: + case kUnfinishedRoom: + case kSwingersRoom: + case kBathroom: + case kLibrary: + case kSkywalk: + case kRoof: + isStructure = true; + break; + + default: + isStructure = false; + break; + } + } + HSetState((Handle)thisHouse, wasState); + + return (isStructure); +} + +//-------------------------------------------------------------- DetermineRoomOpenings + +void DetermineRoomOpenings (void) +{ + short whichBack, leftTile, rightTile; + short boundsCode; + + whichBack = thisRoom->background; + leftTile = thisRoom->tiles[0]; + rightTile = thisRoom->tiles[kNumTiles - 1]; + + if (whichBack >= kUserBackground) + { + if (thisRoom->bounds != 0) + boundsCode = thisRoom->bounds >> 1; + else + boundsCode = GetOriginalBounding(whichBack); + leftOpen = ((boundsCode & 0x0001) == 0x0001); + rightOpen = ((boundsCode & 0x0004) == 0x0004); + + if (leftOpen) + leftThresh = kNoLeftWallLimit; + else + leftThresh = kLeftWallLimit; + + if (rightOpen) + rightThresh = kNoRightWallLimit; + else + rightThresh = kRightWallLimit; + } + else + { + switch (whichBack) + { + case kSimpleRoom: + case kPaneledRoom: + case kBasement: + case kChildsRoom: + case kAsianRoom: + case kUnfinishedRoom: + case kSwingersRoom: + case kBathroom: + case kLibrary: + case kSky: + if (leftTile == 0) + leftThresh = kLeftWallLimit; + else + leftThresh = kNoLeftWallLimit; + if (rightTile == (kNumTiles - 1)) + rightThresh = kRightWallLimit; + else + rightThresh = kNoRightWallLimit; + leftOpen = (leftTile != 0); + rightOpen = (rightTile != (kNumTiles - 1)); + break; + + case kDirt: + if (leftTile == 1) + leftThresh = kLeftWallLimit; + else + leftThresh = kNoLeftWallLimit; + if (rightTile == (kNumTiles - 1)) + rightThresh = kRightWallLimit; + else + rightThresh = kNoRightWallLimit; + leftOpen = (leftTile != 0); + rightOpen = (rightTile != (kNumTiles - 1)); + break; + + case kMeadow: + if (leftTile == 6) + leftThresh = kLeftWallLimit; + else + leftThresh = kNoLeftWallLimit; + if (rightTile == 7) + rightThresh = kRightWallLimit; + else + rightThresh = kNoRightWallLimit; + leftOpen = (leftTile != 6); + rightOpen = (rightTile != 7); + break; + + case kGarden: + case kSkywalk: + case kField: + case kStratosphere: + case kStars: + leftThresh = kNoLeftWallLimit; + rightThresh = kNoRightWallLimit; + leftOpen = true; + rightOpen = true; + break; + + default: + if (leftTile == 0) + leftThresh = kLeftWallLimit; + else + leftThresh = kNoLeftWallLimit; + + if (rightTile == (kNumTiles - 1)) + rightThresh = kRightWallLimit; + else + rightThresh = kNoRightWallLimit; + + leftOpen = (leftTile != 0); + rightOpen = (rightTile != (kNumTiles - 1)); + break; + } + } + + if (DoesRoomHaveFloor()) + bottomOpen = false; + else + bottomOpen = true; + + if (DoesRoomHaveCeiling()) + topOpen = false; + else + topOpen = true; +} + +//-------------------------------------------------------------- GetOriginalBounding + +short GetOriginalBounding (short theID) +{ + boundsHand boundsRes; + short boundCode; + + boundsRes = (boundsHand)GetResource('bnds', theID); + if (boundsRes == nil) + { + if (PictIDExists(theID)) + YellowAlert(kYellowNoBoundsRes, 0); + boundCode = 0; + } + else + { + boundCode = 0; + HLock((Handle)boundsRes); + if ((*boundsRes)->left) + boundCode += 1; + if ((*boundsRes)->top) + boundCode += 2; + if ((*boundsRes)->right) + boundCode += 4; + if ((*boundsRes)->bottom) + boundCode += 8; + HUnlock((Handle)boundsRes); + ReleaseResource((Handle)boundsRes); + } + + return (boundCode); +} + +//-------------------------------------------------------------- GetNumberOfLights + +short GetNumberOfLights (short where) +{ + houseType *thisHousePtr; + short i, count; + char wasState; + + if (theMode == kEditMode) + { + switch (thisRoom->background) + { + case kGarden: + case kSkywalk: + case kMeadow: + case kField: + case kRoof: + case kSky: + case kStratosphere: + case kStars: + count = 1; + break; + + case kDirt: + count = 0; + if ((thisRoom->tiles[0] == 0) && (thisRoom->tiles[1] == 0) && + (thisRoom->tiles[2] == 0) && (thisRoom->tiles[3] == 0) && + (thisRoom->tiles[4] == 0) && (thisRoom->tiles[5] == 0) && + (thisRoom->tiles[6] == 0) && (thisRoom->tiles[7] == 0)) + count = 1; + break; + + default: + count = 0; + break; + } + if (count == 0) + { + for (i = 0; i < kMaxRoomObs; i++) + { + switch (thisRoom->objects[i].what) + { + case kDoorInLf: + case kDoorInRt: + case kWindowInLf: + case kWindowInRt: + case kWallWindow: + count++; + break; + + case kCeilingLight: + case kLightBulb: + case kTableLamp: + case kHipLamp: + case kDecoLamp: + case kFlourescent: + case kTrackLight: + case kInvisLight: + if (thisRoom->objects[i].data.f.initial) + count++; + break; + } + } + } + } + else + { + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + thisHousePtr = *thisHouse; + switch (thisHousePtr->rooms[where].background) + { + case kGarden: + case kSkywalk: + case kMeadow: + case kField: + case kRoof: + case kSky: + case kStratosphere: + case kStars: + count = 1; + break; + + case kDirt: + count = 0; + if ((thisHousePtr->rooms[where].tiles[0] == 0) && + (thisHousePtr->rooms[where].tiles[1] == 0) && + (thisHousePtr->rooms[where].tiles[2] == 0) && + (thisHousePtr->rooms[where].tiles[3] == 0) && + (thisHousePtr->rooms[where].tiles[4] == 0) && + (thisHousePtr->rooms[where].tiles[5] == 0) && + (thisHousePtr->rooms[where].tiles[6] == 0) && + (thisHousePtr->rooms[where].tiles[7] == 0)) + count = 1; + break; + + default: + count = 0; + break; + } + if (count == 0) + { + for (i = 0; i < kMaxRoomObs; i++) + { + switch (thisHousePtr->rooms[where].objects[i].what) + { + case kDoorInLf: + case kDoorInRt: + case kWindowInLf: + case kWindowInRt: + case kWallWindow: + count++; + break; + + case kCeilingLight: + case kLightBulb: + case kTableLamp: + case kHipLamp: + case kDecoLamp: + case kFlourescent: + case kTrackLight: + case kInvisLight: + if (thisHousePtr->rooms[where].objects[i].data.f.state) + count++; + break; + } + } + } + HSetState((Handle)thisHouse, wasState); + } + return (count); +} + +//-------------------------------------------------------------- IsShadowVisible + +Boolean IsShadowVisible (void) +{ + short boundsCode; + Boolean hasFloor; + + if (thisRoom->background >= kUserBackground) + { + if (thisRoom->bounds != 0) // is this a version 2.0 house? + boundsCode = (thisRoom->bounds >> 1); + else + boundsCode = GetOriginalBounding(thisRoom->background); + hasFloor = ((boundsCode & 0x0008) != 0x0008); + } + else + { + switch (thisRoom->background) + { + case kRoof: + case kSky: + case kStratosphere: + case kStars: + hasFloor = false; + break; + + default: + hasFloor = true; + break; + } + } + + return (hasFloor); +} + +//-------------------------------------------------------------- DoesRoomHaveFloor + +Boolean DoesRoomHaveFloor (void) +{ + short boundsCode; + Boolean hasFloor; + + if (thisRoom->background >= kUserBackground) + { + if (thisRoom->bounds != 0) // is this a version 2.0 house? + boundsCode = (thisRoom->bounds >> 1); + else + boundsCode = GetOriginalBounding(thisRoom->background); + hasFloor = ((boundsCode & 0x0008) != 0x0008); + } + else + { + switch (thisRoom->background) + { + case kSky: + case kStratosphere: + case kStars: + hasFloor = false; + break; + + default: + hasFloor = true; + break; + } + } + + return (hasFloor); +} + +//-------------------------------------------------------------- DoesRoomHaveCeiling + +Boolean DoesRoomHaveCeiling (void) +{ + short boundsCode; + Boolean hasCeiling; + + if (thisRoom->background >= kUserBackground) + { + if (thisRoom->bounds != 0) // is this a version 2.0 house? + boundsCode = (thisRoom->bounds >> 1); + else + boundsCode = GetOriginalBounding(thisRoom->background); + hasCeiling = ((boundsCode & 0x0002) != 0x0002); + } + else + { + switch (thisRoom->background) + { + case kGarden: + case kMeadow: + case kField: + case kRoof: + case kSky: + case kStratosphere: + case kStars: + hasCeiling = false; + break; + + default: + hasCeiling = true; + break; + } + } + return (hasCeiling); +} + diff --git a/GpApp/Room.h b/GpApp/Room.h new file mode 100644 index 0000000..740fcc5 --- /dev/null +++ b/GpApp/Room.h @@ -0,0 +1,12 @@ +//============================================================================ +//---------------------------------------------------------------------------- +// Room.h +//---------------------------------------------------------------------------- +//============================================================================ + + +#include "PLQDOffscreen.h" + + +extern GWorldPtr backSrcMap; + diff --git a/GpApp/RoomGraphics.cpp b/GpApp/RoomGraphics.cpp new file mode 100644 index 0000000..724865d --- /dev/null +++ b/GpApp/RoomGraphics.cpp @@ -0,0 +1,461 @@ +//============================================================================ +//---------------------------------------------------------------------------- +// RoomGraphics.c +//---------------------------------------------------------------------------- +//============================================================================ + + +#include "PLResources.h" +#include "Externs.h" +#include "Environ.h" +#include "MainWindow.h" +#include "RectUtils.h" +#include "Room.h" + + +#define kManholeThruFloor 3957 + + +void LoadGraphicSpecial (short); +void DrawRoomBackground (short, short, short); +void DrawFloorSupport (void); +void ReadyBackMap (void); +void RestoreWorkMap (void); +void DrawLighting (void); + + +Rect suppSrcRect; +GWorldPtr suppSrcMap; +Rect localRoomsDest[9]; +Rect houseRect; +short numNeighbors, numLights, thisTiles[kNumTiles]; +short localNumbers[9], thisBackground; +Boolean isStructure[9], wardBitSet; + +extern Rect tempManholes[]; +extern short numTempManholes, tvWithMovieNumber; +extern Boolean shadowVisible, takingTheStairs; + + +//============================================================== Functions +//-------------------------------------------------------------- DrawLocale + +void DrawLocale (void) +{ + short i, roomV; + char wasState; + CGrafPtr wasCPort; + GDHandle wasWorld; + + ZeroFlamesAndTheLike(); + ZeroDinahs(); + KillAllBands(); + ZeroMirrorRegion(); + ZeroTriggers(); + numTempManholes = 0; + FlushAnyTriggerPlaying(); + DumpTriggerSound(); + tvInRoom = false; + tvWithMovieNumber = -1; + + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + roomV = (*thisHouse)->rooms[thisRoomNumber].floor; + HSetState((Handle)thisHouse, wasState); + + for (i = 0; i < 9; i++) + { + localNumbers[i] = GetNeighborRoomNumber(i); + isStructure[i] = IsRoomAStructure(localNumbers[i]); + } + ListAllLocalObjects(); + + GetGWorld(&wasCPort, &wasWorld); + SetGWorld(backSrcMap, nil); + PaintRect(&backSrcRect); + + if (numNeighbors > 3) + { + numLights = GetNumberOfLights(localNumbers[kNorthWestRoom]); + DrawRoomBackground(localNumbers[kNorthWestRoom], kNorthWestRoom, roomV + 1); + DrawARoomsObjects(kNorthWestRoom, false); + + numLights = GetNumberOfLights(localNumbers[kNorthEastRoom]); + DrawRoomBackground(localNumbers[kNorthEastRoom], kNorthEastRoom, roomV + 1); + DrawARoomsObjects(kNorthEastRoom, false); + + numLights = GetNumberOfLights(localNumbers[kNorthRoom]); + DrawRoomBackground(localNumbers[kNorthRoom], kNorthRoom, roomV + 1); + DrawARoomsObjects(kNorthRoom, false); + + numLights = GetNumberOfLights(localNumbers[kSouthWestRoom]); + DrawRoomBackground(localNumbers[kSouthWestRoom], kSouthWestRoom, roomV - 1); + DrawARoomsObjects(kSouthWestRoom, false); + + numLights = GetNumberOfLights(localNumbers[kSouthEastRoom]); + DrawRoomBackground(localNumbers[kSouthEastRoom], kSouthEastRoom, roomV - 1); + DrawARoomsObjects(kSouthEastRoom, false); + + numLights = GetNumberOfLights(localNumbers[kSouthRoom]); + DrawRoomBackground(localNumbers[kSouthRoom], kSouthRoom, roomV - 1); + DrawARoomsObjects(kSouthRoom, false); + } + + if (numNeighbors > 1) + { + numLights = GetNumberOfLights(localNumbers[kWestRoom]); + DrawRoomBackground(localNumbers[kWestRoom], kWestRoom, roomV); + DrawARoomsObjects(kWestRoom, false); + DrawLighting(); + + numLights = GetNumberOfLights(localNumbers[kEastRoom]); + DrawRoomBackground(localNumbers[kEastRoom], kEastRoom, roomV); + DrawARoomsObjects(kEastRoom, false); + DrawLighting(); + } + + numLights = GetNumberOfLights(localNumbers[kCentralRoom]); + DrawRoomBackground(localNumbers[kCentralRoom], kCentralRoom, roomV); + DrawARoomsObjects(kCentralRoom, false); + DrawLighting(); + + if (numNeighbors > 3) + DrawFloorSupport(); + RestoreWorkMap(); + shadowVisible = IsShadowVisible(); + takingTheStairs = false; + + SetGWorld(wasCPort, wasWorld); +} + +//-------------------------------------------------------------- LoadGraphicSpecial + +void LoadGraphicSpecial (short resID) +{ + Rect bounds; + PicHandle thePicture; + + thePicture = GetPicture(resID); + if (thePicture == nil) + { + thePicture = (PicHandle)GetResource('Date', resID); + if (thePicture == nil) + { + thePicture = GetPicture(2000); + if (thePicture == nil) + RedAlert(kErrFailedGraphicLoad); + } + } + + HLock((Handle)thePicture); + bounds = (*thePicture)->picFrame; + HUnlock((Handle)thePicture); + OffsetRect(&bounds, -bounds.left, -bounds.top); + DrawPicture(thePicture, &bounds); + + ReleaseResource((Handle)thePicture); +} + +//-------------------------------------------------------------- DrawRoomBackground + +void DrawRoomBackground (short who, short where, short elevation) +{ + Rect src, dest; + short i, pictID; + short tiles[kNumTiles]; + char wasState; + + if (where == kCentralRoom) + { + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + thisBackground = (*thisHouse)->rooms[who].background; + for (i = 0; i < kNumTiles; i++) + thisTiles[i] = (*thisHouse)->rooms[who].tiles[i]; + HSetState((Handle)thisHouse, wasState); + } + + if ((numLights == 0) && (who != kRoomIsEmpty)) + { + CGrafPtr wasCPort; + GDHandle wasWorld; + + GetGWorld(&wasCPort, &wasWorld); + SetGWorld(backSrcMap, nil); + + PaintRect(&localRoomsDest[where]); + + SetGWorld(wasCPort, wasWorld); + return; + } + + if (who == kRoomIsEmpty) // This call should be smarter than this + { + if (wardBitSet) + { + CGrafPtr wasCPort; + GDHandle wasWorld; + + GetGWorld(&wasCPort, &wasWorld); + SetGWorld(backSrcMap, nil); + + PaintRect(&localRoomsDest[where]); + + SetGWorld(wasCPort, wasWorld); + return; + } + + if (elevation > 1) + { + pictID = kSky; + for (i = 0; i < kNumTiles; i++) + tiles[i] = 2; + } + else if (elevation == 1) + { + pictID = kMeadow; + for (i = 0; i < kNumTiles; i++) + tiles[i] = 0; + } + else + { + pictID = kDirt; + for (i = 0; i < kNumTiles; i++) + tiles[i] = 0; + } + } + else + { + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + pictID = (*thisHouse)->rooms[who].background; + for (i = 0; i < kNumTiles; i++) + tiles[i] = (*thisHouse)->rooms[who].tiles[i]; + HSetState((Handle)thisHouse, wasState); + } + + SetPort((GrafPtr)workSrcMap); + LoadGraphicSpecial(pictID); + + QSetRect(&src, 0, 0, kTileWide, kTileHigh); + QSetRect(&dest, 0, 0, kTileWide, kTileHigh); + QOffsetRect(&dest, localRoomsDest[where].left, localRoomsDest[where].top); + for (i = 0; i < kNumTiles; i++) + { + src.left = tiles[i] * kTileWide; + src.right = src.left + kTileWide; + CopyBits((BitMap *)*GetGWorldPixMap(workSrcMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &src, &dest, srcCopy, nil); + QOffsetRect(&dest, kTileWide, 0); + } +} + +//-------------------------------------------------------------- DrawFloorSupport + +void DrawFloorSupport (void) +{ + Rect src, dest, whoCares; + short i; + CGrafPtr wasCPort; + GDHandle wasWorld; + + GetGWorld(&wasCPort, &wasWorld); + SetGWorld(backSrcMap, nil); + src = suppSrcRect; + + if (isStructure[kNorthWestRoom]) + { + dest = suppSrcRect; // left room's ceiling + QOffsetRect(&dest, localRoomsDest[kWestRoom].left, + localRoomsDest[kCentralRoom].top - suppSrcRect.bottom); + CopyBits((BitMap *)*GetGWorldPixMap(suppSrcMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &src, &dest, srcCopy, nil); + + for (i = 0; i < numTempManholes; i++) + if (SectRect(&dest, &tempManholes[i], &whoCares)) + { + tempManholes[i].top = dest.top; + tempManholes[i].bottom = dest.bottom; + LoadScaledGraphic(kManholeThruFloor, &tempManholes[i]); + } + } + + if (isStructure[kWestRoom]) + { + dest = suppSrcRect; // left room's floor + QOffsetRect(&dest, localRoomsDest[kWestRoom].left, + localRoomsDest[kCentralRoom].bottom); + CopyBits((BitMap *)*GetGWorldPixMap(suppSrcMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &src, &dest, srcCopy, nil); + + for (i = 0; i < numTempManholes; i++) + if (SectRect(&dest, &tempManholes[i], &whoCares)) + { + tempManholes[i].top = dest.top; + tempManholes[i].bottom = dest.bottom; + LoadScaledGraphic(kManholeThruFloor, &tempManholes[i]); + } + } + + if (isStructure[kNorthRoom]) + { + dest = suppSrcRect; // directly above main room + QOffsetRect(&dest, localRoomsDest[kCentralRoom].left, + localRoomsDest[kCentralRoom].top - suppSrcRect.bottom); + CopyBits((BitMap *)*GetGWorldPixMap(suppSrcMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &src, &dest, srcCopy, nil); + for (i = 0; i < numTempManholes; i++) + if (SectRect(&dest, &tempManholes[i], &whoCares)) + { + tempManholes[i].top = dest.top; + tempManholes[i].bottom = dest.bottom; + LoadScaledGraphic(kManholeThruFloor, &tempManholes[i]); + } + } + + if (isStructure[kCentralRoom]) + { + dest = suppSrcRect; // directly below main room + QOffsetRect(&dest, localRoomsDest[kCentralRoom].left, + localRoomsDest[kCentralRoom].bottom); + CopyBits((BitMap *)*GetGWorldPixMap(suppSrcMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &src, &dest, srcCopy, nil); + + for (i = 0; i < numTempManholes; i++) + if (SectRect(&dest, &tempManholes[i], &whoCares)) + { + tempManholes[i].top = dest.top; + tempManholes[i].bottom = dest.bottom; + LoadScaledGraphic(kManholeThruFloor, &tempManholes[i]); + } + } + + if (isStructure[kNorthEastRoom]) + { + dest = suppSrcRect; + QOffsetRect(&dest, localRoomsDest[kEastRoom].left, + localRoomsDest[kCentralRoom].top - suppSrcRect.bottom); + CopyBits((BitMap *)*GetGWorldPixMap(suppSrcMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &src, &dest, srcCopy, nil); + + for (i = 0; i < numTempManholes; i++) + if (SectRect(&dest, &tempManholes[i], &whoCares)) + { + tempManholes[i].top = dest.top; + tempManholes[i].bottom = dest.bottom; + LoadScaledGraphic(kManholeThruFloor, &tempManholes[i]); + } + } + + if (isStructure[kEastRoom]) + { + dest = suppSrcRect; + QOffsetRect(&dest, localRoomsDest[kEastRoom].left, + localRoomsDest[kCentralRoom].bottom); + CopyBits((BitMap *)*GetGWorldPixMap(suppSrcMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &src, &dest, srcCopy, nil); + + for (i = 0; i < numTempManholes; i++) + if (SectRect(&dest, &tempManholes[i], &whoCares)) + { + tempManholes[i].top = dest.top; + tempManholes[i].bottom = dest.bottom; + LoadScaledGraphic(kManholeThruFloor, &tempManholes[i]); + } + } + + SetGWorld(wasCPort, wasWorld); +} + +//-------------------------------------------------------------- ReadyBackMap + +void ReadyBackMap (void) +{ + CopyBits((BitMap *)*GetGWorldPixMap(workSrcMap), + (BitMap *)*GetGWorldPixMap(backSrcMap), + &workSrcRect, &workSrcRect, srcCopy, nil); +} + +//-------------------------------------------------------------- RestoreWorkMap + +void RestoreWorkMap (void) +{ + Rect dest; + + dest = backSrcRect; + + CopyBits((BitMap *)*GetGWorldPixMap(backSrcMap), + (BitMap *)*GetGWorldPixMap(workSrcMap), + &backSrcRect, &backSrcRect, srcCopy, nil); +} + +//-------------------------------------------------------------- ReadyLevel + +void ReadyLevel (void) +{ + NilSavedMaps(); + +#ifdef COMPILEQT + if ((thisMac.hasQT) && (hasMovie) && (tvInRoom)) + { + tvInRoom = false; + tvWithMovieNumber = -1; + StopMovie(theMovie); + } +#endif + + DetermineRoomOpenings(); + DrawLocale(); + InitGarbageRects(); +} + +//-------------------------------------------------------------- DrawLighting + +void DrawLighting (void) +{ + if (numLights == 0) + return; + else + { + // for future construction + } +} + +//-------------------------------------------------------------- RedrawRoomLighting + +void RedrawRoomLighting (void) +{ + short roomV; + char wasState; + Boolean wasLit, isLit; + + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + roomV = (*thisHouse)->rooms[thisRoomNumber].floor; + HSetState((Handle)thisHouse, wasState); + + wasLit = numLights > 0; + numLights = GetNumberOfLights(localNumbers[kCentralRoom]); + isLit = numLights > 0; + if (wasLit != isLit) + { + DrawRoomBackground(localNumbers[kCentralRoom], kCentralRoom, roomV); + DrawARoomsObjects(kCentralRoom, true); + DrawLighting(); + UpdateOutletsLighting(localNumbers[kCentralRoom], numLights); + + if (numNeighbors > 3) + DrawFloorSupport(); + RestoreWorkMap(); + AddRectToWorkRects(&localRoomsDest[kCentralRoom]); + shadowVisible = IsShadowVisible(); + } +} + diff --git a/GpApp/RoomGraphics.h b/GpApp/RoomGraphics.h new file mode 100644 index 0000000..bda7b47 --- /dev/null +++ b/GpApp/RoomGraphics.h @@ -0,0 +1,11 @@ +//============================================================================ +//---------------------------------------------------------------------------- +// RoomGraphics.h +//---------------------------------------------------------------------------- +//============================================================================ + + +#include "PLQDOffscreen.h" + + +extern GWorldPtr suppSrcMap; diff --git a/GpApp/RoomInfo.cpp b/GpApp/RoomInfo.cpp new file mode 100644 index 0000000..36cbb39 --- /dev/null +++ b/GpApp/RoomInfo.cpp @@ -0,0 +1,908 @@ + +//============================================================================ +//---------------------------------------------------------------------------- +// RoomInfo.c +//---------------------------------------------------------------------------- +//============================================================================ + + +#include "PLNumberFormatting.h" +#include "PLResources.h" +#include "PLSound.h" +#include "PLPasStr.h" +#include "DialogUtils.h" +#include "Externs.h" +#include "RectUtils.h" +#include "Utilities.h" + + +#define kRoomInfoDialogID 1003 +#define kOriginalArtDialogID 1016 +#define kNoPICTFoundAlert 1036 +#define kRoomNameItem 3 +#define kRoomLocationBox 6 +#define kRoomTilesBox 10 +#define kRoomPopupItem 11 +#define kRoomDividerLine 12 +#define kRoomTilesBox2 15 +#define kRoomFirstCheck 17 +#define kLitUnlitText 18 +#define kMiniTileWide 16 +#define kBoundsButton 19 +#define kOriginalArtworkItem 19 +#define kPICTIDItem 5 +#define kFloorSupportCheck 12 + + +void UpdateRoomInfoDialog (DialogPtr); +void DragMiniTile (Point, short *); +void HiliteTileOver (Point); +Boolean RoomFilter (DialogPtr, EventRecord *, short *); +short ChooseOriginalArt (short); +void UpdateOriginalArt (DialogPtr); +Boolean OriginalArtFilter (DialogPtr, EventRecord *, short *); +Boolean PictIDExists (short); +short GetFirstPICT (void); +void BitchAboutPICTNotFound (void); + + +Rect tileSrc, tileDest, tileSrcRect, editTETextBox; +Rect leftBound, topBound, rightBound, bottomBound; +CGrafPtr tileSrcMap; +short tempTiles[kNumTiles]; +short tileOver, tempBack, cursorIs; +Boolean originalLeftOpen, originalTopOpen, originalRightOpen, originalBottomOpen; +Boolean originalFloor; + +extern Cursor handCursor, beamCursor; +extern short houseResFork, lastBackground; + + +//============================================================== Functions +//-------------------------------------------------------------- UpdateRoomInfoDialog + +#ifndef COMPILEDEMO +void UpdateRoomInfoDialog (DialogPtr theDialog) +{ + Rect src, dest; + short i; + + DrawDialog(theDialog); + if (tempBack >= kUserBackground) + SetPopUpMenuValue(theDialog, kRoomPopupItem, kOriginalArtworkItem); + else + SetPopUpMenuValue(theDialog, kRoomPopupItem, + (tempBack - kBaseBackgroundID) + 1); + + + + CopyBits(GetPortBitMapForCopyBits(tileSrcMap), + GetPortBitMapForCopyBits(GetDialogPort(theDialog)), + &tileSrcRect, &tileSrc, srcCopy, nil); + /* + CopyBits(&((GrafPtr)tileSrcMap)->portBits, + &(((GrafPtr)theDialog)->portBits), + &tileSrcRect, &tileSrc, srcCopy, nil); + */ + dest = tileDest; + dest.right = dest.left + kMiniTileWide; + for (i = 0; i < kNumTiles; i++) + { + QSetRect(&src, 0, 0, kMiniTileWide, 80); + QOffsetRect(&src, tempTiles[i] * kMiniTileWide, 0); + + CopyBits(GetPortBitMapForCopyBits(tileSrcMap), + GetPortBitMapForCopyBits(GetDialogPort(theDialog)), + &src, &dest, srcCopy, nil); + /* + CopyBits(&((GrafPtr)tileSrcMap)->portBits, + &(((GrafPtr)theDialog)->portBits), + &src, &dest, srcCopy, nil); + */ + QOffsetRect(&dest, kMiniTileWide, 0); + } + + if (GetNumberOfLights(thisRoomNumber) == 0) + SetDialogString(theDialog, kLitUnlitText, PSTR("(Room Is Dark)")); + else + SetDialogString(theDialog, kLitUnlitText, PSTR("(Room Is Lit)")); + + FrameDialogItemC(theDialog, kRoomLocationBox, kRedOrangeColor8); + FrameDialogItem(theDialog, kRoomTilesBox); + FrameDialogItemC(theDialog, kRoomDividerLine, kRedOrangeColor8); + FrameDialogItem(theDialog, kRoomTilesBox2); +} +#endif + +//-------------------------------------------------------------- DragMiniTile + +#ifndef COMPILEDEMO +void DragMiniTile (Point mouseIs, short *newTileOver) +{ + Rect dragRect; + Point mouseWas; + short wasTileOver; + Pattern dummyPattern; + + tileOver = (mouseIs.h - tileSrc.left) / kMiniTileWide; + wasTileOver = -1; + QSetRect(&dragRect, 0, 0, kMiniTileWide, 80); + QOffsetRect(&dragRect, + tileSrc.left + (tileOver * kMiniTileWide), + tileSrc.top); + PenMode(patXor); + PenPat(GetQDGlobalsGray(&dummyPattern)); + FrameRect(&dragRect); + mouseWas = mouseIs; + while (WaitMouseUp()) // loop until mouse button let up + { + GetMouse(&mouseIs); // get mouse coords + if (DeltaPoint(mouseWas, mouseIs) != 0L) // the mouse has moved + { + FrameRect(&dragRect); + QOffsetRect(&dragRect, mouseIs.h - mouseWas.h, 0); + FrameRect(&dragRect); + + if (PtInRect(mouseIs, &tileDest)) // is cursor in the drop rect + { + *newTileOver = (mouseIs.h - tileDest.left) / kMiniTileWide; + if (*newTileOver != wasTileOver) + { + PenNormal(); + PenSize(1, 2); + ForeColor(blueColor); + MoveTo(tileDest.left + (*newTileOver * kMiniTileWide), + tileDest.top - 3); + Line(kMiniTileWide, 0); + MoveTo(tileDest.left + (*newTileOver * kMiniTileWide), + tileDest.bottom + 1); + Line(kMiniTileWide, 0); + + if (wasTileOver != -1) + { + ForeColor(whiteColor); + MoveTo(tileDest.left + (wasTileOver * kMiniTileWide), + tileDest.top - 3); + Line(kMiniTileWide, 0); + MoveTo(tileDest.left + (wasTileOver * kMiniTileWide), + tileDest.bottom + 1); + Line(kMiniTileWide, 0); + } + ForeColor(blackColor); + PenNormal(); + PenMode(patXor); + PenPat(GetQDGlobalsGray(&dummyPattern)); + wasTileOver = *newTileOver; + } + } + else + { + *newTileOver = -1; // we're not in the drop zone + if (wasTileOver != -1) + { + PenNormal(); + PenSize(1, 2); + ForeColor(whiteColor); + MoveTo(tileDest.left + (wasTileOver * kMiniTileWide), + tileDest.top - 3); + Line(kMiniTileWide, 0); + MoveTo(tileDest.left + (wasTileOver * kMiniTileWide), + tileDest.bottom + 1); + Line(kMiniTileWide, 0); + ForeColor(blackColor); + PenNormal(); + PenMode(patXor); + PenPat(GetQDGlobalsGray(&dummyPattern)); + wasTileOver = -1; + } + } + + mouseWas = mouseIs; + } + } + if (wasTileOver != -1) + { + PenNormal(); + PenSize(1, 2); + ForeColor(whiteColor); + MoveTo(tileDest.left + (wasTileOver * kMiniTileWide), tileDest.top - 3); + Line(kMiniTileWide, 0); + MoveTo(tileDest.left + (wasTileOver * kMiniTileWide), tileDest.bottom + 1); + Line(kMiniTileWide, 0); + ForeColor(blackColor); + PenNormal(); + PenMode(patXor); + PenPat(GetQDGlobalsGray(&dummyPattern)); + wasTileOver = -1; + } + FrameRect(&dragRect); + PenNormal(); +} +#endif + +//-------------------------------------------------------------- HiliteTileOver + +#ifndef COMPILEDEMO +void HiliteTileOver (Point mouseIs) +{ + short newTileOver; + + if (PtInRect(mouseIs, &tileSrc)) + { + if (cursorIs != kHandCursor) + { + SetCursor(&handCursor); + cursorIs = kHandCursor; + } + + newTileOver = (mouseIs.h - tileSrc.left) / kMiniTileWide; + if (newTileOver != tileOver) + { + PenSize(1, 2); + ForeColor(redColor); + MoveTo(tileSrc.left + (newTileOver * kMiniTileWide), tileSrc.top - 3); + Line(kMiniTileWide, 0); + MoveTo(tileSrc.left + (newTileOver * kMiniTileWide), tileSrc.bottom + 1); + Line(kMiniTileWide, 0); + + if (tileOver != -1) + { + ForeColor(whiteColor); + MoveTo(tileSrc.left + (tileOver * kMiniTileWide), tileSrc.top - 3); + Line(kMiniTileWide, 0); + MoveTo(tileSrc.left + (tileOver * kMiniTileWide), tileSrc.bottom + 1); + Line(kMiniTileWide, 0); + } + ForeColor(blackColor); + PenNormal(); + + tileOver = newTileOver; + } + } + else + { + if (tileOver != -1) + { + PenSize(1, 2); + ForeColor(whiteColor); + MoveTo(tileSrc.left + (tileOver * kMiniTileWide), tileSrc.top - 3); + Line(kMiniTileWide, 0); + MoveTo(tileSrc.left + (tileOver * kMiniTileWide), tileSrc.bottom + 1); + Line(kMiniTileWide, 0); + ForeColor(blackColor); + PenNormal(); + tileOver = -1; + } + + if (PtInRect(mouseIs, &editTETextBox)) + { + if (cursorIs != kBeamCursor) + { + SetCursor(&beamCursor); + cursorIs = kBeamCursor; + } + } + else + { + if (cursorIs != kArrowCursor) + { + InitCursor(); + cursorIs = kArrowCursor; + } + } + } +} +#endif + +//-------------------------------------------------------------- RoomFilter +#ifndef COMPILEDEMO + +Boolean RoomFilter (DialogPtr dial, EventRecord *event, short *item) +{ + Point mouseIs; + short newTileOver; + + switch (event->what) + { + case keyDown: + switch ((event->message) & charCodeMask) + { + case kReturnKeyASCII: + case kEnterKeyASCII: + FlashDialogButton(dial, kOkayButton); + *item = kOkayButton; + return(true); + break; + + case kEscapeKeyASCII: + FlashDialogButton(dial, kCancelButton); + *item = kCancelButton; + return(true); + break; + + case kTabKeyASCII: + SelectDialogItemText(dial, kRoomNameItem, 0, 1024); + return(true); + break; + + default: + return(false); + } + break; + + case mouseDown: + mouseIs = event->where; + GlobalToLocal(&mouseIs); + if (PtInRect(mouseIs, &tileSrc)) + { + if (StillDown()) + { + DragMiniTile(mouseIs, &newTileOver); + if ((newTileOver >= 0) && (newTileOver < kNumTiles)) + { + tempTiles[newTileOver] = tileOver; + UpdateRoomInfoDialog(dial); + } + } + return(true); + } + else + return(false); + break; + + case mouseUp: + return(false); + break; + + case updateEvt: + SetPort((GrafPtr)dial); + BeginUpdate(GetDialogWindow(dial)); + UpdateRoomInfoDialog(dial); + EndUpdate(GetDialogWindow(dial)); + event->what = nullEvent; + return(false); + break; + + default: + GetMouse(&mouseIs); + HiliteTileOver(mouseIs); + return(false); + break; + } +} +#endif + +//-------------------------------------------------------------- DoRoomInfo + +void DoRoomInfo (void) +{ +#ifndef COMPILEDEMO + #define kBackgroundsMenuID 140 + DialogPtr roomInfoDialog; + MenuHandle backgroundsMenu; + Str255 floorStr, suiteStr, objectsStr, tempStr; + short item, i, newBack; + char wasState; + Boolean leaving, wasFirstRoom, forceDraw; + ModalFilterUPP roomFilterUPP; + CGrafPtr wasCPort; + GDHandle wasWorld; + OSErr theErr; + + GetGWorld(&wasCPort, &wasWorld); + roomFilterUPP = NewModalFilterUPP(RoomFilter); + + tileOver = -1; + cursorIs = kArrowCursor; + tempBack = thisRoom->background; + backgroundsMenu = GetMenu(kBackgroundsMenuID); +// SetMenuItemTextStyle(backgroundsMenu, kOriginalArtworkItem, italic); + if (HouseHasOriginalPicts()) + EnableMenuItem(backgroundsMenu, kOriginalArtworkItem); + + NumToString(thisRoom->floor, floorStr); + NumToString(thisRoom->suite, suiteStr); + NumToString(thisRoom->numObjects, objectsStr); + ParamText(floorStr, suiteStr, objectsStr, PSTR("")); + + theErr = CreateOffScreenGWorld(&tileSrcMap, &tileSrcRect, kPreferredDepth); + SetGWorld(tileSrcMap, nil); +// CreateOffScreenPixMap(&tileSrcRect, &tileSrcMap); +// SetPort((GrafPtr)tileSrcMap); + if ((tempBack > kStars) && (!PictIDExists(tempBack))) + { + BitchAboutPICTNotFound(); + tempBack = kSimpleRoom; + } + if ((tempBack == 2002) || (tempBack == 2011) || + (tempBack == 2016) || (tempBack == 2017)) + LoadScaledGraphic(tempBack - 800, &tileSrcRect); + else + LoadScaledGraphic(tempBack, &tileSrcRect); + + SetGWorld(wasCPort, wasWorld); + + for (i = 0; i < kNumTiles; i++) + tempTiles[i] = thisRoom->tiles[i]; + +// CenterDialog(kRoomInfoDialogID); + roomInfoDialog = GetNewDialog(kRoomInfoDialogID, nil, kPutInFront); + if (roomInfoDialog == nil) + RedAlert(kErrDialogDidntLoad); + SetPort((GrafPtr)roomInfoDialog); + + // Fix this later. TEMP +// AddMenuToPopUp(roomInfoDialog, kRoomPopupItem, backgroundsMenu); + if (tempBack >= kUserBackground) + SetPopUpMenuValue(roomInfoDialog, kRoomPopupItem, kOriginalArtworkItem); + else + SetPopUpMenuValue(roomInfoDialog, kRoomPopupItem, + (tempBack - kBaseBackgroundID) + 1); + SetDialogString(roomInfoDialog, kRoomNameItem, thisRoom->name); + GetDialogItemRect(roomInfoDialog, kRoomTilesBox, &tileSrc); + GetDialogItemRect(roomInfoDialog, kRoomTilesBox2, &tileDest); + GetDialogItemRect(roomInfoDialog, kRoomNameItem, &editTETextBox); + SelectDialogItemText(roomInfoDialog, kRoomNameItem, 0, 1024); + + ShowWindow(GetDialogWindow(roomInfoDialog)); + DrawDefaultButton(roomInfoDialog); + + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + wasFirstRoom = ((*thisHouse)->firstRoom == thisRoomNumber); + HSetState((Handle)thisHouse, wasState); + SetDialogItemValue(roomInfoDialog, kRoomFirstCheck, (short)wasFirstRoom); + + if (tempBack >= kUserBackground) + MyEnableControl(roomInfoDialog, kBoundsButton); + else + MyDisableControl(roomInfoDialog, kBoundsButton); + + leaving = false; + + while (!leaving) + { + ModalDialog(roomFilterUPP, &item); + + if (item == kOkayButton) + { + for (i = 0; i < kNumTiles; i++) + thisRoom->tiles[i] = tempTiles[i]; + + GetDialogString(roomInfoDialog, kRoomNameItem, tempStr); + PasStringCopyNum(tempStr, thisRoom->name, 27); + if (wasFirstRoom) + { + HLock((Handle)thisHouse); + (*thisHouse)->firstRoom = thisRoomNumber; + HUnlock((Handle)thisHouse); + } + thisRoom->background = tempBack; + if (tempBack < kUserBackground) + lastBackground = tempBack; + CopyThisRoomToRoom(); + ReflectCurrentRoom(false); + fileDirty = true; + UpdateMenus(false); + leaving = true; + } + else if (item == kCancelButton) + { + leaving = true; + } + else if (item == kRoomFirstCheck) + { + wasFirstRoom = !wasFirstRoom; + SetDialogItemValue(roomInfoDialog, kRoomFirstCheck, (short)wasFirstRoom); + } + else if (item == kRoomPopupItem) + { + GetPopUpMenuValue(roomInfoDialog, kRoomPopupItem, &newBack); + if (newBack == kOriginalArtworkItem) // original art item selected? + { + if (tempBack < kUserBackground) // was previous bg built-in? + { + tempBack = GetFirstPICT(); // then assign 1st PICT + forceDraw = true; + } + else + forceDraw = false; + newBack = ChooseOriginalArt(tempBack); // bring up dialog + if ((tempBack != newBack) || (forceDraw)) + { + tempBack = newBack; + SetPort((GrafPtr)tileSrcMap); + LoadScaledGraphic(tempBack, &tileSrcRect); + InvalWindowRect(GetDialogWindow(roomInfoDialog), &tileSrc); + InvalWindowRect(GetDialogWindow(roomInfoDialog), &tileDest); + } + } + else + { + newBack += (kBaseBackgroundID - 1); // adjust to get real PICT ID + if (newBack != tempBack) // if background has changed + SetInitialTiles(newBack, false); + } + + if (newBack >= kUserBackground) + { + MyEnableControl(roomInfoDialog, kBoundsButton); + if (newBack != tempBack) // if background has changed + SetInitialTiles(newBack, false); + } + else + MyDisableControl(roomInfoDialog, kBoundsButton); + + if (newBack != tempBack) + { + tempBack = newBack; + SetPort((GrafPtr)tileSrcMap); + if ((tempBack == 2002) || (tempBack == 2011) || + (tempBack == 2016) || (tempBack == 2017)) + LoadScaledGraphic(tempBack - 800, &tileSrcRect); + else + LoadScaledGraphic(tempBack, &tileSrcRect); + InvalWindowRect(GetDialogWindow(roomInfoDialog), &tileSrc); + InvalWindowRect(GetDialogWindow(roomInfoDialog), &tileDest); + } + } + else if (item == kBoundsButton) + { + newBack = ChooseOriginalArt(tempBack); + if (tempBack != newBack) + { + tempBack = newBack; + SetPort((GrafPtr)tileSrcMap); + LoadScaledGraphic(tempBack, &tileSrcRect); + InvalWindowRect(GetDialogWindow(roomInfoDialog), &tileSrc); + InvalWindowRect(GetDialogWindow(roomInfoDialog), &tileDest); + } + } + } + + InitCursor(); + DisposeDialog(roomInfoDialog); + DisposeModalFilterUPP(roomFilterUPP); + +// KillOffScreenPixMap(tileSrcMap); + DisposeGWorld(tileSrcMap); + tileSrcMap = nil; +#endif +} + +//-------------------------------------------------------------- UpdateOriginalArt + +#ifndef COMPILEDEMO +void UpdateOriginalArt (DialogPtr theDialog) +{ + Pattern dummyPattern; + + DrawDialog(theDialog); + DrawDefaultButton(theDialog); + + PenSize(2, 1); + if (!originalLeftOpen) + BorderDialogItem(theDialog, 7, 8); + else + { + PenPat(GetQDGlobalsGray(&dummyPattern)); + BorderDialogItem(theDialog, 7, 8); + PenPat(GetQDGlobalsBlack(&dummyPattern)); + } + + PenSize(1, 2); + if (!originalTopOpen) + BorderDialogItem(theDialog, 8, 4); + else + { + PenPat(GetQDGlobalsGray(&dummyPattern)); + BorderDialogItem(theDialog, 8, 4); + PenPat(GetQDGlobalsBlack(&dummyPattern)); + } + + PenSize(2, 1); + if (!originalRightOpen) + BorderDialogItem(theDialog, 9, 1); + else + { + PenPat(GetQDGlobalsGray(&dummyPattern)); + BorderDialogItem(theDialog, 9, 1); + PenPat(GetQDGlobalsBlack(&dummyPattern)); + } + + PenSize(1, 2); + if (!originalBottomOpen) + BorderDialogItem(theDialog, 10, 2); + else + { + PenPat(GetQDGlobalsGray(&dummyPattern)); + BorderDialogItem(theDialog, 10, 2); + PenPat(GetQDGlobalsBlack(&dummyPattern)); + } + + PenSize(1, 1); +} +#endif + +//-------------------------------------------------------------- OriginalArtFilter +#ifndef COMPILEDEMO + +Boolean OriginalArtFilter (DialogPtr dial, EventRecord *event, short *item) +{ + Point mouseIs; + + switch (event->what) + { + case keyDown: + switch ((event->message) & charCodeMask) + { + case kReturnKeyASCII: + case kEnterKeyASCII: + FlashDialogButton(dial, kOkayButton); + *item = kOkayButton; + return(true); + break; + + case kEscapeKeyASCII: + FlashDialogButton(dial, kCancelButton); + *item = kCancelButton; + return(true); + break; + + case kTabKeyASCII: + SelectDialogItemText(dial, kPICTIDItem, 0, 1024); + return(true); + break; + + default: + return(false); + } + break; + + case mouseDown: + mouseIs = event->where; + GlobalToLocal(&mouseIs); + if (PtInRect(mouseIs, &leftBound)) + { + *item = 7; + return(true); + } + else if (PtInRect(mouseIs, &topBound)) + { + *item = 8; + return(true); + } + else if (PtInRect(mouseIs, &rightBound)) + { + *item = 9; + return(true); + } + else if (PtInRect(mouseIs, &bottomBound)) + { + *item = 10; + return(true); + } + else + return(false); + break; + + case mouseUp: + return(false); + break; + + case updateEvt: + SetPort((GrafPtr)dial); + BeginUpdate(GetDialogWindow(dial)); + UpdateOriginalArt(dial); + EndUpdate(GetDialogWindow(dial)); + event->what = nullEvent; + return(false); + break; + + default: + return(false); + break; + } +} +#endif + +//-------------------------------------------------------------- ChooseOriginalArt + +#ifndef COMPILEDEMO +short ChooseOriginalArt (short was) +{ + DialogPtr theDialog; + long longID; + short item, newPictID, tempShort, wasPictID; + Boolean leaving; + ModalFilterUPP originalArtFilterUPP; + + originalArtFilterUPP = NewModalFilterUPP(OriginalArtFilter); + + if (was < kUserBackground) + was = kUserBackground; + + InitCursor(); + BringUpDialog(&theDialog, kOriginalArtDialogID); + if (was >= kOriginalArtworkItem) + { + newPictID = was; + wasPictID = was; + } + else + { + newPictID = kUserBackground; + wasPictID = 0; + } + SetDialogNumToStr(theDialog, kPICTIDItem, (long)newPictID); + SelectDialogItemText(theDialog, kPICTIDItem, 0, 16); + + GetDialogItemRect(theDialog, 7, &leftBound); + GetDialogItemRect(theDialog, 8, &topBound); + GetDialogItemRect(theDialog, 9, &rightBound); + GetDialogItemRect(theDialog, 10, &bottomBound); + + tempShort = thisRoom->bounds >> 1; // version 2.0 house + originalLeftOpen = ((tempShort & 1) == 1); + originalTopOpen = ((tempShort & 2) == 2); + originalRightOpen = ((tempShort & 4) == 4); + originalBottomOpen = ((tempShort & 8) == 8); + originalFloor = ((tempShort & 16) == 16); + + SetDialogItemValue(theDialog, kFloorSupportCheck, (short)originalFloor); + + leaving = false; + + while (!leaving) + { + ModalDialog(originalArtFilterUPP, &item); + + if (item == kOkayButton) + { + GetDialogNumFromStr(theDialog, kPICTIDItem, &longID); + if ((longID >= 3000) && (longID < 3800) && (PictIDExists((short)longID))) + { + newPictID = (short)longID; + if (newPictID != wasPictID) + SetInitialTiles(tempBack, false); + tempShort = 0; + if (originalLeftOpen) + tempShort += 1; + if (originalTopOpen) + tempShort += 2; + if (originalRightOpen) + tempShort += 4; + if (originalBottomOpen) + tempShort += 8; + if (originalFloor) + tempShort += 16; + tempShort = tempShort << 1; // shift left 1 bit + tempShort += 1; // flag that says orginal bounds used + thisRoom->bounds = tempShort; + leaving = true; + } + else + { + SysBeep(1); + SetDialogNumToStr(theDialog, kPICTIDItem, (long)newPictID); + } + } + else if (item == kCancelButton) + { + newPictID = was; + leaving = true; + } + else if (item == 7) + { + originalLeftOpen = !originalLeftOpen; + UpdateOriginalArt(theDialog); + } + else if (item == 8) + { + originalTopOpen = !originalTopOpen; + UpdateOriginalArt(theDialog); + } + else if (item == 9) + { + originalRightOpen = !originalRightOpen; + UpdateOriginalArt(theDialog); + } + else if (item == 10) + { + originalBottomOpen = !originalBottomOpen; + UpdateOriginalArt(theDialog); + } + else if (item == kFloorSupportCheck) + { + originalFloor = !originalFloor; + ToggleDialogItemValue(theDialog, kFloorSupportCheck); + } + } + + DisposeDialog(theDialog); + DisposeModalFilterUPP(originalArtFilterUPP); + + return (newPictID); +} +#endif + +//-------------------------------------------------------------- PictIDExists + +Boolean PictIDExists (short theID) +{ + PicHandle thePicture; +// Handle resHandle; +// Str255 resName; +// ResType resType; +// short numPicts, i; +// short resID; + Boolean foundIt; + + foundIt = true; + + thePicture = GetPicture(theID); + if (thePicture == nil) + { + thePicture = (PicHandle)GetResource('Date', theID); + if (thePicture == nil) + { + foundIt = false; + } + else + ReleaseResource((Handle)thePicture); + } + else + ReleaseResource((Handle)thePicture); + +// foundIt = false; +// numPicts = Count1Resources('PICT'); +// for (i = 1; i <= numPicts; i++) +// { +// resHandle = Get1IndResource('PICT', i); +// if (resHandle != nil) +// { +// GetResInfo(resHandle, &resID, &resType, resName); +// ReleaseResource(resHandle); +// if (resID == theID) +// { +// foundIt = true; +// break; +// } +// } +// } + + return (foundIt); +} + +//-------------------------------------------------------------- GetFirstPICT + +short GetFirstPICT (void) +{ + Handle resHandle; + Str255 resName; + ResType resType; + short resID; + + resHandle = Get1IndResource('PICT', 1); + if (resHandle != nil) + { + GetResInfo(resHandle, &resID, &resType, resName); + ReleaseResource(resHandle); + return (resID); + } + else + return (-1); +} + +//-------------------------------------------------------------- BitchAboutPICTNotFound + +#ifndef COMPILEDEMO +void BitchAboutPICTNotFound (void) +{ + short hitWhat; + +// CenterAlert(kNoPICTFoundAlert); + hitWhat = Alert(kNoPICTFoundAlert, nil); +} +#endif + diff --git a/GpApp/RubberBands.cpp b/GpApp/RubberBands.cpp new file mode 100644 index 0000000..43c8f49 --- /dev/null +++ b/GpApp/RubberBands.cpp @@ -0,0 +1,318 @@ +//============================================================================ +//---------------------------------------------------------------------------- +// RubberBands.c +//---------------------------------------------------------------------------- +//============================================================================ + + +#include "Externs.h" +#include "RectUtils.h" + + +#define kRubberBandVelocity 20 +#define kBandFallCount 4 +#define kKillBandMode -1 + + +void CheckBandCollision (short); +void KillBand (short); + + +bandPtr bands; +Rect bandsSrcRect; +Rect bandRects[3]; +GWorldPtr bandsSrcMap; +GWorldPtr bandsMaskMap; +short numBands, bandHitLast; + +extern hotPtr hotSpots; +extern long gameFrame; +extern short nHotSpots, leftThresh, rightThresh; +extern Boolean twoPlayerGame, onePlayerLeft, playerDead; + + +//============================================================== Functions +//-------------------------------------------------------------- CheckBandCollision + +void CheckBandCollision (short who) +{ + short i, action, whoLinked; + Boolean collided, nothingCollided; + + nothingCollided = true; + + if ((leftThresh == kLeftWallLimit) && (bands[who].dest.left < kLeftWallLimit)) + { + if (bands[who].hVel < 0) + bands[who].hVel = -bands[who].hVel; + bands[who].dest.left = kLeftWallLimit; + bands[who].dest.right = bands[who].dest.left + 16; + PlayPrioritySound(kBandReboundSound, kBandReboundPriority); + collided = true; + } + else if ((rightThresh == kRightWallLimit) && (bands[who].dest.right > kRightWallLimit)) + { + if (bands[who].hVel > 0) + bands[who].hVel = -bands[who].hVel; + bands[who].dest.right = kRightWallLimit; + bands[who].dest.left = bands[who].dest.right - 16; + PlayPrioritySound(kBandReboundSound, kBandReboundPriority); + collided = true; + } + + for (i = 0; i < nHotSpots; i++) + { + if (hotSpots[i].isOn) + { + action = hotSpots[i].action; + if ((action == kDissolveIt) || (action == kRewardIt) || + (action == kSwitchIt) || (action == kTriggerIt) || + (action == kBounceIt)) + { + if (bands[who].dest.bottom < hotSpots[i].bounds.top) + collided = false; + else if (bands[who].dest.top > hotSpots[i].bounds.bottom) + collided = false; + else if (bands[who].dest.right < hotSpots[i].bounds.left) + collided = false; + else if (bands[who].dest.left > hotSpots[i].bounds.right) + collided = false; + else + collided = true; + + if (collided) + { + nothingCollided = false; // we have detected a collision + if (bandHitLast != i) // don't count it if same as last frame + { // we don't want rapid on/off toggles + bandHitLast = i; // note who so we don't double-toggle it + if ((action == kDissolveIt) || (action == kBounceIt)) + { + if (bands[who].hVel > 0) + { + if ((bands[who].dest.right - bands[who].hVel) < + hotSpots[i].bounds.left) + { + bands[who].hVel = -bands[who].hVel; + bands[who].dest.right = hotSpots[i].bounds.left; + bands[who].dest.left = bands[who].dest.right - 16; + } + else + bands[who].mode = kKillBandMode; + } + else + { + if ((bands[who].dest.left - bands[who].hVel) > + hotSpots[i].bounds.right) + { + bands[who].hVel = -bands[who].hVel; + bands[who].dest.left = hotSpots[i].bounds.right; + bands[who].dest.right = bands[who].dest.left + 16; + } + else + bands[who].mode = kKillBandMode; + } + PlayPrioritySound(kBandReboundSound, kBandReboundPriority); + break; + } + else if (action == kRewardIt) + { + whoLinked = hotSpots[i].who; + if ((masterObjects[whoLinked].theObject.what == kGreaseRt) || + (masterObjects[whoLinked].theObject.what == kGreaseLf)) + { + if (SetObjectState(thisRoomNumber, + masterObjects[whoLinked].objectNum, 0, whoLinked)) + SpillGrease(masterObjects[whoLinked].dynaNum, + masterObjects[whoLinked].hotNum); + hotSpots[i].isOn = false; + } + } + else if (action == kSwitchIt) + { + HandleSwitches(&hotSpots[i]); + } + else if (action == kTriggerIt) + { + ArmTrigger(&hotSpots[i]); + } + } + } + } + } + } + + if (nothingCollided) // the rubberband has hit nothing + bandHitLast = -1; // so make note of that for the next time + + if (bands[who].hVel != 0) + { + if (bands[who].dest.bottom < theGlider.dest.top) + collided = false; + else if (bands[who].dest.top > theGlider.dest.bottom) + collided = false; + else if (bands[who].dest.right < theGlider.dest.left) + collided = false; + else if (bands[who].dest.left > theGlider.dest.right) + collided = false; + else + collided = true; + + if (collided) + { + if ((!twoPlayerGame) || (!onePlayerLeft) || (playerDead == kPlayer2)) + { + theGlider.hVel += (bands[who].hVel / 2); + bands[who].hVel = 0; + PlayPrioritySound(kHitWallSound, kHitWallPriority); + } + } + + if (twoPlayerGame) + { + if (bands[who].dest.bottom < theGlider2.dest.top) + collided = false; + else if (bands[who].dest.top > theGlider2.dest.bottom) + collided = false; + else if (bands[who].dest.right < theGlider2.dest.left) + collided = false; + else if (bands[who].dest.left > theGlider2.dest.right) + collided = false; + else + collided = true; + + if (collided) + { + if ((!onePlayerLeft) || (playerDead == kPlayer1)) + { + theGlider2.hVel += (bands[who].hVel / 2); + bands[who].hVel = 0; + PlayPrioritySound(kHitWallSound, kHitWallPriority); + } + } + } + } + if ((bands[who].dest.left < kLeftWallLimit) || + (bands[who].dest.right > kRightWallLimit)) + { + bands[who].mode = kKillBandMode; + } + else if (bands[who].dest.bottom > kFloorLimit) + { + bands[who].mode = kKillBandMode; + } +} + +//-------------------------------------------------------------- HandleBands + +void HandleBands (void) +{ + Rect dest; + short i, count; + + if (numBands == 0) + return; + + for (i = 0; i < numBands; i++) + { + bands[i].mode++; + if (bands[i].mode > 2) + bands[i].mode = 0; + + bands[i].count++; + if (bands[i].count >= kBandFallCount) + { + bands[i].vVel++; + bands[i].count = 0; + } + + dest = bands[i].dest; + QOffsetRect(&dest, playOriginH, playOriginV); + AddRectToWorkRects(&dest); + + bands[i].dest.left += bands[i].hVel; + bands[i].dest.right += bands[i].hVel; + bands[i].dest.top += bands[i].vVel; + bands[i].dest.bottom += bands[i].vVel; + + CheckBandCollision(i); + } + + count = 0; + do + { + while (bands[count].mode == kKillBandMode) + { + bands[count].mode = 0; + KillBand(count); + } + count++; + } + while (count < numBands); +} + +//-------------------------------------------------------------- AddBand + +Boolean AddBand (gliderPtr thisGlider, short h, short v, Boolean direction) +{ + if (numBands >= kMaxRubberBands) + return (false); + + bands[numBands].mode = 0; + bands[numBands].count = 0; + if (thisGlider->tipped) + bands[numBands].vVel = -2; + else + bands[numBands].vVel = 0; + bands[numBands].dest.left = h - 8; + bands[numBands].dest.right = h + 8; + bands[numBands].dest.top = v - 3; + bands[numBands].dest.bottom = v + 3; + + if (direction == kFaceLeft) + { + bands[numBands].dest.left -= 32; + bands[numBands].dest.right -= 32; + bands[numBands].hVel = -kRubberBandVelocity; + } + else + { + bands[numBands].dest.left += 32; + bands[numBands].dest.right += 32; + bands[numBands].hVel = kRubberBandVelocity; + } + + thisGlider->hVel -= (bands[numBands].hVel / 2); + numBands++; + + PlayPrioritySound(kFireBandSound, kFireBandPriority); + return (true); +} + +//-------------------------------------------------------------- KillBand + +void KillBand (short which) +{ + short lastBand; + + lastBand = numBands - 1; + if (which != lastBand) + bands[which] = bands[lastBand]; + + numBands--; +} + +//-------------------------------------------------------------- KillAllBands + +void KillAllBands (void) +{ + short i; + + for (i = 0; i < kMaxRubberBands; i++) + { + bands[i].mode = 0; + } + + numBands = 0; +} + diff --git a/GpApp/RubberBands.h b/GpApp/RubberBands.h new file mode 100644 index 0000000..3f1a1e9 --- /dev/null +++ b/GpApp/RubberBands.h @@ -0,0 +1,12 @@ +//============================================================================ +//---------------------------------------------------------------------------- +// RubberBands.h +//---------------------------------------------------------------------------- +//============================================================================ + + +#include "PLQDOffscreen.h" + + +extern GWorldPtr bandsSrcMap; +extern GWorldPtr bandsMaskMap; diff --git a/GpApp/SavedGames.cpp b/GpApp/SavedGames.cpp new file mode 100644 index 0000000..42d0586 --- /dev/null +++ b/GpApp/SavedGames.cpp @@ -0,0 +1,352 @@ + +//============================================================================ +//---------------------------------------------------------------------------- +// SavedGames.c +//---------------------------------------------------------------------------- +//============================================================================ + + +#include "PLStringCompare.h" +#include "Externs.h" +#include "House.h" + + +#define kSavedGameVersion 0x0200 + + +void SavedGameMismatchError (StringPtr); + + +gameType smallGame; + +extern FSSpecPtr theHousesSpecs; +extern short numStarsRemaining, thisHouseIndex; +extern Boolean twoPlayerGame; + + +//============================================================== Functions +//-------------------------------------------------------------- SaveGame2 + +void SaveGame2 (void) +{ + // Add NavServices later. +/* + StandardFileReply theReply; + FSSpec tempSpec; + Str255 gameNameStr; + Size byteCount; + OSErr theErr; + houseType *thisHousePtr; + roomType *srcRoom; + savedRoom *destRoom; + gamePtr savedGame; + short r, i, numRooms, gameRefNum; + char wasState; + + FlushEvents(everyEvent, 0); + + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + thisHousePtr = *thisHouse; + + numRooms = thisHousePtr->nRooms; + + HSetState((Handle)thisHouse, wasState); + + byteCount = sizeof(game2Type) + sizeof(savedRoom) * numRooms; + savedGame = (gamePtr)NewPtr(byteCount); + if (savedGame == nil) + { + YellowAlert(kYellowFailedSaveGame, MemError()); + return; + } + + GetFirstWordOfString(thisHouseName, gameNameStr); + if (gameNameStr[0] > 23) + gameNameStr[0] = 23; + PasStringConcat(gameNameStr, "\p Game"); + + StandardPutFile("\pSave Game As:", gameNameStr, &theReply); + if (!theReply.sfGood) + return; + + if (theReply.sfReplacing) + { + theErr = FSMakeFSSpec(theReply.sfFile.vRefNum, theReply.sfFile.parID, + theReply.sfFile.name, &tempSpec); + if (!CheckFileError(theErr, "\pSaved Game")) + return; + + theErr = FSpDelete(&tempSpec); + if (!CheckFileError(theErr, "\pSaved Game")) + return; + } + + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + thisHousePtr = *thisHouse; + + savedGame->house = theHousesSpecs[thisHouseIndex]; + savedGame->version = kSavedGameVersion; + savedGame->wasStarsLeft = numStarsRemaining; + savedGame->timeStamp = thisHousePtr->timeStamp; + savedGame->where.h = theGlider.dest.left; + savedGame->where.v = theGlider.dest.top; + savedGame->score = theScore; + savedGame->unusedLong = 0L; + savedGame->unusedLong2 = 0L; + savedGame->energy = batteryTotal; + savedGame->bands = bandsTotal; + savedGame->roomNumber = thisRoomNumber; + savedGame->gliderState = theGlider.mode; + savedGame->numGliders = mortals; + savedGame->foil = foilTotal; + savedGame->nRooms = numRooms; + savedGame->facing = theGlider.facing; + savedGame->showFoil = showFoil; + + for (r = 0; r < numRooms; r++) + { + destRoom = &(savedGame->savedData[r]); + srcRoom = &(thisHousePtr->rooms[r]); + + destRoom->unusedShort = 0; + destRoom->unusedByte = 0; + destRoom->visited = srcRoom->visited; + for (i = 0; i < kMaxRoomObs; i++) + destRoom->objects[i] = srcRoom->objects[i]; + } + + HSetState((Handle)thisHouse, wasState); + + theErr = FSpCreate(&theReply.sfFile, 'ozm5', 'gliG', theReply.sfScript); + if (CheckFileError(theErr, "\pSaved Game")) + { + theErr = FSpOpenDF(&theReply.sfFile, fsCurPerm, &gameRefNum); + if (CheckFileError(theErr, "\pSaved Game")) + { + theErr = SetFPos(gameRefNum, fsFromStart, 0L); + if (CheckFileError(theErr, "\pSaved Game")) + { + theErr = FSWrite(gameRefNum, &byteCount, (Ptr)savedGame); + if (CheckFileError(theErr, "\pSaved Game")) + { + theErr = SetEOF(gameRefNum, byteCount); + if (CheckFileError(theErr, "\pSaved Game")) + { + } + } + } + theErr = FSClose(gameRefNum); + if (CheckFileError(theErr, "\pSaved Game")) + { + } + } + } + DisposePtr((Ptr)savedGame); + */ +} + +//-------------------------------------------------------------- SavedGameMismatchError + +void SavedGameMismatchError (StringPtr gameName) +{ + #define kSavedGameErrorAlert 1044 + short whoCares; + + InitCursor(); + +// CenterAlert(kSavedGameErrorAlert); + ParamText(gameName, thisHouseName, PSTR(""), PSTR("")); + + whoCares = Alert(kSavedGameErrorAlert, nil); +} + +//-------------------------------------------------------------- OpenSavedGame + +Boolean OpenSavedGame (void) +{ +return false; // TEMP fix this iwth NavServices +/* + StandardFileReply theReply; + SFTypeList theList; + houseType *thisHousePtr; + roomType *destRoom; + savedRoom *srcRoom; + gamePtr savedGame; + long byteCount; + OSErr theErr; + short r, i, gameRefNum; + char wasState; + + theList[0] = 'gliG'; + + StandardGetFile(nil, 1, theList, &theReply); + if (!theReply.sfGood) + return(false); + + theErr = FSpOpenDF(&theReply.sfFile, fsCurPerm, &gameRefNum); + if (!CheckFileError(theErr, "\pSaved Game")) + return(false); + + theErr = GetEOF(gameRefNum, &byteCount); + if (!CheckFileError(theErr, "\pSaved Game")) + { + theErr = FSClose(gameRefNum); + return(false); + } + + savedGame = (gamePtr)NewPtr(byteCount); + if (savedGame == nil) + { + YellowAlert(kYellowFailedSaveGame, MemError()); + theErr = FSClose(gameRefNum); + return(false); + } + + theErr = SetFPos(gameRefNum, fsFromStart, 0L); + if (!CheckFileError(theErr, "\pSaved Game")) + { + DisposePtr((Ptr)savedGame); + theErr = FSClose(gameRefNum); + return(false); + } + + theErr = FSRead(gameRefNum, &byteCount, savedGame); + if (!CheckFileError(theErr, "\pSaved Game")) + { + DisposePtr((Ptr)savedGame); + theErr = FSClose(gameRefNum); + return(false); + } + + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + thisHousePtr = *thisHouse; + + if (!EqualString(savedGame->house.name, thisHouseName, true, true)) + { + SavedGameMismatchError(savedGame->house.name); + HSetState((Handle)thisHouse, wasState); + DisposePtr((Ptr)savedGame); + theErr = FSClose(gameRefNum); + return(false); + } + else if (thisHousePtr->timeStamp != savedGame->timeStamp) + { + YellowAlert(kYellowSavedTimeWrong, 0); + HSetState((Handle)thisHouse, wasState); + DisposePtr((Ptr)savedGame); + theErr = FSClose(gameRefNum); + return(false); + } + else if (savedGame->version != kSavedGameVersion) + { + YellowAlert(kYellowSavedVersWrong, kSavedGameVersion); + HSetState((Handle)thisHouse, wasState); + DisposePtr((Ptr)savedGame); + theErr = FSClose(gameRefNum); + return(false); + } + else if (savedGame->nRooms != thisHousePtr->nRooms) + { + YellowAlert(kYellowSavedRoomsWrong, savedGame->nRooms - thisHousePtr->nRooms); + HSetState((Handle)thisHouse, wasState); + DisposePtr((Ptr)savedGame); + theErr = FSClose(gameRefNum); + return(false); + } + else + { + smallGame.wasStarsLeft = savedGame->wasStarsLeft; + smallGame.where.h = savedGame->where.h; + smallGame.where.v = savedGame->where.v; + smallGame.score = savedGame->score; + smallGame.unusedLong = savedGame->unusedLong; + smallGame.unusedLong2 = savedGame->unusedLong2; + smallGame.energy = savedGame->energy; + smallGame.bands = savedGame->bands; + smallGame.roomNumber = savedGame->roomNumber; + smallGame.gliderState = savedGame->gliderState; + smallGame.numGliders = savedGame->numGliders; + smallGame.foil = savedGame->foil; + smallGame.unusedShort = 0; + smallGame.facing = savedGame->facing; + smallGame.showFoil = savedGame->showFoil; + + for (r = 0; r < savedGame->nRooms; r++) + { + srcRoom = &(savedGame->savedData[r]); + destRoom = &(thisHousePtr->rooms[r]); + destRoom->visited = srcRoom->visited; + for (i = 0; i < kMaxRoomObs; i++) + destRoom->objects[i] = srcRoom->objects[i]; + } + } + HSetState((Handle)thisHouse, wasState); + + DisposePtr((Ptr)savedGame); + + theErr = FSClose(gameRefNum); + if (!CheckFileError(theErr, "\pSaved Game")) + return (false); + + return (true); + */ +} + +//-------------------------------------------------------------- SaveGame + +// This is probably about 3 days away from becoming the "old" functionÉ +// for saving games. + +void SaveGame (Boolean doSave) +{ + houseType *thisHousePtr; + UInt32 stamp; + char wasState; + + if (twoPlayerGame) + return; + + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + thisHousePtr = *thisHouse; + + if (doSave) + { + thisHousePtr->savedGame.version = kSavedGameVersion; + thisHousePtr->savedGame.wasStarsLeft = numStarsRemaining; + GetDateTime(&stamp); + thisHousePtr->savedGame.timeStamp = (long)stamp; + thisHousePtr->savedGame.where.h = theGlider.dest.left; + thisHousePtr->savedGame.where.v = theGlider.dest.top; + thisHousePtr->savedGame.score = theScore; + thisHousePtr->savedGame.unusedLong = 0L; + thisHousePtr->savedGame.unusedLong2 = 0L; + thisHousePtr->savedGame.energy = batteryTotal; + thisHousePtr->savedGame.bands = bandsTotal; + thisHousePtr->savedGame.roomNumber = thisRoomNumber; + thisHousePtr->savedGame.gliderState = theGlider.mode; + thisHousePtr->savedGame.numGliders = mortals; + thisHousePtr->savedGame.foil = foilTotal; + thisHousePtr->savedGame.unusedShort = 0; + thisHousePtr->savedGame.facing = theGlider.facing; + thisHousePtr->savedGame.showFoil = showFoil; + + thisHousePtr->hasGame = true; + } + else + { + thisHousePtr->hasGame = false; + } + + HSetState((Handle)thisHouse, wasState); + + if (doSave) + { + if (!WriteHouse(theMode == kEditMode)) + YellowAlert(kYellowFailedWrite, 0); + } +} + diff --git a/GpApp/Scoreboard.cpp b/GpApp/Scoreboard.cpp new file mode 100644 index 0000000..4bb6418 --- /dev/null +++ b/GpApp/Scoreboard.cpp @@ -0,0 +1,458 @@ + +//============================================================================ +//---------------------------------------------------------------------------- +// Scoreboard.c +//---------------------------------------------------------------------------- +//============================================================================ + + +#include "PLNumberFormatting.h" +#include "PLPasStr.h" +#include "Externs.h" +#include "Environ.h" +#include "RectUtils.h" + + +#define kGrayBackgroundColor 251 +#define kGrayBackgroundColor4 10 +#define kFoilBadge 0 +#define kBandsBadge 1 +#define kBatteryBadge 2 +#define kHeliumBadge 3 +#define kScoreRollAmount 13 + + +void RefreshRoomTitle (short); +void RefreshNumGliders (void); +void RefreshPoints (void); + + +Rect boardSrcRect, badgeSrcRect, boardDestRect; +GWorldPtr boardSrcMap, badgeSrcMap; +Rect boardTSrcRect, boardTDestRect; +GWorldPtr boardTSrcMap; +Rect boardGSrcRect, boardGDestRect; +GWorldPtr boardGSrcMap; +Rect boardPSrcRect, boardPDestRect; +Rect boardPQDestRect, boardGQDestRect; +Rect badgesBlankRects[4], badgesBadgesRects[4]; +Rect badgesDestRects[4]; +GWorldPtr boardPSrcMap; +long displayedScore; +short wasScoreboardMode; +Boolean doRollScore; + +extern Rect localRoomsDest[], justRoomsRect; +extern long gameFrame; +extern short numNeighbors, otherPlayerEscaped; +extern Boolean evenFrame, onePlayerLeft; + + +//============================================================== Functions +//-------------------------------------------------------------- RefreshScoreboard + +void RefreshScoreboard (short mode) +{ + doRollScore = true; + + RefreshRoomTitle(mode); + RefreshNumGliders(); + RefreshPoints(); + + CopyBits((BitMap *)*GetGWorldPixMap(boardSrcMap), + GetPortBitMapForCopyBits(GetWindowPort(mainWindow)), + &boardSrcRect, &boardDestRect, srcCopy, 0L); + + QuickBatteryRefresh(false); + QuickBandsRefresh(false); + QuickFoilRefresh(false); +} + +//-------------------------------------------------------------- HandleDynamicScoreboard + + void HandleDynamicScoreboard (void) + { + #define kFoilLow 2 // 25% + #define kBatteryLow 17 // 25% + #define kHeliumLow -38 // 25% + #define kBandsLow 2 // 25% + long whosTurn; + + if (theScore > displayedScore) + { + if (doRollScore) + { + displayedScore += kScoreRollAmount; + if (displayedScore > theScore) + displayedScore = theScore; + } + else + displayedScore = theScore; + + PlayPrioritySound(kScoreTikSound, kScoreTikPriority); + QuickScoreRefresh(); + } + + whosTurn = gameFrame & 0x00000007; + switch (whosTurn) + { + case 0: // show foil + if ((foilTotal > 0) && (foilTotal < kFoilLow)) + QuickFoilRefresh(false); + break; + + case 1: // hide battery + if ((batteryTotal > 0) && (batteryTotal < kBatteryLow)) + QuickBatteryRefresh(true); + else if ((batteryTotal < 0) && (batteryTotal > kHeliumLow)) + QuickBatteryRefresh(true); + break; + + case 2: // show rubber bands + if ((bandsTotal > 0) && (bandsTotal < kBandsLow)) + QuickBandsRefresh(false); + break; + + case 4: // show battery + if ((batteryTotal > 0) && (batteryTotal < kBatteryLow)) + QuickBatteryRefresh(false); + else if ((batteryTotal < 0) && (batteryTotal > kHeliumLow)) + QuickBatteryRefresh(false); + break; + + case 5: // hide foil + if ((foilTotal > 0) && (foilTotal < kFoilLow)) + QuickFoilRefresh(true); + break; + + case 7: // hide rubber bands + if ((bandsTotal > 0) && (bandsTotal < kBandsLow)) + QuickBandsRefresh(true); + break; + } + } + +//-------------------------------------------------------------- RefreshRoomTitle + +void RefreshRoomTitle (short mode) +{ + RGBColor theRGBColor, wasColor; + + SetPort((GrafPtr)boardTSrcMap); + + GetForeColor(&wasColor); + if (thisMac.isDepth == 4) + Index2Color(kGrayBackgroundColor4, &theRGBColor); + else + Index2Color(kGrayBackgroundColor, &theRGBColor); + RGBForeColor(&theRGBColor); + PaintRect(&boardTSrcRect); + RGBForeColor(&wasColor); + + MoveTo(1, 10); + ForeColor(blackColor); + switch (mode) + { + case kEscapedTitleMode: + DrawString(PSTR("Hit Delete key if unable to Follow")); + break; + + case kSavingTitleMode: + DrawString(PSTR("Saving GameÉ")); + break; + + default: + DrawString(thisRoom->name); + break; + } + MoveTo(0, 9); + ForeColor(whiteColor); + switch (mode) + { + case kEscapedTitleMode: + DrawString(PSTR("Hit Delete key if unable to Follow")); + break; + + case kSavingTitleMode: + DrawString(PSTR("Saving GameÉ")); + break; + + default: + DrawString(thisRoom->name); + break; + } + ForeColor(blackColor); + + CopyBits((BitMap *)*GetGWorldPixMap(boardTSrcMap), + (BitMap *)*GetGWorldPixMap(boardSrcMap), + &boardTSrcRect, &boardTDestRect, srcCopy, nil); +} + +//-------------------------------------------------------------- RefreshNumGliders + +void RefreshNumGliders (void) +{ + RGBColor theRGBColor, wasColor; + Str255 nGlidersStr; + long displayMortals; + + SetPort((GrafPtr)boardGSrcMap); + + GetForeColor(&wasColor); + if (thisMac.isDepth == 4) + Index2Color(kGrayBackgroundColor4, &theRGBColor); + else + Index2Color(kGrayBackgroundColor, &theRGBColor); + RGBForeColor(&theRGBColor); + PaintRect(&boardGSrcRect); + RGBForeColor(&wasColor); + + displayMortals = mortals; + if (displayMortals < 0) + displayMortals = 0; + NumToString(displayMortals, nGlidersStr); + + MoveTo(1, 10); + ForeColor(blackColor); + DrawString(nGlidersStr); + + MoveTo(0, 9); + ForeColor(whiteColor); + DrawString(nGlidersStr); + + ForeColor(blackColor); + + CopyBits((BitMap *)*GetGWorldPixMap(boardGSrcMap), + (BitMap *)*GetGWorldPixMap(boardSrcMap), + &boardGSrcRect, &boardGDestRect, srcCopy, nil); +} + +//-------------------------------------------------------------- RefreshPoints + +void RefreshPoints (void) +{ + RGBColor theRGBColor, wasColor; + Str255 scoreStr; + + SetPort((GrafPtr)boardPSrcMap); + + GetForeColor(&wasColor); + if (thisMac.isDepth == 4) + Index2Color(kGrayBackgroundColor4, &theRGBColor); + else + Index2Color(kGrayBackgroundColor, &theRGBColor); + RGBForeColor(&theRGBColor); + PaintRect(&boardPSrcRect); + RGBForeColor(&wasColor); + + NumToString(theScore, scoreStr); + + MoveTo(1, 10); + ForeColor(blackColor); + DrawString(scoreStr); + + MoveTo(0, 9); + ForeColor(whiteColor); + DrawString(scoreStr); + + ForeColor(blackColor); + + CopyBits((BitMap *)*GetGWorldPixMap(boardPSrcMap), + (BitMap *)*GetGWorldPixMap(boardSrcMap), + &boardPSrcRect, &boardPDestRect, srcCopy, nil); + + displayedScore = theScore; +} + +//-------------------------------------------------------------- QuickGlidersRefresh + +void QuickGlidersRefresh (void) +{ + RGBColor theRGBColor, wasColor; + Str255 nGlidersStr; + + SetPort((GrafPtr)boardGSrcMap); + + GetForeColor(&wasColor); + if (thisMac.isDepth == 4) + Index2Color(kGrayBackgroundColor4, &theRGBColor); + else + Index2Color(kGrayBackgroundColor, &theRGBColor); + RGBForeColor(&theRGBColor); + PaintRect(&boardGSrcRect); + RGBForeColor(&wasColor); + + NumToString((long)mortals, nGlidersStr); + + MoveTo(1, 10); + ForeColor(blackColor); + DrawString(nGlidersStr); + + MoveTo(0, 9); + ForeColor(whiteColor); + DrawString(nGlidersStr); + + ForeColor(blackColor); + + CopyBits((BitMap *)*GetGWorldPixMap(boardGSrcMap), + GetPortBitMapForCopyBits(GetWindowPort(mainWindow)), + &boardGSrcRect, &boardGQDestRect, srcCopy, nil); +} + +//-------------------------------------------------------------- QuickScoreRefresh + +void QuickScoreRefresh (void) +{ + RGBColor theRGBColor, wasColor; + Str255 scoreStr; + + SetPort((GrafPtr)boardPSrcMap); + + GetForeColor(&wasColor); + if (thisMac.isDepth == 4) + Index2Color(kGrayBackgroundColor4, &theRGBColor); + else + Index2Color(kGrayBackgroundColor, &theRGBColor); + RGBForeColor(&theRGBColor); + PaintRect(&boardPSrcRect); + RGBForeColor(&wasColor); + + NumToString(displayedScore, scoreStr); + + MoveTo(1, 10); + ForeColor(blackColor); + DrawString(scoreStr); + + MoveTo(0, 9); + ForeColor(whiteColor); + DrawString(scoreStr); + + ForeColor(blackColor); + + CopyBits((BitMap *)*GetGWorldPixMap(boardPSrcMap), + GetPortBitMapForCopyBits(GetWindowPort(mainWindow)), + &boardPSrcRect, &boardPQDestRect, srcCopy, nil); +} + +//-------------------------------------------------------------- QuickBatteryRefresh + +void QuickBatteryRefresh (Boolean flash) +{ + if ((batteryTotal > 0) && (!flash)) + { + CopyBits((BitMap *)*GetGWorldPixMap(badgeSrcMap), + GetPortBitMapForCopyBits(GetWindowPort(mainWindow)), + &badgesBadgesRects[kBatteryBadge], + &badgesDestRects[kBatteryBadge], + srcCopy, nil); + } + else if ((batteryTotal < 0) && (!flash)) + { + CopyBits((BitMap *)*GetGWorldPixMap(badgeSrcMap), + GetPortBitMapForCopyBits(GetWindowPort(mainWindow)), + &badgesBadgesRects[kHeliumBadge], + &badgesDestRects[kHeliumBadge], + srcCopy, nil); + } + else + { + CopyBits((BitMap *)*GetGWorldPixMap(badgeSrcMap), + GetPortBitMapForCopyBits(GetWindowPort(mainWindow)), + &badgesBlankRects[kBatteryBadge], + &badgesDestRects[kBatteryBadge], + srcCopy, nil); + } +} + +//-------------------------------------------------------------- QuickBandsRefresh + +void QuickBandsRefresh (Boolean flash) +{ + if ((bandsTotal > 0) && (!flash)) + { + CopyBits((BitMap *)*GetGWorldPixMap(badgeSrcMap), + GetPortBitMapForCopyBits(GetWindowPort(mainWindow)), + &badgesBadgesRects[kBandsBadge], + &badgesDestRects[kBandsBadge], + srcCopy, nil); + } + else + { + CopyBits((BitMap *)*GetGWorldPixMap(badgeSrcMap), + GetPortBitMapForCopyBits(GetWindowPort(mainWindow)), + &badgesBlankRects[kBandsBadge], + &badgesDestRects[kBandsBadge], + srcCopy, nil); + } +} + +//-------------------------------------------------------------- QuickFoilRefresh + +void QuickFoilRefresh (Boolean flash) +{ + if ((foilTotal > 0) && (!flash)) + { + CopyBits((BitMap *)*GetGWorldPixMap(badgeSrcMap), + GetPortBitMapForCopyBits(GetWindowPort(mainWindow)), + &badgesBadgesRects[kFoilBadge], + &badgesDestRects[kFoilBadge], + srcCopy, nil); + } + else + { + CopyBits((BitMap *)*GetGWorldPixMap(badgeSrcMap), + GetPortBitMapForCopyBits(GetWindowPort(mainWindow)), + &badgesBlankRects[kFoilBadge], + &badgesDestRects[kFoilBadge], + srcCopy, nil); + } +} + +//-------------------------------------------------------------- AdjustScoreboardHeight + +void AdjustScoreboardHeight (void) +{ + short offset, newMode; + + if (numNeighbors == 9) + newMode = kScoreboardHigh; + else + newMode = kScoreboardLow; + + if (wasScoreboardMode != newMode) + { + switch (newMode) + { + case kScoreboardHigh: // 9 neighbors + offset = localRoomsDest[kCentralRoom].top; + offset = -offset; + justRoomsRect = workSrcRect; + break; + + case kScoreboardLow: // 1 or 3 neighbors + offset = localRoomsDest[kCentralRoom].top; + justRoomsRect = workSrcRect; + justRoomsRect.top = localRoomsDest[kCentralRoom].top; + justRoomsRect.bottom = localRoomsDest[kCentralRoom].bottom; + break; + } + + QOffsetRect(&boardDestRect, 0, offset); + QOffsetRect(&boardGQDestRect, 0, offset); + QOffsetRect(&boardPQDestRect, 0, offset); + QOffsetRect(&badgesDestRects[kBatteryBadge], 0, offset); + QOffsetRect(&badgesDestRects[kBandsBadge], 0, offset); + QOffsetRect(&badgesDestRects[kFoilBadge], 0, offset); + QOffsetRect(&badgesDestRects[kHeliumBadge], 0, offset); + + wasScoreboardMode = newMode; + } +} + +//-------------------------------------------------------------- BlackenScoreboard + +void BlackenScoreboard (void) +{ + UpdateMenuBarWindow(); +} + diff --git a/GpApp/Scoreboard.h b/GpApp/Scoreboard.h new file mode 100644 index 0000000..23d19ab --- /dev/null +++ b/GpApp/Scoreboard.h @@ -0,0 +1,15 @@ +//============================================================================ +//---------------------------------------------------------------------------- +// Scoreboard.h +//---------------------------------------------------------------------------- +//============================================================================ + + +#include "PLQDOffscreen.h" + + +extern GWorldPtr boardSrcMap; +extern GWorldPtr badgeSrcMap; +extern GWorldPtr boardTSrcMap; +extern GWorldPtr boardGSrcMap; +extern GWorldPtr boardPSrcMap; diff --git a/Sources/Scrap.c b/GpApp/Scrap.c old mode 100755 new mode 100644 similarity index 100% rename from Sources/Scrap.c rename to GpApp/Scrap.c diff --git a/GpApp/SelectHouse.cpp b/GpApp/SelectHouse.cpp new file mode 100644 index 0000000..c3e0a77 --- /dev/null +++ b/GpApp/SelectHouse.cpp @@ -0,0 +1,676 @@ + +//============================================================================ +//---------------------------------------------------------------------------- +// SelectHouse.c +//---------------------------------------------------------------------------- +//============================================================================ + + +#include "PLAliases.h" +#include "PLResources.h" +#include "PLSound.h" +#include "PLStringCompare.h" +#include "DialogUtils.h" +#include "Externs.h" +#include "Environ.h" +#include "House.h" +#include "RectUtils.h" + + +#define kLoadHouseDialogID 1000 +#define kDispFiles 12 +#define kLoadTitlePictItem 3 +#define kLoadNameFirstItem 5 +#define kLoadNameLastItem 16 +#define kLoadIconFirstItem 17 +#define kLoadIconLastItem 28 +#define kScrollUpItem 29 +#define kScrollDownItem 30 +#define kLoadTitlePict1 1001 +#define kLoadTitlePict8 1002 +#define kDefaultHousePict1 1003 +#define kDefaultHousePict8 1004 +#define kGrayedOutUpArrow 1052 +#define kGrayedOutDownArrow 1053 +#define kMaxExtraHouses 8 + + +void UpdateLoadDialog (DialogPtr); +void PageUpHouses (DialogPtr); +void PageDownHouses (DialogPtr); +Boolean LoadFilter (DialogPtr, EventRecord *, short *); +void SortHouseList (void); +void DoDirSearch (void); + + +Rect loadHouseRects[12]; +FSSpecPtr theHousesSpecs; +FSSpec extraHouseSpecs[kMaxExtraHouses]; +long lastWhenClick; +Point lastWhereClick; +short housesFound, thisHouseIndex, maxFiles, willMaxFiles; +short housePage, demoHouseIndex, numExtraHouses; +char fileFirstChar[12]; + +extern UInt32 doubleTime; + + +//============================================================== Functions +//-------------------------------------------------------------- UpdateLoadWindow + +#ifndef COMPILEDEMO +void UpdateLoadDialog (DialogPtr theDialog) +{ + Rect tempRect, dialogRect, dummyRect; + short houseStart, houseStop, i, wasResFile, isResFile, count; +// char wasState; + WindowRef theWindow; +// RgnHandle theRegion; + + theWindow = GetDialogWindow(theDialog); + GetWindowBounds(theWindow, kWindowContentRgn, &dialogRect); + /* + wasState = HGetState((Handle)(((DialogPeek)theDialog)->window).port.visRgn); + HLock((Handle)(((DialogPeek)theDialog)->window).port.visRgn); + dialogRect = (**((((DialogPeek)theDialog)->window).port.visRgn)).rgnBBox; + HSetState((Handle)(((DialogPeek)theDialog)->window).port.visRgn, wasState); + */ + + DrawDialog(theDialog); + ColorFrameWHRect(8, 39, 413, 184, kRedOrangeColor8); // box around files + + houseStart = housePage; + houseStop = housesFound; + if ((houseStop - houseStart) > kDispFiles) + houseStop = houseStart + kDispFiles; + + wasResFile = CurResFile(); + count = 0; + + for (i = 0; i < 12; i++) + fileFirstChar[i] = 0x7F; + + for (i = houseStart; i < houseStop; i++) + { + SpinCursor(1); + + GetDialogItemRect(theDialog, kLoadIconFirstItem + i - housePage, + &tempRect); + + if (SectRect(&dialogRect, &tempRect, &dummyRect)) + { + isResFile = HOpenResFile(theHousesSpecs[i].vRefNum, + theHousesSpecs[i].parID, theHousesSpecs[i].name, fsRdPerm); + if (isResFile != -1) + { + if (Get1Resource('icl8', -16455) != nil) + { + LargeIconPlot(&tempRect, -16455); + } + else + LoadDialogPICT(theDialog, kLoadIconFirstItem + i - housePage, + kDefaultHousePict8); + CloseResFile(isResFile); + } + else + LoadDialogPICT(theDialog, kLoadIconFirstItem + i - housePage, + kDefaultHousePict8); + } + + fileFirstChar[count] = theHousesSpecs[i].name[1]; + if ((fileFirstChar[count] <= 0x7A) && (fileFirstChar[count] > 0x60)) + fileFirstChar[count] -= 0x20; + count++; + + DrawDialogUserText(theDialog, kLoadNameFirstItem + i - housePage, + theHousesSpecs[i].name, i == (thisHouseIndex + housePage)); + + } + + InitCursor(); + UseResFile(wasResFile); +} +#endif + +//-------------------------------------------------------------- PageUpHouses + +#ifndef COMPILEDEMO +void PageUpHouses (DialogPtr theDial) +{ + Rect tempRect; + + if (housePage < kDispFiles) + { + SysBeep(1); + return; + } + + housePage -= kDispFiles; + thisHouseIndex = kDispFiles - 1; + + ShowDialogItem(theDial, kScrollDownItem); + if (housePage < kDispFiles) + { + GetDialogItemRect(theDial, kScrollUpItem, &tempRect); + HideDialogItem(theDial, kScrollUpItem); + DrawCIcon(kGrayedOutUpArrow, tempRect.left, tempRect.top); + } + + QSetRect(&tempRect, 8, 39, 421, 223); + EraseRect(&tempRect); + InvalWindowRect(GetDialogWindow(theDial), &tempRect); +} +#endif + +//-------------------------------------------------------------- PageDownHouses + +#ifndef COMPILEDEMO +void PageDownHouses (DialogPtr theDial) +{ + Rect tempRect; + + if (housePage >= (housesFound - kDispFiles)) + { + SysBeep(1); + return; + } + + housePage += kDispFiles; + thisHouseIndex = 0; + + ShowDialogItem(theDial, kScrollUpItem); + if (housePage >= (housesFound - kDispFiles)) + { + GetDialogItemRect(theDial, kScrollDownItem, &tempRect); + HideDialogItem(theDial, kScrollDownItem); + DrawCIcon(kGrayedOutDownArrow, tempRect.left, tempRect.top); + } + + QSetRect(&tempRect, 8, 39, 421, 223); + EraseRect(&tempRect); + InvalWindowRect(GetDialogWindow(theDial), &tempRect); +} +#endif + +//-------------------------------------------------------------- LoadFilter +#ifndef COMPILEDEMO + +Boolean LoadFilter (DialogPtr dial, EventRecord *event, short *item) +{ + short screenCount, i, wasIndex; + char theChar; + + switch (event->what) + { + case keyDown: + theChar = (event->message) & charCodeMask; + switch (theChar) + { + case kReturnKeyASCII: + case kEnterKeyASCII: + FlashDialogButton(dial, kOkayButton); + *item = kOkayButton; + return(true); + break; + + case kEscapeKeyASCII: + FlashDialogButton(dial, kCancelButton); + *item = kCancelButton; + return(true); + break; + + case kPageUpKeyASCII: + *item = kScrollUpItem; + return (true); + break; + + case kPageDownKeyASCII: + *item = kScrollDownItem; + return (true); + break; + + case kUpArrowKeyASCII: + InvalWindowRect(GetDialogWindow(dial), &loadHouseRects[thisHouseIndex]); + thisHouseIndex -= 4; + if (thisHouseIndex < 0) + { + screenCount = housesFound - housePage; + if (screenCount > kDispFiles) + screenCount = kDispFiles; + + thisHouseIndex += 4; + thisHouseIndex = (((screenCount - 1) / 4) * 4) + + (thisHouseIndex % 4); + if (thisHouseIndex >= screenCount) + thisHouseIndex -= 4; + } + InvalWindowRect(GetDialogWindow(dial), &loadHouseRects[thisHouseIndex]); + return(true); + break; + + case kDownArrowKeyASCII: + InvalWindowRect(GetDialogWindow(dial), &loadHouseRects[thisHouseIndex]); + thisHouseIndex += 4; + screenCount = housesFound - housePage; + if (screenCount > kDispFiles) + screenCount = kDispFiles; + if (thisHouseIndex >= screenCount) + thisHouseIndex %= 4; + InvalWindowRect(GetDialogWindow(dial), &loadHouseRects[thisHouseIndex]); + return(true); + break; + + case kLeftArrowKeyASCII: + InvalWindowRect(GetDialogWindow(dial), &loadHouseRects[thisHouseIndex]); + thisHouseIndex--; + if (thisHouseIndex < 0) + { + screenCount = housesFound - housePage; + if (screenCount > kDispFiles) + screenCount = kDispFiles; + thisHouseIndex = screenCount - 1; + } + InvalWindowRect(GetDialogWindow(dial), &loadHouseRects[thisHouseIndex]); + return(true); + break; + + case kTabKeyASCII: + case kRightArrowKeyASCII: + InvalWindowRect(GetDialogWindow(dial), &loadHouseRects[thisHouseIndex]); + thisHouseIndex++; + screenCount = housesFound - housePage; + if (screenCount > kDispFiles) + screenCount = kDispFiles; + if (thisHouseIndex >= screenCount) + thisHouseIndex = 0; + InvalWindowRect(GetDialogWindow(dial), &loadHouseRects[thisHouseIndex]); + return(true); + break; + + default: + if (((theChar > 0x40) && (theChar <= 0x5A)) || + ((theChar > 0x60) && (theChar <= 0x7A))) + { + if ((theChar > 0x60) && (theChar <= 0x7A)) + theChar -= 0x20; + wasIndex = thisHouseIndex; + thisHouseIndex = -1; + i = 0; + do + { + if ((fileFirstChar[i] >= theChar) && (fileFirstChar[i] != 0x7F)) + thisHouseIndex = i; + i++; + } + while ((thisHouseIndex == -1) && (i < 12)); + if (thisHouseIndex == -1) + { + screenCount = housesFound - housePage; + if (screenCount > kDispFiles) + screenCount = kDispFiles; + thisHouseIndex = screenCount - 1; + } + if (wasIndex != thisHouseIndex) + { + InvalWindowRect(GetDialogWindow(dial), &loadHouseRects[wasIndex]); + InvalWindowRect(GetDialogWindow(dial), &loadHouseRects[thisHouseIndex]); + } + return(true); + } + else + return(false); + } + break; + + case mouseDown: + lastWhenClick = event->when - lastWhenClick; + SubPt(event->where, &lastWhereClick); + return(false); + break; + + case mouseUp: + lastWhenClick = event->when; + lastWhereClick = event->where; + return(false); + break; + + case updateEvt: + BeginUpdate(GetDialogWindow(dial)); + UpdateLoadDialog(dial); + EndUpdate(GetDialogWindow(dial)); + event->what = nullEvent; + return(false); + break; + + default: + return(false); + break; + } +} +#endif + +//-------------------------------------------------------------- DoLoadHouse + +#ifndef COMPILEDEMO +void DoLoadHouse (void) +{ + Rect tempRect; + DialogPtr theDial; + short i, item, wasIndex, screenCount; + Boolean leaving, whoCares; + ModalFilterUPP loadFilterUPP; + + loadFilterUPP = NewModalFilterUPP(LoadFilter); + + BringUpDialog(&theDial, kLoadHouseDialogID); + if (housesFound <= kDispFiles) + { + GetDialogItemRect(theDial, kScrollUpItem, &tempRect); + HideDialogItem(theDial, kScrollUpItem); + DrawCIcon(kGrayedOutUpArrow, tempRect.left, tempRect.top); + + GetDialogItemRect(theDial, kScrollDownItem, &tempRect); + HideDialogItem(theDial, kScrollDownItem); + DrawCIcon(kGrayedOutDownArrow, tempRect.left, tempRect.top); + } + else + { + if (thisHouseIndex < kDispFiles) + { + GetDialogItemRect(theDial, kScrollUpItem, &tempRect); + HideDialogItem(theDial, kScrollUpItem); + DrawCIcon(kGrayedOutUpArrow, tempRect.left, tempRect.top); + } + else if (thisHouseIndex > (housesFound - kDispFiles)) + { + GetDialogItemRect(theDial, kScrollDownItem, &tempRect); + HideDialogItem(theDial, kScrollDownItem); + DrawCIcon(kGrayedOutDownArrow, tempRect.left, tempRect.top); + } + } + wasIndex = thisHouseIndex; + housePage = (thisHouseIndex / kDispFiles) * kDispFiles; + thisHouseIndex -= housePage; + + for (i = 0; i < 12; i++) + { + GetDialogItemRect(theDial, kLoadNameFirstItem + i, + &loadHouseRects[i]); + GetDialogItemRect(theDial, kLoadIconFirstItem + i, + &tempRect); + loadHouseRects[i].top = tempRect.top; + loadHouseRects[i].bottom++; + } + + leaving = false; + + while (!leaving) + { + ModalDialog(loadFilterUPP, &item); + + if (item == kOkayButton) + { + thisHouseIndex += housePage; + if (thisHouseIndex != wasIndex) + { + whoCares = CloseHouse(); + PasStringCopy(theHousesSpecs[thisHouseIndex].name, + thisHouseName); + if (OpenHouse()) + whoCares = ReadHouse(); + } + leaving = true; + } + else if (item == kCancelButton) + { + thisHouseIndex = wasIndex; + leaving = true; + } + else if ((item >= kLoadNameFirstItem) && + (item <= kLoadNameLastItem)) + { + screenCount = housesFound - housePage; + if (screenCount > kDispFiles) + screenCount = kDispFiles; + if ((item - kLoadNameFirstItem != thisHouseIndex) && + (item - kLoadNameFirstItem < screenCount)) + { + InvalWindowRect(GetDialogWindow(theDial), &loadHouseRects[thisHouseIndex]); + thisHouseIndex = item - kLoadNameFirstItem; + InvalWindowRect(GetDialogWindow(theDial), &loadHouseRects[thisHouseIndex]); + } + + if (lastWhereClick.h < 0) + lastWhereClick.h = -lastWhereClick.h; + if (lastWhereClick.v < 0) + lastWhereClick.v = -lastWhereClick.v; + if ((lastWhenClick < doubleTime) && (lastWhereClick.h < 5) && + (lastWhereClick.v < 5)) + { + thisHouseIndex += housePage; + if (thisHouseIndex != wasIndex) + { + MyDisableControl(theDial, kOkayButton); + MyDisableControl(theDial, kCancelButton); + whoCares = CloseHouse(); + PasStringCopy(theHousesSpecs[thisHouseIndex].name, + thisHouseName); + if (OpenHouse()) + whoCares = ReadHouse(); + } + leaving = true; + } + } + else if ((item >= kLoadIconFirstItem) && + (item <= kLoadIconLastItem)) + { + screenCount = housesFound - housePage; + if (screenCount > kDispFiles) + screenCount = kDispFiles; + if ((item - kLoadIconFirstItem != thisHouseIndex) && + (item - kLoadIconFirstItem < screenCount)) + { + InvalWindowRect(GetDialogWindow(theDial), &loadHouseRects[thisHouseIndex]); + thisHouseIndex = item - kLoadIconFirstItem; + InvalWindowRect(GetDialogWindow(theDial), &loadHouseRects[thisHouseIndex]); + } + + if (lastWhereClick.h < 0) + lastWhereClick.h = -lastWhereClick.h; + if (lastWhereClick.v < 0) + lastWhereClick.v = -lastWhereClick.v; + if ((lastWhenClick < doubleTime) && (lastWhereClick.h < 5) && + (lastWhereClick.v < 5)) + { + thisHouseIndex += housePage; + if (thisHouseIndex != wasIndex) + { + MyDisableControl(theDial, kOkayButton); + MyDisableControl(theDial, kCancelButton); + whoCares = CloseHouse(); + PasStringCopy(theHousesSpecs[thisHouseIndex].name, + thisHouseName); + if (OpenHouse()) + whoCares = ReadHouse(); + } + leaving = true; + } + } + else if (item == kScrollUpItem) + { + PageUpHouses(theDial); + } + else if (item == kScrollDownItem) + { + PageDownHouses(theDial); + } + } + + DisposeDialog(theDial); + DisposeModalFilterUPP(loadFilterUPP); +} +#endif + +//-------------------------------------------------------------- SortHouseList + +void SortHouseList (void) +{ + FSSpec tempSpec; + short i, h, whosFirst; + + i = 0; // remove exact duplicate houses + while (i < housesFound) + { + h = i + 1; + while (h < housesFound) + { + if ((EqualString(theHousesSpecs[i].name, theHousesSpecs[h].name, true, true)) && + (theHousesSpecs[i].vRefNum == theHousesSpecs[i].vRefNum) && + (theHousesSpecs[i].parID == theHousesSpecs[i].parID)) + { + theHousesSpecs[h] = theHousesSpecs[housesFound - 1]; + housesFound--; + } + h++; + } + i++; + } + + for (i = 0; i < housesFound - 1; i++) + { + for (h = 0; h < (housesFound - i - 1); h++) + { + whosFirst = WhichStringFirst(theHousesSpecs[h].name, + theHousesSpecs[h + 1].name); + if (whosFirst == 1) + { + tempSpec = theHousesSpecs[h + 1]; + theHousesSpecs[h + 1] = theHousesSpecs[h]; + theHousesSpecs[h] = tempSpec; + } + } + } +} + +//-------------------------------------------------------------- DoDirSearch + +void DoDirSearch (void) +{ + #define kMaxDirectories 32 + CInfoPBRec theBlock; + Str255 nameString; + long theDirs[kMaxDirectories]; + OSErr theErr, notherErr; + short count, i, currentDir, numDirs; + + for (i = 0; i < kMaxDirectories; i++) + theDirs[i] = 0L; + currentDir = 0; + theDirs[currentDir] = thisMac.dirID; + numDirs = 1; + + theBlock.hFileInfo.ioCompletion = nil; + theBlock.hFileInfo.ioVRefNum = thisMac.vRefNum; + theBlock.hFileInfo.ioNamePtr = nameString; + + while ((currentDir < numDirs) && (currentDir < kMaxDirectories)) + { + count = 1; + theErr = noErr; + + while (theErr == noErr) + { + SpinCursor(1); + theBlock.hFileInfo.ioFDirIndex = count; + theBlock.hFileInfo.ioDirID = theDirs[currentDir]; + theErr = PBGetCatInfo(&theBlock, false); + + if (theErr == noErr) + { + if ((theBlock.hFileInfo.ioFlAttrib & 0x10) == 0x00) + { + if ((theBlock.hFileInfo.ioFlFndrInfo.fdType == 'gliH') && + (theBlock.hFileInfo.ioFlFndrInfo.fdCreator == 'ozm5') && + (housesFound < maxFiles)) + { + notherErr = FSMakeFSSpec(thisMac.vRefNum, + theBlock.hFileInfo.ioFlParID, nameString, + &theHousesSpecs[housesFound]); + if (notherErr == noErr) + housesFound++; + } + } + else if ((theBlock.hFileInfo.ioFlAttrib & 0x10) == 0x10) + { + if (numDirs < kMaxDirectories) + { + theDirs[numDirs] = theBlock.hFileInfo.ioDirID; + numDirs++; + } + } + count++; + } + } + currentDir++; + } + + if (housesFound < 1) + { + thisHouseIndex = -1; + YellowAlert(kYellowNoHouses, 0); + } + else + { + SortHouseList(); + thisHouseIndex = 0; + for (i = 0; i < housesFound; i++) + { + if (EqualString(theHousesSpecs[i].name, thisHouseName, false, true)) + { + thisHouseIndex = i; + break; + } + } + PasStringCopy(theHousesSpecs[thisHouseIndex].name, thisHouseName); + + demoHouseIndex = -1; + for (i = 0; i < housesFound; i++) + { + if (EqualString(theHousesSpecs[i].name, PSTR("Demo House"), false, true)) + { + demoHouseIndex = i; + break; + } + } + } +} + +//-------------------------------------------------------------- BuildHouseList + +void BuildHouseList (void) +{ + short i; + + if (thisMac.hasSystem7) + { + housesFound = 0; // zero the number of houses found + for (i = 0; i < numExtraHouses; i++) // 1st, insert extra houses into list + { + theHousesSpecs[housesFound] = extraHouseSpecs[i]; + housesFound++; + } + DoDirSearch(); // now, search folders for the rest + } +} + +//-------------------------------------------------------------- AddExtraHouse + +void AddExtraHouse (FSSpec *newHouse) +{ + if (numExtraHouses >= kMaxExtraHouses) + return; + + extraHouseSpecs[numExtraHouses] = *newHouse; + numExtraHouses++; +} + diff --git a/GpApp/Settings.cpp b/GpApp/Settings.cpp new file mode 100644 index 0000000..3738e84 --- /dev/null +++ b/GpApp/Settings.cpp @@ -0,0 +1,1482 @@ + +//============================================================================ +//---------------------------------------------------------------------------- +// Settings.c +//---------------------------------------------------------------------------- +//============================================================================ + + +#include "PLSound.h" +#include "PLTextUtils.h" +#include "DialogUtils.h" +#include "Externs.h" +#include "Environ.h" +#include "House.h" + + +#define kMainPrefsDialID 1012 +#define kDisplayPrefsDialID 1017 +#define kSoundPrefsDialID 1018 +#define kControlPrefsDialID 1023 +#define kBrainsPrefsDialID 1024 +#define kDisplayButton 3 +#define kSoundButton 4 +#define kControlsButton 5 +#define kBrainsButton 6 +#define kDisplay1Item 3 +#define kDisplay3Item 4 +#define kDisplay9Item 5 +#define kDoColorFadeItem 9 +#define kCurrentDepth 10 +#define k256Depth 11 +#define k16Depth 12 +#define kDispDefault 15 +#define kUseQDItem 16 +#define kUseScreen2Item 17 +#define kSofterItem 4 +#define kLouderItem 5 +#define kVolNumberItem 7 +#define kIdleMusicItem 8 +#define kPlayMusicItem 9 +#define kSoundDefault 13 +#define kRightControl 5 +#define kLeftControl 6 +#define kBattControl 7 +#define kBandControl 8 +#define kControlDefaults 13 +#define kESCPausesRadio 14 +#define kTABPausesRadio 15 +#define kMaxFilesItem 5 +#define kQuickTransitCheck 7 +#define kDoZoomsCheck 8 +#define kBrainsDefault 9 +#define kDoDemoCheck 10 +#define kDoBackgroundCheck 11 +#define kDoErrorCheck 12 +#define kDoPrettyMapCheck 13 +#define kDoBitchDlgsCheck 14 + + +void SetBrainsToDefaults (DialogPtr); +void UpdateSettingsBrains (DialogPtr); +Boolean BrainsFilter (DialogPtr, EventRecord *, short *); +void DoBrainsPrefs (void); +void SetControlsToDefaults (DialogPtr); +void UpdateControlKeyName (DialogPtr); +void UpdateSettingsControl (DialogPtr); +Boolean ControlFilter (DialogPtr, EventRecord *, short *); +void DoControlPrefs (void); +void SoundDefaults (DialogPtr); +void UpdateSettingsSound (DialogPtr); +void HandleSoundMusicChange (short, Boolean); +Boolean SoundFilter (DialogPtr, EventRecord *, short *); +void DoSoundPrefs (void); +void DisplayDefaults (void); +void FrameDisplayIcon (DialogPtr); +void DisplayUpdate (DialogPtr); +Boolean DisplayFilter (DialogPtr, EventRecord *, short *); +void DoDisplayPrefs (void); +void SetAllDefaults (void); +void FlashSettingsButton (short); +void UpdateSettingsMain (DialogPtr); +Boolean PrefsFilter (DialogPtr, EventRecord *, short *); +void BitchAboutChanges (void); + + +Rect prefButton[4], controlRects[4]; +Str15 leftName, rightName, batteryName, bandName; +Str15 tempLeftStr, tempRightStr, tempBattStr, tempBandStr; +long tempLeftMap, tempRightMap, tempBattMap, tempBandMap; +short whichCtrl, wasDepthPref; +Boolean wasFade, wasIdle, wasPlay, wasTransit, wasZooms, wasBackground; +Boolean wasEscPauseKey, wasDemos, wasScreen2, nextRestartChange, wasErrorCheck; +Boolean wasPrettyMap, wasBitchDialogs; + +extern short numNeighbors, isDepthPref, maxFiles, willMaxFiles; +extern Boolean isDoColorFade, isPlayMusicIdle, isUseSecondScreen; +extern Boolean isHouseChecks, doBitchDialogs; +extern Boolean isEscPauseKey, failedMusic, isSoundOn, doBackground; +extern Boolean isMusicOn, quickerTransitions, doAutoDemo; +extern Boolean changeLockStateOfHouse, saveHouseLocked, doPrettyMap; + + +//============================================================== Functions +//-------------------------------------------------------------- SetBrainsToDefaults + +void SetBrainsToDefaults (DialogPtr theDialog) +{ + SetDialogNumToStr(theDialog, kMaxFilesItem, 24L); +#ifdef powerc + wasTransit = false; +#else + wasTransit = true; +#endif + wasZooms = true; + wasDemos = true; + wasBackground = false; + wasErrorCheck = true; + wasPrettyMap = true; + wasBitchDialogs = true; + SetDialogItemValue(theDialog, kQuickTransitCheck, (short)wasTransit); + SetDialogItemValue(theDialog, kDoZoomsCheck, (short)wasZooms); + SetDialogItemValue(theDialog, kDoDemoCheck, (short)wasDemos); + SetDialogItemValue(theDialog, kDoBackgroundCheck, (short)wasBackground); + SetDialogItemValue(theDialog, kDoErrorCheck, (short)wasErrorCheck); + SetDialogItemValue(theDialog, kDoPrettyMapCheck, (short)wasPrettyMap); + SetDialogItemValue(theDialog, kDoBitchDlgsCheck, (short)wasBitchDialogs); +} + +//-------------------------------------------------------------- UpdateSettingsBrains + +void UpdateSettingsBrains (DialogPtr theDialog) +{ + DrawDialog(theDialog); + DrawDefaultButton(theDialog); + + SetDialogNumToStr(theDialog, kMaxFilesItem, (long)willMaxFiles); + SelectDialogItemText(theDialog, kMaxFilesItem, 0, 1024); + + FrameDialogItemC(theDialog, 3, kRedOrangeColor8); +} + +//-------------------------------------------------------------- BrainsFilter + +Boolean BrainsFilter (DialogPtr dial, EventRecord *event, short *item) +{ + switch (event->what) + { + case keyDown: + switch ((event->message) & charCodeMask) + { + case kReturnKeyASCII: + case kEnterKeyASCII: + FlashDialogButton(dial, kOkayButton); + *item = kOkayButton; + return(true); + break; + + case kEscapeKeyASCII: + FlashDialogButton(dial, kCancelButton); + *item = kCancelButton; + return(true); + break; + + case kCapAKeyASCII: + case kAKeyASCII: + *item = kDoDemoCheck; + return(true); + break; + + case kCapBKeyASCII: + case kBKeyASCII: + *item = kDoBackgroundCheck; + return(true); + break; + + case kCapDKeyASCII: + case kDKeyASCII: + *item = kBrainsDefault; + FlashDialogButton(dial, kBrainsDefault); + return(true); + break; + + case kCapEKeyASCII: + case kEKeyASCII: + *item = kDoErrorCheck; + return(true); + break; + + case kCapQKeyASCII: + case kQKeyASCII: + *item = kQuickTransitCheck; + return(true); + break; + + case kCapZKeyASCII: + case kZKeyASCII: + *item = kDoZoomsCheck; + return(true); + break; + + default: + return(false); + } + break; + + case mouseDown: + return(false); + break; + + case updateEvt: + SetPort((GrafPtr)dial); + BeginUpdate(GetDialogWindow(dial)); + UpdateSettingsBrains(dial); + EndUpdate(GetDialogWindow(dial)); + event->what = nullEvent; + return(false); + break; + + default: + return(false); + break; + } +} + +//-------------------------------------------------------------- DoBrainsPrefs + +void DoBrainsPrefs (void) +{ + DialogPtr prefDlg; + long tempLong; + short itemHit, wasMaxFiles; + Boolean leaving; + ModalFilterUPP brainsFilterUPP; + + brainsFilterUPP = NewModalFilterUPP(BrainsFilter); + + BringUpDialog(&prefDlg, kBrainsPrefsDialID); + leaving = false; + wasMaxFiles = willMaxFiles; + + wasTransit = quickerTransitions; + wasZooms = doZooms; + wasDemos = doAutoDemo; + wasBackground = doBackground; + wasErrorCheck = isHouseChecks; + wasPrettyMap = doPrettyMap; + wasBitchDialogs = doBitchDialogs; + + SetDialogItemValue(prefDlg, kQuickTransitCheck, (short)wasTransit); + SetDialogItemValue(prefDlg, kDoZoomsCheck, (short)wasZooms); + SetDialogItemValue(prefDlg, kDoDemoCheck, (short)wasDemos); + SetDialogItemValue(prefDlg, kDoBackgroundCheck, (short)wasBackground); + SetDialogItemValue(prefDlg, kDoErrorCheck, (short)wasErrorCheck); + SetDialogItemValue(prefDlg, kDoPrettyMapCheck, (short)wasPrettyMap); + SetDialogItemValue(prefDlg, kDoBitchDlgsCheck, (short)wasBitchDialogs); + + while (!leaving) + { + ModalDialog(brainsFilterUPP, &itemHit); + switch (itemHit) + { + case kOkayButton: + GetDialogNumFromStr(prefDlg, kMaxFilesItem, &tempLong); + if (tempLong > 500) + tempLong = 500; + else if (tempLong < 12) + tempLong = 12; + willMaxFiles = static_cast(tempLong); + if (willMaxFiles != wasMaxFiles) + nextRestartChange = true; + quickerTransitions = wasTransit; + doZooms = wasZooms; + doAutoDemo = wasDemos; + doBackground = wasBackground; + isHouseChecks = wasErrorCheck; + doPrettyMap = wasPrettyMap; + doBitchDialogs = wasBitchDialogs; + leaving = true; + break; + + case kCancelButton: + willMaxFiles = wasMaxFiles; + leaving = true; + break; + + case kQuickTransitCheck: + wasTransit = !wasTransit; + SetDialogItemValue(prefDlg, kQuickTransitCheck, (short)wasTransit); + break; + + case kDoZoomsCheck: + wasZooms = !wasZooms; + SetDialogItemValue(prefDlg, kDoZoomsCheck, (short)wasZooms); + break; + + case kDoDemoCheck: + wasDemos = !wasDemos; + SetDialogItemValue(prefDlg, kDoDemoCheck, (short)wasDemos); + break; + + case kDoBackgroundCheck: + wasBackground = !wasBackground; + SetDialogItemValue(prefDlg, kDoBackgroundCheck, (short)wasBackground); + break; + + case kBrainsDefault: + SetBrainsToDefaults(prefDlg); + break; + + case kDoErrorCheck: + wasErrorCheck = !wasErrorCheck; + SetDialogItemValue(prefDlg, kDoErrorCheck, (short)wasErrorCheck); + break; + + case kDoPrettyMapCheck: + wasPrettyMap = !wasPrettyMap; + SetDialogItemValue(prefDlg, kDoPrettyMapCheck, (short)wasPrettyMap); + break; + + case kDoBitchDlgsCheck: + wasBitchDialogs = !wasBitchDialogs; + SetDialogItemValue(prefDlg, kDoBitchDlgsCheck, (short)wasBitchDialogs); + break; + } + } + + DisposeDialog(prefDlg); + DisposeModalFilterUPP(brainsFilterUPP); +} + +//-------------------------------------------------------------- SetControlsToDefaults + +void SetControlsToDefaults (DialogPtr theDialog) +{ + PasStringCopy(PSTR("lf arrow"), tempLeftStr); + PasStringCopy(PSTR("rt arrow"), tempRightStr); + PasStringCopy(PSTR("dn arrow"), tempBattStr); + PasStringCopy(PSTR("up arrow"), tempBandStr); + tempLeftMap = kLeftArrowKeyMap; + tempRightMap = kRightArrowKeyMap; + tempBattMap = kDownArrowKeyMap; + tempBandMap = kUpArrowKeyMap; + wasEscPauseKey = false; + SelectFromRadioGroup(theDialog, kTABPausesRadio, + kESCPausesRadio, kTABPausesRadio); +} + +//-------------------------------------------------------------- UpdateControlKeyName + +void UpdateControlKeyName (DialogPtr theDialog) +{ + DrawDialogUserText(theDialog, kRightControl + 4, tempRightStr, whichCtrl == 0); + DrawDialogUserText(theDialog, kLeftControl + 4, tempLeftStr, whichCtrl == 1); + DrawDialogUserText(theDialog, kBattControl + 4, tempBattStr, whichCtrl == 2); + DrawDialogUserText(theDialog, kBandControl + 4, tempBandStr, whichCtrl == 3); +} + +//-------------------------------------------------------------- UpdateSettingsControl + +void UpdateSettingsControl (DialogPtr theDialog) +{ + short i; + + DrawDialog(theDialog); + + PenSize(2, 2); + ForeColor(whiteColor); + for (i = 0; i < 4; i++) + FrameRect(&controlRects[i]); + ForeColor(redColor); + FrameRect(&controlRects[whichCtrl]); + ForeColor(blackColor); + PenNormal(); + UpdateControlKeyName(theDialog); + FrameDialogItemC(theDialog, 3, kRedOrangeColor8); +} + +//-------------------------------------------------------------- ControlFilter + +Boolean ControlFilter (DialogPtr dial, EventRecord *event, short *item) +{ + long wasKeyMap; + + switch (event->what) + { + case keyDown: + switch (whichCtrl) + { + case 0: + wasKeyMap = (long)GetKeyMapFromMessage(event->message); + if ((wasKeyMap == tempLeftMap) || (wasKeyMap == tempBattMap) || + (wasKeyMap == tempBandMap) || (wasKeyMap == kTabKeyMap) || + (wasKeyMap == kEscKeyMap) || (wasKeyMap == kDeleteKeyMap)) + { + if (wasKeyMap == kEscKeyMap) + { + FlashDialogButton(dial, kCancelButton); + *item = kCancelButton; + return(true); + } + else + SysBeep(1); + } + else + { + GetKeyName(event->message, tempRightStr); + tempRightMap = wasKeyMap; + } + break; + + case 1: + wasKeyMap = (long)GetKeyMapFromMessage(event->message); + if ((wasKeyMap == tempRightMap) || (wasKeyMap == tempBattMap) || + (wasKeyMap == tempBandMap) || (wasKeyMap == kTabKeyMap) || + (wasKeyMap == kEscKeyMap) || (wasKeyMap == kDeleteKeyMap)) + { + if (wasKeyMap == kEscKeyMap) + { + FlashDialogButton(dial, kCancelButton); + *item = kCancelButton; + return(true); + } + else + SysBeep(1); + } + else + { + GetKeyName(event->message, tempLeftStr); + tempLeftMap = wasKeyMap; + } + break; + + case 2: + wasKeyMap = (long)GetKeyMapFromMessage(event->message); + if ((wasKeyMap == tempRightMap) || (wasKeyMap == tempLeftMap) || + (wasKeyMap == tempBandMap) || (wasKeyMap == kTabKeyMap) || + (wasKeyMap == kEscKeyMap) || (wasKeyMap == kDeleteKeyMap)) + { + if (wasKeyMap == kEscKeyMap) + { + FlashDialogButton(dial, kCancelButton); + *item = kCancelButton; + return(true); + } + else + SysBeep(1); + } + else + { + GetKeyName(event->message, tempBattStr); + tempBattMap = wasKeyMap; + } + break; + + case 3: + wasKeyMap = (long)GetKeyMapFromMessage(event->message); + if ((wasKeyMap == tempRightMap) || (wasKeyMap == tempLeftMap) || + (wasKeyMap == tempBattMap) || (wasKeyMap == kTabKeyMap) || + (wasKeyMap == kEscKeyMap) || (wasKeyMap == kDeleteKeyMap)) + { + if (wasKeyMap == kEscKeyMap) + { + FlashDialogButton(dial, kCancelButton); + *item = kCancelButton; + return(true); + } + else + SysBeep(1); + } + else + { + GetKeyName(event->message, tempBandStr); + tempBandMap = wasKeyMap; + } + break; + } + UpdateControlKeyName(dial); + return(false); + break; + + case mouseDown: + return(false); + break; + + case updateEvt: + SetPort((GrafPtr)dial); + BeginUpdate(GetDialogWindow(dial)); + UpdateSettingsControl(dial); + EndUpdate(GetDialogWindow(dial)); + event->what = nullEvent; + return(false); + break; + + default: + return(false); + break; + } +} + +//-------------------------------------------------------------- DoControlPrefs + +void DoControlPrefs (void) +{ + DialogPtr prefDlg; + short i, itemHit; + Boolean leaving; + ModalFilterUPP controlFilterUPP; + + controlFilterUPP = NewModalFilterUPP(ControlFilter); + +// CenterDialog(kControlPrefsDialID); + prefDlg = GetNewDialog(kControlPrefsDialID, nil, kPutInFront); + if (prefDlg == nil) + RedAlert(kErrDialogDidntLoad); + SetPort((GrafPtr)prefDlg); + for (i = 0; i < 4; i++) + { + GetDialogItemRect(prefDlg, i + kRightControl, &controlRects[i]); + InsetRect(&controlRects[i], -3, -3); + } + whichCtrl = 1; + + PasStringCopy(leftName, tempLeftStr); + PasStringCopy(rightName, tempRightStr); + PasStringCopy(batteryName, tempBattStr); + PasStringCopy(bandName, tempBandStr); + tempLeftMap = theGlider.leftKey; + tempRightMap = theGlider.rightKey; + tempBattMap = theGlider.battKey; + tempBandMap = theGlider.bandKey; + wasEscPauseKey = isEscPauseKey; + + leaving = false; + + ShowWindow(GetDialogWindow(prefDlg)); + if (isEscPauseKey) + SelectFromRadioGroup(prefDlg, kESCPausesRadio, + kESCPausesRadio, kTABPausesRadio); + else + SelectFromRadioGroup(prefDlg, kTABPausesRadio, + kESCPausesRadio, kTABPausesRadio); + + while (!leaving) + { + ModalDialog(controlFilterUPP, &itemHit); + switch (itemHit) + { + case kOkayButton: + PasStringCopy(tempLeftStr, leftName); + PasStringCopy(tempRightStr, rightName); + PasStringCopy(tempBattStr, batteryName); + PasStringCopy(tempBandStr, bandName); + theGlider.leftKey = tempLeftMap; + theGlider.rightKey = tempRightMap; + theGlider.battKey = tempBattMap; + theGlider.bandKey = tempBandMap; + isEscPauseKey = wasEscPauseKey; + leaving = true; + break; + + case kCancelButton: + leaving = true; + break; + + case kRightControl: + case kLeftControl: + case kBattControl: + case kBandControl: + PenSize(2, 2); + ForeColor(whiteColor); + FrameRect(&controlRects[whichCtrl]); + whichCtrl = itemHit - kRightControl; + ForeColor(redColor); + FrameRect(&controlRects[whichCtrl]); + ForeColor(blackColor); + PenNormal(); + UpdateControlKeyName(prefDlg); + break; + + case kESCPausesRadio: + case kTABPausesRadio: + SelectFromRadioGroup(prefDlg, itemHit, kESCPausesRadio, kTABPausesRadio); + wasEscPauseKey = !wasEscPauseKey; + break; + + case kControlDefaults: + SetControlsToDefaults(prefDlg); + UpdateControlKeyName(prefDlg); + break; + } + } + + DisposeDialog(prefDlg); + DisposeModalFilterUPP(controlFilterUPP); +} + +//-------------------------------------------------------------- SoundDefaults + +void SoundDefaults (DialogPtr theDialog) +{ + wasIdle = true; + wasPlay = true; + SetDialogItemValue(theDialog, kIdleMusicItem, (short)wasIdle); + SetDialogItemValue(theDialog, kPlayMusicItem, (short)wasPlay); + UnivSetSoundVolume(3, thisMac.hasSM3); + SetDialogNumToStr(theDialog, kVolNumberItem, 3L); + HandleSoundMusicChange(3, true); +} + +//-------------------------------------------------------------- UpdateSettingsSound + +void UpdateSettingsSound (DialogPtr theDialog) +{ + short howLoudNow; + + DrawDialog(theDialog); + DrawDefaultButton(theDialog); + + UnivGetSoundVolume(&howLoudNow, thisMac.hasSM3); + + if (howLoudNow >= 7) + SetDialogNumToStr(theDialog, kVolNumberItem, 11L); + else + SetDialogNumToStr(theDialog, kVolNumberItem, (long)howLoudNow); + + FrameDialogItemC(theDialog, 11, kRedOrangeColor8); +} + +//-------------------------------------------------------------- HandleSoundMusicChange + +void HandleSoundMusicChange (short newVolume, Boolean sayIt) +{ + OSErr theErr; + + isSoundOn = (newVolume != 0); + + if (wasIdle) + { + if (newVolume == 0) + StopTheMusic(); + else + { + if (!isMusicOn) + { + theErr = StartMusic(); + if (theErr != noErr) + { + YellowAlert(kYellowNoMusic, theErr); + failedMusic = true; + } + } + } + } + + if ((newVolume != 0) && (sayIt)) + PlayPrioritySound(kChord2Sound, kChord2Priority); +} + +//-------------------------------------------------------------- SoundFilter + +Boolean SoundFilter (DialogPtr dial, EventRecord *event, short *item) +{ + short newVolume; + + switch (event->what) + { + case keyDown: + switch ((event->message) & charCodeMask) + { + case kReturnKeyASCII: + case kEnterKeyASCII: + FlashDialogButton(dial, kOkayButton); + *item = kOkayButton; + return(true); + break; + + case kEscapeKeyASCII: + FlashDialogButton(dial, kCancelButton); + *item = kCancelButton; + return(true); + break; + + case kUpArrowKeyASCII: + *item = kLouderItem; + return(true); + break; + + case kDownArrowKeyASCII: + *item = kSofterItem; + return(true); + break; + + case k0KeyASCII: + case k1KeyASCII: + case k2KeyASCII: + case k3KeyASCII: + case k4KeyASCII: + case k5KeyASCII: + case k6KeyASCII: + case k7KeyASCII: + newVolume = (((event->message) & charCodeMask) - k0KeyASCII); + if (newVolume == 7L) + SetDialogNumToStr(dial, kVolNumberItem, 11L); + else + SetDialogNumToStr(dial, kVolNumberItem, (long)newVolume); + + UnivSetSoundVolume(newVolume, thisMac.hasSM3); + + HandleSoundMusicChange(newVolume, true); + return(false); + break; + + case kCapDKeyASCII: + case kDKeyASCII: + *item = kSoundDefault; + FlashDialogButton(dial, kSoundDefault); + return(true); + break; + + case kCapGKeyASCII: + case kGKeyASCII: + *item = kPlayMusicItem; + return(true); + break; + + case kCapIKeyASCII: + case kIKeyASCII: + *item = kIdleMusicItem; + return(true); + break; + + default: + return(false); + } + break; + + case mouseDown: + return(false); + break; + + case updateEvt: + SetPort((GrafPtr)dial); + BeginUpdate(GetDialogWindow(dial)); + UpdateSettingsSound(dial); + EndUpdate(GetDialogWindow(dial)); + event->what = nullEvent; + return(false); + break; + + default: + return(false); + break; + } +} + +//-------------------------------------------------------------- DoSettingsMain + +void DoSoundPrefs (void) +{ + Rect tempRect; + DialogPtr prefDlg; + short wasLoudness, tempVolume; + OSErr theErr; + short itemHit; + Boolean leaving; + ModalFilterUPP soundFilterUPP; + + soundFilterUPP = NewModalFilterUPP(SoundFilter); + + BringUpDialog(&prefDlg, kSoundPrefsDialID); + + UnivGetSoundVolume(&wasLoudness, thisMac.hasSM3); + + wasIdle = isPlayMusicIdle; + wasPlay = isPlayMusicGame; + SetDialogItemValue(prefDlg, kIdleMusicItem, (short)wasIdle); + SetDialogItemValue(prefDlg, kPlayMusicItem, (short)wasPlay); + leaving = false; + + while (!leaving) + { + ModalDialog(soundFilterUPP, &itemHit); + switch (itemHit) + { + case kOkayButton: + isPlayMusicIdle = wasIdle; + isPlayMusicGame = wasPlay; + leaving = true; + UnivGetSoundVolume(&tempVolume, thisMac.hasSM3); + isSoundOn = (tempVolume != 0); + break; + + case kCancelButton: + UnivSetSoundVolume(wasLoudness, thisMac.hasSM3); + HandleSoundMusicChange(wasLoudness, false); + if (isPlayMusicIdle != wasIdle) + { + if (isPlayMusicIdle) + { + if (wasLoudness != 0) + { + theErr = StartMusic(); + if (theErr != noErr) + { + YellowAlert(kYellowNoMusic, theErr); + failedMusic = true; + } + } + } + else + StopTheMusic(); + } + leaving = true; + break; + + case kSofterItem: + UnivGetSoundVolume(&tempVolume, thisMac.hasSM3); + if (tempVolume > 0) + { + GetDialogItemRect(prefDlg, kSofterItem, &tempRect); + DrawCIcon(1034, tempRect.left, tempRect.top); + tempVolume--; + SetDialogNumToStr(prefDlg, kVolNumberItem, (long)tempVolume); + UnivSetSoundVolume(tempVolume, thisMac.hasSM3); + HandleSoundMusicChange(tempVolume, true); + InvalWindowRect(GetDialogWindow(prefDlg), &tempRect); + DelayTicks(8); + } + break; + + case kLouderItem: + UnivGetSoundVolume(&tempVolume, thisMac.hasSM3); + if (tempVolume < 7) + { + GetDialogItemRect(prefDlg, kLouderItem, &tempRect); + DrawCIcon(1033, tempRect.left, tempRect.top); + tempVolume++; + if (tempVolume == 7) + SetDialogNumToStr(prefDlg, kVolNumberItem, 11L); + else + SetDialogNumToStr(prefDlg, kVolNumberItem, tempVolume); + UnivSetSoundVolume(tempVolume, thisMac.hasSM3); + HandleSoundMusicChange(tempVolume, true); + InvalWindowRect(GetDialogWindow(prefDlg), &tempRect); + DelayTicks(8); + } + break; + + case kIdleMusicItem: + wasIdle = !wasIdle; + SetDialogItemValue(prefDlg, kIdleMusicItem, (short)wasIdle); + if (wasIdle) + { + UnivGetSoundVolume(&tempVolume, thisMac.hasSM3); + if (tempVolume != 0) + { + theErr = StartMusic(); + if (theErr != noErr) + { + YellowAlert(kYellowNoMusic, theErr); + failedMusic = true; + } + } + } + else + StopTheMusic(); + break; + + case kPlayMusicItem: + wasPlay = !wasPlay; + SetDialogItemValue(prefDlg, kPlayMusicItem, (short)wasPlay); + break; + + case kSoundDefault: + SoundDefaults(prefDlg); + break; + } + } + + DisposeDialog(prefDlg); + DisposeModalFilterUPP(soundFilterUPP); +} + +//-------------------------------------------------------------- DisplayDefaults + +void DisplayDefaults (void) +{ + numNeighbors = 9; + wasDepthPref = kSwitchIfNeeded; + wasFade = true; + wasScreen2 = false; +} + +//-------------------------------------------------------------- FrameDisplayIcon + +void FrameDisplayIcon (DialogPtr theDialog) +{ + Rect theRect; + + switch (numNeighbors) + { + case 1: + GetDialogItemRect(theDialog, kDisplay1Item, &theRect); + break; + + case 3: + GetDialogItemRect(theDialog, kDisplay3Item, &theRect); + break; + + default: + GetDialogItemRect(theDialog, kDisplay9Item, &theRect); + break; + } + + theRect.left -= 3; + theRect.top += 0; + theRect.right += 3; + theRect.bottom -= 1; + FrameRect(&theRect); + InsetRect(&theRect, 1, 1); + FrameRect(&theRect); +} + +//-------------------------------------------------------------- DisplayUpdate + +void DisplayUpdate (DialogPtr theDialog) +{ + DrawDialog(theDialog); + DrawDefaultButton(theDialog); + + SetDialogItemValue(theDialog, kDoColorFadeItem, (short)wasFade); + SelectFromRadioGroup(theDialog, kCurrentDepth + wasDepthPref, + kCurrentDepth, k16Depth); +// SetDialogItemValue(theDialog, kUseQDItem, (short)wasQD); + SetDialogItemValue(theDialog, kUseScreen2Item, (short)wasScreen2); + + ForeColor(redColor); + FrameDisplayIcon(theDialog); + ForeColor(blackColor); + FrameDialogItemC(theDialog, 8, kRedOrangeColor8); + FrameDialogItemC(theDialog, 13, kRedOrangeColor8); + FrameDialogItemC(theDialog, 14, kRedOrangeColor8); +} + +//-------------------------------------------------------------- DisplayFilter + +Boolean DisplayFilter (DialogPtr dial, EventRecord *event, short *item) +{ + switch (event->what) + { + case keyDown: + switch ((event->message) & charCodeMask) + { + case kReturnKeyASCII: + case kEnterKeyASCII: + FlashDialogButton(dial, kOkayButton); + *item = kOkayButton; + return(true); + break; + + case kEscapeKeyASCII: + FlashDialogButton(dial, kCancelButton); + *item = kCancelButton; + return(true); + break; + + case kLeftArrowKeyASCII: + switch (numNeighbors) + { + case 1: + *item = kDisplay9Item; + break; + + case 3: + *item = kDisplay1Item; + break; + + case 9: + *item = kDisplay3Item; + break; + } + return(true); + break; + + case kRightArrowKeyASCII: + switch (numNeighbors) + { + case 1: + *item = kDisplay3Item; + break; + + case 3: + *item = kDisplay9Item; + break; + + case 9: + *item = kDisplay1Item; + break; + } + return(true); + break; + + case kUpArrowKeyASCII: + switch (wasDepthPref) + { + case kSwitchIfNeeded: + *item = k16Depth; + break; + + case kSwitchTo256Colors: + *item = kCurrentDepth; + break; + + case kSwitchTo16Grays: + *item = k256Depth; + break; + } + return(true); + break; + + case kDownArrowKeyASCII: + switch (wasDepthPref) + { + case kSwitchIfNeeded: + *item = k256Depth; + break; + + case kSwitchTo256Colors: + *item = k16Depth; + break; + + case kSwitchTo16Grays: + *item = kCurrentDepth; + break; + } + return(true); + break; + + case k1KeyASCII: + *item = kDisplay1Item; + return(true); + break; + + case k3KeyASCII: + *item = kDisplay3Item; + return(true); + break; + + case k9KeyASCII: + *item = kDisplay9Item; + return(true); + break; + + case kCapBKeyASCII: + case kBKeyASCII: + *item = kDoColorFadeItem; + return(true); + break; + + case kCapDKeyASCII: + case kDKeyASCII: + *item = kDispDefault; + FlashDialogButton(dial, kDispDefault); + return(true); + break; + + case kCapRKeyASCII: + case kRKeyASCII: + *item = kUseScreen2Item; + FlashDialogButton(dial, kUseQDItem); + return(true); + break; + + case kCapUKeyASCII: + case kUKeyASCII: + *item = kUseQDItem; + return(true); + break; + + default: + return(false); + } + break; + + case mouseDown: + return(false); + break; + + case updateEvt: + SetPort((GrafPtr)dial); + BeginUpdate(GetDialogWindow(dial)); + DisplayUpdate(dial); + EndUpdate(GetDialogWindow(dial)); + event->what = nullEvent; + return(false); + break; + + default: + return(false); + break; + } +} + +//-------------------------------------------------------------- DoDisplayPrefs + +void DoDisplayPrefs (void) +{ + DialogPtr prefDlg; + short itemHit, wasNeighbors; + Boolean leaving; + ModalFilterUPP displayFilterUPP; + + displayFilterUPP = NewModalFilterUPP(DisplayFilter); + + BringUpDialog(&prefDlg, kDisplayPrefsDialID); + if (!thisMac.can8Bit) + { + MyDisableControl(prefDlg, kDoColorFadeItem); + MyDisableControl(prefDlg, k256Depth); + } + if (!thisMac.can4Bit) + MyDisableControl(prefDlg, k16Depth); + if (thisMac.numScreens < 2) + MyDisableControl(prefDlg, kUseScreen2Item); + wasNeighbors = numNeighbors; + wasFade = isDoColorFade; + wasDepthPref = isDepthPref; + wasScreen2 = isUseSecondScreen; + leaving = false; + + while (!leaving) + { + ModalDialog(displayFilterUPP, &itemHit); + switch (itemHit) + { + case kOkayButton: + isDoColorFade = wasFade; + isDepthPref = wasDepthPref; + if (isUseSecondScreen != wasScreen2) + nextRestartChange = true; + isUseSecondScreen = wasScreen2; + leaving = true; + break; + + case kCancelButton: + numNeighbors = wasNeighbors; + leaving = true; + break; + + case kDisplay1Item: + ForeColor(whiteColor); + FrameDisplayIcon(prefDlg); + numNeighbors = 1; + ForeColor(redColor); + FrameDisplayIcon(prefDlg); + ForeColor(blackColor); + break; + + case kDisplay3Item: + if (thisMac.screen.right > 512) + { + ForeColor(whiteColor); + FrameDisplayIcon(prefDlg); + numNeighbors = 3; + ForeColor(redColor); + FrameDisplayIcon(prefDlg); + ForeColor(blackColor); + } + break; + + case kDisplay9Item: + if (thisMac.screen.right > 512) + { + ForeColor(whiteColor); + FrameDisplayIcon(prefDlg); + numNeighbors = 9; + ForeColor(redColor); + FrameDisplayIcon(prefDlg); + ForeColor(blackColor); + } + break; + + case kDoColorFadeItem: + wasFade = !wasFade; + SetDialogItemValue(prefDlg, kDoColorFadeItem, (short)wasFade); + break; + + case kCurrentDepth: + case k256Depth: + case k16Depth: + wasDepthPref = itemHit - kCurrentDepth; + SelectFromRadioGroup(prefDlg, itemHit, kCurrentDepth, k16Depth); + break; + + case kDispDefault: + ForeColor(whiteColor); + FrameDisplayIcon(prefDlg); + ForeColor(blackColor); + DisplayDefaults(); + DisplayUpdate(prefDlg); + break; + + case kUseQDItem: +// wasQD = !wasQD; +// SetDialogItemValue(prefDlg, kUseQDItem, (short)wasQD); + break; + + case kUseScreen2Item: + wasScreen2 = !wasScreen2; + SetDialogItemValue(prefDlg, kUseScreen2Item, (short)wasScreen2); + break; + } + } + + DisposeDialog(prefDlg); + DisposeModalFilterUPP(displayFilterUPP); +} + +//-------------------------------------------------------------- SetAllDefaults + +void SetAllDefaults (void) +{ + OSErr theErr; + // Default brain settings + willMaxFiles = 48; + doZooms = true; + doAutoDemo = true; + doBackground = false; + isHouseChecks = true; + doPrettyMap = true; + doBitchDialogs = true; + // Default control settings + PasStringCopy(PSTR("lf arrow"), leftName); + PasStringCopy(PSTR("rt arrow"), rightName); + PasStringCopy(PSTR("dn arrow"), batteryName); + PasStringCopy(PSTR("up arrow"), bandName); + theGlider.leftKey = kLeftArrowKeyMap; + theGlider.rightKey = kRightArrowKeyMap; + theGlider.battKey = kDownArrowKeyMap; + theGlider.bandKey = kUpArrowKeyMap; + isEscPauseKey = false; + // Default sound settings + isPlayMusicIdle = true; + isPlayMusicGame = true; + UnivSetSoundVolume(3, thisMac.hasSM3); + isSoundOn = true; + if (!isMusicOn) + { + theErr = StartMusic(); + if (theErr != noErr) + { + YellowAlert(kYellowNoMusic, theErr); + failedMusic = true; + } + } + // Default display settings + numNeighbors = 9; + quickerTransitions = false; + isDepthPref = kSwitchIfNeeded; + isDoColorFade = true; +} + +//-------------------------------------------------------------- FlashSettingsButton + +void FlashSettingsButton (short who) +{ + #define kNormalSettingsIcon 1010 + #define kInvertedSettingsIcon 1014 + short theID; + + theID = kInvertedSettingsIcon + who; + DrawCIcon (theID, prefButton[who].left + 4, prefButton[who].top + 4); + DelayTicks(8); + theID = kNormalSettingsIcon + who; + DrawCIcon (theID, prefButton[who].left + 4, prefButton[who].top + 4); +} + +//-------------------------------------------------------------- UpdateSettingsMain + +void UpdateSettingsMain (DialogPtr theDialog) +{ + Str255 theStr; + + DrawDialog(theDialog); + + DrawDefaultButton(theDialog); + + GetIndString(theStr, 129, 1); + DrawDialogUserText(theDialog, 7, theStr, false); + GetIndString(theStr, 129, 2); + DrawDialogUserText(theDialog, 8, theStr, false); + GetIndString(theStr, 129, 3); + DrawDialogUserText(theDialog, 9, theStr, false); + GetIndString(theStr, 129, 4); + DrawDialogUserText(theDialog, 10, theStr, false); + + ColorFrameRect(&prefButton[0], kRedOrangeColor8); + ColorFrameRect(&prefButton[1], kRedOrangeColor8); + ColorFrameRect(&prefButton[2], kRedOrangeColor8); + ColorFrameRect(&prefButton[3], kRedOrangeColor8); +} + +//-------------------------------------------------------------- PrefsFilter + +Boolean PrefsFilter (DialogPtr dial, EventRecord *event, short *item) +{ + Point testPt; + short i; + Boolean foundHit; + + switch (event->what) + { + case keyDown: + switch ((event->message) & charCodeMask) + { + case kReturnKeyASCII: + case kEnterKeyASCII: + FlashDialogButton(dial, kOkayButton); + *item = kOkayButton; + return(true); + break; + + case kCapBKeyASCII: + case kBKeyASCII: + *item = kBrainsButton; + return(true); + break; + + case kCapCKeyASCII: + case kCKeyASCII: + *item = kControlsButton; + return(true); + break; + + case kCapDKeyASCII: + case kDKeyASCII: + *item = kDisplayButton; + return(true); + break; + + case kCapSKeyASCII: + case kSKeyASCII: + *item = kSoundButton; + return(true); + break; + + default: + return(false); + } + break; + + case mouseDown: + testPt = event->where; + GlobalToLocal(&testPt); + foundHit = false; + for (i = 0; i < 4; i++) + { + if (PtInRect(testPt, &prefButton[i])) + { + *item = kDisplayButton + i; + foundHit = true; + } + } + return(foundHit); + break; + + case updateEvt: + if ((WindowPtr)event->message == (WindowPtr)mainWindow) + { + SetPortWindowPort(mainWindow); + BeginUpdate(mainWindow); + UpdateMainWindow(); + EndUpdate(mainWindow); + SetPort((GrafPtr)dial); + } + else if ((WindowPtr)event->message == GetDialogWindow(dial)) + { + SetPortDialogPort(dial); + BeginUpdate(GetDialogWindow(dial)); + UpdateSettingsMain(dial); + EndUpdate(GetDialogWindow(dial)); + } + event->what = nullEvent; + return(false); + break; + + default: + return(false); + break; + } +} + +//-------------------------------------------------------------- DoSettingsMain + +void DoSettingsMain (void) +{ + #define kAllDefaultsButton 11 + DialogPtr prefDlg; + short itemHit; + Boolean leaving; + ModalFilterUPP prefsFilterUPP; + + prefsFilterUPP = NewModalFilterUPP(PrefsFilter); + + BringUpDialog(&prefDlg, kMainPrefsDialID); + + GetDialogItemRect(prefDlg, kDisplayButton, &prefButton[0]); + InsetRect(&prefButton[0], -4, -4); + GetDialogItemRect(prefDlg, 4, &prefButton[1]); + InsetRect(&prefButton[1], -4, -4); + GetDialogItemRect(prefDlg, 5, &prefButton[2]); + InsetRect(&prefButton[2], -4, -4); + GetDialogItemRect(prefDlg, 6, &prefButton[3]); + InsetRect(&prefButton[3], -4, -4); + + leaving = false; + nextRestartChange = false; + + while (!leaving) + { + ModalDialog(prefsFilterUPP, &itemHit); + switch (itemHit) + { + case kOkayButton: + leaving = true; + break; + + case kDisplayButton: + FlashSettingsButton(0); + DoDisplayPrefs(); + SetPort((GrafPtr)prefDlg); + break; + + case kSoundButton: + FlashSettingsButton(1); + DoSoundPrefs(); + SetPort((GrafPtr)prefDlg); + FlushEvents(everyEvent, 0); + break; + + case kControlsButton: + FlashSettingsButton(2); + DoControlPrefs(); + SetPort((GrafPtr)prefDlg); + break; + + case kBrainsButton: + if ((OptionKeyDown()) && (!houseUnlocked)) + { + houseUnlocked = true; + changeLockStateOfHouse = true; + saveHouseLocked = false; + } + FlashSettingsButton(3); + DoBrainsPrefs(); + SetPort((GrafPtr)prefDlg); + break; + + case kAllDefaultsButton: + SetAllDefaults(); + break; + } + } + + DisposeDialog(prefDlg); + DisposeModalFilterUPP(prefsFilterUPP); + + if (nextRestartChange) + BitchAboutChanges(); +} + +//-------------------------------------------------------------- BitchAboutChanges + +void BitchAboutChanges (void) +{ + #define kChangesEffectAlert 1040 + short hitWhat; + +// CenterAlert(kChangesEffectAlert); + hitWhat = Alert(kChangesEffectAlert, nil); +} + diff --git a/GpApp/Sound.cpp b/GpApp/Sound.cpp new file mode 100644 index 0000000..778a62f --- /dev/null +++ b/GpApp/Sound.cpp @@ -0,0 +1,511 @@ + +//============================================================================ +//---------------------------------------------------------------------------- +// Sound.c +//---------------------------------------------------------------------------- +//============================================================================ + + +#include "PLResources.h" +#include "PLSound.h" +#include "Externs.h" + + +#define kBaseBufferSoundID 1000 +#define kMaxSounds 64 +#define kNoSoundPlaying -1 + + +void CallBack0 (SndChannelPtr, SndCommand *); +void CallBack1 (SndChannelPtr, SndCommand *); +void CallBack2 (SndChannelPtr, SndCommand *); +OSErr LoadBufferSounds (void); +void DumpBufferSounds (void); +OSErr OpenSoundChannels (void); +OSErr CloseSoundChannels (void); + + +SndCallBackUPP callBack0UPP, callBack1UPP, callBack2UPP; +SndChannelPtr channel0, channel1, channel2; +Ptr theSoundData[kMaxSounds]; +short numSoundsLoaded, priority0, priority1, priority2; +short soundPlaying0, soundPlaying1, soundPlaying2; +Boolean soundLoaded[kMaxSounds], dontLoadSounds; +Boolean channelOpen, isSoundOn, failedSound; + + +//============================================================== Functions +//-------------------------------------------------------------- PlayPrioritySound + +void PlayPrioritySound (short which, short priority) +{ + short lowestPriority, whosLowest; + + if (failedSound || dontLoadSounds) + return; + + if ((priority == kTriggerPriority) && + ((priority0 == kTriggerPriority) || + ((priority1 == kTriggerPriority)) || + ((priority2 == kTriggerPriority)))) + return; + + whosLowest = 0; + lowestPriority = priority0; + + if (priority1 < lowestPriority) + { + lowestPriority = priority1; + whosLowest = 1; + } + + if (priority2 < lowestPriority) + { + lowestPriority = priority2; + whosLowest = 2; + } + + if (priority >= lowestPriority) + { + switch (whosLowest) + { + case 0: + PlaySound0(which, priority); + break; + + case 1: + PlaySound1(which, priority); + break; + + case 2: + PlaySound2(which, priority); + break; + } + } +} + +//-------------------------------------------------------------- FlushAnyTriggerPlaying + +void FlushAnyTriggerPlaying (void) +{ + SndCommand theCommand; + OSErr theErr; + + if (priority0 == kTriggerPriority) + { + theCommand.cmd = quietCmd; + theCommand.param1 = 0; + theCommand.param2 = 0; + theErr = SndDoImmediate(channel0, &theCommand); + theCommand.cmd = flushCmd; + theCommand.param1 = 0; + theCommand.param2 = 0; + theErr = SndDoImmediate(channel0, &theCommand); + } + + if (priority1 == kTriggerPriority) + { + theCommand.cmd = quietCmd; + theCommand.param1 = 0; + theCommand.param2 = 0; + theErr = SndDoImmediate(channel1, &theCommand); + theCommand.cmd = flushCmd; + theCommand.param1 = 0; + theCommand.param2 = 0; + theErr = SndDoImmediate(channel1, &theCommand); + } + + if (priority2 == kTriggerPriority) + { + theCommand.cmd = quietCmd; + theCommand.param1 = 0; + theCommand.param2 = 0; + theErr = SndDoImmediate(channel2, &theCommand); + theCommand.cmd = flushCmd; + theCommand.param1 = 0; + theCommand.param2 = 0; + theErr = SndDoImmediate(channel2, &theCommand); + } +} + +//-------------------------------------------------------------- PlaySound0 + +void PlaySound0 (short soundID, short priority) +{ + SndCommand theCommand; + OSErr theErr; + + if (failedSound || dontLoadSounds) + return; + + theErr = noErr; + if (isSoundOn) + { + priority0 = priority; + soundPlaying0 = soundID; + + theCommand.cmd = bufferCmd; + theCommand.param1 = 0; + theCommand.param2 = (intptr_t)(theSoundData[soundID]); + theErr = SndDoImmediate(channel0, &theCommand); + + theCommand.cmd = callBackCmd; + theCommand.param1 = 0; + theCommand.param2 = 0; + theErr = SndDoCommand(channel0, &theCommand, true); + } +} + +//-------------------------------------------------------------- PlaySound1 + +void PlaySound1 (short soundID, short priority) +{ + SndCommand theCommand; + OSErr theErr; + + if (failedSound || dontLoadSounds) + return; + + theErr = noErr; + if (isSoundOn) + { + priority1 = priority; + soundPlaying1 = soundID; + + theCommand.cmd = bufferCmd; + theCommand.param1 = 0; + theCommand.param2 = (intptr_t)(theSoundData[soundID]); + theErr = SndDoImmediate(channel1, &theCommand); + + theCommand.cmd = callBackCmd; + theCommand.param1 = 0; + theCommand.param2 = 0; + theErr = SndDoCommand(channel1, &theCommand, true); + } +} + +//-------------------------------------------------------------- PlaySound2 + +void PlaySound2 (short soundID, short priority) +{ + SndCommand theCommand; + OSErr theErr; + + if (failedSound || dontLoadSounds) + return; + + theErr = noErr; + if (isSoundOn) + { + theCommand.cmd = bufferCmd; + theCommand.param1 = 0; + theCommand.param2 = (intptr_t)(theSoundData[soundID]); + theErr = SndDoImmediate(channel2, &theCommand); + + theCommand.cmd = callBackCmd; + theCommand.param1 = 0; + theCommand.param2 = 0; + theErr = SndDoCommand(channel2, &theCommand, true); + + priority2 = priority; + soundPlaying2 = soundID; + } +} + +//-------------------------------------------------------------- CallBack0 + +void CallBack0 (SndChannelPtr theChannel, SndCommand *theCommand) +{ + priority0 = 0; + soundPlaying0 = kNoSoundPlaying; +} + +//-------------------------------------------------------------- CallBack1 + +void CallBack1 (SndChannelPtr theChannel, SndCommand *theCommand) +{ + priority1 = 0; + soundPlaying1 = kNoSoundPlaying; +} + +//-------------------------------------------------------------- CallBack2 + +void CallBack2 (SndChannelPtr theChannel, SndCommand *theCommand) +{ + priority2 = 0; + soundPlaying2 = kNoSoundPlaying; +} + +//-------------------------------------------------------------- LoadTriggerSound + +OSErr LoadTriggerSound (short soundID) +{ + Handle theSound; + long soundDataSize; + OSErr theErr; + + if ((dontLoadSounds) || (theSoundData[kMaxSounds - 1] != nil)) + theErr = -1; + else + { +// FlushAnyTriggerPlaying(); + + theErr = noErr; + + theSound = GetResource('snd ', soundID); + if (theSound == nil) + { + theErr = -1; + } + else + { + soundDataSize = GetHandleSize(theSound) - 20L; + theSoundData[kMaxSounds - 1] = NewPtr(soundDataSize); + HLock(theSound); + if (theSoundData[kMaxSounds - 1] == nil) + { + ReleaseResource(theSound); + theErr = MemError(); + } + else + { + BlockMove((Ptr)((Byte*)(*theSound) + 20L), theSoundData[kMaxSounds - 1], soundDataSize); + ReleaseResource(theSound); + } + } + } + + return (theErr); +} + +//-------------------------------------------------------------- DumpTriggerSound + +void DumpTriggerSound (void) +{ + if (theSoundData[kMaxSounds - 1] != nil) + DisposePtr(theSoundData[kMaxSounds - 1]); + theSoundData[kMaxSounds - 1] = nil; +} + +//-------------------------------------------------------------- LoadBufferSounds + +OSErr LoadBufferSounds (void) +{ + Handle theSound; + long soundDataSize; + OSErr theErr; + short i; + + theErr = noErr; + + for (i = 0; i < kMaxSounds - 1; i++) + { + theSound = GetResource('snd ', i + kBaseBufferSoundID); + if (theSound == nil) + return (MemError()); + + HLock(theSound); + soundDataSize = GetHandleSize(theSound) - 20L; + HUnlock(theSound); + + theSoundData[i] = NewPtr(soundDataSize); + if (theSoundData[i] == nil) + return (MemError()); + + HLock(theSound); + BlockMove((Ptr)((Byte*)(*theSound) + 20L), theSoundData[i], soundDataSize); + ReleaseResource(theSound); + } + + theSoundData[kMaxSounds - 1] = nil; + + return (theErr); +} + +//-------------------------------------------------------------- DumpBufferSounds + +void DumpBufferSounds (void) +{ + short i; + + for (i = 0; i < kMaxSounds; i++) + { + if (theSoundData[i] != nil) + DisposePtr(theSoundData[i]); + theSoundData[i] = nil; + } +} + +//-------------------------------------------------------------- OpenSoundChannels + +OSErr OpenSoundChannels (void) +{ + OSErr theErr; + + callBack0UPP = NewSndCallBackProc(CallBack0); + callBack1UPP = NewSndCallBackProc(CallBack1); + callBack2UPP = NewSndCallBackProc(CallBack2); + + theErr = noErr; + + if (channelOpen) + return (theErr); + + theErr = SndNewChannel(&channel0, + sampledSynth, initNoInterp + initMono, + (SndCallBackUPP)callBack0UPP); + if (theErr == noErr) + channelOpen = true; + else + return (theErr); + + theErr = SndNewChannel(&channel1, + sampledSynth, initNoInterp + initMono, + (SndCallBackUPP)callBack1UPP); + if (theErr == noErr) + channelOpen = true; + else + return (theErr); + + theErr = SndNewChannel(&channel2, + sampledSynth, initNoInterp + initMono, + (SndCallBackUPP)callBack2UPP); + if (theErr == noErr) + channelOpen = true; + + return (theErr); +} + +//-------------------------------------------------------------- CloseSoundChannels + +OSErr CloseSoundChannels (void) +{ + OSErr theErr; + + theErr = noErr; + + if (!channelOpen) + return (theErr); + + if (channel0 != nil) + theErr = SndDisposeChannel(channel0, true); + channel0 = nil; + + if (channel1 != nil) + theErr = SndDisposeChannel(channel1, true); + channel1 = nil; + + if (channel2 != nil) + theErr = SndDisposeChannel(channel2, true); + channel2 = nil; + + if (theErr == noErr) + channelOpen = false; + + DisposeSndCallBackUPP(callBack0UPP); + DisposeSndCallBackUPP(callBack1UPP); + DisposeSndCallBackUPP(callBack2UPP); + + return (theErr); +} + +//-------------------------------------------------------------- InitSound + +void InitSound (void) +{ + OSErr theErr; + + if (dontLoadSounds) + return; + + failedSound = false; + + channel0 = nil; + channel1 = nil; + channel2 = nil; + + priority0 = 0; + priority1 = 0; + priority2 = 0; + soundPlaying0 = kNoSoundPlaying; + soundPlaying1 = kNoSoundPlaying; + soundPlaying2 = kNoSoundPlaying; + + theErr = LoadBufferSounds(); + if (theErr != noErr) + { + YellowAlert(kYellowFailedSound, theErr); + failedSound = true; + } + + if (!failedSound) + { + theErr = OpenSoundChannels(); + if (theErr != noErr) + { + YellowAlert(kYellowFailedSound, theErr); + failedSound = true; + } + } +} + +//-------------------------------------------------------------- KillSound + +void KillSound (void) +{ + OSErr theErr; + + if (dontLoadSounds) + return; + + DumpBufferSounds(); + theErr = CloseSoundChannels(); +} + +//-------------------------------------------------------------- SoundBytesNeeded + +long SoundBytesNeeded (void) +{ + Handle theSound; + long totalBytes; + short i; + + totalBytes = 0L; + SetResLoad(false); + for (i = 0; i < kMaxSounds - 1; i++) + { + theSound = GetResource('snd ', i + kBaseBufferSoundID); + if (theSound == nil) + { + SetResLoad(true); + return ((long)ResError()); + } + totalBytes += GetMaxResourceSize(theSound); +// ReleaseResource(theSound); + } + SetResLoad(true); + return totalBytes; +} + +//-------------------------------------------------------------- TellHerNoSounds + +void TellHerNoSounds (void) +{ + #define kNoMemForSoundsAlert 1039 + short hitWhat; + +// CenterAlert(kNoMemForSoundsAlert); + hitWhat = Alert(kNoMemForSoundsAlert, nil); +} + +//-------------------------------------------------------------- BitchAboutSM3 + +void BitchAboutSM3 (void) +{ + #define kNoSoundManager3Alert 1030 + short hitWhat; + +// CenterAlert(kNoSoundManager3Alert); + hitWhat = Alert(kNoSoundManager3Alert, nil); +} + diff --git a/GpApp/StringUtils.cpp b/GpApp/StringUtils.cpp new file mode 100644 index 0000000..05c0d36 --- /dev/null +++ b/GpApp/StringUtils.cpp @@ -0,0 +1,304 @@ + +//============================================================================ +//---------------------------------------------------------------------------- +// StringUtils.c +//---------------------------------------------------------------------------- +//============================================================================ + +#include "PLPasStr.h" +#include "Externs.h" + +#include + + +//============================================================== Functions +//-------------------------------------------------------------- PasStringCopy +// Given a source string and storage for a second, this functionÉ +// copies from one to the other. It assumes Pascal style strings. + +void PasStringCopy (StringPtr p1, StringPtr p2) +{ + register short stringLength; + + stringLength = *p2++ = *p1++; + while (--stringLength >= 0) + *p2++ = *p1++; +} + +//-------------------------------------------------------------- WhichStringFirst + +// This is a sorting function that handles two Pascal strings. ItÉ +// will return a 1 to indicate the 1st string is "greater", a 1 toÉ +// indicate the 2nd was greater and a 0 to indicate that the stringsÉ +// are equal. + +short WhichStringFirst (StringPtr p1, StringPtr p2) +{ + short smallestLength, seek, greater; + char char1, char2; + Boolean foundIt; + + smallestLength = p1[0]; + if (p2[0] < smallestLength) + smallestLength = p2[0]; + + greater = 0; // neither are greater, they are equal + seek = 1; // start at character #1 + foundIt = false; + do + { + char1 = p1[seek]; // make upper case (if applicable) + if ((char1 > 0x60) && (char1 < 0x7B)) + char1 -= 0x20; + char2 = p2[seek]; // make upper case (if applicable) + if ((char2 > 0x60) && (char2 < 0x7B)) + char2 -= 0x20; + + if (char1 > char2) // first string is greater + { + greater = 1; + foundIt = true; + } + else if (char1 < char2) // second string is greater + { + greater = 2; + foundIt = true; + } + seek++; + if (seek > smallestLength) // we've reached the end of the line + { + if (!foundIt) + { + if (p1[0] < p2[0]) // shortest string wins + greater = 1; + else if (p1[0] > p2[0]) + greater = 2; + } + foundIt = true; + } + } + while (!foundIt); + + return (greater); +} + +//-------------------------------------------------------------- PasStringCopyNum + +// This function copies a specified number of characters from oneÉ +// Pascal string to another. + +void PasStringCopyNum (StringPtr p1, StringPtr p2, short charsToCopy) +{ + short i; + + if (charsToCopy > *p1) // if trying to copy more chars than there are + charsToCopy = *p1; // reduce the number of chars to copy to this size + + *p2 = static_cast(charsToCopy); + + *p2++; + *p1++; + + for (i = 0; i < charsToCopy; i++) + *p2++ = *p1++; +} + +//-------------------------------------------------------------- PasStringConcat +// This function concatenates the second Pascal string to the end ofÉ +// the first Pascal string. + +void PasStringConcat (StringPtr p1, const PLPasStr &p2) +{ + short wasLength, addedLength; + + wasLength = *p1; + if (wasLength > 255) + wasLength = 255; + + addedLength = p2.Length(); + if ((wasLength + addedLength) > 255) + addedLength = 255 - wasLength; + + *p1 = wasLength + addedLength; + + p1 += (1 + wasLength); + + memcpy(p1, p2.Chars(), addedLength); +} + +//-------------------------------------------------------------- GetLineOfText + +// This function walks through a source string and looks for anÉ +// entire line of text. A "line" of text is assumed to be boundedÉ +// by carriage returns. The index variable indicates which lineÉ +// is sought. + +void GetLineOfText (StringPtr srcStr, short index, StringPtr textLine) +{ + short i, srcLength, count, start, stop; + Boolean foundIt; + + PasStringCopy(PSTR(""), textLine); + srcLength = srcStr[0]; + + if (index == 0) // walk through to "index" + start = 1; + else + { + start = 0; + count = 0; + i = 0; + foundIt = false; + do + { + i++; + if (srcStr[i] == kReturnKeyASCII) + { + count++; + if (count == index) + { + start = i + 1; + foundIt = true; + } + } + } + while ((i < srcLength) && (!foundIt)); + } + + if (start != 0) + { + i = start; + + foundIt = false; + do + { + if (srcStr[i] == kReturnKeyASCII) + { + stop = i; + foundIt = true; + } + i++; + } + while ((i < srcLength) && (!foundIt)); + + if (!foundIt) + { + if (start > srcLength) + { + start = srcLength; + stop = srcLength - 1; + } + else + stop = i; + } + + count = 0; + + for (i = start; i <= stop; i++) + { + count++; + textLine[count] = srcStr[i]; + } + textLine[0] = static_cast(count); + } +} + +//-------------------------------------------------------------- WrapText + +// Given a string and the maximum number of characters to put onÉ +// one line, this function goes through and inserts carriage returnsÉ +// in order to ensure that no line of text exceeds maxChars. + +void WrapText (StringPtr theText, short maxChars) +{ + short lastChar, count, chars, spaceIs; + Boolean foundEdge, foundSpace; + + lastChar = theText[0]; + count = 0; + + do + { + chars = 0; + foundEdge = false; + foundSpace = false; + do + { + count++; + chars++; + if (theText[count] == kReturnKeyASCII) + foundEdge = true; + else if (theText[count] == kSpaceBarASCII) + { + foundSpace = true; + spaceIs = count; + } + } + while ((count < lastChar) && (chars < maxChars) && (!foundEdge)); + + if ((!foundEdge) && (count < lastChar) && (foundSpace)) + { + theText[spaceIs] = kReturnKeyASCII; + count = spaceIs + 1; + } + } + while (count < lastChar); +} + +//-------------------------------------------------------------- GetFirstWordOfString + +// Walks a string looking for a space (denoting first word of string). + +void GetFirstWordOfString (StringPtr stringIn, StringPtr stringOut) +{ + short isLong, spaceAt, i; + + isLong = stringIn[0]; + spaceAt = isLong; + + for (i = 1; i < isLong; i++) + { + if ((stringIn[i] == ' ') && (spaceAt == isLong)) + spaceAt = i - 1; + } + + if (spaceAt <= 0) + PasStringCopy(PSTR(""), stringOut); + else + PasStringCopyNum(stringIn, stringOut, spaceAt); +} + +//-------------------------------------------------------------- CollapseStringToWidth + +// Given a string and a maximum width (in pixels), this functionÉ +// calculates how wide the text would be drawn with the currentÉ +// font. If the text would exceed our width limit, charactersÉ +// are dropped off the end of the string and "É" appended. + +void CollapseStringToWidth (StringPtr theStr, short wide) +{ + short dotsWide; + Boolean tooWide; + + dotsWide = StringWidth(PSTR("É")); + tooWide = StringWidth(theStr) > wide; + while (tooWide) + { + theStr[0]--; + tooWide = ((StringWidth(theStr) + dotsWide) > wide); + if (!tooWide) + PasStringConcat(theStr, PSTR("É")); + } +} + +//-------------------------------------------------------------- GetLocalizedString + +StringPtr GetLocalizedString (short index, StringPtr theString) +{ + #define kLocalizedStringsID 150 + + GetIndString(theString, kLocalizedStringsID, index); + return (theString); +} + + diff --git a/GpApp/StructuresInit.cpp b/GpApp/StructuresInit.cpp new file mode 100644 index 0000000..9851222 --- /dev/null +++ b/GpApp/StructuresInit.cpp @@ -0,0 +1,726 @@ +//============================================================================ +//---------------------------------------------------------------------------- +// StructuresInit.c +//---------------------------------------------------------------------------- +//============================================================================ + + +#include "PLResources.h" +#include "Externs.h" +#include "Objects.h" +#include "Play.h" +#include "Player.h" +#include "RectUtils.h" +#include "RubberBands.h" +#include "Scoreboard.h" +#include "Utilities.h" + + +#define kShadowPictID 3998 +#define kBlowerPictID 4000 +#define kFurniturePictID 4001 +#define kBonusPictID 4002 +#define kSwitchPictID 4003 +#define kLightPictID 4004 +#define kAppliancePictID 4005 +#define kPointsPictID 4006 +#define kRubberBandsPictID 4007 +#define kTransportPictID 4008 +#define kToastPictID 4009 +#define kShreddedPictID 4010 +#define kBalloonPictID 4011 +#define kCopterPictID 4012 +#define kDartPictID 4013 +#define kBallPictID 4014 +#define kDripPictID 4015 +#define kEnemyPictID 4016 +#define kFishPictID 4017 + +#define kBadgePictID 1996 + + +extern Rect glidSrcRect, leftStartGliderSrc, rightStartGliderSrc; +extern Rect gliderSrc[], shadowSrcRect, shadowSrc[]; +extern Rect bandsSrcRect, bandRects[], boardSrcRect, boardDestRect; +extern Rect boardTSrcRect, boardTDestRect, badgeSrcRect; +extern Rect boardGSrcRect, boardGDestRect, boardPSrcRect, boardPDestRect; +extern Rect boardPQDestRect, boardGQDestRect, badgesBlankRects[]; +extern Rect badgesBadgesRects[], badgesDestRects[]; +extern Rect nailSrcRect, sparkleSrc[]; +extern Rect pointsSrc[], breadSrc[]; +extern short wasScoreboardMode; + + +//============================================================== Functions +//-------------------------------------------------------------- InitScoreboardMap +// Any graphics and structures relating to the scoreboard that appearsÉ +// across the top of the game are initialized and loaded up here. + +void InitScoreboardMap (void) +{ + Rect bounds; + PicHandle thePicture; + CGrafPtr wasCPort; + GDHandle wasWorld; + OSErr theErr; + short hOffset; + + GetGWorld(&wasCPort, &wasWorld); + + wasScoreboardMode = kScoreboardHigh; + boardSrcRect = houseRect; + ZeroRectCorner(&boardSrcRect); + boardSrcRect.bottom = kScoreboardTall; + theErr = CreateOffScreenGWorld(&boardSrcMap, &boardSrcRect, kPreferredDepth); + SetGWorld(boardSrcMap, nil); + + if (boardSrcRect.right >= 640) + hOffset = (RectWide(&boardSrcRect) - kMaxViewWidth) / 2; + else + hOffset = -576; + thePicture = GetPicture(kScoreboardPictID); + if (thePicture == nil) + RedAlert(kErrFailedGraphicLoad); + HLock((Handle)thePicture); + bounds = (*thePicture)->picFrame; + HUnlock((Handle)thePicture); + QOffsetRect(&bounds, -bounds.left, -bounds.top); + QOffsetRect(&bounds, hOffset, 0); + DrawPicture(thePicture, &bounds); + ReleaseResource((Handle)thePicture); + + QSetRect(&badgeSrcRect, 0, 0, 32, 66); // 2144 pixels + theErr = CreateOffScreenGWorld(&badgeSrcMap, &badgeSrcRect, kPreferredDepth); + SetGWorld(badgeSrcMap, nil); + LoadGraphic(kBadgePictID); + + boardDestRect = boardSrcRect; + QOffsetRect(&boardDestRect, 0, -kScoreboardTall); + + hOffset = (RectWide(&houseRect) - 640) / 2; + if (hOffset < 0) + hOffset = -128; + + QSetRect(&boardTSrcRect, 0, 0, 256, 12); // room title + theErr = CreateOffScreenGWorld(&boardTSrcMap, &boardTSrcRect, kPreferredDepth); + SetGWorld(boardTSrcMap, nil); + boardTDestRect = boardTSrcRect; + QOffsetRect(&boardTDestRect, 137 + hOffset, 5); + TextFont(applFont); + TextSize(12); + TextFace(bold); + + QSetRect(&boardGSrcRect, 0, 0, 20, 10); // # gliders + theErr = CreateOffScreenGWorld(&boardGSrcMap, &boardGSrcRect, kPreferredDepth); + SetGWorld(boardGSrcMap, nil); + boardGDestRect = boardGSrcRect; + QOffsetRect(&boardGDestRect, 526 + hOffset, 5); + TextFont(applFont); + TextSize(12); + TextFace(bold); + + QSetRect(&boardPSrcRect, 0, 0, 64, 10); // points + theErr = CreateOffScreenGWorld(&boardPSrcMap, &boardPSrcRect, kPreferredDepth); + SetGWorld(boardPSrcMap, nil); + boardPDestRect = boardPSrcRect; + QOffsetRect(&boardPDestRect, 570 + hOffset, 5); // total = 6396 pixels + boardPQDestRect = boardPDestRect; + QOffsetRect(&boardPQDestRect, 0, -kScoreboardTall); + boardGQDestRect = boardGDestRect; + QOffsetRect(&boardGQDestRect, 0, -kScoreboardTall); + TextFont(applFont); + TextSize(12); + TextFace(bold); + + QSetRect(&badgesBlankRects[0], 0, 0, 16, 16); // foil + QOffsetRect(&badgesBlankRects[0], 0, 0); + QSetRect(&badgesBlankRects[1], 0, 0, 16, 16); // rubber bands + QOffsetRect(&badgesBlankRects[1], 0, 16); + QSetRect(&badgesBlankRects[2], 0, 0, 16, 17); // battery + QOffsetRect(&badgesBlankRects[2], 0, 32); + QSetRect(&badgesBlankRects[3], 0, 0, 16, 17); // helium + QOffsetRect(&badgesBlankRects[3], 0, 49); + + QSetRect(&badgesBadgesRects[0], 0, 0, 16, 16); // foil + QOffsetRect(&badgesBadgesRects[0], 16, 0); + QSetRect(&badgesBadgesRects[1], 0, 0, 16, 16); // rubber bands + QOffsetRect(&badgesBadgesRects[1], 16, 16); + QSetRect(&badgesBadgesRects[2], 0, 0, 16, 17); // battery + QOffsetRect(&badgesBadgesRects[2], 16, 32); + QSetRect(&badgesBadgesRects[3], 0, 0, 16, 17); // helium + QOffsetRect(&badgesBadgesRects[3], 16, 49); + + QSetRect(&badgesDestRects[0], 0, 0, 16, 16); // foil + QOffsetRect(&badgesDestRects[0], 432 + hOffset, 2 - kScoreboardTall); + QSetRect(&badgesDestRects[1], 0, 0, 16, 16); // rubber bands + QOffsetRect(&badgesDestRects[1], 449 + hOffset, 2 - kScoreboardTall); + QSetRect(&badgesDestRects[2], 0, 0, 16, 17); // battery + QOffsetRect(&badgesDestRects[2], 467 + hOffset, 1 - kScoreboardTall); + QSetRect(&badgesDestRects[3], 0, 0, 16, 17); // helium + QOffsetRect(&badgesDestRects[3], 467 + hOffset, 1 - kScoreboardTall); + + SetGWorld(wasCPort, wasWorld); +} + +//-------------------------------------------------------------- InitGliderMap +// Graphics and structures relating to the little paper glider (theÉ +// player) are cretaed, loaded up and initialized here. + +void InitGliderMap (void) +{ + CGrafPtr wasCPort; + GDHandle wasWorld; + OSErr theErr; + short i; + + GetGWorld(&wasCPort, &wasWorld); + + QSetRect(&glidSrcRect, 0, 0, kGliderWide, 668); // 32112 pixels + theErr = CreateOffScreenGWorld(&glidSrcMap, &glidSrcRect, kPreferredDepth); + SetGWorld(glidSrcMap, nil); + LoadGraphic(kGliderPictID); + + theErr = CreateOffScreenGWorld(&glid2SrcMap, &glidSrcRect, kPreferredDepth); + SetGWorld(glid2SrcMap, nil); + LoadGraphic(kGlider2PictID); + + theErr = CreateOffScreenGWorld(&glidMaskMap, &glidSrcRect, 1); + SetGWorld(glidMaskMap, nil); + LoadGraphic(kGliderPictID + 1000); + + for (i = 0; i <= 20; i++) + { + QSetRect(&gliderSrc[i], 0, 0, kGliderWide, kGliderHigh); + QOffsetRect(&gliderSrc[i], 0, kGliderHigh * i); + } + for (i = 21; i <= 28; i++) + { + QSetRect(&gliderSrc[i], 0, 0, kGliderWide, kGliderBurningHigh); + QOffsetRect(&gliderSrc[i], 0, 420 + (kGliderBurningHigh * (i - 21))); + } + + QSetRect(&gliderSrc[29], 0, 0, kGliderWide, kGliderHigh); + QOffsetRect(&gliderSrc[29], 0, 628); + QSetRect(&gliderSrc[30], 0, 0, kGliderWide, kGliderHigh); + QOffsetRect(&gliderSrc[30], 0, 648); + + QSetRect(&shadowSrcRect, 0, 0, kGliderWide, kShadowHigh * kNumShadowSrcRects); + theErr = CreateOffScreenGWorld(&shadowSrcMap, &shadowSrcRect, kPreferredDepth); + SetGWorld(shadowSrcMap, nil); + LoadGraphic(kShadowPictID); + + theErr = CreateOffScreenGWorld(&shadowMaskMap, &shadowSrcRect, 1); + SetGWorld(shadowMaskMap, nil); + LoadGraphic(kShadowPictID + 1000); + + for (i = 0; i < kNumShadowSrcRects; i++) + { + QSetRect(&shadowSrc[i], 0, 0, kGliderWide, kShadowHigh); + QOffsetRect(&shadowSrc[i], 0, kShadowHigh * i); + } + + QSetRect(&bandsSrcRect, 0, 0, 16, 18); // 304 pixels + theErr = CreateOffScreenGWorld(&bandsSrcMap, &bandsSrcRect, kPreferredDepth); + SetGWorld(bandsSrcMap, nil); + LoadGraphic(kRubberBandsPictID); + + theErr = CreateOffScreenGWorld(&bandsMaskMap, &bandsSrcRect, 1); + SetGWorld(bandsMaskMap, nil); + LoadGraphic(kRubberBandsPictID + 1000); + + for (i = 0; i < 3; i++) + { + QSetRect(&bandRects[i], 0, 0, 16, 6); + QOffsetRect(&bandRects[i], 0, 6 * i); + } + + SetGWorld(wasCPort, wasWorld); +} + +//-------------------------------------------------------------- InitBlowers +// All blower graphics and structures are loaded up and initialized here. +// Blowers include vents, ducts, candles, fans, etc. + +void InitBlowers (void) +{ + CGrafPtr wasCPort; + GDHandle wasWorld; + short i; + OSErr theErr; + + GetGWorld(&wasCPort, &wasWorld); + + QSetRect(&blowerSrcRect, 0, 0, 48, 402); // 19344 pixels + theErr = CreateOffScreenGWorld(&blowerSrcMap, &blowerSrcRect, kPreferredDepth); + SetGWorld(blowerSrcMap, nil); + LoadGraphic(kBlowerPictID); + + theErr = CreateOffScreenGWorld(&blowerMaskMap, &blowerSrcRect, 1); + SetGWorld(blowerMaskMap, nil); + LoadGraphic(kBlowerPictID + 1000); + + for (i = 0; i < kNumCandleFlames; i++) + { + QSetRect(&flame[i], 0, 0, 16, 15); + QOffsetRect(&flame[i], 32, 179 + (i * 15)); + } + + for (i = 0; i < kNumTikiFlames; i++) + { + QSetRect(&tikiFlame[i], 0, 0, 8, 10); + QOffsetRect(&tikiFlame[i], 40, 69 + (i * 10)); + } + + for (i = 0; i < kNumBBQCoals; i++) + { + QSetRect(&coals[i], 0, 0, 32, 9); + QOffsetRect(&coals[i], 0, 304 + (i * 9)); + } + + QSetRect(&leftStartGliderSrc, 0, 0, 48, 16); + QOffsetRect(&leftStartGliderSrc, 0, 358); + + QSetRect(&rightStartGliderSrc, 0, 0, 48, 16); + QOffsetRect(&rightStartGliderSrc, 0, 374); + + SetGWorld(wasCPort, wasWorld); +} + +//-------------------------------------------------------------- InitFurniture +// Structures and graphics relating to the furniture is loaded up. +// Furniture includes tables, cabinets, shelves, etc. + +void InitFurniture (void) +{ + CGrafPtr wasCPort; + GDHandle wasWorld; + OSErr theErr; + + GetGWorld(&wasCPort, &wasWorld); + + QSetRect(&furnitureSrcRect, 0, 0, 64, 278); // 17856 pixels + theErr = CreateOffScreenGWorld(&furnitureSrcMap, &furnitureSrcRect, kPreferredDepth); + SetGWorld(furnitureSrcMap, nil); + LoadGraphic(kFurniturePictID); + + theErr = CreateOffScreenGWorld(&furnitureMaskMap, &furnitureSrcRect, 1); + SetGWorld(furnitureMaskMap, nil); + LoadGraphic(kFurniturePictID + 1000); + + QSetRect(&tableSrc, 0, 0, 64, 22); + QOffsetRect(&tableSrc, 0, 0); + + QSetRect(&shelfSrc, 0, 0, 16, 21); + QOffsetRect(&shelfSrc, 0, 22); + + QSetRect(&hingeSrc, 0, 0, 4, 16); + QOffsetRect(&hingeSrc, 16, 22); + + QSetRect(&handleSrc, 0, 0, 4, 21); + QOffsetRect(&handleSrc, 20, 22); + + QSetRect(&knobSrc, 0, 0, 8, 8); + QOffsetRect(&knobSrc, 24, 22); + + QSetRect(&leftFootSrc, 0, 0, 16, 16); + QOffsetRect(&leftFootSrc, 32, 22); + + QSetRect(&rightFootSrc, 0, 0, 16, 16); + QOffsetRect(&rightFootSrc, 48, 22); + + QSetRect(&deckSrc, 0, 0, 64, 21); + QOffsetRect(&deckSrc, 0, 162); + + SetGWorld(wasCPort, wasWorld); +} + +//-------------------------------------------------------------- InitPrizes +// Structures and graphics relating to the prizes (bonuses) are loaded up. +// Prizes includes clocks, rubber bands, extra gliders, etc. + +void InitPrizes (void) +{ + CGrafPtr wasCPort; + GDHandle wasWorld; + short i; + OSErr theErr; + + GetGWorld(&wasCPort, &wasWorld); + + QSetRect(&bonusSrcRect, 0, 0, 88, 378); // 33264 pixels + theErr = CreateOffScreenGWorld(&bonusSrcMap, &bonusSrcRect, kPreferredDepth); + SetGWorld(bonusSrcMap, nil); + LoadGraphic(kBonusPictID); + + theErr = CreateOffScreenGWorld(&bonusMaskMap, &bonusSrcRect, 1); + SetGWorld(bonusMaskMap, nil); + LoadGraphic(kBonusPictID + 1000); + + for (i = 0; i < 11; i++) + { + QSetRect(&digits[i], 0, 0, 4, 6); + QOffsetRect(&digits[i], 28, i * 6); + } + + for (i = 0; i < 3; i++) + { + QSetRect(&pendulumSrc[i], 0, 0, 32, 28); + QOffsetRect(&pendulumSrc[i], 56, 186 + (i * 28)); + } + + QSetRect(&greaseSrcRt[0], 0, 0, 32, 27); + QOffsetRect(&greaseSrcRt[0], 0, 243); + QSetRect(&greaseSrcRt[1], 0, 0, 32, 27); + QOffsetRect(&greaseSrcRt[1], 0, 270); + QSetRect(&greaseSrcRt[2], 0, 0, 32, 27); + QOffsetRect(&greaseSrcRt[2], 0, 297); + QSetRect(&greaseSrcRt[3], 0, 0, 32, 27); + QOffsetRect(&greaseSrcRt[3], 32, 297); + + QSetRect(&greaseSrcLf[0], 0, 0, 32, 27); + QOffsetRect(&greaseSrcLf[0], 0, 324); + QSetRect(&greaseSrcLf[1], 0, 0, 32, 27); + QOffsetRect(&greaseSrcLf[1], 32, 324); + QSetRect(&greaseSrcLf[2], 0, 0, 32, 27); + QOffsetRect(&greaseSrcLf[2], 0, 351); + QSetRect(&greaseSrcLf[3], 0, 0, 32, 27); + QOffsetRect(&greaseSrcLf[3], 32, 351); + + for (i = 0; i < 6; i++) + { + QSetRect(&starSrc[i], 0, 0, 32, 31); + QOffsetRect(&starSrc[i], 48, i * 31); + } + + for (i = 0; i < 3; i++) + { + QSetRect(&sparkleSrc[i + 2], 0, 0, 20, 19); + QOffsetRect(&sparkleSrc[i + 2], 0, 70 + (i * 19)); + } + sparkleSrc[0] = sparkleSrc[4]; + sparkleSrc[1] = sparkleSrc[3]; + + QSetRect(&pointsSrcRect, 0, 0, 24, 120); // 2880 pixels + theErr = CreateOffScreenGWorld(&pointsSrcMap, &pointsSrcRect, kPreferredDepth); + SetGWorld(pointsSrcMap, nil); + LoadGraphic(kPointsPictID); + + theErr = CreateOffScreenGWorld(&pointsMaskMap, &pointsSrcRect, 1); + SetGWorld(pointsMaskMap, nil); + LoadGraphic(kPointsPictID + 1000); + + for (i = 0; i < 15; i++) + { + QSetRect(&pointsSrc[i], 0, 0, 24, 8); + QOffsetRect(&pointsSrc[i], 0, i * 8); + } + + SetGWorld(wasCPort, wasWorld); +} + +//-------------------------------------------------------------- InitTransports +// Structures and graphics relating to the transports is loaded up. +// Transports includes transport ducts, mailboxes, etc. + +void InitTransports (void) +{ + CGrafPtr wasCPort; + GDHandle wasWorld; + OSErr theErr; + + GetGWorld(&wasCPort, &wasWorld); // GlidePort: this line was missing? + + QSetRect(&transSrcRect, 0, 0, 56, 32); // 1848 pixels + theErr = CreateOffScreenGWorld(&transSrcMap, &transSrcRect, kPreferredDepth); + SetGWorld(transSrcMap, nil); + LoadGraphic(kTransportPictID); + + theErr = CreateOffScreenGWorld(&transMaskMap, &transSrcRect, 1); + SetGWorld(transMaskMap, nil); + LoadGraphic(kTransportPictID + 1000); + + SetGWorld(wasCPort, wasWorld); +} + +//-------------------------------------------------------------- InitSwitches +// Structures and graphics relating to switches are loaded up. +// Switches includes triggers, light switches, etc. + +void InitSwitches (void) +{ + CGrafPtr wasCPort; + GDHandle wasWorld; + OSErr theErr; + + GetGWorld(&wasCPort, &wasWorld); + + QSetRect(&switchSrcRect, 0, 0, 32, 104); // 3360 pixels + theErr = CreateOffScreenGWorld(&switchSrcMap, &switchSrcRect, kPreferredDepth); + SetGWorld(switchSrcMap, nil); + LoadGraphic(kSwitchPictID); + + QSetRect(&lightSwitchSrc[0], 0, 0, 15, 24); + QOffsetRect(&lightSwitchSrc[0], 0, 0); + QSetRect(&lightSwitchSrc[1], 0, 0, 15, 24); + QOffsetRect(&lightSwitchSrc[1], 16, 0); + + QSetRect(&machineSwitchSrc[0], 0, 0, 16, 24); + QOffsetRect(&machineSwitchSrc[0], 0, 24); + QSetRect(&machineSwitchSrc[1], 0, 0, 16, 24); + QOffsetRect(&machineSwitchSrc[1], 16, 24); + + QSetRect(&thermostatSrc[0], 0, 0, 15, 24); + QOffsetRect(&thermostatSrc[0], 0, 48); + QSetRect(&thermostatSrc[1], 0, 0, 15, 24); + QOffsetRect(&thermostatSrc[1], 16, 48); + + QSetRect(&powerSrc[0], 0, 0, 8, 8); + QOffsetRect(&powerSrc[0], 0, 72); + QSetRect(&powerSrc[1], 0, 0, 8, 8); + QOffsetRect(&powerSrc[1], 8, 72); + + QSetRect(&knifeSwitchSrc[0], 0, 0, 16, 24); + QOffsetRect(&knifeSwitchSrc[0], 0, 80); + QSetRect(&knifeSwitchSrc[1], 0, 0, 16, 24); + QOffsetRect(&knifeSwitchSrc[1], 16, 80); + + SetGWorld(wasCPort, wasWorld); +} + +//-------------------------------------------------------------- InitLights +// Structures and graphics relating to lights are loaded up. +// Lights includes table lamps, flourescent lights, track lights, etc. + +void InitLights (void) +{ + CGrafPtr wasCPort; + GDHandle wasWorld; + short i; + OSErr theErr; + + GetGWorld(&wasCPort, &wasWorld); + + QSetRect(&lightSrcRect, 0, 0, 72, 126); // 9144 pixels + theErr = CreateOffScreenGWorld(&lightSrcMap, &lightSrcRect, kPreferredDepth); + SetGWorld(lightSrcMap, nil); + LoadGraphic(kLightPictID); + + theErr = CreateOffScreenGWorld(&lightMaskMap, &lightSrcRect, 1); + SetGWorld(lightMaskMap, nil); + LoadGraphic(kLightPictID + 1000); + + QSetRect(&flourescentSrc1, 0, 0, 16, 12); + QOffsetRect(&flourescentSrc1, 0, 78); + + QSetRect(&flourescentSrc2, 0, 0, 16, 12); + QOffsetRect(&flourescentSrc2, 0, 90); + + for (i = 0; i < kNumTrackLights; i++) + { + QSetRect(&trackLightSrc[i], 0, 0, 24, 24); + QOffsetRect(&trackLightSrc[i], 24 * i, 102); + } + + SetGWorld(wasCPort, wasWorld); +} + +//-------------------------------------------------------------- InitAppliances +// Structures and graphics relating to appliances are loaded up. +// Appliances includes toasters, T.V.s, etc. + +void InitAppliances (void) +{ + CGrafPtr wasCPort; + GDHandle wasWorld; + short i; + OSErr theErr; + + GetGWorld(&wasCPort, &wasWorld); + + QSetRect(&applianceSrcRect, 0, 0, 80, 269); // 21600 pixels + theErr = CreateOffScreenGWorld(&applianceSrcMap, &applianceSrcRect, kPreferredDepth); + SetGWorld(applianceSrcMap, nil); + LoadGraphic(kAppliancePictID); + + theErr = CreateOffScreenGWorld(&applianceMaskMap, &applianceSrcRect, 1); + SetGWorld(applianceMaskMap, nil); + LoadGraphic(kAppliancePictID + 1000); + + QSetRect(&toastSrcRect, 0, 0, 32, 174); // 5600 pixels + theErr = CreateOffScreenGWorld(&toastSrcMap, &toastSrcRect, kPreferredDepth); + SetGWorld(toastSrcMap, nil); + LoadGraphic(kToastPictID); + + theErr = CreateOffScreenGWorld(&toastMaskMap, &toastSrcRect, 1); + SetGWorld(toastMaskMap, nil); + LoadGraphic(kToastPictID + 1000); + + QSetRect(&shredSrcRect, 0, 0, 40, 35); // 1440 pixels + theErr = CreateOffScreenGWorld(&shredSrcMap, &shredSrcRect, kPreferredDepth); + SetGWorld(shredSrcMap, nil); + LoadGraphic(kShreddedPictID); + + theErr = CreateOffScreenGWorld(&shredMaskMap, &shredSrcRect, 1); + SetGWorld(shredMaskMap, nil); + LoadGraphic(kShreddedPictID + 1000); + + QSetRect(&plusScreen1, 0, 0, 32, 22); + QOffsetRect(&plusScreen1, 48, 127); + QSetRect(&plusScreen2, 0, 0, 32, 22); + QOffsetRect(&plusScreen2, 48, 149); + + QSetRect(&tvScreen1, 0, 0, 64, 49); + QOffsetRect(&tvScreen1, 0, 171); + QSetRect(&tvScreen2, 0, 0, 64, 49); + QOffsetRect(&tvScreen2, 0, 220); + + QSetRect(&coffeeLight1, 0, 0, 8, 4); + QOffsetRect(&coffeeLight1, 72, 171); + QSetRect(&coffeeLight2, 0, 0, 8, 4); + QOffsetRect(&coffeeLight2, 72, 175); + + for (i = 0; i < kNumOutletPicts; i++) + { + QSetRect(&outletSrc[i], 0, 0, 16, 24); + QOffsetRect(&outletSrc[i], 64, 22 + (i * 24)); + } + + for (i = 0; i < kNumBreadPicts; i++) + { + QSetRect(&breadSrc[i], 0, 0, 32, 29); + QOffsetRect(&breadSrc[i], 0, i * 29); + } + + QSetRect(&vcrTime1, 0, 0, 16, 4); + QOffsetRect(&vcrTime1, 64, 179); + QSetRect(&vcrTime2, 0, 0, 16, 4); + QOffsetRect(&vcrTime2, 64, 183); + + QSetRect(&stereoLight1, 0, 0, 4, 1); + QOffsetRect(&stereoLight1, 68, 171); + QSetRect(&stereoLight2, 0, 0, 4, 1); + QOffsetRect(&stereoLight2, 68, 172); + + QSetRect(µOn, 0, 0, 16, 35); + QOffsetRect(µOn, 64, 222); + QSetRect(µOff, 0, 0, 16, 35); + QOffsetRect(µOff, 64, 187); + + SetGWorld(wasCPort, wasWorld); +} + +//-------------------------------------------------------------- InitEnemies +// Structures and graphics relating to enemies are loaded up. +// Enemies includes darts, balloons, fish, etc. + +void InitEnemies (void) +{ + CGrafPtr wasCPort; + GDHandle wasWorld; + short i; + OSErr theErr; + + GetGWorld(&wasCPort, &wasWorld); + + QSetRect(&balloonSrcRect, 0, 0, 24, 30 * kNumBalloonFrames); + theErr = CreateOffScreenGWorld(&balloonSrcMap, &balloonSrcRect, kPreferredDepth); + SetGWorld(balloonSrcMap, nil); + LoadGraphic(kBalloonPictID); + + theErr = CreateOffScreenGWorld(&balloonMaskMap, &balloonSrcRect, 1); + SetGWorld(balloonMaskMap, nil); + LoadGraphic(kBalloonPictID + 1000); + + QSetRect(&copterSrcRect, 0, 0, 32, 30 * kNumCopterFrames); + theErr = CreateOffScreenGWorld(&copterSrcMap, &copterSrcRect, kPreferredDepth); + SetGWorld(copterSrcMap, nil); + LoadGraphic(kCopterPictID); + + theErr = CreateOffScreenGWorld(&copterMaskMap, &copterSrcRect, 1); + SetGWorld(copterMaskMap, nil); + LoadGraphic(kCopterPictID + 1000); + + QSetRect(&dartSrcRect, 0, 0, 64, 19 * kNumDartFrames); + theErr = CreateOffScreenGWorld(&dartSrcMap, &dartSrcRect, kPreferredDepth); + SetGWorld(dartSrcMap, nil); + LoadGraphic(kDartPictID); + + theErr = CreateOffScreenGWorld(&dartMaskMap, &dartSrcRect, 1); + SetGWorld(dartMaskMap, nil); + LoadGraphic(kDartPictID + 1000); + + QSetRect(&ballSrcRect, 0, 0, 32, 32 * kNumBallFrames); + theErr = CreateOffScreenGWorld(&ballSrcMap, &ballSrcRect, kPreferredDepth); + SetGWorld(ballSrcMap, nil); + LoadGraphic(kBallPictID); + + theErr = CreateOffScreenGWorld(&ballMaskMap, &ballSrcRect, 1); + SetGWorld(ballMaskMap, nil); + LoadGraphic(kBallPictID + 1000); + + QSetRect(&dripSrcRect, 0, 0, 16, 12 * kNumDripFrames); + theErr = CreateOffScreenGWorld(&dripSrcMap, &dripSrcRect, kPreferredDepth); + SetGWorld(dripSrcMap, nil); + LoadGraphic(kDripPictID); + + theErr = CreateOffScreenGWorld(&dripMaskMap, &dripSrcRect, 1); + SetGWorld(dripMaskMap, nil); + LoadGraphic(kDripPictID + 1000); + + QSetRect(&enemySrcRect, 0, 0, 36, 33); + theErr = CreateOffScreenGWorld(&enemySrcMap, &enemySrcRect, kPreferredDepth); + SetGWorld(enemySrcMap, nil); + LoadGraphic(kEnemyPictID); + + theErr = CreateOffScreenGWorld(&enemyMaskMap, &enemySrcRect, 1); + SetGWorld(enemyMaskMap, nil); + LoadGraphic(kEnemyPictID + 1000); + + QSetRect(&fishSrcRect, 0, 0, 16, 16 * kNumFishFrames); + theErr = CreateOffScreenGWorld(&fishSrcMap, &fishSrcRect, kPreferredDepth); + SetGWorld(fishSrcMap, nil); + LoadGraphic(kFishPictID); + + theErr = CreateOffScreenGWorld(&fishMaskMap, &fishSrcRect, 1); + SetGWorld(fishMaskMap, nil); + LoadGraphic(kFishPictID + 1000); + + for (i = 0; i < kNumBalloonFrames; i++) + { + QSetRect(&balloonSrc[i], 0, 0, 24, 30); + QOffsetRect(&balloonSrc[i], 0, 30 * i); + } + + for (i = 0; i < kNumCopterFrames; i++) + { + QSetRect(&copterSrc[i], 0, 0, 32, 30); + QOffsetRect(&copterSrc[i], 0, 30 * i); + } + + for (i = 0; i < kNumDartFrames; i++) + { + QSetRect(&dartSrc[i], 0, 0, 64, 19); + QOffsetRect(&dartSrc[i], 0, 19 * i); + } + + for (i = 0; i < kNumBallFrames; i++) + { + QSetRect(&ballSrc[i], 0, 0, 32, 32); + QOffsetRect(&ballSrc[i], 0, 32 * i); + } + + for (i = 0; i < kNumDripFrames; i++) + { + QSetRect(&dripSrc[i], 0, 0, 16, 12); + QOffsetRect(&dripSrc[i], 0, 12 * i); + } + + for (i = 0; i < kNumFishFrames; i++) + { + QSetRect(&fishSrc[i], 0, 0, 16, 16); + QOffsetRect(&fishSrc[i], 0, 16 * i); + } + + SetGWorld(wasCPort, wasWorld); +} + diff --git a/GpApp/StructuresInit2.cpp b/GpApp/StructuresInit2.cpp new file mode 100644 index 0000000..81e9f39 --- /dev/null +++ b/GpApp/StructuresInit2.cpp @@ -0,0 +1,477 @@ +//============================================================================ +//---------------------------------------------------------------------------- +// StructuresInit2.c +//---------------------------------------------------------------------------- +//============================================================================ + + +#include "PLResources.h" +#include "Externs.h" +#include "Environ.h" +#include "GameOver.h" +#include "MainWindow.h" +#include "Objects.h" +#include "RectUtils.h" +#include "Room.h" +#include "RoomGraphics.h" +#include "Utilities.h" + + +#define kAngelPictID 1019 +#define kSupportPictID 1999 +#define kClutterPictID 4018 + + +void InitClutter (void); +void InitSupport (void); +void InitAngel (void); + + +extern Rect suppSrcRect, justRoomsRect; +extern Rect tileSrcRect, angelSrcRect; +extern GDHandle thisGDevice; +extern CGrafPtr tileSrcMap; +extern FSSpecPtr theHousesSpecs; +extern hotPtr hotSpots; +extern sparklePtr sparkles; +extern flyingPtPtr flyingPoints; +extern flamePtr flames, tikiFlames, bbqCoals; +extern pendulumPtr pendulums; +extern bandPtr bands; +extern greasePtr grease; +extern starPtr theStars; +extern shredPtr shreds; +extern dynaPtr dinahs; +extern demoPtr demoData; +extern short maxFiles; + + +//============================================================== Functions +//-------------------------------------------------------------- InitClutter +// Structures and graphics relating to clutter are loaded up. +// Clutter includes mirrors, teddy bears, fireplaces, calendars, etc. + +void InitClutter (void) +{ + CGrafPtr wasCPort; + GDHandle wasWorld; + OSErr theErr; + + GetGWorld(&wasCPort, &wasWorld); + + QSetRect(&clutterSrcRect, 0, 0, 128, 69); + theErr = CreateOffScreenGWorld(&clutterSrcMap, &clutterSrcRect, kPreferredDepth); + SetGWorld(clutterSrcMap, nil); + LoadGraphic(kClutterPictID); + + theErr = CreateOffScreenGWorld(&clutterMaskMap, &clutterSrcRect, 1); + SetGWorld(clutterMaskMap, nil); + LoadGraphic(kClutterPictID + 1000); + + QSetRect(&flowerSrc[0], 0, 0, 10, 28); + QOffsetRect(&flowerSrc[0], 0, 23); + + QSetRect(&flowerSrc[1], 0, 0, 24, 35); + QOffsetRect(&flowerSrc[1], 10, 16); + + QSetRect(&flowerSrc[2], 0, 0, 34, 35); + QOffsetRect(&flowerSrc[2], 34, 16); + + QSetRect(&flowerSrc[3], 0, 0, 27, 23); + QOffsetRect(&flowerSrc[3], 68, 14); + + QSetRect(&flowerSrc[4], 0, 0, 27, 14); + QOffsetRect(&flowerSrc[4], 68, 37); + + QSetRect(&flowerSrc[5], 0, 0, 32, 51); + QOffsetRect(&flowerSrc[5], 95, 0); + + SetGWorld(wasCPort, wasWorld); +} + +//-------------------------------------------------------------- InitSupport +// The floor support grphic is loaded up. It is only visible whenÉ +// playing in 9-room mode. It is the horizontal wooden beam thatÉ +// seperates floors from one another. + +void InitSupport (void) +{ + CGrafPtr wasCPort; + GDHandle wasWorld; + OSErr theErr; + + GetGWorld(&wasCPort, &wasWorld); + + QSetRect(&suppSrcRect, 0, 0, kRoomWide, kFloorSupportTall); // 44 + theErr = CreateOffScreenGWorld(&suppSrcMap, &suppSrcRect, kPreferredDepth); + SetGWorld(suppSrcMap, nil); + LoadGraphic(kSupportPictID); + + SetGWorld(wasCPort, wasWorld); +} + +//-------------------------------------------------------------- InitAngel +// This loads the graphic of the girl riding the glider. It is seenÉ +// only upon completing a house. She flies across the screen droppingÉ +// stars below. + +void InitAngel (void) +{ + CGrafPtr wasCPort; + GDHandle wasWorld; + OSErr theErr; + + GetGWorld(&wasCPort, &wasWorld); + + QSetRect(&angelSrcRect, 0, 0, 96, 44); + theErr = CreateOffScreenGWorld(&angelSrcMap, &angelSrcRect, kPreferredDepth); + SetGWorld(angelSrcMap, nil); + LoadGraphic(kAngelPictID); + + theErr = CreateOffScreenGWorld(&angelMaskMap, &angelSrcRect, 1); + SetGWorld(angelMaskMap, nil); + LoadGraphic(kAngelPictID + 1); + + SetGWorld(wasCPort, wasWorld); +} + +//-------------------------------------------------------------- CreateOffscreens +// All "utility" or "work" offscreen pix/bit maps are created here. +// These would be offscreens that are reused throughout a game - theyÉ +// are not static (mere repositories for graphics). Most are usedÉ +// to facilitate the animation when a game is in progress. + +void CreateOffscreens (void) +{ + CGrafPtr wasCPort; + GDHandle wasWorld; + OSErr theErr; + + GetGWorld(&wasCPort, &wasWorld); + + justRoomsRect = houseRect; + ZeroRectCorner(&justRoomsRect); + + workSrcRect = houseRect; // Set up work map + ZeroRectCorner(&workSrcRect); + theErr = CreateOffScreenGWorld(&workSrcMap, &workSrcRect, kPreferredDepth); + + backSrcRect = houseRect; // Set up background map + ZeroRectCorner(&backSrcRect); + theErr = CreateOffScreenGWorld(&backSrcMap, &backSrcRect, kPreferredDepth); + + InitScoreboardMap(); SpinCursor(1); + InitGliderMap(); SpinCursor(1); + InitBlowers(); SpinCursor(1); + InitFurniture(); SpinCursor(1); + InitPrizes(); SpinCursor(1); + InitTransports(); SpinCursor(1); + InitSwitches(); SpinCursor(1); + InitLights(); SpinCursor(1); + InitAppliances(); SpinCursor(1); + InitEnemies(); SpinCursor(1); + InitClutter(); SpinCursor(1); + InitSupport(); SpinCursor(1); + InitAngel(); SpinCursor(1); + + QSetRect(&tileSrcRect, 0, 0, 128, 80); + tileSrcMap = nil; +// ???? +} + +//-------------------------------------------------------------- CreatePointers +// This function allocates other large structures. Pointers to holdÉ +// large arrays, etc. + +void CreatePointers (void) +{ + Handle tempHandle; + + thisRoom = nil; + thisRoom = (roomPtr)NewPtr(sizeof(roomType)); + if (thisRoom == nil) + RedAlert(kErrNoMemory); + + hotSpots = nil; + hotSpots = (hotPtr)NewPtr(sizeof(hotObject) * kMaxHotSpots); + if (hotSpots == nil) + RedAlert(kErrNoMemory); + + sparkles = nil; + sparkles = (sparklePtr)NewPtr(sizeof(sparkleType) * kMaxSparkles); + if (sparkles == nil) + RedAlert(kErrNoMemory); + + flyingPoints = nil; + flyingPoints = (flyingPtPtr)NewPtr(sizeof(flyingPtType) * kMaxFlyingPts); + if (flyingPoints == nil) + RedAlert(kErrNoMemory); + + flames = nil; + flames = (flamePtr)NewPtr(sizeof(flameType) * kMaxCandles); + if (flames == nil) + RedAlert(kErrNoMemory); + + tikiFlames = nil; + tikiFlames = (flamePtr)NewPtr(sizeof(flameType) * kMaxTikis); + if (tikiFlames == nil) + RedAlert(kErrNoMemory); + + bbqCoals = nil; + bbqCoals = (flamePtr)NewPtr(sizeof(flameType) * kMaxCoals); + if (bbqCoals == nil) + RedAlert(kErrNoMemory); + + pendulums = nil; + pendulums = (pendulumPtr)NewPtr(sizeof(pendulumType) * kMaxPendulums); + if (pendulums == nil) + RedAlert(kErrNoMemory); + + // GlidePort: This is broken code, savedMaps is a flat buffer + /* + savedMaps = nil; + savedMaps = (savedPtr)NewPtr(sizeof(savedType) * kMaxSavedMaps); + if (savedMaps == nil) + RedAlert(kErrNoMemory); + + for (i = 0; i < kMaxSavedMaps; i++) + savedMaps[i].map = nil; + */ + + bands = nil; + bands = (bandPtr)NewPtr(sizeof(bandType) * kMaxRubberBands); + if (bands == nil) + RedAlert(kErrNoMemory); + + grease = nil; + grease = (greasePtr)NewPtr(sizeof(greaseType) * kMaxGrease); + if (grease == nil) + RedAlert(kErrNoMemory); + + theStars = nil; + theStars = (starPtr)NewPtr(sizeof(starType) * kMaxStars); + if (theStars == nil) + RedAlert(kErrNoMemory); + + shreds = nil; + shreds = (shredPtr)NewPtr(sizeof(shredType) * kMaxShredded); + if (shreds == nil) + RedAlert(kErrNoMemory); + + dinahs = nil; + dinahs = (dynaPtr)NewPtr(sizeof(dynaType) * kMaxDynamicObs); + if (dinahs == nil) + RedAlert(kErrNoMemory); + + masterObjects = nil; + masterObjects = (objDataPtr)NewPtr(sizeof(objDataType) * kMaxMasterObjects); + if (masterObjects == nil) + RedAlert(kErrNoMemory); + + srcRects = nil; + srcRects = (Rect *)NewPtr(sizeof(Rect) * kNumSrcRects); + if (srcRects == nil) + RedAlert(kErrNoMemory); + + theHousesSpecs = nil; + theHousesSpecs = (FSSpecPtr)NewPtr(sizeof(FSSpec) * maxFiles); + if (theHousesSpecs == nil) + RedAlert(kErrNoMemory); + +#ifdef CREATEDEMODATA + demoData = nil; + demoData = (demoPtr)NewPtr(sizeof(demoType) * 2000); + if (demoData == nil) + RedAlert(kErrNoMemory); +#else + demoData = nil; + demoData = (demoPtr)NewPtr(kDemoLength); + if (demoData == nil) + RedAlert(kErrNoMemory); + tempHandle = GetResource('demo', 128); + if (tempHandle == nil) + RedAlert(kErrNoMemory); + else + { + BlockMove(*tempHandle, demoData, kDemoLength); + ReleaseResource(tempHandle); + } +#endif +} + +//-------------------------------------------------------------- InitSrcRects + +// This is a nasty, ugly function that initializes all global rectanglesÉ +// used in Glider PRO. + +void InitSrcRects (void) +{ + QSetRect(&srcRects[kFloorVent], 0, 0, 48, 11); // Blowers + QOffsetRect(&srcRects[kFloorVent], 0, 0); + QSetRect(&srcRects[kCeilingVent], 0, 0, 48, 11); + QOffsetRect(&srcRects[kCeilingVent], 0, 11); + QSetRect(&srcRects[kFloorBlower], 0, 0, 48, 15); + QOffsetRect(&srcRects[kFloorBlower], 0, 22); + QSetRect(&srcRects[kCeilingBlower], 0, 0, 48, 15); + QOffsetRect(&srcRects[kCeilingBlower], 0, 37); + QSetRect(&srcRects[kSewerGrate], 0, 0, 48, 17); + QOffsetRect(&srcRects[kSewerGrate], 0, 52); + QSetRect(&srcRects[kLeftFan], 0, 0, 40, 55); + QOffsetRect(&srcRects[kLeftFan], 0, 69); + QSetRect(&srcRects[kRightFan], 0, 0, 40, 55); + QOffsetRect(&srcRects[kRightFan], 0, 124); + QSetRect(&srcRects[kTaper], 0, 0, 20, 59); + QOffsetRect(&srcRects[kTaper], 0, 209); + QSetRect(&srcRects[kCandle], 0, 0, 32, 30); + QOffsetRect(&srcRects[kCandle], 0, 179); + QSetRect(&srcRects[kStubby], 0, 0, 20, 36); + QOffsetRect(&srcRects[kStubby], 0, 268); + QSetRect(&srcRects[kTiki], 0, 0, 27, 28); + QOffsetRect(&srcRects[kTiki], 21, 268); + QSetRect(&srcRects[kBBQ], 0, 0, 64, 33); + QSetRect(&srcRects[kInvisBlower], 0, 0, 24, 24); + QSetRect(&srcRects[kGrecoVent], 0, 0, 48, 18); + QOffsetRect(&srcRects[kGrecoVent], 0, 340); + QSetRect(&srcRects[kSewerBlower], 0, 0, 32, 12); + QOffsetRect(&srcRects[kSewerBlower], 0, 390); + QSetRect(&srcRects[kLiftArea], 0, 0, 64, 32); + + QSetRect(&srcRects[kTable], 0, 0, 64, kTableThick); // Furniture + QSetRect(&srcRects[kShelf], 0, 0, 64, kShelfThick); + QSetRect(&srcRects[kCabinet], 0, 0, 64, 64); + QSetRect(&srcRects[kFilingCabinet], 0, 0, 74, 107); + QSetRect(&srcRects[kWasteBasket], 0, 0, 64, 61); + QOffsetRect(&srcRects[kWasteBasket], 0, 43); + QSetRect(&srcRects[kMilkCrate], 0, 0, 64, 58); + QOffsetRect(&srcRects[kMilkCrate], 0, 104); + QSetRect(&srcRects[kCounter], 0, 0, 128, 64); + QSetRect(&srcRects[kDresser], 0, 0, 128, 64); + QSetRect(&srcRects[kDeckTable], 0, 0, 64, kTableThick); + QSetRect(&srcRects[kStool], 0, 0, 48, 38); + QOffsetRect(&srcRects[kStool], 0, 183); + QSetRect(&srcRects[kTrunk], 0, 0, 144, 80); + QSetRect(&srcRects[kInvisObstacle], 0, 0, 64, 64); + QSetRect(&srcRects[kManhole], 0, 0, 123, 22); + QSetRect(&srcRects[kBooks], 0, 0, 64, 51); + QSetRect(&srcRects[kInvisBounce], 0, 0, 64, 64); + + QSetRect(&srcRects[kRedClock], 0, 0, 28, 17); // Prizes + QSetRect(&srcRects[kBlueClock], 0, 0, 28, 25); + QOffsetRect(&srcRects[kBlueClock], 0, 17); + QSetRect(&srcRects[kYellowClock], 0, 0, 28, 28); + QOffsetRect(&srcRects[kYellowClock], 0, 42); + QSetRect(&srcRects[kCuckoo], 0, 0, 40, 80); + QOffsetRect(&srcRects[kCuckoo], 0, 148); + QSetRect(&srcRects[kPaper], 0, 0, 48, 21); + QOffsetRect(&srcRects[kPaper], 0, 127); + QSetRect(&srcRects[kBattery], 0, 0, 16, 25); + QOffsetRect(&srcRects[kBattery], 32, 0); + QSetRect(&srcRects[kBands], 0, 0, 28, 23); + QOffsetRect(&srcRects[kBands], 20, 70); + QSetRect(&srcRects[kGreaseRt], 0, 0, 32, 27); + QOffsetRect(&srcRects[kGreaseRt], 0, 243); + QSetRect(&srcRects[kGreaseLf], 0, 0, 32, 27); + QOffsetRect(&srcRects[kGreaseLf], 0, 324); + QSetRect(&srcRects[kFoil], 0, 0, 55, 15); + QOffsetRect(&srcRects[kFoil], 0, 228); + QSetRect(&srcRects[kInvisBonus], 0, 0, 24, 24); + QSetRect(&srcRects[kStar], 0, 0, 32, 31); + QOffsetRect(&srcRects[kStar], 48, 0); + QSetRect(&srcRects[kSparkle], 0, 0, 20, 19); + QOffsetRect(&srcRects[kSparkle], 0, 70); + QSetRect(&srcRects[kHelium], 0, 0, 56, 16); + QOffsetRect(&srcRects[kHelium], 32, 270); + QSetRect(&srcRects[kSlider], 0, 0, 64, 16); + + QSetRect(&srcRects[kUpStairs], 0, 0, 160, 267); // Transport + QSetRect(&srcRects[kDownStairs], 0, 0, 160, 267); + QSetRect(&srcRects[kMailboxLf], 0, 0, 94, 80); + QSetRect(&srcRects[kMailboxRt], 0, 0, 94, 80); + QSetRect(&srcRects[kFloorTrans], 0, 0, 56, 15); + QOffsetRect(&srcRects[kFloorTrans], 0, 1); + QSetRect(&srcRects[kCeilingTrans], 0, 0, 56, 15); + QOffsetRect(&srcRects[kCeilingTrans], 0, 16); + QSetRect(&srcRects[kDoorInLf], 0, 0, 144, 322); + QSetRect(&srcRects[kDoorInRt], 0, 0, 144, 322); + QSetRect(&srcRects[kDoorExRt], 0, 0, 16, 322); + QSetRect(&srcRects[kDoorExLf], 0, 0, 16, 322); + QSetRect(&srcRects[kWindowInLf], 0, 0, 20, 170); + QSetRect(&srcRects[kWindowInRt], 0, 0, 20, 170); + QSetRect(&srcRects[kWindowExRt], 0, 0, 16, 170); + QSetRect(&srcRects[kWindowExLf], 0, 0, 16, 170); + QSetRect(&srcRects[kInvisTrans], 0, 0, 64, 32); + QSetRect(&srcRects[kDeluxeTrans], 0, 0, 64, 64); + + QSetRect(&srcRects[kLightSwitch], 0, 0, 15, 24); // Switch + QSetRect(&srcRects[kMachineSwitch], 0, 0, 16, 24); + QOffsetRect(&srcRects[kMachineSwitch], 0, 48); + QSetRect(&srcRects[kThermostat], 0, 0, 15, 24); + QOffsetRect(&srcRects[kThermostat], 0, 48); + QSetRect(&srcRects[kPowerSwitch], 0, 0, 8, 8); + QOffsetRect(&srcRects[kPowerSwitch], 0, 72); + QSetRect(&srcRects[kKnifeSwitch], 0, 0, 16, 24); + QOffsetRect(&srcRects[kKnifeSwitch], 0, 80); + QSetRect(&srcRects[kInvisSwitch], 0, 0, 12, 12); + QSetRect(&srcRects[kTrigger], 0, 0, 12, 12); + QSetRect(&srcRects[kLgTrigger], 0, 0, 48, 48); + QSetRect(&srcRects[kSoundTrigger], 0, 0, 32, 32); + + QSetRect(&srcRects[kCeilingLight], 0, 0, 64, 20); // Lights + QOffsetRect(&srcRects[kCeilingLight], 0, 0); + QSetRect(&srcRects[kLightBulb], 0, 0, 16, 28); + QOffsetRect(&srcRects[kLightBulb], 0, 20); + QSetRect(&srcRects[kTableLamp], 0, 0, 48, 70); + QOffsetRect(&srcRects[kTableLamp], 16, 20); + QSetRect(&srcRects[kHipLamp], 0, 0, 72, 276); + QSetRect(&srcRects[kDecoLamp], 0, 0, 64, 212); + QSetRect(&srcRects[kFlourescent], 0, 0, 64, 12); + QSetRect(&srcRects[kTrackLight], 0, 0, 64, 24); + QSetRect(&srcRects[kInvisLight], 0, 0, 16, 16); + + QSetRect(&srcRects[kShredder], 0, 0, 73, 22); // Appliances + QSetRect(&srcRects[kToaster], 0, 0, 48, 27); + QOffsetRect(&srcRects[kToaster], 0, 22); + QSetRect(&srcRects[kMacPlus], 0, 0, 48, 58); + QOffsetRect(&srcRects[kMacPlus], 0, 49); + QSetRect(&srcRects[kGuitar], 0, 0, 64, 172); + QSetRect(&srcRects[kTV], 0, 0, 92, 77); + QSetRect(&srcRects[kCoffee], 0, 0, 43, 64); + QOffsetRect(&srcRects[kCoffee], 0, 107); + QSetRect(&srcRects[kOutlet], 0, 0, 16, 24); + QOffsetRect(&srcRects[kOutlet], 64, 22); + QSetRect(&srcRects[kVCR], 0, 0, 96, 22); + QSetRect(&srcRects[kStereo], 0, 0, 128, 53); + QSetRect(&srcRects[kMicrowave], 0, 0, 92, 59); + QSetRect(&srcRects[kCinderBlock], 0, 0, 40, 62); + QSetRect(&srcRects[kFlowerBox], 0, 0, 80, 32); + QSetRect(&srcRects[kCDs], 0, 0, 16, 30); + QOffsetRect(&srcRects[kCDs], 48, 22); + QSetRect(&srcRects[kCustomPict], 0, 0, 72, 34); + + QSetRect(&srcRects[kBalloon], 0, 0, 24, 30); // Enemies + QSetRect(&srcRects[kCopterLf], 0, 0, 32, 30); + QSetRect(&srcRects[kCopterRt], 0, 0, 32, 30); + QSetRect(&srcRects[kDartLf], 0, 0, 64, 19); + QSetRect(&srcRects[kDartRt], 0, 0, 64, 19); + QSetRect(&srcRects[kBall], 0, 0, 32, 32); + QSetRect(&srcRects[kDrip], 0, 0, 16, 12); + QSetRect(&srcRects[kFish], 0, 0, 36, 33); + QSetRect(&srcRects[kCobweb], 0, 0, 54, 45); + + QSetRect(&srcRects[kOzma], 0, 0, 102, 92); // Clutter + QSetRect(&srcRects[kMirror], 0, 0, 64, 64); + QSetRect(&srcRects[kMousehole], 0, 0, 10, 11); + QSetRect(&srcRects[kFireplace], 0, 0, 180, 142); + QSetRect(&srcRects[kWallWindow], 0, 0, 64, 80); + QSetRect(&srcRects[kBear], 0, 0, 56, 58); + QSetRect(&srcRects[kCalendar], 0, 0, 63, 92); + QSetRect(&srcRects[kVase1], 0, 0, 36, 45); + QSetRect(&srcRects[kVase2], 0, 0, 35, 57); + QSetRect(&srcRects[kBulletin], 0, 0, 80, 58); + QSetRect(&srcRects[kCloud], 0, 0, 128, 30); + QSetRect(&srcRects[kFaucet], 0, 0, 56, 18); + QOffsetRect(&srcRects[kFaucet], 0, 51); + QSetRect(&srcRects[kRug], 0, 0, 144, 18); + QSetRect(&srcRects[kChimes], 0, 0, 28, 74); +} + diff --git a/GpApp/Tools.cpp b/GpApp/Tools.cpp new file mode 100644 index 0000000..9a55cae --- /dev/null +++ b/GpApp/Tools.cpp @@ -0,0 +1,546 @@ +//============================================================================ +//---------------------------------------------------------------------------- +// Tools.c +//---------------------------------------------------------------------------- +//============================================================================ + + +#include "PLTextUtils.h" +#include "PLControlDefinitions.h" +#include "PLPasStr.h" +#include "Externs.h" +#include "Environ.h" +#include "RectUtils.h" +#include "Utilities.h" + + +#define kToolsHigh 4 +#define kToolsWide 4 +#define kTotalTools 16 // kToolsHigh * kToolsWide +#define kPopUpControl 129 +#define kFirstBlower 1 +#define kLastBlower 15 +#define kBlowerBase 1 +#define kFirstFurniture 1 +#define kLastFurniture 15 +#define kFurnitureBase 21 +#define kFirstBonus 1 +#define kLastBonus 15 +#define kBonusBase 41 +#define kFirstTransport 1 +#define kLastTransport 12 +#define kTransportBase 61 +#define kFirstSwitch 1 +#define kLastSwitch 9 +#define kSwitchBase 81 +#define kFirstLight 1 +#define kLastLight 8 +#define kLightBase 101 +#define kFirstAppliance 1 +#define kLastAppliance 14 +#define kApplianceBase 121 +#define kFirstEnemy 1 +#define kLastEnemy 9 +#define kEnemyBase 141 +#define kFirstClutter 1 +#define kLastClutter 15 +#define kClutterBase 161 +#define kToolsPictID 1011 + + +void CreateToolsOffscreen (void); +void KillToolsOffscreen (void); +void FrameSelectedTool (void); +void DrawToolName (void); +void DrawToolTiles (void); +void SwitchToolModes (short); + + +Rect toolsWindowRect, toolSrcRect, toolTextRect; +Rect toolRects[kTotalTools]; +ControlHandle classPopUp; +GWorldPtr toolSrcMap; +WindowPtr toolsWindow; +short isToolsH, isToolsV; +short toolSelected, toolMode; +short firstTool, lastTool, objectBase; +Boolean isToolsOpen; + + +//============================================================== Functions +//-------------------------------------------------------------- CreateToolsOffscreen + +#ifndef COMPILEDEMO +void CreateToolsOffscreen (void) +{ + CGrafPtr wasCPort; + GDHandle wasWorld; + OSErr theErr; + + if (toolSrcMap == nil) + { + GetGWorld(&wasCPort, &wasWorld); + + QSetRect(&toolSrcRect, 0, 0, 360, 216); + theErr = CreateOffScreenGWorld(&toolSrcMap, &toolSrcRect, kPreferredDepth); + SetGWorld(toolSrcMap, nil); + LoadGraphic(kToolsPictID); + + SetGWorld(wasCPort, wasWorld); + } +} +#endif + +//-------------------------------------------------------------- KillToolsOffscreen + +#ifndef COMPILEDEMO +void KillToolsOffscreen (void) +{ + if (toolSrcMap != nil) + { + DisposeGWorld(toolSrcMap); +// KillOffScreenPixMap(toolSrcMap); + toolSrcMap = nil; + } +} +#endif + +//-------------------------------------------------------------- FrameSelectedTool + +#ifndef COMPILEDEMO +void FrameSelectedTool (void) +{ + Rect theRect; + short toolIcon; + + toolIcon = toolSelected; + if ((toolMode == kBlowerMode) && (toolIcon >= 7)) + { + toolIcon--; + } + else if ((toolMode == kTransportMode) && (toolIcon >= 7)) + { + if (toolIcon >= 15) + toolIcon -= 4; + else + toolIcon = ((toolIcon - 7) / 2) + 7; + } + + theRect = toolRects[toolIcon]; + PenSize(2, 2); + ForeColor(redColor); + FrameRect(&theRect); + PenNormal(); + ForeColor(blackColor); +} +#endif + +//-------------------------------------------------------------- DrawToolName + +#ifndef COMPILEDEMO +void DrawToolName (void) +{ + Str255 theString; + + if (toolSelected == 0) + PasStringCopy(PSTR("Selection Tool"), theString); + else + GetIndString(theString, kObjectNameStrings, + toolSelected + ((toolMode - 1) * 0x0010)); + + EraseRect(&toolTextRect); + MoveTo(toolTextRect.left + 3, toolTextRect.bottom - 6); + TextFont(applFont); + TextSize(9); + TextFace(bold); + ColorText(theString, 171L); +} +#endif + +//-------------------------------------------------------------- DrawToolTiles + +#ifndef COMPILEDEMO +void DrawToolTiles (void) +{ + Rect srcRect, destRect; + short i; + + DrawCIcon(2000, toolRects[0].left, toolRects[0].top); // Selection Tool + + for (i = 0; i < 15; i++) // Other tools + { + QSetRect(&srcRect, 0, 0, 24, 24); + QSetRect(&destRect, 0, 0, 24, 24); + + QOffsetRect(&srcRect, i * 24, (toolMode - 1) * 24); + QOffsetRect(&destRect, toolRects[i + 1].left + 2, toolRects[i + 1].top + 2); + + CopyBits((BitMap *)*GetGWorldPixMap(toolSrcMap), + GetPortBitMapForCopyBits(GetWindowPort(toolsWindow)), + &srcRect, &destRect, srcCopy, nil); + } +} +#endif + +//-------------------------------------------------------------- EraseSelectedTool + +void EraseSelectedTool (void) +{ +#ifndef COMPILEDEMO + Rect theRect; + short toolIcon; + + if (toolsWindow == nil) + return; + + SetPort((GrafPtr)toolsWindow); + + toolIcon = toolSelected; + if ((toolMode == kBlowerMode) && (toolIcon >= 7)) + { + toolIcon--; + } + else if ((toolMode == kTransportMode) && (toolIcon >= 7)) + { + if (toolIcon >= 15) + toolIcon -= 4; + else + toolIcon = ((toolIcon - 7) / 2) + 7; + } + + theRect = toolRects[toolIcon]; + PenSize(2, 2); + ForeColor(whiteColor); + FrameRect(&theRect); +#endif +} + +//-------------------------------------------------------------- SelectTool + +void SelectTool (short which) +{ +#ifndef COMPILEDEMO + Rect theRect; + short toolIcon; + + if (toolsWindow == nil) + return; + + SetPort((GrafPtr)toolsWindow); + + toolIcon = which; + if ((toolMode == kBlowerMode) && (toolIcon >= 7)) + { + toolIcon--; + } + else if ((toolMode == kTransportMode) && (toolIcon >= 7)) + { + if (toolIcon >= 15) + toolIcon -= 4; + else + toolIcon = ((toolIcon - 7) / 2) + 7; + } + + theRect = toolRects[toolIcon]; + ForeColor(redColor); + FrameRect(&theRect); + PenNormal(); + ForeColor(blackColor); + + toolSelected = which; + DrawToolName(); +#endif +} + +//-------------------------------------------------------------- UpdateToolsWindow + +void UpdateToolsWindow (void) +{ +#ifndef COMPILEDEMO + if (toolsWindow == nil) + return; + + SetPortWindowPort(toolsWindow); + DrawControls(toolsWindow); + + DkGrayForeColor(); + MoveTo(4, 25); + Line(108, 0); + ForeColor(blackColor); + + DrawToolTiles(); + FrameSelectedTool(); + DrawToolName(); +#endif +} + +//-------------------------------------------------------------- OpenToolsWindow + +void OpenToolsWindow (void) +{ +#ifndef COMPILEDEMO + Rect src, dest; + Point globalMouse; + short h, v; + + if (toolsWindow == nil) + { + QSetRect(&toolsWindowRect, 0, 0, 116, 152); // 143 + QSetRect(&toolTextRect, 0, 0, 116, 12); + InsetRect(&toolTextRect, -1, -1); + QOffsetRect(&toolTextRect, 0, 157 - 15); + if (thisMac.hasColor) + toolsWindow = NewCWindow(nil, &toolsWindowRect, + PSTR("Tools"), false, kWindoidWDEF, kPutInFront, true, 0L); + else + toolsWindow = NewWindow(nil, &toolsWindowRect, + PSTR("Tools"), false, kWindoidWDEF, kPutInFront, true, 0L); + + if (toolsWindow == nil) + RedAlert(kErrNoMemory); + +// if (OptionKeyDown()) +// { +// isToolsH = qd.screenBits.bounds.right - 120; +// isToolsV = 35; +// } + MoveWindow(toolsWindow, isToolsH, isToolsV, true); + globalMouse = MyGetGlobalMouse(); + QSetRect(&src, 0, 0, 1, 1); + QOffsetRect(&src, globalMouse.h, globalMouse.v); + GetWindowRect(toolsWindow, &dest); + BringToFront(toolsWindow); + ShowHide(toolsWindow, true); +// FlagWindowFloating(toolsWindow); TEMP - use flaoting windows + HiliteAllWindows(); + + classPopUp = GetNewControl(kPopUpControl, toolsWindow); + if (classPopUp == nil) + RedAlert(kErrFailedResourceLoad); + + SetControlValue(classPopUp, toolMode); + + for (v = 0; v < kToolsHigh; v++) + for (h = 0; h < kToolsWide; h++) + { + QSetRect(&toolRects[(v * kToolsWide) + h], 2, 29, 30, 57); + QOffsetRect(&toolRects[(v * kToolsWide) + h], h * 28, v * 28); + } + + CreateToolsOffscreen(); + + SwitchToolModes(toolMode); + toolSelected = kSelectTool; + } + + UpdateToolsCheckmark(true); +#endif +} + +//-------------------------------------------------------------- CloseToolsWindow + +void CloseToolsWindow (void) +{ +#ifndef COMPILEDEMO + CloseThisWindow(&toolsWindow); + KillToolsOffscreen(); + UpdateToolsCheckmark(false); +#endif +} + +//-------------------------------------------------------------- ToggleToolsWindow + +void ToggleToolsWindow (void) +{ +#ifndef COMPILEDEMO + if (toolsWindow == nil) + { + OpenToolsWindow(); + isToolsOpen = true; + } + else + { + CloseToolsWindow(); + isToolsOpen = true; + } +#endif +} + +//-------------------------------------------------------------- SwitchToolModes + +#ifndef COMPILEDEMO +void SwitchToolModes (short newMode) +{ + if (toolsWindow == nil) + return; + + SelectTool(kSelectTool); + switch (newMode) + { + case kBlowerMode: + firstTool = kFirstBlower; + lastTool = kLastBlower; + objectBase = kBlowerBase; + break; + + case kFurnitureMode: + firstTool = kFirstFurniture; + lastTool = kLastFurniture; + objectBase = kFurnitureBase; + break; + + case kBonusMode: + firstTool = kFirstBonus; + lastTool = kLastBonus; + objectBase = kBonusBase; + break; + + case kTransportMode: + firstTool = kFirstTransport; + lastTool = kLastTransport; + objectBase = kTransportBase; + break; + + case kSwitchMode: + firstTool = kFirstSwitch; + lastTool = kLastSwitch; + objectBase = kSwitchBase; + break; + + case kLightMode: + firstTool = kFirstLight; + lastTool = kLastLight; + objectBase = kLightBase; + break; + + case kApplianceMode: + firstTool = kFirstAppliance; + lastTool = kLastAppliance; + objectBase = kApplianceBase; + break; + + case kEnemyMode: + firstTool = kFirstEnemy; + lastTool = kLastEnemy; + objectBase = kEnemyBase; + break; + + case kClutterMode: + firstTool = kFirstClutter; + lastTool = kLastClutter; + objectBase = kClutterBase; + break; + } + + toolMode = newMode; + InvalWindowRect(toolsWindow, &toolsWindowRect); +} +#endif + +//-------------------------------------------------------------- HandleToolsClick + +void HandleToolsClick (Point wherePt) +{ +#ifndef COMPILEDEMO + ControlHandle theControl; + short i, part, newMode, toolIcon; + + if (toolsWindow == nil) + return; + + SetPortWindowPort(toolsWindow); + GlobalToLocal(&wherePt); + + part = FindControl(wherePt, toolsWindow, &theControl); + if ((theControl != nil) && (part != 0)) + { + part = TrackControl(theControl, wherePt, (ControlActionUPP)-1L); + if (part != 0) + { + newMode = GetControlValue(theControl); + if (newMode != toolMode) + { + EraseSelectedTool(); + SwitchToolModes(newMode); + } + } + } + else + { + for (i = 0; i < kTotalTools; i++) + if ((PtInRect(wherePt, &toolRects[i])) && (i <= lastTool)) + { + EraseSelectedTool(); + toolIcon = i; + if ((toolMode == kBlowerMode) && (toolIcon >= 7)) + { + toolIcon++; + } + if ((toolMode == kTransportMode) && (toolIcon >= 7)) + { + if (toolIcon >= 11) + toolIcon += 4; + else + toolIcon = ((toolIcon - 7) * 2) + 7; + } + SelectTool(toolIcon); + break; + } + } +#endif +} + +//-------------------------------------------------------------- NextToolMode + +void NextToolMode (void) +{ +#ifndef COMPILEDEMO + if (toolsWindow == nil) + return; + + if ((theMode == kEditMode) && (toolMode < kClutterMode)) + { + EraseSelectedTool(); + toolMode++; + SetControlValue(classPopUp, toolMode); + SwitchToolModes(toolMode); + toolSelected = kSelectTool; + } +#endif +} + +//-------------------------------------------------------------- PrevToolMode + +void PrevToolMode (void) +{ +#ifndef COMPILEDEMO + if (toolsWindow == nil) + return; + + if ((theMode == kEditMode) && (toolMode > kBlowerMode)) + { + EraseSelectedTool(); + toolMode--; + SetControlValue(classPopUp, toolMode); + SwitchToolModes(toolMode); + toolSelected = kSelectTool; + } +#endif +} + +//-------------------------------------------------------------- SetSpecificToolMode + +void SetSpecificToolMode (short modeToSet) +{ +#ifndef COMPILEDEMO + if ((toolsWindow == nil) || (theMode != kEditMode)) + return; + + EraseSelectedTool(); + toolMode = modeToSet; + SetControlValue(classPopUp, toolMode); + SwitchToolModes(toolMode); + toolSelected = kSelectTool; +#endif +} + diff --git a/GpApp/Tools.h b/GpApp/Tools.h new file mode 100644 index 0000000..184c6dc --- /dev/null +++ b/GpApp/Tools.h @@ -0,0 +1,12 @@ +//============================================================================ +//---------------------------------------------------------------------------- +// Tools.h +//---------------------------------------------------------------------------- +//============================================================================ + + +#include "PLQDOffscreen.h" + + +extern GWorldPtr toolSrcMap; +extern WindowPtr toolsWindow; diff --git a/GpApp/Transit.cpp b/GpApp/Transit.cpp new file mode 100644 index 0000000..9fd5186 --- /dev/null +++ b/GpApp/Transit.cpp @@ -0,0 +1,558 @@ + +//============================================================================ +//---------------------------------------------------------------------------- +// Transit.c +//---------------------------------------------------------------------------- +//============================================================================ + + +#include "Externs.h" +#include "Environ.h" +#include "RectUtils.h" + + +void HandleRoomVisitation (void); + + +short linkedToWhat; +Boolean takingTheStairs, firstPlayer; + + +extern Rect justRoomsRect, transRect; +extern short transRoom, otherPlayerEscaped; +extern short localNumbers[9]; +extern Boolean topOpen, twoPlayerGame, onePlayerLeft; +extern Boolean playerDead, playerSuicide, tvOn; + + +//============================================================== Functions +//-------------------------------------------------------------- WhatAreWeLinkedTo + +short WhatAreWeLinkedTo (short where, Byte who) +{ + short what, whatType; + char wasState; + + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + what = (*thisHouse)->rooms[where].objects[who].what; + HSetState((Handle)thisHouse, wasState); + + switch (what) + { + case kMailboxLf: + whatType = kLinkedToLeftMailbox; + break; + + case kMailboxRt: + whatType = kLinkedToRightMailbox; + break; + + case kCeilingTrans: + whatType = kLinkedToCeilingDuct; + break; + + default: + whatType = kLinkedToOther; + break; + } + + return (whatType); +} + +//-------------------------------------------------------------- ReadyGliderFromTransit + +void ReadyGliderFromTransit (gliderPtr thisGlider, short toWhat) +{ + Rect tempRect; + + if ((twoPlayerGame) && (onePlayerLeft) && (thisGlider->which == playerDead)) + return; + + FlagGliderNormal(thisGlider); + + switch (toWhat) + { + case kLinkedToOther: + StartGliderTransportingIn(thisGlider); // set glider's mode + tempRect = thisGlider->dest; // position glider + CenterRectInRect(&tempRect, &transRect); + thisGlider->dest.left = tempRect.left; + thisGlider->dest.right = tempRect.right; + thisGlider->dest.top = tempRect.top; + thisGlider->dest.bottom = tempRect.bottom; + thisGlider->destShadow.left = tempRect.left; + thisGlider->destShadow.right = tempRect.right; + thisGlider->whole = thisGlider->dest; + thisGlider->wholeShadow = thisGlider->destShadow; + thisGlider->enteredRect = thisGlider->dest; + break; + + case kLinkedToLeftMailbox: + StartGliderMailingOut(thisGlider); + thisGlider->clip = transRect; // fix clip + thisGlider->clip.right -= 64; + thisGlider->clip.bottom -= 25; + tempRect = thisGlider->dest; + thisGlider->dest.left = thisGlider->clip.right; + thisGlider->dest.right = thisGlider->dest.left; + thisGlider->dest.bottom = thisGlider->clip.bottom - 4; + thisGlider->dest.top = thisGlider->dest.bottom - RectTall(&tempRect); + thisGlider->destShadow.left = thisGlider->dest.left; + thisGlider->destShadow.right = thisGlider->dest.right; + thisGlider->whole = thisGlider->dest; + thisGlider->wholeShadow = thisGlider->destShadow; + break; + + case kLinkedToRightMailbox: + StartGliderMailingOut(thisGlider); + thisGlider->clip = transRect; // fix clip + thisGlider->clip.left += 79; + thisGlider->clip.bottom -= 25; + tempRect = thisGlider->dest; + thisGlider->dest.right = thisGlider->clip.left; + thisGlider->dest.left = thisGlider->dest.right; + thisGlider->dest.bottom = thisGlider->clip.bottom - 4; + thisGlider->dest.top = thisGlider->dest.bottom - RectTall(&tempRect); + thisGlider->destShadow.left = thisGlider->dest.left; + thisGlider->destShadow.right = thisGlider->dest.right; + thisGlider->whole = thisGlider->dest; + thisGlider->wholeShadow = thisGlider->destShadow; + break; + + case kLinkedToCeilingDuct: + StartGliderDuctingIn(thisGlider); + tempRect = thisGlider->dest; // set glider's position + CenterRectInRect(&tempRect, &transRect); + thisGlider->dest.left = tempRect.left; + thisGlider->dest.right = tempRect.right; + thisGlider->dest.top = tempRect.top; + thisGlider->dest.bottom = thisGlider->dest.top; + QOffsetRect(&thisGlider->dest, 0, -RectTall(&tempRect)); + thisGlider->destShadow.left = tempRect.left; + thisGlider->destShadow.right = tempRect.right; + thisGlider->whole = thisGlider->dest; + thisGlider->wholeShadow = thisGlider->destShadow; + break; + + case kLinkedToFloorDuct: + break; + + default: + break; + } + + if ((twoPlayerGame) && (thisGlider->which != firstPlayer)) + TagGliderIdle(thisGlider); +} + +//-------------------------------------------------------------- MoveRoomToRoom + +void MoveRoomToRoom (gliderPtr thisGlider, short where) +{ + Rect enterRect; + + HandleRoomVisitation(); + switch (where) + { + case kToRight: + SetMusicalMode(kProdGameScoreMode); + if (twoPlayerGame) + { + UndoGliderLimbo(&theGlider); + UndoGliderLimbo(&theGlider2); + InsureGliderFacingRight(&theGlider); + InsureGliderFacingRight(&theGlider2); + } + else + InsureGliderFacingRight(thisGlider); + ForceThisRoom(localNumbers[kEastRoom]); + if (twoPlayerGame) + { + OffsetGlider(&theGlider, kToLeft); + OffsetGlider(&theGlider2, kToLeft); + QSetRect(&enterRect, 0, 0, 48, 20); + QOffsetRect(&enterRect, 0, + kGliderStartsDown + (short)thisRoom->leftStart - 2); + theGlider.enteredRect = enterRect; + theGlider2.enteredRect = enterRect; + } + else + { + OffsetGlider(thisGlider, kToLeft); + QSetRect(&enterRect, 0, 0, 48, 20); + QOffsetRect(&enterRect, 0, + kGliderStartsDown + (short)thisRoom->leftStart - 2); + thisGlider->enteredRect = enterRect; + } + break; + + case kToLeft: + SetMusicalMode(kProdGameScoreMode); + if (twoPlayerGame) + { + UndoGliderLimbo(&theGlider); + UndoGliderLimbo(&theGlider2); + InsureGliderFacingLeft(&theGlider); + InsureGliderFacingLeft(&theGlider2); + } + else + InsureGliderFacingLeft(thisGlider); + ForceThisRoom(localNumbers[kWestRoom]); + if (twoPlayerGame) + { + OffsetGlider(&theGlider, kToRight); + OffsetGlider(&theGlider2, kToRight); + QSetRect(&enterRect, 0, 0, 48, 20); + QOffsetRect(&enterRect, kRoomWide - 48, + kGliderStartsDown + (short)thisRoom->rightStart - 2); + theGlider.enteredRect = enterRect; + theGlider2.enteredRect = enterRect; + } + else + { + OffsetGlider(thisGlider, kToRight); + QSetRect(&enterRect, 0, 0, 48, 20); + QOffsetRect(&enterRect, kRoomWide - 48, + kGliderStartsDown + (short)thisRoom->rightStart - 2); + thisGlider->enteredRect = enterRect; + } + break; + + case kAbove: + SetMusicalMode(kKickGameScoreMode); + ForceThisRoom(localNumbers[kNorthRoom]); + if (!takingTheStairs) + { + if (twoPlayerGame) + { + UndoGliderLimbo(&theGlider); + UndoGliderLimbo(&theGlider2); + OffsetGlider(&theGlider, kBelow); + OffsetGlider(&theGlider2, kBelow); + theGlider.enteredRect = theGlider.dest; + theGlider2.enteredRect = theGlider2.dest; + } + else + { + OffsetGlider(thisGlider, kBelow); + thisGlider->enteredRect = thisGlider->dest; + } + } + else + { + if (twoPlayerGame) + { + ReadyGliderForTripUpStairs(&theGlider); + ReadyGliderForTripUpStairs(&theGlider2); + } + else + ReadyGliderForTripUpStairs(thisGlider); + } + break; + + case kBelow: + SetMusicalMode(kKickGameScoreMode); + ForceThisRoom(localNumbers[kSouthRoom]); + if (!takingTheStairs) + { + if (twoPlayerGame) + { + UndoGliderLimbo(&theGlider); + UndoGliderLimbo(&theGlider2); + OffsetGlider(&theGlider, kAbove); + OffsetGlider(&theGlider2, kAbove); + theGlider.enteredRect = theGlider.dest; + theGlider2.enteredRect = theGlider2.dest; + } + else + { + OffsetGlider(thisGlider, kAbove); + thisGlider->enteredRect = thisGlider->dest; + } + } + else + { + if (twoPlayerGame) + { + ReadyGliderForTripDownStairs(&theGlider); + ReadyGliderForTripDownStairs(&theGlider2); + } + else + ReadyGliderForTripDownStairs(thisGlider); + } + break; + + default: + break; + } + + if ((twoPlayerGame) && (!onePlayerLeft)) + { + if (firstPlayer == kPlayer1) + TagGliderIdle(&theGlider2); + else + TagGliderIdle(&theGlider); + } + + ReadyLevel(); + RefreshScoreboard(kNormalTitleMode); + WipeScreenOn(where, &justRoomsRect); + +#ifdef COMPILEQT + RenderFrame(); + if ((thisMac.hasQT) && (hasMovie) && (tvInRoom) && (tvOn)) + { + GoToBeginningOfMovie(theMovie); + StartMovie(theMovie); + } +#endif +} + +//-------------------------------------------------------------- TransportRoomToRoom + +void TransportRoomToRoom (gliderPtr thisGlider) +{ + Boolean sameRoom; + + SetMusicalMode(kKickGameScoreMode); + HandleRoomVisitation(); + + sameRoom = (transRoom == thisRoomNumber); + if (!sameRoom) + ForceThisRoom(transRoom); + if (twoPlayerGame) + { + UndoGliderLimbo(&theGlider); // turn off limbo if needed + UndoGliderLimbo(&theGlider2); // turn off limbo if needed + ReadyGliderFromTransit(&theGlider, linkedToWhat); + ReadyGliderFromTransit(&theGlider2, linkedToWhat); + } + else + ReadyGliderFromTransit(thisGlider, linkedToWhat); + + if (!sameRoom) + ReadyLevel(); + RefreshScoreboard(kNormalTitleMode); + if (!sameRoom) + WipeScreenOn(kAbove, &justRoomsRect); + +#ifdef COMPILEQT + RenderFrame(); + if ((thisMac.hasQT) && (hasMovie) && (tvInRoom) && (tvOn)) + { + GoToBeginningOfMovie(theMovie); + StartMovie(theMovie); + } +#endif +} + +//-------------------------------------------------------------- MoveDuctToDuct + +void MoveDuctToDuct (gliderPtr thisGlider) +{ + Boolean sameRoom; + + SetMusicalMode(kKickGameScoreMode); + HandleRoomVisitation(); + + sameRoom = (transRoom == thisRoomNumber); + if (!sameRoom) + ForceThisRoom(transRoom); + + if (twoPlayerGame) + { + UndoGliderLimbo(&theGlider); // turn off limbo if needed + UndoGliderLimbo(&theGlider2); // turn off limbo if needed + ReadyGliderFromTransit(&theGlider, linkedToWhat); + ReadyGliderFromTransit(&theGlider2, linkedToWhat); + } + else + ReadyGliderFromTransit(thisGlider, linkedToWhat); + + if (!sameRoom) + ReadyLevel(); + RefreshScoreboard(kNormalTitleMode); + if (!sameRoom) + WipeScreenOn(kAbove, &justRoomsRect); + +#ifdef COMPILEQT + RenderFrame(); + if ((thisMac.hasQT) && (hasMovie) && (tvInRoom) && (tvOn)) + { + GoToBeginningOfMovie(theMovie); + StartMovie(theMovie); + } +#endif +} + +//-------------------------------------------------------------- MoveMailToMail + +void MoveMailToMail (gliderPtr thisGlider) +{ + Boolean sameRoom; + + SetMusicalMode(kKickGameScoreMode); + HandleRoomVisitation(); + + sameRoom = (transRoom == thisRoomNumber); + if (!sameRoom) + ForceThisRoom(transRoom); + + if (twoPlayerGame) + { + UndoGliderLimbo(&theGlider); // turn off limbo if needed + UndoGliderLimbo(&theGlider2); // turn off limbo if needed + ReadyGliderFromTransit(&theGlider, linkedToWhat); + ReadyGliderFromTransit(&theGlider2, linkedToWhat); + } + else + ReadyGliderFromTransit(thisGlider, linkedToWhat); + + if (!sameRoom) + ReadyLevel(); + RefreshScoreboard(kNormalTitleMode); + if (!sameRoom) + WipeScreenOn(kAbove, &justRoomsRect); + +#ifdef COMPILEQT + RenderFrame(); + if ((thisMac.hasQT) && (hasMovie) && (tvInRoom) && (tvOn)) + { + GoToBeginningOfMovie(theMovie); + StartMovie(theMovie); + } +#endif +} + +//-------------------------------------------------------------- HandleRoomVisitation + +void HandleRoomVisitation (void) +{ + houseType *thisHousePtr; + char wasState; + + if (!thisRoom->visited) + { + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + thisHousePtr = *thisHouse; + thisHousePtr->rooms[localNumbers[kCentralRoom]].visited = true; + HSetState((Handle)thisHouse, wasState); + theScore += kRoomVisitScore; + thisRoom->visited = true; + } +} + +//-------------------------------------------------------------- ForceKillGlider + +void ForceKillGlider (void) +{ + if (theGlider.mode == kGliderInLimbo) + { + if (theGlider2.mode != kGliderFadingOut) + { + StartGliderFadingOut(&theGlider2); + PlayPrioritySound(kFadeOutSound, kFadeOutPriority); + playerSuicide = true; + } + } + else if (theGlider2.mode == kGliderInLimbo) + { + if (theGlider.mode != kGliderFadingOut) + { + StartGliderFadingOut(&theGlider); + PlayPrioritySound(kFadeOutSound, kFadeOutPriority); + playerSuicide = true; + } + } +} + +//-------------------------------------------------------------- FollowTheLeader + +void FollowTheLeader (void) +{ + short wasEscaped; + Boolean oneOrTwo; + + playerSuicide = false; + wasEscaped = otherPlayerEscaped; + otherPlayerEscaped = kNoOneEscaped; + + if (theGlider.mode == kGliderInLimbo) + { + oneOrTwo = true; + theGlider2.dest = theGlider.dest; + theGlider2.destShadow = theGlider.destShadow; + theGlider2.whole = theGlider2.dest; + theGlider2.wholeShadow = theGlider2.destShadow; + } + else if (theGlider2.mode == kGliderInLimbo) + { + oneOrTwo = false; + theGlider.dest = theGlider2.dest; + theGlider.destShadow = theGlider2.destShadow; + theGlider.whole = theGlider.dest; + theGlider.wholeShadow = theGlider.destShadow; + } + + switch (wasEscaped) + { + case kPlayerEscapedUp: + case kPlayerEscapingUpStairs: + case kPlayerEscapedUpStairs: + if (oneOrTwo) + MoveRoomToRoom(&theGlider2, kAbove); + else + MoveRoomToRoom(&theGlider, kAbove); + break; + + case kPlayerEscapedDown: + case kPlayerEscapingDownStairs: + case kPlayerEscapedDownStairs: + if (oneOrTwo) + MoveRoomToRoom(&theGlider2, kBelow); + else + MoveRoomToRoom(&theGlider, kBelow); + break; + + case kPlayerEscapedLeft: + if (oneOrTwo) + MoveRoomToRoom(&theGlider2, kToLeft); + else + MoveRoomToRoom(&theGlider, kToLeft); + break; + + case kPlayerEscapedRight: + if (oneOrTwo) + MoveRoomToRoom(&theGlider2, kToRight); + else + MoveRoomToRoom(&theGlider, kToRight); + break; + + case kPlayerTransportedOut: + if (oneOrTwo) + TransportRoomToRoom(&theGlider2); + else + TransportRoomToRoom(&theGlider); + break; + + case kPlayerMailedOut: + if (oneOrTwo) + MoveMailToMail(&theGlider2); + else + MoveMailToMail(&theGlider); + break; + + case kPlayerDuckedOut: + if (oneOrTwo) + MoveDuctToDuct(&theGlider2); + else + MoveDuctToDuct(&theGlider); + break; + + default: + break; + } +} + diff --git a/GpApp/Transitions.cpp b/GpApp/Transitions.cpp new file mode 100644 index 0000000..927a7e4 --- /dev/null +++ b/GpApp/Transitions.cpp @@ -0,0 +1,145 @@ + +//============================================================================ +//---------------------------------------------------------------------------- +// Transitions.c +//---------------------------------------------------------------------------- +//============================================================================ + + +#include "Externs.h" +#include "Environ.h" +#include "MainWindow.h" +#include "RectUtils.h" + + +//============================================================== Functions +//-------------------------------------------------------------- PourScreenOn + +void PourScreenOn (Rect *theRect) +{ + #define kMaxColumnsWide 96 + #define kChipHigh 20 + #define kChipWide 16 + Rect columnRects[kMaxColumnsWide]; + short columnProgress[kMaxColumnsWide]; + short i, colsComplete, colWide, rowTall; + Boolean working; + + colWide = theRect->right / kChipWide; // determine # of cols + rowTall = (theRect->bottom / kChipHigh) + 1; // determine # of rows + + working = true; + colsComplete = 0; + for (i = 0; i < colWide; i++) + { + columnProgress[i] = 0; + QSetRect(&columnRects[i], 0, 0, kChipWide, kChipHigh); + QOffsetRect(&columnRects[i], (i * kChipWide) + theRect->left, theRect->top); + } + + while (working) + { + do + { + i = RandomInt(colWide); + } + while (columnProgress[i] >= rowTall); + + if (columnRects[i].left < theRect->left) + columnRects[i].left = theRect->left; + if (columnRects[i].top < theRect->top) + columnRects[i].top = theRect->top; + if (columnRects[i].right > theRect->right) + columnRects[i].right = theRect->right; + if (columnRects[i].bottom > theRect->bottom) + columnRects[i].bottom = theRect->bottom; + + CopyBits((BitMap *)*GetGWorldPixMap(workSrcMap), + GetPortBitMapForCopyBits(GetWindowPort(mainWindow)), + &columnRects[i], &columnRects[i], srcCopy, nil); + + QOffsetRect(&columnRects[i], 0, kChipHigh); + columnProgress[i]++; + if (columnProgress[i] >= rowTall) + { + colsComplete++; + if (colsComplete >= colWide) + working = false; + } + } +} + +//-------------------------------------------------------------- WipeScreenOn + +void WipeScreenOn (short direction, Rect *theRect) +{ + #define kWipeRectThick 4 + Rect wipeRect; + RgnHandle dummyRgn; + short hOffset, vOffset; + short i, count; + + wipeRect = *theRect; + switch (direction) + { + case kAbove: + wipeRect.bottom = wipeRect.top + kWipeRectThick; + hOffset = 0; + vOffset = kWipeRectThick; + count = ((theRect->bottom - theRect->top) / kWipeRectThick) + 1; + break; + + case kToRight: + wipeRect.left = wipeRect.right - kWipeRectThick; + hOffset = -kWipeRectThick; + vOffset = 0; + count = workSrcRect.right / kWipeRectThick; + break; + + case kBelow: + wipeRect.top = wipeRect.bottom - kWipeRectThick; + hOffset = 0; + vOffset = -kWipeRectThick; + count = ((theRect->bottom - theRect->top) / kWipeRectThick) + 1; + break; + + case kToLeft: + wipeRect.right = wipeRect.left + kWipeRectThick; + hOffset = kWipeRectThick; + vOffset = 0; + count = workSrcRect.right / kWipeRectThick; + break; + } + + dummyRgn = NewRgn(); + + for (i = 0; i < count; i++) + { + CopyBits((BitMap *)*GetGWorldPixMap(workSrcMap), + GetPortBitMapForCopyBits(GetWindowPort(mainWindow)), + &wipeRect, &wipeRect, srcCopy, GetPortVisibleRegion(GetWindowPort(mainWindow), dummyRgn)); + + QOffsetRect(&wipeRect, hOffset, vOffset); + + if (wipeRect.top < theRect->top) + wipeRect.top = theRect->top; + else if (wipeRect.top > theRect->bottom) + wipeRect.top = theRect->bottom; + if (wipeRect.bottom < theRect->top) + wipeRect.bottom = theRect->top; + else if (wipeRect.bottom > theRect->bottom) + wipeRect.bottom = theRect->bottom; + } + + DisposeRgn(dummyRgn); +} + +//-------------------------------------------------------------- DumpScreenOn + +void DumpScreenOn (Rect *theRect) +{ + CopyBits((BitMap *)*GetGWorldPixMap(workSrcMap), + GetPortBitMapForCopyBits(GetWindowPort(mainWindow)), + theRect, theRect, srcCopy, nil); +} + diff --git a/GpApp/Triggers.cpp b/GpApp/Triggers.cpp new file mode 100644 index 0000000..77238e2 --- /dev/null +++ b/GpApp/Triggers.cpp @@ -0,0 +1,205 @@ + +//============================================================================ +//---------------------------------------------------------------------------- +// Triggers.c +//---------------------------------------------------------------------------- +//============================================================================ + + +#include "Externs.h" + + +#define kMaxTriggers 16 + + +typedef struct +{ + short object, room; + short index, timer; + short what; + Boolean armed; +} trigType, *trigPtr; + + +short FindEmptyTriggerSlot (void); +void FireTrigger (short); + + +trigType triggers[kMaxTriggers]; + + +//============================================================== Functions +//-------------------------------------------------------------- ArmTrigger + +void ArmTrigger (hotPtr who) +{ + short where, whoLinked; + + if (who->stillOver) + return; + + where = FindEmptyTriggerSlot(); + + if (where != -1) + { + whoLinked = who->who; // what is trigger's obj. # + triggers[where].room = masterObjects[whoLinked].roomLink; + triggers[where].object = masterObjects[whoLinked].objectLink; + triggers[where].index = whoLinked; + triggers[where].timer = masterObjects[whoLinked].theObject.data.e.delay * 3; + triggers[where].what = masterObjects[triggers[where].object].theObject.what; + triggers[where].armed = true; + } + + who->stillOver = true; +} + +//-------------------------------------------------------------- FindEmptyTriggerSlot + +short FindEmptyTriggerSlot (void) +{ + short where, i; + + where = -1; + + for (i = 0; i < kMaxTriggers; i++) + { + if (!triggers[i].armed) + { + where = i; + break; + } + } + + return (where); +} + +//-------------------------------------------------------------- HandleTriggers + +void HandleTriggers (void) +{ + short i; + + for (i = 0; i < kMaxTriggers; i++) + { + if (triggers[i].armed) + { + triggers[i].timer--; + if (triggers[i].timer <= 0) + { + triggers[i].timer = 0; + triggers[i].armed = false; + FireTrigger(i); + } + } + } +} + +//-------------------------------------------------------------- FireTrigger + +void FireTrigger (short index) +{ + short triggerIs, triggeredIs; + char wasState; + + triggerIs = triggers[index].index; + + if (masterObjects[triggerIs].localLink != -1) + { + triggeredIs = masterObjects[triggerIs].localLink; + switch (masterObjects[triggeredIs].theObject.what) + { + case kGreaseRt: + case kGreaseLf: + if (SetObjectState(triggers[index].room, triggers[index].object, + kForceOn, triggeredIs)) + { + SpillGrease(masterObjects[triggeredIs].dynaNum, + masterObjects[triggeredIs].hotNum); + } + break; + + case kLightSwitch: + case kMachineSwitch: + case kThermostat: + case kPowerSwitch: + case kKnifeSwitch: + case kInvisSwitch: + TriggerSwitch(masterObjects[triggeredIs].dynaNum); + break; + + case kSoundTrigger: + PlayPrioritySound(kChordSound, kChordPriority); // Change me + break; + + case kToaster: + TriggerToast(masterObjects[triggeredIs].dynaNum); + break; + + case kGuitar: + PlayPrioritySound(kChordSound, kChordPriority); + break; + + case kCoffee: + PlayPrioritySound(kCoffeeSound, kCoffeePriority); + break; + + case kOutlet: + TriggerOutlet(masterObjects[triggeredIs].dynaNum); + break; + + case kBalloon: + TriggerBalloon(masterObjects[triggeredIs].dynaNum); + break; + + case kCopterLf: + case kCopterRt: + TriggerCopter(masterObjects[triggeredIs].dynaNum); + break; + + case kDartLf: + case kDartRt: + TriggerDart(masterObjects[triggeredIs].dynaNum); + break; + + case kDrip: + TriggerDrip(masterObjects[triggeredIs].dynaNum); + break; + + case kFish: + TriggerFish(masterObjects[triggeredIs].dynaNum); + break; + } + } + else + { + wasState = HGetState((Handle)thisHouse); + HLock((Handle)thisHouse); + triggeredIs = masterObjects[triggerIs].localLink; + switch ((*thisHouse)->rooms[triggers[index].room]. + objects[triggers[index].object].what) + { + case kGreaseRt: + case kGreaseLf: + if (SetObjectState(triggers[index].room, triggers[index].object, + kForceOn, triggeredIs)) + { + SpillGrease(masterObjects[triggeredIs].dynaNum, + masterObjects[triggeredIs].hotNum); + } + break; + } + HSetState((Handle)thisHouse, wasState); + } +} + +//-------------------------------------------------------------- ZeroTriggers + +void ZeroTriggers (void) +{ + short i; + + for (i = 0; i < kMaxTriggers; i++) + triggers[i].armed = false; +} + diff --git a/GpApp/Trip.cpp b/GpApp/Trip.cpp new file mode 100644 index 0000000..08134a2 --- /dev/null +++ b/GpApp/Trip.cpp @@ -0,0 +1,245 @@ + +//============================================================================ +//---------------------------------------------------------------------------- +// Trip.c +//---------------------------------------------------------------------------- +//============================================================================ + + +#include "Externs.h" +#include "Environ.h" + + +extern dynaPtr dinahs; +extern hotPtr hotSpots; +extern short numDynamics, tvWithMovieNumber; +extern Boolean tvOn; + + +//============================================================== Functions +//-------------------------------------------------------------- ToggleToaster + +void ToggleToaster (short index) +{ + dinahs[index].active = !dinahs[index].active; +} + +//-------------------------------------------------------------- ToggleMacPlus + +void ToggleMacPlus (short index) +{ + dinahs[index].active = !dinahs[index].active; + if (dinahs[index].active) + dinahs[index].timer = 40; + else + dinahs[index].timer = 10; +} + +//-------------------------------------------------------------- ToggleTV + +void ToggleTV (short index) +{ + dinahs[index].active = !dinahs[index].active; + if ((thisMac.hasQT) && (hasMovie) && (tvInRoom) && (tvWithMovieNumber == index)) + { + if (dinahs[index].active) + { + GoToBeginningOfMovie(theMovie); + StartMovie(theMovie); + tvOn = true; + } + else + { + StopMovie(theMovie); + tvOn = false; + } + } + dinahs[index].timer = 4; +} + +//-------------------------------------------------------------- ToggleCoffee + +void ToggleCoffee (short index) +{ + dinahs[index].active = !dinahs[index].active; + dinahs[index].timer = 4; +} + +//-------------------------------------------------------------- ToggleOutlet + +void ToggleOutlet (short index) +{ + dinahs[index].active = !dinahs[index].active; +} + +//-------------------------------------------------------------- ToggleVCR + +void ToggleVCR (short index) +{ + dinahs[index].active = !dinahs[index].active; + dinahs[index].timer = 4; +} + +//-------------------------------------------------------------- ToggleStereo + +void ToggleStereos (short index) +{ + if (dinahs[index].timer == 0) + { + dinahs[index].active = !dinahs[index].active; + dinahs[index].timer = 4; + } +} + +//-------------------------------------------------------------- ToggleMicrowave + +void ToggleMicrowave (short index) +{ + dinahs[index].active = !dinahs[index].active; + dinahs[index].timer = 4; +} + +//-------------------------------------------------------------- ToggleBalloon + +void ToggleBalloon (short index) +{ + dinahs[index].active = !dinahs[index].active; +} + +//-------------------------------------------------------------- ToggleCopter + +void ToggleCopter (short index) +{ + dinahs[index].active = !dinahs[index].active; +} + +//-------------------------------------------------------------- ToggleDart + +void ToggleDart (short index) +{ + dinahs[index].active = !dinahs[index].active; +} + +//-------------------------------------------------------------- ToggleBall + +void ToggleBall (short index) +{ + dinahs[index].active = !dinahs[index].active; +} + +//-------------------------------------------------------------- ToggleDrip + +void ToggleDrip (short index) +{ + dinahs[index].active = !dinahs[index].active; +} + +//-------------------------------------------------------------- ToggleFish + +void ToggleFish (short index) +{ + dinahs[index].active = !dinahs[index].active; +} + +//-------------------------------------------------------------- TriggerSwitch + +void TriggerSwitch (short who) +{ + HandleSwitches(&hotSpots[who]); +} + +//-------------------------------------------------------------- TriggerToast + +void TriggerToast (short who) +{ + if (!dinahs[who].moving) + { + if (dinahs[who].active) + { + dinahs[who].vVel = (short)-dinahs[who].count; + dinahs[who].frame = 0; + dinahs[who].moving = true; + PlayPrioritySound(kToastLaunchSound, kToastLaunchPriority); + } + else + dinahs[who].frame = dinahs[who].timer; + } +} + +//-------------------------------------------------------------- TriggerOutlet + +void TriggerOutlet (short who) +{ + if (dinahs[who].position == 0) + { + if (dinahs[who].active) + { + dinahs[who].position = 1; + dinahs[who].timer = kLengthOfZap; + PlayPrioritySound(kZapSound, kZapPriority); + } + else + dinahs[who].timer = dinahs[who].count; + } +} + +//-------------------------------------------------------------- TriggerDrip + +void TriggerDrip (short who) +{ + if ((!dinahs[who].moving) && (dinahs[who].timer > 7)) + dinahs[who].timer = 7; // kick off drip +} + +//-------------------------------------------------------------- TriggerFish + +void TriggerFish (short who) +{ + if ((dinahs[who].active) && (!dinahs[who].moving)) + { + dinahs[who].whole = dinahs[who].dest; + dinahs[who].moving = true; + dinahs[who].frame = 4; + PlayPrioritySound(kFishOutSound, kFishOutPriority); + } +} + +//-------------------------------------------------------------- TriggerBalloon + +void TriggerBalloon (short who) +{ + if (!dinahs[who].moving) + dinahs[who].timer = kStartSparkle + 1; +} + + +//-------------------------------------------------------------- TriggerCopter + +void TriggerCopter (short who) +{ + if (!dinahs[who].moving) + dinahs[who].timer = kStartSparkle + 1; +} + + +//-------------------------------------------------------------- TriggerDart + +void TriggerDart (short who) +{ + if (!dinahs[who].moving) + dinahs[who].timer = kStartSparkle + 1; +} + +//-------------------------------------------------------------- UpdateOutletsLighting + +void UpdateOutletsLighting (short room, short nLights) +{ + short i; + + for (i = 0; i < numDynamics; i++) + { + if ((dinahs[i].type == kOutlet) && (dinahs[i].room == room)) + dinahs[i].hVel = nLights; + } +} + diff --git a/GpApp/Utilities.cpp b/GpApp/Utilities.cpp new file mode 100644 index 0000000..a05bf67 --- /dev/null +++ b/GpApp/Utilities.cpp @@ -0,0 +1,763 @@ +//============================================================================ +//---------------------------------------------------------------------------- +// Utilities.c +//---------------------------------------------------------------------------- +//============================================================================ + +#include "PLQuickdraw.h" +#include "PLPasStr.h" +#include "PLResources.h" +#include "PLSound.h" +#include "Externs.h" +#include "Utilities.h" + + +GDHandle thisGDevice; +UInt32 theSeed; + + +extern Boolean switchedOut; + + +//============================================================== Functions +//-------------------------------------------------------------- MyGetGlobalMouse +// Returns the position of the mouse in global coordinates. + +Point MyGetGlobalMouse (void) +{ + Point localWhere; + + GetMouse(&localWhere); + LocalToGlobal(&localWhere); + return (localWhere); +} + +//-------------------------------------------------------------- ToolBoxInit + +// The standard ToolBox intialization that must happen when any MacÉ +// program first launches. + +void ToolBoxInit (void) +{ + InitCursor(); + switchedOut = false; +} + +//-------------------------------------------------------------- RandomInt +// Returns a random integer (short) within "range". + +short RandomInt (short range) +{ + register long rawResult; + + rawResult = Random(); + if (rawResult < 0L) + rawResult *= -1L; + rawResult = (rawResult * (long)range) / 32768L; + + return ((short)rawResult); +} + +//-------------------------------------------------------------- RandomLong + +// Returns a random long interger within "range". + +long RandomLong (long range) +{ + register long highWord, lowWord; + register long rawResultHi, rawResultLo; + + highWord = (range & 0xFFFF0000) >> 16; + lowWord = range & 0x0000FFFF; + + rawResultHi = Random(); + if (rawResultHi < 0L) + rawResultHi *= -1L; + rawResultHi = (rawResultHi * highWord) / 32768L; + + rawResultLo = Random(); + if (rawResultLo < 0L) + rawResultLo *= -1L; + rawResultLo = (rawResultLo * lowWord) / 32768L; + + rawResultHi = (rawResultHi << 16) + rawResultLo; + + return (rawResultHi); +} + +//-------------------------------------------------------------- InitRandomLongQUS + +// Initializes random seed for quick & dirty long random number function (below). + +void InitRandomLongQUS (void) +{ + GetDateTime(&theSeed); +} + +//-------------------------------------------------------------- RandomLongQUS + +// Very simple (but fast) pseudo-random number generator. + +UInt32 RandomLongQUS (void) +{ + theSeed = theSeed * 1103515245 + 12345; + return (theSeed); +} + +//-------------------------------------------------------------- RedAlert + +// Called when we must quit app. Brings up a dialog informing userÉ +// of the problem and the exits to shell. + +void RedAlert (short errorNumber) +{ + #define rDeathAlertID 170 // alert res. ID for death error + #define rErrTitleID 170 // string ID for death error title + #define rErrMssgID 171 // string ID for death error message + short dummyInt; + Str255 errTitle, errMessage, errNumberString; + + InitCursor(); + + if (errorNumber > 1) // <= 0 is unaccounted for + { + GetIndString(errTitle, rErrTitleID, errorNumber); + GetIndString(errMessage, rErrMssgID, errorNumber); + } + else + { + GetIndString(errTitle, rErrTitleID, 1); + GetIndString(errMessage, rErrMssgID, 1); + } + NumToString((long)errorNumber, errNumberString); + ParamText(errTitle, errMessage, errNumberString, PSTR("")); +// CenterAlert(rDeathAlertID); + + dummyInt = Alert(rDeathAlertID, nil); + ExitToShell(); +} + +//-------------------------------------------------------------- FindOurDevice + +// Finds the main device (monitor with the menu bar on it). + +void FindOurDevice (void) +{ + thisGDevice = GetMainDevice(); + if (thisGDevice == nil) + RedAlert(kErrFailedGetDevice); +} + +//-------------------------------------------------------------- CreateOffScreenBitMap +// Creates an offscreen bit map (b&w - 1 bit depth). + +/* +void CreateOffScreenBitMap (Rect *theRect, GrafPtr *offScreen) +{ + GrafPtr theBWPort; + BitMap theBitMap; + long theRowBytes; + + theBWPort = (GrafPtr)(NewPtr(sizeof(GrafPort))); + OpenPort(theBWPort); + theRowBytes = (long)((theRect->right - theRect->left + 15L) / 16L) * 2L; + theBitMap.rowBytes = (short)theRowBytes; + theBitMap.baseAddr = NewPtr((long)theBitMap.rowBytes * + (theRect->bottom - theRect->top)); + if (theBitMap.baseAddr == nil) + RedAlert(kErrNoMemory); + theBitMap.bounds = *theRect; + if (MemError() != noErr) + RedAlert(kErrNoMemory); + SetPortBits(&theBitMap); + ClipRect(theRect); + RectRgn(theBWPort->visRgn, theRect); + EraseRect(theRect); + *offScreen = theBWPort; +} +*/ +//-------------------------------------------------------------- CreateOffScreenPixMap +// Creates an offscreen pix map using the depth of the current device. +/* +void CreateOffScreenPixMap (Rect *theRect, CGrafPtr *offScreen) +{ + CTabHandle thisColorTable; + GDHandle oldDevice; + CGrafPtr newCGrafPtr; + Ptr theseBits; + long sizeOfOff, offRowBytes; + OSErr theErr; + short thisDepth; + char wasState; + + oldDevice = GetGDevice(); + SetGDevice(thisGDevice); + newCGrafPtr = nil; + newCGrafPtr = (CGrafPtr)NewPtr(sizeof(CGrafPort)); + if (newCGrafPtr != nil) + { + OpenCPort(newCGrafPtr); + thisDepth = (**(*newCGrafPtr).portPixMap).pixelSize; + offRowBytes = ((((long)thisDepth * + (long)(theRect->right - theRect->left)) + 15L) >> 4L) << 1L; + sizeOfOff = (long)(theRect->bottom - theRect->top + 1) * offRowBytes; + // sizeOfOff = (long)(theRect->bottom - theRect->top) * offRowBytes; + OffsetRect(theRect, -theRect->left, -theRect->top); + theseBits = NewPtr(sizeOfOff); + if (theseBits != nil) + { // workaround + (**(*newCGrafPtr).portPixMap).baseAddr = theseBits + offRowBytes; + // (**(*newCGrafPtr).portPixMap).baseAddr = theseBits; + (**(*newCGrafPtr).portPixMap).rowBytes = (short)offRowBytes + 0x8000; + (**(*newCGrafPtr).portPixMap).bounds = *theRect; + wasState = HGetState((Handle)thisGDevice); + HLock((Handle)thisGDevice); + thisColorTable = (**(**thisGDevice).gdPMap).pmTable; + HSetState((Handle)thisGDevice, wasState); + theErr = HandToHand((Handle *)&thisColorTable); + (**(*newCGrafPtr).portPixMap).pmTable = thisColorTable; + ClipRect(theRect); + RectRgn(newCGrafPtr->visRgn, theRect); + ForeColor(blackColor); + BackColor(whiteColor); + EraseRect(theRect); + } + else + { + CloseCPort(newCGrafPtr); + DisposePtr((Ptr)newCGrafPtr); + newCGrafPtr = nil; + RedAlert(kErrNoMemory); + } + } + else + RedAlert(kErrNoMemory); + + *offScreen = newCGrafPtr; + SetGDevice(oldDevice); +} +*/ +//-------------------------------------------------------------------- CreateOffScreenGWorld +// Creates an offscreen GWorldÊusing the depth passed in. + +OSErr CreateOffScreenGWorld (GWorldPtr *theGWorld, Rect *bounds, short depth) +{ + OSErr theErr; + + theErr = NewGWorld(theGWorld, depth, bounds, nil, nil, useTempMem); + + if (theErr) + theErr = NewGWorld(theGWorld, depth, bounds, nil, nil, 0); + + LockPixels(GetGWorldPixMap(*theGWorld)); + + return theErr; +} + + +//-------------------------------------------------------------- KillOffScreenPixMap +// Destroys memory allocated by an offscreen pix map. +/* +void KillOffScreenPixMap (CGrafPtr offScreen) +{ + Ptr theseBits; + + if (offScreen != nil) + { + theseBits = (**(*offScreen).portPixMap).baseAddr; + theseBits -= (**(*offScreen).portPixMap).rowBytes & 0x7FFF; // workaround + DisposePtr(theseBits); + DisposeHandle((Handle)(**(*offScreen).portPixMap).pmTable); + CloseCPort(offScreen); + DisposePtr((Ptr)offScreen); + } +} +*/ +//-------------------------------------------------------------- KillOffScreenBitMap +// Destroys memory allocated by an offscreen bit map. +/* +void KillOffScreenBitMap (GrafPtr offScreen) +{ + if (offScreen != nil) + { + DisposePtr((Ptr)(offScreen->portBits.baseAddr)); + ClosePort(offScreen); + DisposePtr((Ptr)offScreen); + } +} +*/ +//-------------------------------------------------------------- LoadGraphic +// Function loads the specified 'PICT' from disk and draws it toÉ +// the current port (no scaling, clipping, etc, are done). AlwaysÉ +// draws in the upper left corner of current port. + +void LoadGraphic (short resID) +{ + Rect bounds; + PicHandle thePicture; + + thePicture = GetPicture(resID); + if (thePicture == nil) + RedAlert(kErrFailedGraphicLoad); + + HLock((Handle)thePicture); + bounds = (*thePicture)->picFrame; + HUnlock((Handle)thePicture); + OffsetRect(&bounds, -bounds.left, -bounds.top); + DrawPicture(thePicture, &bounds); + + ReleaseResource((Handle)thePicture); +} + +//-------------------------------------------------------------- LoadScaledGraphic +// Loads the specified 'PICT' and draws it mapped to the rectangleÉ +// specified. If this rect isn't the same size of the 'PICT', scalingÉ +// will occur. + +void LoadScaledGraphic (short resID, Rect *theRect) +{ + PicHandle thePicture; + + thePicture = GetPicture(resID); + if (thePicture == nil) + RedAlert(kErrFailedGraphicLoad); + DrawPicture(thePicture, theRect); + ReleaseResource((Handle)thePicture); +} + +//-------------------------------------------------------------- PlotSICN +// Draws a small icon (16 x 16 pixels). +/* +void PlotSICN (Rect *theRect, SICNHand theSICN, long theIndex) +{ + char state; + BitMap srcBits; + + if ((theSICN != nil) && + ((GetHandleSize((Handle)theSICN) / sizeof(SICN)) > theIndex)) + { + state = HGetState((Handle)theSICN); + HLock((Handle)theSICN); + + srcBits.baseAddr = (Ptr)(*theSICN)[theIndex]; + srcBits.rowBytes = 2; + SetRect(&srcBits.bounds, 0, 0, 16, 16); + + CopyBits(&srcBits,&(*qd.thePort).portBits, + &srcBits.bounds, theRect, srcCopy, nil); + + HSetState((Handle) theSICN, state); + } +} +*/ +//-------------------------------------------------------------- LargeIconPlot +// Draws a standard b&w icon (32 x 32) - resource is an 'ICON'. + +void LargeIconPlot (Rect *theRect, short theID) +{ + OSErr theErr; + Handle theSuite; + + theErr = GetIconSuite(&theSuite, theID, svAllLargeData); + if (theErr == noErr) + theErr = PlotIconSuite(theRect, atNone, ttNone, theSuite); +} + +//-------------------------------------------------------------- DrawCIcon + +// Draws a standard color icon (32 x 32) - resource is a 'CICN'. + +void DrawCIcon (short theID, short h, short v) +{ + CIconHandle theIcon; + Rect theRect; + + theIcon = GetCIcon(theID); + if (theIcon != nil) + { + SetRect(&theRect, 0, 0, 32, 32); + OffsetRect(&theRect, h, v); + PlotCIcon(&theRect, theIcon); + DisposeCIcon(theIcon); + } +} + +//-------------------------------------------------------------- LongSquareRoot + +// This is a quick and dirty square root function that returns prettyÉ +// accurate long integer results. It uses no transcendental functions orÉ +// floating point. + +long LongSquareRoot (long theNumber) +{ + long currentAnswer; + long nextTrial; + + if (theNumber <= 1L) + return (theNumber); + + nextTrial = theNumber / 2; + + do + { + currentAnswer = nextTrial; + nextTrial = (nextTrial + theNumber / nextTrial) / 2; + } + while (nextTrial < currentAnswer); + + return(currentAnswer); +} + +//-------------------------------------------------------------- WaitForInputEvent + +// Wait for either a key to be hit or the mouse button to be clicked. +// Also has a "timeout" parameter ("seconds"). + +Boolean WaitForInputEvent (short seconds) +{ + EventRecord theEvent; + KeyMap theKeys; + long timeToBail; + Boolean waiting, didResume; + + timeToBail = TickCount() + 60L * (long)seconds; + FlushEvents(everyEvent, 0); + waiting = true; + didResume = false; + + while (waiting) + { + GetKeys(theKeys); + if ((BitTst(&theKeys, kCommandKeyMap)) || (BitTst(&theKeys, kOptionKeyMap)) || + (BitTst(&theKeys, kShiftKeyMap)) || (BitTst(&theKeys, kControlKeyMap))) + waiting = false; + if (GetNextEvent(everyEvent, &theEvent)) + { + if ((theEvent.what == mouseDown) || (theEvent.what == keyDown)) + waiting = false; + else if ((theEvent.what == osEvt) && (theEvent.message & 0x01000000)) + { + if (theEvent.message & 0x00000001) // resuming + { + didResume = true; + waiting = false; + } + else // suspending + { + InitCursor(); + } + } + } + if ((seconds != -1) && (TickCount() >= timeToBail)) + waiting = false; + } + FlushEvents(everyEvent, 0); + return (didResume); +} + +//-------------------------------------------------------------- WaitCommandQReleased + +// Waits until the Command-Q key combination is released. + +void WaitCommandQReleased (void) +{ + KeyMap theKeys; + Boolean waiting; + + waiting = true; + + while (waiting) + { + GetKeys(theKeys); + if ((!BitTst(&theKeys, kCommandKeyMap)) || (!BitTst(&theKeys, kQKeyMap))) + waiting = false; + } + FlushEvents(everyEvent, 0); +} + +//-------------------------------------------------------------- KeyMapOffsetFromRawKey +// Converts a raw key code to keymap offset (ugly stuff). + +char KeyMapOffsetFromRawKey (char rawKeyCode) +{ + char hiByte, loByte, theOffset; + + hiByte = rawKeyCode & 0xF0; + loByte = rawKeyCode & 0x0F; + + if (loByte <= 0x07) + theOffset = hiByte + (0x07 - loByte); + else + theOffset = hiByte + (0x17 - loByte); + + return (theOffset); +} + +//-------------------------------------------------------------- GetKeyMapFromMessage +// Gets the key map offset from a keyDown event's message field. + +char GetKeyMapFromMessage (intptr_t message) +{ + long theVirtual; + char offset; + + theVirtual = (message & keyCodeMask) >> 8; + offset = KeyMapOffsetFromRawKey((char)theVirtual); + return (offset); +} + +//-------------------------------------------------------------- GetKeyName +// Given a keyDown event (it's message field), this function returnsÉ +// a string with that key's name (so we get "Shift" and "Esc", etc.). + +void GetKeyName (intptr_t message, StringPtr theName) +{ + long theASCII, theVirtual; + + theASCII = message & charCodeMask; + theVirtual = (message & keyCodeMask) >> 8; + + if ((theASCII >= kExclamationASCII) && (theASCII <= kZKeyASCII)) + { + + if ((theVirtual >= 0x0041) && (theVirtual <= 0x005C)) + { + PasStringCopy(PSTR("( )"), theName); + theName[2] = (char)theASCII; + } + else + { + PasStringCopy(PSTR(" key"), theName); + theName[1] = (char)theASCII; + } + } + else + { + switch (theASCII) + { + case kHomeKeyASCII: + PasStringCopy(PSTR("home"), theName); + break; + + case kEnterKeyASCII: + PasStringCopy(PSTR("enter"), theName); + break; + + case kEndKeyASCII: + PasStringCopy(PSTR("end"), theName); + break; + + case kHelpKeyASCII: + PasStringCopy(PSTR("help"), theName); + break; + + case kDeleteKeyASCII: + PasStringCopy(PSTR("delete"), theName); + break; + + case kTabKeyASCII: + PasStringCopy(PSTR("tab"), theName); + break; + + case kPageUpKeyASCII: + PasStringCopy(PSTR("pg up"), theName); + break; + + case kPageDownKeyASCII: + PasStringCopy(PSTR("pg dn"), theName); + break; + + case kReturnKeyASCII: + PasStringCopy(PSTR("return"), theName); + break; + + case kFunctionKeyASCII: + switch (theVirtual) + { + case 0x0060: + PasStringCopy(PSTR("F5"), theName); + break; + case 0x0061: + PasStringCopy(PSTR("F6"), theName); + break; + case 0x0062: + PasStringCopy(PSTR("F7"), theName); + break; + case 0x0063: + PasStringCopy(PSTR("F3"), theName); + break; + case 0x0064: + PasStringCopy(PSTR("F8"), theName); + break; + case 0x0065: + PasStringCopy(PSTR("F9"), theName); + break; + case 0x0067: + PasStringCopy(PSTR("F11"), theName); + break; + case 0x0069: + PasStringCopy(PSTR("F13"), theName); + break; + case 0x006B: + PasStringCopy(PSTR("F14"), theName); + break; + case 0x006D: + PasStringCopy(PSTR("F10"), theName); + break; + case 0x006F: + PasStringCopy(PSTR("F12"), theName); + break; + case 0x0071: + PasStringCopy(PSTR("F15"), theName); + break; + case 0x0076: + PasStringCopy(PSTR("F4"), theName); + break; + case 0x0078: + PasStringCopy(PSTR("F2"), theName); + break; + case 0x007A: + PasStringCopy(PSTR("F1"), theName); + break; + default: + NumToString(theVirtual, theName); + break; + } + break; + + case kClearKeyASCII: + PasStringCopy(PSTR("clear"), theName); + break; + + case kEscapeKeyASCII: + if (theVirtual == 0x0047) + PasStringCopy(PSTR("clear"), theName); + else + PasStringCopy(PSTR("esc"), theName); + break; + + case kLeftArrowKeyASCII: + PasStringCopy(PSTR("lf arrow"), theName); + break; + + case kRightArrowKeyASCII: + PasStringCopy(PSTR("rt arrow"), theName); + break; + + case kUpArrowKeyASCII: + PasStringCopy(PSTR("up arrow"), theName); + break; + + case kDownArrowKeyASCII: + PasStringCopy(PSTR("dn arrow"), theName); + break; + + case kSpaceBarASCII: + PasStringCopy(PSTR("space"), theName); + break; + + case kForwardDeleteASCII: + PasStringCopy(PSTR("frwd del"), theName); + break; + + default: + PasStringCopy(PSTR("????"), theName); + break; + } + } +} + +//-------------------------------------------------------------- OptionKeyDown +// Returns true is the Option key is being held down. + +Boolean OptionKeyDown (void) +{ + KeyMap theKeys; + + GetKeys(theKeys); + if (BitTst(&theKeys, kOptionKeyMap)) + return (true); + else + return (false); +} + +//-------------------------------------------------------------- ExtractCTSeed +// Very esoteric - gets the "color table seed" from a specified graf port. +/* +long ExtractCTSeed (CGrafPtr porter) +{ + long theSeed; + + theSeed = (**((**(porter->portPixMap)).pmTable)).ctSeed; + return(theSeed); +} +*/ +//-------------------------------------------------------------- ForceCTSeed +// Forces the "color table seed" from a specified graf port to aÉ +// specified value. +/* +void ForceCTSeed (CGrafPtr porter, long newSeed) +{ + (**((**(porter->portPixMap)).pmTable)).ctSeed = newSeed; +} +*/ +//-------------------------------------------------------------- DelayTicks +// Lil' function that just sits and waits a specified number ofÉ +// Ticks (1/60 of a second). + +void DelayTicks (long howLong) +{ + UInt32 whoCares; + + Delay(howLong, &whoCares); +} + +//-------------------------------------------------------------- UnivGetSoundVolume +// Returns the speaker volume (as set by the user) in the range ofÉ +// zero to seven (handles Sound Manager 3 case as well). + +void UnivGetSoundVolume (short *volume, Boolean hasSM3) +{ + long longVol; + OSErr theErr; + +// if (hasSM3) +// { + theErr = GetDefaultOutputVolume(&longVol); + *volume = LoWord(longVol) / 0x0024; +// } +// else +// GetSoundVol(volume); + + if (*volume > 7) + *volume = 7; + else if (*volume < 0) + *volume = 0; +} + +//-------------------------------------------------------------- UnivSetSoundVolume +// Sets the speaker volume to a specified value (in the range ofÉ +// zero to seven (handles Sound Manager 3 case as well). + +void UnivSetSoundVolume (short volume, Boolean hasSM3) +{ + long longVol; + OSErr theErr; + + if (volume > 7) + volume = 7; + else if (volume < 0) + volume = 0; + +// if (hasSM3) +// { + longVol = (long)volume * 0x0025; + if (longVol > 0x00000100) + longVol = 0x00000100; + longVol = longVol + (longVol << 16); + theErr = SetDefaultOutputVolume(longVol); +// } +// else +// SetSoundVol(volume); +} + diff --git a/GpApp/Utilities.h b/GpApp/Utilities.h new file mode 100644 index 0000000..d5fca68 --- /dev/null +++ b/GpApp/Utilities.h @@ -0,0 +1,11 @@ +//============================================================================ +//---------------------------------------------------------------------------- +// Utilities.c +//---------------------------------------------------------------------------- +//============================================================================ + + +#include "PLQDOffscreen.h" + + +OSErr CreateOffScreenGWorld (GWorldPtr *theGWorld, Rect *bounds, short depth); diff --git a/Sources/Validate.c b/GpApp/Validate.c old mode 100755 new mode 100644 similarity index 100% rename from Sources/Validate.c rename to GpApp/Validate.c diff --git a/GpApp/WindowUtils.cpp b/GpApp/WindowUtils.cpp new file mode 100644 index 0000000..c9027bd --- /dev/null +++ b/GpApp/WindowUtils.cpp @@ -0,0 +1,172 @@ + +//============================================================================ +//---------------------------------------------------------------------------- +// WindowUtils.c +//---------------------------------------------------------------------------- +//============================================================================ + +#include "PLPasStr.h" +#include "Externs.h" +#include "Environ.h" +#include "RectUtils.h" + + +#define kFloatingKind 2048 +#define kMessageWindowTall 48 + + +WindowPtr mssgWindow; + + +//============================================================== Functions +//-------------------------------------------------------------- GetWindowTopLeft + +// Returns the top left coordinate of the specified window. CorrdinatesÉ +// are (of course) global (local coordinates would always be (0, 0)). + +void GetWindowLeftTop (WindowPtr theWindow, short *left, short *top) +{ + Point thePoint; + Rect bounds; + + *left = 0; + *top = 0; + + if (theWindow != nil) + { + SetPortWindowPort(theWindow); + GetWindowBounds(theWindow, kWindowContentRgn, &bounds); + thePoint.h = bounds.left; + thePoint.v = bounds.top; + LocalToGlobal(&thePoint); + *left = thePoint.h; + *top = thePoint.v; + } +} + +//-------------------------------------------------------------- GetWindowRect + +// Returns bounding rectangle of the specified window in global coords. + +void GetWindowRect (WindowPtr theWindow, Rect *bounds) +{ + if (theWindow != nil) + { + SetPortWindowPort(theWindow); + GetWindowBounds(theWindow, kWindowContentRgn, bounds); + LocalToGlobalRect(bounds); + } +} + +//-------------------------------------------------------------- GetLocalWindowRect +// Returns bounding rectangle of the specified window in local coords. +// (When you just need its width and height.) + +void GetLocalWindowRect (WindowPtr theWindow, Rect *bounds) +{ + if (theWindow != nil) + { + SetPortWindowPort(theWindow); + GetWindowBounds(theWindow, kWindowContentRgn, bounds); + } +} + +//-------------------------------------------------------------- FlagWindowFloating +// Sets the specified window's windowKind field to my own kFloatingKindÉ +// variable. This way I can examine a window later and determine ifÉ +// it's supposed to "float" above all other windows. +/* +void FlagWindowFloating (WindowPtr theWindow) +{ + if (theWindow != nil) + { + ((WindowPeek)theWindow)->windowKind = kFloatingKind; + BringToFront(theWindow); + } +} + +//-------------------------------------------------------------- IsWindowFloating + +// Tests a specific window to see if it is supposed to "float" above allÉ +// other windows. + +Boolean IsWindowFloating (WindowPtr theWindow) +{ + if (theWindow != nil) + { + return (((WindowPeek)theWindow)->windowKind == kFloatingKind); + } + else + return (false); +} +*/ +//-------------------------------------------------------------- OpenMessageWindow +// Brings up a simple message window. Nice sort of utility function. +// Anytime you want a small, quick message to come up, call this. + +void OpenMessageWindow (const PLPasStr &title) +{ + Rect mssgWindowRect; + + SetRect(&mssgWindowRect, 0, 0, 256, kMessageWindowTall); + if (thisMac.hasColor) + mssgWindow = NewCWindow(nil, &mssgWindowRect, + title, false, noGrowDocProc, kPutInFront, false, 0L); + else + mssgWindow = NewWindow(nil, &mssgWindowRect, + title, false, noGrowDocProc, kPutInFront, false, 0L); + + if (mssgWindow != nil) + { + ShowWindow(mssgWindow); + SetPort((GrafPtr)mssgWindow); + ClipRect(&mssgWindowRect); + ForeColor(blackColor); + BackColor(whiteColor); + TextFont(systemFont); + } +} + +//-------------------------------------------------------------- SetMessageWindowMessage + +// For the above message window, this function displays a string of textÉ +// in the center of the window. + +void SetMessageWindowMessage (StringPtr message) +{ + Rect mssgWindowRect; + + if (mssgWindow != nil) + { + SetPort((GrafPtr)mssgWindow); + SetRect(&mssgWindowRect, 0, 0, 256, kMessageWindowTall); + InsetRect(&mssgWindowRect, 16, 16); + EraseRect(&mssgWindowRect); + MoveTo(mssgWindowRect.left, mssgWindowRect.bottom - 6); + DrawString(message); + } +} + +//-------------------------------------------------------------- CloseMessageWindow + +// Closes the previously referred to "message window". + +void CloseMessageWindow (void) +{ + if (mssgWindow != nil) + DisposeWindow(mssgWindow); + mssgWindow = nil; +} + +//-------------------------------------------------------------- CloseThisWindow + +// Given a specific window, this function will close it and set the windowÉ +// pointer to null. + +void CloseThisWindow (WindowPtr *theWindow) +{ + if (*theWindow != nil) + DisposeWindow(*theWindow); + *theWindow = nil; +} + diff --git a/GpApp/x64/Debug/vc141.idb b/GpApp/x64/Debug/vc141.idb new file mode 100644 index 0000000000000000000000000000000000000000..31c654304085a76ff66eea283629fb62c82453b3 GIT binary patch literal 224256 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

e$ToA6?c_|4%%|bS{x(LZ|Fri5 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

)SQOpsnjOdZ)hm7H;KMRZ=II(W`pD8uY@;mme* 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

$*Ck!6CY3^Emy-Fx@N_Xqgb7ex(WFYMLzT zUp!xU<`Xqtl`Z^$ruppGW}=$5V0k}*;o=T+0mv3nA5#qxCWuwm+&B@%*R7+-Jr_PL!TQAL9g@34U`RWxd7{lCKkC3W>! z)X>)P)i_+1I7#lC#Np?h-3eO%Cw!F>lb?vmXn&mBf zJ`h^bbQE&&rd66?uH(1hIDJg+z1SHR6iKi-nR;%P6=bY9|K{Y=tc>WAU{)uK< zc6HgY3ePf_U%}IySebJu`LpgHe;Gj69t!>jbFH4$%0;UYOl`?(Xd4sU4D+9GNrhbUlMs7iQz8CD%IyvhgFxY|}u^6%@GCXOE zni;M3rGvnCWEk7GhMw-p>gWd_Erx36({G2%XC}B801oI^G~$56?x}f}K!3ly6`=BC zssL>TNYNfGI-Rg4yQ1L>I%z}ObJ&UJ+8IWFPN_uU*+^uX;eH-ZO0sAMib>>^HeZPM0`F7BiviyV>S{4HSx{gM)qaQP7 zy^5h?(vYHYFN|xVOdVTCeTi|0G6DBPad!fAviGey2U;kxt)iXHU)aIBV#Dr|!{eV+ zJ}zfHS9@vimAtJhlyn7^DaA~2jHAK4{TX+7RI3#k#fNjO1DV64-S!6XqCnWWYC9lN zTczP^)BS;wc#F;u`JYP85ENSz=(F|iofIJMG_-}1O3&|4#3hr|0wvyp&J9^^UHMHm z-gK7T4Boa<>#xD|$~Fg+kEjJ5HUOqxltfh1?l$GXoHZcg6c~uUo<@E@|GwK_A z-popv4s+D+ufhu(@-7>aWxc}H&rh%L*%dZRL`5zOv4(qv&L-_LHibHNt9&HGa`2m= zKDF=1sq4x^*iM#w*-r7kACY5LJH>s)ky9$e3;P$Q!T`wzHQ1T(A@)k9X`f5nFWf`< zCd^o|)UY8;7?e(jZ4euh?mtJ2n2+@x+*}d!L3{K)5{3PWdn7{p!j6rQYLs4EIzqET zgdSu|3y(uIy<6dH`TowyO7ArpGgGO27Es>FVQHPNG^WjdV7H%J^2+}@7A^U*eQA|n zj9Vmv1rX^rZIJ*8_V)9DkIw8k7yU7u2Z2x2host``xfoK;N}Yz1BTbPT5$7)C1YDH zI&Ag8?u%l2tlbyfY7ro`l&5`PM=7)AyDXON>sY6K9h`W=2c*+SD9fvJ<`H*uupU$C zLmp>pt%&7}56pWWvH%C>1}4T5Hv27aRyfA35DsXdqfKB)Xmmq$Yq8g-TVoS=*|}k& zRjfgA#{|1_ZQUq#OvJ4ldEC3fEgI*wN2DZ|ZQZbHDsrSGadSo7x=~01l`Cx`ktAMe zWl1zr;p{)`>)80&RqX5Nux$j!rKk?q?d~U{YKP+xowh-I%eH4wnd451^1hCZpDgxu z^iZu)$y%lC$T*+~+7MDZRC0iZ%^J!hI4zkL4^UyZM!6Sd_sfl(<=rP=Mw^#O~{%?qz4_Pp9D*i@uwO^Sx0x%2rtNuUKC6|-|2dJZlg zS>OIJJK^XFUBK%(dgK`v?2~NcH~YI$C^s=Z1jEwgWL(i*srJy3eFq1 z2RnB7sRCTwf%R>IhMNi=&bwhJ+PIcAPc4HFw%mTv=DfxG?P8qM)1!f|?Y6TeuI%Du zGou#5u3g=B7Tg+B+I)~U?_`totR{Gs zclzrAJj8vBd!$>XGbGqpb5>O2Xt(`W>Bg}$>N_wyO7@7Pw&i8scMw%9;i~U|i`q_+ z4cwHp^p1VnE0zwnu!_P(c61NTV!7;k^c!inf!;Xymw!%RLBy1UN<&})eo0bkcgEiBc z7Yw$rXRWestZ5-0N3|m_g>$ah?%8<=TP)xV{PSiHZu8N`HF{1TfsX=D{OUku*zbXn zM=68my#!Yr;uupMs=+OGCrKliR&6*HR+#VfvaE`j~fwabSE`Lbbw zrhy;ux*x4Q-o#x?ej=`}u{!)rynG~`cRc5D&P!jlG(~im$uX;m-#c>kH^;HwFxtl5 z=rm_bM+(V;eM};NW7Z72Icu7sa06ni{;pm&9d7pwgJ4;+)vXzhvBKmq$1R7K&9_hU z=pAlQZx7Z^#%pEHJ=5vfIyz6?)?(FSo`M}QIL2q!k)XpZ2Ee1C7>NVnErm&S7Z0X& z?&+(&pk?8 zX@luv-$y6f;dPtJKP#aVi`5M zP($*SvN-WPEB3__U_lvTGy)Fe!IEKwx%6BM`Fv;f^PzAC+6cs;~TJRRd_nP zfkmQk=09TAy7$^0?R51tKp1sWP4^|4yO-+g`5Ug_`X#P_bMN+aav1FK*uGX)Of)bV zg~B_l(ROHG^3Aj=zh3N(LS=>qwp7WND-%^W&VusxgUj|t{b+DE!=Lun+=m`+i_SW? z>TLKr4u@IqNiUu(^CX6^V@L7A>=e&NxOb$pd+jUdcCV#7!Z}&AqfU$HqgrvE^nZl? zBk+B~VrsYYvvIHOOWkYzW%nBWe?L6t5gPq4N1Lu!7f=D;d;KBqOuit|y2)tvU5 zwCe8-L&6!32}k95NNP^K!U`sBEHTWi>7 z(4FY6&96PHp`zS)Z_O7MOGCw((oiw)ee1IwDjrGC$FVcK9?p$#tb9qqOFxM%*~nxh z+R-3)^iOo|@VjwIsa79&bjYK^z`^hU;xKVP4M*{~+bqB)3`Ff5Ks_#?4jc79JNedgb)TbFVtl@ zVLzA66Q8eLVqF?NVf#;U4bRv6n|1Cnix>RZw~Lq z5!YD6D}XR)E^V>WG&_>U`^py4(j-KI0oiBEdLju47lyinyf ze|rnB?$H*nIL#MHTfDSU1{$S(X|~17)|!|!uMR3Q({(=WaGQ@$+gG>Q3j(OHFeKb4 zg9RM!-T0fZU91)Ni$!n>c_Rtc5jA@K*bKWuLp zHQF|Z$+it>&@NXjc4-CwSLueKl1O3GTHG7vT{-$-O&>~8al=pmr?e9-%`7Z}c9e^I z)-Ak@S=yLrR2Ckxe_}z=O^Rk~0oG=!_saqd!2kxQKV8oU#9IX9UR^`|ox}kespq zZqE@fra5EpyPXjvXY75qGln^*?jO#G zZ_elsZ7F4E6q`R0CORJr6Qf=Y6C*>)Q6w=kBv!sCW~egci~&`WoH3x9zCh+VI;wi? z(Q|ZEMe-aSRX$i|s50a^22@G%90RK9181J2qpG(gJx51XB+t=NEpTMWa}22RtLF%k zGdikzKTSC@Bu0^xBST^oNsJ7Ml@Bf&sth?}K$RqC45-=zjS?y7Dj#Zd#-OVtIb+aO zl03(NDqqWU#(*kG&KOX&H}#Yww9w1wsOmvDFQcO>l9$m@RRm{rRGmkuI;tW$qXZ>A zSOA73sz{2;kVF+pj0}mDFZ>y*3^`*!l_X~jsM?EwVAb1o5|trm45*Uii~&`WJjZ}4 zpAvM&fGSDO7*Mqb2bE($m5<~(W3T`uIb*N@BzcbbpNs0KDyoCysEXv^h|OQ#6C>Z? zQ;vF!&nv)D6-kT?iS> ze*}E){wV8RY)mik28ZWojpCzWDb4q_E??DsjuT=T%XXzN8)wM;-mrNcZBFnt6pO<$ zr*tTpZ~I%zZuhLp2Q#XJ#CT0BZpHjztH(bJ^@vBV=q8MJW(>zmGul9}*rfFA+v5kH zm-e{i^3aQt%R}RXKPxMFXCF+g_VUuq%eOP^y@u_v^V;v=CyQ14^X=0Lui`&0ca7}8 zIvt1TbT{eWrCZE#6Rh8{3k8gC46!?@!yuMUC@>41t1nb>6nllo(?cHduF+yhgk)ag zlN-Hw=4BDCLhgPU!PsPBo|m2Kb)COU76?}*{r0$PqP`t1O1|Cx#c~gq?i*TR4DbOp zd|1pQ%kMe;7JlR7fun=7=iL6YLh{dbLG`&0F=CTWdgP9BaiDeXoj0>s`ocb#SIw92 zQXPC&=Q3rUVqX#yD`$kpDokiGrKaaX?YK(FeaNyB3x}39f*7fKk&h;}IacZl@bE-$IS7&(UMNiCJ z6xIxv?~RIfDrurL!RRQoMIhX>{~UMBvMHpQ6|0nCy7N-(zlTkId-(#CK|50YY>XA> z?tW|XzkFUCE-sx?YpCq$6d$W!;$N{0ZVNzK~_`kOct zTf9t*m#sTHTw?i?SwN{Np40kHM+r+Vu@$DL%q?uaDsH@Zi5)?>{%I7;+I+=FtJy9qhvB@!)fF!db1h>UZ^N(;hF1 zEV~R+!?%KgiB9pO`D8!b_E0wr!h32hnBb3cs;M(*$7az{7yaNlyUb#MQYbl`J%;ZR zk8bBK^Tlg?E6KHj#f*aifnc}Lb)#yFMGu~6ud!lU!RXMp$&(VpqGrrHax*b zoF)^7{3V?%)lg`|uvpcbl4q8)X}+_J{#I>xLA`j#{_(7Bd&z3e3(w#Ml7m8bxKSa$v*J+;W zC-o3ECf9zNr^oh_*M46wTNi3_?)#9FE1fOt^sr8Hb+pE@F;PEcvYO*Iy3)DiVhY)Y zarEjA9{p?%b;rheJ{wn@`FU)$XMX;F_TC3hj;p%!z18zi()_8GY$Jm`R%66pi)e^R zLh=&S|2A{Y_jl{kZF^D_DevsEM)O+7EN~ZXO~B!!O23h zB&cx+fkjwt78A0OJte@#_>a16*&2E7?}+*{RE`e*%1%<^&Ds;N44&$;KEd(OG% z-nzG{e#NTc>Hf2mZEW|U0qpzkZ1+h&UM(5VwB4qWZTG2mAJOaL*|?y$AKJ&XDq?Oi z{ls=U-TZg6DJSR=c6eL$$Nw&0Dg9gFQ{ny{Z#OtH!I$7V6Ms@lUvS-jQT7>kKds_X zW%f?tWto7>HErkyT4s`Oj79?s3x z+S^DO=@gb&DZSAv@pHR&m}WTV7hgOLl ziUCVRvh2com~2X{o{gVq+T0t1lI{qOoW5PlR?k^?{oOZMy!b>n{S+uot50$9;-MM; z<{|pcr=0+`H1*VpM$H3Q-`Oeuo1xH)vM4pTQNNIY=Z2cO8q=XBBh4?=NTI*!x@>h% z=U0zZF`DoA`PK6qTo)QMGjdCzEtkqECml_llSLoRWmf5QZ&(J4YP0Fy3vfPy0xcbV zL?1_2llK@Dp5OYf+)%_`;El@@C-j;4Yyn=ep`V@iEjUsk%KdRJ%Bg?OUJ`D}16kK! zUsP*b+VxoUJMK-&zaHycRBLzi)%tYc$){xO4SY;y`jB2&aGgc@+$>qaSF*>5XBal0 zcEp-ZdlgjZW6?Q0%VZkqbbO_b>7R9F9avUbA@H4+udJ^-?~$}`^6_4AVmRrxFDjDz zY&$9c=OKUAzKBR3udc0D1hUQeczJvKs@yXjqKV!k`!sVfUTG%KnVA^liRh#wohuu+LB`neZ)g+a*@|Qv zcNEv#$}sz6(g!7w;kD>}sm{3Qc=hlNQoDUjQ|m;xXkgU;)?T~#et>gObSbz_FIrQt zF81R7doj-P^z@8V!R?uor-GwZiZVxi@=$miM6o+dHQ`v#Yav*s3j=*?rA;A0;=1Qm277&r&No1+5_@;J#_lJ5t+?*B%36UVC#?$R z!_v%y9PKOZXT?E=onVNPr0*qw#PoZSr$vsjfS z8tJ0r_62@JmFbeOKaF=QM{A~XJxprt7P`)*E7w9{rZt(aJ2=DloOvL@mm8+k#WMl> z%!Wtxv)PcRC{RBZTl=0ZY+E0}BuW3(^Y;0{(|X70!}e)I?dcVL8orY4VcEuw>Y8Hw zE9dDK9Nf$Kbme?(wGiC1^~vsamej#uuE{gc`7T{NF8eAvf10l3l<>6n)o=2gzQQ7o z8<+}j*NWL&mfbvkWJ=c|doRzCPmM1ZTS!37(oa9->Yco%uR$jI9Hb-7;A@b4$t{bD z7nH$#cerR@2`8;X&aC6<$B%l_&kXrZwQ7WFv;N%13K^Ng6i?2`a!s4|=gQ#bi~ad& zvf49*M{{!jko_pHeaPPW5a7J_q3G!sX5<%@`+m1r&M?F2YL$7GE0zWwbD!-5jprhK zvF*@%&`lg*^kiE$)>6G(Tr`+N>kBsFUJE7%T8F|HLWpvKUn&5O&dzKUp+~ z3)O^o%KtSVlw7jN^bZ=hsWV7-Tj+t?V;u&5(+M9`JZVDjJR(yT9T@nHwk$kcz~JXy zX?N023NK>+%9_F}F*@HZopkCL7oOf-bbzV(yx$(g@nJvS)XvHyo{2L&)Ld;h{`SRo z_^WnxqECj@i0|}qiGKg$tafLBoKA*`_Yk9Oi1}Hx7Nd0tp zI(!nGo$S0A8=qymh?lkjB0p{n6K6*Kq=s5Ne8j8ddgOm`C_$2S(yJi-Irf}H$PWPwej}C z5L`>rwV-{wlX6a}aUreI%K?|aVj35hq-r<2VP*{W@Y)N7)UZ=-`if)B&|aaLnp6Qr z5Q8{&jmYFGFvlk!BIOLwfedM+$e0ZUP>wQhli}+S+9)5ExnN|+crDc`mfD!&814lS zOR&S2OthANzQ;$3`z@3*otrmFLGQ}Mu*wqER;+ABwS_6_P}z)X^G%ypR#$DA7}Agz ztpM_(VE}AtH>IVbWnvg*L>rz)jG3vP|NIPJACXiN%Ifip63(o`w+5~D+;is#^jVx^ z@s#!}yguD461|@6eb1C_EAiV+sFC-+w3B0p-5#ceSZ*mTP|DsT@+xKfy%rvIklhyT z`NI>kBmeOjN~w6U4%nqK)nS_~R0o={PeSIfy;cj@p*ix{{rxam-C5OUT2^;aJgYma zTKe*J7a2F~BIEdPP)-p$tNJ3uw(r^4hj?TF(suW-{}lW7!3)sWoJ98SLqoR))Ep9q z8QpACklK+}n9y?Otf6(*vxe66Pw=g7{8^H%xBASEEgz3{;OQnIV``9+SQpEP2R=`dTActLK-0IG%RvwT| zkm9PBEcg($Ws>#vXrSSsT6)pn;prCR)cM2K4|d&;7!%zH9phFT5}Yros-<Lc$m59)2P6J;(xt%|}IzB?Tk+x%(zC#AC8j}IvWe2LBs2=;GOpl$i z^pk;mu!USMV&_;&v3=D+AdgK``KtTaCkq62R&}P1pY%3Sz%DXw>gc9b2eGM}8gq-^J5~1Ux%rbU%_%fq|quO(^?!p zCy*ZFiJgoa-jNeHd^(V4I^(%&%bz93(}L>s2&^vhcE4GgxX+||dXNOYPdlcHf}RiP z1g=|6-%etSd+#f7BK5Y4AXD#s_vNcy)T-6RXbq{FUR0!Rar<_@=3yNhUvGMCu)^W# zPA??7y$&VXxaosc8jaV^l6rL%O)!(kcnK{8rMX0IkWolP-bmmup2Ga$@j${TWc4Rv zpjdy>1-n?kVfX9Lu+NeEv}(`2uq`7fVykhi>b~p}z0bH|XH^^Hrn$b@V*G-|Ze?O4 zC@<^j#(Sq&zxpPUhZ`NcMBT+Sn#Mz$+>4;RYs&R#i4`3<+htcL(kr{U(sRRAb_tLs z`%fXTS7e1z6N{^Qjl&$0?I+@1?kc_M@1<8(R3-C>+&m*n70|M{?* zA}Y9(?P~3CH~xw%sa20slS17h6NhnjwI7g+vwL)GF0Mv=u?-5n&hhPRjO`tvN1}`S zU4d%>9)D9y)m}np*q#!6e!I#q(VzB?vCf_1I}N@d_z}RJ-tj!#iWlJ`W5qij4xJ(y zgBQtIwM8;kZH|1(&dKCq=OprQA0MseB>qHS6UXwJ_=Njs@#d-HJq`?yb>;?{_IybL zf_nwpVsI;vFBNYtUKxo%Ay2T6$k{aAFMHjdh_@{CILzy?&~qd1@ZtDC($S%U#lX@GWTpf2E?QfGF>2~}$2TWObikNyzMBL>4%SOcMyVoHg9WCE|>)5yNW|uu( zjj=R#b>glXyLu#S6a#+i*hA&J|J7KV*T@;qkCyLt(Vv#@=8`JfNm?MOLt;g>c0NOi z1rG1&=n}B6r+jzD7fiS!Ct{>rf?I{F!?jFJ z*~xk8t20ngyJ24_EwfcK-}7YR^hTan``?`vo`Wka^~Jk*eO*#o-+vC==ZyJuT3zW4 zPFn;jT0!yZe8sjioT#qO#NM7l)O_E|tC=*7~) zJA6R)I7G*GR+mQ&Jonjtk4@xQ27PX5|Sa71_wj$ znt_T0i&y8&>WC*_#4cW)BP}6aLd2!-6r0Fdh#BT=p;ez5<%CYBz{%nd_-ri4@A<3H zRjLYS=Z_fbK0RVCnq7o%6V5K7eO*FYBR;h*%3i#>2(d4sIlgfT^rdKa$&I`i%`O%B zZg0eQc$Yxzj6`-~TwW-vOV5k}oP#6JUfQsIfo{dn>10I{&Mwx6LNvS7x?f>PnTxU) zMm|l>P8RzaZ;p_hU99f&8oD&Jd~$Yi`pTl&g*x(S1B}Ai#qm|dwyP|fT~by>x>(r- zkoVE-!t6eEol9dA-VOV-X491DqGiktoz9yU(Tpj_f}+#ptj}t8mYtYF&#cvaG&^&t zyx*NuDW9C3D-&lRpGLC_Fs6%9^wYO?eyDkoGNzV$PFg+LFtfVTliX1AyzMI$yBN(b zmF~0T?1K3^4Pr5xT`E?yin0@O5vuQ)0pFlZ}x)g|MG|SOS zquIsi>)DAjQ)o`BPv6@4Xm&BWzxdQT-w$BqxoCD?0u`nspPe|%tK&jL+Ord9ndY*S zoTn9{nYYzKG`m2zdUoQhuj6x$0MAaG^_6xyTP<`5Ry51a&KL2l*~ukk zBBPp}i2Sn?X9abfGIl4N6$>PK4sda4C+{PUDxd1P@l)4z3?+IJy4W3C?2Lx-P}@h$ zFU6giz{%KbXNa3H@o2r5ew-lr%bxR}h3@v!r>EV&jBT7uLyz_PPgOtPb8pk*T_w$K zDA6(#XsvYi_iTTMI>{h*XK_E(25HA;d25X2z9*UxnK?n_W1I}Ui!v;*`ygVHtFqHR59f7;AuT< z&s!9Azsc9Q822jorc1TDi{o+U*a0_dD-Be%^ETd8VK`>6iIDggo`R!*?!vtfrra;a zdpqB{cOox#YRny3vv;!8n3KhC#oc?4_bqy2XXlZ7<91lEFxEHg;S`i}UC;gFac}D0 zN8(ORq*-UR(z^H2pahu4tzfsW1e2q$ghzYh_stBaVd#-w{3A1mQ~&KQj_vBZb;tdJ zdz;nRTbyWjzHz{X(2>)`#Qx6Gy%X)>;K(ely?0`F=h(dyi>YsSYrSubH~E;jHOFaf z;;~-*`!nC}#eW80!AuVI;`huvoUTy&R&V0>n@j0c;(pcn>03aPGxwgLVGfLi^>P@8 z$$rT7+T+dCRv&9o|CtQuUe$lOIH2fK*ddDZ?`FmH`zH#8d#7#*#l`&WMjq66c1S9`;$Ki)mwEcbfxAvY0Z ze~hazfzjq{hPCAPE%heucdPnV*c*Qz3w+0$-At<@Ey_*t+e()xCchWfDzZA!jk70q zY5b<{w4#c}U%LxllM-HT|-Bz`IN5+n*@jWvuy@^8(`Q8Wl z(2nkt{WX-m`Fq_&-0U44zbWZG3=^q(L+=Kw%LgX*bUFz^!TTI-a$q^`HV>SLyPbQ7 z)2?Yb?ll#LriGy@dmDz@al_YlYR=n^?gLC%)8NriDhb zM(cGZCgyv~pr?p~aLIJpk&dM<>5SZvV_u*9)HkvpW{iv(( zC;h!nCwAa(!$m3F4g5sYpAQXxvf*$({`ESjsb^=s-q=107-;n!b2?+Y&5l|C4O~Cv zK}Lg8`}PIIefv_xeft99zI`d;zI_34-@X*_jynS49e1RNcia&W@3VP$;`P@D#Otq55wE{KAYOlcifFRy z;9QF6TtIX#MRYD88k!XiS{>ULvgqd!Rt*#ogH{a`5QA0$1+A{WBWTq?0WoORKmjpm6;ROX>N|o~4HOWARt*#o zgI2A88To45rLWL{7_@3v0WoM5r3I}H?+98okQEikv}zzj6v$8k1+5P62wF8zKnz+n zP(Tb?1r)S8yd!AUKmjpm)j$C;XcbV<>hO-BRRaaYpj86}#Gq9`L94?%f>sR_5QA0? z6cB?}0R>wfCYG314HOWARt*#ogI2i;S{=APXw^W5C{T*i>lvazhRRjY>cI6us|E^) zL8}G|h(W7d1+5NTAGB(qfEcuDpnw>(%2m+n!1Y0^1`3Els|E^)L91K^tqxotv}&M$ z7_@4jfEcuDS7xgN1lqo*2gIP&fJ3LFQt2;f)w!Tm;32N+#I$N4!xkt-3|e(AXcc(q zt#pzihTck`6ftPkxu8|xp|{dWiWqt;fl|bvRp)|Mfrs8oCn;j+tprLDgI1jjS_K|@ zE1jf>p|=t!MGUs8OVg^sO{+Rf5kqf9GVOok_qD>==%>QTnvc$hvsJf+laY7U!`aXq z!^z+c)o@n2Hk?Fj%i+wqLum!>zWW03Q)vb6qaO{R+tLc$JKq^VZ%iw2H{1|F*QOP? zwQB>&xrswbIL|~F{nSDLWg@U^I)E|}hTb?6K$!@oYbya{B1{}QbjZj<`M&#%{OG4X z^(i9{<&S>U$gjHXw%d$6l;8PIBR}-UH@?xxL-~dqjC|?ZYp*r(P+q$>uc3bSrn5AS z8);>^GUJ$do-yxCKTQsU44)?ZflPNXKA{0XNX!>|6W?=8qmbO-LuqH0XlG|%$Pa~9 z$_axHXfewCx~gReJl_Yoky_Q?)Oe^JC(SH-H6(V+K_MN5ko%5(B$xL7&BR2KjTL%u z(;o)*$rwA5PtzZsR=7F-=_9@P51a^wY}*a@hjq%rd!C7GWC)^>NC#zO9|1cZD^Pzu zQ$mModtNfegFyjkG_TP7Sm6sAtcGbEm(J(-p}>CQ3GTD86^LS5LM0Nro=KYt%Xmc1 z7pJ4&{v<_Fh4*-Dzs%WVr$d3A=_lMZ*>w%sYM5|ID`PSO?1IE+u$-}v2-z#4m!5gX zGxNCz1*FqhAF(l%4XKJ-bTn(d$fR)?sB1T(7PV{Drmc0#9WE5)XYVvd?Qemy@ni8& zygKd1quEQ!*CmvZjUff`PRqUQ>+ibM;R|iFoN}^-QXw7~{=u6&Vp{wsAKXCEw=+5+Pu2Q|hI%-4N!AUYRx z8KSa!sNiJrmYtlrU8Su{&oEm~ok7M#xRbB*@wLe9);vlCP38MRu7W@l}oVv`rH z+MP?EM&+Z~8M!Z*!?~0S$ytGWZ=%mUh;Vj}jdtE*2N$_O@_!5NUetE+>I_!c)<~ys z%sM-KPKc-NJF*NtOU^CK6G|h$Vg--7eOmc&d$tz-kbjpONHd@QplJFkqe;Zle2=@ zJ~_JpTDcA^i)NS902Iy&tok^7exTe?^WtPIVi&J2NbK3PKRrKza-GrN5@MR1U5t#m zXm;9&dDZ}PCKnCK*`*abAI&bP9Wym$Cl?XFioTsjvrDJK({=b4;8yve=A{=qRl?IX zM{cN@+C*-sdBJ=YquJ9jksE5BwZ<$tOIf`TN6tmFOT|~lbarw<<~y54v+p!pO{3XG z>Fe2vv&=fOlk+x{LNxnMGLw8XyC^fcs6;mx%~Iv$qS=M>_3Xsi`9BsbMzgdzauNHP z0u`d!h1$g5%EVbz(YvKt(lO?D5?P#JNyi%Je$mCwZCm(>uz2dFO*iGDa;e8&lCEHd z#ptEqbOWIvtJ3Fn>Omh~72vrNx|_$gmFx{cbHATh^+y#h{ZjT`kM%oFZ}<0$14~-K zuH|n72GaVsL4mY3aL7QS#MTbKHjo8WtZCQ6xm5xQakYVjxJDo$jv7daV{y-~4IBsL z7YDLQ!>MI2j;`bRyh~KXT>_YqjKwhh_5=e+YXdu=2Ljno$e>0E}e^?9H zh4>?YyjEW=kPx>RNQhN|g!mc*3GqkASR^XM{~eIm>J0)3@y84##McTW#2+`15MQUI z=|cPoih8a7J%NPy_YEY(|3e@l{-l9~xK#_-g*Xk!Yjs8-A->)~LVSZjLi|4sB*YuF zfL(}h1mv~4O&}rul!1i!4+Ik8|79Q{{zENb7vetx@6ZBvA^vkfUaLPVkPv^)KtlW%0txY*1`^`C zw18cR|1Th~)qg3F5Z`SeA^yBTLVS;bg!l_uz%ImDKwhg2frNOgfrR*8frR*r1`^^g zX#u+se;JV1>aPeS#9uX#5N{Jmh_@R^i2t7!unY0mRKT?Q>jDY!eFoCu{Q?Pbmw|*h zr={sa{8zxeRzDz+5dXD-RP=)a3GqV)65?-Y0lN_Y4Ir=84+|tjslzY2{_YtafV@^eB9IVw8%Q4u;^4llgKGTmIx($&MJGbMS0}cV{i`|= z;$LO!z`r&g7MlNcwhsJ%tof+QIrlf&I`9J{VWIhb**ft12g5@1#cUmT5`~542SGk` zNF=`Q!b<<9)OW7ZEVI}*w0Qsft54o_C{o8>2Quc>kSjqkfAitFT zQJrY1`C~e962Yp~QuDTfBm&*Hb6RTtxPc_X6FSpU^TP&`2v6!vOU<7`Iesbok@5Td zO78kWM77|U&?-LHwcf=UC{9Qm2a5&VWaMJNH&QBY z*ZG{En*%v56>m0C8#BK3zPpe-oH@8akO_ZJM z2E<(}`rgj^t?>i3ZOftBZ4~h8@Fb2=;-zuRy@0)}s%+Q%$_YUE%02{koR|tdBg?Mj zR%l04+_r783S{IZqw&>^8}6DXT?99|`sY+0dhNuODB4|eQS-2ic6LoAC(#nC-MHqi zqQs0!6e|<0-KclQ4Ig$B%`PTiA%=L9Tl1KUTiqirZg!Vl^thwZ2E;y14ty}4l_j*g zw5@weH_^+_dhyVEi@gl>G9?xV#XU?U?j;xu)-l+2112LNw-q@C&6uDt>cvJA))X&` z=MY|krsYR`dr8qNe8y91+Df%`B-;)#2)=9?13B&~gXamF5|SC;UR$|21pVc0#*Hi0 zXo>wv#Exo=Gw6P$>qL-C6(0=ME+!{jX%2k>wra6SD@F02Qxon)34?9VuMjEPa4*B} zq@3+A_(1Kru*<1MnH}@7JXH%^{C07}xsrtGy68z7cxWf&B|>KRG60eBW+Gd4FX2+4 zAyGcIBBhn%2QsTNqp49*+eI+A)I6S^ zooY<&Bd)Yz!95pFd{JCMC%*oS9o%ZhU3H9+N>@@LU-P6=lqg?r0cM2_*j7rq+O`rO zYB6f8xWTUR8!yry>?}LrGZrXI*f0OTea=0>7I{X1&K>KzcGowdTGam0Fq4lnenu1n zwUZN4&T4B31f_VKVD`IQCqC$ooxnN)1#Hp6CrWcC@VjLBy3*e3u8TjgaNTn0&IMgb z+C5!0=;~ax*w>ZBiBgvWk9OT>Jtv_+oE&o{;_Yz!bz12Gn##FOu|~TBygeWiI-MI> zM`sqdo08+YZPs2n5z^oezn&IK^PzJa%)Md~8BcJ7|6}poK1s&3#&62D+WpohxYnFI z93R}4sYEoa4snxY4Q*7ho{FpBuvP%3;n0dhv~L*Vi+iQb8fp_UDCVgvL}YdMxp$R` zj(grp{D7yWYSWv9$KWgSAq?h9bgz(7G_tgKo9~28Ebz_B==)MoJ|LS`S53@2w=%Iv zR~EwKFkx_^d%uesC!Cv=Ineg1gK(X6fpxnRiMxh|!N^Ms4zJmanY5FVMPG>~+6m#gRJEHB{Uvvu^d&t)tKuNNci6NltttAt z7sCnnTw{4#OcR>*TG$w>xfLICz?PyZKJQ*=aeWQWDr3ru%f143AaAz10U9uu)o6T; zaVdIPW%F*s6U6XbDcw7@)HRQ*o68W>@*biqCj4G2PNrbmfmiVR(#280BR)b^u&B1l9=7!gCwl$t| zW0bFr4ZEh><^~TjLDq2Yc-&;XA1`PwZGK?Dp$?LSD*5k?jg7B!L)&0_hThawqEcLT zS8{qBl$%iJME+jW1TG>UW za!M(KszPCZB6b~`YmSK>Zv9woTOhASXiyd=o{Leqbs%hoxjIy6+UEP$o|U2ZBt8_?r(n7m7pBgLEhYgV9TwB9pmP88wYp6#9+Ir16rjG6r=FP;FW5PJ?ZPXx)`H0#l8Zc;(cptk8hQ`HL={s!ZXmcHVu0UW=KH-}9Tpim* zF>a|S*!)u%LgBv`TW5ahztBN_;&DhY+mK&i~yh6&18&^F+P>{*_8~|EF#wwL< zOo&W%_Z+O_W^pMyYS_(f+X#6=#Ax2Al)L7Zu{rE0s#02AlbbfttXD*FSScZ+KdiY7 z2Wzb}i=uqj(d>@#v%6xHiez7+qK2M#C0X>hP>`ugoK)8hJ6AL3bHjH@y!`~2()uQk4=*B2%Z~$^_u@l*M)Hw=5tVmnI%9CtAd0x1oNN?r#Qzd42^6ei{(OR3kCU z%sRo25)^(YZ4p$$l`TmJI)@?<5FT^ryate`e^PaE=n^;hdD~Hu=8+@-i1gUVpraz=^qRDdx zv2S?|)=nnqhITAVCBE&Cx@aB){9Utl)ImqF4WAfRMlJCekMFLyfuZfzKMb0iEX!$_ z0)R$bdoCZIPP)->Q~GMCEwN=Jql#Q#ml|!aMw_%-JZ$r&h;mrNiTGeynBYjQ`ZwU@ z%@cE1uU69<2-8w8^0VHUsH257+?}`=yRuYL-6~^RLIHDI2`6SuW(9-Z$l|7=e*?Q~ zy61UYjrUSZvqqk0EhO6>zDr)9objeQeI}wYlA%?fOyt{j#&(gJ9D{g5*Z81Rt9IlN z;yNbxay17Xp(C--96{8?0|kPt{)LETQem|it@>?+N60MjjB#E9RJda3q<)jp{UA(i zC*E0Ki!E(B&e#h>bH~(7I1Fkc-Z>j9SRF3fm~g*h(H8=6xtT)OqG-87!yAC$h}KYo zFr_vNW(_7(wxAM;rzxS;TvK5@@B4`74BurD!eKCvXqHgE#ESyque&sSm+zk- zb0aSU#zHugDeMG+q65zG7{pS!dnqiUoY}gW_6b~2vuc_zoFjBmfDovfq6(F1YNRx) zpai5FKZuhra3Z5glMT0;8ex!NAq8NsN+{urD;e1w4nFi2VmEYpX$@|6 zudybSGWn;F=3;I=UKg((B-_?mxKh&+S9y+5st|_h0y#8ovd1W>?VH__{85M&L^rt^ zN{Ix_9SsedBgj-~eafsr_Ejg4GWaR&Y`V+Ts_DGCHC*5X;~S9`%H`->@Tl)`6>*X< z3D~B?mvs&eKG+oKL^rA!-c&}y3o8amRZ2~XZ5=*s?-Y0%3MoToFR4_CG0YVq#gvAb z+KjmvTsS7FeD`Zp)G`N?*jI@hvYcS11C-rJtPtYSV@$762up`-YUDp%$+K#a(GI0K z225LsimUVh|h`h^Em30kt@%t4v+uXPOK-Kyr`$N`SF>4+zFq*yzX*0g$?pzUS5#uT5 z9?1iss34*dZgJeh6Q79=d1=+HCatA`kmv#NrGYPyEwt+J{wCnIyDY9bcb%+o89|5e z9a``GiMxCP>g(dB8@{>3xE2bE@MOr*P6Y8xRB@}OMc;~$aIKb1hz9~;45PR@+TV>9x3UgY z(g=e^T&hCs-mH>MH#RZjN&|!el%qW7eeMLlggx+zBYjxlN}ez2*e#s@N`qc1=ZHD-(y+Y>da z^3pl98MkcYfKbzLPqkzn?gYs0I_j;Fa+4gXwTHcFN0qG#LEGrX9&_%Mh!MuZ3&zAt z)XT`U+(;~XI`D63>+oI3H@qJMK-owzWuX?cXPT7p-s==PHI68goZ&hcxW#ju7Of$fw{2_<~3xlkWfqWe@H~uew$KKG|q=v>v_u&E;<;k zx?uVO?oV;KWr~w6ZgmzSBnR_ATkMI2sT~8X=p^=y#+i@Ga5~HgVavQ@p1$QS^Nl=3 z+YC3&hZJtqm`xiss();%XacFWTk9={3w8Ji6|49ZL|^NN&BXfsOxaL?>1OmO^I1Kt z)Ee)UoxsSG+#O6TGQ%Nd3EP6pJDyCKdv03+j46^c?@GL_NQD}6b;*RRL2KacR#B!S z@hB;-g$SQbY*v8UH2Q5iMp?8T4hTz$d!Z6QSyYqddsIyjP0hM#vyDtPHeE?|Ap7PD z!Ys-=sK;DEDyO0};kgOYkYVKMw9X_ zv+WNNR%*^>on#?ue7OQWiCQ(wMwIo`$@8sikOrxEBZl?)Iht~vk1(A&VvY`n^<~}D>Gk>6{2}eTLNu$Q3WQH%pa^k{w_t6 zrfEVw1?uw8-S^X?gNZ$*ykY=2Mkw^b2W8C)7-q=3<}s5G2`M3=Z#TE%5X#__xx^DA<|UbfDhunA{qxXp?$G^yj7%2jBGZ` z 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%0AEQWRUmNA933g6T` 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≪wCtRzNSVp`)V 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 #SVFMGhGB+0?l%2mI(s*~iC~HC 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 z�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

1!@NAYq&lbzrmbO^3_#`xSKw2+4ymM*% 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

rnmV7sy1+ctYp+D?U5?hl%djWa}d+8 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
    0Xq*lYjT76Xxtt>oi!Ewo0E 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 z z>)+3Bc+{T!KEO7YBzxfaaRkA&3)jKO=t_)bu6*(_QS>B&F#&}HVOiu7gqg#mv@4z0 z2EleoZ)T)Y7Qnb?JUt*^Wku=)a%H!o((C9X!^~KUN%=QE3-W^)Cm&(wGb9fzlx%%n zGSJG&t49c+5h-lP5ru3RTmwEG>czb1teR$uiM8V%nEU03S9_D))E8a84MP9OY{!(} z!)(l(F#@C#fsue{+(r>?;Cp+ZX(E^OjyIHPs=Yg$%_Ued^Ih@d4|8j{^7Vb~@x-z0 z3Fkv(8;?=21=L*A&Z}>-?)9~U>Hg>GtCTr$>grOuzxo{T4hi+eGFPN4phjL@8yHMo zrUGj&kY8^MpWMy!QM6sE!`Vv}rgYFE-4hegMkqShjRDP65KU>zvsiDq20h~zfqkyVBFN?h zUCpaC_OPsHzILNW-k*vn3a|Q4vHMBoyhDzcir6m&y^81B$M7|SeQG?weakDBm_ z_QHOS)+P762%jh2B@TlqJFN-C(C5PaEQX@jG#Y`|v6Okg+B6m(6B5T zLB#oE2kn!Q4%3K&@QwBu0}8NdUrArA?Jn{9_~R67B39Q1Ny&Ukzk4+MX2|h-99or) zZvS)K?LE6wGy7jmHx)D<Sgp!^b& z5UI<+p}Rux=u(Ic&$;}>RvJj{v55!~>t|Jz4ZkMPl9OmHAE2=mLgnefM>htq@B*~; zX0f8Zwv>*b`OKuS-jSCq5inqm$->*C_-L$lKBAPLWhQ1utF_t_=!4%1SO&Aq_Nw6s z$Yv@64jnGM%zLClVKNHcW!g;_D zyk&rrX7fX@rAw6qjNq%O*28U^SKFr3QTQonEU z0n>QoA3d5JhJt%j6GLP1%P*%G%;m3;j#(%UP_@OcWA0#l3kCe-f&+}k)Cw1jk3akGH z(VD8VK5VIqCY=cew-JJw2;7fAJ;7ih1n_88-%wk(S!+SrD)Qw7=khaxZj^zVIZ6;3 z+CU6u%bfPK^-?uJHV3I}DZ)>U7bz32BRfm=%VM7ZKI-Kft;fq1HC$9DyL-?M%5y@1 zh8z>7MODrkMVWPL;$@IH7$YkcV2-95%HwMi^c#MLe|J8?iFbx4SSFePAX(8thf=91 zkd3r!wx*RbVZ2iBiIbopOOU=r?u*WVO+{d$!!hGbC0C++uw2$gJK^mV_HgH_0^V8u0~M0$EQ06Mr=n<- znrP4mLF>#54;ExGO@Z57ePfV%AAlPul*<3b=U{399F{bGwz|rXEkV&}tkMjc_O*I2 z0!M7Ls)@U`v4W4D@(I!%FxW2@XenILOh{Xe9e@JF?NS|sp1mc*fFduJI@h()z zVPDO*ipV8;(Jn8bN4k43qTw$9#*DE(jDCyhW`d><07xM71S83%7T!>lECMIq>0!~c zp*q(Uy1>)=i9T=Tngnzf70FaA(u^5Qw=?Jq zKbqvhgRFT=b3G;UDe4>Sn1d#v!!tE%im(XAhTu6}EEe0PS3`psjsL`Zo$o4YXw?;@9|77efFN-@nCnUaCBT@VnToTX z(+tgwhDO)dXj5x5S}X1@oi0OmT5(2zQpg$Cc+z(9$!aeJNCA)HEIX>?#4CzV^FH-R zE1zYl@)~R6^CVQ4%Q#9Jar6~lK#wpWJb+W?v%aGM_J5y!4q(kZ-px(u)f~7IS ziq|p`3WcWeS18OXeAv23y1?=#!Y>0(*ijAfyEP7U$MaB`I<+t1hC^6h=Lo`6nN*<) z8P>9)wKXDAD{S8J5WE!9Aa5bUQ7w~4GXf^*Q)58ls5C7$tW2RRkL#c>idorQ0%K-v z=nL0%F$OeuEXiN`Mqtiz%^E(2H^heY5w_j+8hR1uMDs4x$v8B8A~mcP^a6?bmOlc|s6dn309X%)R6}am*P>XH zz09yINmZmP;yr>$;2!WH=Ry+mM#-K*6cOt4`6=CbJu0wrriFV% zmw_!@c`RyF%UDM7U+YA1>I;YwO|c4fc#J^4EY|a=@=Q6dm6N4!r=!(0k3ium(JG{O zSsy{y*)QPD0pIb_d2V^Dhfxk|2G7M|Fw;-V#3%C1V_Hobnwa(>7u)LAPKBpDV1NlU z*wFio1mJw$9^-;MgeU%hT7RzeSLtQaomUj$r_R|>lB8?k-cdXI$gWkmf#bIBLb8}m zWF3S+S{>DoCIu?dPZCepB^W|w!tO$DS_cD8b}T_ylu~Y!u zw{*B&-Tr`gjG8oV$l4k9VGVV`zDmNvB|E!Tn$wIV0`^EaVwjl5+%FeX-3Q2Cbbh!# z^iD9LP)@|bZFJI3Vg(Ffh}1hEdvR-Y6>KEa<9GZ-4q8*=8j3FY{1t3J-Xnh+cXbl6 zr0OH#MGn;nO#lW2Kw^=Nr#$@2!Qs`msW{BY}|$(xDCA5U#$Lsg^p zfsHyekVX{)|NOf+_hao3zXvCWiU{+UztkOh^-czYV6ozlA( zNI$}7pNB~T>t{GY3|ztI_h`PQ*-<~-q5Xq4cxq#jeS5cxSQ=7?B;c6cRCS0_tOAqb zQsondFFyS&_hUs$Y|->o?n3o*AmTBqrcl%rn;NcwsJ3HF#8ho?++`vG@H)^2gFPn| zaSFd(6=dXGUU?Yqh-2ogbkLW)Yhd~D%5F%T&-`M zv!}8@=HW?Zt6Gz(#jF8>ZUB%#F9|lX3{WgjIQUQ0oh-j*@EE{+bGfTKc~)Boe=2lI zM6f4yxr|5_+jw3ELZdRf1kIe@?-4ZVFssS(39tqXoec?8-vzGE9A$QWKXTCXOgimy zS7;y8jUu?fZh|+hJ&Q)-=%5w_sWI*_rEUyEZGb_o%QeEulC=vx<%JydY+_ie)(A!; z4wXjJJLB0uJ7>;{Ys5;Vm*7%v!ZptxNb0wuN;k!b6(QMM1ulULIjUKw8Cp{>jr2 z-RRQwG3;=ca~f(+{^L{hB|-l$5u>)cN`3MGWJ@8;h@oB<_?cc@WtS*355r!2qA%S{ zM+&s{Y3=P(V-~BLi=a#Kr8*p9@I_`BepAz?hXR!0wQe89Fl0is!AR=L{Mc;u%xA0q z{__jDea^?sn@KAU`Z0lmXi2}A)I&^O(=+d&)LpB&rhcIaT_Mh8Eh+rQ#AA=8R!4h` zO-lS{B;j(*wA^_7IvIftI8!k*CoWO|c|7GQ5u9o|?SL~)_`IeY1(>X(6DM;yM;rFM zh-)2;NoW2YcCx?A%D((NNAN2nZ>HzR-U6;VGOU}%v_XOObH{1NF9d{>rAUiq!j}(c z*M0isuU3^Wezoe3@+l-06Qi%D`=8#@@Rk2d2eBcc-~IJZ&Zg}^q0f~vEeu-xv3Tb9 zt2TL;{&m&v+E>3@m1AGRr8qoD88$ks9BU}EL_i#f4$}gvjE1;CD2nUe;n`eVXPZaY z?>p!0+3e5b><_MThkmY}jBV~z-s|fzT)BmzbSk)&Uod?$;|BOFw;>U z8cD;vc{I7xzlYB#mPai4(c*)TB=7Xlz+8gYvRH))xEL~OG+CrOe*Odk=0%_Z6li!I zMff?3LSAC-){>;?QjS(Dl?L#uR=)yf&gX%rZ@?}eb*O$j2PCk{V?wQN`ds0ItMe~yURIo2ISvJ_VsO#y3}4@a+unsnWgp43k6+uE$J}O!=>rk0a}@u@IP>w5{HY_MfbXlr zA^!OQ5wkA z?OP8*%1xh4uqPyxFX3BQy-4}u^O_g|hm`^ZvL*q9nhD;Z%Mc8baRInoE(>KZ^wR&7 zqaKE2uF;7w8aQ*NkWCIjL1@v0i-umSRcL;3hou zbKxX&1Z6nL`_7)veHYNc+T@)%liTLAFZ0qkpo8}=fL?TZf`sz$!SpW3z2|C5j?t=P zFoFu;vNmEzqMtj@(xj@AT3&{kg0_rw19}L zAu>G<2eAHy0ZlCJWidNo4?63#Ie=Y(oXJgM78H`W9Lh8a{wTv%NlS#HCr>SOl~cVK zvNeNEJse?3<8T5|u{E%NvzZy5Ua~YXL#0;9^p$kMw6QG#w70^H6e%HZ zTXj+w09ERia6xv(gKUvrbq7G3Ba%6Axs(i}QT=J~roi2YiF|om;^RrCEzmK8A~^o%s+98AX_T;$*_e2gF4FyN)jAc2RGEyEZmZ2i(9K}aH}TP7 zOo99hhzIT+6qIcYs_&-c2w>@t^KE8o2j2pL{}84@z;fLzjfZa%usQenkhE{aG&E<) zUXf3xMPHz>=Wb!OlH7}Fs<93eE09j{9FC+Jr5R`loLr-N6eX%Qb`OyIYVFZ2jfjks zrLy)3>U*AQCaw9bMT*j`5y>7?I}pT*Q=hH+Z}C)iq)c0Vsz58t*pcf=-0rRsmAt+DN4`jx<)m%Ed~HoO$Q$J zmYQ@0lJjPlm@*y-Bmo@<@FA;bx{p!>hq#`dw{!VHK(!*^AU+D--z1){9REJ|=kjNt zGH(w_`i4d45Q@*1ic=BFhB!gOC-bXWnRn`Q0orCx2W$3 zaiiHdEhNwr*@y z6PPd+1+wr7@g7-wL~SMM=sp09{L}D3qvvt1SV#v0AoytJXR^{&oW|Oys01GMc*(N? z4}G^Z0tyeYG{EiJ4hc<7CFxle2<0q%X0S`Mr`w?MbJHpH%lIOO_eed!WX}iOEv?C- z!$4NoEdWQ%*sh|l7^oRyQ~_)yk+pVbwA`%(WC7KdXj#ODN-;QfJN0NY>&7r209aI? zNR_yGdj&s}ZIqHGcPI3WR5&J%2R;ZrV^)!P! z4@=amRoZW4Hlp`~i-r=vu_;)O*w{ni$qsD(N`N8)H`tc}*4l@b!0zixP4@rD2Iun( z>8&eZ%~{^pwJNOlzw=o6@W=T4+1#3AP!W8oD->WVG49Ls4F|n5fb#cktSQtQX1x|R zseKH(55lAQ>={B+a}}%sB{od1svu3~L9W4{LRHv0UoDU32q}spG8lSLKtB@Oh}djx z6H9%bQ27&L`LZbpFcSk*&Z3dXrUX~9yGSz4oD69U$$)87bmgUgU!?M1zio5!H$?`> z?ktkyu_xjQy3}O#YLwKKU?obtsFYt#GMk*`2^j?e^)cPM8wDn&u0;Apd%PTqMcVh^ z*NP7r^+*D_TAy#hlW+~?&7?jF`vVA5>zezC3fGmJjm2bRjYVB|vV~p-El6!qe3*1e zR|a?_IQD8I{L zuwc(XX_wtgYY|3 z(QU5K`G5mXXU%p!bE5}+dR>4`AYr_rwi?M+uZyLb)s}D{G%+9 z=c#%6oyWH)_tqbEOY(TAOthwP8+F}uaP@PPR_}sRGBd}b+5-U?-x@|+FO}gVu>V`@ z6NK1P%-9;GPVYFVQx(`=p?tvfF4dRpkVyCfP1P=I;kxz4G(-v7_a@apCf!b}k-NFp zvyt|yY0E5PIis0IpK>IjXVwjDC~vx_;XfYQoIGA-R225DW~UUNXp3#|w6r0_4+CD1 zS!g!0ERb7E9y%R3Zgo8cfG_}lbxSlE1A5B#bnF-^V(MmD6VTS1RFlY5{na78#eGEQ z0ne;fJZeQ`Xmruq1Er7^xsI5D-Sa3i+>xLo*Hp&)gZHZ|K)Mv8q}V7Hk3in^63t7R z0vg~tqQ)t~OR5Xxa_UcUS7_y6lu97f=(grNjX129XD$UexOzJ{rkZKjgsKvxTf#SK zMRTG&IAUXv$~2$9Z2LV;djx;9Tm#SP)cEQZ_;-e!KI1W&G^+WI0Wd2@%AaJa;$gP6 zl%*bVpPSqqfwFH5NZ&rCf zz+%&yw6<+x2#aI<+FDl7%PATc0UzC@4p&i5RPDmy!tu-%1F~*|I%(U0cn^Vo;xp48R~fZTP+1gHjBkQ2|7-t>Rov#@au`Xc+b-@&~<%h@VuOl8$CMvcHFMw>1%xbDE>FSVli5%ci zhJGDSU*A(fvvvQ0uc1BV!FKr+oV3nxkn z%{-7aUMUIzF9>mzHEZ(f)M+7I6Fq+;3zGmBM#a(Jz#LPD3%0r1(BpfujZMEXOAeDltY#M*&~yeh|eqxXANvki^s|Z*Mfx)QSho zp|t{=5rh=U!gf;R3|0I%%u=rRDzrZwKUq+@5o4IoN@mS$4BP32HWMV=vE z1$hqc1EfZsc0EplKFk{OtaZNGFnPwMXq>7+tv~HN8<5f;>?7x(i8l$xe#*;U!k(7nEM0x^Q60`cj3nf78oRz0qAv%LVsG#05F#w`3sSKF}5 zJuv8{)w>YjO=Q|k3`vDeIsAtovnLMNV5?7{7;8d7wR#vgx@>#WjOm=*oW z2TFh848`Yrfcm$PiBel#_6X%a z)xa3HgdlDU=n+yGtE5yqDwX_O*nT-yca=1?SSdJ=+U7a4g}VVBeK4CH)IvE z*JjDx^g3e99)!FegO=P-=lqh@!6!gSy-$CiyH-8@aqgbr{UCSc#dlZrgvA}XZ{mT6 z8yXV5ZbQR?0e(Z{aJ+oziH5U@d)m`$_S0rdbnnjeg>QQe4Poik)W+Uz$te$~IFopC z0Fyg($@Zd3gA%&Jd=-_Nev6n*|h?z=C(T$QU$omsWY|MHt()n^u&U|bddf5#YC z{pB0}D*F8wxxYAHeV)4zqu{WQ(Y(IIiH|c=i2LADcC#@J1nX=8HN$_g4SRE zWPjE0&&Wm8|4MrX^Z&vhfBAC$9yOQpru&n3KX`v~v(FIw4;ATIMNfjo!@6p(9n!Hw zB*5vzMi-n?#_rhSEP}c+G~_kb7QJU` zl?XVHjtuzf?x*qoC~+Lu;N;nu?Sfy^boyE+@x4dce8{KoerPiZW!Sx0)QN{0esK8Z z+xt2jz6xCy4wkn+o=R4?QIu?_$_}>x#1s+p_)US?%j*m}r1Fw&G;)iFCppKCx{Hxk zv`P=JKVbUlI(hk6ggz5%Lgjr?U|9=Nw#DJgHx{4tlHZrP#6N7qStf*_MWSpcG_Zn- zW}_1DW!*Him1(v~X<9Pl5M1GH2jB_X5eLtnfE%G1K?(_RiC4HamO_Ys7E#dxe2Y!= zbPiYInA`cq=ea+Y+3L8D_wrp0c<;yf!tZi_45ojV`!j#Nri$FoqzhNkVA3WM#EFkyxi3?L2x=*_9{ z?h)+`Z$j=#XQB=cdP9@~hHYyU+LodT=|!Cw!XmMQFps}y4>9pkwLMfR3g%Lt$U>lzAasiOAh>a;Hlm#Y#LS*gp|gX6(G zL2(Q>L{vy^Cj6V=c?l?KEUX87q;?n@O&&+} zb!W&b!RrYk;;(CuKAK9wBw2mi0I-4r)4VsS5H`A?aclE1Ah0{Widj+!YCK?7tsIGj zYd-C=S~Kl|fT#j}fJQ6?E(QRoRL!^)6j-zl=BuchLCH7tovK{LX9YgD?UJfQkO3$Y6>P6XPszGQWf#LeO&Uxfk2(asnfZ;3a9Y}$_?q=kS3D^A!0)^tpD*NkaqN51PHPfVb^O)*Q5dm)xz!$z-oSo}f2d^u+2zu7S{%`mR4IxKj_LZtkLw zU85~^(_wLBzsE1yX?(rL|FaesHUZ9r9T{Fp=jk?%Yc1qe#CC9Wp z0|Pc#2MOXj2RDG8fx+{1aVYCX3_T1DRg+-~gHa9BCL^;%w^iA`E)zAX3ByqyQXbdU zC~TXV*(0f!?UVuf5qVm9FVm~GD2BzAn0u^Zg+>CDS}Z|T9#l23WwnHTVe1YFWoJ=x zLfF?YIj;DlU=XvSlt_%7-9VaAlE3A{P6@OWpPgUm)-+;5R=Ntz)t%$)=?lXh=4W`C zf@MOqj`6wlB}=|0JtQ0^L4N>qStnHk{as2IZtX4A3gbFsR)FxlfDs65%IER!*?z|F zcqJ%I3WYU#C`_S7ako{vqJpPwOR{K^dE_h}zV&hVE%=?s!8OGg|(F zVl_A*Ms$}xkd$#aN1>x)r09}q6lR&Kn13zUPbroScxxT{h)lt@nVG&`%|a7zXP#_f z*f>>x z7xY2fgi_kRbg56Hs)3^h`lDN<7dF%py1nxZ@I=NW^PQ~; zzt#jwmJYzyqWb7s<1?#7Z-VI<_ND7Ks}(I0Lx%tqJ3X}?tsQz*zfrUz&r#=tCmC1B zw9juFmvnW7A#v z#G^<~xgp)&u;kzvrsZwpko3mYPqVe>sFcFO<8~Mvd0lG(X}c0Ul{`f73+c~LQpE^Y zXbqZmuA#B3%HnpYfdeyx+u;e+VnwM{(hzUSY=mv2!$`rx%^gwRVgseNHch*E*e66$ zs=dAhL;fdD5$Y;#TXLln(#;&ue69M$M3TA-MCKB5O_^My)g}(iGsrU+jR9akkvH8& z#2OcbNjsV@X$;WS#wVuwH*}VVj^Gbu#AgbGThusT*hsub`}x$V%!Kf26{)qGhjAkw zPN!$OO}4hzC(IkRjN+C+afM&~M#NW1O4pZlpxG}DI04_5i17W`PiQ`etE1*diJ!k* zki8V%gi;%eek1Qx#vB*aRIImClqIT&XGTeVR6%QXPlNw9281rM$y0|Uhs0;BkOe^u z3jzCyXK%RytPH}O@R1Nq)B=@CN|I*2+#b+UXsu@($H}Y}a@<&?UkRYc=#CmPo^Sy0 zd%0#&J+K4~?}5bOZhXzKAOt~s#I7jDC!~1*=f@T+Nn_m>tM4`CaGdI~`LTz5{}q@nO~5PRhBxzasy;&nxI3>n%i z1|Z{bxvSGLnF65<<0E;X5yxkz7eT<|imd2ALwB^$2u(OnLT^dYYCU6@2qXx$=M9yV z&|0iRwucy`jtTRGTv5R_nwCmgCd%2jb3z%m3o^UJ=WG{RGNUw^86m+R^505THPqPQ zl2HB(Go?vu9Km_)mGf%3KCqjV_FMturZ8})wYUDHG|C4QWveOv+ss1*pjTCI6Ez5HgNU0LGAF8P`Y<;tc<|tsqd^I}F5>r`(e0 zB)bndy-=P>UEOKi3TtTb(IJDW7C^c+Iv$Wv_P7MLl+@P7*tmYPiV4*hD~lBZC{B3b z2Eyb8FLXsL(c5z{SPT$K780MfKW*IC^$oaNjD}&p9OJlkLru}xvJ}n4(ig2C)wFi% z4QLEY*LS`w#|I^!y@ARU1k+ZPrrHEyeZLnCuY^voi1GE99r5{X(^#7!`2+-(i7HUg zh3+XRmmqn;v^2nlVOnQVxi3vJ8a0~BBzW^Pgm7ruf`SDE3nCI_4X;+Ib?@zD3%{bo zM%xbf0^YqAwK4gR2cTkIZ|g&2O=V&7tOudo^RYs>XS~*7JA3T7Tu*t2GObE1G_T6_ zfqN(KcZ)l0&ASC9Rpc^Qp;A@R3Tz{vDeXzuy8eKAzXTAxGH%7TP1*9X`HGTh&eEa} znIJD&wat2*AF|;f9}drD_jg=vkUBbyo2Q7w7w8jf_{W$^hO5u$^_pH=Xy>KJ;of06 zJfJ1hWxmg{1rZETjwGAac;URvE>v?gew!z>7KC+0s0EuOyFY>oTPFPmMZc&Uh>elF z$oS+GY%rL^k@v$h2*0N=P~s@eT~*e4W!$>y#`0h!5?>%+SicxTv+eyF-$cET3PlMn zkUBxHS8N?Co#?D_PgF=Lc1&n?y`?5UXtfe?GhLB8Rl6(=Rj*OWx%GreoHzhQ5(}V( zU&7qTAx1c~L$z5#|8*>$?=URK2dRoDu~lb0S4n?W@6ClIflZn;HeX!fyr?uVIXzoo zY$&4(>B&h|Thu;hZy@8=mVje`t(Iq%X*Hx1R7@#;w7p{#M3n_&WNr3jo*LOq;bt#lRbc2NECn1plq2$*ScluV_}J6uQjT}0_d;e^X-S63~l2suuQ&duKuBSMazo(Vz>KtwaG?QOJ~5T=>2D6k~6 z!n{mNqweSi@Nn|X8iZumAfL*fkSmYvVRDuw$_-HSDaEqztH0;H5A$pwA6T?6S7Sss zN{$Ju-2=OB+}{ZmvU)%Qhz^s7(*|o?tvaFl&dQ6LsXgd*kzxsrYSun3i6_`nvij-$ zQd@NwkkKfaVz$XRa5(lc$ZRM#%5r?95;F?FOl5Jw6-DMi^Jz5eyztR>e^t8Ks|D7T z@0K6L`C0DI2$=2=QKXIjJ{wilz!43!MpS5&lTii(MFAJ6@Y}(Ap)!O;Q-u*u+kn(Z z6f+fg#u=M}tcrLQea!eSIaQvNU;r>J+}dzHvZDsLLAaJqmD95(tfpW->YlJQvlRLLm8<4fWxp`KI;K zRjV>-r1J|>9gJZ!j90^fFICVqGD?Lq%K?}-s{Xh-+ycn+$_w>sHAt-R%lIxYR2&tO zRwXrD6G=+5Pls|tX~6_O&(bKuhVBUuCk`dJq-C$V$nRhUxX4~M7{T%9Tl6^Ugj!#e z8jianxJcL2usmiEjR9)7Nh=O{t}ObZuBcrRkqPm|GFUJ!VhZn-P(iw5COj$vt1yMR*z zzmSf@O1nfvW|7jv31(8*Bfvyj5$jli7|`jsIM*Nan{kL)q*546|hP+ zF#%Cy%)JG!^@#RgoBqNaVoXc5-~h%%+i|u?+d@?CWjM;rZ^O&_y1HX$YBh5&SIdCE z>%AU2k(RGY$*6{q&O{#bnf4ToG2wwo0imW1O+`lL+lU1tCOhH@k&z<6YFa~=V;T=L zFttHYdXOF!=n;oU)3-uy6HB??MiKozG*Ku~=F8a74PP4tggp2|M>FG^yeC6tLV~vU zRY?kU#l+g~h-S>Jx;16Qalg~{qEX>Y8;Frj0q>Xw3b9MW@Jn=Dzpgz_UpB!n7i$t# ze_?m>r}BPrVRPp~uYN&$SOeLb(>z z-j<`x>W1_|CW|MaM*BJma%|N5hZ!5EZP4%c(tbe``FiCk+SKt@xYoWun4TWyGgeVF z8DR8~(8Oz<7MHAwsD6J9cb=*;+p((;d_-qIUqJV+BRWEeUTo9sREdm_F<@6qg`Iku>0j_c)&OE?DpoM^ zMuyHV`iMerbkw!4aTkZVe6xyhH(YJZK*T0HN-j6xVmb8LxN`v(*nJqTRgKnLn@^{1 zCVY`GGo%AA*3iGFVB(_{DHfOZ+rlyemq&?zv5~NHhy;^dxHfw zEV9r%G}NoXA~TMQG94vi)tR1fxUDnyoj_so}-y8BKT6W7UuaD6MYht z(&it<*W>9XB@iYmIUFxlGYY4!Qi&R9%tCF55b!FKpqh@p?jqxGHKu90nJbs_5D8`I zjOtssTnpY5^Cip{HN{p0L0aUqSTm?uf*SSIhv-fcs6=SLjGQWd-dwGGamen;(eOBB zE8|&xjuvTXze2{{2aE;e`hTc;m-r~otKGK;>Wf+#^dOc*&ZGx15;eKU~smk9TAUmhW@Vz>-2%u0Y-}6*7i1USWeT=XD|q&QOL7S|AulnLf8yG)c2S zxT1rqSs&bjL6-7`ziUfJC;ET#Lzyc-_VOkguis`(c_sK5UX zQ=*z5qL0gQ?H+zDHL76;Gsq)nMP>{j&B1}9^ToYOUV|K-Mi5JA*%vh8n_ea>@G7IK zcVfn>5fL(r58@IwY>c4MYb%?62P(W>l37PQw4S+u@yx2DsSO<#;YkL$ja-D}Y3}Sd za)W|gbzORot3?0B7*#pw>LPLq*`Xyop5KWlgU#aKXfdz2#v#4zoRQ0#OaQ6~EZ;WF zRQY#UEWQ~b)9r83+_27I#Dn`u%?Y!}cJH$o8~eH{{u48y@6CpbR~>2qF;T#8d)7T2v>cxnelFsyWyItD*YH?y0l*`N755#6Ui0 zr%*ke!IG%Es-bYp-6O3!D!@FIiKN}k0+^FE44pl~ERQ!`RlL=b1EkQnAnRU5&T@kM z%b4+9lSq5zBc|mm7me2UC+JT|2up^G{<+hcHeVfeL0PeexN@|wZV&LaJA zkw4{7dbx}X#NBWl@~OHXw30Xxk{uO(>bQv`5}L%EL+ZYy`p?7CYmFGETFy&m(j<$jK>GtU89d+iR${GF)4x~q{m8wITtRTzF0&@en; zoNfns2J0Ft{TJdu&XU?T)G@gU9e>(A!?{Nc(Pud(b^W)c)&` z2{$Gu3>k-#j_^1v+=iD!5m%*ZYSCE`jfmpSD%==xB9fe@G(t~rbt~M!te}=)r!8{w#lA^C#kv7=^idZh$X4%Pm!Dea0UU55p|)P zE?Q$1PruE1lKh(iBf@`ipGn@z^_eK6$Ur8vpj1X^1^P@Nbka0Zbz*qfqy=dI`?7rE zjOfwO{ZfUgD0=AP-jRO_6u+IoKB1;mj^pRD8Xp{nnr%kJdO?tdaA$*ytqG|pav(56 z%&9MyD<1?(RQp5&7m-?5pbW2z`mb`&%wb(iKxbJt{V7)ZSO9r_%!sh^S4LpbNYQmc zrb{nzeiTEN&tL`aY-d2i=A=h zmpuq)P;QKuDcQ&Ofw~0@A0scOaZqCS@(IjuZN|2i%V*!uZmOOo3zb<)M8Qz9UU@1x zm_S~vz=mlHe8#3?PM&Ld2+!Y8;I>yt`?{+`1Jn=<-rPh8Ybmd(?FtTt4Cb;a7*3e2 z$WT0D9O8V8Gsa|*w1nXd3MNHHdyFavN9tQ@?j8^9aln%`}e1XY)b_Wtj|Bv;%8IC^$y#^9sZ_BtU=p2H7HnbN` zAe6(6yEuY<$Z4qxxfJaen9rIDgQZ69JqRP(f9mIT-~Ye2)cwW5tZYhCM$$U2D7 zYyxh4YvtV!VA9S&t<%)DcWJia|FEN}`fKh7Gf10V;4ow(FW^*z9x&qwqdfmXM_#Qq z<~2=j2D$to5GHf+~ivB%IZ9~RjSCLEj|0y1-%?C2^m3%DHNxr%^M^O09m59v(XW<8GQ zS-`N&U!E(_xhBf3SbPv538Fugfny#MUIPy4_znLZeg)A9SeZ$T1ojbKnu=F%j{J|M z7ywJaA9y9*D2v?ko_$QE`y=TTk1%-?rugx)B*CO2P^0(=D%9B4edhx?1%AwDP>){l zKYkA}^tTAXzVxH%Q4FIRn1+>0qUQ?>7Zh*kfX?WzkO>(?fthb6@-Oa5Ua^?a{Bxuk zyeFTMG!hZhQ^bf_Ig_~N&XzHs*y_Cxo70*i_mlKlfYKjR>2N^<^w$?DDe3NU1nC^? z%)QQ&ICdz#xok$4Q9hdSjvh$elY_YJ{JieZ<;U=j%Rk{He~jl`Ux2<|pa04MF>;W$ zz$f=d_VjG_g2(EZ4ZwMBYjU`vD$iz@<1{J^`50IKIvO^{a4^AqM<3+NA%QnT)=Mlv zh7;=k_9%|_{!R^kKi$U}s3{OURPh4godgu!^W}FLASb;W$N}tdxEQe<2-mEOOvIbJ zn@5cTnGl9dYAi@uDRVx|n1%o_;zUB@{1o?fU*r2(_jR{RvZo!GhmB9##TAmv4GTF% zw1bK<=018Q4CsOxb@-Iit*YYZS#3Res;PF5Y`en>$oPoZT>)|t11?JxW&+||&nvD& zEPp8RINp;+D~=RzbDm?aMg1()^a!(JihJzU$$%xlAqP}+o2qSDt)bfztzEP=FAA`+ zY-AX1PQIzg8_8s--|x#@xWxxDxF-(wc7*ZPL}@JsYITTVyH1YJ{iA)GK!xP11gaVX zfI-a_YE%@qNlVH!V0-A1&}))mmx{Oq;jE;!Z-`)G#-hz2|3g0718>-G!`a^xvwyE@ zep^Z4nnt>74MJ{elgqdykC3T13#jfc`3dvLqHpm(6Uy%iy31E(( z9?ibiSTP<$)Pt--bVRz7*Ave{&exH(U1)D0#)Lf<)Q?E*_U^?`rDn)vQW+{U!zZB3 zJXLe@^(G|u7n7X!ANM&jhbffd5TFZ2B`x|Q+C_@RyV2tDkZrsrD9M9FVru#o!Sh3d z2YJ!tOh&eGz-DdTXWV?u(}ZeXpo&=En>1Kh>raUzp_a)KC;W6(Ae@>7B^TNMrF{db zq(&I_2RqED54#Cx$I+^CUz2)?O4Nh2O0RR4+Ffir=CH&!;ko!Y752I;a-I;2kB$u; zIVzeeIxXEUmZR#O&{HBC^MP-{Q=UtHO=5uy>h4ssjN(S4wVR-;?A;-6Sk95J*5@_I z!Bhz&C&H|dq3*GZtStm%2nC`~nq-HRdx1yAkTWkpl&p1&#B`Anu%>7jUt90H(y8%Z zBm;-4h1M?TV~N7dBMI*H7>?LvF*|>alx$VpnHvd)5SOJh+C)A>uS*~WNH@JE5O9{T zRFEmK1U=;r52x-tONb~lztrbqyFD6+TPW=!SNW6-d26F|W;#Wq5&LGySFFx+tik>UI?xD5`xZ z@OZqAfruH?S&1M26=r=$1$uvPo|=nP4akuSkTwJh&1V60#v&0AZlHKky4e)HIA%aF zKp|z&k_B8<1E`*`U#hxjslI`R9K$aUazl3#8p+g->hmPrKmi0FbTCZ{spb{O(rp$w zbD7+bl6l}}RtEz^V>!U`ehvM@af6;fT&;0b)K8-X2Xlv+GUIYIZZ4y%)8`Gas0EoSl?Eyd4D<;IO5zqQo|B#^ zDmT|c@`*8@yzD+l3U&;jbYkc&8cHh~RA$`UOy+c!@dEqe^Q#TNuEhV*u(KTh_w42B z6yWcR+mdJF|1v4Zh~2;blzVhnYAqf;-*7Oz)X)(BkIx(auS6VY|Cqn>yX=8;m+IH6 zV<<+(W3Qyzt;2=Xy#gWy-pHBEHx~1J*F28$r9Q;>{AYJ2>#EM9b^mafI=h9qWLtdr znfe{o!IKR`@xH6y``&*Y3;f=<4J-<3p_vgfu5@*}{i{yCVy_x=@Z72J}r@oyOtc?VA{ntMwt$l~m!|#Hs21iOH zNTU}T5E=gW?=>)u$VXqv{_h+}$u|`S_kQ&G`TB#oi^nqG;LLah1nB~Bbkf@LKmg#Q67FVeZw6c%G?d8a;CwD?&k0%8jqi$ zsb=i0|Mj44zT>W#S^U}Kb)N=gD*OH2Koi04f%N8Wk0<+bd!DNMTNVB2I}U{H3H-Lu^nl7Ej7^w^*1At&s0 zlmCpjf$>Gyuua=YpU#awSC9_CcC-oQJKqoyyQ{k5mO+e<%Cd3s;!+_M9z zE7A7dyg4YfgE7U=9Xh+)Npw@U?7buDQPQY%5#Vqx)&UwFekGkT2B3#d)Q|XYf6(v) z>vY(#!@v0JhKHwr*YIWZ;Z*(o+adGw%e9+MhdVQhf=cr12yrNQKIiZViqQThC7pgiFfTz-XTu1(_Z2BMhF9%*enJNA+fR58Qrvp9kl1ON_!LJv#3a$4S(=9=#3fOl5uZB7ZjKZyQ(+IoqUPbeIReY#wS#Ojc&aG3v1$#U>6I7p zJmb4HzM#}z%uH0@C}F2^oQIQOZmabT9&g|uq9)*+FE}E>zqC6wRiVwb=)!3kRG z*Hdr)3cEsvm?-d=6(+ytef8&9Uv0y*B_)gp*GB}0H-|DAfQ^Mb*x#IHShmAANnL-o zKiwFkk=+=BL>2;S=XQt;!?C7mf=Q%pV-WuC{R}ANV21R?n)_8;y~P;zXjNQ@Xdm5* zh$Yf~R0Xk-RTgzYo3(}4J6Zu>ZmghT*Or4^F|8#Zo)}F}R6u7-lGM3I{e0g7M{TZ7 zPErA(5YoZxSdIy<%@J@yOXVm*1RQlWz}IcoK6^^WE*I*DAu)FcAfc&pKjWa*PKoF| zR`(C<+2@k`$vBx19blOZ@l(+e&{8KUv6{G2CTZ>z7s_Hw zRsqm|fM`1`cvdGaeMt651iT$_BCoqZ+DqI9#&0~5Q2iu}N~eIXxcWVU_aFxPtcm3! zsl6|frHhydQa5-!@(4*k0BsW*<;#P`cWbiIr8l>pAPlz3r(z5#miY>?Z8_vuKqux{ zMgV24j3D)9x!f}44Anv`q6n1gu0=hDWgi8xCN87hZfbMlDNxAx>Fvo&J9dH6k<_fI z7VdFy>RZNn56cJU+NwIkKq3K`>w~Fh?sy6~JRP2Q7LDlJ=6Z zm54>>t?*X`dR;@dN7V?(ni|){_I0}2-9Dl?J!YyRewWXX8kkEgnzTVz3a*5AUIu_o zP^e#(5AtYL&z&S`GEd-ZR&7OJlBXa<$fJ|6RHd$)tH34eg!I$GZ(xz5lrSw%re#i_ zE;xx4*RUK6VR3_a8WleAzM~GBGl7tv40i+xGPlQ@D<7qyisX!0M|dxt=2y_`DQFDJ z!m0U6fV9Sg&M%)#UPU7)mFwpdJ=4gi1YM+CG!mYpQBrvin;8fBqj^z89f@IvgrUXC zC_7NRK#LcRLno8Ak+zO$pMwEShz&MPYlJrS>r!L@4s>AQ-SR2(?~vz}@{*SgrD^H% zn!db9^&PwgB<2zimU9PLNN`Tu5WnVA6H5u2#z+kxY7k?63eCsx;_| z+!*OkbkXYQ56?(byd)0^M6j;*;kF*`=uJM9|K$_lb=wfFrIp2zDN#b=>ac$6GMbBH z0fH$TLa7q@9FiUQLT$=RmC=HAg@o9PRU z(`M6FU&-<1I`dBH7CAUpOT>vX-N2DZ!XPk7Rz)3MiuUsWgp#H3TD}*(0O>g-|07Ms z&4F#o*eAG2zzNT_$ruafVV2I79zaxiTKnz9Qc@d zb}%l;4beYvnJa1+0$zgpHc{cir(+VwlHmDe6+lV?OQDkd2!G&*C~a=Kh~^&mx-lAX z*u>lESn#$rvCYY|SOtdepx?uTgBh!K9k?fTijb`YjmUY;nyqWs7EQ1sUoR+Z4_O4N z1r5Q*@Xv}BIFv-6VI5wnDfb2HSGS)=x;olzoPIrisZ?Jt=m#z;8(E>=;L)%g7DlaPTr73 zj9!8syPgMeWQ7P85d%}$qcb68FP`3H9+w?0GKfx1iocK342^Cyl|tal93X0bGjo&4Q2bzlB5f>=la-h-)B-c)dWA{UDU6HgM2h!FS~e?Rw_YDE z+wG8`+d2m77V;jk9Uxj)45^)Luu8t(BBs<_RUHv6K%YH4@4;-J580IML_lzI^|Kg_ z8cL8~XoYZ)F1Lhm` zE}(95x4@e$0A4xGM&1eQOLG(x(rRI@9d3M?5V*v>ENMh&Ay7RaZjy$`ud5+5C1v@v z4gS&$qRw2`c>RqkEjb`Zn%w%OI)aLDumO2Bx+@x&N7ggvzd_DsG{`v+=Z&IFtU-g2 z-P}cb4Hs4!fjA5a@xx~U z&Upv9a?$QI`!N#}CpJl#ZYz(lMMK7o5jgRlY7cVwJ=g{LJyO*b&#Ek@xTeOXoPwAz z3(#S0Z{_LrnpNm4h0e=DKrzRmJY6(A9G|@fBU^O`-*{>oYu#x)3Dlaz!iYK~&=MVo z?m??T`w@y{yJ6rvflBm%PR?3&CpGn-7!0+EC`g9VCjdi!lnbx0sW zab1qNE8_YfzYfircuNlo#9G4+Hl@hs#M8Zmz{ioVBMd%-G`RLK3oyZa)SOv>%#`(d z@B}(svHCeq0Ati^qCq#1N58NclDwHj?J|!LsY59)0|dKa)Js~@~9zEs;avq?IyMLdqq|l^OXt8=2^_# z$-FeaBt2y`5cH}DX@pIsijxw&k7)C3QFrO4>o|4)-1=Betgz8h)2D*vQxB1;B)OfQ zfQ?*lkv^ZNi#1Y37;bMq`~c6OPc9;d3z4(J(1IaFENOS7MNae-0V5Go&5R>BOq*aC z))DEjhnCiMm?TBrP+Qs5JQP^>`CZL14dwP68-LExu7yjtIr01eqbMxviI}2bnbcr| zgTqQThn*YrMYsismyYCV?Pg-$DC&o-Kn&o=jp3osEKtglj4F2B3xQy?1PSPJz?vUp z$&uM{is#PKA@;xu+w?j@(D8zevmsWyG}w6(@UzG9$AfkCa84ac4zQ;3Fgd2@?f@A_ zlKu`{Zwk47I7ng+x@u0c(~VVUtIavID1n(~w$@CQW9uu;{NUO^9ZFGZD7{SqfqF

    JFlRPE!3g1m-SQbU(5|947-T|-1I5diPF+Nds4 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

    e$ToA6?c_|4%%|bS{x(LZ|Fri5 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

    )SQOpsnjOdZ)hm7H;KMRZ=II(W`pD8uY@;mme* zz*8Q9(kV04GY)9&Ox<880Tm)4{VESut%*?GHx>m!V5*(3SWSOu*^ zl6T6mp>kF&6`+TH=VIhIRSIDeS)V|}BgpL*-al8#z%S!!2R1?5PZvrZB%a0H0tex3z@SG0Y6dht*5jbX#_#3g2JK*@o9T zp=^{LBX>-Z8oQoEW<5_PKUUne3maC^u|KzHfxWrbyaE?JTpnr#+)&-J>xty1+7r!W z$=Th)m>3G5nm*q?NK0IGK@_69pGa=mJ)hjNBLzxeH=yNdfj!BOxpTYKYbIK#G^l@gSS_&MRhz$p%cNGN4r}%n_db!_ zTivrKxp&{bq^$1P^=J4dckK47xArDKR(oP^@@wuM+=ce`O>l4qYcK)ZS8p-Mme|Us zhT`5Qlizi5uliYj(7uAqCcG&wP^t5f75nx6WEKn8M zG-?;poG14rzq@x|^4Yqq(s8XNO`nJW^3Vb`N^}djl-SiJP{%w)79nfc-S4XNAW`4D zC;7FmvPcb0bqh#o{len9#`(xeETPdGqM_{$cmshT6BZ0@t8@pv@!e{-I~cEC^E793 z#$Vs<7RXbgTc8Sed@b--R#ag7e=E??&Vv=F1u!3KmDIV$2)LuOYPrrf+rlM)iXfk6j7k2qt3#0Ajrs62PTDQ zy@>VHLDhlHq8ZahE8VS`LEh}vEMYyt=_Y%IH0{YpTh<7keArPr-BS4s7NW+hvs^&9 zK#lNL1HQ0`CEpSrS=fqYu?cr>R_(yz4dh!b+j*JAo(6lHT@Ad#p0dzS)f#cA@zH;W zMe~;x!@{4p@8Mef_-tR~Y-drxf@)g58c_5@zWP-k?A^`@Y>WWs4Wf4sF^fPa_gVkTWx zf*Kz^gqY~JMoi@(I;1@e#jK@<)yKFC+2cb{m{~eQJ``5^8ur6rLTG`FQLCVnskZ3upx;vMaY8YC^&wj&WeM|aQx zi=@>qLgj?%N4i!bcYzm5G6(_!f(+9Uwlk;`flmWkZR(ss|lj-iIP&UW++x>NEaS47zhFibmo2A}l_*88~h z4D1+~4|)bVhjw*GuJjDB3o+i+Gf)!cXB+Z+hQPh;o`D^MIIbG_7afBHfGT3pk<8EG z7{i^P>h~|gLOMokE34K;q3>DE(D$%p68eVQILojws$c3|G=(h+5E!qW6}GDvU6jHA z(X#iu*m09_F1pBm1hdAo+>7{*JF5|L(^wiRM~5^}`76PRS>x-mCPPSUj+3r4DET&xd>0MWSI<7 zm5Y@9NR~ETG!G3;%l-xy>d`1@G`zRev*ttK;G~pl84AT>;Q28a?gEX1(TI6IVCJL4 zFxPD?#h}@m4Y|b@OhpOC>(&XAsxrxQs*%y&!%mJqbrvP@z!*g@lAC(=e)LSpktN1e z3}wg3IqjEFMf~D6VL^ja9_0Usq?{(uD8VCGY~rnDq-wOOvCPkm1>%GStFV}IP~2l_ z`DNrC#_gf3Q4c9hYg#VuO4JqVecXdojo_N^=-MzGeLlQVL(tfJ^H{v8F>2KJ8yuHL zF&a5uO_fvv7xgMvNUMiAGsJRw1wG+uaQYNDbw^b(0|||&UJUkMtuXv4q;U=d#&B<4 zjbP;zhYZH31fH$Z5U-Kt@sL%|jo3#pJ{=YePV{2Pi-VfMAM%+~7~YP1D%?kLH#k&C zrF%vc?1G#Nms|##pk9P84n-ca!mE+)#}RrduZ!zADPy{ss$KwW_ z;w`jK8~Wub$F?_eh~LHM-Z^MtI2sIDtH@Qco(hl7dnP6W^<=n6eMf ztAtxed}Yv4e#f0|szj445WgT#ccPZnDqJXA-VB~o^VlKRF`}QSrPiDKk3e^%coIS`G1V5f!+A7GE{k~cK5kdit}n2p9Ef~j8uf?`KdvH` z!E3|61D_Su+(EKH!bPc7sGNjSH>0yxeSaFi3tq%;aT-hGjw4T};VgfzQK4)c&6~6p z$9WQM%CLIt=qpSpYxBz({ zl*E))!(?|#P71JFv^&N7-F8`mc<0Oh*6; z6!EY3gP&vSFK+5%%046~oBEvU$;wIf$9*?@Sk}*ej!Oq>Ftw?UM%{BaF6j#AHr3HT z_hkPb-+qHql+o>dFuN5gHUHMcj+SfnX1~f*=B){ehCg_iz`u}`>it&sUTk*(@aFmf z3_P=+vt#F|^gB|;b;aHf58ulaM2q#Ckt5C(l)}0Cry-%lbl;jIiykmmj(ti2Zi_Q#sM$iWT0!;L;wuf~b8yys0 zo5m}Wq$u0!PU(|8AwOn|Un0+=v#iK}R`}cer=HI87)rdA|5W<3SscTCdzet^u9Ny) z>*mBeP-k|FlJ(Z}HZCel?G{glTgQ10;ZQ*e(bUX$&of0JE~=JJ zEyB%XoV1Fq_v2(H?1@r!c_{VAaBJB68qZxWruOTT<{WObI=@(i!SAy|SHpZyeHICI zx$5=s4@v$mm*b14%t<4Oi>v&2?S{WvF8^5wAO7T4s#=LsA%SwBF3w0X***tK|04J| zjG|}JkA`6?(6_-!O1(UWIxecn@HbWOyn1tgmUsCjg|>tw&t*QKcpXhE5e=UssdJzP zC#jVu@e5KJcd4yL*4yFgz1V?SpS~&Ss*z8JKeSWz&J~w@tG}Q|?zMIf{}Ym(DZAmm z{vTt7kxll8R6mr~>%-Q!&?)qXUynl7QD2sn7&+qCi!jZ?Go_4T;ZP2g2BwD5CTMsD zM#a7%sSo$3B{eKbKb3jEoXn~$BqJ&!DU^|-Rz_0DgDL!&G%4gLCzr>II2X#?A}Nz& z!xlHw{B_jIzu;f^;W9d|K0@85KTH(M@+2BDbxXqIQtm7D^RQYj&)KaQ^FZsN0T7ea2nY0a-gV>< zdZi~Rm?|fiN=i-Z6pBJoDWeoirvw;9o=)ELL4Mfx7@Iq)G@(r}#4P zMp|~rS&81{oU_#X(aD9bNXN34y7FxG0m#^%8!4)+qip-z+|i+Wlyb88pHb=-G=E_r zeCjO^Ox7$8z4a_b)jHf%MAK=dkxf>FaoZOGi>WD+nD@ROohXK{KZE`b<7}B|6(DI9 zG5ANX7RAUGf)3JXM#?QHbirYeOtC#6Ryic0SJ4zD$UF(T?v$K_q(0XndIoUB=H?g< zz0nmcdf7|m`+zvEvj*u3AHMw#ikyZ{pj30_w5kgqE#hkRHD4_{CcA|^K6gy6m zd~?s`1^iaJy07c)+njoi8qM zRg5e=I*Z+DWD%Gk3(vMc`F^KI~5*CPnffK0<&j0v)ml#P{yNBJeCe z5R8<12@dkOI<`N6#T;KMECLsjMc^V~5qOT>l1H<#542U6C$h2W04xH}6BdC>$RhB3 zVG(!%V+|<|WZ){AnkI|DmkEo&3&|qz<-#IxS^rK112C@u2G>^re}*gqUnwjCf0ir) zUnML82lzNMfv*Njd-Wo+2z-sO2z)JB1YRsG0yF(PwO3yUmiFo;WD&?`(6v`rkVW97 z!XohJ__Q>0{CTjnS6@#Sfo~8NbNmIe2)s;K1pZ?GPVLni@Wd?_g=KzJn|Re^*!pzLP8h2ZcpoA-+L-^<7|TufCfs0)J0f1YS!PfkVO~ zP~NJ*9RCMJC02i*53e(Iy|4)UpJWmE9$^uK{Nrd-VpgD6mFY1P+r$;2#Q$ zz#I7>Jahabu(VhIm@ESSL|6p=DOm*GBrF2|SM)mV)%Sv>z4~Wl5%}lABJeNBB5)w$s%x_un2rVSp?oJECN3ey-s`egJ5Z|euyjrKP)T)Zy}4oQDG7I zmwb$$Ievr!;?<9mMc~JT#ly$RB5=L12rPw{Yp;F+eC^dwl11QO35%kCO%{Q-3X8xp z-x9za{{}4W)!WD-knYg^>Ziye@Nb1h;HSgOwO2QSrM-GPSp;qp7IUnSMc`&(5qJk* zLckn91D5vcon#UCSz!_QcVrQGm#_%@TzI+m>fK;zuYR5^0{>oE1b%@m0=Ec@z%TM0 z2h4FR`Qp_oSp?oAECRno7E{}VMc{V1CIk2nNNBHqnFN7f5f*{>l10o{g@uFq-+YAv zbG#1;?bZ895coA=5%>UE1nv+P4$9>l7YO`1656ZZAVJ_i3X8yRl11Qy!oorQlX(}5 z`W6z}tKTL;;6uV9@H=D?I3_F{6uLd_)$byqz4|>81da=fz#3TuJ}fL8)FV95)PE)+ zUVW4Vf!`;AcTyD8VDJ#6;-Aw5B{fPA9*oaFkarsQvysDGq?8-{^2qnHM@70_&Dr2>5|AFLZbs3H?Tg zNo8K>a2PE8Mu%tc?2Ke^gc!vl93_FbI&gIxKNf+j!iw*tm?EKAggS{{yp!TN5{gB@ zk~BuGS7p_45{gAQLBhg2DNaH&UmD@5Q^~#93<340p_wm@sH*A2=jEjlY6hD5(uks( z?Y&7}8lmQ(nJy>ivmWy3$NgC}FKM^mU?6HRp5CWA?C2VKL2v{`;R4aI1uiA&deAi(| zqN%9GnocJ^tu|+R`c$5O)$YTb(G^nAdT(hyVNcHDujKJ?B4IyKdOQ)Y9l`A!W5gTm zYNau%&fA7p;du$Xvp{W|Q(L`J)pt2kn@XB>imYbe8xzl|t$F9Gu%z!)ba1$DUTqa0 z{Emg;F<#y|Sqg9K%Mg>^me6WeRuav=m5CWkISC4=ZFZ&7g#J@O>ab(yE5{S5hj%6H z1*kmSkXSH;xqsh~x~Fe}y2sIn1{5;40yZJnpkO6#tHnx=I$3IhC^a1W+ogFN zEC=^lM&~Ts8@2jgr;sE6oJwL2@BDM-W4B|orDZ1`!XD?u5r__9mr4bb_`mDOae@7? z3On?Bbd}4@)HdAUt5G3*)|Y|81(?FbN`-BX6&u|KlSU!njW+r+VpnsU{dH!0UdEtl zFHPNMfKV8_-MIrZfT0Ga5!iyTwTRpX7f_9Z!m8{2(n?{s5p79EFhXla{*K{WHf*~r zgYt``H%s0$(Ah>0S=(qFJV#b~o22$z3CvxhgP2Tgtzwe|9^DQqIGE_jB974cu%4=kGY6dH0yVoZ`G=t)W%K_1 zQtZCOhUytazz}W|Xy1Qe-oiwOIZCaD;99MIp*;!pYl6_~%gmu@@X|fB^3|w(`|AbP z&O(5lZ4jsLArIe^mEN|{qzX>mTH`#209<(3vNH>xx9s7Cr!BQ`VKlF18}thTL*Xu1 zbp|&DGc$A1-$YDW?<%0TT)L1AVBtd45Q_FL=GZ6sOOA$RZ*Gp-_sF@-tZxZJSPab2 z9JQ@str=A`sUKxrI2!vzfd~BE?k(H|Ck)Nu?mP0gXYqg*pO0Eqnw>^;G#A3Sg1xzb zvfnFVU065=fBDvAnhU{iEVRFkzb8s_e*S(;oM-Z%x7N6$slLk=E{xq)+SWcyS=TR| ziRK+Vh_$|o2hlx+JuVE)p6v8O`@YOP56FYQf4DHm!#ocSR0SJZVPO+Z5gs~{vEXuq z$r=}hEocjA=C*CA=L(w^Vh@HIvhm)B85PBo?@tw^Wa@&{72>(iEQ~)@!1LA*51-G& z@geoHMdu?QEwwzgu3#;(#-;InW?|pD!t4@zL7}kl$ZPFQQe8ZRIm#)}J&TjRBbM=f{ZLhI`;3j45&N%YsFwyv{$rZLi&xrz z)~*BhYnvXf1e_<`cBF`@G=FEOLkPkbd%ZIF%DPg7c&MmY8he{%oto9l{c?k}^Q}-T;kPW%11b&1*n~Wq@3GLphB7%KWq_dglT|Cpk(2<1B|uUF6qW!<86X1F08OmQx|abO zuL{cm`?XhPQOp31SA}JO#;d|IK;u=pH(`LrtHLrs<5gi9pz*4#xf!7Gs;~^ucvV;i zXuK){257u$Fyc8b${9j?RZh}7vQR2OQsPx%i2x}93QKY%MI3;>S4kP5-vf|kfM6M* z@v5vCnjDQ+g=KOyUKN%B8n4Q`lnu~$^}k-P{9mtE_V1=*rC34^^DW*Kl^`{-Dr?6Q zIiw_3g=JcSiB(}4povvkYc@a=tHLrs6RW~9KohIDDw~f1kTN-fWq_s!5GezU>V8$0 zvQ3Vr2N0G4njSz{255Q!DX#&V9za+IXnFu)2~aO(BmG~mSB4YxVm!SgtMNa@*DJS2 zZ&5vri^Ucf)|KUe?I4;!3hU;YzpjjR^KO11-sT75&}HOBs+-@f2BNXWfw-h3TVK7E z{%lzlGUaf*P!9W69xN-X__?xj$(D2apmn9*iwz8k4TZ3roL22~P@lTHfc>@)>2uHH z`IkWJ5hyKeDdU;+G9CviMX(b#I9E8zlV8NiGT!HskMJp-;N-J7SJ^5+d}7Rv%&9@V zl%PYPa10VvU%-o;#722a1R4rc5E$NC#YTpCaxNP=qVoAjq|>hF0WW^3tny_%T_gfTdxBn9)>*$nJDPb1S<~<}X@EacrY9ni zR4LyRQQ1rwrDCC+@^O^voNe(!9;}QASbUQO4Hq=Q>25T^;*vI+;4{!c)@^i+fszTY@b#LDvE0(?P&P+*bvNcRF-7WNB8PM;)ReuPN$A>9_L3bo50>Zm5@^i%hxY`N%Uhh<;A@6VJuhRC6k{HJh{I*U#i^L})H@BnyGt zw65nVFc+$%a|5BRg`5?-<5aHiy#;KwHrKS{W&2=gAac-~8&E5}fq~Gf>OeCBBCeWua9Ak;wkaGGHnLb6S-Bs_wtC1G&(Z*?|+G zEF|y9=5nE}wPm5u9hGIxP-R&o^!LMM7500q>3AWRi(l)($~&?HjZhX(BjT`3k;YN?QjCbN1%lbyuIev*} z%IaDvUv62lf{k?cH@&aHVbavm((f*)oV~vi${~*@l)e1{{~QGDU4;hRJ-;l8SE&rB zh{uyA3eiuYay&JFO%nNKuyff!AKLv({A?8*-B{M|D%8+X1)T9}2x^vn3%5>lIo0oA zXke=L>yol=(Y{AR#>SmwNzIjUgEL%4(k1IQtV5}56@K4Vpn~7kq~w6H2G&(^(7%w} zlLg&(NeR5p{h1u5>m4tk^o|$J;-(H^aZ`t8i84-4xf_Hmz2gOxEOQu^0qPwuTFL-r zRY0Wlju)KNJ6y$)jM7^%jBqcypW}Lynxa> zUNp;?s&~9-mH~>D=76~~DZS%`QZixCEZ-A8LyJXJvIdD-C3ZFSA}JO#;af%uloBl2{c~y_h)LB0UEDD%6OGCFh57*RkD0j z&AiUvpGjTDtN#8>%@VKr`!hAm1VF}RRpQ-1_rUFb4 z0F3dfzd!SgnY7;uj8{3i_A@iFN|uxnx`LUv@hVuxtN#8>syANs_h)LBG1Yh#QpT&C zyZbpBuaf2GXuRt0&!jHnReyh`W`WPvY`iK`CP(8{5irg%UNsm28m|gVfd2kW?u9cw zfWJRevqaS2pQ%{}XkryW<5jLaNEwA?fX1uBGC<>1u#8vz{h3s6yz1}I)GPxuUWJtL zDi=2V9F14Wf`Am%c-7yZNnOUP{{BqOGNu}@ij>LGcvTdNSGjKD=Vviuwc#)Ihr zgc2ZG0u+|10KGp`%kzkz@v2Y;XuK*c12kS077qLwuL@;==4vG@1JwI7wLFjb8LtXu zfX1uBGC<>1Vd21^xmpQjfaYo?ECV!N6&4QqC+$&412kS0mH`^C2KzIyyV0P7{h8R^ zXjsAiOzdtntYCj8b~hRpcOUAXzdw_ypTeS+r*q{7O8pCp(D}`3`8`KkA3!Z~_>CU<`7{h4r%-k-^xpL%~LoTK+=a_6VspNXxX zdVi+L68|`QlffH_U>Ij+VD{aGeG1bv$vb_q7WTe1|X-Job!4EDzvILAm#W(Nr~^(^GAC_6y>bsIO*Pv32$~jC%SfF-3Yp7%a|iJ2aqWzo^v=? zKt_kZH~cTm0p6>dWr2l8RFFdJ%=>XyNGU6mDBnbXtr6@zrwb2kyZV zD9rp(Y!LsuoI2&!OZI!R4e;S!OD~Y!NB;3rYR)Rf5#Mug$5|2+_s4HoeIlN!Zdc^b zgD=Z6_hSut^~rduxE%o_jRLLXJ+*Q@I-W26pzms@+`yWNXn4SgW+{pcp$4K}`8kRn z=)1byG)kTF4vLE%2ceczG)*CAY-A-xrMT{J=*@l&?)!S{jY8 zqT!z9c5YXSkR=EFkC{LGQ!3c5B)gTmw=2n*T;_H{ak)kanI;Iudz?auE}0MU=BN+` zi1Dfhf-pc(8VJGwG1AvS5C#ZJ13?%dC=CQ*fEfE~AP55lrGX#}5R?XjFhI;eG!TRV zg3>?`1_(+6K^P$ZX&?v#1f_u>3=otCf{>rgQwS77fI<-{gaCyiPzVErn=}xF0fN#% z5C#ZJ13?%d+@ygZ3=otCf-pc(8VJGw;U*0PVSu1C5QG7O(m)Uf2sddU2m=JAfglVJ zlm>z@K>X7{5C#ZJ13?%dC=CQ5Kbgc4D1-ooB2Wkc3Pqq01_(E4AP55lrGX#}5R?Xj zFhICT13?%dC=CQ*fS@!GgaN`$8VJGwL1`ce0|cdkAPf+0(m)Uf2ucG%7$7JO1Yv;q zr-2|05R?XjFhEcm2ts}`!zEA%0SZN+5CRm6Kp_keZqh&y1_(+6K^Pz?4Fq9;aFYgt zFhEcm2*LnCX&?v#gqt)FgaLxmKoAB9N&`U{Al#&ZAPf+c27)j^P#Orr0P#-)K^Pz? z4Fq9;pfnJK{ABu1pb!ESia;R*C=`K07$DrFfglVJlm>z@Ku{V8!T{kW4Fq9;pfnJK z0fN#%5C#Z0X&?v#1f_u>3=otCf-pe1NdrL`ASew4VSu1C5QG8Zp9X?3Ku{V8!T>>O zAPDor+6aNN^dvx`2oyqqLJ=qg|KSHWX&?v#1f_u>3=otCf)JQ2y=Wl(Wq_bG5QG7O z(m)Uf2sddU2m=JAfglVJlm>z@K)6W*K^Pz?4Fq9;pfnJK0pgzqf-pc(8VJGwK@k`% z?6kKl{iHsnjvVmoT$`$CRczb8Tu^O9cx%^5m`XLLF;Uj+Vml->(R=ZY1hu z;fNc$WZkIyYw)seB#$NsUxSx*qwcT4%es;5hI+x*;M=3OeiX+a#+g~u;S;OvQMH$2 zUrfO{1B)$wpltuLJ6%dXiBUN26?1}xS<|ipL^r5?6m9rZr29F+n=YmLDEg2;6?>>~ zl3G28&ihIW_fd4FlsXTRUlpYVXuX@F8xBw@Cs>j{=3@4Bko+|&-4KY5o?30+tqxHX zvoDBgE)nSTqE+}L2Z5+`t}?hMiS zV;9kv-MNwtQ@LY9y9)a{=2qJeJx`_FjHE@kl@nwjXmFCHrqFx7jVeNNO=%Xn(BHiK7p&(%5w zkWuIy=2I)r*~QY#G``6(i`?+^?T+drri}NojH410yQ1 zWNY;a-x3;vZ8l;F_GKLyOj5 zP@ra!U(xGp9$b;UUYzEKLrB7bizmyexw0Ze%xpMYq$S#;6Ba5WQw1J8Ea-XV zGWV5m84dkJ#DlH~7D^%>8hFGz#Y2;OM9SEn0Txz@xKfdWg}E6L&+{NGZsNdtM>a=M ztP6sV6%;LX3X4iPWQ53xOtmvZce5R9Z1L-H?r?zu*tICjZs?G5_InEvCwzrk;n@F} zB?aO$*MLM?Rxg<$4_dM&r-J$t<0#c-rJ|YLRx0Yrby-=Ync|YbN?Lfh%Svpx z`I3rbz4Gncz;be z;=0`7LIf#D*@u&&Sq?Xfn^4A>=+bJCqZPjvrlNAh6DXe42~6b@CaVK^RHe3ay%&pA znk>l{xx($e#w3)(K8yk_F0fX);pZ@v*}Fo_zhP1j6{66J$dRDA3hI#umLd=KNRCpE zk;nlZz9uHGNb7iHU}{fvT2HXofo>v9Boh2KoDIWiI)LFzldz`-ML=lP zB)$^#lH@@bA_~{!LJ+?ZO5JjZtcGFHU&C4#EN7rgb$CIDqVAXJN|R7P3%FM2&uoJl zvhGl?lBz0%nJqKY)?g_-%?9R`qmhHgl!8yLqP_Ijqh3^+I}fmM14kqvBCr>|UOe0^JA};_+$SOd_l= zxYmt@stHg!GfDbyAJyxtqx+<-~vn!PL;eBA84xRwi{es6^3hzo=ROa%)W zN%(@T$d|+LjnV@^ym_OJyX~OtM?*J4DYl;VO06P&i!(|AjI$wGw!a3^^vE|<(Hy<(HO5%GP+$C zEht%fI;TciS`FWw23Q1zSjC?Zt}YO6M4>>a94QdI&9cK^>gT1J z>NyqNiGu(y5?}$T*Vc3MvEsGIV#WOF)5&MO)2CB+!WAjhcJc%WJK}|SeQF}gPpnX{ zz_c*$h9yvg(ZbwqHet?j>@y6t}ZC%!l5WRF=WGbCIjU121iVnUN zx7Q8tOHK`+{!GMM!F*1wP(Ah86>3NZC@Th`!5_w)?M>!XWL?g_$_w2R`%t!Vi;8Ba zacGjjVd?PcnWUT9x6dB=Y)MNXIq5i}l@cagPM&0JF&P~FkH^C%a(_)CKldx+} z+x5G~uH6xD?OOZ(>SH;zT)O%K3~a542E&!dOxd@81SJ;HALLX|0cL*SIodUIi&{B+ zdQWn^h|j0Fv~BoEPA#gfo$KFGL(`cUvw9z|&5tEN;6-UKjfSIdZ4c1uE0BkF@5j+P z*EajB%xEXP5mm_Nuf54EK9|tgqmncD^XB%b*LeF*r%rgywf0eKZSO>FtkGM`jEzY~ z>dkA%QXenw&Z+;#0%0tLpLQIFQ{*^bbHC9`kcF06weTDj9y8<4|=^4#^*-}p3 zgd+5R1%EqOg;fWZpnELF&YsQTu4(pK`vb<3Ywbq^YrMc5vF3SS4R!5+Auwsoe!6Cf zR&CeLY7abKot*5QaL1lTY^|_TUe_@BTGKG%%RCVk=fqL9W31n?$<#-yM|1c-25yd4 z=6N{812^}gKMYm6`D9mw59+K6T828!dfdGyIaTvetL{FuE!Jucl3Q!JSm;h~02VS= zcPzvl=X-0;7;3s*(eq>KTeY>Y1X3&uZZtoeQ*Wu{IHRbWA-oAb^jHJzh6iSNIL-rl zGO+x<<;JS$o;`=M;Ef+>b7w=W0w-$e$1w*F1f#-R!AO&Y$m>aO~^ek*Ruj#w?ptN7G zZyN&GUHv=`7OZi#C9~R+Z^}mWMplLE%`CeI9A?>k(Q4m_fW-^G=xsVX4{!f5wu|Gc ziyPx_&C!KjMUaS2Bcc(^JSf)-<@<`07$9(;dxaa`#e2g8=wSSw@gLej z&S@Yn*>svQ_0h-xQ_LS8!r*~rY@)=vFXG&a?w~htTi>|D4SWw#>{G~51?y36{xd}t zZmyyICE~akarXoG+`P{S6@?h44xn|!**b<;JeF#HQeA}1zRCKcUzqJZ>MBtW;3eE( z0J~z?cp+IMRg+4?uzr7!saj+vF&qxvIl!ullh2(AIKT+7VK4YGf5!q+k5pKh=&?hU zJW6$k)Qk8fEI{yeVI|v~y@K7qAEO7@;>OV*d831=lwxbz6G`GSi+ntI`;H0~=GZ;< zvS%DZ-%^`Ix5;)?3p0hzs#=+x?7ts>4-_ZIdMB!55i~bOx;9nf+c!e079*Hn%J%z{ zNV)RCUbF&Vs>4*DPeY0*Kg&+L^kPIdt66^dh*z5f7N%j^Uy=Qtm{7%GMq#Q!9aj{! zrdcNgm>if;WRu2|1yhX4G@=vr1u8?;2y{H5!I{q56w5xD`ryzI3cGeKJD5glozlK% zRRs|>(295;hd!4|y@4>pJ!ju2&p6=l2p@E~(`(=?+mSXx*CUExs`01u(>S1H zTrv?|I*$?}llK|&6_?Wzi^skFyJHQ`IN=kGghhAYK^ zW^c{o#gk!I$Kk_reRkJc>{r#NQEAb4pmJCp^C^9qMOn}&5$Sa8mtf5&D`CGn)F4)= z{OWkVk~{7<1t|-kD?-KS?sWSMy$1nQ2Rj&6E%$~&;gzyMO!pJgqE1liFb{a>Nd|Se zoc&F0?H~t8Ll~PhQtPYYDwy_J<7&+QN-Z)-hYn#778*!>d}=`Ty0CYDMMkx!_t+mhW$gM!rDtvG zoq05!!L`V&u=WD!B3SIMN@HhsIb;e018PkLsWk&3_3lcP zO(Dv58l4VRqER{&m=Xm_17Y>R`LXsA*^`@y4DDGVG>r{3r$I9`RqcMq_z z=nu3>McOnZV*m!Gl##>Nc)N1YYg8wD?-MWiFofK9?^wg!bA}j>^ z1K$!FQkdrf&DtqM5noa4Bdiz?;qkNRK&XPouV{0+fO707`i>^^0r3_d(04}dPvXxM zPvmiMq9<|XU)$evn*BQ3)?ohwlS7Q0XVHAFiop|9KLA&uC#OT3s!&4m-O&M6U}osa zk*YMK>Oy$+EtN)8yVbJx$PCc!&+JRR#%&DP zweZ^1Z`TeXtZRcZW`ak@7(y~Tm_w*lad;Cv{^dMcT2?XSYmG^jLh6&W_uV+qdQ^FI zz|7$kCUI|);T5LNBw)lzWLAj5I94wMLwt{cX4I^v2gT#bx6DT|5=Ss?bs14M+C zx2rv9Kh%|pn&7W07C~PvCsXTPHhdSO-LD{oK3Z)Ksz1$-jrE*DHx%16Y3UlOqJ~m$ zk&2CM8MKb;t6S1!Xl`xd7#nz zFan_GG$xGyP}h|?iq35SK0#=s!62+L(@`%SM(YS6a;`)O!7ipMvuGz`l4Oh2muN3? zWaYp^!w}l)@eqwj0GL!IibfeoRib^``a6J;Fc~iNNaRG-4ZFPLI9$?OQ*1~Ty!$gS zbv>ur9Lw3?>gP2|n$I9F_(Nm%zF0>ui%S6FjPmyte-Lf!9oLu$YS&@{3P^I%4J2_p58;MUOSf3n<2tgVjk30~FmeY3rp3Mcmr858&@J zdL0wXYkwjxp0AGyyqro(c7IVHxc9w@a51D9x@8eNkbVf&+|6pvBR6tZk zpKzk{>IQe$T=IMF?z!Z6G|YbWkbPGz$>H$eVC>el>`g&zs;zw~?&qVw-GlbsEKUwa zufb(jQ@@20T%I30lp0h~EU7DJ8pA06hMyTwJ*L*^Y3L~8esI)2R98c(g8GA)Q<#sY zzFWd{I$3#ok3HPK7XCVPsAs-baKk#ZM^xda%ATXiDR<8))+3C- zP;F0jbj<#KJu(!#ZEz5^YQYoU+9h%^BrA3+9V!)#)`12-cBuc}(%4vRlZy7V7Y9Gv zZUvy)MidL-LG*>Ahg9Kxz7ZujVyn9cYYKb#X2-puI?DJGu<4telFk1O8xesL%2S|p*z%%OA7pVDWL{OV`yzq>ep{I!{GmMonx#S4$Kk1h)IDt+BvYM9+(4brc0x+ zChMC6yBJ5>d(aw1PZl1F-JU;m3=R#(q$~P@)pWhV;6)?)ubxnAvUh!thv(VLV1;aV zGYL;MlH;CdCHK0`y(&4o$94)KTGD(FYq+Q#?FsboFRc$Y5kt|wo|8kP5ZJs~sumq3 zTFvz65mm^y7f%ux8~Aq&-c+BtD_Q3TmN+)zpO;;Yjr%HkA~B+(GqKB~$78owqI3O& z*=SfRtTZ;G?o}ySD?D>ovWSB{%ouaSSP*b|8z4L3rILG^$(qtlalSvFX0P~QOf>Yr zjfQV>qY;{FY_11Jqd7d|NEx4rqRMGB2R7M0f5At0?k5uO%SY#<<8EoDFIT^7TCKUc zu5PG}o=`V<56+snYeemHotdcWtA%bwT|Iq`x_b0L{F>6iyVT{GTk&e~;cFtX+Ya0s zyFGiCm3l+IaWgtsOcvj`XAirTNU~A)_M!sd`mKBLqVqIFHx(b$fzh9rNO(|M4az8i zG1^QxRTHL(a~)F6&A73I*8CkOGKxG#N9{N1Ni;hCG}>>=<#rOk<89&NDI%3RgzZOP z#rC7rcZRJ4@plg23{oWdmthOBNDZ;|UzPm!u5Tvq9 zZfV3Wm#E^J_txs3aI)d;vGK&^ZY<&9h3yw)Zau{Up*p0R&;y~GP&*Iyq%LKB-Bv<5 z{(-DpM>i*4Dplxh7EjD49OOEYz6LX6F4tgc%)3Y(n_ld5hhg;ZJbR7ay!GeVV|S_7 zW^Ub*x|;0TLCOC>e?EWUR>nl?&m5FEk8iUi_PN*0CY);yq<*1>N_%bQz?Rg5#o5j3 z(gOz)`&hEeGeOaUlGTHvNy!eNWDm?G8(Q6)l7(@_&=n(B^Bmn0( zOOEy{imWhRsN400>!Va!%h5(0>seo2J&SEzQ;FfU7J3B7qs>a;le5{N(zK>oN5=yP%kJD@5V`g(0w;<#dF&F33ZK1EUid^>Mv5D#6;%7 z=Mp0>#xR40hmT8v`WzJK6~+CV?Ew@hvHSUJQUlKOEYOxMT?GooHr6NR{Q_C2+UW=F z&kxTJs$WI~Mz3kmRSSklP{){=E@66t1Z<*PQHnBw|Dr(DY z&&RTxrxU}}SGnfV#M0tjQ5gMy*n1x+JCEv4@O#~@R=3ps-m{^TI49U0A1&*6`O^U> zOZH^NhsVR1jFDb;A;;`-thZ-7OuPis*^>>-jAONj36VL8-I>8XI3Y&LvZKK>n4Sqc z31H+7AqlLEXc58!0rhjFwrpcbZ7f@|q<+1>-|yb4@2l?DQpy7jAD zx2kUa`_u>fe&%`%gfs@3_-+?!fu*9&YoVGD0cLYz_r`UnJY^|a?K@)}#@xQJVSCHE z+1=UCsQPw?l1cEL*FS?-G30DRi^{L+_g+MH;?%Ahl?FvPb$#u_&#-t;ex~-h`bkIo zO|#e6uANYX(|8G;(o!MRO4c{H#)xF`s$X$2U9{cjH>=$MZ-h~#}zTONU z*I2KZxP4pgt7aM2UBB+bh_J2osd=yMncei%+zzNvUwD0ib=8Hs!esTwCQvHCuJ})F zz)pkiw`5OUl?~QU7faqXtk8T4<_VI_Hg@5h+e9{a*~n*(Z>W!a>R|u78mB)sFt_k2 zS_cR?^Vhp+nXgL->^?Z>m-wR`K`EX$`*h1vc` zH(a*=2?Tb-kc|lKh3jjN^z7d7TXi(w9TQLOt{uUz)vvBYhlFBpn4Q?24PM&Xy&)O~^r7a`+qU?d9=~doD|A^0w+Z)^9H)$J48}4_a6gS`dw+&l=OEuKy9QrHoybsMV^IBMGH?7_NAtcPpaS_KdAV2qoB#oh$?tu_g}p4%}}M7OGmgM!lFCI3x}~|p$j=mRB4V-f!UKo7&kG3MK?v{R$9?#B#~9(5KHS3}8A}c040X5yZlbyu`a0Fk z1`ahr)P(^CrZRrp8B*Pcv<{$ITT@UQI%+_p1w@RQsV5)I?=H z9n!iZ3P>qU!YJTOkkIrvEjx>j4K(Glv*^>5m-#UehbQZ{}l7VhcW^<-TGGh*i?_vYu_b|XiR8Pr}kzyQrv zI5P?)>7MdX1#BQ=h@b{e3oyWz{`2Iqx-wBM8FcYP8{k|jJ5}IF<0CW7F3WI)e($5w zmT&}&{|SN{pxER{QK<l^<-#_e0j&EmLfUGkbd>y>P)k)fP=XL><_J zTD>C(j$)IWMVAmQmUv1Q09L@2hT1`0l}?6NXxLSLt!!WVe5cBa?5m@Du)EA zIk{<$z@&jepibaqo+i*l_TU>03`9c6?7dn6Y|bsvoZ5F;G*e78%<9+)DGbvxqeMMI zMh(^pqCYs*r?LlbFh33}M-W1LFvL}2wQ{6`lwSvZsbO7`@hiWSy$0WI5TLESY_@ zXsjH=%asEgb?2%#Okuf-wh#fc63W{*+3~cm`tknip zuAz!S=yiLkXh>n3Qf}?-uin61vGj)z#JaRGhf1E~atfkiM4)9J{0M2bO&Qt*lQ>G5 zkM6~&he@anNonVUd77pW_*RObPAZKsb_ChZvE?x9Y>xQ45XccJu)d_7_t>J7)_M@D zjs>5`*HLf^H^Z_}C#*owqs^kzq}`yDS#$OG!gQguwU0>?C@&FGQ~^y~kQTFL`3w>; z4g-^I6H1FlkqK&rXY3iol7>d~R0PQO;8eHJqx#HYe9IK30pX3zA58(0&nYcMpwXum zcy*v5vzjQ$4GVLX*I;$a3d(gZREISHXgXuHsC=qINb@=-{~)r2Wn%suTD!uc9K?*j zebp2?6y|pq z<~YV|R~sV&fK|bmjWjA_PQ|Fq5fC~E)8wwR^V;A|0V|sn2ib06i>4-Q5f4JOqo*i1 zYI`$8C0^@+7lBrR(EXttHkd!q*k}z2WhXcUT2_M^^1$?5Wnhm=1}hIh0UCGCk@;u? zT{C#tr!XpGQkrTbMrBON+*qfmkVHz08P!pgoyxR9sIpCfo5o58hNvRI=9w~vjF-_&4x6bl6c;uDhBL90D@8bzLZ_ISy3QTaHzTjy9Je=pD;=)O1pZixf6 z2KLe%qG$3VU>4wURE|Vtvtmsw4E*N?abX!lfmr3N6Qr}R@<}>ejK^vYKvR!ZkAti< z)EogqEF^XMUbLD?5wcNXyQmPp4%ss}{?M+zKIL*=3Z{ zva@=zuee-xF{Wi_(d&@@9$M0d-UO(;1{;VfS7*ccU--M00e#^AdK18Z>8ekAXyY5k zGk+2Q_vGjzVZH<~@E{`S>YV<&Cm8Yz!A0uk{V^md4UqggGQI>582y%Il5|gvVmYJV zGy{^~xW$(M0%Lp=z^|@WENAqKX+ZKzrFiXsVDwv-NeVgoEz2YYQT^T|z61~$H?k`x#nv;oK-82#>Qk^-aOT}_hy0D|i(ul*OJNCJl>F^VKqNeYaPDzE(yjIOIB z1x81eq`>H?^4kBv=%|tu7#&rT0;8kKYyShIqe@a>bW}+SjE*W_0tk$bDoKISQ6(ub zM(uP|9Tzm@en=G<9aWO_2fCxmYyXv_Na7|*j3NnDk^-Zn+WT%t6|o#uk^-ZnN>X5S zRC(=x$k9J+?T1DMp-{Q)3MOIt(c9 zX@pts9!^E}VX}$=rRHgvnscQJE{ocCr_S)Bi$hza`V(QsYSS0ZVL0z-&h`4(yTN&t z&jP>$xv-2jm)*jVEl2e>4aK(IFv)nb+Q0<@{v%>*Hfd2cxy0C?-)#0NKhLEQV%rSn z9r);?&>=^TcDcSzFGBSOOl0q;=K~&PATfiPk*24^Hmc@gA6*GHgw{A39~>*++$$tF zSD@fFI|(zFiMjO>2lEcN2Uz}l8WtbeKRJi>VjGy#d6DhSUV(Yf0Q0eAIJe*o-*Ew5 zGf6nRK%(Gdjzsl_A3R&eQ>uFaU7uSAQHcad)m%041XD#l4zMn#_C5@#4$W1sQ#DCc zlo<5m#1U{Kls(Aw0rS*ARJ10}ku_P&s#_V6I4} zx^)=zEi;PMUEKl@YPZ6>!eUn{TjzSJTNrCg%ea+1Q^pinLKx%fVht*Jl--bk5P}K? zy)-|BN~<3_RJ*ZqsJgW|=aRq^2GICh4w<(!4xOlOn>o}25(IC}RUq8_T(*Tj-gp!e z5@@NZYT-JNaXN?e6RU~^MLwX?Dl?N38j>A?d4O#9H7Hy|*`g{`X{{jYeT^Q7D)bf( zVFFKXR_&#SkV5^BE{|;LXApW!xvk2{gokOvvI!pjtah zW!@}>Vfh>FL)p#t<01UGUO7rQwk>0<9mp>tcN99xJVqfTbd*`JE5Y_$%d5uVl(*tZMM2t3bpWYH5~9*vzYj>Gq(hRc%jyIfq2FW^RpsbI z)h9@-R*4DKU0OIJokaZ2rW0K(KYHZWA$D`o=BP5!yB)|kf;-lW6r(iS0g%Tr2 zV6OlaKs-|S14KiLsR+5Z4k`c=M5=pKF+@Z4LiB*wIvFc9#lUS{fSU*=Q~$~ak0ovv zv`GQ1*c(mB2qBvSGDEdrs{F?(DtWMOSIwt`gd(w4Eg8W#mn0*h(_~aM@{BWUWtK~G z;5Ba@!pLss5SGPg3+`LTG9nhBtvX&Nc&IORzm(1JQi5~9m&w;rgabK-SJs;J+lfPP zx0^;G>A+~*Vlt6b_n{n$p286rOK?O|0S8DBJS1~YR0}wW2K#~%97H2e;V9)8;2`64 zq|+8`AsSfG;jtI4V{0(wpe5<-*RW(i> z!q5wOZ<}KEQHWtHI}P|5{D}N9B0!yFb5HYwH3S{AnwWbgkj_-|5mms+&>qmky^h%) z$g$J_JAow7h5-ACYOW+qbMzZq&0I(#FdogZQUo1RZF|Wu(&=O)MGPgB2~7jP+I{wNP^Ig# zox&dYs}fpjLogQi!N6~6JaZ_!130phkrt}G+R(>ohG5q&Wf^zUi02eqMNmy3TPVOu z;)No_lBp)F9zo9Lp5TX2Wh~S&>+#0MNhS}NUZ*OAYTZoxbqC_sZpFVn3>=lVVS!M| zZ<{!TWiGE;Xc`MO#*d;@EEKz~QmI%d_@QF+>(eyp zh_!7TU$#vX0BbN$v)CN=W#7)K;+c0<+@lu2=xPA!`EmjMAq{|O3ULa5SI0T3X~pH&-$ zu>6N9K$<_qL6I z;!#?P{}cwaBZm%Fw~QP|#f%(;fgk(}$mhDrpG7w@ja~#1@wk>)4Ap4YqzzhEv*vF3>^U77VefaI>ymGMm z=H{XGIM%^(96E?9Jj0K52dkTz)|=7N5TSwyP(BPZ1`>K#n)(>%A-}5Ud|DYd9mcmH?m~;WtPx zZsY+Azq4lA@K+4(y%DWlRA{L9$E#cTvsA>;FF*i^yAOYbJb@51)vV|Llq+-)ZC)bQD)(Sa#WxI ziG@U3VyRqEW-GDeN=wXIxHOg+nnolly)$Y< zJVblik%>m4t>gy~%! zXdg8|L(`psaGsBppKx&M5}Pk-qSnqUpUQ3&a4b7V==eA#!#C0(v;<*~G@Y>`pfX}d z*=U#tHHx!Re4L`GMF9P#emo5!BseNy#!L-Vf$9(%AAlz0DiG|!eNkw%M>I0Z44G>C z7&<@@IM_0sP?f_L7ozT?+1h$=gA~w&L;QdQZ0^kg+S<{60c~ZZd4T(Y|8_#jOz)Na zY4V^ftP{6IK^<;Z*-<{6=5Z~eCtp*H5yTae!UK9 zq06A{wCZ4vYNte1y%MBnbx=4$D8Z%aFiQG*h8oQ(+!-KeTF~!qAOSEBupX_!pa|08 zk@`P}-l>@gZE42|q(jW;9~l`&T96m1qCi{nXAaVN#LxoZK&4q8uoN39>gq! zl?+jlH_Ca>NI#oMkZUU=jKn}kPp2GsI;e%BfgCxGkoI*%2x#%R>ll2G)Q<- za!J7O!P=(2AVFY^CMvySTEj?Y>liHqyWc9iV5AINh*S;QgFO^npuuboqZzuWC)n-? zA!_=7R~jmsdE}JDWTuorVxKxmX2E<+Ud2E@j^5M!5npc&Egcq%{x1p#GF+AXI4Ls( z30)H)swD`W7bG~J|H>(dbRXrq2mkgkpayeKtPZL6FsoxH^WeWJeuzF1b5yoJ2=WqH z;U&3d7z_Bvx@V~<1WdK{RxJIYKqdY;}j58s1K+Wl6dkUEfA3a2vVjk$o~#j z+8rZ322*WwcBtAWiIrKshar;gv$6mHly*)+m^9g;s{+9=?RzT-wDXY?&G+C|`uy|!mXBxm$ZB_cVa z@A_C=#HIsh^lcd;Iiv5J5Xl*RV}tWZXy17tk~8|&0Fj(gC1g}orsxa_RguKVkWdv# zj0}lYdmx(NWcw31@UvMRG<*RU~J0RJFyz868!ToY7Gg$r&A0?Z|LO zM^z+ebW}xhMn~0^4CQ6W!NE6YbW}xmMn_eflawPviXf6084{`@iIE|(YJ-R~I;tW$ zqoXR4GY*)pYCnlHI;tW$qoXR4Gdil;f8vaesz}c0sEXu_j;gk+IHRK~k~2E0A~~a@ zstC^Ls5*~B>)_yb_$r&A0k(|*{70DSLRef_tM^z+ebX1)Os3>H>2D{3AYC=^T z*2Kt=P!-8}998YRQjQEcBX*5Bqob-=&giI?-VeoYO=rZ;EoXF870VeNRc-6?9354W zoY7Gg$r&A0?E-T~M^z+ebW}xhMn_cuIisU0k~2E0B8f3>1LNzM_7@)zz4zWg+Ofk! z?|*+F>3K|kx#pTcy8LnvU35_(@c~f}zYI6BahI6@itmT&0nzmR(2Tpx1W&dDLdol$%UCO?jS4$4XPmc+!(k#=6W(Swcsdm9m76 zGAm^X9c5O^f`fHjq>RT<`#(!Gij)Nh(I`?D94cc9hv~$tv-c`xs_(IGr6u*ft^cN( z$?n>9`;OO+&G!avYh|y_-X~>d^!XScDreD=nZ^I!4`=e*12~JV<6W#6fN9`#Q8C-K ze2mp<;9QX%iP)b3a3#%ceta@JM*X5Dlr+6sR4pw=S$&^rR#koYC}~c}1NC)=l~c-t zSxC`}JgAuCX&y=AvpkM7pEQr4_oY0fa%mp1SrvIKhGM9#P@|uT#VGQ~LNTbOmPgTG zVjd|}&B16Cn8)XiyJ?>MBfK(t{P@OCd$D1=+p}5M@J1SOlmkWtNWt!idF0m4DQnB7dd&G7~i)C{TrIE-EeBBIuFz zWG&dwufc2$E~1XlV&wv~Y04{DxmoLZL(1wT6OAr+Cn4ntCT*1#yOaNd=VG@=Cm!!_ zPAdtF-aan9N28gZw$MWM@t_m$nV3Am7kt}2k3f&!H!(S2dbBv-zrfyVa6Ws@fDHBE z;!Hn0HBes+9`46e$$S=fnz>Elby7MBldDqqVv?fpYw6ZIY_vm@fkKlPw zyrUy|L$=J7@XlvH)9cyxw`=nw4#z-$6Axnk7re>y$2*_qyKPrK-SbF&^0)h&iqKxf z0~(?IcK3z`Fai3T*^sWC{PX_z@foU5wD^|H2%eq!3O17HDb?G?iB_eZSu*%uV>l+lmkzw1Hhb_tZHlmK+y_k z1mSGfUAF*Q;XHIwo#(ZaU!!6!bX_-{@zrkBblSt1^~v6l9g8(l>S6Fg@^H3g)4*8P zwWSBl{ryEZtNuytKD)A9_M)4enH;ERWJ>xp&+)(Soa5J+V>UTBk)58bjdxG>H?s^S zo@a>-)l!MOrX}=jQsVmLSNh*eo;vMEOIpj1{snI)*{cV=o%AoV1N$7HQg;nezdd-o z_D^>*y6luJ#^oDJcFIN&ihlQG_JBqZh$@STInKt|0uy^5qsDfRsKE?HD;rZ~?I}^J zmZgdSnspL2Ci=1zbyH&f&4{Yf{;+KHrC*%m6h=SvFsNS)P^Q?iK;^7oQGI1hnoU9d zic;3BbTUcVyOVOtp*tz1OqE+KDlH1l9;-;X&ZMPi>=l*rJcTytshv^iD6>*l%|TSm zaS}MJGfdz}Qx+WUBxS*ocC&&bP5E3vhxl zPAkTj9y2;Kv-qJNe^`^BZy(QIgDU5Q7=Qwt*Atv$`TEi@YP=P(Cvau``nc;?YMHL6 z7M6*YtUPjGVlhJnSRT@xG>=JSQ5efYG1ELW`H8awifbxfMmv;r#SfwEv&kmQj<1*0F0LfPok<~Peme~no3?4wvk%|lqWlmx@`jI}oFvbr#7P-4zWIVy z1@NIC4ONi>BUd8*x4>u%gox#+D&#pjsvyrU|TGdiju8LA3|91T^Gf~bb7NI_IX6(mPhAPKgER3VA!ssdtEh>Qy0!$V{gNvsGNstN=~(^Zl1q4=h&A_Yd% zRgfH2g*-<`RV2^RQ3c6RRUqVOsEULSREUfUh!r72Re`{0sEQOA4ONi>qoE3tqpFbS=%|Y1 zIXbE!8LA3|91T^GLXL*2NFhf<6(mPhAvTRPjI4 zRRzST5OY*Oj0%xa0sRjjhN=RA(NGmBFdC{N;X{Av#tSETj*cpb+{EC&>3{ezR22w0 z8mc0N91T^G@S#6L6+uT;A;0S?&|kxhmi~SDIsW0k`ra^~p~sE`4(tXI<-q z=XhcftCYiJ;<5#KS{WBH>XUzBjIHDAOG}d7(P=voy|z+jcrQPK6$yOYHo5Vp!~tr% z9I`i+ou=m6<+a3jox)@F zO>lp4=auyLZ-Q4|flg^T2;Ge;C)ct}<+N^k8Y?4oz(9sSLmD;BLQ4`taVEc%!N+#lS{h2P}$%YDcI=kh$;RIRVu)P?_FNzJ`~ z`DUE|cKK$U9sTbe&njJ?Ky`e(xlult;A+PL@z_*!^l1wQl>F}IH#4lW!PSoSH!KsQ zh6=^(%DJLziW&Sl6O-S_`X=|dGWd+^wj`%N{IqH@^`6)eDa7#F1_OU;PyH2Ym8xxTXHuSOOkQnFkRwna*dBU7E63uIP{dYB#N$y zNtagxeW5cZS}Yt&h;mdRF<-1kDr%uQG3v`w)J+3%q4zAyb=GRKuG|92qS~_MI$s`$ zDQk_<`fZJ>!y2QkTugbIAuUtKg}`OYbzW&{%GMbsDd$W&O}WLS)0E5WqMkC=7$v>d zkxQ$WOV&jtD$tP3N_pjV(U9`1!_Jeqi6xKfp6)AQqnLknvadw5mKeR*hf=8A4_ET* z3)6uG!Y+&|3vjwPmV$BLUVw8&H7a@8nwfruT@%Gd5%i+ttOS@RYC4TeNqxftoiCn+ z`eh!lh18sK9&8;;EM`#5QXb6WENhvb2eX(@^GMejZHg3zq^($vSd1c%WowzFgfLQDdSnt*Dufgbs{jxPI|;`AldJN%~lFBs2?WLhVRsJQE6g z=!ZkKu(OC2PdUFCz@no6C_k!5ATYjPn6I@aXY?EGMRG>Ja^6>@#OQaz>)59=`lan6 zIiugIE|TZy*PiRxr!)G!c~mDMyi%BST^oNxWR}aYi`)l`Tom2$C~8s=hv?93531`*cP}RU~J0 zR7LU}9aSxXIHRK~k~2E0=|YK%8c^lhiHi!7Gdij|9O^kbs$Kz--cc3F868!T#K?6R z<;Z}c%8>H}3qX=kRV-(8RCVlAWn{=11F9rBV_09w##lcM{#T8T> z+;q}Pr&_hV8P9|&c`a|oGof0b)$(RM6RPC3ycy4gDtRq$#xtR%1zM=vIOMn(gSTWD zxBAnY$-$IlylM-9b{f$=?Onxb8VuuXAGSOn$!SE}UEbnp8V$75(=>63(a#LhIfzkn zk@5tSF5Dk$`J9e~ZfmtBfg{SyW1qg+9_JQq&c}lmI=C3;Ryya%xz#b8a|{P?!@0;9 zy|hf7oa0ccJQn#wmHcmUqI!g?Rh)CQ`F8nWh+}_6=YtNK(=R!^7c_mm^FkaC)0WOT zmR6CHJc^aFm`9j`m(J!f3l;+h{=#Bka5I$hh$_^=Aw)YOf?}7>IjRN5VsHv>d9Ycj z7)2h*EH^z%8Cos!2(7l1M=S=Dmn&gDocZZ$#`QN9Bc5}t^PpqtoTD5bSP}RKdCu@9 zKfQTj_ea>H@iIQ#{+i{7+rNfA1adxq5R0&Fe3P%%c8mmL)#4rv8Io}7?z;KOO5dGo zwZA=?UDnD|#?Ta7+^C@y;*}VOQpS+ubf+A%8V{QO>d0hPdwf0~HY}apNAc82mHIR! zpRs(CN%3-)FBq8aY}pnR6t4^JQ!)Nde{;Cq?iuKqBhC|s979LJ0?qDlaBjyDnO2@x zZa{(RjfzKZLzZapoJH^kDzG(cWvvceHC*)`#FTlk4Cj9;!52IH`B6WF8&k z?oLO|XC`Y8=j|O?O*M4qByfQcjaGGNFg>Z~8&&?t@-__f!a|T{me;ZZxw+Mz5T%37_VcF$ne`LLr6 zI1=aY+p#OCHZ$6doqO%Jmc{z-Uf)JqLqpj^jiH5QX$fB(DW0}K@P`w}w`1o|tu@;2 z8<&RYgjYL9@v7CzwkZ}*hh^MPZXWyj?B_eIETVk*LT^62V}}=ShUGJnPPs^hZ##%I zF~d+er$fKY- zT(-t4%{hat?Z|KG$^Z(ehOY#fo&+>ozyv|MRwHq(f3jKO^rj0~Bp67oEJ_%pVS+AU zAe9o7wuSvyCSgLFM}mdkYmM~+glU~5cy)yEtymp4(-ALdz^U-}nq>_0SKG0X?0NMa zpsN)Fc*Df$~KR%h$?H zqr*@lXO4ws`h_r5DlNG)Dw#03E~UKUN`I2Fgoa%68D$Pe6j%LdcP67oq0wNA1$$fI zN2|4kZVgN3+la5)=7+j$4q97LW|(K+CvZH-j0j7%8X=4@8eVGjMiV)oCYX*TspMytlje2kzVaF@YE-ViaOi&i z!l8TY#lYg$g+uof+*HI>Vg%4S6ymNQ4`{Vn>&raHs(_Y*6>>&j&;^MbTNKMTs)*!_ zzLP{GXDqK(JEL}NC%7lXv@35xDVZbkAOeLsLm&RAXwcSdP}lHi92 zLK*GIEm9CPI-|a*Yc~+VH;ySpMg_#E5OY*OtOyyZ3J6t&oY6NgiR6rqDoBQ^0)f%4 zG7t$L%E%5fixhI?ju`#ssNzRMRe`{02bo0*jD{*mj;cZ~s-r5Bi(1|%;5j;~h-IiM zP<%L}^3y&6LlxUF994ywqXJ@7h>Qw|6(K`a0fD2CGdijwIisTrlA)?VU^G-k3OO38 zB840cRgfH2g*->sRgpZ$xG4f>?FkNkb5s>_Mn_d7XLM9S;%*T!I;tW$qw3dxbVf%N z|1(q-P#F~>qXH_ULS$4x|HFr&sz6}8aOhs(#9PG6C)RiBC!Q;}K(_wrt%0-7DsO}z~6d?mtJa$dlj7oS8!?nM29P-2OeF1 z%XH7O6;H$p^P3{Uj{8lRwIMYyd!C?OGj61p0ff!CQWp+>V^t)aG-*W#l~%nv9T!X&8x5+g zr`c(h63#@_3nm%SL&;QQqQw#~ zoQb9Y@FnVqj#i|g0I%mX)UNfjL#t2#`4au!0Mt7iVLdz3?KkqJVF}llM%wV;n8(fT z^7maoa@7@H7cTh*S6y-Nx~Id91dN&ZhToTSVxnzPcTD(@OLWFO3GS+?b;-hyk2`Pan*JuAKy zhvWX?Z|PfcVvKLa>05}3P8`9WaeUyful!crPYxI{8~NHd@B>D{8q>~euDXbsn8x!A z%xf~qkOtf$X#~xX64A`U8U6Jgk(|+A-x0|f2Oe}rOaPtHU*FN$A7}K}cSLf=@(|k@ z{q-H4{c%QreMcl`?6o(IbkN5c{q-G@oY7z35y=_LBY0;loeQ$9)}%W)D3>#;gf`$e zR5|n)stg#a42e-BF)}1p9rRI-3^^m_3=)+jX9UR^9aSClaYjc~BxiI~MRG<*RkJ#0 zbW}xhMn_d7XLM9`(8n1aRgs+0Q5DG<9aWXe868!ToY7Gg$r&A09rO_+L(UUWB}w2Y zmKYfltNbU<=%|XM92s)PfGSDO7<84BSisX!r zsz}c0s7exNbW}xhMn_d7XLM9`&_|36sf;3tks;>+_F^PStny|!qoXR4GdijwIisV> z6F-J3L!M(ml_bwGph}YG2-k(@=%~tn;yF61B6*Iz7v72!ICRDdRrxsuj``<=Ye1Dg zB~^zz7X3$OL@Z}?R8xH%m`oETUOq!WemzXVF2w7VrOZF^AuHH8-% z<#x9iYYeYh3~F~Vo@Urcd?hta9uy$O&R3xaJ zc_3aoaDwM8ts$tKFp0nw2)(4F#cVj=jz;{F3bB&rY=0@0ymLL8eyv}dc(n<Tny& z_INC{W-q3(I$J$Tze?6@jWy9|&DIoN05n*$HHH^DP_t%hO)eQYShKZOkHMO)NxWdq z)+S!K_<-hYjhfoSYqBdx3rMZm8mijFnysOxkXW-dBv)e1)=)hr)@-fe6|C8s!^^GN z+LKGYr47#3qDiAUTa#S?%-LGRi-R-HG}SPRkF_Cc7@MgTtfi)~er@8FShKZ+SJ|4a zDY;74Z0&VTi>){~TWcmQ49?buod}+)R-9_CHMzpzY^~K}7@Vz1ye>G-%r$X-7W0DR z?ELTo#=)AcwJso;YOb{=8U|-;&ZPO^Y^~uH24`yyFAUBy?A-`kH*B#}J2^;>TRKXM zpefxM5jE0p3u~sveV)l{RU%ej46KFOiTOUy+rU^i`+|C!w}(N{n!*e7q_t`%%(!0g z7Mx$RTEDRN?3YdA)|%dj_Ly3;H8sR2S+g}}(xNq6Q+SoE*&4$OSDJE-^#$!=V#ALC zfv^fB!uWd4HPQ78tB^i)-sfHH=fJpT9qd|TU32wl{_C~6&E`mI&DM}f3uCj@Hst4^ z(dNonWgAMY*;;F&!J4h1dbF{ITeG!>*KDoil3H7)!*-BUrnMy(RcozovpF)qeNEzJ zgR@l{m|)0W9K#25wtdmZW-m^TDBmiPNUYgfGHGRNwx$(pStyl{FVoocQrlUAB) zu2L~ytR_lpwzld~(p+$yJu3x(Ia^bDZ>ohFz2G==wO;k$A+=^}s)?4Y*_!H_Y;1PE zK))yrW_x-3vxd5WWU9G_WD}S$PpuzFIqnz8H?< zu7y*}Yxxu|RE}7!HN0kPcGP>#om%$!z*>|GGM!j^^=SIV&Ctc!{UvATBbYHzM17%2 zzg51oVhuHgC0jjkh z;;#Cb$7sCg0~aofv+H+wN1X2Mxo}zBgMO*eh0EeDTo&gS8(z394i)z=kT({<-uFE}uTkk#ef<6gw^l0^{ zZqxhT_aOcEzK1+N|M`ud|2*Zt_g+YU@4X1^*wMFR2jzeN`yu`N-;dBc-?{Fc@1*?K zT(io{;)>B*uMOiaU-ERV-i5;3jHL&#W^Ia{U7kIl5FU2ci<_mWx>vin*BVj3AQw&= zH71(J%e7;otr(T>Ef@JSs=u=PG7@!D_ElS7WT^y>Zo`ky6xfab=IF_~a=sT}H=mbY zNa(xd4=1y)>4~=a2yK?6td}6ul*{iGc*>}>_&9+cB*q7m=AGt6%JWP*R+_yr$)uyq zO4;B3ET=rN2%-Ja1W#E)N12tf;2;`B%DiFxv!xdr0vz!{1*PoQoR?FU&=NI!b@tu} z^f7ymRO*9AAZPeEIc|49HeY(2{MF0fUPpYsjH~FpSY7d5<$l^9a}IcNKZWV(49hmF~=E7Ew(tkD|fE zJnRvG&eycq?*LEh}`Wb)2rxPQNEIJ_W3{2J)6D?lprsfp+zZ^x)`F0I!4gjoZ~DD6>*lgGss*6FNlt<8Z56wr5+hT~HduGEW$ku&RU*RZj;qZ_J?7x0+?|Ah$O|_+(UV^=wY3=>n|X6tF)_xGT%b2K zZh)p`UFl<9C6z<;kr+RY(q7=?$N6B{a_Mg#Y2ViWo=*MHNO`Uj`=Q~m0GzuA7ea^pOeY>Y}aO(mQB%l@YND0XL##2c1(Ct%J}Za@hQEpvMhgRC`XD|Lnm zx3W&TW7hT@c{ZA5*_V^o$g^uf;y?b4XBB?vulsG&7FgH&r{m*r0pmaVit*tgdUQp? zb15F`g$G|Ge?u1WnFvUF$jL*_sF#+U$w|(rw~9ovCx?)h9usnsGwQV;Cpn{@ z;}MDP>v$lD$_H?q6hwVD2qI}+!9&idhhv=NjBk8nU^E9e+8GDu53U zIisTrx}mB-U^G-k3XFy-zB#H2v5X1?M$=W1@Zmptj*cqmhN=RA(NGmBFdC}(=BO&< zIXbE$c^Ms5kvvC76(mDdfsmu2DpK)5M*Mkir4VyeK#U48M+L;FkO*9uR(0T;p{hV& zG*m?jjD{*mj;cbQqwA_jo}=rkNciBNqpFZIx&;u)8TI@cquV+;1CFXf&giI$zKGm+}%?#_Z4K8ouDN;UzC4}%2`Q>mi@!JCcVicr?w!71K|16qw}+h+zbvc`b65nbAGeBZ%OUU1uRIN?rQ=ax5y)+N`u zxH*>g!F1q`Sx0YrcPDRp7>O6$so=rE{v3;~`M&10FcI#v`jF-$L)GJ$j{GL30X{`* z{#A!%#5Z(WM!X3;quH_1+OJ~%;M`>9BwmYk@Ac0G!lzWu_my)uZLoej7IZT+tS^k<~C-d5$TkiPp?&SEV07?Efx&DhJ ze@&gTB>#YYDSyrI!@Sz^x7FrQ{^GUul0Rpen_=3fVP8sIJi*P7x;f0n6H=&0Pen|j zGn zTu+bYXjYHreRrdE4qk;OJ+LWjS2wY3-`)HUe>|BdX$9?w z(i98Oj}9@dAxrD08%XOXk=9Qlz_j?|$)O~zpsO8RVvkmtRuu(;TzLy=4I`})1XxD? zc(R(L<#P3$RjvyBKRE<>9RH4v3{~K&yM1zS7bL9RmN=E%h+b1(c;IRnwn0=sl0lM> zWFMZ)-rUM_B#88e@o_ZIyJ0bB+kKymz{x7}V?NYl&v=xusK-zXUs>0#9m>bNoPQ9~lSQk4%227qOq}&7+sf{Y<~G#Lu*)3BIEfqZ9qj;db6r z8#>bi`Tjq0e~}*#_vY<|!TI4GJ9@X$zxrs#q?450|Mm8z{;w^T^1orq?Veg|=v2>= zl(TkwaDK-Q{5IN+5mdX~|5MHHfa|Hz>;dao`xj8P=n-36Hd^3VgyUC%#z)8hE#ZJV zJk)q5&wix+t-f&x&X2?VQ1YmR_9$@4+WkM*{0_?S)Q%!~M|(5CRwojYADF!>0(~;C zJ)GaxuFZDO4xSv}ajGQmyS~~k(sEHBSt@GnNVW(sAwG`GSE`k5GkLprE4qM1_9V!* zl0DQ|Kpt2kpu*x~GL-6>y!KalWk(vT_5dKs>aC##N`f*jav-*dK)pIt`vyz9QjRkn za%7KKB*^r#MO1m-Zda}!-*KX+HrghZll@q)vYBQsK zeLLEVgU7QW0lLte5AT?*EzYjP;TD)00s76n3wfY;+vd|eSiDA>2eX)8mn6varqcwO z9!<)zRyI_-20&+5>}W%-o@)Z;^4xL(c05_QJ_JX zjoDeWmC?oCYl^b(*nwitqKVG`JC4`dL$!~b8O=V57KM@EXux-L0E~;&;mDl>xEbf} z`%u0(+EWRze_8p@OMnRI0P>%Q03Tw^SVP}3QJH_tY=*g6X7v6;nYJ~UTl?SjH}g)h zIu*!8QbtrL4A-JYRkDjrwWv|H5y-&#P~J|2+tD6efR*Xp+KSnZuBW*X67Bw*nl$cE zv_Bi)(Z!$su~oEE`J@&}F(KrxG`MLmYhW|&)% z8H8J8Jzi58tv%YD>{(LVC6Uy0mWafR&^;`jom6@%AD5NW2wlyv$guz?EgsWa$ZOxs z*N5Weumw%1)@L#(Ss#=vqfVR~38)E?2v~ZXhnjdzoPQZ5S6?9)3?HPaG@j10%UYCD znr4+o<&POft3l-_m_?->%Hqr@3?Ay!m)JO`*oL~gw7!u+tv(PG;L&lcsvc|Q?b??} ze?*E2d%G|n6$WI}7q+{H)$mnD>I+p14Ic^=u>jIWCN>Z|D z0ln42MkuYQrX0b1GnTASvh&pF&>nlYLZg3q9v1LW)&-qxoXIove7$d_jXc)ER=~Fw zts~7gbYKR8EWfpm0BBA`F{nhZRH-~PVIlM)DWEFCifIKvy`}YkrP)uN9I9gIf#K*e zj8E=twIwh5l-6vo3KYgU!4|EiiDq9eHPO%!rzKYZ2%t+PR$ph$s+Jl)>sNqk+vX6j zpXKnDOY5zVJ!e#{N3L{TBsFbOPoE2_k2co_HEp0UmA08dsVN8S&re?)ZRcpH7g<@^ zPFjt;JyFEpK;l)V>P+k;JR(A@TD_9nKdM_aU{XE)oS*DYF9w4{ZP zuktFlq=k1$NQU2v!ob4=dYxOjsjJfQ*=fc7p02%Vp@Q= z3@<5A-ZQAtV++&#V?gywK-Fe*&oq0|@oMbKLNm!@zZnbE$_H$R?P8p2*MH&?DiiD~ zrrNe?a7opseQ-=m=5dVj$~^9x%(i1{Uin3|N1zJLVOfsN%x+LW@X}d;M6IcXz>*bB z<66N$6Z6r0grc@kgy+SsX4Q#iVOI@t9~{%J)`m7(8;%3>+OPMG7ItdGPhsy{PmiqW zDNcdAC>$oeA1&F!6P3o!(Wuc#bS$RoW6avGH#US+RcR-NvVWhK^a~L-h6v+oEFn?Z z78A7#Sr0v>sW#`qf85_3&C4mvSRm#98d5epQ5)*8mHT9}g>H~@y1&2EYQ;~}a8nm|6MmfUp_AQN}leN~=&`@aZqtHn>C;z-L zBwdw&M*7cA;_OJ7Z3LYH2o1Qz?raSV!4JTs3)03w0;-nT@DN5kITZ=;Ldq_upIZnF z*tcpbLf>y(K)Se2Pr9~*f$ojcEECkX?Ov3;#etTOi_3J9y$b&?%mUg&8Qo8{>Cql_ z%V_SSgSBHpnP9ft?t>XruV^zvPmqODK1`4U@XEHB|4hsXjpY_CY_n}{uY@#ixsf#F)%O-fwdGr`EOAAy-E1#tkY!u#RNFU~jOS~9S z=+RdM<1QmY#lR?e=}DK$aAF>7sda-d()u9g~1r(t>=ekijzpe!;g4b$b4(qLz(_8Z;QuQrMy2Zp(L zl9~uy?EzJgwWoT2yRB2zV`C|cX)VT)<#QQ=U_Krmg|~=KsyEJl1x=H<8}(EjKI2 z*Lo{o{>IC9F=@5 zwFf2534*5@y@Jg#_tL5~`dg)eNPuZH$t-ALE&=8F7@p-oppT}LiUA{vQk`@1qhU-K zVyN3N^8heQlb?}d@)OThEgxF1&}xgx&wuD|PK3$NJK&9b7$$=KlPR)|+zUNgTR=C} z+%@XRF)*dCX}CQb2d607IW>A&N6}N$VjGmUI63=@5xP80qv3;4xou@|cgvDUr zERFs~Hqf?yKpK4{cvnm(inyuIm1?5=Mcf`y%uds?e>OGY6cqDK{|B-ud?1p14lEp?+}*!z-liN1jwy*RSR(W zhszx7`A*kbd8sntsy)^A*_ri26(rsMkL8*C&U|Au$b(NrxqfWN^0ZEONGs{Z*~LG= z33idpIMYc*8kbCQzD<#)+U4dxOw%

    $*Ck!6CY3^Emy-Fx@N_Xqgb7ex(WFYMLzT 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 z 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%0AEQWRUmNA933g6T` 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≪wCtRzNSVp`)V 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 #SVFMGhGB+0?l%2mI(s*~iC~HC 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 z�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

    1!@NAYq&lbzrmbO^3_#`xSKw2+4ymM*% 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

    rnmV7sy1+ctYp+D?U5?hl%djWa}d+8 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
      0Xq*lYjT76Xxtt>oi!Ewo0E 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 z z>)+3Bc+{T!KEO7YBzxfaaRkA&3)jKO=t_)bu6*(_QS>B&F#&}HVOiu7gqg#mv@4z0 z2EleoZ)T)Y7Qnb?JUt*^Wku=)a%H!o((C9X!^~KUN%=QE3-W^)Cm&(wGb9fzlx%%n zGSJG&t49c+5h-lP5ru3RTmwEG>czb1teR$uiM8V%nEU03S9_D))E8a84MP9OY{!(} z!)(l(F#@C#fsue{+(r>?;Cp+ZX(E^OjyIHPs=Yg$%_Ued^Ih@d4|8j{^7Vb~@x-z0 z3Fkv(8;?=21=L*A&Z}>-?)9~U>Hg>GtCTr$>grOuzxo{T4hi+eGFPN4phjL@8yHMo zrUGj&kY8^MpWMy!QM6sE!`Vv}rgYFE-4hegMkqShjRDP65KU>zvsiDq20h~zfqkyVBFN?h zUCpaC_OPsHzILNW-k*vn3a|Q4vHMBoyhDzcir6m&y^81B$M7|SeQG?weakDBm_ z_QHOS)+P762%jh2B@TlqJFN-C(C5PaEQX@jG#Y`|v6Okg+B6m(6B5T zLB#oE2kn!Q4%3K&@QwBu0}8NdUrArA?Jn{9_~R67B39Q1Ny&Ukzk4+MX2|h-99or) zZvS)K?LE6wGy7jmHx)D<Sgp!^b& z5UI<+p}Rux=u(Ic&$;}>RvJj{v55!~>t|Jz4ZkMPl9OmHAE2=mLgnefM>htq@B*~; zX0f8Zwv>*b`OKuS-jSCq5inqm$->*C_-L$lKBAPLWhQ1utF_t_=!4%1SO&Aq_Nw6s z$Yv@64jnGM%zLClVKNHcW!g;_D zyk&rrX7fX@rAw6qjNq%O*28U^SKFr3QTQonEU z0n>QoA3d5JhJt%j6GLP1%P*%G%;m3;j#(%UP_@OcWA0#l3kCe-f&+}k)Cw1jk3akGH z(VD8VK5VIqCY=cew-JJw2;7fAJ;7ih1n_88-%wk(S!+SrD)Qw7=khaxZj^zVIZ6;3 z+CU6u%bfPK^-?uJHV3I}DZ)>U7bz32BRfm=%VM7ZKI-Kft;fq1HC$9DyL-?M%5y@1 zh8z>7MODrkMVWPL;$@IH7$YkcV2-95%HwMi^c#MLe|J8?iFbx4SSFePAX(8thf=91 zkd3r!wx*RbVZ2iBiIbopOOU=r?u*WVO+{d$!!hGbC0C++uw2$gJK^mV_HgH_0^V8u0~M0$EQ06Mr=n<- znrP4mLF>#54;ExGO@Z57ePfV%AAlPul*<3b=U{399F{bGwz|rXEkV&}tkMjc_O*I2 z0!M7Ls)@U`v4W4D@(I!%FxW2@XenILOh{Xe9e@JF?NS|sp1mc*fFduJI@h()z zVPDO*ipV8;(Jn8bN4k43qTw$9#*DE(jDCyhW`d><07xM71S83%7T!>lECMIq>0!~c zp*q(Uy1>)=i9T=Tngnzf70FaA(u^5Qw=?Jq zKbqvhgRFT=b3G;UDe4>Sn1d#v!!tE%im(XAhTu6}EEe0PS3`psjsL`Zo$o4YXw?;@9|77efFN-@nCnUaCBT@VnToTX z(+tgwhDO)dXj5x5S}X1@oi0OmT5(2zQpg$Cc+z(9$!aeJNCA)HEIX>?#4CzV^FH-R zE1zYl@)~R6^CVQ4%Q#9Jar6~lK#wpWJb+W?v%aGM_J5y!4q(kZ-px(u)f~7IS ziq|p`3WcWeS18OXeAv23y1?=#!Y>0(*ijAfyEP7U$MaB`I<+t1hC^6h=Lo`6nN*<) z8P>9)wKXDAD{S8J5WE!9Aa5bUQ7w~4GXf^*Q)58ls5C7$tW2RRkL#c>idorQ0%K-v z=nL0%F$OeuEXiN`Mqtiz%^E(2H^heY5w_j+8hR1uMDs4x$v8B8A~mcP^a6?bmOlc|s6dn309X%)R6}am*P>XH zz09yINmZmP;yr>$;2!WH=Ry+mM#-K*6cOt4`6=CbJu0wrriFV% zmw_!@c`RyF%UDM7U+YA1>I;YwO|c4fc#J^4EY|a=@=Q6dm6N4!r=!(0k3ium(JG{O zSsy{y*)QPD0pIb_d2V^Dhfxk|2G7M|Fw;-V#3%C1V_Hobnwa(>7u)LAPKBpDV1NlU z*wFio1mJw$9^-;MgeU%hT7RzeSLtQaomUj$r_R|>lB8?k-cdXI$gWkmf#bIBLb8}m zWF3S+S{>DoCIu?dPZCepB^W|w!tO$DS_cD8b}T_ylu~Y!u zw{*B&-Tr`gjG8oV$l4k9VGVV`zDmNvB|E!Tn$wIV0`^EaVwjl5+%FeX-3Q2Cbbh!# z^iD9LP)@|bZFJI3Vg(Ffh}1hEdvR-Y6>KEa<9GZ-4q8*=8j3FY{1t3J-Xnh+cXbl6 zr0OH#MGn;nO#lW2Kw^=Nr#$@2!Qs`msW{BY}|$(xDCA5U#$Lsg^p zfsHyekVX{)|NOf+_hao3zXvCWiU{+UztkOh^-czYV6ozlA( zNI$}7pNB~T>t{GY3|ztI_h`PQ*-<~-q5Xq4cxq#jeS5cxSQ=7?B;c6cRCS0_tOAqb zQsondFFyS&_hUs$Y|->o?n3o*AmTBqrcl%rn;NcwsJ3HF#8ho?++`vG@H)^2gFPn| zaSFd(6=dXGUU?Yqh-2ogbkLW)Yhd~D%5F%T&-`M zv!}8@=HW?Zt6Gz(#jF8>ZUB%#F9|lX3{WgjIQUQ0oh-j*@EE{+bGfTKc~)Boe=2lI zM6f4yxr|5_+jw3ELZdRf1kIe@?-4ZVFssS(39tqXoec?8-vzGE9A$QWKXTCXOgimy zS7;y8jUu?fZh|+hJ&Q)-=%5w_sWI*_rEUyEZGb_o%QeEulC=vx<%JydY+_ie)(A!; z4wXjJJLB0uJ7>;{Ys5;Vm*7%v!ZptxNb0wuN;k!b6(QMM1ulULIjUKw8Cp{>jr2 z-RRQwG3;=ca~f(+{^L{hB|-l$5u>)cN`3MGWJ@8;h@oB<_?cc@WtS*355r!2qA%S{ zM+&s{Y3=P(V-~BLi=a#Kr8*p9@I_`BepAz?hXR!0wQe89Fl0is!AR=L{Mc;u%xA0q z{__jDea^?sn@KAU`Z0lmXi2}A)I&^O(=+d&)LpB&rhcIaT_Mh8Eh+rQ#AA=8R!4h` zO-lS{B;j(*wA^_7IvIftI8!k*CoWO|c|7GQ5u9o|?SL~)_`IeY1(>X(6DM;yM;rFM zh-)2;NoW2YcCx?A%D((NNAN2nZ>HzR-U6;VGOU}%v_XOObH{1NF9d{>rAUiq!j}(c z*M0isuU3^Wezoe3@+l-06Qi%D`=8#@@Rk2d2eBcc-~IJZ&Zg}^q0f~vEeu-xv3Tb9 zt2TL;{&m&v+E>3@m1AGRr8qoD88$ks9BU}EL_i#f4$}gvjE1;CD2nUe;n`eVXPZaY z?>p!0+3e5b><_MThkmY}jBV~z-s|fzT)BmzbSk)&Uod?$;|BOFw;>U z8cD;vc{I7xzlYB#mPai4(c*)TB=7Xlz+8gYvRH))xEL~OG+CrOe*Odk=0%_Z6li!I zMff?3LSAC-){>;?QjS(Dl?L#uR=)yf&gX%rZ@?}eb*O$j2PCk{V?wQN`ds0ItMe~yURIo2ISvJ_VsO#y3}4@a+unsnWgp43k6+uE$J}O!=>rk0a}@u@IP>w5{HY_MfbXlr zA^!OQ5wkA z?OP8*%1xh4uqPyxFX3BQy-4}u^O_g|hm`^ZvL*q9nhD;Z%Mc8baRInoE(>KZ^wR&7 zqaKE2uF;7w8aQ*NkWCIjL1@v0i-umSRcL;3hou zbKxX&1Z6nL`_7)veHYNc+T@)%liTLAFZ0qkpo8}=fL?TZf`sz$!SpW3z2|C5j?t=P zFoFu;vNmEzqMtj@(xj@AT3&{kg0_rw19}L zAu>G<2eAHy0ZlCJWidNo4?63#Ie=Y(oXJgM78H`W9Lh8a{wTv%NlS#HCr>SOl~cVK zvNeNEJse?3<8T5|u{E%NvzZy5Ua~YXL#0;9^p$kMw6QG#w70^H6e%HZ zTXj+w09ERia6xv(gKUvrbq7G3Ba%6Axs(i}QT=J~roi2YiF|om;^RrCEzmK8A~^o%s+98AX_T;$*_e2gF4FyN)jAc2RGEyEZmZ2i(9K}aH}TP7 zOo99hhzIT+6qIcYs_&-c2w>@t^KE8o2j2pL{}84@z;fLzjfZa%usQenkhE{aG&E<) zUXf3xMPHz>=Wb!OlH7}Fs<93eE09j{9FC+Jr5R`loLr-N6eX%Qb`OyIYVFZ2jfjks zrLy)3>U*AQCaw9bMT*j`5y>7?I}pT*Q=hH+Z}C)iq)c0Vsz58t*pcf=-0rRsmAt+DN4`jx<)m%Ed~HoO$Q$J zmYQ@0lJjPlm@*y-Bmo@<@FA;bx{p!>hq#`dw{!VHK(!*^AU+D--z1){9REJ|=kjNt zGH(w_`i4d45Q@*1ic=BFhB!gOC-bXWnRn`Q0orCx2W$3 zaiiHdEhNwr*@y z6PPd+1+wr7@g7-wL~SMM=sp09{L}D3qvvt1SV#v0AoytJXR^{&oW|Oys01GMc*(N? z4}G^Z0tyeYG{EiJ4hc<7CFxle2<0q%X0S`Mr`w?MbJHpH%lIOO_eed!WX}iOEv?C- z!$4NoEdWQ%*sh|l7^oRyQ~_)yk+pVbwA`%(WC7KdXj#ODN-;QfJN0NY>&7r209aI? zNR_yGdj&s}ZIqHGcPI3WR5&J%2R;ZrV^)!P! z4@=amRoZW4Hlp`~i-r=vu_;)O*w{ni$qsD(N`N8)H`tc}*4l@b!0zixP4@rD2Iun( z>8&eZ%~{^pwJNOlzw=o6@W=T4+1#3AP!W8oD->WVG49Ls4F|n5fb#cktSQtQX1x|R zseKH(55lAQ>={B+a}}%sB{od1svu3~L9W4{LRHv0UoDU32q}spG8lSLKtB@Oh}djx z6H9%bQ27&L`LZbpFcSk*&Z3dXrUX~9yGSz4oD69U$$)87bmgUgU!?M1zio5!H$?`> z?ktkyu_xjQy3}O#YLwKKU?obtsFYt#GMk*`2^j?e^)cPM8wDn&u0;Apd%PTqMcVh^ z*NP7r^+*D_TAy#hlW+~?&7?jF`vVA5>zezC3fGmJjm2bRjYVB|vV~p-El6!qe3*1e zR|a?_IQD8I{L zuwc(XX_wtgYY|3 z(QU5K`G5mXXU%p!bE5}+dR>4`AYr_rwi?M+uZyLb)s}D{G%+9 z=c#%6oyWH)_tqbEOY(TAOthwP8+F}uaP@PPR_}sRGBd}b+5-U?-x@|+FO}gVu>V`@ z6NK1P%-9;GPVYFVQx(`=p?tvfF4dRpkVyCfP1P=I;kxz4G(-v7_a@apCf!b}k-NFp zvyt|yY0E5PIis0IpK>IjXVwjDC~vx_;XfYQoIGA-R225DW~UUNXp3#|w6r0_4+CD1 zS!g!0ERb7E9y%R3Zgo8cfG_}lbxSlE1A5B#bnF-^V(MmD6VTS1RFlY5{na78#eGEQ z0ne;fJZeQ`Xmruq1Er7^xsI5D-Sa3i+>xLo*Hp&)gZHZ|K)Mv8q}V7Hk3in^63t7R z0vg~tqQ)t~OR5Xxa_UcUS7_y6lu97f=(grNjX129XD$UexOzJ{rkZKjgsKvxTf#SK zMRTG&IAUXv$~2$9Z2LV;djx;9Tm#SP)cEQZ_;-e!KI1W&G^+WI0Wd2@%AaJa;$gP6 zl%*bVpPSqqfwFH5NZ&rCf zz+%&yw6<+x2#aI<+FDl7%PATc0UzC@4p&i5RPDmy!tu-%1F~*|I%(U0cn^Vo;xp48R~fZTP+1gHjBkQ2|7-t>Rov#@au`Xc+b-@&~<%h@VuOl8$CMvcHFMw>1%xbDE>FSVli5%ci zhJGDSU*A(fvvvQ0uc1BV!FKr+oV3nxkn z%{-7aUMUIzF9>mzHEZ(f)M+7I6Fq+;3zGmBM#a(Jz#LPD3%0r1(BpfujZMEXOAeDltY#M*&~yeh|eqxXANvki^s|Z*Mfx)QSho zp|t{=5rh=U!gf;R3|0I%%u=rRDzrZwKUq+@5o4IoN@mS$4BP32HWMV=vE z1$hqc1EfZsc0EplKFk{OtaZNGFnPwMXq>7+tv~HN8<5f;>?7x(i8l$xe#*;U!k(7nEM0x^Q60`cj3nf78oRz0qAv%LVsG#05F#w`3sSKF}5 zJuv8{)w>YjO=Q|k3`vDeIsAtovnLMNV5?7{7;8d7wR#vgx@>#WjOm=*oW z2TFh848`Yrfcm$PiBel#_6X%a z)xa3HgdlDU=n+yGtE5yqDwX_O*nT-yca=1?SSdJ=+U7a4g}VVBeK4CH)IvE z*JjDx^g3e99)!FegO=P-=lqh@!6!gSy-$CiyH-8@aqgbr{UCSc#dlZrgvA}XZ{mT6 z8yXV5ZbQR?0e(Z{aJ+oziH5U@d)m`$_S0rdbnnjeg>QQe4Poik)W+Uz$te$~IFopC z0Fyg($@Zd3gA%&Jd=-_Nev6n*|h?z=C(T$QU$omsWY|MHt()n^u&U|bddf5#YC z{pB0}D*F8wxxYAHeV)4zqu{WQ(Y(IIiH|c=i2LADcC#@J1nX=8HN$_g4SRE zWPjE0&&Wm8|4MrX^Z&vhfBAC$9yOQpru&n3KX`v~v(FIw4;ATIMNfjo!@6p(9n!Hw zB*5vzMi-n?#_rhSEP}c+G~_kb7QJU` zl?XVHjtuzf?x*qoC~+Lu;N;nu?Sfy^boyE+@x4dce8{KoerPiZW!Sx0)QN{0esK8Z z+xt2jz6xCy4wkn+o=R4?QIu?_$_}>x#1s+p_)US?%j*m}r1Fw&G;)iFCppKCx{Hxk zv`P=JKVbUlI(hk6ggz5%Lgjr?U|9=Nw#DJgHx{4tlHZrP#6N7qStf*_MWSpcG_Zn- zW}_1DW!*Him1(v~X<9Pl5M1GH2jB_X5eLtnfE%G1K?(_RiC4HamO_Ys7E#dxe2Y!= zbPiYInA`cq=ea+Y+3L8D_wrp0c<;yf!tZi_45ojV`!j#Nri$FoqzhNkVA3WM#EFkyxi3?L2x=*_9{ z?h)+`Z$j=#XQB=cdP9@~hHYyU+LodT=|!Cw!XmMQFps}y4>9pkwLMfR3g%Lt$U>lzAasiOAh>a;Hlm#Y#LS*gp|gX6(G zL2(Q>L{vy^Cj6V=c?l?KEUX87q;?n@O&&+} zb!W&b!RrYk;;(CuKAK9wBw2mi0I-4r)4VsS5H`A?aclE1Ah0{Widj+!YCK?7tsIGj zYd-C=S~Kl|fT#j}fJQ6?E(QRoRL!^)6j-zl=BuchLCH7tovK{LX9YgD?UJfQkO3$Y6>P6XPszGQWf#LeO&Uxfk2(asnfZ;3a9Y}$_?q=kS3D^A!0)^tpD*NkaqN51PHPfVb^O)*Q5dm)xz!$z-oSo}f2d^u+2zu7S{%`mR4IxKj_LZtkLw zU85~^(_wLBzsE1yX?(rL|FaesHUZ9r9T{Fp=jk?%Yc1qe#CC9Wp z0|Pc#2MOXj2RDG8fx+{1aVYCX3_T1DRg+-~gHa9BCL^;%w^iA`E)zAX3ByqyQXbdU zC~TXV*(0f!?UVuf5qVm9FVm~GD2BzAn0u^Zg+>CDS}Z|T9#l23WwnHTVe1YFWoJ=x zLfF?YIj;DlU=XvSlt_%7-9VaAlE3A{P6@OWpPgUm)-+;5R=Ntz)t%$)=?lXh=4W`C zf@MOqj`6wlB}=|0JtQ0^L4N>qStnHk{as2IZtX4A3gbFsR)FxlfDs65%IER!*?z|F zcqJ%I3WYU#C`_S7ako{vqJpPwOR{K^dE_h}zV&hVE%=?s!8OGg|(F zVl_A*Ms$}xkd$#aN1>x)r09}q6lR&Kn13zUPbroScxxT{h)lt@nVG&`%|a7zXP#_f z*f>>x z7xY2fgi_kRbg56Hs)3^h`lDN<7dF%py1nxZ@I=NW^PQ~; zzt#jwmJYzyqWb7s<1?#7Z-VI<_ND7Ks}(I0Lx%tqJ3X}?tsQz*zfrUz&r#=tCmC1B zw9juFmvnW7A#v z#G^<~xgp)&u;kzvrsZwpko3mYPqVe>sFcFO<8~Mvd0lG(X}c0Ul{`f73+c~LQpE^Y zXbqZmuA#B3%HnpYfdeyx+u;e+VnwM{(hzUSY=mv2!$`rx%^gwRVgseNHch*E*e66$ zs=dAhL;fdD5$Y;#TXLln(#;&ue69M$M3TA-MCKB5O_^My)g}(iGsrU+jR9akkvH8& z#2OcbNjsV@X$;WS#wVuwH*}VVj^Gbu#AgbGThusT*hsub`}x$V%!Kf26{)qGhjAkw zPN!$OO}4hzC(IkRjN+C+afM&~M#NW1O4pZlpxG}DI04_5i17W`PiQ`etE1*diJ!k* zki8V%gi;%eek1Qx#vB*aRIImClqIT&XGTeVR6%QXPlNw9281rM$y0|Uhs0;BkOe^u z3jzCyXK%RytPH}O@R1Nq)B=@CN|I*2+#b+UXsu@($H}Y}a@<&?UkRYc=#CmPo^Sy0 zd%0#&J+K4~?}5bOZhXzKAOt~s#I7jDC!~1*=f@T+Nn_m>tM4`CaGdI~`LTz5{}q@nO~5PRhBxzasy;&nxI3>n%i z1|Z{bxvSGLnF65<<0E;X5yxkz7eT<|imd2ALwB^$2u(OnLT^dYYCU6@2qXx$=M9yV z&|0iRwucy`jtTRGTv5R_nwCmgCd%2jb3z%m3o^UJ=WG{RGNUw^86m+R^505THPqPQ zl2HB(Go?vu9Km_)mGf%3KCqjV_FMturZ8})wYUDHG|C4QWveOv+ss1*pjTCI6Ez5HgNU0LGAF8P`Y<;tc<|tsqd^I}F5>r`(e0 zB)bndy-=P>UEOKi3TtTb(IJDW7C^c+Iv$Wv_P7MLl+@P7*tmYPiV4*hD~lBZC{B3b z2Eyb8FLXsL(c5z{SPT$K780MfKW*IC^$oaNjD}&p9OJlkLru}xvJ}n4(ig2C)wFi% z4QLEY*LS`w#|I^!y@ARU1k+ZPrrHEyeZLnCuY^voi1GE99r5{X(^#7!`2+-(i7HUg zh3+XRmmqn;v^2nlVOnQVxi3vJ8a0~BBzW^Pgm7ruf`SDE3nCI_4X;+Ib?@zD3%{bo zM%xbf0^YqAwK4gR2cTkIZ|g&2O=V&7tOudo^RYs>XS~*7JA3T7Tu*t2GObE1G_T6_ zfqN(KcZ)l0&ASC9Rpc^Qp;A@R3Tz{vDeXzuy8eKAzXTAxGH%7TP1*9X`HGTh&eEa} znIJD&wat2*AF|;f9}drD_jg=vkUBbyo2Q7w7w8jf_{W$^hO5u$^_pH=Xy>KJ;of06 zJfJ1hWxmg{1rZETjwGAac;URvE>v?gew!z>7KC+0s0EuOyFY>oTPFPmMZc&Uh>elF z$oS+GY%rL^k@v$h2*0N=P~s@eT~*e4W!$>y#`0h!5?>%+SicxTv+eyF-$cET3PlMn zkUBxHS8N?Co#?D_PgF=Lc1&n?y`?5UXtfe?GhLB8Rl6(=Rj*OWx%GreoHzhQ5(}V( zU&7qTAx1c~L$z5#|8*>$?=URK2dRoDu~lb0S4n?W@6ClIflZn;HeX!fyr?uVIXzoo zY$&4(>B&h|Thu;hZy@8=mVje`t(Iq%X*Hx1R7@#;w7p{#M3n_&WNr3jo*LOq;bt#lRbc2NECn1plq2$*ScluV_}J6uQjT}0_d;e^X-S63~l2suuQ&duKuBSMazo(Vz>KtwaG?QOJ~5T=>2D6k~6 z!n{mNqweSi@Nn|X8iZumAfL*fkSmYvVRDuw$_-HSDaEqztH0;H5A$pwA6T?6S7Sss zN{$Ju-2=OB+}{ZmvU)%Qhz^s7(*|o?tvaFl&dQ6LsXgd*kzxsrYSun3i6_`nvij-$ zQd@NwkkKfaVz$XRa5(lc$ZRM#%5r?95;F?FOl5Jw6-DMi^Jz5eyztR>e^t8Ks|D7T z@0K6L`C0DI2$=2=QKXIjJ{wilz!43!MpS5&lTii(MFAJ6@Y}(Ap)!O;Q-u*u+kn(Z z6f+fg#u=M}tcrLQea!eSIaQvNU;r>J+}dzHvZDsLLAaJqmD95(tfpW->YlJQvlRLLm8<4fWxp`KI;K zRjV>-r1J|>9gJZ!j90^fFICVqGD?Lq%K?}-s{Xh-+ycn+$_w>sHAt-R%lIxYR2&tO zRwXrD6G=+5Pls|tX~6_O&(bKuhVBUuCk`dJq-C$V$nRhUxX4~M7{T%9Tl6^Ugj!#e z8jianxJcL2usmiEjR9)7Nh=O{t}ObZuBcrRkqPm|GFUJ!VhZn-P(iw5COj$vt1yMR*z zzmSf@O1nfvW|7jv31(8*Bfvyj5$jli7|`jsIM*Nan{kL)q*546|hP+ zF#%Cy%)JG!^@#RgoBqNaVoXc5-~h%%+i|u?+d@?CWjM;rZ^O&_y1HX$YBh5&SIdCE z>%AU2k(RGY$*6{q&O{#bnf4ToG2wwo0imW1O+`lL+lU1tCOhH@k&z<6YFa~=V;T=L zFttHYdXOF!=n;oU)3-uy6HB??MiKozG*Ku~=F8a74PP4tggp2|M>FG^yeC6tLV~vU zRY?kU#l+g~h-S>Jx;16Qalg~{qEX>Y8;Frj0q>Xw3b9MW@Jn=Dzpgz_UpB!n7i$t# ze_?m>r}BPrVRPp~uYN&$SOeLb(>z z-j<`x>W1_|CW|MaM*BJma%|N5hZ!5EZP4%c(tbe``FiCk+SKt@xYoWun4TWyGgeVF z8DR8~(8Oz<7MHAwsD6J9cb=*;+p((;d_-qIUqJV+BRWEeUTo9sREdm_F<@6qg`Iku>0j_c)&OE?DpoM^ zMuyHV`iMerbkw!4aTkZVe6xyhH(YJZK*T0HN-j6xVmb8LxN`v(*nJqTRgKnLn@^{1 zCVY`GGo%AA*3iGFVB(_{DHfOZ+rlyemq&?zv5~NHhy;^dxHfw zEV9r%G}NoXA~TMQG94vi)tR1fxUDnyoj_so}-y8BKT6W7UuaD6MYht z(&it<*W>9XB@iYmIUFxlGYY4!Qi&R9%tCF55b!FKpqh@p?jqxGHKu90nJbs_5D8`I zjOtssTnpY5^Cip{HN{p0L0aUqSTm?uf*SSIhv-fcs6=SLjGQWd-dwGGamen;(eOBB zE8|&xjuvTXze2{{2aE;e`hTc;m-r~otKGK;>Wf+#^dOc*&ZGx15;eKU~smk9TAUmhW@Vz>-2%u0Y-}6*7i1USWeT=XD|q&QOL7S|AulnLf8yG)c2S zxT1rqSs&bjL6-7`ziUfJC;ET#Lzyc-_VOkguis`(c_sK5UX zQ=*z5qL0gQ?H+zDHL76;Gsq)nMP>{j&B1}9^ToYOUV|K-Mi5JA*%vh8n_ea>@G7IK zcVfn>5fL(r58@IwY>c4MYb%?62P(W>l37PQw4S+u@yx2DsSO<#;YkL$ja-D}Y3}Sd za)W|gbzORot3?0B7*#pw>LPLq*`Xyop5KWlgU#aKXfdz2#v#4zoRQ0#OaQ6~EZ;WF zRQY#UEWQ~b)9r83+_27I#Dn`u%?Y!}cJH$o8~eH{{u48y@6CpbR~>2qF;T#8d)7T2v>cxnelFsyWyItD*YH?y0l*`N755#6Ui0 zr%*ke!IG%Es-bYp-6O3!D!@FIiKN}k0+^FE44pl~ERQ!`RlL=b1EkQnAnRU5&T@kM z%b4+9lSq5zBc|mm7me2UC+JT|2up^G{<+hcHeVfeL0PeexN@|wZV&LaJA zkw4{7dbx}X#NBWl@~OHXw30Xxk{uO(>bQv`5}L%EL+ZYy`p?7CYmFGETFy&m(j<$jK>GtU89d+iR${GF)4x~q{m8wITtRTzF0&@en; zoNfns2J0Ft{TJdu&XU?T)G@gU9e>(A!?{Nc(Pud(b^W)c)&` z2{$Gu3>k-#j_^1v+=iD!5m%*ZYSCE`jfmpSD%==xB9fe@G(t~rbt~M!te}=)r!8{w#lA^C#kv7=^idZh$X4%Pm!Dea0UU55p|)P zE?Q$1PruE1lKh(iBf@`ipGn@z^_eK6$Ur8vpj1X^1^P@Nbka0Zbz*qfqy=dI`?7rE zjOfwO{ZfUgD0=AP-jRO_6u+IoKB1;mj^pRD8Xp{nnr%kJdO?tdaA$*ytqG|pav(56 z%&9MyD<1?(RQp5&7m-?5pbW2z`mb`&%wb(iKxbJt{V7)ZSO9r_%!sh^S4LpbNYQmc zrb{nzeiTEN&tL`aY-d2i=A=h zmpuq)P;QKuDcQ&Ofw~0@A0scOaZqCS@(IjuZN|2i%V*!uZmOOo3zb<)M8Qz9UU@1x zm_S~vz=mlHe8#3?PM&Ld2+!Y8;I>yt`?{+`1Jn=<-rPh8Ybmd(?FtTt4Cb;a7*3e2 z$WT0D9O8V8Gsa|*w1nXd3MNHHdyFavN9tQ@?j8^9aln%`}e1XY)b_Wtj|Bv;%8IC^$y#^9sZ_BtU=p2H7HnbN` zAe6(6yEuY<$Z4qxxfJaen9rIDgQZ69JqRP(f9mIT-~Ye2)cwW5tZYhCM$$U2D7 zYyxh4YvtV!VA9S&t<%)DcWJia|FEN}`fKh7Gf10V;4ow(FW^*z9x&qwqdfmXM_#Qq z<~2=j2D$to5GHf+~ivB%IZ9~RjSCLEj|0y1-%?C2^m3%DHNxr%^M^O09m59v(XW<8GQ zS-`N&U!E(_xhBf3SbPv538Fugfny#MUIPy4_znLZeg)A9SeZ$T1ojbKnu=F%j{J|M z7ywJaA9y9*D2v?ko_$QE`y=TTk1%-?rugx)B*CO2P^0(=D%9B4edhx?1%AwDP>){l zKYkA}^tTAXzVxH%Q4FIRn1+>0qUQ?>7Zh*kfX?WzkO>(?fthb6@-Oa5Ua^?a{Bxuk zyeFTMG!hZhQ^bf_Ig_~N&XzHs*y_Cxo70*i_mlKlfYKjR>2N^<^w$?DDe3NU1nC^? z%)QQ&ICdz#xok$4Q9hdSjvh$elY_YJ{JieZ<;U=j%Rk{He~jl`Ux2<|pa04MF>;W$ zz$f=d_VjG_g2(EZ4ZwMBYjU`vD$iz@<1{J^`50IKIvO^{a4^AqM<3+NA%QnT)=Mlv zh7;=k_9%|_{!R^kKi$U}s3{OURPh4godgu!^W}FLASb;W$N}tdxEQe<2-mEOOvIbJ zn@5cTnGl9dYAi@uDRVx|n1%o_;zUB@{1o?fU*r2(_jR{RvZo!GhmB9##TAmv4GTF% zw1bK<=018Q4CsOxb@-Iit*YYZS#3Res;PF5Y`en>$oPoZT>)|t11?JxW&+||&nvD& zEPp8RINp;+D~=RzbDm?aMg1()^a!(JihJzU$$%xlAqP}+o2qSDt)bfztzEP=FAA`+ zY-AX1PQIzg8_8s--|x#@xWxxDxF-(wc7*ZPL}@JsYITTVyH1YJ{iA)GK!xP11gaVX zfI-a_YE%@qNlVH!V0-A1&}))mmx{Oq;jE;!Z-`)G#-hz2|3g0718>-G!`a^xvwyE@ zep^Z4nnt>74MJ{elgqdykC3T13#jfc`3dvLqHpm(6Uy%iy31E(( z9?ibiSTP<$)Pt--bVRz7*Ave{&exH(U1)D0#)Lf<)Q?E*_U^?`rDn)vQW+{U!zZB3 zJXLe@^(G|u7n7X!ANM&jhbffd5TFZ2B`x|Q+C_@RyV2tDkZrsrD9M9FVru#o!Sh3d z2YJ!tOh&eGz-DdTXWV?u(}ZeXpo&=En>1Kh>raUzp_a)KC;W6(Ae@>7B^TNMrF{db zq(&I_2RqED54#Cx$I+^CUz2)?O4Nh2O0RR4+Ffir=CH&!;ko!Y752I;a-I;2kB$u; zIVzeeIxXEUmZR#O&{HBC^MP-{Q=UtHO=5uy>h4ssjN(S4wVR-;?A;-6Sk95J*5@_I z!Bhz&C&H|dq3*GZtStm%2nC`~nq-HRdx1yAkTWkpl&p1&#B`Anu%>7jUt90H(y8%Z zBm;-4h1M?TV~N7dBMI*H7>?LvF*|>alx$VpnHvd)5SOJh+C)A>uS*~WNH@JE5O9{T zRFEmK1U=;r52x-tONb~lztrbqyFD6+TPW=!SNW6-d26F|W;#Wq5&LGySFFx+tik>UI?xD5`xZ z@OZqAfruH?S&1M26=r=$1$uvPo|=nP4akuSkTwJh&1V60#v&0AZlHKky4e)HIA%aF zKp|z&k_B8<1E`*`U#hxjslI`R9K$aUazl3#8p+g->hmPrKmi0FbTCZ{spb{O(rp$w zbD7+bl6l}}RtEz^V>!U`ehvM@af6;fT&;0b)K8-X2Xlv+GUIYIZZ4y%)8`Gas0EoSl?Eyd4D<;IO5zqQo|B#^ zDmT|c@`*8@yzD+l3U&;jbYkc&8cHh~RA$`UOy+c!@dEqe^Q#TNuEhV*u(KTh_w42B z6yWcR+mdJF|1v4Zh~2;blzVhnYAqf;-*7Oz)X)(BkIx(auS6VY|Cqn>yX=8;m+IH6 zV<<+(W3Qyzt;2=Xy#gWy-pHBEHx~1J*F28$r9Q;>{AYJ2>#EM9b^mafI=h9qWLtdr znfe{o!IKR`@xH6y``&*Y3;f=<4J-<3p_vgfu5@*}{i{yCVy_x=@Z72J}r@oyOtc?VA{ntMwt$l~m!|#Hs21iOH zNTU}T5E=gW?=>)u$VXqv{_h+}$u|`S_kQ&G`TB#oi^nqG;LLah1nB~Bbkf@LKmg#Q67FVeZw6c%G?d8a;CwD?&k0%8jqi$ zsb=i0|Mj44zT>W#S^U}Kb)N=gD*OH2Koi04f%N8Wk0<+bd!DNMTNVB2I}U{H3H-Lu^nl7Ej7^w^*1At&s0 zlmCpjf$>Gyuua=YpU#awSC9_CcC-oQJKqoyyQ{k5mO+e<%Cd3s;!+_M9z zE7A7dyg4YfgE7U=9Xh+)Npw@U?7buDQPQY%5#Vqx)&UwFekGkT2B3#d)Q|XYf6(v) z>vY(#!@v0JhKHwr*YIWZ;Z*(o+adGw%e9+MhdVQhf=cr12yrNQKIiZViqQThC7pgiFfTz-XTu1(_Z2BMhF9%*enJNA+fR58Qrvp9kl1ON_!LJv#3a$4S(=9=#3fOl5uZB7ZjKZyQ(+IoqUPbeIReY#wS#Ojc&aG3v1$#U>6I7p zJmb4HzM#}z%uH0@C}F2^oQIQOZmabT9&g|uq9)*+FE}E>zqC6wRiVwb=)!3kRG z*Hdr)3cEsvm?-d=6(+ytef8&9Uv0y*B_)gp*GB}0H-|DAfQ^Mb*x#IHShmAANnL-o zKiwFkk=+=BL>2;S=XQt;!?C7mf=Q%pV-WuC{R}ANV21R?n)_8;y~P;zXjNQ@Xdm5* zh$Yf~R0Xk-RTgzYo3(}4J6Zu>ZmghT*Or4^F|8#Zo)}F}R6u7-lGM3I{e0g7M{TZ7 zPErA(5YoZxSdIy<%@J@yOXVm*1RQlWz}IcoK6^^WE*I*DAu)FcAfc&pKjWa*PKoF| zR`(C<+2@k`$vBx19blOZ@l(+e&{8KUv6{G2CTZ>z7s_Hw zRsqm|fM`1`cvdGaeMt651iT$_BCoqZ+DqI9#&0~5Q2iu}N~eIXxcWVU_aFxPtcm3! zsl6|frHhydQa5-!@(4*k0BsW*<;#P`cWbiIr8l>pAPlz3r(z5#miY>?Z8_vuKqux{ zMgV24j3D)9x!f}44Anv`q6n1gu0=hDWgi8xCN87hZfbMlDNxAx>Fvo&J9dH6k<_fI z7VdFy>RZNn56cJU+NwIkKq3K`>w~Fh?sy6~JRP2Q7LDlJ=6Z zm54>>t?*X`dR;@dN7V?(ni|){_I0}2-9Dl?J!YyRewWXX8kkEgnzTVz3a*5AUIu_o zP^e#(5AtYL&z&S`GEd-ZR&7OJlBXa<$fJ|6RHd$)tH34eg!I$GZ(xz5lrSw%re#i_ zE;xx4*RUK6VR3_a8WleAzM~GBGl7tv40i+xGPlQ@D<7qyisX!0M|dxt=2y_`DQFDJ z!m0U6fV9Sg&M%)#UPU7)mFwpdJ=4gi1YM+CG!mYpQBrvin;8fBqj^z89f@IvgrUXC zC_7NRK#LcRLno8Ak+zO$pMwEShz&MPYlJrS>r!L@4s>AQ-SR2(?~vz}@{*SgrD^H% zn!db9^&PwgB<2zimU9PLNN`Tu5WnVA6H5u2#z+kxY7k?63eCsx;_| z+!*OkbkXYQ56?(byd)0^M6j;*;kF*`=uJM9|K$_lb=wfFrIp2zDN#b=>ac$6GMbBH z0fH$TLa7q@9FiUQLT$=RmC=HAg@o9PRU z(`M6FU&-<1I`dBH7CAUpOT>vX-N2DZ!XPk7Rz)3MiuUsWgp#H3TD}*(0O>g-|07Ms z&4F#o*eAG2zzNT_$ruafVV2I79zaxiTKnz9Qc@d zb}%l;4beYvnJa1+0$zgpHc{cir(+VwlHmDe6+lV?OQDkd2!G&*C~a=Kh~^&mx-lAX z*u>lESn#$rvCYY|SOtdepx?uTgBh!K9k?fTijb`YjmUY;nyqWs7EQ1sUoR+Z4_O4N z1r5Q*@Xv}BIFv-6VI5wnDfb2HSGS)=x;olzoPIrisZ?Jt=m#z;8(E>=;L)%g7DlaPTr73 zj9!8syPgMeWQ7P85d%}$qcb68FP`3H9+w?0GKfx1iocK342^Cyl|tal93X0bGjo&4Q2bzlB5f>=la-h-)B-c)dWA{UDU6HgM2h!FS~e?Rw_YDE z+wG8`+d2m77V;jk9Uxj)45^)Luu8t(BBs<_RUHv6K%YH4@4;-J580IML_lzI^|Kg_ z8cL8~XoYZ)F1Lhm` zE}(95x4@e$0A4xGM&1eQOLG(x(rRI@9d3M?5V*v>ENMh&Ay7RaZjy$`ud5+5C1v@v z4gS&$qRw2`c>RqkEjb`Zn%w%OI)aLDumO2Bx+@x&N7ggvzd_DsG{`v+=Z&IFtU-g2 z-P}cb4Hs4!fjA5a@xx~U z&Upv9a?$QI`!N#}CpJl#ZYz(lMMK7o5jgRlY7cVwJ=g{LJyO*b&#Ek@xTeOXoPwAz z3(#S0Z{_LrnpNm4h0e=DKrzRmJY6(A9G|@fBU^O`-*{>oYu#x)3Dlaz!iYK~&=MVo z?m??T`w@y{yJ6rvflBm%PR?3&CpGn-7!0+EC`g9VCjdi!lnbx0sW zab1qNE8_YfzYfircuNlo#9G4+Hl@hs#M8Zmz{ioVBMd%-G`RLK3oyZa)SOv>%#`(d z@B}(svHCeq0Ati^qCq#1N58NclDwHj?J|!LsY59)0|dKa)Js~@~9zEs;avq?IyMLdqq|l^OXt8=2^_# z$-FeaBt2y`5cH}DX@pIsijxw&k7)C3QFrO4>o|4)-1=Betgz8h)2D*vQxB1;B)OfQ zfQ?*lkv^ZNi#1Y37;bMq`~c6OPc9;d3z4(J(1IaFENOS7MNae-0V5Go&5R>BOq*aC z))DEjhnCiMm?TBrP+Qs5JQP^>`CZL14dwP68-LExu7yjtIr01eqbMxviI}2bnbcr| zgTqQThn*YrMYsismyYCV?Pg-$DC&o-Kn&o=jp3osEKtglj4F2B3xQy?1PSPJz?vUp z$&uM{is#PKA@;xu+w?j@(D8zevmsWyG}w6(@UzG9$AfkCa84ac4zQ;3Fgd2@?f@A_ zlKu`{Zwk47I7ng+x@u0c(~VVUtIavID1n(~w$@CQW9uu;{NUO^9ZFGZD7{SqfqF

      JFlRPE!3g1m-SQbU(5|947-T|-1I5diPF+Nds4 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�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/~t+qb+I_GL3~^SL6R)9oGL` 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%0DChu3>)YQ?sb30%$$%0IaI}MrcR0%d9Ia2Y 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 RXn~*wf))r`;P2T2{{fg_(MA9O literal 0 HcmV?d00001 diff --git a/Headers/About.h b/Headers/About.h deleted file mode 100755 index 1f8c23d..0000000 --- a/Headers/About.h +++ /dev/null @@ -1 +0,0 @@ -//============================================================================ //---------------------------------------------------------------------------- // About.h //---------------------------------------------------------------------------- //============================================================================ void DoAbout (void); \ No newline at end of file diff --git a/Headers/DialogUtils.h b/Headers/DialogUtils.h deleted file mode 100755 index 1a81109..0000000 --- a/Headers/DialogUtils.h +++ /dev/null @@ -1 +0,0 @@ -//============================================================================ //---------------------------------------------------------------------------- // DialogUtils.h //---------------------------------------------------------------------------- //============================================================================ #include void BringUpDialog (DialogPtr *theDialog, short dialogID); //void GetPutDialogCorner (Point *); //void GetGetDialogCorner (Point *); //void CenterDialog (short); void GetDialogRect (Rect *, short); //void TrueCenterDialog (short); //void CenterAlert (short); //void ZoomOutDialogRect (short); //void ZoomOutAlertRect (short); void FlashDialogButton (DialogPtr, short); void DrawDefaultButton (DialogPtr); void GetDialogString (DialogPtr, short, StringPtr); void SetDialogString (DialogPtr, short, StringPtr); short GetDialogStringLen (DialogPtr, short); void GetDialogItemValue (DialogPtr, short, short *); void SetDialogItemValue (DialogPtr, short, short); void ToggleDialogItemValue (DialogPtr, short); void SetDialogNumToStr (DialogPtr, short, long); void GetDialogNumFromStr (DialogPtr, short, long *); void GetDialogItemRect (DialogPtr, short, Rect *); void SetDialogItemRect (DialogPtr, short, Rect *); void OffsetDialogItemRect (DialogPtr, short, short, short); void SelectFromRadioGroup (DialogPtr, short, short, short); //void AddMenuToPopUp (DialogPtr, short, MenuHandle); void GetPopUpMenuValue (DialogPtr, short, short *); void SetPopUpMenuValue (DialogPtr, short, short); void MyEnableControl(DialogPtr, short); void MyDisableControl(DialogPtr, short); void DrawDialogUserText (DialogPtr, short, StringPtr, Boolean); void DrawDialogUserText2 (DialogPtr, short, StringPtr); void LoadDialogPICT (DialogPtr, short, short); void FrameDialogItem (DialogPtr, short); void FrameDialogItemC (DialogPtr, short, long); void FrameOvalDialogItem (DialogPtr, short); void BorderDialogItem (DialogPtr, short, short); void ShadowDialogItem (DialogPtr, short, short); void EraseDialogItem (DialogPtr, short); \ No newline at end of file diff --git a/Headers/Environ.h b/Headers/Environ.h deleted file mode 100755 index 1c972bc..0000000 --- a/Headers/Environ.h +++ /dev/null @@ -1 +0,0 @@ -//============================================================================ //---------------------------------------------------------------------------- // Environ.h //---------------------------------------------------------------------------- //============================================================================ #include typedef struct { Rect screen, gray; long dirID; short wasDepth, isDepth; short thisResFile; short numScreens; short vRefNum; Boolean can1Bit; Boolean can4Bit; Boolean can8Bit; Boolean wasColorOrGray; Boolean hasWNE; Boolean hasSystem7; Boolean hasColor; Boolean hasGestalt; Boolean canSwitch; Boolean canColor; Boolean hasSM3; Boolean hasQT; Boolean hasDrag; } macEnviron; extern macEnviron thisMac; \ No newline at end of file diff --git a/Headers/Externs.h b/Headers/Externs.h deleted file mode 100755 index 39b299f..0000000 --- a/Headers/Externs.h +++ /dev/null @@ -1 +0,0 @@ - //============================================================================ //---------------------------------------------------------------------------- // Externs.h //---------------------------------------------------------------------------- //============================================================================ #pragma once #include #define kPreferredDepth 8 #define kNilPointer 0L #define kPutInFront (WindowPtr)-1L #define kNormalUpdates TRUE #define kOneKilobyte 1024 #define kOkayButton 1 #define kCancelButton 2 #define kControlActive 0 #define kControlInactive 255 #define kAsynch TRUE #define kSynch FALSE #define kHomeKeyASCII 0x01 #define kEnterKeyASCII 0x03 #define kEndKeyASCII 0x04 #define kHelpKeyASCII 0x05 #define kDeleteKeyASCII 0x08 #define kTabKeyASCII 0x09 #define kPageUpKeyASCII 0x0B #define kPageDownKeyASCII 0x0C #define kReturnKeyASCII 0x0D #define kFunctionKeyASCII 0x10 #define kClearKeyASCII 0x1A #define kEscapeKeyASCII 0x1B #define kLeftArrowKeyASCII 0x1C #define kRightArrowKeyASCII 0x1D #define kUpArrowKeyASCII 0x1E #define kDownArrowKeyASCII 0x1F #define kSpaceBarASCII 0x20 #define kExclamationASCII 0x21 #define kPlusKeyASCII 0x2B #define kMinusKeyASCII 0x2D #define k0KeyASCII 0x30 #define k1KeyASCII 0x31 #define k2KeyASCII 0x32 #define k3KeyASCII 0x33 #define k4KeyASCII 0x34 #define k5KeyASCII 0x35 #define k6KeyASCII 0x36 #define k7KeyASCII 0x37 #define k8KeyASCII 0x38 #define k9KeyASCII 0x39 #define kCapAKeyASCII 0x41 #define kCapBKeyASCII 0x42 #define kCapCKeyASCII 0x43 #define kCapDKeyASCII 0x44 #define kCapEKeyASCII 0x45 #define kCapFKeyASCII 0x46 #define kCapGKeyASCII 0x47 #define kCapHKeyASCII 0x48 #define kCapIKeyASCII 0x49 #define kCapJKeyASCII 0x4A #define kCapKKeyASCII 0x4B #define kCapLKeyASCII 0x4C #define kCapMKeyASCII 0x4D #define kCapNKeyASCII 0x4E #define kCapOKeyASCII 0x4F #define kCapPKeyASCII 0x50 #define kCapQKeyASCII 0x51 #define kCapRKeyASCII 0x52 #define kCapSKeyASCII 0x53 #define kCapTKeyASCII 0x54 #define kCapUKeyASCII 0x55 #define kCapVKeyASCII 0x56 #define kCapWKeyASCII 0x57 #define kCapXKeyASCII 0x58 #define kCapYKeyASCII 0x59 #define kCapZKeyASCII 0x5A #define kAKeyASCII 0x61 #define kBKeyASCII 0x62 #define kCKeyASCII 0x63 #define kDKeyASCII 0x64 #define kEKeyASCII 0x65 #define kFKeyASCII 0x66 #define kGKeyASCII 0x67 #define kHKeyASCII 0x68 #define kIKeyASCII 0x69 #define kJKeyASCII 0x6A #define kKKeyASCII 0x6B #define kLKeyASCII 0x6C #define kMKeyASCII 0x6D #define kNKeyASCII 0x6E #define kOKeyASCII 0x6F #define kPKeyASCII 0x70 #define kQKeyASCII 0x71 #define kRKeyASCII 0x72 #define kSKeyASCII 0x73 #define kTKeyASCII 0x74 #define kUKeyASCII 0x75 #define kVKeyASCII 0x76 #define kWKeyASCII 0x77 #define kXKeyASCII 0x78 #define kYKeyASCII 0x79 #define kZKeyASCII 0x7A #define kForwardDeleteASCII 0x7F #define kPlusKeypadMap 66 // key map offset for + on keypad #define kMinusKeypadMap 73 // key map offset for - on keypad #define kTimesKeypadMap 68 // key map offset for * on keypad #define k0KeypadMap 85 // key map offset for 0 on keypad #define k1KeypadMap 84 // key map offset for 1 on keypad #define k2KeypadMap 83 // key map offset for 2 on keypad #define k3KeypadMap 82 // key map offset for 3 on keypad #define k4KeypadMap 81 // key map offset for 4 on keypad #define k5KeypadMap 80 // key map offset for 5 on keypad #define k6KeypadMap 95 // key map offset for 6 on keypad #define k7KeypadMap 94 // key map offset for 7 on keypad #define k8KeypadMap 92 // key map offset for 8 on keypad #define k9KeypadMap 91 // key map offset for 9 on keypad #define kUpArrowKeyMap 121 // key map offset for up arrow #define kDownArrowKeyMap 122 // key map offset for down arrow #define kRightArrowKeyMap 123 // key map offset for right arrow #define kLeftArrowKeyMap 124 // key map offset for left arrow #define kAKeyMap 7 #define kBKeyMap 12 #define kCKeyMap 15 #define kDKeyMap 5 #define kEKeyMap 9 #define kFKeyMap 4 #define kGKeyMap 2 #define kHKeyMap 3 #define kMKeyMap 41 #define kNKeyMap 42 #define kOKeyMap 24 #define kPKeyMap 36 #define kQKeyMap 11 #define kRKeyMap 8 #define kSKeyMap 6 #define kTKeyMap 22 #define kVKeyMap 14 #define kWKeyMap 10 #define kXKeyMap 0 #define kZKeyMap 1 #define kPeriodKeyMap 40 #define kCommandKeyMap 48 #define kEscKeyMap 50 #define kDeleteKeyMap 52 #define kSpaceBarMap 54 #define kTabKeyMap 55 #define kControlKeyMap 60 #define kOptionKeyMap 61 #define kCapsLockKeyMap 62 #define kShiftKeyMap 63 #define kTabRawKey 0x30 // key map offset for Tab key #define kClearRawKey 0x47 // key map offset for Clear key #define kF5RawKey 0x60 // key map offset for F5 #define kF6RawKey 0x61 // key map offset for F6 #define kF7RawKey 0x62 // key map offset for F7 #define kF3RawKey 0x63 // key map offset for F3 #define kF8RawKey 0x64 // key map offset for F8 #define kF9RawKey 0x65 // key map offset for F9 #define kF11RawKey 0x67 // key map offset for F11 #define kF13RawKey 0x69 // key map offset for F13 #define kF14RawKey 0x6B // key map offset for F14 #define kF10RawKey 0x6D // key map offset for F10 #define kF12RawKey 0x6F // key map offset for F12 #define kF15RawKey 0x71 // key map offset for F15 #define kF4RawKey 0x76 // key map offset for F4 #define kF2RawKey 0x78 // key map offset for F2 #define kF1RawKey 0x7A // key map offset for F1 #define kErrUnnaccounted 1 #define kErrNoMemory 2 #define kErrDialogDidntLoad 3 #define kErrFailedResourceLoad 4 #define kErrFailedGraphicLoad 5 #define kErrFailedOurDirect 6 #define kErrFailedValidation 7 #define kErrNeedSystem7 8 #define kErrFailedGetDevice 9 #define kErrFailedMemoryOperation 10 #define kErrFailedCatSearch 11 #define kErrNeedColorQD 12 #define kErrNeed16Or256Colors 13 #define iAbout 1 #define iNewGame 1 #define iTwoPlayer 2 #define iOpenSavedGame 3 #define iLoadHouse 5 #define iQuit 7 #define iEditor 1 #define iHighScores 3 #define iPrefs 4 #define iHelp 5 #define iNewHouse 1 #define iSave 2 #define iHouse 4 #define iRoom 5 #define iObject 6 #define iCut 8 #define iCopy 9 #define iPaste 10 #define iClear 11 #define iDuplicate 12 #define iBringForward 14 #define iSendBack 15 #define iGoToRoom 17 #define iMapWindow 19 #define iObjectWindow 20 #define iCoordinateWindow 21 //-------------------------------------------------------------- Structs /* typedef short SICN[16]; typedef SICN *SICNList; typedef SICNList *SICNHand; */ #pragma options align=mac68k typedef struct { Str32 wasDefaultName; Str15 wasLeftName, wasRightName; Str15 wasBattName, wasBandName; Str15 wasHighName; Str31 wasHighBanner; // long encrypted, fakeLong; long wasLeftMap, wasRightMap; long wasBattMap, wasBandMap; short wasVolume; short prefVersion; short wasMaxFiles; short wasEditH, wasEditV; short wasMapH, wasMapV; short wasMapWide, wasMapHigh; short wasToolsH, wasToolsV; short wasLinkH, wasLinkV; short wasCoordH, wasCoordV; short isMapLeft, isMapTop; short wasNumNeighbors; short wasDepthPref; short wasToolGroup; short smWarnings; short wasFloor, wasSuite; Boolean wasZooms, wasMusicOn; Boolean wasAutoEdit, wasDoColorFade; Boolean wasMapOpen, wasToolsOpen; Boolean wasCoordOpen, wasQuickTrans; Boolean wasIdleMusic, wasGameMusic; Boolean wasEscPauseKey; Boolean wasDoAutoDemo, wasScreen2; Boolean wasDoBackground, wasHouseChecks; Boolean wasPrettyMap, wasBitchDialogs; } prefsInfo; #pragma options align=reset //-------------------------------------------------------------- Prototypes void DoAbout (void); // --- About.c void LoadCursors (void); // --- AnimCursor.c void DisposCursors (void); void IncrementCursor (void); void DecrementCursor (void); void SpinCursor (short); void BackSpinCursor (short); void ColorText (StringPtr, long); // --- ColorUtils.c void ColorRect (Rect *, long); void ColorOval (Rect *, long); void ColorRegion (RgnHandle, long); void ColorLine (short, short, short, short, long); void HiliteRect (Rect *, short, short); void ColorFrameRect (Rect *, long); void ColorFrameWHRect (short, short, short, short, long); void ColorFrameOval (Rect *, long); void LtGrayForeColor (void); void GrayForeColor (void); void DkGrayForeColor (void); void RestoreColorsSlam (void); void MonitorWait (void); // --- DebugUtils.c void DisplayRect (Rect *); void FlashRect (Rect *); void CheckLegitRect(Rect *, Rect *); void DisplayLong (long); void DisplayShort (short); void FlashLong (long); void FlashShort (short); void DoBarGraph (short, short, short, short); short BetaOkay (void); void DebugNum (long); void DisplayCTSeed (CGrafPtr); void FillScreenRed (void); void DumpToResEditFile (Ptr, long); void HandleEvent (void); // --- Event.c void HiliteAllWindows (void); void IgnoreThisClick (void); short WhatsOurDepth (void); // --- Environs.c void SwitchToDepth (short, Boolean); void CheckOurEnvirons (void); //void ReflectSecondMonitorEnvirons (Boolean, Boolean, Boolean); void HandleDepthSwitching (void); void RestoreColorDepth (void); void CheckMemorySize (void); void SetAppMemorySize (long); Boolean CheckFileError (short, StringPtr); // --- File Error.c Boolean SavePrefs (prefsInfo *, short); // --- Prefs.c Boolean LoadPrefs (prefsInfo *, short); void PasStringCopy (StringPtr, StringPtr); // --- StringUtils.c short WhichStringFirst (StringPtr, StringPtr); void PasStringCopyNum (StringPtr, StringPtr, short); void PasStringConcat (StringPtr, StringPtr); void GetLineOfText (StringPtr, short, StringPtr); void WrapText (StringPtr, short); void GetFirstWordOfString (StringPtr, StringPtr); void CollapseStringToWidth (StringPtr, short); void GetChooserName (StringPtr); StringPtr GetLocalizedString (short, StringPtr); Point MyGetGlobalMouse (void); // --- Utilities.c void ToolBoxInit (void); void FindOurDevice (void); short RandomInt (short); long RandomLong (long); void InitRandomLongQUS (void); unsigned long RandomLongQUS (void); //void CenterAlert (short); void RedAlert (short); //void CreateOffScreenBitMap (Rect *, GrafPtr *); //void CreateOffScreenPixMap (Rect *, CGrafPtr *); //void KillOffScreenPixMap (CGrafPtr); //void KillOffScreenBitMap (GrafPtr); void LoadGraphic (short); void LoadScaledGraphic (short, Rect *); //void PlotSICN (Rect *, SICNHand, long); void LargeIconPlot (Rect *, short); void DrawCIcon (short, short, short); char KeyMapOffsetFromRawKey (char); long LongSquareRoot (long); //void HideMenuBarOld (void); //void ShowMenuBarOld (void); Boolean WaitForInputEvent (short); void WaitCommandQReleased (void); char GetKeyMapFromMessage (long); void GetKeyName (long, StringPtr); Boolean OptionKeyDown (void); long ExtractCTSeed (CGrafPtr); //void ForceCTSeed (CGrafPtr, long); void DelayTicks (long); void UnivGetSoundVolume (short *, Boolean); void UnivSetSoundVolume (short, Boolean); Boolean ValidInstallation (Boolean); // --- Validate.c void GetWindowLeftTop (WindowPtr, short *, short *); // --- WindowUtils.c void GetWindowRect (WindowPtr, Rect *); void GetLocalWindowRect (WindowPtr, Rect *); //void FlagWindowFloating (WindowPtr); //Boolean IsWindowFloating (WindowPtr); void OpenMessageWindow (StringPtr); void SetMessageWindowMessage (StringPtr); void CloseMessageWindow (void); void CloseThisWindow (WindowPtr *); #ifdef powerc // extern pascal void SetSoundVol(short level); // for old Sound Manager // extern pascal void GetSoundVol(short *level) // THREEWORDINLINE(0x4218, 0x10B8, 0x0260); #endif #include "GliderDefines.h" #include "GliderStructs.h" #include "GliderVars.h" #include "GliderProtos.h" \ No newline at end of file diff --git a/Headers/GameOver.h b/Headers/GameOver.h deleted file mode 100755 index d90c6f9..0000000 --- a/Headers/GameOver.h +++ /dev/null @@ -1 +0,0 @@ -//============================================================================ //---------------------------------------------------------------------------- // GameOver.h //---------------------------------------------------------------------------- //============================================================================ #include extern GWorldPtr angelSrcMap; extern GWorldPtr angelMaskMap; \ No newline at end of file diff --git a/Headers/GliderDefines.h b/Headers/GliderDefines.h deleted file mode 100755 index 015e91d..0000000 --- a/Headers/GliderDefines.h +++ /dev/null @@ -1 +0,0 @@ - //============================================================================ //---------------------------------------------------------------------------- // GliderDefines.h //---------------------------------------------------------------------------- //============================================================================ //============================================================== Defines //#define CREATEDEMODATA //#define COMPILEDEMO //#define CAREFULDEBUG #define COMPILENOCP #define COMPILEQT #define BUILD_ARCADE_VERSION 1 #define kYellowUnaccounted 1 #define kYellowFailedResOpen 2 #define kYellowFailedResAdd 3 #define kYellowFailedResCreate 4 #define kYellowNoHouses 5 #define kYellowNewerVersion 6 #define kYellowNoBackground 7 #define kYellowIllegalRoomNum 8 #define kYellowNoBoundsRes 9 #define kYellowScrapError 10 #define kYellowNoMemory 11 #define kYellowFailedWrite 12 #define kYellowNoMusic 13 #define kYellowFailedSound 14 #define kYellowAppleEventErr 15 #define kYellowOpenedOldHouse 16 #define kYellowLostAllHouses 17 #define kYellowFailedSaveGame 18 #define kYellowSavedTimeWrong 19 #define kYellowSavedVersWrong 20 #define kYellowSavedRoomsWrong 21 #define kYellowQTMovieNotLoaded 22 #define kYellowNoRooms 23 #define kYellowCantOrderLinks 24 #define kSwitchIfNeeded 0 #define kSwitchTo256Colors 1 #define kSwitchTo16Grays 2 #define kProdGameScoreMode -4 #define kKickGameScoreMode -3 #define kPlayGameScoreMode -2 #define kPlayWholeScoreMode -1 #define kPlayChorus 4 #define kPlayRefrainSparse1 5 #define kPlayRefrainSparse2 6 #define kHitWallSound 0 // ¥¥¥¥¥¥ #define kFadeInSound 1 // ¥¥ #define kFadeOutSound 2 // ¥¥¥¥¥¥ #define kBeepsSound 3 // ¥¥ #define kBuzzerSound 4 // ¥¥¥¥¥¥ #define kDingSound 5 // #define kEnergizeSound 6 // ¥¥¥¥¥¥ #define kFollowSound 7 // ¥¥ ¥¥ #define kMicrowavedSound 8 // ¥¥ ¥¥ #define kSwitchSound 9 // ¥¥ ¥¥ #define kBirdSound 10 // ¥¥¥¥¥¥ #define kCuckooSound 11 // #define kTikSound 12 // ¥¥ ¥¥ #define kTokSound 13 // ¥¥ ¥¥ #define kBlowerOn 14 // ¥¥ ¥¥ #define kBlowerOff 15 // ¥¥ ¥¥ #define kCaughtFireSound 16 // ¥¥¥¥¥¥ #define kScoreTikSound 17 // #define kThrustSound 18 // ¥¥¥ ¥¥ #define kFizzleSound 19 // ¥¥¥¥ ¥¥ #define kFireBandSound 20 // ¥¥ ¥¥ ¥¥ #define kBandReboundSound 21 // ¥¥ ¥¥¥¥ #define kGreaseSpillSound 22 // ¥¥ ¥¥¥ #define kChordSound 23 // #define kVCRSound 24 // ¥¥¥¥¥¥¥ #define kFoilHitSound 25 // ¥¥ ¥¥ #define kShredSound 26 // ¥¥ ¥¥ #define kToastLaunchSound 27 // ¥¥ ¥¥ #define kToastLandSound 28 // ¥¥¥¥¥¥¥ #define kMacOnSound 29 // #define kMacBeepSound 30 // #define kMacOffSound 31 // #define kTVOnSound 32 // #define kTVOffSound 33 // ¥¥¥¥¥¥ #define kCoffeeSound 34 // ¥¥ #define kMysticSound 35 // ¥¥¥¥¥¥ #define kZapSound 36 // ¥¥ #define kPopSound 37 // ¥¥¥¥¥¥ #define kEnemyInSound 38 // #define kEnemyOutSound 39 // ¥¥¥¥¥¥ #define kPaperCrunchSound 40 // ¥¥ ¥¥ #define kBounceSound 41 // ¥¥ ¥¥ #define kDripSound 42 // ¥¥ ¥¥ #define kDropSound 43 // ¥¥¥¥¥¥ #define kFishOutSound 44 // #define kFishInSound 45 // ¥¥ ¥¥ #define kDontExitSound 46 // ¥¥ ¥¥ #define kSizzleSound 47 // ¥¥ ¥¥ #define kPaper1Sound 48 // ¥¥ ¥¥ #define kPaper2Sound 49 // ¥¥¥¥¥¥ #define kPaper3Sound 50 // #define kPaper4Sound 51 // ¥¥¥ ¥¥ #define kTypingSound 52 // ¥¥¥¥ ¥¥ #define kCarriageSound 53 // ¥¥ ¥¥ ¥¥ #define kChord2Sound 54 // ¥¥ ¥¥¥¥ #define kPhoneRingSound 55 // ¥¥ ¥¥¥ #define kChime1Sound 56 // #define kChime2Sound 57 // ¥¥¥¥¥¥¥ #define kWebTwangSound 58 // ¥¥ ¥¥ #define kTransOutSound 59 // ¥¥ ¥¥ #define kTransInSound 60 // ¥¥ ¥¥ #define kBonusSound 61 // ¥¥¥¥¥¥¥ #define kHissSound 62 // #define kTriggerSound 63 #define kHitWallPriority 100 // ¥¥¥¥¥¥ #define kScoreTikPriority 101 // ¥¥ #define kBandReboundPriority 102 // ¥¥¥¥¥¥ #define kDontExitPriority 103 // ¥¥ #define kTikPriority 200 // ¥¥¥¥¥¥ #define kTokPriority 201 // #define kMysticPriority 202 // ¥¥¥¥¥¥ #define kChime1Priority 203 // ¥¥ ¥¥ #define kChime2Priority 204 // ¥¥ ¥¥ #define kThrustPriority 300 // ¥¥ ¥¥ #define kFireBandPriority 301 // ¥¥¥¥¥¥ #define kChordPriority 302 // #define kVCRPriority 303 // ¥¥ ¥¥ #define kToastLaunchPriority 304 // ¥¥ ¥¥ #define kToastLandPriority 305 // ¥¥ ¥¥ #define kCoffeePriority 306 // ¥¥ ¥¥ #define kBouncePriority 307 // ¥¥¥¥¥¥ #define kDripPriority 308 // #define kDropPriority 309 // ¥¥¥ ¥¥ #define kWebTwangPriority 310 // ¥¥¥¥ ¥¥ #define kHissPriority 311 // ¥¥ ¥¥ ¥¥ #define kFoilHitPriority 400 // ¥¥ ¥¥¥¥ #define kMacOnPriority 401 // ¥¥ ¥¥¥ #define kMacOffPriority 402 // #define kMacBeepPriority 403 // ¥¥¥¥¥¥¥ #define kTVOnPriority 404 // ¥¥ ¥¥ #define kTVOffPriority 405 // ¥¥ ¥¥ #define kZapPriority 406 // ¥¥ ¥¥ #define kPopPriority 407 // ¥¥¥¥¥¥¥ #define kEnemyInPriority 408 // #define kEnemyOutPriority 409 // #define kPaperCrunchPriority 410 // #define kFishOutPriority 411 // #define kFishInPriority 412 // #define kSizzlePriority 413 #define kPhoneRingPriority 500 #define kSwitchPriority 700 #define kBlowerOnPriority 701 #define kBlowerOffPriority 702 #define kFizzlePriority 703 #define kBeepsPriority 800 #define kBuzzerPriority 801 #define kDingPriority 802 #define kEnergizePriority 803 #define kBirdPriority 804 #define kCuckooPriority 805 #define kGreaseSpillPriority 806 #define kPapersPriority 807 #define kTypingPriority 808 #define kCarriagePriority 809 #define kChord2Priority 810 #define kMicrowavedPriority 811 #define kBonusPriority 812 #define kFadeInPriority 900 #define kFadeOutPriority 901 #define kCaughtFirePriority 902 #define kShredPriority 903 #define kFollowPriority 904 #define kTransInPriority 905 #define kTransOutPriority 906 #define kTriggerPriority 999 #define kArrowCursor 0 #define kBeamCursor 1 #define kHandCursor 2 #define kAppleMenuID 128 #define kGameMenuID 129 #define kOptionsMenuID 130 #define kHouseMenuID 131 #define kSplashMode 0 #define kEditMode 1 #define kPlayMode 2 #define kIdleSplashMode 0 #define kIdleDemoMode 1 #define kIdleSplashTicks 7200L // 2 minutes #define kIdleLastMode 1 #define kRoomAbove 1 #define kRoomBelow 2 #define kRoomToRight 3 #define kRoomToLeft 4 #define kBumpUp 1 #define kBumpDown 2 #define kBumpRight 3 #define kBumpLeft 4 #define kAbove 1 #define kToRight 2 #define kBelow 3 #define kToLeft 4 #define kBottomCorner 5 #define kTopCorner 6 #define kCentralRoom 0 #define kNorthRoom 1 #define kNorthEastRoom 2 #define kEastRoom 3 #define kSouthEastRoom 4 #define kSouthRoom 5 #define kSouthWestRoom 6 #define kWestRoom 7 #define kNorthWestRoom 8 #define kSimpleRoom 2000 #define kPaneledRoom 2001 #define kBasement 2002 #define kChildsRoom 2003 #define kAsianRoom 2004 #define kUnfinishedRoom 2005 #define kSwingersRoom 2006 #define kBathroom 2007 #define kLibrary 2008 #define kGarden 2009 #define kSkywalk 2010 #define kDirt 2011 #define kMeadow 2012 #define kField 2013 #define kRoof 2014 #define kSky 2015 #define kStratosphere 2016 #define kStars 2017 #define kMapRoomHeight 20 #define kMapRoomWidth 32 #define kMaxScores 10 #define kMaxRoomObs 24 #define kMaxSparkles 3 #define kNumSparkleModes 5 #define kMaxFlyingPts 3 #define kMaxFlyingPointsLoop 24 #define kMaxCandles 20 #define kMaxTikis 8 #define kMaxCoals 8 #define kMaxPendulums 8 #define kMaxHotSpots 56 #define kMaxSavedMaps 24 #define kMaxRubberBands 2 #define kMaxGrease 16 #define kMaxStars 4 #define kMaxShredded 4 #define kMaxDynamicObs 18 #define kMaxMasterObjects 216 // kMaxRoomObs * 9 #define kMaxViewWidth 1536 #define kMaxViewHeight 1026 #define kSelectTool 0 #define kBlowerMode 1 #define kFurnitureMode 2 #define kBonusMode 3 #define kTransportMode 4 #define kSwitchMode 5 #define kLightMode 6 #define kApplianceMode 7 #define kEnemyMode 8 #define kClutterMode 9 #define kIgnoreIt 0 // ¥¥¥¥¥¥ #define kLiftIt 1 // ¥¥ ¥¥ #define kDropIt 2 // ¥¥¥¥¥¥¥¥ #define kPushItLeft 3 // ¥¥ ¥¥ #define kPushItRight 4 // ¥¥ ¥¥ #define kDissolveIt 5 // #define kRewardIt 6 // ¥¥¥¥¥¥ #define kMoveItUp 7 // ¥¥ ¥¥ #define kMoveItDown 8 // ¥¥ #define kSwitchIt 9 // ¥¥ ¥¥ #define kShredIt 10 // ¥¥¥¥¥¥ #define kStrumIt 11 // #define kTriggerIt 12 // ¥¥¥¥¥¥¥¥ #define kBurnIt 13 // ¥¥ #define kSlideIt 14 // ¥¥ #define kTransportIt 15 // ¥¥ #define kIgnoreLeftWall 16 // ¥¥ #define kIgnoreRightWall 17 // #define kMailItLeft 18 // ¥¥¥¥¥¥ #define kMailItRight 19 // ¥¥ #define kDuctItDown 20 // ¥¥ #define kDuctItUp 21 // ¥¥ #define kMicrowaveIt 22 // ¥¥¥¥¥¥ #define kIgnoreGround 23 // #define kBounceIt 24 // #define kChimeIt 25 // ¥¥ #define kWebIt 26 // ¥¥ #define kSoundIt 27 #define kFloorVent 0x01 // Blowers #define kCeilingVent 0x02 #define kFloorBlower 0x03 #define kCeilingBlower 0x04 #define kSewerGrate 0x05 #define kLeftFan 0x06 #define kRightFan 0x07 #define kTaper 0x08 #define kCandle 0x09 #define kStubby 0x0A #define kTiki 0x0B #define kBBQ 0x0C #define kInvisBlower 0x0D #define kGrecoVent 0x0E #define kSewerBlower 0x0F #define kLiftArea 0x10 #define kTable 0x11 // Furniture #define kShelf 0x12 #define kCabinet 0x13 #define kFilingCabinet 0x14 #define kWasteBasket 0x15 #define kMilkCrate 0x16 #define kCounter 0x17 #define kDresser 0x18 #define kDeckTable 0x19 #define kStool 0x1A #define kTrunk 0x1B #define kInvisObstacle 0x1C #define kManhole 0x1D #define kBooks 0x1E #define kInvisBounce 0x1F #define kRedClock 0x21 // Prizes #define kBlueClock 0x22 #define kYellowClock 0x23 #define kCuckoo 0x24 #define kPaper 0x25 #define kBattery 0x26 #define kBands 0x27 #define kGreaseRt 0x28 #define kGreaseLf 0x29 #define kFoil 0x2A #define kInvisBonus 0x2B #define kStar 0x2C #define kSparkle 0x2D #define kHelium 0x2E #define kSlider 0x2F #define kUpStairs 0x31 // Transport #define kDownStairs 0x32 #define kMailboxLf 0x33 #define kMailboxRt 0x34 #define kFloorTrans 0x35 #define kCeilingTrans 0x36 #define kDoorInLf 0x37 #define kDoorInRt 0x38 #define kDoorExRt 0x39 #define kDoorExLf 0x3A #define kWindowInLf 0x3B #define kWindowInRt 0x3C #define kWindowExRt 0x3D #define kWindowExLf 0x3E #define kInvisTrans 0x3F #define kDeluxeTrans 0x40 #define kLightSwitch 0x41 // Switches #define kMachineSwitch 0x42 #define kThermostat 0x43 #define kPowerSwitch 0x44 #define kKnifeSwitch 0x45 #define kInvisSwitch 0x46 #define kTrigger 0x47 #define kLgTrigger 0x48 #define kSoundTrigger 0x49 #define kCeilingLight 0x51 // Lights #define kLightBulb 0x52 #define kTableLamp 0x53 #define kHipLamp 0x54 #define kDecoLamp 0x55 #define kFlourescent 0x56 #define kTrackLight 0x57 #define kInvisLight 0x58 #define kShredder 0x61 // Appliances #define kToaster 0x62 #define kMacPlus 0x63 #define kGuitar 0x64 #define kTV 0x65 #define kCoffee 0x66 #define kOutlet 0x67 #define kVCR 0x68 #define kStereo 0x69 #define kMicrowave 0x6A #define kCinderBlock 0x6B #define kFlowerBox 0x6C #define kCDs 0x6D #define kCustomPict 0x6E #define kBalloon 0x71 // Enemies #define kCopterLf 0x72 #define kCopterRt 0x73 #define kDartLf 0x74 #define kDartRt 0x75 #define kBall 0x76 #define kDrip 0x77 #define kFish 0x78 #define kCobweb 0x79 #define kOzma 0x81 // Clutter #define kMirror 0x82 #define kMousehole 0x83 #define kFireplace 0x84 #define kFlower 0x85 #define kWallWindow 0x86 #define kBear 0x87 #define kCalendar 0x88 #define kVase1 0x89 #define kVase2 0x8A #define kBulletin 0x8B #define kCloud 0x8C #define kFaucet 0x8D #define kRug 0x8E #define kChimes 0x8F #define kNumSrcRects 0x90 #define kTableThick 8 #define kShelfThick 6 #define kToggle 0 #define kForceOn 1 #define kForceOff 2 #define kOneShot 3 #define kNumTrackLights 3 #define kNumOutletPicts 4 #define kNumCandleFlames 5 #define kNumTikiFlames 5 #define kNumBBQCoals 4 #define kNumPendulums 3 #define kNumBreadPicts 6 #define kNumBalloonFrames 8 #define kNumCopterFrames 10 #define kNumDartFrames 4 #define kNumBallFrames 2 #define kNumDripFrames 6 #define kNumFishFrames 8 #define kNumFlowers 6 #define kNumMarqueePats 7 #define kObjectNameStrings 1007 #define kSwitchLinkOnly 3 #define kTriggerLinkOnly 4 #define kTransportLinkOnly 5 #define kFloorVentTop 305 #define kCeilingVentTop 8 #define kFloorBlowerTop 304 #define kCeilingBlowerTop 5 #define kSewerGrateTop 303 #define kCeilingTransTop 6 #define kFloorTransTop 302 #define kStairsTop 28 #define kCounterBottom 304 #define kDresserBottom 293 #define kCeilingLightTop 4 #define kHipLampTop 23 #define kDecoLampTop 91 #define kFlourescentTop 12 #define kTrackLightTop 5 #define kDoorInTop 0 #define kDoorInLfLeft 0 #define kDoorInRtLeft 368 #define kDoorExTop 0 #define kDoorExLfLeft 0 #define kDoorExRtLeft 496 #define kWindowInTop 64 #define kWindowInLfLeft 0 #define kWindowInRtLeft 492 #define kWindowExTop 64 #define kWindowExLfLeft 0 #define kWindowExRtLeft 496 #define kNumTiles 8 #define kTileWide 64 #define kTileHigh 322 #define kRoomWide 512 // kNumTiles * kTileWide #define kFloorSupportTall 44 #define kVertLocalOffset 322 // kTileHigh - 39 (was 283, then 295) #define kCeilingLimit 8 #define kFloorLimit 312 #define kRoofLimit 122 #define kLeftWallLimit 12 #define kNoLeftWallLimit -24 // 0 - (kGliderWide / 2) #define kRightWallLimit 500 #define kNoRightWallLimit 536 // kRoomWide + (kGliderWide / 2) #define kNoCeilingLimit -10 #define kNoFloorLimit 332 #define kScoreboardHigh 0 #define kScoreboardLow 1 #define kScoreboardTall 20 #define kHouseVersion 0x0200 #define kNewHouseVersion 0x0300 #define kBaseBackgroundID 2000 #define kFirstOutdoorBack 2009 #define kNumBackgrounds 18 #define kUserBackground 3000 #define kUserStructureRange 3300 #define kSplash8BitPICT 1000 #define kRoomIsEmpty -1 #define kObjectIsEmpty -1 #define kNoObjectSelected -1 #define kInitialGliderSelected -2 #define kLeftGliderSelected -3 #define kRightGliderSelected -4 #define kWindoidWDEF 2048 #define kWindoidGrowWDEF 2064 #define kTicksPerFrame 2 #define kStarPictID 1995 #define kNumUndergroundFloors 8 #define kRoomVisitScore 100 #define kRedClockPoints 100 #define kBlueClockPoints 300 #define kYellowClockPoints 500 #define kCuckooClockPoints 1000 #define kStarPoints 5000 #define kRedOrangeColor8 23 // actually, 18 #define kMaxNumRoomsH 128 #define kMaxNumRoomsV 64 #define kStartSparkle 4 #define kLengthOfZap 30 #define kGliderWide 48 #define kGliderHigh 20 #define kHalfGliderWide 24 #define kGliderBurningHigh 26 #define kShadowHigh 9 #define kShadowTop 306 #define kFaceRight TRUE #define kFaceLeft FALSE #define kPlayer1 TRUE #define kPlayer2 FALSE #define kNumGliderSrcRects 31 #define kNumShadowSrcRects 2 #define kFirstAboutFaceFrame 18 #define kLastAboutFaceFrame 20 #define kWasBurning 2 #define kLeftFadeOffset 7 #define kLastFadeSequence 16 #define kGliderFoil2PictID 3963 #define kGlider2PictID 3974 #define kGliderFoilPictID 3976 #define kGliderPictID 3999 #define kGliderStartsDown 32 #define kGliderNormal 0 // ¥¥ ¥¥ #define kGliderFadingIn 1 // ¥¥¥ ¥¥¥ #define kGliderFadingOut 2 // ¥¥ ¥¥ ¥¥ #define kGliderGoingUp 3 // ¥¥ ¥¥ #define kGliderComingUp 4 // ¥¥ ¥¥ #define kGliderGoingDown 5 // #define kGliderComingDown 6 // ¥¥¥¥¥¥ #define kGliderFaceLeft 7 // ¥¥ ¥¥ #define kGliderFaceRight 8 // ¥¥ ¥¥ #define kGliderBurning 9 // ¥¥ ¥¥ #define kGliderTransporting 10 // ¥¥¥¥¥¥ #define kGliderDuctingDown 11 // #define kGliderDuctingUp 12 // ¥¥¥¥¥¥¥ #define kGliderDuctingIn 13 // ¥¥ ¥¥ #define kGliderMailInLeft 14 // ¥¥ ¥¥ #define kGliderMailOutLeft 15 // ¥¥ ¥¥ #define kGliderMailInRight 16 // ¥¥¥¥¥¥¥ #define kGliderMailOutRight 17 // #define kGliderGoingFoil 18 // ¥¥¥¥¥¥¥¥ #define kGliderLosingFoil 19 // ¥¥ #define kGliderShredding 20 // ¥¥¥¥ #define kGliderInLimbo 21 // ¥¥ #define kGliderIdle 22 // ¥¥¥¥¥¥¥¥ #define kGliderTransportingIn 23 #define kPlayerIsDeadForever -69 #define kPlayerMailedOut -12 #define kPlayerDuckedOut -11 #define kPlayerTransportedOut -10 #define kPlayerEscapingDownStairs -9 #define kPlayerEscapingUpStairs -8 #define kPlayerEscapedDownStairs -7 #define kPlayerEscapedUpStairs -6 #define kPlayerEscapedDown -5 #define kPlayerEscapedUp -4 #define kPlayerEscapedLeft -3 #define kPlayerEscapedRight -2 #define kNoOneEscaped -1 #define kLinkedToOther 0 #define kLinkedToLeftMailbox 1 #define kLinkedToRightMailbox 2 #define kLinkedToCeilingDuct 3 #define kLinkedToFloorDuct 4 #define kResumeGameMode 0 #define kNewGameMode 1 #define kNormalTitleMode 0 #define kEscapedTitleMode 1 #define kSavingTitleMode 2 #define kScoreboardPictID 1997 #define kDemoLength 6702 \ No newline at end of file diff --git a/Headers/GliderProtos.h b/Headers/GliderProtos.h deleted file mode 100755 index af611a5..0000000 --- a/Headers/GliderProtos.h +++ /dev/null @@ -1 +0,0 @@ - //============================================================================ //---------------------------------------------------------------------------- // GliderProtos.h //---------------------------------------------------------------------------- //============================================================================ //-------------------------------------------------------------- Prototypes void SetUpAppleEvents (void); // --- AppleEvents.c void BringUpBanner (void); // --- Banner.c SInt16 CountStarsInHouse (void); void DisplayStarsRemaining (void); void SetCoordinateHVD (SInt16, SInt16, SInt16); // --- Coordinate.c void DeltaCoordinateD (SInt16); void UpdateCoordWindow (void); void OpenCoordWindow (void); void CloseCoordWindow (void); void ToggleCoordinateWindow (void); void NilSavedMaps (void); // --- DynamicMaps.c SInt16 BackUpToSavedMap (Rect *, SInt16, SInt16); SInt16 ReBackUpSavedMap (Rect *, SInt16, SInt16); void RestoreFromSavedMap (SInt16, SInt16, Boolean); void AddSparkle (Rect *); void AddFlyingPoint (Rect *, SInt16, SInt16, SInt16); void ReBackUpFlames (SInt16, SInt16); void AddCandleFlame (SInt16, SInt16, SInt16, SInt16); void ReBackUpTikiFlames (SInt16, SInt16); void AddTikiFlame (SInt16, SInt16, SInt16, SInt16); void ReBackUpBBQCoals (SInt16, SInt16); void AddBBQCoals (SInt16, SInt16, SInt16, SInt16); void ReBackUpPendulum (SInt16, SInt16); void AddPendulum (SInt16, SInt16, SInt16, SInt16); void ReBackUpStar (SInt16, SInt16); void AddStar (SInt16, SInt16, SInt16, SInt16); void StopPendulum (SInt16, SInt16); void StopStar (SInt16, SInt16); void AddAShreddedGlider (Rect *); void RemoveShreds (void); void ZeroFlamesAndTheLike (void); void CheckDynamicCollision (SInt16, gliderPtr, Boolean); // --- Dynamics.c Boolean DidBandHitDynamic (SInt16); void RenderToast (SInt16); void RenderBalloon (SInt16); void RenderCopter (SInt16); void RenderDart (SInt16); void RenderBall (SInt16); void RenderDrip (SInt16); void RenderFish (SInt16); void HandleSparkleObject (SInt16); void HandleToast (SInt16); void HandleMacPlus (SInt16); void HandleTV (SInt16); void HandleCoffee (SInt16); void HandleOutlet (SInt16); void HandleVCR (SInt16); void HandleStereo (SInt16); void HandleMicrowave (SInt16); void HandleBalloon (SInt16); // --- Dynamics2.c void HandleCopter (SInt16); void HandleDart (SInt16); void HandleBall (SInt16); void HandleDrip (SInt16); void HandleFish (SInt16); void HandleDynamics (void); // --- Dynamics3.c void RenderDynamics (void); void ZeroDinahs (void); SInt16 AddDynamicObject (SInt16, Rect *, objectType *, SInt16, SInt16, Boolean); void DoGameOver (void); // --- GameOver.c void FlagGameOver (void); void DoDiedGameOver (void); void HandleGrease (void); // --- Grease.c SInt16 ReBackUpGrease (SInt16, SInt16); SInt16 AddGrease (SInt16, SInt16, SInt16, SInt16, SInt16, Boolean); void SpillGrease (SInt16, SInt16); void RedrawAllGrease (void); void DoHighScores (void); // --- HighScores.c void SortHighScores (void); void ZeroHighScores (void); void ZeroAllButHighestScore (void); Boolean TestHighScore (void); Boolean WriteScoresToDisk (void); Boolean ReadScoresFromDisk (void); Boolean CreateNewHouse (void); // --- House.c Boolean InitializeEmptyHouse (void); SInt16 RealRoomNumberCount (void); SInt16 GetFirstRoomNumber (void); void WhereDoesGliderBegin (Rect *, SInt16); Boolean HouseHasOriginalPicts (void); SInt16 CountHouseLinks (void); void GenerateLinksList (void); void SortRoomsObjects (SInt16); void SortHouseObjects (void); SInt16 CountRoomsVisited (void); void GenerateRetroLinks (void); void DoGoToDialog (void); void ConvertHouseVer1To2 (void); void ShiftWholeHouse (SInt16); void DoHouseInfo (void); // --- HouseInfo.c Boolean OpenHouse (void); // --- HouseIO.c Boolean OpenSpecificHouse (FSSpec *); Boolean SaveHouseAs (void); Boolean ReadHouse (void); Boolean WriteHouse (Boolean); Boolean CloseHouse (void); void OpenHouseResFork (void); void CloseHouseResFork (void); Boolean QuerySaveChanges (void); void YellowAlert (SInt16, SInt16); Boolean KeepObjectLegal (void); // --- HouseLegal.c void CheckHouseForProblems (void); Boolean SectGlider (gliderPtr, Rect *, Boolean); // --- Interactions.c void HandleSwitches (hotPtr); void HandleInteraction (void); void FlagStillOvers (gliderPtr); void InitializeMenus (void); // --- InterfaceInit.c void GetExtraCursors (void); void VariableInit (void); void GetDemoInput (gliderPtr); // --- Input.c void GetInput (gliderPtr); SInt16 MergeFloorSuite (SInt16, SInt16); // --- Link.c void ExtractFloorSuite (SInt16, SInt16 *, SInt16 *); void UpdateLinkControl (void); void UpdateLinkWindow (void); void OpenLinkWindow (void); void CloseLinkWindow (void); void HandleLinkClick (Point); void RedrawSplashScreen (void); // --- MainWindow.c void UpdateMainWindow (void); void UpdateMenuBarWindow (void); void OpenMainWindow (void); void CloseMainWindow (void); void ZoomBetweenWindows (void); void UpdateEditWindowTitle (void); void HandleMainClick (Point, Boolean); //void WashColorIn (void); void CenterMapOnRoom (SInt16, SInt16); // --- Map.c Boolean ThisRoomVisibleOnMap (void); void FindNewActiveRoomRect (void); void FlagMapRoomsForUpdate (void); void UpdateMapWindow (void); void ResizeMapWindow (SInt16, SInt16); void OpenMapWindow (void); void CloseMapWindow (void); void ToggleMapWindow (void); void HandleMapClick (EventRecord *); void MoveRoom (Point); void DoMarquee (void); // --- Marquee.c void StartMarquee (Rect *); void StartMarqueeHandled (Rect *, SInt16, SInt16); void StopMarquee (void); void PauseMarquee (void); void ResumeMarquee (void); void DragOutMarqueeRect (Point, Rect *); void DragMarqueeRect (Point, Rect *, Boolean, Boolean); void DragMarqueeHandle (Point, SInt16 *); void DragMarqueeCorner (Point, SInt16 *, SInt16 *, Boolean); Boolean MarqueeHasHandles (SInt16 *, SInt16 *); Boolean PtInMarqueeHandle (Point); void SetMarqueeGliderRect (SInt16, SInt16); void InitMarquee (void); void UpdateClipboardMenus (void); // --- Menu.c void DoAppleMenu (SInt16); void DoGameMenu (SInt16); void DoOptionsMenu (SInt16); void DoHouseMenu (SInt16); void DoMenuChoice (long); void UpdateMenus (Boolean); void UpdateMapCheckmark (Boolean); void UpdateToolsCheckmark (Boolean); void UpdateCoordinateCheckmark (Boolean); #ifdef COMPILEDEMO void DoNotInDemo (void); #endif void OpenCloseEditWindows (void); void StartGliderFadingIn (gliderPtr); // --- Modes.c void StartGliderTransportingIn (gliderPtr); void StartGliderFadingOut (gliderPtr); void StartGliderGoingUpStairs (gliderPtr); void StartGliderGoingDownStairs (gliderPtr); void StartGliderMailingIn (gliderPtr, Rect *, hotPtr); void StartGliderMailingOut (gliderPtr); void StartGliderDuctingDown (gliderPtr, Rect *, hotPtr); void StartGliderDuctingUp (gliderPtr, Rect *, hotPtr); void StartGliderDuctingIn (gliderPtr); void StartGliderTransporting (gliderPtr, hotPtr); void FlagGliderNormal (gliderPtr); void FlagGliderShredding (gliderPtr, Rect *); void FlagGliderBurning (gliderPtr); void FlagGliderFaceLeft (gliderPtr); void FlagGliderFaceRight (gliderPtr); void FlagGliderInLimbo (gliderPtr, Boolean); void UndoGliderLimbo (gliderPtr); void ToggleGliderFacing (gliderPtr); void InsureGliderFacingRight (gliderPtr); void InsureGliderFacingLeft (gliderPtr); void ReadyGliderForTripUpStairs (gliderPtr); void ReadyGliderForTripDownStairs (gliderPtr); void StartGliderFoilGoing (gliderPtr); void StartGliderFoilLosing (gliderPtr); void TagGliderIdle (gliderPtr); OSErr StartMusic (void); // --- Music.c void StopTheMusic (void); void ToggleMusicWhilePlaying (void); void SetMusicalMode (SInt16); void InitMusic (void); void KillMusic (void); long MusicBytesNeeded (void); void TellHerNoMusic (void); Boolean AddNewObject (Point, SInt16, Boolean); // --- ObjectAdd.c SInt16 FindObjectSlotInRoom (SInt16); Boolean DoesRoomNumHaveObject (SInt16, SInt16); void ShoutNoMoreObjects (void); void DrawSimpleBlowers (SInt16, Rect *); // --- ObjectDraw.c void DrawTiki (Rect *, SInt16); void DrawInvisibleBlower (Rect *); void DrawLiftArea (Rect *); void DrawTable (Rect *, SInt16); void DrawShelf (Rect *); void DrawCabinet (Rect *); void DrawSimpleFurniture (SInt16, Rect *); void DrawCounter (Rect *); void DrawDresser (Rect *); void DrawDeckTable (Rect *, SInt16); void DrawStool (Rect *, SInt16); void DrawInvisObstacle (Rect *); void DrawInvisBounce (Rect *); void DrawRedClock (Rect *); void DrawBlueClock (Rect *); void DrawYellowClock (Rect *); void DrawCuckoo (Rect *); void DrawSimplePrizes (SInt16, Rect *); void DrawGreaseRt (Rect *, SInt16, Boolean); void DrawGreaseLf (Rect *, SInt16, Boolean); void DrawFoil (Rect *); void DrawInvisBonus (Rect *); void DrawSlider (Rect *); void DrawMailboxLeft (Rect *, SInt16); // --- ObjectDraw2.c void DrawMailboxRight (Rect *, SInt16); void DrawSimpleTransport (SInt16, Rect *); void DrawInvisTransport (Rect *); void DrawLightSwitch (Rect *, Boolean); void DrawMachineSwitch (Rect *, Boolean); void DrawThermostat (Rect *, Boolean); void DrawPowerSwitch (Rect *, Boolean); void DrawKnifeSwitch (Rect *, Boolean); void DrawInvisibleSwitch (Rect *); void DrawTrigger (Rect *); void DrawSoundTrigger (Rect *); void DrawSimpleLight (SInt16, Rect *); void DrawFlourescent (Rect *); void DrawSimpleAppliance (SInt16, Rect *); void DrawMacPlus (Rect *, Boolean, Boolean); void DrawTrackLight (Rect *); void DrawInvisLight (Rect *); void DrawTV (Rect *, Boolean, Boolean); void DrawCoffee (Rect *, Boolean, Boolean); void DrawOutlet (Rect *); void DrawVCR (Rect *, Boolean, Boolean); void DrawStereo (Rect *, Boolean, Boolean); void DrawMicrowave (Rect *, Boolean, Boolean); void DrawBalloon (Rect *); void DrawCopter (Rect *); void DrawDart (Rect *, SInt16); void DrawBall (SInt16, Rect *); void DrawFish (SInt16, Rect *); void DrawDrip (Rect *); void DrawMirror (Rect *); void DrawSimpleClutter (SInt16, Rect *); void DrawFlower (Rect *, SInt16); void DrawWallWindow (Rect *); void DrawCalendar (Rect *); void DrawBulletin (Rect *); void DrawPictObject (SInt16, Rect *); void DrawPictWithMaskObject (SInt16, Rect *); void DrawPictSansWhiteObject (SInt16, Rect *); void DrawCustPictSansWhite (SInt16, Rect *); void DrawARoomsObjects (SInt16, Boolean); // --- ObjectDrawAll.c void DoSelectionClick (Point, Boolean); // --- ObjectEdit.c void DoNewObjectClick (Point); void DeleteObject (void); void DuplicateObject (void); void MoveObject (SInt16, Boolean); void DeselectObject (void); Boolean ObjectHasHandle (SInt16 *, SInt16 *); void HandleBlowerGlider (void); void SelectNextObject (void); void SelectPrevObject (void); void GetThisRoomsObjRects (void); void DrawThisRoomsObjects (void); void HiliteAllObjects (void); void GoToObjectInRoom (SInt16, SInt16, SInt16); void GoToObjectInRoomNum (SInt16, SInt16); void DoObjectInfo (void); // --- ObjectInfo.c void GetObjectRect (objectPtr, Rect *); // --- ObjectRects.c SInt16 CreateActiveRects (SInt16); SInt16 VerticalRoomOffset (SInt16); void OffsetRectRoomRelative (Rect *, SInt16); SInt16 GetUpStairsRightEdge (void); SInt16 GetDownStairsLeftEdge (void); SInt16 GetRoomLinked (objectType *); // --- Objects.c Boolean ObjectIsLinkTransport (objectType *); Boolean ObjectIsLinkSwitch (objectType *); void ListAllLocalObjects (void); Boolean SetObjectState (SInt16, SInt16, SInt16, SInt16); Boolean GetObjectState (SInt16, SInt16); void BringSendFrontBack (Boolean); Boolean IsThisValid (SInt16, SInt16); void AddTempManholeRect (Rect *); void NewGame (SInt16); // --- Play.c void DoDemoGame (void); void HideGlider (gliderPtr); void StrikeChime (void); void RestoreEntireGameScreen (void); void HandleGlider (gliderPtr); // --- Player.c void FinishGliderUpStairs (gliderPtr); void FinishGliderDownStairs (gliderPtr); void FinishGliderDuctingIn (gliderPtr); void DeckGliderInFoil (gliderPtr); void RemoveFoilFromGlider (gliderPtr); void OffsetGlider (gliderPtr, SInt16); void OffAMortal (gliderPtr); void AddRectToWorkRects (Rect *); // --- Render.c void AddRectToBackRects (Rect *); void AddRectToWorkRectsWhole (Rect *); void RenderGlider (gliderPtr, Boolean); void CopyRectsQD (void); void DirectWork2Main8 (Rect *); void DirectBack2Work8 (Rect *); void DirectGeneric2Work8 (long, long, Rect *, Rect *); void DirectWork2Main4 (Rect *); void DirectBack2Work4 (Rect *); void DirectGeneric2Work4 (long, long, Rect *, Rect *); void CopyRectsAssm (void); void DirectFillBack8 (Rect *, Byte); void DirectFillWork8 (Rect *, Byte); void DirectFillBack4 (Rect *, Byte); void DirectFillWork4 (Rect *, Byte); void RenderFrame (void); void InitGarbageRects (void); void CopyRectBackToWork (Rect *); void CopyRectWorkToBack (Rect *); void CopyRectWorkToMain (Rect *); void CopyRectMainToWork (Rect *); void CopyRectMainToBack (Rect *); void AddToMirrorRegion (Rect *); void ZeroMirrorRegion (void); void SetInitialTiles (SInt16, Boolean); // --- Room.c Boolean CreateNewRoom (SInt16, SInt16); void DoRoomInfo (void); void ReadyBackground (SInt16, SInt16 *); void ReflectCurrentRoom (Boolean); void CopyRoomToThisRoom (SInt16); void CopyThisRoomToRoom (void); void ForceThisRoom (SInt16); Boolean RoomExists (SInt16, SInt16, SInt16 *); Boolean RoomNumExists (SInt16); void DeleteRoom (Boolean); SInt16 DoesNeighborRoomExist (SInt16); void SelectNeighborRoom (SInt16); SInt16 GetNeighborRoomNumber (SInt16); Boolean GetRoomFloorSuite (SInt16, SInt16 *, SInt16 *); SInt16 GetRoomNumber (SInt16, SInt16); Boolean IsRoomAStructure (SInt16); void DetermineRoomOpenings (void); SInt16 GetOriginalBounding (SInt16); SInt16 GetNumberOfLights (SInt16); Boolean IsShadowVisible (void); Boolean DoesRoomHaveFloor (void); Boolean DoesRoomHaveCeiling (void); void ReadyLevel (void); // --- RoomGraphics.c void DrawLocale (void); void RedrawRoomLighting (void); Boolean PictIDExists (SInt16); // --- RoomInfo.c void HandleBands (void); // --- RubberBands.c Boolean AddBand (gliderPtr, SInt16, SInt16, Boolean); void KillAllBands (void); void SaveGame2 (void); // --- SavedGames.c Boolean OpenSavedGame (void); void SaveGame (Boolean); void RefreshScoreboard (SInt16); // --- Scoreboard.c void HandleDynamicScoreboard (void); void QuickGlidersRefresh (void); void QuickScoreRefresh (void); void QuickBatteryRefresh (Boolean); void QuickBandsRefresh (Boolean); void QuickFoilRefresh (Boolean); void HandleScore (void); void AdjustScoreboardHeight (void); void BlackenScoreboard (void); //void PutRoomScrap (void); // --- Scrap.c //void PutObjectScrap (void); void GetRoomScrap (void); void GetObjectScrap (void); //void SeeIfValidScrapAvailable (Boolean); Boolean HasDragManager (void); //Boolean DragRoom (EventRecord *, Rect *, SInt16); void DoLoadHouse (void); // --- SelectHouse.c void BuildHouseList (void); void AddExtraHouse (FSSpec *); void DoSettingsMain (void); // --- Settings.c void PlayPrioritySound (SInt16, SInt16); // --- Sound.c void FlushAnyTriggerPlaying (void); void PlaySound0 (SInt16, SInt16); void PlaySound1 (SInt16, SInt16); void PlaySound2 (SInt16, SInt16); OSErr LoadTriggerSound (SInt16); void DumpTriggerSound (void); void InitSound (void); void KillSound (void); long SoundBytesNeeded (void); void TellHerNoSounds (void); void BitchAboutSM3 (void); void InitScoreboardMap (void); // --- StructuresInit.c void InitGliderMap (void); void InitBlowers (void); void InitFurniture (void); void InitPrizes (void); void InitTransports (void); void InitSwitches (void); void InitLights (void); void InitAppliances (void); void InitEnemies (void); void CreateOffscreens (void); // --- StructuresInit2.c void CreatePointers (void); void InitSrcRects (void); void UpdateToolsWindow (void); // --- Tools.c void EraseSelectedTool (void); void SelectTool (SInt16); void OpenToolsWindow (void); void CloseToolsWindow (void); void ToggleToolsWindow (void); void HandleToolsClick (Point); void NextToolMode (void); void PrevToolMode (void); void SetSpecificToolMode (SInt16); SInt16 WhatAreWeLinkedTo (SInt16, Byte); // --- Transit.c void ReadyGliderFromTransit (gliderPtr, SInt16); void MoveRoomToRoom (gliderPtr, SInt16); void TransportRoomToRoom (gliderPtr); void MoveDuctToDuct (gliderPtr); void MoveMailToMail (gliderPtr); void ForceKillGlider (void); void FollowTheLeader (void); void PourScreenOn (Rect *); // --- Transitions.c void WipeScreenOn (SInt16, Rect *); void DumpScreenOn (Rect *); //void DissBits (Rect *); //void DissBitsChunky (Rect *); //void FillColorNoise (Rect *); //void FillSnow (Rect *); void ToggleToaster (SInt16); // --- Trip.c void ToggleMacPlus (SInt16); void ToggleTV (SInt16); void ToggleCoffee (SInt16); void ToggleOutlet (SInt16); void ToggleVCR (SInt16); void ToggleStereos (SInt16); void ToggleMicrowave (SInt16); void ToggleBalloon (SInt16); void ToggleCopter (SInt16); void ToggleDart (SInt16); void ToggleBall (SInt16); void ToggleDrip (SInt16); void ToggleFish (SInt16); void TriggerSwitch (SInt16); void TriggerToast (SInt16); void TriggerOutlet (SInt16); void TriggerDrip (SInt16); void TriggerFish (SInt16); void TriggerBalloon (SInt16); void TriggerCopter (SInt16); void TriggerDart (SInt16); void UpdateOutletsLighting (SInt16, SInt16); void ArmTrigger (hotPtr); // --- Triggers.c void HandleTriggers (void); void ZeroTriggers (void); \ No newline at end of file diff --git a/Headers/GliderStructs.h b/Headers/GliderStructs.h deleted file mode 100755 index 1744a30..0000000 --- a/Headers/GliderStructs.h +++ /dev/null @@ -1 +0,0 @@ -//============================================================================ //---------------------------------------------------------------------------- // GliderStructs.h //---------------------------------------------------------------------------- //============================================================================ #include typedef struct { Point topLeft; // 4 short distance; // 2 Boolean initial; // 1 Boolean state; // 1 F. lf. dn. rt. up Byte vector; // 1 | x | x | x | x | 8 | 4 | 2 | 1 | Byte tall; // 1 } blowerType; // total = 10 typedef struct { Rect bounds; // 8 short pict; // 2 } furnitureType; // total = 10 typedef struct { Point topLeft; // 4 short length; // 2 grease spill short points; // 2 invis bonus Boolean state; // 1 Boolean initial; // 1 } bonusType; // total = 10 typedef struct { Point topLeft; // 4 short tall; // 2 invis transport short where; // 2 Byte who; // 1 Byte wide; // 1 } transportType; // total = 10 typedef struct { Point topLeft; // 4 short delay; // 2 short where; // 2 Byte who; // 1 Byte type; // 1 } switchType; // total = 10 typedef struct { Point topLeft; // 4 short length; // 2 Byte byte0; // 1 Byte byte1; // 1 Boolean initial; // 1 Boolean state; // 1 } lightType; // total = 10 typedef struct { Point topLeft; // 4 short height; // 2 toaster, pict ID Byte byte0; // 1 Byte delay; // 1 Boolean initial; // 1 Boolean state; // 1 } applianceType; // total = 10 typedef struct { Point topLeft; // 4 short length; // 2 Byte delay; // 1 Byte byte0; // 1 Boolean initial; // 1 Boolean state; // 1 } enemyType; // total = 10 typedef struct { Rect bounds; // 8 short pict; // 2 } clutterType; // total = 10 typedef struct { short what; // 2 union { blowerType a; furnitureType b; bonusType c; transportType d; switchType e; lightType f; applianceType g; enemyType h; clutterType i; } data; // 10 } objectType, *objectPtr; // total = 12 typedef struct { Str31 banner; // 32 = 32 Str15 names[kMaxScores]; // 16 * 10 = 160 long scores[kMaxScores]; // 4 * 10 = 40 unsigned long timeStamps[kMaxScores]; // 4 * 10 = 40 short levels[kMaxScores]; // 2 * 10 = 20 } scoresType; // total = 292 typedef struct { short version; // 2 short wasStarsLeft; // 2 long timeStamp; // 4 Point where; // 4 long score; // 4 long unusedLong; // 4 long unusedLong2; // 4 short energy; // 2 short bands; // 2 short roomNumber; // 2 short gliderState; // 2 short numGliders; // 2 short foil; // 2 short unusedShort; // 2 Boolean facing; // 1 Boolean showFoil; // 1 } gameType; // total = 40 typedef struct { short unusedShort; // 2 Byte unusedByte; // 1 Boolean visited; // 1 objectType objects[kMaxRoomObs]; // 24 * 12 } savedRoom, *saveRoomPtr; // total = 292 typedef struct { FSSpec house; // 70 short version; // 2 short wasStarsLeft; // 2 long timeStamp; // 4 Point where; // 4 long score; // 4 long unusedLong; // 4 long unusedLong2; // 4 short energy; // 2 short bands; // 2 short roomNumber; // 2 short gliderState; // 2 short numGliders; // 2 short foil; // 2 short nRooms; // 2 Boolean facing; // 1 Boolean showFoil; // 1 savedRoom savedData[]; // 4 } game2Type, *gamePtr; // total = 114 typedef struct { Str27 name; // 28 short bounds; // 2 Byte leftStart; // 1 Byte rightStart; // 1 Byte unusedByte; // 1 Boolean visited; // 1 short background; // 2 short tiles[kNumTiles]; // 2 * 8 short floor, suite; // 2 + 2 short openings; // 2 short numObjects; // 2 objectType objects[kMaxRoomObs]; // 24 * 12 } roomType, *roomPtr; // total = 348 typedef struct { short version; // 2 short unusedShort; // 2 long timeStamp; // 4 long flags; // 4 (bit 0 = wardBit) Point initial; // 4 Str255 banner; // 256 Str255 trailer; // 256 scoresType highScores; // 292 gameType savedGame; // 40 Boolean hasGame; // 1 Boolean unusedBoolean; // 1 short firstRoom; // 2 short nRooms; // 2 roomType rooms[]; // 348 * nRooms } houseType, *housePtr, **houseHand; // total = 866 + typedef struct { Rect src, mask, dest, whole; Rect destShadow, wholeShadow; Rect clip, enteredRect; long leftKey, rightKey; long battKey, bandKey; short hVel, vVel; short wasHVel, wasVVel; short vDesiredVel, hDesiredVel; short mode, frame, wasMode; Boolean facing, tipped; Boolean sliding, ignoreLeft, ignoreRight; Boolean fireHeld, which; Boolean heldLeft, heldRight; Boolean dontDraw, ignoreGround; } gliderType, *gliderPtr; typedef struct { Rect bounds; short action; short who; Boolean isOn, stillOver; Boolean doScrutinize; } hotObject, *hotPtr; typedef struct { Rect dest; GWorldPtr map; short where; short who; } savedType, *savedPtr; typedef struct { Rect bounds; short mode; } sparkleType, *sparklePtr; typedef struct { Rect dest, whole; short start; short stop; short mode; short loops; short hVel, vVel; } flyingPtType, *flyingPtPtr; typedef struct { Rect dest, src; short mode; short who; } flameType, *flamePtr; typedef struct { Rect dest, src; short mode, where; short who, link; Boolean toOrFro, active; } pendulumType, *pendulumPtr; typedef struct { Boolean left; Boolean top; Boolean right; Boolean bottom; } boundsType, *boundsPtr, **boundsHand; typedef struct { Rect dest; short mode, count; short hVel, vVel; } bandType, *bandPtr; typedef struct { short srcRoom, srcObj; short destRoom, destObj; } linksType, *linksPtr; typedef struct { Rect dest; short mapNum, mode; short who, where; short start, stop; short frame, hotNum; Boolean isRight; } greaseType, *greasePtr; typedef struct { Rect dest, src; short mode, who; short link, where; } starType, *starPtr; typedef struct { Rect bounds; short frame; } shredType, *shredPtr; typedef struct { Rect dest; Rect whole; short hVel, vVel; short type, count; short frame, timer; short position, room; Byte byte0, byte1; Boolean moving, active; } dynaType, *dynaPtr; typedef struct { short roomNum; // room # object in (real number) short objectNum; // obj. # in house (real number) short roomLink; // room # object linked to (if any) short objectLink; // obj. # object linked to (if any) short localLink; // index in master list if exists short hotNum; // index into active rects (if any) short dynaNum; // index into dinahs (if any) objectType theObject; // actual object data } objDataType, *objDataPtr; typedef struct { long frame; char key; char padding; } demoType, *demoPtr; typedef struct { short room; short object; } retroLink, *retroLinkPtr; \ No newline at end of file diff --git a/Headers/GliderVars.h b/Headers/GliderVars.h deleted file mode 100755 index 4d4e19a..0000000 --- a/Headers/GliderVars.h +++ /dev/null @@ -1 +0,0 @@ -//============================================================================ //---------------------------------------------------------------------------- // GliderVars.h //---------------------------------------------------------------------------- //============================================================================ #include extern Rect blowerSrcRect; extern Rect flame[], tikiFlame[]; extern Rect coals[]; extern Rect furnitureSrcRect; extern Rect tableSrc, shelfSrc, hingeSrc, handleSrc, knobSrc; extern Rect leftFootSrc, rightFootSrc, deckSrc; extern Rect bonusSrcRect; extern Rect pointsSrcRect; extern Rect starSrc[], sparkleSrc[]; extern Rect digits[], pendulumSrc[], greaseSrcRt[], greaseSrcLf[]; extern Rect transSrcRect; extern Rect switchSrcRect; extern Rect lightSwitchSrc[], machineSwitchSrc[], thermostatSrc[]; extern Rect powerSrc[], knifeSwitchSrc[]; extern Rect lightSrcRect; extern Rect flourescentSrc1, flourescentSrc2; extern Rect trackLightSrc[]; extern Rect applianceSrcRect, toastSrcRect, shredSrcRect; // Appliances extern Rect plusScreen1, plusScreen2, tvScreen1, tvScreen2; extern Rect coffeeLight1, coffeeLight2, vcrTime1, vcrTime2; extern Rect stereoLight1, stereoLight2, microOn, microOff; extern Rect outletSrc[]; extern Rect balloonSrcRect, copterSrcRect, dartSrcRect; // Enemies extern Rect ballSrcRect, dripSrcRect, enemySrcRect; extern Rect fishSrcRect; extern Rect balloonSrc[], copterSrc[], dartSrc[]; extern Rect ballSrc[], dripSrc[], fishSrc[]; extern Rect clutterSrcRect; extern Rect flowerSrc[]; extern Rect *srcRects; extern Movie theMovie; extern Rect movieRect; extern Boolean hasMovie, tvInRoom; extern gliderType theGlider, theGlider2; extern objDataPtr masterObjects; extern Rect workSrcRect; extern Rect backSrcRect; extern Rect mainWindowRect, houseRect; extern houseHand thisHouse; extern roomPtr thisRoom; extern WindowPtr mainWindow, coordWindow; extern long theScore; extern short playOriginH, playOriginV; extern short thisRoomNumber, theMode, batteryTotal, bandsTotal; extern short foilTotal, mortals, numMasterObjects, previousRoom; extern Boolean fileDirty, gameDirty, showFoil, doZooms, isPlayMusicGame; \ No newline at end of file diff --git a/Headers/House.h b/Headers/House.h deleted file mode 100755 index fd64fed..0000000 --- a/Headers/House.h +++ /dev/null @@ -1 +0,0 @@ -//============================================================================ //---------------------------------------------------------------------------- // House.h //---------------------------------------------------------------------------- //============================================================================ #include extern Str32 thisHouseName; extern Boolean houseUnlocked; \ No newline at end of file diff --git a/Headers/MainWindow.h b/Headers/MainWindow.h deleted file mode 100755 index f932866..0000000 --- a/Headers/MainWindow.h +++ /dev/null @@ -1 +0,0 @@ -//============================================================================ //---------------------------------------------------------------------------- // MainWindow.h //---------------------------------------------------------------------------- //============================================================================ #include extern GWorldPtr workSrcMap; \ No newline at end of file diff --git a/Headers/Map.h b/Headers/Map.h deleted file mode 100755 index 8e4e8bd..0000000 --- a/Headers/Map.h +++ /dev/null @@ -1 +0,0 @@ -//============================================================================ //---------------------------------------------------------------------------- // Map.h //---------------------------------------------------------------------------- //============================================================================ #include extern GWorldPtr nailSrcMap; extern WindowPtr mapWindow; \ No newline at end of file diff --git a/Headers/Marquee.h b/Headers/Marquee.h deleted file mode 100755 index fb21eb2..0000000 --- a/Headers/Marquee.h +++ /dev/null @@ -1 +0,0 @@ -//============================================================================ //---------------------------------------------------------------------------- // Marquee.h //---------------------------------------------------------------------------- //============================================================================ #pragma once #include typedef struct { Pattern pats[kNumMarqueePats]; Rect bounds, handle; short index, direction, dist; Boolean active, paused, handled; } marquee; extern marquee theMarquee; \ No newline at end of file diff --git a/Headers/ObjectEdit.h b/Headers/ObjectEdit.h deleted file mode 100755 index dfebe55..0000000 --- a/Headers/ObjectEdit.h +++ /dev/null @@ -1 +0,0 @@ -//============================================================================ //---------------------------------------------------------------------------- // ObjectEdit.h //---------------------------------------------------------------------------- //============================================================================ #pragma once #include extern Rect roomObjectRects[]; extern short objActive; \ No newline at end of file diff --git a/Headers/Objects.h b/Headers/Objects.h deleted file mode 100755 index 083b420..0000000 --- a/Headers/Objects.h +++ /dev/null @@ -1 +0,0 @@ -//============================================================================ //---------------------------------------------------------------------------- // Objects.h //---------------------------------------------------------------------------- //============================================================================ extern GWorldPtr blowerSrcMap; extern GWorldPtr blowerMaskMap; extern GWorldPtr furnitureSrcMap; extern GWorldPtr furnitureMaskMap; extern GWorldPtr bonusSrcMap; extern GWorldPtr bonusMaskMap; extern GWorldPtr pointsSrcMap; extern GWorldPtr pointsMaskMap; extern GWorldPtr transSrcMap; extern GWorldPtr transMaskMap; extern GWorldPtr switchSrcMap; extern GWorldPtr lightSrcMap; extern GWorldPtr lightMaskMap; extern GWorldPtr applianceSrcMap; extern GWorldPtr applianceMaskMap; extern GWorldPtr toastSrcMap; extern GWorldPtr toastMaskMap; extern GWorldPtr shredSrcMap; extern GWorldPtr shredMaskMap; extern GWorldPtr balloonSrcMap; extern GWorldPtr balloonMaskMap; extern GWorldPtr copterSrcMap; extern GWorldPtr copterMaskMap; extern GWorldPtr dartSrcMap; extern GWorldPtr dartMaskMap; extern GWorldPtr ballSrcMap; extern GWorldPtr ballMaskMap; extern GWorldPtr dripSrcMap; extern GWorldPtr dripMaskMap; extern GWorldPtr enemySrcMap; extern GWorldPtr enemyMaskMap; extern GWorldPtr fishSrcMap; extern GWorldPtr fishMaskMap; extern GWorldPtr clutterSrcMap; extern GWorldPtr clutterMaskMap; \ No newline at end of file diff --git a/Headers/Play.h b/Headers/Play.h deleted file mode 100755 index b863d2f..0000000 --- a/Headers/Play.h +++ /dev/null @@ -1 +0,0 @@ -//============================================================================ //---------------------------------------------------------------------------- // Play.h //---------------------------------------------------------------------------- //============================================================================ #include extern GWorldPtr glidSrcMap; extern GWorldPtr glid2SrcMap; extern GWorldPtr glidMaskMap; \ No newline at end of file diff --git a/Headers/Player.h b/Headers/Player.h deleted file mode 100755 index a78a38e..0000000 --- a/Headers/Player.h +++ /dev/null @@ -1 +0,0 @@ -//============================================================================ //---------------------------------------------------------------------------- // Player.h //---------------------------------------------------------------------------- //============================================================================ #include extern GWorldPtr shadowSrcMap; extern GWorldPtr shadowMaskMap; \ No newline at end of file diff --git a/Headers/RectUtils.h b/Headers/RectUtils.h deleted file mode 100755 index 7ff4de5..0000000 --- a/Headers/RectUtils.h +++ /dev/null @@ -1 +0,0 @@ -//============================================================================ //---------------------------------------------------------------------------- // RectUtils.h //---------------------------------------------------------------------------- //============================================================================ #pragma once #include void FrameWHRect (short, short, short, short); void NormalizeRect (Rect *); void ZeroRectCorner (Rect *); void CenterRectOnPoint (Rect *, Point); short HalfRectWide (Rect *); short HalfRectTall (Rect *); short RectWide (Rect *); short RectTall (Rect *); void GlobalToLocalRect (Rect *); void LocalToGlobalRect (Rect *); void CenterRectInRect (Rect *, Rect *); void HOffsetRect (Rect *, short); void VOffsetRect (Rect *, short); Boolean IsRectLeftOfRect (Rect *, Rect *); void QOffsetRect (Rect *, short, short); void QSetRect (Rect *, short, short, short, short); Boolean ForceRectInRect (Rect *, Rect *); void QUnionSimilarRect (Rect *, Rect *, Rect *); void FrameRectSansCorners (Rect *); void SetEraseRect (short, short, short, short); \ No newline at end of file diff --git a/Headers/Room.h b/Headers/Room.h deleted file mode 100755 index 434913e..0000000 --- a/Headers/Room.h +++ /dev/null @@ -1 +0,0 @@ -//============================================================================ //---------------------------------------------------------------------------- // Room.h //---------------------------------------------------------------------------- //============================================================================ #include extern GWorldPtr backSrcMap; \ No newline at end of file diff --git a/Headers/RoomGraphics.h b/Headers/RoomGraphics.h deleted file mode 100755 index 5538be1..0000000 --- a/Headers/RoomGraphics.h +++ /dev/null @@ -1 +0,0 @@ -//============================================================================ //---------------------------------------------------------------------------- // RoomGraphics.h //---------------------------------------------------------------------------- //============================================================================ #include extern GWorldPtr suppSrcMap; \ No newline at end of file diff --git a/Headers/RubberBands.h b/Headers/RubberBands.h deleted file mode 100755 index 566ab20..0000000 --- a/Headers/RubberBands.h +++ /dev/null @@ -1 +0,0 @@ -//============================================================================ //---------------------------------------------------------------------------- // RubberBands.h //---------------------------------------------------------------------------- //============================================================================ #include extern GWorldPtr bandsSrcMap; extern GWorldPtr bandsMaskMap; \ No newline at end of file diff --git a/Headers/Scoreboard.h b/Headers/Scoreboard.h deleted file mode 100755 index 9d989ea..0000000 --- a/Headers/Scoreboard.h +++ /dev/null @@ -1 +0,0 @@ -//============================================================================ //---------------------------------------------------------------------------- // Scoreboard.h //---------------------------------------------------------------------------- //============================================================================ #include extern GWorldPtr boardSrcMap; extern GWorldPtr badgeSrcMap; extern GWorldPtr boardTSrcMap; extern GWorldPtr boardGSrcMap; extern GWorldPtr boardPSrcMap; \ No newline at end of file diff --git a/Headers/Tools.h b/Headers/Tools.h deleted file mode 100755 index ff80070..0000000 --- a/Headers/Tools.h +++ /dev/null @@ -1 +0,0 @@ -//============================================================================ //---------------------------------------------------------------------------- // Tools.h //---------------------------------------------------------------------------- //============================================================================ #include extern GWorldPtr toolSrcMap; extern WindowPtr toolsWindow; \ No newline at end of file diff --git a/Headers/Utilities.h b/Headers/Utilities.h deleted file mode 100755 index 3f57af2..0000000 --- a/Headers/Utilities.h +++ /dev/null @@ -1 +0,0 @@ -//============================================================================ //---------------------------------------------------------------------------- // Utilities.c //---------------------------------------------------------------------------- //============================================================================ #include OSErr CreateOffScreenGWorld (GWorldPtr *theGWorld, Rect *bounds, short depth); \ No newline at end of file diff --git a/MiniRez/MiniRez.cpp b/MiniRez/MiniRez.cpp new file mode 100644 index 0000000..2e4cb85 --- /dev/null +++ b/MiniRez/MiniRez.cpp @@ -0,0 +1,528 @@ +#include +#include +#include +#include + +#include "BytePack.h" +#include "CFileStream.h" +#include "IOStream.h" + +#include "MacBinary2.h" +#include "MacFileMem.h" + +// Very simplified resource compiler + +using namespace PortabilityLayer; + +struct SimpleResource +{ + char m_type[4]; + int m_resourceID; + std::string m_name; + std::vector m_resourceData; + size_t m_offsetInResData; + uint8_t m_attributes; +}; + +struct ResCatalogData +{ +}; + +bool IsWhitespace(char c) +{ + return c <= ' '; +} + +void AppendUInt16(std::vector &vec, uint16_t value) +{ + uint8_t encoded[2]; + BytePack::BigUInt16(encoded, value); + vec.push_back(encoded[0]); + vec.push_back(encoded[1]); +} + +void AppendInt16(std::vector &vec, int16_t value) +{ + AppendUInt16(vec, static_cast(value)); +} + +void AppendUInt32(std::vector &vec, uint32_t value) +{ + uint8_t encoded[4]; + BytePack::BigUInt32(encoded, value); + vec.push_back(encoded[0]); + vec.push_back(encoded[1]); + vec.push_back(encoded[2]); + vec.push_back(encoded[3]); +} + +uint32_t TypeToU32(const char *resType) +{ + uint32_t v = 0; + for (int i = 0; i < 4; i++) + v |= static_cast(resType[i]) << (24 - i * 8); + + return v; +} + +bool FindNextNonWhitespace(CFileStream &fs, char &nextChar) +{ + for (;;) + { + char c; + if (!fs.Read(&c, 1)) + return false; + + if (!IsWhitespace(c)) + { + nextChar = c; + return true; + } + } +} + +std::string HandleEscapes(const std::string &str) +{ + const size_t len = str.size(); + + std::string processed; + + for (size_t i = 0; i < len; i++) + { + const char c = str[i]; + + if (c == '\\' && len - i >= 5 && str[i + 1] == '0' && str[i + 2] == 'x') + { + const char highNibbleChar = str[i + 3]; + const char lowNibbleChar = str[i + 4]; + + int highNibble = highNibbleChar - '0'; + int lowNibble = lowNibbleChar - '0'; + + const char reconstructed = (highNibble << 4) | lowNibble; + processed.append(&reconstructed, 1); + + i += 4; + } + else + processed.append(&c, 1); + } + + return processed; +} + +void DefError() +{ + fprintf(stderr, "Malformed def"); + exit(-1); +} + +int main(int argc, const char **argv) +{ + if (argc != 3) + { + fprintf(stderr, "Usage: MiniRez "); + return -1; + } + + FILE *f = nullptr; + if (fopen_s(&f, argv[1], "rb")) + { + fprintf(stderr, "Failed to open input file"); + return -1; + } + + CFileStream fs(f, true, false, true); + + int defsParsed = 0; + + std::vector resources; + + for (;;) + { + printf("%i defs parsed...\n", defsParsed); + defsParsed++; + UFilePos_t defStartOffset = fs.Tell(); + + char nextChar = 0; + if (!FindNextNonWhitespace(fs, nextChar)) + break; + + if (IsWhitespace(nextChar)) + continue; + + if (nextChar == 'd') + { + char nextChars[3]; + if (fs.Read(nextChars, 3) != 3 || nextChars[0] != 'a' || nextChars[1] != 't' || nextChars[2] != 'a') + { + fprintf(stderr, "Unknown token"); + return -1; + } + + if (!FindNextNonWhitespace(fs, nextChar) || nextChar != '\'') + DefError(); + + char resType[5]; + if (!fs.Read(resType, 5) || resType[4] != '\'') + DefError(); + + if (!FindNextNonWhitespace(fs, nextChar) || nextChar != '(') + DefError(); + + int resID = 0; + bool hasProperty = false; + bool isNegative = false; + for (;;) + { + if (!fs.Read(&nextChar, 1)) + DefError(); + + if (nextChar == ')') + break; + else if (nextChar == ',') + { + hasProperty = true; + break; + } + else if (nextChar == '-') + isNegative = true; + else if (nextChar >= '0' && nextChar <= '9') + resID = resID * 10 + (nextChar - '0'); + else + DefError(); + } + + std::string resName; + std::string propName; + std::vector resData; + + if (hasProperty) + { + char singleCharStr[2]; + singleCharStr[1] = '\0'; + + if (!FindNextNonWhitespace(fs, singleCharStr[0])) + DefError(); + + + if (singleCharStr[0] == '\"') + { + hasProperty = false; + + for (;;) + { + if (!fs.Read(singleCharStr, 1)) + DefError(); + + if (singleCharStr[0] == '"') + break; + + resName += singleCharStr; + } + + if (!FindNextNonWhitespace(fs, nextChar)) + DefError(); + + if (nextChar == ')') + { + } + else if (nextChar == ',') + { + hasProperty = true; + if (!FindNextNonWhitespace(fs, singleCharStr[0])) + DefError(); + } + else + DefError(); + } + + if (hasProperty) + { + propName = singleCharStr; + + for (;;) + { + if (!fs.Read(singleCharStr, 1)) + DefError(); + + if (singleCharStr[0] == ')') + break; + + propName += singleCharStr; + } + } + } + + if (!FindNextNonWhitespace(fs, nextChar) || nextChar != '{') + DefError(); + + // Data item parse loop + for (;;) + { + if (!FindNextNonWhitespace(fs, nextChar)) + DefError(); + + if (nextChar == '$') + { + // Res data bytes + uint8_t b = 0; + bool highNibble = true; + + if (!fs.Read(&nextChar, 1) || nextChar != '\"') + DefError(); + + for (;;) + { + if (!fs.Read(&nextChar, 1)) + DefError(); + + uint8_t fragment = 0; + + if (nextChar == '\"') + break; + else if (nextChar >= '0' && nextChar <= '9') + fragment = nextChar - '0'; + else if (nextChar >= 'a' && nextChar <= 'f') + fragment = nextChar - 'a' + 0xa; + else if (nextChar >= 'A' && nextChar <= 'F') + fragment = nextChar - 'A' + 0xa; + else if (nextChar == ' ') + { + continue; + } + else + DefError(); + + if (highNibble) + { + b = fragment << 4; + highNibble = false; + } + else + { + resData.push_back(b | fragment); + highNibble = true; + } + } + + continue; + } + else if (nextChar == '}') + break; + else if (nextChar == '/') + { + if (!fs.Read(&nextChar, 1)) + DefError(); + + if (nextChar == '/') + { + for (;;) + { + if (!fs.Read(&nextChar, 1)) + DefError(); + + if (nextChar == '\r' || nextChar == '\n') + break; + } + } + else if (nextChar == '*') + { + char prevChar = nextChar; + + for (;;) + { + if (!fs.Read(&nextChar, 1)) + DefError(); + + if (nextChar == '/' && prevChar == '*') + break; + + prevChar = nextChar; + } + } + else + DefError(); + } + else + DefError(); + } + + if (!FindNextNonWhitespace(fs, nextChar) || nextChar != ';') + DefError(); + + SimpleResource *res = new SimpleResource(); + res->m_name = HandleEscapes(resName); + res->m_resourceID = resID; + memcpy(res->m_type, resType, 4); + res->m_resourceData.swap(resData); + res->m_attributes = 0; + + if (propName == "purgeable") + res->m_attributes |= (1 << 5); + + + resources.push_back(res); + } + else + { + fprintf(stderr, "Unknown token"); + return -1; + } + } + + std::vector resourceForkData; + + for (size_t i = 0; i < 16; i++) + resourceForkData.push_back(0); + + size_t resForkDataStart = resourceForkData.size(); + + std::vector uniqueResTypes; + std::vector resTypeCounts; + std::vector uniqueResNames; + + printf("Re-emitting defs...\n"); + for (size_t i = 0; i < resources.size(); i++) + { + SimpleResource *res = resources[i]; + + res->m_offsetInResData = resourceForkData.size() - resForkDataStart; + + uint8_t packedLen[4]; + BytePack::BigUInt32(packedLen, static_cast(res->m_resourceData.size())); + + for (int j = 0; j < 4; j++) + resourceForkData.push_back(packedLen[j]); + + for (size_t j = 0; j < res->m_resourceData.size(); j++) + resourceForkData.push_back(res->m_resourceData[j]); + + uint32_t resTypeCode = TypeToU32(res->m_type); + std::vector::iterator uniqueResTypeIndex = std::find(uniqueResTypes.begin(), uniqueResTypes.end(), resTypeCode); + + if (uniqueResTypeIndex == uniqueResTypes.end()) + { + uniqueResTypes.push_back(resTypeCode); + resTypeCounts.push_back(1); + } + else + resTypeCounts[uniqueResTypeIndex - uniqueResTypes.begin()]++; + + if (!res->m_name.empty()) + { + if (std::find(uniqueResNames.begin(), uniqueResNames.end(), res->m_name) == uniqueResNames.end()) + uniqueResNames.push_back(res->m_name); + } + } + + const size_t resDataSize = resourceForkData.size() - resForkDataStart; + const size_t resMapPos = resourceForkData.size(); + + // Reserved space for resource header copy (16), handle to next res map (4), file ref number (2) + for (size_t j = 0; j < 22; j++) + resourceForkData.push_back(0); + + uint16_t resForkAttributes = 0; // We don't use any of these + + const size_t typeListEntrySize = 8; + const size_t refListEntrySize = 12; + + const size_t resourceTypeListStartLoc = 28; + const size_t resourceTypeListSize = 2 + uniqueResTypes.size() * typeListEntrySize; + const size_t resourceRefListStartLoc = resourceTypeListStartLoc + resourceTypeListSize; + const size_t resourceNameListStartLoc = resourceRefListStartLoc + resources.size() * refListEntrySize; + + AppendUInt16(resourceForkData, resForkAttributes); + AppendUInt16(resourceForkData, static_cast(resourceTypeListStartLoc)); + AppendUInt16(resourceForkData, static_cast(resourceNameListStartLoc)); + AppendUInt16(resourceForkData, static_cast(uniqueResTypes.size() - 1)); + + std::vector refListStartForType; + refListStartForType.resize(resTypeCounts.size()); + + refListStartForType[0] = 0; + for (size_t i = 1; i < refListStartForType.size(); i++) + refListStartForType[i] = refListStartForType[i - 1] + resTypeCounts[i - 1]; + + std::vector nameListStarts; + nameListStarts.resize(uniqueResNames.size()); + + nameListStarts[0] = 0; + for (size_t i = 1; i < nameListStarts.size(); i++) + nameListStarts[i] = nameListStarts[i - 1] + uniqueResNames[i - 1].size() + 1; + + // Write resource type list + for (size_t i = 0; i < uniqueResTypes.size(); i++) + { + AppendUInt32(resourceForkData, uniqueResTypes[i]); + AppendUInt16(resourceForkData, resTypeCounts[i] - 1); + AppendUInt16(resourceForkData, static_cast(refListStartForType[i] * refListEntrySize + resourceTypeListSize)); + } + + // Write reference lists + for (size_t ti = 0; ti < uniqueResTypes.size(); ti++) + { + uint32_t resType = uniqueResTypes[ti]; + + for (size_t i = 0; i < resources.size(); i++) + { + const SimpleResource *res = resources[i]; + if (TypeToU32(res->m_type) != resType) + continue; + + AppendInt16(resourceForkData, res->m_resourceID); + if (res->m_name.empty()) + AppendInt16(resourceForkData, -1); + else + { + const std::vector::iterator nameIt = std::find(uniqueResNames.begin(), uniqueResNames.end(), res->m_name); + const size_t nameIndex = nameIt - uniqueResNames.begin(); + + AppendUInt16(resourceForkData, static_cast(nameListStarts[nameIndex])); + } + + resourceForkData.push_back(res->m_attributes); + + const size_t resDataStart = res->m_offsetInResData; + + resourceForkData.push_back((resDataStart >> 16) & 0xff); + resourceForkData.push_back((resDataStart >> 8) & 0xff); + resourceForkData.push_back((resDataStart >> 0) & 0xff); + + for (int j = 0; j < 4; j++) + resourceForkData.push_back(0); // Reserved + } + } + + // Write name lists + for (size_t ni = 0; ni < uniqueResNames.size(); ni++) + { + const std::string &name = uniqueResNames[ni]; + const size_t nameLen = name.size(); + + resourceForkData.push_back(static_cast(nameLen)); + + for (size_t i = 0; i < nameLen; i++) + resourceForkData.push_back(name[i]); + } + + const size_t resMapSize = resourceForkData.size() - resMapPos; + + BytePack::BigUInt32(&resourceForkData[0], static_cast(resForkDataStart)); + BytePack::BigUInt32(&resourceForkData[4], static_cast(resMapPos)); + BytePack::BigUInt32(&resourceForkData[8], static_cast(resDataSize)); + BytePack::BigUInt32(&resourceForkData[12], static_cast(resMapSize)); + + FILE *outF = nullptr; + if (fopen_s(&outF, argv[2], "wb")) + { + fprintf(stderr, "Failed to open output file"); + return -1; + } + + fwrite(&resourceForkData[0], 1, resourceForkData.size(), outF); + fclose(outF); + + return 0; +} diff --git a/MiniRez/MiniRez.vcxproj b/MiniRez/MiniRez.vcxproj new file mode 100644 index 0000000..e835547 --- /dev/null +++ b/MiniRez/MiniRez.vcxproj @@ -0,0 +1,136 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 15.0 + {2FF15659-5C72-48B8-B55B-3C658E4125B5} + MiniRez + 10.0.16299.0 + + + + Application + true + v141 + MultiByte + + + Application + false + v141 + true + MultiByte + + + Application + true + v141 + MultiByte + + + Application + false + v141 + true + MultiByte + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Level3 + Disabled + true + true + + + + + Level3 + Disabled + true + true + + + + + Level3 + MaxSpeed + true + true + true + true + + + true + true + + + + + Level3 + MaxSpeed + true + true + true + true + + + true + true + + + + + + + + {6ec62b0f-9353-40a4-a510-3788f1368b33} + + + + + + \ No newline at end of file diff --git a/MiniRez/MiniRez.vcxproj.filters b/MiniRez/MiniRez.vcxproj.filters new file mode 100644 index 0000000..2476dcf --- /dev/null +++ b/MiniRez/MiniRez.vcxproj.filters @@ -0,0 +1,22 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Source Files + + + \ No newline at end of file diff --git a/MiniRez/x64/Debug/vc141.idb b/MiniRez/x64/Debug/vc141.idb new file mode 100644 index 0000000000000000000000000000000000000000..bdae1319118887b62df5e4c10735202da0222797 GIT binary patch literal 175104 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 literal 0 HcmV?d00001 diff --git a/PortabilityLayer.props b/PortabilityLayer.props new file mode 100644 index 0000000..1f3de77 --- /dev/null +++ b/PortabilityLayer.props @@ -0,0 +1,12 @@ + + + + + + + + $(SolutionDir)\PortabilityLayer;%(AdditionalIncludeDirectories) + + + + \ No newline at end of file diff --git a/PortabilityLayer/AEHandlerDesc.h b/PortabilityLayer/AEHandlerDesc.h new file mode 100644 index 0000000..d4639fe --- /dev/null +++ b/PortabilityLayer/AEHandlerDesc.h @@ -0,0 +1,20 @@ +#pragma once +#ifndef __PL_AE_HANDLER_DESC_H__ +#define __PL_AE_HANDLER_DESC_H__ + +#include "PLAppleEventsCommonTypes.h" + +#include + +namespace PortabilityLayer +{ + struct AEHandlerDesc + { + AEEventClass m_eventClass; + AEEventID m_eventID; + AEEventHandler m_handler; + uint32_t m_ref; + }; +} + +#endif diff --git a/PortabilityLayer/AEManager.cpp b/PortabilityLayer/AEManager.cpp new file mode 100644 index 0000000..1193083 --- /dev/null +++ b/PortabilityLayer/AEManager.cpp @@ -0,0 +1,73 @@ +#include "AEManager.h" +#include "AEHandlerDesc.h" + +#include + +namespace PortabilityLayer +{ + class AEManagerImpl final : public AEManager + { + public: + AEManagerImpl(); + + void Init() override; + void Shutdown() override; + + void InstallEventHandler(AEEventClass eventClass, AEEventID eventID, AEEventHandler handler, uint32_t ref, bool isSysHandler) override; + void SetInteractAllowed(AEInteractAllowed interactAllowed) override; + + static AEManagerImpl *GetInstance(); + + private: + std::vector m_handlers; + AEInteractAllowed m_interactAllowed; + + static AEManagerImpl ms_instance; + }; + + AEManagerImpl::AEManagerImpl() + : m_interactAllowed(kAEInteractUnknown) + { + } + + void AEManagerImpl::Init() + { + m_interactAllowed = kAEInteractUnknown; + } + + void AEManagerImpl::Shutdown() + { + m_handlers.clear(); + } + + void AEManagerImpl::InstallEventHandler(AEEventClass eventClass, AEEventID eventID, AEEventHandler handler, uint32_t ref, bool isSysHandler) + { + AEHandlerDesc desc; + desc.m_eventClass = eventClass; + desc.m_eventID = eventID; + desc.m_handler = handler; + desc.m_ref = ref; + + m_handlers.push_back(desc); + } + + void AEManagerImpl::SetInteractAllowed(AEInteractAllowed interactAllowed) + { + m_interactAllowed = interactAllowed; + } + + AEManagerImpl *AEManagerImpl::GetInstance() + { + return &ms_instance; + } + + AEManagerImpl AEManagerImpl::ms_instance; + + + AEManager *AEManager::GetInstance() + { + return AEManagerImpl::GetInstance(); + } +} + + diff --git a/PortabilityLayer/AEManager.h b/PortabilityLayer/AEManager.h new file mode 100644 index 0000000..572b75e --- /dev/null +++ b/PortabilityLayer/AEManager.h @@ -0,0 +1,24 @@ +#pragma once +#ifndef __PL_AE_MANAGER_H__ +#define __PL_AE_MANAGER_H__ + +#include "PLAppleEventsCommonTypes.h" + +#include + +namespace PortabilityLayer +{ + class AEManager + { + public: + virtual void Init() = 0; + virtual void Shutdown() = 0; + + virtual void InstallEventHandler(AEEventClass eventClass, AEEventID eventID, AEEventHandler handler, uint32_t ref, bool isSysHandler) = 0; + virtual void SetInteractAllowed(AEInteractAllowed interactAllowed) = 0; + + static AEManager *GetInstance(); + }; +} + +#endif diff --git a/PortabilityLayer/BinHex4.cpp b/PortabilityLayer/BinHex4.cpp new file mode 100644 index 0000000..d07139e --- /dev/null +++ b/PortabilityLayer/BinHex4.cpp @@ -0,0 +1,302 @@ +#include "BinHex4.h" +#include "IOStream.h" + +#include +#include +#include + +// See: https://files.stairways.com/other/binhex-40-specs-info.txt +// Unfortunately, while the spec specifies that decoding is to be done high-to-low, +// it doesn't specify how the encoded 6-bit value is split. + +#include "MacFileInfo.h" +#include "ByteUnpack.h" +#include "XModemCRC.h" +#include "MacFileMem.h" + +namespace +{ + static bool IsEOL(char c) + { + return c == '\r' || c == '\n'; + } + + static bool IsWhitespaceChar(char c) + { + return c == '\r' || c == '\n' || c == ' ' || c == '\t'; + } + + uint16_t BinHexCRCNoPadding(const uint8_t *bytes, size_t size, int initialValue) + { + uint16_t crc = initialValue; + for (size_t b = 0; b < size; b++) + { + uint8_t v = bytes[b]; + + for (int i = 0; i < 8; i++) + { + int temp = (crc & 0x8000); + crc = (crc << 1) | (v >> 7); + + if (temp) + crc = crc ^ 0x1021; + + v = (v << 1) & 0xff; + } + } + + return static_cast(crc); + } + + uint16_t BinHexCRC(const uint8_t *bytes, size_t size) + { + const uint8_t zeroBytes[] = { 0, 0 }; + + uint16_t crc = BinHexCRCNoPadding(bytes, size, 0); + return BinHexCRCNoPadding(zeroBytes, 2, crc); + } +} + +namespace PortabilityLayer +{ + MacFileMem *BinHex4::LoadHQX(IOStream *stream) + { + const uint8_t errCodeChar = 64; + + uint8_t charMap[128]; + for (int i = 0; i < 128; i++) + charMap[i] = errCodeChar; + + const char binHexCharacters[] = "!\"#$%&'()*+,-012345689@ABCDEFGHIJKLMNPQRSTUVXYZ[`abcdefhijklmpqr"; + + for (int i = 0; i < 64; i++) + charMap[binHexCharacters[i]] = static_cast(i); + + const char expectedPrefix[] = "(This file must be converted with BinHex"; + const size_t prefixSizeChars = sizeof(expectedPrefix) - 1; + char prefix[prefixSizeChars]; + + if (stream->Read(prefix, prefixSizeChars) != prefixSizeChars) + return nullptr; + + if (memcmp(prefix, expectedPrefix, prefixSizeChars)) + return nullptr; + + // Find end char + for (;;) + { + char nextChar; + if (!stream->Read(&nextChar, 1)) + return nullptr; + + if (IsEOL(nextChar)) + break; + } + + // Find start colon + for (;;) + { + char nextChar; + if (!stream->Read(&nextChar, 1)) + return nullptr; + + if (IsWhitespaceChar(nextChar)) + continue; + else if (nextChar == ':') + break; + else + return nullptr; + } + + std::vector bytesAfter6To8; + + if (stream->IsSeekable()) + { + UFilePos_t filePos = stream->Tell(); + if (stream->SeekEnd(0)) + { + UFilePos_t endPos = stream->Tell(); + if (!stream->SeekStart(filePos)) + return nullptr; + + if (endPos > filePos && (endPos - filePos) < SIZE_MAX / 6) + bytesAfter6To8.reserve(static_cast(endPos - filePos) * 6 / 8); + } + } + + // Undo 8-to-6 coding + const size_t bufferCapacity = 128; + size_t bufferReadPos = 0; + size_t bufferSize = 0; + char buffer[bufferCapacity]; + + bool isEOF = false; + + int decodedByte = 0; + int decodedByteBitPos = 8; + + for (;;) + { + if (bufferReadPos == bufferSize) + { + const size_t numRead = stream->Read(buffer, bufferCapacity); + if (numRead == 0) + return nullptr; // Missing terminator + + bufferSize = numRead; + bufferReadPos = 0; + } + + char nextChar = buffer[bufferReadPos++]; + + if (nextChar == ':') + break; + + if (IsWhitespaceChar(nextChar)) + continue; + + if (nextChar < 0 || nextChar > 127) + return nullptr; + + uint8_t value6Bit = charMap[nextChar]; + if (value6Bit == errCodeChar) + return nullptr; + + switch (decodedByteBitPos) + { + case 8: + decodedByte = value6Bit << 2; + decodedByteBitPos = 2; + break; + case 6: + decodedByte |= value6Bit; + bytesAfter6To8.push_back(decodedByte); + decodedByte = 0; + decodedByteBitPos = 8; + break; + case 4: + decodedByte |= (value6Bit >> 2); + bytesAfter6To8.push_back(decodedByte); + decodedByte = (value6Bit << 6) & 0xff; + decodedByteBitPos = 6; + break; + case 2: + decodedByte |= (value6Bit >> 4); + bytesAfter6To8.push_back(decodedByte); + decodedByte = (value6Bit << 4) & 0xff; + decodedByteBitPos = 4; + break; + default: + return nullptr; + } + } + + const size_t bytesBeforeRLEDec = bytesAfter6To8.size(); + size_t decodedDataSize = 0; + for (size_t i = 0; i < bytesBeforeRLEDec; i++) + { + const uint8_t b = bytesAfter6To8[i]; + if (b == 0x90) + { + if (i == bytesBeforeRLEDec - 1) + return nullptr; + + const uint8_t runLength = bytesAfter6To8[++i]; + + if (runLength == 0) + decodedDataSize++; // 0x90 literal + else + decodedDataSize += runLength - 1; // RLE, runs of length 1 are permitted + } + else + decodedDataSize++; + } + + std::vector decodedBytes; + decodedBytes.reserve(decodedDataSize); + + for (size_t i = 0; i < bytesBeforeRLEDec; i++) + { + const uint8_t b = bytesAfter6To8[i]; + + if (b == 0x90) + { + const uint8_t runLength = bytesAfter6To8[++i]; + + if (runLength == 0) + decodedBytes.push_back(0x90); + else + { + if (decodedBytes.size() == 0) + return nullptr; + + const uint8_t lastByte = *(decodedBytes.end() - 1); + for (size_t r = 1; r < runLength; r++) + decodedBytes.push_back(lastByte); + } + } + else + decodedBytes.push_back(b); + } + + assert(decodedBytes.size() == decodedDataSize); + + if (decodedBytes.size() == 0) + return nullptr; + + const uint8_t nameLength = decodedBytes[0]; + if (decodedBytes.size() < 22 + nameLength || nameLength > 63) + return nullptr; + + // Header format: + // uint8_t nameLength + // char name[nameLength] + // char + // char fileType[4] + // char fileCreator[4] + // word flags + // dword dataLength + // dword resourceLength + // word headerCRC + + const size_t headerStartLoc = 2 + nameLength; + + if (decodedBytes[nameLength + 1] != 0) + return nullptr; + + MacFileInfo mfi; + mfi.m_fileName.Set(nameLength, reinterpret_cast(&decodedBytes[1])); + memcpy(mfi.m_properties.m_fileType, &decodedBytes[headerStartLoc + 0], 4); + memcpy(mfi.m_properties.m_fileCreator, &decodedBytes[headerStartLoc + 4], 4); + mfi.m_properties.m_finderFlags = ByteUnpack::BigUInt16(&decodedBytes[headerStartLoc + 8]); + mfi.m_dataForkSize = ByteUnpack::BigUInt32(&decodedBytes[headerStartLoc + 10]); + mfi.m_resourceForkSize = ByteUnpack::BigUInt32(&decodedBytes[headerStartLoc + 14]); + + const size_t availableDataSize = decodedBytes.size() - 26 - nameLength; // +4 bytes for CRCs + + if (mfi.m_dataForkSize > availableDataSize || availableDataSize - mfi.m_dataForkSize < mfi.m_resourceForkSize) + return nullptr; + + const uint16_t expectedHeaderCRC = ByteUnpack::BigUInt16(&decodedBytes[headerStartLoc + 18]); + const uint16_t actualHeaderCRC = BinHexCRC(&decodedBytes[0], headerStartLoc + 18); + + if (expectedHeaderCRC != actualHeaderCRC) + return nullptr; + + const size_t dataForkStart = headerStartLoc + 20; + const size_t dataForkCRCLoc = dataForkStart + mfi.m_dataForkSize; + const size_t resourceForkStart = dataForkCRCLoc + 2; + const size_t resourceForkCRCLoc = resourceForkStart + mfi.m_resourceForkSize; + + const uint16_t expectedDataCRC = ByteUnpack::BigUInt16(&decodedBytes[dataForkCRCLoc]); + const uint16_t expectedResCRC = ByteUnpack::BigUInt16(&decodedBytes[resourceForkCRCLoc]); + + if (expectedDataCRC != BinHexCRC(&decodedBytes[dataForkStart], mfi.m_dataForkSize)) + return false; + + if (expectedResCRC != BinHexCRC(&decodedBytes[resourceForkStart], mfi.m_resourceForkSize)) + return false; + + return new MacFileMem(&decodedBytes[dataForkStart], &decodedBytes[resourceForkStart], nullptr, mfi); + } +} diff --git a/PortabilityLayer/BinHex4.h b/PortabilityLayer/BinHex4.h new file mode 100644 index 0000000..be30643 --- /dev/null +++ b/PortabilityLayer/BinHex4.h @@ -0,0 +1,17 @@ +#pragma once + +#ifndef __PL_BINHEX4_H__ +#define __PL_BINHEX4_H__ + +namespace PortabilityLayer +{ + class IOStream; + class MacFileMem; + + namespace BinHex4 + { + MacFileMem *LoadHQX(IOStream *stream); + }; +} + +#endif diff --git a/PortabilityLayer/BinarySearch.h b/PortabilityLayer/BinarySearch.h new file mode 100644 index 0000000..ca52557 --- /dev/null +++ b/PortabilityLayer/BinarySearch.h @@ -0,0 +1,36 @@ +#pragma once +#ifndef __PL_BINARY_SEARCH_H__ +#define __PL_BINARY_SEARCH_H__ + +#include + +namespace PortabilityLayer +{ + template + TIterator BinarySearch(const TIterator &startInclusive, const TIterator &endExclusive, const TItem &item, const TPredicate &pred) + { + TIterator searchStartInclusive = startInclusive; + TIterator searchEndExclusive = endExclusive; + + while (searchStartInclusive != searchEndExclusive) + { + const ptrdiff_t delta = searchEndExclusive - searchStartInclusive; + const ptrdiff_t halfDelta = delta / 2; + + const TIterator midPoint = searchStartInclusive + halfDelta; + + const int comparison = pred(item, *midPoint); + + if (comparison < 0) + searchEndExclusive = midPoint; + else if (comparison > 0) + searchStartInclusive = midPoint + 1; + else + return midPoint; + } + + return endExclusive; + } +} + +#endif diff --git a/PortabilityLayer/BytePack.h b/PortabilityLayer/BytePack.h new file mode 100644 index 0000000..ccb1f55 --- /dev/null +++ b/PortabilityLayer/BytePack.h @@ -0,0 +1,76 @@ +#pragma once + +#ifndef __PL_BYTEPACK_H__ +#define __PL_BYTEPACK_H__ + +#include "DataTypes.h" + +namespace PortabilityLayer +{ + namespace BytePack + { + void BigUInt64(uint8_t *bytes, uint64_t value); + void BigUInt32(uint8_t *bytes, uint32_t value); + void BigUInt16(uint8_t *bytes, uint16_t value); + } +} + +namespace PortabilityLayer +{ + namespace BytePack + { + inline void BigUInt64(uint8_t *bytes, uint64_t value) + { + bytes[0] = static_cast((value >> 56) & 0xff); + bytes[1] = static_cast((value >> 48) & 0xff); + bytes[2] = static_cast((value >> 40) & 0xff); + bytes[3] = static_cast((value >> 32) & 0xff); + bytes[4] = static_cast((value >> 24) & 0xff); + bytes[5] = static_cast((value >> 16) & 0xff); + bytes[6] = static_cast((value >> 8) & 0xff); + bytes[7] = static_cast(value & 0xff); + } + + inline void BigUInt32(uint8_t *bytes, uint32_t value) + { + bytes[0] = static_cast((value >> 24) & 0xff); + bytes[1] = static_cast((value >> 16) & 0xff); + bytes[2] = static_cast((value >> 8) & 0xff); + bytes[3] = static_cast(value & 0xff); + } + + inline void BigUInt16(uint8_t *bytes, uint16_t value) + { + bytes[0] = static_cast((value >> 8) & 0xff); + bytes[1] = static_cast(value & 0xff); + } + + inline void BigInt64(uint8_t *bytes, int64_t value) + { + bytes[0] = static_cast((value >> 56) & 0xff); + bytes[1] = static_cast((value >> 48) & 0xff); + bytes[2] = static_cast((value >> 40) & 0xff); + bytes[3] = static_cast((value >> 32) & 0xff); + bytes[4] = static_cast((value >> 24) & 0xff); + bytes[5] = static_cast((value >> 16) & 0xff); + bytes[6] = static_cast((value >> 8) & 0xff); + bytes[7] = static_cast(value & 0xff); + } + + inline void BigInt32(uint8_t *bytes, uint32_t value) + { + bytes[0] = static_cast((value >> 24) & 0xff); + bytes[1] = static_cast((value >> 16) & 0xff); + bytes[2] = static_cast((value >> 8) & 0xff); + bytes[3] = static_cast(value & 0xff); + } + + inline void BigInt16(uint8_t *bytes, uint16_t value) + { + bytes[0] = static_cast((value >> 8) & 0xff); + bytes[1] = static_cast(value & 0xff); + } + } +} + +#endif diff --git a/PortabilityLayer/ByteSwap.cpp b/PortabilityLayer/ByteSwap.cpp new file mode 100644 index 0000000..92836e8 --- /dev/null +++ b/PortabilityLayer/ByteSwap.cpp @@ -0,0 +1,37 @@ +#include "ByteSwap.h" + +namespace PortabilityLayer +{ + namespace ByteSwap + { + void BigInt16(int16_t &v) + { + const uint8_t *asU8 = reinterpret_cast(&v); + const int8_t *asS8 = reinterpret_cast(&v); + + v = static_cast((asS8[0] << 8) | asU8[1]); + } + + void BigInt32(int32_t &v) + { + const uint8_t *asU8 = reinterpret_cast(&v); + const int8_t *asS8 = reinterpret_cast(&v); + + v = static_cast((asS8[0] << 24) | (asU8[1] << 16) | (asU8[2] << 8) | asU8[3]); + } + + void BigUInt16(uint16_t &v) + { + const uint8_t *asU8 = reinterpret_cast(&v); + + v = static_cast((asU8[0] << 8) | asU8[1]); + } + + void BigUInt32(uint32_t &v) + { + const uint8_t *asU8 = reinterpret_cast(&v); + + v = static_cast((asU8[0] << 24) | (asU8[1] << 16) | (asU8[2] << 8) | asU8[3]); + } + } +} diff --git a/PortabilityLayer/ByteSwap.h b/PortabilityLayer/ByteSwap.h new file mode 100644 index 0000000..ca132db --- /dev/null +++ b/PortabilityLayer/ByteSwap.h @@ -0,0 +1,18 @@ +#pragma once +#ifndef __PL_BYTESWAP_H__ +#define __PL_BYTESWAP_H__ + +#include + +namespace PortabilityLayer +{ + namespace ByteSwap + { + void BigInt16(int16_t &v); + void BigInt32(int32_t &v); + void BigUInt16(uint16_t &v); + void BigUInt32(uint32_t &v); + } +} + +#endif diff --git a/PortabilityLayer/ByteUnpack.h b/PortabilityLayer/ByteUnpack.h new file mode 100644 index 0000000..240fa1b --- /dev/null +++ b/PortabilityLayer/ByteUnpack.h @@ -0,0 +1,78 @@ +#pragma once + +#ifndef __PL_BYTEUNPACK_H__ +#define __PL_BYTEUNPACK_H__ + +#include "DataTypes.h" + +namespace PortabilityLayer +{ + namespace ByteUnpack + { + uint64_t BigUInt64(const uint8_t *bytes); + uint32_t BigUInt32(const uint8_t *bytes); + uint16_t BigUInt16(const uint8_t *bytes); + + int64_t BigInt64(const uint8_t *bytes); + int32_t BigInt32(const uint8_t *bytes); + int16_t BigInt16(const uint8_t *bytes); + } +} + +namespace PortabilityLayer +{ + namespace ByteUnpack + { + inline uint64_t BigUInt64(const uint8_t *bytes) + { + return (static_cast(bytes[0]) << 56) + | (static_cast(bytes[1]) << 48) + | (static_cast(bytes[2]) << 32) + | (static_cast(bytes[3]) << 24) + | (static_cast(bytes[4]) << 16) + | (static_cast(bytes[5]) << 8) + | (static_cast(bytes[6])); + } + + inline uint32_t BigUInt32(const uint8_t *bytes) + { + return (static_cast(bytes[0]) << 24) + | (static_cast(bytes[1]) << 16) + | (static_cast(bytes[2]) << 8) + | (static_cast(bytes[3])); + } + + inline uint16_t BigUInt16(const uint8_t *bytes) + { + return (static_cast(bytes[0]) << 8) + | (static_cast(bytes[1])); + } + + inline int64_t BigInt64(const uint8_t *bytes) + { + return (static_cast(bytes[0]) << 56) + | (static_cast(bytes[1]) << 48) + | (static_cast(bytes[2]) << 32) + | (static_cast(bytes[3]) << 24) + | (static_cast(bytes[4]) << 16) + | (static_cast(bytes[5]) << 8) + | (static_cast(bytes[6])); + } + + inline int32_t BigInt32(const uint8_t *bytes) + { + return (static_cast(bytes[0]) << 24) + | (static_cast(bytes[1]) << 16) + | (static_cast(bytes[2]) << 8) + | (static_cast(bytes[3])); + } + + inline int16_t BigInt16(const uint8_t *bytes) + { + return (static_cast(bytes[0]) << 8) + | (static_cast(bytes[1])); + } + } +} + +#endif diff --git a/PortabilityLayer/CFileStream.cpp b/PortabilityLayer/CFileStream.cpp new file mode 100644 index 0000000..700a041 --- /dev/null +++ b/PortabilityLayer/CFileStream.cpp @@ -0,0 +1,110 @@ +#include "CFileStream.h" + +namespace PortabilityLayer +{ + CFileStream::CFileStream(FILE *f) + : m_file(f) + , m_readOnly(false) + , m_writeOnly(false) + , m_seekable(true) + { + } + + CFileStream::CFileStream(FILE *f, bool isReadOnly, bool isWriteOnly, bool isSeekable) + : m_file(f) + , m_readOnly(isReadOnly) + , m_writeOnly(isWriteOnly) + , m_seekable(isSeekable) + { + } + + size_t CFileStream::Read(void *bytesOut, size_t size) + { + if (!m_file || m_writeOnly) + return 0; + + return fread(bytesOut, 1, size, m_file); + } + + size_t CFileStream::Write(const void *bytes, size_t size) + { + if (!m_file || m_readOnly) + return 0; + + return fwrite(bytes, 1, size, m_file); + } + + bool CFileStream::IsSeekable() const + { + return m_seekable; + } + + bool CFileStream::IsReadOnly() const + { + return m_readOnly; + } + + bool CFileStream::IsWriteOnly() const + { + return m_writeOnly; + } + + bool CFileStream::SeekStart(UFilePos_t loc) + { + if (!m_file) + return false; + + return fseek(m_file, static_cast(loc), SEEK_SET) == 0; + } + + bool CFileStream::SeekCurrent(FilePos_t loc) + { + if (!m_file) + return false; + + return fseek(m_file, static_cast(loc), SEEK_CUR) == 0;; + } + + bool CFileStream::SeekEnd(UFilePos_t loc) + { + if (!m_file) + return false; + + return fseek(m_file, static_cast(loc), SEEK_END) == 0; + } + + bool CFileStream::Truncate(UFilePos_t loc) + { + return false; + } + + UFilePos_t CFileStream::Tell() const + { + if (!m_file) + return 0; + + return static_cast(ftell(m_file)); + } + + void CFileStream::Close() + { + if (m_file) + { + fclose(m_file); + m_file = nullptr; + } + } + + UFilePos_t CFileStream::Size() const + { + if (!m_file || !m_seekable) + return 0; + + long oldPos = ftell(m_file); + fseek(m_file, SEEK_END, 0); + const UFilePos_t endPos = static_cast(ftell(m_file)); + fseek(m_file, oldPos, SEEK_SET); + + return endPos; + } +} diff --git a/PortabilityLayer/CFileStream.h b/PortabilityLayer/CFileStream.h new file mode 100644 index 0000000..c411515 --- /dev/null +++ b/PortabilityLayer/CFileStream.h @@ -0,0 +1,42 @@ +#pragma once + +#ifndef __PL_CFILESTREAM_H__ +#define __PL_CFILESTREAM_H__ + +#include + +#include "CoreDefs.h" +#include "IOStream.h" + +namespace PortabilityLayer +{ + class CFileStream final : public IOStream + { + public: + explicit CFileStream(FILE *f); + CFileStream(FILE *f, bool isReadOnly, bool isWriteOnly, bool isSeekable); + + size_t Read(void *bytesOut, size_t size) override; + size_t Write(const void *bytes, size_t size) override; + bool IsSeekable() const override; + bool IsReadOnly() const override; + bool IsWriteOnly() const override; + bool SeekStart(UFilePos_t loc) override; + bool SeekCurrent(FilePos_t loc) override; + bool SeekEnd(UFilePos_t loc) override; + bool Truncate(UFilePos_t loc) override; + UFilePos_t Size() const override; + UFilePos_t Tell() const override; + void Close() override; + + private: + CFileStream(const CFileStream &other) PL_DELETED; + + FILE *m_file; + bool m_readOnly; + bool m_writeOnly; + bool m_seekable; + }; +} + +#endif diff --git a/PortabilityLayer/DataTypes.h b/PortabilityLayer/DataTypes.h new file mode 100644 index 0000000..b5c11fe --- /dev/null +++ b/PortabilityLayer/DataTypes.h @@ -0,0 +1,14 @@ +#pragma once + +#ifndef __PL_DATATYPES_H__ +#define __PL_DATATYPES_H__ + +#include + +namespace PortabilityLayer +{ + typedef int64_t LargestInt_t; + typedef uint64_t LargestUInt_t; +} + +#endif diff --git a/PortabilityLayer/DisplayDeviceManager.cpp b/PortabilityLayer/DisplayDeviceManager.cpp new file mode 100644 index 0000000..a0e0dd5 --- /dev/null +++ b/PortabilityLayer/DisplayDeviceManager.cpp @@ -0,0 +1,75 @@ +#include "DisplayDeviceManager.h" + +#include "PLQuickdraw.h" + +#include "MemoryManager.h" + +namespace PortabilityLayer +{ + class DisplayDeviceManagerImpl final : public DisplayDeviceManager + { + public: + DisplayDeviceManagerImpl(); + + void Init() override; + void Shutdown() override; + + GDevice **GetMainDevice() override; + + + void IncrementTickCount(uint32_t count) override; + uint32_t GetTickCount() override; + + static DisplayDeviceManagerImpl *GetInstance(); + + private: + GDHandle m_mainDevice; + uint32_t m_tickCount; + + static DisplayDeviceManagerImpl ms_instance; + }; + + DisplayDeviceManagerImpl::DisplayDeviceManagerImpl() + : m_mainDevice(nullptr) + , m_tickCount(1) + { + } + + void DisplayDeviceManagerImpl::Init() + { + m_mainDevice = MemoryManager::GetInstance()->NewHandle(); + } + + void DisplayDeviceManagerImpl::Shutdown() + { + MemoryManager::GetInstance()->ReleaseHandle(reinterpret_cast(m_mainDevice)); + } + + GDevice **DisplayDeviceManagerImpl::GetMainDevice() + { + return m_mainDevice; + } + + void DisplayDeviceManagerImpl::IncrementTickCount(uint32_t count) + { + m_tickCount += count; + } + + uint32_t DisplayDeviceManagerImpl::GetTickCount() + { + return m_tickCount; + } + + + DisplayDeviceManagerImpl *DisplayDeviceManagerImpl::GetInstance() + { + return &ms_instance; + } + + DisplayDeviceManagerImpl DisplayDeviceManagerImpl::ms_instance; + + DisplayDeviceManager *DisplayDeviceManager::GetInstance() + { + return DisplayDeviceManagerImpl::GetInstance(); + } +} diff --git a/PortabilityLayer/DisplayDeviceManager.h b/PortabilityLayer/DisplayDeviceManager.h new file mode 100644 index 0000000..6cc5f5a --- /dev/null +++ b/PortabilityLayer/DisplayDeviceManager.h @@ -0,0 +1,25 @@ +#pragma once +#ifndef __PL_DEVICE_MANAGER_H__ +#define __PL_DEVICE_MANAGER_H__ + +#include + +struct GDevice; + +namespace PortabilityLayer +{ + class DisplayDeviceManager + { + public: + virtual void Init() = 0; + virtual void Shutdown() = 0; + + virtual GDevice **GetMainDevice() = 0; + virtual void IncrementTickCount(uint32_t count) = 0; + virtual uint32_t GetTickCount() = 0; + + static DisplayDeviceManager *GetInstance(); + }; +} + +#endif diff --git a/PortabilityLayer/FileManager.cpp b/PortabilityLayer/FileManager.cpp new file mode 100644 index 0000000..bafc946 --- /dev/null +++ b/PortabilityLayer/FileManager.cpp @@ -0,0 +1,207 @@ +#include "FileManager.h" +#include "HostFileSystem.h" +#include "HostMemoryBuffer.h" +#include "MemReaderStream.h" +#include "MacBinary2.h" +#include "MacFileMem.h" +#include "PLPasStr.h" +#include "PLErrorCodes.h" + +#include + +namespace PortabilityLayer +{ + class VirtualFile; + + class FileManagerImpl final : public FileManager + { + public: + bool FileExists(uint32_t dirID, const PLPasStr &filename) override; + + int OpenFileDF(uint32_t dirID, const PLPasStr &filename, EFilePermission filePermission, short *outRefNum) override; + int OpenFileRF(uint32_t dirID, const PLPasStr &filename, EFilePermission filePermission, short *outRefNum) override; + + int RawOpenFileDF(uint32_t dirID, const PLPasStr &filename, EFilePermission filePermission, bool ignoreMeta, IOStream **outStream) override; + int RawOpenFileRF(uint32_t dirID, const PLPasStr &filename, EFilePermission filePermission, bool ignoreMeta, IOStream **outStream) override; + + static FileManagerImpl *GetInstance(); + + private: + typedef char ExtendedFileName_t[64 + 4]; + + struct OpenedFile + { + EVirtualDirectory m_dirID; + PascalStr<64> m_fileName; + + IOStream *m_stream; + }; + + int OpenFileFork(uint32_t dirID, const PLPasStr &filename, const char *ext, EFilePermission permission, short *outRefNum); + int RawOpenFileFork(uint32_t dirID, const PLPasStr &filename, const char *ext, EFilePermission permission, bool ignoreMeta, IOStream **outStream); + + static bool ConstructFilename(ExtendedFileName_t& extFN, const PLPasStr &fn, const char *extension); + + std::vector m_refs; + + static FileManagerImpl ms_instance; + }; + + bool FileManagerImpl::FileExists(uint32_t dirID, const PLPasStr &filename) + { + ExtendedFileName_t extFN; + if (!ConstructFilename(extFN, filename, ".gpf")) + return false; + + return HostFileSystem::GetInstance()->FileExists(static_cast(dirID), extFN); + } + + int FileManagerImpl::OpenFileDF(uint32_t dirID, const PLPasStr &filename, EFilePermission permission, short *outRefNum) + { + return OpenFileFork(dirID, filename, ".gpd", permission, outRefNum); + } + + int FileManagerImpl::OpenFileRF(uint32_t dirID, const PLPasStr &filename, EFilePermission permission, short *outRefNum) + { + return OpenFileFork(dirID, filename, ".gpr", permission, outRefNum); + } + + int FileManagerImpl::RawOpenFileDF(uint32_t dirID, const PLPasStr &filename, EFilePermission permission, bool ignoreMeta, IOStream **outStream) + { + return RawOpenFileFork(dirID, filename, ".gpd", permission, ignoreMeta, outStream); + } + + int FileManagerImpl::RawOpenFileRF(uint32_t dirID, const PLPasStr &filename, EFilePermission permission, bool ignoreMeta, IOStream **outStream) + { + return RawOpenFileFork(dirID, filename, ".gpr", permission, ignoreMeta, outStream); + } + + FileManagerImpl *FileManagerImpl::GetInstance() + { + return &ms_instance; + } + + int FileManagerImpl::OpenFileFork(uint32_t dirID, const PLPasStr &filename, const char *extension, EFilePermission permission, short *outRefNum) + { + const size_t numRefs = m_refs.size(); + size_t refIndex = m_refs.size(); + for (size_t i = 0; i < numRefs; i++) + { + if (m_refs[i].m_stream == nullptr) + { + refIndex = i; + break; + } + } + + if (refIndex == 0x7fff) + return tmfoErr; + + IOStream *stream = nullptr; + int openError = RawOpenFileFork(dirID, filename, extension, permission, false, &stream); + if (openError != 0) + return openError; + + if (refIndex == numRefs) + m_refs.push_back(OpenedFile()); + + OpenedFile &of = m_refs[refIndex]; + of.m_stream = stream; + of.m_dirID = static_cast(dirID); + of.m_fileName.Set(filename.Length(), filename.Chars()); + + *outRefNum = static_cast(refIndex + 1); + + return noErr; + } + + int FileManagerImpl::RawOpenFileFork(uint32_t dirID, const PLPasStr &filename, const char *ext, EFilePermission permission, bool ignoreMeta, IOStream **outStream) + { + ExtendedFileName_t gpfExtFN; + ExtendedFileName_t extFN; + + if (filename.Length() > 63) + return bdNamErr; + + if (!ignoreMeta) + { + if (!ConstructFilename(gpfExtFN, filename, ".gpf")) + return bdNamErr; + + if (!HostFileSystem::GetInstance()->FileExists(static_cast(dirID), gpfExtFN)) + return fnfErr; + } + + const bool needToCreate = !(ignoreMeta || HostFileSystem::GetInstance()->FileExists(static_cast(dirID), extFN)); + + if (!ConstructFilename(extFN, filename, ext)) + return bdNamErr; + + IOStream *fstream = nullptr; + switch (permission) + { + case EFilePermission_Any: + fstream = HostFileSystem::GetInstance()->OpenFile(static_cast(dirID), extFN, true, needToCreate); + if (fstream) + permission = EFilePermission_ReadWrite; + else + { + permission = EFilePermission_Read; + fstream = HostFileSystem::GetInstance()->OpenFile(static_cast(dirID), extFN, false, needToCreate); + } + break; + case EFilePermission_Read: + fstream = HostFileSystem::GetInstance()->OpenFile(static_cast(dirID), extFN, false, needToCreate); + break; + case EFilePermission_ReadWrite: + fstream = HostFileSystem::GetInstance()->OpenFile(static_cast(dirID), extFN, true, needToCreate); + break; + } + + if (!fstream) + return permErr; + + *outStream = fstream; + return noErr; + } + + bool FileManagerImpl::ConstructFilename(ExtendedFileName_t& extFN, const PLPasStr &fn, const char *extension) + { + const size_t fnameSize = fn.Length(); + if (fnameSize >= 64) + return false; + + memcpy(extFN, fn.Chars(), fnameSize); + memcpy(extFN + fnameSize, extension, strlen(extension) + 1); + + for (size_t i = 0; i < fnameSize; i++) + { + const char c = extFN[i]; + if (c >= '0' && c <= '9') + continue; + + if (c == '_') + continue; + + if (c == ' ' && i != 0 && i != fnameSize - 1) + continue; + + if (c >= 'a' && c <= 'z') + continue; + + if (c >= 'A' && c <= 'Z') + continue; + + return false; + } + + return true; + } + + FileManagerImpl FileManagerImpl::ms_instance; + + FileManager *FileManager::GetInstance() + { + return FileManagerImpl::GetInstance(); + } +} diff --git a/PortabilityLayer/FileManager.h b/PortabilityLayer/FileManager.h new file mode 100644 index 0000000..7e628f5 --- /dev/null +++ b/PortabilityLayer/FileManager.h @@ -0,0 +1,31 @@ +#pragma once +#ifndef __PL_FILE_MANAGER_H__ +#define __PL_FILE_MANAGER_H__ + +#include "FilePermission.h" +#include "CoreDefs.h" + +#include + +class PLPasStr; + +namespace PortabilityLayer +{ + class IOStream; + + class FileManager + { + public: + virtual bool FileExists(uint32_t dirID, const PLPasStr &filename) = 0; + + virtual int OpenFileDF(uint32_t dirID, const PLPasStr &filename, EFilePermission filePermission, short *outRefNum) = 0; + virtual int OpenFileRF(uint32_t dirID, const PLPasStr &filename, EFilePermission filePermission, short *outRefNum) = 0; + + virtual int RawOpenFileDF(uint32_t dirID, const PLPasStr &filename, EFilePermission filePermission, bool ignoreMeta, IOStream **outStream) = 0; + virtual int RawOpenFileRF(uint32_t dirID, const PLPasStr &filename, EFilePermission filePermission, bool ignoreMeta, IOStream **outStream) = 0; + + static FileManager *GetInstance(); + }; +} + +#endif diff --git a/PortabilityLayer/FilePermission.h b/PortabilityLayer/FilePermission.h new file mode 100644 index 0000000..f3926f5 --- /dev/null +++ b/PortabilityLayer/FilePermission.h @@ -0,0 +1,15 @@ +#pragma once +#ifndef __PL_FILE_PERMISSION_H__ +#define __PL_FILE_PERMISSION_H__ + +namespace PortabilityLayer +{ + enum EFilePermission + { + EFilePermission_Any, + EFilePermission_Read, + EFilePermission_ReadWrite, + }; +} + +#endif diff --git a/PortabilityLayer/GpAppInterface.h b/PortabilityLayer/GpAppInterface.h new file mode 100644 index 0000000..0d1f844 --- /dev/null +++ b/PortabilityLayer/GpAppInterface.h @@ -0,0 +1,42 @@ +#pragma once +#ifndef __GPAPP_INTERFACE_H__ +#define __GPAPP_INTERFACE_H__ + +#include "HostSuspendHook.h" +#include + +#ifdef GP_APP_DLL + +#ifdef GP_APP_DLL_EXPORT +#define GP_APP_DLL_EXPORT_API extern "C" __declspec(dllexport) +#else +#define GP_APP_DLL_EXPORT_API extern "C" __declspec(dllimport) +#endif + +#else + +#define GP_APP_DLL_EXPORT_API extern "C" + +#endif + +namespace PortabilityLayer +{ + class HostFileSystem; + class HostDisplayDriver; + class HostSystemServices; +} + +class GpAppInterface +{ +public: + virtual int ApplicationMain() = 0; + virtual void PL_IncrementTickCounter(uint32_t count) = 0; + virtual void PL_HostFileSystem_SetInstance(PortabilityLayer::HostFileSystem *instance) = 0; + virtual void PL_HostDisplayDriver_SetInstance(PortabilityLayer::HostDisplayDriver *instance) = 0; + virtual void PL_HostSystemServices_SetInstance(PortabilityLayer::HostSystemServices *instance) = 0; + virtual void PL_InstallHostSuspendHook(PortabilityLayer::HostSuspendHook_t hook, void *context) = 0; +}; + +GP_APP_DLL_EXPORT_API GpAppInterface *GpAppInterface_Get(); + +#endif diff --git a/PortabilityLayer/HostDisplayDriver.cpp b/PortabilityLayer/HostDisplayDriver.cpp new file mode 100644 index 0000000..4dab6c2 --- /dev/null +++ b/PortabilityLayer/HostDisplayDriver.cpp @@ -0,0 +1,16 @@ +#include "HostDisplayDriver.h" + +namespace PortabilityLayer +{ + HostDisplayDriver *HostDisplayDriver::GetInstance() + { + return ms_instance; + } + + void HostDisplayDriver::SetInstance(HostDisplayDriver *instance) + { + ms_instance = instance; + } + + HostDisplayDriver *HostDisplayDriver::ms_instance; +} diff --git a/PortabilityLayer/HostDisplayDriver.h b/PortabilityLayer/HostDisplayDriver.h new file mode 100644 index 0000000..35e1931 --- /dev/null +++ b/PortabilityLayer/HostDisplayDriver.h @@ -0,0 +1,21 @@ +#pragma once +#ifndef __PL_HOST_DISPLAY_DRIVER_H__ +#define __PL_HOST_DISPLAY_DRIVER_H__ + +namespace PortabilityLayer +{ + class HostDisplayDriver + { + public: + virtual void GetDisplayResolution(unsigned int &width, unsigned int &height) = 0; + virtual void HideCursor() = 0; + + static void SetInstance(HostDisplayDriver *instance); + static HostDisplayDriver *GetInstance(); + + private: + static HostDisplayDriver *ms_instance; + }; +} + +#endif diff --git a/PortabilityLayer/HostFileSystem.cpp b/PortabilityLayer/HostFileSystem.cpp new file mode 100644 index 0000000..56832c5 --- /dev/null +++ b/PortabilityLayer/HostFileSystem.cpp @@ -0,0 +1,16 @@ +#include "HostFileSystem.h" + +namespace PortabilityLayer +{ + HostFileSystem *HostFileSystem::GetInstance() + { + return ms_instance; + } + + void HostFileSystem::SetInstance(HostFileSystem *instance) + { + ms_instance = instance; + } + + HostFileSystem *HostFileSystem::ms_instance; +} diff --git a/PortabilityLayer/HostFileSystem.h b/PortabilityLayer/HostFileSystem.h new file mode 100644 index 0000000..443822b --- /dev/null +++ b/PortabilityLayer/HostFileSystem.h @@ -0,0 +1,25 @@ +#pragma once +#ifndef __PL_HOST_FILESYSTEM_H__ +#define __PL_HOST_FILESYSTEM_H__ + +#include "VirtualDirectory.h" + +namespace PortabilityLayer +{ + class IOStream; + + class HostFileSystem + { + public: + virtual bool FileExists(EVirtualDirectory virtualDirectory, const char *path) = 0; + virtual IOStream *OpenFile(EVirtualDirectory virtualDirectory, const char *path, bool writeAccess, bool create) = 0; + + static HostFileSystem *GetInstance(); + static void SetInstance(HostFileSystem *instance); + + private: + static HostFileSystem *ms_instance; + }; +} + +#endif diff --git a/PortabilityLayer/HostMemoryBuffer.h b/PortabilityLayer/HostMemoryBuffer.h new file mode 100644 index 0000000..ca255e8 --- /dev/null +++ b/PortabilityLayer/HostMemoryBuffer.h @@ -0,0 +1,20 @@ +#pragma once +#ifndef __PL_HOST_MEMORYBUFFER_H__ +#define __PL_HOST_MEMORYBUFFER_H__ + +#include + +#include "CoreDefs.h" + +namespace PortabilityLayer +{ + class HostMemoryBuffer + { + public: + virtual void *Contents() = 0; + virtual size_t Size() = 0; + virtual void Destroy() = 0; + }; +} + +#endif diff --git a/PortabilityLayer/HostSuspendCallArgument.h b/PortabilityLayer/HostSuspendCallArgument.h new file mode 100644 index 0000000..5d3b334 --- /dev/null +++ b/PortabilityLayer/HostSuspendCallArgument.h @@ -0,0 +1,17 @@ +#pragma once + +#include + +#include "HostSuspendCallID.h" + +namespace PortabilityLayer +{ + union HostSuspendCallArgument + { + uint32_t m_uint; + int32_t m_int; + size_t m_size; + void *m_pointer; + const void *m_constPointer; + }; +} diff --git a/PortabilityLayer/HostSuspendCallID.h b/PortabilityLayer/HostSuspendCallID.h new file mode 100644 index 0000000..4b3e0d5 --- /dev/null +++ b/PortabilityLayer/HostSuspendCallID.h @@ -0,0 +1,15 @@ +#pragma once +#ifndef __PL_HOST_API_CALL_ID_H__ +#define __PL_HOST_API_CALL_ID_H__ + +namespace PortabilityLayer +{ + enum HostSuspendCallID + { + HostSuspendCallID_Unknown, + + HostSuspendCallID_Delay, + }; +} + +#endif diff --git a/PortabilityLayer/HostSuspendHook.cpp b/PortabilityLayer/HostSuspendHook.cpp new file mode 100644 index 0000000..564cf28 --- /dev/null +++ b/PortabilityLayer/HostSuspendHook.cpp @@ -0,0 +1,22 @@ +#include "HostSuspendHook.h" +#include "HostSuspendCallArgument.h" + +namespace +{ + static PortabilityLayer::HostSuspendHook_t gs_suspendHook; + static void *gs_suspendContext; +} + +namespace PortabilityLayer +{ + void InstallHostSuspendHook(HostSuspendHook_t hook, void *context) + { + gs_suspendHook = hook; + gs_suspendContext = context; + } + + void SuspendApplication(HostSuspendCallID callID, const HostSuspendCallArgument *args, HostSuspendCallArgument *returnValue) + { + gs_suspendHook(gs_suspendContext, callID, args, returnValue); + } +} diff --git a/PortabilityLayer/HostSuspendHook.h b/PortabilityLayer/HostSuspendHook.h new file mode 100644 index 0000000..103e437 --- /dev/null +++ b/PortabilityLayer/HostSuspendHook.h @@ -0,0 +1,17 @@ +#pragma once +#ifndef __PL_HOST_API_HOOK_H__ +#define __PL_HOST_API_HOOK_H__ + +#include "HostSuspendCallID.h" + +namespace PortabilityLayer +{ + union HostSuspendCallArgument; + + typedef void(*HostSuspendHook_t)(void *context, HostSuspendCallID callID, const HostSuspendCallArgument *args, HostSuspendCallArgument *returnValue); + + void InstallHostSuspendHook(HostSuspendHook_t hook, void *context); + void SuspendApplication(HostSuspendCallID callID, const HostSuspendCallArgument *args, HostSuspendCallArgument *returnValue); +} + +#endif diff --git a/PortabilityLayer/HostSystemServices.cpp b/PortabilityLayer/HostSystemServices.cpp new file mode 100644 index 0000000..3d3f72f --- /dev/null +++ b/PortabilityLayer/HostSystemServices.cpp @@ -0,0 +1,16 @@ +#include "HostSystemServices.h" + +namespace PortabilityLayer +{ + void HostSystemServices::SetInstance(HostSystemServices *instance) + { + ms_instance = instance; + } + + HostSystemServices *HostSystemServices::GetInstance() + { + return ms_instance; + } + + HostSystemServices *HostSystemServices::ms_instance; +} diff --git a/PortabilityLayer/HostSystemServices.h b/PortabilityLayer/HostSystemServices.h new file mode 100644 index 0000000..a1287a1 --- /dev/null +++ b/PortabilityLayer/HostSystemServices.h @@ -0,0 +1,22 @@ +#pragma once +#ifndef __PL_HOST_SYSTEM_SERVICES_H__ +#define __PL_HOST_SYSTEM_SERVICES_H__ + +#include + +namespace PortabilityLayer +{ + class HostSystemServices + { + public: + virtual uint32_t GetTime() const = 0; + + static void SetInstance(HostSystemServices *instance); + static HostSystemServices *GetInstance(); + + private: + static HostSystemServices *ms_instance; + }; +} + +#endif diff --git a/PortabilityLayer/IOStream.h b/PortabilityLayer/IOStream.h new file mode 100644 index 0000000..7167373 --- /dev/null +++ b/PortabilityLayer/IOStream.h @@ -0,0 +1,31 @@ +#pragma once + +#ifndef __PL_IOTREAM_H__ +#define __PL_IOTREAM_H__ + +#include "DataTypes.h" + +namespace PortabilityLayer +{ + typedef int64_t FilePos_t; + typedef uint64_t UFilePos_t; + + class IOStream + { + public: + virtual size_t Read(void *bytesOut, size_t size) = 0; + virtual size_t Write(const void *bytes, size_t size) = 0; + virtual bool IsSeekable() const = 0; + virtual bool IsReadOnly() const = 0; + virtual bool IsWriteOnly() const = 0; + virtual bool SeekStart(UFilePos_t loc) = 0; + virtual bool SeekCurrent(FilePos_t loc) = 0; + virtual bool SeekEnd(UFilePos_t loc) = 0; + virtual bool Truncate(UFilePos_t loc) = 0; + virtual UFilePos_t Size() const = 0; + virtual UFilePos_t Tell() const = 0; + virtual void Close() = 0; + }; +} + +#endif diff --git a/PortabilityLayer/MMBlock.cpp b/PortabilityLayer/MMBlock.cpp new file mode 100644 index 0000000..7c34c43 --- /dev/null +++ b/PortabilityLayer/MMBlock.cpp @@ -0,0 +1,12 @@ +#include "MMBlock.h" + +namespace PortabilityLayer +{ + size_t MMBlock::AlignedSize() + { + const size_t paddedSize = sizeof(MMBlock) + PL_SYSTEM_MEMORY_ALIGNMENT - 1; + const size_t paddedSizeTruncated = paddedSize - (paddedSize % PL_SYSTEM_MEMORY_ALIGNMENT); + + return paddedSizeTruncated; + } +} diff --git a/PortabilityLayer/MMBlock.h b/PortabilityLayer/MMBlock.h new file mode 100644 index 0000000..844094a --- /dev/null +++ b/PortabilityLayer/MMBlock.h @@ -0,0 +1,20 @@ +#pragma once +#ifndef __PL_MM_BLOCK_H__ +#define __PL_MM_BLOCK_H__ + +#include + +#include "CoreDefs.h" +#include "SmallestInt.h" + +namespace PortabilityLayer +{ + struct MMBlock + { + SmallestUInt::ValueType_t m_offsetFromAllocLocation; + + static size_t AlignedSize(); + }; +} + +#endif diff --git a/PortabilityLayer/MMHandleBlock.cpp b/PortabilityLayer/MMHandleBlock.cpp new file mode 100644 index 0000000..651ec99 --- /dev/null +++ b/PortabilityLayer/MMHandleBlock.cpp @@ -0,0 +1,17 @@ +#include "MMHandleBlock.h" + +namespace PortabilityLayer +{ + MMHandleBlock::MMHandleBlock(void *contents, size_t size) + : m_contents(contents) + , m_rmSelfRef(nullptr) + , m_size(size) + { + } + + void **MMHandleBlock::AsHandle() + { + return &m_contents; + } + +} diff --git a/PortabilityLayer/MMHandleBlock.h b/PortabilityLayer/MMHandleBlock.h new file mode 100644 index 0000000..bff3801 --- /dev/null +++ b/PortabilityLayer/MMHandleBlock.h @@ -0,0 +1,29 @@ +#pragma once +#ifndef __PL_MM_HANDLE_BLOCK_H__ +#define __PL_MM_HANDLE_BLOCK_H__ + +#include + +#include "CoreDefs.h" + +namespace PortabilityLayer +{ + struct ResourceCompiledRef; + + struct MMHandleBlock + { + explicit MMHandleBlock(void *contents, size_t size); + + void **AsHandle(); + + void *m_contents; // This must be the first field + ResourceCompiledRef *m_rmSelfRef; + + size_t m_size; + + private: + MMHandleBlock() PL_DELETED; + }; +} + +#endif diff --git a/PortabilityLayer/MacBinary2.cpp b/PortabilityLayer/MacBinary2.cpp new file mode 100644 index 0000000..15efa66 --- /dev/null +++ b/PortabilityLayer/MacBinary2.cpp @@ -0,0 +1,185 @@ +#include "MacBinary2.h" + +#include "BytePack.h" +#include "ByteUnpack.h" +#include "DataTypes.h" +#include "IOStream.h" +#include "MacFileMem.h" +#include "XModemCRC.h" + +// See: https://files.stairways.com/other/macbinaryii-standard-info.txt + +namespace +{ + namespace MB2FileOffsets + { + const unsigned int Version = 0; + const unsigned int FileNameLength = 1; + const unsigned int FileName = 2; + const unsigned int FileType = 65; + const unsigned int FileCreator = 69; + const unsigned int FinderFlagsHigh = 73; + const unsigned int YPos = 75; + const unsigned int XPos = 77; + const unsigned int Protected = 81; + const unsigned int DataForkSize = 83; + const unsigned int ResourceForkSize = 87; + const unsigned int CreationDate = 91; + const unsigned int ModifiedDate = 95; + const unsigned int CommentLength = 99; + const unsigned int FinderFlagsLow = 101; + const unsigned int DecompressedSize = 116; + const unsigned int SecondaryHeaderLength = 120; + + const unsigned int WriterVersion = 122; + const unsigned int MinVersion = 123; + const unsigned int Checksum = 124; + const unsigned int ContentStart = 128; + }; +} + +namespace PortabilityLayer +{ + void MacBinary2::WriteBin(const MacFileMem *file, IOStream *stream) + { + const MacFileInfo &fileInfo = file->FileInfo(); + + uint8_t mb2Header[128]; + + memset(mb2Header, 0, sizeof(mb2Header)); + + mb2Header[MB2FileOffsets::Version] = 0; + + size_t fileNameLength = fileInfo.m_fileName.Length(); + if (fileNameLength == 0) + { + mb2Header[MB2FileOffsets::FileNameLength] = 1; + mb2Header[MB2FileOffsets::FileName] = '?'; + } + else + { + if (fileNameLength > 63) + fileNameLength = 63; + + mb2Header[MB2FileOffsets::FileNameLength] = static_cast(fileNameLength); + memcpy(mb2Header + MB2FileOffsets::FileName, &fileInfo.m_fileName[0], fileNameLength); + } + + memcpy(mb2Header + MB2FileOffsets::FileType, fileInfo.m_properties.m_fileType, 4); + memcpy(mb2Header + MB2FileOffsets::FileCreator, fileInfo.m_properties.m_fileCreator, 4); + + mb2Header[MB2FileOffsets::FinderFlagsHigh] = static_cast((fileInfo.m_properties.m_finderFlags >> 8) & 0xff); + + BytePack::BigInt16(mb2Header + MB2FileOffsets::YPos, fileInfo.m_properties.m_yPos); + BytePack::BigInt16(mb2Header + MB2FileOffsets::XPos, fileInfo.m_properties.m_xPos); + mb2Header[MB2FileOffsets::Protected] = fileInfo.m_properties.m_protected; + BytePack::BigUInt32(mb2Header + MB2FileOffsets::DataForkSize, fileInfo.m_dataForkSize); + BytePack::BigUInt32(mb2Header + MB2FileOffsets::ResourceForkSize, fileInfo.m_resourceForkSize); + BytePack::BigUInt32(mb2Header + MB2FileOffsets::CreationDate, fileInfo.m_properties.m_creationDate); + BytePack::BigUInt32(mb2Header + MB2FileOffsets::ModifiedDate, fileInfo.m_properties.m_modifiedDate); + + BytePack::BigUInt16(mb2Header + MB2FileOffsets::CommentLength, fileInfo.m_commentSize); + mb2Header[MB2FileOffsets::FinderFlagsLow] = static_cast(fileInfo.m_properties.m_finderFlags & 0xff); + // DecompressedSize is unused + // SecondaryHeaderLength is zero + + mb2Header[MB2FileOffsets::WriterVersion] = 129; + mb2Header[MB2FileOffsets::MinVersion] = 129; + + BytePack::BigUInt16(mb2Header + MB2FileOffsets::Checksum, XModemCRC(mb2Header, 124, 0)); + + stream->Write(mb2Header, 128); + + uint8_t *padding = mb2Header; + memset(padding, 0, 128); + + const size_t dataForkPadding = 127 - ((fileInfo.m_dataForkSize + 127) % 128); + const size_t resourceForkPadding = 127 - ((fileInfo.m_resourceForkSize + 127) % 128); + + stream->Write(file->DataFork(), fileInfo.m_dataForkSize); + stream->Write(padding, dataForkPadding); + stream->Write(file->ResourceFork(), fileInfo.m_resourceForkSize); + stream->Write(padding, resourceForkPadding); + } + + MacFileMem *MacBinary2::ReadBin(IOStream *stream) + { + MacFileInfo fileInfo; + + uint8_t mb2Header[128]; + + if (stream->Read(mb2Header, 128) != 128) + return nullptr; + + if (mb2Header[MB2FileOffsets::Version] != 0) + return nullptr; + + const uint8_t fileNameLength = mb2Header[MB2FileOffsets::FileNameLength]; + if (fileNameLength < 1 || fileNameLength > 63) + return nullptr; + + fileInfo.m_fileName.Set(fileNameLength, reinterpret_cast(mb2Header + MB2FileOffsets::FileName)); + + memcpy(fileInfo.m_properties.m_fileType, mb2Header + MB2FileOffsets::FileType, 4); + memcpy(fileInfo.m_properties.m_fileCreator, mb2Header + MB2FileOffsets::FileCreator, 4); + + fileInfo.m_properties.m_finderFlags = mb2Header[MB2FileOffsets::FinderFlagsHigh] << 8; + + fileInfo.m_properties.m_yPos = ByteUnpack::BigInt16(mb2Header + MB2FileOffsets::YPos); + fileInfo.m_properties.m_xPos = ByteUnpack::BigInt16(mb2Header + MB2FileOffsets::XPos); + fileInfo.m_properties.m_protected = mb2Header[MB2FileOffsets::Protected]; + fileInfo.m_dataForkSize = ByteUnpack::BigUInt32(mb2Header + MB2FileOffsets::DataForkSize); + fileInfo.m_resourceForkSize = ByteUnpack::BigUInt32(mb2Header + MB2FileOffsets::ResourceForkSize); + fileInfo.m_properties.m_creationDate = ByteUnpack::BigUInt32(mb2Header + MB2FileOffsets::CreationDate); + fileInfo.m_properties.m_modifiedDate = ByteUnpack::BigUInt32(mb2Header + MB2FileOffsets::ModifiedDate); + + fileInfo.m_commentSize = ByteUnpack::BigUInt16(mb2Header + MB2FileOffsets::CommentLength); + fileInfo.m_properties.m_finderFlags |= mb2Header[MB2FileOffsets::FinderFlagsLow]; + + if (ByteUnpack::BigInt16(mb2Header + MB2FileOffsets::SecondaryHeaderLength) != 0) + return nullptr; + + uint16_t crc = ByteUnpack::BigUInt16(mb2Header + MB2FileOffsets::Checksum); + + uint16_t expectedCRC = XModemCRC(mb2Header, 124, 0); + + if (fileInfo.m_dataForkSize > SIZE_MAX) + return nullptr; + + if (fileInfo.m_resourceForkSize > SIZE_MAX) + return nullptr; + + uint8_t *dataBuffer = nullptr; + uint8_t *rsrcBuffer = nullptr; + + if (fileInfo.m_dataForkSize != 0) + dataBuffer = new uint8_t[fileInfo.m_dataForkSize]; + + if (fileInfo.m_resourceForkSize != 0) + rsrcBuffer = new uint8_t[fileInfo.m_resourceForkSize]; + + ScopedArray dataContents = dataBuffer; + ScopedArray rsrcContents = rsrcBuffer; + + uint8_t *padding = mb2Header; + + const size_t dataForkPadding = 127 - ((fileInfo.m_dataForkSize + 127) % 128); + const size_t resourceForkPadding = 127 - ((fileInfo.m_resourceForkSize + 127) % 128); + + if (stream->Read(dataBuffer, fileInfo.m_dataForkSize) != fileInfo.m_dataForkSize) + return nullptr; + + if (stream->Read(padding, dataForkPadding) != dataForkPadding) + return nullptr; + + if (stream->Read(rsrcBuffer, fileInfo.m_resourceForkSize) != fileInfo.m_resourceForkSize) + return nullptr; + + if (stream->Read(padding, resourceForkPadding) != resourceForkPadding) + return nullptr; + + // Ignore comment for now + return new MacFileMem(dataBuffer, rsrcBuffer, nullptr, fileInfo); + } +} + diff --git a/PortabilityLayer/MacBinary2.h b/PortabilityLayer/MacBinary2.h new file mode 100644 index 0000000..0f6b198 --- /dev/null +++ b/PortabilityLayer/MacBinary2.h @@ -0,0 +1,18 @@ +#pragma once + +#ifndef __PL_MACBINARY2_H__ +#define __PL_MACBINARY2_H__ + +namespace PortabilityLayer +{ + class IOStream; + class MacFileMem; + + namespace MacBinary2 + { + void WriteBin(const MacFileMem *file, IOStream *stream); + MacFileMem *ReadBin(IOStream *stream); + }; +} + +#endif diff --git a/PortabilityLayer/MacFileInfo.cpp b/PortabilityLayer/MacFileInfo.cpp new file mode 100644 index 0000000..0fc700a --- /dev/null +++ b/PortabilityLayer/MacFileInfo.cpp @@ -0,0 +1,63 @@ +#include "MacFileInfo.h" +#include "PLBigEndian.h" + +#include + +namespace PortabilityLayer +{ + + static const unsigned int kOffsetFileType = 0; + static const unsigned int kOffsetFileCreator = 4; + static const unsigned int kOffsetXPos = 8; + static const unsigned int kOffsetYPos = 10; + static const unsigned int kOffsetFinderFlags = 12; + static const unsigned int kProtected = 14; + static const unsigned int kCreationDate = 15; + static const unsigned int kModifiedDate = 19; + + static const unsigned int kSize = 23; + + uint8_t m_data[kSize]; + + void MacFilePropertiesSerialized::Deserialize(MacFileProperties &props) const + { + memcpy(props.m_fileType, m_data + kOffsetFileType, 4); + memcpy(props.m_fileCreator, m_data + kOffsetFileCreator, 4); + memcpy(&props.m_xPos, m_data + kOffsetXPos, 2); + memcpy(&props.m_yPos, m_data + kOffsetYPos, 2); + memcpy(&props.m_finderFlags, m_data + kOffsetFinderFlags, 2); + memcpy(&props.m_protected, m_data + kProtected, 1); + memcpy(&props.m_creationDate, m_data + kCreationDate, 4); + memcpy(&props.m_modifiedDate, m_data + kModifiedDate, 4); + + PortabilityLayer::ByteSwap::BigInt16(props.m_xPos); + PortabilityLayer::ByteSwap::BigInt16(props.m_yPos); + PortabilityLayer::ByteSwap::BigUInt16(props.m_finderFlags); + PortabilityLayer::ByteSwap::BigUInt32(props.m_creationDate); + PortabilityLayer::ByteSwap::BigUInt32(props.m_modifiedDate); + } + + void MacFilePropertiesSerialized::Serialize(const MacFileProperties &props) + { + int16_t xPos = props.m_xPos; + int16_t yPos = props.m_yPos; + uint16_t finderFlags = props.m_finderFlags; + uint32_t creationDate = props.m_creationDate; + uint32_t modifiedDate = props.m_modifiedDate; + + PortabilityLayer::ByteSwap::BigInt16(xPos); + PortabilityLayer::ByteSwap::BigInt16(yPos); + PortabilityLayer::ByteSwap::BigUInt16(finderFlags); + PortabilityLayer::ByteSwap::BigUInt32(creationDate); + PortabilityLayer::ByteSwap::BigUInt32(modifiedDate); + + memcpy(m_data + kOffsetFileType, props.m_fileType, 4); + memcpy(m_data + kOffsetFileCreator, props.m_fileCreator, 4); + memcpy(m_data + kOffsetXPos, &xPos, 2); + memcpy(m_data + kOffsetYPos, &yPos, 2); + memcpy(m_data + kOffsetFinderFlags, &finderFlags, 2); + memcpy(m_data + kProtected, &props.m_protected, 1); + memcpy(m_data + kCreationDate, &creationDate, 4); + memcpy(m_data + kModifiedDate, &modifiedDate, 4); + } +} diff --git a/PortabilityLayer/MacFileInfo.h b/PortabilityLayer/MacFileInfo.h new file mode 100644 index 0000000..a4d7557 --- /dev/null +++ b/PortabilityLayer/MacFileInfo.h @@ -0,0 +1,89 @@ +#pragma once + +#include "DataTypes.h" +#include "PascalStr.h" + +namespace PortabilityLayer +{ + enum FinderFileFlags + { + FINDER_FILE_FLAG_LOCKED = (1 << 15), + FINDER_FILE_FLAG_INVISIBLE = (1 << 14), + FINDER_FILE_FLAG_BUNDLE = (1 << 13), + FINDER_FILE_FLAG_SYSTEM = (1 << 12), + FINDER_FILE_FLAG_COPY_PROTECTED = (1 << 11), + FINDER_FILE_FLAG_BUSY = (1 << 10), + FINDER_FILE_FLAG_CHANGED = (1 << 9), + FINDER_FILE_FLAG_INITED = (1 << 8), + }; + + struct MacFileProperties + { + MacFileProperties(); + + char m_fileType[4]; + char m_fileCreator[4]; + int16_t m_xPos; + int16_t m_yPos; + uint16_t m_finderFlags; + uint8_t m_protected; + uint32_t m_creationDate; + uint32_t m_modifiedDate; + + void Serialize(void *buffer); + void Deserialize(const void *buffer); + }; + + struct MacFilePropertiesSerialized + { + static const unsigned int kOffsetFileType = 0; + static const unsigned int kOffsetFileCreator = 4; + static const unsigned int kOffsetXPos = 8; + static const unsigned int kOffsetYPos = 10; + static const unsigned int kOffsetFinderFlags = 12; + static const unsigned int kProtected = 14; + static const unsigned int kCreationDate = 15; + static const unsigned int kModifiedDate = 19; + + static const unsigned int kSize = 23; + + uint8_t m_data[kSize]; + + void Deserialize(MacFileProperties &props) const; + void Serialize(const MacFileProperties &props); + }; + + struct MacFileInfo + { + MacFileInfo(); + + PascalStr<64> m_fileName; + uint16_t m_commentSize; + uint32_t m_dataForkSize; + uint32_t m_resourceForkSize; + + MacFileProperties m_properties; + }; +} + +namespace PortabilityLayer +{ + inline MacFileProperties::MacFileProperties() + : m_xPos(0) + , m_yPos(0) + , m_finderFlags(0) + , m_protected(0) + , m_creationDate(0) + , m_modifiedDate(0) + { + m_fileType[0] = m_fileType[1] = m_fileType[2] = m_fileType[3] = '\0'; + m_fileCreator[0] = m_fileCreator[1] = m_fileCreator[2] = m_fileCreator[3] = '\0'; + } + + inline MacFileInfo::MacFileInfo() + : m_dataForkSize(0) + , m_resourceForkSize(0) + , m_commentSize(0) + { + } +} diff --git a/PortabilityLayer/MacFileMem.cpp b/PortabilityLayer/MacFileMem.cpp new file mode 100644 index 0000000..7784ac6 --- /dev/null +++ b/PortabilityLayer/MacFileMem.cpp @@ -0,0 +1,26 @@ +#include "MacFileMem.h" + +namespace PortabilityLayer +{ + MacFileMem::MacFileMem(const uint8_t *dataFork, const uint8_t *resourceFork, const char* comment, const MacFileInfo &fileInfo) + : m_info(fileInfo) + { + uint8_t *buffer = new uint8_t[fileInfo.m_dataForkSize + fileInfo.m_resourceForkSize + fileInfo.m_commentSize + 1]; + m_data.Set(buffer); + + memcpy(buffer, dataFork, fileInfo.m_dataForkSize); + buffer += fileInfo.m_dataForkSize; + + memcpy(buffer, resourceFork, fileInfo.m_resourceForkSize); + buffer += fileInfo.m_resourceForkSize; + + memcpy(buffer, comment, fileInfo.m_commentSize); + buffer += fileInfo.m_commentSize; + + *buffer = 0; + } + + MacFileMem::~MacFileMem() + { + } +} diff --git a/PortabilityLayer/MacFileMem.h b/PortabilityLayer/MacFileMem.h new file mode 100644 index 0000000..d7f2f3d --- /dev/null +++ b/PortabilityLayer/MacFileMem.h @@ -0,0 +1,52 @@ +#pragma once + +#ifndef __PL_MACFILEMEM_H__ +#define __PL_MACFILEMEM_H__ + +#include "DataTypes.h" +#include "MacFileInfo.h" +#include "ScopedArray.h" + +namespace PortabilityLayer +{ + class MacFileMem + { + public: + MacFileMem(const uint8_t *dataFork, const uint8_t *resourceFork, const char* comment, const MacFileInfo &fileInfo); + ~MacFileMem(); + + const MacFileInfo &FileInfo() const; + const uint8_t *DataFork() const; + const uint8_t *ResourceFork() const; + const char *Comment() const; + + private: + ScopedArray m_data; + MacFileInfo m_info; + }; +} + +namespace PortabilityLayer +{ + inline const MacFileInfo &MacFileMem::FileInfo() const + { + return m_info; + } + + inline const uint8_t *MacFileMem::DataFork() const + { + return m_data; + } + + inline const uint8_t *MacFileMem::ResourceFork() const + { + return m_data + m_info.m_dataForkSize; + } + + inline const char *MacFileMem::Comment() const + { + return reinterpret_cast(m_data + m_info.m_dataForkSize + m_info.m_resourceForkSize); + } +} + +#endif diff --git a/PortabilityLayer/MacFileWriteableMem.h b/PortabilityLayer/MacFileWriteableMem.h new file mode 100644 index 0000000..c5a93e3 --- /dev/null +++ b/PortabilityLayer/MacFileWriteableMem.h @@ -0,0 +1,14 @@ +#pragma once +#ifndef __PL_MAC_FILE_WRITEABLE_MEM_H__ +#define __PL_MAC_FILE_WRITEABLE_MEM_H__ + +namespace PortabilityLayer +{ + class MacFileWriteableMem + { + public: + private: + }; +} + +#endif diff --git a/PortabilityLayer/MacRsrcHeader.h b/PortabilityLayer/MacRsrcHeader.h new file mode 100644 index 0000000..9958721 --- /dev/null +++ b/PortabilityLayer/MacRsrcHeader.h @@ -0,0 +1,21 @@ +#pragma once + +#ifndef __PL_MACRSRCHEADER_H__ +#define __PL_MACRSRCHEADER_H__ + +#include "DataTypes.h" + +namespace PortabilityLayer +{ + struct MacRsrcHeader + { + uint32_t m_resDataOffset; + uint32_t m_resMapOffset; + uint32_t m_resDataSize; + uint32_t m_resMapSize; + + void Load(const void *data); + }; +} + +#endif diff --git a/PortabilityLayer/MacRsrcMap.h b/PortabilityLayer/MacRsrcMap.h new file mode 100644 index 0000000..e7d4eb8 --- /dev/null +++ b/PortabilityLayer/MacRsrcMap.h @@ -0,0 +1,20 @@ +#pragma once + +#ifndef __PL_MACRSRCMAP_H__ +#define __PL_MACRSRCMAP_H__ + +#include "DataTypes.h" + +namespace PortabilityLayer +{ + struct MacRsrcMap + { + uint16_t m_resTypeListOffset; + uint16_t m_resNameListOffset; + uint16_t m_numTypesMinusOne; + + void Load(const void *data); + }; +} + +#endif diff --git a/PortabilityLayer/MemReaderStream.cpp b/PortabilityLayer/MemReaderStream.cpp new file mode 100644 index 0000000..651fb71 --- /dev/null +++ b/PortabilityLayer/MemReaderStream.cpp @@ -0,0 +1,110 @@ +#include "MemReaderStream.h" + +#include + +namespace PortabilityLayer +{ + MemReaderStream::MemReaderStream(const void *memStream, size_t size) + : m_bytes(static_cast(memStream)) + , m_size(size) + , m_loc(0) + { + } + + size_t MemReaderStream::Read(void *bytesOut, size_t size) + { + size_t available = m_size - m_loc; + if (size > available) + size = available; + + memcpy(bytesOut, m_bytes + m_loc, size); + m_loc += size; + + return size; + } + + size_t MemReaderStream::Write(const void *bytes, size_t size) + { + return 0; + } + + bool IsSeekable() + { + return true; + } + + bool MemReaderStream::IsSeekable() const + { + return true; + } + + bool MemReaderStream::IsReadOnly() const + { + return true; + } + + bool MemReaderStream::IsWriteOnly() const + { + return false; + } + + bool MemReaderStream::SeekStart(UFilePos_t loc) + { + if (loc > m_size) + m_loc = m_size; + else + m_loc = static_cast(loc); + + return true; + } + + bool MemReaderStream::SeekCurrent(FilePos_t loc) + { + if (loc < 0) + { + if (static_cast(m_loc) + loc < 0) + m_loc = 0; + else + m_loc = static_cast(static_cast(m_loc) + loc); + } + else + { + const size_t available = m_size - m_loc; + if (static_cast(loc) > available) + m_loc = m_size; + else + m_loc = static_cast(static_cast(m_loc) + loc); + } + + return true; + } + + bool MemReaderStream::SeekEnd(UFilePos_t loc) + { + if (m_size < loc) + m_loc = 0; + else + m_loc = m_size - static_cast(loc); + + return true; + } + + bool MemReaderStream::Truncate(UFilePos_t loc) + { + return false; + } + + UFilePos_t MemReaderStream::Size() const + { + return m_size; + } + + UFilePos_t MemReaderStream::Tell() const + { + return static_cast(m_loc); + } + + void MemReaderStream::Close() + { + } +} diff --git a/PortabilityLayer/MemReaderStream.h b/PortabilityLayer/MemReaderStream.h new file mode 100644 index 0000000..4e61b76 --- /dev/null +++ b/PortabilityLayer/MemReaderStream.h @@ -0,0 +1,37 @@ +#pragma once +#ifndef __PL_MEM_READER_STREAM_H__ +#define __PL_MEM_READER_STREAM_H__ + +#include "CoreDefs.h" +#include "IOStream.h" + +namespace PortabilityLayer +{ + class MemReaderStream final : public IOStream + { + public: + MemReaderStream(const void *memStream, size_t size); + + size_t Read(void *bytesOut, size_t size) override; + size_t Write(const void *bytes, size_t size) override; + bool IsSeekable() const override; + bool IsReadOnly() const override; + bool IsWriteOnly() const override; + bool SeekStart(UFilePos_t loc) override; + bool SeekCurrent(FilePos_t loc) override; + bool SeekEnd(UFilePos_t loc) override; + bool Truncate(UFilePos_t loc) override; + UFilePos_t Size() const override; + UFilePos_t Tell() const override; + void Close() override; + + private: + MemReaderStream() PL_DELETED; + + const uint8_t *m_bytes; + size_t m_size; + size_t m_loc; + }; +} + +#endif diff --git a/PortabilityLayer/MemoryManager.cpp b/PortabilityLayer/MemoryManager.cpp new file mode 100644 index 0000000..8d11e16 --- /dev/null +++ b/PortabilityLayer/MemoryManager.cpp @@ -0,0 +1,106 @@ +#include "MemoryManager.h" +#include "MMBlock.h" +#include "MMHandleBlock.h" +#include "ResourceCompiledRef.h" + +#include +#include + +namespace PortabilityLayer +{ + class MemoryManagerImpl final : public MemoryManager + { + public: + void Init() override; + void Shutdown() override; + + void *Alloc(size_t size) override; + void Release(void *buf) override; + + MMHandleBlock *AllocHandle(size_t size) override; + void ReleaseHandle(MMHandleBlock *hdl) override; + + static MemoryManagerImpl *GetInstance(); + + private: + static MemoryManagerImpl ms_instance; + }; + + void MemoryManagerImpl::Init() + { + } + + void MemoryManagerImpl::Shutdown() + { + } + + void *MemoryManagerImpl::Alloc(size_t size) + { + if (size == 0) + return nullptr; + + const size_t mmBlockSizeWithMaxPadding = MMBlock::AlignedSize() + PL_SYSTEM_MEMORY_ALIGNMENT - 1; + if (SIZE_MAX - size < mmBlockSizeWithMaxPadding) + return nullptr; + + uint8_t *buffer = static_cast(malloc(size + mmBlockSizeWithMaxPadding)); + if (!buffer) + return nullptr; + + const intptr_t offsetFromAlignPoint = reinterpret_cast(buffer) & static_cast(PL_SYSTEM_MEMORY_ALIGNMENT - 1); + intptr_t alignPadding = 0; + if (offsetFromAlignPoint != 0) + alignPadding = static_cast(PL_SYSTEM_MEMORY_ALIGNMENT) - offsetFromAlignPoint; + + MMBlock *mmBlock = reinterpret_cast(buffer + alignPadding); + mmBlock->m_offsetFromAllocLocation = static_cast::ValueType_t>(alignPadding); + + return buffer + alignPadding + MMBlock::AlignedSize(); + } + + void MemoryManagerImpl::Release(void *buf) + { + if (!buf) + return; + + const size_t mmBlockSize = MMBlock::AlignedSize(); + + uint8_t *bytes = static_cast(buf); + const MMBlock *mmBlock = reinterpret_cast(bytes - MMBlock::AlignedSize()); + + free(bytes - MMBlock::AlignedSize() - mmBlock->m_offsetFromAllocLocation); + } + + MMHandleBlock *MemoryManagerImpl::AllocHandle(size_t size) + { + void *contents = Alloc(size); + MMHandleBlock *handleBlock = static_cast(Alloc(sizeof(MMHandleBlock))); + + return new (handleBlock) MMHandleBlock(contents, size); + } + + void MemoryManagerImpl::ReleaseHandle(MMHandleBlock *hdl) + { + if (!hdl) + return; + + if (hdl->m_rmSelfRef != nullptr) + hdl->m_rmSelfRef->m_handle = nullptr; + + hdl->~MMHandleBlock(); + + Release(hdl); + } + + MemoryManagerImpl *MemoryManagerImpl::GetInstance() + { + return &ms_instance; + } + + MemoryManagerImpl MemoryManagerImpl::ms_instance; + + MemoryManager *MemoryManager::GetInstance() + { + return MemoryManagerImpl::GetInstance(); + } +} diff --git a/PortabilityLayer/MemoryManager.h b/PortabilityLayer/MemoryManager.h new file mode 100644 index 0000000..7a9de31 --- /dev/null +++ b/PortabilityLayer/MemoryManager.h @@ -0,0 +1,51 @@ +#pragma once +#ifndef __PL_MEMORY_MANAGER_H__ +#define __PL_MEMORY_MANAGER_H__ + +#include + +namespace PortabilityLayer +{ + struct MMHandleBlock; + + class MemoryManager + { + public: + virtual void Init() = 0; + virtual void Shutdown() = 0; + + virtual void *Alloc(size_t size) = 0; + virtual void Release(void *buf) = 0; + + virtual MMHandleBlock *AllocHandle(size_t size) = 0; + virtual void ReleaseHandle(MMHandleBlock *hdl) = 0; + + template + T **NewHandle(); + + static MemoryManager *GetInstance(); + }; +} + +#include +#include "CoreDefs.h" +#include "MMHandleBlock.h" + +namespace PortabilityLayer +{ + template + T **MemoryManager::NewHandle() + { + MMHandleBlock *hdl = this->AllocHandle(sizeof(T)); + if (!hdl) + return nullptr; + + T **objectHdl = reinterpret_cast(hdl); + T *objectPtr = *objectHdl; + new (objectPtr) T(); + + return objectHdl; + } +} + +#endif diff --git a/PortabilityLayer/PLAliases.cpp b/PortabilityLayer/PLAliases.cpp new file mode 100644 index 0000000..2133817 --- /dev/null +++ b/PortabilityLayer/PLAliases.cpp @@ -0,0 +1,7 @@ +#include "PLAliases.h" + +OSErr ResolveAliasFile(FSSpecPtr fsSpec, Boolean recursive, Boolean *outIsFolder, Boolean *outWasAliased) +{ + PL_NotYetImplemented(); + return noErr; +} diff --git a/PortabilityLayer/PLAliases.h b/PortabilityLayer/PLAliases.h new file mode 100644 index 0000000..ee165cc --- /dev/null +++ b/PortabilityLayer/PLAliases.h @@ -0,0 +1,9 @@ +#pragma once +#ifndef __PL_ALIASES_H__ +#define __PL_ALIASES_H__ + +#include "PLCore.h" + +OSErr ResolveAliasFile(FSSpecPtr fsSpec, Boolean recursive, Boolean *outIsFolder, Boolean *outWasAliased); + +#endif diff --git a/PortabilityLayer/PLAppleEvents.cpp b/PortabilityLayer/PLAppleEvents.cpp new file mode 100644 index 0000000..41d6633 --- /dev/null +++ b/PortabilityLayer/PLAppleEvents.cpp @@ -0,0 +1,49 @@ +#include "PLAppleEvents.h" +#include "AEManager.h" + +OSErr AEGetParamDesc(const AppleEvent *evt, AEKeyword keyword, DescType desiredType, AEDescList *descList) +{ + PL_NotYetImplemented(); + return noErr; +} + +OSErr AEDisposeDesc(AEDescList *descList) +{ + PL_NotYetImplemented(); + return noErr; +} + +OSErr AECountItems(AEDescList *descList, long *count) +{ + PL_NotYetImplemented(); + return noErr; +} + +OSErr AEGetNthPtr(AEDescList *descList, long index, DescType desiredType, AEKeyword *keyword, DescType *type, void *data, Size maxSize, Size *actualSize) +{ + PL_NotYetImplemented(); + return noErr; +} + +OSErr AEGetAttributePtr(const AppleEvent *evt, AEKeyword keyword, DescType desiredType, DescType *type, void *data, Size maxSize, Size *actualSize) +{ + PL_NotYetImplemented(); + return noErr; +} + +OSErr AEInstallEventHandler(AEEventClass eventClass, AEEventID eventID, AEEventHandlerUPP handler, UInt32 ref, bool isSysHandler) +{ + PortabilityLayer::AEManager::GetInstance()->InstallEventHandler(eventClass, eventID, handler, ref, isSysHandler); + return noErr; +} + +OSErr AESetInteractionAllowed(AEInteractAllowed level) +{ + PortabilityLayer::AEManager::GetInstance()->SetInteractAllowed(level); + return noErr; +} + +AEEventHandlerUPP NewAEEventHandlerProc(AEEventHandler handler) +{ + return handler; +} diff --git a/PortabilityLayer/PLAppleEvents.h b/PortabilityLayer/PLAppleEvents.h new file mode 100644 index 0000000..7ca1588 --- /dev/null +++ b/PortabilityLayer/PLAppleEvents.h @@ -0,0 +1,32 @@ +#pragma once +#ifndef __PL_APPLEEVENTS_H__ +#define __PL_APPLEEVENTS_H__ + +#include "PLCore.h" +#include "PLAppleEventsCommonTypes.h" + +struct AppleEvent +{ +}; + +struct AEDescList +{ +}; + +struct AEDesc +{ +}; + +typedef AEEventHandler AEEventHandlerUPP; + +OSErr AEGetParamDesc(const AppleEvent *evt, AEKeyword keyword, DescType desiredType, AEDescList *descList); +OSErr AEDisposeDesc(AEDescList *descList); +OSErr AECountItems(AEDescList *descList, long *count); +OSErr AEGetNthPtr(AEDescList *descList, long index, DescType desiredType, AEKeyword *keyword, DescType *type, void *data, Size maxSize, Size *actualSize); +OSErr AEGetAttributePtr(const AppleEvent *evt, AEKeyword keyword, DescType desiredType, DescType *type, void *data, Size maxSize, Size *actualSize); +OSErr AEInstallEventHandler(AEEventClass eventClass, AEEventID eventID, AEEventHandlerUPP handler, UInt32 ref, bool isSysHandler); +OSErr AESetInteractionAllowed(AEInteractAllowed level); + +AEEventHandlerUPP NewAEEventHandlerProc(AEEventHandler handler); + +#endif diff --git a/PortabilityLayer/PLAppleEventsCommonTypes.h b/PortabilityLayer/PLAppleEventsCommonTypes.h new file mode 100644 index 0000000..30b6a38 --- /dev/null +++ b/PortabilityLayer/PLAppleEventsCommonTypes.h @@ -0,0 +1,50 @@ +#pragma once +#ifndef __PL_APPLE_EVENTS_COMMON_TYPES_H__ +#define __PL_APPLE_EVENTS_COMMON_TYPES_H__ + +#include + +struct AppleEvent; + +enum AEError +{ + errAEEventNotHandled = 1, + errAEDescNotFound, + errAEParamMissed, +}; + +enum AEKeyword +{ + keyDirectObject, + keyMissedKeywordAttr, +}; + +enum DescType +{ + typeAEList, + typeFSS, + typeWildCard, +}; + +enum AEEventID +{ + kAEOpenApplication, + kAEOpenDocuments, + kAEPrintDocuments, + kAEQuitApplication +}; + +enum AEEventClass +{ + kCoreEventClass +}; + +enum AEInteractAllowed +{ + kAEInteractUnknown, + kAEInteractWithAll +}; + +typedef int(*AEEventHandler)(const AppleEvent *theAE, AppleEvent *reply, uint32_t ref); + +#endif diff --git a/PortabilityLayer/PLApplication.cpp b/PortabilityLayer/PLApplication.cpp new file mode 100644 index 0000000..44fb61b --- /dev/null +++ b/PortabilityLayer/PLApplication.cpp @@ -0,0 +1,23 @@ +#include "PLApplication.h" +#include "PLCore.h" + +#include +#include + +namespace PortabilityLayer +{ + namespace Utils + { + void MakePStr(unsigned char *dest, size_t sz, const char *src) + { + assert(sz <= 255); + dest[0] = static_cast(sz); + memcpy(dest + 1, src, sz); + } + } +} + +void SysBeep(int duration) +{ + PL_NotYetImplemented(); +} diff --git a/PortabilityLayer/PLApplication.h b/PortabilityLayer/PLApplication.h new file mode 100644 index 0000000..8f6e3bf --- /dev/null +++ b/PortabilityLayer/PLApplication.h @@ -0,0 +1,37 @@ +#pragma once +#ifndef __PL_APPLICATION_H__ +#define __PL_APPLICATION_H__ + +#include "PLCore.h" + +namespace PortabilityLayer +{ + template + class PascalStrLiteral; +} + +namespace PortabilityLayer +{ + namespace Utils + { + void MakePStr(unsigned char *dest, size_t sz, const char *src); + } +} + +void PasStringCopy(const unsigned char *src, unsigned char *dest); + +template +void PasStringCopy(const PortabilityLayer::PascalStrLiteral &src, unsigned char *dest); + +void SysBeep(int duration); + +/////////////////////////////////////////////////////////////////////////////// +#include "PascalStrLiteral.h" + +template +inline void PasStringCopy(const PortabilityLayer::PascalStrLiteral &src, unsigned char *dest) +{ + PortabilityLayer::Utils::MakePStr(dest, TSize - 1, src.GetStr()); +} + +#endif diff --git a/PortabilityLayer/PLBigEndian.h b/PortabilityLayer/PLBigEndian.h new file mode 100644 index 0000000..a70d2bc --- /dev/null +++ b/PortabilityLayer/PLBigEndian.h @@ -0,0 +1,212 @@ +#pragma once +#ifndef __PL_BIG_ENDIAN_H__ +#define __PL_BIG_ENDIAN_H__ + +#include + +template +struct BEInteger +{ +public: + BEInteger(); + BEInteger(const BEInteger &other); + explicit BEInteger(T i); + + operator T() const; + BEInteger &operator=(T value); + + template + BEInteger &operator+=(TOther value); + + template + BEInteger &operator-=(TOther value); + + template + BEInteger &operator*=(TOther value); + + template + BEInteger &operator/=(TOther value); + + template + BEInteger &operator%=(TOther value); + + BEInteger& operator--(); + BEInteger operator--(int); + + BEInteger& operator++(); + BEInteger operator++(int); + +private: + T m_beValue; +}; + +template +struct BEInteger_SwapHelper +{ +}; + +#include "ByteSwap.h" + +template<> +struct BEInteger_SwapHelper +{ + inline static void Swap(int16_t &v) + { + PortabilityLayer::ByteSwap::BigInt16(v); + } +}; + +template<> +struct BEInteger_SwapHelper +{ + inline static void Swap(int32_t &v) + { + PortabilityLayer::ByteSwap::BigInt32(v); + } +}; + +template<> +struct BEInteger_SwapHelper +{ + inline static void Swap(uint16_t &v) + { + PortabilityLayer::ByteSwap::BigUInt16(v); + } +}; + +template<> +struct BEInteger_SwapHelper +{ + inline static void Swap(uint32_t &v) + { + PortabilityLayer::ByteSwap::BigUInt32(v); + } +}; + +// Int16 +template +inline BEInteger::BEInteger() + : m_beValue(0) +{ +} + +template +inline BEInteger::BEInteger(const BEInteger &other) + : m_beValue(other.m_beValue) +{ +} + +template +inline BEInteger::BEInteger(T i) + : m_beValue(i) +{ + BEInteger_SwapHelper::Swap(m_beValue); +} + +template +inline BEInteger::operator T() const +{ + int16_t result = m_beValue; + BEInteger_SwapHelper::Swap(result); + return result; +} + +template +inline BEInteger &BEInteger::operator=(T value) +{ + BEInteger_SwapHelper::Swap(value); + m_beValue = value; + return *this; +} + +template +template +BEInteger &BEInteger::operator+=(TOther value) +{ + BEInteger_SwapHelper::Swap(m_beValue); + m_beValue += value; + BEInteger_SwapHelper::Swap(m_beValue); + return *this; +} + +template +template +BEInteger &BEInteger::operator-=(TOther value) +{ + BEInteger_SwapHelper::Swap(m_beValue); + m_beValue -= value; + BEInteger_SwapHelper::Swap(m_beValue); + return *this; +} + +template +template +BEInteger &BEInteger::operator*=(TOther value) +{ + BEInteger_SwapHelper::Swap(m_beValue); + m_beValue *= value; + BEInteger_SwapHelper::Swap(m_beValue); + return *this; +} + +template +template +BEInteger &BEInteger::operator/=(TOther value) +{ + BEInteger_SwapHelper::Swap(m_beValue); + m_beValue /= value; + BEInteger_SwapHelper::Swap(m_beValue); + return *this; +} + +template +template +BEInteger &BEInteger::operator%=(TOther value) +{ + BEInteger_SwapHelper::Swap(m_beValue); + m_beValue %= value; + BEInteger_SwapHelper::Swap(m_beValue); + return *this; +} + +template +BEInteger& BEInteger::operator--() +{ + BEInteger_SwapHelper::Swap(m_beValue); + m_beValue--; + BEInteger_SwapHelper::Swap(m_beValue); + return *this; +} + +template +BEInteger BEInteger::operator--(int) +{ + BEInteger orig(*this); + --(*this); + return orig; +} + +template +BEInteger& BEInteger::operator++() +{ + BEInteger_SwapHelper::Swap(m_beValue); + m_beValue++; + BEInteger_SwapHelper::Swap(m_beValue); + return *this; +} + +template +BEInteger BEInteger::operator++(int) +{ + BEInteger orig(*this); + ++(*this); + return orig; +} + + +typedef BEInteger BEInt16_t; +typedef BEInteger BEInt32_t; +typedef BEInteger BEUInt16_t; +typedef BEInteger BEUInt32_t; + +#endif diff --git a/PortabilityLayer/PLControlDefinitions.cpp b/PortabilityLayer/PLControlDefinitions.cpp new file mode 100644 index 0000000..c26aef9 --- /dev/null +++ b/PortabilityLayer/PLControlDefinitions.cpp @@ -0,0 +1,72 @@ +#include "PLControlDefinitions.h" + + +int FindControl(Point point, WindowPtr window, ControlHandle *outControl) +{ + PL_NotYetImplemented(); + return 0; +} + +void SetControlValue(ControlHandle control, int value) +{ + PL_NotYetImplemented(); +} + +void SetControlMaximum(ControlHandle control, int value) +{ + PL_NotYetImplemented(); +} + +void MoveControl(ControlHandle control, int x, int y) +{ + PL_NotYetImplemented(); +} + +void SizeControl(ControlHandle control, int width, int height) +{ + PL_NotYetImplemented(); +} + +int GetControlValue(ControlHandle control) +{ + PL_NotYetImplemented(); + return 0; +} + +ControlHandle NewControl(WindowPtr window, const Rect *rect, const PLPasStr &label, Boolean visible, int value, int minValue, int maxValue, int cdef, long userdata) +{ + PL_NotYetImplemented(); + return nullptr; +} + +ControlActionUPP NewControlActionUPP(ControlActionProc proc) +{ + return proc; +} + +void DisposeControlActionUPP(ControlActionUPP upp) +{ +} + +Boolean TrackControl(ControlHandle control, Point point, ControlActionUPP proc) +{ + PL_NotYetImplemented(); + return false; +} + +long GetControlReference(ControlHandle control) +{ + PL_NotYetImplemented(); + return 0; +} + +ControlHandle GetNewControl(int resID, WindowPtr window) +{ + PL_NotYetImplemented(); + return nullptr; +} + +void HiliteControl(ControlHandle control, int unknown) +{ + PL_NotYetImplemented(); +} diff --git a/PortabilityLayer/PLControlDefinitions.h b/PortabilityLayer/PLControlDefinitions.h new file mode 100644 index 0000000..1101733 --- /dev/null +++ b/PortabilityLayer/PLControlDefinitions.h @@ -0,0 +1,49 @@ +#pragma once +#ifndef __PL_CONTROLDEFINITIONS_H__ +#define __PL_CONTROLDEFINITIONS_H__ + +#include "PLCore.h" + +struct Control +{ +}; + +typedef Control *ControlPtr; +typedef ControlPtr *ControlHandle; + +typedef void(*ControlActionProc)(ControlHandle control, short part); +typedef ControlActionProc ControlActionUPP; + +enum BuiltinCDEFs +{ + scrollBarProc = 16, +}; + +enum ControlParts +{ + kControlUpButtonPart = 1, + kControlDownButtonPart, + kControlPageUpPart, + kControlPageDownPart, + kControlIndicatorPart, + kControlButtonPart, +}; + + +int FindControl(Point point, WindowPtr window, ControlHandle *outControl); // Returns part + + +void SetControlValue(ControlHandle control, int value); +void SetControlMaximum(ControlHandle control, int value); +void MoveControl(ControlHandle control, int x, int y); +void SizeControl(ControlHandle control, int width, int height); +int GetControlValue(ControlHandle control); +ControlHandle NewControl(WindowPtr window, const Rect *rect, const PLPasStr &label, Boolean visible, int value, int minValue, int maxValue, int cdef, long userdata); +ControlActionUPP NewControlActionUPP(ControlActionProc proc); +void DisposeControlActionUPP(ControlActionUPP upp); +Boolean TrackControl(ControlHandle control, Point point, ControlActionUPP proc); +long GetControlReference(ControlHandle control); // Returns userdata +ControlHandle GetNewControl(int resID, WindowPtr window); +void HiliteControl(ControlHandle control, int unknown); + +#endif diff --git a/PortabilityLayer/PLCore.cpp b/PortabilityLayer/PLCore.cpp new file mode 100644 index 0000000..702a3fd --- /dev/null +++ b/PortabilityLayer/PLCore.cpp @@ -0,0 +1,614 @@ +#include "PLCore.h" +#include "PLApplication.h" +#include "PLPasStr.h" + +#include "AEManager.h" +#include "DisplayDeviceManager.h" +#include "FileManager.h" +#include "FilePermission.h" +#include "HostSuspendCallArgument.h" +#include "HostSuspendHook.h" +#include "HostDisplayDriver.h" +#include "HostSystemServices.h" +#include "ResourceManager.h" +#include "MemoryManager.h" +#include "MMHandleBlock.h" +#include "ResTypeID.h" +#include "RandomNumberGenerator.h" + +#include + +void InitCursor() +{ +} + +OSErr FSClose(short fsRef) +{ + PL_NotYetImplemented(); + return noErr; +} + +CursHandle GetCursor(int cursorID) +{ + return reinterpret_cast(GetResource('CURS', cursorID)); +} + +CCrsrHandle GetCCursor(int cursorID) +{ + PortabilityLayer::ResourceManager *resManager = PortabilityLayer::ResourceManager::GetInstance(); + PortabilityLayer::MMHandleBlock *ccRes = resManager->GetResource('crsr', cursorID); + + if (!ccRes) + return nullptr; + + PortabilityLayer::MMHandleBlock *copy = PortabilityLayer::MemoryManager::GetInstance()->AllocHandle(ccRes->m_size); + memcpy(copy->m_contents, ccRes->m_contents, ccRes->m_size); + + return reinterpret_cast(copy); +} + +void SetCCursor(CCrsrHandle handle) +{ + PL_NotYetImplemented_Minor(); +} + +void HideCursor() +{ + PortabilityLayer::HostDisplayDriver::GetInstance()->HideCursor(); +} + +void SetCursor(CursPtr cursor) +{ + PL_NotYetImplemented(); +} + +void DisposeCCursor(CCrsrHandle handle) +{ + PL_NotYetImplemented(); +} + +void Delay(int ticks, UInt32 *endTickCount) +{ + if (ticks > 0) + { + PortabilityLayer::HostSuspendCallArgument args[1]; + args[0].m_uint = static_cast(ticks); + + PortabilityLayer::SuspendApplication(PortabilityLayer::HostSuspendCallID_Delay, args, nullptr); + } + + if (endTickCount) + *endTickCount = PortabilityLayer::DisplayDeviceManager::GetInstance()->GetTickCount(); +} + +short Alert(int dialogID, void *unknown) +{ + PL_NotYetImplemented(); + return 0; +} + +Handle GetResource(int32_t resType, int id) +{ + PortabilityLayer::MMHandleBlock *block = PortabilityLayer::ResourceManager::GetInstance()->GetResource(PortabilityLayer::ResTypeID(resType), id); + if (!block) + return nullptr; + + return &block->m_contents; +} + +Handle GetResource(const char(&resTypeLiteral)[5], int id) +{ + PL_NotYetImplemented(); + return nullptr; +} + +short FindWindow(Point point, WindowPtr *window) +{ + PL_NotYetImplemented(); + return 0; +} + +void DragWindow(WindowPtr window, Point start, Rect *bounds) +{ + PL_NotYetImplemented(); +} + +void SendBehind(WindowPtr window, WindowPtr behind) +{ + PL_NotYetImplemented(); +} + +void BringToFront(WindowPtr window) +{ + PL_NotYetImplemented(); +} + +void ShowHide(WindowPtr window, Boolean hide) +{ + PL_NotYetImplemented(); +} + +bool TrackGoAway(WindowPtr window, Point point) +{ + PL_NotYetImplemented(); + return false; +} + +Int32 GrowWindow(WindowPtr window, Point start, Rect *size) +{ + PL_NotYetImplemented(); + return 0; +} + +bool TrackBox(WindowPtr window, Point point, int part) +{ + PL_NotYetImplemented(); + return false; +} + +void ZoomWindow(WindowPtr window, int part, bool bringToFront) +{ + PL_NotYetImplemented(); +} + +void HiliteWindow(WindowPtr window, bool highlighted) +{ + PL_NotYetImplemented(); +} + +void DisposeWindow(WindowPtr window) +{ + PL_NotYetImplemented(); +} + +void GetWindowBounds(WindowPtr window, WindowRegionType windowRegion, Rect *rect) +{ + PL_NotYetImplemented(); +} + +WindowPtr GetNewCWindow(int resID, void *storage, WindowPtr behind) +{ + PL_NotYetImplemented(); + return nullptr; +} + +WindowPtr NewCWindow(void *storage, const Rect *bounds, const PLPasStr &title, Boolean visible, int wdef, WindowPtr behind, Boolean hasCloseBox, long userdata) +{ + PL_NotYetImplemented(); + return nullptr; +} + +WindowPtr NewWindow(void *storage, const Rect *bounds, const PLPasStr &title, Boolean visible, int wdef, WindowPtr behind, Boolean hasCloseBox, long userdata) +{ + PL_NotYetImplemented(); + return nullptr; +} + +void SizeWindow(WindowPtr window, int width, int height, Boolean addToUpdateRegion) +{ + PL_NotYetImplemented(); +} + +void MoveWindow(WindowPtr window, int x, int y, Boolean moveToFront) +{ + PL_NotYetImplemented(); +} + +void ShowWindow(WindowPtr window) +{ + PL_NotYetImplemented(); +} + +void SetWTitle(WindowPtr window, const PLPasStr &title) +{ + PL_NotYetImplemented(); +} + +bool GetNextEvent(int32_t eventMask, EventRecord *event) +{ + PL_NotYetImplemented(); + return noErr; +} + +long MenuSelect(Point point) +{ + PL_NotYetImplemented(); + return noErr; +} + +long MenuKey(int charCode) +{ + PL_NotYetImplemented(); + return noErr; +} + +long TickCount() +{ + return PortabilityLayer::DisplayDeviceManager::GetInstance()->GetTickCount(); +} + +void GetKeys(KeyMap keyMap) +{ + PL_NotYetImplemented(); +} + +short LoWord(Int32 v) +{ + return ((v ^ 0x8000) & 0xffff) - 0x8000; +} + +short HiWord(Int32 v) +{ + return (((v >> 16) ^ 0x8000) & 0xffff) - 0x8000; +} + +bool BitTst(const KeyMap *keyMap, int bit) +{ + PL_NotYetImplemented(); + return noErr; +} + +void NumToString(long number, unsigned char *str) +{ + PL_NotYetImplemented(); +} + +void ParamText(const PLPasStr &title, const PLPasStr &a, const PLPasStr &b, const PLPasStr &c) +{ + PL_NotYetImplemented(); +} + + +UInt32 FreeMem() +{ + PL_NotYetImplemented_Minor(); + return 256 * 1024 * 1024; +} + +OSErr AEProcessAppleEvent(EventRecord *evt) +{ + PL_NotYetImplemented(); + return noErr; +} + +OSErr FindFolder(int refNum, int posType, bool createFolder, short *volumeRef, long *dirID) +{ + switch (posType) + { + case kPreferencesFolderType: + *volumeRef = 0; + *dirID = PortabilityLayer::EVirtualDirectory_Prefs; + return noErr; + default: + return genericErr; + } +} + +void GetIndString(unsigned char *str, int stringsID, int fnameIndex) +{ + PL_NotYetImplemented(); +} + +OSErr PBDirCreate(HFileParam *fileParam, bool asynchronous) +{ + PL_NotYetImplemented(); + return noErr; +} + +OSErr FSMakeFSSpec(int refNum, long dirID, const PLPasStr &fileName, FSSpec *spec) +{ + + if (fileName.Length() >= sizeof(spec->name)) + return genericErr; + + PortabilityLayer::Utils::MakePStr(spec->name, fileName.Length(), fileName.Chars()); + spec->vRefNum = refNum; + spec->parID = dirID; + + if (!PortabilityLayer::FileManager::GetInstance()->FileExists(dirID, fileName)) + return fnfErr; + + return noErr; +} + +OSErr FSpCreate(const FSSpec *spec, UInt32 creator, UInt32 fileType, ScriptCode scriptTag) +{ + PL_NotYetImplemented(); + return noErr; +} + +OSErr FSpDirCreate(const FSSpec *spec, ScriptCode script, long *outDirID) +{ + PL_NotYetImplemented(); + return noErr; +} + +OSErr FSpOpenDF(const FSSpec *spec, int permission, short *refNum) +{ + PortabilityLayer::EFilePermission perm = PortabilityLayer::EFilePermission_Any; + switch (permission) + { + case fsRdPerm: + perm = PortabilityLayer::EFilePermission_Read; + break; + case fsWrPerm: + case fsRdWrPerm: + perm = PortabilityLayer::EFilePermission_ReadWrite; + break; + case fsCurPerm: + perm = PortabilityLayer::EFilePermission_Any; + break; + default: + return permErr; + } + + return PortabilityLayer::FileManager::GetInstance()->OpenFileDF(spec->parID, spec->name, perm, refNum); +} + +OSErr FSWrite(short refNum, long *byteCount, const void *data) +{ + PL_NotYetImplemented(); + return noErr; +} + +OSErr FSRead(short refNum, long *byteCount, void *data) +{ + PL_NotYetImplemented(); + return noErr; +} + +OSErr FSpDelete(const FSSpec *spec) +{ + PL_NotYetImplemented(); + return noErr; +} + +OSErr FSpGetFInfo(const FSSpec *spec, FInfo *finfo) +{ + PL_NotYetImplemented(); + return noErr; +} + +OSErr SetFPos(short refNum, SetFPosWhere where, long offset) +{ + PL_NotYetImplemented(); + return noErr; +} + +OSErr GetEOF(short refNum, long *byteCount) +{ + PL_NotYetImplemented(); + return noErr; +} + +OSErr SetEOF(short refNum, long byteCount) +{ + PL_NotYetImplemented(); + return noErr; +} + +OSErr PBGetCatInfo(CInfoPBPtr paramBlock, Boolean async) +{ + PL_NotYetImplemented(); + return noErr; +} + +short StringWidth(const PLPasStr &str) +{ + PL_NotYetImplemented(); + return 0; +} + +void GetMouse(Point *point) +{ + PL_NotYetImplemented(); +} + +Boolean Button() +{ + PL_NotYetImplemented(); + return false; +} + +Boolean StillDown() +{ + PL_NotYetImplemented(); + return false; +} + +Boolean WaitMouseUp() +{ + PL_NotYetImplemented(); + return false; +} + +void LocalToGlobal(Point *point) +{ + PL_NotYetImplemented(); +} + +void GlobalToLocal(Point *point) +{ + PL_NotYetImplemented(); +} + +short Random() +{ + // Should return with range -32767..32767 + uint32_t bits = PortabilityLayer::RandomNumberGenerator::GetInstance()->GetNextAndAdvance(); + uint16_t rWord = (bits & 0xffff); + if (rWord == 0) + { + rWord = (bits >> 16) & 0xffff; + if (rWord == 0) + return 0; // This should be extremely rare + } + + return static_cast(static_cast(rWord) - 0x8000); +} + +void GetDateTime(UInt32 *dateTime) +{ + PL_NotYetImplemented(); +} + +void GetTime(DateTimeRec *dateTime) +{ + PL_NotYetImplemented(); +} + +UInt32 GetDblTime() +{ + PL_NotYetImplemented_Minor(); + return 30; +} + +void FlushEvents(int mask, int unknown) +{ + PL_NotYetImplemented(); +} + +void ExitToShell() +{ + PL_NotYetImplemented(); +} + +void InvalWindowRect(WindowPtr window, const Rect *rect) +{ + PL_NotYetImplemented(); +} + +Handle NewHandle(Size size) +{ + PortabilityLayer::MMHandleBlock *hBlock = PortabilityLayer::MemoryManager::GetInstance()->AllocHandle(size); + if (!hBlock) + return nullptr; + + return &hBlock->m_contents; +} + +void DisposeHandle(Handle handle) +{ + PL_NotYetImplemented(); +} + +long GetHandleSize(Handle handle) +{ + PL_NotYetImplemented(); + return 0; +} + +void HNoPurge(Handle hdl) +{ +} + +void MoveHHi(Handle hdl) +{ +} + +void HLock(Handle hdl) +{ +} + +void HUnlock(Handle hdl) +{ +} + +OSErr PtrAndHand(const void *data, Handle handle, Size size) +{ + PL_NotYetImplemented(); + return noErr; +} + +void SetHandleSize(Handle hdl, Size newSize) +{ + PL_NotYetImplemented(); +} + +void *NewPtr(Size size) +{ + PL_NotYetImplemented(); + return nullptr; +} + +void *NewPtrClear(Size size) +{ + PL_NotYetImplemented(); + return nullptr; +} + +void DisposePtr(void *ptr) +{ + PL_NotYetImplemented(); +} + +Size MaxMem(Size *growBytes) +{ + PL_NotYetImplemented(); + return 0; +} + +void PurgeSpace(long *totalFree, long *contiguousFree) +{ + PL_NotYetImplemented(); +} + +void HSetState(Handle handle, char state) +{ + PL_NotYetImplemented(); +} + +char HGetState(Handle handle) +{ + PL_NotYetImplemented(); + return 0; +} + +OSErr MemError() +{ + PL_NotYetImplemented(); + return 0; +} + +void BlockMove(const void *src, void *dest, Size size) +{ + PL_NotYetImplemented(); +} + +Boolean WaitNextEvent(int eventMask, EventRecord *eventOut, long sleep, void *unknown) +{ + PL_NotYetImplemented(); + return 0; +} + +void DrawControls(WindowPtr window) +{ + PL_NotYetImplemented(); +} + +void DrawGrowIcon(WindowPtr window) +{ + PL_NotYetImplemented(); +} + +void DebugStr(const PLPasStr &str) +{ + PL_NotYetImplemented(); +} + +void PL_NotYetImplemented() +{ + assert(false); +} + +void PL_NotYetImplemented_Minor() +{ +} + +void PL_Init() +{ + PortabilityLayer::MemoryManager::GetInstance()->Init(); + PortabilityLayer::ResourceManager::GetInstance()->Init(); + PortabilityLayer::DisplayDeviceManager::GetInstance()->Init(); + PortabilityLayer::AEManager::GetInstance()->Init(); +} diff --git a/PortabilityLayer/PLCore.h b/PortabilityLayer/PLCore.h new file mode 100644 index 0000000..d15e086 --- /dev/null +++ b/PortabilityLayer/PLCore.h @@ -0,0 +1,411 @@ +#pragma once +#ifndef __PL_CORE_H__ +#define __PL_CORE_H__ + +#include "DataTypes.h" +#include "PLErrorCodes.h" + +#ifdef _MSC_VER +#pragma warning(error:4311) // Pointer truncation to int +#endif + +namespace PortabilityLayer +{ + struct MMHandleBlock; +} + +typedef uint8_t Boolean; +typedef uint8_t Byte; +typedef uint8_t UInt8; +typedef int16_t SInt16; +typedef int32_t Int32; +typedef uint32_t UInt32; +typedef int OSErr; + +typedef size_t Size; + +typedef unsigned char Str15[16]; +typedef unsigned char Str31[32]; +typedef unsigned char Str63[64]; +typedef unsigned char Str27[28]; +typedef unsigned char Str32[33]; +typedef unsigned char Str255[256]; +typedef unsigned char *StringPtr; + +class PLPasStr; + +#define PL_DEAD(n) ((void)0) + +typedef struct Point +{ + short v; + short h; +} Point; + +// FIXME: Audit +struct Rect +{ + short top; + short left; + short bottom; + short right; +}; + +struct FinderInfoBlock +{ + Int32 fdType; + Int32 fdCreator; +}; + +struct FileInfoBlock +{ + void *ioCompletion; + short ioVRefNum; // Volume ref num + StringPtr ioNamePtr; + int ioFDirIndex; // Index (1-based!) + long ioDirID; // Input: Directory ID Output: File ID + int ioFlAttrib; // File attributes + FinderInfoBlock ioFlFndrInfo; + long ioFlParID; +}; + +struct DirInfoBlock +{ + void *ioCompletion; + short ioVRefNum; + long ioDrDirID; + unsigned char *ioNamePtr; + short ioFDirIndex; + int ioFlAttrib; +}; + +struct CInfoPBRec +{ + FileInfoBlock hFileInfo; + DirInfoBlock dirInfo; +}; + +struct Cursor +{ +}; + +struct CCursor +{ +}; + +struct CGraf +{ +}; + +struct Window +{ +}; + +struct Menu +{ +}; + +struct Region +{ +}; + +struct DateTimeRec +{ + int month; + int hour; + int minute; +}; + +struct VersionRecord +{ + Byte majorVer; + Byte minorVer; + Byte stage; + Byte rcVer; + + short countryCode; + Str255 shortVersion; + Str255 unused; +}; + +struct ColorSpec +{ + uint8_t r, g, b; +}; + +struct FSSpec +{ + Str63 name; + UInt32 parID; // Directory ID + SInt16 vRefNum; // Volume ID +}; + +typedef struct FInfo +{ + UInt32 fdType; +} FInfo; + +struct HFileParam +{ + int ioVRefNum; + long ioDirID; + const unsigned char *ioNamePtr; + void *ioCompletion; +}; + +struct EventRecord +{ + Point where; + uint32_t when; + intptr_t message; + int what; + int modifiers; +}; + +typedef CGraf *CGrafPtr; +typedef CGrafPtr GWorldPtr; +typedef Window *WindowPtr; +typedef Cursor *CursPtr; +typedef CCursor *CCrsrPtr; +typedef FSSpec *FSSpecPtr; +typedef Menu *MenuPtr; +typedef Region *RgnPtr; +typedef CInfoPBRec *CInfoPBPtr; +typedef VersionRecord *VersRecPtr; + +typedef CursPtr *CursHandle; +typedef CCrsrPtr *CCrsrHandle; +typedef MenuPtr *MenuHandle; +typedef RgnPtr *RgnHandle; +typedef VersRecPtr *VersRecHndl; + +typedef void *Ptr; +typedef Ptr *Handle; + +typedef WindowPtr WindowRef; // wtf? + + +typedef unsigned char KeyMap[16]; + + +enum RegionID +{ + inDesk, + inMenuBar, + inSysWindow, + inContent, + inDrag, + inGrow, + inGoAway, + inZoomIn, + inZoomOut, +}; + +enum WindowRegionType +{ + kWindowContentRgn +}; + +enum EventCode +{ + mouseDown, + mouseUp, + keyDown, + autoKey, + updateEvt, + osEvt, + kHighLevelEvent, +}; + +enum ScriptCode +{ + smSystemScript, +}; + +enum FindFolderRefNum +{ + kOnSystemDisk, +}; + +enum FindFolderType +{ + kPreferencesFolderType, +}; + +enum SetFPosWhere +{ + fsFromStart, +}; + +enum BuiltinWDEFs +{ + noGrowDocProc = 4, // Movable, not resizable +}; + +static const int everyEvent = -1; + +static const int iBeamCursor = 1; +static const int watchCursor = 4; + +static const int charCodeMask = 0xff; +static const int keyCodeMask = 0xff00; + +static const int shiftKey = 0x1; +static const int cmdKey = 0x2; // Ctrl +static const int optionKey = 0x4; // Alt + +static const bool kCreateFolder = true; +static const bool kDontCreateFolder = false; + +static const int fsRdPerm = 1; +static const int fsWrPerm = 2; +static const int fsRdWrPerm = (fsRdPerm | fsWrPerm); +static const int fsCurPerm = 4; // Any allowed permission + +static const Boolean TRUE = 1; +static const Boolean FALSE = 0; + +#define nil nullptr + +static const int nullEvent = 0; + +//void FlushEvents(int eventMask, int stopMask); + +OSErr FSClose(short fsRef); + +void InitCursor(); +CursHandle GetCursor(int cursorID); +CCrsrHandle GetCCursor(int cursorID); +void SetCCursor(CCrsrHandle handle); +void HideCursor(); + +void SetCursor(CursPtr cursor); + +void DisposeCCursor(CCrsrHandle handle); + +void Delay(int ticks, UInt32 *endTickCount); +short Alert(int dialogID, void *unknown); + +Handle GetResource(int32_t resType, int id); +Handle GetResource(const char(&resTypeLiteral)[5], int id); + +short FindWindow(Point point, WindowPtr *window); // Translates global coordinates to window coordinates, returns a region ID +void DragWindow(WindowPtr window, Point start, Rect *bounds); // Drags the window (probably not implemented) +void SendBehind(WindowPtr window, WindowPtr behind); +void BringToFront(WindowPtr window); +void ShowHide(WindowPtr window, Boolean hide); +bool TrackGoAway(WindowPtr window, Point point); // Returns true if the close box was actually clicked (?) +Int32 GrowWindow(WindowPtr window, Point start, Rect *size); +bool TrackBox(WindowPtr window, Point point, int part); // Returns true if grow/shrink box was clicked (part corresponds to type) +void ZoomWindow(WindowPtr window, int part, bool bringToFront); +void HiliteWindow(WindowPtr window, bool highlighted); +void DisposeWindow(WindowPtr window); +void GetWindowBounds(WindowPtr window, WindowRegionType windowRegion, Rect *rect); + +WindowPtr GetNewCWindow(int resID, void *storage, WindowPtr behind); +WindowPtr NewCWindow(void *storage, const Rect *bounds, const PLPasStr &title, Boolean visible, int wdef, WindowPtr behind, Boolean hasCloseBox, long userdata); +WindowPtr NewWindow(void *storage, const Rect *bounds, const PLPasStr &title, Boolean visible, int wdef, WindowPtr behind, Boolean hasCloseBox, long userdata); +void SizeWindow(WindowPtr window, int width, int height, Boolean addToUpdateRegion); +void MoveWindow(WindowPtr window, int x, int y, Boolean moveToFront); +void ShowWindow(WindowPtr window); +void SetWTitle(WindowPtr window, const PLPasStr &title); + +bool GetNextEvent(int32_t eventMask, EventRecord *event); + +long MenuSelect(Point point); // Breaks into menu select routine (in practice we'll just forward one from the queue?) + +long MenuKey(int charCode); +long TickCount(); +void GetKeys(KeyMap keyMap); + +short LoWord(Int32 v); +short HiWord(Int32 v); +bool BitTst(const KeyMap *keyMap, int bit); + +void NumToString(long number, unsigned char *str); +void ParamText(const PLPasStr &title, const PLPasStr &a, const PLPasStr &b, const PLPasStr &c); + +UInt32 FreeMem(); + +OSErr AEProcessAppleEvent(EventRecord *evt); + +OSErr FindFolder(int refNum, int posType, bool createFolder, short *volumeRef, long *dirID); +void GetIndString(unsigned char *str, int stringsID, int fnameIndex); // Fetches a string resource of some sort +OSErr PBDirCreate(HFileParam *fileParam, bool asynchronous); + +OSErr FSMakeFSSpec(int refNum, long dirID, const PLPasStr &fileName, FSSpec *spec); +OSErr FSpCreate(const FSSpec *spec, UInt32 creator, UInt32 fileType, ScriptCode scriptTag); +OSErr FSpDirCreate(const FSSpec *spec, ScriptCode script, long *outDirID); +OSErr FSpOpenDF(const FSSpec *spec, int permission, short *refNum); +OSErr FSWrite(short refNum, long *byteCount, const void *data); +OSErr FSRead(short refNum, long *byteCount, void *data); +OSErr FSpDelete(const FSSpec *spec); +OSErr FSpGetFInfo(const FSSpec *spec, FInfo *finfo); +OSErr SetFPos(short refNum, SetFPosWhere where, long offset); +OSErr GetEOF(short refNum, long *byteCount); +OSErr SetEOF(short refNum, long byteCount); + +OSErr PBGetCatInfo(CInfoPBPtr paramBlock, Boolean async); + +short StringWidth(const PLPasStr &str); + +void GetMouse(Point *point); +Boolean Button(); // Returns true if there's a mouse down event in the queue +Boolean StillDown(); +Boolean WaitMouseUp(); + +void LocalToGlobal(Point *point); +void GlobalToLocal(Point *point); +short Random(); +void GetDateTime(UInt32 *dateTime); +void GetTime(DateTimeRec *dateTime); +UInt32 GetDblTime(); + +void FlushEvents(int mask, int unknown); +void ExitToShell(); + +void InvalWindowRect(WindowPtr window, const Rect *rect); + +Handle NewHandle(Size size); +void DisposeHandle(Handle handle); +long GetHandleSize(Handle handle); + +void HNoPurge(Handle hdl); // Marks a handle as not purgeable +void MoveHHi(Handle hdl); // Relocates a block to the top of the heap +void HLock(Handle hdl); // Disable relocation +void HUnlock(Handle hdl); // Re-enable relocation + +OSErr PtrAndHand(const void *data, Handle handle, Size size); // Appends data to the end of a handle +void SetHandleSize(Handle hdl, Size newSize); + +void *NewPtr(Size size); +void *NewPtrClear(Size size); +void DisposePtr(void *ptr); + +Size MaxMem(Size *growBytes); +void PurgeSpace(long *totalFree, long *contiguousFree); + +void HSetState(Handle handle, char state); +char HGetState(Handle handle); + +OSErr MemError(); + +void BlockMove(const void *src, void *dest, Size size); + +Boolean WaitNextEvent(int eventMask, EventRecord *eventOut, long sleep, void *unknown); + +void DrawControls(WindowPtr window); +void DrawGrowIcon(WindowPtr window); + +void DebugStr(const PLPasStr &str); + +static const Boolean PL_TRUE = 1; +static const Boolean PL_FALSE = 0; + + +void PL_NotYetImplemented(); +void PL_NotYetImplemented_Minor(); +void PL_Init(); + + +#endif diff --git a/PortabilityLayer/PLDialogs.cpp b/PortabilityLayer/PLDialogs.cpp new file mode 100644 index 0000000..6d2d374 --- /dev/null +++ b/PortabilityLayer/PLDialogs.cpp @@ -0,0 +1,84 @@ +#include "PLDialogs.h" + +void DrawDialog(DialogPtr dialog) +{ + PL_NotYetImplemented(); +} + +WindowPtr GetDialogWindow(DialogPtr dialog) +{ + PL_NotYetImplemented(); + return nullptr; +} + +DialogPtr GetNewDialog(int resID, void *unknown, WindowPtr behind) +{ + PL_NotYetImplemented(); + return nullptr; +} + +CGrafPtr GetDialogPort(DialogPtr dialog) +{ + PL_NotYetImplemented(); + return nullptr; +} + +void GetDialogItem(DialogPtr dialog, int index, short *itemType, Handle *itemHandle, Rect *itemRect) +{ + PL_NotYetImplemented(); +} + +void GetDialogItemText(Handle handle, StringPtr str) +{ + PL_NotYetImplemented(); +} + +void SetDialogItem(DialogPtr dialog, int index, short itemType, Handle itemHandle, const Rect *itemRect) +{ + PL_NotYetImplemented(); +} + +void SetDialogItemText(Handle handle, const PLPasStr &str) +{ + PL_NotYetImplemented(); +} + +void SelectDialogItemText(DialogPtr dialog, int item, int firstSelChar, int lastSelCharExclusive) +{ + PL_NotYetImplemented(); +} + +ModalFilterUPP NewModalFilterUPP(ModalFilterUPP func) +{ + return func; +} + +void ModalDialog(ModalFilterUPP filter, short *item) +{ + PL_NotYetImplemented(); +} + +void DisposeDialog(DialogPtr dialog) +{ + PL_NotYetImplemented(); +} + +void DisposeModalFilterUPP(ModalFilterUPP upp) +{ + PL_NotYetImplemented(); +} + +void ShowDialogItem(DialogPtr dialog, int item) +{ + PL_NotYetImplemented(); +} + +void HideDialogItem(DialogPtr dialog, int item) +{ + PL_NotYetImplemented(); +} + +void TETextBox(const PLPasStr &str, short len, const Rect *rect, TEMode teMode) +{ + PL_NotYetImplemented(); +} diff --git a/PortabilityLayer/PLDialogs.h b/PortabilityLayer/PLDialogs.h new file mode 100644 index 0000000..b4805ad --- /dev/null +++ b/PortabilityLayer/PLDialogs.h @@ -0,0 +1,57 @@ +#pragma once +#ifndef __PL_DIALOGS_H__ +#define __PL_DIALOGS_H__ + +#include "PLCore.h" + +class PLPasStr; + +struct Dialog +{ +}; + +struct DialogTemplate +{ + // FIXME: Audit + Rect boundsRect; +}; + +enum TEMode +{ + teCenter +}; + +typedef Dialog *DialogPtr; + +typedef DialogTemplate *DialogTPtr; +typedef DialogTPtr *DialogTHndl; + + +typedef Boolean(*ModalFilterUPP)(DialogPtr dial, EventRecord *event, short *item); + +void DrawDialog(DialogPtr dialog); +WindowPtr GetDialogWindow(DialogPtr dialog); +DialogPtr GetNewDialog(int resID, void *unknown, WindowPtr behind); +CGrafPtr GetDialogPort(DialogPtr dialog); + +void GetDialogItem(DialogPtr dialog, int index, short *itemType, Handle *itemHandle, Rect *itemRect); +void GetDialogItemText(Handle handle, StringPtr str); + +void SetDialogItem(DialogPtr dialog, int index, short itemType, Handle itemHandle, const Rect *itemRect); +void SetDialogItemText(Handle handle, const PLPasStr &str); + +void SelectDialogItemText(DialogPtr dialog, int item, int firstSelChar, int lastSelCharExclusive); + +ModalFilterUPP NewModalFilterUPP(ModalFilterUPP func); + +void ModalDialog(ModalFilterUPP filter, short *item); + +void DisposeDialog(DialogPtr dialog); +void DisposeModalFilterUPP(ModalFilterUPP upp); + +void ShowDialogItem(DialogPtr dialog, int item); +void HideDialogItem(DialogPtr dialog, int item); + +void TETextBox(const PLPasStr &str, short len, const Rect *rect, TEMode teMode); + +#endif diff --git a/PortabilityLayer/PLErrorCodes.h b/PortabilityLayer/PLErrorCodes.h new file mode 100644 index 0000000..abc5d58 --- /dev/null +++ b/PortabilityLayer/PLErrorCodes.h @@ -0,0 +1,32 @@ +#pragma once +#ifndef __PL_ERROR_CODES_H__ +#define __PL_ERROR_CODES_H__ + +enum ErrorCodes +{ + noErr, + + fnfErr, + eofErr, + userCanceledErr, + dirFulErr, + dskFulErr, + ioErr, + bdNamErr, + fnOpnErr, + mFulErr, + tmfoErr, + wPrErr, + fLckdErr, + vLckdErr, + fBsyErr, + dupFNErr, + opWrErr, + volOffLinErr, + permErr, + wrPermErr, + + genericErr, +}; + +#endif diff --git a/PortabilityLayer/PLFolders.h b/PortabilityLayer/PLFolders.h new file mode 100644 index 0000000..50e9667 --- /dev/null +++ b/PortabilityLayer/PLFolders.h @@ -0,0 +1 @@ +#pragma once diff --git a/PortabilityLayer/PLLowMem.h b/PortabilityLayer/PLLowMem.h new file mode 100644 index 0000000..50e9667 --- /dev/null +++ b/PortabilityLayer/PLLowMem.h @@ -0,0 +1 @@ +#pragma once diff --git a/PortabilityLayer/PLMacTypes.h b/PortabilityLayer/PLMacTypes.h new file mode 100644 index 0000000..50e9667 --- /dev/null +++ b/PortabilityLayer/PLMacTypes.h @@ -0,0 +1 @@ +#pragma once diff --git a/PortabilityLayer/PLMenus.cpp b/PortabilityLayer/PLMenus.cpp new file mode 100644 index 0000000..9a842a3 --- /dev/null +++ b/PortabilityLayer/PLMenus.cpp @@ -0,0 +1,53 @@ +#include "PLMenus.h" + + +MenuHandle GetMenu(int resID) +{ + PL_NotYetImplemented(); + return nullptr; +} + +void AppendResMenu(MenuHandle menu, UInt32 resType) +{ + PL_NotYetImplemented(); +} + +void InsertMenu(MenuHandle menu, int index) +{ + PL_NotYetImplemented(); +} + +void DeleteMenu(int menuID) +{ + PL_NotYetImplemented(); +} + +void DrawMenuBar() +{ + PL_NotYetImplemented(); +} + +void HiliteMenu(int menu) +{ + PL_NotYetImplemented(); +} + +void EnableMenuItem(MenuHandle menu, int index) +{ + PL_NotYetImplemented(); +} + +void DisableMenuItem(MenuHandle menu, int index) +{ + PL_NotYetImplemented(); +} + +void CheckMenuItem(MenuHandle menu, int index, Boolean checked) +{ + PL_NotYetImplemented(); +} + +void SetMenuItemText(MenuHandle menu, int index, const PLPasStr &text) +{ + PL_NotYetImplemented(); +} diff --git a/PortabilityLayer/PLMenus.h b/PortabilityLayer/PLMenus.h new file mode 100644 index 0000000..3a89659 --- /dev/null +++ b/PortabilityLayer/PLMenus.h @@ -0,0 +1,21 @@ +#pragma once +#ifndef __PL_MENUS_H__ +#define __PL_MENUS_H__ + +#include "PLCore.h" + +class PLPasStr; + +MenuHandle GetMenu(int resID); +void AppendResMenu(MenuHandle menu, UInt32 resType); // Appends all menus of a given type +void InsertMenu(MenuHandle menu, int index); +void DeleteMenu(int menuID); // ??? +void DrawMenuBar(); +void HiliteMenu(int menu); + +void EnableMenuItem(MenuHandle menu, int index); +void DisableMenuItem(MenuHandle menu, int index); +void CheckMenuItem(MenuHandle menu, int index, Boolean checked); +void SetMenuItemText(MenuHandle menu, int index, const PLPasStr &text); + +#endif diff --git a/PortabilityLayer/PLMovies.cpp b/PortabilityLayer/PLMovies.cpp new file mode 100644 index 0000000..410532a --- /dev/null +++ b/PortabilityLayer/PLMovies.cpp @@ -0,0 +1,141 @@ +#include "PLMovies.h" + +OSErr EnterMovies() +{ + PL_NotYetImplemented(); + return noErr; +} + +UserData GetMovieUserData(Movie movie) +{ + PL_NotYetImplemented(); + return nullptr; +} + +int CountUserDataType(UserData userData, UInt32 type) +{ + PL_NotYetImplemented(); + return 0; +} + +OSErr RemoveUserData(UserData userData, UInt32 type, int index) +{ + PL_NotYetImplemented(); + return noErr; +} + +OSErr AddUserData(UserData userData, Handle data, UInt32 type) +{ + PL_NotYetImplemented(); + return noErr; +} + +OSErr OpenMovieFile(const FSSpec *fsSpec, short *outRefNum, int permissions) +{ + PL_NotYetImplemented(); + return noErr; +} + +OSErr NewMovieFromFile(Movie *movie, short refNum, const short *optResId, StringPtr resName, int flags, Boolean *unused) +{ + PL_NotYetImplemented(); + return noErr; +} + +OSErr CloseMovieFile(short refNum) +{ + PL_NotYetImplemented(); + return noErr; +} + +OSErr GoToBeginningOfMovie(Movie movie) +{ + PL_NotYetImplemented(); + return noErr; +} + +OSErr LoadMovieIntoRam(Movie movie, TimeValue time, TimeValue duration, int flags) +{ + PL_NotYetImplemented(); + return noErr; +} + +TimeValue GetMovieTime(Movie movie, TimeRecord *outCurrentTime) +{ + PL_NotYetImplemented(); + return 0; +} + +TimeValue GetMovieDuration(Movie movie) +{ + PL_NotYetImplemented(); + return 0; +} + +OSErr PrerollMovie(Movie movie, TimeValue time, UInt32 rate) +{ + PL_NotYetImplemented(); + return noErr; +} + +TimeBase GetMovieTimeBase(Movie movie) +{ + PL_NotYetImplemented(); + return nullptr; +} + +OSErr SetTimeBaseFlags(TimeBase timeBase, int flags) +{ + PL_NotYetImplemented(); + return noErr; +} + +void SetMovieMasterTimeBase(Movie movie, TimeBase timeBase, void *unused) +{ + PL_NotYetImplemented(); +} + +void GetMovieBox(Movie movie, Rect *rect) +{ + PL_NotYetImplemented(); +} + +void StopMovie(Movie movie) +{ + PL_NotYetImplemented(); +} + +void DisposeMovie(Movie movie) +{ + PL_NotYetImplemented(); +} + +void SetMovieGWorld(Movie movie, CGrafPtr graf, void *unknown) +{ + PL_NotYetImplemented(); +} + +void SetMovieActive(Movie movie, Boolean active) +{ + PL_NotYetImplemented(); +} + +void StartMovie(Movie movie) +{ + PL_NotYetImplemented(); +} + +void MoviesTask(Movie movie, int unknown) +{ + PL_NotYetImplemented(); +} + +void SetMovieBox(Movie movie, const Rect *rect) +{ + PL_NotYetImplemented(); +} + +void SetMovieDisplayClipRgn(Movie movie, RgnHandle region) +{ + PL_NotYetImplemented(); +} diff --git a/PortabilityLayer/PLMovies.h b/PortabilityLayer/PLMovies.h new file mode 100644 index 0000000..9b778ff --- /dev/null +++ b/PortabilityLayer/PLMovies.h @@ -0,0 +1,64 @@ +#pragma once +#ifndef __PL_MOVIES_H__ +#define __PL_MOVIES_H__ + +#include "PLApplication.h" + +struct UserDataObject; +struct TimeBaseObject; +struct MovieObject; + +struct UserDataBackingStorage +{ +}; + +typedef int64_t TimeValue; + +struct TimeRecord +{ +}; + +enum MovieFlags +{ + newMovieActive = 1, + flushFromRam = 2, +}; + +enum TimeBaseFlags +{ + loopTimeBase = 1, +}; + +typedef UserDataObject *UserData; +typedef TimeBaseObject *TimeBase; +typedef MovieObject *Movie; + + +OSErr EnterMovies(); + +UserData GetMovieUserData(Movie movie); +int CountUserDataType(UserData userData, UInt32 type); +OSErr RemoveUserData(UserData userData, UInt32 type, int index); // Index is 1-based +OSErr AddUserData(UserData userData, Handle data, UInt32 type); +OSErr OpenMovieFile(const FSSpec *fsSpec, short *outRefNum, int permissions); +OSErr NewMovieFromFile(Movie *movie, short refNum, const short *optResId, StringPtr resName, int flags, Boolean *unused); +OSErr CloseMovieFile(short refNum); +OSErr GoToBeginningOfMovie(Movie movie); +OSErr LoadMovieIntoRam(Movie movie, TimeValue time, TimeValue duration, int flags); +TimeValue GetMovieTime(Movie movie, TimeRecord *outCurrentTime); +TimeValue GetMovieDuration(Movie movie); +OSErr PrerollMovie(Movie movie, TimeValue time, UInt32 rate); +TimeBase GetMovieTimeBase(Movie movie); +OSErr SetTimeBaseFlags(TimeBase timeBase, int flags); +void SetMovieMasterTimeBase(Movie movie, TimeBase timeBase, void *unused); +void GetMovieBox(Movie movie, Rect *rect); +void StopMovie(Movie movie); +void DisposeMovie(Movie movie); +void SetMovieGWorld(Movie movie, CGrafPtr graf, void *unknown); +void SetMovieActive(Movie movie, Boolean active); +void StartMovie(Movie movie); +void MoviesTask(Movie movie, int unknown); +void SetMovieBox(Movie movie, const Rect *rect); +void SetMovieDisplayClipRgn(Movie movie, RgnHandle region); + +#endif diff --git a/PortabilityLayer/PLNavigation.cpp b/PortabilityLayer/PLNavigation.cpp new file mode 100644 index 0000000..0fccea4 --- /dev/null +++ b/PortabilityLayer/PLNavigation.cpp @@ -0,0 +1,13 @@ +#include "PLNavigation.h" + +OSErr NavGetDefaultDialogOptions(NavDialogOptions *options) +{ + PL_NotYetImplemented(); + return noErr; +} + +OSErr NavPutFile(AEDesc *defaultLocation, NavReplyRecord *reply, NavDialogOptions *dlgOptions, void *unknown, UInt32 fileType, UInt32 fileCreator, void *unknown2) +{ + PL_NotYetImplemented(); + return noErr; +} diff --git a/PortabilityLayer/PLNavigation.h b/PortabilityLayer/PLNavigation.h new file mode 100644 index 0000000..a19305b --- /dev/null +++ b/PortabilityLayer/PLNavigation.h @@ -0,0 +1,27 @@ +#pragma once +#ifndef __PL_NAVIGATION_H__ +#define __PL_NAVIGATION_H__ + +#include "PLCore.h" +#include "PLAppleEvents.h" + +struct AEDesc; + +struct NavReplyRecord +{ + bool validRecord; + bool replacing; + int vRefNum; + long parID; // Directory? + AEDescList selection; + ScriptCode keyScript; // ??? +}; + +struct NavDialogOptions +{ +}; + +OSErr NavGetDefaultDialogOptions(NavDialogOptions *options); +OSErr NavPutFile(AEDesc *defaultLocation, NavReplyRecord *reply, NavDialogOptions *dlgOptions, void *unknown, UInt32 fileType, UInt32 fileCreator, void *unknown2); + +#endif diff --git a/PortabilityLayer/PLNumberFormatting.cpp b/PortabilityLayer/PLNumberFormatting.cpp new file mode 100644 index 0000000..f979f78 --- /dev/null +++ b/PortabilityLayer/PLNumberFormatting.cpp @@ -0,0 +1,52 @@ +#include "PLNumberFormatting.h" +#include "PLPasStr.h" + +void StringToNum(const PLPasStr &str, long *num) +{ + if (str.Length() == 0) + { + num = 0; + return; + } + + const size_t len = str.Length(); + const char *chars = str.Chars(); + const char *charsEnd = chars + len; + + long result = 0; + + if (chars[0] == '-') + { + chars++; + + while (chars != charsEnd) + { + const char c = *chars++; + + if (c < '0' || c > '9') + { + num = 0; + return; + } + + result = result * 10 - (c - '0'); + } + } + else + { + while (chars != charsEnd) + { + const char c = *chars++; + + if (c < '0' || c > '9') + { + num = 0; + return; + } + + result = result * 10 + (c - '0'); + } + } + + *num = result; +} diff --git a/PortabilityLayer/PLNumberFormatting.h b/PortabilityLayer/PLNumberFormatting.h new file mode 100644 index 0000000..61f1602 --- /dev/null +++ b/PortabilityLayer/PLNumberFormatting.h @@ -0,0 +1,9 @@ +#pragma once +#ifndef __PL_NUMBERFORMATTING_H__ +#define __PL_NUMBERFORMATTING_H__ + +class PLPasStr; + +void StringToNum(const PLPasStr &str, long *num); + +#endif diff --git a/PortabilityLayer/PLPalettes.h b/PortabilityLayer/PLPalettes.h new file mode 100644 index 0000000..8f4e86d --- /dev/null +++ b/PortabilityLayer/PLPalettes.h @@ -0,0 +1,5 @@ +#pragma once +#ifndef __PL_PALETTES_H__ +#define __PL_PALETTES_H__ + +#endif diff --git a/PortabilityLayer/PLPasStr.h b/PortabilityLayer/PLPasStr.h new file mode 100644 index 0000000..0edba13 --- /dev/null +++ b/PortabilityLayer/PLPasStr.h @@ -0,0 +1,79 @@ +#pragma once +#ifndef __PL_PASSTR_H__ +#define __PL_PASSTR_H__ + +#include "CoreDefs.h" + +namespace PortabilityLayer +{ + template + class PascalStrLiteral; +} + +class PLPasStr +{ +public: + PLPasStr(); + PLPasStr(const unsigned char *str); + template PLPasStr(const PortabilityLayer::PascalStrLiteral &pstrLiteral); + PLPasStr(const PLPasStr &other); + PLPasStr(unsigned char length, const char *str); + + unsigned char Length() const; + const char *Chars() const; + const unsigned char *UChars() const; + +private: + unsigned char m_length; + const char *m_chars; +}; + +#include "PascalStrLiteral.h" + +inline PLPasStr::PLPasStr() + : m_length(0) + , m_chars(nullptr) +{ +} + +inline PLPasStr::PLPasStr(const unsigned char *str) + : m_length(str[0]) + , m_chars(reinterpret_cast(str) + 1) +{ +} + +template +inline PLPasStr::PLPasStr(const PortabilityLayer::PascalStrLiteral &pstrLiteral) + : m_length(pstrLiteral.kLength) + , m_chars(pstrLiteral.GetStr()) +{ +} + +inline PLPasStr::PLPasStr(const PLPasStr &other) + : m_length(other.m_length) + , m_chars(other.m_chars) +{ +} + +inline PLPasStr::PLPasStr(uint8_t length, const char *str) + : m_length(length) + , m_chars(str) +{ +} + +inline unsigned char PLPasStr::Length() const +{ + return m_length; +} + +inline const char *PLPasStr::Chars() const +{ + return m_chars; +} + +inline const unsigned char *PLPasStr::UChars() const +{ + return reinterpret_cast(m_chars); +} + +#endif diff --git a/PortabilityLayer/PLQDOffscreen.cpp b/PortabilityLayer/PLQDOffscreen.cpp new file mode 100644 index 0000000..d49108c --- /dev/null +++ b/PortabilityLayer/PLQDOffscreen.cpp @@ -0,0 +1,50 @@ +#include "PLQDOffscreen.h" + + +OSErr NewGWorld(GWorldPtr *gworld, int depth, Rect *bounds, CTabHandle colorTable, GDHandle device, int flags) +{ + PL_NotYetImplemented(); + return noErr; +} + +void DisposeGWorld(GWorldPtr gworld) +{ + PL_NotYetImplemented(); +} + +PixMapHandle GetGWorldPixMap(GWorldPtr gworld) +{ + PL_NotYetImplemented(); + return nullptr; +} + +void LockPixels(PixMapHandle pixmap) +{ + PL_NotYetImplemented(); +} + +PicHandle GetPicture(short resID) +{ + PL_NotYetImplemented(); + return nullptr; +} + +void OffsetRect(Rect *rect, int right, int down) +{ + PL_NotYetImplemented(); +} + +void DrawPicture(PicHandle pict, Rect *bounds) +{ + PL_NotYetImplemented(); +} + +void GetGWorld(CGrafPtr *gw, GDHandle *gdHandle) +{ + PL_NotYetImplemented(); +} + +void SetGWorld(CGrafPtr gw, GDHandle gdHandle) +{ + PL_NotYetImplemented(); +} diff --git a/PortabilityLayer/PLQDOffscreen.h b/PortabilityLayer/PLQDOffscreen.h new file mode 100644 index 0000000..55c889d --- /dev/null +++ b/PortabilityLayer/PLQDOffscreen.h @@ -0,0 +1,51 @@ +#pragma once +#ifndef __PL_QDOFFSCREEN_H__ +#define __PL_QDOFFSCREEN_H__ + +#include "PLCore.h" +#include "PLQuickdraw.h" + +struct ColorTable +{ +}; + +struct PixMap +{ +}; + +struct Picture +{ + Rect picFrame; +}; + +typedef ColorTable *CTabPtr; +typedef CTabPtr *CTabHandle; + +typedef PixMap *PixMapPtr; +typedef PixMapPtr *PixMapHandle; + +typedef Picture *PicPtr; +typedef PicPtr *PicHandle; + +enum QDFlags +{ + useTempMem = 1, +}; + +OSErr NewGWorld(GWorldPtr *gworld, int depth, Rect *bounds, CTabHandle colorTable, GDHandle device, int flags); +void DisposeGWorld(GWorldPtr gworld); + +PixMapHandle GetGWorldPixMap(GWorldPtr gworld); +void LockPixels(PixMapHandle pixmap); + +PicHandle GetPicture(short resID); + +void OffsetRect(Rect *rect, int right, int down); + +void DrawPicture(PicHandle pict, Rect *bounds); + +void GetGWorld(CGrafPtr *gw, GDHandle *gdHandle); +void SetGWorld(CGrafPtr gw, GDHandle gdHandle); + + +#endif diff --git a/PortabilityLayer/PLQuickdraw.cpp b/PortabilityLayer/PLQuickdraw.cpp new file mode 100644 index 0000000..49ba898 --- /dev/null +++ b/PortabilityLayer/PLQuickdraw.cpp @@ -0,0 +1,366 @@ +#include "PLQuickdraw.h" +#include "DisplayDeviceManager.h" + +void GetPort(GrafPtr *graf) +{ + PL_NotYetImplemented(); +} + +void SetPort(GrafPtr graf) +{ + PL_NotYetImplemented(); +} + +void BeginUpdate(GrafPtr graf) +{ + PL_NotYetImplemented(); +} + +void EndUpdate(GrafPtr graf) +{ + PL_NotYetImplemented(); +} + +OSErr GetIconSuite(Handle *suite, short resID, IconSuiteFlags flags) +{ + PL_NotYetImplemented(); + return noErr; +} + +OSErr PlotIconSuite(Rect *rect, IconAlignmentType alignType, IconTransformType transformType, Handle iconSuite) +{ + PL_NotYetImplemented(); + return noErr; +} + +CIconHandle GetCIcon(short resID) +{ + PL_NotYetImplemented(); + return nullptr; +} + +OSErr PlotCIcon(Rect *rect, CIconHandle icon) +{ + PL_NotYetImplemented(); + return noErr; +} + +void DisposeCIcon(CIconHandle icon) +{ + PL_NotYetImplemented(); +} + +void SetRect(Rect *rect, short left, short top, short right, short bottom) +{ + rect->left = left; + rect->top = top; + rect->bottom = bottom; + rect->right = right; +} + +GDHandle GetMainDevice() +{ + return PortabilityLayer::DisplayDeviceManager::GetInstance()->GetMainDevice(); +} + +void SetPortWindowPort(WindowPtr window) +{ + PL_NotYetImplemented(); +} + +void SetPortDialogPort(Dialog *dialog) +{ + PL_NotYetImplemented(); +} + + +void TextSize(int sz) +{ + PL_NotYetImplemented(); +} + +void TextFace(int face) +{ + PL_NotYetImplemented(); +} + +void TextFont(int fontID) +{ + PL_NotYetImplemented(); +} + +int TextWidth(const PLPasStr &str, int firstChar1Based, int length) +{ + PL_NotYetImplemented(); + return 0; +} + +void MoveTo(int x, int y) +{ + PL_NotYetImplemented(); +} + +void LineTo(int x, int y) +{ + PL_NotYetImplemented(); +} + +void SetOrigin(int x, int y) +{ + PL_NotYetImplemented(); +} + +void ForeColor(SystemColorID color) +{ + PL_NotYetImplemented(); +} + +void BackColor(SystemColorID color) +{ + PL_NotYetImplemented(); +} + +void GetForeColor(RGBColor *color) +{ + PL_NotYetImplemented(); +} + +void Index2Color(int index, RGBColor *color) +{ + PL_NotYetImplemented(); +} + +void RGBForeColor(const RGBColor *color) +{ + PL_NotYetImplemented(); +} + +void DrawString(const PLPasStr &str) +{ + PL_NotYetImplemented(); +} + +void PaintRect(const Rect *rect) +{ + PL_NotYetImplemented(); +} + +void PaintOval(const Rect *rect) +{ + PL_NotYetImplemented(); +} + +void PaintRgn(RgnHandle region) +{ + PL_NotYetImplemented(); +} + +void ClipRect(const Rect *rect) +{ + PL_NotYetImplemented(); +} + +void FrameRect(const Rect *rect) +{ + PL_NotYetImplemented(); +} + +void FrameOval(const Rect *rect) +{ + PL_NotYetImplemented(); +} + +void FrameRoundRect(const Rect *rect, int w, int h) +{ + PL_NotYetImplemented(); +} + +void PenMode(int mode) +{ + PL_NotYetImplemented(); +} + +void PenMode(PenModeID penMode) +{ + PL_NotYetImplemented(); +} + +void PenMode(CopyBitsMode copyBitsMode) +{ + PL_NotYetImplemented(); +} + +void PenPat(const Pattern *pattern) +{ + PL_NotYetImplemented(); +} + +void PenSize(int w, int h) +{ + PL_NotYetImplemented(); +} + +void PenNormal() +{ + PL_NotYetImplemented(); +} + +void EraseRect(const Rect *rect) +{ + PL_NotYetImplemented(); +} + +void InvertRect(const Rect *rect) +{ + PL_NotYetImplemented(); +} + +void InsetRect(Rect *rect, int x, int y) +{ + PL_NotYetImplemented(); +} + +void Line(int x, int y) +{ + PL_NotYetImplemented(); +} + +Pattern *GetQDGlobalsGray(Pattern *pattern) +{ + PL_NotYetImplemented(); + return nullptr; +} + +Pattern *GetQDGlobalsBlack(Pattern *pattern) +{ + PL_NotYetImplemented(); + return nullptr; +} + +void GetIndPattern(Pattern *pattern, int patListID, int index) +{ + PL_NotYetImplemented(); +} + + + +void CopyBits(const BitMap *srcBitmap, BitMap *destBitmap, const Rect *srcRect, const Rect *destRect, CopyBitsMode copyMode, RgnHandle maskRegion) +{ + PL_NotYetImplemented(); +} + +void CopyMask(const BitMap *srcBitmap, const BitMap *maskBitmap, BitMap *destBitmap, const Rect *srcRect, const Rect *maskRect, const Rect *destRect) +{ + PL_NotYetImplemented(); +} + + +RgnHandle NewRgn() +{ + PL_NotYetImplemented(); + return nullptr; +} + +void RectRgn(RgnHandle region, const Rect *rect) +{ + PL_NotYetImplemented(); +} + +void UnionRgn(RgnHandle regionA, RgnHandle regionB, RgnHandle regionC) +{ + PL_NotYetImplemented(); +} + +void DisposeRgn(RgnHandle rgn) +{ + PL_NotYetImplemented(); +} + +void OpenRgn() +{ + PL_NotYetImplemented(); +} + +void CloseRgn(RgnHandle rgn) +{ + PL_NotYetImplemented(); +} + +Boolean PtInRgn(Point point, RgnHandle rgn) +{ + PL_NotYetImplemented(); + return false; +} + +void GetClip(RgnHandle rgn) +{ + PL_NotYetImplemented(); +} + +void SetClip(RgnHandle rgn) +{ + PL_NotYetImplemented(); +} + + +BitMap *GetPortBitMapForCopyBits(CGrafPtr grafPtr) +{ + PL_NotYetImplemented(); + return nullptr; +} + +CGrafPtr GetWindowPort(WindowPtr window) +{ + PL_NotYetImplemented(); + return nullptr; +} + +RgnHandle GetPortVisibleRegion(CGrafPtr port, RgnHandle region) +{ + PL_NotYetImplemented(); + return nullptr; +} + + +Int32 DeltaPoint(Point pointA, Point pointB) +{ + PL_NotYetImplemented(); + return 0; +} + + +void SubPt(Point srcPoint, Point *destPoint) +{ + PL_NotYetImplemented(); +} + + +Boolean SectRect(const Rect *rectA, const Rect *rectB, Rect *outIntersection) +{ + PL_NotYetImplemented(); + return false; +} + + +Boolean PtInRect(Point point, const Rect *rect) +{ + PL_NotYetImplemented(); + return false; +} + + +void RestoreDeviceClut(void *unknown) +{ + PL_NotYetImplemented(); +} + +void PaintBehind(void *unknown, RgnHandle region) +{ + PL_NotYetImplemented(); +} + +RgnHandle GetGrayRgn() +{ + PL_NotYetImplemented(); + return nullptr; +} diff --git a/PortabilityLayer/PLQuickdraw.h b/PortabilityLayer/PLQuickdraw.h new file mode 100644 index 0000000..bf26b47 --- /dev/null +++ b/PortabilityLayer/PLQuickdraw.h @@ -0,0 +1,217 @@ +#pragma once +#ifndef __PL_QUICKDRAW_H__ +#define __PL_QUICKDRAW_H__ + +#include "PLCore.h" + +struct Dialog; + +enum IconAlignmentType +{ + atNone +}; + +enum IconTransformType +{ + ttNone +}; + +enum IconSuiteFlags +{ + svAllLargeData = 1, +}; + +enum TextFlags +{ + bold = 1, + italicBit = 2, + ulineBit = 4, + outlineBit = 8, + shadowBit = 16, + condenseBit = 32, + extendBit = 64, +}; + +enum SystemFontID +{ + systemFont = 0, // System font + applFont = 1, // Application font + newYork = 2, + geneva = 3, + monaco = 4, + venice = 5, + london = 6, + athens = 7, + sanFran = 8, + toronto = 9, + cairo = 11, + losAngeles = 12, + times = 20, + helvetica = 21, + courier = 22, + symbol = 23, + mobile = 24, +}; + +// wtf? +enum SystemColorID +{ + whiteColor = 30, + blackColor = 33, + yellowColor = 69, + magentaColor = 137, + redColor = 205, + cyanColor = 273, + greenColor = 341, + blueColor = 409, +}; + +enum CopyBitsMode +{ + srcCopy, + srcOr, + srcXor, + srcBic, + notSrcCopy, + notSrcOr, + notSrcXor, + notSrcBic, + transparent +}; + +enum PenModeID +{ + patCopy = 8, + patOr, + patXor, + patBic, + notPatCopy, + notPatOr, + notPatXor, + notPatBic, +}; + +enum HiliteMode +{ + hilite = 50, +}; + +struct CIcon +{ +}; + +struct GDevice +{ +}; + +struct BitMap +{ +}; + +struct RGBColor +{ + unsigned short red; + unsigned short green; + unsigned short blue; +}; + +typedef GDevice *GDPtr; +typedef GDPtr *GDHandle; + +typedef CIcon *CIconPtr; +typedef CIconPtr *CIconHandle; + +typedef WindowPtr GrafPtr; + +typedef Byte Pattern[8]; + +void GetPort(GrafPtr *graf); +void SetPort(GrafPtr graf); +void SetPortWindowPort(WindowPtr window); +void SetPortDialogPort(Dialog *dialog); + +void BeginUpdate(GrafPtr graf); +void EndUpdate(GrafPtr graf); + +OSErr GetIconSuite(Handle *suite, short resID, IconSuiteFlags flags); +OSErr PlotIconSuite(Rect *rect, IconAlignmentType alignType, IconTransformType transformType, Handle iconSuite); + +CIconHandle GetCIcon(short resID); +OSErr PlotCIcon(Rect *rect, CIconHandle icon); +void DisposeCIcon(CIconHandle icon); + +void SetRect(Rect *rect, short left, short top, short right, short bottom); + +GDHandle GetMainDevice(); + +void TextSize(int sz); +void TextFace(int face); +void TextFont(int fontID); +int TextWidth(const PLPasStr &str, int firstChar1Based, int length); +void MoveTo(int x, int y); +void LineTo(int x, int y); +void SetOrigin(int x, int y); +void ForeColor(SystemColorID color); +void BackColor(SystemColorID color); +void GetForeColor(RGBColor *color); +void Index2Color(int index, RGBColor *color); +void RGBForeColor(const RGBColor *color); +void DrawString(const PLPasStr &str); +void PaintRect(const Rect *rect); +void PaintOval(const Rect *rect); +void PaintRgn(RgnHandle region); + +void ClipRect(const Rect *rect); // Sets the clipping area +void FrameRect(const Rect *rect); +void FrameOval(const Rect *rect); +void FrameRoundRect(const Rect *rect, int w, int h); +void PenMode(int mode); // Can be CopyBitsMode, PenModeID, and possibly add "50" to hilite +void PenPat(const Pattern *pattern); +void PenSize(int w, int h); +void PenNormal(); +void EraseRect(const Rect *rect); +void InvertRect(const Rect *rect); +void InsetRect(Rect *rect, int x, int y); +void Line(int x, int y); // FIXME: Is this relative or absolute? +Pattern *GetQDGlobalsGray(Pattern *pattern); +Pattern *GetQDGlobalsBlack(Pattern *pattern); + +// Finds a pattern from a 'PAT#' resource +// Index is 1-based +void GetIndPattern(Pattern *pattern, int patListID, int index); + + +void CopyBits(const BitMap *srcBitmap, BitMap *destBitmap, const Rect *srcRect, const Rect *destRect, CopyBitsMode copyMode, RgnHandle maskRegion); +void CopyMask(const BitMap *srcBitmap, const BitMap *maskBitmap, BitMap *destBitmap, const Rect *srcRect, const Rect *maskRect, const Rect *destRect); + +RgnHandle NewRgn(); +void RectRgn(RgnHandle region, const Rect *rect); +void UnionRgn(RgnHandle regionA, RgnHandle regionB, RgnHandle regionC); +void DisposeRgn(RgnHandle rgn); +void OpenRgn(); +void CloseRgn(RgnHandle rgn); +Boolean PtInRgn(Point point, RgnHandle rgn); + +void GetClip(RgnHandle rgn); +void SetClip(RgnHandle rgn); + +BitMap *GetPortBitMapForCopyBits(CGrafPtr grafPtr); +CGrafPtr GetWindowPort(WindowPtr window); +RgnHandle GetPortVisibleRegion(CGrafPtr port, RgnHandle region); + +// Computes A - B and returns it packed? +Int32 DeltaPoint(Point pointA, Point pointB); + +// Subtracts srcPoint from destPoint (reverse of DeltaPoint) +void SubPt(Point srcPoint, Point *destPoint); + +Boolean SectRect(const Rect *rectA, const Rect *rectB, Rect *outIntersection); + +Boolean PtInRect(Point point, const Rect *rect); + +void RestoreDeviceClut(void *unknown); +void PaintBehind(void *unknown, RgnHandle region); + +RgnHandle GetGrayRgn(); // Returns the region not occupied by the menu bar + +#endif diff --git a/PortabilityLayer/PLResourceManager.cpp b/PortabilityLayer/PLResourceManager.cpp new file mode 100644 index 0000000..af3cdc6 --- /dev/null +++ b/PortabilityLayer/PLResourceManager.cpp @@ -0,0 +1,138 @@ +#include "ResourceManager.h" +#include "VirtualDirectory.h" +#include "FileManager.h" +#include "HostFileSystem.h" +#include "HostMemoryBuffer.h" +#include "IOStream.h" +#include "MacBinary2.h" +#include "MacFileMem.h" +#include "MemReaderStream.h" +#include "ResourceFile.h" +#include "PLPasStr.h" +#include "PLErrorCodes.h" + +#include + +namespace PortabilityLayer +{ + class ResourceManagerImpl final : public ResourceManager + { + public: + ResourceManagerImpl(); + + void Init() override; + void Shutdown() override; + + void SetResLoad(bool load) override; + + short OpenResFork(EVirtualDirectory virtualDir, const PLPasStr &filename) override; + MMHandleBlock *GetResource(const ResTypeID &resType, int id) override; + + short GetCurrentResFile() const override; + void SetCurrentResFile(short ref) override; + + static ResourceManagerImpl *GetInstance(); + + private: + std::vector m_resFiles; + short m_currentResFile; + bool m_load; + + static ResourceManagerImpl ms_instance; + }; + + ResourceManagerImpl::ResourceManagerImpl() + : m_currentResFile(0) + , m_load(true) + { + } + + void ResourceManagerImpl::Init() + { + m_currentResFile = OpenResFork(EVirtualDirectory_ApplicationData, PSTR("ApplicationResources")); + } + + void ResourceManagerImpl::Shutdown() + { + for (std::vector::iterator it = m_resFiles.begin(), itEnd = m_resFiles.end(); it != itEnd; ++it) + delete (*it); + + m_resFiles.clear(); + } + + short ResourceManagerImpl::GetCurrentResFile() const + { + return m_currentResFile; + } + + void ResourceManagerImpl::SetCurrentResFile(short ref) + { + m_currentResFile = ref; + } + + ResourceManagerImpl *ResourceManagerImpl::GetInstance() + { + return &ms_instance; + } + + void ResourceManagerImpl::SetResLoad(bool load) + { + m_load = load; + } + + short ResourceManagerImpl::OpenResFork(EVirtualDirectory virtualDir, const PLPasStr &filename) + { + const size_t numSlots = m_resFiles.size(); + size_t resFileIndex = numSlots; + + for (size_t i = 0; i < numSlots; i++) + { + if (m_resFiles[i] == nullptr) + { + resFileIndex = i; + break; + } + } + + if (resFileIndex == 0x7fff) + return 0; + + IOStream *fStream = nullptr; + if (FileManager::GetInstance()->RawOpenFileRF(virtualDir, filename, EFilePermission_Read, true, &fStream) != noErr) + return 0; + + ResourceFile *resFile = new ResourceFile(); + bool loaded = resFile->Load(fStream); + fStream->Close(); + + if (!loaded) + { + delete resFile; + return 0; + } + + if (resFileIndex == numSlots) + m_resFiles.push_back(resFile); + else + m_resFiles[resFileIndex] = resFile; + + return static_cast(resFileIndex + 1); + } + + MMHandleBlock *ResourceManagerImpl::GetResource(const ResTypeID &resType, int id) + { + if (!m_currentResFile) + return nullptr; + + ResourceFile *resFile = m_resFiles[m_currentResFile - 1]; + if (!resFile) + return nullptr; + + return resFile->GetResource(resType, id, m_load); + } + + + ResourceManagerImpl ResourceManagerImpl::ms_instance; + + ResourceManager *ResourceManager::GetInstance() { return ResourceManagerImpl::GetInstance(); } +} diff --git a/PortabilityLayer/PLResources.cpp b/PortabilityLayer/PLResources.cpp new file mode 100644 index 0000000..de4a10a --- /dev/null +++ b/PortabilityLayer/PLResources.cpp @@ -0,0 +1,88 @@ +#include "PLResources.h" + +#include "MMHandleBlock.h" +#include "ResourceManager.h" +#include "ResourceCompiledRef.h" + +void DetachResource(Handle hdl) +{ + PL_NotYetImplemented(); +} + +void ReleaseResource(Handle hdl) +{ + PL_NotYetImplemented(); +} + +short CurResFile() +{ + return PortabilityLayer::ResourceManager::GetInstance()->GetCurrentResFile(); +} + +void UseResFile(short fid) +{ + PL_NotYetImplemented(); +} + +Handle Get1Resource(UInt32 resID, int index) +{ + PL_NotYetImplemented(); + return nullptr; +} + +Handle Get1IndResource(UInt32 resID, int index) +{ + PL_NotYetImplemented(); + return nullptr; +} + +int Count1Resources(UInt32 resType) +{ + PL_NotYetImplemented(); + return 0; +} + +void HCreateResFile(int refNum, long dirID, const PLPasStr &name) +{ + PL_NotYetImplemented(); +} + +OSErr ResError() +{ + PL_NotYetImplemented(); + return noErr; +} + +short FSpOpenResFile(const FSSpec *spec, int permission) +{ + PL_NotYetImplemented(); + return 0; +} + +void CloseResFile(short refNum) +{ + PL_NotYetImplemented(); +} + +void SetResLoad(Boolean load) +{ + PortabilityLayer::ResourceManager::GetInstance()->SetResLoad(load != 0); +} + +long GetMaxResourceSize(Handle res) +{ + const PortabilityLayer::MMHandleBlock *hBlock = reinterpret_cast(res); + const PortabilityLayer::ResourceCompiledRef *resRef = hBlock->m_rmSelfRef; + return resRef->GetSize(); +} + +void GetResInfo(Handle res, short *resID, ResType *resType, Str255 resName) +{ + PL_NotYetImplemented(); +} + +short HOpenResFile(short refNum, long parID, const PLPasStr &name, int permissions) +{ + PL_NotYetImplemented(); + return 0; +} diff --git a/PortabilityLayer/PLResources.h b/PortabilityLayer/PLResources.h new file mode 100644 index 0000000..fa0e591 --- /dev/null +++ b/PortabilityLayer/PLResources.h @@ -0,0 +1,37 @@ +#pragma once +#ifndef __PL_RESOURCES_H__ +#define __PL_RESOURCES_H__ + +#include "PLCore.h" + +struct ResType +{ +}; + +class PLPasStr; + +void DetachResource(Handle hdl); +void ReleaseResource(Handle hdl); + +short CurResFile(); +void UseResFile(short fid); +Handle Get1Resource(UInt32 resID, int index); +Handle Get1IndResource(UInt32 resID, int index); +int Count1Resources(UInt32 resType); + +void HCreateResFile(int refNum, long dirID, const PLPasStr &name); +OSErr ResError(); + +short FSpOpenResFile(const FSSpec *spec, int permission); +void CloseResFile(short refNum); + +void SetResLoad(Boolean load); // Sets whether resources should be loaded when requested + +long GetMaxResourceSize(Handle res); +void GetResInfo(Handle res, short *resID, ResType *resType, Str255 resName); + +// This should return -1 on error? +short HOpenResFile(short refNum, long parID, const PLPasStr &name, int permissions); + + +#endif diff --git a/PortabilityLayer/PLScript.h b/PortabilityLayer/PLScript.h new file mode 100644 index 0000000..50e9667 --- /dev/null +++ b/PortabilityLayer/PLScript.h @@ -0,0 +1 @@ +#pragma once diff --git a/PortabilityLayer/PLSound.cpp b/PortabilityLayer/PLSound.cpp new file mode 100644 index 0000000..49cb59d --- /dev/null +++ b/PortabilityLayer/PLSound.cpp @@ -0,0 +1,53 @@ +#include "PLSound.h" + +OSErr GetDefaultOutputVolume(long *vol) +{ + short leftVol = 0x100; + short rightVol = 0x100; + + PL_NotYetImplemented_Minor(); + + *vol = (leftVol) | (rightVol << 16); + + return noErr; +} + +OSErr SetDefaultOutputVolume(long vol) +{ + return noErr; +} + + +SndCallBackUPP NewSndCallBackProc(SndCallBackProc callback) +{ + return callback; +} + +void DisposeSndCallBackUPP(SndCallBackUPP upp) +{ +} + +OSErr SndNewChannel(SndChannelPtr *outChannel, SndSynthType synthType, int initFlags, SndCallBackUPP callback) +{ + PL_NotYetImplemented(); + return noErr; +} + +OSErr SndDisposeChannel(SndChannelPtr channel, Boolean flush) +{ + PL_NotYetImplemented(); + return noErr; +} + +OSErr SndDoCommand(SndChannelPtr channel, const SndCommand *command, Boolean failIfFull) +{ + PL_NotYetImplemented(); + return noErr; +} + +OSErr SndDoImmediate(SndChannelPtr channel, const SndCommand *command) +{ + PL_NotYetImplemented(); + return noErr; +} + diff --git a/PortabilityLayer/PLSound.h b/PortabilityLayer/PLSound.h new file mode 100644 index 0000000..8042d7b --- /dev/null +++ b/PortabilityLayer/PLSound.h @@ -0,0 +1,56 @@ +#pragma once +#ifndef __PL_SOUND_H__ +#define __PL_SOUND_H__ + +#include "PLCore.h" + +enum SndCommandType +{ + nullCmd, + bufferCmd, // Param1: 0 Param2: Offset to sound header + callBackCmd, + flushCmd, + quietCmd +}; + +struct SndChannel +{ +}; + +struct SndCommand +{ + SndCommandType cmd; + intptr_t param1; + intptr_t param2; +}; + +enum SndSynthType +{ + sampledSynth +}; + +enum SndInitFlags +{ + initNoInterp = 1, + initMono = 2, +}; + +typedef SndChannel *SndChannelPtr; + +typedef void(*SndCallBackProc)(SndChannelPtr channel, SndCommand *command); +typedef SndCallBackProc SndCallBackUPP; + +// Vol seems to be a packed stereo DWord + +OSErr GetDefaultOutputVolume(long *vol); +OSErr SetDefaultOutputVolume(long vol); + + +SndCallBackUPP NewSndCallBackProc(SndCallBackProc callback); +void DisposeSndCallBackUPP(SndCallBackUPP upp); +OSErr SndNewChannel(SndChannelPtr *outChannel, SndSynthType synthType, int initFlags, SndCallBackUPP callback); +OSErr SndDisposeChannel(SndChannelPtr channel, Boolean flush); +OSErr SndDoCommand(SndChannelPtr channel, const SndCommand *command, Boolean failIfFull); +OSErr SndDoImmediate(SndChannelPtr channel, const SndCommand *command); + +#endif diff --git a/PortabilityLayer/PLStringCompare.cpp b/PortabilityLayer/PLStringCompare.cpp new file mode 100644 index 0000000..b277464 --- /dev/null +++ b/PortabilityLayer/PLStringCompare.cpp @@ -0,0 +1,7 @@ +#include "PLStringCompare.h" + +Boolean EqualString(const PLPasStr &string1, const PLPasStr &string2, Boolean caseSensitive, Boolean diacriticSensitive) +{ + PL_NotYetImplemented(); + return false; +} \ No newline at end of file diff --git a/PortabilityLayer/PLStringCompare.h b/PortabilityLayer/PLStringCompare.h new file mode 100644 index 0000000..2fd747f --- /dev/null +++ b/PortabilityLayer/PLStringCompare.h @@ -0,0 +1,10 @@ +#pragma once +#ifndef __PL_STRINGCOMPARE_H__ +#define __PL_STRINGCOMPARE_H__ + +#include "PLCore.h" +#include "PLPasStr.h" + +Boolean EqualString(const PLPasStr &string1, const PLPasStr &string2, Boolean caseSensitive, Boolean diacriticSensitive); + +#endif diff --git a/PortabilityLayer/PLTextUtils.h b/PortabilityLayer/PLTextUtils.h new file mode 100644 index 0000000..50e9667 --- /dev/null +++ b/PortabilityLayer/PLTextUtils.h @@ -0,0 +1 @@ +#pragma once diff --git a/PortabilityLayer/PLToolUtils.h b/PortabilityLayer/PLToolUtils.h new file mode 100644 index 0000000..50e9667 --- /dev/null +++ b/PortabilityLayer/PLToolUtils.h @@ -0,0 +1 @@ +#pragma once diff --git a/PortabilityLayer/PascalStr.h b/PortabilityLayer/PascalStr.h new file mode 100644 index 0000000..cc8af89 --- /dev/null +++ b/PortabilityLayer/PascalStr.h @@ -0,0 +1,36 @@ +#pragma once + +#ifndef __PL_PASCALSTR_H__ +#define __PL_PASCALSTR_H__ + +#include "UnsafePascalStr.h" + +namespace PortabilityLayer +{ + template + class PascalStr : public UnsafePascalStr + { + public: + PascalStr(); + PascalStr(size_t size, const char *str); + }; +} + +#include + +namespace PortabilityLayer +{ + template + inline PascalStr::PascalStr() + : UnsafePascalStr(0, nullptr) + { + } + + template + PascalStr::PascalStr(size_t size, const char *str) + : UnsafePascalStr(size, str) + { + } +} + +#endif diff --git a/PortabilityLayer/PascalStrLiteral.h b/PortabilityLayer/PascalStrLiteral.h new file mode 100644 index 0000000..df31267 --- /dev/null +++ b/PortabilityLayer/PascalStrLiteral.h @@ -0,0 +1,40 @@ +#pragma once +#ifndef __PL_PASCAL_STR_LITERAL_H__ +#define __PL_PASCAL_STR_LITERAL_H__ + +#include "DataTypes.h" + +namespace PortabilityLayer +{ + template + class PascalStrLiteral + { + public: + PascalStrLiteral(const char (&literalStr)[TSize]); + const char *GetStr() const; + + static const uint8_t kLength = TSize - 1; + + private: + const char *m_literal; + }; +} + +namespace PortabilityLayer +{ + template + inline PascalStrLiteral::PascalStrLiteral(const char(&literalStr)[TSize]) + : m_literal(literalStr) + { + } + + template + inline const char *PascalStrLiteral::GetStr() const + { + return m_literal; + } +} + +#define PSTR(n) (::PortabilityLayer::PascalStrLiteral(n)) + +#endif diff --git a/PortabilityLayer/PortabilityLayer.vcxproj b/PortabilityLayer/PortabilityLayer.vcxproj new file mode 100644 index 0000000..e4789d0 --- /dev/null +++ b/PortabilityLayer/PortabilityLayer.vcxproj @@ -0,0 +1,238 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 15.0 + {6EC62B0F-9353-40A4-A510-3788F1368B33} + PortabilityLayer + 10.0.16299.0 + + + + Application + true + v141 + MultiByte + + + Application + false + v141 + true + MultiByte + + + StaticLibrary + true + v141 + MultiByte + + + StaticLibrary + false + v141 + true + MultiByte + + + + + + + + + + + + + + + + + + + + + + + + + + + Level3 + Disabled + true + true + + + + + Level3 + Disabled + true + true + + + + + Level3 + MaxSpeed + true + true + true + true + + + true + true + + + + + Level3 + MaxSpeed + true + true + true + true + + + true + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/PortabilityLayer/PortabilityLayer.vcxproj.filters b/PortabilityLayer/PortabilityLayer.vcxproj.filters new file mode 100644 index 0000000..d23ec8a --- /dev/null +++ b/PortabilityLayer/PortabilityLayer.vcxproj.filters @@ -0,0 +1,351 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + \ No newline at end of file diff --git a/PortabilityLayer/RCPtr.h b/PortabilityLayer/RCPtr.h new file mode 100644 index 0000000..3a922bd --- /dev/null +++ b/PortabilityLayer/RCPtr.h @@ -0,0 +1,121 @@ +#pragma once + +#include "CoreDefs.h" + +namespace PortabilityLayer +{ + class RefCountedBase; + + template + class RCPtr + { + public: + RCPtr(); + RCPtr(T *other); + RCPtr(const RCPtr &other); +#if IS_CPP11 + RCPtr(RCPtr &&other); +#endif + ~RCPtr(); + + operator T*() const; + T* operator ->() const; + + RCPtr &operator=(T *other); +#if IS_CPP11 + RCPtr &operator=(RCPtr &&other); +#endif + + T *Get() const; + + private: + RefCountedBase *m_target; + }; +} + +#include "RefCounted.h" + +template +inline PortabilityLayer::RCPtr::RCPtr() + : m_target(nullptr) +{ +} + +template +inline PortabilityLayer::RCPtr::RCPtr(const RCPtr &other) + : m_target(other.m_target) +{ + if (m_target) + m_target->IncRef(); +} + +template +inline PortabilityLayer::RCPtr::RCPtr(T *other) + : m_target(other) +{ + if (other) + other->IncRef(); +} + +#if IS_CPP11 +template +inline PortabilityLayer::RCPtr::RCPtr(RCPtr &&other) + : m_target(other.m_target) +{ + other.m_target = nullptr; +} +#endif + +template +inline PortabilityLayer::RCPtr::~RCPtr() +{ + if (m_target) + m_target->DecRef(); +} + +template +inline T *PortabilityLayer::RCPtr::operator T*() const +{ + return m_target; +} + +template +inline T *PortabilityLayer::RCPtr::operator->() const +{ + return m_target; +} + +template +inline PortabilityLayer::RCPtr::RCPtr &PortabilityLayer::RCPtr::operator=(T *other) +{ + RefCountedBase *old = m_target; + + m_target = other; + if (other) + other->IncRef(); + + if (old) + old->DecRef(); + + return *this; +} + +#if IS_CPP11 +template +inline PortabilityLayer::RCPtr& PortabilityLayer::RCPtr::RCPtr &operator=(RCPtr &&other) +{ + RefCountedBase *old = m_target; + RefCountedBase *newRC = other.m_target; + + other.m_target = nullptr; + + m_target = newRC; + if (newRC) + newRC->IncRef(); + + if (old) + old->DecRef(); + + return *this; +} +#endif diff --git a/PortabilityLayer/RandomNumberGenerator.cpp b/PortabilityLayer/RandomNumberGenerator.cpp new file mode 100644 index 0000000..1baf819 --- /dev/null +++ b/PortabilityLayer/RandomNumberGenerator.cpp @@ -0,0 +1,85 @@ +#include "RandomNumberGenerator.h" + +namespace PortabilityLayer +{ + class RandomNumberGeneratorMT19937 final : public RandomNumberGenerator + { + public: + RandomNumberGeneratorMT19937(); + + void Seed(uint32_t seed) override; + uint32_t GetNextAndAdvance() override; + + static RandomNumberGeneratorMT19937 *GetInstance(); + + private: + static const uint32_t kA = 0x9908b0df; + static const int kW = 32; + static const int kN = 624; + static const int kM = 397; + static const int kR = 31; + static const uint32_t kLowMask = (1 << kR) - 1; + static const uint32_t kHighMask = ~kLowMask; + + void Twist(); + + uint32_t m_state[kN]; + int m_index; + + static RandomNumberGeneratorMT19937 ms_instance; + }; + + RandomNumberGeneratorMT19937::RandomNumberGeneratorMT19937() + { + Seed(0x243F6A88); // First 8 hex digits of pi + } + + void RandomNumberGeneratorMT19937::Seed(uint32_t seed) + { + m_index = kN; + + m_state[0] = seed; + for (unsigned int i = 1; i < kN; i++) + { + const uint32_t prev = m_state[i - 1]; + m_state[i] = static_cast((static_cast(1812433253) * static_cast(prev ^ (prev >> 30)) + i) & 0xffffffff); + } + } + + uint32_t RandomNumberGeneratorMT19937::GetNextAndAdvance() + { + if (m_index == kN) + Twist(); + + uint32_t x = m_state[m_index++]; + x ^= (x >> 11); + x ^= (x >> 7) & 0x9d2c5680; + x ^= (x << 15) & 0xefc60000; + return x ^ (x >> 18); + } + + void RandomNumberGeneratorMT19937::Twist() + { + for (unsigned int i = 0; i < kN; i++) + { + uint32_t x = (m_state[i] & kHighMask) + (m_state[(i + 1) % kN] & kLowMask); + uint32_t xA = x >> 1; + if ((x & 1) == 1) + xA ^= kA; + m_state[i] = m_state[(i + kM) % kN] ^ kA; + } + m_index = 0; + } + + RandomNumberGeneratorMT19937 *RandomNumberGeneratorMT19937::GetInstance() + { + return &ms_instance; + } + + RandomNumberGeneratorMT19937 RandomNumberGeneratorMT19937::ms_instance; + + RandomNumberGenerator* RandomNumberGenerator::GetInstance() + { + return RandomNumberGeneratorMT19937::GetInstance(); + } +} diff --git a/PortabilityLayer/RandomNumberGenerator.h b/PortabilityLayer/RandomNumberGenerator.h new file mode 100644 index 0000000..36cacfb --- /dev/null +++ b/PortabilityLayer/RandomNumberGenerator.h @@ -0,0 +1,19 @@ +#pragma once +#ifndef __PL_RANDOM_NUMBER_GENERATOR_H__ +#define __PL_RANDOM_NUMBER_GENERATOR_H__ + +#include + +namespace PortabilityLayer +{ + class RandomNumberGenerator + { + public: + virtual void Seed(uint32_t seed) = 0; + virtual uint32_t GetNextAndAdvance() = 0; + + static RandomNumberGenerator *GetInstance(); + }; +} + +#endif diff --git a/PortabilityLayer/RefCounted.h b/PortabilityLayer/RefCounted.h new file mode 100644 index 0000000..acfc6bc --- /dev/null +++ b/PortabilityLayer/RefCounted.h @@ -0,0 +1,38 @@ +#pragma once + +namespace PortabilityLayer +{ + class RefCountedBase + { + public: + RefCountedBase(); + virtual ~RefCountedBase(); + virtual void Release() = 0; + + void IncRef(); + void DecRef(); + + private: + unsigned int m_refCount; + }; +} + +inline PortabilityLayer::RefCountedBase::RefCountedBase() + : m_refCount(0) +{ +} + +inline PortabilityLayer::RefCountedBase::~RefCountedBase() +{ +} + +inline void PortabilityLayer::RefCountedBase::IncRef() +{ + m_refCount++; +} + +inline void PortabilityLayer::RefCountedBase::DecRef() +{ + if (--m_refCount == 0) + this->Release(); +} diff --git a/PortabilityLayer/ResTypeID.h b/PortabilityLayer/ResTypeID.h new file mode 100644 index 0000000..36a1492 --- /dev/null +++ b/PortabilityLayer/ResTypeID.h @@ -0,0 +1,68 @@ +#pragma once +#ifndef __PL_RES_TYPE_ID_H__ +#define __PL_RES_TYPE_ID_H__ + +#include + +namespace PortabilityLayer +{ + class ResTypeID + { + public: + ResTypeID(); + ResTypeID(int32_t i); + ResTypeID(const ResTypeID &other); + explicit ResTypeID(const char *chars); + + ResTypeID &operator=(const ResTypeID &other); + bool operator==(const ResTypeID &other) const; + bool operator!=(const ResTypeID &other) const; + + private: + char m_id[4]; + }; +} + +#include "ResTypeIDCodec.h" +#include + +namespace PortabilityLayer +{ + inline ResTypeID::ResTypeID() + { + m_id[0] = m_id[1] = m_id[2] = m_id[3] = 0; + } + + inline ResTypeID::ResTypeID(int32_t i) + { + ResTypeIDCodec::Encode(i, m_id); + } + + inline ResTypeID::ResTypeID(const ResTypeID &other) + { + memcpy(m_id, other.m_id, 4); + } + + inline ResTypeID::ResTypeID(const char *chars) + { + memcpy(m_id, chars, 4); + } + + inline ResTypeID &ResTypeID::operator=(const ResTypeID &other) + { + memcpy(m_id, other.m_id, 4); + return *this; + } + + inline bool ResTypeID::operator==(const ResTypeID &other) const + { + return memcmp(m_id, other.m_id, 4) == 0; + } + + inline bool ResTypeID::operator!=(const ResTypeID &other) const + { + return memcmp(m_id, other.m_id, 4) != 0; + } +} + +#endif diff --git a/PortabilityLayer/ResTypeIDCodec.h b/PortabilityLayer/ResTypeIDCodec.h new file mode 100644 index 0000000..4cda1c3 --- /dev/null +++ b/PortabilityLayer/ResTypeIDCodec.h @@ -0,0 +1,70 @@ +#pragma once +#ifndef __PL_RES_TYPE_ID_CODEC_H__ +#define __PL_RES_TYPE_ID_CODEC_H__ + +#include + +namespace PortabilityLayer +{ + template + class ResTypeIDCodecResolver + { + }; + + template<> + class ResTypeIDCodecResolver<0x64636261> + { + public: + static void Encode(int32_t id, char *chars); + static int32_t Decode(char *chars); + }; + + template<> + class ResTypeIDCodecResolver<0x61626364> + { + public: + static void Encode(int32_t id, char *chars); + static int32_t Decode(char *chars); + }; + + typedef ResTypeIDCodecResolver<'abcd'> ResTypeIDCodec; +} + +namespace PortabilityLayer +{ + inline void ResTypeIDCodecResolver<0x64636261>::Encode(int32_t id, char *chars) + { + chars[0] = static_cast((id >> 0) & 0xff); + chars[1] = static_cast((id >> 8) & 0xff); + chars[2] = static_cast((id >> 16) & 0xff); + chars[3] = static_cast((id >> 24) & 0xff); + } + + inline int32_t ResTypeIDCodecResolver<0x64636261>::Decode(char *chars) + { + return static_cast( + ((chars[0] & 0xff) << 0) + | ((chars[1] & 0xff) << 8) + | ((chars[2] & 0xff) << 16) + | ((chars[3] & 0xff) << 24)); + } + + inline void ResTypeIDCodecResolver<0x61626364>::Encode(int32_t id, char *chars) + { + chars[0] = static_cast((id >> 24) & 0xff); + chars[1] = static_cast((id >> 16) & 0xff); + chars[2] = static_cast((id >> 8) & 0xff); + chars[3] = static_cast((id >> 0) & 0xff); + } + + inline int32_t ResTypeIDCodecResolver<0x61626364>::Decode(char *chars) + { + return static_cast( + ((chars[0] & 0xff) << 24) + | ((chars[1] & 0xff) << 16) + | ((chars[2] & 0xff) << 8) + | ((chars[3] & 0xff) << 0)); + } +} + +#endif diff --git a/PortabilityLayer/ResourceCompiledRef.cpp b/PortabilityLayer/ResourceCompiledRef.cpp new file mode 100644 index 0000000..ea3be2a --- /dev/null +++ b/PortabilityLayer/ResourceCompiledRef.cpp @@ -0,0 +1,17 @@ +#include "ResourceCompiledRef.h" +#include "ByteSwap.h" + +#include + +namespace PortabilityLayer +{ + uint32_t ResourceCompiledRef::GetSize() const + { + uint32_t resSize; + memcpy(&resSize, m_resData - 4, 4); + + ByteSwap::BigUInt32(resSize); + + return resSize; + } +} \ No newline at end of file diff --git a/PortabilityLayer/ResourceCompiledRef.h b/PortabilityLayer/ResourceCompiledRef.h new file mode 100644 index 0000000..37ad954 --- /dev/null +++ b/PortabilityLayer/ResourceCompiledRef.h @@ -0,0 +1,19 @@ +#pragma once + +#include + +namespace PortabilityLayer +{ + struct MMHandleBlock; + + struct ResourceCompiledRef + { + const uint8_t *m_resData; + MMHandleBlock *m_handle; + int16_t m_resID; + int16_t m_resNameOffset; + uint8_t m_attributes; + + uint32_t GetSize() const; + }; +} diff --git a/PortabilityLayer/ResourceFile.cpp b/PortabilityLayer/ResourceFile.cpp new file mode 100644 index 0000000..0df4ed7 --- /dev/null +++ b/PortabilityLayer/ResourceFile.cpp @@ -0,0 +1,375 @@ +#include "ResourceFile.h" +#include "BinarySearch.h" +#include "ByteSwap.h" +#include "MacFileMem.h" +#include "MemoryManager.h" +#include "MemReaderStream.h" +#include "ResourceCompiledRef.h" + +#include + +namespace PortabilityLayer +{ + ResourceFile::ResourceFile() + : m_resDataBlob(nullptr) + , m_resDataBlobSize(0) + , m_resNameBlob(nullptr) + , m_resNameBlobSize(0) + , m_compiledRefBlob(nullptr) + , m_numResources(0) + , m_compiledTypeListBlob(nullptr) + , m_numResourceTypes(0) + { + } + + ResourceFile::~ResourceFile() + { + if (m_resNameBlob) + delete[] m_resNameBlob; + + if (m_resDataBlob) + delete[] m_resDataBlob; + + if (m_compiledRefBlob) + delete[] m_compiledRefBlob; + + if (m_compiledTypeListBlob) + delete[] m_compiledTypeListBlob; + } + + bool ResourceFile::Load(IOStream *stream) + { + struct ResourceHeader + { + uint32_t m_resDataOffset; + uint32_t m_resMapOffset; + uint32_t m_resDataSize; + uint32_t m_resMapSize; + }; + + const UFilePos_t streamSize = stream->Size(); + if (streamSize > UINT32_MAX) + return false; + + uint32_t resForkSize = static_cast(streamSize); + + ResourceHeader resourceHeader; + + if (stream->Read(&resourceHeader, sizeof(ResourceHeader)) != sizeof(ResourceHeader)) + return false; + + ByteSwap::BigUInt32(resourceHeader.m_resDataOffset); + ByteSwap::BigUInt32(resourceHeader.m_resMapOffset); + ByteSwap::BigUInt32(resourceHeader.m_resDataSize); + ByteSwap::BigUInt32(resourceHeader.m_resMapSize); + + if (resourceHeader.m_resDataOffset > resForkSize) + return false; + + if (resourceHeader.m_resMapOffset > resForkSize) + return false; + + if (resForkSize - resourceHeader.m_resDataOffset < resourceHeader.m_resDataSize) + return false; + + if (resForkSize - resourceHeader.m_resMapOffset < resourceHeader.m_resMapSize) + return false; + + if (!stream->SeekStart(resourceHeader.m_resDataOffset)) + return false; + + m_resDataBlob = new uint8_t[resourceHeader.m_resDataSize]; + m_resDataBlobSize = resourceHeader.m_resDataSize; + + if (stream->Read(m_resDataBlob, resourceHeader.m_resDataSize) != resourceHeader.m_resDataSize) + return false; + + // The format of this is slightly different from the documented format: + // The type list offset is the offset of the type COUNT, which takes up 2 bytes. + // Usually the offset is 28, even though the size of the resource map including the + // count would appear to be 30. + + struct ResourceMap + { + uint8_t m_reserved[16 + 4 + 2]; + uint16_t m_attributes; + uint16_t m_typeListOffset; + uint16_t m_nameListOffset; + }; + + struct ResourceTypeListEntry + { + ResTypeID m_resType; + uint16_t m_numResourcesMinusOne; + uint16_t m_refListOffset; + }; + + struct ResourceRefListEntry + { + int16_t m_resID; + int16_t m_resourceNameOffset; + uint8_t m_attributes; + uint8_t m_packedResDataOffset[3]; + uint32_t m_reserved; + }; + + if (!stream->SeekStart(resourceHeader.m_resMapOffset)) + return false; + + ResourceMap resourceMap; + if (stream->Read(&resourceMap, sizeof(ResourceMap)) != sizeof(ResourceMap)) + return false; + + ByteSwap::BigUInt16(resourceMap.m_attributes); + ByteSwap::BigUInt16(resourceMap.m_typeListOffset); + ByteSwap::BigUInt16(resourceMap.m_nameListOffset); + + const size_t sizeFromStartOfResMap = resForkSize - resourceHeader.m_resMapOffset; + if (resourceMap.m_typeListOffset > sizeFromStartOfResMap) + return false; + + if (resourceMap.m_nameListOffset > sizeFromStartOfResMap) + return false; + + const size_t typeListOffset = resourceHeader.m_resMapOffset + resourceMap.m_typeListOffset; + const size_t sizeFromStartOfTypeList = resForkSize - typeListOffset; + + // First pass: Count the number of references we need + if (!stream->SeekStart(typeListOffset)) + return false; + + uint16_t numTypesMinusOne; + if (stream->Read(&numTypesMinusOne, 2) != 2) + return false; + ByteSwap::BigUInt16(numTypesMinusOne); + + m_numResourceTypes = numTypesMinusOne + 1; + + if (sizeFromStartOfTypeList < 2 || (sizeFromStartOfTypeList - 2) / 8 < m_numResourceTypes) + return false; + + uint32_t numResourcesTotal = 0; + + for (uint32_t i = 0; i < m_numResourceTypes; i++) + { + ResourceTypeListEntry tlEntry; + if (stream->Read(&tlEntry, sizeof(ResourceTypeListEntry)) != sizeof(ResourceTypeListEntry)) + return false; + + ByteSwap::BigUInt16(tlEntry.m_numResourcesMinusOne); + + const uint32_t numResourcesOfThisType = tlEntry.m_numResourcesMinusOne + 1; + + if (UINT32_MAX - numResourcesTotal < numResourcesOfThisType) + return false; + + numResourcesTotal += numResourcesOfThisType; + } + + m_compiledRefBlob = new ResourceCompiledRef[numResourcesTotal]; + m_numResources = numResourcesTotal; + + // Second pass: Compile references + ResourceCompiledRef *refToCompile = m_compiledRefBlob; + + m_compiledTypeListBlob = new CompiledTypeList[m_numResourceTypes]; + + for (uint32_t i = 0; i < m_numResourceTypes; i++) + { + if (!stream->SeekStart(typeListOffset + 2 + i * 8)) + return false; + + ResourceTypeListEntry tlEntry; + if (stream->Read(&tlEntry, sizeof(ResourceTypeListEntry)) != sizeof(ResourceTypeListEntry)) + return false; + + ByteSwap::BigUInt16(tlEntry.m_numResourcesMinusOne); + ByteSwap::BigUInt16(tlEntry.m_refListOffset); + + CompiledTypeList &ctl = m_compiledTypeListBlob[i]; + ctl.m_resType = tlEntry.m_resType; + ctl.m_firstRef = refToCompile; + ctl.m_numRefs = tlEntry.m_numResourcesMinusOne + 1; + + if (sizeFromStartOfTypeList < tlEntry.m_refListOffset) + return false; + + // Start reading the ref list + if (!stream->SeekStart(typeListOffset + tlEntry.m_refListOffset)) + return false; + + const uint32_t numResourcesOfThisType = tlEntry.m_numResourcesMinusOne + 1; + + ResourceCompiledRef *firstRefOfThisType = refToCompile; + + for (uint32_t i = 0; i < numResourcesOfThisType; i++) + { + ResourceRefListEntry refListEntry; + if (stream->Read(&refListEntry, sizeof(ResourceRefListEntry)) != sizeof(ResourceRefListEntry)) + return false; + + ByteSwap::BigInt16(refListEntry.m_resID); + ByteSwap::BigInt16(refListEntry.m_resourceNameOffset); + + const uint8_t *packedOffset = refListEntry.m_packedResDataOffset; + + const size_t dataSizeOffset = (packedOffset[0] << 16) + (packedOffset[1] << 8) + packedOffset[2]; + + if (dataSizeOffset > resourceHeader.m_resDataSize) + return false; + + // Needs to be at least size 4 to decode the resource size + if (resourceHeader.m_resDataSize - dataSizeOffset < 4) + return false; + + const size_t dataOffset = dataSizeOffset + 4; + + refToCompile->m_attributes = refListEntry.m_attributes; + refToCompile->m_resData = m_resDataBlob + dataOffset; + refToCompile->m_resID = refListEntry.m_resID; + refToCompile->m_resNameOffset = refListEntry.m_resourceNameOffset; + refToCompile->m_handle = nullptr; + + uint32_t resSize; + memcpy(&resSize, m_resDataBlob + dataSizeOffset, 4); + + ByteSwap::BigUInt32(resSize); + + if (resSize > resourceHeader.m_resDataSize) + return false; + + if (resourceHeader.m_resDataSize - resSize < dataOffset) + return false; + + refToCompile++; + } + + std::sort(firstRefOfThisType, refToCompile, CompiledRefSortPredicate); + + for (uint32_t i = 1; i < numResourcesOfThisType; i++) + { + if (firstRefOfThisType[i - 1].m_resID == firstRefOfThisType[i].m_resID) + return false; + } + } + + if (m_numResources > 0) + { + bool anyNamed = false; + + size_t lastNameStart = 0; + for (size_t i = 0; i < m_numResources; i++) + { + const ResourceCompiledRef &ref = m_compiledRefBlob[i]; + if (ref.m_resNameOffset < 0) + { + if (ref.m_resNameOffset != -1) + return false; // Non-compliant + } + else + { + anyNamed = true; + + const size_t candidateOffset = static_cast(ref.m_resNameOffset); + if (candidateOffset > lastNameStart) + lastNameStart = candidateOffset; + } + } + + if (anyNamed) + { + const size_t nameListCapacity = sizeFromStartOfResMap - resourceMap.m_nameListOffset; + if (lastNameStart >= nameListCapacity) + return false; + + m_resNameBlobSize = lastNameStart + 1 + 256; + m_resNameBlob = new uint8_t[m_resNameBlobSize]; + memset(m_resNameBlob, 0, m_resNameBlobSize); + + if (!stream->SeekStart(resourceHeader.m_resMapOffset + resourceMap.m_nameListOffset)) + return false; + + if (stream->Read(m_resNameBlob, lastNameStart + 1) != lastNameStart + 1) + return false; + + // Figure out the length of the final string + const size_t lastStringLength = m_resNameBlob[lastNameStart]; + if (lastStringLength > 0) + { + if (stream->Read(m_resNameBlob + lastNameStart + 1, lastStringLength) != lastStringLength) + return false; + } + } + } + + std::sort(m_compiledTypeListBlob, m_compiledTypeListBlob + m_numResourceTypes, CompiledTypeListSortPredicate); + + for (uint32_t i = 1; i < m_numResourceTypes; i++) + { + if (m_compiledTypeListBlob[i - 1].m_resType == m_compiledTypeListBlob[i].m_resType) + return false; + } + + return true; + } + + bool ResourceFile::CompiledRefSortPredicate(const ResourceCompiledRef &a, const ResourceCompiledRef &b) + { + return a.m_resID < b.m_resID; + } + + bool ResourceFile::CompiledTypeListSortPredicate(const CompiledTypeList &a, const CompiledTypeList &b) + { + return memcmp(&a.m_resType, &b.m_resType, sizeof(ResTypeID)) < 0; + } + + int ResourceFile::CompiledRefSearchPredicate(int resID, const ResourceCompiledRef &ref) + { + return resID - ref.m_resID; + } + + int ResourceFile::CompiledTypeListSearchPredicate(const ResTypeID &resTypeID, const CompiledTypeList &typeList) + { + return memcmp(&resTypeID, &typeList.m_resType, 4); + } + + MMHandleBlock *ResourceFile::GetResource(const ResTypeID &resType, int id, bool load) + { + const CompiledTypeList *tlStart = m_compiledTypeListBlob; + const CompiledTypeList *tlEnd = tlStart + m_numResourceTypes; + + const CompiledTypeList *tl = BinarySearch(tlStart, tlEnd, resType, CompiledTypeListSearchPredicate); + if (tl == tlEnd) + return nullptr; + + ResourceCompiledRef *refStart = tl->m_firstRef; + ResourceCompiledRef *refEnd = refStart + tl->m_numRefs; + ResourceCompiledRef *ref = BinarySearch(refStart, refEnd, id, CompiledRefSearchPredicate); + + if (ref == refEnd) + return nullptr; + + MMHandleBlock *handle = nullptr; + if (ref->m_handle != nullptr) + handle = ref->m_handle; + else + { + handle = MemoryManager::GetInstance()->AllocHandle(0); + handle->m_rmSelfRef = ref; + ref->m_handle = handle; + } + + if (handle->m_contents == nullptr && load) + { + const uint32_t resSize = ref->GetSize(); + if (resSize > 0) + { + void *contents = MemoryManager::GetInstance()->Alloc(resSize); + handle->m_contents = contents; + memcpy(handle->m_contents, ref->m_resData, resSize); + } + } + + return handle; + } +} diff --git a/PortabilityLayer/ResourceFile.h b/PortabilityLayer/ResourceFile.h new file mode 100644 index 0000000..198f870 --- /dev/null +++ b/PortabilityLayer/ResourceFile.h @@ -0,0 +1,54 @@ +#pragma once +#ifndef __PL_RESOURCE_FILE_H__ +#define __PL_RESOURCE_FILE_H__ + +#include "ResTypeID.h" +#include + +namespace PortabilityLayer +{ + class IOStream; + class MacFileMem; + struct MMHandleBlock; + struct ResourceCompiledRef; + class ResTypeID; + + class ResourceFile + { + public: + ResourceFile(); + ~ResourceFile(); + + bool Load(IOStream *stream); + + MMHandleBlock *GetResource(const ResTypeID &resType, int id, bool load); + + private: + struct CompiledTypeList + { + ResTypeID m_resType; + ResourceCompiledRef *m_firstRef; + size_t m_numRefs; + }; + + uint8_t *m_resDataBlob; + size_t m_resDataBlobSize; + + uint8_t *m_resNameBlob; + size_t m_resNameBlobSize; + + ResourceCompiledRef *m_compiledRefBlob; + size_t m_numResources; + + CompiledTypeList *m_compiledTypeListBlob; + size_t m_numResourceTypes; + + static bool CompiledRefSortPredicate(const ResourceCompiledRef &a, const ResourceCompiledRef &b); + static bool CompiledTypeListSortPredicate(const CompiledTypeList &a, const CompiledTypeList &b); + + static int CompiledRefSearchPredicate(int resID, const ResourceCompiledRef &ref); + static int CompiledTypeListSearchPredicate(const ResTypeID &resTypeID, const CompiledTypeList &typeList); + }; +} + +#endif diff --git a/PortabilityLayer/ResourceManager.h b/PortabilityLayer/ResourceManager.h new file mode 100644 index 0000000..76899cd --- /dev/null +++ b/PortabilityLayer/ResourceManager.h @@ -0,0 +1,28 @@ +#pragma once + +#include "VirtualDirectory.h" + +class PLPasStr; + +namespace PortabilityLayer +{ + struct MMHandleBlock; + class ResTypeID; + + class ResourceManager + { + public: + virtual void Init() = 0; + virtual void Shutdown() = 0; + + virtual void SetResLoad(bool load) = 0; + + virtual short OpenResFork(EVirtualDirectory virtualDir, const PLPasStr &filename) = 0; + virtual MMHandleBlock *GetResource(const ResTypeID &resType, int id) = 0; + + virtual short GetCurrentResFile() const = 0; + virtual void SetCurrentResFile(short ref) = 0; + + static ResourceManager *GetInstance(); + }; +} diff --git a/PortabilityLayer/ScopedArray.h b/PortabilityLayer/ScopedArray.h new file mode 100644 index 0000000..3dfc9da --- /dev/null +++ b/PortabilityLayer/ScopedArray.h @@ -0,0 +1,83 @@ +#pragma once + +#ifndef __PL_SCOPEDARRAY_H__ +#define __PL_SCOPEDARRAY_H__ + +#include "CoreDefs.h" + +namespace PortabilityLayer +{ + template + class ScopedArray + { + public: + ScopedArray(); + ScopedArray(T *ref); + ~ScopedArray(); + + void Swap(ScopedArray &other); + + operator T*(); + operator const T*() const; + + void Set(T *ref); + + private: + ScopedArray(const ScopedArray &other) PL_DELETED; + void operator=(const ScopedArray &other) PL_DELETED; + T *m_ref; + }; +} + +namespace PortabilityLayer +{ + template + inline ScopedArray::ScopedArray() + : m_ref(nullptr) + { + } + + template + inline ScopedArray::ScopedArray(T *ref) + : m_ref(ref) + { + } + + template + inline ScopedArray::~ScopedArray() + { + if (m_ref) + delete[] m_ref; + } + + template + inline void ScopedArray::Swap(ScopedArray &other) + { + T *temp = m_ref; + m_ref = other.m_ref; + other.m_ref = temp; + } + + template + inline ScopedArray::operator T*() + { + return m_ref; + } + + template + inline ScopedArray::operator const T*() const + { + return m_ref; + } + + template + inline void ScopedArray::Set(T *ref) + { + if (m_ref && m_ref != ref) + delete m_ref; + + m_ref = ref; + } +} + +#endif diff --git a/PortabilityLayer/ScopedPtr.h b/PortabilityLayer/ScopedPtr.h new file mode 100644 index 0000000..934ef10 --- /dev/null +++ b/PortabilityLayer/ScopedPtr.h @@ -0,0 +1,97 @@ +#pragma once + +#ifndef __PL_SCOPEDPTR_H__ +#define __PL_SCOPEDPTR_H__ + +#include "CoreDefs.h" + +namespace PortabilityLayer +{ + template + class ScopedPtr + { + public: + ScopedPtr(); + ScopedPtr(T *ref); + ~ScopedPtr(); + + void Swap(ScopedPtr &other); + + operator T*(); + operator const T*() const; + T *operator->(); + const T *operator->() const; + + void Set(T *ref); + + private: + ScopedPtr(const ScopedPtr &other) PL_DELETED; + void operator=(const ScopedPtr &other) PL_DELETED; + T *m_ref; + }; +} + +namespace PortabilityLayer +{ + template + inline ScopedPtr::ScopedPtr() + : m_ref(nullptr) + { + } + + template + inline ScopedPtr::ScopedPtr(T *ref) + : m_ref(ref) + { + } + + template + inline ScopedPtr::~ScopedPtr() + { + if (m_ref) + delete m_ref; + } + + template + inline void ScopedPtr::Swap(ScopedPtr &other) + { + T *temp = m_ref; + m_ref = other.m_ref; + other.m_ref = temp; + } + + template + inline ScopedPtr::operator T*() + { + return m_ref; + } + + template + inline ScopedPtr::operator const T*() const + { + return m_ref; + } + + template + inline T *ScopedPtr::operator->() + { + return m_ref; + } + + template + inline const T *ScopedPtr::operator->() const + { + return m_ref; + } + + template + inline void ScopedPtr::Set(T *ref) + { + if (m_ref && m_ref != ref) + delete m_ref; + + m_ref = ref; + } +} + +#endif diff --git a/PortabilityLayer/SmallestInt.h b/PortabilityLayer/SmallestInt.h new file mode 100644 index 0000000..3bee75e --- /dev/null +++ b/PortabilityLayer/SmallestInt.h @@ -0,0 +1,100 @@ +#pragma once + +#ifndef __PL_SMALLESTINT_H__ +#define __PL_SMALLESTINT_H__ + +#include "DataTypes.h" + +namespace PortabilityLayer +{ + namespace Internal_SmallestInt + { + template + class SmallestIntSignedResolver + { + }; + + template + class SmallestIntUnsignedResolver + { + }; + + template<> + class SmallestIntSignedResolver<1, 1, 1, 1> + { + public: + typedef int8_t ValueType_t; + }; + + template<> + class SmallestIntSignedResolver<0, 1, 1, 1> + { + public: + typedef int16_t ValueType_t; + }; + + template<> + class SmallestIntSignedResolver<0, 0, 1, 1> + { + public: + typedef int32_t ValueType_t; + }; + + template<> + class SmallestIntSignedResolver<0, 0, 0, 1> + { + public: + typedef int64_t ValueType_t; + }; + + template<> + class SmallestIntUnsignedResolver<1, 1, 1, 1> + { + public: + typedef uint8_t ValueType_t; + }; + + template<> + class SmallestIntUnsignedResolver<0, 1, 1, 1> + { + public: + typedef uint16_t ValueType_t; + }; + + template<> + class SmallestIntUnsignedResolver<0, 0, 1, 1> + { + public: + typedef uint32_t ValueType_t; + }; + + template<> + class SmallestIntUnsignedResolver<0, 0, 0, 1> + { + public: + typedef uint64_t ValueType_t; + }; + } + + template + struct SmallestInt + { + typedef typename Internal_SmallestInt::SmallestIntSignedResolver< + TValue >= -128 && TValue <= 127, + TValue >= -32768 && TValue <= 32767, + TValue >= -2147483648LL && TValue <= 2147483647LL, + 1>::ValueType_t ValueType_t; + }; + + template + struct SmallestUInt + { + typedef typename Internal_SmallestInt::SmallestIntUnsignedResolver< + TValue <= 256, + TValue <= 65536, + TValue <= 4294967295, + 1>::ValueType_t ValueType_t; + }; +} + +#endif diff --git a/PortabilityLayer/UnsafePascalStr.h b/PortabilityLayer/UnsafePascalStr.h new file mode 100644 index 0000000..bcdab92 --- /dev/null +++ b/PortabilityLayer/UnsafePascalStr.h @@ -0,0 +1,90 @@ +#pragma once + +#ifndef __PL_UNSAFEPASCALSTR_H__ +#define __PL_UNSAFEPASCALSTR_H__ + +#include "DataTypes.h" +#include "SmallestInt.h" + +namespace PortabilityLayer +{ + template + class UnsafePascalStr + { + public: + UnsafePascalStr(); + UnsafePascalStr(size_t size, const char *str); + + char &operator[](size_t index); + const char &operator[](size_t index) const; + void Set(size_t size, const char *str); + void SetLength(size_t size); + size_t Length() const; + + private: + char m_chars[TSize + (TCStr ? 1 : 0)]; + typename SmallestUInt::ValueType_t m_size; + }; +} + +#include +#include + +namespace PortabilityLayer +{ + template + inline UnsafePascalStr::UnsafePascalStr(size_t size, const char *str) + : m_size(static_cast::ValueType_t>(size)) + { + assert(size <= TSize); + + if (size) + memcpy(m_chars, str, size); + + if (TCStr) + m_chars[size] = '\0'; + } + + template + inline char &UnsafePascalStr::operator[](size_t index) + { + assert(index < m_size); + return m_chars[index]; + } + + template + inline const char &UnsafePascalStr::operator[](size_t index) const + { + assert(index < m_size); + return m_chars[index]; + } + + template + inline void UnsafePascalStr::Set(size_t size, const char *str) + { + assert(size <= TSize); + + memcpy(m_chars, str, size); + m_size = static_cast::ValueType_t>(size); + + if (TCStr) + m_chars[size] = '\0'; + } + + template + inline void UnsafePascalStr::SetLength(size_t size) + { + assert(size <= TSize); + + if (TCStr) + m_chars[size] = '\0'; + } + + template + inline size_t UnsafePascalStr::Length() const + { + return m_size; + } +} + +#endif diff --git a/PortabilityLayer/VirtualDirectory.h b/PortabilityLayer/VirtualDirectory.h new file mode 100644 index 0000000..ec7f156 --- /dev/null +++ b/PortabilityLayer/VirtualDirectory.h @@ -0,0 +1,15 @@ +#pragma once +#ifndef __PL_VIRTUALDIRECTORY_H__ +#define __PL_VIRTUALDIRECTORY_H__ + +namespace PortabilityLayer +{ + enum EVirtualDirectory + { + EVirtualDirectory_ApplicationData = 1, + EVirtualDirectory_GameData, + EVirtualDirectory_Prefs, + }; +} + +#endif diff --git a/PortabilityLayer/XModemCRC.cpp b/PortabilityLayer/XModemCRC.cpp new file mode 100644 index 0000000..8c66e20 --- /dev/null +++ b/PortabilityLayer/XModemCRC.cpp @@ -0,0 +1,54 @@ +#include "XModemCRC.h" + +namespace +{ + static const uint16_t gs_crcTable[256] = + { + 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7, + 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, + 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6, + 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de, + 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485, + 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d, + 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4, + 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, + 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823, + 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b, + 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12, + 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a, + 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41, + 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49, + 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70, + 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78, + 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f, + 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067, + 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e, + 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256, + 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d, + 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405, + 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c, + 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634, + 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab, + 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3, + 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a, + 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92, + 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, + 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1, + 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8, + 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0, + }; +} + +uint16_t PortabilityLayer::XModemCRC(const void *bytes, size_t size, uint16_t initialValue) +{ + const uint8_t *bytesU8 = static_cast(bytes); + int crc = initialValue; + + for (size_t i = 0; i < size; i++) + { + crc ^= (bytesU8[i] << 8); + crc = static_cast(((crc << 8) ^ gs_crcTable[crc >> 8]) & 0xffff); + } + + return static_cast(crc); +} diff --git a/PortabilityLayer/XModemCRC.h b/PortabilityLayer/XModemCRC.h new file mode 100644 index 0000000..e34708c --- /dev/null +++ b/PortabilityLayer/XModemCRC.h @@ -0,0 +1,13 @@ +#pragma once + +#ifndef __PL_XMODEMCRC_H__ +#define __PL_XMODEMCRC_H__ + +#include "DataTypes.h" + +namespace PortabilityLayer +{ + uint16_t XModemCRC(const void *bytes, size_t size, uint16_t initialValue); +} + +#endif diff --git a/PortabilityLayer/x64/Debug/PortabilityLayer.idb b/PortabilityLayer/x64/Debug/PortabilityLayer.idb new file mode 100644 index 0000000000000000000000000000000000000000..30308f0234ce5b3d26b5c1214a88b9b85f231836 GIT binary patch literal 338944 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

      )2 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 #include #include #include "About.h" #include "DialogUtils.h" #include "Environ.h" #include "Externs.h" static void HiLiteOkayButton (void); static void UnHiLiteOkayButton (void); static void UpdateMainPict (DialogPtr); static pascal Boolean AboutFilter (DialogPtr, EventRecord *theEvent, short *hit); static RgnHandle okayButtRgn; static Rect okayButtonBounds, mainPICTBounds; static Boolean okayButtIsHiLit, clickedDownInOkay; //============================================================== Functions //-------------------------------------------------------------- DoAbout // Brings up the About dialog box. void DoAbout (void) { #define kAboutDialogID 150 // res ID of About dialog #define kTextItemVers 2 // item number of version text #define kPictItemMain 4 // item number of main PICT DialogPtr aboutDialog; Str255 longVersion; StringPtr messagePtr; VersRecHndl version; Handle itemHandle; short itemType, hit, wasResFile; ModalFilterUPP aboutFilterUPP; aboutFilterUPP = NewModalFilterUPP(AboutFilter); wasResFile = CurResFile(); UseResFile(thisMac.thisResFile); aboutDialog = GetNewDialog(kAboutDialogID, nil, (WindowRef)-1L); // if (aboutDialog == nil) // RedAlert(kErrDialogDidntLoad); version = (VersRecHndl)GetResource('vers', 1); if (version != nil) { messagePtr = (StringPtr)(((UInt32)&(**version).shortVersion[1]) + ((**version).shortVersion[0])); BlockMove((Ptr)messagePtr, &longVersion, ((UInt8)*messagePtr) + 1); SetDialogString(aboutDialog, kTextItemVers, longVersion); } GetDialogItem(aboutDialog, kOkayButton, &itemType, &itemHandle, &okayButtonBounds); okayButtRgn = NewRgn(); // Create diagonal button region OpenRgn(); MoveTo(okayButtonBounds.left + 1, okayButtonBounds.top + 45); Line(44, -44); // These lines define the region Line(16, 16); Line(-44, 44); Line(-16, -16); CloseRgn(okayButtRgn); okayButtIsHiLit = false; // Initially, button is not hilit clickedDownInOkay = false; // Initially, didn't click in okay button GetDialogItem(aboutDialog, kPictItemMain, &itemType, &itemHandle, &mainPICTBounds); do // Loop until user wants to exit { ModalDialog(aboutFilterUPP, &hit); } while ((hit != kOkayButton) && (okayButtRgn != nil)); if (okayButtRgn != nil) DisposeRgn(okayButtRgn); // Clean up! DisposeDialog(aboutDialog); DisposeModalFilterUPP(aboutFilterUPP); UseResFile(wasResFile); } //============================================================== Static Functions //-------------------------------------------------------------- HiLiteOkayButton // Draws my pseudo-button to appear as though it is clicked on. static void HiLiteOkayButton (void) { #define kOkayButtPICTHiLit 151 // res ID of unhilit button PICT PicHandle thePict; if (!okayButtIsHiLit) { thePict = GetPicture(kOkayButtPICTHiLit); if (thePict != nil) { DrawPicture(thePict, &okayButtonBounds); ReleaseResource((Handle)thePict); okayButtIsHiLit = true; } } } //-------------------------------------------------------------- UnHiLiteOkayButton // Draws my pseudo-button normal (not clicked on). static void UnHiLiteOkayButton (void) { #define kOkayButtPICTNotHiLit 150 // res ID of hilit button PICT PicHandle thePict; if (okayButtIsHiLit) { thePict = GetPicture(kOkayButtPICTNotHiLit); if (thePict != nil) { DrawPicture(thePict, &okayButtonBounds); ReleaseResource((Handle)thePict); okayButtIsHiLit = false; } } } //-------------------------------------------------------------- UpdateMainPict // Redraws the main graphic in the dialog (in response to an update event). static void UpdateMainPict (DialogPtr theDial) { Str255 theStr, theStr2; long totalSize, contigSize; DrawDialog(theDial); PasStringCopy("\pMemory: ", theStr); // display free memory PurgeSpace(&totalSize, &contigSize); totalSize /= 1024; NumToString(totalSize, theStr2); PasStringConcat(theStr, theStr2); PasStringConcat(theStr, "\pK"); DrawDialogUserText2(theDial, 7, theStr); PasStringCopy("\pScreen: ", theStr); // display screen size/depth NumToString((long)(thisMac.screen.right - thisMac.screen.left), theStr2); PasStringConcat(theStr, theStr2); PasStringConcat(theStr, "\px"); NumToString((long)(thisMac.screen.bottom - thisMac.screen.top), theStr2); PasStringConcat(theStr, theStr2); PasStringConcat(theStr, "\px"); NumToString((long)thisMac.isDepth, theStr2); PasStringConcat(theStr, theStr2); DrawDialogUserText2(theDial, 8, theStr); } //-------------------------------------------------------------- AboutFilter // Dialog filter for the About dialog. static pascal Boolean AboutFilter (DialogPtr theDial, EventRecord *theEvent, short *hit) { Point mousePt; UInt32 dummyLong; Boolean handledIt; if (Button() && clickedDownInOkay) { GetMouse(&mousePt); if(PtInRgn(mousePt, okayButtRgn)) HiLiteOkayButton(); else UnHiLiteOkayButton(); } switch (theEvent->what) { case keyDown: switch ((theEvent->message) & charCodeMask) { case kReturnKeyASCII: case kEnterKeyASCII: HiLiteOkayButton(); Delay(8, &dummyLong); UnHiLiteOkayButton(); *hit = kOkayButton; handledIt = true; break; default: handledIt = false; } break; case mouseDown: mousePt = theEvent->where; GlobalToLocal(&mousePt); if(PtInRgn(mousePt, okayButtRgn)) { clickedDownInOkay = true; handledIt = false; } else handledIt = false; break; case mouseUp: mousePt = theEvent->where; GlobalToLocal(&mousePt); if(PtInRgn(mousePt, okayButtRgn) && clickedDownInOkay) { UnHiLiteOkayButton(); *hit = kOkayButton; handledIt = true; } else { clickedDownInOkay = false; handledIt = false; } break; case updateEvt: if ((WindowPtr)theEvent->message == mainWindow) { SetPort((GrafPtr)mainWindow); BeginUpdate((WindowPtr)theEvent->message); UpdateMainWindow(); EndUpdate((WindowPtr)theEvent->message); SetPortDialogPort(theDial); handledIt = true; } else if ((WindowPtr)theEvent->message == (WindowPtr)theDial) { SetPortDialogPort(theDial); BeginUpdate((WindowPtr)theEvent->message); UpdateMainPict(theDial); EndUpdate((WindowPtr)theEvent->message); handledIt = false; } break; default: handledIt = false; break; } return (handledIt); } \ No newline at end of file diff --git a/Sources/AnimCursor.c b/Sources/AnimCursor.c deleted file mode 100755 index 102d1b8..0000000 --- a/Sources/AnimCursor.c +++ /dev/null @@ -1 +0,0 @@ - //============================================================================ //---------------------------------------------------------------------------- // AnimCursor.c //---------------------------------------------------------------------------- //============================================================================ #include #include "Externs.h" #include "Environ.h" #define rAcurID 128 #define rHandCursorID 1000 typedef struct { short n; short index; union { Handle cursorHdl; short resID; } frame[1]; } acurRec, *acurPtr, **acurHandle; Boolean GetMonoCursors (acurHandle); Boolean GetColorCursors (acurHandle); void InitAnimatedCursor (acurHandle); acurHandle animCursorH = nil; Boolean useColorCursor = false; //============================================================== Functions //-------------------------------------------------------------- GetMonoCursors // Loads b&w cursors (for animated beach ball). Boolean GetMonoCursors (acurHandle ballCursH) { short i, j; CursHandle cursHdl; if (ballCursH) // Were we passed a legit acur handle? { j = (*ballCursH)->n; // Get number of 'frames' in the acur for (i = 0; i < j; i++) // Start walking the frames { cursHdl = GetCursor((*ballCursH)->frame[i].resID); if (cursHdl == nil) // Did the cursor load? It didn't?... { // Well then, toss what we got. for (j = 0; j < i; j++) DisposeHandle((*ballCursH)->frame[j].cursorHdl); return(false); // And report this to mother. } // However!... else // If cursor loaded ok... { // Detach it from the resource map... DetachResource((Handle)cursHdl); // And assign to our struct (*ballCursH)->frame[i].cursorHdl = (Handle)cursHdl; } } } return(true); } //-------------------------------------------------------------- GetColorCursors // Loads color cursors (for animated beach ball). Boolean GetColorCursors (acurHandle ballCursH) { short i, j; CCrsrHandle cursHdl; Boolean result = true; if (ballCursH) { j = (*ballCursH)->n; // Get the number of cursors HideCursor(); // Hide the cursor for (i = 0; i < j; i++) // Walk through the acur resource { cursHdl = GetCCursor((*ballCursH)->frame[i].resID); // Get the cursor if (cursHdl == nil) // Make sure a real cursor was returned { // If not, trash all cursors loaded for (j = 0; j < i; j++) DisposeCCursor((CCrsrHandle)(*ballCursH)->frame[j].cursorHdl); result = false; // Tell calling proc we failed break; // And break out of the loop } else // But, if the cursor loaded ok { // add it to our list or cursor handles (*ballCursH)->frame[i].cursorHdl = (Handle)cursHdl; SetCCursor((CCrsrHandle)(*ballCursH)->frame[i].cursorHdl); } } InitCursor(); // Show the cursor again (as arrow) } return(result); // Return to calling proc w/ results } //-------------------------------------------------------------- InitAnimatedCursor // Loads and sets up animated beach ball cursor structures. void InitAnimatedCursor (acurHandle ballCursH) { Boolean useColor; useColor = thisMac.hasColor; if (ballCursH == nil) ballCursH = (void *)GetResource('acur', 128); if (ballCursH && ballCursH != animCursorH) { HNoPurge((Handle)ballCursH); MoveHHi((Handle)ballCursH); HLock((Handle)ballCursH); if (useColor) useColor = GetColorCursors(ballCursH); if (!useColor && !GetMonoCursors(ballCursH)) RedAlert(kErrFailedResourceLoad); DisposCursors(); animCursorH = ballCursH; useColorCursor = useColor; (*ballCursH)->index = 0; } else RedAlert(kErrFailedResourceLoad); } //-------------------------------------------------------------- LoadCursors // Just calls the above function. Other code could be added here thoughÉ // to add additional cursors. void LoadCursors (void) { InitAnimatedCursor((acurHandle)GetResource('acur', rAcurID)); } //-------------------------------------------------------------- DisposCursors // Disposes of all memory allocated by anaimated beach ball cursors. void DisposCursors (void) { register short i, j; if (animCursorH != nil) { j = (*animCursorH)->n; if (useColorCursor) { for (i = 0; i < j; i++) { if ((*animCursorH)->frame[i].cursorHdl != nil) DisposeCCursor((CCrsrHandle)(*animCursorH)->frame[i].cursorHdl); } } else { for (i = 0; i < j; i++) { if ((*animCursorH)->frame[i].cursorHdl != nil) DisposeHandle((Handle)(*animCursorH)->frame[i].cursorHdl); } } ReleaseResource((Handle)animCursorH); animCursorH = nil; } } //-------------------------------------------------------------- IncrementCursor // Advances the beach ball cursor one frame. void IncrementCursor (void) { if (animCursorH == 0) InitAnimatedCursor(nil); if (animCursorH) { (*animCursorH)->index++; (*animCursorH)->index %= (*animCursorH)->n; if (useColorCursor) { SetCCursor((CCrsrHandle)(*animCursorH)-> frame[(*animCursorH)->index].cursorHdl); } else { SetCursor((CursPtr)*(*animCursorH)-> frame[(*animCursorH)->index].cursorHdl); } } else SetCursor((CursPtr)*GetCursor(watchCursor)); } //-------------------------------------------------------------- DecrementCursor // Reverses the beach ball cursor one frame. void DecrementCursor (void) { if (animCursorH == 0) InitAnimatedCursor(nil); if (animCursorH) { (*animCursorH)->index--; if (((*animCursorH)->index) < 0) (*animCursorH)->index = ((*animCursorH)->n) - 1; if (useColorCursor) { SetCCursor((CCrsrHandle)(*animCursorH)-> frame[(*animCursorH)->index].cursorHdl); } else { SetCursor((CursPtr)*(*animCursorH)-> frame[(*animCursorH)->index].cursorHdl); } } else SetCursor((CursPtr)*GetCursor(watchCursor)); } //-------------------------------------------------------------- SpinCursor // Advances the beach ball cursor the number of frames specified. void SpinCursor (short incrementIndex) { UInt32 dummyLong; short i; for (i = 0; i < incrementIndex; i++) { IncrementCursor(); Delay(1, &dummyLong); } } //-------------------------------------------------------------- BackSpinCursor // Reverses the beach ball cursor the number of frames specified. void BackSpinCursor (short decrementIndex) { UInt32 dummyLong; short i; for (i = 0; i < decrementIndex; i++) { DecrementCursor(); Delay(1, &dummyLong); } } \ No newline at end of file diff --git a/Sources/AppleEvents.c b/Sources/AppleEvents.c deleted file mode 100755 index 44d3ec9..0000000 --- a/Sources/AppleEvents.c +++ /dev/null @@ -1 +0,0 @@ - //============================================================================ //---------------------------------------------------------------------------- // AppleEvents.c //---------------------------------------------------------------------------- //============================================================================ #include "Externs.h" #include #include "House.h" #define kNoPrintingAlert 1031 pascal OSErr DoOpenAppAE (const AppleEvent *, AppleEvent *, UInt32); pascal OSErr DoOpenDocAE (const AppleEvent *, AppleEvent *, UInt32); pascal OSErr DoPrintDocAE (const AppleEvent *, AppleEvent *, UInt32); pascal OSErr DoQuitAE (const AppleEvent *, AppleEvent *, UInt32); pascal OSErr MyGotRequiredParams (const AppleEvent *); AEEventHandlerUPP openAppAEUPP, openDocAEUPP, printDocAEUPP, quitAEUPP; extern FSSpecPtr theHousesSpecs; extern long incrementModeTime; extern short thisHouseIndex, splashOriginH, splashOriginV; extern Boolean quitting; //============================================================== Functions //-------------------------------------------------------------- DoOpenAppAE // Handles an "Open Application" Apple Event. pascal OSErr DoOpenAppAE (const AppleEvent *theAE, AppleEvent *reply, UInt32 ref) { #pragma unused (reply, ref) OSErr theErr; theErr = MyGotRequiredParams(theAE); return (theErr); } //-------------------------------------------------------------- DoOpenDocAE // Handles an "Open Document" Apple Event. pascal OSErr DoOpenDocAE (const AppleEvent *theAE, AppleEvent *reply, UInt32 ref) { #pragma unused (reply, ref) FSSpec oneFSS; FInfo finderInfo; AEDescList docList; long itemsInList; Size actualSize; AEKeyword keywd; DescType returnedType; OSErr theErr, whoCares; short i; theErr = AEGetParamDesc(theAE, keyDirectObject, typeAEList, &docList); if (theErr != noErr) { YellowAlert(kYellowAppleEventErr, theErr); return (theErr); } theErr = MyGotRequiredParams(theAE); if (theErr != noErr) { whoCares = AEDisposeDesc(&docList); return (theErr); } theErr = AECountItems(&docList, &itemsInList); if (theErr != noErr) { whoCares = AEDisposeDesc(&docList); return (theErr); } #ifndef COMPILEDEMO for (i = 1; i <= itemsInList; i++) { theErr = AEGetNthPtr(&docList, i, typeFSS, &keywd, &returnedType, &oneFSS, sizeof(oneFSS), &actualSize); if (theErr == noErr) { theErr = FSpGetFInfo(&oneFSS, &finderInfo); if ((theErr == noErr) && (finderInfo.fdType == 'gliH')) AddExtraHouse(&oneFSS); } } if (itemsInList > 0) { theErr = AEGetNthPtr(&docList, 1, typeFSS, &keywd, &returnedType, &oneFSS, sizeof(oneFSS), &actualSize); if (theErr == noErr) { theErr = FSpGetFInfo(&oneFSS, &finderInfo); if ((theErr == noErr) && (finderInfo.fdType == 'gliH')) { whoCares = CloseHouse(); PasStringCopy(oneFSS.name, thisHouseName); BuildHouseList(); if (OpenHouse()) whoCares = ReadHouse(); PasStringCopy(theHousesSpecs[thisHouseIndex].name, thisHouseName); OpenCloseEditWindows(); incrementModeTime = TickCount() + kIdleSplashTicks; if ((theMode == kSplashMode) || (theMode == kPlayMode)) { Rect updateRect; SetRect(&updateRect, splashOriginH + 474, splashOriginV + 304, splashOriginH + 474 + 166, splashOriginV + 304 + 12); InvalWindowRect(mainWindow, &updateRect); } } } InitCursor(); } #endif whoCares = AEDisposeDesc(&docList); return theErr; } //-------------------------------------------------------------- DoPrintDocAE // Handles a "Print Document" Apple Event. pascal OSErr DoPrintDocAE (const AppleEvent *theAE, AppleEvent *reply, UInt32 ref) { #pragma unused (theAE, reply, ref) short hitWhat; // CenterAlert(kNoPrintingAlert); hitWhat = Alert(kNoPrintingAlert, nil); return errAEEventNotHandled; } //-------------------------------------------------------------- DoQuitAE // Handles a "Quit Application" Apple Event. pascal OSErr DoQuitAE (const AppleEvent *theAE, AppleEvent *reply, UInt32 ref) { #pragma unused (reply, ref) OSErr isHuman; isHuman = MyGotRequiredParams(theAE); if (isHuman == noErr) quitting = true; return isHuman; } //-------------------------------------------------------------- MyGotRequiredParams // Have no clue! :) pascal OSErr MyGotRequiredParams (const AppleEvent *theAE) { DescType returnedType; Size actualSize; return (AEGetAttributePtr(theAE, keyMissedKeywordAttr, typeWildCard, &returnedType, 0L, 0, &actualSize) == errAEDescNotFound) ? noErr : errAEParamMissed; } //-------------------------------------------------------------- SetUpAppleEvents // Initializes all handlers, etc. for dealing with Apple Events. void SetUpAppleEvents (void) { OSErr theErr; openAppAEUPP = NewAEEventHandlerProc(DoOpenAppAE); openDocAEUPP = NewAEEventHandlerProc(DoOpenDocAE); printDocAEUPP = NewAEEventHandlerProc(DoPrintDocAE); quitAEUPP = NewAEEventHandlerProc(DoQuitAE); theErr = AEInstallEventHandler(kCoreEventClass, // install oapp kAEOpenApplication, openAppAEUPP, 0, false); if (theErr != noErr) YellowAlert(kYellowAppleEventErr, theErr); theErr = AEInstallEventHandler(kCoreEventClass, // install odoc kAEOpenDocuments, openDocAEUPP, 0, false); if (theErr != noErr) YellowAlert(kYellowAppleEventErr, theErr); theErr = AEInstallEventHandler(kCoreEventClass, // install pdoc kAEPrintDocuments, printDocAEUPP, 0, false); if (theErr != noErr) YellowAlert(kYellowAppleEventErr, theErr); theErr = AEInstallEventHandler(kCoreEventClass, // install quit kAEQuitApplication, quitAEUPP, 0, false); if (theErr != noErr) YellowAlert(kYellowAppleEventErr, theErr); theErr = AESetInteractionAllowed(kAEInteractWithAll); if (theErr != noErr) YellowAlert(kYellowAppleEventErr, theErr); } \ No newline at end of file diff --git a/Sources/Banner.c b/Sources/Banner.c deleted file mode 100755 index 730dd35..0000000 --- a/Sources/Banner.c +++ /dev/null @@ -1 +0,0 @@ -//============================================================================ //---------------------------------------------------------------------------- // Banner.c //---------------------------------------------------------------------------- //============================================================================ #include #include "Externs.h" #include "Environ.h" #include "MainWindow.h" #include "RectUtils.h" #include "Room.h" #include "Utilities.h" #define kBannerPageTopPICT 1993 #define kBannerPageBottomPICT 1992 #define kBannerPageBottomMask 1991 #define kStarsRemainingPICT 1017 #define kStarRemainingPICT 1018 void DrawBanner (Point *); void DrawBannerMessage (Point); short numStarsRemaining; Boolean bannerStarCountOn; extern Rect justRoomsRect; extern Boolean quickerTransitions, demoGoing, isUseSecondScreen; //============================================================== Functions //-------------------------------------------------------------- DrawBanner // Displays opening banner (when a new game is begun). The banner looksÉ // like a sheet of notebook paper. The text printed on it is specifiedÉ // by the author of the house. void DrawBanner (Point *topLeft) { CGrafPtr wasCPort; GDHandle wasWorld; Rect wholePage, partPage, mapBounds; GWorldPtr tempMap; GWorldPtr tempMask; OSErr theErr; GetGWorld(&wasCPort, &wasWorld); QSetRect(&wholePage, 0, 0, 330, 220); mapBounds = thisMac.screen; ZeroRectCorner(&mapBounds); CenterRectInRect(&wholePage, &mapBounds); topLeft->h = wholePage.left; topLeft->v = wholePage.top; partPage = wholePage; partPage.bottom = partPage.top + 190; SetGWorld(workSrcMap, nil); LoadScaledGraphic(kBannerPageTopPICT, &partPage); partPage = wholePage; partPage.top = partPage.bottom - 30; mapBounds = partPage; ZeroRectCorner(&mapBounds); theErr = CreateOffScreenGWorld(&tempMap, &mapBounds, kPreferredDepth); SetGWorld(tempMap, nil); LoadGraphic(kBannerPageBottomPICT); theErr = CreateOffScreenGWorld(&tempMask, &mapBounds, 1); SetGWorld(tempMask, nil); LoadGraphic(kBannerPageBottomMask); CopyMask((BitMap *)*GetGWorldPixMap(tempMap), (BitMap *)*GetGWorldPixMap(tempMask), (BitMap *)*GetGWorldPixMap(workSrcMap), &mapBounds, &mapBounds, &partPage); SetPort((GrafPtr)workSrcMap); SetGWorld(wasCPort, wasWorld); DisposeGWorld(tempMap); DisposeGWorld(tempMask); } //-------------------------------------------------------------- CountStarsInHouse // Goes through the current house and counts the total number of stars within. short CountStarsInHouse (void) { short i, h, numRooms, numStars; char wasState; numStars = 0; wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); numRooms = (*thisHouse)->nRooms; for (i = 0; i < numRooms; i++) { if ((*thisHouse)->rooms[i].suite != kRoomIsEmpty) for (h = 0; h < kMaxRoomObs; h++) { if ((*thisHouse)->rooms[i].objects[h].what == kStar) numStars++; } } HSetState((Handle)thisHouse, wasState); return (numStars); } //-------------------------------------------------------------- DrawBannerMessage // This function prints the author's message acorss the notebook paper banner. void DrawBannerMessage (Point topLeft) { Str255 bannerStr, subStr; short count; char wasState; wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); PasStringCopy((*thisHouse)->banner, bannerStr); HSetState((Handle)thisHouse, wasState); TextFont(applFont); TextFace(bold); TextSize(12); ForeColor(blackColor); count = 0; do { GetLineOfText(bannerStr, count, subStr); MoveTo(topLeft.h + 16, topLeft.v + 32 + (count * 20)); DrawString(subStr); count++; } while (subStr[0] > 0); if (bannerStarCountOn) { if (numStarsRemaining != 1) GetLocalizedString(1, bannerStr); else GetLocalizedString(2, bannerStr); NumToString((long)numStarsRemaining, subStr); PasStringConcat(bannerStr, subStr); if (numStarsRemaining != 1) GetLocalizedString(3, subStr); else GetLocalizedString(4, subStr); PasStringConcat(bannerStr, subStr); ForeColor(redColor); MoveTo(topLeft.h + 16, topLeft.v + 164); DrawString(bannerStr); MoveTo(topLeft.h + 16, topLeft.v + 180); GetLocalizedString(5, subStr); DrawString(subStr); } ForeColor(blackColor); } //-------------------------------------------------------------- BringUpBanner // Handles bringing up displaying and disposing of the banner. void BringUpBanner (void) { Rect wholePage; Point topLeft; DrawBanner(&topLeft); DrawBannerMessage(topLeft); // if (quickerTransitions) // DissBitsChunky(&justRoomsRect); // was workSrcRect // else // DissBits(&justRoomsRect); QSetRect(&wholePage, 0, 0, 330, 220); QOffsetRect(&wholePage, topLeft.h, topLeft.v); CopyBits((BitMap *)*GetGWorldPixMap(backSrcMap), (BitMap *)*GetGWorldPixMap(workSrcMap), &wholePage, &wholePage, srcCopy, nil); if (demoGoing) WaitForInputEvent(4); else WaitForInputEvent(15); // if (quickerTransitions) // DissBitsChunky(&justRoomsRect); // else // DissBits(&justRoomsRect); } //-------------------------------------------------------------- DisplayStarsRemaining // This brings up a small message indicating the number of stars remainingÉ // in a house. It comes up when the player gets a star (the game is pausedÉ // and the user informed as to how many remain). void DisplayStarsRemaining (void) { Rect src, bounds; Str255 theStr; SetPortWindowPort(mainWindow); QSetRect(&bounds, 0, 0, 256, 64); CenterRectInRect(&bounds, &thisMac.screen); QOffsetRect(&bounds, -thisMac.screen.left, -thisMac.screen.top); src = bounds; InsetRect(&src, 64, 32); TextFont(applFont); TextFace(bold); TextSize(12); NumToString((long)numStarsRemaining, theStr); QOffsetRect(&bounds, 0, -20); if (numStarsRemaining < 2) LoadScaledGraphic(kStarRemainingPICT, &bounds); else { LoadScaledGraphic(kStarsRemainingPICT, &bounds); MoveTo(bounds.left + 102 - (StringWidth(theStr) / 2), bounds.top + 23); ColorText(theStr, 4L); } DelayTicks(60); if (WaitForInputEvent(30)) RestoreEntireGameScreen(); CopyRectWorkToMain(&bounds); } \ No newline at end of file diff --git a/Sources/ColorUtils.c b/Sources/ColorUtils.c deleted file mode 100755 index 3b81c06..0000000 --- a/Sources/ColorUtils.c +++ /dev/null @@ -1 +0,0 @@ - //============================================================================ //---------------------------------------------------------------------------- // ColorUtils.c //---------------------------------------------------------------------------- //============================================================================ #include "Externs.h" #include //============================================================== Functions //-------------------------------------------------------------- ColorText // Given a string and a color index (index into the current palette),É // this function draws text in that color. It assumes the current port,É // the current font, the current pen location, etc. void ColorText (StringPtr theStr, long color) { RGBColor theRGBColor, wasColor; GetForeColor(&wasColor); Index2Color(color, &theRGBColor); RGBForeColor(&theRGBColor); DrawString(theStr); RGBForeColor(&wasColor); } //-------------------------------------------------------------- ColorRect // Given a rectangle and color index, this function draws a solidÉ // rectangle in that color. Current port, pen mode, etc. assumed. void ColorRect (Rect *theRect, long color) { RGBColor theRGBColor, wasColor; GetForeColor(&wasColor); Index2Color(color, &theRGBColor); RGBForeColor(&theRGBColor); PaintRect(theRect); RGBForeColor(&wasColor); } //-------------------------------------------------------------- ColorOval // Given a rectangle and color index, this function draws a solidÉ // oval in that color. Current port, pen mode, etc. assumed. void ColorOval (Rect *theRect, long color) { RGBColor theRGBColor, wasColor; GetForeColor(&wasColor); Index2Color(color, &theRGBColor); RGBForeColor(&theRGBColor); PaintOval(theRect); RGBForeColor(&wasColor); } //-------------------------------------------------------------- ColorRegion // Given a region and color index, this function draws a solidÉ // region in that color. Current port, pen mode, etc. assumed. void ColorRegion (RgnHandle theRgn, long color) { RGBColor theRGBColor, wasColor; GetForeColor(&wasColor); Index2Color(color, &theRGBColor); RGBForeColor(&theRGBColor); PaintRgn(theRgn); RGBForeColor(&wasColor); } //-------------------------------------------------------------- ColorLine // Given a the end points for a line and color index, this functionÉ // draws a line in that color. Current port, pen mode, etc. assumed. void ColorLine (short h0, short v0, short h1, short v1, long color) { RGBColor theRGBColor, wasColor; GetForeColor(&wasColor); Index2Color(color, &theRGBColor); RGBForeColor(&theRGBColor); MoveTo(h0, v0); LineTo(h1, v1); RGBForeColor(&wasColor); } //-------------------------------------------------------------- HiliteRect // Given a rect and two hilite colors, this function frames the top andÉ // left edges of the rect with color 1 and frames the bottom and rightÉ // sides with color 2. A rect can be made to appear "hi-lit" or "3D"É // in this way. void HiliteRect (Rect *theRect, short color1, short color2) { ColorLine(theRect->left, theRect->top, theRect->right - 2, theRect->top, color1); ColorLine(theRect->left, theRect->top, theRect->left, theRect->bottom - 2, color1); ColorLine(theRect->right - 1, theRect->top, theRect->right - 1, theRect->bottom - 2, color2); ColorLine(theRect->left + 1, theRect->bottom - 1, theRect->right - 1, theRect->bottom - 1, color2); } //-------------------------------------------------------------- ColorFrameRect // Given a rectangle and color index, this function frames aÉ // rectangle in that color. Current port, pen mode, etc. assumed. void ColorFrameRect (Rect *theRect, long color) { RGBColor theRGBColor, wasColor; GetForeColor(&wasColor); Index2Color(color, &theRGBColor); RGBForeColor(&theRGBColor); FrameRect(theRect); RGBForeColor(&wasColor); } //-------------------------------------------------------------- ColorFrameWHRect // Given a the top-left corner of a rectangle, its width and height,É // and a color index, this function frames a rectangle in that color. // Current port, pen mode, etc. assumed. void ColorFrameWHRect (short left, short top, short wide, short high, long color) { Rect theRect; theRect.left = left; theRect.top = top; theRect.right = left + wide; theRect.bottom = top + high; ColorFrameRect(&theRect, color); } //-------------------------------------------------------------- ColorFrameOval // Given a rectangle and color index, this function frames anÉ // oval in that color. Current port, pen mode, etc. assumed. void ColorFrameOval (Rect *theRect, long color) { RGBColor theRGBColor, wasColor; GetForeColor(&wasColor); Index2Color(color, &theRGBColor); RGBForeColor(&theRGBColor); FrameOval(theRect); RGBForeColor(&wasColor); } //-------------------------------------------------------------- LtGrayForeColor // This function finds the closest match to a "light gray" in theÉ // current palette and sets the pen color to that. void LtGrayForeColor (void) { RGBColor color; color.red = (unsigned short) 0xBFFF; color.green = (unsigned short) 0xBFFF; color.blue = (unsigned short) 0xBFFF; RGBForeColor(&color); } //-------------------------------------------------------------- GrayForeColor // This function finds the closest match to a "medium gray" in theÉ // current palette and sets the pen color to that. void GrayForeColor (void) { RGBColor color; color.red = (unsigned short) 0x7FFF; color.green = (unsigned short) 0x7FFF; color.blue = (unsigned short) 0x7FFF; RGBForeColor(&color); } //-------------------------------------------------------------- DkGrayForeColor // This function finds the closest match to a "dark gray" in theÉ // current palette and sets the pen color to that. void DkGrayForeColor (void) { RGBColor color; color.red = (unsigned short) 0x3FFF; color.green = (unsigned short) 0x3FFF; color.blue = (unsigned short) 0x3FFF; RGBForeColor(&color); } //-------------------------------------------------------------- RestoreColorsSlam // This function forces the Macintosh to rebuild the palette. It isÉ // called to restore a sense or normality after some serious mungingÉ // with the palette. void RestoreColorsSlam (void) { RestoreDeviceClut(nil); PaintBehind(nil, GetGrayRgn()); DrawMenuBar(); } \ No newline at end of file diff --git a/Sources/Coordinates.c b/Sources/Coordinates.c deleted file mode 100755 index 6831426..0000000 --- a/Sources/Coordinates.c +++ /dev/null @@ -1 +0,0 @@ -//============================================================================ //---------------------------------------------------------------------------- // Coordinates.c //---------------------------------------------------------------------------- //============================================================================ #include #include "Externs.h" #include "Environ.h" #include "Marquee.h" #include "ObjectEdit.h" #include "RectUtils.h" Rect coordWindowRect; WindowPtr coordWindow; short isCoordH, isCoordV; short coordH, coordV, coordD; Boolean isCoordOpen; //============================================================== Functions //-------------------------------------------------------------- SetCoordinateHVD // Given a horizontal, vertical and distance value, this functionÉ // displays these values in the Coordinates window. void SetCoordinateHVD (short h, short v, short d) { #ifndef COMPILEDEMO if (h != -2) coordH = h; if (v != -2) coordV = v; if (d != -2) coordD = d; UpdateCoordWindow(); #endif } //-------------------------------------------------------------- DeltaCoordinateD // When the user is dragging a handle (such as the height of a blower)É // this function can be called and passed the amount by which the userÉ // has changed the height (delta). This function then displays it inÉ // the Coordinate window. void DeltaCoordinateD (short d) { #ifndef COMPILEDEMO coordD = d; UpdateCoordWindow(); #endif } //-------------------------------------------------------------- UpdateCoordWindow // Completely redraws and updates the Coordinate window. void UpdateCoordWindow (void) { #ifndef COMPILEDEMO Str255 tempStr, numStr; GrafPtr wasPort; if (coordWindow == nil) return; GetPort(&wasPort); SetPort((GrafPtr)coordWindow); EraseRect(&coordWindowRect); PasStringCopy("\ph: ", tempStr); if (coordH != -1) { NumToString((long)coordH, numStr); PasStringConcat(tempStr, numStr); } else PasStringConcat(tempStr, "\p-"); MoveTo(5, 12); DrawString(tempStr); PasStringCopy("\pv: ", tempStr); if (coordV != -1) { NumToString((long)coordV, numStr); PasStringConcat(tempStr, numStr); } else PasStringConcat(tempStr, "\p-"); MoveTo(4, 22); DrawString(tempStr); ForeColor(blueColor); PasStringCopy("\pd: ", tempStr); if (coordD != -1) { NumToString((long)coordD, numStr); PasStringConcat(tempStr, numStr); } else PasStringConcat(tempStr, "\p-"); MoveTo(5, 32); DrawString(tempStr); ForeColor(blackColor); SetPort((GrafPtr)wasPort); #endif } //-------------------------------------------------------------- OpenCoordWindow // Brings up the Coordinate window. void OpenCoordWindow (void) { #ifndef COMPILEDEMO Rect src, dest; Point globalMouse; short direction, dist; if (coordWindow == nil) { QSetRect(&coordWindowRect, 0, 0, 50, 38); if (thisMac.hasColor) coordWindow = NewCWindow(nil, &coordWindowRect, "\pTools", false, kWindoidWDEF, kPutInFront, true, 0L); else coordWindow = NewWindow(nil, &coordWindowRect, "\pTools", false, kWindoidWDEF, kPutInFront, true, 0L); if (coordWindow == nil) RedAlert(kErrNoMemory); // if (OptionKeyDown()) // { // isCoordH = qd.screenBits.bounds.right - 55; // isCoordV = 204; // } MoveWindow(coordWindow, isCoordH, isCoordV, true); globalMouse = MyGetGlobalMouse(); QSetRect(&src, 0, 0, 1, 1); QOffsetRect(&src, globalMouse.h, globalMouse.v); GetWindowRect(coordWindow, &dest); BringToFront(coordWindow); ShowHide(coordWindow, true); // FlagWindowFloating(coordWindow); TEMP - use flaoting windows HiliteAllWindows(); coordH = -1; coordV = -1; coordD = -1; TextFace(applFont); TextSize(9); if (objActive != kNoObjectSelected) { if (ObjectHasHandle(&direction, &dist)) coordD = dist; SetCoordinateHVD(theMarquee.bounds.left, theMarquee.bounds.top, coordD); } } UpdateCoordinateCheckmark(true); #endif } //-------------------------------------------------------------- CloseCoordWindow // Closes and disposes of the Coordinate window. void CloseCoordWindow (void) { CloseThisWindow(&coordWindow); UpdateCoordinateCheckmark(false); } //-------------------------------------------------------------- ToggleCoordinateWindow // Toggles the Coordinate windows state between open and closed. void ToggleCoordinateWindow (void) { #ifndef COMPILEDEMO if (coordWindow == nil) { OpenCoordWindow(); isCoordOpen = true; } else { CloseCoordWindow(); isCoordOpen = false; } #endif } \ No newline at end of file diff --git a/Sources/DialogUtils.c b/Sources/DialogUtils.c deleted file mode 100755 index eae9cf3..0000000 --- a/Sources/DialogUtils.c +++ /dev/null @@ -1 +0,0 @@ -//============================================================================ //---------------------------------------------------------------------------- // DialogUtils.c //---------------------------------------------------------------------------- //============================================================================ #include #include #include #include "DialogUtils.h" #include "Externs.h" #define kActive 0 #define kInactive 255 //============================================================== Functions //-------------------------------------------------------------- BringUpDialog // Given a dialog pointer and a resource ID, this function brings it upÉ // centered, visible, and with the default button outlined. void BringUpDialog (DialogPtr *theDialog, short dialogID) { // CenterDialog(dialogID); *theDialog = GetNewDialog(dialogID, nil, kPutInFront); if (*theDialog == nil) RedAlert(kErrDialogDidntLoad); SetPort((GrafPtr)*theDialog); ShowWindow(GetDialogWindow(*theDialog)); DrawDefaultButton(*theDialog); } //-------------------------------------------------------------- GetPutDialogCorner // Determines the upper left corner coordinates needed to properly centerÉ // the standard Mac PutFile dialog (when you save files). /* void GetPutDialogCorner (Point *theCorner) { DialogTHndl dlogHandle; Rect theScreen, dlogBounds; Byte wasState; theCorner->h = 64; theCorner->v = 64; theScreen = qd.screenBits.bounds; theScreen.top += LMGetMBarHeight(); OffsetRect(&theScreen, -theScreen.left, -theScreen.top); dlogHandle = (DialogTHndl)GetResource('DLOG', sfPutDialogID); if (dlogHandle != nil) { wasState = HGetState((Handle)dlogHandle); HLock((Handle)dlogHandle); dlogBounds = (**dlogHandle).boundsRect; OffsetRect(&dlogBounds, -dlogBounds.left, -dlogBounds.top); theCorner->h = (theScreen.right - dlogBounds.right) / 2; theCorner->v = (theScreen.bottom - dlogBounds.bottom) / 3; HSetState((Handle)dlogHandle, wasState); } theCorner->v += LMGetMBarHeight(); } */ //-------------------------------------------------------------- GetPutDialogCorner // Determines the upper left corner coordinates needed to properly centerÉ // the standard Mac GetFile dialog (when you open files). /* void GetGetDialogCorner (Point *theCorner) { DialogTHndl dlogHandle; Rect theScreen, dlogBounds; Byte wasState; theCorner->h = 64; theCorner->v = 64; theScreen = qd.screenBits.bounds; theScreen.top += LMGetMBarHeight(); OffsetRect(&theScreen, -theScreen.left, -theScreen.top); dlogHandle = (DialogTHndl)GetResource('DLOG', sfGetDialogID); if (dlogHandle != nil) { wasState = HGetState((Handle)dlogHandle); HLock((Handle)dlogHandle); dlogBounds = (**dlogHandle).boundsRect; OffsetRect(&dlogBounds, -dlogBounds.left, -dlogBounds.top); theCorner->h = (theScreen.right - dlogBounds.right) / 2; theCorner->v = (theScreen.bottom - dlogBounds.bottom) / 3; HSetState((Handle)dlogHandle, wasState); } theCorner->v += LMGetMBarHeight(); } */ //-------------------------------------------------------------- CenterDialog // Given a resource ID for a dialog, this function properly centers it. /* void CenterDialog (SInt16 dialogID) { DialogTHndl dlogHandle; Rect theScreen, dlogBounds; SInt16 hPos, vPos; Byte wasState; theScreen = qd.screenBits.bounds; theScreen.top += LMGetMBarHeight(); dlogHandle = (DialogTHndl)GetResource('DLOG', dialogID); if (dlogHandle != nil) { wasState = HGetState((Handle)dlogHandle); HLock((Handle)dlogHandle); dlogBounds = (**dlogHandle).boundsRect; OffsetRect(&dlogBounds, -dlogBounds.left, -dlogBounds.top); hPos = ((theScreen.right - theScreen.left) - dlogBounds.right) / 2; vPos = ((theScreen.bottom - theScreen.top) - dlogBounds.bottom) / 3; OffsetRect(&dlogBounds, hPos, vPos + LMGetMBarHeight()); (**dlogHandle).boundsRect = dlogBounds; HSetState((Handle)dlogHandle, wasState); } } */ //-------------------------------------------------------------- GetDialogRect // Determines the bounding rectangle for a given dialog. void GetDialogRect (Rect *bounds, short dialogID) { DialogTHndl dlogHandle; Byte wasState; dlogHandle = (DialogTHndl)GetResource('DLOG', dialogID); if (dlogHandle != nil) { wasState = HGetState((Handle)dlogHandle); HLock((Handle)dlogHandle); *bounds = (**dlogHandle).boundsRect; HSetState((Handle)dlogHandle, wasState); } } //-------------------------------------------------------------- TrueCenterDialog // Places a dialog DEAD CENTER (as opposed to 1/3 of the way down asÉ // is common for Mac dialog centering). /* void TrueCenterDialog (short dialogID) { DialogTHndl dlogHandle; Rect theScreen, dlogBounds; short hPos, vPos; Byte wasState; theScreen = qd.screenBits.bounds; theScreen.top += LMGetMBarHeight(); dlogHandle = (DialogTHndl)GetResource('DLOG', dialogID); if (dlogHandle != nil) { wasState = HGetState((Handle)dlogHandle); HLock((Handle)dlogHandle); dlogBounds = (**dlogHandle).boundsRect; OffsetRect(&dlogBounds, theScreen.left - dlogBounds.left, theScreen.top - dlogBounds.top); hPos = ((theScreen.right - theScreen.left) - (dlogBounds.right - dlogBounds.left)) / 2; vPos = ((theScreen.bottom - theScreen.top) - (dlogBounds.bottom - dlogBounds.top)) / 2; OffsetRect(&dlogBounds, hPos, vPos + LMGetMBarHeight()); (**dlogHandle).boundsRect = dlogBounds; HSetState((Handle)dlogHandle, wasState); } } */ //-------------------------------------------------------------- CenterAlert // Given an alert ID, this function properly centers it on the main monitor. /* void CenterAlert (short alertID) { AlertTHndl alertHandle; Rect theScreen, alertRect; short horiOff, vertOff; Byte wasState; theScreen = qd.screenBits.bounds; theScreen.top += LMGetMBarHeight(); alertHandle = (AlertTHndl)GetResource('ALRT', alertID); if (alertHandle != nil) { wasState = HGetState((Handle)alertHandle); HLock((Handle)alertHandle); alertRect = (**alertHandle).boundsRect; OffsetRect(&alertRect, -alertRect.left, -alertRect.top); horiOff = ((theScreen.right - theScreen.left) - alertRect.right) / 2; vertOff = ((theScreen.bottom - theScreen.top) - alertRect.bottom) / 3; OffsetRect(&alertRect, horiOff, vertOff + LMGetMBarHeight()); (**alertHandle).boundsRect = alertRect; HSetState((Handle)alertHandle, wasState); } } */ //-------------------------------------------------------------- ZoomOutDialogRect // Given a dialog, this function does the "zoom" animation to make theÉ // the dialog appear to expand from nothingness or zoom in at you. /* void ZoomOutDialogRect (short dialogID) { #define kSteps 16 #define kZoomDelay 1 DialogTHndl dlogHandle; GrafPtr wasPort, tempPort; Rect dlogBounds, zoomRect; UInt32 dummyLong; Byte wasState; short wideStep, highStep, i; GetPort(&wasPort); tempPort = (GrafPtr)NewPtrClear(sizeof(GrafPort)); OpenPort(tempPort); dlogHandle = (DialogTHndl)GetResource('DLOG', dialogID); if (dlogHandle != nil) { wasState = HGetState((Handle)dlogHandle); HLock((Handle)dlogHandle); dlogBounds = (**dlogHandle).boundsRect; HSetState((Handle)dlogHandle, wasState); } wideStep = ((dlogBounds.right - dlogBounds.left) / 2) / kSteps; highStep = ((dlogBounds.bottom - dlogBounds.top) / 2) / kSteps; SetRect(&zoomRect, dlogBounds.left + (wideStep * kSteps), dlogBounds.top + (highStep * kSteps), dlogBounds.right - (wideStep * kSteps), dlogBounds.bottom - (highStep * kSteps)); GlobalToLocalRect(&zoomRect); PenPat(GetQDGlobalsGray(&dummyPattern)); PenMode(patXor); for (i = 0; i < kSteps; i++) { FrameRect(&zoomRect); Delay(kZoomDelay, &dummyLong); FrameRect(&zoomRect); InsetRect(&zoomRect, -wideStep, -highStep); } ClosePort(tempPort); SetPort((GrafPtr)wasPort); } */ //-------------------------------------------------------------- ZoomOutAlertRect // Like the above funciton but zooms out alerts instead of dialogs. /* void ZoomOutAlertRect (short alertID) { #define kSteps 16 #define kZoomDelay 1 AlertTHndl alertHandle; GrafPtr wasPort, tempPort; Rect alertBounds, zoomRect; UInt32 dummyLong; Byte wasState; short wideStep, highStep, i; GetPort(&wasPort); tempPort = (GrafPtr)NewPtrClear(sizeof(GrafPort)); OpenPort(tempPort); alertHandle = (AlertTHndl)GetResource('ALRT', alertID); if (alertHandle != nil) { wasState = HGetState((Handle)alertHandle); HLock((Handle)alertHandle); alertBounds = (**alertHandle).boundsRect; HSetState((Handle)alertHandle, wasState); } wideStep = ((alertBounds.right - alertBounds.left) / 2) / kSteps; highStep = ((alertBounds.bottom - alertBounds.top) / 2) / kSteps; SetRect(&zoomRect, alertBounds.left + (wideStep * kSteps), alertBounds.top + (highStep * kSteps), alertBounds.right - (wideStep * kSteps), alertBounds.bottom - (highStep * kSteps)); GlobalToLocalRect(&zoomRect); PenPat(GetQDGlobalsGray(&dummyPattern)); PenMode(patXor); for (i = 0; i < kSteps; i++) { FrameRect(&zoomRect); Delay(kZoomDelay, &dummyLong); FrameRect(&zoomRect); InsetRect(&zoomRect, -wideStep, -highStep); } ClosePort(tempPort); SetPort((GrafPtr)wasPort); } */ //-------------------------------------------------------------- FlashDialogButton // Flashes the default dialog button (item = 1) so as to make it appearÉ // as though the user clicked on it. void FlashDialogButton (DialogPtr theDialog, short itemNumber) { Rect itemRect; Handle itemHandle; UInt32 dummyLong; short itemType; GetDialogItem(theDialog, itemNumber, &itemType, &itemHandle, &itemRect); HiliteControl((ControlHandle)itemHandle, kControlButtonPart); Delay(8, &dummyLong); HiliteControl((ControlHandle)itemHandle, 0); } //-------------------------------------------------------------- DrawDefaultButton // Draws a fat outline around the default item (item = 1). This is theÉ // item that is selected if the user hits the Return key. void DrawDefaultButton (DialogPtr theDialog) { Rect itemRect; Handle itemHandle; short itemType; GetDialogItem(theDialog, 1, &itemType, &itemHandle, &itemRect); InsetRect(&itemRect, -4, -4); PenSize(3, 3); FrameRoundRect(&itemRect, 16, 16); PenNormal(); } //-------------------------------------------------------------- GetDialogString // Returns a string from a specific dialog item. void GetDialogString (DialogPtr theDialog, short item, StringPtr theString) { Rect itemRect; Handle itemHandle; short itemType; GetDialogItem(theDialog, item, &itemType, &itemHandle, &itemRect); GetDialogItemText(itemHandle, theString); } //-------------------------------------------------------------- SetDialogString // Sets a specific string to a specific dialog item. void SetDialogString (DialogPtr theDialog, short item, StringPtr theString) { Rect itemRect; Handle itemHandle; short itemType; GetDialogItem(theDialog, item, &itemType, &itemHandle, &itemRect); SetDialogItemText(itemHandle, theString); } //-------------------------------------------------------------- GetDialogStringLen // Returns the length of a dialog item string (text). short GetDialogStringLen (DialogPtr theDialog, short item) { Rect itemRect; Str255 theString; Handle itemHandle; short itemType; GetDialogItem(theDialog, item, &itemType, &itemHandle, &itemRect); GetDialogItemText(itemHandle, theString); return (theString[0]); } //-------------------------------------------------------------- GetDialogItemValue // Returns the value or "state" of a dialog item. For checkboxes andÉ // radio buttons, this may be a 1 or 0. void GetDialogItemValue (DialogPtr theDialog, short item, short *theState) { Rect itemRect; Handle itemHandle; short itemType; GetDialogItem(theDialog, item, &itemType, &itemHandle, &itemRect); *theState = GetControlValue((ControlHandle)itemHandle); } //-------------------------------------------------------------- SetDialogItemValue // Sets a specific dialogf items value or state (can set or clearÉ // checkboxes, radio buttons, etc.). void SetDialogItemValue (DialogPtr theDialog, short item, short theState) { Rect itemRect; Handle itemHandle; short itemType; GetDialogItem(theDialog, item, &itemType, &itemHandle, &itemRect); SetControlValue((ControlHandle)itemHandle, theState); } //-------------------------------------------------------------- ToggleDialogItemValue // If item is a checkbox or radio button, its state is toggled. void ToggleDialogItemValue (DialogPtr theDialog, short item) { Rect itemRect; Handle itemHandle; short itemType, theState; GetDialogItem(theDialog, item, &itemType, &itemHandle, &itemRect); theState = GetControlValue((ControlHandle)itemHandle); if (theState == 0) theState = 1; else theState = 0; SetControlValue((ControlHandle)itemHandle, theState); } //-------------------------------------------------------------- SetDialogNumToStr // Function accepts an integer, converts it to a string and sets aÉ // dialog items text to this string. void SetDialogNumToStr (DialogPtr theDialog, short item, long theNumber) { Str255 theString; Rect itemRect; Handle itemHandle; short itemType; NumToString(theNumber, theString); GetDialogItem(theDialog, item, &itemType, &itemHandle, &itemRect); SetDialogItemText(itemHandle, theString); } //-------------------------------------------------------------- GetDialogNumFromStr // Function extracts the text from a dialog item and converts it to anÉ // integer for returning. void GetDialogNumFromStr (DialogPtr theDialog, short item, long *theNumber) { Str255 theString; Rect itemRect; Handle itemHandle; short itemType; GetDialogItem(theDialog, item, &itemType, &itemHandle, &itemRect); GetDialogItemText(itemHandle, theString); StringToNum(theString, theNumber); } //-------------------------------------------------------------- GetDialogItemRect // Returns the bounding rectangle of the specified dialog item. void GetDialogItemRect (DialogPtr theDialog, short item, Rect *theRect) { Handle itemHandle; short itemType; GetDialogItem(theDialog, item, &itemType, &itemHandle, theRect); } //-------------------------------------------------------------- SetDialogItemRect // Sets the bounding rectangle of the specified dialog item. Used toÉ // resize or move a control. void SetDialogItemRect (DialogPtr theDialog, short item, Rect *theRect) { Rect oldRect; Handle itemHandle; short itemType; GetDialogItem(theDialog, item, &itemType, &itemHandle, &oldRect); OffsetRect(&oldRect, theRect->left - oldRect.left, theRect->top - oldRect.top); SetDialogItem(theDialog, item, itemType, itemHandle, &oldRect); } //-------------------------------------------------------------- OffsetDialogItemRect // Moves a dialog item by h and v. void OffsetDialogItemRect (DialogPtr theDialog, short item, short h, short v) { Rect oldRect; Handle itemHandle; short itemType; GetDialogItem(theDialog, item, &itemType, &itemHandle, &oldRect); OffsetRect(&oldRect, h, v); SetDialogItem(theDialog, item, itemType, itemHandle, &oldRect); } //-------------------------------------------------------------- SelectFromRadioGroup // Assuming a series of consecutively numbered radio buttons, this functionÉ // clears the whole range of them but sets the one specified (as thoughÉ // the radio buttons are linked and only one can be set at a time). void SelectFromRadioGroup (DialogPtr dial, short which, short first, short last) { Rect iRect; Handle iHandle; short iType, i; for (i = first; i <= last; i++) { GetDialogItem(dial, i, &iType, &iHandle, &iRect); SetControlValue((ControlHandle)iHandle, (short)false); } GetDialogItem(dial, which, &iType, &iHandle, &iRect); SetControlValue((ControlHandle)iHandle, (short)true); } //-------------------------------------------------------------- AddMenuToPopUp // Assigns a menu handle to a pop-up dialog item - thus, giving thatÉ // pop-up item something to pop up. /* void AddMenuToPopUp (DialogPtr theDialog, short whichItem, MenuHandle theMenu) { Rect iRect; Handle iHandle; short iType; GetDialogItem(theDialog, whichItem, &iType, &iHandle, &iRect); (**(ControlHandle)iHandle).contrlRfCon = (long)theMenu; } */ //-------------------------------------------------------------- GetPopUpMenuValu // Returns which item is currently selected in a pop-up menu. void GetPopUpMenuValue (DialogPtr theDialog, short whichItem, short *value) { Rect iRect; Handle iHandle; short iType; GetDialogItem(theDialog, whichItem, &iType, &iHandle, &iRect); *value = GetControlValue((ControlHandle)iHandle); } //-------------------------------------------------------------- SetPopUpMenuValue // Forces a specific item to be set (as though selected) in a pop-up menu. void SetPopUpMenuValue (DialogPtr theDialog, short whichItem, short value) { Rect iRect; Handle iHandle; short iType; GetDialogItem(theDialog, whichItem, &iType, &iHandle, &iRect); SetControlValue((ControlHandle)iHandle, value); } //-------------------------------------------------------------- MyEnableControl // "Un-grays" or enables a dialog item (usually a button). void MyEnableControl (DialogPtr theDialog, short whichItem) { Rect iRect; Handle iHandle; short iType; GetDialogItem(theDialog, whichItem, &iType, &iHandle, &iRect); HiliteControl((ControlHandle)iHandle, kActive); } //-------------------------------------------------------------- MyDisableControl // "Grays out" or disables a dialog item (usually a button). void MyDisableControl (DialogPtr theDialog, short whichItem) { Rect iRect; Handle iHandle; short iType; GetDialogItem(theDialog, whichItem, &iType, &iHandle, &iRect); HiliteControl((ControlHandle)iHandle, kInactive); } //-------------------------------------------------------------- DrawDialogUserText // Given a string of text and an item, this function draws the stringÉ // within the bounding rect of the item. Dialog item assumed to beÉ // a "user item" (invisible item with only bounds). void DrawDialogUserText (DialogPtr dial, short item, StringPtr text, Boolean invert) { Rect iRect; Handle iHandle; Str255 newString, stringCopy; short iType, textLong, i, inset; TextFont(applFont); TextSize(9); PasStringCopy(text, stringCopy); GetDialogItem(dial, item, &iType, &iHandle, &iRect); if ((StringWidth(stringCopy) + 2) > (iRect.right - iRect.left)) CollapseStringToWidth(stringCopy, iRect.right - iRect.left - 2); textLong = stringCopy[0]; for (i = 0; i < textLong; i++) newString[i] = stringCopy[i + 1]; OffsetRect(&iRect, 0, 1); EraseRect(&iRect); OffsetRect(&iRect, 0, -1); inset = ((iRect.right - iRect.left) - (StringWidth(stringCopy) + 2)) / 2; iRect.left += inset; iRect.right -= inset; TETextBox(newString, textLong, &iRect, teCenter); if (invert) { OffsetRect(&iRect, 0, 1); InvertRect(&iRect); } } //-------------------------------------------------------------- DrawDialogUserText // Similar to the above function but doesn't call TETextBox(). Instead,É // it truncates the string (and appends "É") to the end in order thatÉ // the string fits within the dialog item's bounds. void DrawDialogUserText2 (DialogPtr dial, short item, StringPtr text) { Rect iRect; Handle iHandle; Str255 stringCopy; short iType; TextFont(applFont); TextSize(9); PasStringCopy(text, stringCopy); GetDialogItem(dial, item, &iType, &iHandle, &iRect); if ((StringWidth(stringCopy) + 2) > (iRect.right - iRect.left)) CollapseStringToWidth(stringCopy, iRect.right - iRect.left - 2); MoveTo(iRect.left, iRect.bottom); DrawString(stringCopy); } //-------------------------------------------------------------- LoadDialogPICT // Draws a 'PICT' specified by ID within the bounds of the specifiedÉ // dialog item. void LoadDialogPICT (DialogPtr theDialog, short item, short theID) { Rect iRect; Handle iHandle; PicHandle thePict; short iType; GetDialogItem(theDialog, item, &iType, &iHandle, &iRect); thePict = GetPicture(theID); if (thePict) DrawPicture(thePict, &iRect); } //-------------------------------------------------------------- FrameDialogItem // Given a dialog item, this function draws a box around it. void FrameDialogItem (DialogPtr theDialog, short item) { Rect itemRect; Handle itemHandle; short itemType; GetDialogItem(theDialog, item, &itemType, &itemHandle, &itemRect); FrameRect(&itemRect); } //-------------------------------------------------------------- FrameDialogItemC // Given a dialog item, this function draws a color (specified) box around it. void FrameDialogItemC (DialogPtr theDialog, short item, long color) { RGBColor theRGBColor, wasColor; Rect itemRect; Handle itemHandle; short itemType; GetDialogItem(theDialog, item, &itemType, &itemHandle, &itemRect); GetForeColor(&wasColor); Index2Color(color, &theRGBColor); RGBForeColor(&theRGBColor); FrameRect(&itemRect); RGBForeColor(&wasColor); } //-------------------------------------------------------------- FrameOvalDialogItem // Given a dialog item, this function draws an oval around it. void FrameOvalDialogItem (DialogPtr theDialog, short item) { Rect itemRect; Handle itemHandle; short itemType; GetDialogItem(theDialog, item, &itemType, &itemHandle, &itemRect); FrameOval(&itemRect); } //-------------------------------------------------------------- BorderDialogItem // Given a dialog item, this function draws any combination of 4 sidesÉ // of a box around it. Which sides get drawn is encoded in "sides". void BorderDialogItem (DialogPtr theDialog, short item, short sides) { Rect itemRect; Handle itemHandle; short itemType; // 1 = left // 2 = top // 4 = bottom // 8 = right ... so 6 = top & bottom, 15 = all 4 sides GetDialogItem(theDialog, item, &itemType, &itemHandle, &itemRect); if (sides >= 8) // 8 = right { MoveTo(itemRect.right, itemRect.top); LineTo(itemRect.right, itemRect.bottom); sides -= 8; } if (sides >= 4) // 4 = bottom { MoveTo(itemRect.left, itemRect.bottom); LineTo(itemRect.right, itemRect.bottom); sides -= 4; } if (sides >= 2) // 2 = top { MoveTo(itemRect.left, itemRect.top - 1); LineTo(itemRect.right, itemRect.top - 1); sides -= 2; } if (sides >= 1) // 1 = left { MoveTo(itemRect.left - 1, itemRect.top); LineTo(itemRect.left - 1, itemRect.bottom); } } //-------------------------------------------------------------- ShadowDialogItem // Draws a drop shadow to the right and below a specified dialog item. void ShadowDialogItem (DialogPtr theDialog, short item, short thickness) { Rect itemRect; Handle itemHandle; short itemType; GetDialogItem(theDialog, item, &itemType, &itemHandle, &itemRect); PenSize(thickness, thickness); MoveTo(itemRect.left + thickness, itemRect.bottom); Line(itemRect.right - itemRect.left - thickness, 0); MoveTo(itemRect.right, itemRect.top + thickness); Line(0, itemRect.bottom - itemRect.top - thickness); PenNormal(); } //-------------------------------------------------------------- EraseDialogItem // Erases (but doesn't physically remove) a dialog item. void EraseDialogItem (DialogPtr theDialog, short item) { Rect itemRect; Handle itemHandle; short itemType; GetDialogItem(theDialog, item, &itemType, &itemHandle, &itemRect); EraseRect(&itemRect); } \ No newline at end of file diff --git a/Sources/DynamicMaps.c b/Sources/DynamicMaps.c deleted file mode 100755 index 390cf49..0000000 --- a/Sources/DynamicMaps.c +++ /dev/null @@ -1 +0,0 @@ -//============================================================================ //---------------------------------------------------------------------------- // DynamicMaps.c //---------------------------------------------------------------------------- //============================================================================ #include "Externs.h" #include "Environ.h" #include "MainWindow.h" #include "Objects.h" #include "RectUtils.h" #include "Room.h" #include "Utilities.h" void BackUpFlames (Rect *, short); void BackUpTikiFlames (Rect *, short); void BackUpBBQCoals (Rect *, short); void BackUpPendulum (Rect *, short); void BackUpStar (Rect *, short); sparklePtr sparkles; flyingPtPtr flyingPoints; flamePtr flames, tikiFlames, bbqCoals; pendulumPtr pendulums; starPtr theStars; shredPtr shreds; Rect pointsSrc[15]; short numSparkles, numFlyingPts, numChimes; short numFlames, numSavedMaps, numTikiFlames, numCoals; short numPendulums, clockFrame, numStars, numShredded; extern savedType savedMaps[]; extern Rect flame[], tikiFlame[], coals[], pendulumSrc[]; extern Rect starSrc[]; extern short numGrease, numDynamics; //============================================================== Functions //-------------------------------------------------------------- NilSavedMaps // Deletes array of "dyanmics" offscreen pixmaps. void NilSavedMaps (void) { short i; for (i = 0; i < kMaxSavedMaps; i++) { if (savedMaps[i].map != nil) { DisposeGWorld(savedMaps[i].map); // KillOffScreenPixMap(savedMaps[i].map); savedMaps[i].map = nil; } savedMaps[i].where = -1; savedMaps[i].who = -1; } numSavedMaps = 0; } //-------------------------------------------------------------- BackUpToSavedMap // Saves a copy of the room behind an object to an array of pixmaps. // Then when the object in question is drawn, there is a copy of theÉ // room that it obscured so that, should the player get the object,É // it can be made to "disappear". short BackUpToSavedMap (Rect *theRect, short where, short who) { Rect mapRect; OSErr theErr; if (numSavedMaps >= kMaxSavedMaps) return(-1); mapRect = *theRect; ZeroRectCorner(&mapRect); savedMaps[numSavedMaps].dest = *theRect; // CreateOffScreenPixMap(&mapRect, &savedMaps[numSavedMaps].map); theErr = CreateOffScreenGWorld(&savedMaps[numSavedMaps].map, &mapRect, kPreferredDepth); CopyBits((BitMap *)*GetGWorldPixMap(backSrcMap), GetPortBitMapForCopyBits(savedMaps[numSavedMaps].map), theRect, &mapRect, srcCopy, nil); savedMaps[numSavedMaps].where = where; savedMaps[numSavedMaps].who = who; numSavedMaps++; return (numSavedMaps - 1); // return array index } //-------------------------------------------------------------- ReBackUpSavedMap // This function is similar to the above, but assumes there is alreadyÉ // a slot in the pixmap array for the object. It re-copies the backgroundÉ // and is needed when the lights in the room go on or off. short ReBackUpSavedMap (Rect *theRect, short where, short who) { Rect mapRect; short i, foundIndex; foundIndex = -1; for (i = 0; i < numSavedMaps; i++) { if ((savedMaps[i].where == where) && (savedMaps[i].who == who)) { foundIndex = i; mapRect = *theRect; ZeroRectCorner(&mapRect); CopyBits((BitMap *)*GetGWorldPixMap(backSrcMap), GetPortBitMapForCopyBits(savedMaps[foundIndex].map), theRect, &mapRect, srcCopy, nil); return (foundIndex); } } return (foundIndex); } //-------------------------------------------------------------- RestoreFromSavedMap // This copies the saved background swatch to the screen - effectivelyÉ // covering up or "erasing" the object. void RestoreFromSavedMap (short where, short who, Boolean doSparkle) { Rect mapRect, bounds; short i; for (i = 0; i < numSavedMaps; i++) { if ((savedMaps[i].where == where) && (savedMaps[i].who == who) && (savedMaps[i].map != nil)) { mapRect = savedMaps[i].dest; ZeroRectCorner(&mapRect); CopyBits(GetPortBitMapForCopyBits(savedMaps[i].map), (BitMap *)*GetGWorldPixMap(backSrcMap), &mapRect, &savedMaps[i].dest, srcCopy, nil); CopyBits(GetPortBitMapForCopyBits(savedMaps[i].map), (BitMap *)*GetGWorldPixMap(workSrcMap), &mapRect, &savedMaps[i].dest, srcCopy, nil); AddRectToWorkRects(&savedMaps[i].dest); if (doSparkle) { bounds = savedMaps[i].dest; QOffsetRect(&bounds, -playOriginH, -playOriginV); AddSparkle(&bounds); PlayPrioritySound(kFadeOutSound, kFadeOutPriority); } break; } } } //-------------------------------------------------------------- AddSparkle // This adds a "sparkle" object to the fixed array of sparkles. void AddSparkle (Rect *theRect) { Rect centeredRect; short i; if (numSparkles < kMaxSparkles) { theRect->left += playOriginH; theRect->right += playOriginH; theRect->top += playOriginV; theRect->bottom += playOriginV; centeredRect = sparkleSrc[0]; CenterRectInRect(¢eredRect, theRect); for (i = 0; i < kMaxSparkles; i++) if (sparkles[i].mode == -1) { sparkles[i].bounds = centeredRect; sparkles[i].mode = 0; numSparkles++; break; } } } //-------------------------------------------------------------- AddFlyingPoint // This adds a "flying point" object to the array of flying points. void AddFlyingPoint (Rect *theRect, short points, short hVel, short vVel) { Rect centeredRect; short i; if (numFlyingPts < kMaxFlyingPts) { theRect->left += playOriginH; theRect->right += playOriginH; theRect->top += playOriginV; theRect->bottom += playOriginV; centeredRect = pointsSrc[0]; CenterRectInRect(¢eredRect, theRect); for (i = 0; i < kMaxFlyingPts; i++) if (flyingPoints[i].mode == -1) { flyingPoints[i].dest = centeredRect; flyingPoints[i].whole = centeredRect; flyingPoints[i].loops = 0; flyingPoints[i].hVel = hVel; flyingPoints[i].vVel = vVel; switch (points) { case 100: flyingPoints[i].start = 12; flyingPoints[i].stop = 14; break; case 250: flyingPoints[i].start = 9; flyingPoints[i].stop = 11; break; case 300: flyingPoints[i].start = 6; flyingPoints[i].stop = 8; break; case 500: flyingPoints[i].start = 3; flyingPoints[i].stop = 5; break; default: flyingPoints[i].start = 0; flyingPoints[i].stop = 2; break; } flyingPoints[i].mode = flyingPoints[i].start; numFlyingPts++; break; } } } //-------------------------------------------------------------- BackUpFlames // This makes copies of the area of the room behind a flame. The flameÉ // graphic can be "copy masked" to this pixmap then and then simpleÉ // CopyBits() calls will properly draw the flame on screen with theÉ // proper background. void BackUpFlames (Rect *src, short index) { Rect dest; short i; QSetRect(&dest, 0, 0, 16, 15); for (i = 0; i < kNumCandleFlames; i++) { // Copy background to map. CopyBits((BitMap *)*GetGWorldPixMap(backSrcMap), GetPortBitMapForCopyBits(savedMaps[index].map), src, &dest, srcCopy, nil); // Copy flame to map. CopyMask((BitMap *)*GetGWorldPixMap(blowerSrcMap), (BitMap *)*GetGWorldPixMap(blowerMaskMap), GetPortBitMapForCopyBits(savedMaps[index].map), &flame[i], &flame[i], &dest); QOffsetRect(&dest, 0, 15); } } //-------------------------------------------------------------- ReBackUpFlames // Like the above function but this is called when the lighting changesÉ // in a room (lights go on or off). void ReBackUpFlames (short where, short who) { short i, f; for (i = 0; i < numSavedMaps; i++) { if ((savedMaps[i].where == where) && (savedMaps[i].who == who)) { for (f = 0; f < numFlames; f++) { if (flames[f].who == i) { BackUpFlames(&flames[f].dest, i); return; } } } } } //-------------------------------------------------------------- AddCandleFlame // This adds a candle flame to tha array of flames. void AddCandleFlame (short where, short who, short h, short v) { Rect src, bounds; short savedNum; if ((numFlames >= kMaxCandles) || (h < 16) || (v < 15)) return; QSetRect(&src, 0, 0, 16, 15); QOffsetRect(&src, h - 8, v - 15); if ((thisMac.isDepth == 4) && ((src.left % 2) == 1)) { QOffsetRect(&src, -1, 0); if (src.left < 0) QOffsetRect(&src, 2, 0); } QSetRect(&bounds, 0, 0, 16, 15 * kNumCandleFlames); savedNum = BackUpToSavedMap(&bounds, where, who); if (savedNum != -1) { BackUpFlames(&src, savedNum); flames[numFlames].dest = src; flames[numFlames].mode = RandomInt(kNumCandleFlames); QSetRect(&flames[numFlames].src, 0, 0, 16, 15); QOffsetRect(&flames[numFlames].src, 0, flames[numFlames].mode * 15); flames[numFlames].who = savedNum; numFlames++; } } //-------------------------------------------------------------- BackUpTikiFlames // This is like the function BackUpFlames() but customized for Tiki torches. void BackUpTikiFlames (Rect *src, short index) { Rect dest; short i; QSetRect(&dest, 0, 0, 8, 10); for (i = 0; i < kNumTikiFlames; i++) { // copy background to map CopyBits((BitMap *)*GetGWorldPixMap(backSrcMap), GetPortBitMapForCopyBits(savedMaps[index].map), src, &dest, srcCopy, nil); // copy flame to map CopyMask((BitMap *)*GetGWorldPixMap(blowerSrcMap), (BitMap *)*GetGWorldPixMap(blowerMaskMap), GetPortBitMapForCopyBits(savedMaps[index].map), &tikiFlame[i], &tikiFlame[i], &dest); QOffsetRect(&dest, 0, 10); } } //-------------------------------------------------------------- ReBackUpTikiFlames // This is like the function ReBackUpFlames() but customized for Tiki torches. void ReBackUpTikiFlames (short where, short who) { short i, f; for (i = 0; i < numSavedMaps; i++) { if ((savedMaps[i].where == where) && (savedMaps[i].who == who)) { for (f = 0; f < numTikiFlames; f++) { if (tikiFlames[f].who == i) { BackUpTikiFlames(&tikiFlames[f].dest, i); return; } } } } } //-------------------------------------------------------------- AddTikiFlame // This adds a tiki flame to the array of tiki flames. void AddTikiFlame (short where, short who, short h, short v) { Rect src, bounds; short savedNum; if ((numTikiFlames >= kMaxTikis) || (h < 8) || (v < 10)) return; QSetRect(&src, 0, 0, 8, 10); if ((thisMac.isDepth == 4) && ((h % 2) == 1)) { h--; if (h < 0) h += 2; } QOffsetRect(&src, h, v); QSetRect(&bounds, 0, 0, 8, 10 * kNumTikiFlames); savedNum = BackUpToSavedMap(&bounds, where, who); if (savedNum != -1) { BackUpTikiFlames(&src, savedNum); tikiFlames[numTikiFlames].dest = src; tikiFlames[numTikiFlames].mode = RandomInt(kNumTikiFlames); QSetRect(&tikiFlames[numTikiFlames].src, 0, 0, 8, 10); QOffsetRect(&tikiFlames[numTikiFlames].src, 0, tikiFlames[numTikiFlames].mode * 10); tikiFlames[numTikiFlames].who = savedNum; numTikiFlames++; } } //-------------------------------------------------------------- BackUpBBQCoals // Another one - but for BBQ coals. void BackUpBBQCoals (Rect *src, short index) { Rect dest; short i; QSetRect(&dest, 0, 0, 32, 9); for (i = 0; i < kNumBBQCoals; i++) { // copy background to map CopyBits((BitMap *)*GetGWorldPixMap(backSrcMap), GetPortBitMapForCopyBits(savedMaps[index].map), src, &dest, srcCopy, nil); // copy flame to map CopyMask((BitMap *)*GetGWorldPixMap(blowerSrcMap), (BitMap *)*GetGWorldPixMap(blowerMaskMap), GetPortBitMapForCopyBits(savedMaps[index].map), &coals[i], &coals[i], &dest); QOffsetRect(&dest, 0, 9); } } //-------------------------------------------------------------- ReBackUpBBQCoals // Sense a pattern here? void ReBackUpBBQCoals (short where, short who) { short i, f; for (i = 0; i < numSavedMaps; i++) { if ((savedMaps[i].where == where) && (savedMaps[i].who == who)) { for (f = 0; f < numCoals; f++) { if (bbqCoals[f].who == i) { BackUpBBQCoals(&bbqCoals[f].dest, i); return; } } } } } //-------------------------------------------------------------- AddBBQCoals // Adds BBQ coals to the array of BBQ coals. void AddBBQCoals (short where, short who, short h, short v) { Rect src, bounds; short savedNum; if ((numCoals >= kMaxCoals) || (h < 32) || (v < 9)) return; QSetRect(&src, 0, 0, 32, 9); if ((thisMac.isDepth == 4) && ((h % 2) == 1)) { h--; if (h < 0) h += 2; } QOffsetRect(&src, h, v); QSetRect(&bounds, 0, 0, 32, 9 * kNumBBQCoals); savedNum = BackUpToSavedMap(&bounds, where, who); if (savedNum != -1) { BackUpBBQCoals(&src, savedNum); bbqCoals[numCoals].dest = src; bbqCoals[numCoals].mode = RandomInt(kNumBBQCoals); QSetRect(&bbqCoals[numCoals].src, 0, 0, 32, 9); QOffsetRect(&bbqCoals[numCoals].src, 0, bbqCoals[numCoals].mode * 9); bbqCoals[numCoals].who = savedNum; numCoals++; } } //-------------------------------------------------------------- BackUpPendulum // Just like many of the previous functions, but for the pendulum on theÉ // cuckoo clock. void BackUpPendulum (Rect *src, short index) { Rect dest; short i; QSetRect(&dest, 0, 0, 32, 28); for (i = 0; i < kNumPendulums; i++) { CopyBits((BitMap *)*GetGWorldPixMap(backSrcMap), GetPortBitMapForCopyBits(savedMaps[index].map), src, &dest, srcCopy, nil); CopyMask((BitMap *)*GetGWorldPixMap(bonusSrcMap), (BitMap *)*GetGWorldPixMap(bonusMaskMap), GetPortBitMapForCopyBits(savedMaps[index].map), &pendulumSrc[i], &pendulumSrc[i], &dest); QOffsetRect(&dest, 0, 28); } } //-------------------------------------------------------------- ReBackUpPendulum // Backs up the pendulums in the event of lights going on or off. void ReBackUpPendulum (short where, short who) { short i, f; for (i = 0; i < numSavedMaps; i++) { if ((savedMaps[i].where == where) && (savedMaps[i].who == who)) { for (f = 0; f < numPendulums; f++) { if (pendulums[f].who == i) { BackUpPendulum(&pendulums[f].dest, i); return; } } } } } //-------------------------------------------------------------- AddPendulum // Adds a pendulum to the array of pendulums. void AddPendulum (short where, short who, short h, short v) { Rect src, bounds; short savedNum; if ((numPendulums >= kMaxPendulums) || (h < 32) || (v < 28)) return; clockFrame = 10; QSetRect(&bounds, 0, 0, 32, 28 * kNumPendulums); savedNum = BackUpToSavedMap(&bounds, where, who); if (savedNum != -1) { QSetRect(&src, 0, 0, 32, 28); if ((thisMac.isDepth == 4) && ((h % 2) == 1)) { h--; if (h < 0) h += 2; } QOffsetRect(&src, h, v); BackUpPendulum (&src, savedNum); pendulums[numPendulums].dest = src; pendulums[numPendulums].mode = 1; if (RandomInt(2) == 0) pendulums[numPendulums].toOrFro = true; else pendulums[numPendulums].toOrFro = false; pendulums[numPendulums].active = true; QSetRect(&pendulums[numPendulums].src, 0, 0, 32, 28); QOffsetRect(&pendulums[numPendulums].src, 0, 28); pendulums[numPendulums].who = savedNum; pendulums[numPendulums].where = where; pendulums[numPendulums].link = who; numPendulums++; } } //-------------------------------------------------------------- BackUpStar // Makes a copy of background beneath a star. void BackUpStar (Rect *src, short index) { Rect dest; short i; QSetRect(&dest, 0, 0, 32, 31); for (i = 0; i < 6; i++) { CopyBits((BitMap *)*GetGWorldPixMap(backSrcMap), GetPortBitMapForCopyBits(savedMaps[index].map), src, &dest, srcCopy, nil); // copy flame to map CopyMask((BitMap *)*GetGWorldPixMap(bonusSrcMap), (BitMap *)*GetGWorldPixMap(bonusMaskMap), GetPortBitMapForCopyBits(savedMaps[index].map), &starSrc[i], &starSrc[i], &dest); QOffsetRect(&dest, 0, 31); } } //-------------------------------------------------------------- ReBackUpStar // Re-backs up the stars - in the event of lighting switch. void ReBackUpStar (short where, short who) { short i, f; for (i = 0; i < numSavedMaps; i++) { if ((savedMaps[i].where == where) && (savedMaps[i].who == who)) { for (f = 0; f < numStars; f++) { if (theStars[f].who == i) { BackUpStar(&theStars[f].dest, i); return; } } } } } //-------------------------------------------------------------- AddStar // Adds a star to the star array. void AddStar (short where, short who, short h, short v) { Rect src, bounds; short savedNum; if (numStars >= kMaxStars) return; QSetRect(&src, 0, 0, 32, 31); if ((thisMac.isDepth == 4) && ((h % 2) == 1)) { h--; if (h < 0) h += 2; } QOffsetRect(&src, h, v); QSetRect(&bounds, 0, 0, 32, 31 * 6); savedNum = BackUpToSavedMap(&bounds, where, who); if (savedNum != -1) { BackUpStar(&src, savedNum); theStars[numStars].dest = src; theStars[numStars].mode = RandomInt(6); QSetRect(&theStars[numStars].src, 0, 0, 32, 31); QOffsetRect(&theStars[numStars].src, 0, theStars[numStars].mode * 31); theStars[numStars].who = savedNum; theStars[numStars].link = who; theStars[numStars].where = where; numStars++; } } //-------------------------------------------------------------- StopPendulum // Will set a flag to kill a pendulum. void StopPendulum (short where, short who) { short i; for (i = 0; i < numPendulums; i++) { if ((pendulums[i].link == who) && (pendulums[i].where == where)) pendulums[i].active = false; } } //-------------------------------------------------------------- StopStar // Will set a flag to kill a star. void StopStar (short where, short who) { short i; for (i = 0; i < numStars; i++) { if ((theStars[i].link == who) && (theStars[i].where == where)) theStars[i].mode = -1; } } //-------------------------------------------------------------- AddAShreddedGlider // Adds a shredded glider. void AddAShreddedGlider (Rect *bounds) { if (numShredded > kMaxShredded) return; shreds[numShredded].bounds.left = bounds->left + 4; shreds[numShredded].bounds.right = shreds[numShredded].bounds.left + 40; shreds[numShredded].bounds.top = bounds->top + 14; shreds[numShredded].bounds.bottom = shreds[numShredded].bounds.top; shreds[numShredded].frame = 0; numShredded++; } //-------------------------------------------------------------- RemoveShreds // Remves the shredded glider. void RemoveShreds (void) { short largest, who, i; largest = 0; who = -1; for (i = 0; i < numShredded; i++) { if (shreds[i].frame > largest) { largest = shreds[i].frame; who = i; } } if (who != -1) { if (who == (numShredded - 1)) { numShredded--; shreds[who].frame = 0; } else { numShredded--; shreds[who].bounds = shreds[numShredded].bounds; shreds[who].frame = shreds[numShredded].frame; shreds[numShredded].frame = 0; } } } //-------------------------------------------------------------- ZeroFlamesAndTheLike // Zeroes all counters that indicate the number of flames, pendulums, etc thereÉ // are in a room. Called before a room is drawn. As the room is drawn, theÉ // above functions are called and the counters incremented as objects of theÉ // specified types are drawn. void ZeroFlamesAndTheLike (void) { numFlames = 0; numTikiFlames = 0; numCoals = 0; numPendulums = 0; numGrease = 0; numStars = 0; numShredded = 0; numChimes = 0; } \ No newline at end of file diff --git a/Sources/Dynamics.c b/Sources/Dynamics.c deleted file mode 100755 index 37ed103..0000000 --- a/Sources/Dynamics.c +++ /dev/null @@ -1 +0,0 @@ - //============================================================================ //---------------------------------------------------------------------------- // Dynamics.c //---------------------------------------------------------------------------- //============================================================================ #include "Externs.h" #include "Environ.h" #include "MainWindow.h" #include "Objects.h" #include "RectUtils.h" #include "Room.h" #define kShoveVelocity 8 Rect breadSrc[kNumBreadPicts]; extern dynaPtr dinahs; extern bandPtr bands; extern short numBands, tvWithMovieNumber; extern Boolean evenFrame, twoPlayerGame, onePlayerLeft, playerDead; //============================================================== Functions //-------------------------------------------------------------- CheckDynamicCollision // Checks for a collision betwen the glider and one of the dynamic objects. // For example, did the glider hit a flying piece of toast? void CheckDynamicCollision (short who, gliderPtr thisGlider, Boolean doOffset) { Rect dinahRect; dinahRect = dinahs[who].dest; if (doOffset) QOffsetRect(&dinahRect, -playOriginH, -playOriginV); if (SectGlider(thisGlider, &dinahRect, true)) { if ((thisGlider->mode == kGliderNormal) || (thisGlider->mode == kGliderFaceLeft) || (thisGlider->mode == kGliderFaceRight) || (thisGlider->mode == kGliderBurning) || (thisGlider->mode == kGliderGoingFoil) || (thisGlider->mode == kGliderLosingFoil)) { if ((foilTotal > 0) || (thisGlider->mode == kGliderLosingFoil)) { if (IsRectLeftOfRect(&dinahRect, &thisGlider->dest)) thisGlider->hDesiredVel = kShoveVelocity; else thisGlider->hDesiredVel = -kShoveVelocity; if (dinahs[who].vVel < 0) thisGlider->vDesiredVel = dinahs[who].vVel; PlayPrioritySound(kFoilHitSound, kFoilHitPriority); if ((evenFrame) && (foilTotal > 0)) { foilTotal--; if (foilTotal <= 0) StartGliderFoilLosing(thisGlider); } } else { StartGliderFadingOut(thisGlider); PlayPrioritySound(kFadeOutSound, kFadeOutPriority); } } } } //-------------------------------------------------------------- DidBandHitDynamic // Checks to see if a rubber band struck a dynamic. Boolean DidBandHitDynamic (short who) { Rect dinahRect; short i; Boolean collided; dinahRect = dinahs[who].dest; for (i = 0; i < numBands; i++) { if (bands[i].dest.bottom < dinahRect.top) collided = false; else if (bands[i].dest.top > dinahRect.bottom) collided = false; else if (bands[i].dest.right < dinahRect.left) collided = false; else if (bands[i].dest.left > dinahRect.right) collided = false; else collided = true; if (collided) break; } return (collided); } //-------------------------------------------------------------- RenderToast // The following handful of functions handle drawing specific "dynamic" objecsts. void RenderToast (short who) { Rect src, dest; short vClip; if (dinahs[who].moving) { dest = dinahs[who].dest; QOffsetRect(&dest, playOriginH, playOriginV); src = breadSrc[dinahs[who].frame]; vClip = dinahs[who].dest.bottom - dinahs[who].hVel; if (vClip > 0) { src.bottom -= vClip; dest.bottom -= vClip; } CopyMask((BitMap *)*GetGWorldPixMap(toastSrcMap), (BitMap *)*GetGWorldPixMap(toastMaskMap), (BitMap *)*GetGWorldPixMap(workSrcMap), &src, &src, &dest); AddRectToBackRects(&dest); dest = dinahs[who].whole; QOffsetRect(&dest, playOriginH, playOriginV); AddRectToWorkRects(&dest); } } //-------------------------------------------------------------- RenderBalloon void RenderBalloon (short who) { Rect src, dest; if (dinahs[who].moving) { dest = dinahs[who].dest; QOffsetRect(&dest, playOriginH, playOriginV); src = balloonSrc[dinahs[who].frame]; CopyMask((BitMap *)*GetGWorldPixMap(balloonSrcMap), (BitMap *)*GetGWorldPixMap(balloonMaskMap), (BitMap *)*GetGWorldPixMap(workSrcMap), &src, &src, &dest); AddRectToBackRects(&dest); dest = dinahs[who].whole; QOffsetRect(&dest, playOriginH, playOriginV); AddRectToWorkRects(&dest); } } //-------------------------------------------------------------- RenderCopter void RenderCopter (short who) { Rect src, dest; if (dinahs[who].moving) { dest = dinahs[who].dest; QOffsetRect(&dest, playOriginH, playOriginV); src = copterSrc[dinahs[who].frame]; CopyMask((BitMap *)*GetGWorldPixMap(copterSrcMap), (BitMap *)*GetGWorldPixMap(copterMaskMap), (BitMap *)*GetGWorldPixMap(workSrcMap), &src, &src, &dest); AddRectToBackRects(&dest); dest = dinahs[who].whole; QOffsetRect(&dest, playOriginH, playOriginV); AddRectToWorkRects(&dest); } } //-------------------------------------------------------------- RenderDart void RenderDart (short who) { Rect src, dest; if (dinahs[who].moving) { dest = dinahs[who].dest; QOffsetRect(&dest, playOriginH, playOriginV); src = dartSrc[dinahs[who].frame]; CopyMask((BitMap *)*GetGWorldPixMap(dartSrcMap), (BitMap *)*GetGWorldPixMap(dartMaskMap), (BitMap *)*GetGWorldPixMap(workSrcMap), &src, &src, &dest); AddRectToBackRects(&dest); dest = dinahs[who].whole; QOffsetRect(&dest, playOriginH, playOriginV); AddRectToWorkRects(&dest); } } //-------------------------------------------------------------- RenderBall void RenderBall (short who) { Rect src, dest; dest = dinahs[who].dest; QOffsetRect(&dest, playOriginH, playOriginV); src = ballSrc[dinahs[who].frame]; CopyMask((BitMap *)*GetGWorldPixMap(ballSrcMap), (BitMap *)*GetGWorldPixMap(ballMaskMap), (BitMap *)*GetGWorldPixMap(workSrcMap), &src, &src, &dest); AddRectToBackRects(&dest); dest = dinahs[who].whole; QOffsetRect(&dest, playOriginH, playOriginV); AddRectToWorkRects(&dest); } //-------------------------------------------------------------- RenderDrip void RenderDrip (short who) { Rect src, dest; dest = dinahs[who].dest; QOffsetRect(&dest, playOriginH, playOriginV); src = dripSrc[dinahs[who].frame]; CopyMask((BitMap *)*GetGWorldPixMap(dripSrcMap), (BitMap *)*GetGWorldPixMap(dripMaskMap), (BitMap *)*GetGWorldPixMap(workSrcMap), &src, &src, &dest); AddRectToBackRects(&dest); dest = dinahs[who].whole; QOffsetRect(&dest, playOriginH, playOriginV); AddRectToWorkRects(&dest); } //-------------------------------------------------------------- RenderFish void RenderFish (short who) { Rect src, dest; dest = dinahs[who].dest; QOffsetRect(&dest, playOriginH, playOriginV); src = fishSrc[dinahs[who].frame]; if (dinahs[who].moving) { CopyMask((BitMap *)*GetGWorldPixMap(fishSrcMap), (BitMap *)*GetGWorldPixMap(fishMaskMap), (BitMap *)*GetGWorldPixMap(workSrcMap), &src, &src, &dest); AddRectToBackRects(&dest); dest = dinahs[who].whole; QOffsetRect(&dest, playOriginH, playOriginV); AddRectToWorkRects(&dest); } else { CopyBits((BitMap *)*GetGWorldPixMap(fishSrcMap), (BitMap *)*GetGWorldPixMap(workSrcMap), &src, &dest, srcCopy, nil); AddRectToBackRects(&dest); dest = dinahs[who].whole; QOffsetRect(&dest, playOriginH, playOriginV); AddRectToWorkRects(&dest); } } //-------------------------------------------------------------- HandleSparkleObject // The following handful of functions are called each game frame and handleÉ // the movement and state of the various types of dynamic objects. void HandleSparkleObject (short who) { Rect tempRect; if (dinahs[who].active) // is it on? { if (dinahs[who].frame <= 0) // is it idle? { // it is idle dinahs[who].timer--; if (dinahs[who].timer <= 0) { dinahs[who].timer = RandomInt(240) + 60;// reset timer dinahs[who].frame = kNumSparkleModes; // time to sparkle tempRect = dinahs[who].dest; AddSparkle(&tempRect); PlayPrioritySound(kMysticSound, kMysticPriority); } } else // it's sparkling dinahs[who].frame--; } else { } } //-------------------------------------------------------------- HandleToast void HandleToast (short who) { Rect dest; if (dinahs[who].moving) { if (evenFrame) { dinahs[who].frame++; if (dinahs[who].frame >= kNumBreadPicts) dinahs[who].frame = 0; } if (twoPlayerGame) { if (onePlayerLeft) { if (playerDead == theGlider.which) CheckDynamicCollision(who, &theGlider2, false); else CheckDynamicCollision(who, &theGlider, false); } else { CheckDynamicCollision(who, &theGlider, false); CheckDynamicCollision(who, &theGlider2, false); } } else CheckDynamicCollision(who, &theGlider, false); VOffsetRect(&dinahs[who].dest, dinahs[who].vVel); dinahs[who].whole = dinahs[who].dest; if (dinahs[who].vVel > 0) dinahs[who].whole.top -= dinahs[who].vVel; else dinahs[who].whole.bottom -= dinahs[who].vVel; dinahs[who].vVel++; // falls if (dinahs[who].vVel > dinahs[who].count) { dest = dinahs[who].whole; QOffsetRect(&dest, playOriginH, playOriginV); AddRectToWorkRects(&dest); dinahs[who].moving = false; dinahs[who].frame = dinahs[who].timer; PlayPrioritySound(kToastLandSound, kToastLandPriority); } } else { if (dinahs[who].active) dinahs[who].frame--; if (dinahs[who].frame <= 0) { if (dinahs[who].active) { dinahs[who].vVel = (short)-dinahs[who].count; dinahs[who].frame = 0; dinahs[who].moving = true; PlayPrioritySound(kToastLaunchSound, kToastLaunchPriority); } else dinahs[who].frame = dinahs[who].timer; } } } //-------------------------------------------------------------- HandleMacPlus void HandleMacPlus (short who) { if (dinahs[who].timer > 0) { dinahs[who].timer--; if (dinahs[who].active) { if (dinahs[who].timer == 0) AddRectToWorkRects(&dinahs[who].dest); else if (dinahs[who].timer == 1) { PlayPrioritySound(kMacBeepSound, kMacBeepPriority); CopyBits((BitMap *)*GetGWorldPixMap(applianceSrcMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &plusScreen2, &dinahs[who].dest, srcCopy, nil); AddRectToBackRects(&dinahs[who].dest); } else if (dinahs[who].timer == 30) PlayPrioritySound(kMacOnSound, kMacOnPriority); } else { if (dinahs[who].timer == 0) AddRectToWorkRects(&dinahs[who].dest); else if (dinahs[who].timer == 1) { PlayPrioritySound(kMacOffSound, kMacOffPriority); CopyBits((BitMap *)*GetGWorldPixMap(applianceSrcMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &plusScreen1, &dinahs[who].dest, srcCopy, nil); AddRectToBackRects(&dinahs[who].dest); } } } } //-------------------------------------------------------------- HandleTV void HandleTV (short who) { if (dinahs[who].timer > 0) { dinahs[who].timer--; if (dinahs[who].active) { if (dinahs[who].timer == 0) { if ((thisMac.hasQT) && (hasMovie) && (tvInRoom) && (who == tvWithMovieNumber)) { } else { AddRectToWorkRects(&dinahs[who].dest); } } else if (dinahs[who].timer == 1) { PlayPrioritySound(kTVOnSound, kTVOnPriority); if ((thisMac.hasQT) && (hasMovie) && (tvInRoom) && (who == tvWithMovieNumber)) { } else { CopyBits((BitMap *)*GetGWorldPixMap(applianceSrcMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &tvScreen2, &dinahs[who].dest, srcCopy, nil); AddRectToBackRects(&dinahs[who].dest); } } } else { if (dinahs[who].timer == 0) AddRectToWorkRects(&dinahs[who].dest); else if (dinahs[who].timer == 1) { PlayPrioritySound(kTVOffSound, kTVOffPriority); CopyBits((BitMap *)*GetGWorldPixMap(applianceSrcMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &tvScreen1, &dinahs[who].dest, srcCopy, nil); AddRectToBackRects(&dinahs[who].dest); } } } } //-------------------------------------------------------------- HandleCoffee void HandleCoffee (short who) { if (dinahs[who].timer > 0) { dinahs[who].timer--; if (dinahs[who].active) { if (dinahs[who].timer == 0) { AddRectToWorkRects(&dinahs[who].dest); dinahs[who].timer = 200 + RandomInt(200); } else if (dinahs[who].timer == 1) { PlayPrioritySound(kMacOnSound, kMacOnPriority); CopyBits((BitMap *)*GetGWorldPixMap(applianceSrcMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &coffeeLight2, &dinahs[who].dest, srcCopy, nil); AddRectToBackRects(&dinahs[who].dest); } else if (dinahs[who].timer == 100) { PlayPrioritySound(kCoffeeSound, kCoffeePriority); dinahs[who].timer = 200 + RandomInt(200); } } else { if (dinahs[who].timer == 0) AddRectToWorkRects(&dinahs[who].dest); else if (dinahs[who].timer == 1) { PlayPrioritySound(kMacOffSound, kMacOffPriority); CopyBits((BitMap *)*GetGWorldPixMap(applianceSrcMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &coffeeLight1, &dinahs[who].dest, srcCopy, nil); AddRectToBackRects(&dinahs[who].dest); } } } } //-------------------------------------------------------------- HandleOutlet void HandleOutlet (short who) { if (dinahs[who].position != 0) { dinahs[who].timer--; if (twoPlayerGame) { if (onePlayerLeft) { if (playerDead == theGlider.which) CheckDynamicCollision(who, &theGlider2, false); else CheckDynamicCollision(who, &theGlider, false); } else { CheckDynamicCollision(who, &theGlider, true); CheckDynamicCollision(who, &theGlider2, true); } } else CheckDynamicCollision(who, &theGlider, true); if (dinahs[who].timer <= 0) { dinahs[who].frame = 0; dinahs[who].position = 0; dinahs[who].timer = dinahs[who].count; } else { if ((dinahs[who].timer % 5) == 0) PlayPrioritySound(kZapSound, kZapPriority); dinahs[who].frame++; if (dinahs[who].frame >= kNumOutletPicts) dinahs[who].frame = 1; } if ((dinahs[who].position != 0) || (dinahs[who].hVel > 0)) { CopyBits((BitMap *)*GetGWorldPixMap(applianceSrcMap), (BitMap *)*GetGWorldPixMap(workSrcMap), &outletSrc[dinahs[who].frame], &dinahs[who].dest, srcCopy, nil); } else { // SetPort((GrafPtr)workSrcMap); PaintRect(&dinahs[who].dest); } AddRectToWorkRects(&dinahs[who].dest); } else { if (dinahs[who].active) dinahs[who].timer--; if (dinahs[who].timer <= 0) { if (dinahs[who].active) { dinahs[who].position = 1; dinahs[who].timer = kLengthOfZap; PlayPrioritySound(kZapSound, kZapPriority); } else dinahs[who].timer = dinahs[who].count; } } } //-------------------------------------------------------------- HandleVCR void HandleVCR (short who) { if (dinahs[who].timer > 0) { dinahs[who].timer--; if (dinahs[who].active) { if (dinahs[who].timer == 0) { AddRectToWorkRects(&dinahs[who].dest); dinahs[who].timer = 115; } else if (dinahs[who].timer == 5) PlayPrioritySound(kMacOnSound, kMacOnPriority); else if (dinahs[who].timer == 1) { PlayPrioritySound(kVCRSound, kVCRPriority); CopyBits((BitMap *)*GetGWorldPixMap(applianceSrcMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &vcrTime2, &dinahs[who].dest, srcCopy, nil); AddRectToBackRects(&dinahs[who].dest); } else if (dinahs[who].timer == 100) { AddRectToWorkRects(&dinahs[who].dest); dinahs[who].timer = 115; dinahs[who].frame = 1 - dinahs[who].frame; } else if (dinahs[who].timer == 101) { if (dinahs[who].frame == 0) { CopyBits((BitMap *)*GetGWorldPixMap(applianceSrcMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &vcrTime2, &dinahs[who].dest, srcCopy, nil); AddRectToBackRects(&dinahs[who].dest); } else { CopyBits((BitMap *)*GetGWorldPixMap(applianceSrcMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &vcrTime1, &dinahs[who].dest, srcCopy, nil); AddRectToBackRects(&dinahs[who].dest); } } } else { if (dinahs[who].timer == 0) AddRectToWorkRects(&dinahs[who].dest); else if (dinahs[who].timer == 1) { PlayPrioritySound(kMacOffSound, kMacOffPriority); CopyBits((BitMap *)*GetGWorldPixMap(applianceSrcMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &vcrTime1, &dinahs[who].dest, srcCopy, nil); AddRectToBackRects(&dinahs[who].dest); } } } } //-------------------------------------------------------------- HandleStereo void HandleStereo (short who) { if (dinahs[who].timer > 0) { dinahs[who].timer--; if (dinahs[who].active) { if (dinahs[who].timer == 0) { AddRectToWorkRects(&dinahs[who].dest); ToggleMusicWhilePlaying(); } else if (dinahs[who].timer == 1) { PlayPrioritySound(kMacOnSound, kMacOnPriority); CopyBits((BitMap *)*GetGWorldPixMap(applianceSrcMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &stereoLight2, &dinahs[who].dest, srcCopy, nil); AddRectToBackRects(&dinahs[who].dest); } } else { if (dinahs[who].timer == 0) { AddRectToWorkRects(&dinahs[who].dest); ToggleMusicWhilePlaying(); } else if (dinahs[who].timer == 1) { PlayPrioritySound(kMacOffSound, kMacOffPriority); CopyBits((BitMap *)*GetGWorldPixMap(applianceSrcMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &stereoLight1, &dinahs[who].dest, srcCopy, nil); AddRectToBackRects(&dinahs[who].dest); } } } } //-------------------------------------------------------------- HandleMicrowave void HandleMicrowave (short who) { Rect dest; if (dinahs[who].timer > 0) { dinahs[who].timer--; if (dinahs[who].active) { if (dinahs[who].timer == 0) AddRectToWorkRects(&dinahs[who].dest); else if (dinahs[who].timer == 1) { PlayPrioritySound(kMacOnSound, kMacOnPriority); dest = dinahs[who].dest; dest.right = dest.left + 16; CopyBits((BitMap *)*GetGWorldPixMap(applianceSrcMap), (BitMap *)*GetGWorldPixMap(backSrcMap), µOn, &dest, srcCopy, nil); QOffsetRect(&dest, 16, 0); CopyBits((BitMap *)*GetGWorldPixMap(applianceSrcMap), (BitMap *)*GetGWorldPixMap(backSrcMap), µOn, &dest, srcCopy, nil); QOffsetRect(&dest, 16, 0); CopyBits((BitMap *)*GetGWorldPixMap(applianceSrcMap), (BitMap *)*GetGWorldPixMap(backSrcMap), µOn, &dest, srcCopy, nil); AddRectToBackRects(&dinahs[who].dest); } } else { if (dinahs[who].timer == 0) AddRectToWorkRects(&dinahs[who].dest); else if (dinahs[who].timer == 1) { PlayPrioritySound(kMacOffSound, kMacOffPriority); dest = dinahs[who].dest; dest.right = dest.left + 16; CopyBits((BitMap *)*GetGWorldPixMap(applianceSrcMap), (BitMap *)*GetGWorldPixMap(backSrcMap), µOff, &dest, srcCopy, nil); QOffsetRect(&dest, 16, 0); CopyBits((BitMap *)*GetGWorldPixMap(applianceSrcMap), (BitMap *)*GetGWorldPixMap(backSrcMap), µOff, &dest, srcCopy, nil); QOffsetRect(&dest, 16, 0); CopyBits((BitMap *)*GetGWorldPixMap(applianceSrcMap), (BitMap *)*GetGWorldPixMap(backSrcMap), µOff, &dest, srcCopy, nil); AddRectToBackRects(&dinahs[who].dest); } } } } \ No newline at end of file diff --git a/Sources/Dynamics2.c b/Sources/Dynamics2.c deleted file mode 100755 index 0300e7d..0000000 --- a/Sources/Dynamics2.c +++ /dev/null @@ -1 +0,0 @@ - //============================================================================ //---------------------------------------------------------------------------- // Dynamics2.c //---------------------------------------------------------------------------- //============================================================================ #include "Externs.h" #include "RectUtils.h" #define kBalloonStop 8 #define kBalloonStart 310 #define kCopterStart 8 #define kCopterStop 310 #define kDartVelocity 6 #define kDartStop 310 #define kEnemyDropSpeed 8 extern dynaPtr dinahs; extern short numBands; extern Boolean evenFrame, twoPlayerGame, onePlayerLeft, playerDead; //============================================================== Functions //-------------------------------------------------------------- HandleBalloon void HandleBalloon (short who) { Rect dest; if (dinahs[who].moving) { if (dinahs[who].vVel < 0) { if (evenFrame) { dinahs[who].frame++; if (dinahs[who].frame >= 6) dinahs[who].frame = 0; } if (twoPlayerGame) { if (onePlayerLeft) { if (playerDead == theGlider.which) CheckDynamicCollision(who, &theGlider2, false); else CheckDynamicCollision(who, &theGlider, false); } else { CheckDynamicCollision(who, &theGlider, false); CheckDynamicCollision(who, &theGlider2, false); } } else CheckDynamicCollision(who, &theGlider, false); if ((numBands > 0) && (DidBandHitDynamic(who))) { dinahs[who].frame = 6; dinahs[who].vVel = kEnemyDropSpeed; PlayPrioritySound(kPopSound, kPopPriority); } else { VOffsetRect(&dinahs[who].dest, dinahs[who].vVel); dinahs[who].whole = dinahs[who].dest; dinahs[who].whole.bottom -= dinahs[who].vVel; } } else { if (evenFrame) { dinahs[who].frame++; if (dinahs[who].frame >= 8) dinahs[who].frame = 6; } VOffsetRect(&dinahs[who].dest, dinahs[who].vVel); dinahs[who].whole = dinahs[who].dest; dinahs[who].whole.top -= dinahs[who].vVel; } if ((dinahs[who].dest.top <= kBalloonStop) || (dinahs[who].dest.bottom >= kBalloonStart)) { dest = dinahs[who].whole; QOffsetRect(&dest, playOriginH, playOriginV); AddRectToWorkRects(&dest); dest = dinahs[who].dest; AddSparkle(&dest); PlayPrioritySound(kEnemyOutSound, kEnemyOutPriority); dinahs[who].moving = false; dinahs[who].vVel = -2; dinahs[who].timer = dinahs[who].count; dinahs[who].dest.bottom = kBalloonStart; dinahs[who].dest.top = dinahs[who].dest.bottom - RectTall(&balloonSrc[0]); dinahs[who].whole = dinahs[who].dest; } } else // balloon is idle, waiting to appear { if (dinahs[who].active) { dinahs[who].timer--; if (dinahs[who].timer <= 0) { dinahs[who].moving = true; if (dinahs[who].count < kStartSparkle) { dest = dinahs[who].dest; AddSparkle(&dest); PlayPrioritySound(kEnemyInSound, kEnemyInPriority); } } else if (dinahs[who].timer == kStartSparkle) { dest = dinahs[who].dest; AddSparkle(&dest); PlayPrioritySound(kEnemyInSound, kEnemyInPriority); } } } } //-------------------------------------------------------------- HandleCopter void HandleCopter (short who) { Rect dest; if (dinahs[who].moving) // is 'copter about? { if (dinahs[who].hVel != 0) // 'copter was not shot { dinahs[who].frame++; if (dinahs[who].frame >= 8) dinahs[who].frame = 0; if (twoPlayerGame) { if (onePlayerLeft) { if (playerDead == theGlider.which) CheckDynamicCollision(who, &theGlider2, false); else CheckDynamicCollision(who, &theGlider, false); } else { CheckDynamicCollision(who, &theGlider, false); CheckDynamicCollision(who, &theGlider2, false); } } else CheckDynamicCollision(who, &theGlider, false); if ((numBands > 0) && (DidBandHitDynamic(who))) { dinahs[who].frame = 8; dinahs[who].hVel = 0; dinahs[who].vVel = kEnemyDropSpeed; PlayPrioritySound(kPaperCrunchSound, kPaperCrunchPriority); } else { HOffsetRect(&dinahs[who].dest, dinahs[who].hVel); VOffsetRect(&dinahs[who].dest, dinahs[who].vVel); dinahs[who].whole = dinahs[who].dest; dinahs[who].whole.top -= dinahs[who].vVel; if (dinahs[who].hVel < 0) dinahs[who].whole.right -= dinahs[who].hVel; else dinahs[who].whole.left -= dinahs[who].hVel; } } else // 'copter was shot { dinahs[who].frame++; if (dinahs[who].frame >= 10) dinahs[who].frame = 8; VOffsetRect(&dinahs[who].dest, dinahs[who].vVel); dinahs[who].whole = dinahs[who].dest; dinahs[who].whole.top -= dinahs[who].vVel; } if ((dinahs[who].dest.top <= kCopterStart) || (dinahs[who].dest.bottom >= kCopterStop)) { dest = dinahs[who].whole; QOffsetRect(&dest, playOriginH, playOriginV); AddRectToWorkRects(&dest); dest = dinahs[who].dest; AddSparkle(&dest); PlayPrioritySound(kEnemyOutSound, kEnemyOutPriority); dinahs[who].moving = false; dinahs[who].vVel = 2; if (dinahs[who].type == kCopterLf) dinahs[who].hVel = -1; else dinahs[who].hVel = 1; dinahs[who].timer = dinahs[who].count; dinahs[who].dest.top = kCopterStart; dinahs[who].dest.bottom = dinahs[who].dest.top + RectTall(&copterSrc[0]); dinahs[who].dest.left = dinahs[who].position; dinahs[who].dest.right = dinahs[who].dest.left + 32; dinahs[who].whole = dinahs[who].dest; } } else { if (dinahs[who].active) { dinahs[who].timer--; if (dinahs[who].timer <= 0) { dinahs[who].moving = true; if (dinahs[who].count < kStartSparkle) { dest = dinahs[who].dest; AddSparkle(&dest); PlayPrioritySound(kEnemyInSound, kEnemyInPriority); } } else if (dinahs[who].timer == kStartSparkle) { dest = dinahs[who].dest; AddSparkle(&dest); PlayPrioritySound(kEnemyInSound, kEnemyInPriority); } } } } //-------------------------------------------------------------- HandleDart void HandleDart (short who) { Rect dest; if (dinahs[who].moving) // Dart has appeared { if (dinahs[who].hVel != 0) // meaning it isn't falling { if (twoPlayerGame) { if (onePlayerLeft) { if (playerDead == theGlider.which) CheckDynamicCollision(who, &theGlider2, false); else CheckDynamicCollision(who, &theGlider, false); } else { CheckDynamicCollision(who, &theGlider, false); CheckDynamicCollision(who, &theGlider2, false); } } else CheckDynamicCollision(who, &theGlider, false); if ((numBands > 0) && (DidBandHitDynamic(who))) { if (dinahs[who].type == kDartLf) dinahs[who].frame = 1; else dinahs[who].frame = 3; dinahs[who].hVel = 0; dinahs[who].vVel = kEnemyDropSpeed; PlayPrioritySound(kPaperCrunchSound, kPaperCrunchPriority); } else { HOffsetRect(&dinahs[who].dest, dinahs[who].hVel); VOffsetRect(&dinahs[who].dest, dinahs[who].vVel); dinahs[who].whole = dinahs[who].dest; dinahs[who].whole.top -= dinahs[who].vVel; if (dinahs[who].hVel < 0) dinahs[who].whole.right -= dinahs[who].hVel; else dinahs[who].whole.left -= dinahs[who].hVel; } } else // dart is falling straight down { VOffsetRect(&dinahs[who].dest, dinahs[who].vVel); dinahs[who].whole = dinahs[who].dest; dinahs[who].whole.top -= dinahs[who].vVel; } if ((dinahs[who].dest.left <= 0) || (dinahs[who].dest.right >= kRoomWide) || (dinahs[who].dest.bottom >= kDartStop)) { dest = dinahs[who].whole; QOffsetRect(&dest, playOriginH, playOriginV); AddRectToWorkRects(&dest); dest = dinahs[who].dest; AddSparkle(&dest); PlayPrioritySound(kEnemyOutSound, kEnemyOutPriority); dinahs[who].moving = false; dinahs[who].vVel = 2; if (dinahs[who].type == kDartLf) { dinahs[who].frame = 0; dinahs[who].hVel = -kDartVelocity; dinahs[who].dest.right = kRoomWide; dinahs[who].dest.left = dinahs[who].dest.right - RectWide(&dartSrc[0]); } else { dinahs[who].frame = 2; dinahs[who].hVel = kDartVelocity; dinahs[who].dest.left = 0; dinahs[who].dest.right = dinahs[who].dest.left + RectWide(&dartSrc[0]); } dinahs[who].timer = dinahs[who].count; dinahs[who].dest.top = dinahs[who].position; dinahs[who].dest.bottom = dinahs[who].dest.top + RectTall(&dartSrc[0]); dinahs[who].whole = dinahs[who].dest; } } else { if (dinahs[who].active) { dinahs[who].timer--; if (dinahs[who].timer <= 0) { dinahs[who].moving = true; if (dinahs[who].count < kStartSparkle) { dest = dinahs[who].dest; AddSparkle(&dest); PlayPrioritySound(kEnemyInSound, kEnemyInPriority); } } else if (dinahs[who].timer == kStartSparkle) { dest = dinahs[who].dest; AddSparkle(&dest); PlayPrioritySound(kEnemyInSound, kEnemyInPriority); } } } } //-------------------------------------------------------------- HandleBall void HandleBall (short who) { if (twoPlayerGame) { if (onePlayerLeft) { if (playerDead == theGlider.which) CheckDynamicCollision(who, &theGlider2, false); else CheckDynamicCollision(who, &theGlider, false); } else { CheckDynamicCollision(who, &theGlider, false); CheckDynamicCollision(who, &theGlider2, false); } } else CheckDynamicCollision(who, &theGlider, false); if (dinahs[who].moving) // is ball bouncing? { VOffsetRect(&dinahs[who].dest, dinahs[who].vVel); if (dinahs[who].dest.bottom >= dinahs[who].position) // bounce! { dinahs[who].whole = dinahs[who].dest; dinahs[who].whole.top -= dinahs[who].vVel; dinahs[who].whole.bottom = dinahs[who].position; dinahs[who].dest.bottom = dinahs[who].position; dinahs[who].dest.top = dinahs[who].dest.bottom - 32; if (dinahs[who].active) dinahs[who].vVel = dinahs[who].count; else { dinahs[who].vVel = -((dinahs[who].vVel * 3) / 4); if (dinahs[who].vVel == 0) dinahs[who].moving = false; // stop bounce } if (dinahs[who].whole.bottom < dinahs[who].dest.bottom) dinahs[who].whole.bottom = dinahs[who].dest.bottom; PlayPrioritySound(kBounceSound, kBouncePriority); if (dinahs[who].moving) dinahs[who].frame = 1; } else { dinahs[who].whole = dinahs[who].dest; if (dinahs[who].vVel > 0) dinahs[who].whole.top -= dinahs[who].vVel; else dinahs[who].whole.bottom -= dinahs[who].vVel; if (evenFrame) dinahs[who].vVel++; dinahs[who].frame = 0; } } else { if (dinahs[who].active) { dinahs[who].vVel = dinahs[who].count; dinahs[who].moving = true; evenFrame = true; } } } //-------------------------------------------------------------- HandleDrip void HandleDrip (short who) { Rect dest; if (dinahs[who].moving) { if (evenFrame) dinahs[who].frame = 9 - dinahs[who].frame; if (twoPlayerGame) { if (onePlayerLeft) { if (playerDead == theGlider.which) CheckDynamicCollision(who, &theGlider2, false); else CheckDynamicCollision(who, &theGlider, false); } else { CheckDynamicCollision(who, &theGlider, false); CheckDynamicCollision(who, &theGlider2, false); } } else CheckDynamicCollision(who, &theGlider, false); VOffsetRect(&dinahs[who].dest, dinahs[who].vVel); if (dinahs[who].dest.bottom >= dinahs[who].position) { dest = dinahs[who].whole; QOffsetRect(&dest, playOriginH, playOriginV); AddRectToWorkRects(&dest); dinahs[who].dest.top = dinahs[who].hVel; dinahs[who].dest.bottom = dinahs[who].dest.top + 12; PlayPrioritySound(kDropSound, kDropPriority); dinahs[who].vVel = 0; dinahs[who].timer = dinahs[who].count; dinahs[who].frame = 3; dinahs[who].moving = false; } else { dinahs[who].whole = dinahs[who].dest; dinahs[who].whole.top -= dinahs[who].vVel; if (evenFrame) dinahs[who].vVel++; } } else { if (dinahs[who].active) { dinahs[who].timer--; if (dinahs[who].timer == 6) dinahs[who].frame = 0; else if (dinahs[who].timer == 4) dinahs[who].frame = 1; else if (dinahs[who].timer == 2) dinahs[who].frame = 2; else if (dinahs[who].timer <= 0) { VOffsetRect(&dinahs[who].dest, 3); dinahs[who].whole = dinahs[who].dest; dinahs[who].moving = true; dinahs[who].frame = 4; PlayPrioritySound(kDripSound, kDripPriority); } } } } //-------------------------------------------------------------- HandleFish void HandleFish (short who) { Rect dest; if (dinahs[who].moving) // fish leaping { if ((dinahs[who].vVel >= 0) && (dinahs[who].frame < 7)) dinahs[who].frame++; if (twoPlayerGame) { if (onePlayerLeft) { if (playerDead == theGlider.which) CheckDynamicCollision(who, &theGlider2, false); else CheckDynamicCollision(who, &theGlider, false); } else { CheckDynamicCollision(who, &theGlider, false); CheckDynamicCollision(who, &theGlider2, false); } } else CheckDynamicCollision(who, &theGlider, false); VOffsetRect(&dinahs[who].dest, dinahs[who].vVel); if (dinahs[who].dest.bottom >= dinahs[who].position) // splash down { dest = dinahs[who].whole; QOffsetRect(&dest, playOriginH, playOriginV); AddRectToWorkRects(&dest); dinahs[who].dest.bottom = dinahs[who].position; dinahs[who].dest.top = dinahs[who].dest.bottom - 16; dinahs[who].whole = dinahs[who].dest; dinahs[who].whole.top -= 2; PlayPrioritySound(kDropSound, kDropPriority); dinahs[who].vVel = dinahs[who].count; dinahs[who].timer = dinahs[who].hVel; dinahs[who].frame = 0; dinahs[who].moving = false; PlayPrioritySound(kFishInSound, kFishInPriority); } else { dinahs[who].whole = dinahs[who].dest; if (dinahs[who].vVel > 0) dinahs[who].whole.top -= dinahs[who].vVel; else dinahs[who].whole.bottom -= dinahs[who].vVel; if (evenFrame) dinahs[who].vVel++; } } else // fish idle { dinahs[who].whole = dinahs[who].dest; if ((dinahs[who].timer & 0x0003) == 0x0003) { dinahs[who].frame++; if (dinahs[who].frame > 3) dinahs[who].frame = 0; if ((dinahs[who].frame == 1) || (dinahs[who].frame == 2)) { dinahs[who].dest.top++; dinahs[who].dest.bottom++; dinahs[who].whole.bottom++; } else { dinahs[who].dest.top--; dinahs[who].dest.bottom--; dinahs[who].whole.top--; } } if (dinahs[who].active) { dinahs[who].timer--; if (dinahs[who].timer <= 0) // fish leaps { dinahs[who].whole = dinahs[who].dest; dinahs[who].moving = true; dinahs[who].frame = 4; PlayPrioritySound(kFishOutSound, kFishOutPriority); } } } } \ No newline at end of file diff --git a/Sources/Dynamics3.c b/Sources/Dynamics3.c deleted file mode 100755 index 10c50d0..0000000 --- a/Sources/Dynamics3.c +++ /dev/null @@ -1 +0,0 @@ - //============================================================================ //---------------------------------------------------------------------------- // Dynamics3.c //---------------------------------------------------------------------------- //============================================================================ #include "Externs.h" #include "RectUtils.h" #define kBalloonStart 310 #define kCopterStart 8 #define kDartVelocity 6 dynaPtr dinahs; short numDynamics; extern Rect breadSrc[]; extern short numLights; extern Boolean evenFrame; //============================================================== Functions //-------------------------------------------------------------- HandleDynamics // This is the master function that calls all the specific handlers above. void HandleDynamics (void) { short i; for (i = 0; i < numDynamics; i++) { switch (dinahs[i].type) { case kSparkle: HandleSparkleObject(i); break; case kToaster: HandleToast(i); break; case kMacPlus: HandleMacPlus(i); break; case kTV: HandleTV(i); break; case kCoffee: HandleCoffee(i); break; case kOutlet: HandleOutlet(i); break; case kVCR: HandleVCR(i); break; case kStereo: HandleStereo(i); break; case kMicrowave: HandleMicrowave(i); break; case kBalloon: HandleBalloon(i); break; case kCopterLf: case kCopterRt: HandleCopter(i); break; case kDartLf: case kDartRt: HandleDart(i); break; case kBall: HandleBall(i); break; case kDrip: HandleDrip(i); break; case kFish: HandleFish(i); break; default: break; } } } //-------------------------------------------------------------- HandleDynamics // This is the master function that calls all the various rendering handlersÉ // above. void RenderDynamics (void) { short i; for (i = 0; i < numDynamics; i++) { switch (dinahs[i].type) { case kToaster: RenderToast(i); break; case kBalloon: RenderBalloon(i); break; case kCopterLf: case kCopterRt: RenderCopter(i); break; case kDartLf: case kDartRt: RenderDart(i); break; case kBall: RenderBall(i); break; case kDrip: RenderDrip(i); break; case kFish: RenderFish(i); break; default: break; } } } //-------------------------------------------------------------- ZeroDinahs // This clears all dynamics - zeros them all out. Used to initialize them. void ZeroDinahs (void) { short i; for (i = 0; i < kMaxDynamicObs; i++) { dinahs[i].type = kObjectIsEmpty; QSetRect(&dinahs[i].dest, 0, 0, 0, 0); QSetRect(&dinahs[i].whole, 0, 0, 0, 0); dinahs[i].hVel = 0; dinahs[i].vVel = 0; dinahs[i].count = 0; dinahs[i].frame = 0; dinahs[i].timer = 0; dinahs[i].position = 0; dinahs[i].room = 0; dinahs[i].byte0 = 0; dinahs[i].active = false; } numDynamics = 0; } //-------------------------------------------------------------- AddDynamicObject // When a room is being drawn, various dynamic objects are pointed here. // This function sets up the structures to handle them. short AddDynamicObject (short what, Rect *where, objectType *who, short room, short index, Boolean isOn) { short position, velocity; Boolean lilFrame; if (numDynamics >= kMaxDynamicObs) return (-1); dinahs[numDynamics].type = what; switch (what) { case kSparkle: dinahs[numDynamics].dest = sparkleSrc[0]; ZeroRectCorner(&dinahs[numDynamics].dest); QOffsetRect(&dinahs[numDynamics].dest, where->left, where->top); dinahs[numDynamics].whole = dinahs[numDynamics].dest; dinahs[numDynamics].hVel = 0; dinahs[numDynamics].vVel = 0; dinahs[numDynamics].count = 0; dinahs[numDynamics].frame = 0; dinahs[numDynamics].timer = RandomInt(60) + 15; dinahs[numDynamics].position = 0; dinahs[numDynamics].room = room; dinahs[numDynamics].byte0 = (Byte)index; dinahs[numDynamics].byte1 = 0; dinahs[numDynamics].moving = false; dinahs[numDynamics].active = isOn; break; case kToaster: dinahs[numDynamics].dest = breadSrc[0]; CenterRectInRect(&dinahs[numDynamics].dest, where); VOffsetRect(&dinahs[numDynamics].dest, where->top - dinahs[numDynamics].dest.top); dinahs[numDynamics].whole = dinahs[numDynamics].dest; dinahs[numDynamics].hVel = where->top + 2; // hVel used as clip position = who->data.g.height; // reverse engineer init. vel. velocity = 0; do { velocity++; position -= velocity; } while (position > 0); dinahs[numDynamics].vVel = -velocity; dinahs[numDynamics].count = velocity; // count = initial velocity dinahs[numDynamics].frame = (short)who->data.g.delay * 3; dinahs[numDynamics].timer = dinahs[numDynamics].frame; dinahs[numDynamics].position = 0; // launch/idle state dinahs[numDynamics].room = room; dinahs[numDynamics].byte0 = (Byte)index; dinahs[numDynamics].byte1 = 0; dinahs[numDynamics].moving = false; dinahs[numDynamics].active = isOn; break; case kMacPlus: dinahs[numDynamics].dest = plusScreen1; ZeroRectCorner(&dinahs[numDynamics].dest); QOffsetRect(&dinahs[numDynamics].dest, where->left + playOriginH + 10, where->top + playOriginV + 7); dinahs[numDynamics].whole = dinahs[numDynamics].dest; dinahs[numDynamics].hVel = 0; dinahs[numDynamics].vVel = 0; dinahs[numDynamics].count = 0; dinahs[numDynamics].frame = 0; dinahs[numDynamics].timer = 0; dinahs[numDynamics].position = 0; dinahs[numDynamics].room = room; dinahs[numDynamics].byte0 = (Byte)index; dinahs[numDynamics].byte1 = 0; dinahs[numDynamics].moving = false; dinahs[numDynamics].active = isOn; break; case kTV: dinahs[numDynamics].dest = tvScreen1; ZeroRectCorner(&dinahs[numDynamics].dest); QOffsetRect(&dinahs[numDynamics].dest, where->left + playOriginH + 17, where->top + playOriginV + 10); dinahs[numDynamics].whole = dinahs[numDynamics].dest; dinahs[numDynamics].hVel = 0; dinahs[numDynamics].vVel = 0; dinahs[numDynamics].count = 0; dinahs[numDynamics].frame = 0; dinahs[numDynamics].timer = 0; dinahs[numDynamics].position = 0; dinahs[numDynamics].room = room; dinahs[numDynamics].byte0 = (Byte)index; dinahs[numDynamics].byte1 = 0; dinahs[numDynamics].moving = false; dinahs[numDynamics].active = isOn; break; case kCoffee: dinahs[numDynamics].dest = coffeeLight1; ZeroRectCorner(&dinahs[numDynamics].dest); QOffsetRect(&dinahs[numDynamics].dest, where->left + playOriginH + 32, where->top + playOriginV + 57); dinahs[numDynamics].whole = dinahs[numDynamics].dest; dinahs[numDynamics].hVel = 0; dinahs[numDynamics].vVel = 0; dinahs[numDynamics].count = 0; dinahs[numDynamics].frame = 0; if (isOn) dinahs[numDynamics].timer = 200; else dinahs[numDynamics].timer = 0; dinahs[numDynamics].position = 0; dinahs[numDynamics].room = room; dinahs[numDynamics].byte0 = (Byte)index; dinahs[numDynamics].byte1 = 0; dinahs[numDynamics].moving = false; dinahs[numDynamics].active = isOn; break; case kOutlet: dinahs[numDynamics].dest = outletSrc[0]; ZeroRectCorner(&dinahs[numDynamics].dest); QOffsetRect(&dinahs[numDynamics].dest, where->left + playOriginH, where->top + playOriginV); dinahs[numDynamics].whole = dinahs[numDynamics].dest; dinahs[numDynamics].hVel = numLights; dinahs[numDynamics].vVel = 0; dinahs[numDynamics].count = ((short)who->data.g.delay * 6) / kTicksPerFrame; dinahs[numDynamics].frame = 0; dinahs[numDynamics].timer = dinahs[numDynamics].count; dinahs[numDynamics].position = 0; // launch/idle state dinahs[numDynamics].room = room; dinahs[numDynamics].byte0 = (Byte)index; dinahs[numDynamics].byte1 = 0; dinahs[numDynamics].moving = false; dinahs[numDynamics].active = isOn; break; case kVCR: dinahs[numDynamics].dest = vcrTime1; ZeroRectCorner(&dinahs[numDynamics].dest); QOffsetRect(&dinahs[numDynamics].dest, where->left + playOriginH + 64, where->top + playOriginV + 6); dinahs[numDynamics].whole = dinahs[numDynamics].dest; dinahs[numDynamics].hVel = 0; dinahs[numDynamics].vVel = 0; dinahs[numDynamics].count = 0; dinahs[numDynamics].frame = 0; if (isOn) dinahs[numDynamics].timer = 115; else dinahs[numDynamics].timer = 0; dinahs[numDynamics].position = 0; dinahs[numDynamics].room = room; dinahs[numDynamics].byte0 = (Byte)index; dinahs[numDynamics].byte1 = 0; dinahs[numDynamics].moving = false; dinahs[numDynamics].active = isOn; break; case kStereo: dinahs[numDynamics].dest = stereoLight1; ZeroRectCorner(&dinahs[numDynamics].dest); QOffsetRect(&dinahs[numDynamics].dest, where->left + playOriginH + 56, where->top + playOriginV + 20); dinahs[numDynamics].whole = dinahs[numDynamics].dest; dinahs[numDynamics].hVel = 0; dinahs[numDynamics].vVel = 0; dinahs[numDynamics].count = 0; dinahs[numDynamics].frame = 0; dinahs[numDynamics].timer = 0; dinahs[numDynamics].position = 0; dinahs[numDynamics].room = room; dinahs[numDynamics].byte0 = (Byte)index; dinahs[numDynamics].byte1 = 0; dinahs[numDynamics].moving = false; dinahs[numDynamics].active = isOn; break; case kMicrowave: dinahs[numDynamics].dest = microOn; ZeroRectCorner(&dinahs[numDynamics].dest); QOffsetRect(&dinahs[numDynamics].dest, where->left + playOriginH + 14, where->top + playOriginV + 13); dinahs[numDynamics].dest.right = dinahs[numDynamics].dest.left + 48; dinahs[numDynamics].whole = dinahs[numDynamics].dest; dinahs[numDynamics].hVel = 0; dinahs[numDynamics].vVel = 0; dinahs[numDynamics].count = 0; dinahs[numDynamics].frame = 0; dinahs[numDynamics].timer = 0; dinahs[numDynamics].position = 0; dinahs[numDynamics].room = room; dinahs[numDynamics].byte0 = (Byte)index; dinahs[numDynamics].byte1 = 0; dinahs[numDynamics].moving = false; dinahs[numDynamics].active = isOn; break; case kBalloon: dinahs[numDynamics].dest = balloonSrc[0]; ZeroRectCorner(&dinahs[numDynamics].dest); QOffsetRect(&dinahs[numDynamics].dest, where->left, 0); dinahs[numDynamics].dest.bottom = kBalloonStart; dinahs[numDynamics].dest.top = dinahs[numDynamics].dest.bottom - RectTall(&balloonSrc[0]); dinahs[numDynamics].whole = dinahs[numDynamics].dest; dinahs[numDynamics].hVel = 0; dinahs[numDynamics].vVel = -2; dinahs[numDynamics].count = ((short)who->data.h.delay * 6) / kTicksPerFrame; dinahs[numDynamics].frame = 0; dinahs[numDynamics].timer = dinahs[numDynamics].count; dinahs[numDynamics].position = 0; dinahs[numDynamics].room = room; dinahs[numDynamics].byte0 = (Byte)index; dinahs[numDynamics].byte1 = 0; dinahs[numDynamics].moving = false; dinahs[numDynamics].active = isOn; // initially idle break; case kCopterLf: case kCopterRt: dinahs[numDynamics].dest = copterSrc[0]; ZeroRectCorner(&dinahs[numDynamics].dest); QOffsetRect(&dinahs[numDynamics].dest, where->left, 0); dinahs[numDynamics].dest.top = kCopterStart; dinahs[numDynamics].dest.bottom = dinahs[numDynamics].dest.top + RectTall(&copterSrc[0]); dinahs[numDynamics].whole = dinahs[numDynamics].dest; if (what == kCopterLf) dinahs[numDynamics].hVel = -1; else dinahs[numDynamics].hVel = 1; dinahs[numDynamics].vVel = 2; dinahs[numDynamics].count = ((short)who->data.h.delay * 6) / kTicksPerFrame; dinahs[numDynamics].frame = 0; dinahs[numDynamics].timer = dinahs[numDynamics].count; dinahs[numDynamics].position = dinahs[numDynamics].dest.left; dinahs[numDynamics].room = room; dinahs[numDynamics].byte0 = (Byte)index; dinahs[numDynamics].byte1 = 0; dinahs[numDynamics].moving = false; dinahs[numDynamics].active = isOn; // initially idle break; case kDartLf: case kDartRt: dinahs[numDynamics].dest = dartSrc[0]; ZeroRectCorner(&dinahs[numDynamics].dest); if (what == kDartLf) { QOffsetRect(&dinahs[numDynamics].dest, kRoomWide - RectWide(&dartSrc[0]), where->top); dinahs[numDynamics].hVel = -kDartVelocity; dinahs[numDynamics].frame = 0; } else { QOffsetRect(&dinahs[numDynamics].dest, 0, where->top); dinahs[numDynamics].hVel = kDartVelocity; dinahs[numDynamics].frame = 2; } dinahs[numDynamics].whole = dinahs[numDynamics].dest; dinahs[numDynamics].vVel = 2; dinahs[numDynamics].count = ((short)who->data.h.delay * 6) / kTicksPerFrame; dinahs[numDynamics].timer = dinahs[numDynamics].count; dinahs[numDynamics].position = dinahs[numDynamics].dest.top; dinahs[numDynamics].byte0 = (Byte)index; dinahs[numDynamics].byte1 = 0; dinahs[numDynamics].moving = false; dinahs[numDynamics].active = isOn; // initially idle break; case kBall: dinahs[numDynamics].dest = ballSrc[0]; ZeroRectCorner(&dinahs[numDynamics].dest); QOffsetRect(&dinahs[numDynamics].dest, where->left, where->top); dinahs[numDynamics].whole = dinahs[numDynamics].dest; dinahs[numDynamics].hVel = 0; position = who->data.h.length; // reverse engineer init. vel. velocity = 0; evenFrame = true; lilFrame = true; do { if (lilFrame) velocity++; lilFrame = !lilFrame; position -= velocity; } while (position > 0); dinahs[numDynamics].vVel = -velocity; dinahs[numDynamics].moving = false; dinahs[numDynamics].count = -velocity; // count = initial velocity dinahs[numDynamics].frame = 0; dinahs[numDynamics].timer = 0; dinahs[numDynamics].position = dinahs[numDynamics].dest.bottom; dinahs[numDynamics].room = room; dinahs[numDynamics].byte0 = (Byte)index; dinahs[numDynamics].byte1 = 0; dinahs[numDynamics].active = isOn; break; case kDrip: dinahs[numDynamics].dest = dripSrc[0]; CenterRectInRect(&dinahs[numDynamics].dest, where); VOffsetRect(&dinahs[numDynamics].dest, where->top - dinahs[numDynamics].dest.top); dinahs[numDynamics].whole = dinahs[numDynamics].dest; dinahs[numDynamics].hVel = dinahs[numDynamics].dest.top; // remember dinahs[numDynamics].vVel = 0; dinahs[numDynamics].count = ((short)who->data.h.delay * 6) / kTicksPerFrame; dinahs[numDynamics].frame = 3; dinahs[numDynamics].timer = dinahs[numDynamics].count; dinahs[numDynamics].position = dinahs[numDynamics].dest.top + who->data.h.length; dinahs[numDynamics].room = room; dinahs[numDynamics].byte0 = (Byte)index; dinahs[numDynamics].byte1 = 0; dinahs[numDynamics].moving = false; dinahs[numDynamics].active = isOn; break; case kFish: dinahs[numDynamics].dest = fishSrc[0]; QOffsetRect(&dinahs[numDynamics].dest, where->left + 10, where->top + 8); dinahs[numDynamics].whole = dinahs[numDynamics].dest; dinahs[numDynamics].hVel = ((short)who->data.h.delay * 6) / kTicksPerFrame; position = who->data.g.height; // reverse engineer init. vel. velocity = 0; evenFrame = true; lilFrame = true; do { if (lilFrame) velocity++; lilFrame = !lilFrame; position -= velocity; } while (position > 0); dinahs[numDynamics].vVel = -velocity; dinahs[numDynamics].count = -velocity; // count = initial velocity dinahs[numDynamics].frame = 0; dinahs[numDynamics].timer = dinahs[numDynamics].hVel; dinahs[numDynamics].position = dinahs[numDynamics].dest.bottom; dinahs[numDynamics].room = room; dinahs[numDynamics].byte0 = (Byte)index; dinahs[numDynamics].byte1 = 0; dinahs[numDynamics].moving = false; dinahs[numDynamics].active = isOn; break; default: return (-1); break; } numDynamics++; return (numDynamics - 1); } \ No newline at end of file diff --git a/Sources/Environ.c b/Sources/Environ.c deleted file mode 100755 index a1143ba..0000000 --- a/Sources/Environ.c +++ /dev/null @@ -1 +0,0 @@ - //============================================================================ //---------------------------------------------------------------------------- // Environ.c //---------------------------------------------------------------------------- //============================================================================ #include #include #include #include #include "Externs.h" #include "Environ.h" #include #define kSwitchDepthAlert 130 #define kSetMemoryAlert 180 #define kLowMemoryAlert 181 #define kWNETrap 0x60 #define kSetDepthTrap 0xA2 #define kUnimpTrap 0x9F #define kGestaltTrap 0xAD #define kDisplay9Inch 1 #define kDisplay12Inch 2 #define kDisplay13Inch 3 typedef struct { short flags; long mem1; long mem2; } sizeType; //short GetThisVolumeRefNum (void); //long GetThisCurrentDirectoryID (void); //Boolean TrapExists (short); //Boolean DoWeHaveGestalt (void); //Boolean DoWeHaveWNE (void); //Boolean DoWeHaveColor (void); //Boolean DoWeHaveSystem602 (void); //Boolean DoWeHaveSystem605 (void); //Boolean DoWeHaveSystem7 (void); //Boolean DoWeHaveSoundManager3 (void); Boolean DoWeHaveQuickTime (void); Boolean DoWeHaveDragManager (void); Boolean CanWeDisplay8Bit (GDHandle); //Boolean CanWeDisplay4Bit (GDHandle); //Boolean CanWeDisplay1Bit (GDHandle); short HowManyUsableScreens (Boolean, Boolean, Boolean); void GetDeviceRect (Rect *); Boolean AreWeColorOrGrayscale (void); void SwitchDepthOrAbort (void); macEnviron thisMac; extern GDHandle thisGDevice; extern short isDepthPref; extern Boolean dontLoadMusic, dontLoadSounds; //============================================================== Functions //-------------------------------------------------------------- GetThisVolumeRefNum // Get a hard reference number for the current drive volume this app is on. /* short GetThisVolumeRefNum (void) { OSErr theErr; short vRef; theErr = GetVol(nil, &vRef); return (vRef); } */ //-------------------------------------------------------------- GetThisCurrentDirectoryID // Get a hard ID number for the current directory volume this app is in. /* long GetThisCurrentDirectoryID (void) { long dirID; dirID = LMGetCurDirStore(); return (dirID); } */ //-------------------------------------------------------------- TrapExists // Returns whether or not a ToolBox trap exists for the users ROMs/System. /* Boolean TrapExists (short trapNumber) { return ((NGetTrapAddress(trapNumber, ToolTrap) != NGetTrapAddress(kUnimpTrap, ToolTrap))); } */ //-------------------------------------------------------------- DoWeHaveGestalt // Specifically tests for the availablity of the Gestalt() trap. /* Boolean DoWeHaveGestalt (void) { return (TrapExists(kGestaltTrap)); } */ //-------------------------------------------------------------- DoWeHaveWNE // Specifically tests for the availablity of the WaitNextEvent() trap. /* Boolean DoWeHaveWNE (void) { return (TrapExists(kWNETrap)); } */ //-------------------------------------------------------------- DoWeHaveColor // Determines if ROMs support Color QuickDraw (monitor not neccessarily color). /* Boolean DoWeHaveColor (void) { SysEnvRec thisWorld; SysEnvirons(2, &thisWorld); return (thisWorld.hasColorQD); } */ //-------------------------------------------------------------- DoWeHaveSystem602 // Determines if the System version is at least 6.0.2 or more recent. /* Boolean DoWeHaveSystem602 (void) { SysEnvRec thisWorld; Boolean haveIt; SysEnvirons(2, &thisWorld); if (thisWorld.systemVersion >= 0x0602) haveIt = true; else haveIt = false; return (haveIt); } */ //-------------------------------------------------------------- DoWeHaveSystem605 // Determines if the System version is at least 6.0.5 or more recent. /* Boolean DoWeHaveSystem605 (void) { SysEnvRec thisWorld; Boolean haveIt; SysEnvirons(2, &thisWorld); if (thisWorld.systemVersion >= 0x0605) haveIt = true; else haveIt = false; return (haveIt); } / //-------------------------------------------------------------- DoWeHaveSystem7 // Determines if the System version is at least 7.0.0 or more recent. Boolean DoWeHaveSystem7 (void) { SysEnvRec thisWorld; Boolean haveIt; SysEnvirons(2, &thisWorld); if (thisWorld.systemVersion >= 0x0700) haveIt = true; else haveIt = false; return (haveIt); } //-------------------------------------------------------------- DoWeHaveSoundManager3 // Determines if the Sound Manager version is at least 3.0.0 or more recent. /* Boolean DoWeHaveSoundManager3 (void) { // NumVersion version; Boolean hasIt; hasIt = true; version = SndSoundManagerVersion(); hasIt = (version.majorRev >= 3); return hasIt; } */ //-------------------------------------------------------------- DoWeHaveQuickTime Boolean DoWeHaveQuickTime (void) { long theResponse; OSErr theErr; Boolean haveIt; theErr = Gestalt(gestaltQuickTime, &theResponse); if (theErr == noErr) haveIt = true; else haveIt = false; return (haveIt); } //-------------------------------------------------------------- DoWeHaveDragManager Boolean DoWeHaveDragManager (void) { long theResponse; OSErr theErr; Boolean haveIt; theErr = Gestalt(gestaltDragMgrAttr, &theResponse); if ((theErr == noErr) && ((theResponse & (1L << gestaltDragMgrPresent)) != 0)) haveIt = true; else haveIt = false; return (haveIt); } //-------------------------------------------------------------- WhatsOurDepth // Determines the pixel bit depth for current device (monitor). short WhatsOurDepth (void) { short thisDepth; char wasState; if (thisMac.hasColor) { if (thisGDevice != nil) { wasState = HGetState((Handle)thisGDevice); HLock((Handle)thisGDevice); thisDepth = (**(**thisGDevice).gdPMap).pixelSize; HSetState((Handle)thisGDevice, wasState); } else RedAlert(kErrUnnaccounted); } else thisDepth = 1; return (thisDepth); } //-------------------------------------------------------------- CanWeDisplay8Bit // Determines if device (monitor) capable of supporting 8 bit (256 colors/grays). Boolean CanWeDisplay8Bit (GDHandle theDevice) { short canDepth; Boolean canDo; canDo = false; canDepth = HasDepth(theDevice, 8, 1, 0); if (canDepth != 0) canDo = true; return (canDo); } //-------------------------------------------------------------- CanWeDisplay4Bit // Determines if device (monitor) capable of supporting 4 bit (16 colors/grays). /* Boolean CanWeDisplay4Bit (GDHandle theDevice) { short canDepth; Boolean canDo; canDo = false; canDepth = HasDepth(theDevice, 4, 1, 0); if (canDepth != 0) canDo = true; return (canDo); } */ //-------------------------------------------------------------- CanWeDisplay1Bit // Determines if device (monitor) capable of supporting 1 bit (black & white). /* Boolean CanWeDisplay1Bit (GDHandle theDevice) { short canDepth; Boolean canDo; canDo = false; canDepth = HasDepth(theDevice, 1, 1, 0); if (canDepth != 0) canDo = true; return (canDo); } */ //-------------------------------------------------------------- HowManyUsableScreens // Counts the number of monitors that meet the depth criteria passed in. short HowManyUsableScreens (Boolean use1Bit, Boolean use4Bit, Boolean use8Bit) { GDHandle tempGDevice; short count; count = 0; tempGDevice = GetDeviceList(); while (tempGDevice != nil) { if (TestDeviceAttribute(tempGDevice, screenDevice)) { // if ((use1Bit && CanWeDisplay1Bit(tempGDevice)) || // (use4Bit && CanWeDisplay4Bit(tempGDevice)) || // (use8Bit && CanWeDisplay8Bit(tempGDevice))) count = count + 1; } tempGDevice = GetNextDevice(tempGDevice); } return (count); } //-------------------------------------------------------------- GetDeviceRect // Returns the bounding rectangle for the current device (monitor). void GetDeviceRect (Rect *theRect) { char wasState; wasState = HGetState((Handle)thisGDevice); HLock((Handle)thisGDevice); *theRect = (*thisGDevice)->gdRect; HSetState((Handle)thisGDevice, wasState); } //-------------------------------------------------------------- AreWeColorOrGrayscale // Determines if the current device (monitor) is in colors or grayscale. Boolean AreWeColorOrGrayscale (void) { char wasState; Boolean colorOrGray; wasState = HGetState((Handle)thisGDevice); HLock((Handle)thisGDevice); colorOrGray = (**thisGDevice).gdFlags & 0x0001; HSetState((Handle)thisGDevice, wasState); if (thisMac.hasColor) { wasState = HGetState((Handle)thisGDevice); HLock((Handle)thisGDevice); colorOrGray = (**thisGDevice).gdFlags & 0x0001; HSetState((Handle)thisGDevice, wasState); return (colorOrGray); } else return (false); } //-------------------------------------------------------------- SwitchToDepth // Switches the current device (monitor) to a specific bit depth. void SwitchToDepth (short newDepth, Boolean doColor) { OSErr theErr; short colorFlag; char tagByte; if (doColor) colorFlag = 1; else colorFlag = 0; if (thisGDevice != nil) { tagByte = HGetState((Handle)thisGDevice); HLock((Handle)thisGDevice); theErr = SetDepth(thisGDevice, newDepth, 1, colorFlag); HSetState((Handle)thisGDevice, tagByte); if (theErr != noErr) RedAlert(kErrUnnaccounted); else thisMac.isDepth = newDepth; } else RedAlert(kErrUnnaccounted); } //-------------------------------------------------------------- SwitchDepthOrAbort // Brings up a dialog allowing user to select bit depth or exit to shell. void SwitchDepthOrAbort (void) { short usersDecision; if (thisMac.canSwitch) { InitCursor(); // CenterAlert(kSwitchDepthAlert); usersDecision = Alert(kSwitchDepthAlert, nil); switch (usersDecision) { case 1: SwitchToDepth(8, true); break; case 2: SwitchToDepth(4, false); break; case 3: ExitToShell(); break; } } else RedAlert(kErrUnnaccounted); } //-------------------------------------------------------------- CheckOurEnvirons // Calls all the above functions in order to fill out a sort of "spec sheet"É // for the current Mac. void CheckOurEnvirons (void) { RgnHandle grayRegion; char wasState; thisMac.thisResFile = CurResFile(); thisMac.vRefNum = 0; // TEMP thisMac.dirID = 0; // TEMP thisMac.hasGestalt = true; // TEMP thisMac.hasWNE = true; // TEMP thisMac.hasColor = true; // TEMP thisMac.canSwitch = true; // TEMP thisMac.hasSystem7 = true; // TEMP thisMac.hasSM3 = true; // TEMP thisMac.hasQT = DoWeHaveQuickTime(); thisMac.hasDrag = DoWeHaveDragManager(); FindOurDevice(); wasState = HGetState((Handle)thisGDevice); HLock((Handle)thisGDevice); thisMac.can1Bit = true; thisMac.can4Bit = true; thisMac.can8Bit = true; HSetState((Handle)thisGDevice, wasState); thisMac.numScreens = HowManyUsableScreens(false, true, true); GetDeviceRect(&thisMac.screen); thisMac.wasDepth = WhatsOurDepth(); thisMac.wasColorOrGray = AreWeColorOrGrayscale(); grayRegion = GetGrayRgn(); (void) GetRegionBounds(grayRegion, &(thisMac.gray)); } //-------------------------------------------------------------- ReflectMonitor2Environs // Tests second monitor (if available) for specific bit depth capabilities. /* void ReflectSecondMonitorEnvirons (Boolean use1Bit, Boolean use4Bit, Boolean use8Bit) { GDHandle tempGDevice; tempGDevice = GetDeviceList(); while (tempGDevice != nil) { if (TestDeviceAttribute(tempGDevice, screenDevice)) if ((use1Bit && CanWeDisplay1Bit(tempGDevice)) || (use4Bit && CanWeDisplay4Bit(tempGDevice)) || (use8Bit && CanWeDisplay8Bit(tempGDevice))) if (!TestDeviceAttribute(tempGDevice, mainScreen)) { thisGDevice = tempGDevice; thisMac.can1Bit = CanWeDisplay1Bit(thisGDevice); thisMac.can4Bit = CanWeDisplay4Bit(thisGDevice); thisMac.can8Bit = CanWeDisplay8Bit(thisGDevice); thisMac.wasDepth = WhatsOurDepth(); thisMac.wasColorOrGray = AreWeColorOrGrayscale(); GetDeviceRect(&thisMac.screen); break; } tempGDevice = GetNextDevice(tempGDevice); } } */ //-------------------------------------------------------------- HandleDepthSwitching // Handles setting up a monitor's depth to play on. void HandleDepthSwitching (void) { if (thisMac.hasColor) { switch (isDepthPref) { case kSwitchIfNeeded: if ((thisMac.wasDepth != 8) && ((thisMac.wasDepth != 4) || (thisMac.wasColorOrGray))) SwitchDepthOrAbort(); break; case kSwitchTo256Colors: if (thisMac.wasDepth != 8) { if (thisMac.can8Bit) SwitchToDepth(8, true); else SwitchDepthOrAbort(); } break; case kSwitchTo16Grays: if ((thisMac.wasDepth != 4) || (thisMac.wasColorOrGray)) { if (thisMac.can4Bit) SwitchToDepth(4, false); else SwitchDepthOrAbort(); } break; default: break; } } thisMac.isDepth = WhatsOurDepth(); } //-------------------------------------------------------------- RestoreColorDepth // Restores a monitor to its previous depth when we quit (if we changed it). void RestoreColorDepth (void) { if ((thisMac.hasColor) && ((thisMac.wasDepth != thisMac.isDepth) || (thisMac.wasColorOrGray != AreWeColorOrGrayscale()))) SwitchToDepth(thisMac.wasDepth, true); } //-------------------------------------------------------------- CheckMemorySize // Tests for a specific amount of memory available. If the required memoryÉ // is not available, attempts to turn off various game features (music, etc.)É // in order to accomodate the constrained memory available. void CheckMemorySize (void) { #define kBaseBytesNeeded 614400L // 600K Base memory #define kPaddingBytes 204800L // 200K Padding long bytesNeeded, bytesAvail; long soundBytes, musicBytes; short hitWhat; Str255 sizeStr; dontLoadMusic = false; dontLoadSounds = false; bytesNeeded = kBaseBytesNeeded; // base memory soundBytes = SoundBytesNeeded(); // sound memory if (soundBytes <= 0L) RedAlert(kErrNoMemory); else bytesNeeded += soundBytes; musicBytes = MusicBytesNeeded(); // music memory if (musicBytes <= 0L) RedAlert(kErrNoMemory); else bytesNeeded += musicBytes; bytesNeeded += 4L * (long)thisMac.screen.bottom; // main screen bytesNeeded += (((long)houseRect.right - (long)houseRect.left) * ((long)houseRect.bottom + 1 - (long)houseRect.top) * (long)thisMac.isDepth) / 8L; // work map bytesNeeded += 4L * (long)houseRect.bottom; bytesNeeded += (((long)houseRect.right - (long)houseRect.left) * ((long)houseRect.bottom + 1 - (long)houseRect.top) * (long)thisMac.isDepth) / 8L; // back map bytesNeeded += 4L * houseRect.bottom; bytesNeeded += (((long)houseRect.right - (long)houseRect.left) * 21 * (long)thisMac.isDepth) / 8L; // scoreboard map bytesNeeded += (6396L * (long)thisMac.isDepth) / 8L; // more scoreboard bytesNeeded += (32112L * (long)thisMac.isDepth) / 8L; // glider map bytesNeeded += (32112L * (long)thisMac.isDepth) / 8L; // glider2 map bytesNeeded += 32064L / 8L; // glider mask bytesNeeded += (912L * (long)thisMac.isDepth) / 8L; // glider shadow bytesNeeded += 864L / 8L; // shadow mask bytesNeeded += (304L * (long)thisMac.isDepth) / 8L; // rubber bands bytesNeeded += 288L / 8L; // bands mask bytesNeeded += (19344L * (long)thisMac.isDepth) / 8L; // blower map bytesNeeded += 19344L / 8L; // blower mask bytesNeeded += (17856L * (long)thisMac.isDepth) / 8L; // furniture map bytesNeeded += 17792L / 8L; // furniture mask bytesNeeded += (33264L * (long)thisMac.isDepth) / 8L; // prizes map bytesNeeded += 33176L / 8L; // prizes mask bytesNeeded += (2904L * (long)thisMac.isDepth) / 8L; // points map bytesNeeded += 2880L / 8L; // points mask bytesNeeded += (1848L * (long)thisMac.isDepth) / 8L; // transport map bytesNeeded += 1792L / 8L; // transport mask bytesNeeded += (3360L * (long)thisMac.isDepth) / 8L; // switches map bytesNeeded += (9144L * (long)thisMac.isDepth) / 8L; // lights map bytesNeeded += 9072L / 8L; // lights mask bytesNeeded += (21600L * (long)thisMac.isDepth) / 8L; // appliances map bytesNeeded += 21520L / 8L; // appliances mask bytesNeeded += (5600L * (long)thisMac.isDepth) / 8L; // toast map bytesNeeded += 5568L / 8L; // toast mask bytesNeeded += (1440L * (long)thisMac.isDepth) / 8L; // shredded map bytesNeeded += 1400L / 8L; // shredded mask bytesNeeded += (5784L * (long)thisMac.isDepth) / 8L; // balloon map bytesNeeded += 5760L / 8L; // balloon mask bytesNeeded += (9632L * (long)thisMac.isDepth) / 8L; // copter map bytesNeeded += 9600L / 8L; // copter mask bytesNeeded += (4928L * (long)thisMac.isDepth) / 8L; // dart map bytesNeeded += 4864L / 8L; // dart mask bytesNeeded += (2080L * (long)thisMac.isDepth) / 8L; // ball map bytesNeeded += 2048L / 8L; // ball mask bytesNeeded += (1168L * (long)thisMac.isDepth) / 8L; // drip map bytesNeeded += 1152L / 8L; // drip mask bytesNeeded += (1224L * (long)thisMac.isDepth) / 8L; // enemy map bytesNeeded += 1188L / 8L; // enemy mask bytesNeeded += (2064L * (long)thisMac.isDepth) / 8L; // fish map bytesNeeded += 2048L / 8L; // fish mask bytesNeeded += (8960L * (long)thisMac.isDepth) / 8L; // clutter map bytesNeeded += 8832L / 8L; // clutter mask bytesNeeded += (23040L * (long)thisMac.isDepth) / 8L; // support map bytesNeeded += (4320L * (long)thisMac.isDepth) / 8L; // angel map bytesNeeded += 4224L / 8L; // angel mask bytesNeeded += sizeof(roomType); bytesNeeded += sizeof(hotObject) * kMaxHotSpots; bytesNeeded += sizeof(sparkleType) * kMaxSparkles; bytesNeeded += sizeof(flyingPtType) * kMaxFlyingPts; bytesNeeded += sizeof(flameType) * kMaxCandles; bytesNeeded += sizeof(flameType) * kMaxTikis; bytesNeeded += sizeof(flameType) * kMaxCoals; bytesNeeded += sizeof(pendulumType) * kMaxPendulums; bytesNeeded += sizeof(savedType) * kMaxSavedMaps; bytesNeeded += sizeof(bandType) * kMaxRubberBands; bytesNeeded += sizeof(greaseType) * kMaxGrease; bytesNeeded += sizeof(starType) * kMaxStars; bytesNeeded += sizeof(shredType) * kMaxShredded; bytesNeeded += sizeof(dynaType) * kMaxDynamicObs; bytesNeeded += sizeof(objDataType) * kMaxMasterObjects; bytesNeeded += kDemoLength; SpinCursor(1); bytesAvail = FreeMem(); SpinCursor(1); if (bytesAvail < bytesNeeded) { InitCursor(); if (bytesAvail >= (bytesNeeded - musicBytes)) { // if we don't load the music we can run TellHerNoMusic(); dontLoadMusic = true; return; } else if (bytesAvail >= (bytesNeeded - (musicBytes + soundBytes))) { // if we don't load the music AND sounds, we can run TellHerNoSounds(); dontLoadMusic = true; dontLoadSounds = true; return; } #ifdef COMPILEDEMO // CenterAlert(kLowMemoryAlert); NumToString((bytesNeeded + kPaddingBytes) / 1024L, sizeStr); ParamText(sizeStr, "\p", "\p", "\p"); hitWhat = Alert(kLowMemoryAlert, nil); #else // CenterAlert(kSetMemoryAlert); NumToString((bytesNeeded + kPaddingBytes) / 1024L, sizeStr); ParamText(sizeStr, "\p", "\p", "\p"); hitWhat = Alert(kSetMemoryAlert, nil); // SetAppMemorySize(bytesNeeded + kPaddingBytes); #endif ExitToShell(); } } //-------------------------------------------------------------- SetAppMemorySize // Physically changes the 'SIZE' resource of the app so that when launched again,É // the Finder will give us enough memory to fully run the game (God, we hope!). void SetAppMemorySize (long newSize) { Handle tempResource; short oldResFile; short i; oldResFile = CurResFile(); UseResFile(thisMac.thisResFile); for (i = 0; i < 2; i++) { tempResource = Get1Resource('SIZE', i); if (tempResource != nil) { RemoveResource(tempResource); if (ResError() != noErr) DisposeHandle(tempResource); } } tempResource = Get1Resource('SIZE', -1); if (tempResource != nil) { HLock(tempResource); ((sizeType*)(*tempResource))->mem1 = newSize; ((sizeType*)(*tempResource))->mem2 = newSize; ChangedResource(tempResource); WriteResource(tempResource); ReleaseResource(tempResource); } UpdateResFile(thisMac.thisResFile); FlushVol(nil, 0); UseResFile(oldResFile); } \ No newline at end of file diff --git a/Sources/Events.c b/Sources/Events.c deleted file mode 100755 index cf449dc..0000000 --- a/Sources/Events.c +++ /dev/null @@ -1 +0,0 @@ - //============================================================================ //---------------------------------------------------------------------------- // Events.c //---------------------------------------------------------------------------- //============================================================================ #include #include #include "Externs.h" #include "Environ.h" #include "House.h" #include "ObjectEdit.h" short BitchAboutColorDepth (void); void HandleMouseEvent (EventRecord *); void HandleKeyEvent (EventRecord *); void HandleUpdateEvent (EventRecord *); void HandleOSEvent (EventRecord *); void HandleHighLevelEvent (EventRecord *); void HandleIdleTask (void); void IncrementMode (void); long lastUp, incrementModeTime; UInt32 doubleTime; Point lastWhere; short idleMode; Boolean doAutoDemo, switchedOut; extern WindowPtr mapWindow, toolsWindow, linkWindow; extern WindowPtr menuWindow; extern short isEditH, isEditV, isMapH, isMapV, isToolsH, isToolsV; extern short isLinkH, isLinkV, isCoordH, isCoordV; extern Boolean quitting, isMusicOn, failedMusic; extern Boolean autoRoomEdit, newRoomNow, isPlayMusicIdle; //============================================================== Functions //-------------------------------------------------------------- BitchAboutColorDepth // Display a dialog that alerts the user that they have switched the bitÉ // depth of the monitor under our noses. They must return it to previous. short BitchAboutColorDepth (void) { #define kColorSwitchedAlert 1042 short sheSaid; // CenterAlert(kColorSwitchedAlert); sheSaid = Alert(kColorSwitchedAlert, nil); return (sheSaid); } //-------------------------------------------------------------- HandleMouseEvent // Handle a mouse click event. void HandleMouseEvent (EventRecord *theEvent) { WindowPtr whichWindow; long menuChoice, newSize; short thePart, hDelta, vDelta; Boolean isDoubleClick; thePart = FindWindow(theEvent->where, &whichWindow); switch (thePart) { case inSysWindow: // SystemClick(theEvent, whichWindow); break; case inMenuBar: menuChoice = MenuSelect(theEvent->where); DoMenuChoice(menuChoice); break; case inDrag: DragWindow(whichWindow, theEvent->where, &thisMac.screen); if (whichWindow == mainWindow) { SendBehind(mainWindow, (WindowPtr)0L); GetWindowLeftTop(whichWindow, &isEditH, &isEditV); } else if (whichWindow == mapWindow) GetWindowLeftTop(whichWindow, &isMapH, &isMapV); else if (whichWindow == toolsWindow) GetWindowLeftTop(whichWindow, &isToolsH, &isToolsV); else if (whichWindow == linkWindow) GetWindowLeftTop(whichWindow, &isLinkH, &isLinkV); else if (whichWindow == coordWindow) GetWindowLeftTop(whichWindow, &isCoordH, &isCoordV); HiliteAllWindows(); break; case inGoAway: if (TrackGoAway(whichWindow,theEvent->where)) { if (whichWindow == mapWindow) ToggleMapWindow(); else if (whichWindow == toolsWindow) ToggleToolsWindow(); else if (whichWindow == linkWindow) CloseLinkWindow(); else if (whichWindow == coordWindow) ToggleCoordinateWindow(); } break; case inGrow: if (whichWindow == mapWindow) { newSize = GrowWindow(mapWindow, theEvent->where, &thisMac.gray); ResizeMapWindow(LoWord(newSize), HiWord(newSize)); } break; case inZoomIn: case inZoomOut: if (TrackBox(whichWindow, theEvent->where, thePart)) ZoomWindow(whichWindow, thePart, true); break; case inContent: if (whichWindow == mainWindow) { hDelta = theEvent->where.h - lastWhere.h; if (hDelta < 0) hDelta = -hDelta; vDelta = theEvent->where.v - lastWhere.v; if (vDelta < 0) vDelta = -vDelta; if (((theEvent->when - lastUp) < doubleTime) && (hDelta < 5) && (vDelta < 5)) isDoubleClick = true; else { isDoubleClick = false; lastUp = theEvent->when; lastWhere = theEvent->where; } HandleMainClick(theEvent->where, isDoubleClick); } else if (whichWindow == mapWindow) HandleMapClick(theEvent); else if (whichWindow == toolsWindow) HandleToolsClick(theEvent->where); else if (whichWindow == linkWindow) HandleLinkClick(theEvent->where); break; default: break; } } //-------------------------------------------------------------- HandleKeyEvent // Handle a key-down event. void HandleKeyEvent (EventRecord *theEvent) { char theChar; Boolean shiftDown, commandDown, optionDown; theChar = theEvent->message & charCodeMask; shiftDown = ((theEvent->modifiers & shiftKey) != 0); commandDown = ((theEvent->modifiers & cmdKey) != 0); optionDown = ((theEvent->modifiers & optionKey) != 0); if ((commandDown) && (!optionDown)) DoMenuChoice(MenuKey(theChar)); else { switch (theChar) { case kHelpKeyASCII: break; case kPageUpKeyASCII: if (houseUnlocked) PrevToolMode(); break; case kPageDownKeyASCII: if (houseUnlocked) NextToolMode(); break; #if BUILD_ARCADE_VERSION case kLeftArrowKeyASCII: DoOptionsMenu(iHighScores); break; case kRightArrowKeyASCII: DoOptionsMenu(iHelp); break; case kUpArrowKeyASCII: DoGameMenu(iNewGame); break; case kDownArrowKeyASCII: DoGameMenu(iNewGame); break; #else case kLeftArrowKeyASCII: if (houseUnlocked) { if (objActive == kNoObjectSelected) SelectNeighborRoom(kRoomToLeft); else MoveObject(kBumpLeft, shiftDown); } break; case kRightArrowKeyASCII: if (houseUnlocked) { if (objActive == kNoObjectSelected) SelectNeighborRoom(kRoomToRight); else MoveObject(kBumpRight, shiftDown); } break; case kUpArrowKeyASCII: if (houseUnlocked) { if (objActive == kNoObjectSelected) SelectNeighborRoom(kRoomAbove); else MoveObject(kBumpUp, shiftDown); } break; case kDownArrowKeyASCII: if (houseUnlocked) { if (objActive == kNoObjectSelected) SelectNeighborRoom(kRoomBelow); else MoveObject(kBumpDown, shiftDown); } break; #endif case kDeleteKeyASCII: if (houseUnlocked) { if (objActive == kNoObjectSelected) DeleteRoom(true); else DeleteObject(); } break; case kTabKeyASCII: if ((theMode == kEditMode) && (houseUnlocked)) { if (shiftDown) SelectPrevObject(); else SelectNextObject(); } break; case kEscapeKeyASCII: if ((theMode == kEditMode) && (houseUnlocked)) DeselectObject(); break; case kAKeyASCII: case kCapAKeyASCII: if ((theMode == kEditMode) && (houseUnlocked)) SetSpecificToolMode(kApplianceMode); break; case kBKeyASCII: case kCapBKeyASCII: if ((theMode == kEditMode) && (houseUnlocked)) SetSpecificToolMode(kBlowerMode); break; case kCKeyASCII: case kCapCKeyASCII: if ((theMode == kEditMode) && (houseUnlocked)) SetSpecificToolMode(kClutterMode); break; case kEKeyASCII: case kCapEKeyASCII: if ((theMode == kEditMode) && (houseUnlocked)) SetSpecificToolMode(kEnemyMode); break; case kFKeyASCII: case kCapFKeyASCII: if ((theMode == kEditMode) && (houseUnlocked)) SetSpecificToolMode(kFurnitureMode); break; case kLKeyASCII: case kCapLKeyASCII: if ((theMode == kEditMode) && (houseUnlocked)) SetSpecificToolMode(kLightMode); break; case kPKeyASCII: case kCapPKeyASCII: if ((theMode == kEditMode) && (houseUnlocked)) SetSpecificToolMode(kBonusMode); break; case kSKeyASCII: case kCapSKeyASCII: if ((theMode == kEditMode) && (houseUnlocked)) SetSpecificToolMode(kSwitchMode); break; case kTKeyASCII: case kCapTKeyASCII: if ((theMode == kEditMode) && (houseUnlocked)) SetSpecificToolMode(kTransportMode); break; default: break; } } } //-------------------------------------------------------------- HandleUpdateEvent // Handle an update event. void HandleUpdateEvent (EventRecord *theEvent) { if ((WindowPtr)theEvent->message == mainWindow) { SetPort((GrafPtr)mainWindow); BeginUpdate(mainWindow); UpdateMainWindow(); EndUpdate(mainWindow); } else if ((WindowPtr)theEvent->message == mapWindow) { SetPort((GrafPtr)mapWindow); BeginUpdate(mapWindow); UpdateMapWindow(); EndUpdate(mapWindow); } else if ((WindowPtr)theEvent->message == toolsWindow) { SetPort((GrafPtr)toolsWindow); BeginUpdate(toolsWindow); UpdateToolsWindow(); EndUpdate(toolsWindow); } else if ((WindowPtr)theEvent->message == linkWindow) { SetPort((GrafPtr)linkWindow); BeginUpdate(linkWindow); UpdateLinkWindow(); EndUpdate(linkWindow); } else if ((WindowPtr)theEvent->message == coordWindow) { SetPort((GrafPtr)coordWindow); BeginUpdate(coordWindow); UpdateCoordWindow(); EndUpdate(coordWindow); } else if ((WindowPtr)theEvent->message == menuWindow) { SetPort((GrafPtr)menuWindow); BeginUpdate(menuWindow); UpdateMenuBarWindow(); EndUpdate(menuWindow); } } //-------------------------------------------------------------- HandleOSEvent // Handle an OS Event (MultiFinder - user has switched in or out of app). void HandleOSEvent (EventRecord *theEvent) { OSErr theErr; short buttonHit; if (theEvent->message & 0x01000000) // suspend or resume event { if (theEvent->message & 0x00000001) // resume event { if (WhatsOurDepth() != thisMac.isDepth) { buttonHit = BitchAboutColorDepth(); if (buttonHit == 1) // player wants to Quit { #ifndef COMPILEDEMO if (QuerySaveChanges()) quitting = true; #else quitting = true; #endif } else { SwitchToDepth(thisMac.isDepth, thisMac.wasColorOrGray); } } switchedOut = false; InitCursor(); if ((isPlayMusicIdle) && (theMode != kEditMode)) { theErr = StartMusic(); if (theErr != noErr) { YellowAlert(kYellowNoMusic, theErr); failedMusic = true; } } incrementModeTime = TickCount() + kIdleSplashTicks; #ifndef COMPILEDEMO // if (theMode == kEditMode) // SeeIfValidScrapAvailable(true); #endif } else // suspend event { switchedOut = true; InitCursor(); if ((isMusicOn) && (theMode != kEditMode)) StopTheMusic(); } } } //-------------------------------------------------------------- HandleHighLevelEvent // Handle an AppleEvent (Open Document, Quit Application, etc.). void HandleHighLevelEvent (EventRecord *theEvent) { OSErr theErr; theErr = AEProcessAppleEvent(theEvent); if ((theErr != noErr) && (theErr != errAEEventNotHandled)) YellowAlert(kYellowAppleEventErr, theErr); } //-------------------------------------------------------------- HandleIdleTask // Handle some processing during event lulls. void HandleIdleTask (void) { if (theMode == kEditMode) { SetPort((GrafPtr)mainWindow); DoMarquee(); if ((autoRoomEdit) && (newRoomNow)) { if (theMode == kEditMode) DoRoomInfo(); newRoomNow = false; } } } //-------------------------------------------------------------- HandleEvent // "Master" function that tests for events and calls the above functions toÉ // handle each event type. Not called during and actual game. void HandleEvent (void) { KeyMap eventKeys; EventRecord theEvent; long sleep = 2; Boolean itHappened; GetKeys(eventKeys); if ((BitTst(&eventKeys, kCommandKeyMap)) && (BitTst(&eventKeys, kOptionKeyMap))) { HiliteAllObjects(); } else if ((BitTst(&eventKeys, kOptionKeyMap)) && (theMode == kEditMode) && (houseUnlocked)) { EraseSelectedTool(); SelectTool(kSelectTool); } if (thisMac.hasWNE) itHappened = WaitNextEvent(everyEvent, &theEvent, sleep, nil); else { // SystemTask(); itHappened = GetNextEvent(everyEvent, &theEvent); } if (itHappened) { switch (theEvent.what) { case mouseDown: HandleMouseEvent(&theEvent); break; case keyDown: case autoKey: HandleKeyEvent(&theEvent); break; case updateEvt: HandleUpdateEvent(&theEvent); break; case osEvt: HandleOSEvent(&theEvent); break; case kHighLevelEvent: HandleHighLevelEvent(&theEvent); break; } } else HandleIdleTask(); if ((theMode == kSplashMode) && doAutoDemo && !switchedOut) { if (TickCount() >= incrementModeTime) DoDemoGame(); } } //-------------------------------------------------------------- HiliteAllWindows // Ugly kludge in order to keep "floating windows" (palettes) on top ofÉ // the main window. void HiliteAllWindows (void) { if (mainWindow != nil) HiliteWindow(mainWindow, true); if (mapWindow != nil) HiliteWindow(mapWindow, true); if (toolsWindow != nil) HiliteWindow(toolsWindow, true); if (coordWindow != nil) HiliteWindow(coordWindow, true); if (linkWindow != nil) HiliteWindow(linkWindow, true); } //-------------------------------------------------------------- IgnoreThisClick // Another inelegant kludge designed to temporarily prevent an unwantedÉ // double-click to be registered. void IgnoreThisClick (void) { lastUp -= doubleTime; lastWhere.h = -100; lastWhere.v = -100; } \ No newline at end of file diff --git a/Sources/FileError.c b/Sources/FileError.c deleted file mode 100755 index bb68187..0000000 --- a/Sources/FileError.c +++ /dev/null @@ -1 +0,0 @@ - //============================================================================ //---------------------------------------------------------------------------- // FileError.c //---------------------------------------------------------------------------- //============================================================================ #include #include #include "Externs.h" #define rFileErrorAlert 140 #define rFileErrorStrings 140 //============================================================== Functions //-------------------------------------------------------------- CheckFileError // Given a result code (returned from a previous file operation) thisÉ // function cheks to see if the result code is an error and, if it isÉ // a common error for which I have a string message, I bring up anÉ // alert with the error message. If it is an unusual error, I stillÉ // bring up an alert but with "Miscellaneous file error" and theÉ // error ID. Boolean CheckFileError (short resultCode, StringPtr fileName) { short dummyInt, stringIndex; Str255 errMessage, errNumString; if (resultCode == noErr) // No problems? Then cruise return(true); switch (resultCode) { case dirFulErr: stringIndex = 2; break; case dskFulErr: stringIndex = 3; break; case ioErr: stringIndex = 4; break; case bdNamErr: stringIndex = 5; break; case fnOpnErr: stringIndex = 6; break; case mFulErr: stringIndex = 7; break; case tmfoErr: stringIndex = 8; break; case wPrErr: stringIndex = 9; break; case fLckdErr: stringIndex = 10; break; case vLckdErr: stringIndex = 11; break; case fBsyErr: stringIndex = 12; break; case dupFNErr: stringIndex = 13; break; case opWrErr: stringIndex = 14; break; case volOffLinErr: stringIndex = 15; break; case permErr: stringIndex = 16; break; case wrPermErr: stringIndex = 17; break; default: stringIndex = 1; break; } InitCursor(); GetIndString(errMessage, rFileErrorStrings, stringIndex); NumToString((long)resultCode, errNumString); ParamText(errMessage, errNumString, fileName, "\p"); // CenterAlert(rFileErrorAlert); dummyInt = Alert(rFileErrorAlert, 0L); return(false); } \ No newline at end of file diff --git a/Sources/GameOver.c b/Sources/GameOver.c deleted file mode 100755 index 706c884..0000000 --- a/Sources/GameOver.c +++ /dev/null @@ -1 +0,0 @@ -//============================================================================ //---------------------------------------------------------------------------- // GameOver.c //---------------------------------------------------------------------------- //============================================================================ #include #include "Externs.h" #include "Environ.h" #include "MainWindow.h" #include "Objects.h" #include "RectUtils.h" #include "Utilities.h" #define kNumCountDownFrames 16 #define kPageFrames 14 #define kPagesPictID 1990 #define kPagesMaskID 1989 #define kLettersPictID 1988 #define kMilkywayPictID 1021 typedef struct { Rect dest, was; short frame, counter; Boolean stuck; } pageType, *pagePtr; void DoGameOverStarAnimation (void); void SetUpFinalScreen (void); void InitDiedGameOver (void); void HandlePages (void); void DrawPages (void); pageType pages[8]; Rect pageSrcRect, pageSrc[kPageFrames], lettersSrc[8], angelSrcRect; RgnHandle roomRgn; GWorldPtr pageSrcMap, gameOverSrcMap, angelSrcMap; GWorldPtr pageMaskMap, angelMaskMap; short countDown, stopPages, pagesStuck; Boolean gameOver; extern Rect justRoomsRect; extern short splashOriginH, splashOriginV, numWork2Main; extern short numBack2Work; extern Boolean playing, shadowVisible, demoGoing; //============================================================== Functions //-------------------------------------------------------------- DoGameOver // Handles a game over. This is a game over where the player hasÉ // completed the house. void DoGameOver (void) { playing = false; SetUpFinalScreen(); SetPort((GrafPtr)mainWindow); ColorRect(&mainWindowRect, 244); DoGameOverStarAnimation(); if (!TestHighScore()) RedrawSplashScreen(); } //-------------------------------------------------------------- SetUpFinalScreen // This sets up the game over screen (again, this function is for whenÉ // the player completes the house). void SetUpFinalScreen (void) { Rect tempRect; Str255 tempStr, subStr; short count, offset, i, textDown; char wasState; SetPort((GrafPtr)workSrcMap); ColorRect(&workSrcRect, 244); QSetRect(&tempRect, 0, 0, 640, 460); CenterRectInRect(&tempRect, &workSrcRect); LoadScaledGraphic(kMilkywayPictID, &tempRect); textDown = tempRect.top; if (textDown < 0) textDown = 0; wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); PasStringCopy((*thisHouse)->trailer, tempStr); HSetState((Handle)thisHouse, wasState); count = 0; do { GetLineOfText(tempStr, count, subStr); offset = ((thisMac.screen.right - thisMac.screen.left) - TextWidth(subStr, 1, subStr[0])) / 2; TextFont(applFont); TextFace(bold); TextSize(12); ForeColor(blackColor); MoveTo(offset + 1, textDown + 33 + (count * 20)); DrawString(subStr); ForeColor(whiteColor); MoveTo(offset, textDown + 32 + (count * 20)); DrawString(subStr); ForeColor(blackColor); count++; } while (subStr[0] > 0); CopyRectWorkToBack(&workSrcRect); for (i = 0; i < 5; i++) // initialize the falling stars { pages[i].dest = starSrc[0]; QOffsetRect(&pages[i].dest, workSrcRect.right + RandomInt(workSrcRect.right / 5) + (workSrcRect.right/ 4) * i, RandomInt(workSrcRect.bottom) - workSrcRect.bottom / 2); pages[i].was = pages[i].dest; pages[i].frame = RandomInt(6); } } //-------------------------------------------------------------- DoGameOverStarAnimation // This handles the falling stars and the flying angel when a playerÉ // completes a house. void DoGameOverStarAnimation (void) { #define kStarFalls 8 EventRecord theEvent; KeyMap theKeys; Rect angelDest; long nextLoop; short which, i, count, pass; Boolean noInteruption; angelDest = angelSrcRect; QOffsetRect(&angelDest, -96, 0); noInteruption = true; nextLoop = TickCount() + 2; count = 0; pass = 0; FlushEvents(everyEvent, 0); while (noInteruption) { if ((angelDest.left % 32) == 0) // add a star { PlayPrioritySound(kMysticSound, kMysticPriority); which = angelDest.left / 32; which = which % 5; ZeroRectCorner(&pages[which].dest); QOffsetRect(&pages[which].dest, angelDest.left, angelDest.bottom); if (count < (which + 1)) count = which + 1; } for (i = 0; i < count; i++) { pages[i].frame++; if (pages[i].frame >= 6) pages[i].frame = 0; CopyMask((BitMap *)*GetGWorldPixMap(bonusSrcMap), (BitMap *)*GetGWorldPixMap(bonusMaskMap), (BitMap *)*GetGWorldPixMap(workSrcMap), &starSrc[pages[i].frame], &starSrc[pages[i].frame], &pages[i].dest); pages[i].was = pages[i].dest; pages[i].was.top -= kStarFalls; AddRectToWorkRectsWhole(&pages[i].was); AddRectToBackRects(&pages[i].dest); if (pages[i].dest.top < workSrcRect.bottom) QOffsetRect(&pages[i].dest, 0, kStarFalls); } if (angelDest.left <= (workSrcRect.right + 2)) { CopyMask((BitMap *)*GetGWorldPixMap(angelSrcMap), (BitMap *)*GetGWorldPixMap(angelMaskMap), (BitMap *)*GetGWorldPixMap(workSrcMap), &angelSrcRect, &angelSrcRect, &angelDest); angelDest.left -= 2; AddRectToWorkRectsWhole(&angelDest); angelDest.left += 2; AddRectToBackRects(&angelDest); QOffsetRect(&angelDest, 2, 0); pass = 0; } CopyRectsQD(); numWork2Main = 0; numBack2Work = 0; do { GetKeys(theKeys); if ((BitTst(&theKeys, kCommandKeyMap)) || (BitTst(&theKeys, kOptionKeyMap)) || (BitTst(&theKeys, kShiftKeyMap)) || (BitTst(&theKeys, kControlKeyMap))) noInteruption = false; if (GetNextEvent(everyEvent, &theEvent)) if ((theEvent.what == mouseDown) || (theEvent.what == keyDown)) noInteruption = false; } while (TickCount() < nextLoop); nextLoop = TickCount() + 2; if (pass < 80) pass++; else { WaitForInputEvent(5); noInteruption = false; } } } //-------------------------------------------------------------- FlagGameOver // Called to indicate (flag) that a game is over. Actual game overÉ // sequence comes up after a short delay. void FlagGameOver (void) { gameOver = true; countDown = kNumCountDownFrames; SetMusicalMode(kPlayWholeScoreMode); } //-------------------------------------------------------------- InitDiedGameOver // This is called when a game is over due to the fact that the playerÉ // lost their last glider (died), not due to getting through the entireÉ // house. This function initializes the strucures/variables. void InitDiedGameOver (void) { #define kPageSpacing 40 #define kPageRightOffset 128 #define kPageBackUp 128 short i; CGrafPtr wasCPort; GDHandle wasWorld; OSErr theErr; GetGWorld(&wasCPort, &wasWorld); QSetRect(&pageSrcRect, 0, 0, 25, 32 * 8); theErr = CreateOffScreenGWorld(&gameOverSrcMap, &pageSrcRect, kPreferredDepth); SetGWorld(gameOverSrcMap, nil); LoadGraphic(kLettersPictID); QSetRect(&pageSrcRect, 0, 0, 32, 32 * kPageFrames); theErr = CreateOffScreenGWorld(&pageSrcMap, &pageSrcRect, kPreferredDepth); SetGWorld(pageSrcMap, nil); LoadGraphic(kPagesPictID); theErr = CreateOffScreenGWorld(&pageMaskMap, &pageSrcRect, 1); SetGWorld(pageMaskMap, nil); LoadGraphic(kPagesMaskID); for (i = 0; i < kPageFrames; i++) // initialize src page rects { QSetRect(&pageSrc[i], 0, 0, 32, 32); QOffsetRect(&pageSrc[i], 0, 32 * i); } for (i = 0; i < 8; i++) // initialize dest page rects { QSetRect(&pages[i].dest, 0, 0, 32, 32); CenterRectInRect(&pages[i].dest, &thisMac.screen); QOffsetRect(&pages[i].dest, -thisMac.screen.left, -thisMac.screen.top); if (i < 4) QOffsetRect(&pages[i].dest, -kPageSpacing * (4 - i), 0); else QOffsetRect(&pages[i].dest, kPageSpacing * (i - 3), 0); QOffsetRect(&pages[i].dest, (thisMac.screen.right - thisMac.screen.left) / -2, (thisMac.screen.right - thisMac.screen.left) / -2); if (pages[i].dest.left % 2 == 1) QOffsetRect(&pages[i].dest, 1, 0); pages[i].was = pages[i].dest; pages[i].frame = 0; pages[i].counter = RandomInt(32); pages[i].stuck = false; } for (i = 0; i < 8; i++) { QSetRect(&lettersSrc[i], 0, 0, 25, 32); QOffsetRect(&lettersSrc[i], 0, 32 * i); } roomRgn = NewRgn(); RectRgn(roomRgn, &justRoomsRect); pagesStuck = 0; stopPages = ((thisMac.screen.bottom - thisMac.screen.top) / 2) - 16; } //-------------------------------------------------------------- HandlePages // This handles the pieces of paper that blow across the screen. void HandlePages (void) { short i; for (i = 0; i < 8; i++) { if ((pages[i].dest.bottom + RandomInt(8)) > stopPages) { pages[i].frame = 0; if (!pages[i].stuck) { pages[i].dest.right = pages[i].dest.left + 25; pages[i].stuck = true; pagesStuck++; } } else { if (pages[i].frame == 0) { pages[i].counter--; if (pages[i].counter <= 0) pages[i].frame = 1; } else if (pages[i].frame == 7) { pages[i].counter--; if (pages[i].counter <= 0) { pages[i].frame = 8; if (RandomInt(2) == 0) PlayPrioritySound(kPaper3Sound, kPapersPriority); else PlayPrioritySound(kPaper4Sound, kPapersPriority); } else QOffsetRect(&pages[i].dest, 10, 10); } else { pages[i].frame++; switch (pages[i].frame) { case 5: QOffsetRect(&pages[i].dest, 6, 6); break; case 6: QOffsetRect(&pages[i].dest, 8, 8); break; case 7: QOffsetRect(&pages[i].dest, 8, 8); pages[i].counter = RandomInt(4) + 4; break; case 8: case 9: QOffsetRect(&pages[i].dest, 8, 8); break; case 10: QOffsetRect(&pages[i].dest, 6, 6); break; case kPageFrames: QOffsetRect(&pages[i].dest, 8, 0); pages[i].frame = 0; pages[i].counter = RandomInt(8) + 8; if (RandomInt(2) == 0) PlayPrioritySound(kPaper1Sound, kPapersPriority); else PlayPrioritySound(kPaper2Sound, kPapersPriority); break; } } } } } //-------------------------------------------------------------- DrawPages // This function does the drawing for the pieces of paper that blowÉ // across the screen. void DrawPages (void) { short i; for (i = 0; i < 8; i++) { if (pages[i].stuck) { CopyBits((BitMap *)*GetGWorldPixMap(gameOverSrcMap), (BitMap *)*GetGWorldPixMap(workSrcMap), &lettersSrc[i], &pages[i].dest, srcCopy, roomRgn); } else { CopyMask((BitMap *)*GetGWorldPixMap(pageSrcMap), (BitMap *)*GetGWorldPixMap(pageMaskMap), (BitMap *)*GetGWorldPixMap(workSrcMap), &pageSrc[pages[i].frame], &pageSrc[pages[i].frame], &pages[i].dest); } QUnionSimilarRect(&pages[i].dest, &pages[i].was, &pages[i].was); AddRectToWorkRects(&pages[i].was); AddRectToBackRects(&pages[i].dest); CopyRectsQD(); numWork2Main = 0; numBack2Work = 0; pages[i].was = pages[i].dest; } } //-------------------------------------------------------------- DoDiedGameOver // This is called when a game is over due to the fact that the playerÉ // lost their last glider (died), not due to getting through the entireÉ // house. void DoDiedGameOver (void) { EventRecord theEvent; KeyMap theKeys; long nextLoop; Boolean userAborted; userAborted = false; InitDiedGameOver(); CopyRectMainToWork(&workSrcRect); CopyRectMainToBack(&workSrcRect); FlushEvents(everyEvent, 0); nextLoop = TickCount() + 2; while (pagesStuck < 8) { HandlePages(); DrawPages(); do { GetKeys(theKeys); if ((BitTst(&theKeys, kCommandKeyMap)) || (BitTst(&theKeys, kOptionKeyMap)) || (BitTst(&theKeys, kShiftKeyMap)) || (BitTst(&theKeys, kControlKeyMap))) { pagesStuck = 8; userAborted = true; } if (GetNextEvent(everyEvent, &theEvent)) if ((theEvent.what == mouseDown) || (theEvent.what == keyDown)) { pagesStuck = 8; userAborted = true; } } while (TickCount() < nextLoop); nextLoop = TickCount() + 2; } if (roomRgn != nil) DisposeRgn(roomRgn); DisposeGWorld(pageSrcMap); pageSrcMap = nil; DisposeGWorld(pageMaskMap); pageMaskMap = nil; DisposeGWorld(gameOverSrcMap); gameOverSrcMap = nil; playing = false; if (demoGoing) { if (!userAborted) WaitForInputEvent(1); } else { if (!userAborted) WaitForInputEvent(10); TestHighScore(); } RedrawSplashScreen(); } \ No newline at end of file diff --git a/Sources/Grease.c b/Sources/Grease.c deleted file mode 100755 index a734cca..0000000 --- a/Sources/Grease.c +++ /dev/null @@ -1 +0,0 @@ - //============================================================================ //---------------------------------------------------------------------------- // Grease.c //---------------------------------------------------------------------------- //============================================================================ #include "Externs.h" #include "Environ.h" #include "MainWindow.h" #include "Objects.h" #include "RectUtils.h" #include "Room.h" #define kGreaseIdle 0 #define kGreaseFalling 1 #define kGreaseSpreading 2 #define kGreaseSpiltIdle 3 void BackupGrease (Rect *, short, Boolean); greasePtr grease; short numGrease; extern hotPtr hotSpots; extern savedType savedMaps[]; extern Point shieldPt; extern Rect greaseSrcRt[], greaseSrcLf[], shieldRect; //============================================================== Functions //-------------------------------------------------------------- HandleGrease // Goes through all grease objects currently on screen and handlesÉ // them. If they're upright, nothing happens, but if they're inÉ // the course of falling or spilling, this function will handleÉ // advancing the spill, etc. void HandleGrease (void) { Rect src; short i; if (numGrease == 0) return; for (i = 0; i < numGrease; i++) { if (grease[i].mode == kGreaseFalling) { grease[i].frame++; if (grease[i].frame >= 3) // grease completely tipped { grease[i].frame = 3; grease[i].mode = kGreaseSpreading; hotSpots[grease[i].hotNum].action = kSlideIt; hotSpots[grease[i].hotNum].isOn = true; if (grease[i].isRight) QSetRect(&src, 0, -2, 2, 0); else QSetRect(&src, -2, -2, 0, 0); QOffsetRect(&src, -playOriginH, -playOriginV); QOffsetRect(&src, grease[i].start, grease[i].dest.bottom); hotSpots[grease[i].hotNum].bounds = src; } QSetRect(&src, 0, 0, 32, 27); QOffsetRect(&src, 0, grease[i].frame * 27); CopyBits((BitMap *)*GetGWorldPixMap(savedMaps[grease[i].mapNum].map), (BitMap *)*GetGWorldPixMap(workSrcMap), &src, &grease[i].dest, srcCopy, nil); CopyBits((BitMap *)*GetGWorldPixMap(savedMaps[grease[i].mapNum].map), (BitMap *)*GetGWorldPixMap(backSrcMap), &src, &grease[i].dest, srcCopy, nil); AddRectToWorkRects(&grease[i].dest); if (grease[i].isRight) QOffsetRect(&grease[i].dest, 2, 0); else QOffsetRect(&grease[i].dest, -2, 0); } else if (grease[i].mode == kGreaseSpreading) { if (grease[i].isRight) { QSetRect(&src, 0, -2, 2, 0); QOffsetRect(&src, grease[i].start, grease[i].dest.bottom); grease[i].start += 2; hotSpots[grease[i].hotNum].bounds.right += 2; } else { QSetRect(&src, -2, -2, 0, 0); QOffsetRect(&src, grease[i].start, grease[i].dest.bottom); grease[i].start -= 2; hotSpots[grease[i].hotNum].bounds.left -= 2; } { CGrafPtr wasCPort; GDHandle wasWorld; GetGWorld(&wasCPort, &wasWorld); SetGWorld(backSrcMap, nil); PaintRect(&src); SetGWorld(workSrcMap, nil); PaintRect(&src); AddRectToWorkRects(&src); SetGWorld(wasCPort, wasWorld); } if (grease[i].isRight) { if (grease[i].start >= grease[i].stop) grease[i].mode = kGreaseSpiltIdle; } else { if (grease[i].start <= grease[i].stop) grease[i].mode = kGreaseSpiltIdle; } } } } //-------------------------------------------------------------- BackupGrease // This makes copies of the region of the screen the grease is aboutÉ // to be drawn to. It is called in the "set up" when a player hasÉ // just entered a new room. The "grease jar falling over" animationÉ // is set up here. void BackupGrease (Rect *src, short index, Boolean isRight) { Rect dest; short i; QSetRect(&dest, 0, 0, 32, 27); for (i = 0; i < 4; i++) { CopyBits((BitMap *)*GetGWorldPixMap(backSrcMap), (BitMap *)*GetGWorldPixMap(savedMaps[index].map), src, &dest, srcCopy, nil); if (isRight) { CopyMask((BitMap *)*GetGWorldPixMap(bonusSrcMap), (BitMap *)*GetGWorldPixMap(bonusMaskMap), (BitMap *)*GetGWorldPixMap(savedMaps[index].map), &greaseSrcRt[i], &greaseSrcRt[i], &dest); QOffsetRect(src, 2, 0); } else { CopyMask((BitMap *)*GetGWorldPixMap(bonusSrcMap), (BitMap *)*GetGWorldPixMap(bonusMaskMap), (BitMap *)*GetGWorldPixMap(savedMaps[index].map), &greaseSrcLf[i], &greaseSrcLf[i], &dest); QOffsetRect(src, -2, 0); } QOffsetRect(&dest, 0, 27); } } //-------------------------------------------------------------- ReBackUpGrease // Just like th eabove function but it is called while the player isÉ // active in a room and has changed the lighting situation (like turnedÉ // off or on the lights). It assumes certain data strucutures areÉ // already declared from an earlier call to the above funciton. short ReBackUpGrease (short where, short who) { Rect src; short i; for (i = 0; i < numGrease; i++) { if ((grease[i].where == where) && (grease[i].who == who)) { if ((grease[i].mode == kGreaseIdle) || (grease[i].mode == kGreaseFalling)) { src = grease[i].dest; BackupGrease(&src, grease[i].mapNum, grease[i].isRight); } return (i); } } return (-1); } //-------------------------------------------------------------- AddGrease // Called when a new room is being set up during a game. This addsÉ // another jar of grease to the queue of jars to be handled. short AddGrease (short where, short who, short h, short v, short distance, Boolean isRight) { Rect src, bounds; short savedNum; if (numGrease >= kMaxGrease) return (-1); QSetRect(&src, 0, 0, 32, 27); QOffsetRect(&src, h, v); QSetRect(&bounds, 0, 0, 32, 27 * 4); savedNum = BackUpToSavedMap(&bounds, where, who); if (savedNum != -1) { BackupGrease (&src, savedNum, isRight); if (isRight) QOffsetRect(&src, -8, 0); else QOffsetRect(&src, 8, 0); grease[numGrease].who = who; grease[numGrease].where = where; grease[numGrease].dest = src; grease[numGrease].mapNum = savedNum; grease[numGrease].mode = kGreaseIdle; grease[numGrease].frame = -1; if (isRight) { grease[numGrease].isRight = true; grease[numGrease].start = src.right + 4; grease[numGrease].stop = src.right + distance; } else { grease[numGrease].isRight = false; grease[numGrease].start = src.left - 4; grease[numGrease].stop = src.left - distance; } numGrease++; return (numGrease - 1); } else return (-1); } //-------------------------------------------------------------- SpillGrease // A player has knocked a jar of grease over - this function flags that. void SpillGrease (short who, short index) { if (grease[who].mode == kGreaseIdle) { grease[who].mode = kGreaseFalling; grease[who].hotNum = index; PlayPrioritySound(kGreaseSpillSound, kGreaseSpillPriority); } } //-------------------------------------------------------------- RedrawAllGrease // Called to redraw all the black lines of spilt grease. void RedrawAllGrease (void) { CGrafPtr wasCPort; GDHandle wasWorld; Rect src; short i; if (numGrease == 0) return; for (i = 0; i < numGrease; i++) { src = hotSpots[grease[i].hotNum].bounds; if ((grease[i].where == thisRoomNumber) && ((src.bottom - src.top) == 2) && (grease[i].mode != kGreaseIdle)) { QOffsetRect(&src, playOriginH, playOriginV); GetGWorld(&wasCPort, &wasWorld); SetGWorld(backSrcMap, nil); PaintRect(&src); SetGWorld(workSrcMap, nil); PaintRect(&src); AddRectToWorkRects(&src); SetGWorld(wasCPort, wasWorld); } } } \ No newline at end of file diff --git a/Sources/HighScores.c b/Sources/HighScores.c deleted file mode 100755 index 27cdab0..0000000 --- a/Sources/HighScores.c +++ /dev/null @@ -1 +0,0 @@ - //============================================================================ //---------------------------------------------------------------------------- // HighScores.c //---------------------------------------------------------------------------- //============================================================================ #include #include #include #include #include #include "DialogUtils.h" #include "Externs.h" #include "Environ.h" #include "House.h" #include "MainWindow.h" #include "RectUtils.h" #include "Utilities.h" #define kHighScoresPictID 1994 #define kHighScoresMaskID 1998 #define kHighNameDialogID 1020 #define kHighBannerDialogID 1021 #define kHighNameItem 2 #define kNameNCharsItem 5 #define kHighBannerItem 2 #define kBannerScoreNCharsItem 5 void DrawHighScores (void); void UpdateNameDialog (DialogPtr); pascal Boolean NameFilter (DialogPtr, EventRecord *, short *); void GetHighScoreName (short); void UpdateBannerDialog (DialogPtr); pascal Boolean BannerFilter (DialogPtr, EventRecord *, short *); void GetHighScoreBanner (void); Boolean CreateScoresFolder (long *); Boolean FindHighScoresFolder (short *, long *); Boolean OpenHighScoresFile (FSSpec *, short *); Str31 highBanner; Str15 highName; short lastHighScore; Boolean keyStroke; extern short splashOriginH, splashOriginV; extern Boolean quickerTransitions, resumedSavedGame; //============================================================== Functions //-------------------------------------------------------------- DoHighScores // Handles fading in and cleaning up the high scores screen. void DoHighScores (void) { Rect tempRect; SpinCursor(3); SetPort((GrafPtr)workSrcMap); PaintRect(&workSrcRect); QSetRect(&tempRect, 0, 0, 640, 480); QOffsetRect(&tempRect, splashOriginH, splashOriginV); LoadScaledGraphic(kStarPictID, &tempRect); // if (quickerTransitions) // DissBitsChunky(&workSrcRect); // else // DissBits(&workSrcRect); SpinCursor(3); SetPort((GrafPtr)workSrcMap); DrawHighScores(); SpinCursor(3); // if (quickerTransitions) // DissBitsChunky(&workSrcRect); // else // DissBits(&workSrcRect); InitCursor(); DelayTicks(60); WaitForInputEvent(30); RedrawSplashScreen(); } //-------------------------------------------------------------- DrawHighScores // Draws the actual scores on the screen. #define kScoreSpacing 18 #define kScoreWide 352 #define kKimsLifted 4 void DrawHighScores (void) { GWorldPtr tempMap, tempMask; CGrafPtr wasCPort; GDHandle wasWorld; OSErr theErr; houseType *thisHousePtr; Rect tempRect, tempRect2; Str255 tempStr; short scoreLeft, bannerWidth, i, dropIt; char wasState; scoreLeft = ((thisMac.screen.right - thisMac.screen.left) - kScoreWide) / 2; dropIt = 129 + splashOriginV; GetGWorld(&wasCPort, &wasWorld); QSetRect(&tempRect, 0, 0, 332, 30); theErr = CreateOffScreenGWorld(&tempMap, &tempRect, kPreferredDepth); SetGWorld(tempMap, nil); LoadGraphic(kHighScoresPictID); theErr = CreateOffScreenGWorld(&tempMask, &tempRect, 1); SetGWorld(tempMask, nil); LoadGraphic(kHighScoresMaskID); tempRect2 = tempRect; QOffsetRect(&tempRect2, scoreLeft + (kScoreWide - 332) / 2, dropIt - 60); CopyMask((BitMap *)*GetGWorldPixMap(tempMap), (BitMap *)*GetGWorldPixMap(tempMask), (BitMap *)*GetGWorldPixMap(workSrcMap), &tempRect, &tempRect, &tempRect2); DisposeGWorld(tempMap); DisposeGWorld(tempMask); SetGWorld(wasCPort, wasWorld); TextFont(applFont); TextFace(bold); TextSize(14); PasStringCopy("\p¥ ", tempStr); PasStringConcat(tempStr, thisHouseName); PasStringConcat(tempStr, "\p ¥"); MoveTo(scoreLeft + ((kScoreWide - StringWidth(tempStr)) / 2) - 1, dropIt - 66); ForeColor(blackColor); DrawString(tempStr); MoveTo(scoreLeft + ((kScoreWide - StringWidth(tempStr)) / 2), dropIt - 65); ForeColor(cyanColor); DrawString(tempStr); ForeColor(blackColor); TextFont(applFont); TextFace(bold); TextSize(12); wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); thisHousePtr = *thisHouse; // message for score #1 PasStringCopy(thisHousePtr->highScores.banner, tempStr); bannerWidth = StringWidth(tempStr); ForeColor(blackColor); MoveTo(scoreLeft + (kScoreWide - bannerWidth) / 2, dropIt - kKimsLifted); DrawString(tempStr); ForeColor(yellowColor); MoveTo(scoreLeft + (kScoreWide - bannerWidth) / 2, dropIt - kKimsLifted - 1); DrawString(tempStr); QSetRect(&tempRect, 0, 0, bannerWidth + 8, kScoreSpacing); QOffsetRect(&tempRect, scoreLeft - 3 + (kScoreWide - bannerWidth) / 2, dropIt + 5 - kScoreSpacing - kKimsLifted); ForeColor(blackColor); FrameRect(&tempRect); QOffsetRect(&tempRect, -1, -1); ForeColor(yellowColor); FrameRect(&tempRect); for (i = 0; i < kMaxScores; i++) { if (thisHousePtr->highScores.scores[i] > 0L) { SpinCursor(1); NumToString((long)i + 1L, tempStr); // draw placing number ForeColor(blackColor); if (i == 0) MoveTo(scoreLeft + 1, dropIt - kScoreSpacing - kKimsLifted); else MoveTo(scoreLeft + 1, dropIt + (i * kScoreSpacing)); DrawString(tempStr); if (i == lastHighScore) ForeColor(whiteColor); else ForeColor(cyanColor); if (i == 0) MoveTo(scoreLeft + 0, dropIt - 1 - kScoreSpacing - kKimsLifted); else MoveTo(scoreLeft + 0, dropIt - 1 + (i * kScoreSpacing)); DrawString(tempStr); // draw high score name PasStringCopy(thisHousePtr->highScores.names[i], tempStr); ForeColor(blackColor); if (i == 0) MoveTo(scoreLeft + 31, dropIt - kScoreSpacing - kKimsLifted); else MoveTo(scoreLeft + 31, dropIt + (i * kScoreSpacing)); DrawString(tempStr); if (i == lastHighScore) ForeColor(whiteColor); else ForeColor(yellowColor); if (i == 0) MoveTo(scoreLeft + 30, dropIt - 1 - kScoreSpacing - kKimsLifted); else MoveTo(scoreLeft + 30, dropIt - 1 + (i * kScoreSpacing)); DrawString(tempStr); // draw level number NumToString(thisHousePtr->highScores.levels[i], tempStr); ForeColor(blackColor); if (i == 0) MoveTo(scoreLeft + 161, dropIt - kScoreSpacing - kKimsLifted); else MoveTo(scoreLeft + 161, dropIt + (i * kScoreSpacing)); DrawString(tempStr); if (i == lastHighScore) ForeColor(whiteColor); else ForeColor(yellowColor); if (i == 0) MoveTo(scoreLeft + 160, dropIt - 1 - kScoreSpacing - kKimsLifted); else MoveTo(scoreLeft + 160, dropIt - 1 + (i * kScoreSpacing)); DrawString(tempStr); // draw word "rooms" if (thisHousePtr->highScores.levels[i] == 1) GetLocalizedString(6, tempStr); else GetLocalizedString(7, tempStr); ForeColor(blackColor); if (i == 0) MoveTo(scoreLeft + 193, dropIt - kScoreSpacing - kKimsLifted); else MoveTo(scoreLeft + 193, dropIt + (i * kScoreSpacing)); DrawString(tempStr); ForeColor(cyanColor); if (i == 0) MoveTo(scoreLeft + 192, dropIt - 1 - kScoreSpacing - kKimsLifted); else MoveTo(scoreLeft + 192, dropIt - 1 + (i * kScoreSpacing)); DrawString(tempStr); // draw high score points NumToString(thisHousePtr->highScores.scores[i], tempStr); ForeColor(blackColor); if (i == 0) MoveTo(scoreLeft + 291, dropIt - kScoreSpacing - kKimsLifted); else MoveTo(scoreLeft + 291, dropIt + (i * kScoreSpacing)); DrawString(tempStr); if (i == lastHighScore) ForeColor(whiteColor); else ForeColor(yellowColor); if (i == 0) MoveTo(scoreLeft + 290, dropIt - 1 - kScoreSpacing - kKimsLifted); else MoveTo(scoreLeft + 290, dropIt - 1 + (i * kScoreSpacing)); DrawString(tempStr); } } ForeColor(blueColor); TextFont(applFont); TextFace(bold); TextSize(9); MoveTo(scoreLeft + 80, dropIt - 1 + (10 * kScoreSpacing)); GetLocalizedString(8, tempStr); DrawString(tempStr); ForeColor(blackColor); HSetState((Handle)thisHouse, wasState); } //-------------------------------------------------------------- SortHighScores // This does a simple sort of the high scores. void SortHighScores (void) { scoresType tempScores; houseType *thisHousePtr; long greatest; short i, h, which; char wasState; wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); thisHousePtr = *thisHouse; for (h = 0; h < kMaxScores; h++) { greatest = -1L; which = -1; for (i = 0; i < kMaxScores; i++) { if (thisHousePtr->highScores.scores[i] > greatest) { greatest = thisHousePtr->highScores.scores[i]; which = i; } } if (which != -1) { PasStringCopy(thisHousePtr->highScores.names[which], tempScores.names[h]); tempScores.scores[h] = thisHousePtr->highScores.scores[which]; tempScores.timeStamps[h] = thisHousePtr->highScores.timeStamps[which]; tempScores.levels[h] = thisHousePtr->highScores.levels[which]; thisHousePtr->highScores.scores[which] = -1L; } } PasStringCopy(thisHousePtr->highScores.banner, tempScores.banner); thisHousePtr->highScores = tempScores; HSetState((Handle)thisHouse, wasState); } //-------------------------------------------------------------- ZeroHighScores // This funciton goes through and resets or "zeros" all high scores. void ZeroHighScores (void) { houseType *thisHousePtr; short i; char wasState; wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); thisHousePtr = *thisHouse; PasStringCopy(thisHouseName, thisHousePtr->highScores.banner); for (i = 0; i < kMaxScores; i++) { PasStringCopy("\p--------------", thisHousePtr->highScores.names[i]); thisHousePtr->highScores.scores[i] = 0L; thisHousePtr->highScores.timeStamps[i] = 0L; thisHousePtr->highScores.levels[i] = 0; } HSetState((Handle)thisHouse, wasState); } //-------------------------------------------------------------- ZeroAllButHighestScore // Like the above, but this function preserves the highest score. void ZeroAllButHighestScore (void) { houseType *thisHousePtr; short i; char wasState; wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); thisHousePtr = *thisHouse; for (i = 1; i < kMaxScores; i++) { PasStringCopy("\p--------------", thisHousePtr->highScores.names[i]); thisHousePtr->highScores.scores[i] = 0L; thisHousePtr->highScores.timeStamps[i] = 0L; thisHousePtr->highScores.levels[i] = 0; } HSetState((Handle)thisHouse, wasState); } //-------------------------------------------------------------- TestHighScore // This function is called after a game ends in order to test theÉ // current high score against the high score list. It returns trueÉ // if the player is on the high score list now. Boolean TestHighScore (void) { houseType *thisHousePtr; short placing, i; char wasState; if (resumedSavedGame) return (false); wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); thisHousePtr = *thisHouse; lastHighScore = -1; placing = -1; for (i = 0; i < kMaxScores; i++) { if (theScore > thisHousePtr->highScores.scores[i]) { placing = i; lastHighScore = i; break; } } if (placing != -1) { FlushEvents(everyEvent, 0); GetHighScoreName(placing + 1); PasStringCopy(highName, thisHousePtr->highScores.names[kMaxScores - 1]); if (placing == 0) { GetHighScoreBanner(); PasStringCopy(highBanner, thisHousePtr->highScores.banner); } thisHousePtr->highScores.scores[kMaxScores - 1] = theScore; GetDateTime(&thisHousePtr->highScores.timeStamps[kMaxScores - 1]); thisHousePtr->highScores.levels[kMaxScores - 1] = CountRoomsVisited(); SortHighScores(); gameDirty = true; } HSetState((Handle)thisHouse, wasState); if (placing != -1) { DoHighScores(); return (true); } else return (false); } //-------------------------------------------------------------- UpdateNameDialog // Redraws the "Enter High Score Name" dialog. void UpdateNameDialog (DialogPtr theDialog) { short nChars; DrawDialog(theDialog); DrawDefaultButton(theDialog); nChars = GetDialogStringLen(theDialog, kHighNameItem); SetDialogNumToStr(theDialog, kNameNCharsItem, (long)nChars); } //-------------------------------------------------------------- NameFilter // Dialog filter for the "Enter High Score Name" dialog. pascal Boolean NameFilter (DialogPtr dial, EventRecord *event, short *item) { short nChars; if (keyStroke) { nChars = GetDialogStringLen(dial, kHighNameItem); SetDialogNumToStr(dial, kNameNCharsItem, (long)nChars); keyStroke = false; } switch (event->what) { case keyDown: keyStroke = true; switch ((event->message) & charCodeMask) { case kReturnKeyASCII: case kEnterKeyASCII: PlayPrioritySound(kCarriageSound, kCarriagePriority); FlashDialogButton(dial, kOkayButton); *item = kOkayButton; return(true); break; case kTabKeyASCII: SelectDialogItemText(dial, kHighNameItem, 0, 1024); return(false); break; default: PlayPrioritySound(kTypingSound, kTypingPriority); return(false); } break; case updateEvt: BeginUpdate(GetDialogWindow(dial)); UpdateNameDialog(dial); EndUpdate(GetDialogWindow(dial)); event->what = nullEvent; return(false); break; default: return(false); break; } } //-------------------------------------------------------------- GetHighScoreName // Brings up a dialog to get player's name (due to a high score). void GetHighScoreName (short place) { DialogPtr theDial; Str255 scoreStr, placeStr, tempStr; short item; Boolean leaving; ModalFilterUPP nameFilterUPP; nameFilterUPP = NewModalFilterUPP(NameFilter); InitCursor(); NumToString(theScore, scoreStr); NumToString((long)place, placeStr); ParamText(scoreStr, placeStr, thisHouseName, "\p"); PlayPrioritySound(kEnergizeSound, kEnergizePriority); BringUpDialog(&theDial, kHighNameDialogID); FlushEvents(everyEvent, 0); SetDialogString(theDial, kHighNameItem, highName); SelectDialogItemText(theDial, kHighNameItem, 0, 1024); leaving = false; while (!leaving) { ModalDialog(nameFilterUPP, &item); if (item == kOkayButton) { GetDialogString(theDial, kHighNameItem, tempStr); PasStringCopyNum(tempStr, highName, 15); leaving = true; } } DisposeDialog(theDial); DisposeModalFilterUPP(nameFilterUPP); } //-------------------------------------------------------------- UpdateBannerDialog // Redraws the "Enter Message" dialog. void UpdateBannerDialog (DialogPtr theDialog) { short nChars; DrawDialog(theDialog); DrawDefaultButton(theDialog); nChars = GetDialogStringLen(theDialog, kHighBannerItem); SetDialogNumToStr(theDialog, kBannerScoreNCharsItem, (long)nChars); } //-------------------------------------------------------------- BannerFilter // Dialog filter for the "Enter Message" dialog. pascal Boolean BannerFilter (DialogPtr dial, EventRecord *event, short *item) { short nChars; if (keyStroke) { nChars = GetDialogStringLen(dial, kHighBannerItem); SetDialogNumToStr(dial, kBannerScoreNCharsItem, (long)nChars); keyStroke = false; } switch (event->what) { case keyDown: keyStroke = true; switch ((event->message) & charCodeMask) { case kReturnKeyASCII: case kEnterKeyASCII: PlayPrioritySound(kCarriageSound, kCarriagePriority); FlashDialogButton(dial, kOkayButton); *item = kOkayButton; return(true); break; case kTabKeyASCII: SelectDialogItemText(dial, kHighBannerItem, 0, 1024); return(false); break; default: PlayPrioritySound(kTypingSound, kTypingPriority); return(false); } break; case updateEvt: BeginUpdate(GetDialogWindow(dial)); UpdateBannerDialog(dial); EndUpdate(GetDialogWindow(dial)); event->what = nullEvent; return(false); break; default: return(false); break; } } //-------------------------------------------------------------- GetHighScoreBanner // A player who gets the #1 slot gets to enter a short message (thatÉ // appears across the top of the high scores list). This dialogÉ // gets that message. void GetHighScoreBanner (void) { DialogPtr theDial; Str255 tempStr; short item; Boolean leaving; ModalFilterUPP bannerFilterUPP; bannerFilterUPP = NewModalFilterUPP(BannerFilter); PlayPrioritySound(kEnergizeSound, kEnergizePriority); BringUpDialog(&theDial, kHighBannerDialogID); SetDialogString(theDial, kHighBannerItem, highBanner); SelectDialogItemText(theDial, kHighBannerItem, 0, 1024); leaving = false; while (!leaving) { ModalDialog(bannerFilterUPP, &item); if (item == kOkayButton) { GetDialogString(theDial, kHighBannerItem, tempStr); PasStringCopyNum(tempStr, highBanner, 31); leaving = true; } } DisposeDialog(theDial); DisposeModalFilterUPP(bannerFilterUPP); } //-------------------------------------------------------------- CreateScoresFolder Boolean CreateScoresFolder (long *scoresDirID) { FSSpec scoresSpec; long prefsDirID; OSErr theErr; short volRefNum; theErr = FindFolder(kOnSystemDisk, kPreferencesFolderType, kCreateFolder, &volRefNum, &prefsDirID); if (!CheckFileError(theErr, "\pPrefs Folder")) return (false); theErr = FSMakeFSSpec(volRefNum, prefsDirID, "\pG-PRO Scores Ä", &scoresSpec); theErr = FSpDirCreate(&scoresSpec, smSystemScript, scoresDirID); if (!CheckFileError(theErr, "\pHigh Scores Folder")) return (false); return (true); } //-------------------------------------------------------------- FindHighScoresFolder Boolean FindHighScoresFolder (short *volRefNum, long *scoresDirID) { CInfoPBRec theBlock; Str255 nameString; long prefsDirID; OSErr theErr; short count; Boolean foundIt; theErr = FindFolder(kOnSystemDisk, kPreferencesFolderType, kCreateFolder, volRefNum, &prefsDirID); if (!CheckFileError(theErr, "\pPrefs Folder")) return (false); PasStringCopy("\pG-PRO Scores Ä", nameString); count = 1; foundIt = false; theBlock.dirInfo.ioCompletion = nil; theBlock.dirInfo.ioVRefNum = *volRefNum; theBlock.dirInfo.ioNamePtr = nameString; while ((theErr == noErr) && (!foundIt)) { theBlock.dirInfo.ioFDirIndex = count; theBlock.dirInfo.ioDrDirID = prefsDirID; theErr = PBGetCatInfo(&theBlock, false); if (theErr == noErr) { if ((theBlock.dirInfo.ioFlAttrib & 0x10) == 0x10) { if (EqualString(theBlock.dirInfo.ioNamePtr, "\pG-PRO Scores Ä", true, true)) { foundIt = true; *scoresDirID = theBlock.dirInfo.ioDrDirID; } } count++; } } if (theErr == fnfErr) { if (CreateScoresFolder(scoresDirID)) return (true); else return (false); } else return (true); } //-------------------------------------------------------------- OpenHighScoresFile Boolean OpenHighScoresFile (FSSpec *scoreSpec, short *scoresRefNum) { OSErr theErr; theErr = FSpOpenDF(scoreSpec, fsCurPerm, scoresRefNum); if (theErr == fnfErr) { theErr = FSpCreate(scoreSpec, 'ozm5', 'gliS', smSystemScript); if (!CheckFileError(theErr, "\pNew High Scores File")) return (false); theErr = FSpOpenDF(scoreSpec, fsCurPerm, scoresRefNum); if (!CheckFileError(theErr, "\pHigh Score")) return (false); } else if (!CheckFileError(theErr, "\pHigh Score")) return (false); return (true); } //-------------------------------------------------------------- WriteScoresToDisk Boolean WriteScoresToDisk (void) { scoresType *theScores; FSSpec scoreSpec; long dirID, byteCount; OSErr theErr; short volRefNum, scoresRefNum; char wasState; if (!FindHighScoresFolder(&volRefNum, &dirID)) { SysBeep(1); return (false); } theErr = FSMakeFSSpec(volRefNum, dirID, thisHouseName, &scoreSpec); if (!OpenHighScoresFile(&scoreSpec, &scoresRefNum)) { SysBeep(1); return (false); } theErr = SetFPos(scoresRefNum, fsFromStart, 0L); if (!CheckFileError(theErr, "\pHigh Scores File")) { theErr = FSClose(scoresRefNum); return(false); } byteCount = sizeof(scoresType); wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); theScores = &((*thisHouse)->highScores); theErr = FSWrite(scoresRefNum, &byteCount, (Ptr)theScores); if (!CheckFileError(theErr, "\pHigh Scores File")) { HSetState((Handle)thisHouse, wasState); theErr = FSClose(scoresRefNum); return(false); } HSetState((Handle)thisHouse, wasState); theErr = SetEOF(scoresRefNum, byteCount); if (!CheckFileError(theErr, "\pHigh Scores File")) { theErr = FSClose(scoresRefNum); return(false); } theErr = FSClose(scoresRefNum); if (!CheckFileError(theErr, "\pHigh Scores File")) return(false); return (true); } //-------------------------------------------------------------- ReadScoresFromDisk Boolean ReadScoresFromDisk (void) { scoresType *theScores; FSSpec scoreSpec; long dirID, byteCount; OSErr theErr; short volRefNum, scoresRefNum; char wasState; if (!FindHighScoresFolder(&volRefNum, &dirID)) { SysBeep(1); return (false); } theErr = FSMakeFSSpec(volRefNum, dirID, thisHouseName, &scoreSpec); if (!OpenHighScoresFile(&scoreSpec, &scoresRefNum)) { SysBeep(1); return (false); } theErr = GetEOF(scoresRefNum, &byteCount); if (!CheckFileError(theErr, "\pHigh Scores File")) { theErr = FSClose(scoresRefNum); return (false); } theErr = SetFPos(scoresRefNum, fsFromStart, 0L); if (!CheckFileError(theErr, "\pHigh Scores File")) { theErr = FSClose(scoresRefNum); return (false); } wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); theScores = &((*thisHouse)->highScores); theErr = FSRead(scoresRefNum, &byteCount, theScores); if (!CheckFileError(theErr, "\pHigh Scores File")) { HSetState((Handle)thisHouse, wasState); theErr = FSClose(scoresRefNum); return (false); } HSetState((Handle)thisHouse, wasState); theErr = FSClose(scoresRefNum); if (!CheckFileError(theErr, "\pHigh Scores File")) return(false); return (true); } \ No newline at end of file diff --git a/Sources/House.c b/Sources/House.c deleted file mode 100755 index cfd8641..0000000 --- a/Sources/House.c +++ /dev/null @@ -1 +0,0 @@ -//============================================================================ //---------------------------------------------------------------------------- // House.c //---------------------------------------------------------------------------- //============================================================================ #include #include #include #include #include "DialogUtils.h" #include "Externs.h" #include "House.h" #include "RectUtils.h" #define kGoToDialogID 1043 void UpdateGoToDialog (DialogPtr); pascal Boolean GoToFilter (DialogPtr, EventRecord *, short *); houseHand thisHouse; linksPtr linksList; Str32 thisHouseName; short srcLocations[kMaxRoomObs]; short destLocations[kMaxRoomObs]; short wasFloor, wasSuite; retroLink retroLinkList[kMaxRoomObs]; Boolean houseUnlocked; extern gameType smallGame; extern short numberRooms, mapLeftRoom, mapTopRoom, numStarsRemaining; extern Boolean houseOpen, noRoomAtAll; extern Boolean twoPlayerGame, wardBitSet, phoneBitSet; //============================================================== Functions //-------------------------------------------------------------- CreateNewHouse // Called to create a new house file. #ifndef COMPILEDEMO Boolean CreateNewHouse (void) { AEKeyword theKeyword; DescType actualType; Size actualSize; NavReplyRecord theReply; NavDialogOptions dialogOptions; FSSpec tempSpec; FSSpec theSpec; OSErr theErr; theErr = NavGetDefaultDialogOptions(&dialogOptions); theErr = NavPutFile(nil, &theReply, &dialogOptions, nil, 'gliH', 'ozm5', nil); if (theErr == userCanceledErr) return false; if (!theReply.validRecord) return (false); theErr = AEGetNthPtr(&(theReply.selection), 1, typeFSS, &theKeyword, &actualType, &theSpec, sizeof(FSSpec), &actualSize); if (theReply.replacing) { theErr = FSMakeFSSpec(theSpec.vRefNum, theSpec.parID, theSpec.name, &tempSpec); if (!CheckFileError(theErr, theSpec.name)) return (false); theErr = FSpDelete(&tempSpec); if (!CheckFileError(theErr, theSpec.name)) return (false); } if (houseOpen) { if (!CloseHouse()) return (false); } theErr = FSpCreate(&theSpec, 'ozm5', 'gliH', theReply.keyScript); if (!CheckFileError(theErr, "\pNew House")) return (false); HCreateResFile(theSpec.vRefNum, theSpec.parID, theSpec.name); if (ResError() != noErr) YellowAlert(kYellowFailedResCreate, ResError()); PasStringCopy(theSpec.name, thisHouseName); AddExtraHouse(&theSpec); BuildHouseList(); InitCursor(); if (!OpenHouse()) return (false); return (true); } #endif //-------------------------------------------------------------- InitializeEmptyHouse // Initializes all the structures for an empty (new) house. #ifndef COMPILEDEMO Boolean InitializeEmptyHouse (void) { houseType *thisHousePtr; Str255 tempStr; if (thisHouse != nil) DisposeHandle((Handle)thisHouse); thisHouse = (houseHand)NewHandle(sizeof(houseType)); if (thisHouse == nil) { YellowAlert(kYellowUnaccounted, 1); return (false); } HLock((Handle)thisHouse); thisHousePtr = *thisHouse; thisHousePtr->version = kHouseVersion; thisHousePtr->firstRoom = -1; thisHousePtr->timeStamp = 0L; thisHousePtr->flags = 0L; thisHousePtr->initial.h = 32; thisHousePtr->initial.v = 32; ZeroHighScores(); GetLocalizedString(11, tempStr); PasStringCopy(tempStr, thisHousePtr->banner); GetLocalizedString(12, tempStr); PasStringCopy(tempStr, thisHousePtr->trailer); thisHousePtr->hasGame = false; thisHousePtr->nRooms = 0; wardBitSet = false; phoneBitSet = false; HUnlock((Handle)thisHouse); numberRooms = 0; mapLeftRoom = 60; mapTopRoom = 50; thisRoomNumber = kRoomIsEmpty; previousRoom = -1; houseUnlocked = true; OpenMapWindow(); UpdateMapWindow(); noRoomAtAll = true; fileDirty = true; UpdateMenus(false); ReflectCurrentRoom(true); return (true); } #endif //-------------------------------------------------------------- RealRoomNumberCount // Returns the real number of rooms in a house (some rooms may stillÉ // be place-holders - they were deleted earlier and are flagged asÉ // deleted but still occupy space in the file). short RealRoomNumberCount (void) { short realRoomCount, i; char wasState; wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); realRoomCount = (*thisHouse)->nRooms; if (realRoomCount != 0) { for (i = 0; i < (*thisHouse)->nRooms; i++) { if ((*thisHouse)->rooms[i].suite == kRoomIsEmpty) realRoomCount--; } } HSetState((Handle)thisHouse, wasState); return (realRoomCount); } //-------------------------------------------------------------- GetFirstRoomNumber // Returns the room number (indicee into house file) of the room whereÉ // the player is to begin. short GetFirstRoomNumber (void) { short firstRoom; char wasState; wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); if ((*thisHouse)->nRooms <= 0) { firstRoom = -1; noRoomAtAll = true; } else { firstRoom = (*thisHouse)->firstRoom; if ((firstRoom >= (*thisHouse)->nRooms) || (firstRoom < 0)) firstRoom = 0; } HSetState((Handle)thisHouse, wasState); return (firstRoom); } //-------------------------------------------------------------- WhereDoesGliderBegin // Returns a rectangle indicating where in the first room the player'sÉ // glider is to appear. void WhereDoesGliderBegin (Rect *theRect, short mode) { Point initialPt; char wasState; wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); if (mode == kResumeGameMode) initialPt = smallGame.where; else if (mode == kNewGameMode) initialPt = (*thisHouse)->initial; HSetState((Handle)thisHouse, wasState); QSetRect(theRect, 0, 0, kGliderWide, kGliderHigh); QOffsetRect(theRect, initialPt.h, initialPt.v); } //-------------------------------------------------------------- HouseHasOriginalPicts // Returns true is the current house has custom artwork imbedded. Boolean HouseHasOriginalPicts (void) { short nPicts; nPicts = Count1Resources('PICT'); return (nPicts > 0); } //-------------------------------------------------------------- CountHouseLinks // Counts up the number of linked objects in a house. short CountHouseLinks (void) { houseType *thisHousePtr; short numRooms, numLinks; short r, i, what; char wasState; numLinks = 0; wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); thisHousePtr = *thisHouse; numRooms = thisHousePtr->nRooms; for (r = 0; r < numRooms; r++) { for (i = 0; i < kMaxRoomObs; i++) { what = thisHousePtr->rooms[r].objects[i].what; switch (what) { case kLightSwitch: case kMachineSwitch: case kThermostat: case kPowerSwitch: case kKnifeSwitch: case kInvisSwitch: case kTrigger: case kLgTrigger: if (thisHousePtr->rooms[r].objects[i].data.e.where != -1) numLinks++; break; case kMailboxLf: case kMailboxRt: case kFloorTrans: case kCeilingTrans: case kInvisTrans: case kDeluxeTrans: if (thisHousePtr->rooms[r].objects[i].data.d.where != -1) numLinks++; break; } } } HSetState((Handle)thisHouse, wasState); return (numLinks); } //-------------------------------------------------------------- GenerateLinksList // Generates a list of all objects that have links and what roomsÉ // and objects they are linked to. It is called in order to preserveÉ // the links if the objects or rooms in a house are to be shuffledÉ // around. #ifndef COMPILEDEMO void GenerateLinksList (void) { houseType *thisHousePtr; objectType thisObject; short numLinks, numRooms, r, i, what; short floor, suite, roomLinked, objectLinked; char wasState; wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); thisHousePtr = *thisHouse; numRooms = thisHousePtr->nRooms; numLinks = 0; for (r = 0; r < numRooms; r++) { for (i = 0; i < kMaxRoomObs; i++) { what = thisHousePtr->rooms[r].objects[i].what; switch (what) { case kLightSwitch: case kMachineSwitch: case kThermostat: case kPowerSwitch: case kKnifeSwitch: case kInvisSwitch: case kTrigger: case kLgTrigger: thisObject = thisHousePtr->rooms[r].objects[i]; if (thisObject.data.e.where != -1) { ExtractFloorSuite(thisObject.data.e.where, &floor, &suite); roomLinked = GetRoomNumber(floor, suite); objectLinked = (short)thisObject.data.e.who; linksList[numLinks].srcRoom = r; linksList[numLinks].srcObj = i; linksList[numLinks].destRoom = roomLinked; linksList[numLinks].destObj = objectLinked; numLinks++; } break; case kMailboxLf: case kMailboxRt: case kFloorTrans: case kCeilingTrans: case kInvisTrans: case kDeluxeTrans: thisObject = thisHousePtr->rooms[r].objects[i]; if (thisObject.data.d.where != -1) { ExtractFloorSuite(thisObject.data.d.where, &floor, &suite); roomLinked = GetRoomNumber(floor, suite); objectLinked = (short)thisObject.data.d.who; linksList[numLinks].srcRoom = r; linksList[numLinks].srcObj = i; linksList[numLinks].destRoom = roomLinked; linksList[numLinks].destObj = objectLinked; numLinks++; } break; } } } HSetState((Handle)thisHouse, wasState); } #endif //-------------------------------------------------------------- SortRoomObjects // I'm a little fuzzy on what this does. #ifndef COMPILEDEMO void SortRoomsObjects (short which) { short probe, probe2, room, obj; Boolean busy, looking; busy = true; probe = 0; do { if ((*thisHouse)->rooms[which].objects[probe].what == kObjectIsEmpty) { looking = true; probe2 = probe + 1; // begin by looking at the next object do { if ((*thisHouse)->rooms[which].objects[probe2].what != kObjectIsEmpty) { (*thisHouse)->rooms[which].objects[probe] = (*thisHouse)->rooms[which].objects[probe2]; (*thisHouse)->rooms[which].objects[probe2].what = kObjectIsEmpty; if (srcLocations[probe2] != -1) linksList[srcLocations[probe2]].srcObj = probe; if (destLocations[probe2] != -1) { linksList[destLocations[probe2]].destObj = probe; room = linksList[destLocations[probe2]].srcRoom; obj = linksList[destLocations[probe2]].srcObj; (*thisHouse)->rooms[room].objects[obj].data.e.who = probe; } fileDirty = true; looking = false; } probe2++; if ((probe2 >= kMaxRoomObs) && (looking)) { looking = false; busy = false; } } while (looking); } probe++; if (probe >= (kMaxRoomObs - 1)) busy = false; } while (busy); } #endif //-------------------------------------------------------------- SortHouseObjects // I'm a little fuzzy on what this does exactly either. #ifndef COMPILEDEMO void SortHouseObjects (void) { houseType *thisHousePtr; short numLinks, numRooms, r, i, l; char wasState; SpinCursor(3); CopyThisRoomToRoom(); numLinks = CountHouseLinks(); if (numLinks == 0) return; linksList = nil; linksList = (linksPtr)NewPtr(sizeof(linksType) * numLinks); if (linksList == nil) RedAlert(kErrNoMemory); GenerateLinksList(); wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); thisHousePtr = *thisHouse; numRooms = thisHousePtr->nRooms; for (r = 0; r < numRooms; r++) { for (i = 0; i < kMaxRoomObs; i++) // initialize arrays { srcLocations[i] = -1; destLocations[i] = -1; } for (i = 0; i < kMaxRoomObs; i++) // walk object list { for (l = 0; l < numLinks; l++) // walk link list { if ((linksList[l].srcRoom == r) && (linksList[l].srcObj == i)) srcLocations[i] = l; if ((linksList[l].destRoom == r) && (linksList[l].destObj == i)) destLocations[i] = l; } } SortRoomsObjects(r); if ((r & 0x0007) == 0x0007) IncrementCursor(); } SpinCursor(3); HSetState((Handle)thisHouse, wasState); if (linksList != nil) DisposePtr((Ptr)linksList); ForceThisRoom(thisRoomNumber); } #endif //-------------------------------------------------------------- CountRoomsVisited // Goes through and counts the number of rooms a player has been to inÉ // the current game. short CountRoomsVisited (void) { houseType *thisHousePtr; short numRooms, r, count; char wasState; wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); thisHousePtr = *thisHouse; numRooms = thisHousePtr->nRooms; count = 0; for (r = 0; r < numRooms; r++) { if (thisHousePtr->rooms[r].visited) count++; } HSetState((Handle)thisHouse, wasState); return (count); } //-------------------------------------------------------------- GenerateRetroLinks // Walk entire house looking for objects which are linked to objectsÉ // in the current room. void GenerateRetroLinks (void) { houseType *thisHousePtr; objectType thisObject; short i, r, numRooms, floor, suite; short what, roomLinked, objectLinked; char wasState; for (i = 0; i < kMaxRoomObs; i++) // Initialize array. retroLinkList[i].room = -1; wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); thisHousePtr = *thisHouse; numRooms = thisHousePtr->nRooms; for (r = 0; r < numRooms; r++) { for (i = 0; i < kMaxRoomObs; i++) { what = thisHousePtr->rooms[r].objects[i].what; switch (what) { case kLightSwitch: case kMachineSwitch: case kThermostat: case kPowerSwitch: case kKnifeSwitch: case kInvisSwitch: case kTrigger: case kLgTrigger: thisObject = thisHousePtr->rooms[r].objects[i]; if (thisObject.data.e.where != -1) { ExtractFloorSuite(thisObject.data.e.where, &floor, &suite); roomLinked = GetRoomNumber(floor, suite); if (roomLinked == thisRoomNumber) { objectLinked = (short)thisObject.data.e.who; if (retroLinkList[objectLinked].room == -1) { retroLinkList[objectLinked].room = r; retroLinkList[objectLinked].object = i; } } } break; case kMailboxLf: case kMailboxRt: case kFloorTrans: case kCeilingTrans: case kInvisTrans: case kDeluxeTrans: thisObject = thisHousePtr->rooms[r].objects[i]; if (thisObject.data.d.where != -1) { ExtractFloorSuite(thisObject.data.d.where, &floor, &suite); roomLinked = GetRoomNumber(floor, suite); if (roomLinked == thisRoomNumber) { objectLinked = (short)thisObject.data.d.who; if (retroLinkList[objectLinked].room == -1) { retroLinkList[objectLinked].room = r; retroLinkList[objectLinked].object = i; } } } break; } } } HSetState((Handle)thisHouse, wasState); } //-------------------------------------------------------------- UpdateGoToDialog // Redraws the "Go To Room..." dialog. void UpdateGoToDialog (DialogPtr theDialog) { DrawDialog(theDialog); DrawDefaultButton(theDialog); FrameDialogItemC(theDialog, 10, kRedOrangeColor8); } //-------------------------------------------------------------- GoToFilter // Dialog filter for the "Go To Room..." dialog. pascal Boolean GoToFilter (DialogPtr dial, EventRecord *event, short *item) { switch (event->what) { case keyDown: switch ((event->message) & charCodeMask) { case kReturnKeyASCII: case kEnterKeyASCII: FlashDialogButton(dial, kOkayButton); *item = kOkayButton; return(true); break; default: return(false); } break; case updateEvt: SetPort((GrafPtr)dial); BeginUpdate(GetDialogWindow(dial)); UpdateGoToDialog(dial); EndUpdate(GetDialogWindow(dial)); event->what = nullEvent; return(false); break; default: return(false); break; } } //-------------------------------------------------------------- DoGoToDialog // "Go To Room..." dialog. void DoGoToDialog (void) { #define kGoToFirstButt 2 #define kGoToPrevButt 3 #define kGoToFSButt 4 #define kFloorEditText 5 #define kSuiteEditText 6 DialogPtr theDialog; long tempLong; short item, roomToGoTo; Boolean leaving, canceled; ModalFilterUPP goToFilterUPP; goToFilterUPP = NewModalFilterUPP(GoToFilter); BringUpDialog(&theDialog, kGoToDialogID); if (GetFirstRoomNumber() == thisRoomNumber) MyDisableControl(theDialog, kGoToFirstButt); if ((!RoomNumExists(previousRoom)) || (previousRoom == thisRoomNumber)) MyDisableControl(theDialog, kGoToPrevButt); SetDialogNumToStr(theDialog, kFloorEditText, (long)wasFloor); SetDialogNumToStr(theDialog, kSuiteEditText, (long)wasSuite); SelectDialogItemText(theDialog, kFloorEditText, 0, 1024); leaving = false; canceled = false; while (!leaving) { ModalDialog(goToFilterUPP, &item); if (item == kOkayButton) { roomToGoTo = -1; canceled = true; leaving = true; } else if (item == kGoToFirstButt) { roomToGoTo = GetFirstRoomNumber(); leaving = true; } else if (item == kGoToPrevButt) { roomToGoTo = previousRoom; leaving = true; } else if (item == kGoToFSButt) { GetDialogNumFromStr(theDialog, kFloorEditText, &tempLong); wasFloor = (short)tempLong; GetDialogNumFromStr(theDialog, kSuiteEditText, &tempLong); wasSuite = (short)tempLong; roomToGoTo = GetRoomNumber(wasFloor, wasSuite); leaving = true; } } DisposeDialog(theDialog); DisposeModalFilterUPP(goToFilterUPP); if (!canceled) { if (RoomNumExists(roomToGoTo)) { DeselectObject(); CopyRoomToThisRoom(roomToGoTo); ReflectCurrentRoom(false); } else SysBeep(1); } } //-------------------------------------------------------------- ConvertHouseVer1To2 // This function goes through an old version 1 house and converts itÉ // to version 2. void ConvertHouseVer1To2 (void) { Str255 roomStr, message; short wasRoom, floor, suite; short i, h, numRooms; char wasState; CopyThisRoomToRoom(); wasRoom = thisRoomNumber; GetLocalizedString(13, message); OpenMessageWindow(message); SpinCursor(3); wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); numRooms = (*thisHouse)->nRooms; for (i = 0; i < numRooms; i++) { if ((*thisHouse)->rooms[i].suite != kRoomIsEmpty) { NumToString((long)i, roomStr); GetLocalizedString(14, message); PasStringConcat(message, roomStr); SetMessageWindowMessage(message); SpinCursor(1); ForceThisRoom(i); for (h = 0; h < kMaxRoomObs; h++) { switch (thisRoom->objects[h].what) { case kMailboxLf: case kMailboxRt: case kFloorTrans: case kCeilingTrans: case kInvisTrans: case kDeluxeTrans: if (thisRoom->objects[h].data.d.where != -1) { ExtractFloorSuite(thisRoom->objects[h].data.d.where, &floor, &suite); floor += kNumUndergroundFloors; thisRoom->objects[h].data.d.where = MergeFloorSuite(floor, suite); } break; case kLightSwitch: case kMachineSwitch: case kThermostat: case kPowerSwitch: case kKnifeSwitch: case kInvisSwitch: case kTrigger: case kLgTrigger: if (thisRoom->objects[h].data.e.where != -1) { ExtractFloorSuite(thisRoom->objects[h].data.e.where, &floor, &suite); floor += kNumUndergroundFloors; thisRoom->objects[h].data.e.where = MergeFloorSuite(floor, suite); } break; } } CopyThisRoomToRoom(); } } (*thisHouse)->version = kHouseVersion; HSetState((Handle)thisHouse, wasState); InitCursor(); CloseMessageWindow(); ForceThisRoom(wasRoom); } //-------------------------------------------------------------- ShiftWholeHouse void ShiftWholeHouse (short howFar) { #pragma unused (howFar) short wasRoom; short i, h, numRooms; char wasState; OpenMessageWindow("\pShifting Whole HouseÉ"); SpinCursor(3); CopyThisRoomToRoom(); wasRoom = thisRoomNumber; wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); numRooms = (*thisHouse)->nRooms; for (i = 0; i < numRooms; i++) { if ((*thisHouse)->rooms[i].suite != kRoomIsEmpty) { SpinCursor(1); ForceThisRoom(i); for (h = 0; h < kMaxRoomObs; h++) { } CopyThisRoomToRoom(); } } HSetState((Handle)thisHouse, wasState); ForceThisRoom(wasRoom); InitCursor(); CloseMessageWindow(); } \ No newline at end of file diff --git a/Sources/HouseIO.c b/Sources/HouseIO.c deleted file mode 100755 index 46517c2..0000000 --- a/Sources/HouseIO.c +++ /dev/null @@ -1 +0,0 @@ - //============================================================================ //---------------------------------------------------------------------------- // HouseIO.c //---------------------------------------------------------------------------- //============================================================================ #include #include #include #include #include #include "Externs.h" #include "Environ.h" #include "House.h" #include "ObjectEdit.h" #define kSaveChangesAlert 1002 #define kSaveChanges 1 #define kDiscardChanges 2 void LoopMovie (void); void OpenHouseMovie (void); void CloseHouseMovie (void); Boolean IsFileReadOnly (FSSpec *); Movie theMovie; Rect movieRect; short houseRefNum, houseResFork, wasHouseVersion; Boolean houseOpen, fileDirty, gameDirty; Boolean changeLockStateOfHouse, saveHouseLocked, houseIsReadOnly; Boolean hasMovie, tvInRoom; extern FSSpecPtr theHousesSpecs; extern short thisHouseIndex, tvWithMovieNumber; extern short numberRooms, housesFound; extern Boolean noRoomAtAll, quitting, wardBitSet; extern Boolean phoneBitSet, bannerStarCountOn; //============================================================== Functions //-------------------------------------------------------------- LoopMovie void LoopMovie (void) { Handle theLoop; UserData theUserData; short theCount; theLoop = NewHandle(sizeof(long)); (** (long **) theLoop) = 0; theUserData = GetMovieUserData(theMovie); theCount = CountUserDataType(theUserData, 'LOOP'); while (theCount--) { RemoveUserData(theUserData, 'LOOP', 1); } AddUserData(theUserData, theLoop, 'LOOP'); } //-------------------------------------------------------------- OpenHouseMovie void OpenHouseMovie (void) { #ifdef COMPILEQT TimeBase theTime; FSSpec theSpec; FInfo finderInfo; Handle spaceSaver; OSErr theErr; short movieRefNum; Boolean dataRefWasChanged; if (thisMac.hasQT) { theSpec = theHousesSpecs[thisHouseIndex]; PasStringConcat(theSpec.name, "\p.mov"); theErr = FSpGetFInfo(&theSpec, &finderInfo); if (theErr != noErr) return; theErr = OpenMovieFile(&theSpec, &movieRefNum, fsCurPerm); if (theErr != noErr) { YellowAlert(kYellowQTMovieNotLoaded, theErr); return; } theErr = NewMovieFromFile(&theMovie, movieRefNum, nil, theSpec.name, newMovieActive, &dataRefWasChanged); if (theErr != noErr) { YellowAlert(kYellowQTMovieNotLoaded, theErr); theErr = CloseMovieFile(movieRefNum); return; } theErr = CloseMovieFile(movieRefNum); spaceSaver = NewHandle(307200L); if (spaceSaver == nil) { YellowAlert(kYellowQTMovieNotLoaded, 749); CloseHouseMovie(); return; } GoToBeginningOfMovie(theMovie); theErr = LoadMovieIntoRam(theMovie, GetMovieTime(theMovie, 0L), GetMovieDuration(theMovie), 0); if (theErr != noErr) { YellowAlert(kYellowQTMovieNotLoaded, theErr); DisposeHandle(spaceSaver); CloseHouseMovie(); return; } DisposeHandle(spaceSaver); theErr = PrerollMovie(theMovie, 0, 0x000F0000); if (theErr != noErr) { YellowAlert(kYellowQTMovieNotLoaded, theErr); CloseHouseMovie(); return; } theTime = GetMovieTimeBase(theMovie); SetTimeBaseFlags(theTime, loopTimeBase); SetMovieMasterTimeBase(theMovie, theTime, nil); LoopMovie(); GetMovieBox(theMovie, &movieRect); hasMovie = true; } #endif } //-------------------------------------------------------------- CloseHouseMovie void CloseHouseMovie (void) { #ifdef COMPILEQT OSErr theErr; if ((thisMac.hasQT) && (hasMovie)) { theErr = LoadMovieIntoRam(theMovie, GetMovieTime(theMovie, 0L), GetMovieDuration(theMovie), flushFromRam); DisposeMovie(theMovie); } #endif hasMovie = false; } //-------------------------------------------------------------- OpenHouse // Opens a house (whatever current selection is). Returns true if all went well. Boolean OpenHouse (void) { OSErr theErr; Boolean targetIsFolder, wasAliased; if (houseOpen) { if (!CloseHouse()) return(false); } if ((housesFound < 1) || (thisHouseIndex == -1)) return(false); theErr = ResolveAliasFile(&theHousesSpecs[thisHouseIndex], true, &targetIsFolder, &wasAliased); if (!CheckFileError(theErr, thisHouseName)) return (false); #ifdef COMPILEDEMO if (!EqualString(theHousesSpecs[thisHouseIndex].name, "\pDemo House", false, true)) return (false); #endif houseIsReadOnly = IsFileReadOnly(&theHousesSpecs[thisHouseIndex]); theErr = FSpOpenDF(&theHousesSpecs[thisHouseIndex], fsCurPerm, &houseRefNum); if (!CheckFileError(theErr, thisHouseName)) return (false); houseOpen = true; OpenHouseResFork(); hasMovie = false; tvInRoom = false; tvWithMovieNumber = -1; OpenHouseMovie(); return (true); } //-------------------------------------------------------------- OpenSpecificHouse // Opens the specific house passed in. #ifndef COMPILEDEMO Boolean OpenSpecificHouse (FSSpec *specs) { short i; Boolean itOpened; if ((housesFound < 1) || (thisHouseIndex == -1)) return (false); itOpened = true; for (i = 0; i < housesFound; i++) { if ((theHousesSpecs[i].vRefNum == specs->vRefNum) && (theHousesSpecs[i].parID == specs->parID) && (EqualString(theHousesSpecs[i].name, specs->name, false, true))) { thisHouseIndex = i; PasStringCopy(theHousesSpecs[thisHouseIndex].name, thisHouseName); if (OpenHouse()) itOpened = ReadHouse(); else itOpened = false; break; } } return (itOpened); } #endif //-------------------------------------------------------------- SaveHouseAs #ifndef COMPILEDEMO Boolean SaveHouseAs (void) { // TEMP - fix this later -- use NavServices (see House.c) /* StandardFileReply theReply; FSSpec oldHouse; OSErr theErr; Boolean noProblems; Str255 tempStr; noProblems = true; GetLocalizedString(15, tempStr); StandardPutFile(tempStr, thisHouseName, &theReply); if (theReply.sfGood) { oldHouse = theHousesSpecs[thisHouseIndex]; CloseHouseResFork(); // close this house file theErr = FSClose(houseRefNum); if (theErr != noErr) { CheckFileError(theErr, "\pPreferences"); return(false); } // create new house file theErr = FSpCreate(&theReply.sfFile, 'ozm5', 'gliH', theReply.sfScript); if (!CheckFileError(theErr, theReply.sfFile.name)) return (false); HCreateResFile(theReply.sfFile.vRefNum, theReply.sfFile.parID, theReply.sfFile.name); if (ResError() != noErr) YellowAlert(kYellowFailedResCreate, ResError()); PasStringCopy(theReply.sfFile.name, thisHouseName); // open new house data fork theErr = FSpOpenDF(&theReply.sfFile, fsRdWrPerm, &houseRefNum); if (!CheckFileError(theErr, thisHouseName)) return (false); houseOpen = true; noProblems = WriteHouse(false); // write out house data if (!noProblems) return(false); BuildHouseList(); if (OpenSpecificHouse(&theReply.sfFile)) // open new house again { } else { if (OpenSpecificHouse(&oldHouse)) { YellowAlert(kYellowOpenedOldHouse, 0); } else { YellowAlert(kYellowLostAllHouses, 0); noProblems = false; } } } return (noProblems); */ return false; } #endif //-------------------------------------------------------------- ReadHouse // With a house open, this function reads in the actual bits of dataÉ // into memory. Boolean ReadHouse (void) { long byteCount; OSErr theErr; short whichRoom; if (!houseOpen) { YellowAlert(kYellowUnaccounted, 2); return (false); } if (gameDirty || fileDirty) { if (houseIsReadOnly) { if (!WriteScoresToDisk()) { YellowAlert(kYellowFailedWrite, 0); return(false); } } else if (!WriteHouse(false)) return(false); } theErr = GetEOF(houseRefNum, &byteCount); if (theErr != noErr) { CheckFileError(theErr, thisHouseName); return(false); } #ifdef COMPILEDEMO if (byteCount != 16526L) return (false); #endif if (thisHouse != nil) DisposeHandle((Handle)thisHouse); thisHouse = (houseHand)NewHandle(byteCount); if (thisHouse == nil) { YellowAlert(kYellowNoMemory, 10); return(false); } MoveHHi((Handle)thisHouse); theErr = SetFPos(houseRefNum, fsFromStart, 0L); if (theErr != noErr) { CheckFileError(theErr, thisHouseName); return(false); } HLock((Handle)thisHouse); theErr = FSRead(houseRefNum, &byteCount, *thisHouse); if (theErr != noErr) { CheckFileError(theErr, thisHouseName); HUnlock((Handle)thisHouse); return(false); } numberRooms = (*thisHouse)->nRooms; #ifdef COMPILEDEMO if (numberRooms != 45) return (false); #endif if ((numberRooms < 1) || (byteCount == 0L)) { numberRooms = 0; noRoomAtAll = true; YellowAlert(kYellowNoRooms, 0); HUnlock((Handle)thisHouse); return(false); } wasHouseVersion = (*thisHouse)->version; if (wasHouseVersion >= kNewHouseVersion) { YellowAlert(kYellowNewerVersion, 0); HUnlock((Handle)thisHouse); return(false); } houseUnlocked = (((*thisHouse)->timeStamp & 0x00000001) == 0); #ifdef COMPILEDEMO if (houseUnlocked) return (false); #endif changeLockStateOfHouse = false; saveHouseLocked = false; whichRoom = (*thisHouse)->firstRoom; #ifdef COMPILEDEMO if (whichRoom != 0) return (false); #endif wardBitSet = (((*thisHouse)->flags & 0x00000001) == 0x00000001); phoneBitSet = (((*thisHouse)->flags & 0x00000002) == 0x00000002); bannerStarCountOn = (((*thisHouse)->flags & 0x00000004) == 0x00000000); HUnlock((Handle)thisHouse); noRoomAtAll = (RealRoomNumberCount() == 0); thisRoomNumber = -1; previousRoom = -1; if (!noRoomAtAll) CopyRoomToThisRoom(whichRoom); if (houseIsReadOnly) { houseUnlocked = false; if (ReadScoresFromDisk()) { } } objActive = kNoObjectSelected; ReflectCurrentRoom(true); gameDirty = false; fileDirty = false; UpdateMenus(false); return (true); } //-------------------------------------------------------------- WriteHouse // This function writes out the house data to disk. Boolean WriteHouse (Boolean checkIt) { UInt32 timeStamp; long byteCount; OSErr theErr; if (!houseOpen) { YellowAlert(kYellowUnaccounted, 4); return (false); } theErr = SetFPos(houseRefNum, fsFromStart, 0L); if (theErr != noErr) { CheckFileError(theErr, thisHouseName); return(false); } CopyThisRoomToRoom(); if (checkIt) CheckHouseForProblems(); HLock((Handle)thisHouse); byteCount = GetHandleSize((Handle)thisHouse); if (fileDirty) { GetDateTime(&timeStamp); timeStamp &= 0x7FFFFFFF; if (changeLockStateOfHouse) houseUnlocked = !saveHouseLocked; if (houseUnlocked) // house unlocked timeStamp &= 0x7FFFFFFE; else timeStamp |= 0x00000001; (*thisHouse)->timeStamp = (long)timeStamp; (*thisHouse)->version = wasHouseVersion; } theErr = FSWrite(houseRefNum, &byteCount, *thisHouse); if (theErr != noErr) { CheckFileError(theErr, thisHouseName); HUnlock((Handle)thisHouse); return(false); } theErr = SetEOF(houseRefNum, byteCount); if (theErr != noErr) { CheckFileError(theErr, thisHouseName); HUnlock((Handle)thisHouse); return(false); } HUnlock((Handle)thisHouse); if (changeLockStateOfHouse) { changeLockStateOfHouse = false; ReflectCurrentRoom(true); } gameDirty = false; fileDirty = false; UpdateMenus(false); return (true); } //-------------------------------------------------------------- CloseHouse // This function closes the current house that is open. Boolean CloseHouse (void) { OSErr theErr; if (!houseOpen) return (true); if (gameDirty) { if (houseIsReadOnly) { if (!WriteScoresToDisk()) YellowAlert(kYellowFailedWrite, 0); } else if (!WriteHouse(theMode == kEditMode)) YellowAlert(kYellowFailedWrite, 0); } else if (fileDirty) { #ifndef COMPILEDEMO if (!QuerySaveChanges()) // false signifies user canceled return(false); #endif } CloseHouseResFork(); CloseHouseMovie(); theErr = FSClose(houseRefNum); if (theErr != noErr) { CheckFileError(theErr, thisHouseName); return(false); } houseOpen = false; return (true); } //-------------------------------------------------------------- OpenHouseResFork // Opens the resource fork of the current house that is open. void OpenHouseResFork (void) { if (houseResFork == -1) { houseResFork = FSpOpenResFile(&theHousesSpecs[thisHouseIndex], fsCurPerm); if (houseResFork == -1) YellowAlert(kYellowFailedResOpen, ResError()); else UseResFile(houseResFork); } } //-------------------------------------------------------------- CloseHouseResFork // Closes the resource fork of the current house that is open. void CloseHouseResFork (void) { if (houseResFork != -1) { CloseResFile(houseResFork); houseResFork = -1; } } //-------------------------------------------------------------- QuerySaveChanges // If changes were made, this function will present the user with aÉ // dialog asking them if they would like to save the changes. #ifndef COMPILEDEMO Boolean QuerySaveChanges (void) { short hitWhat; Boolean whoCares; if (!fileDirty) return(true); InitCursor(); // CenterAlert(kSaveChangesAlert); ParamText(thisHouseName, "\p", "\p", "\p"); hitWhat = Alert(kSaveChangesAlert, nil); if (hitWhat == kSaveChanges) { if (wasHouseVersion < kHouseVersion) ConvertHouseVer1To2(); wasHouseVersion = kHouseVersion; if (WriteHouse(true)) return (true); else return (false); } else if (hitWhat == kDiscardChanges) { fileDirty = false; if (!quitting) { whoCares = CloseHouse(); if (OpenHouse()) whoCares = ReadHouse(); } UpdateMenus(false); return (true); } else return (false); } #endif //-------------------------------------------------------------- YellowAlert // This is a dialog used to present an error code and explanationÉ // to the user when a non-lethal error has occurred. Ideally, ofÉ // course, this never is called. void YellowAlert (short whichAlert, short identifier) { #define kYellowAlert 1006 Str255 errStr, errNumStr; short whoCares; InitCursor(); GetIndString(errStr, kYellowAlert, whichAlert); NumToString((long)identifier, errNumStr); // CenterAlert(kYellowAlert); ParamText(errStr, errNumStr, "\p", "\p"); whoCares = Alert(kYellowAlert, nil); } //-------------------------------------------------------------- IsFileReadOnly Boolean IsFileReadOnly (FSSpec *theSpec) { #pragma unused (theSpec) return false; /* Str255 tempStr; ParamBlockRec theBlock; HParamBlockRec hBlock; VolumeParam *volPtr; OSErr theErr; volPtr = (VolumeParam *)&theBlock; volPtr->ioCompletion = nil; volPtr->ioVolIndex = 0; volPtr->ioNamePtr = tempStr; volPtr->ioVRefNum = theSpec->vRefNum; theErr = PBGetVInfo(&theBlock, false); if (CheckFileError(theErr, "\pRead/Write")) { if (((volPtr->ioVAtrb & 0x0080) == 0x0080) || ((volPtr->ioVAtrb & 0x8000) == 0x8000)) return (true); // soft/hard locked bits else { hBlock.fileParam.ioCompletion = nil; hBlock.fileParam.ioVRefNum = theSpec->vRefNum; hBlock.fileParam.ioFVersNum = 0; hBlock.fileParam.ioFDirIndex = 0; hBlock.fileParam.ioNamePtr = theSpec->name; hBlock.fileParam.ioDirID = theSpec->parID; theErr = PBHGetFInfo(&hBlock, false); if (CheckFileError(theErr, "\pRead/Write")) { if ((hBlock.fileParam.ioFlAttrib & 0x0001) == 0x0001) return (true); else return (false); } else return (false); } } else return (false); */ } \ No newline at end of file diff --git a/Sources/HouseInfo.c b/Sources/HouseInfo.c deleted file mode 100755 index da7bb14..0000000 --- a/Sources/HouseInfo.c +++ /dev/null @@ -1 +0,0 @@ - //============================================================================ //---------------------------------------------------------------------------- // HouseInfo.c //---------------------------------------------------------------------------- //============================================================================ #include #include "Externs.h" #include "DialogUtils.h" #define kHouseInfoDialogID 1001 #define kBannerTextItem 4 #define kLockHouseButton 6 #define kClearScoresButton 9 #define kTrailerTextItem 11 #define kNoPhoneCheck 14 #define kBannerNCharsItem 15 #define kTrailerNCharsItem 16 #define kHouseSizeItem 18 #define kLockHouseAlert 1029 #define kZeroScoresAlert 1032 long CountTotalHousePoints (void); void UpdateHouseInfoDialog (DialogPtr); pascal Boolean HouseFilter (DialogPtr, EventRecord *, short *); Boolean WarnLockingHouse (void); void HowToZeroScores (void); Str255 banner, trailer; Rect houseEditText1, houseEditText2; short houseCursorIs; Boolean keyHit, tempPhoneBit; extern Cursor beamCursor; extern Boolean noRoomAtAll, changeLockStateOfHouse, saveHouseLocked; extern Boolean phoneBitSet; #ifndef COMPILEDEMO //============================================================== Functions //-------------------------------------------------------------- CountTotalHousePoints // The following functions all handle the "House Info" dialog in the editor. long CountTotalHousePoints (void) { long pointTotal; short numRooms, h, i; char wasState; pointTotal = (long)RealRoomNumberCount() * (long)kRoomVisitScore; wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); numRooms = (*thisHouse)->nRooms; for (i = 0; i < numRooms; i++) { if ((*thisHouse)->rooms[i].suite != kRoomIsEmpty) { for (h = 0; h < kMaxRoomObs; h++) { switch ((*thisHouse)->rooms[i].objects[h].what) { case kRedClock: pointTotal += kRedClockPoints; break; case kBlueClock: pointTotal += kBlueClockPoints; break; case kYellowClock: pointTotal += kYellowClockPoints; break; case kCuckoo: pointTotal += kCuckooClockPoints; break; case kStar: pointTotal += kStarPoints; break; case kInvisBonus: pointTotal += (*thisHouse)->rooms[i].objects[h].data.c.points; break; default: break; } } } } HSetState((Handle)thisHouse, wasState); return (pointTotal); } //-------------------------------------------------------------- UpdateHouseInfoDialog void UpdateHouseInfoDialog (DialogPtr theDialog) { short nChars; DrawDialog(theDialog); nChars = GetDialogStringLen(theDialog, kBannerTextItem); SetDialogNumToStr(theDialog, kBannerNCharsItem, (long)nChars); nChars = GetDialogStringLen(theDialog, kTrailerTextItem); SetDialogNumToStr(theDialog, kTrailerNCharsItem, (long)nChars); SetDialogNumToStr(theDialog, kHouseSizeItem, CountTotalHousePoints()); FrameDialogItemC(theDialog, 10, kRedOrangeColor8); SetDialogItemValue(theDialog, kNoPhoneCheck, (short)tempPhoneBit); } //-------------------------------------------------------------- HouseFilter pascal Boolean HouseFilter (DialogPtr dial, EventRecord *event, short *item) { Point mouseIs; short nChars; if (keyHit) { nChars = GetDialogStringLen(dial, kBannerTextItem); SetDialogNumToStr(dial, kBannerNCharsItem, (long)nChars); nChars = GetDialogStringLen(dial, kTrailerTextItem); SetDialogNumToStr(dial, kTrailerNCharsItem, (long)nChars); keyHit = false; } switch (event->what) { case keyDown: switch ((event->message) & charCodeMask) { case kEnterKeyASCII: FlashDialogButton(dial, kOkayButton); *item = kOkayButton; return(true); break; case kEscapeKeyASCII: FlashDialogButton(dial, kCancelButton); *item = kCancelButton; return(true); break; default: keyHit = true; return(false); } break; case mouseDown: return(false); break; case mouseUp: return(false); break; case updateEvt: SetPort((GrafPtr)dial); BeginUpdate(GetDialogWindow(dial)); UpdateHouseInfoDialog(dial); EndUpdate(GetDialogWindow(dial)); event->what = nullEvent; return(false); break; default: mouseIs = event->where; GlobalToLocal(&mouseIs); if ((PtInRect(mouseIs, &houseEditText1)) || (PtInRect(mouseIs, &houseEditText2))) { if (houseCursorIs != kBeamCursor) { SetCursor(&beamCursor); houseCursorIs = kBeamCursor; } } else { if (houseCursorIs != kArrowCursor) { InitCursor(); houseCursorIs = kArrowCursor; } } return(false); break; } } //-------------------------------------------------------------- DoHouseInfo void DoHouseInfo (void) { DialogPtr houseInfoDialog; Str255 versStr, loVers, nRoomsStr; long h, v; short item, numRooms, version; char wasState; Boolean leaving; ModalFilterUPP houseFilterUPP; houseFilterUPP = NewModalFilterUPP(HouseFilter); tempPhoneBit = phoneBitSet; wasState = HGetState((Handle)thisHouse); numRooms = RealRoomNumberCount(); HLock((Handle)thisHouse); PasStringCopy((*thisHouse)->banner, banner); PasStringCopy((*thisHouse)->trailer, trailer); version = (*thisHouse)->version; if (!noRoomAtAll) { h = (long)(*thisHouse)->rooms[(*thisHouse)->firstRoom].suite; v = (long)(*thisHouse)->rooms[(*thisHouse)->firstRoom].floor; } HSetState((Handle)thisHouse, wasState); NumToString((long)version >> 8, versStr); // Convert version to two stringsÉ NumToString((long)version % 0x0100, loVers); // the 1's and 1/10th's part. NumToString((long)numRooms, nRoomsStr); // Number of rooms -> string. ParamText(versStr, loVers, nRoomsStr, "\p"); // CenterDialog(kHouseInfoDialogID); houseInfoDialog = GetNewDialog(kHouseInfoDialogID, nil, kPutInFront); if (houseInfoDialog == nil) RedAlert(kErrDialogDidntLoad); SetPort((GrafPtr)houseInfoDialog); ShowWindow(GetDialogWindow(houseInfoDialog)); SetDialogString(houseInfoDialog, kBannerTextItem, banner); SetDialogString(houseInfoDialog, kTrailerTextItem, trailer); SelectDialogItemText(houseInfoDialog, kBannerTextItem, 0, 1024); GetDialogItemRect(houseInfoDialog, kBannerTextItem, &houseEditText1); GetDialogItemRect(houseInfoDialog, kTrailerTextItem, &houseEditText2); houseCursorIs = kArrowCursor; leaving = false; while (!leaving) { ModalDialog(houseFilterUPP, &item); if (item == kOkayButton) { GetDialogString(houseInfoDialog, kBannerTextItem, banner); GetDialogString(houseInfoDialog, kTrailerTextItem, trailer); wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); PasStringCopyNum(banner, (*thisHouse)->banner, 255); PasStringCopyNum(trailer, (*thisHouse)->trailer, 255); if (tempPhoneBit != phoneBitSet) { phoneBitSet = tempPhoneBit; if (phoneBitSet) (*thisHouse)->flags = (*thisHouse)->flags | 0x00000002; else (*thisHouse)->flags = (*thisHouse)->flags & 0xFFFFDFFD; } HSetState((Handle)thisHouse, wasState); fileDirty = true; UpdateMenus(false); leaving = true; } else if (item == kCancelButton) leaving = true; else if (item == kLockHouseButton) { if (WarnLockingHouse()) { changeLockStateOfHouse = true; saveHouseLocked = true; fileDirty = true; UpdateMenus(false); } } else if (item == kClearScoresButton) HowToZeroScores(); else if (item == kNoPhoneCheck) { tempPhoneBit = !tempPhoneBit; SetDialogItemValue(houseInfoDialog, kNoPhoneCheck, (short)tempPhoneBit); } } InitCursor(); DisposeDialog(houseInfoDialog); DisposeModalFilterUPP(houseFilterUPP); } //-------------------------------------------------------------- WarnLockingHouse Boolean WarnLockingHouse (void) { short hitWhat; // CenterAlert(kLockHouseAlert); hitWhat = Alert(kLockHouseAlert, nil); return (hitWhat == 1); } //-------------------------------------------------------------- HowToZeroScores void HowToZeroScores (void) { short hitWhat; // CenterAlert(kZeroScoresAlert); hitWhat = Alert(kZeroScoresAlert, nil); switch (hitWhat) { case 2: // zero all ZeroHighScores(); fileDirty = true; UpdateMenus(false); break; case 3: // zero all but highest ZeroAllButHighestScore(); fileDirty = true; UpdateMenus(false); break; } } #endif \ No newline at end of file diff --git a/Sources/HouseLegal.c b/Sources/HouseLegal.c deleted file mode 100755 index 2e50a8d..0000000 --- a/Sources/HouseLegal.c +++ /dev/null @@ -1 +0,0 @@ - //============================================================================ //---------------------------------------------------------------------------- // HouseLegal.c //---------------------------------------------------------------------------- //============================================================================ #include #include #include "Externs.h" #include "ObjectEdit.h" #include "RectUtils.h" void WrapBannerAndTrailer (void); void ValidateNumberOfRooms (void); void CheckDuplicateFloorSuite (void); void CompressHouse (void); void LopOffExtraRooms (void); void ValidateRoomNumbers (void); void CountUntitledRooms (void); void CheckRoomNameLength (void); void MakeSureNumObjectsJives (void); void KeepAllObjectsLegal (void); void CheckForStaircasePairs (void); short houseErrors, wasRoom; Boolean isHouseChecks; extern short numberRooms; //============================================================== Functions //-------------------------------------------------------------- KeepObjectLegal // Does a test of the current object active for any illegal boundsÉ // or values. It corrects the erros and returns true if any changesÉ // were made. Boolean KeepObjectLegal (void) { objectType *theObject; Rect bounds, roomRect; short direction, dist; char wasState; Boolean unchanged; unchanged = true; #ifndef COMPILEDEMO theObject = &thisRoom->objects[objActive]; if (objActive == kInitialGliderSelected) { wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); if ((*thisHouse)->initial.h < 0) (*thisHouse)->initial.h = 0; if ((*thisHouse)->initial.v < 0) (*thisHouse)->initial.v = 0; if ((*thisHouse)->initial.h > (kRoomWide - kGliderWide)) (*thisHouse)->initial.h = kRoomWide - kGliderWide; if ((*thisHouse)->initial.v > (kTileHigh - kGliderHigh)) (*thisHouse)->initial.v = kTileHigh - kGliderHigh; HSetState((Handle)thisHouse, wasState); return (true); } QSetRect(&roomRect, 0, 0, kRoomWide, kTileHigh); switch (theObject->what) { case kFloorVent: case kCeilingVent: case kFloorBlower: case kCeilingBlower: case kSewerGrate: case kLeftFan: case kRightFan: case kTaper: case kCandle: case kStubby: case kTiki: case kBBQ: case kInvisBlower: case kGrecoVent: case kSewerBlower: case kLiftArea: GetObjectRect(&thisRoom->objects[objActive], &bounds); if (ForceRectInRect(&bounds, &roomRect)) { theObject->data.a.topLeft.h = bounds.left; theObject->data.a.topLeft.v = bounds.top; unchanged = false; if (theObject->what == kLiftArea) { theObject->data.a.distance = RectWide(&bounds); theObject->data.a.tall = RectTall(&bounds) / 2; } } if ((theObject->what == kStubby) && (theObject->data.a.topLeft.h % 2 == 0)) { theObject->data.a.topLeft.h--; unchanged = false; } if (((theObject->what == kTaper) || (theObject->what == kCandle) || (theObject->what == kTiki) || (theObject->what == kBBQ)) && (theObject->data.a.topLeft.h % 2 != 0)) { theObject->data.a.topLeft.h--; unchanged = false; } if ((theObject->what == kFloorVent) && (theObject->data.a.topLeft.v != kFloorVentTop)) { theObject->data.a.topLeft.v = kFloorVentTop; theObject->data.a.distance += 2; } if ((theObject->what == kFloorBlower) && (theObject->data.a.topLeft.v != kFloorBlowerTop)) { theObject->data.a.topLeft.v = kFloorBlowerTop; theObject->data.a.distance += 2; } if ((theObject->what == kSewerGrate) && (theObject->data.a.topLeft.v != kSewerGrateTop)) { theObject->data.a.topLeft.v = kSewerGrateTop; theObject->data.a.distance += 2; } if ((theObject->what == kFloorTrans) && (theObject->data.a.topLeft.v != kFloorTransTop)) { theObject->data.a.topLeft.v = kFloorTransTop; theObject->data.a.distance += 2; } if (ObjectHasHandle(&direction, &dist)) { switch (direction) { case kAbove: dist = bounds.top - dist; if ((theObject->what == kFloorVent) || (theObject->what == kFloorBlower) || (theObject->what == kTaper) || (theObject->what == kCandle) || (theObject->what == kStubby)) { if (dist < 36) { theObject->data.a.distance += dist - 36; unchanged = false; } } else { if (dist < 0) { theObject->data.a.distance += dist; unchanged = false; } } break; case kToRight: dist = bounds.right + dist; if (dist > kRoomWide) { theObject->data.a.distance += (kRoomWide - dist); unchanged = false; } break; case kBelow: dist = bounds.bottom + dist; if (dist > kTileHigh) { theObject->data.a.distance += (kTileHigh - dist); unchanged = false; } break; case kToLeft: dist = bounds.left - dist; if (dist < 0) { theObject->data.a.distance += dist; unchanged = false; } break; } } break; case kTable: case kShelf: case kCabinet: case kFilingCabinet: case kWasteBasket: case kMilkCrate: case kCounter: case kDresser: case kDeckTable: case kStool: case kTrunk: case kInvisObstacle: case kManhole: case kBooks: case kInvisBounce: GetObjectRect(&thisRoom->objects[objActive], &bounds); if (ForceRectInRect(&bounds, &roomRect)) { theObject->data.b.bounds = bounds; unchanged = false; } if ((theObject->what == kManhole) && (((bounds.left - 3) % 64) != 0)) { theObject->data.b.bounds.left = (((bounds.left + 29) / 64) * 64) + 3; theObject->data.b.bounds.right = theObject->data.b.bounds.left + RectWide(&srcRects[kManhole]); unchanged = false; } break; case kRedClock: case kBlueClock: case kYellowClock: case kCuckoo: case kPaper: case kBattery: case kBands: case kGreaseRt: case kGreaseLf: case kFoil: case kInvisBonus: case kStar: case kSparkle: case kHelium: case kSlider: GetObjectRect(&thisRoom->objects[objActive], &bounds); if (ForceRectInRect(&bounds, &roomRect)) { theObject->data.c.topLeft.h = bounds.left; theObject->data.c.topLeft.v = bounds.top; unchanged = false; } if ((theObject->what == kGreaseRt) && (bounds.right + theObject->data.c.length > kRoomWide)) { theObject->data.c.length = kRoomWide - bounds.right; unchanged = false; } else if ((theObject->what == kGreaseLf) && (bounds.left - theObject->data.c.length < 0)) { theObject->data.c.length = bounds.left; unchanged = false; } else if ((theObject->what == kSlider) && (bounds.left + theObject->data.c.length > kRoomWide)) { theObject->data.c.length = kRoomWide - bounds.left; unchanged = false; } if (theObject->data.c.topLeft.h % 2 != 0) { theObject->data.c.topLeft.h--; unchanged = false; } if ((theObject->what != kStar) && (theObject->data.c.length % 2 != 0)) { theObject->data.c.length--; unchanged = false; } break; case kUpStairs: case kDownStairs: case kMailboxLf: case kMailboxRt: case kFloorTrans: case kCeilingTrans: case kDoorInLf: case kDoorInRt: case kDoorExRt: case kDoorExLf: case kWindowInLf: case kWindowInRt: case kWindowExRt: case kWindowExLf: case kInvisTrans: case kDeluxeTrans: GetObjectRect(&thisRoom->objects[objActive], &bounds); if (ForceRectInRect(&bounds, &roomRect)) { theObject->data.d.topLeft.h = bounds.left; theObject->data.d.topLeft.v = bounds.top; unchanged = false; if (theObject->what == kDeluxeTrans) { theObject->data.d.tall = ((RectWide(&bounds) / 4) << 8) + (RectTall(&bounds) / 4); } } if ((theObject->what == kDoorInLf) || (theObject->what == kDoorInRt)) { if (theObject->data.d.topLeft.h + HalfRectWide(&srcRects[kDoorInLf]) > (kRoomWide / 2)) { theObject->data.d.topLeft.h = kDoorInRtLeft; theObject->what = kDoorInRt; } else { theObject->data.d.topLeft.h = kDoorInLfLeft; theObject->what = kDoorInLf; } } if ((theObject->what == kDoorExRt) || (theObject->what == kDoorExLf)) { if (theObject->data.d.topLeft.h + HalfRectWide(&srcRects[kDoorExRt]) > (kRoomWide / 2)) { theObject->data.d.topLeft.h = kDoorExRtLeft; theObject->what = kDoorExRt; } else { theObject->data.d.topLeft.h = kDoorExLfLeft; theObject->what = kDoorExLf; } } if ((theObject->what == kWindowInLf) || (theObject->what == kWindowInRt)) { if (theObject->data.d.topLeft.h + HalfRectWide(&srcRects[kWindowInLf]) > (kRoomWide / 2)) { theObject->data.d.topLeft.h = kWindowInRtLeft; theObject->what = kWindowInRt; } else { theObject->data.d.topLeft.h = kWindowInLfLeft; theObject->what = kWindowInLf; } } if ((theObject->what == kWindowExRt) || (theObject->what == kWindowExLf)) { if (theObject->data.d.topLeft.h + HalfRectWide(&srcRects[kWindowExRt]) > (kRoomWide / 2)) { theObject->data.d.topLeft.h = kWindowExRtLeft; theObject->what = kWindowExRt; } else { theObject->data.d.topLeft.h = kWindowExLfLeft; theObject->what = kWindowExLf; } } if ((theObject->what == kInvisTrans) && ((theObject->data.d.topLeft.v + theObject->data.d.tall) > kTileHigh)) { theObject->data.d.tall = kTileHigh - theObject->data.d.topLeft.v; unchanged = false; } if ((theObject->what == kInvisTrans) && (theObject->data.d.wide < 0)) { theObject->data.d.wide = 0; unchanged = false; } break; case kLightSwitch: case kMachineSwitch: case kThermostat: case kPowerSwitch: case kKnifeSwitch: case kInvisSwitch: case kTrigger: case kLgTrigger: case kSoundTrigger: GetObjectRect(&thisRoom->objects[objActive], &bounds); if (ForceRectInRect(&bounds, &roomRect)) { theObject->data.e.topLeft.h = bounds.left; theObject->data.e.topLeft.v = bounds.top; unchanged = false; } if (theObject->data.e.topLeft.h % 2 != 0) { theObject->data.e.topLeft.h--; unchanged = false; } break; case kCeilingLight: case kLightBulb: case kTableLamp: case kHipLamp: case kDecoLamp: case kFlourescent: case kTrackLight: case kInvisLight: GetObjectRect(&thisRoom->objects[objActive], &bounds); if (ForceRectInRect(&bounds, &roomRect)) { if ((theObject->what == kFlourescent) || (theObject->what == kTrackLight)) { if (theObject->data.f.topLeft.h < bounds.left) theObject->data.f.topLeft.h = bounds.left; if (theObject->data.f.topLeft.v < bounds.top) theObject->data.f.topLeft.v = bounds.top; if ((theObject->data.f.topLeft.h + theObject->data.f.length) > bounds.right) theObject->data.f.length = bounds.right - theObject->data.f.topLeft.h; } else { theObject->data.f.topLeft.h = bounds.left; theObject->data.f.topLeft.v = bounds.top; } unchanged = false; } if (((theObject->what == kFlourescent) || (theObject->what == kTrackLight)) && ((bounds.right > kRoomWide) || (bounds.left < 0))) { if (theObject->data.f.topLeft.h < 0) { theObject->data.f.topLeft.h = 0; unchanged = false; } if (bounds.left < 0) { bounds.left = 0; unchanged = false; } if (theObject->data.f.topLeft.h > kRoomWide) { theObject->data.f.topLeft.h = kRoomWide; unchanged = false; } if (bounds.right > kRoomWide) { bounds.right = kRoomWide; unchanged = false; } theObject->data.f.length = kRoomWide - bounds.left; } break; case kShredder: case kToaster: case kMacPlus: case kGuitar: case kTV: case kCoffee: case kOutlet: case kVCR: case kStereo: case kMicrowave: case kCinderBlock: case kFlowerBox: case kCDs: case kCustomPict: GetObjectRect(&thisRoom->objects[objActive], &bounds); if (ForceRectInRect(&bounds, &roomRect)) { theObject->data.g.topLeft.h = bounds.left; theObject->data.g.topLeft.v = bounds.top; unchanged = false; } if ((theObject->what == kToaster) && (bounds.top - theObject->data.g.height < 0)) { theObject->data.g.height = bounds.top; unchanged = false; } if ((theObject->what == kTV) && (theObject->data.g.topLeft.h % 2 == 0)) { theObject->data.g.topLeft.h--; unchanged = false; } if (((theObject->what == kToaster) || (theObject->what == kMacPlus) || (theObject->what == kCoffee) || (theObject->what == kOutlet) || (theObject->what == kVCR) || (theObject->what == kStereo) || (theObject->what == kMicrowave)) && (theObject->data.g.topLeft.h % 2 != 0)) { theObject->data.g.topLeft.h--; unchanged = false; } break; case kBalloon: case kCopterLf: case kCopterRt: case kDartLf: case kDartRt: case kBall: case kDrip: case kFish: case kCobweb: GetObjectRect(&thisRoom->objects[objActive], &bounds); if (ForceRectInRect(&bounds, &roomRect)) { theObject->data.h.topLeft.h = bounds.left; theObject->data.h.topLeft.v = bounds.top; unchanged = false; } if (((theObject->what == kBall) || (theObject->what == kFish)) && (bounds.top - theObject->data.h.length < 0)) { theObject->data.h.length = bounds.top; unchanged = false; } if ((theObject->what == kDrip) && (bounds.bottom + theObject->data.h.length > kTileHigh)) { theObject->data.h.length = kTileHigh - bounds.bottom; unchanged = false; } if (((theObject->what == kBalloon) || (theObject->what == kCopterLf) || (theObject->what == kCopterRt) || (theObject->what == kBall) || (theObject->what == kDrip) || (theObject->what == kFish)) && (theObject->data.h.topLeft.h % 2 != 0)) { theObject->data.h.topLeft.h--; unchanged = false; } break; case kOzma: case kMirror: case kMousehole: case kFireplace: case kFlower: case kWallWindow: case kBear: case kCalendar: case kVase1: case kVase2: case kBulletin: case kCloud: case kFaucet: case kRug: case kChimes: GetObjectRect(&thisRoom->objects[objActive], &bounds); if (ForceRectInRect(&bounds, &roomRect)) { theObject->data.i.bounds = bounds; unchanged = false; } if (theObject->what == kMirror) { if (theObject->data.i.bounds.left % 2 != 0) { theObject->data.i.bounds.left--; unchanged = false; } if (theObject->data.i.bounds.right % 2 != 0) { theObject->data.i.bounds.right--; unchanged = false; } } break; } #endif return (unchanged); } //-------------------------------------------------------------- WrapBannerAndTrailer // Tries to wrap around the text of the banner and trailer messages. #ifndef COMPILEDEMO void WrapBannerAndTrailer (void) { char wasState; wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); WrapText((*thisHouse)->banner, 40); WrapText((*thisHouse)->trailer, 64); HSetState((Handle)thisHouse, wasState); } //-------------------------------------------------------------- ValidateNumberOfRooms // Makes sure the number of room count and actual number of rooms match. void ValidateNumberOfRooms (void) { long countedRooms, reportsRooms; char wasState; wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); reportsRooms = (long)(*thisHouse)->nRooms; countedRooms = (GetHandleSize((Handle)thisHouse) - sizeof(houseType)) / sizeof(roomType); if (reportsRooms != countedRooms) { (*thisHouse)->nRooms = (short)countedRooms; numberRooms = (*thisHouse)->nRooms; houseErrors++; } HSetState((Handle)thisHouse, wasState); } //-------------------------------------------------------------- CheckDuplicateFloorSuite // Error check, looks for rooms with the same floor suite (stacked). void CheckDuplicateFloorSuite (void) { #define kRoomsTimesSuites 8192 short i, numRooms, bitPlace; char *pidgeonHoles; char wasState; pidgeonHoles = (char *)NewPtrClear(sizeof(char) * kRoomsTimesSuites); if (pidgeonHoles == nil) return; wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); numRooms = (*thisHouse)->nRooms; for (i = 0; i < numRooms; i++) { if ((*thisHouse)->rooms[i].suite != kRoomIsEmpty) { bitPlace = (((*thisHouse)->rooms[i].floor + 7) * 128) + (*thisHouse)->rooms[i].suite; if ((bitPlace < 0) || (bitPlace >= 8192)) DebugStr("\pBlew array"); if (pidgeonHoles[bitPlace] != 0) { houseErrors++; (*thisHouse)->rooms[i].suite = kRoomIsEmpty; } else pidgeonHoles[bitPlace]++; } } HSetState((Handle)thisHouse, wasState); DisposePtr((Ptr)pidgeonHoles); } //-------------------------------------------------------------- CompressHouse // Removes place-holder (deleted) rooms from the middle of the file. void CompressHouse (void) { short wasFirstRoom, roomNumber, probe; char wasState; Boolean compressing, probing; wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); wasFirstRoom = (*thisHouse)->firstRoom; compressing = true; roomNumber = (*thisHouse)->nRooms - 1; // start with last room do { if ((*thisHouse)->rooms[roomNumber].suite != kRoomIsEmpty) { // if not an empty roomÉ probe = 0; // start looking for empty slot probing = true; do { // test room at probe to see if empty if ((*thisHouse)->rooms[probe].suite == kRoomIsEmpty) { // if it is, copy room there (*thisHouse)->rooms[probe] = (*thisHouse)->rooms[roomNumber]; (*thisHouse)->rooms[roomNumber].suite = kRoomIsEmpty; if (roomNumber == wasFirstRoom) (*thisHouse)->firstRoom = probe; if (roomNumber == wasRoom) wasRoom = probe; probing = false; } probe++; // bump probe up to next room if ((probing) && (probe >= roomNumber)) { // we reached the current room probing = false; // we can look no further compressing = false; // so we can compress no more } } while (probing); } roomNumber--; // go on to room preceding if (roomNumber <= 0) // stop if we reach the first room compressing = false; } while (compressing); HSetState((Handle)thisHouse, wasState); } //-------------------------------------------------------------- LopOffExtraRooms // Deletes all empty rooms hanging off the end of the house file. void LopOffExtraRooms (void) { long newSize; short r, count; char wasState; Str255 message; wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); count = 0; r = (*thisHouse)->nRooms; // begin at last room do { r--; // look for trailing empties if ((*thisHouse)->rooms[r].suite == kRoomIsEmpty) count++; else r = 0; } while (r > 0); if (count > 0) // if there were trailing emptiesÉ { r = (*thisHouse)->nRooms - count; newSize = sizeof(houseType) + (sizeof(roomType) * (long)r); HUnlock((Handle)thisHouse); // resize house handle (shrink) SetHandleSize((Handle)thisHouse, newSize); if (MemError() != noErr) // problem? { ForeColor(redColor); GetLocalizedString(16, message); SetMessageWindowMessage(message); } HLock((Handle)thisHouse); // reflect new room count (*thisHouse)->nRooms -= count; numberRooms = (*thisHouse)->nRooms; } HSetState((Handle)thisHouse, wasState); } //-------------------------------------------------------------- ValidateRoomNumbers // Error check - ensures that the floor and suite numbers are within legal ranges. void ValidateRoomNumbers (void) { short i, numRooms; char wasState; Str255 message; wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); numRooms = (*thisHouse)->nRooms; if (numRooms < 0) { (*thisHouse)->nRooms = 0; numRooms = 0; } for (i = 0; i < numRooms; i++) { if ((*thisHouse)->rooms[i].suite != kRoomIsEmpty) { if (((*thisHouse)->rooms[i].floor > 56) || ((*thisHouse)->rooms[i].floor < -7)) { (*thisHouse)->rooms[i].suite = kRoomIsEmpty; ForeColor(redColor); GetLocalizedString(17, message); SetMessageWindowMessage(message); houseErrors++; ForeColor(blackColor); } if (((*thisHouse)->rooms[i].suite >= 128) || ((*thisHouse)->rooms[i].suite < 0)) { (*thisHouse)->rooms[i].suite = kRoomIsEmpty; ForeColor(redColor); GetLocalizedString(18, message); SetMessageWindowMessage(message); houseErrors++; ForeColor(blackColor); } } } HSetState((Handle)thisHouse, wasState); } //-------------------------------------------------------------- CountUntitledRooms // Returns the number of rooms left "Untitled". void CountUntitledRooms (void) { short i, numRooms; char wasState; wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); numRooms = (*thisHouse)->nRooms; for (i = 0; i < numRooms; i++) { if (((*thisHouse)->rooms[i].suite != kRoomIsEmpty) && (EqualString((*thisHouse)->rooms[i].name, "\pUntitled Room", false, true))) houseErrors++; } HSetState((Handle)thisHouse, wasState); } //-------------------------------------------------------------- CheckRoomNameLength // Error check - ensures the length of the room name is legal. void CheckRoomNameLength (void) { short i, numRooms; char wasState; wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); numRooms = (*thisHouse)->nRooms; for (i = 0; i < numRooms; i++) { (*thisHouse)->rooms[i].unusedByte = 0; if (((*thisHouse)->rooms[i].suite != kRoomIsEmpty) && ((*thisHouse)->rooms[i].name[0] > 27)) { (*thisHouse)->rooms[i].name[0] = 27; houseErrors++; } } HSetState((Handle)thisHouse, wasState); } //-------------------------------------------------------------- MakeSureNumObjectsJives // Error check - ensures the actual count of objects equals number of objects. void MakeSureNumObjectsJives (void) { short i, h, numRooms, count; char wasState; wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); numRooms = (*thisHouse)->nRooms; for (i = 0; i < numRooms; i++) { if ((*thisHouse)->rooms[i].suite != kRoomIsEmpty) { count = 0; for (h = 0; h < kMaxRoomObs; h++) { if ((*thisHouse)->rooms[i].objects[h].what != kObjectIsEmpty) count++; } if (count != (*thisHouse)->rooms[i].numObjects) { houseErrors++; (*thisHouse)->rooms[i].numObjects = count; } } } HSetState((Handle)thisHouse, wasState); } //-------------------------------------------------------------- KeepAllObjectsLegal // Repeatedly calls KeepObjectLegal() on ALL objects in a house. Wow! void KeepAllObjectsLegal (void) { short i, h, numRooms; char wasState; Str255 message; wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); numRooms = (*thisHouse)->nRooms; for (i = 0; i < numRooms; i++) { if ((*thisHouse)->rooms[i].suite != kRoomIsEmpty) { ForceThisRoom(i); for (h = 0; h < kMaxRoomObs; h++) { objActive = h; if (thisRoom->objects[objActive].what != kObjectIsEmpty) { if (!KeepObjectLegal()) { ForeColor(redColor); GetLocalizedString(19, message); SetMessageWindowMessage(message); houseErrors++; ForeColor(blackColor); DelayTicks(60); } } } CopyThisRoomToRoom(); } } HSetState((Handle)thisHouse, wasState); } //-------------------------------------------------------------- CheckForStaircasePairs // Ensures that for every up-stair there is a down-stair. void CheckForStaircasePairs (void) { short i, h, g, numRooms, neighbor; char wasState; Boolean hasStairs; Str255 message; wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); numRooms = (*thisHouse)->nRooms; for (i = 0; i < numRooms; i++) { if ((*thisHouse)->rooms[i].suite != kRoomIsEmpty) { for (h = 0; h < kMaxRoomObs; h++) { if ((*thisHouse)->rooms[i].objects[h].what == kUpStairs) { thisRoomNumber = i; neighbor = GetNeighborRoomNumber(kNorthRoom); if (neighbor == kRoomIsEmpty) { ForeColor(redColor); GetLocalizedString(20, message); SetMessageWindowMessage(message); ForeColor(blackColor); DelayTicks(60); } else { hasStairs = false; for (g = 0; g < kMaxRoomObs; g++) { if ((*thisHouse)->rooms[neighbor].objects[g].what == kDownStairs) hasStairs = true; } if (!hasStairs) { ForeColor(redColor); GetLocalizedString(21, message); SetMessageWindowMessage(message); ForeColor(blackColor); DelayTicks(60); } } } else if ((*thisHouse)->rooms[i].objects[h].what == kDownStairs) { thisRoomNumber = i; neighbor = GetNeighborRoomNumber(kSouthRoom); if (neighbor == kRoomIsEmpty) { ForeColor(redColor); GetLocalizedString(22, message); SetMessageWindowMessage(message); ForeColor(blackColor); DelayTicks(60); } else { hasStairs = false; for (g = 0; g < kMaxRoomObs; g++) { if ((*thisHouse)->rooms[neighbor].objects[g].what == kUpStairs) hasStairs = true; } if (!hasStairs) { ForeColor(redColor); GetLocalizedString(23, message); SetMessageWindowMessage(message); ForeColor(blackColor); DelayTicks(60); } } } } } } HSetState((Handle)thisHouse, wasState); } #endif //-------------------------------------------------------------- CheckHouseForProblems // Calls all the above functions and reports (and corrects) errors. void CheckHouseForProblems (void) { #ifndef COMPILEDEMO Str255 message, message2; short wasActive; houseErrors = 0; CopyThisRoomToRoom(); wasRoom = thisRoomNumber; wasActive = objActive; GetLocalizedString(24, message); OpenMessageWindow(message); SpinCursor(3); GetLocalizedString(25, message); SetMessageWindowMessage(message); WrapBannerAndTrailer(); if (isHouseChecks) { SpinCursor(3); GetLocalizedString(26, message); SetMessageWindowMessage(message); ValidateNumberOfRooms(); if (houseErrors != 0) { GetLocalizedString(27, message); SetMessageWindowMessage(message); DelayTicks(60); houseErrors = 0; } } if (isHouseChecks) { SpinCursor(3); houseErrors = 0; CheckDuplicateFloorSuite(); if (houseErrors != 0) { NumToString((long)houseErrors, message); GetLocalizedString(28, message2); PasStringConcat(message, message2); ForeColor(redColor); SetMessageWindowMessage(message); ForeColor(blackColor); DelayTicks(45); } } SpinCursor(3); CompressHouse(); SpinCursor(3); LopOffExtraRooms(); if (isHouseChecks) { SpinCursor(3); ValidateRoomNumbers(); if (houseErrors != 0) { NumToString((long)houseErrors, message); GetLocalizedString(29, message2); PasStringConcat(message, message2); ForeColor(redColor); SetMessageWindowMessage(message); ForeColor(blackColor); DelayTicks(60); } } if (isHouseChecks) { SpinCursor(3); houseErrors = 0; CountUntitledRooms(); if (houseErrors != 0) { NumToString((long)houseErrors, message); GetLocalizedString(30, message2); PasStringConcat(message, message2); ForeColor(blueColor); SetMessageWindowMessage(message); ForeColor(blackColor); DelayTicks(45); } } if (isHouseChecks) { SpinCursor(3); houseErrors = 0; CheckRoomNameLength(); if (houseErrors != 0) { NumToString((long)houseErrors, message); GetLocalizedString(31, message2); PasStringConcat(message, message2); ForeColor(blueColor); SetMessageWindowMessage(message); ForeColor(blackColor); DelayTicks(45); } } if (isHouseChecks) { SpinCursor(3); houseErrors = 0; MakeSureNumObjectsJives(); if (houseErrors != 0) { NumToString((long)houseErrors, message); GetLocalizedString(32, message2); PasStringConcat(message, message2); ForeColor(redColor); SetMessageWindowMessage(message); ForeColor(blackColor); DelayTicks(60); } } if (isHouseChecks) { SpinCursor(3); houseErrors = 0; GetLocalizedString(33, message); SetMessageWindowMessage(message); KeepAllObjectsLegal(); if (houseErrors != 0) { NumToString((long)houseErrors, message); GetLocalizedString(34, message2); PasStringConcat(message, message2); ForeColor(redColor); SetMessageWindowMessage(message); ForeColor(blackColor); DelayTicks(60); } } if (isHouseChecks) { SpinCursor(3); houseErrors = 0; CheckForStaircasePairs(); } if (isHouseChecks) { SpinCursor(3); if (CountStarsInHouse() < 1) { ForeColor(redColor); GetLocalizedString(35, message); SetMessageWindowMessage(message); ForeColor(blackColor); DelayTicks(60); } } InitCursor(); CloseMessageWindow(); ForceThisRoom(wasRoom); objActive = wasActive; #endif } \ No newline at end of file diff --git a/Sources/Input.c b/Sources/Input.c deleted file mode 100755 index 5637c2b..0000000 --- a/Sources/Input.c +++ /dev/null @@ -1 +0,0 @@ -//============================================================================ //---------------------------------------------------------------------------- // Input.c //---------------------------------------------------------------------------- //============================================================================ #include #include "Externs.h" #include "MainWindow.h" #include "RectUtils.h" #define kNormalThrust 5 #define kHyperThrust 8 #define kHeliumLift 4 #define kEscPausePictID 1015 #define kTabPausePictID 1016 #define kSavingGameDial 1042 void LogDemoKey (char); void DoCommandKey (void); void DoPause (void); void DoBatteryEngaged (gliderPtr); void DoHeliumEngaged (gliderPtr); Boolean QuerySaveGame (void); demoPtr demoData; KeyMap theKeys; DialogPtr saveDial; short demoIndex, batteryFrame; Boolean isEscPauseKey, paused, batteryWasEngaged; extern long gameFrame; extern short otherPlayerEscaped; extern Boolean quitting, playing, onePlayerLeft, twoPlayerGame, demoGoing; //============================================================== Functions //-------------------------------------------------------------- LogDemoKey void LogDemoKey (char keyIs) { demoData[demoIndex].frame = gameFrame; demoData[demoIndex].key = keyIs; demoIndex++; } //-------------------------------------------------------------- DoCommandKey void DoCommandKey (void) { if (BitTst(&theKeys, kQKeyMap)) { playing = false; paused = false; if ((!twoPlayerGame) && (!demoGoing)) { if (QuerySaveGame()) SaveGame2(); // New save game. } } else if ((BitTst(&theKeys, kSKeyMap)) && (!twoPlayerGame)) { RefreshScoreboard(kSavingTitleMode); SaveGame2(); // New save game. HideCursor(); CopyRectWorkToMain(&workSrcRect); RefreshScoreboard(kNormalTitleMode); } } //-------------------------------------------------------------- DoPause void DoPause (void) { Rect bounds; SetPort((GrafPtr)mainWindow); QSetRect(&bounds, 0, 0, 214, 54); CenterRectInRect(&bounds, &houseRect); if (isEscPauseKey) LoadScaledGraphic(kEscPausePictID, &bounds); else LoadScaledGraphic(kTabPausePictID, &bounds); do { GetKeys(theKeys); } while ((isEscPauseKey && BitTst(&theKeys, kEscKeyMap)) || (!isEscPauseKey && BitTst(&theKeys, kTabKeyMap))); paused = true; while (paused) { GetKeys(theKeys); if ((isEscPauseKey && BitTst(&theKeys, kEscKeyMap)) || (!isEscPauseKey && BitTst(&theKeys, kTabKeyMap))) paused = false; else if (BitTst(&theKeys, kCommandKeyMap)) DoCommandKey(); } CopyBits((BitMap *)*GetGWorldPixMap(workSrcMap), GetPortBitMapForCopyBits(GetWindowPort(mainWindow)), &bounds, &bounds, srcCopy, nil); do { GetKeys(theKeys); } while ((isEscPauseKey && BitTst(&theKeys, kEscKeyMap)) || (!isEscPauseKey && BitTst(&theKeys, kTabKeyMap))); } //-------------------------------------------------------------- DoBatteryEngaged void DoBatteryEngaged (gliderPtr thisGlider) { if (thisGlider->facing == kFaceLeft) { if (thisGlider->tipped) thisGlider->hVel += kHyperThrust; else thisGlider->hVel -= kHyperThrust; } else { if (thisGlider->tipped) thisGlider->hVel -= kHyperThrust; else thisGlider->hVel += kHyperThrust; } batteryTotal--; if (batteryTotal == 0) { QuickBatteryRefresh(false); PlayPrioritySound(kFizzleSound, kFizzlePriority); } else { if (!batteryWasEngaged) batteryFrame = 0; if (batteryFrame == 0) PlayPrioritySound(kThrustSound, kThrustPriority); batteryFrame++; if (batteryFrame >= 4) batteryFrame = 0; batteryWasEngaged = true; } } //-------------------------------------------------------------- DoHeliumEngaged void DoHeliumEngaged (gliderPtr thisGlider) { thisGlider->vDesiredVel = -kHeliumLift; batteryTotal++; if (batteryTotal == 0) { QuickBatteryRefresh(false); PlayPrioritySound(kFizzleSound, kFizzlePriority); batteryWasEngaged = false; } else { if (!batteryWasEngaged) batteryFrame = 0; if (batteryFrame == 0) PlayPrioritySound(kHissSound, kHissPriority); batteryFrame++; if (batteryFrame >= 4) batteryFrame = 0; batteryWasEngaged = true; } } //-------------------------------------------------------------- GetDemoInput void GetDemoInput (gliderPtr thisGlider) { if (thisGlider->which == kPlayer1) { GetKeys(theKeys); #if BUILD_ARCADE_VERSION if ((BitTst(&theKeys, thisGlider->leftKey)) || (BitTst(&theKeys, thisGlider->rightKey)) || (BitTst(&theKeys, thisGlider->battKey)) || (BitTst(&theKeys, thisGlider->bandKey))) { playing = false; paused = false; } #else if (BitTst(&theKeys, kCommandKeyMap)) DoCommandKey(); #endif } if (thisGlider->mode == kGliderBurning) { if (thisGlider->facing == kFaceLeft) thisGlider->hDesiredVel -= kNormalThrust; else thisGlider->hDesiredVel += kNormalThrust; } else { thisGlider->heldLeft = false; thisGlider->heldRight = false; thisGlider->tipped = false; if (gameFrame == (long)demoData[demoIndex].frame) { switch (demoData[demoIndex].key) { case 0: // left key thisGlider->hDesiredVel += kNormalThrust; thisGlider->tipped = (thisGlider->facing == kFaceLeft); thisGlider->heldRight = true; thisGlider->fireHeld = false; break; case 1: // right key thisGlider->hDesiredVel -= kNormalThrust; thisGlider->tipped = (thisGlider->facing == kFaceRight); thisGlider->heldLeft = true; thisGlider->fireHeld = false; break; case 2: // battery key if (batteryTotal > 0) DoBatteryEngaged(thisGlider); else DoHeliumEngaged(thisGlider); thisGlider->fireHeld = false; break; case 3: // rubber band key if (!thisGlider->fireHeld) { if (AddBand(thisGlider, thisGlider->dest.left + 24, thisGlider->dest.top + 10, thisGlider->facing)) { bandsTotal--; if (bandsTotal <= 0) QuickBandsRefresh(false); thisGlider->fireHeld = true; } } break; } demoIndex++; } else thisGlider->fireHeld = false; if ((isEscPauseKey && BitTst(&theKeys, kEscKeyMap)) || (!isEscPauseKey && BitTst(&theKeys, kTabKeyMap))) { DoPause(); } } } //-------------------------------------------------------------- GetInput void GetInput (gliderPtr thisGlider) { if (thisGlider->which == kPlayer1) { GetKeys(theKeys); if (BitTst(&theKeys, kCommandKeyMap)) DoCommandKey(); } if (thisGlider->mode == kGliderBurning) { if (thisGlider->facing == kFaceLeft) thisGlider->hDesiredVel -= kNormalThrust; else thisGlider->hDesiredVel += kNormalThrust; } else { thisGlider->heldLeft = false; thisGlider->heldRight = false; if (BitTst(&theKeys, thisGlider->rightKey)) // right key { #ifdef CREATEDEMODATA LogDemoKey(0); #endif if (BitTst(&theKeys, thisGlider->leftKey)) { ToggleGliderFacing(thisGlider); thisGlider->heldLeft = true; } else { thisGlider->hDesiredVel += kNormalThrust; thisGlider->tipped = (thisGlider->facing == kFaceLeft); thisGlider->heldRight = true; } } else if (BitTst(&theKeys, thisGlider->leftKey)) // left key { #ifdef CREATEDEMODATA LogDemoKey(1); #endif thisGlider->hDesiredVel -= kNormalThrust; thisGlider->tipped = (thisGlider->facing == kFaceRight); thisGlider->heldLeft = true; } else thisGlider->tipped = false; if ((BitTst(&theKeys, thisGlider->battKey)) && (batteryTotal != 0) && (thisGlider->mode == kGliderNormal)) { #ifdef CREATEDEMODATA LogDemoKey(2); #endif if (batteryTotal > 0) DoBatteryEngaged(thisGlider); else DoHeliumEngaged(thisGlider); } else batteryWasEngaged = false; if ((BitTst(&theKeys, thisGlider->bandKey)) && (bandsTotal > 0) && (thisGlider->mode == kGliderNormal)) { #ifdef CREATEDEMODATA LogDemoKey(3); #endif if (!thisGlider->fireHeld) { if (AddBand(thisGlider, thisGlider->dest.left + 24, thisGlider->dest.top + 10, thisGlider->facing)) { bandsTotal--; if (bandsTotal <= 0) QuickBandsRefresh(false); thisGlider->fireHeld = true; } } } else thisGlider->fireHeld = false; if ((otherPlayerEscaped != kNoOneEscaped) && (BitTst(&theKeys, kDeleteKeyMap)) && (thisGlider->which) && (!onePlayerLeft)) { ForceKillGlider(); } if ((isEscPauseKey && BitTst(&theKeys, kEscKeyMap)) || (!isEscPauseKey && BitTst(&theKeys, kTabKeyMap))) { DoPause(); } } } //-------------------------------------------------------------- QuerySaveGame Boolean QuerySaveGame (void) { #define kSaveGameAlert 1041 #define kYesSaveGameButton 1 short hitWhat; InitCursor(); FlushEvents(everyEvent, 0); // CenterAlert(kSaveGameAlert); hitWhat = Alert(kSaveGameAlert, nil); if (hitWhat == kYesSaveGameButton) return (true); else return (false); } \ No newline at end of file diff --git a/Sources/Interactions.c b/Sources/Interactions.c deleted file mode 100755 index a8f1a65..0000000 --- a/Sources/Interactions.c +++ /dev/null @@ -1 +0,0 @@ - //============================================================================ //---------------------------------------------------------------------------- // Interactions.c //---------------------------------------------------------------------------- //============================================================================ #include "Externs.h" #include "RectUtils.h" #define kFloorVentLift -6 #define kCeilingVentDrop 8 #define kFanStrength 12 #define kBatterySupply 50 // about 2 rooms worth of thrust #define kHeliumSupply 150 #define kBandsSupply 8 #define kFoilSupply 8 Boolean GliderHitTop (gliderPtr, Rect *); Boolean GliderInRect (gliderPtr, Rect *); void BounceGlider (gliderPtr, Rect *); void CheckEscapeUpTwo (gliderPtr); void CheckEscapeUp (gliderPtr); void CheckEscapeDownTwo (gliderPtr); void CheckEscapeDown (gliderPtr); void CheckRoofCollision (gliderPtr); void CheckEscapeLeftTwo (gliderPtr); void CheckEscapeLeft (gliderPtr); void CheckEscapeRightTwo (gliderPtr); void CheckEscapeRight (gliderPtr); void CheckGliderInRoom (gliderPtr); void HandleRewards (gliderPtr, hotPtr); void HandleMicrowaveAction (hotPtr, gliderPtr); void HandleHotSpotCollision (gliderPtr, hotPtr, short); void CheckForHotSpots (void); void WebGlider (gliderPtr, Rect *); short otherPlayerEscaped, activeRectEscaped; extern hotPtr hotSpots; extern short nHotSpots, leftThresh, rightThresh, thisTiles[]; extern short localNumbers[], thisBackground, numStarsRemaining; extern Boolean leftOpen, rightOpen, topOpen, bottomOpen, evenFrame; extern Boolean twoPlayerGame, newState, onePlayerLeft, playerDead; //============================================================== Functions //-------------------------------------------------------------- GliderHitSides Boolean GliderHitTop (gliderPtr thisGlider, Rect *theRect) { Rect glideBounds; short offset; Boolean hitTop; glideBounds.left = thisGlider->dest.left + 5; glideBounds.top = thisGlider->dest.top + 5; glideBounds.right = thisGlider->dest.right - 5; glideBounds.bottom = thisGlider->dest.bottom - 5; glideBounds.left -= thisGlider->wasHVel; glideBounds.right -= thisGlider->wasHVel; if (theRect->bottom < glideBounds.top) hitTop = false; else if (theRect->top > glideBounds.bottom) hitTop = false; else if (theRect->right < glideBounds.left) hitTop = false; else if (theRect->left > glideBounds.right) hitTop = false; else hitTop = true; if (!hitTop) { PlayPrioritySound(kFoilHitSound, kFoilHitPriority); foilTotal--; if (foilTotal <= 0) StartGliderFoilLosing(thisGlider); glideBounds.left += thisGlider->wasHVel; glideBounds.right += thisGlider->wasHVel; if (thisGlider->hVel > 0) offset = 2 + glideBounds.right - theRect->left; else offset = 2 + glideBounds.left - theRect->right; thisGlider->hVel = -thisGlider->hVel - offset; } return (hitTop); } //-------------------------------------------------------------- SectGlider Boolean SectGlider (gliderPtr thisGlider, Rect *theRect, Boolean scrutinize) { Rect glideBounds; Boolean itHit; glideBounds = thisGlider->dest; if (thisGlider->mode == kGliderBurning) glideBounds.top += 6; if (scrutinize) { glideBounds.left += 5; glideBounds.top += 5; glideBounds.right -= 5; glideBounds.bottom -= 5; } if (theRect->bottom < glideBounds.top) itHit = false; else if (theRect->top > glideBounds.bottom) itHit = false; else if (theRect->right < glideBounds.left) itHit = false; else if (theRect->left > glideBounds.right) itHit = false; else itHit = true; return (itHit); } //-------------------------------------------------------------- GliderInRect Boolean GliderInRect (gliderPtr thisGlider, Rect *theRect) { Rect glideBounds; glideBounds = thisGlider->dest; if (glideBounds.top < theRect->top) return (false); else if (glideBounds.bottom > theRect->bottom) return (false); else if (glideBounds.left < theRect->left) return (false); else if (glideBounds.right > theRect->right) return (false); else return (true); } //-------------------------------------------------------------- BounceGlider void BounceGlider (gliderPtr thisGlider, Rect *theRect) { Rect glideBounds; glideBounds = thisGlider->dest; if ((theRect->right - glideBounds.left) < (glideBounds.right - theRect->left)) thisGlider->hVel = theRect->right - glideBounds.left; else thisGlider->hVel = theRect->left - glideBounds.right; if (foilTotal > 0) PlayPrioritySound(kFoilHitSound, kFoilHitPriority); else PlayPrioritySound(kHitWallSound, kHitWallPriority); } //-------------------------------------------------------------- CheckEscapeUpTwo void CheckEscapeUpTwo (gliderPtr thisGlider) { short offset, leftTile, rightTile; if (topOpen) { if (thisGlider->dest.top < kNoCeilingLimit) { if (otherPlayerEscaped == kNoOneEscaped) { otherPlayerEscaped = kPlayerEscapedUp; RefreshScoreboard(kEscapedTitleMode); FlagGliderInLimbo(thisGlider, true); } else if (otherPlayerEscaped == kPlayerEscapedUp) { otherPlayerEscaped = kNoOneEscaped; MoveRoomToRoom(thisGlider, kAbove); } else { PlayPrioritySound(kDontExitSound, kDontExitPriority); offset = kNoCeilingLimit - thisGlider->dest.top; thisGlider->vVel = -thisGlider->vVel + offset; } } } else if (thisBackground == kDirt) { leftTile = thisGlider->dest.left >> 6; // Ö 64 rightTile = thisGlider->dest.right >> 6; // Ö 64 if ((leftTile >= 0) && (leftTile < 8) && (rightTile >= 0) && (rightTile < 8)) { if (((thisTiles[leftTile] == 5) || (thisTiles[leftTile] == 6)) && ((thisTiles[rightTile] == 5) || (thisTiles[rightTile] == 6))) { if (thisGlider->dest.top < kNoCeilingLimit) { if (otherPlayerEscaped == kNoOneEscaped) { otherPlayerEscaped = kPlayerEscapedUp; RefreshScoreboard(kEscapedTitleMode); FlagGliderInLimbo(thisGlider, true); } else if (otherPlayerEscaped == kPlayerEscapedUp) { otherPlayerEscaped = kNoOneEscaped; MoveRoomToRoom(thisGlider, kAbove); } else { PlayPrioritySound(kDontExitSound, kDontExitPriority); offset = kNoCeilingLimit - thisGlider->dest.top; thisGlider->vVel = -thisGlider->vVel + offset; } } } else thisGlider->vVel = kCeilingLimit - thisGlider->dest.top; } else thisGlider->vVel = kCeilingLimit - thisGlider->dest.top; } else thisGlider->vVel = kCeilingLimit - thisGlider->dest.top; } //-------------------------------------------------------------- CheckEscapeUp void CheckEscapeUp (gliderPtr thisGlider) { short leftTile, rightTile; if (topOpen) { if (thisGlider->dest.top < kNoCeilingLimit) { MoveRoomToRoom(thisGlider, kAbove); } } else if (thisBackground == kDirt) { leftTile = thisGlider->dest.left >> 6; // Ö 64 rightTile = thisGlider->dest.right >> 6; // Ö 64 if ((leftTile >= 0) && (leftTile < 8) && (rightTile >= 0) && (rightTile < 8)) { if (((thisTiles[leftTile] == 5) || (thisTiles[leftTile] == 6)) && ((thisTiles[rightTile] == 5) || (thisTiles[rightTile] == 6))) { if (thisGlider->dest.top < kNoCeilingLimit) MoveRoomToRoom(thisGlider, kAbove); } else thisGlider->vVel = kCeilingLimit - thisGlider->dest.top; } else thisGlider->vVel = kCeilingLimit - thisGlider->dest.top; } else thisGlider->vVel = kCeilingLimit - thisGlider->dest.top; } //-------------------------------------------------------------- CheckEscapeDownTwo void CheckEscapeDownTwo (gliderPtr thisGlider) { short offset, leftTile, rightTile; if (bottomOpen) { if (thisGlider->dest.bottom > kNoFloorLimit) { if (otherPlayerEscaped == kNoOneEscaped) { otherPlayerEscaped = kPlayerEscapedDown; RefreshScoreboard(kEscapedTitleMode); FlagGliderInLimbo(thisGlider, true); } else if (otherPlayerEscaped == kPlayerEscapedDown) { otherPlayerEscaped = kNoOneEscaped; MoveRoomToRoom(thisGlider, kBelow); } else { PlayPrioritySound(kDontExitSound, kDontExitPriority); offset = kNoFloorLimit - thisGlider->dest.bottom; thisGlider->vVel = -thisGlider->vVel + offset; } } } else if (thisBackground == kDirt) { leftTile = thisGlider->dest.left >> 6; // Ö 64 rightTile = thisGlider->dest.right >> 6; // Ö 64 if ((leftTile >= 0) && (leftTile < 8) && (rightTile >= 0) && (rightTile < 8)) { if (((thisTiles[leftTile] == 2) || (thisTiles[leftTile] == 3)) && ((thisTiles[rightTile] == 2) || (thisTiles[rightTile] == 3))) { if (thisGlider->dest.bottom > kNoFloorLimit) { if (otherPlayerEscaped == kNoOneEscaped) { otherPlayerEscaped = kPlayerEscapedDown; RefreshScoreboard(kEscapedTitleMode); FlagGliderInLimbo(thisGlider, true); } else if (otherPlayerEscaped == kPlayerEscapedDown) { otherPlayerEscaped = kNoOneEscaped; MoveRoomToRoom(thisGlider, kBelow); } else { PlayPrioritySound(kDontExitSound, kDontExitPriority); offset = kNoFloorLimit - thisGlider->dest.bottom; thisGlider->vVel = -thisGlider->vVel + offset; } } } else { if (thisGlider->ignoreGround) { if (thisGlider->dest.bottom > kNoFloorLimit) MoveRoomToRoom(thisGlider, kBelow); } else { thisGlider->vVel = kFloorLimit - thisGlider->dest.bottom; StartGliderFadingOut(thisGlider); PlayPrioritySound(kFadeOutSound, kFadeOutPriority); } } } } else { if (thisGlider->ignoreGround) { if (thisGlider->dest.bottom > kNoFloorLimit) MoveRoomToRoom(thisGlider, kBelow); } else { thisGlider->vVel = kFloorLimit - thisGlider->dest.bottom; StartGliderFadingOut(thisGlider); PlayPrioritySound(kFadeOutSound, kFadeOutPriority); } } } //-------------------------------------------------------------- CheckEscapeDown void CheckEscapeDown (gliderPtr thisGlider) { short leftTile, rightTile; if (bottomOpen) { if (thisGlider->dest.bottom > kNoFloorLimit) { MoveRoomToRoom(thisGlider, kBelow); } } else if (thisBackground == kDirt) { leftTile = thisGlider->dest.left >> 6; // Ö 64 rightTile = thisGlider->dest.right >> 6; // Ö 64 if ((leftTile >= 0) && (leftTile < 8) && (rightTile >= 0) && (rightTile < 8)) { if (((thisTiles[leftTile] == 2) || (thisTiles[leftTile] == 3)) && ((thisTiles[rightTile] == 2) || (thisTiles[rightTile] == 3))) { if (thisGlider->dest.bottom > kNoFloorLimit) MoveRoomToRoom(thisGlider, kBelow); } else { if (thisGlider->ignoreGround) { if (thisGlider->dest.bottom > kNoFloorLimit) MoveRoomToRoom(thisGlider, kBelow); } else { thisGlider->vVel = kFloorLimit - thisGlider->dest.bottom; StartGliderFadingOut(thisGlider); PlayPrioritySound(kFadeOutSound, kFadeOutPriority); } } } else { if (thisGlider->ignoreGround) { if (thisGlider->dest.bottom > kNoFloorLimit) MoveRoomToRoom(thisGlider, kBelow); } else { thisGlider->vVel = kFloorLimit - thisGlider->dest.bottom; StartGliderFadingOut(thisGlider); PlayPrioritySound(kFadeOutSound, kFadeOutPriority); } } } else { if (thisGlider->ignoreGround) { if (thisGlider->dest.bottom > kNoFloorLimit) MoveRoomToRoom(thisGlider, kBelow); } else { thisGlider->vVel = kFloorLimit - thisGlider->dest.bottom; StartGliderFadingOut(thisGlider); PlayPrioritySound(kFadeOutSound, kFadeOutPriority); } } } //-------------------------------------------------------------- CheckRoofCollision void CheckRoofCollision (gliderPtr thisGlider) { short offset, tileOver; offset = (thisGlider->dest.left + kHalfGliderWide) >> 6; // Ö 64 if ((offset >= 0) && (offset <= 7) && (!thisGlider->sliding)) { tileOver = thisTiles[offset]; if (tileOver == 1) { if (((thisGlider->dest.left + kHalfGliderWide) - (offset << 6)) > (250 - thisGlider->dest.bottom)) { thisGlider->vVel = kFloorLimit - thisGlider->dest.bottom; StartGliderFadingOut(thisGlider); PlayPrioritySound(kFadeOutSound, kFadeOutPriority); } } else if (tileOver == 2) { if (((thisGlider->dest.left + kHalfGliderWide) - (offset << 6)) > (186 - thisGlider->dest.bottom)) { thisGlider->vVel = kFloorLimit - thisGlider->dest.bottom; StartGliderFadingOut(thisGlider); PlayPrioritySound(kFadeOutSound, kFadeOutPriority); } } else if (tileOver == 5) { if ((64 - ((thisGlider->dest.left + kHalfGliderWide) - (offset << 6))) > (186 - thisGlider->dest.bottom)) { thisGlider->vVel = kFloorLimit - thisGlider->dest.bottom; StartGliderFadingOut(thisGlider); PlayPrioritySound(kFadeOutSound, kFadeOutPriority); } } else if (tileOver == 6) { if ((64 - ((thisGlider->dest.left + kHalfGliderWide) - (offset << 6))) > (250 - thisGlider->dest.bottom)) { thisGlider->vVel = kFloorLimit - thisGlider->dest.bottom; StartGliderFadingOut(thisGlider); PlayPrioritySound(kFadeOutSound, kFadeOutPriority); } } else { thisGlider->vVel = kFloorLimit - thisGlider->dest.bottom; StartGliderFadingOut(thisGlider); PlayPrioritySound(kFadeOutSound, kFadeOutPriority); } } } //-------------------------------------------------------------- CheckEscapeLeftTwo void CheckEscapeLeftTwo (gliderPtr thisGlider) { short offset; if (leftThresh == kLeftWallLimit) { if (thisGlider->ignoreLeft) { if (thisGlider->dest.left < kNoLeftWallLimit) { if (otherPlayerEscaped == kNoOneEscaped) { otherPlayerEscaped = kPlayerEscapedLeft; RefreshScoreboard(kEscapedTitleMode); FlagGliderInLimbo(thisGlider, true); } else if (otherPlayerEscaped == kPlayerEscapedLeft) { otherPlayerEscaped = kNoOneEscaped; MoveRoomToRoom(thisGlider, kToLeft); } else { PlayPrioritySound(kDontExitSound, kDontExitPriority); offset = kNoLeftWallLimit - thisGlider->dest.left; thisGlider->hVel = -thisGlider->hVel + offset; } } } else { if (foilTotal > 0) PlayPrioritySound(kFoilHitSound, kFoilHitPriority); else PlayPrioritySound(kHitWallSound, kHitWallPriority); offset = kLeftWallLimit - thisGlider->dest.left; thisGlider->hVel = -thisGlider->hVel + offset; } } else { if (otherPlayerEscaped == kNoOneEscaped) { otherPlayerEscaped = kPlayerEscapedLeft; RefreshScoreboard(kEscapedTitleMode); FlagGliderInLimbo(thisGlider, true); } else if (otherPlayerEscaped == kPlayerEscapedLeft) { otherPlayerEscaped = kNoOneEscaped; MoveRoomToRoom(thisGlider, kToLeft); } else { PlayPrioritySound(kDontExitSound, kDontExitPriority); offset = kNoLeftWallLimit - thisGlider->dest.left; thisGlider->hVel = -thisGlider->hVel + offset; } } } //-------------------------------------------------------------- CheckEscapeLeft void CheckEscapeLeft (gliderPtr thisGlider) { short offset; if (leftThresh == kLeftWallLimit) { if (thisGlider->ignoreLeft) { if (thisGlider->dest.left < kNoLeftWallLimit) MoveRoomToRoom(thisGlider, kToLeft); } else { if (foilTotal > 0) PlayPrioritySound(kFoilHitSound, kFoilHitPriority); else PlayPrioritySound(kHitWallSound, kHitWallPriority); offset = kLeftWallLimit - thisGlider->dest.left; thisGlider->hVel = -thisGlider->hVel + offset; } } else MoveRoomToRoom(thisGlider, kToLeft); } //-------------------------------------------------------------- CheckEscapeRightTwo void CheckEscapeRightTwo (gliderPtr thisGlider) { short offset; if (rightThresh == kRightWallLimit) { if (thisGlider->ignoreRight) { if (thisGlider->dest.right > kNoRightWallLimit) { if (otherPlayerEscaped == kNoOneEscaped) { otherPlayerEscaped = kPlayerEscapedRight; RefreshScoreboard(kEscapedTitleMode); FlagGliderInLimbo(thisGlider, true); } else if (otherPlayerEscaped == kPlayerEscapedRight) { otherPlayerEscaped = kNoOneEscaped; MoveRoomToRoom(thisGlider, kToRight); } else { PlayPrioritySound(kDontExitSound, kDontExitPriority); offset = kNoRightWallLimit - thisGlider->dest.right; thisGlider->hVel = -thisGlider->hVel + offset; } } } else { if (foilTotal > 0) PlayPrioritySound(kFoilHitSound, kFoilHitPriority); else PlayPrioritySound(kHitWallSound, kHitWallPriority); offset = kRightWallLimit - thisGlider->dest.right; thisGlider->hVel = -thisGlider->hVel + offset; } } else { if (otherPlayerEscaped == kNoOneEscaped) { otherPlayerEscaped = kPlayerEscapedRight; RefreshScoreboard(kEscapedTitleMode); FlagGliderInLimbo(thisGlider, true); } else if (otherPlayerEscaped == kPlayerEscapedRight) { otherPlayerEscaped = kNoOneEscaped; MoveRoomToRoom(thisGlider, kToRight); } else { PlayPrioritySound(kDontExitSound, kDontExitPriority); offset = kNoRightWallLimit - thisGlider->dest.right; thisGlider->hVel = -thisGlider->hVel + offset; } } } //-------------------------------------------------------------- CheckEscapeRight void CheckEscapeRight (gliderPtr thisGlider) { short offset; if (rightThresh == kRightWallLimit) { if (thisGlider->ignoreRight) { if (thisGlider->dest.right > kNoRightWallLimit) MoveRoomToRoom(thisGlider, kToRight); } else { if (foilTotal > 0) PlayPrioritySound(kFoilHitSound, kFoilHitPriority); else PlayPrioritySound(kHitWallSound, kHitWallPriority); offset = kRightWallLimit - thisGlider->dest.right; thisGlider->hVel = -thisGlider->hVel + offset; } } else MoveRoomToRoom(thisGlider, kToRight); } //-------------------------------------------------------------- CheckGliderInRoom void CheckGliderInRoom (gliderPtr thisGlider) { if ((thisGlider->mode == kGliderNormal) || (thisGlider->mode == kGliderFaceLeft) || (thisGlider->mode == kGliderFaceRight) || (thisGlider->mode == kGliderBurning)) { if (thisGlider->dest.top < kCeilingLimit) { if (thisGlider->mode == kGliderBurning) { thisGlider->wasMode = 0; StartGliderFadingOut(thisGlider); PlayPrioritySound(kFadeOutSound, kFadeOutPriority); } else if ((twoPlayerGame) && (!onePlayerLeft)) CheckEscapeUpTwo(thisGlider); else CheckEscapeUp(thisGlider); } else if (thisGlider->dest.bottom > kFloorLimit) { if (thisGlider->mode == kGliderBurning) { thisGlider->wasMode = 0; StartGliderFadingOut(thisGlider); PlayPrioritySound(kFadeOutSound, kFadeOutPriority); } else if ((twoPlayerGame) && (!onePlayerLeft)) CheckEscapeDownTwo(thisGlider); else CheckEscapeDown(thisGlider); } else if ((thisBackground == kRoof) && (thisGlider->dest.bottom > kRoofLimit)) CheckRoofCollision(thisGlider); if (thisGlider->dest.left < leftThresh) { if (thisGlider->mode == kGliderBurning) { thisGlider->wasMode = 0; StartGliderFadingOut(thisGlider); PlayPrioritySound(kFadeOutSound, kFadeOutPriority); } else if((twoPlayerGame) && (!onePlayerLeft)) CheckEscapeLeftTwo(thisGlider); else CheckEscapeLeft(thisGlider); } else if (thisGlider->dest.right > rightThresh) { if (thisGlider->mode == kGliderBurning) { thisGlider->wasMode = 0; StartGliderFadingOut(thisGlider); PlayPrioritySound(kFadeOutSound, kFadeOutPriority); } else if ((twoPlayerGame) && (!onePlayerLeft)) CheckEscapeRightTwo(thisGlider); else CheckEscapeRight(thisGlider); } } } //-------------------------------------------------------------- HandleRewards void HandleRewards (gliderPtr thisGlider, hotPtr who) { Rect bounds; short whoLinked, points; whoLinked = who->who; bounds = who->bounds; switch (masterObjects[whoLinked].theObject.what) { case kRedClock: if (SetObjectState(thisRoomNumber, masterObjects[whoLinked].objectNum, 0, whoLinked)) { PlayPrioritySound(kBeepsSound, kBeepsPriority); RestoreFromSavedMap(thisRoomNumber, masterObjects[whoLinked].objectNum, false); AddFlyingPoint(&bounds, 100, thisGlider->hVel / 2, thisGlider->vVel / 2); thisGlider->hVel /= 4; thisGlider->vVel /= 4; theScore += kRedClockPoints; RedrawAllGrease(); } who->isOn = false; break; case kBlueClock: if (SetObjectState(thisRoomNumber, masterObjects[whoLinked].objectNum, 0, whoLinked)) { PlayPrioritySound(kBuzzerSound, kBuzzerPriority); RestoreFromSavedMap(thisRoomNumber, masterObjects[whoLinked].objectNum, false); AddFlyingPoint(&bounds, 300, thisGlider->hVel / 2, thisGlider->vVel / 2); thisGlider->hVel /= 4; thisGlider->vVel /= 4; theScore += kBlueClockPoints; RedrawAllGrease(); } who->isOn = false; break; case kYellowClock: if (SetObjectState(thisRoomNumber, masterObjects[whoLinked].objectNum, 0, whoLinked)) { PlayPrioritySound(kDingSound, kDingPriority); RestoreFromSavedMap(thisRoomNumber, masterObjects[whoLinked].objectNum, false); AddFlyingPoint(&bounds, 500, thisGlider->hVel / 2, thisGlider->vVel / 2); thisGlider->hVel /= 4; thisGlider->vVel /= 4; theScore += kYellowClockPoints; RedrawAllGrease(); } who->isOn = false; break; case kCuckoo: if (SetObjectState(thisRoomNumber, masterObjects[whoLinked].objectNum, 0, whoLinked)) { PlayPrioritySound(kCuckooSound, kCuckooPriority); RestoreFromSavedMap(thisRoomNumber, masterObjects[whoLinked].objectNum, false); StopPendulum(thisRoomNumber, masterObjects[whoLinked].objectNum); AddFlyingPoint(&bounds, 1000, thisGlider->hVel / 2, thisGlider->vVel / 2); thisGlider->hVel /= 4; thisGlider->vVel /= 4; theScore += kCuckooClockPoints; RedrawAllGrease(); } who->isOn = false; break; case kPaper: if (SetObjectState(thisRoomNumber, masterObjects[whoLinked].objectNum, 0, whoLinked)) { PlayPrioritySound(kEnergizeSound, kEnergizePriority); RestoreFromSavedMap(thisRoomNumber, masterObjects[whoLinked].objectNum, false); AddSparkle(&bounds); thisGlider->hVel /= 2; thisGlider->vVel /= 2; mortals++; if ((twoPlayerGame) && (!onePlayerLeft)) mortals++; QuickGlidersRefresh(); RedrawAllGrease(); } who->isOn = false; break; case kBattery: if (SetObjectState(thisRoomNumber, masterObjects[whoLinked].objectNum, 0, whoLinked)) { PlayPrioritySound(kEnergizeSound, kEnergizePriority); RestoreFromSavedMap(thisRoomNumber, masterObjects[whoLinked].objectNum, false); AddSparkle(&bounds); thisGlider->hVel /= 2; thisGlider->vVel /= 2; if (batteryTotal > 0) // positive number means battery power batteryTotal += kBatterySupply; else // negative number means helium gas batteryTotal = kBatterySupply; if ((twoPlayerGame) && (!onePlayerLeft)) batteryTotal += kBatterySupply; QuickBatteryRefresh(false); RedrawAllGrease(); } who->isOn = false; break; case kBands: if (SetObjectState(thisRoomNumber, masterObjects[whoLinked].objectNum, 0, whoLinked)) { PlayPrioritySound(kEnergizeSound, kEnergizePriority); RestoreFromSavedMap(thisRoomNumber, masterObjects[whoLinked].objectNum, false); AddSparkle(&bounds); thisGlider->hVel /= 2; thisGlider->vVel /= 2; bandsTotal += kBandsSupply; if ((twoPlayerGame) && (!onePlayerLeft)) bandsTotal += kBandsSupply; QuickBandsRefresh(false); RedrawAllGrease(); } who->isOn = false; break; case kGreaseRt: case kGreaseLf: if (SetObjectState(thisRoomNumber, masterObjects[whoLinked].objectNum, 0, whoLinked)) SpillGrease(masterObjects[whoLinked].dynaNum, masterObjects[whoLinked].hotNum); who->isOn = false; break; case kFoil: if (SetObjectState(thisRoomNumber, masterObjects[whoLinked].objectNum, 0, whoLinked)) { PlayPrioritySound(kEnergizeSound, kEnergizePriority); RestoreFromSavedMap(thisRoomNumber, masterObjects[whoLinked].objectNum, false); AddSparkle(&bounds); thisGlider->hVel /= 2; thisGlider->vVel /= 2; foilTotal += kFoilSupply; if ((twoPlayerGame) && (!onePlayerLeft)) foilTotal += kFoilSupply; StartGliderFoilGoing(thisGlider); RedrawAllGrease(); } who->isOn = false; break; case kInvisBonus: points = masterObjects[whoLinked].theObject.data.c.points; if (SetObjectState(thisRoomNumber, masterObjects[whoLinked].objectNum, 0, whoLinked)) { PlayPrioritySound(kBonusSound, kBonusPriority); AddFlyingPoint(&bounds, points, thisGlider->hVel / 2, thisGlider->vVel / 2); thisGlider->hVel /= 4; thisGlider->vVel /= 4; theScore += points; } who->isOn = false; break; case kStar: if (SetObjectState(thisRoomNumber, masterObjects[whoLinked].objectNum, 0, whoLinked)) { PlayPrioritySound(kEnergizeSound, kEnergizePriority); RestoreFromSavedMap(thisRoomNumber, masterObjects[whoLinked].objectNum, false); AddSparkle(&bounds); StopStar(thisRoomNumber, masterObjects[whoLinked].objectNum); numStarsRemaining--; if (numStarsRemaining <= 0) FlagGameOver(); else DisplayStarsRemaining(); RedrawAllGrease(); theScore += kStarPoints; } who->isOn = false; break; case kSparkle: break; case kHelium: if (SetObjectState(thisRoomNumber, masterObjects[whoLinked].objectNum, 0, whoLinked)) { PlayPrioritySound(kEnergizeSound, kEnergizePriority); RestoreFromSavedMap(thisRoomNumber, masterObjects[whoLinked].objectNum, false); AddSparkle(&bounds); thisGlider->hVel /= 2; thisGlider->vVel /= 2; if (batteryTotal < 0) // if negative, it is already helium gas batteryTotal -= kHeliumSupply; else // if positive, it is battery power batteryTotal = -kHeliumSupply; if ((twoPlayerGame) && (!onePlayerLeft)) batteryTotal -= kHeliumSupply; QuickBatteryRefresh(false); RedrawAllGrease(); } who->isOn = false; break; case kSlider: break; } } //-------------------------------------------------------------- HandleSwitches void HandleSwitches (hotPtr who) { Rect newRect, bounds; short whoLinked, roomLinked, objectLinked, linkIndex; if (who->stillOver) return; whoLinked = who->who; // what is switch's obj. # roomLinked = masterObjects[whoLinked].roomLink; objectLinked = masterObjects[whoLinked].objectLink; linkIndex = masterObjects[whoLinked].localLink; // change state of linked obj. if (SetObjectState(roomLinked, objectLinked, masterObjects[whoLinked].theObject.data.e.type, linkIndex)) { newRect = who->bounds; QOffsetRect(&newRect, playOriginH, playOriginV); switch (masterObjects[whoLinked].theObject.what) { case kLightSwitch: PlayPrioritySound(kSwitchSound, kSwitchPriority); DrawLightSwitch(&newRect, newState); break; case kMachineSwitch: PlayPrioritySound(kSwitchSound, kSwitchPriority); DrawMachineSwitch(&newRect, newState); break; case kThermostat: PlayPrioritySound(kSwitchSound, kSwitchPriority); DrawThermostat(&newRect, newState); break; case kPowerSwitch: PlayPrioritySound(kSwitchSound, kSwitchPriority); DrawPowerSwitch(&newRect, newState); break; case kKnifeSwitch: PlayPrioritySound(kSwitchSound, kSwitchPriority); DrawKnifeSwitch(&newRect, newState); break; case kInvisSwitch: break; } CopyRectBackToWork(&newRect); AddRectToWorkRects(&newRect); if (linkIndex != -1) { switch (masterObjects[linkIndex].theObject.what) { case kRedClock: case kBlueClock: case kYellowClock: case kPaper: case kBattery: case kBands: case kFoil: case kStar: case kHelium: RestoreFromSavedMap(roomLinked, objectLinked, true); AddSparkle(&bounds); break; case kCuckoo: RestoreFromSavedMap(roomLinked, objectLinked, true); StopPendulum(roomLinked, objectLinked); break; case kGreaseRt: case kGreaseLf: SpillGrease(masterObjects[linkIndex].dynaNum, masterObjects[linkIndex].hotNum); break; case kInvisBonus: case kSlider: break; case kDeluxeTrans: break; case kSoundTrigger: PlayPrioritySound(kTriggerSound, kTriggerPriority); break; case kCeilingLight: case kLightBulb: case kTableLamp: case kHipLamp: case kDecoLamp: case kFlourescent: case kTrackLight: case kInvisLight: RedrawRoomLighting(); break; case kShredder: break; case kToaster: ToggleToaster(masterObjects[linkIndex].dynaNum); break; case kMacPlus: ToggleMacPlus(masterObjects[linkIndex].dynaNum); break; case kGuitar: PlayPrioritySound(kChordSound, kChordPriority); break; case kTV: ToggleTV(masterObjects[linkIndex].dynaNum); break; case kCoffee: ToggleCoffee(masterObjects[linkIndex].dynaNum); break; case kOutlet: ToggleOutlet(masterObjects[linkIndex].dynaNum); break; case kVCR: ToggleVCR(masterObjects[linkIndex].dynaNum); break; case kStereo: ToggleStereos(masterObjects[linkIndex].dynaNum); break; case kMicrowave: ToggleMicrowave(masterObjects[linkIndex].dynaNum); break; case kBalloon: ToggleBalloon(masterObjects[linkIndex].dynaNum); break; case kCopterLf: case kCopterRt: ToggleCopter(masterObjects[linkIndex].dynaNum); break; case kDartLf: case kDartRt: ToggleDart(masterObjects[linkIndex].dynaNum); break; case kBall: ToggleBall(masterObjects[linkIndex].dynaNum); break; case kDrip: ToggleDrip(masterObjects[linkIndex].dynaNum); break; case kFish: ToggleFish(masterObjects[linkIndex].dynaNum); break; } } } who->stillOver = true; } //-------------------------------------------------------------- HandleMicrowaveAction void HandleMicrowaveAction (hotPtr who, gliderPtr thisGlider) { short whoLinked, kills; Boolean killed; if (who->stillOver) return; killed = false; whoLinked = who->who; // what is microwave's obj. # if (masterObjects[whoLinked].theObject.data.g.state) { kills = (short)masterObjects[whoLinked].theObject.data.g.byte0; if (((kills & 0x0001) == 0x0001) && (bandsTotal > 0)) { bandsTotal = 0; killed = true; QuickBandsRefresh(false); } if (((kills & 0x0002) == 0x0002) && (batteryTotal != 0)) { batteryTotal = 0; killed = true; QuickBatteryRefresh(false); } if (((kills & 0x0004) == 0x0004) && (foilTotal > 0)) { foilTotal = 0; killed = true; StartGliderFoilLosing(thisGlider); } } if (killed) PlayPrioritySound(kMicrowavedSound, kMicrowavedPriority); } //-------------------------------------------------------------- HandleHotSpotCollision void HandleHotSpotCollision (gliderPtr thisGlider, hotPtr who, short index) { switch (who->action) { case kLiftIt: thisGlider->vDesiredVel = kFloorVentLift; break; case kDropIt: thisGlider->vDesiredVel = kCeilingVentDrop; break; case kPushItLeft: thisGlider->hDesiredVel += -kFanStrength; break; case kPushItRight: thisGlider->hDesiredVel += kFanStrength; break; case kDissolveIt: if (thisGlider->mode != kGliderFadingOut) { if ((foilTotal > 0) || (thisGlider->mode == kGliderLosingFoil)) { if (GliderHitTop(thisGlider, &(who->bounds))) { StartGliderFadingOut(thisGlider); PlayPrioritySound(kFadeOutSound, kFadeOutPriority); } else { if (foilTotal > 0) { foilTotal--; if (foilTotal <= 0) StartGliderFoilLosing(thisGlider); } } } else { StartGliderFadingOut(thisGlider); PlayPrioritySound(kFadeOutSound, kFadeOutPriority); } } break; case kRewardIt: HandleRewards(thisGlider, who); break; case kMoveItUp: if (!thisGlider->heldRight && GliderInRect(thisGlider, &who->bounds)) { if (thisGlider->mode == kGliderBurning) { thisGlider->wasMode = 0; StartGliderFadingOut(thisGlider); PlayPrioritySound(kFadeOutSound, kFadeOutPriority); } else if ((twoPlayerGame) && (!onePlayerLeft)) { if (otherPlayerEscaped == kNoOneEscaped) { if ((thisGlider->mode != kGliderGoingUp) && (thisGlider->mode != kGliderInLimbo)) { otherPlayerEscaped = kPlayerEscapingUpStairs; RefreshScoreboard(kEscapedTitleMode); StartGliderGoingUpStairs(thisGlider); } } else if (otherPlayerEscaped == kPlayerEscapedUpStairs) { if ((thisGlider->mode != kGliderGoingUp) && (thisGlider->mode != kGliderInLimbo)) { StartGliderGoingUpStairs(thisGlider); } } } else StartGliderGoingUpStairs(thisGlider); } break; case kMoveItDown: if (!thisGlider->heldLeft && GliderInRect(thisGlider, &who->bounds)) { if (thisGlider->mode == kGliderBurning) { thisGlider->wasMode = 0; StartGliderFadingOut(thisGlider); PlayPrioritySound(kFadeOutSound, kFadeOutPriority); } else if ((twoPlayerGame) && (!onePlayerLeft)) { if (otherPlayerEscaped == kNoOneEscaped) { if ((thisGlider->mode != kGliderGoingDown) && (thisGlider->mode != kGliderInLimbo)) { otherPlayerEscaped = kPlayerEscapingDownStairs; RefreshScoreboard(kEscapedTitleMode); StartGliderGoingDownStairs(thisGlider); } } else if (otherPlayerEscaped == kPlayerEscapedDownStairs) { if ((thisGlider->mode != kGliderGoingDown) && (thisGlider->mode != kGliderInLimbo)) { StartGliderGoingDownStairs(thisGlider); } } } else StartGliderGoingDownStairs(thisGlider); } break; case kSwitchIt: HandleSwitches(who); break; case kShredIt: if ((thisGlider->mode != kGliderShredding) && (GliderInRect(thisGlider, &who->bounds))) { if ((foilTotal > 0) || (thisGlider->mode == kGliderLosingFoil)) { PlayPrioritySound(kFoilHitSound, kFoilHitPriority); if (foilTotal > 0) { foilTotal--; if (foilTotal <= 0) StartGliderFoilLosing(thisGlider); } } else FlagGliderShredding(thisGlider, &who->bounds); } break; case kStrumIt: if (!who->stillOver) { PlayPrioritySound(kChordSound, kChordPriority); who->stillOver = true; } break; case kTriggerIt: case kLgTrigger: ArmTrigger(who); break; case kBurnIt: if ((thisGlider->mode != kGliderBurning) && (thisGlider->mode != kGliderFadingOut)) { if ((foilTotal > 0) || (thisGlider->mode == kGliderLosingFoil)) { thisGlider->vDesiredVel = kFloorVentLift; if (foilTotal > 0) { PlayPrioritySound(kSizzleSound, kSizzlePriority); foilTotal--; if (foilTotal <= 0) StartGliderFoilLosing(thisGlider); } } else FlagGliderBurning(thisGlider); } break; case kSlideIt: thisGlider->sliding = true; thisGlider->vVel = who->bounds.top - thisGlider->dest.bottom; break; case kTransportIt: if (thisGlider->mode == kGliderBurning) { thisGlider->wasMode = 0; StartGliderFadingOut(thisGlider); PlayPrioritySound(kFadeOutSound, kFadeOutPriority); } else if ((GliderInRect(thisGlider, &who->bounds)) && (thisGlider->mode != kGliderTransporting) && (thisGlider->mode != kGliderFadingOut)) { if ((twoPlayerGame) && (!onePlayerLeft)) { if (otherPlayerEscaped == kNoOneEscaped) { if (thisGlider->mode != kGliderInLimbo) { activeRectEscaped = index; StartGliderTransporting(thisGlider, who); } } else if (otherPlayerEscaped == kPlayerTransportedOut) { if ((thisGlider->mode != kGliderInLimbo) && (activeRectEscaped == index)) { StartGliderTransporting(thisGlider, who); } } } else StartGliderTransporting(thisGlider, who); } break; case kIgnoreLeftWall: thisGlider->ignoreLeft = true; break; case kIgnoreRightWall: thisGlider->ignoreRight = true; break; case kMailItLeft: // mailbox open to right if (thisGlider->mode == kGliderBurning) { thisGlider->wasMode = 0; StartGliderFadingOut(thisGlider); PlayPrioritySound(kFadeOutSound, kFadeOutPriority); } else if ((GliderInRect(thisGlider, &who->bounds)) && (thisGlider->mode != kGliderMailOutRight) && (thisGlider->mode != kGliderMailInLeft) && (thisGlider->mode != kGliderFadingOut) && (((thisGlider->facing == kFaceRight) && (!thisGlider->tipped)) || ((thisGlider->facing == kFaceLeft) && (thisGlider->tipped)))) { if ((twoPlayerGame) && (!onePlayerLeft)) // two gliders to handle { if (otherPlayerEscaped == kNoOneEscaped) // other glider in room { if (thisGlider->mode != kGliderInLimbo) // this glider is active { activeRectEscaped = index; StartGliderMailingIn(thisGlider, &who->bounds, who); thisGlider->mode = kGliderMailInLeft; } } else if (otherPlayerEscaped == kPlayerMailedOut) { // other glider left here if ((thisGlider->mode != kGliderInLimbo) && (activeRectEscaped == index)) { // []_ <--G StartGliderMailingIn(thisGlider, &who->bounds, who); thisGlider->mode = kGliderMailInLeft; } } } else // only 1 glider in game { StartGliderMailingIn(thisGlider, &who->bounds, who); thisGlider->mode = kGliderMailInLeft; } } break; case kMailItRight: // mailbox open to left if (thisGlider->mode == kGliderBurning) { thisGlider->wasMode = 0; StartGliderFadingOut(thisGlider); PlayPrioritySound(kFadeOutSound, kFadeOutPriority); } else if ((GliderInRect(thisGlider, &who->bounds)) && (thisGlider->mode != kGliderMailOutLeft) && (thisGlider->mode != kGliderMailInRight) && (thisGlider->mode != kGliderFadingOut) && (((thisGlider->facing == kFaceRight) && (thisGlider->tipped)) || ((thisGlider->facing == kFaceLeft) && (!thisGlider->tipped)))) { if ((twoPlayerGame) && (!onePlayerLeft)) { if (otherPlayerEscaped == kNoOneEscaped) { if (thisGlider->mode != kGliderInLimbo) { activeRectEscaped = index; StartGliderMailingIn(thisGlider, &who->bounds, who); thisGlider->mode = kGliderMailInRight; } } else if (otherPlayerEscaped == kPlayerMailedOut) { if ((thisGlider->mode != kGliderInLimbo) && (activeRectEscaped == index)) { StartGliderMailingIn(thisGlider, &who->bounds, who); thisGlider->mode = kGliderMailInRight; } } } else { StartGliderMailingIn(thisGlider, &who->bounds, who); thisGlider->mode = kGliderMailInRight; } } break; case kDuctItDown: if (thisGlider->mode == kGliderBurning) { thisGlider->wasMode = 0; StartGliderFadingOut(thisGlider); PlayPrioritySound(kFadeOutSound, kFadeOutPriority); } else if ((GliderInRect(thisGlider, &who->bounds)) && (thisGlider->mode != kGliderDuctingDown) && (thisGlider->mode != kGliderFadingOut)) { if ((twoPlayerGame) && (!onePlayerLeft)) { if (otherPlayerEscaped == kNoOneEscaped) { if (thisGlider->mode != kGliderInLimbo) { activeRectEscaped = index; StartGliderDuctingDown(thisGlider, &who->bounds, who); } } else if (otherPlayerEscaped == kPlayerDuckedOut) { if ((thisGlider->mode != kGliderInLimbo) && (activeRectEscaped == index)) StartGliderDuctingDown(thisGlider, &who->bounds, who); } } else StartGliderDuctingDown(thisGlider, &who->bounds, who); } break; case kDuctItUp: if (thisGlider->mode == kGliderBurning) { thisGlider->wasMode = 0; StartGliderFadingOut(thisGlider); PlayPrioritySound(kFadeOutSound, kFadeOutPriority); } else if ((GliderInRect(thisGlider, &who->bounds)) && (thisGlider->mode != kGliderDuctingUp) && (thisGlider->mode != kGliderDuctingIn) && (thisGlider->mode != kGliderFadingOut) && (!who->stillOver)) { if ((twoPlayerGame) && (!onePlayerLeft)) { if (otherPlayerEscaped == kNoOneEscaped) { if (thisGlider->mode != kGliderInLimbo) { activeRectEscaped = index; StartGliderDuctingUp(thisGlider, &who->bounds, who); } } else if (otherPlayerEscaped == kPlayerDuckedOut) { if ((thisGlider->mode != kGliderInLimbo) && (activeRectEscaped == index)) StartGliderDuctingUp(thisGlider, &who->bounds, who); } } else { StartGliderDuctingUp(thisGlider, &who->bounds, who); who->stillOver = true; } } break; case kMicrowaveIt: if (GliderInRect(thisGlider, &who->bounds)) HandleMicrowaveAction(who, thisGlider); break; case kIgnoreGround: thisGlider->ignoreGround = true; break; case kBounceIt: BounceGlider(thisGlider, &who->bounds); break; case kChimeIt: if (!who->stillOver) { StrikeChime(); who->stillOver = true; } break; case kWebIt: if ((GliderInRect(thisGlider, &who->bounds)) && (thisGlider->mode != kGliderBurning)) WebGlider(thisGlider, &who->bounds); else if ((thisGlider->mode == kGliderBurning) && (GliderInRect(thisGlider, &who->bounds))) { thisGlider->wasMode = 0; StartGliderFadingOut(thisGlider); PlayPrioritySound(kFadeOutSound, kFadeOutPriority); } break; case kSoundIt: if (!who->stillOver) { PlayPrioritySound(kTriggerSound, kTriggerPriority); who->stillOver = true; } break; } } //-------------------------------------------------------------- CheckForHotSpots void CheckForHotSpots (void) { short i; Boolean hitObject; for (i = 0; i < nHotSpots; i++) { if (hotSpots[i].isOn) { if (twoPlayerGame) { hitObject = false; if (SectGlider(&theGlider, &hotSpots[i].bounds, hotSpots[i].doScrutinize)) { if (onePlayerLeft) { if (playerDead == kPlayer2) { HandleHotSpotCollision(&theGlider, &hotSpots[i], i); hitObject = true; } } else { HandleHotSpotCollision(&theGlider, &hotSpots[i], i); hitObject = true; } } if (SectGlider(&theGlider2, &hotSpots[i].bounds, hotSpots[i].doScrutinize)) { if (onePlayerLeft) { if (playerDead == kPlayer1) { HandleHotSpotCollision(&theGlider2, &hotSpots[i], i); hitObject = true; } } else { HandleHotSpotCollision(&theGlider2, &hotSpots[i], i); hitObject = true; } } if (!hitObject) hotSpots[i].stillOver = false; } else { if (SectGlider(&theGlider, &hotSpots[i].bounds, hotSpots[i].doScrutinize)) HandleHotSpotCollision(&theGlider, &hotSpots[i], i); else hotSpots[i].stillOver = false; } } } } //-------------------------------------------------------------- HandleInteraction void HandleInteraction (void) { CheckForHotSpots(); if (twoPlayerGame) { if (onePlayerLeft) { if (playerDead == kPlayer1) CheckGliderInRoom(&theGlider2); else CheckGliderInRoom(&theGlider); } else { CheckGliderInRoom(&theGlider); CheckGliderInRoom(&theGlider2); } } else CheckGliderInRoom(&theGlider); } //-------------------------------------------------------------- FlagStillOvers void FlagStillOvers (gliderPtr thisGlider) { short i; for (i = 0; i < nHotSpots; i++) { if (hotSpots[i].isOn) { if (SectGlider(thisGlider, &hotSpots[i].bounds, hotSpots[i].doScrutinize)) hotSpots[i].stillOver = true; else hotSpots[i].stillOver = false; } else hotSpots[i].stillOver = false; } } //-------------------------------------------------------------- WebGlider void WebGlider (gliderPtr thisGlider, Rect *webBounds) { #define kKillWebbedGlider 150 short hDist, vDist; if ((thisGlider->mode == kGliderBurning) && (GliderInRect(thisGlider, webBounds))) { thisGlider->wasMode = 0; StartGliderFadingOut(thisGlider); PlayPrioritySound(kFadeOutSound, kFadeOutPriority); return; } hDist = ((webBounds->right - thisGlider->dest.right) + (webBounds->left - thisGlider->dest.left)) >> 3; vDist = ((webBounds->bottom - thisGlider->dest.bottom) + (webBounds->top - thisGlider->dest.top)) >> 3; if (thisGlider->hDesiredVel != 0) { if (evenFrame) { thisGlider->hVel = hDist; thisGlider->vVel = vDist; PlayPrioritySound(kWebTwangSound, kWebTwangPriority); } } else { thisGlider->hDesiredVel = 0; thisGlider->vDesiredVel = 0; } thisGlider->wasMode++; if (thisGlider->wasMode >= kKillWebbedGlider) { thisGlider->wasMode = 0; StartGliderFadingOut(thisGlider); PlayPrioritySound(kFadeOutSound, kFadeOutPriority); } } \ No newline at end of file diff --git a/Sources/InterfaceInit.c b/Sources/InterfaceInit.c deleted file mode 100755 index 13bd6bf..0000000 --- a/Sources/InterfaceInit.c +++ /dev/null @@ -1 +0,0 @@ - //============================================================================ //---------------------------------------------------------------------------- // InterfaceInit.c //---------------------------------------------------------------------------- //============================================================================ #include "Externs.h" #include "Environ.h" #include "Map.h" #include "RectUtils.h" #include "Tools.h" #define kHandCursorID 128 #define kVertCursorID 129 #define kHoriCursorID 130 #define kDiagCursorID 131 extern RgnHandle mirrorRgn; extern WindowPtr mapWindow, toolsWindow, linkWindow; extern WindowPtr menuWindow; extern Rect shieldRect, boardSrcRect, localRoomsDest[]; extern CursHandle handCursorH, beamCursorH, vertCursorH, horiCursorH; extern CursHandle diagCursorH; extern Cursor handCursor, beamCursor, vertCursor, horiCursor; extern Cursor diagCursor; extern MenuHandle appleMenu, gameMenu, optionsMenu, houseMenu; extern Point shieldPt; extern long incrementModeTime; extern UInt32 doubleTime; extern short fadeInSequence[], idleMode; extern short toolSelected, lastBackground, wasFlower, numExtraHouses; extern short houseResFork, lastHighScore, maxFiles, willMaxFiles; extern Boolean quitting, playing, fadeGraysOut; extern Boolean houseOpen, newRoomNow, evenFrame, menusUp, demoGoing; extern Boolean twoPlayerGame, paused, hasMirror, splashDrawn; //============================================================== Functions //-------------------------------------------------------------- InitializeMenus // The menus are loaded from disk and the menu bar set up and drawn. void InitializeMenus (void) { appleMenu = GetMenu(kAppleMenuID); if (appleMenu == nil) RedAlert(kErrFailedResourceLoad); AppendResMenu(appleMenu, 'DRVR'); InsertMenu(appleMenu, 0); gameMenu = GetMenu(kGameMenuID); if (gameMenu == nil) RedAlert(kErrFailedResourceLoad); InsertMenu(gameMenu, 0); optionsMenu = GetMenu(kOptionsMenuID); if (optionsMenu == nil) RedAlert(kErrFailedResourceLoad); InsertMenu(optionsMenu, 0); menusUp = true; DrawMenuBar(); houseMenu = GetMenu(kHouseMenuID); if (houseMenu == nil) RedAlert(kErrFailedResourceLoad); UpdateMenus(false); } //-------------------------------------------------------------- GetExtraCursors // Extra cursors (custom cursors) like the "hand" and various roomÉ // editing cursors are loaded up. void GetExtraCursors (void) { handCursorH = GetCursor(kHandCursorID); if (handCursorH == nil) RedAlert(kErrFailedResourceLoad); HLock((Handle)handCursorH); handCursor = **handCursorH; beamCursorH = GetCursor(iBeamCursor); if (beamCursorH == nil) RedAlert(kErrFailedResourceLoad); HLock((Handle)beamCursorH); beamCursor = **beamCursorH; vertCursorH = GetCursor(kVertCursorID); if (vertCursorH == nil) RedAlert(kErrFailedResourceLoad); HLock((Handle)vertCursorH); vertCursor = **vertCursorH; horiCursorH = GetCursor(kHoriCursorID); if (horiCursorH == nil) RedAlert(kErrFailedResourceLoad); HLock((Handle)horiCursorH); horiCursor = **horiCursorH; diagCursorH = GetCursor(kDiagCursorID); if (diagCursorH == nil) RedAlert(kErrFailedResourceLoad); HLock((Handle)diagCursorH); diagCursor = **diagCursorH; } //-------------------------------------------------------------- VariableInit // All the simple interface variables are intialized here - Booleans,É // shorts, a few Rects, etc. void VariableInit (void) { short i; shieldPt.h = 0; shieldPt.v = 0; shieldRect = thisMac.screen; menusUp = false; quitting = false; houseOpen = false; newRoomNow = false; playing = false; evenFrame = false; if (thisMac.isDepth == 8) fadeGraysOut = true; else fadeGraysOut = false; twoPlayerGame = false; paused = false; hasMirror = false; demoGoing = false; // scrapIsARoom = true; splashDrawn = false; #ifndef COMPILEDEMO // SeeIfValidScrapAvailable(false); #endif theGlider.which = kPlayer1; theGlider2.leftKey = kControlKeyMap; theGlider2.rightKey = kCommandKeyMap; theGlider2.battKey = kOptionKeyMap; theGlider2.bandKey = kShiftKeyMap; theGlider2.which = kPlayer2; theMode = kSplashMode; thisRoomNumber = 0; previousRoom = -1; toolSelected = kSelectTool; houseResFork = -1; lastBackground = kBaseBackgroundID; wasFlower = RandomInt(kNumFlowers); lastHighScore = -1; idleMode = kIdleSplashMode; incrementModeTime = TickCount() + kIdleSplashTicks; willMaxFiles = maxFiles; numExtraHouses = 0; fadeInSequence[0] = 4; // 4 fadeInSequence[1] = 5; fadeInSequence[2] = 6; fadeInSequence[3] = 7; fadeInSequence[4] = 5; // 5 fadeInSequence[5] = 6; fadeInSequence[6] = 7; fadeInSequence[7] = 8; fadeInSequence[8] = 6; // 6 fadeInSequence[9] = 7; fadeInSequence[10] = 8; fadeInSequence[11] = 9; fadeInSequence[12] = 7; // 7 fadeInSequence[13] = 8; fadeInSequence[14] = 9; fadeInSequence[15] = 10; doubleTime = GetDblTime(); mirrorRgn = nil; mainWindow = nil; mapWindow = nil; toolsWindow = nil; linkWindow = nil; coordWindow = nil; toolSrcMap = nil; nailSrcMap = nil; menuWindow = nil; houseRect = thisMac.screen; houseRect.bottom -= kScoreboardTall; if (houseRect.right > kMaxViewWidth) houseRect.right = kMaxViewWidth; if (houseRect.bottom > kMaxViewHeight) houseRect.bottom = kMaxViewHeight; playOriginH = (RectWide(&thisMac.screen) - kRoomWide) / 2; playOriginV = (RectTall(&thisMac.screen) - kTileHigh) / 2; for (i = 0; i < 9; i++) { QSetRect(&localRoomsDest[i], 0, 0, kRoomWide, kTileHigh); QOffsetRect(&localRoomsDest[i], playOriginH, playOriginV); } QOffsetRect(&localRoomsDest[kNorthRoom], 0, -kVertLocalOffset); QOffsetRect(&localRoomsDest[kNorthEastRoom], kRoomWide, -kVertLocalOffset); QOffsetRect(&localRoomsDest[kEastRoom], kRoomWide, 0); QOffsetRect(&localRoomsDest[kSouthEastRoom], kRoomWide, kVertLocalOffset); QOffsetRect(&localRoomsDest[kSouthRoom], 0, kVertLocalOffset); QOffsetRect(&localRoomsDest[kSouthWestRoom], -kRoomWide, kVertLocalOffset); QOffsetRect(&localRoomsDest[kWestRoom], -kRoomWide, 0); QOffsetRect(&localRoomsDest[kNorthWestRoom], -kRoomWide, -kVertLocalOffset); } \ No newline at end of file diff --git a/Sources/Link.c b/Sources/Link.c deleted file mode 100755 index de0d209..0000000 --- a/Sources/Link.c +++ /dev/null @@ -1 +0,0 @@ - //============================================================================ //---------------------------------------------------------------------------- // Link.c //---------------------------------------------------------------------------- //============================================================================ #include "Externs.h" #include "Environ.h" #include "ObjectEdit.h" #include "RectUtils.h" #define kLinkControlID 130 #define kUnlinkControlID 131 void DoLink (void); void DoUnlink (void); Rect linkWindowRect; ControlHandle linkControl, unlinkControl; WindowPtr linkWindow; short isLinkH, isLinkV, linkRoom, linkType; Byte linkObject; Boolean isLinkOpen, linkerIsSwitch; //============================================================== Functions //-------------------------------------------------------------- MergeFloorSuite short MergeFloorSuite (short floor, short suite) { return ((suite * 100) + floor); } //-------------------------------------------------------------- ExtractFloorSuite void ExtractFloorSuite (short combo, short *floor, short *suite) { if ((*thisHouse)->version < 0x0200) // old floor/suite combo { *floor = (combo / 100) - kNumUndergroundFloors; *suite = combo % 100; } else { *suite = combo / 100; *floor = (combo % 100) - kNumUndergroundFloors; } } //-------------------------------------------------------------- UpdateLinkControl void UpdateLinkControl (void) { #ifndef COMPILEDEMO if (linkWindow == nil) return; switch (linkType) { case kSwitchLinkOnly: if (objActive == kNoObjectSelected) HiliteControl(linkControl, kControlInactive); else switch (thisRoom->objects[objActive].what) { case kFloorVent: case kCeilingVent: case kFloorBlower: case kCeilingBlower: case kSewerGrate: case kLeftFan: case kRightFan: case kInvisBlower: case kGrecoVent: case kSewerBlower: case kLiftArea: case kRedClock: case kBlueClock: case kYellowClock: case kCuckoo: case kPaper: case kBattery: case kBands: case kFoil: case kInvisBonus: case kHelium: case kDeluxeTrans: case kCeilingLight: case kLightBulb: case kTableLamp: case kHipLamp: case kDecoLamp: case kFlourescent: case kTrackLight: case kInvisLight: case kShredder: case kToaster: case kMacPlus: case kTV: case kCoffee: case kOutlet: case kVCR: case kStereo: case kMicrowave: case kBalloon: case kCopterLf: case kCopterRt: case kDartLf: case kDartRt: case kBall: case kDrip: case kFish: HiliteControl(linkControl, kControlActive); break; default: HiliteControl(linkControl, kControlInactive); break; } break; case kTriggerLinkOnly: if (objActive == kNoObjectSelected) HiliteControl(linkControl, kControlInactive); else switch (thisRoom->objects[objActive].what) { case kGreaseRt: case kGreaseLf: case kToaster: case kGuitar: case kCoffee: case kOutlet: case kBalloon: case kCopterLf: case kCopterRt: case kDartLf: case kDartRt: case kDrip: case kFish: HiliteControl(linkControl, kControlActive); break; case kLightSwitch: case kMachineSwitch: case kThermostat: case kPowerSwitch: case kKnifeSwitch: case kInvisSwitch: if (linkRoom == thisRoomNumber) HiliteControl(linkControl, kControlActive); break; default: HiliteControl(linkControl, kControlInactive); break; } break; case kTransportLinkOnly: if (objActive == kNoObjectSelected) HiliteControl(linkControl, kControlInactive); else switch (thisRoom->objects[objActive].what) { case kMailboxLf: case kMailboxRt: case kCeilingTrans: case kInvisTrans: case kDeluxeTrans: case kInvisLight: case kOzma: case kMirror: case kFireplace: case kWallWindow: case kCalendar: case kBulletin: case kCloud: HiliteControl(linkControl, kControlActive); break; default: HiliteControl(linkControl, kControlInactive); break; } break; } #endif } //-------------------------------------------------------------- UpdateLinkWindow void UpdateLinkWindow (void) { #ifndef COMPILEDEMO if (linkWindow == nil) return; SetPortWindowPort(linkWindow); DrawControls(linkWindow); UpdateLinkControl(); #endif } //-------------------------------------------------------------- OpenLinkWindow void OpenLinkWindow (void) { #ifndef COMPILEDEMO Rect src, dest; Point globalMouse; if (linkWindow == nil) { QSetRect(&linkWindowRect, 0, 0, 129, 30); if (thisMac.hasColor) linkWindow = NewCWindow(nil, &linkWindowRect, "\pLink", false, kWindoidWDEF, kPutInFront, true, 0L); else linkWindow = NewWindow(nil, &linkWindowRect, "\pLink", false, kWindoidWDEF, kPutInFront, true, 0L); MoveWindow(linkWindow, isLinkH, isLinkV, true); globalMouse = MyGetGlobalMouse(); QSetRect(&src, 0, 0, 1, 1); QOffsetRect(&src, globalMouse.h, globalMouse.v); GetWindowRect(linkWindow, &dest); BringToFront(linkWindow); ShowHide(linkWindow, true); // FlagWindowFloating(linkWindow); TEMP - use flaoting windows HiliteAllWindows(); linkControl = GetNewControl(kLinkControlID, linkWindow); if (linkControl == nil) RedAlert(kErrFailedResourceLoad); unlinkControl = GetNewControl(kUnlinkControlID, linkWindow); if (unlinkControl == nil) RedAlert(kErrFailedResourceLoad); linkRoom = -1; linkObject = 255; isLinkOpen = true; } #endif } //-------------------------------------------------------------- CloseLinkWindow void CloseLinkWindow (void) { #ifndef COMPILEDEMO if (linkWindow != nil) DisposeWindow(linkWindow); linkWindow = nil; isLinkOpen = false; #endif } //-------------------------------------------------------------- DoLink #ifndef COMPILEDEMO void DoLink (void) { short floor, suite; char wasState; if (GetRoomFloorSuite(thisRoomNumber, &floor, &suite)) { floor += kNumUndergroundFloors; if (thisRoomNumber == linkRoom) { if (linkerIsSwitch) { thisRoom->objects[linkObject].data.e.where = MergeFloorSuite(floor, suite); thisRoom->objects[linkObject].data.e.who = objActive; } else { thisRoom->objects[linkObject].data.d.where = MergeFloorSuite(floor, suite); thisRoom->objects[linkObject].data.d.who = objActive; } } else { wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); if (linkerIsSwitch) { (*thisHouse)->rooms[linkRoom].objects[linkObject].data.e.where = MergeFloorSuite(floor, suite); (*thisHouse)->rooms[linkRoom].objects[linkObject].data.e.who = objActive; } else // linker is transport { (*thisHouse)->rooms[linkRoom].objects[linkObject].data.d.where = MergeFloorSuite(floor, suite); (*thisHouse)->rooms[linkRoom].objects[linkObject].data.d.who = objActive; } HSetState((Handle)thisHouse, wasState); } fileDirty = true; UpdateMenus(false); CloseLinkWindow(); } } #endif //-------------------------------------------------------------- DoUnlink #ifndef COMPILEDEMO void DoUnlink (void) { char wasState; if (thisRoomNumber == linkRoom) { if (linkerIsSwitch) { thisRoom->objects[linkObject].data.e.where = -1; thisRoom->objects[linkObject].data.e.who = 255; } else { thisRoom->objects[linkObject].data.d.where = -1; thisRoom->objects[linkObject].data.d.who = 255; } } else { wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); if (linkerIsSwitch) { (*thisHouse)->rooms[linkRoom].objects[linkObject].data.e.where = -1; (*thisHouse)->rooms[linkRoom].objects[linkObject].data.e.who = 255; } else { (*thisHouse)->rooms[linkRoom].objects[linkObject].data.d.where = -1; (*thisHouse)->rooms[linkRoom].objects[linkObject].data.d.who = 255; } HSetState((Handle)thisHouse, wasState); } fileDirty = true; UpdateMenus(false); CloseLinkWindow(); } #endif //-------------------------------------------------------------- HandleLinkClick void HandleLinkClick (Point wherePt) { #ifndef COMPILEDEMO ControlHandle theControl; short part; if (linkWindow == nil) return; SetPortWindowPort(linkWindow); GlobalToLocal(&wherePt); part = FindControl(wherePt, linkWindow, &theControl); if ((theControl != nil) && (part != 0)) { part = TrackControl(theControl, wherePt, nil); if (part != 0) { if (theControl == linkControl) DoLink(); else if (theControl == unlinkControl) DoUnlink(); if (thisRoomNumber == linkRoom) CopyThisRoomToRoom(); GenerateRetroLinks(); } } #endif } \ No newline at end of file diff --git a/Sources/Main.c b/Sources/Main.c deleted file mode 100755 index c41f189..0000000 --- a/Sources/Main.c +++ /dev/null @@ -1 +0,0 @@ -//============================================================================ //---------------------------------------------------------------------------- // Glider PRO 1.0.4 // by john calhoun //---------------------------------------------------------------------------- //============================================================================ #include #include #include "Externs.h" #include "Environ.h" #include "House.h" #define kPrefsVersion 0x0034 void ReadInPrefs (void); void WriteOutPrefs (void); void main (void); short isVolume, wasVolume; short isDepthPref, dataResFile, numSMWarnings; Boolean quitting, doZooms, quickerTransitions, isUseSecondScreen; extern Str31 highBanner; extern Str15 leftName, rightName, batteryName, bandName; extern Str15 highName; //extern long encryptedNumber; extern short maxFiles, numNeighbors, houseRefNum, willMaxFiles; extern short isEditH, isEditV, isMapH, isMapV; extern short isToolsH, isToolsV, isCoordH, isCoordV; extern short isLinkH, isLinkV, toolMode, mapLeftRoom, mapTopRoom; extern short mapRoomsWide, mapRoomsHigh, wasFloor, wasSuite; extern Boolean isMusicOn, isSoundOn, isPlayMusicIdle, isHouseChecks; extern Boolean houseOpen, isDoColorFade, isEscPauseKey; extern Boolean autoRoomEdit, doAutoDemo, doBackground; extern Boolean isMapOpen, isToolsOpen, isCoordOpen; extern Boolean doPrettyMap, doBitchDialogs; //extern Boolean didValidation; //============================================================== Functions //-------------------------------------------------------------- ReadInPrefs // Called only once when game launches - reads in the preferences savedÉ // from the last time Glider PRO was launched. If no prefs are found,É // it assigns default settings. void ReadInPrefs (void) { prefsInfo thePrefs; if (LoadPrefs(&thePrefs, kPrefsVersion)) { #ifdef COMPILEDEMO PasStringCopy("\pDemo House", thisHouseName); #else PasStringCopy(thePrefs.wasDefaultName, thisHouseName); #endif PasStringCopy(thePrefs.wasLeftName, leftName); PasStringCopy(thePrefs.wasRightName, rightName); PasStringCopy(thePrefs.wasBattName, batteryName); PasStringCopy(thePrefs.wasBandName, bandName); PasStringCopy(thePrefs.wasHighName, highName); PasStringCopy(thePrefs.wasHighBanner, highBanner); theGlider.leftKey = thePrefs.wasLeftMap; theGlider.rightKey = thePrefs.wasRightMap; theGlider.battKey = thePrefs.wasBattMap; theGlider.bandKey = thePrefs.wasBandMap; #ifndef COMPILEDEMO #ifndef COMPILENOCP encryptedNumber = thePrefs.encrypted; #endif // COMPILENOCP #endif // COMPILEDEMO isVolume = thePrefs.wasVolume; isDepthPref = thePrefs.wasDepthPref; isMusicOn = thePrefs.wasMusicOn; doZooms = thePrefs.wasZooms; quickerTransitions = thePrefs.wasQuickTrans; isDoColorFade = thePrefs.wasDoColorFade; isPlayMusicIdle = thePrefs.wasIdleMusic; isPlayMusicGame = thePrefs.wasGameMusic; isHouseChecks = thePrefs.wasHouseChecks; maxFiles = thePrefs.wasMaxFiles; if ((maxFiles < 12) || (maxFiles > 500)) maxFiles = 12; isEditH = thePrefs.wasEditH; isEditV = thePrefs.wasEditV; isMapH = thePrefs.wasMapH; isMapV = thePrefs.wasMapV; mapRoomsWide = thePrefs.wasMapWide; mapRoomsHigh = thePrefs.wasMapHigh; isToolsH = thePrefs.wasToolsH; isToolsV = thePrefs.wasToolsV; isLinkH = thePrefs.wasLinkH; isLinkV = thePrefs.wasLinkV; isCoordH = thePrefs.wasCoordH; isCoordV = thePrefs.wasCoordV; mapLeftRoom = thePrefs.isMapLeft; mapTopRoom = thePrefs.isMapTop; wasFloor = thePrefs.wasFloor; wasSuite = thePrefs.wasSuite; numSMWarnings = thePrefs.smWarnings; autoRoomEdit = thePrefs.wasAutoEdit; isMapOpen = thePrefs.wasMapOpen; isToolsOpen = thePrefs.wasToolsOpen; isCoordOpen = thePrefs.wasCoordOpen; numNeighbors = thePrefs.wasNumNeighbors; toolMode = thePrefs.wasToolGroup; doAutoDemo = thePrefs.wasDoAutoDemo; isEscPauseKey = thePrefs.wasEscPauseKey; isUseSecondScreen = thePrefs.wasScreen2; if (thisMac.numScreens < 2) isUseSecondScreen = false; doBackground = thePrefs.wasDoBackground; doPrettyMap = thePrefs.wasPrettyMap; doBitchDialogs = thePrefs.wasBitchDialogs; } else { #ifdef COMPILEDEMO PasStringCopy("\pDemo House", thisHouseName); #else PasStringCopy("\pSlumberland", thisHouseName); #endif PasStringCopy("\plf arrow", leftName); PasStringCopy("\prt arrow", rightName); PasStringCopy("\pdn arrow", batteryName); PasStringCopy("\pup arrow", bandName); PasStringCopy("\pYour Name", highName); PasStringCopy("\pYour Message Here", highBanner); theGlider.leftKey = kLeftArrowKeyMap; theGlider.rightKey = kRightArrowKeyMap; theGlider.battKey = kDownArrowKeyMap; theGlider.bandKey = kUpArrowKeyMap; UnivGetSoundVolume(&isVolume, thisMac.hasSM3); if (isVolume < 1) isVolume = 1; else if (isVolume > 3) isVolume = 3; isDepthPref = kSwitchIfNeeded; isSoundOn = true; isMusicOn = true; isPlayMusicIdle = true; isPlayMusicGame = true; isHouseChecks = true; doZooms = true; quickerTransitions = false; numNeighbors = 9; isDoColorFade = true; maxFiles = 48; willMaxFiles = 48; isEditH = 3; isEditV = 41; isMapH = 3; // isMapV = qd.screenBits.bounds.bottom - 100; isMapV = 100; mapRoomsWide = 15; mapRoomsHigh = 4; // isToolsH = qd.screenBits.bounds.right - 120; isToolsH = 100; isToolsV = 35; isLinkH = 50; isLinkV = 80; // isCoordH = qd.screenBits.bounds.right - 55; isCoordH = 50; isCoordV = 204; mapLeftRoom = 60; mapTopRoom = 50; wasFloor = 0; wasSuite = 0; numSMWarnings = 0; autoRoomEdit = true; isMapOpen = true; isToolsOpen = true; isCoordOpen = false; toolMode = kBlowerMode; doAutoDemo = true; isEscPauseKey = false; isUseSecondScreen = false; doBackground = false; doPrettyMap = false; doBitchDialogs = true; } if ((numNeighbors > 1) && (thisMac.screen.right <= 512)) numNeighbors = 1; UnivGetSoundVolume(&wasVolume, thisMac.hasSM3); UnivSetSoundVolume(isVolume, thisMac.hasSM3); if (isVolume == 0) isSoundOn = false; else isSoundOn = true; } //-------------------------------------------------------------- WriteOutPrefs // Called just before Glider PRO quits. This function writes outÉ // the user preferences to disk. void WriteOutPrefs (void) { prefsInfo thePrefs; UnivGetSoundVolume(&isVolume, thisMac.hasSM3); #ifdef COMPILEDEMO PasStringCopy("\pDemo House", thePrefs.wasDefaultName); #else PasStringCopy(thisHouseName, thePrefs.wasDefaultName); #endif PasStringCopy(leftName, thePrefs.wasLeftName); PasStringCopy(rightName, thePrefs.wasRightName); PasStringCopy(batteryName, thePrefs.wasBattName); PasStringCopy(bandName, thePrefs.wasBandName); PasStringCopy(highName, thePrefs.wasHighName); PasStringCopy(highBanner, thePrefs.wasHighBanner); thePrefs.wasLeftMap = theGlider.leftKey; thePrefs.wasRightMap = theGlider.rightKey; thePrefs.wasBattMap = theGlider.battKey; thePrefs.wasBandMap = theGlider.bandKey; #ifndef COMPILEDEMO #ifndef COMPILENOCP thePrefs.encrypted = encryptedNumber; thePrefs.fakeLong = Random(); #endif // COMPILENOCP #endif // COMPILEDEMO thePrefs.wasVolume = isVolume; thePrefs.wasDepthPref = isDepthPref; thePrefs.wasMusicOn = isMusicOn; thePrefs.wasZooms = doZooms; thePrefs.wasQuickTrans = quickerTransitions; thePrefs.wasDoColorFade = isDoColorFade; thePrefs.wasIdleMusic = isPlayMusicIdle; thePrefs.wasGameMusic = isPlayMusicGame; thePrefs.wasHouseChecks = isHouseChecks; thePrefs.wasMaxFiles = willMaxFiles; thePrefs.wasEditH = isEditH; thePrefs.wasEditV = isEditV; thePrefs.wasMapH = isMapH; thePrefs.wasMapV = isMapV; thePrefs.wasMapWide = mapRoomsWide; thePrefs.wasMapHigh = mapRoomsHigh; thePrefs.wasToolsH = isToolsH; thePrefs.wasToolsV = isToolsV; thePrefs.isMapLeft = mapLeftRoom; thePrefs.isMapTop = mapTopRoom; thePrefs.wasFloor = wasFloor; thePrefs.wasSuite = wasSuite; thePrefs.wasLinkH = isLinkH; thePrefs.wasLinkV = isLinkV; thePrefs.wasCoordH = isCoordH; thePrefs.wasCoordV = isCoordV; thePrefs.smWarnings = numSMWarnings; thePrefs.wasAutoEdit = autoRoomEdit; thePrefs.wasMapOpen = isMapOpen; thePrefs.wasToolsOpen = isToolsOpen; thePrefs.wasCoordOpen = isCoordOpen; thePrefs.wasNumNeighbors = numNeighbors; thePrefs.wasToolGroup = toolMode; thePrefs.wasDoAutoDemo = doAutoDemo; thePrefs.wasEscPauseKey = isEscPauseKey; thePrefs.wasScreen2 = isUseSecondScreen; thePrefs.wasDoBackground = doBackground; thePrefs.wasPrettyMap = doPrettyMap; thePrefs.wasBitchDialogs = doBitchDialogs; if (!SavePrefs(&thePrefs, kPrefsVersion)) SysBeep(1); UnivSetSoundVolume(wasVolume, thisMac.hasSM3); } //-------------------------------------------------------------- main // Here is main(). The first function called when Glider PRO comes up. void main (void) { // long wasSeed; long theErr; OSErr fileErr; Boolean whoCares, copyGood; ToolBoxInit(); CheckOurEnvirons(); if (!thisMac.hasColor) RedAlert(kErrNeedColorQD); if (!thisMac.hasSystem7) RedAlert(kErrNeedSystem7); if (thisMac.numScreens == 0) RedAlert(kErrNeed16Or256Colors); // dataResFile = OpenResFile("\pMermaid"); SetUpAppleEvents(); LoadCursors(); ReadInPrefs(); #if defined COMPILEDEMO copyGood = true; #elif defined COMPILENOCP // didValidation = false; copyGood = true; #else didValidation = false; copyGood = ValidInstallation(true); if (!copyGood) encryptedNumber = 0L; else if (didValidation) WriteOutPrefs(); SpinCursor(3); #endif // if ((thisMac.numScreens > 1) && (isUseSecondScreen)) // ReflectSecondMonitorEnvirons(false, true, true); HandleDepthSwitching(); VariableInit(); SpinCursor(2); CheckMemorySize(); GetExtraCursors(); SpinCursor(2); InitMarquee(); CreatePointers(); SpinCursor(2); InitSrcRects(); CreateOffscreens(); SpinCursor(2); OpenMainWindow(); if (thisMac.hasQT) { theErr = EnterMovies(); if (theErr != noErr) thisMac.hasQT = false; } InitSound(); SpinCursor(2); InitMusic(); SpinCursor(2); BuildHouseList(); if (OpenHouse()) whoCares = ReadHouse(); PlayPrioritySound(kBirdSound, kBirdPriority); DelayTicks(6); InitializeMenus(); InitCursor(); #if BUILD_ARCADE_VERSION // HideMenuBarOld(); #endif // if ((isDoColorFade) && (thisMac.isDepth == 8)) // { // wasSeed = ExtractCTSeed((CGrafPtr)mainWindow); // WashColorIn(); // ForceCTSeed((CGrafPtr)mainWindow, wasSeed); // } // if ((!thisMac.hasSM3) && (numSMWarnings < 3)) // { // numSMWarnings++; // BitchAboutSM3(); // } while (!quitting) // this is the main loop HandleEvent(); /* #if BUILD_ARCADE_VERSION ShowMenuBarOld(); #endif */ KillMusic(); KillSound(); if (houseOpen) { if (!CloseHouse()) { CloseHouseResFork(); fileErr = FSClose(houseRefNum); houseOpen = false; } } WriteOutPrefs(); RestoreColorDepth(); FlushEvents(everyEvent, 0); // theErr = LoadScrap(); } \ No newline at end of file diff --git a/Sources/MainWindow.c b/Sources/MainWindow.c deleted file mode 100755 index 8f2829f..0000000 --- a/Sources/MainWindow.c +++ /dev/null @@ -1 +0,0 @@ -//============================================================================ //---------------------------------------------------------------------------- // MainWindow.c //---------------------------------------------------------------------------- //============================================================================ #include #include #include "Externs.h" #include "Environ.h" #include "House.h" #include "RectUtils.h" #define kMainWindowID 128 #define kEditWindowID 129 #define kMenuWindowID 130 void DrawOnSplash (void); void SetPaletteToGrays (void); void HardDrawMainWindow (void); void RestoreColorsSlam (void); CTabHandle theCTab; PixMapHandle thePMap; ColorSpec * wasColors; ColorSpec * newColors; CursHandle handCursorH, beamCursorH, vertCursorH, horiCursorH; CursHandle diagCursorH; Cursor handCursor, beamCursor, vertCursor, horiCursor; Cursor diagCursor; Rect workSrcRect; GWorldPtr workSrcMap; Rect mainWindowRect; WindowPtr mainWindow, menuWindow; short isEditH, isEditV; short playOriginH, playOriginV; short splashOriginH, splashOriginV; short theMode; Boolean fadeGraysOut, isDoColorFade, splashDrawn; extern GDHandle thisGDevice; extern short toolSelected; extern Boolean noRoomAtAll, isUseSecondScreen; extern Boolean quickerTransitions, houseIsReadOnly; //============================================================== Functions //-------------------------------------------------------------- DrawOnSplash // Draws additional text on top of splash screen. void DrawOnSplash (void) { Str255 houseLoadedStr; PasStringCopy("\pHouse: ", houseLoadedStr); PasStringConcat(houseLoadedStr, thisHouseName); if ((thisMac.hasQT) && (hasMovie)) PasStringConcat(houseLoadedStr, "\p (QT)"); TextSize(9); TextFace(1); TextFont(applFont); MoveTo(splashOriginH + 436, splashOriginV + 314); if (thisMac.isDepth == 4) { ForeColor(whiteColor); DrawString(houseLoadedStr); ForeColor(blackColor); } else { if (houseIsReadOnly) ColorText(houseLoadedStr, 5L); else ColorText(houseLoadedStr, 28L); } #if defined(powerc) || defined(__powerc) TextSize(12); TextFace(0); TextFont(systemFont); ForeColor(blackColor); MoveTo(splashOriginH + 5, splashOriginV + 457); DrawString("\pPowerPC Native!"); ForeColor(whiteColor); MoveTo(splashOriginH + 4, splashOriginV + 456); DrawString("\pPowerPC Native!"); ForeColor(blackColor); #endif } //-------------------------------------------------------------- RedrawSplashScreen void RedrawSplashScreen (void) { Rect tempRect; SetPort((GrafPtr)workSrcMap); PaintRect(&workSrcRect); QSetRect(&tempRect, 0, 0, 640, 460); QOffsetRect(&tempRect, splashOriginH, splashOriginV); LoadScaledGraphic(kSplash8BitPICT, &tempRect); DrawOnSplash(); SetPortWindowPort(mainWindow); // if (quickerTransitions) // DissBitsChunky(&workSrcRect); // else // DissBits(&workSrcRect); CopyRectMainToWork(&workSrcRect); } //-------------------------------------------------------------- UpdateMainWindow // Redraws the main window (depends on mode were in - splash, editing, playing). void UpdateMainWindow (void) { Rect tempRect; RgnHandle dummyRgn; dummyRgn = NewRgn(); SetPortWindowPort(mainWindow); if (theMode == kEditMode) { PauseMarquee(); CopyBits((BitMap *)*GetGWorldPixMap(workSrcMap), GetPortBitMapForCopyBits(GetWindowPort(mainWindow)), &mainWindowRect, &mainWindowRect, srcCopy, GetPortVisibleRegion(GetWindowPort(mainWindow), dummyRgn)); ResumeMarquee(); } else if ((theMode == kSplashMode) || (theMode == kPlayMode)) { SetPort((GrafPtr)workSrcMap); PaintRect(&workSrcRect); QSetRect(&tempRect, 0, 0, 640, 460); QOffsetRect(&tempRect, splashOriginH, splashOriginV); LoadScaledGraphic(kSplash8BitPICT, &tempRect); CopyBits((BitMap *)*GetGWorldPixMap(workSrcMap), GetPortBitMapForCopyBits(GetWindowPort(mainWindow)), &workSrcRect, &mainWindowRect, srcCopy, GetPortVisibleRegion(GetWindowPort(mainWindow), dummyRgn)); SetPortWindowPort(mainWindow); DrawOnSplash(); } DisposeRgn(dummyRgn); splashDrawn = true; } //-------------------------------------------------------------- UpdateMenuBarWindow // Ugly kludge to cover over the menu bar when playing game on 2nd monitor. void UpdateMenuBarWindow (void) { Rect bounds; if (menuWindow == nil) return; GetLocalWindowRect(menuWindow, &bounds); PaintRect(&bounds); } //-------------------------------------------------------------- OpenMainWindow // Opens up the main window (how it does this depends on mode were in). void OpenMainWindow (void) { // long wasSeed; short whichRoom; if (mainWindow != nil) { YellowAlert(kYellowUnaccounted, 6); return; } if (theMode == kEditMode) { if (menuWindow != nil) DisposeWindow(menuWindow); menuWindow = nil; QSetRect(&mainWindowRect, 0, 0, 512, 322); mainWindow = GetNewCWindow(kEditWindowID, nil, kPutInFront); SizeWindow(mainWindow, mainWindowRect.right, mainWindowRect.bottom, false); if (OptionKeyDown()) { isEditH = 3; isEditV = 41; } MoveWindow(mainWindow, isEditH, isEditV, true); ShowWindow(mainWindow); SetPortWindowPort(mainWindow); ClipRect(&mainWindowRect); ForeColor(blackColor); BackColor(whiteColor); whichRoom = GetFirstRoomNumber(); CopyRoomToThisRoom(whichRoom); ReflectCurrentRoom(false); } else { if (menuWindow == nil) { menuWindow = GetNewCWindow(kMenuWindowID, nil, kPutInFront); SizeWindow(menuWindow, RectWide(&thisMac.screen), 20, false); MoveWindow(menuWindow, thisMac.screen.left, thisMac.screen.top, true); ShowWindow(menuWindow); } mainWindowRect = thisMac.screen; ZeroRectCorner(&mainWindowRect); mainWindowRect.bottom -= 20; // thisMac.menuHigh mainWindow = GetNewCWindow(kMainWindowID, nil, kPutInFront); SizeWindow(mainWindow, mainWindowRect.right - mainWindowRect.left, mainWindowRect.bottom - mainWindowRect.top, false); MoveWindow(mainWindow, thisMac.screen.left, thisMac.screen.top + 20, true); // thisMac.menuHigh ShowWindow(mainWindow); SetPortWindowPort(mainWindow); ClipRect(&mainWindowRect); // CopyRgn(mainWindow->clipRgn, mainWindow->visRgn); ForeColor(blackColor); BackColor(whiteColor); PaintRect(&mainWindowRect); splashOriginH = ((thisMac.screen.right - thisMac.screen.left) - 640) / 2; if (splashOriginH < 0) splashOriginH = 0; splashOriginV = ((thisMac.screen.bottom - thisMac.screen.top) - 480) / 2; if (splashOriginV < 0) splashOriginV = 0; SetPort((GrafPtr)workSrcMap); PaintRect(&workSrcRect); LoadGraphic(kSplash8BitPICT); // if ((fadeGraysOut) && (isDoColorFade)) // { // wasSeed = ExtractCTSeed((CGrafPtr)mainWindow); // SetPortWindowPort(mainWindow); // SetPaletteToGrays(); // HardDrawMainWindow(); // fadeGraysOut = false; // ForceCTSeed((CGrafPtr)mainWindow, wasSeed); // } SetPortWindowPort(mainWindow); } } //-------------------------------------------------------------- CloseMainWindow // Closes the main window. void CloseMainWindow (void) { if (mainWindow != nil) DisposeWindow(mainWindow); mainWindow = nil; } //-------------------------------------------------------------- ZoomBetweenWindows // Zooms from one window size to another. Just for effect. /* #ifndef COMPILEDEMO void ZoomBetweenWindows (void) { Rect aRect; short h, v; if (theMode == kEditMode) { QSetRect(&aRect, 0, 0, 512, 342); QOffsetRect(&aRect, isEditH, isEditV); ZoomRectToRect(&(thisMac.screen), &aRect); } else { aRect = mainWindow->portRect; GetWindowLeftTop(mainWindow, &h, &v); QOffsetRect(&aRect, h, v); ZoomRectToRect(&aRect, &(thisMac.screen)); } } #endif */ //-------------------------------------------------------------- UpdateEditWindowTitle // Handles changing the title across the top of the main window. OnlyÉ // relevant when editing a house (room title displayed in window title). #ifndef COMPILEDEMO void UpdateEditWindowTitle (void) { Str255 newTitle, tempStr; if (mainWindow == nil) return; PasStringCopy(thisHouseName, newTitle); PasStringConcat(newTitle, "\p - "); if (noRoomAtAll) PasStringConcat(newTitle, "\pNo rooms"); else if (houseUnlocked) { PasStringConcat(newTitle, thisRoom->name); PasStringConcat(newTitle, "\p ("); NumToString((long)thisRoom->floor, tempStr); PasStringConcat(newTitle, tempStr); PasStringConcat(newTitle, "\p, "); NumToString((long)thisRoom->suite, tempStr); PasStringConcat(newTitle, tempStr); PasStringConcat(newTitle, "\p)"); } else PasStringConcat(newTitle, "\pHouse Locked"); SetWTitle(mainWindow, newTitle); } #endif //-------------------------------------------------------------- HandleMainClick // Handle a mouse click in the main window (relevant only when editing). void HandleMainClick (Point wherePt, Boolean isDoubleClick) { KeyMap theseKeys; if ((theMode != kEditMode) || (mainWindow == nil) || (!houseUnlocked)) return; SetPortWindowPort(mainWindow); GlobalToLocal(&wherePt); if (toolSelected == kSelectTool) DoSelectionClick(wherePt, isDoubleClick); else DoNewObjectClick(wherePt); GetKeys(theseKeys); if (!BitTst(&theseKeys, kShiftKeyMap)) { EraseSelectedTool(); SelectTool(kSelectTool); } } //-------------------------------------------------------------- ShowMenuBarOld // Displays the menu bar (after having been hidden). /* void ShowMenuBarOld (void) { Rect theRect; GrafPtr wasPort, tempPort; RgnHandle worldRgn, menuBarRgn; if (LMGetMBarHeight() == 0) { GetPort(&wasPort); tempPort = (GrafPtr)NewPtrClear(sizeof(GrafPort)); OpenPort(tempPort); SetPort((GrafPtr)tempPort); LMSetMBarHeight(thisMac.menuHigh); theRect = (**GetGrayRgn()).rgnBBox; UnionRect(&theRect, &qd.screenBits.bounds, &theRect); worldRgn = NewRgn(); OpenRgn(); FrameRoundRect(&theRect, 16, 16); CloseRgn(worldRgn); theRect = qd.screenBits.bounds; theRect.bottom = theRect.top + thisMac.menuHigh; menuBarRgn = NewRgn(); RectRgn(menuBarRgn, &theRect); SectRgn(worldRgn, menuBarRgn, menuBarRgn); // /------------------\ DisposeRgn(worldRgn); // |__________________| UnionRgn(tempPort->visRgn, menuBarRgn, tempPort->visRgn); DiffRgn(tempPort->visRgn, menuBarRgn, tempPort->visRgn); DisposeRgn(menuBarRgn); ClosePort(tempPort); SetPort((GrafPtr)wasPort); DrawMenuBar(); } } */ //-------------------------------------------------------------- HideMenuBarOld // Hides the menu bar - completely erasing it from the screen. /* void HideMenuBarOld (void) { Rect theRect; RgnHandle worldRgn, menuBarRgn; GrafPtr wasPort, tempPort; if (LMGetMBarHeight() != 0) { GetPort(&wasPort); tempPort = (GrafPtr)NewPtrClear(sizeof(GrafPort)); OpenPort(tempPort); SetPort((GrafPtr)tempPort); LMSetMBarHeight(0); theRect = (**GetGrayRgn()).rgnBBox; UnionRect(&theRect, &qd.screenBits.bounds, &theRect); worldRgn = NewRgn(); OpenRgn(); FrameRoundRect(&theRect, 16, 16); CloseRgn(worldRgn); theRect = qd.screenBits.bounds; theRect.bottom = theRect.top + thisMac.menuHigh; menuBarRgn = NewRgn(); RectRgn(menuBarRgn, &theRect); SectRgn(worldRgn, menuBarRgn, menuBarRgn); // /------------------\ DisposeRgn(worldRgn); // |__________________| UnionRgn(tempPort->visRgn, menuBarRgn, tempPort->visRgn); DisposeRgn(menuBarRgn); PaintRect(&theRect); ClosePort(tempPort); SetPort((GrafPtr)wasPort); } } */ //-------------------------------------------------------------- SetPaletteToGrays // Sets up a gray palette corresponding in luminance to the standard colorÉ // palette. This is to facilitate the gray->color fade when the game comes up. /* void SetPaletteToGrays (void) { GDHandle theDevice; long longGray; short i; char wasState; wasState = HGetState((Handle)thisGDevice); HLock((Handle)thisGDevice); thePMap = (*thisGDevice)->gdPMap; HSetState((Handle)thisGDevice, wasState); theCTab = (*thePMap)->pmTable; wasColors = nil; wasColors = (ColorSpec*)NewPtr(sizeof(ColorSpec) * 256); if (wasColors == nil) RedAlert(kErrNoMemory); newColors = nil; newColors = (ColorSpec*)NewPtr(sizeof(ColorSpec) * 256); if (newColors == nil) RedAlert(kErrNoMemory); for (i = 0; i < 256; i++) { wasColors[i] = (*theCTab)->ctTable[i]; newColors[i] = (*theCTab)->ctTable[i]; if (i != 5) { longGray = ((long)newColors[i].rgb.red * 3L) / 10L + ((long)newColors[i].rgb.green * 6L) / 10L + ((long)newColors[i].rgb.blue * 1L) / 10L; newColors[i].rgb.red = (unsigned short)longGray; newColors[i].rgb.green = (unsigned short)longGray; newColors[i].rgb.blue = (unsigned short)longGray; } } theDevice = GetGDevice(); SetGDevice(thisGDevice); SetEntries(0, 255, newColors); SetGDevice(theDevice); } */ //-------------------------------------------------------------- HardDrawMainWindow // Ignores the ToolBox - this function draws direct to screen in order toÉ // circumvent the Toolbox's attempt to color-match to the current palette. /* void HardDrawMainWindow (void) { PixMapHandle pixMapH; Point offsetPt; long srcRowBytes, destRowBytes; long src; long dest; short i, w; SInt8 mode; char wasState; wasState = HGetState((Handle)thisGDevice); HLock((Handle)thisGDevice); pixMapH = (**thisGDevice).gdPMap; HSetState((Handle)thisGDevice, wasState); srcRowBytes = (long)((*(workSrcMap->portPixMap))->rowBytes & 0x7FFF); destRowBytes = (**pixMapH).rowBytes & 0x7FFF; src = (long)((*(workSrcMap->portPixMap))->baseAddr); dest = (long)((**pixMapH).baseAddr) + splashOriginH + ((splashOriginV + thisMac.menuHigh) * destRowBytes); offsetPt.h = 0; offsetPt.v = 0; ShieldCursor(&mainWindowRect, offsetPt); mode = true32b; SwapMMUMode(&mode); for (i = 0; i < 460; i++) { for (w = 0; w < 160; w++) { *(long *)dest = *(long *)src; dest += 4L; src += 4L; } src -= 640; dest -= 640; src += srcRowBytes; dest += destRowBytes; } SwapMMUMode(&mode); ShowCursor(); } */ //-------------------------------------------------------------- WashColorIn // Slowly walks the palette from its gray luminance state to the full colorÉ // palette. In this way, color appears to slowly wash in. /* void WashColorIn (void) { #define kGray2ColorSteps 180 GDHandle theDevice; long longDelta; short i, c; theDevice = GetGDevice(); SetGDevice(thisGDevice); for (i = 0; i < kGray2ColorSteps; i++) { for (c = 0; c < 256; c++) { if (c != 5) { longDelta = (((long)wasColors[c].rgb.red - (long)newColors[c].rgb.red) / (long)(kGray2ColorSteps - i)) + (long)newColors[c].rgb.red; newColors[c].rgb.red = (unsigned short)longDelta; longDelta = (((long)wasColors[c].rgb.green - (long)newColors[c].rgb.green) / (long)(kGray2ColorSteps - i)) + (long)newColors[c].rgb.green; newColors[c].rgb.green = (unsigned short)longDelta; longDelta = (((long)wasColors[c].rgb.blue - (long)newColors[c].rgb.blue) / (long)(kGray2ColorSteps - i)) + (long)newColors[c].rgb.blue; newColors[c].rgb.blue = (unsigned short)longDelta; } } SetEntries(0, 255, newColors); if (Button()) break; } SetEntries(0, 255, wasColors); SetGDevice(theDevice); RestoreColorsSlam(); if (wasColors != nil) DisposePtr((Ptr)wasColors); if (newColors != nil) DisposePtr((Ptr)newColors); } */ \ No newline at end of file diff --git a/Sources/Map.c b/Sources/Map.c deleted file mode 100755 index bb302ac..0000000 --- a/Sources/Map.c +++ /dev/null @@ -1 +0,0 @@ -//============================================================================ //---------------------------------------------------------------------------- // Map.c //---------------------------------------------------------------------------- //============================================================================ #include #include #include "Externs.h" #include "Environ.h" #include "House.h" #include "RectUtils.h" #include "Utilities.h" #define kMapRoomsHigh 9 // was 7 #define kMapRoomsWide 9 // was 7 #define kMapScrollBarWidth 16 #define kHScrollRef 5L #define kVScrollRef 27L #define kMapGroundValue 56 #define kNewRoomAlert 1004 #define kYesDoNewRoom 1 #define kThumbnailPictID 1010 void LoadGraphicPlus (short, Rect *); void RedrawMapContents (void); pascal void LiveHScrollAction (ControlHandle, short); pascal void LiveVScrollAction (ControlHandle, short); Boolean QueryNewRoom (void); void CreateNailOffscreen (void); void KillNailOffscreen (void); Rect nailSrcRect, activeRoomRect, wasActiveRoomRect; Rect mapHScrollRect, mapVScrollRect, mapCenterRect; Rect mapWindowRect; GWorldPtr nailSrcMap; WindowPtr mapWindow; ControlHandle mapHScroll, mapVScroll; short isMapH, isMapV, mapRoomsHigh, mapRoomsWide; short mapLeftRoom, mapTopRoom; Boolean isMapOpen, doPrettyMap; extern Boolean doBitchDialogs; //============================================================== Functions //-------------------------------------------------------------- ThisRoomVisibleOnMap #ifndef COMPILEDEMO Boolean ThisRoomVisibleOnMap (void) { short h, v; h = thisRoom->suite; v = kMapGroundValue - thisRoom->floor; if ((h < mapLeftRoom) || (v < mapTopRoom) || (h >= (mapLeftRoom + mapRoomsWide)) || (v >= (mapTopRoom + mapRoomsHigh))) return (false); else return (true); } #endif //-------------------------------------------------------------- CenterMapOnRoom #ifndef COMPILEDEMO void CenterMapOnRoom (short h, short v) { if (mapWindow == nil) return; mapLeftRoom = h - (mapRoomsWide / 2); mapTopRoom = (kMapGroundValue - v) - (mapRoomsHigh / 2); if (mapLeftRoom < 0) mapLeftRoom = 0; else if (mapLeftRoom > (kMaxNumRoomsH - mapRoomsWide)) mapLeftRoom = kMaxNumRoomsH - mapRoomsWide; if (mapTopRoom < 0) mapTopRoom = 0; else if (mapTopRoom > (kMaxNumRoomsV - mapRoomsHigh)) mapTopRoom = kMaxNumRoomsV - mapRoomsHigh; if (mapWindow != nil) { SetControlValue(mapHScroll, mapLeftRoom); SetControlValue(mapVScroll, mapTopRoom); } } #endif //-------------------------------------------------------------- FlagMapRoomsForUpdate #ifndef COMPILEDEMO void FlagMapRoomsForUpdate (void) { if (mapWindow == nil) return; // SetPortWindowPort(mapWindow); InvalWindowRect(mapWindow, &wasActiveRoomRect); InvalWindowRect(mapWindow, &activeRoomRect); } #endif //-------------------------------------------------------------- FindNewActiveRoomRect #ifndef COMPILEDEMO void FindNewActiveRoomRect (void) { Rect aRoom; short h, i; short floor, suite, whoCares; char wasState; Boolean activeRoomVisible; if (mapWindow == nil) return; activeRoomVisible = false; wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); for (i = 0; i < mapRoomsHigh; i++) { for (h = 0; h < mapRoomsWide; h++) { QSetRect(&aRoom, 0, 0, kMapRoomWidth, kMapRoomHeight); QOffsetRect(&aRoom, kMapRoomWidth * h, kMapRoomHeight * i); suite = h + mapLeftRoom; floor = kMapGroundValue - (i + mapTopRoom); if ((RoomExists(suite, floor, &whoCares)) && (houseUnlocked)) { if (whoCares == thisRoomNumber) { wasActiveRoomRect = activeRoomRect; activeRoomRect = aRoom; activeRoomVisible = true; } } } } HSetState((Handle)thisHouse, wasState); if (activeRoomVisible) { activeRoomRect.right++; activeRoomRect.bottom++; InsetRect(&activeRoomRect, -1, -1); } } #endif //-------------------------------------------------------------- LoadGraphicPlus void LoadGraphicPlus (short resID, Rect *theRect) { PicHandle thePicture; thePicture = GetPicture(resID); if (thePicture == nil) { thePicture = (PicHandle)GetResource('Date', resID); if (thePicture == nil) { return; } } DrawPicture(thePicture, theRect); ReleaseResource((Handle)thePicture); } //-------------------------------------------------------------- RedrawMapContents #ifndef COMPILEDEMO void RedrawMapContents (void) { Rect newClip, aRoom, src; RgnHandle wasClip; short h, i, groundLevel; short floor, suite, whoCares, type; char wasState; Boolean activeRoomVisible; if (mapWindow == nil) return; activeRoomVisible = false; groundLevel = kMapGroundValue - mapTopRoom; newClip.left = mapWindowRect.left; newClip.top = mapWindowRect.top; newClip.right = mapWindowRect.right + 2 - kMapScrollBarWidth; newClip.bottom = mapWindowRect.bottom + 2 - kMapScrollBarWidth; SetPort((GrafPtr)mapWindow); wasClip = NewRgn(); if (wasClip != nil) { GetClip(wasClip); ClipRect(&newClip); } wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); for (i = 0; i < mapRoomsHigh; i++) { for (h = 0; h < mapRoomsWide; h++) { QSetRect(&aRoom, 0, 0, kMapRoomWidth, kMapRoomHeight); QOffsetRect(&aRoom, kMapRoomWidth * h, kMapRoomHeight * i); suite = h + mapLeftRoom; floor = kMapGroundValue - (i + mapTopRoom); if ((RoomExists(suite, floor, &whoCares)) && (houseUnlocked)) { PenNormal(); type = (*thisHouse)->rooms[whoCares].background - kBaseBackgroundID; if (type > kNumBackgrounds) { if (!doPrettyMap) type = kNumBackgrounds; // Draw "?" thumbnail. } ForeColor(blackColor); if (type > kNumBackgrounds) // Do a "pretty" thumbnail. { LoadGraphicPlus(type + kBaseBackgroundID, &aRoom); } else { QSetRect(&src, 0, 0, kMapRoomWidth, kMapRoomHeight); QOffsetRect(&src, 0, type * kMapRoomHeight); CopyBits((BitMap *)*GetGWorldPixMap(nailSrcMap), GetPortBitMapForCopyBits(GetWindowPort(mapWindow)), &src, &aRoom, srcCopy, nil); } if (whoCares == thisRoomNumber) { activeRoomRect = aRoom; activeRoomVisible = true; } } else { Pattern dummyPat; PenPat(GetQDGlobalsGray(&dummyPat)); if (i >= groundLevel) ForeColor(greenColor); else ForeColor(blueColor); PaintRect(&aRoom); } } } HSetState((Handle)thisHouse, wasState); ForeColor(blackColor); PenNormal(); for (i = 1; i < mapRoomsWide; i++) { MoveTo(i * kMapRoomWidth, 0); Line(0, mapRoomsHigh * kMapRoomHeight); } for (i = 1; i < mapRoomsHigh; i++) { MoveTo(0, i * kMapRoomHeight); Line(mapRoomsWide * kMapRoomWidth, 0); } if (activeRoomVisible) { ForeColor(redColor); activeRoomRect.right++; activeRoomRect.bottom++; FrameRect(&activeRoomRect); InsetRect(&activeRoomRect, 1, 1); FrameRect(&activeRoomRect); ForeColor(blackColor); InsetRect(&activeRoomRect, -1, -1); } if (wasClip != nil) { SetClip(wasClip); DisposeRgn(wasClip); } } #endif //-------------------------------------------------------------- UpdateMapWindow void UpdateMapWindow (void) { #ifndef COMPILEDEMO if (mapWindow == nil) return; SetControlValue(mapHScroll, mapLeftRoom); SetControlValue(mapVScroll, mapTopRoom); SetPortWindowPort(mapWindow); DrawControls(mapWindow); DrawGrowIcon(mapWindow); RedrawMapContents(); #endif } //-------------------------------------------------------------- ResizeMapWindow void ResizeMapWindow (short newH, short newV) { #ifndef COMPILEDEMO if ((newH == 0) && (newV == 0)) return; SetPortWindowPort(mapWindow); mapRoomsWide = newH / kMapRoomWidth; if (mapRoomsWide < 3) mapRoomsWide = 3; mapRoomsHigh = newV / kMapRoomHeight; if (mapRoomsHigh < 3) mapRoomsHigh = 3; QSetRect(&mapWindowRect, 0, 0, mapRoomsWide * kMapRoomWidth + kMapScrollBarWidth - 2, mapRoomsHigh * kMapRoomHeight + kMapScrollBarWidth - 2); EraseRect(&mapWindowRect); SizeWindow(mapWindow, mapWindowRect.right, mapWindowRect.bottom, true); SetControlMaximum(mapHScroll, kMaxNumRoomsH - mapRoomsWide); MoveControl(mapHScroll, 0, mapWindowRect.bottom - kMapScrollBarWidth + 2); SizeControl(mapHScroll, mapWindowRect.right - kMapScrollBarWidth + 3, kMapScrollBarWidth); mapLeftRoom = GetControlValue(mapHScroll); SetControlMaximum(mapVScroll, kMaxNumRoomsV - mapRoomsHigh); MoveControl(mapVScroll, mapWindowRect.right - kMapScrollBarWidth + 2, 0); SizeControl(mapVScroll, kMapScrollBarWidth, mapWindowRect.bottom - kMapScrollBarWidth + 3); mapTopRoom = GetControlValue(mapVScroll); InvalWindowRect(mapWindow, &mapWindowRect); #endif } //-------------------------------------------------------------- OpenMapWindow void OpenMapWindow (void) { #ifndef COMPILEDEMO Rect src, dest; Point globalMouse; if (mapWindow == nil) { CreateNailOffscreen(); QSetRect(&mapWindowRect, 0, 0, mapRoomsWide * kMapRoomWidth + kMapScrollBarWidth - 2, mapRoomsHigh * kMapRoomHeight + kMapScrollBarWidth - 2); mapWindow = NewCWindow(nil, &mapWindowRect, "\pMap", false, kWindoidGrowWDEF, kPutInFront, true, 0L); if (mapWindow == nil) RedAlert(kErrNoMemory); // if (OptionKeyDown()) // { // isMapH = 3; // isMapV = qd.screenBits.bounds.bottom - 100; // } MoveWindow(mapWindow, isMapH, isMapV, true); globalMouse = MyGetGlobalMouse(); QSetRect(&wasActiveRoomRect, 0, 0, 1, 1); QSetRect(&activeRoomRect, 0, 0, 1, 1); QSetRect(&src, 0, 0, 1, 1); QOffsetRect(&src, globalMouse.h, globalMouse.v); GetWindowRect(mapWindow, &dest); BringToFront(mapWindow); ShowHide(mapWindow, true); // FlagWindowFloating(mapWindow); TEMP - use flaoting windows HiliteAllWindows(); SetPort((GrafPtr)mapWindow); SetOrigin(1, 1); QSetRect(&mapHScrollRect, -1, mapRoomsHigh * kMapRoomHeight, mapRoomsWide * kMapRoomWidth + 1, mapRoomsHigh * kMapRoomHeight + kMapScrollBarWidth); QSetRect(&mapVScrollRect, mapRoomsWide * kMapRoomWidth, -1, mapRoomsWide * kMapRoomWidth + kMapScrollBarWidth, mapRoomsHigh * kMapRoomHeight + 1); mapHScroll = NewControl(mapWindow, &mapHScrollRect, "\p", true, mapLeftRoom, 0, kMaxNumRoomsH - mapRoomsWide, scrollBarProc, kHScrollRef); if (mapHScroll == nil) RedAlert(kErrNoMemory); mapVScroll = NewControl(mapWindow, &mapVScrollRect, "\p", true, mapTopRoom, 0, kMaxNumRoomsV - mapRoomsHigh, scrollBarProc, kVScrollRef); if (mapVScroll == nil) RedAlert(kErrNoMemory); QSetRect(&mapCenterRect, -16, -16, 0, 0); QOffsetRect(&mapCenterRect, mapWindowRect.right + 2, mapWindowRect.bottom + 2); CenterMapOnRoom(thisRoom->suite, thisRoom->floor); } UpdateMapCheckmark(true); #endif } //-------------------------------------------------------------- CloseMapWindow void CloseMapWindow (void) { #ifndef COMPILEDEMO CloseThisWindow(&mapWindow); UpdateMapCheckmark(false); #endif } //-------------------------------------------------------------- ToggleMapWindow void ToggleMapWindow (void) { #ifndef COMPILEDEMO if (mapWindow == nil) { OpenMapWindow(); isMapOpen = true; } else { CloseMapWindow(); isMapOpen = false; } #endif } //-------------------------------------------------------------- LiveHScrollAction #ifndef COMPILEDEMO pascal void LiveHScrollAction (ControlHandle theControl, short thePart) { short wasValue, newValue; switch (thePart) { case kControlUpButtonPart: wasValue = GetControlValue(theControl); SetControlValue(theControl, wasValue - 1); if (GetControlValue(theControl) != wasValue) { mapLeftRoom = GetControlValue(theControl); RedrawMapContents(); } break; case kControlDownButtonPart: wasValue = GetControlValue(theControl); SetControlValue(theControl, wasValue + 1); if (GetControlValue(theControl) != wasValue) { mapLeftRoom = GetControlValue(theControl); RedrawMapContents(); } break; case kControlPageUpPart: wasValue = GetControlValue(theControl); newValue = wasValue - (mapRoomsWide / 2); SetControlValue(theControl, newValue); if (GetControlValue(theControl) != wasValue) { mapLeftRoom = GetControlValue(theControl); RedrawMapContents(); } break; case kControlPageDownPart: wasValue = GetControlValue(theControl); newValue = wasValue + (mapRoomsWide / 2); SetControlValue(theControl, newValue); if (GetControlValue(theControl) != wasValue) { mapLeftRoom = GetControlValue(theControl); RedrawMapContents(); } break; case kControlIndicatorPart: break; } } #endif //-------------------------------------------------------------- LiveVScrollAction #ifndef COMPILEDEMO pascal void LiveVScrollAction (ControlHandle theControl, short thePart) { short wasValue, newValue; switch (thePart) { case kControlUpButtonPart: wasValue = GetControlValue(theControl); SetControlValue(theControl, wasValue - 1); if (GetControlValue(theControl) != wasValue) { mapTopRoom = GetControlValue(theControl); RedrawMapContents(); } break; case kControlDownButtonPart: wasValue = GetControlValue(theControl); SetControlValue(theControl, wasValue + 1); if (GetControlValue(theControl) != wasValue) { mapTopRoom = GetControlValue(theControl); RedrawMapContents(); } break; case kControlPageUpPart: wasValue = GetControlValue(theControl); newValue = wasValue - (mapRoomsHigh / 2); SetControlValue(theControl, newValue); if (GetControlValue(theControl) != wasValue) { mapTopRoom = GetControlValue(theControl); RedrawMapContents(); } break; case kControlPageDownPart: wasValue = GetControlValue(theControl); newValue = wasValue + (mapRoomsHigh / 2); SetControlValue(theControl, newValue); if (GetControlValue(theControl) != wasValue) { mapTopRoom = GetControlValue(theControl); RedrawMapContents(); } break; case kControlIndicatorPart: break; } } #endif //-------------------------------------------------------------- HandleMapClick void HandleMapClick (EventRecord *theEvent) { #ifndef COMPILEDEMO Rect aRoom; ControlHandle whichControl; Point wherePt, globalWhere; long controlRef; short whichPart, localH, localV; short roomH, roomV, itsNumber; ControlActionUPP scrollHActionUPP, scrollVActionUPP; wherePt = theEvent->where; scrollHActionUPP = NewControlActionUPP(LiveHScrollAction); scrollVActionUPP = NewControlActionUPP(LiveVScrollAction); if (mapWindow == nil) return; SetPortWindowPort(mapWindow); globalWhere = wherePt; GlobalToLocal(&wherePt); wherePt.h -= 1; wherePt.v -= 1; whichPart = FindControl(wherePt, mapWindow, &whichControl); if (whichPart == 0) // User clicked in map content area. { localH = wherePt.h / kMapRoomWidth; localV = wherePt.v / kMapRoomHeight; if ((localH >= mapRoomsWide) || (localV >= mapRoomsHigh)) return; roomH = localH + mapLeftRoom; roomV = kMapGroundValue - (localV + mapTopRoom); if (RoomExists(roomH, roomV, &itsNumber)) { CopyRoomToThisRoom(itsNumber); DeselectObject(); ReflectCurrentRoom(false); if (thisMac.hasDrag) { SetPortWindowPort(mainWindow); QSetRect(&aRoom, 0, 0, kMapRoomWidth, kMapRoomHeight); CenterRectOnPoint(&aRoom, globalWhere); // if (DragRoom(theEvent, &aRoom, itsNumber)) // { // TEMP disabled. // } } } else { if (doBitchDialogs) { if (QueryNewRoom()) { if (!CreateNewRoom(roomH, roomV)) { YellowAlert(kYellowUnaccounted, 11); return; } else { DeselectObject(); ReflectCurrentRoom(false); } } else return; } else { if (!CreateNewRoom(roomH, roomV)) { YellowAlert(kYellowUnaccounted, 11); return; } else { DeselectObject(); ReflectCurrentRoom(false); } } } } else { controlRef = GetControlReference(whichControl); if (controlRef == kHScrollRef) { switch (whichPart) { case kControlUpButtonPart: case kControlDownButtonPart: case kControlPageUpPart: case kControlPageDownPart: if (TrackControl(whichControl, wherePt, scrollHActionUPP)) { } break; case kControlIndicatorPart: if (TrackControl(whichControl, wherePt, nil)) { mapLeftRoom = GetControlValue(whichControl); RedrawMapContents(); } break; } } else if (controlRef == kVScrollRef) { switch (whichPart) { case kControlUpButtonPart: case kControlDownButtonPart: case kControlPageUpPart: case kControlPageDownPart: if (TrackControl(whichControl, wherePt, scrollVActionUPP)) { } break; case kControlIndicatorPart: if (TrackControl(whichControl, wherePt, nil)) { mapTopRoom = GetControlValue(whichControl); RedrawMapContents(); } break; } } } DisposeControlActionUPP(scrollHActionUPP); DisposeControlActionUPP(scrollVActionUPP); #endif } //-------------------------------------------------------------- QueryNewRoom #ifndef COMPILEDEMO Boolean QueryNewRoom (void) { short hitWhat; // CenterAlert(kNewRoomAlert); hitWhat = Alert(kNewRoomAlert, nil); if (hitWhat == kYesDoNewRoom) return (true); else return (false); } #endif //-------------------------------------------------------------- CreateNailOffscreen #ifndef COMPILEDEMO void CreateNailOffscreen (void) { CGrafPtr wasCPort; GDHandle wasWorld; OSErr theErr; if (nailSrcMap == nil) { GetGWorld(&wasCPort, &wasWorld); QSetRect(&nailSrcRect, 0, 0, kMapRoomWidth, kMapRoomHeight * (kNumBackgrounds + 1)); theErr = CreateOffScreenGWorld(&nailSrcMap, &nailSrcRect, kPreferredDepth); SetGWorld(nailSrcMap, nil); LoadGraphic(kThumbnailPictID); SetGWorld(wasCPort, wasWorld); } } #endif //-------------------------------------------------------------- KillNailOffscreen #ifndef COMPILEDEMO void KillNailOffscreen (void) { if (nailSrcMap != nil) { // KillOffScreenPixMap(nailSrcMap); DisposeGWorld(nailSrcMap); nailSrcMap = nil; } } #endif //-------------------------------------------------------------- MoveRoom void MoveRoom (Point wherePt) { short localH, localV; short roomH, roomV, itsNumber; localH = wherePt.h / kMapRoomWidth; localV = wherePt.v / kMapRoomHeight; if ((localH >= mapRoomsWide) || (localV >= mapRoomsHigh)) return; roomH = localH + mapLeftRoom; roomV = kMapGroundValue - (localV + mapTopRoom); if (RoomExists(roomH, roomV, &itsNumber)) { } else { thisRoom->floor = roomV; thisRoom->suite = roomH; fileDirty = true; UpdateMenus(false); RedrawMapContents(); } } \ No newline at end of file diff --git a/Sources/Marquee.c b/Sources/Marquee.c deleted file mode 100755 index 53a9712..0000000 --- a/Sources/Marquee.c +++ /dev/null @@ -1 +0,0 @@ -//============================================================================ //---------------------------------------------------------------------------- // Marquee.c //---------------------------------------------------------------------------- //============================================================================ #include "Externs.h" #include "Marquee.h" #include "Objects.h" #include "ObjectEdit.h" #include "RectUtils.h" #define kMarqueePatListID 128 #define kHandleSideLong 9 void DrawGliderMarquee (void); void DrawMarquee (void); marquee theMarquee; Rect marqueeGliderRect; Boolean gliderMarqueeUp; extern Cursor handCursor, vertCursor, horiCursor, diagCursor; extern Rect leftStartGliderSrc; //============================================================== Functions //-------------------------------------------------------------- DoMarquee void DoMarquee (void) { if ((!theMarquee.active) || (theMarquee.paused)) return; SetPortWindowPort(mainWindow); PenMode(patXor); PenPat(&theMarquee.pats[theMarquee.index]); DrawMarquee(); theMarquee.index++; if (theMarquee.index >= kNumMarqueePats) theMarquee.index = 0; PenPat(&theMarquee.pats[theMarquee.index]); DrawMarquee(); PenNormal(); } //-------------------------------------------------------------- StartMarquee void StartMarquee (Rect *theRect) { if (theMarquee.active) StopMarquee(); if (objActive == kNoObjectSelected) return; SetPortWindowPort(mainWindow); theMarquee.bounds = *theRect; theMarquee.active = true; theMarquee.paused = false; theMarquee.handled = false; PenMode(patXor); PenPat(&theMarquee.pats[theMarquee.index]); DrawMarquee(); PenNormal(); SetCoordinateHVD(theMarquee.bounds.left, theMarquee.bounds.top, -1); } //-------------------------------------------------------------- StartMarqueeHandled void StartMarqueeHandled (Rect *theRect, short direction, short dist) { if (theMarquee.active) StopMarquee(); if (objActive == kNoObjectSelected) return; SetPortWindowPort(mainWindow); theMarquee.bounds = *theRect; theMarquee.active = true; theMarquee.paused = false; theMarquee.handled = true; QSetRect(&theMarquee.handle, 0, 0, kHandleSideLong, kHandleSideLong); QOffsetRect(&theMarquee.handle, kHandleSideLong / -2, kHandleSideLong / -2); switch (direction) { case kAbove: QOffsetRect(&theMarquee.handle, theMarquee.bounds.left, theMarquee.bounds.top); QOffsetRect(&theMarquee.handle, HalfRectWide(&theMarquee.bounds), -dist); break; case kToRight: QOffsetRect(&theMarquee.handle, theMarquee.bounds.right, theMarquee.bounds.top); QOffsetRect(&theMarquee.handle, dist, HalfRectTall(&theMarquee.bounds)); break; case kBelow: QOffsetRect(&theMarquee.handle, theMarquee.bounds.left, theMarquee.bounds.bottom); QOffsetRect(&theMarquee.handle, HalfRectWide(&theMarquee.bounds), dist); break; case kToLeft: QOffsetRect(&theMarquee.handle, theMarquee.bounds.left, theMarquee.bounds.top); QOffsetRect(&theMarquee.handle, -dist, HalfRectTall(&theMarquee.bounds)); break; case kBottomCorner: QOffsetRect(&theMarquee.handle, theMarquee.bounds.right, theMarquee.bounds.bottom); break; case kTopCorner: QOffsetRect(&theMarquee.handle, theMarquee.bounds.right, theMarquee.bounds.top); break; } theMarquee.direction = direction; theMarquee.dist = dist; PenMode(patXor); PenPat(&theMarquee.pats[theMarquee.index]); DrawMarquee(); PenNormal(); SetCoordinateHVD(theMarquee.bounds.left, theMarquee.bounds.top, dist); } //-------------------------------------------------------------- StopMarquee void StopMarquee (void) { if (gliderMarqueeUp) { DrawGliderMarquee(); gliderMarqueeUp = false; } if (!theMarquee.active) return; SetPortWindowPort(mainWindow); PenMode(patXor); PenPat(&theMarquee.pats[theMarquee.index]); DrawMarquee(); PenNormal(); theMarquee.active = false; SetCoordinateHVD(-1, -1, -1); } //-------------------------------------------------------------- PauseMarquee void PauseMarquee (void) { if (!theMarquee.active) return; theMarquee.paused = true; StopMarquee(); } //-------------------------------------------------------------- ResumeMarquee void ResumeMarquee (void) { if (!theMarquee.paused) return; if (theMarquee.handled) { StartMarqueeHandled(&theMarquee.bounds, theMarquee.direction, theMarquee.dist); HandleBlowerGlider(); } else StartMarquee(&theMarquee.bounds); } //-------------------------------------------------------------- DragOutMarqueeRect void DragOutMarqueeRect (Point start, Rect *theRect) { Point wasPt, newPt; SetPortWindowPort(mainWindow); InitCursor(); QSetRect(theRect, start.h, start.v, start.h, start.v); PenMode(patXor); PenPat(&theMarquee.pats[theMarquee.index]); FrameRect(theRect); wasPt = start; while (WaitMouseUp()) { GetMouse(&newPt); if (DeltaPoint(wasPt, newPt)) { FrameRect(theRect); QSetRect(theRect, start.h, start.v, newPt.h, newPt.v); NormalizeRect(theRect); FrameRect(theRect); wasPt = newPt; } } FrameRect(theRect); PenNormal(); } //-------------------------------------------------------------- DragMarqueeRect void DragMarqueeRect (Point start, Rect *theRect, Boolean lockH, Boolean lockV) { Point wasPt, newPt; short deltaH, deltaV; SetCursor(&handCursor); StopMarquee(); PenMode(patXor); PenPat(&theMarquee.pats[theMarquee.index]); theMarquee.bounds = *theRect; FrameRect(&theMarquee.bounds); wasPt = start; while (WaitMouseUp()) { GetMouse(&newPt); if (DeltaPoint(wasPt, newPt)) { if (lockV) deltaH = 0; else deltaH = newPt.h - wasPt.h; if (lockH) deltaV = 0; else deltaV = newPt.v - wasPt.v; FrameRect(&theMarquee.bounds); QOffsetRect(&theMarquee.bounds, deltaH, deltaV); FrameRect(&theMarquee.bounds); wasPt = newPt; SetCoordinateHVD(theMarquee.bounds.left, theMarquee.bounds.top, -2); } } FrameRect(&theMarquee.bounds); *theRect = theMarquee.bounds; PenNormal(); InitCursor(); } //-------------------------------------------------------------- DragMarqueeHandle void DragMarqueeHandle (Point start, short *dragged) { Point wasPt, newPt; short deltaH, deltaV; if ((theMarquee.direction == kAbove) || (theMarquee.direction == kBelow)) SetCursor(&vertCursor); else SetCursor(&horiCursor); StopMarquee(); PenMode(patXor); PenPat(&theMarquee.pats[theMarquee.index]); FrameRect(&theMarquee.bounds); PaintRect(&theMarquee.handle); wasPt = start; while (WaitMouseUp()) { GetMouse(&newPt); if (DeltaPoint(wasPt, newPt)) { switch (theMarquee.direction) { case kAbove: deltaH = 0; deltaV = newPt.v - wasPt.v; *dragged -= deltaV; if (*dragged <= 0) { deltaV += *dragged; *dragged = 0; } DeltaCoordinateD(*dragged); break; case kToRight: deltaH = newPt.h - wasPt.h; deltaV = 0; *dragged += deltaH; if (*dragged <= 0) { deltaH -= *dragged; *dragged = 0; } DeltaCoordinateD(*dragged); break; case kBelow: deltaH = 0; deltaV = newPt.v - wasPt.v; *dragged += deltaV; if (*dragged <= 0) { deltaV -= *dragged; *dragged = 0; } DeltaCoordinateD(*dragged); break; case kToLeft: deltaH = newPt.h - wasPt.h; deltaV = 0; *dragged -= deltaH; if (*dragged <= 0) { deltaH += *dragged; *dragged = 0; } DeltaCoordinateD(*dragged); break; } PaintRect(&theMarquee.handle); QOffsetRect(&theMarquee.handle, deltaH, deltaV); PaintRect(&theMarquee.handle); wasPt = newPt; } } FrameRect(&theMarquee.bounds); PaintRect(&theMarquee.handle); PenNormal(); InitCursor(); } //-------------------------------------------------------------- DragMarqueeCorner void DragMarqueeCorner (Point start, short *hDragged, short *vDragged, Boolean isTop) { Point wasPt, newPt; short deltaH, deltaV; SetCursor(&diagCursor); StopMarquee(); PenMode(patXor); PenPat(&theMarquee.pats[theMarquee.index]); FrameRect(&theMarquee.bounds); PaintRect(&theMarquee.handle); wasPt = start; while (WaitMouseUp()) { GetMouse(&newPt); if (DeltaPoint(wasPt, newPt)) { deltaH = newPt.h - wasPt.h; if (isTop) deltaV = wasPt.v - newPt.v; else deltaV = newPt.v - wasPt.v; *hDragged += deltaH; if (*hDragged <= 0) { deltaH -= *hDragged; *hDragged = 0; } *vDragged += deltaV; if (*vDragged <= 0) { deltaV -= *vDragged; *vDragged = 0; } FrameRect(&theMarquee.bounds); PaintRect(&theMarquee.handle); if (isTop) { QOffsetRect(&theMarquee.handle, deltaH, -deltaV); theMarquee.bounds.right += deltaH; theMarquee.bounds.top -= deltaV; } else { QOffsetRect(&theMarquee.handle, deltaH, deltaV); theMarquee.bounds.right += deltaH; theMarquee.bounds.bottom += deltaV; } FrameRect(&theMarquee.bounds); PaintRect(&theMarquee.handle); wasPt = newPt; } } FrameRect(&theMarquee.bounds); PaintRect(&theMarquee.handle); PenNormal(); InitCursor(); } //-------------------------------------------------------------- MarqueeHasHandles Boolean MarqueeHasHandles (short *direction, short *dist) { if (theMarquee.handled) { *direction = theMarquee.direction; *dist = theMarquee.dist; return (true); } else { *direction = 0; *dist = 0; return (false); } } //-------------------------------------------------------------- PtInMarqueeHandle Boolean PtInMarqueeHandle (Point where) { return (PtInRect(where, &theMarquee.handle)); } //-------------------------------------------------------------- DrawGliderMarquee void DrawGliderMarquee (void) { CopyBits((BitMap *)*GetGWorldPixMap(blowerMaskMap), GetPortBitMapForCopyBits(GetWindowPort(mainWindow)), &leftStartGliderSrc, &marqueeGliderRect, srcXor, nil); } //-------------------------------------------------------------- SetMarqueeGliderCenter void SetMarqueeGliderRect (short h, short v) { marqueeGliderRect = leftStartGliderSrc; ZeroRectCorner(&marqueeGliderRect); QOffsetRect(&marqueeGliderRect, h - kHalfGliderWide, v - kGliderHigh); DrawGliderMarquee(); gliderMarqueeUp = true; } //-------------------------------------------------------------- DrawMarquee void DrawMarquee (void) { FrameRect(&theMarquee.bounds); if (theMarquee.handled) { PaintRect(&theMarquee.handle); switch (theMarquee.direction) { case kAbove: MoveTo(theMarquee.handle.left + (kHandleSideLong / 2), theMarquee.handle.bottom); LineTo(theMarquee.handle.left + (kHandleSideLong / 2), theMarquee.bounds.top - 1); break; case kToRight: MoveTo(theMarquee.handle.left, theMarquee.handle.top + (kHandleSideLong / 2)); LineTo(theMarquee.bounds.right, theMarquee.handle.top + (kHandleSideLong / 2)); break; case kBelow: MoveTo(theMarquee.handle.left + (kHandleSideLong / 2), theMarquee.handle.top - 1); LineTo(theMarquee.handle.left + (kHandleSideLong / 2), theMarquee.bounds.bottom); break; case kToLeft: MoveTo(theMarquee.handle.right, theMarquee.handle.top + (kHandleSideLong / 2)); LineTo(theMarquee.bounds.left, theMarquee.handle.top + (kHandleSideLong / 2)); break; } } if (gliderMarqueeUp) DrawGliderMarquee(); } //-------------------------------------------------------------- InitMarquee void InitMarquee (void) { short i; for (i = 0; i < kNumMarqueePats; i++) GetIndPattern(&theMarquee.pats[i], kMarqueePatListID, i + 1); theMarquee.index = 0; theMarquee.active = false; theMarquee.paused = false; theMarquee.handled = false; gliderMarqueeUp = false; } \ No newline at end of file diff --git a/Sources/Menu.c b/Sources/Menu.c deleted file mode 100755 index 5b77619..0000000 --- a/Sources/Menu.c +++ /dev/null @@ -1 +0,0 @@ - //============================================================================ //---------------------------------------------------------------------------- // Menu.c //---------------------------------------------------------------------------- //============================================================================ //#include #include #include #include "DialogUtils.h" #include "Externs.h" #include "House.h" #include "ObjectEdit.h" #define kSheWantsNewGame 1 #define kSheWantsResumeGame 2 void UpdateMenusEditMode (void); void UpdateMenusNonEditMode (void); void UpdateMenusHouseOpen (void); void UpdateMenusHouseClosed (void); void UpdateResumeDialog (DialogPtr); pascal Boolean ResumeFilter (DialogPtr, EventRecord *, short *); short QueryResumeGame (void); void HeyYourPissingAHighScore (void); MenuHandle appleMenu, gameMenu, optionsMenu, houseMenu; Boolean menusUp, resumedSavedGame; extern long incrementModeTime; extern short demoHouseIndex, wasHouseVersion; extern short splashOriginH, splashOriginV, numberRooms; extern Boolean quitting, noRoomAtAll, twoPlayerGame; extern Boolean isMapOpen, isToolsOpen, isPlayMusicIdle; extern Boolean isCoordOpen, failedMusic, splashDrawn; extern Boolean houseOpen; //============================================================== Functions //-------------------------------------------------------------- UpdateMenusEditMode // Sets the menus to reflect that user is in edit mode. void UpdateMenusEditMode (void) { DisableMenuItem(gameMenu, iNewGame); DisableMenuItem(gameMenu, iTwoPlayer); DisableMenuItem(gameMenu, iOpenSavedGame); DisableMenuItem(optionsMenu, iHighScores); DisableMenuItem(optionsMenu, iHelp); CheckMenuItem(optionsMenu, iEditor, true); } //-------------------------------------------------------------- UpdateMenusNonEditMode // Sets the menus to reflect that user is NOT in edit mode. void UpdateMenusNonEditMode (void) { if ((noRoomAtAll) || (!houseOpen) || (numberRooms <= 0)) { DisableMenuItem(gameMenu, iNewGame); DisableMenuItem(gameMenu, iTwoPlayer); DisableMenuItem(gameMenu, iOpenSavedGame); if (houseOpen) { EnableMenuItem(gameMenu, iLoadHouse); EnableMenuItem(optionsMenu, iHighScores); } else { DisableMenuItem(gameMenu, iLoadHouse); DisableMenuItem(optionsMenu, iHighScores); } } else { EnableMenuItem(gameMenu, iNewGame); EnableMenuItem(gameMenu, iTwoPlayer); EnableMenuItem(gameMenu, iOpenSavedGame); EnableMenuItem(gameMenu, iLoadHouse); EnableMenuItem(optionsMenu, iHighScores); } if (demoHouseIndex == -1) DisableMenuItem(optionsMenu, iHelp); else EnableMenuItem(optionsMenu, iHelp); CheckMenuItem(optionsMenu, iEditor, false); } //-------------------------------------------------------------- UpdateMenusHouseOpen // Sets the menus to reflect that a house is currently open. void UpdateMenusHouseOpen (void) { EnableMenuItem(gameMenu, iLoadHouse); if ((fileDirty) && (houseUnlocked)) EnableMenuItem(houseMenu, iSave); else DisableMenuItem(houseMenu, iSave); if (houseUnlocked) { // EnableMenuItem(houseMenu, iSaveAs); EnableMenuItem(houseMenu, iHouse); } else { // DisableMenuItem(houseMenu, iSaveAs); DisableMenuItem(houseMenu, iHouse); } if ((noRoomAtAll) || (!houseUnlocked)) DisableMenuItem(houseMenu, iRoom); else EnableMenuItem(houseMenu, iRoom); if ((objActive == kNoObjectSelected) || (!houseUnlocked)) { DisableMenuItem(houseMenu, iObject); DisableMenuItem(houseMenu, iBringForward); DisableMenuItem(houseMenu, iSendBack); } else { EnableMenuItem(houseMenu, iObject); if ((objActive == kInitialGliderSelected) || (objActive == kLeftGliderSelected) || (objActive == kRightGliderSelected)) { DisableMenuItem(houseMenu, iBringForward); DisableMenuItem(houseMenu, iSendBack); } else { EnableMenuItem(houseMenu, iBringForward); EnableMenuItem(houseMenu, iSendBack); } } } //-------------------------------------------------------------- UpdateMenusHouseClosed // Sets the menus to reflect that a house is NOT currently open. void UpdateMenusHouseClosed (void) { DisableMenuItem(gameMenu, iLoadHouse); DisableMenuItem(houseMenu, iSave); // DisableMenuItem(houseMenu, iSaveAs); DisableMenuItem(houseMenu, iHouse); DisableMenuItem(houseMenu, iRoom); DisableMenuItem(houseMenu, iObject); DisableMenuItem(houseMenu, iCut); DisableMenuItem(houseMenu, iCopy); DisableMenuItem(houseMenu, iPaste); DisableMenuItem(houseMenu, iClear); DisableMenuItem(houseMenu, iDuplicate); } //-------------------------------------------------------------- UpdateClipboardMenus // Set the Cut/Copy/Paste menus to reflect if we have data in theÉ // Mac's "clipboard" or not. void UpdateClipboardMenus (void) { Str255 title; if (!houseOpen) return; if (houseUnlocked) { if (objActive > kNoObjectSelected) { GetLocalizedString(36, title); SetMenuItemText(houseMenu, iCut, title); GetLocalizedString(37, title); SetMenuItemText(houseMenu, iCopy, title); GetLocalizedString(38, title); SetMenuItemText(houseMenu, iClear, title); EnableMenuItem(houseMenu, iDuplicate); } else { GetLocalizedString(39, title); SetMenuItemText(houseMenu, iCut, title); GetLocalizedString(40, title); SetMenuItemText(houseMenu, iCopy, title); GetLocalizedString(41, title); SetMenuItemText(houseMenu, iClear, title); DisableMenuItem(houseMenu, iDuplicate); } EnableMenuItem(houseMenu, iCut); EnableMenuItem(houseMenu, iCopy); // if (hasScrap) // { // EnableMenuItem(houseMenu, iPaste); // if (scrapIsARoom) // { // GetLocalizedString(42, title); // SetMenuItemText(houseMenu, iPaste, title); // } // else // { // GetLocalizedString(43, title); // SetMenuItemText(houseMenu, iPaste, title); // } // } // else { DisableMenuItem(houseMenu, iPaste); GetLocalizedString(44, title); SetMenuItemText(houseMenu, iPaste, title); } EnableMenuItem(houseMenu, iClear); EnableMenuItem(houseMenu, iGoToRoom); EnableMenuItem(houseMenu, iMapWindow); EnableMenuItem(houseMenu, iObjectWindow); EnableMenuItem(houseMenu, iCoordinateWindow); } else { DisableMenuItem(houseMenu, iCut); DisableMenuItem(houseMenu, iCopy); DisableMenuItem(houseMenu, iPaste); DisableMenuItem(houseMenu, iClear); DisableMenuItem(houseMenu, iDuplicate); DisableMenuItem(houseMenu, iGoToRoom); DisableMenuItem(houseMenu, iMapWindow); DisableMenuItem(houseMenu, iObjectWindow); DisableMenuItem(houseMenu, iCoordinateWindow); } } //-------------------------------------------------------------- UpdateMenus // Called whenever a significant change to the environment has takenÉ // place and some of the menu states may have changes (for example,É // a menui was grayed out before becuase it wasn't an option - nowÉ // perhaps the situation has changed and we want the menu to be "usable"). void UpdateMenus (Boolean newMode) { if (!menusUp) return; if (newMode) { if (theMode == kEditMode) InsertMenu(houseMenu, 0); else DeleteMenu(kHouseMenuID); } if (theMode == kEditMode) { UpdateMenusEditMode(); if (houseOpen) { UpdateMenusHouseOpen(); UpdateClipboardMenus(); } else UpdateMenusHouseClosed(); UpdateLinkControl(); } else UpdateMenusNonEditMode(); DrawMenuBar(); } //-------------------------------------------------------------- DoAppleMenu // Handle the Apple menu (About box and desk accessories). void DoAppleMenu (short theItem) { // Str255 daName; // GrafPtr wasPort; // short daNumber; switch (theItem) { case iAbout: DoAbout(); break; default: // GetMenuItemText(appleMenu, theItem, daName); // GetPort(&wasPort); // daNumber = OpenDeskAccesory(daName); // SetPort((GrafPtr)wasPort); break; } } //-------------------------------------------------------------- DoGameMenu // Handle the user selecting an item from the Game menu. void DoGameMenu (short theItem) { switch (theItem) { case iNewGame: twoPlayerGame = false; resumedSavedGame = false; NewGame(kNewGameMode); break; case iTwoPlayer: twoPlayerGame = true; resumedSavedGame = false; NewGame(kNewGameMode); break; case iOpenSavedGame: resumedSavedGame = true; HeyYourPissingAHighScore(); if (OpenSavedGame()) { twoPlayerGame = false; NewGame(kResumeGameMode); } break; case iLoadHouse: #ifdef COMPILEDEMO DoNotInDemo(); #else if (splashDrawn) { DoLoadHouse(); OpenCloseEditWindows(); UpdateMenus(false); incrementModeTime = TickCount() + kIdleSplashTicks; if ((theMode == kSplashMode) || (theMode == kPlayMode)) { Rect updateRect; SetRect(&updateRect, splashOriginH + 474, splashOriginV + 304, splashOriginH + 474 + 166, splashOriginV + 304 + 12); InvalWindowRect(mainWindow, &updateRect); } } #endif break; case iQuit: #ifndef COMPILEDEMO quitting = true; if (!QuerySaveChanges()) quitting = false; #else quitting = true; #endif break; default: break; } } //-------------------------------------------------------------- DoOptionsMenu // Handle the user selecting an item from the Options menu. void DoOptionsMenu (short theItem) { #ifndef COMPILEDEMO OSErr theErr; #endif switch (theItem) { case iEditor: #ifdef COMPILEDEMO DoNotInDemo(); #else if (theMode == kEditMode) // switching to splash mode { if (fileDirty) SortHouseObjects(); if (!QuerySaveChanges()) break; theMode = kSplashMode; CloseMapWindow(); CloseToolsWindow(); CloseCoordWindow(); CloseLinkWindow(); DeselectObject(); StopMarquee(); if (isPlayMusicIdle) { theErr = StartMusic(); if (theErr != noErr) { YellowAlert(kYellowNoMusic, theErr); failedMusic = true; } } CloseMainWindow(); OpenMainWindow(); incrementModeTime = TickCount() + kIdleSplashTicks; } else if (theMode == kSplashMode) // switching to edit mode { theMode = kEditMode; StopTheMusic(); CloseMainWindow(); OpenMainWindow(); OpenCloseEditWindows(); } InitCursor(); UpdateMenus(true); #endif break; case iHighScores: DoHighScores(); incrementModeTime = TickCount() + kIdleSplashTicks; break; case iPrefs: DoSettingsMain(); incrementModeTime = TickCount() + kIdleSplashTicks; break; case iHelp: DoDemoGame(); break; } } //-------------------------------------------------------------- DoHouseMenu // Handle the user selecting an item from the House menu (only in Edit mode). void DoHouseMenu (short theItem) { #ifndef COMPILEDEMO short direction, dist; Boolean whoCares; switch (theItem) { case iNewHouse: if (CreateNewHouse()) { whoCares = InitializeEmptyHouse(); OpenCloseEditWindows(); } break; case iSave: DeselectObject(); if (fileDirty) SortHouseObjects(); if ((fileDirty) && (houseUnlocked)) { // SaveGame(false); if (wasHouseVersion < kHouseVersion) ConvertHouseVer1To2(); wasHouseVersion = kHouseVersion; whoCares = WriteHouse(true); ForceThisRoom(thisRoomNumber); ReadyBackground(thisRoom->background, thisRoom->tiles); GetThisRoomsObjRects(); DrawThisRoomsObjects(); } break; // case iSaveAs: // whoCares = SaveHouseAs(); // break; case iHouse: if (houseUnlocked) DoHouseInfo(); break; case iRoom: if (houseUnlocked) DoRoomInfo(); break; case iObject: if (houseUnlocked) { DoObjectInfo(); if (ObjectHasHandle(&direction, &dist)) { StartMarqueeHandled(&roomObjectRects[objActive], direction, dist); HandleBlowerGlider(); } else StartMarquee(&roomObjectRects[objActive]); } break; case iCut: if (houseUnlocked) { if (objActive > kNoObjectSelected) { // PutObjectScrap(); DeleteObject(); } else { // PutRoomScrap(); DeleteRoom(false); } UpdateClipboardMenus(); } break; case iCopy: if (houseUnlocked) { // if (objActive > kNoObjectSelected) // PutObjectScrap(); // else // PutRoomScrap(); UpdateClipboardMenus(); } break; case iPaste: if (houseUnlocked) { /* if (scrapIsARoom) GetRoomScrap(); else GetObjectScrap(); UpdateClipboardMenus(); */ } break; case iClear: if (houseUnlocked) { if (objActive > kNoObjectSelected) DeleteObject(); else DeleteRoom(false); UpdateClipboardMenus(); } break; case iDuplicate: if (houseUnlocked) DuplicateObject(); break; case iBringForward: if (houseUnlocked) BringSendFrontBack(true); break; case iSendBack: if (houseUnlocked) BringSendFrontBack(false); break; case iGoToRoom: if (houseUnlocked) DoGoToDialog(); break; case iMapWindow: if (houseUnlocked) ToggleMapWindow(); break; case iObjectWindow: if (houseUnlocked) ToggleToolsWindow(); break; case iCoordinateWindow: if (houseUnlocked) ToggleCoordinateWindow(); break; } #endif } //-------------------------------------------------------------- DoMenuChoice // Users has selected a menu item - determin which menu was selectedÉ // and call the appropriate function above. void DoMenuChoice (long menuChoice) { short theMenu, theItem; if (menuChoice == 0) return; theMenu = HiWord(menuChoice); theItem = LoWord(menuChoice); switch (theMenu) { case kAppleMenuID: DoAppleMenu(theItem); break; case kGameMenuID: DoGameMenu(theItem); break; case kOptionsMenuID: DoOptionsMenu(theItem); break; case kHouseMenuID: DoHouseMenu(theItem); break; } HiliteMenu(0); } //-------------------------------------------------------------- UpdateMapCheckmark // Checks or unchecks the Map Window item (to indicate if open or not). void UpdateMapCheckmark (Boolean checkIt) { if (!menusUp) return; CheckMenuItem(houseMenu, iMapWindow, checkIt); } //-------------------------------------------------------------- UpdateToolsCheckmark // Checks or unchecks the Tools Window item (to indicate if open or not). void UpdateToolsCheckmark (Boolean checkIt) { if (!menusUp) return; CheckMenuItem(houseMenu, iObjectWindow, checkIt); } //-------------------------------------------------------------- UpdateCoordinateCheckmark // Checks or unchecks the Coordinates Window item (to indicate if open or not). void UpdateCoordinateCheckmark (Boolean checkIt) { if (!menusUp) return; CheckMenuItem(houseMenu, iCoordinateWindow, checkIt); } //-------------------------------------------------------------- UpdateResumeDialog // Update function for Resume dialog (below). void UpdateResumeDialog (DialogPtr theDialog) { DrawDialog(theDialog); DrawDefaultButton(theDialog); } //-------------------------------------------------------------- ResumeFilter // Dialog filter for the Resume dialog (below). pascal Boolean ResumeFilter (DialogPtr dial, EventRecord *event, short *item) { switch (event->what) { case keyDown: switch ((event->message) & charCodeMask) { case kReturnKeyASCII: case kEnterKeyASCII: FlashDialogButton(dial, kOkayButton); *item = kOkayButton; return(true); break; default: return(false); } break; case updateEvt: if ((WindowPtr)event->message == GetDialogWindow(dial)) { SetPort((GrafPtr)dial); BeginUpdate(GetDialogWindow(dial)); UpdateResumeDialog(dial); EndUpdate(GetDialogWindow(dial)); event->what = nullEvent; } return(false); break; default: return(false); break; } } //-------------------------------------------------------------- QueryResumeGame // Dialog that asks user whether they want to resume a saved game orÉ // begin a new one. It displays a little info on the state of theirÉ // saved game (number of glider left, points, etc.). short QueryResumeGame (void) { #define kResumeGameDial 1025 DialogPtr theDial; houseType *thisHousePtr; Str255 scoreStr, glidStr; long hadPoints; short hitWhat, hadGliders; char wasState; Boolean leaving; ModalFilterUPP resumeFilterUPP; resumeFilterUPP = NewModalFilterUPP(ResumeFilter); wasState = HGetState((Handle)thisHouse); // get score & num. gliders HLock((Handle)thisHouse); thisHousePtr = *thisHouse; hadPoints = thisHousePtr->savedGame.score; hadGliders = thisHousePtr->savedGame.numGliders; HSetState((Handle)thisHouse, wasState); NumToString(hadPoints, scoreStr); // param text strings NumToString((long)hadGliders, glidStr); if (hadGliders == 1) ParamText(glidStr, "\p", scoreStr, "\p"); else ParamText(glidStr, "\ps", scoreStr, "\p"); // CenterDialog(kResumeGameDial); theDial = GetNewDialog(kResumeGameDial, nil, kPutInFront); if (theDial == nil) RedAlert(kErrDialogDidntLoad); SetPort((GrafPtr)theDial); ShowWindow(GetDialogWindow(theDial)); DrawDefaultButton(theDial); leaving = false; while (!leaving) { ModalDialog(resumeFilterUPP, &hitWhat); if ((hitWhat == kSheWantsNewGame) || (hitWhat == kSheWantsResumeGame)) { leaving = true; } } DisposeDialog(theDial); DisposeModalFilterUPP(resumeFilterUPP); return (hitWhat); } //-------------------------------------------------------------- DoNotInDemo // Only compiled for "demo version" of Glider PRO. It brings up aÉ // dialog that says, essentially, "x" feature is not implemented inÉ // the demo version. #ifdef COMPILEDEMO void DoNotInDemo (void) { #define kNotInDemoAlert 1037 short whoCares; // CenterAlert(kNotInDemoAlert); whoCares = Alert(kNotInDemoAlert, nil); } #endif //-------------------------------------------------------------- HeyYourPissingAHighScore void HeyYourPissingAHighScore (void) { #define kNoHighScoreAlert 1046 short whoCares; // CenterAlert(kNoHighScoreAlert); whoCares = Alert(kNoHighScoreAlert, nil); } //-------------------------------------------------------------- OpenCloseEditWindows // Function goes through and either closes or opens all the variousÉ // editing windows (in response to switching in or out of editor). void OpenCloseEditWindows (void) { if (theMode == kEditMode) { if (houseUnlocked) { if (isMapOpen) OpenMapWindow(); if (isToolsOpen) OpenToolsWindow(); if (isCoordOpen) OpenCoordWindow(); } else { CloseMapWindow(); CloseToolsWindow(); CloseCoordWindow(); } } } \ No newline at end of file diff --git a/Sources/Modes.c b/Sources/Modes.c deleted file mode 100755 index df9a0e8..0000000 --- a/Sources/Modes.c +++ /dev/null @@ -1 +0,0 @@ - //============================================================================ //---------------------------------------------------------------------------- // Modes.c //---------------------------------------------------------------------------- //============================================================================ #include "Externs.h" #include "RectUtils.h" short saidFollow; extern Rect gliderSrc[]; extern Rect transRect; extern short fadeInSequence[], linkedToWhat; extern short rightClip, leftClip, transRoom; extern Boolean hasMirror, shadowVisible, firstPlayer, twoPlayerGame; extern Boolean onePlayerLeft, playerDead; //============================================================== Functions //-------------------------------------------------------------- StartGliderFadingIn void StartGliderFadingIn (gliderPtr thisGlider) { if (foilTotal <= 0) showFoil = false; thisGlider->mode = kGliderFadingIn; thisGlider->whole = thisGlider->dest; thisGlider->frame = 0; thisGlider->dontDraw = false; if (thisGlider->facing == kFaceLeft) { thisGlider->src = gliderSrc[fadeInSequence[thisGlider->frame] + kLeftFadeOffset]; thisGlider->mask = gliderSrc[fadeInSequence[thisGlider->frame] + kLeftFadeOffset]; } else { thisGlider->src = gliderSrc[fadeInSequence[thisGlider->frame]]; thisGlider->mask = gliderSrc[fadeInSequence[thisGlider->frame]]; } } //-------------------------------------------------------------- StartGliderTransportingIn void StartGliderTransportingIn (gliderPtr thisGlider) { if (foilTotal <= 0) showFoil = false; thisGlider->mode = kGliderTransportingIn; thisGlider->whole = thisGlider->dest; thisGlider->frame = 0; thisGlider->dontDraw = false; if (thisGlider->facing == kFaceLeft) { thisGlider->src = gliderSrc[fadeInSequence[thisGlider->frame] + kLeftFadeOffset]; thisGlider->mask = gliderSrc[fadeInSequence[thisGlider->frame] + kLeftFadeOffset]; } else { thisGlider->src = gliderSrc[fadeInSequence[thisGlider->frame]]; thisGlider->mask = gliderSrc[fadeInSequence[thisGlider->frame]]; } } //-------------------------------------------------------------- StartGliderFadingOut void StartGliderFadingOut (gliderPtr thisGlider) { Rect tempBounds; if (thisGlider->mode == kGliderFadingOut) return; if (thisGlider->mode == kGliderGoingFoil) DeckGliderInFoil(thisGlider); else if (thisGlider->mode == kGliderLosingFoil) RemoveFoilFromGlider(thisGlider); if (RectTall(&thisGlider->dest) > kGliderHigh) { tempBounds = thisGlider->dest; QOffsetRect(&tempBounds, playOriginH, playOriginV); AddRectToWorkRects(&tempBounds); if (hasMirror) { tempBounds = thisGlider->dest; QOffsetRect(&tempBounds, playOriginH - 20, playOriginV - 16); AddRectToWorkRects(&tempBounds); } thisGlider->dest.right = thisGlider->dest.left + kGliderWide; thisGlider->dest.top = thisGlider->dest.bottom - kGliderHigh; } thisGlider->mode = kGliderFadingOut; thisGlider->whole = thisGlider->dest; thisGlider->frame = kLastFadeSequence - 1; if (thisGlider->facing == kFaceLeft) { thisGlider->src = gliderSrc[fadeInSequence[thisGlider->frame] + kLeftFadeOffset]; thisGlider->mask = gliderSrc[fadeInSequence[thisGlider->frame] + kLeftFadeOffset]; } else { thisGlider->src = gliderSrc[fadeInSequence[thisGlider->frame]]; thisGlider->mask = gliderSrc[fadeInSequence[thisGlider->frame]]; } } //-------------------------------------------------------------- StartGliderGoingUpStairs void StartGliderGoingUpStairs (gliderPtr thisGlider) { if (thisGlider->mode == kGliderGoingFoil) DeckGliderInFoil(thisGlider); else if (thisGlider->mode == kGliderLosingFoil) RemoveFoilFromGlider(thisGlider); if (thisGlider->mode == kGliderBurning) thisGlider->frame = kWasBurning; else thisGlider->frame = 0; thisGlider->mode = kGliderGoingUp; } //-------------------------------------------------------------- StartGliderGoingDownStairs void StartGliderGoingDownStairs (gliderPtr thisGlider) { if (thisGlider->mode == kGliderGoingFoil) DeckGliderInFoil(thisGlider); else if (thisGlider->mode == kGliderLosingFoil) RemoveFoilFromGlider(thisGlider); if (thisGlider->mode == kGliderBurning) thisGlider->frame = kWasBurning; else thisGlider->frame = 0; thisGlider->mode = kGliderGoingDown; rightClip = GetUpStairsRightEdge(); } //-------------------------------------------------------------- StartGliderMailingIn void StartGliderMailingIn (gliderPtr thisGlider, Rect *bounds, hotPtr who) { short topSought, whoLinked; Byte objLinked; char wasState; PlayPrioritySound(kTransOutSound, kTransOutPriority); whoLinked = who->who; transRoom = masterObjects[whoLinked].roomLink; objLinked = masterObjects[whoLinked].objectLink; linkedToWhat = WhatAreWeLinkedTo(transRoom, objLinked); wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); GetObjectRect(&(*thisHouse)->rooms[transRoom].objects[objLinked], &transRect); HSetState((Handle)thisHouse, wasState); thisGlider->frame = 0; thisGlider->clip = *bounds; topSought = bounds->bottom - RectTall(&thisGlider->dest); thisGlider->clip.top = topSought; } //-------------------------------------------------------------- StartGliderMailingOut void StartGliderMailingOut (gliderPtr thisGlider) { if (thisGlider->mode == kGliderGoingFoil) DeckGliderInFoil(thisGlider); else if (thisGlider->mode == kGliderLosingFoil) RemoveFoilFromGlider(thisGlider); if (linkedToWhat == kLinkedToLeftMailbox) { thisGlider->facing = kFaceLeft; thisGlider->mode = kGliderMailOutLeft; thisGlider->src = gliderSrc[2]; thisGlider->mask = gliderSrc[2]; } else { thisGlider->facing = kFaceRight; thisGlider->mode = kGliderMailOutRight; thisGlider->src = gliderSrc[0]; thisGlider->mask = gliderSrc[0]; } thisGlider->hVel = 0; thisGlider->vVel = 0; thisGlider->hDesiredVel = 0; thisGlider->vDesiredVel = 0; thisGlider->tipped = false; thisGlider->dontDraw = false; } //-------------------------------------------------------------- StartGliderDuctingDown void StartGliderDuctingDown (gliderPtr thisGlider, Rect *bounds, hotPtr who) { short leftSought, whoLinked; Byte objLinked; char wasState; PlayPrioritySound(kTransOutSound, kTransOutPriority); if (thisGlider->mode == kGliderGoingFoil) DeckGliderInFoil(thisGlider); else if (thisGlider->mode == kGliderLosingFoil) RemoveFoilFromGlider(thisGlider); whoLinked = who->who; transRoom = masterObjects[whoLinked].roomLink; objLinked = masterObjects[whoLinked].objectLink; linkedToWhat = WhatAreWeLinkedTo(transRoom, objLinked); wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); GetObjectRect(&(*thisHouse)->rooms[transRoom].objects[objLinked], &transRect); HSetState((Handle)thisHouse, wasState); thisGlider->frame = 0; thisGlider->clip = *bounds; leftSought = bounds->left + ((RectWide(bounds) - kGliderWide) / 2); thisGlider->clip.left = leftSought; thisGlider->mode = kGliderDuctingDown; } //-------------------------------------------------------------- StartGliderDuctingUp void StartGliderDuctingUp (gliderPtr thisGlider, Rect *bounds, hotPtr who) { short leftSought, whoLinked; Byte objLinked; char wasState; PlayPrioritySound(kTransOutSound, kTransOutPriority); if (thisGlider->mode == kGliderGoingFoil) DeckGliderInFoil(thisGlider); else if (thisGlider->mode == kGliderLosingFoil) RemoveFoilFromGlider(thisGlider); whoLinked = who->who; transRoom = masterObjects[whoLinked].roomLink; objLinked = masterObjects[whoLinked].objectLink; linkedToWhat = WhatAreWeLinkedTo(transRoom, objLinked); wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); GetObjectRect(&(*thisHouse)->rooms[transRoom].objects[objLinked], &transRect); HSetState((Handle)thisHouse, wasState); thisGlider->frame = 0; thisGlider->clip = *bounds; leftSought = bounds->left + ((RectWide(bounds) - kGliderWide) / 2); thisGlider->clip.left = leftSought; thisGlider->mode = kGliderDuctingUp; } //-------------------------------------------------------------- StartGliderDuctingIn void StartGliderDuctingIn (gliderPtr thisGlider) { thisGlider->mode = kGliderDuctingIn; thisGlider->whole = thisGlider->dest; thisGlider->dontDraw = false; } //-------------------------------------------------------------- StartGliderTransporting void StartGliderTransporting (gliderPtr thisGlider, hotPtr who) { short whoLinked; Byte objLinked; char wasState; PlayPrioritySound(kTransOutSound, kTransOutPriority); if (thisGlider->mode == kGliderGoingFoil) DeckGliderInFoil(thisGlider); else if (thisGlider->mode == kGliderLosingFoil) RemoveFoilFromGlider(thisGlider); whoLinked = who->who; transRoom = masterObjects[whoLinked].roomLink; objLinked = masterObjects[whoLinked].objectLink; linkedToWhat = WhatAreWeLinkedTo(transRoom, objLinked); wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); GetObjectRect(&(*thisHouse)->rooms[transRoom].objects[objLinked], &transRect); HSetState((Handle)thisHouse, wasState); thisGlider->dest.right = thisGlider->dest.left + kGliderWide; thisGlider->dest.bottom = thisGlider->dest.top + kGliderHigh; thisGlider->destShadow.right = thisGlider->destShadow.left + kGliderWide; thisGlider->destShadow.bottom = thisGlider->destShadow.top + kShadowHigh; thisGlider->mode = kGliderTransporting; thisGlider->whole = thisGlider->dest; thisGlider->frame = kLastFadeSequence - 1; if (thisGlider->facing == kFaceLeft) { thisGlider->src = gliderSrc[fadeInSequence[thisGlider->frame] + kLeftFadeOffset]; thisGlider->mask = gliderSrc[fadeInSequence[thisGlider->frame] + kLeftFadeOffset]; } else { thisGlider->src = gliderSrc[fadeInSequence[thisGlider->frame]]; thisGlider->mask = gliderSrc[fadeInSequence[thisGlider->frame]]; } } //-------------------------------------------------------------- FlagGliderNormal void FlagGliderNormal (gliderPtr thisGlider) { thisGlider->dest.right = thisGlider->dest.left + kGliderWide; thisGlider->dest.bottom = thisGlider->dest.top + kGliderHigh; thisGlider->destShadow.right = thisGlider->destShadow.left + kGliderWide; thisGlider->destShadow.bottom = thisGlider->destShadow.top + kShadowHigh; thisGlider->mode = kGliderNormal; if (thisGlider->facing == kFaceLeft) { thisGlider->src = gliderSrc[2]; thisGlider->mask = gliderSrc[2]; } else { thisGlider->src = gliderSrc[0]; thisGlider->mask = gliderSrc[0]; } thisGlider->hVel = 0; thisGlider->vVel = 0; thisGlider->hDesiredVel = 0; thisGlider->vDesiredVel = 0; thisGlider->tipped = false; thisGlider->ignoreLeft = false; thisGlider->ignoreRight = false; thisGlider->ignoreGround = false; thisGlider->dontDraw = false; thisGlider->frame = 0; shadowVisible = IsShadowVisible(); } //-------------------------------------------------------------- FlagGliderShredding void FlagGliderShredding (gliderPtr thisGlider, Rect *bounds) { PlayPrioritySound(kCaughtFireSound, kCaughtFirePriority); thisGlider->dest.left = bounds->left + 36; thisGlider->dest.right = thisGlider->dest.left + kGliderWide; thisGlider->dest.bottom = thisGlider->dest.top + kGliderHigh; if (thisGlider->dest.left > thisGlider->whole.left) { thisGlider->whole.right = thisGlider->dest.right; thisGlider->wholeShadow.right = thisGlider->dest.right; } else { thisGlider->whole.left = thisGlider->dest.left; thisGlider->wholeShadow.left = thisGlider->dest.left; } thisGlider->destShadow.left = thisGlider->dest.left; thisGlider->destShadow.right = thisGlider->destShadow.left + kGliderWide; thisGlider->destShadow.bottom = thisGlider->destShadow.top + kShadowHigh; thisGlider->mode = kGliderShredding; if (thisGlider->facing == kFaceLeft) { thisGlider->src = gliderSrc[2]; thisGlider->mask = gliderSrc[2]; } else { thisGlider->src = gliderSrc[0]; thisGlider->mask = gliderSrc[0]; } thisGlider->hVel = 0; thisGlider->vVel = 0; thisGlider->hDesiredVel = 0; thisGlider->vDesiredVel = 0; thisGlider->frame = bounds->bottom - 3; thisGlider->tipped = false; } //-------------------------------------------------------------- FlagGliderBurning void FlagGliderBurning (gliderPtr thisGlider) { #define kFramesToBurn 60 PlayPrioritySound(kCaughtFireSound, kCaughtFirePriority); thisGlider->dest.right = thisGlider->dest.left + kGliderWide; thisGlider->dest.top = thisGlider->dest.bottom - kGliderBurningHigh; thisGlider->destShadow.right = thisGlider->destShadow.left + kGliderWide; thisGlider->destShadow.bottom = thisGlider->destShadow.top + kShadowHigh; thisGlider->mode = kGliderBurning; if (thisGlider->facing == kFaceLeft) { thisGlider->src = gliderSrc[25]; thisGlider->mask = gliderSrc[25]; } else { thisGlider->src = gliderSrc[21]; thisGlider->mask = gliderSrc[21]; } thisGlider->hVel = 0; thisGlider->vVel = 0; thisGlider->hDesiredVel = 0; thisGlider->vDesiredVel = 0; thisGlider->frame = 0; thisGlider->wasMode = kFramesToBurn; // used to count down burning thisGlider->tipped = false; } //-------------------------------------------------------------- FlagGliderFaceLeft void FlagGliderFaceLeft (gliderPtr thisGlider) { thisGlider->mode = kGliderFaceLeft; thisGlider->frame = kLastAboutFaceFrame; thisGlider->src = gliderSrc[kLastAboutFaceFrame]; thisGlider->mask = gliderSrc[kLastAboutFaceFrame]; } //-------------------------------------------------------------- FlagGliderFaceRight void FlagGliderFaceRight (gliderPtr thisGlider) { thisGlider->mode = kGliderFaceRight; thisGlider->frame = kFirstAboutFaceFrame; thisGlider->src = gliderSrc[kFirstAboutFaceFrame]; thisGlider->mask = gliderSrc[kFirstAboutFaceFrame]; } //-------------------------------------------------------------- FlagGliderInLimbo void FlagGliderInLimbo (gliderPtr thisGlider, Boolean sayIt) { thisGlider->wasMode = thisGlider->mode; thisGlider->mode = kGliderInLimbo; if ((sayIt) && (saidFollow < 3)) { PlayPrioritySound(kFollowSound, kFollowPriority); saidFollow++; } firstPlayer = thisGlider->which; } //-------------------------------------------------------------- UndoGliderLimbo void UndoGliderLimbo (gliderPtr thisGlider) { if ((twoPlayerGame) && (onePlayerLeft) && (thisGlider->which == playerDead)) return; if (thisGlider->mode == kGliderInLimbo) thisGlider->mode = thisGlider->wasMode; thisGlider->dontDraw = false; } //-------------------------------------------------------------- ToggleGliderFacing void ToggleGliderFacing (gliderPtr thisGlider) { if (thisGlider->mode != kGliderNormal) return; if (thisGlider->facing == kFaceLeft) FlagGliderFaceRight(thisGlider); else FlagGliderFaceLeft(thisGlider); } //-------------------------------------------------------------- InsureGliderFacingRight void InsureGliderFacingRight (gliderPtr thisGlider) { if ((twoPlayerGame) && (onePlayerLeft) && (thisGlider->which == playerDead)) return; if ((thisGlider->facing == kFaceLeft) && (thisGlider->mode != kGliderBurning)) FlagGliderFaceRight(thisGlider); } //-------------------------------------------------------------- InsureGliderFacingLeft void InsureGliderFacingLeft (gliderPtr thisGlider) { if ((twoPlayerGame) && (onePlayerLeft) && (thisGlider->which == playerDead)) return; if ((thisGlider->facing == kFaceRight) && (thisGlider->mode != kGliderBurning)) FlagGliderFaceLeft(thisGlider); } //-------------------------------------------------------------- ReadyGliderForTripUpStairs void ReadyGliderForTripUpStairs (gliderPtr thisGlider) { #define kVGliderAppearsComingUp 100 if ((twoPlayerGame) && (thisGlider->which == playerDead) && (onePlayerLeft)) return; thisGlider->facing = kFaceLeft; thisGlider->mode = kGliderComingUp; thisGlider->src = gliderSrc[2]; thisGlider->mask = gliderSrc[2]; thisGlider->hVel = 0; thisGlider->vVel = 0; thisGlider->hDesiredVel = 0; thisGlider->vDesiredVel = 0; thisGlider->tipped = false; rightClip = GetUpStairsRightEdge(); thisGlider->dest = thisGlider->src; ZeroRectCorner(&thisGlider->dest); QOffsetRect(&thisGlider->dest, rightClip, kVGliderAppearsComingUp); thisGlider->whole = thisGlider->dest; thisGlider->destShadow.left = thisGlider->dest.left; thisGlider->destShadow.right = thisGlider->dest.right; thisGlider->wholeShadow = thisGlider->destShadow; FinishGliderUpStairs(thisGlider); } //-------------------------------------------------------------- ReadyGliderForTripDownStairs void ReadyGliderForTripDownStairs (gliderPtr thisGlider) { #define kVGliderAppearsComingDown 100 if ((twoPlayerGame) && (thisGlider->which == playerDead) && (onePlayerLeft)) return; thisGlider->facing = kFaceRight; thisGlider->mode = kGliderComingDown; thisGlider->src = gliderSrc[0]; thisGlider->mask = gliderSrc[0]; thisGlider->hVel = 0; thisGlider->vVel = 0; thisGlider->hDesiredVel = 0; thisGlider->vDesiredVel = 0; thisGlider->tipped = false; leftClip = GetDownStairsLeftEdge(); thisGlider->dest = thisGlider->src; ZeroRectCorner(&thisGlider->dest); QOffsetRect(&thisGlider->dest, leftClip - kGliderWide, kVGliderAppearsComingDown); thisGlider->whole = thisGlider->dest; thisGlider->destShadow.left = thisGlider->dest.left; thisGlider->destShadow.right = thisGlider->dest.right; thisGlider->wholeShadow = thisGlider->destShadow; FinishGliderDownStairs(thisGlider); } //-------------------------------------------------------------- StartGliderFoilGoing void StartGliderFoilGoing (gliderPtr thisGlider) { if ((thisGlider->mode == kGliderGoingFoil) || (thisGlider->mode == kGliderInLimbo)) return; QuickFoilRefresh(false); thisGlider->mode = kGliderGoingFoil; thisGlider->whole = thisGlider->dest; thisGlider->frame = 0; if (thisGlider->facing == kFaceLeft) { thisGlider->src = gliderSrc[(10 - thisGlider->frame) + kLeftFadeOffset]; thisGlider->mask = gliderSrc[(10 - thisGlider->frame) + kLeftFadeOffset]; } else { thisGlider->src = gliderSrc[10 - thisGlider->frame]; thisGlider->mask = gliderSrc[10 - thisGlider->frame]; } } //-------------------------------------------------------------- StartGliderFoilLosing void StartGliderFoilLosing (gliderPtr thisGlider) { if ((thisGlider->mode == kGliderLosingFoil) || (thisGlider->mode == kGliderInLimbo)) return; QuickFoilRefresh(false); PlayPrioritySound(kFizzleSound, kFizzlePriority); thisGlider->mode = kGliderLosingFoil; thisGlider->whole = thisGlider->dest; thisGlider->frame = 0; if (thisGlider->facing == kFaceLeft) { thisGlider->src = gliderSrc[(10 - thisGlider->frame) + kLeftFadeOffset]; thisGlider->mask = gliderSrc[(10 - thisGlider->frame) + kLeftFadeOffset]; } else { thisGlider->src = gliderSrc[10 - thisGlider->frame]; thisGlider->mask = gliderSrc[10 - thisGlider->frame]; } } //-------------------------------------------------------------- TagGliderIdle void TagGliderIdle (gliderPtr thisGlider) { if ((twoPlayerGame) && (onePlayerLeft) && (thisGlider->which == playerDead)) return; thisGlider->wasMode = thisGlider->mode; thisGlider->mode = kGliderIdle; thisGlider->hVel = 30; // used for 30 frame delay } \ No newline at end of file diff --git a/Sources/Music.c b/Sources/Music.c deleted file mode 100755 index da849f3..0000000 --- a/Sources/Music.c +++ /dev/null @@ -1 +0,0 @@ - //============================================================================ //---------------------------------------------------------------------------- // Music.c //---------------------------------------------------------------------------- //============================================================================ #include #include #include "Environ.h" #include "Externs.h" #define kBaseBufferMusicID 2000 #define kMaxMusic 7 #define kLastMusicPiece 16 #define kLastGamePiece 6 pascal void MusicCallBack (SndChannelPtr, SndCommand *); OSErr LoadMusicSounds (void); OSErr DumpMusicSounds (void); OSErr OpenMusicChannel (void); OSErr CloseMusicChannel (void); SndCallBackUPP musicCallBackUPP; SndChannelPtr musicChannel; Ptr theMusicData[kMaxMusic]; short musicSoundID, musicCursor; short musicScore[kLastMusicPiece]; short gameScore[kLastGamePiece]; short musicMode; Boolean isMusicOn, isPlayMusicIdle, isPlayMusicGame; Boolean failedMusic, dontLoadMusic; extern Boolean isSoundOn; //============================================================== Functions //-------------------------------------------------------------- StartMusic OSErr StartMusic (void) { SndCommand theCommand; OSErr theErr; short soundVolume; theErr = noErr; if (dontLoadMusic) return(theErr); UnivGetSoundVolume(&soundVolume, thisMac.hasSM3); if ((soundVolume != 0) && (!failedMusic)) { theCommand.cmd = bufferCmd; theCommand.param1 = 0; theCommand.param2 = (long)(theMusicData[musicSoundID]); theErr = SndDoCommand(musicChannel, &theCommand, false); if (theErr != noErr) return (theErr); theCommand.cmd = 0; theCommand.param1 = 1964; theCommand.param2 = SetCurrentA5(); theErr = SndDoCommand(musicChannel, &theCommand, false); if (theErr != noErr) return (theErr); musicCursor++; if (musicCursor >= kLastMusicPiece) musicCursor = 0; musicSoundID = musicScore[musicCursor]; theCommand.cmd = bufferCmd; theCommand.param1 = 0; theCommand.param2 = (long)(theMusicData[musicSoundID]); theErr = SndDoCommand(musicChannel, &theCommand, false); if (theErr != noErr) return (theErr); theCommand.cmd = callBackCmd; theCommand.param1 = 0; theCommand.param2 = SetCurrentA5(); theErr = SndDoCommand(musicChannel, &theCommand, false); isMusicOn = true; } return (theErr); } //-------------------------------------------------------------- StopTheMusic void StopTheMusic (void) { SndCommand theCommand; OSErr theErr; if (dontLoadMusic) return; theErr = noErr; if ((isMusicOn) && (!failedMusic)) { theCommand.cmd = flushCmd; theCommand.param1 = 0; theCommand.param2 = 0L; theErr = SndDoImmediate(musicChannel, &theCommand); theCommand.cmd = quietCmd; theCommand.param1 = 0; theCommand.param2 = 0L; theErr = SndDoImmediate(musicChannel, &theCommand); isMusicOn = false; } } //-------------------------------------------------------------- ToggleMusicWhilePlaying void ToggleMusicWhilePlaying (void) { OSErr theErr; if (dontLoadMusic) return; if (isPlayMusicGame) { if (!isMusicOn) theErr = StartMusic(); } else { if (isMusicOn) StopTheMusic(); } } //-------------------------------------------------------------- SetMusicalPiece void SetMusicalMode (short newMode) { if (dontLoadMusic) return; switch (newMode) { case kKickGameScoreMode: musicCursor = 2; break; case kProdGameScoreMode: musicCursor = -1; break; default: musicMode = newMode; musicCursor = 0; break; } } //-------------------------------------------------------------- MusicCallBack pascal void MusicCallBack (SndChannelPtr theChannel, SndCommand *theCommand) { #pragma unused (theChannel) long thisA5, gameA5; OSErr theErr; // gameA5 = theCommand.param2; // thisA5 = SetA5(gameA5); switch (musicMode) { case kPlayGameScoreMode: musicCursor++; if (musicCursor >= kLastGamePiece) musicCursor = 1; musicSoundID = gameScore[musicCursor]; if (musicSoundID < 0) { musicCursor += musicSoundID; musicSoundID = gameScore[musicCursor]; } break; case kPlayWholeScoreMode: musicCursor++; if (musicCursor >= kLastMusicPiece - 1) musicCursor = 0; musicSoundID = musicScore[musicCursor]; break; default: musicSoundID = musicMode; break; } theCommand->cmd = bufferCmd; theCommand->param1 = 0; theCommand->param2 = (long)(theMusicData[musicSoundID]); theErr = SndDoCommand(musicChannel, theCommand, false); theCommand->cmd = callBackCmd; theCommand->param1 = 0; theCommand->param2 = gameA5; theErr = SndDoCommand(musicChannel, theCommand, false); thisA5 = SetA5(thisA5); } //-------------------------------------------------------------- LoadMusicSounds OSErr LoadMusicSounds (void) { Handle theSound; long soundDataSize; OSErr theErr; short i; theErr = noErr; for (i = 0; i < kMaxMusic; i++) theMusicData[i] = nil; for (i = 0; i < kMaxMusic; i++) { theSound = GetResource('snd ', i + kBaseBufferMusicID); if (theSound == nil) return (MemError()); HLock(theSound); soundDataSize = GetHandleSize(theSound) - 20L; HUnlock(theSound); theMusicData[i] = NewPtr(soundDataSize); if (theMusicData[i] == nil) return (MemError()); HLock(theSound); BlockMove((Ptr)(*theSound + 20L), theMusicData[i], soundDataSize); ReleaseResource(theSound); } return (theErr); } //-------------------------------------------------------------- DumpMusicSounds OSErr DumpMusicSounds (void) { OSErr theErr; short i; theErr = noErr; for (i = 0; i < kMaxMusic; i++) { if (theMusicData[i] != nil) DisposePtr(theMusicData[i]); theMusicData[i] = nil; } return (theErr); } //-------------------------------------------------------------- OpenMusicChannel OSErr OpenMusicChannel (void) { OSErr theErr; musicCallBackUPP = NewSndCallBackProc(MusicCallBack); theErr = noErr; if (musicChannel != nil) return (theErr); musicChannel = nil; theErr = SndNewChannel(&musicChannel, sampledSynth, initNoInterp + initMono, (SndCallBackUPP)musicCallBackUPP); return (theErr); } //-------------------------------------------------------------- CloseMusicChannel OSErr CloseMusicChannel (void) { OSErr theErr; theErr = noErr; if (musicChannel != nil) theErr = SndDisposeChannel(musicChannel, true); musicChannel = nil; DisposeSndCallBackUPP(musicCallBackUPP); return (theErr); } //-------------------------------------------------------------- InitMusic void InitMusic (void) { OSErr theErr; if (dontLoadMusic) return; musicChannel = nil; failedMusic = false; isMusicOn = false; theErr = LoadMusicSounds(); if (theErr != noErr) { YellowAlert(kYellowNoMusic, theErr); failedMusic = true; return; } theErr = OpenMusicChannel(); musicScore[0] = 0; musicScore[1] = 1; musicScore[2] = 2; musicScore[3] = 3; musicScore[4] = 4; musicScore[5] = 4; musicScore[6] = 0; musicScore[7] = 1; musicScore[8] = 2; musicScore[9] = 3; musicScore[10] = kPlayChorus; musicScore[11] = kPlayChorus; musicScore[12] = kPlayRefrainSparse1; musicScore[13] = kPlayRefrainSparse2; musicScore[14] = kPlayChorus; musicScore[15] = kPlayChorus; gameScore[0] = kPlayRefrainSparse2; gameScore[1] = kPlayRefrainSparse1; gameScore[2] = -1; gameScore[3] = kPlayRefrainSparse2; gameScore[4] = kPlayChorus; gameScore[5] = kPlayChorus; musicCursor = 0; musicSoundID = musicScore[musicCursor]; musicMode = kPlayWholeScoreMode; if (isPlayMusicIdle) { theErr = StartMusic(); if (theErr != noErr) { YellowAlert(kYellowNoMusic, theErr); failedMusic = true; } } } //-------------------------------------------------------------- KillMusic void KillMusic (void) { OSErr theErr; if (dontLoadMusic) return; theErr = DumpMusicSounds(); theErr = CloseMusicChannel(); } //-------------------------------------------------------------- MusicBytesNeeded long MusicBytesNeeded (void) { Handle theSound; long totalBytes; short i; totalBytes = 0L; SetResLoad(false); for (i = 0; i < kMaxMusic; i++) { theSound = GetResource('snd ', i + kBaseBufferMusicID); if (theSound == nil) { SetResLoad(true); return ((long)ResError()); } totalBytes += GetMaxResourceSize(theSound); // ReleaseResource(theSound); } SetResLoad(true); return totalBytes; } //-------------------------------------------------------------- TellHerNoMusic void TellHerNoMusic (void) { #define kNoMemForMusicAlert 1038 short hitWhat; // CenterAlert(kNoMemForMusicAlert); hitWhat = Alert(kNoMemForMusicAlert, nil); } \ No newline at end of file diff --git a/Sources/ObjectAdd.c b/Sources/ObjectAdd.c deleted file mode 100755 index 8c0c8a1..0000000 --- a/Sources/ObjectAdd.c +++ /dev/null @@ -1 +0,0 @@ - //============================================================================ //---------------------------------------------------------------------------- // ObjectAdd.c //---------------------------------------------------------------------------- //============================================================================ #include #include "Externs.h" #include "ObjectEdit.h" #include "RectUtils.h" #define kNoMoreObjectsAlert 1008 #define kNoMoreSpecialAlert 1028 #define kMaxSoundTriggers 1 #define kMaxStairs 1 #define kMouseholeBottom 295 #define kFireplaceBottom 297 #define kManholeSits 322 #define kGrecoVentTop 303 #define kSewerBlowerTop 292 short FindEmptyObjectSlot (void); short HowManyCandleObjects (void); short HowManyTikiObjects (void); short HowManyBBQObjects (void); short HowManyCuckooObjects (void); short HowManyBandsObjects (void); short HowManyGreaseObjects (void); short HowManyStarsObjects (void); short HowManySoundObjects (void); short HowManyUpStairsObjects (void); short HowManyDownStairsObjects (void); short HowManyShredderObjects (void); short HowManyDynamicObjects (void); void ShoutNoMoreSpecialObjects (void); short wasFlower; //============================================================== Functions //-------------------------------------------------------------- AddNewObject Boolean AddNewObject (Point where, short what, Boolean showItNow) { KeyMap theseKeys; Rect srcRect, newRect; short direction, dist; Boolean handled, drawWholeRoom; #ifndef COMPILEDEMO objActive = FindEmptyObjectSlot(); if (objActive == -1) { ShoutNoMoreObjects(); return (false); } drawWholeRoom = false; switch (what) { case kFloorVent: case kFloorBlower: case kSewerGrate: case kTaper: case kCandle: case kStubby: case kTiki: case kBBQ: case kInvisBlower: case kGrecoVent: case kSewerBlower: case kLiftArea: if (((what == kTaper) || (what == kCandle) || (what == kStubby)) && (HowManyCandleObjects() >= kMaxCandles)) { ShoutNoMoreSpecialObjects(); return (false); } else if ((what == kTiki) && (HowManyTikiObjects() >= kMaxTikis)) { ShoutNoMoreSpecialObjects(); return (false); } else if ((what == kBBQ) && (HowManyBBQObjects() >= kMaxCoals)) { ShoutNoMoreSpecialObjects(); return (false); } srcRect = srcRects[what]; thisRoom->objects[objActive].data.a.topLeft.h = where.h - HalfRectWide(&srcRect); QSetRect(&newRect, 0, 0, RectWide(&srcRect), RectTall(&srcRect)); if (what == kFloorVent) thisRoom->objects[objActive].data.a.topLeft.v = kFloorVentTop; else if (what == kFloorBlower) thisRoom->objects[objActive].data.a.topLeft.v = kFloorBlowerTop; else if ((what == kTaper) || (what == kCandle) || (what == kStubby) || (what == kTiki) || (what == kBBQ) || (what == kInvisBlower) || (what == kLiftArea)) thisRoom->objects[objActive].data.a.topLeft.v = where.v - HalfRectTall(&srcRect); else if (what == kGrecoVent) thisRoom->objects[objActive].data.a.topLeft.v = kGrecoVentTop; else if (what == kSewerBlower) thisRoom->objects[objActive].data.a.topLeft.v = kSewerBlowerTop; QOffsetRect(&newRect, thisRoom->objects[objActive].data.a.topLeft.h, thisRoom->objects[objActive].data.a.topLeft.v); thisRoom->objects[objActive].data.a.distance = 64; thisRoom->objects[objActive].data.a.initial = true; thisRoom->objects[objActive].data.a.state = true; thisRoom->objects[objActive].data.a.vector = 0x01; if (what == kLiftArea) thisRoom->objects[objActive].data.a.tall = 0x10; else thisRoom->objects[objActive].data.a.tall = 0x00; break; case kCeilingVent: case kCeilingBlower: srcRect = srcRects[what]; thisRoom->objects[objActive].data.a.topLeft.h = where.h - HalfRectWide(&srcRect); QSetRect(&newRect, 0, 0, RectWide(&srcRect), RectTall(&srcRect)); if (what == kCeilingVent) thisRoom->objects[objActive].data.a.topLeft.v = kCeilingVentTop; else if (what == kCeilingBlower) thisRoom->objects[objActive].data.a.topLeft.v = kCeilingBlowerTop; QOffsetRect(&newRect, thisRoom->objects[objActive].data.a.topLeft.h, thisRoom->objects[objActive].data.a.topLeft.v); thisRoom->objects[objActive].data.a.distance = 32; thisRoom->objects[objActive].data.a.initial = true; thisRoom->objects[objActive].data.a.state = true; thisRoom->objects[objActive].data.a.vector = 0x04; break; case kLeftFan: thisRoom->objects[objActive].data.a.topLeft.h = where.h - HalfRectWide(&srcRects[kLeftFan]); thisRoom->objects[objActive].data.a.topLeft.v = where.v - HalfRectTall(&srcRects[kLeftFan]); QSetRect(&newRect, 0, 0, RectWide(&srcRects[kLeftFan]), RectTall(&srcRects[kLeftFan])); QOffsetRect(&newRect, thisRoom->objects[objActive].data.a.topLeft.h, thisRoom->objects[objActive].data.a.topLeft.v); thisRoom->objects[objActive].data.a.distance = 32; thisRoom->objects[objActive].data.a.initial = true; thisRoom->objects[objActive].data.a.state = true; thisRoom->objects[objActive].data.a.vector = 0x08; break; case kRightFan: thisRoom->objects[objActive].data.a.topLeft.h = where.h - HalfRectWide(&srcRects[kRightFan]); thisRoom->objects[objActive].data.a.topLeft.v = where.v - HalfRectTall(&srcRects[kRightFan]); QSetRect(&newRect, 0, 0, RectWide(&srcRects[kRightFan]), RectTall(&srcRects[kRightFan])); QOffsetRect(&newRect, thisRoom->objects[objActive].data.a.topLeft.h, thisRoom->objects[objActive].data.a.topLeft.v); thisRoom->objects[objActive].data.a.distance = 32; thisRoom->objects[objActive].data.a.initial = true; thisRoom->objects[objActive].data.a.state = true; thisRoom->objects[objActive].data.a.vector = 0x02; break; case kTable: case kShelf: case kCabinet: case kFilingCabinet: case kWasteBasket: case kMilkCrate: case kCounter: case kDresser: case kDeckTable: case kStool: case kTrunk: case kInvisObstacle: case kBooks: case kInvisBounce: newRect = srcRects[what]; CenterRectOnPoint(&newRect, where); if (what == kCounter) newRect.bottom = kCounterBottom; else if (what == kDresser) newRect.bottom = kDresserBottom; thisRoom->objects[objActive].data.b.bounds = newRect; thisRoom->objects[objActive].data.b.pict = 0; break; case kManhole: newRect = srcRects[kManhole]; CenterRectOnPoint(&newRect, where); newRect.left = (((newRect.left - 3) / 64) * 64) + 3; newRect.right = newRect.left + RectWide(&srcRects[kManhole]); newRect.bottom = kManholeSits; newRect.top = newRect.bottom - RectTall(&srcRects[kManhole]); thisRoom->objects[objActive].data.b.bounds = newRect; thisRoom->objects[objActive].data.b.pict = 0; break; case kRedClock: case kBlueClock: case kYellowClock: case kCuckoo: case kPaper: case kBattery: case kBands: case kFoil: case kStar: case kSparkle: case kHelium: if ((what == kCuckoo) && (HowManyCuckooObjects() >= kMaxPendulums)) { ShoutNoMoreSpecialObjects(); return (false); } else if ((what == kBands) && (HowManyBandsObjects() >= kMaxRubberBands)) { ShoutNoMoreSpecialObjects(); return (false); } else if ((what == kStar) && (HowManyStarsObjects() >= kMaxStars)) { ShoutNoMoreSpecialObjects(); return (false); } else if ((what == kSparkle) && (HowManyDynamicObjects() >= kMaxDynamicObs)) { ShoutNoMoreSpecialObjects(); return (false); } thisRoom->objects[objActive].data.c.topLeft.h = where.h - HalfRectWide(&srcRects[what]); thisRoom->objects[objActive].data.c.topLeft.v = where.v - HalfRectTall(&srcRects[what]); QSetRect(&newRect, 0, 0, RectWide(&srcRects[what]), RectTall(&srcRects[what])); QOffsetRect(&newRect, thisRoom->objects[objActive].data.c.topLeft.h, thisRoom->objects[objActive].data.c.topLeft.v); thisRoom->objects[objActive].data.c.length = 0; thisRoom->objects[objActive].data.c.points = 0; thisRoom->objects[objActive].data.c.state = true; thisRoom->objects[objActive].data.c.initial = true; break; case kGreaseRt: case kGreaseLf: if (HowManyGreaseObjects() >= kMaxGrease) { ShoutNoMoreSpecialObjects(); return (false); } thisRoom->objects[objActive].data.c.topLeft.h = where.h - HalfRectWide(&srcRects[what]); thisRoom->objects[objActive].data.c.topLeft.v = where.v - HalfRectTall(&srcRects[what]); QSetRect(&newRect, 0, 0, RectWide(&srcRects[what]), RectTall(&srcRects[what])); QOffsetRect(&newRect, thisRoom->objects[objActive].data.c.topLeft.h, thisRoom->objects[objActive].data.c.topLeft.v); thisRoom->objects[objActive].data.c.length = 64; thisRoom->objects[objActive].data.c.points = 0; thisRoom->objects[objActive].data.c.state = true; thisRoom->objects[objActive].data.c.initial = true; break; case kInvisBonus: thisRoom->objects[objActive].data.c.topLeft.h = where.h - HalfRectWide(&srcRects[what]); thisRoom->objects[objActive].data.c.topLeft.v = where.v - HalfRectTall(&srcRects[what]); QSetRect(&newRect, 0, 0, RectWide(&srcRects[what]), RectTall(&srcRects[what])); QOffsetRect(&newRect, thisRoom->objects[objActive].data.c.topLeft.h, thisRoom->objects[objActive].data.c.topLeft.v); thisRoom->objects[objActive].data.c.length = 0; thisRoom->objects[objActive].data.c.points = 100; thisRoom->objects[objActive].data.c.state = true; thisRoom->objects[objActive].data.c.initial = true; break; case kSlider: thisRoom->objects[objActive].data.c.topLeft.h = where.h - HalfRectWide(&srcRects[what]); thisRoom->objects[objActive].data.c.topLeft.v = where.v - HalfRectTall(&srcRects[what]); QSetRect(&newRect, 0, 0, RectWide(&srcRects[what]), RectTall(&srcRects[what])); QOffsetRect(&newRect, thisRoom->objects[objActive].data.c.topLeft.h, thisRoom->objects[objActive].data.c.topLeft.v); thisRoom->objects[objActive].data.c.length = 64; thisRoom->objects[objActive].data.c.points = 0; thisRoom->objects[objActive].data.c.state = true; thisRoom->objects[objActive].data.c.initial = true; break; case kUpStairs: case kDownStairs: if ((what == kUpStairs) && (HowManyUpStairsObjects() >= kMaxStairs)) { ShoutNoMoreSpecialObjects(); return (false); } else if ((what == kDownStairs) && (HowManyDownStairsObjects() >= kMaxStairs)) { ShoutNoMoreSpecialObjects(); return (false); } thisRoom->objects[objActive].data.d.topLeft.h = where.h - HalfRectWide(&srcRects[what]); thisRoom->objects[objActive].data.d.topLeft.v = kStairsTop; QSetRect(&newRect, 0, 0, RectWide(&srcRects[what]), RectTall(&srcRects[what])); QOffsetRect(&newRect, thisRoom->objects[objActive].data.d.topLeft.h, thisRoom->objects[objActive].data.d.topLeft.v); thisRoom->objects[objActive].data.d.tall = 0; thisRoom->objects[objActive].data.d.where = -1; thisRoom->objects[objActive].data.d.who = 255; thisRoom->objects[objActive].data.d.wide = 0; break; case kMailboxLf: case kMailboxRt: thisRoom->objects[objActive].data.d.topLeft.h = where.h - HalfRectWide(&srcRects[what]); thisRoom->objects[objActive].data.d.topLeft.v = where.v - HalfRectTall(&srcRects[what]); QSetRect(&newRect, 0, 0, RectWide(&srcRects[what]), RectTall(&srcRects[what])); QOffsetRect(&newRect, thisRoom->objects[objActive].data.d.topLeft.h, thisRoom->objects[objActive].data.d.topLeft.v); thisRoom->objects[objActive].data.d.tall = 0; thisRoom->objects[objActive].data.d.where = -1; thisRoom->objects[objActive].data.d.who = 255; thisRoom->objects[objActive].data.d.wide = 0; break; case kFloorTrans: thisRoom->objects[objActive].data.d.topLeft.h = where.h - HalfRectWide(&srcRects[what]); thisRoom->objects[objActive].data.d.topLeft.v = kFloorTransTop; QSetRect(&newRect, 0, 0, RectWide(&srcRects[what]), RectTall(&srcRects[what])); QOffsetRect(&newRect, thisRoom->objects[objActive].data.d.topLeft.h, thisRoom->objects[objActive].data.d.topLeft.v); thisRoom->objects[objActive].data.d.tall = 0; thisRoom->objects[objActive].data.d.where = -1; thisRoom->objects[objActive].data.d.who = 255; thisRoom->objects[objActive].data.d.wide = 0; break; case kCeilingTrans: thisRoom->objects[objActive].data.d.topLeft.h = where.h - HalfRectWide(&srcRects[what]); thisRoom->objects[objActive].data.d.topLeft.v = kCeilingTransTop; QSetRect(&newRect, 0, 0, RectWide(&srcRects[what]), RectTall(&srcRects[what])); QOffsetRect(&newRect, thisRoom->objects[objActive].data.d.topLeft.h, thisRoom->objects[objActive].data.d.topLeft.v); thisRoom->objects[objActive].data.d.tall = 0; thisRoom->objects[objActive].data.d.where = -1; thisRoom->objects[objActive].data.d.who = 255; thisRoom->objects[objActive].data.d.wide = 0; break; case kDoorInLf: case kDoorInRt: case kDoorExRt: case kDoorExLf: case kWindowInLf: case kWindowInRt: case kWindowExRt: case kWindowExLf: if ((what == kDoorInLf) || (what == kDoorInRt)) { if (where.h > (kRoomWide / 2)) { what = kDoorInRt; thisRoom->objects[objActive].what = kDoorInRt; thisRoom->objects[objActive].data.d.topLeft.h = kDoorInRtLeft; thisRoom->objects[objActive].data.d.topLeft.v = kDoorInTop; } else { what = kDoorInLf; thisRoom->objects[objActive].what = kDoorInLf; thisRoom->objects[objActive].data.d.topLeft.h = kDoorInLfLeft; thisRoom->objects[objActive].data.d.topLeft.v = kDoorInTop; } } else if ((what == kDoorExRt) || (what == kDoorExLf)) { if (where.h > (kRoomWide / 2)) { what = kDoorExRt; thisRoom->objects[objActive].what = kDoorExRt; thisRoom->objects[objActive].data.d.topLeft.h = kDoorExRtLeft; thisRoom->objects[objActive].data.d.topLeft.v = kDoorExTop; } else { what = kDoorExLf; thisRoom->objects[objActive].what = kDoorExLf; thisRoom->objects[objActive].data.d.topLeft.h = kDoorExLfLeft; thisRoom->objects[objActive].data.d.topLeft.v = kDoorExTop; } } else if ((what == kWindowInLf) || (what == kWindowInRt)) { if (where.h > (kRoomWide / 2)) { what = kWindowInRt; thisRoom->objects[objActive].what = kWindowInRt; thisRoom->objects[objActive].data.d.topLeft.h = kWindowInRtLeft; thisRoom->objects[objActive].data.d.topLeft.v = kWindowInTop; } else { what = kWindowInLf; thisRoom->objects[objActive].what = kWindowInLf; thisRoom->objects[objActive].data.d.topLeft.h = kWindowInLfLeft; thisRoom->objects[objActive].data.d.topLeft.v = kWindowInTop; } } else if ((what == kWindowExRt) || (what == kWindowExLf)) { if (where.h > (kRoomWide / 2)) { what = kWindowExRt; thisRoom->objects[objActive].what = kWindowExRt; thisRoom->objects[objActive].data.d.topLeft.h = kWindowExRtLeft; thisRoom->objects[objActive].data.d.topLeft.v = kWindowExTop; } else { what = kWindowExLf; thisRoom->objects[objActive].what = kWindowExLf; thisRoom->objects[objActive].data.d.topLeft.h = kWindowExLfLeft; thisRoom->objects[objActive].data.d.topLeft.v = kWindowExTop; } } QSetRect(&newRect, 0, 0, RectWide(&srcRects[what]), RectTall(&srcRects[what])); QOffsetRect(&newRect, thisRoom->objects[objActive].data.d.topLeft.h, thisRoom->objects[objActive].data.d.topLeft.v); thisRoom->objects[objActive].data.d.tall = 0; thisRoom->objects[objActive].data.d.where = -1; thisRoom->objects[objActive].data.d.who = 255; thisRoom->objects[objActive].data.d.wide = 0; drawWholeRoom = true; break; case kInvisTrans: newRect = srcRects[what]; CenterRectOnPoint(&newRect, where); thisRoom->objects[objActive].data.d.topLeft.h = newRect.left; thisRoom->objects[objActive].data.d.topLeft.v = newRect.top; thisRoom->objects[objActive].data.d.tall = newRect.bottom - newRect.top; thisRoom->objects[objActive].data.d.where = -1; thisRoom->objects[objActive].data.d.who = 255; thisRoom->objects[objActive].data.d.wide = 0; break; case kDeluxeTrans: newRect = srcRects[what]; CenterRectOnPoint(&newRect, where); thisRoom->objects[objActive].data.d.topLeft.h = newRect.left; thisRoom->objects[objActive].data.d.topLeft.v = newRect.top; thisRoom->objects[objActive].data.d.tall = 0x1010; // 64 x 64 thisRoom->objects[objActive].data.d.where = -1; thisRoom->objects[objActive].data.d.who = 255; thisRoom->objects[objActive].data.d.wide = 0x10; // Initially on break; case kLightSwitch: case kMachineSwitch: case kThermostat: case kPowerSwitch: case kKnifeSwitch: case kInvisSwitch: case kTrigger: case kLgTrigger: case kSoundTrigger: if ((what == kSoundTrigger) && (HowManySoundObjects() >= kMaxSoundTriggers)) { ShoutNoMoreSpecialObjects(); return (false); } thisRoom->objects[objActive].data.e.topLeft.h = where.h - HalfRectWide(&srcRects[what]); thisRoom->objects[objActive].data.e.topLeft.v = where.v - HalfRectTall(&srcRects[what]); QSetRect(&newRect, 0, 0, RectWide(&srcRects[what]), RectTall(&srcRects[what])); QOffsetRect(&newRect, thisRoom->objects[objActive].data.e.topLeft.h, thisRoom->objects[objActive].data.e.topLeft.v); thisRoom->objects[objActive].data.e.delay = 0; if (what == kSoundTrigger) thisRoom->objects[objActive].data.e.where = 3000; else thisRoom->objects[objActive].data.e.where = -1; thisRoom->objects[objActive].data.e.who = 255; if ((what == kTrigger) || (what == kLgTrigger)) thisRoom->objects[objActive].data.e.type = kOneShot; else thisRoom->objects[objActive].data.e.type = kToggle; break; case kCeilingLight: case kLightBulb: case kTableLamp: case kHipLamp: case kDecoLamp: case kFlourescent: case kTrackLight: case kInvisLight: if (what == kCeilingLight) { thisRoom->objects[objActive].data.f.topLeft.h = where.h - HalfRectWide(&srcRects[what]); thisRoom->objects[objActive].data.f.topLeft.v = kCeilingLightTop; QSetRect(&newRect, 0, 0, RectWide(&srcRects[what]), RectTall(&srcRects[what])); QOffsetRect(&newRect, thisRoom->objects[objActive].data.f.topLeft.h, thisRoom->objects[objActive].data.f.topLeft.v); thisRoom->objects[objActive].data.f.length = 64; } else if (what == kHipLamp) { thisRoom->objects[objActive].data.f.topLeft.h = where.h - HalfRectWide(&srcRects[what]); thisRoom->objects[objActive].data.f.topLeft.v = kHipLampTop; QSetRect(&newRect, 0, 0, RectWide(&srcRects[what]), RectTall(&srcRects[what])); QOffsetRect(&newRect, thisRoom->objects[objActive].data.f.topLeft.h, thisRoom->objects[objActive].data.f.topLeft.v); thisRoom->objects[objActive].data.f.length = 0; } else if (what == kDecoLamp) { thisRoom->objects[objActive].data.f.topLeft.h = where.h - HalfRectWide(&srcRects[what]); thisRoom->objects[objActive].data.f.topLeft.v = kDecoLampTop; QSetRect(&newRect, 0, 0, RectWide(&srcRects[what]), RectTall(&srcRects[what])); QOffsetRect(&newRect, thisRoom->objects[objActive].data.f.topLeft.h, thisRoom->objects[objActive].data.f.topLeft.v); thisRoom->objects[objActive].data.f.length = 0; } else if (what == kFlourescent) { thisRoom->objects[objActive].data.f.topLeft.h = where.h - HalfRectWide(&srcRects[what]); thisRoom->objects[objActive].data.f.topLeft.v = kFlourescentTop; newRect = srcRects[what]; QOffsetRect(&newRect, thisRoom->objects[objActive].data.f.topLeft.h, thisRoom->objects[objActive].data.f.topLeft.v); thisRoom->objects[objActive].data.f.length = 64; } else if (what == kTrackLight) { thisRoom->objects[objActive].data.f.topLeft.h = where.h - HalfRectWide(&srcRects[what]); thisRoom->objects[objActive].data.f.topLeft.v = kTrackLightTop; newRect = srcRects[what]; QOffsetRect(&newRect, thisRoom->objects[objActive].data.f.topLeft.h, thisRoom->objects[objActive].data.f.topLeft.v); thisRoom->objects[objActive].data.f.length = 64; } else { thisRoom->objects[objActive].data.f.topLeft.h = where.h - HalfRectWide(&srcRects[what]); thisRoom->objects[objActive].data.f.topLeft.v = where.v - HalfRectTall(&srcRects[what]); QSetRect(&newRect, 0, 0, RectWide(&srcRects[what]), RectTall(&srcRects[what])); QOffsetRect(&newRect, thisRoom->objects[objActive].data.f.topLeft.h, thisRoom->objects[objActive].data.f.topLeft.v); thisRoom->objects[objActive].data.f.length = 0; } thisRoom->objects[objActive].data.f.initial = true; thisRoom->objects[objActive].data.f.state = true; thisRoom->objects[objActive].data.f.byte0 = 0; thisRoom->objects[objActive].data.f.byte1 = 0; drawWholeRoom = true; break; case kShredder: case kToaster: case kMacPlus: case kGuitar: case kTV: case kCoffee: case kOutlet: case kVCR: case kStereo: case kMicrowave: case kCinderBlock: case kFlowerBox: case kCDs: case kCustomPict: if ((what != kGuitar) && (what != kCinderBlock) && (what != kFlowerBox) && (what != kCDs) && (what != kCustomPict) && (HowManyShredderObjects() >= kMaxShredded)) { ShoutNoMoreSpecialObjects(); return (false); } thisRoom->objects[objActive].data.g.topLeft.h = where.h - HalfRectWide(&srcRects[what]); thisRoom->objects[objActive].data.g.topLeft.v = where.v - HalfRectTall(&srcRects[what]); QSetRect(&newRect, 0, 0, RectWide(&srcRects[what]), RectTall(&srcRects[what])); QOffsetRect(&newRect, thisRoom->objects[objActive].data.g.topLeft.h, thisRoom->objects[objActive].data.g.topLeft.v); if (what == kToaster) { thisRoom->objects[objActive].data.g.height = 64; thisRoom->objects[objActive].data.g.delay = 10 + RandomInt(10); } else if (what == kOutlet) { thisRoom->objects[objActive].data.g.height = 0; thisRoom->objects[objActive].data.g.delay = 10 + RandomInt(10); } else if (what == kCustomPict) { thisRoom->objects[objActive].data.g.height = 10000; thisRoom->objects[objActive].data.g.delay = 0; } else { thisRoom->objects[objActive].data.g.height = 0; thisRoom->objects[objActive].data.g.delay = 0; } if (what == kMicrowave) thisRoom->objects[objActive].data.g.byte0 = 7; else thisRoom->objects[objActive].data.g.byte0 = 0; thisRoom->objects[objActive].data.g.initial = true; thisRoom->objects[objActive].data.g.state = true; break; case kBalloon: case kCopterLf: case kCopterRt: case kDartLf: case kDartRt: case kCobweb: if ((what != kCobweb) && (HowManyDynamicObjects() >= kMaxDynamicObs)) { ShoutNoMoreSpecialObjects(); return (false); } if (what == kDartLf) { thisRoom->objects[objActive].data.h.topLeft.h = kRoomWide - RectWide(&srcRects[what]); } else if (what == kDartRt) { thisRoom->objects[objActive].data.h.topLeft.h = 0; } else { thisRoom->objects[objActive].data.h.topLeft.h = where.h - HalfRectWide(&srcRects[what]); } if ((what == kDartLf) || (what == kDartRt) || (what == kCobweb)) { thisRoom->objects[objActive].data.h.topLeft.v = where.v - HalfRectTall(&srcRects[what]); } else { thisRoom->objects[objActive].data.h.topLeft.v = (kTileHigh / 2) - HalfRectTall(&srcRects[what]); } QSetRect(&newRect, 0, 0, RectWide(&srcRects[what]), RectTall(&srcRects[what])); QOffsetRect(&newRect, thisRoom->objects[objActive].data.h.topLeft.h, thisRoom->objects[objActive].data.h.topLeft.v); thisRoom->objects[objActive].data.h.length = 0; if (what == kCobweb) thisRoom->objects[objActive].data.h.delay = 0; else thisRoom->objects[objActive].data.h.delay = 10 + RandomInt(10); thisRoom->objects[objActive].data.h.byte0 = 0; thisRoom->objects[objActive].data.h.initial = true; thisRoom->objects[objActive].data.h.state = true; break; case kBall: case kDrip: case kFish: if (HowManyDynamicObjects() >= kMaxDynamicObs) { ShoutNoMoreSpecialObjects(); return (false); } thisRoom->objects[objActive].data.h.topLeft.h = where.h - HalfRectWide(&srcRects[what]); thisRoom->objects[objActive].data.h.topLeft.v = where.v - HalfRectTall(&srcRects[what]); QSetRect(&newRect, 0, 0, RectWide(&srcRects[what]), RectTall(&srcRects[what])); QOffsetRect(&newRect, thisRoom->objects[objActive].data.h.topLeft.h, thisRoom->objects[objActive].data.h.topLeft.v); thisRoom->objects[objActive].data.h.length = 64; if (what == kBall) thisRoom->objects[objActive].data.h.delay = 0; else thisRoom->objects[objActive].data.h.delay = 10 + RandomInt(10); thisRoom->objects[objActive].data.h.byte0 = 0; thisRoom->objects[objActive].data.h.initial = true; thisRoom->objects[objActive].data.h.state = true; break; case kMousehole: newRect = srcRects[what]; CenterRectOnPoint(&newRect, where); newRect.bottom = kMouseholeBottom; newRect.top = newRect.bottom - RectTall(&srcRects[what]); thisRoom->objects[objActive].data.i.bounds = newRect; thisRoom->objects[objActive].data.i.pict = 0; break; case kFireplace: newRect = srcRects[what]; CenterRectOnPoint(&newRect, where); newRect.bottom = kFireplaceBottom; newRect.top = newRect.bottom - RectTall(&srcRects[what]); thisRoom->objects[objActive].data.i.bounds = newRect; thisRoom->objects[objActive].data.i.pict = 0; break; case kFlower: GetKeys(theseKeys); if (!BitTst(&theseKeys, kShiftKeyMap)) wasFlower = RandomInt(kNumFlowers); newRect = flowerSrc[wasFlower]; CenterRectOnPoint(&newRect, where); thisRoom->objects[objActive].data.i.bounds = newRect; thisRoom->objects[objActive].data.i.pict = wasFlower; break; case kOzma: case kMirror: case kWallWindow: case kBear: case kCalendar: case kVase1: case kVase2: case kBulletin: case kCloud: case kFaucet: case kRug: case kChimes: newRect = srcRects[what]; CenterRectOnPoint(&newRect, where); thisRoom->objects[objActive].data.i.bounds = newRect; thisRoom->objects[objActive].data.i.pict = 0; break; default: return (false); break; } thisRoom->objects[objActive].what = what; thisRoom->numObjects++; if (KeepObjectLegal()) { } fileDirty = true; UpdateMenus(false); handled = ObjectHasHandle(&direction, &dist); if (showItNow) { if (drawWholeRoom) ReadyBackground(thisRoom->background, thisRoom->tiles); GetThisRoomsObjRects(); DrawThisRoomsObjects(); InvalWindowRect(mainWindow, &mainWindowRect); if (handled) { StartMarqueeHandled(&roomObjectRects[objActive], direction, dist); HandleBlowerGlider(); } else StartMarquee(&roomObjectRects[objActive]); } #endif return (true); } //-------------------------------------------------------------- FindEmptyObjectSlot #ifndef COMPILEDEMO short FindEmptyObjectSlot (void) { short i, emptySlot; emptySlot = -1; for (i = 0; i < kMaxRoomObs; i++) if (thisRoom->objects[i].what == kObjectIsEmpty) { emptySlot = i; break; } return (emptySlot); } //-------------------------------------------------------------- FindObjectSlotInRoom short FindObjectSlotInRoom (short roomNumber) { roomType *testRoomPtr; short i, emptySlot; char wasState; emptySlot = -1; wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); testRoomPtr = &((*thisHouse)->rooms[roomNumber]); for (i = 0; i < kMaxRoomObs; i++) if (testRoomPtr->objects[i].what == kObjectIsEmpty) { emptySlot = i; break; } HSetState((Handle)thisHouse, wasState); return (emptySlot); } //-------------------------------------------------------------- DoesRoomNumHaveObject Boolean DoesRoomNumHaveObject (short room, short what) { roomType *testRoomPtr; short i; char wasState; Boolean hasIt; wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); testRoomPtr = &((*thisHouse)->rooms[room]); hasIt = false; for (i = 0; i < kMaxRoomObs; i++) if (testRoomPtr->objects[i].what == what) { hasIt = true; break; } HSetState((Handle)thisHouse, wasState); return (hasIt); } //-------------------------------------------------------------- ShoutNoMoreObjects void ShoutNoMoreObjects (void) { short hitWhat; // CenterAlert(kNoMoreObjectsAlert); hitWhat = Alert(kNoMoreObjectsAlert, nil); } //-------------------------------------------------------------- HowManyCandleObjects short HowManyCandleObjects (void) { short i, aCandle; aCandle = 0; for (i = 0; i < kMaxRoomObs; i++) if ((thisRoom->objects[i].what == kTaper) || (thisRoom->objects[i].what == kCandle) || (thisRoom->objects[i].what == kStubby)) aCandle++; return (aCandle); } //-------------------------------------------------------------- HowManyTikiObjects short HowManyTikiObjects (void) { short i, aTiki; aTiki = 0; for (i = 0; i < kMaxRoomObs; i++) if (thisRoom->objects[i].what == kTiki) aTiki++; return (aTiki); } //-------------------------------------------------------------- HowManyBBQObjects short HowManyBBQObjects (void) { short i, aBBQ; aBBQ = 0; for (i = 0; i < kMaxRoomObs; i++) if (thisRoom->objects[i].what == kBBQ) aBBQ++; return (aBBQ); } //-------------------------------------------------------------- HowManyCuckooObjects short HowManyCuckooObjects (void) { short i, aCuckoo; aCuckoo = 0; for (i = 0; i < kMaxRoomObs; i++) if (thisRoom->objects[i].what == kCuckoo) aCuckoo++; return (aCuckoo); } //-------------------------------------------------------------- HowManyBandsObjects short HowManyBandsObjects (void) { short i, aBands; aBands = 0; for (i = 0; i < kMaxRoomObs; i++) if (thisRoom->objects[i].what == kBands) aBands++; return (aBands); } //-------------------------------------------------------------- HowManyGreaseObjects short HowManyGreaseObjects (void) { short i, aGrease; aGrease = 0; for (i = 0; i < kMaxRoomObs; i++) if ((thisRoom->objects[i].what == kGreaseRt) || (thisRoom->objects[i].what == kGreaseLf)) aGrease++; return (aGrease); } //-------------------------------------------------------------- HowManyStarsObjects short HowManyStarsObjects (void) { short i, aStar; aStar = 0; for (i = 0; i < kMaxRoomObs; i++) if (thisRoom->objects[i].what == kStar) aStar++; return (aStar); } //-------------------------------------------------------------- HowManySoundObjects short HowManySoundObjects (void) { short i, aSound; aSound = 0; for (i = 0; i < kMaxRoomObs; i++) if (thisRoom->objects[i].what == kSoundTrigger) aSound++; return (aSound); } //-------------------------------------------------------------- HowManyUpStairsObjects short HowManyUpStairsObjects (void) { short i, aStair; aStair = 0; for (i = 0; i < kMaxRoomObs; i++) if (thisRoom->objects[i].what == kUpStairs) aStair++; return (aStair); } //-------------------------------------------------------------- HowManyDownStairsObjects short HowManyDownStairsObjects (void) { short i, aStair; aStair = 0; for (i = 0; i < kMaxRoomObs; i++) if (thisRoom->objects[i].what == kDownStairs) aStair++; return (aStair); } //-------------------------------------------------------------- HowManyShredderObjects short HowManyShredderObjects (void) { short i, aShredder; aShredder = 0; for (i = 0; i < kMaxRoomObs; i++) if (thisRoom->objects[i].what == kShredder) aShredder++; return (aShredder); } //-------------------------------------------------------------- HowManyDynamicObjects short HowManyDynamicObjects (void) { short i, aDinah; aDinah = 0; for (i = 0; i < kMaxRoomObs; i++) if ((thisRoom->objects[i].what == kSparkle) || (thisRoom->objects[i].what == kToaster) || (thisRoom->objects[i].what == kMacPlus) || (thisRoom->objects[i].what == kTV) || (thisRoom->objects[i].what == kCoffee) || (thisRoom->objects[i].what == kOutlet) || (thisRoom->objects[i].what == kVCR) || (thisRoom->objects[i].what == kStereo) || (thisRoom->objects[i].what == kMicrowave) || (thisRoom->objects[i].what == kBalloon) || (thisRoom->objects[i].what == kCopterLf) || (thisRoom->objects[i].what == kCopterRt) || (thisRoom->objects[i].what == kDartLf) || (thisRoom->objects[i].what == kDartRt) || (thisRoom->objects[i].what == kBall) || (thisRoom->objects[i].what == kDrip) || (thisRoom->objects[i].what == kFish)) aDinah++; return (aDinah); } //-------------------------------------------------------------- ShoutNoMoreSpecialObjects void ShoutNoMoreSpecialObjects (void) { short hitWhat; // CenterAlert(kNoMoreSpecialAlert); hitWhat = Alert(kNoMoreSpecialAlert, nil); } #endif \ No newline at end of file diff --git a/Sources/ObjectDraw.c b/Sources/ObjectDraw.c deleted file mode 100755 index e8789ba..0000000 --- a/Sources/ObjectDraw.c +++ /dev/null @@ -1 +0,0 @@ - //============================================================================ //---------------------------------------------------------------------------- // ObjectDraw.c //---------------------------------------------------------------------------- //============================================================================ #include "Externs.h" #include "Environ.h" #include "Objects.h" #include "RectUtils.h" #include "Room.h" #define k8WhiteColor 0 #define kYellowColor 5 #define kGoldColor 11 #define k8RedColor 35 #define kPaleVioletColor 42 #define k8LtTanColor 52 #define k8BambooColor 53 #define kDarkFleshColor 58 #define k8TanColor 94 #define k8PissYellowColor 95 #define k8OrangeColor 59 #define k8BrownColor 137 #define k8Red4Color 143 #define k8SkyColor 150 #define k8EarthBlueColor 170 #define k8DkRedColor 222 #define k8DkRed2Color 223 #define kIntenseGreenColor 225 #define kIntenseBlueColor 235 #define k8PumpkinColor 101 #define k8LtstGrayColor 245 #define k8LtstGray2Color 246 #define k8LtstGray3Color 43 #define k8LtstGray4Color 247 #define k8LtstGray5Color 248 #define k8LtGrayColor 249 #define k8GrayColor 250 #define k8Gray2Color 251 #define k8DkGrayColor 252 #define k8DkGray2Color 253 #define k8DkGray3Color 172 #define k8DkstGrayColor 254 #define k8BlackColor 255 void DrawClockDigit (short, Rect *); void DrawClockHands (Point, short, short); void DrawLargeClockHands (Point, short, short); //============================================================== Functions //-------------------------------------------------------------- DrawSimpleBlowers void DrawSimpleBlowers (short what, Rect *theRect) { CopyMask((BitMap *)*GetGWorldPixMap(blowerSrcMap), (BitMap *)*GetGWorldPixMap(blowerMaskMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &srcRects[what], &srcRects[what], theRect); } //-------------------------------------------------------------- DrawTiki void DrawTiki (Rect *theRect, short down) { #define kTikiPoleBase 300 long darkGrayC, lightWoodC, darkWoodC; CGrafPtr wasCPort; GDHandle wasWorld; GetGWorld(&wasCPort, &wasWorld); SetGWorld(backSrcMap, nil); if (thisMac.isDepth == 4) { darkGrayC = 14; lightWoodC = 6; darkWoodC = 9; } else { darkGrayC = k8DkstGrayColor; lightWoodC = k8BambooColor; darkWoodC = k8PissYellowColor; } if (theRect->bottom < kTikiPoleBase + down) { ColorLine(theRect->left + 11, theRect->bottom - 1, theRect->left + 11, kTikiPoleBase + down - 1, darkGrayC); ColorLine(theRect->left + 12, theRect->bottom - 1, theRect->left + 12, kTikiPoleBase + down, lightWoodC); ColorLine(theRect->left + 13, theRect->bottom - 1, theRect->left + 13, kTikiPoleBase + down, darkWoodC); ColorLine(theRect->left + 14, theRect->bottom - 1, theRect->left + 14, kTikiPoleBase + down, darkWoodC); ColorLine(theRect->left + 15, theRect->bottom - 1, theRect->left + 15, kTikiPoleBase + down - 1, darkGrayC); } SetGWorld(wasCPort, wasWorld); CopyMask((BitMap *)*GetGWorldPixMap(blowerSrcMap), (BitMap *)*GetGWorldPixMap(blowerMaskMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &srcRects[kTiki], &srcRects[kTiki], theRect); } //-------------------------------------------------------------- DrawInvisibleBlower void DrawInvisibleBlower (Rect *theRect) { Rect tempRect; CGrafPtr wasCPort; GDHandle wasWorld; GetGWorld(&wasCPort, &wasWorld); SetGWorld(backSrcMap, nil); QSetRect(&tempRect, 0, 0, 24, 24); QOffsetRect(&tempRect, theRect->left, theRect->top); ColorFrameRect(&tempRect, 192); SetGWorld(wasCPort, wasWorld); } //-------------------------------------------------------------- DrawLiftArea void DrawLiftArea (Rect *theRect) { CGrafPtr wasCPort; GDHandle wasWorld; GetGWorld(&wasCPort, &wasWorld); SetGWorld(backSrcMap, nil); ColorFrameRect(theRect, 192); SetGWorld(wasCPort, wasWorld); } //-------------------------------------------------------------- DrawTable void DrawTable (Rect *tableTop, short down) { #define kTableBaseTop 296 #define kTableShadowTop 312 #define kTableShadowOffset 12 Rect tempRect; long brownC, tanC, dkRedC, blackC; short hCenter, vShadow; CGrafPtr wasCPort; GDHandle wasWorld; Pattern dummyPattern; if (thisMac.isDepth == 4) { brownC = 11; tanC = 9; dkRedC = 14; blackC = 15; } else { brownC = k8BrownColor; tanC = k8TanColor; dkRedC = k8DkRed2Color; blackC = k8BlackColor; } GetGWorld(&wasCPort, &wasWorld); SetGWorld(backSrcMap, nil); QSetRect(&tempRect, tableTop->left, 0, tableTop->right, RectWide(tableTop) / 10); QOffsetRect(&tempRect, 0, -HalfRectTall(&tempRect) + kTableShadowTop + down); QOffsetRect(&tempRect, kTableShadowOffset, -kTableShadowOffset); PenPat(GetQDGlobalsGray(&dummyPattern)); PenMode(patOr); if (thisMac.isDepth == 4) ColorOval(&tempRect, 15); else ColorOval(&tempRect, k8DkstGrayColor); PenNormal(); InsetRect(tableTop, 0, 1); ColorRect(tableTop, brownC); InsetRect(tableTop, 0, -1); ColorLine(tableTop->left, tableTop->top + 1, tableTop->left, tableTop->top + 1, k8WhiteColor); ColorLine(tableTop->left + 1, tableTop->top, tableTop->right - 2, tableTop->top, k8WhiteColor); ColorLine(tableTop->right - 1, tableTop->top + 1, tableTop->right - 1, tableTop->top + 1, k8WhiteColor); ColorLine(tableTop->left + 1, tableTop->top + 1, tableTop->right - 2, tableTop->top + 1, tanC); ColorLine(tableTop->left, tableTop->top + 2, tableTop->left, tableTop->bottom - 2, tanC); ColorLine(tableTop->left + 1, tableTop->bottom - 1, tableTop->right - 2, tableTop->bottom - 1, blackC); ColorLine(tableTop->right - 1, tableTop->top + 2, tableTop->right - 1, tableTop->bottom - 2, blackC); ColorLine(tableTop->left + 1, tableTop->bottom - 2, tableTop->right - 2, tableTop->bottom - 2, dkRedC); if (tableTop->bottom < kTableBaseTop + down) { hCenter = (tableTop->left + tableTop->right) / 2; ColorLine(hCenter - 3, tableTop->bottom, hCenter - 3, kTableBaseTop + down, blackC); ColorLine(hCenter - 2, tableTop->bottom, hCenter - 2, kTableBaseTop + down, k8LtGrayColor); ColorLine(hCenter - 1, tableTop->bottom, hCenter - 1, kTableBaseTop + down, k8GrayColor); ColorLine(hCenter, tableTop->bottom, hCenter, kTableBaseTop + down, k8DkGrayColor); ColorLine(hCenter + 1, tableTop->bottom, hCenter + 1, kTableBaseTop + down, blackC); vShadow = tableTop->bottom + RectWide(tableTop) / 4 - 2; if (vShadow > kTableBaseTop + down) { ColorLine(hCenter - 2, tableTop->bottom, hCenter - 2, kTableBaseTop + down, k8DkGrayColor); ColorLine(hCenter - 1, tableTop->bottom, hCenter - 1, kTableBaseTop + down, k8DkGrayColor); ColorLine(hCenter, tableTop->bottom, hCenter, kTableBaseTop + down, blackC); } else { ColorLine(hCenter - 2, tableTop->bottom, hCenter - 2, vShadow, k8DkGrayColor); ColorLine(hCenter - 1, tableTop->bottom, hCenter - 1, vShadow + 1, k8DkGrayColor); ColorLine(hCenter, tableTop->bottom, hCenter, vShadow + 2, blackC); } } SetGWorld(wasCPort, wasWorld); tempRect = tableSrc; QOffsetRect(&tempRect, -HalfRectWide(&tableSrc) + tableTop->left + HalfRectWide(tableTop), kTableBaseTop + down); CopyMask((BitMap *)*GetGWorldPixMap(furnitureSrcMap), (BitMap *)*GetGWorldPixMap(furnitureMaskMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &tableSrc, &tableSrc, &tempRect); } //-------------------------------------------------------------- DrawShelf void DrawShelf (Rect *shelfTop) { #define kBracketInset 18 #define kShelfDeep 4 #define kBracketThick 5 #define kShelfShadowOff 12 Rect tempRect; long brownC, ltTanC, tanC, dkRedC, blackC; RgnHandle shadowRgn; CGrafPtr wasCPort; GDHandle wasWorld; Pattern dummyPattern; if (thisMac.isDepth == 4) { brownC = 11; ltTanC = 7; tanC = 9; dkRedC = 14; blackC = 15; } else { brownC = k8BrownColor; ltTanC = k8LtTanColor; tanC = k8TanColor; dkRedC = k8DkRed2Color; blackC = k8BlackColor; } GetGWorld(&wasCPort, &wasWorld); SetGWorld(backSrcMap, nil); MoveTo(shelfTop->left, shelfTop->bottom); shadowRgn = NewRgn(); if (shadowRgn == nil) RedAlert(kErrUnnaccounted); OpenRgn(); Line(kShelfShadowOff, kShelfShadowOff); Line(RectWide(shelfTop) - kShelfDeep, 0); Line(0, -kShelfThick + 1); Line(-kShelfShadowOff, -kShelfShadowOff); LineTo(shelfTop->left, shelfTop->bottom); CloseRgn(shadowRgn); PenPat(GetQDGlobalsGray(&dummyPattern)); PenMode(patOr); if (thisMac.isDepth == 4) ColorRegion(shadowRgn, 15); else ColorRegion(shadowRgn, k8DkstGrayColor); PenNormal(); DisposeRgn(shadowRgn); InsetRect(shelfTop, 0, 1); ColorRect(shelfTop, brownC); InsetRect(shelfTop, 0, -1); ColorLine(shelfTop->left + 1, shelfTop->top, shelfTop->left + 1 + kShelfDeep, shelfTop->top, ltTanC); ColorLine(shelfTop->left, shelfTop->top + 1, shelfTop->left + kShelfDeep, shelfTop->top + 1, tanC); ColorLine(shelfTop->left, shelfTop->top + 2, shelfTop->left + kShelfDeep, shelfTop->top + 2, tanC); ColorLine(shelfTop->left, shelfTop->top + 3, shelfTop->left + kShelfDeep, shelfTop->top + 3, tanC); ColorLine(shelfTop->left + 1, shelfTop->bottom - 1, shelfTop->left + 1 + kShelfDeep, shelfTop->bottom - 1, dkRedC); ColorLine(shelfTop->left + 2 + kShelfDeep, shelfTop->bottom - 1, shelfTop->right - 2, shelfTop->bottom - 1, blackC); ColorLine(shelfTop->left + 2 + kShelfDeep, shelfTop->top, shelfTop->right - 2, shelfTop->top, tanC); ColorLine(shelfTop->right - 1, shelfTop->top + 1, shelfTop->right - 1, shelfTop->bottom - 2, blackC); SetGWorld(wasCPort, wasWorld); tempRect = shelfSrc; ZeroRectCorner(&tempRect); QOffsetRect(&tempRect, shelfTop->left + kBracketInset, shelfTop->bottom); CopyMask((BitMap *)*GetGWorldPixMap(furnitureSrcMap), (BitMap *)*GetGWorldPixMap(furnitureMaskMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &shelfSrc, &shelfSrc, &tempRect); ZeroRectCorner(&tempRect); QOffsetRect(&tempRect, shelfTop->right - kBracketInset - kShelfDeep - kBracketThick, shelfTop->bottom); CopyMask((BitMap *)*GetGWorldPixMap(furnitureSrcMap), (BitMap *)*GetGWorldPixMap(furnitureMaskMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &shelfSrc, &shelfSrc, &tempRect); } //-------------------------------------------------------------- DrawCabinet void DrawCabinet (Rect *cabinet) { #define kCabinetDeep 4 #define kCabinetShadowOff 6 Rect tempRect; long brownC, dkGrayC, ltTanC, tanC, dkRedC, blackC; RgnHandle shadowRgn; CGrafPtr wasCPort; GDHandle wasWorld; Pattern dummyPattern; if (thisMac.isDepth == 4) { brownC = 11; dkGrayC = 14; ltTanC = 7; tanC = 9; dkRedC = 14; blackC = 15; } else { brownC = k8BrownColor; dkGrayC = k8DkstGrayColor; ltTanC = k8LtTanColor; tanC = k8TanColor; dkRedC = k8DkRed2Color; blackC = k8BlackColor; } GetGWorld(&wasCPort, &wasWorld); SetGWorld(backSrcMap, nil); MoveTo(cabinet->left, cabinet->bottom); shadowRgn = NewRgn(); if (shadowRgn == nil) RedAlert(kErrUnnaccounted); OpenRgn(); Line(kCabinetShadowOff, kCabinetShadowOff); Line(RectWide(cabinet), 0); Line(0, -RectTall(cabinet) + kCabinetDeep); Line(-kCabinetShadowOff, -kCabinetShadowOff); LineTo(cabinet->left, cabinet->bottom); CloseRgn(shadowRgn); PenPat(GetQDGlobalsGray(&dummyPattern)); PenMode(patOr); if (thisMac.isDepth == 4) ColorRegion(shadowRgn, 15); else ColorRegion(shadowRgn, dkGrayC); PenNormal(); DisposeRgn(shadowRgn); InsetRect(cabinet, 1, 1); // fill bulk of cabinet brown ColorRect(cabinet, brownC); InsetRect(cabinet, -1, -1); tempRect = *cabinet; // add lighter left side tempRect.right = tempRect.left + kCabinetDeep; ColorRect(&tempRect, tanC); // hilight top edge ColorLine(cabinet->left + 1, cabinet->top + 1, cabinet->left + kCabinetDeep, cabinet->top + 1, ltTanC); ColorLine(cabinet->left + kCabinetDeep, cabinet->top + 1, cabinet->right - 3, cabinet->top + 1, tanC); // shadow bottom edge ColorLine(cabinet->left + kCabinetDeep + 3, cabinet->top + 5, cabinet->left + kCabinetDeep + 3, cabinet->bottom - 6, tanC); ColorLine(cabinet->left + kCabinetDeep + 4, cabinet->top + 5, cabinet->left + kCabinetDeep + 4, cabinet->bottom - 6, tanC); ColorLine(cabinet->left + kCabinetDeep + 9, cabinet->top + 10, cabinet->left + kCabinetDeep + 9, cabinet->bottom - 11, dkGrayC); ColorLine(cabinet->right - 4, cabinet->top + 6, cabinet->right - 4, cabinet->bottom - 5, dkRedC); ColorLine(cabinet->right - 5, cabinet->top + 5, cabinet->right - 5, cabinet->bottom - 6, dkGrayC); ColorLine(cabinet->right - 10, cabinet->top + 10, cabinet->right - 10, cabinet->bottom - 11, tanC); ColorLine(cabinet->left + kCabinetDeep + 4, cabinet->top + 4, cabinet->left + kCabinetDeep + 4, cabinet->top + 4, ltTanC); ColorLine(cabinet->left + kCabinetDeep + 5, cabinet->top + 4, cabinet->right - 6, cabinet->top + 4, tanC); ColorLine(cabinet->left + kCabinetDeep + 10, cabinet->top + 9, cabinet->right - 11, cabinet->top + 9, dkGrayC); ColorLine(cabinet->right - 5, cabinet->bottom - 5, cabinet->right - 5, cabinet->bottom - 5, dkRedC); ColorLine(cabinet->left + kCabinetDeep + 6, cabinet->bottom - 4, cabinet->right - 5, cabinet->bottom - 4, dkRedC); ColorLine(cabinet->left + kCabinetDeep + 5, cabinet->bottom - 5, cabinet->right - 6, cabinet->bottom - 5, dkGrayC); ColorLine(cabinet->left + kCabinetDeep + 10, cabinet->bottom - 10, cabinet->right - 11, cabinet->bottom - 10, tanC); SetGWorld(wasCPort, wasWorld); tempRect = hingeSrc; ZeroRectCorner(&tempRect); QOffsetRect(&tempRect, cabinet->left + kCabinetDeep + 2, cabinet->top + 10); CopyMask((BitMap *)*GetGWorldPixMap(furnitureSrcMap), (BitMap *)*GetGWorldPixMap(furnitureMaskMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &hingeSrc, &hingeSrc, &tempRect); tempRect = hingeSrc; ZeroRectCorner(&tempRect); QOffsetRect(&tempRect, cabinet->left + kCabinetDeep + 2, cabinet->bottom - 26); CopyMask((BitMap *)*GetGWorldPixMap(furnitureSrcMap), (BitMap *)*GetGWorldPixMap(furnitureMaskMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &hingeSrc, &hingeSrc, &tempRect); tempRect = handleSrc; ZeroRectCorner(&tempRect); QOffsetRect(&tempRect, cabinet->right - 8, cabinet->top + HalfRectTall(cabinet) - HalfRectTall(&handleSrc)); CopyMask((BitMap *)*GetGWorldPixMap(furnitureSrcMap), (BitMap *)*GetGWorldPixMap(furnitureMaskMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &handleSrc, &handleSrc, &tempRect); FrameRect(cabinet); } //-------------------------------------------------------------- DrawSimpleFurniture void DrawSimpleFurniture (short what, Rect *theRect) { CopyMask((BitMap *)*GetGWorldPixMap(furnitureSrcMap), (BitMap *)*GetGWorldPixMap(furnitureMaskMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &srcRects[what], &srcRects[what], theRect); } //-------------------------------------------------------------- DrawCounter void DrawCounter (Rect *counter) { #define kCounterFooterHigh 12 #define kCounterStripWide 6 #define kCounterStripTall 29 #define kCounterPanelDrop 12 Rect tempRect; RgnHandle shadowRgn; long brownC, dkGrayC, tanC, blackC, dkstRedC; short nRects, width, i; CGrafPtr wasCPort; GDHandle wasWorld; Pattern dummyPattern; if (thisMac.isDepth == 4) { brownC = 11; dkGrayC = 14; tanC = 9; blackC = 15; dkstRedC = 15; } else { brownC = k8BrownColor; dkGrayC = k8DkstGrayColor; tanC = k8TanColor; blackC = k8BlackColor; dkstRedC = k8DkRed2Color; } GetGWorld(&wasCPort, &wasWorld); SetGWorld(backSrcMap, nil); MoveTo(counter->right - 2, counter->bottom); shadowRgn = NewRgn(); if (shadowRgn == nil) RedAlert(kErrUnnaccounted); OpenRgn(); Line(10, -10); Line(0, -RectTall(counter) + 29); Line(2, 0); Line(0, -7); Line(-12, -12); LineTo(counter->right - 2, counter->bottom); CloseRgn(shadowRgn); PenPat(GetQDGlobalsGray(&dummyPattern)); PenMode(patOr); if (thisMac.isDepth == 4) ColorRegion(shadowRgn, 15); else ColorRegion(shadowRgn, dkGrayC); PenNormal(); DisposeRgn(shadowRgn); InsetRect(counter, 2, 2); ColorRect(counter, brownC); InsetRect(counter, -2, -2); tempRect = *counter; tempRect.top = tempRect.bottom - kCounterFooterHigh; tempRect.left += 2; tempRect.right -= 2; ColorRect(&tempRect, dkGrayC); ColorLine(counter->left + 2, counter->bottom - kCounterFooterHigh, counter->right - 3, counter->bottom - kCounterFooterHigh, blackC); ColorLine(counter->left + 2, counter->bottom - kCounterFooterHigh + 1, counter->right - 3, counter->bottom - kCounterFooterHigh + 1, blackC); ColorLine(counter->right - 3, counter->bottom - kCounterFooterHigh, counter->right - 3, counter->bottom - 1, blackC); ColorLine(counter->left + 2, counter->bottom - kCounterFooterHigh, counter->left + 2, counter->bottom - 1, k8DkGrayColor); ColorLine(counter->right - 2, counter->top, counter->right - 2, counter->bottom - kCounterFooterHigh - 1, dkstRedC); ColorLine(counter->left + 1, counter->top + 8, counter->left + 1, counter->bottom - kCounterFooterHigh - 1, tanC); if (thisMac.isDepth == 4) { ColorLine(counter->left - 1, counter->top, counter->right, counter->top, 1); ColorLine(counter->left - 1, counter->top + 1, counter->right, counter->top + 1, 2); ColorLine(counter->left - 1, counter->top + 2, counter->right, counter->top + 2, 3); ColorLine(counter->left - 1, counter->top + 3, counter->right, counter->top + 3, 4); ColorLine(counter->left - 1, counter->top + 4, counter->right, counter->top + 4, 5); ColorLine(counter->left - 1, counter->top + 5, counter->right, counter->top + 5, 5); ColorLine(counter->left - 1, counter->top + 6, counter->right, counter->top + 6, 5); ColorLine(counter->left - 1, counter->top, counter->left - 1, counter->top + 6, 1); } else { ColorLine(counter->left - 1, counter->top, counter->right, counter->top, k8LtstGrayColor); ColorLine(counter->left - 1, counter->top + 1, counter->right, counter->top + 1, k8LtstGray2Color); ColorLine(counter->left - 1, counter->top + 2, counter->right, counter->top + 2, k8LtstGray3Color); ColorLine(counter->left - 1, counter->top + 3, counter->right, counter->top + 3, k8LtstGray4Color); ColorLine(counter->left - 1, counter->top + 4, counter->right, counter->top + 4, k8LtstGray5Color); ColorLine(counter->left - 1, counter->top + 5, counter->right, counter->top + 5, k8LtstGray5Color); ColorLine(counter->left - 1, counter->top + 6, counter->right, counter->top + 6, k8LtstGray5Color); ColorLine(counter->left - 1, counter->top, counter->left - 1, counter->top + 6, k8LtstGrayColor); } ColorLine(counter->right, counter->top, counter->right, counter->top + 6, k8LtGrayColor); ColorLine(counter->left + 1, counter->top + 7, counter->right - 2, counter->top + 7, dkstRedC); ColorLine(counter->left + 1, counter->top + 8, counter->right - 2, counter->top + 8, dkstRedC); SetGWorld(wasCPort, wasWorld); nRects = RectWide(counter) / 40; if (nRects == 0) nRects = 1; width = ((RectWide(counter) - kCounterStripWide) / nRects) - kCounterStripWide; QSetRect(&tempRect, 0, 0, width, RectTall(counter) - kCounterStripTall); QOffsetRect(&tempRect, counter->left + kCounterStripWide, counter->top + kCounterPanelDrop); for (i = 0; i < nRects; i++) { HiliteRect(&tempRect, tanC, dkstRedC); InsetRect(&tempRect, 4, 4); HiliteRect(&tempRect, dkstRedC, tanC); InsetRect(&tempRect, -4, -4); QOffsetRect(&tempRect, kCounterStripWide + width, 0); } } //-------------------------------------------------------------- DrawDresser void DrawDresser (Rect *dresser) { #define kDresserTopThick 4 #define kDresserCrease 9 #define kDresserDrawerDrop 12 #define kDresserSideSpare 14 Rect tempRect, dest; long yellowC, brownC, dkGrayC, ltTanC, dkstRedC; RgnHandle shadowRgn; short nRects, height, i; CGrafPtr wasCPort; GDHandle wasWorld; Pattern dummyPattern; if (thisMac.isDepth == 4) { yellowC = 9; brownC = 11; dkGrayC = 14; ltTanC = 7; dkstRedC = 15; } else { yellowC = k8PissYellowColor; brownC = k8BrownColor; dkGrayC = k8DkstGrayColor; ltTanC = k8LtTanColor; dkstRedC = k8DkRed2Color; } GetGWorld(&wasCPort, &wasWorld); SetGWorld(backSrcMap, nil); MoveTo(dresser->left + 10, dresser->bottom + 9); shadowRgn = NewRgn(); if (shadowRgn == nil) RedAlert(kErrUnnaccounted); OpenRgn(); Line(RectWide(dresser) - 11, 0); Line(9, -9); Line(0, -RectTall(dresser) + 12); Line(-9, -9); Line(-RectWide(dresser) + 11, 0); LineTo(dresser->left + 10, dresser->bottom + 9); CloseRgn(shadowRgn); PenPat(GetQDGlobalsGray(&dummyPattern)); PenMode(patOr); if (thisMac.isDepth == 4) ColorRegion(shadowRgn, 15); else ColorRegion(shadowRgn, k8DkstGrayColor); PenNormal(); DisposeRgn(shadowRgn); InsetRect(dresser, 2, 2); ColorRect(dresser, k8PumpkinColor); HiliteRect(dresser, k8OrangeColor, dkstRedC); InsetRect(dresser, -2, -2); tempRect = *dresser; tempRect.bottom = tempRect.top + kDresserTopThick; ColorRect(&tempRect, k8PissYellowColor); HiliteRect(&tempRect, ltTanC, dkstRedC); ColorLine(dresser->left + 2, dresser->top + kDresserTopThick, dresser->right - 3, dresser->top + kDresserTopThick, k8Red4Color); ColorLine(dresser->left + kDresserCrease, dresser->top + kDresserTopThick + 1, dresser->left + kDresserCrease, dresser->bottom - 4, k8Red4Color); ColorLine(dresser->right - kDresserCrease, dresser->top + kDresserTopThick + 1, dresser->right - kDresserCrease, dresser->bottom - 4, k8OrangeColor); nRects = RectTall(dresser) / 30; if (nRects == 0) nRects = 1; height = (RectTall(dresser) - 14) / nRects - 4; QSetRect(&tempRect, 0, 0, RectWide(dresser) - kDresserSideSpare, height); QOffsetRect(&tempRect, dresser->left + 7, dresser->top + 10); for (i = 0; i < nRects; i++) { ColorLine(tempRect.left + 1, tempRect.bottom, tempRect.right, tempRect.bottom, dkstRedC); ColorLine(tempRect.right, tempRect.top + 1, tempRect.right, tempRect.bottom, dkstRedC); ColorRect(&tempRect, yellowC); HiliteRect(&tempRect, ltTanC, brownC); InsetRect(&tempRect, 1, 1); HiliteRect(&tempRect, ltTanC, brownC); InsetRect(&tempRect, -1, -1); QSetRect(&dest, -4, -4, 4, 4); QOffsetRect(&dest, HalfRectTall(&tempRect), HalfRectTall(&tempRect)); QOffsetRect(&dest, tempRect.left, tempRect.top); CopyBits((BitMap *)*GetGWorldPixMap(furnitureSrcMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &knobSrc, &dest, srcCopy, nil); QSetRect(&dest, -4, -4, 4, 4); QOffsetRect(&dest, -HalfRectTall(&tempRect), HalfRectTall(&tempRect)); QOffsetRect(&dest, tempRect.right, tempRect.top); CopyBits((BitMap *)*GetGWorldPixMap(furnitureSrcMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &knobSrc, &dest, srcCopy, nil); QOffsetRect(&tempRect, 0, kDresserTopThick + height); } SetGWorld(wasCPort, wasWorld); dest = leftFootSrc; ZeroRectCorner(&dest); QOffsetRect(&dest, dresser->left + 6, dresser->bottom - 2); CopyMask((BitMap *)*GetGWorldPixMap(furnitureSrcMap), (BitMap *)*GetGWorldPixMap(furnitureMaskMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &leftFootSrc, &leftFootSrc, &dest); dest = rightFootSrc; ZeroRectCorner(&dest); QOffsetRect(&dest, dresser->right - 19, dresser->bottom - 2); CopyMask((BitMap *)*GetGWorldPixMap(furnitureSrcMap), (BitMap *)*GetGWorldPixMap(furnitureMaskMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &rightFootSrc, &rightFootSrc, &dest); } //-------------------------------------------------------------- DrawDeckTable void DrawDeckTable (Rect *tableTop, short down) { #define kTableBaseTop 296 #define kTableShadowTop 312 #define kTableShadowOffset 12 Rect tempRect; long bambooC, brownC, dkGrayC; short hCenter, vShadow; CGrafPtr wasCPort; GDHandle wasWorld; Pattern dummyPattern; if (thisMac.isDepth == 4) { bambooC = 6; brownC = 11; dkGrayC = 14; } else { bambooC = k8BambooColor; brownC = k8BrownColor; dkGrayC = k8DkstGrayColor; } GetGWorld(&wasCPort, &wasWorld); SetGWorld(backSrcMap, nil); QSetRect(&tempRect, tableTop->left, 0, tableTop->right, RectWide(tableTop) / 10); QOffsetRect(&tempRect, 0, -HalfRectTall(&tempRect) + kTableShadowTop + down); QOffsetRect(&tempRect, kTableShadowOffset, -kTableShadowOffset); PenPat(GetQDGlobalsGray(&dummyPattern)); PenMode(patOr); ColorOval(&tempRect, dkGrayC); PenNormal(); InsetRect(tableTop, 0, 1); ColorRect(tableTop, kGoldColor); InsetRect(tableTop, 0, -1); ColorLine(tableTop->left, tableTop->top + 1, tableTop->left, tableTop->top + 1, k8WhiteColor); ColorLine(tableTop->left + 1, tableTop->top, tableTop->right - 2, tableTop->top, k8WhiteColor); ColorLine(tableTop->right - 1, tableTop->top + 1, tableTop->right - 1, tableTop->top + 1, k8WhiteColor); ColorLine(tableTop->left + 1, tableTop->top + 1, tableTop->right - 2, tableTop->top + 1, kYellowColor); ColorLine(tableTop->left, tableTop->top + 2, tableTop->left, tableTop->bottom - 2, kYellowColor); ColorLine(tableTop->left + 1, tableTop->bottom - 1, tableTop->right - 2, tableTop->bottom - 1, brownC); ColorLine(tableTop->right - 1, tableTop->top + 2, tableTop->right - 1, tableTop->bottom - 2, brownC); ColorLine(tableTop->left + 1, tableTop->bottom - 2, tableTop->right - 2, tableTop->bottom - 2, bambooC); if (tableTop->bottom < kTableBaseTop + down) { hCenter = (tableTop->left + tableTop->right) / 2; ColorLine(hCenter - 3, tableTop->bottom, hCenter - 3, kTableBaseTop + down, dkGrayC); ColorLine(hCenter - 2, tableTop->bottom, hCenter - 2, kTableBaseTop + down, k8WhiteColor); ColorLine(hCenter - 1, tableTop->bottom, hCenter - 1, kTableBaseTop + down, k8WhiteColor); ColorLine(hCenter, tableTop->bottom, hCenter, kTableBaseTop + down, k8LtGrayColor); ColorLine(hCenter + 1, tableTop->bottom, hCenter + 1, kTableBaseTop + down, dkGrayC); vShadow = tableTop->bottom + RectWide(tableTop) / 4 - 2; if (vShadow > kTableBaseTop + down) { ColorLine(hCenter - 2, tableTop->bottom, hCenter - 2, kTableBaseTop + down, k8LtGrayColor); ColorLine(hCenter - 1, tableTop->bottom, hCenter - 1, kTableBaseTop + down, k8LtGrayColor); ColorLine(hCenter, tableTop->bottom, hCenter, kTableBaseTop + down, dkGrayC); } else { ColorLine(hCenter - 2, tableTop->bottom, hCenter - 2, vShadow, k8LtGrayColor); ColorLine(hCenter - 1, tableTop->bottom, hCenter - 1, vShadow + 1, k8LtGrayColor); ColorLine(hCenter, tableTop->bottom, hCenter, vShadow + 2, dkGrayC); } } SetGWorld(wasCPort, wasWorld); tempRect = deckSrc; ZeroRectCorner(&tempRect); QOffsetRect(&tempRect, -HalfRectWide(&deckSrc) + tableTop->left + HalfRectWide(tableTop), kTableBaseTop + down); CopyMask((BitMap *)*GetGWorldPixMap(furnitureSrcMap), (BitMap *)*GetGWorldPixMap(furnitureMaskMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &deckSrc, &deckSrc, &tempRect); } //-------------------------------------------------------------- DrawStool void DrawStool (Rect *theRect, short down) { #define kStoolBase 304 long grayC, dkGrayC; CGrafPtr wasCPort; GDHandle wasWorld; GetGWorld(&wasCPort, &wasWorld); SetGWorld(backSrcMap, nil); if (thisMac.isDepth == 4) { grayC = 13; dkGrayC = 14; } else { grayC = k8DkGray2Color; dkGrayC = k8DkstGrayColor; } if (theRect->bottom < kStoolBase + down) { ColorLine(theRect->left + 21, theRect->bottom - 1, theRect->left + 21, kStoolBase + down - 1, k8DkGrayColor); ColorLine(theRect->left + 22, theRect->bottom - 1, theRect->left + 22, kStoolBase + down, k8Gray2Color); ColorLine(theRect->left + 23, theRect->bottom - 1, theRect->left + 23, kStoolBase + down, k8DkGrayColor); ColorLine(theRect->left + 24, theRect->bottom - 1, theRect->left + 24, kStoolBase + down, k8DkGray3Color); ColorLine(theRect->left + 25, theRect->bottom - 1, theRect->left + 25, kStoolBase + down, grayC); ColorLine(theRect->left + 26, theRect->bottom - 1, theRect->left + 26, kStoolBase + down - 1, dkGrayC); } SetGWorld(wasCPort, wasWorld); CopyMask((BitMap *)*GetGWorldPixMap(furnitureSrcMap), (BitMap *)*GetGWorldPixMap(furnitureMaskMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &srcRects[kStool], &srcRects[kStool], theRect); } //-------------------------------------------------------------- DrawInvisObstacle void DrawInvisObstacle (Rect *theRect) { CGrafPtr wasCPort; GDHandle wasWorld; GetGWorld(&wasCPort, &wasWorld); SetGWorld(backSrcMap, nil); ColorFrameRect(theRect, k8BrownColor); SetGWorld(wasCPort, wasWorld); } //-------------------------------------------------------------- DrawInvisBounce void DrawInvisBounce (Rect *theRect) { CGrafPtr wasCPort; GDHandle wasWorld; GetGWorld(&wasCPort, &wasWorld); SetGWorld(backSrcMap, nil); ColorFrameRect(theRect, k8RedColor); SetGWorld(wasCPort, wasWorld); } //-------------------------------------------------------------- DrawRedClock void DrawRedClock (Rect *theRect) { DateTimeRec timeRec; Rect dest; short hour, minutes; CopyMask((BitMap *)*GetGWorldPixMap(bonusSrcMap), (BitMap *)*GetGWorldPixMap(bonusMaskMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &srcRects[kRedClock], &srcRects[kRedClock], theRect); GetTime(&timeRec); hour = timeRec.hour % 12; if (hour == 0) hour = 12; minutes = timeRec.minute; QSetRect(&dest, 0, 0, 4, 6); QOffsetRect(&dest, theRect->left + 5, theRect->top + 7); if (hour > 9) DrawClockDigit(hour / 10, &dest); QOffsetRect(&dest, 4, 0); DrawClockDigit(hour % 10, &dest); QOffsetRect(&dest, 6, 0); DrawClockDigit(minutes / 10, &dest); QOffsetRect(&dest, 4, 0); DrawClockDigit(minutes % 10, &dest); } //-------------------------------------------------------------- DrawClockDigit void DrawClockDigit (short number, Rect *dest) { CopyBits((BitMap *)*GetGWorldPixMap(bonusSrcMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &digits[number], dest, srcCopy, nil); } //-------------------------------------------------------------- DrawBlueClock void DrawBlueClock (Rect *theRect) { DateTimeRec timeRec; Point dest; short hour, minutes; CopyMask((BitMap *)*GetGWorldPixMap(bonusSrcMap), (BitMap *)*GetGWorldPixMap(bonusMaskMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &srcRects[kBlueClock], &srcRects[kBlueClock], theRect); dest.h = theRect->left + 13; dest.v = theRect->top + 13; GetTime(&timeRec); hour = timeRec.hour % 12; minutes = ((timeRec.minute + 2) / 5) % 12; DrawClockHands(dest, minutes, hour); } //-------------------------------------------------------------- DrawYellowClock void DrawYellowClock (Rect *theRect) { DateTimeRec timeRec; Point dest; short hour, minutes; CopyMask((BitMap *)*GetGWorldPixMap(bonusSrcMap), (BitMap *)*GetGWorldPixMap(bonusMaskMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &srcRects[kYellowClock], &srcRects[kYellowClock], theRect); dest.h = theRect->left + 13; dest.v = theRect->top + 15; GetTime(&timeRec); hour = timeRec.hour % 12; minutes = ((timeRec.minute + 2) / 5) % 12; DrawClockHands(dest, minutes, hour); } //-------------------------------------------------------------- DrawCuckoo void DrawCuckoo (Rect *theRect) { DateTimeRec timeRec; Point dest; short hour, minutes; CopyMask((BitMap *)*GetGWorldPixMap(bonusSrcMap), (BitMap *)*GetGWorldPixMap(bonusMaskMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &srcRects[kCuckoo], &srcRects[kCuckoo], theRect); dest.h = theRect->left + 19; dest.v = theRect->top + 31; GetTime(&timeRec); hour = timeRec.hour % 12; minutes = ((timeRec.minute + 2) / 5) % 12; DrawLargeClockHands(dest, minutes, hour); } //-------------------------------------------------------------- DrawClockHands void DrawClockHands (Point where, short bigHand, short littleHand) { CGrafPtr wasCPort; GDHandle wasWorld; GetGWorld(&wasCPort, &wasWorld); SetGWorld(backSrcMap, nil); MoveTo(where.h, where.v); switch (bigHand) { case 0: Line(0, -6); break; case 1: Line(3, -5); break; case 2: Line(5, -3); break; case 3: Line(6, 0); break; case 4: Line(5, 3); break; case 5: Line(3, 5); break; case 6: Line(0, 6); break; case 7: Line(-3, 5); break; case 8: Line(-5, 3); break; case 9: Line(-6, 0); break; case 10: Line(-5, -3); break; case 11: Line(-3, -5); break; } MoveTo(where.h, where.v); switch (littleHand) { case 0: Line(0, -4); break; case 1: Line(2, -3); break; case 2: Line(3, -2); break; case 3: Line(4, 0); break; case 4: Line(3, 2); break; case 5: Line(2, 3); break; case 6: Line(0, 4); break; case 7: Line(-2, 3); break; case 8: Line(-3, 2); break; case 9: Line(-4, 0); break; case 10: Line(-3, -2); break; case 11: Line(-2, -3); break; } SetGWorld(wasCPort, wasWorld); } //-------------------------------------------------------------- DrawClockHands void DrawLargeClockHands (Point where, short bigHand, short littleHand) { CGrafPtr wasCPort; GDHandle wasWorld; GetGWorld(&wasCPort, &wasWorld); SetGWorld(backSrcMap, nil); ForeColor(whiteColor); MoveTo(where.h, where.v); switch (bigHand) { case 0: Line(0, -10); break; case 1: Line(5, -9); break; case 2: Line(9, -5); break; case 3: Line(10, 0); break; case 4: Line(9, 5); break; case 5: Line(5, 9); break; case 6: Line(0, 10); break; case 7: Line(-5, 9); break; case 8: Line(-9, 5); break; case 9: Line(-10, 0); break; case 10: Line(-9, -5); break; case 11: Line(-5, -9); break; } MoveTo(where.h, where.v); switch (littleHand) { case 0: Line(0, -6); break; case 1: Line(3, -5); break; case 2: Line(5, -3); break; case 3: Line(6, 0); break; case 4: Line(5, 3); break; case 5: Line(3, 5); break; case 6: Line(0, 6); break; case 7: Line(-3, 5); break; case 8: Line(-5, 3); break; case 9: Line(-6, 0); break; case 10: Line(-5, -3); break; case 11: Line(-3, -5); break; } ForeColor(blackColor); SetGWorld(wasCPort, wasWorld); } //-------------------------------------------------------------- DrawSimplePrizes void DrawSimplePrizes (short what, Rect *theRect) { CopyMask((BitMap *)*GetGWorldPixMap(bonusSrcMap), (BitMap *)*GetGWorldPixMap(bonusMaskMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &srcRects[what], &srcRects[what], theRect); } //-------------------------------------------------------------- DrawGreaseRt void DrawGreaseRt (Rect *theRect, short distance, Boolean state) { Rect spill, dest; CGrafPtr wasCPort; GDHandle wasWorld; dest = *theRect; if (state) // grease upright { CopyMask((BitMap *)*GetGWorldPixMap(bonusSrcMap), (BitMap *)*GetGWorldPixMap(bonusMaskMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &greaseSrcRt[0], &greaseSrcRt[0], &dest); } else // grease spilled { QOffsetRect(&dest, 6, 0); CopyMask((BitMap *)*GetGWorldPixMap(bonusSrcMap), (BitMap *)*GetGWorldPixMap(bonusMaskMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &greaseSrcRt[3], &greaseSrcRt[3], &dest); GetGWorld(&wasCPort, &wasWorld); SetGWorld(backSrcMap, nil); QSetRect(&spill, 0, -2, distance - 5, 0); QOffsetRect(&spill, dest.right - 1, dest.bottom); PaintRect(&spill); SetGWorld(wasCPort, wasWorld); } } //-------------------------------------------------------------- DrawGreaseLf void DrawGreaseLf (Rect *theRect, short distance, Boolean state) { Rect spill, dest; CGrafPtr wasCPort; GDHandle wasWorld; dest = *theRect; if (state) // grease upright { CopyMask((BitMap *)*GetGWorldPixMap(bonusSrcMap), (BitMap *)*GetGWorldPixMap(bonusMaskMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &greaseSrcLf[0], &greaseSrcLf[0], &dest); } else // grease spilled { QOffsetRect(&dest, -6, 0); CopyMask((BitMap *)*GetGWorldPixMap(bonusSrcMap), (BitMap *)*GetGWorldPixMap(bonusMaskMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &greaseSrcLf[3], &greaseSrcLf[3], &dest); GetGWorld(&wasCPort, &wasWorld); SetGWorld(backSrcMap, nil); QSetRect(&spill, -distance + 5, -2, 0, 0); QOffsetRect(&spill, dest.left + 1, dest.bottom); PaintRect(&spill); SetGWorld(wasCPort, wasWorld); } } //-------------------------------------------------------------- DrawBands void DrawFoil (Rect *theRect) { CopyMask((BitMap *)*GetGWorldPixMap(bonusSrcMap), (BitMap *)*GetGWorldPixMap(bonusMaskMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &srcRects[kFoil], &srcRects[kFoil], theRect); } //-------------------------------------------------------------- DrawInvisBonus void DrawInvisBonus (Rect *theRect) { CGrafPtr wasCPort; GDHandle wasWorld; GetGWorld(&wasCPort, &wasWorld); SetGWorld(backSrcMap, nil); ColorFrameOval(theRect, 227); SetGWorld(wasCPort, wasWorld); } //-------------------------------------------------------------- DrawSlider void DrawSlider (Rect *theRect) { CGrafPtr wasCPort; GDHandle wasWorld; GetGWorld(&wasCPort, &wasWorld); SetGWorld(backSrcMap, nil); FrameRect(theRect); SetGWorld(wasCPort, wasWorld); } \ No newline at end of file diff --git a/Sources/ObjectDraw2.c b/Sources/ObjectDraw2.c deleted file mode 100755 index 984f542..0000000 --- a/Sources/ObjectDraw2.c +++ /dev/null @@ -1 +0,0 @@ - //============================================================================ //---------------------------------------------------------------------------- // ObjectDraw2.c //---------------------------------------------------------------------------- //============================================================================ #include #include #include "Externs.h" #include "Environ.h" #include "Objects.h" #include "RectUtils.h" #include "Room.h" #include "Utilities.h" #define k8WhiteColor 0 #define kIntenseYellowColor 5 #define kPaleVioletColor 42 #define kDarkFleshColor 58 #define k8TanColor 94 #define k8PissYellowColor 95 #define k8BrownColor 137 #define k8SkyColor 150 #define k8EarthBlueColor 170 #define k8DkRed2Color 223 #define kIntenseGreenColor 225 #define kIntenseBlueColor 235 #define k8LtstGrayColor 245 #define k8LtstGray4Color 247 #define k8LtstGray5Color 248 #define k8LtGrayColor 249 #define k8Gray2Color 251 #define k8DkGrayColor 252 #define k8DkGray2Color 253 #define kBBQMaskID 3900 #define kUpStairsMaskID 3901 #define kTrunkMaskID 3902 #define kMailboxRightMaskID 3903 #define kMailboxLeftMaskID 3904 #define kDoorInLeftMaskID 3905 #define kDoorInRightMaskID 3906 #define kWindowInLeftMaskID 3907 #define kWindowInRightMaskID 3908 #define kHipLampMaskID 3909 #define kDecoLampMaskID 3910 #define kGuitarMaskID 3911 #define kTVMaskID 3912 #define kVCRMaskID 3913 #define kStereoMaskID 3914 #define kMicrowaveMaskID 3915 #define kFireplaceMaskID 3916 #define kBearMaskID 3917 #define kVase1MaskID 3918 #define kVase2MaskID 3919 #define kManholeMaskID 3920 #define kBooksMaskID 3922 #define kCloudMaskID 3921 #define kRugMaskID 3923 #define kChimesMaskID 3924 #define kCinderMaskID 3925 #define kFlowerBoxMaskID 3926 #define kCobwebMaskID 3927 #define kCobwebPictID 3958 #define kFlowerBoxPictID 3959 #define kCinderPictID 3960 #define kChimesPictID 3961 #define kRugPictID 3962 #define kBooksPictID 3964 #define kCloudPictID 3965 #define kBulletinPictID 3966 #define kManholePictID 3967 #define kVase2PictID 3968 #define kVase1PictID 3969 #define kCalendarPictID 3970 #define kMicrowavePictID 3971 #define kBearPictID 3972 #define kFireplacePictID 3973 #define kOzmaPictID 3975 #define kWindowExRightPictID 3977 #define kWindowExLeftPictID 3978 #define kWindowInRightPictID 3979 #define kWindowInLeftPictID 3980 #define kDoorExLeftPictID 3981 #define kDoorExRightPictID 3982 #define kDoorInRightPictID 3983 #define kDoorInLeftPictID 3984 #define kMailboxRightPictID 3985 #define kMailboxLeftPictID 3986 #define kTrunkPictID 3987 #define kBBQPictID 3988 #define kStereoPictID 3989 #define kVCRPictID 3990 #define kGuitarPictID 3991 #define kTVPictID 3992 #define kDecoLampPictID 3993 #define kHipLampPictID 3994 #define kFilingCabinetPictID 3995 #define kDownStairsPictID 3996 #define kUpStairsPictID 3997 #define kMailboxBase 296 #define kMonthStringID 1005 //============================================================== Functions //-------------------------------------------------------------- DrawMailboxLeft void DrawMailboxLeft (Rect *theRect, short down) { Rect bounds; GWorldPtr tempMap; GWorldPtr tempMask; long darkGrayC, lightWoodC, darkWoodC; CGrafPtr wasCPort; GDHandle wasWorld; OSErr theErr; GetGWorld(&wasCPort, &wasWorld); SetGWorld(backSrcMap, nil); if (thisMac.isDepth == 4) { darkGrayC = 13; lightWoodC = 9; darkWoodC = 11; } else { darkGrayC = k8DkGray2Color; lightWoodC = k8PissYellowColor; darkWoodC = k8BrownColor; } if (theRect->bottom < down + kMailboxBase) { ColorLine(theRect->left + 49, theRect->bottom, theRect->left + 49, down + kMailboxBase, darkGrayC); ColorLine(theRect->left + 50, theRect->bottom, theRect->left + 50, down + kMailboxBase + 1, lightWoodC); ColorLine(theRect->left + 51, theRect->bottom, theRect->left + 51, down + kMailboxBase + 2, lightWoodC); ColorLine(theRect->left + 52, theRect->bottom, theRect->left + 52, down + kMailboxBase + 3, lightWoodC); ColorLine(theRect->left + 53, theRect->bottom, theRect->left + 53, down + kMailboxBase + 3, darkWoodC); ColorLine(theRect->left + 54, theRect->bottom, theRect->left + 54, down + kMailboxBase + 3, darkWoodC); ColorLine(theRect->left + 55, theRect->bottom, theRect->left + 55, down + kMailboxBase + 3, darkWoodC); ColorLine(theRect->left + 56, theRect->bottom, theRect->left + 56, down + kMailboxBase + 3, darkWoodC); ColorLine(theRect->left + 57, theRect->bottom, theRect->left + 57, down + kMailboxBase + 3, darkWoodC); ColorLine(theRect->left + 58, theRect->bottom, theRect->left + 58, down + kMailboxBase + 3, darkWoodC); ColorLine(theRect->left + 59, theRect->bottom, theRect->left + 59, down + kMailboxBase + 3, darkWoodC); ColorLine(theRect->left + 60, theRect->bottom, theRect->left + 60, down + kMailboxBase + 3, darkWoodC); ColorLine(theRect->left + 61, theRect->bottom, theRect->left + 61, down + kMailboxBase + 3, darkWoodC); ColorLine(theRect->left + 62, theRect->bottom, theRect->left + 62, down + kMailboxBase + 3, darkGrayC); } SetGWorld(wasCPort, wasWorld); bounds = srcRects[kMailboxLf]; theErr = CreateOffScreenGWorld(&tempMap, &bounds, kPreferredDepth); SetGWorld(tempMap, nil); LoadGraphic(kMailboxLeftPictID); theErr = CreateOffScreenGWorld(&tempMask, &bounds, 1); SetGWorld(tempMask, nil); LoadGraphic(kMailboxLeftMaskID); CopyMask((BitMap *)*GetGWorldPixMap(tempMap), (BitMap *)*GetGWorldPixMap(tempMask), (BitMap *)*GetGWorldPixMap(backSrcMap), &srcRects[kMailboxLf], &srcRects[kMailboxLf], theRect); SetGWorld(wasCPort, wasWorld); DisposeGWorld(tempMap); DisposeGWorld(tempMask); // SetPort((GrafPtr)backSrcMap); } //-------------------------------------------------------------- DrawMailboxRight void DrawMailboxRight (Rect *theRect, short down) { Rect bounds; GWorldPtr tempMap; GWorldPtr tempMask; long darkGrayC, lightWoodC, darkWoodC; CGrafPtr wasCPort; GDHandle wasWorld; OSErr theErr; GetGWorld(&wasCPort, &wasWorld); SetGWorld(backSrcMap, nil); if (thisMac.isDepth == 4) { darkGrayC = 13; lightWoodC = 9; darkWoodC = 11; } else { darkGrayC = k8DkGray2Color; lightWoodC = k8PissYellowColor; darkWoodC = k8BrownColor; } if (theRect->bottom < down + kMailboxBase) { ColorLine(theRect->left + 34, theRect->bottom, theRect->left + 34, down + kMailboxBase, darkGrayC); ColorLine(theRect->left + 35, theRect->bottom, theRect->left + 35, down + kMailboxBase + 1, lightWoodC); ColorLine(theRect->left + 36, theRect->bottom, theRect->left + 36, down + kMailboxBase + 2, lightWoodC); ColorLine(theRect->left + 37, theRect->bottom, theRect->left + 37, down + kMailboxBase + 3, lightWoodC); ColorLine(theRect->left + 38, theRect->bottom, theRect->left + 38, down + kMailboxBase + 3, darkWoodC); ColorLine(theRect->left + 39, theRect->bottom, theRect->left + 39, down + kMailboxBase + 3, darkWoodC); ColorLine(theRect->left + 40, theRect->bottom, theRect->left + 40, down + kMailboxBase + 3, darkWoodC); ColorLine(theRect->left + 41, theRect->bottom, theRect->left + 41, down + kMailboxBase + 3, darkWoodC); ColorLine(theRect->left + 42, theRect->bottom, theRect->left + 42, down + kMailboxBase + 3, darkWoodC); ColorLine(theRect->left + 43, theRect->bottom, theRect->left + 43, down + kMailboxBase + 3, darkWoodC); ColorLine(theRect->left + 44, theRect->bottom, theRect->left + 44, down + kMailboxBase + 3, darkWoodC); ColorLine(theRect->left + 45, theRect->bottom, theRect->left + 45, down + kMailboxBase + 3, darkWoodC); ColorLine(theRect->left + 46, theRect->bottom, theRect->left + 46, down + kMailboxBase + 3, darkWoodC); ColorLine(theRect->left + 47, theRect->bottom, theRect->left + 47, down + kMailboxBase + 3, darkGrayC); } SetGWorld(wasCPort, wasWorld); bounds = srcRects[kMailboxRt]; theErr = CreateOffScreenGWorld(&tempMap, &bounds, kPreferredDepth); SetGWorld(tempMap, nil); LoadGraphic(kMailboxRightPictID); theErr = CreateOffScreenGWorld(&tempMask, &bounds, 1); SetGWorld(tempMask, nil); LoadGraphic(kMailboxRightMaskID); CopyMask((BitMap *)*GetGWorldPixMap(tempMap), (BitMap *)*GetGWorldPixMap(tempMask), (BitMap *)*GetGWorldPixMap(backSrcMap), &srcRects[kMailboxRt], &srcRects[kMailboxRt], theRect); SetGWorld(wasCPort, wasWorld); DisposeGWorld(tempMap); DisposeGWorld(tempMask); // SetPort((GrafPtr)backSrcMap); } //-------------------------------------------------------------- DrawSimpleTransport void DrawSimpleTransport (short what, Rect *theRect) { CopyMask((BitMap *)*GetGWorldPixMap(transSrcMap), (BitMap *)*GetGWorldPixMap(transMaskMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &srcRects[what], &srcRects[what], theRect); } //-------------------------------------------------------------- DrawInvisTransport void DrawInvisTransport (Rect *theRect) { CGrafPtr wasCPort; GDHandle wasWorld; GetGWorld(&wasCPort, &wasWorld); SetGWorld(backSrcMap, nil); ColorFrameRect(theRect, 32); SetGWorld(wasCPort, wasWorld); } //-------------------------------------------------------------- DrawLightSwitch void DrawLightSwitch (Rect *theRect, Boolean state) { if (state) { CopyBits((BitMap *)*GetGWorldPixMap(switchSrcMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &lightSwitchSrc[0], theRect, srcCopy, nil); } else { CopyBits((BitMap *)*GetGWorldPixMap(switchSrcMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &lightSwitchSrc[1], theRect, srcCopy, nil); } } //-------------------------------------------------------------- DrawMachineSwitch void DrawMachineSwitch (Rect *theRect, Boolean state) { if (state) CopyBits((BitMap *)*GetGWorldPixMap(switchSrcMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &machineSwitchSrc[0], theRect, srcCopy, nil); else CopyBits((BitMap *)*GetGWorldPixMap(switchSrcMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &machineSwitchSrc[1], theRect, srcCopy, nil); } //-------------------------------------------------------------- DrawThermostat void DrawThermostat (Rect *theRect, Boolean state) { if (state) CopyBits((BitMap *)*GetGWorldPixMap(switchSrcMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &thermostatSrc[0], theRect, srcCopy, nil); else CopyBits((BitMap *)*GetGWorldPixMap(switchSrcMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &thermostatSrc[1], theRect, srcCopy, nil); } //-------------------------------------------------------------- DrawPowerSwitch void DrawPowerSwitch (Rect *theRect, Boolean state) { if (state) CopyBits((BitMap *)*GetGWorldPixMap(switchSrcMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &powerSrc[0], theRect, srcCopy, nil); else CopyBits((BitMap *)*GetGWorldPixMap(switchSrcMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &powerSrc[1], theRect, srcCopy, nil); } //-------------------------------------------------------------- DrawKnifeSwitch void DrawKnifeSwitch (Rect *theRect, Boolean state) { if (state) CopyBits((BitMap *)*GetGWorldPixMap(switchSrcMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &knifeSwitchSrc[0], theRect, srcCopy, nil); else CopyBits((BitMap *)*GetGWorldPixMap(switchSrcMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &knifeSwitchSrc[1], theRect, srcCopy, nil); } //-------------------------------------------------------------- DrawInvisibleSwitch void DrawInvisibleSwitch (Rect *theRect) { CGrafPtr wasCPort; GDHandle wasWorld; GetGWorld(&wasCPort, &wasWorld); SetGWorld(backSrcMap, nil); ColorFrameRect(theRect, kIntenseGreenColor); SetGWorld(wasCPort, wasWorld); } //-------------------------------------------------------------- DrawTrigger void DrawTrigger (Rect *theRect) { CGrafPtr wasCPort; GDHandle wasWorld; GetGWorld(&wasCPort, &wasWorld); SetGWorld(backSrcMap, nil); ColorFrameRect(theRect, kIntenseBlueColor); SetGWorld(wasCPort, wasWorld); } //-------------------------------------------------------------- DrawSoundTrigger void DrawSoundTrigger (Rect *theRect) { CGrafPtr wasCPort; GDHandle wasWorld; GetGWorld(&wasCPort, &wasWorld); SetGWorld(backSrcMap, nil); ColorFrameRect(theRect, kIntenseYellowColor); SetGWorld(wasCPort, wasWorld); } //-------------------------------------------------------------- DrawSimpleLight void DrawSimpleLight (short what, Rect *theRect) { CopyMask((BitMap *)*GetGWorldPixMap(lightSrcMap), (BitMap *)*GetGWorldPixMap(lightMaskMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &srcRects[what], &srcRects[what], theRect); } //-------------------------------------------------------------- DrawFlourescent void DrawFlourescent (Rect *theRect) { Rect partRect; long grayC, gray2C, gray3C, gray4C, violetC; CGrafPtr wasCPort; GDHandle wasWorld; if (thisMac.isDepth == 4) { grayC = 7L; gray2C = 5L; gray3C = 4L; gray4C = 1L; violetC = 3L; } else { grayC = k8LtGrayColor; gray2C = k8LtstGray5Color; gray3C = k8LtstGray4Color; gray4C = k8LtstGrayColor; violetC = kPaleVioletColor; } GetGWorld(&wasCPort, &wasWorld); SetGWorld(backSrcMap, nil); ColorLine(theRect->left + 16, theRect->top, theRect->right - 17, theRect->top, grayC); ColorLine(theRect->left + 16, theRect->top + 1, theRect->right - 17, theRect->top + 1, gray2C); ColorLine(theRect->left + 16, theRect->top + 2, theRect->right - 17, theRect->top + 2, gray2C); ColorLine(theRect->left + 16, theRect->top + 3, theRect->right - 17, theRect->top + 3, gray3C); ColorLine(theRect->left + 16, theRect->top + 4, theRect->right - 17, theRect->top + 4, gray4C); ColorLine(theRect->left + 16, theRect->top + 5, theRect->right - 17, theRect->top + 5, violetC); ColorLine(theRect->left + 16, theRect->top + 6, theRect->right - 17, theRect->top + 6, k8WhiteColor); ColorLine(theRect->left + 16, theRect->top + 7, theRect->right - 17, theRect->top + 7, k8WhiteColor); ColorLine(theRect->left + 16, theRect->top + 8, theRect->right - 17, theRect->top + 8, k8WhiteColor); ColorLine(theRect->left + 16, theRect->top + 9, theRect->right - 17, theRect->top + 9, k8WhiteColor); ColorLine(theRect->left + 16, theRect->top + 10, theRect->right - 17, theRect->top + 10, k8WhiteColor); ColorLine(theRect->left + 16, theRect->top + 11, theRect->right - 17, theRect->top + 11, violetC); SetGWorld(wasCPort, wasWorld); partRect = flourescentSrc1; ZeroRectCorner(&partRect); QOffsetRect(&partRect, theRect->left, theRect->top); CopyMask((BitMap *)*GetGWorldPixMap(lightSrcMap), (BitMap *)*GetGWorldPixMap(lightMaskMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &flourescentSrc1, &flourescentSrc1, &partRect); partRect = flourescentSrc2; ZeroRectCorner(&partRect); QOffsetRect(&partRect, -partRect.right, 0); QOffsetRect(&partRect, theRect->right, theRect->top); CopyMask((BitMap *)*GetGWorldPixMap(lightSrcMap), (BitMap *)*GetGWorldPixMap(lightMaskMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &flourescentSrc2, &flourescentSrc2, &partRect); } //-------------------------------------------------------------- DrawTrackLight void DrawTrackLight (Rect *theRect) { #define kTrackLightSpacing 64 Rect partRect; long grayC, gray2C, gray3C, gray4C; short which, howMany, i, spread; CGrafPtr wasCPort; GDHandle wasWorld; if (thisMac.isDepth == 4) { grayC = 7L; gray2C = 8L; gray3C = 4L; gray4C = 11L; } else { grayC = k8LtGrayColor; gray2C = k8Gray2Color; gray3C = k8LtstGray4Color; gray4C = k8DkGrayColor; } GetGWorld(&wasCPort, &wasWorld); SetGWorld(backSrcMap, nil); ColorLine(theRect->left, theRect->top - 3, theRect->right - 1, theRect->top - 3, gray2C); ColorLine(theRect->left, theRect->top - 2, theRect->right - 1, theRect->top - 2, grayC); ColorLine(theRect->left, theRect->top - 1, theRect->right - 1, theRect->top - 1, grayC); ColorLine(theRect->left, theRect->top, theRect->right - 1, theRect->top, gray3C); ColorLine(theRect->left, theRect->top + 1, theRect->right - 1, theRect->top + 1, gray4C); ColorLine(theRect->left, theRect->top + 2, theRect->right - 1, theRect->top + 2, gray3C); SetGWorld(wasCPort, wasWorld); partRect = trackLightSrc[0]; // left most track light ZeroRectCorner(&partRect); QOffsetRect(&partRect, theRect->left, theRect->top); which = 0; CopyMask((BitMap *)*GetGWorldPixMap(lightSrcMap), (BitMap *)*GetGWorldPixMap(lightMaskMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &trackLightSrc[which], &trackLightSrc[which], &partRect); partRect = trackLightSrc[0]; // right most track light ZeroRectCorner(&partRect); QOffsetRect(&partRect, -partRect.right, 0); QOffsetRect(&partRect, theRect->right, theRect->top); which = 2; CopyMask((BitMap *)*GetGWorldPixMap(lightSrcMap), (BitMap *)*GetGWorldPixMap(lightMaskMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &trackLightSrc[which], &trackLightSrc[which], &partRect); howMany = ((RectWide(theRect) - RectWide(&trackLightSrc[0])) / kTrackLightSpacing) - 1; if (howMany > 0) { which = 0; spread = (RectWide(theRect) - RectWide(&trackLightSrc[0])) / (howMany + 1); for (i = 0; i < howMany; i++) { partRect = trackLightSrc[0]; // filler track lights ZeroRectCorner(&partRect); QOffsetRect(&partRect, theRect->left, theRect->top); QOffsetRect(&partRect, spread * (i + 1), 0); which++; if (which >= kNumTrackLights) which = 0; CopyMask((BitMap *)*GetGWorldPixMap(lightSrcMap), (BitMap *)*GetGWorldPixMap(lightMaskMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &trackLightSrc[which], &trackLightSrc[which], &partRect); } } } //-------------------------------------------------------------- DrawInvisLight void DrawInvisLight (Rect *theRect) { CGrafPtr wasCPort; GDHandle wasWorld; GetGWorld(&wasCPort, &wasWorld); SetGWorld(backSrcMap, nil); ColorFrameOval(theRect, 17); SetGWorld(wasCPort, wasWorld); } //-------------------------------------------------------------- DrawSimpleAppliance void DrawSimpleAppliance (short what, Rect *theRect) { CopyMask((BitMap *)*GetGWorldPixMap(applianceSrcMap), (BitMap *)*GetGWorldPixMap(applianceMaskMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &srcRects[what], &srcRects[what], theRect); } //-------------------------------------------------------------- DrawMacPlus void DrawMacPlus (Rect *theRect, Boolean isOn, Boolean isLit) { Rect screen; if (isLit) { CopyMask((BitMap *)*GetGWorldPixMap(applianceSrcMap), (BitMap *)*GetGWorldPixMap(applianceMaskMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &srcRects[kMacPlus], &srcRects[kMacPlus], theRect); } screen = plusScreen1; ZeroRectCorner(&screen); QOffsetRect(&screen, theRect->left + 10, theRect->top + 7); if (isOn) { CopyBits((BitMap *)*GetGWorldPixMap(applianceSrcMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &plusScreen2, &screen, srcCopy, nil); } else { CopyBits((BitMap *)*GetGWorldPixMap(applianceSrcMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &plusScreen1, &screen, srcCopy, nil); } } //-------------------------------------------------------------- DrawTV void DrawTV (Rect *theRect, Boolean isOn, Boolean isLit) { Rect bounds; GWorldPtr tempMap; GWorldPtr tempMask; CGrafPtr wasCPort; GDHandle wasWorld; OSErr theErr; if (isLit) { GetGWorld(&wasCPort, &wasWorld); bounds = srcRects[kTV]; theErr = CreateOffScreenGWorld(&tempMap, &bounds, kPreferredDepth); SetGWorld(tempMap, nil); LoadGraphic(kTVPictID); theErr = CreateOffScreenGWorld(&tempMask, &bounds, 1); SetGWorld(tempMask, nil); LoadGraphic(kTVMaskID); CopyMask((BitMap *)*GetGWorldPixMap(tempMap), (BitMap *)*GetGWorldPixMap(tempMask), (BitMap *)*GetGWorldPixMap(backSrcMap), &srcRects[kTV], &srcRects[kTV], theRect); SetGWorld(wasCPort, wasWorld); DisposeGWorld(tempMap); DisposeGWorld(tempMask); // SetPort((GrafPtr)backSrcMap); } bounds = tvScreen1; ZeroRectCorner(&bounds); QOffsetRect(&bounds, theRect->left + 17, theRect->top + 10); if (isOn) { CopyBits((BitMap *)*GetGWorldPixMap(applianceSrcMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &tvScreen2, &bounds, srcCopy, nil); } else { CopyBits((BitMap *)*GetGWorldPixMap(applianceSrcMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &tvScreen1, &bounds, srcCopy, nil); } } //-------------------------------------------------------------- DrawCoffee void DrawCoffee (Rect *theRect, Boolean isOn, Boolean isLit) { Rect light; if (isLit) { CopyMask((BitMap *)*GetGWorldPixMap(applianceSrcMap), (BitMap *)*GetGWorldPixMap(applianceMaskMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &srcRects[kCoffee], &srcRects[kCoffee], theRect); } light = coffeeLight1; ZeroRectCorner(&light); QOffsetRect(&light, theRect->left + 32, theRect->top + 57); if (isOn) { CopyBits((BitMap *)*GetGWorldPixMap(applianceSrcMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &coffeeLight2, &light, srcCopy, nil); } else { CopyBits((BitMap *)*GetGWorldPixMap(applianceSrcMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &coffeeLight1, &light, srcCopy, nil); } } //-------------------------------------------------------------- DrawOutlet void DrawOutlet (Rect *theRect) { CopyMask((BitMap *)*GetGWorldPixMap(applianceSrcMap), (BitMap *)*GetGWorldPixMap(applianceMaskMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &srcRects[kOutlet], &srcRects[kOutlet], theRect); } //-------------------------------------------------------------- DrawVCR void DrawVCR (Rect *theRect, Boolean isOn, Boolean isLit) { Rect bounds; GWorldPtr tempMap; GWorldPtr tempMask; CGrafPtr wasCPort; GDHandle wasWorld; OSErr theErr; if (isLit) { GetGWorld(&wasCPort, &wasWorld); bounds = srcRects[kVCR]; theErr = CreateOffScreenGWorld(&tempMap, &bounds, kPreferredDepth); SetGWorld(tempMap, nil); LoadGraphic(kVCRPictID); theErr = CreateOffScreenGWorld(&tempMask, &bounds, 1); SetGWorld(tempMask, nil); LoadGraphic(kVCRMaskID); CopyMask((BitMap *)*GetGWorldPixMap(tempMap), (BitMap *)*GetGWorldPixMap(tempMask), (BitMap *)*GetGWorldPixMap(backSrcMap), &srcRects[kVCR], &srcRects[kVCR], theRect); SetGWorld(wasCPort, wasWorld); DisposeGWorld(tempMap); DisposeGWorld(tempMask); // SetPort((GrafPtr)backSrcMap); } bounds = vcrTime1; ZeroRectCorner(&bounds); QOffsetRect(&bounds, theRect->left + 64, theRect->top + 6); if (isOn) { CopyBits((BitMap *)*GetGWorldPixMap(applianceSrcMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &vcrTime2, &bounds, srcCopy, nil); } else { CopyBits((BitMap *)*GetGWorldPixMap(applianceSrcMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &vcrTime1, &bounds, srcCopy, nil); } } //-------------------------------------------------------------- DrawStereo void DrawStereo (Rect *theRect, Boolean isOn, Boolean isLit) { Rect bounds; GWorldPtr tempMap; GWorldPtr tempMask; CGrafPtr wasCPort; GDHandle wasWorld; OSErr theErr; if (isLit) { GetGWorld(&wasCPort, &wasWorld); bounds = srcRects[kStereo]; theErr = CreateOffScreenGWorld(&tempMap, &bounds, kPreferredDepth); SetGWorld(tempMap, nil); LoadGraphic(kStereoPictID); theErr = CreateOffScreenGWorld(&tempMask, &bounds, 1); SetGWorld(tempMask, nil); LoadGraphic(kStereoMaskID); CopyMask((BitMap *)*GetGWorldPixMap(tempMap), (BitMap *)*GetGWorldPixMap(tempMask), (BitMap *)*GetGWorldPixMap(backSrcMap), &srcRects[kStereo], &srcRects[kStereo], theRect); SetGWorld(wasCPort, wasWorld); DisposeGWorld(tempMap); DisposeGWorld(tempMask); // SetPort((GrafPtr)backSrcMap); } bounds = stereoLight1; ZeroRectCorner(&bounds); QOffsetRect(&bounds, theRect->left + 56, theRect->top + 20); if (isOn) { CopyBits((BitMap *)*GetGWorldPixMap(applianceSrcMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &stereoLight2, &bounds, srcCopy, nil); } else { CopyBits((BitMap *)*GetGWorldPixMap(applianceSrcMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &stereoLight1, &bounds, srcCopy, nil); } } //-------------------------------------------------------------- DrawMicrowave void DrawMicrowave (Rect *theRect, Boolean isOn, Boolean isLit) { Rect bounds; GWorldPtr tempMap; GWorldPtr tempMask; CGrafPtr wasCPort; GDHandle wasWorld; OSErr theErr; if (isLit) { GetGWorld(&wasCPort, &wasWorld); bounds = srcRects[kMicrowave]; theErr = CreateOffScreenGWorld(&tempMap, &bounds, kPreferredDepth); SetGWorld(tempMap, nil); LoadGraphic(kMicrowavePictID); theErr = CreateOffScreenGWorld(&tempMask, &bounds, 1); SetGWorld(tempMask, nil); LoadGraphic(kMicrowaveMaskID); CopyMask((BitMap *)*GetGWorldPixMap(tempMap), (BitMap *)*GetGWorldPixMap(tempMask), (BitMap *)*GetGWorldPixMap(backSrcMap), &srcRects[kMicrowave], &srcRects[kMicrowave], theRect); SetGWorld(wasCPort, wasWorld); DisposeGWorld(tempMap); DisposeGWorld(tempMask); // SetPort((GrafPtr)backSrcMap); } bounds = microOn; ZeroRectCorner(&bounds); QOffsetRect(&bounds, theRect->left + 14, theRect->top + 13); if (isOn) { CopyBits((BitMap *)*GetGWorldPixMap(applianceSrcMap), (BitMap *)*GetGWorldPixMap(backSrcMap), µOn, &bounds, srcCopy, nil); QOffsetRect(&bounds, 16, 0); CopyBits((BitMap *)*GetGWorldPixMap(applianceSrcMap), (BitMap *)*GetGWorldPixMap(backSrcMap), µOn, &bounds, srcCopy, nil); QOffsetRect(&bounds, 16, 0); CopyBits((BitMap *)*GetGWorldPixMap(applianceSrcMap), (BitMap *)*GetGWorldPixMap(backSrcMap), µOn, &bounds, srcCopy, nil); } else if (isLit) { CopyBits((BitMap *)*GetGWorldPixMap(applianceSrcMap), (BitMap *)*GetGWorldPixMap(backSrcMap), µOff, &bounds, srcCopy, nil); QOffsetRect(&bounds, 16, 0); CopyBits((BitMap *)*GetGWorldPixMap(applianceSrcMap), (BitMap *)*GetGWorldPixMap(backSrcMap), µOff, &bounds, srcCopy, nil); QOffsetRect(&bounds, 16, 0); CopyBits((BitMap *)*GetGWorldPixMap(applianceSrcMap), (BitMap *)*GetGWorldPixMap(backSrcMap), µOff, &bounds, srcCopy, nil); } } //-------------------------------------------------------------- DrawBalloon void DrawBalloon (Rect *theRect) { CopyMask((BitMap *)*GetGWorldPixMap(balloonSrcMap), (BitMap *)*GetGWorldPixMap(balloonMaskMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &balloonSrc[1], &balloonSrc[1], theRect); } //-------------------------------------------------------------- DrawCopter void DrawCopter (Rect *theRect) { CopyMask((BitMap *)*GetGWorldPixMap(copterSrcMap), (BitMap *)*GetGWorldPixMap(copterMaskMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &copterSrc[1], &copterSrc[1], theRect); } //-------------------------------------------------------------- DrawDart void DrawDart (Rect *theRect, short which) { if (which == kDartLf) { CopyMask((BitMap *)*GetGWorldPixMap(dartSrcMap), (BitMap *)*GetGWorldPixMap(dartMaskMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &dartSrc[0], &dartSrc[0], theRect); } else { CopyMask((BitMap *)*GetGWorldPixMap(dartSrcMap), (BitMap *)*GetGWorldPixMap(dartMaskMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &dartSrc[2], &dartSrc[2], theRect); } } //-------------------------------------------------------------- DrawBall void DrawBall (short what, Rect *theRect) { CopyMask((BitMap *)*GetGWorldPixMap(ballSrcMap), (BitMap *)*GetGWorldPixMap(ballMaskMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &srcRects[what], &srcRects[what], theRect); } //-------------------------------------------------------------- DrawFish void DrawFish (short what, Rect *theRect) { CopyMask((BitMap *)*GetGWorldPixMap(enemySrcMap), (BitMap *)*GetGWorldPixMap(enemyMaskMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &srcRects[what], &srcRects[what], theRect); } //-------------------------------------------------------------- DrawDrip void DrawDrip (Rect *theRect) { CopyMask((BitMap *)*GetGWorldPixMap(dripSrcMap), (BitMap *)*GetGWorldPixMap(dripMaskMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &dripSrc[3], &dripSrc[3], theRect); } //-------------------------------------------------------------- DrawMirror void DrawMirror (Rect *mirror) { Rect tempRect; long grayC; CGrafPtr wasCPort; GDHandle wasWorld; if (thisMac.isDepth == 4) { grayC = 13; } else { grayC = k8DkGray2Color; } GetGWorld(&wasCPort, &wasWorld); SetGWorld(backSrcMap, nil); tempRect = *mirror; ColorRect(&tempRect, k8WhiteColor); ColorFrameRect(&tempRect, grayC); InsetRect(&tempRect, 1, 1); ColorFrameRect(&tempRect, k8EarthBlueColor); InsetRect(&tempRect, 1, 1); ColorFrameRect(&tempRect, k8EarthBlueColor); InsetRect(&tempRect, 1, 1); ColorFrameRect(&tempRect, grayC); SetGWorld(wasCPort, wasWorld); } //-------------------------------------------------------------- DrawSimpleClutter void DrawSimpleClutter (short what, Rect *theRect) { CopyMask((BitMap *)*GetGWorldPixMap(clutterSrcMap), (BitMap *)*GetGWorldPixMap(clutterMaskMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &srcRects[what], &srcRects[what], theRect); } //-------------------------------------------------------------- DrawFlower void DrawFlower (Rect *theRect, short which) { CopyMask((BitMap *)*GetGWorldPixMap(clutterSrcMap), (BitMap *)*GetGWorldPixMap(clutterMaskMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &flowerSrc[which], &flowerSrc[which], theRect); } //-------------------------------------------------------------- DrawWallWindow void DrawWallWindow (Rect *window) { #define kWindowSillThick 7 Rect tempRect, tempRect2; long brownC, tanC, dkstRedC; short halfWay; CGrafPtr wasCPort; GDHandle wasWorld; if (thisMac.isDepth == 4) { brownC = 11; tanC = 9; dkstRedC = 15; } else { brownC = k8BrownColor; tanC = k8TanColor; dkstRedC = k8DkRed2Color; } GetGWorld(&wasCPort, &wasWorld); SetGWorld(backSrcMap, nil); tempRect = *window; InsetRect(&tempRect, 3, 0); ColorRect(&tempRect, brownC); HiliteRect(&tempRect, tanC, dkstRedC); tempRect = *window; // top sill tempRect.bottom = tempRect.top + kWindowSillThick; tempRect.left++; tempRect.right--; ColorRect(&tempRect, brownC); HiliteRect(&tempRect, tanC, dkstRedC); tempRect.left--; tempRect.right++; tempRect.top += 2; tempRect.bottom -= 2; ColorRect(&tempRect, brownC); HiliteRect(&tempRect, tanC, dkstRedC); tempRect = *window; // bottom sill tempRect.top = tempRect.bottom - kWindowSillThick; QOffsetRect(&tempRect, 0, -4); tempRect.left++; tempRect.right--; ColorRect(&tempRect, brownC); HiliteRect(&tempRect, tanC, dkstRedC); tempRect.left--; tempRect.right++; tempRect.top += 2; tempRect.bottom -= 2; ColorRect(&tempRect, brownC); HiliteRect(&tempRect, tanC, dkstRedC); tempRect = *window; // inside frame tempRect.left += 8; tempRect.right -= 8; tempRect.top += 11; tempRect.bottom -= 15; HiliteRect(&tempRect, dkstRedC, tanC); halfWay = (tempRect.top + tempRect.bottom) / 2; tempRect2 = tempRect; // top pane tempRect2.bottom = halfWay + 2; InsetRect(&tempRect2, 5, 5); HiliteRect(&tempRect2, dkstRedC, tanC); InsetRect(&tempRect2, 1, 1); if (thisMac.isDepth == 4) ColorRect(&tempRect2, 5); else ColorRect(&tempRect2, k8SkyColor); tempRect2 = tempRect; // bottom pane tempRect2.top = halfWay - 3; InsetRect(&tempRect2, 5, 5); HiliteRect(&tempRect2, dkstRedC, tanC); InsetRect(&tempRect2, 1, 1); if (thisMac.isDepth == 4) ColorRect(&tempRect2, 5); else ColorRect(&tempRect2, k8SkyColor); ColorLine(tempRect2.left - 5, tempRect2.top - 7, tempRect2.right + 5, tempRect2.top - 7, tanC); SetGWorld(wasCPort, wasWorld); } //-------------------------------------------------------------- DrawCalendar void DrawCalendar (Rect *theRect) { DateTimeRec timeRec; Rect bounds; PicHandle thePicture; Str255 monthStr; CGrafPtr wasCPort; GDHandle wasWorld; GetGWorld(&wasCPort, &wasWorld); SetGWorld(backSrcMap, nil); thePicture = GetPicture(kCalendarPictID); if (thePicture == nil) RedAlert(kErrFailedGraphicLoad); HLock((Handle)thePicture); bounds = (*thePicture)->picFrame; HUnlock((Handle)thePicture); QOffsetRect(&bounds, -bounds.left, -bounds.top); QOffsetRect(&bounds, theRect->left, theRect->top); DrawPicture(thePicture, &bounds); ReleaseResource((Handle)thePicture); SetPort((GrafPtr)backSrcMap); TextFace(bold); TextFont(applFont); TextSize(9); GetTime(&timeRec); GetIndString(monthStr, kMonthStringID, timeRec.month); MoveTo(theRect->left + ((64 - StringWidth(monthStr)) / 2), theRect->top + 55); ColorText(monthStr, kDarkFleshColor); SetGWorld(wasCPort, wasWorld); } //-------------------------------------------------------------- DrawBulletin void DrawBulletin (Rect *theRect) { Rect bounds; PicHandle thePicture; CGrafPtr wasCPort; GDHandle wasWorld; GetGWorld(&wasCPort, &wasWorld); SetGWorld(backSrcMap, nil); thePicture = GetPicture(kBulletinPictID); if (thePicture == nil) RedAlert(kErrFailedGraphicLoad); HLock((Handle)thePicture); bounds = (*thePicture)->picFrame; HUnlock((Handle)thePicture); QOffsetRect(&bounds, -bounds.left, -bounds.top); QOffsetRect(&bounds, theRect->left, theRect->top); DrawPicture(thePicture, &bounds); ReleaseResource((Handle)thePicture); SetGWorld(wasCPort, wasWorld); } //-------------------------------------------------------------- DrawPictObject void DrawPictObject (short what, Rect *theRect) { Rect bounds; PicHandle thePicture; short pictID; CGrafPtr wasCPort; GDHandle wasWorld; switch (what) { case kFilingCabinet: pictID = kFilingCabinetPictID; break; case kDownStairs: pictID = kDownStairsPictID; break; case kDoorExRt: pictID = kDoorExRightPictID; break; case kDoorExLf: pictID = kDoorExLeftPictID; break; case kWindowExRt: pictID = kWindowExRightPictID; break; case kWindowExLf: pictID = kWindowExLeftPictID; break; case kOzma: pictID = kOzmaPictID; break; } GetGWorld(&wasCPort, &wasWorld); SetGWorld(backSrcMap, nil); thePicture = GetPicture(pictID); if (thePicture == nil) RedAlert(kErrFailedGraphicLoad); bounds = srcRects[what]; QOffsetRect(&bounds, theRect->left, theRect->top); DrawPicture(thePicture, &bounds); ReleaseResource((Handle)thePicture); SetGWorld(wasCPort, wasWorld); } //-------------------------------------------------------------- DrawPictWithMaskObject void DrawPictWithMaskObject (short what, Rect *theRect) { Rect bounds; GWorldPtr tempMap; GWorldPtr tempMask; short pictID, maskID; CGrafPtr wasCPort; GDHandle wasWorld; OSErr theErr; GetGWorld(&wasCPort, &wasWorld); switch (what) { case kCobweb: pictID = kCobwebPictID; maskID = kCobwebMaskID; break; case kCloud: pictID = kCloudPictID; maskID = kCloudMaskID; break; } bounds = srcRects[what]; theErr = CreateOffScreenGWorld(&tempMap, &bounds, kPreferredDepth); SetGWorld(tempMap, nil); LoadGraphic(pictID); theErr = CreateOffScreenGWorld(&tempMask, &bounds, 1); SetGWorld(tempMask, nil); LoadGraphic(maskID); CopyMask((BitMap *)*GetGWorldPixMap(tempMap), (BitMap *)*GetGWorldPixMap(tempMask), (BitMap *)*GetGWorldPixMap(backSrcMap), &srcRects[what], &srcRects[what], theRect); SetGWorld(wasCPort, wasWorld); DisposeGWorld(tempMap); DisposeGWorld(tempMask); // SetPort((GrafPtr)backSrcMap); } //-------------------------------------------------------------- DrawPictSansWhiteObject void DrawPictSansWhiteObject (short what, Rect *theRect) { Rect bounds; CGrafPtr tempMap; short pictID; CGrafPtr wasCPort; GDHandle wasWorld; OSErr theErr; GetGWorld(&wasCPort, &wasWorld); switch (what) { case kBBQ: pictID = kBBQPictID; break; case kTrunk: pictID = kTrunkPictID; break; case kManhole: pictID = kManholePictID; break; case kBooks: pictID = kBooksPictID; break; case kUpStairs: pictID = kUpStairsPictID; break; case kDoorInLf: pictID = kDoorInLeftPictID; break; case kDoorInRt: pictID = kDoorInRightPictID; break; case kWindowInLf: pictID = kWindowInLeftPictID; break; case kWindowInRt: pictID = kWindowInRightPictID; break; case kHipLamp: pictID = kHipLampPictID; break; case kDecoLamp: pictID = kDecoLampPictID; break; case kGuitar: pictID = kGuitarPictID; break; case kCinderBlock: pictID = kCinderPictID; break; case kFlowerBox: pictID = kFlowerBoxPictID; break; case kFireplace: pictID = kFireplacePictID; break; case kBear: pictID = kBearPictID; break; case kVase1: pictID = kVase1PictID; break; case kVase2: pictID = kVase2PictID; break; case kRug: pictID = kRugPictID; break; case kChimes: pictID = kChimesPictID; break; } bounds = srcRects[what]; theErr = CreateOffScreenGWorld(&tempMap, &bounds, kPreferredDepth); SetGWorld(tempMap, nil); LoadGraphic(pictID); CopyBits((BitMap *)*GetGWorldPixMap(tempMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &srcRects[what], theRect, transparent, nil); SetGWorld(wasCPort, wasWorld); DisposeGWorld(tempMap); // SetPort((GrafPtr)backSrcMap); } //-------------------------------------------------------------- DrawCustPictSansWhite void DrawCustPictSansWhite (short pictID, Rect *theRect) { Rect bounds; GWorldPtr tempMap; CGrafPtr wasCPort; GDHandle wasWorld; OSErr theErr; GetGWorld(&wasCPort, &wasWorld); bounds = *theRect; ZeroRectCorner(&bounds); theErr = CreateOffScreenGWorld(&tempMap, &bounds, kPreferredDepth); SetGWorld(tempMap, nil); LoadGraphic(pictID); CopyBits((BitMap *)*GetGWorldPixMap(tempMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &bounds, theRect, transparent, nil); SetGWorld(wasCPort, wasWorld); DisposeGWorld(tempMap); // SetPort((GrafPtr)backSrcMap); } \ No newline at end of file diff --git a/Sources/ObjectDrawAll.c b/Sources/ObjectDrawAll.c deleted file mode 100755 index ba65461..0000000 --- a/Sources/ObjectDrawAll.c +++ /dev/null @@ -1 +0,0 @@ - //============================================================================ //---------------------------------------------------------------------------- // ObjectDrawAll.c //---------------------------------------------------------------------------- //============================================================================ #include "Externs.h" #include "Environ.h" #include "RectUtils.h" extern Rect localRoomsDest[], movieRect; extern short localNumbers[]; extern short numLights, tvWithMovieNumber; extern Boolean tvOn; //============================================================== Functions //-------------------------------------------------------------- DrawARoomsObjects void DrawARoomsObjects (short neighbor, Boolean redraw) { objectType thisObject; Rect whoCares, itsRect, rectA, rectB, testRect; RgnHandle theRgn; short i, legit, dynamicNum, n; short floor, suite, room, obj; char wasState; Boolean isLit; if (localNumbers[neighbor] == kRoomIsEmpty) return; testRect = houseRect; ZeroRectCorner(&testRect); isLit = (numLights > 0); wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); for (i = 0; i < kMaxRoomObs; i++) { dynamicNum = -1; legit = -1; if (IsThisValid(localNumbers[neighbor], i)) { thisObject = (*thisHouse)->rooms[localNumbers[neighbor]].objects[i]; switch (thisObject.what) { case kObjectIsEmpty: break; case kFloorVent: case kCeilingVent: case kFloorBlower: case kCeilingBlower: case kSewerGrate: case kLeftFan: case kRightFan: case kGrecoVent: case kSewerBlower: GetObjectRect(&thisObject, &itsRect); OffsetRectRoomRelative(&itsRect, neighbor); if ((SectRect(&itsRect, &testRect, &whoCares)) && isLit) DrawSimpleBlowers(thisObject.what, &itsRect); break; case kTaper: GetObjectRect(&thisObject, &itsRect); OffsetRectRoomRelative(&itsRect, neighbor); if (SectRect(&itsRect, &testRect, &whoCares)) { if (isLit) DrawSimpleBlowers(thisObject.what, &itsRect); if (neighbor == kCentralRoom) { if (redraw) ReBackUpFlames(localNumbers[neighbor], i); else AddCandleFlame(localNumbers[neighbor], i, itsRect.left + 10, itsRect.top + 7); } else { QSetRect(&rectA, 0, 0, 16, 15); QOffsetRect(&rectA, itsRect.left + 10 - 8, itsRect.top + 7 - 15); rectB = localRoomsDest[kCentralRoom]; rectB.top -= kFloorSupportTall; rectB.bottom += kFloorSupportTall; if (!SectRect(&rectA, &rectB, &whoCares)) { if (redraw) ReBackUpFlames(localNumbers[neighbor], i); else AddCandleFlame(localNumbers[neighbor], i, itsRect.left + 10, itsRect.top + 7); } } } break; case kCandle: GetObjectRect(&thisObject, &itsRect); OffsetRectRoomRelative(&itsRect, neighbor); if (SectRect(&itsRect, &testRect, &whoCares)) { if (isLit) DrawSimpleBlowers(thisObject.what, &itsRect); if (neighbor == kCentralRoom) { if (redraw) ReBackUpFlames(localNumbers[neighbor], i); else AddCandleFlame(localNumbers[neighbor], i, itsRect.left + 14, itsRect.top + 7); } else { QSetRect(&rectA, 0, 0, 16, 15); QOffsetRect(&rectA, itsRect.left + 14 - 8, itsRect.top + 7 - 15); rectB = localRoomsDest[kCentralRoom]; rectB.top -= kFloorSupportTall; rectB.bottom += kFloorSupportTall; if (!SectRect(&rectA, &rectB, &whoCares)) { if (redraw) ReBackUpFlames(localNumbers[neighbor], i); else AddCandleFlame(localNumbers[neighbor], i, itsRect.left + 14, itsRect.top + 7); } } } break; case kStubby: GetObjectRect(&thisObject, &itsRect); OffsetRectRoomRelative(&itsRect, neighbor); if (SectRect(&itsRect, &testRect, &whoCares)) { if (isLit) DrawSimpleBlowers(thisObject.what, &itsRect); if (neighbor == kCentralRoom) { if (redraw) ReBackUpFlames(localNumbers[neighbor], i); else AddCandleFlame(localNumbers[neighbor], i, itsRect.left + 9, itsRect.top + 7); } else { QSetRect(&rectA, 0, 0, 16, 15); QOffsetRect(&rectA, itsRect.left + 9 - 8, itsRect.top + 7 - 15); rectB = localRoomsDest[kCentralRoom]; rectB.top -= kFloorSupportTall; rectB.bottom += kFloorSupportTall; if (!SectRect(&rectA, &rectB, &whoCares)) { if (redraw) ReBackUpFlames(localNumbers[neighbor], i); else AddCandleFlame(localNumbers[neighbor], i, itsRect.left + 9, itsRect.top + 7); } } } break; case kTiki: GetObjectRect(&thisObject, &itsRect); OffsetRectRoomRelative(&itsRect, neighbor); if (isLit) DrawTiki(&itsRect, playOriginV + VerticalRoomOffset(neighbor)); if (redraw) ReBackUpTikiFlames(localNumbers[neighbor], i); else AddTikiFlame(localNumbers[neighbor], i, itsRect.left + 10, itsRect.top - 9); break; case kBBQ: GetObjectRect(&thisObject, &itsRect); OffsetRectRoomRelative(&itsRect, neighbor); if (SectRect(&itsRect, &testRect, &whoCares)) { if (isLit) DrawPictSansWhiteObject(thisObject.what, &itsRect); if (redraw) ReBackUpBBQCoals(localNumbers[neighbor], i); else AddBBQCoals(localNumbers[neighbor], i, itsRect.left + 16, itsRect.top + 9); } break; case kInvisBlower: case kLiftArea: break; case kTable: GetObjectRect(&thisObject, &itsRect); OffsetRectRoomRelative(&itsRect, neighbor); if (isLit) DrawTable(&itsRect, playOriginV); break; case kShelf: GetObjectRect(&thisObject, &itsRect); OffsetRectRoomRelative(&itsRect, neighbor); if (isLit) DrawShelf(&itsRect); break; case kCabinet: GetObjectRect(&thisObject, &itsRect); OffsetRectRoomRelative(&itsRect, neighbor); if ((SectRect(&itsRect, &testRect, &whoCares)) && isLit) DrawCabinet(&itsRect); break; case kFilingCabinet: case kOzma: GetObjectRect(&thisObject, &itsRect); OffsetRectRoomRelative(&itsRect, neighbor); if ((SectRect(&itsRect, &testRect, &whoCares)) && isLit) DrawPictObject(thisObject.what, &itsRect); break; case kWasteBasket: case kMilkCrate: GetObjectRect(&thisObject, &itsRect); OffsetRectRoomRelative(&itsRect, neighbor); if ((SectRect(&itsRect, &testRect, &whoCares)) && isLit) DrawSimpleFurniture(thisObject.what, &itsRect); break; case kCounter: GetObjectRect(&thisObject, &itsRect); OffsetRectRoomRelative(&itsRect, neighbor); if ((SectRect(&itsRect, &testRect, &whoCares)) && isLit) DrawCounter(&itsRect); break; case kDresser: GetObjectRect(&thisObject, &itsRect); OffsetRectRoomRelative(&itsRect, neighbor); if (isLit) DrawDresser(&itsRect); break; case kDeckTable: GetObjectRect(&thisObject, &itsRect); OffsetRectRoomRelative(&itsRect, neighbor); if (isLit) DrawDeckTable(&itsRect, playOriginV); break; case kStool: GetObjectRect(&thisObject, &itsRect); OffsetRectRoomRelative(&itsRect, neighbor); if (isLit) DrawStool(&itsRect, playOriginV + VerticalRoomOffset(neighbor)); break; case kInvisObstacle: break; case kManhole: GetObjectRect(&thisObject, &itsRect); OffsetRectRoomRelative(&itsRect, neighbor); if (SectRect(&itsRect, &testRect, &whoCares)) { AddTempManholeRect(&itsRect); if (isLit) DrawPictSansWhiteObject(thisObject.what, &itsRect); } break; case kInvisBounce: break; case kRedClock: GetObjectRect(&thisObject, &itsRect); OffsetRectRoomRelative(&itsRect, neighbor); if (SectRect(&itsRect, &testRect, &whoCares)) { if (redraw) legit = ReBackUpSavedMap(&itsRect, localNumbers[neighbor], i); else legit = BackUpToSavedMap(&itsRect, localNumbers[neighbor], i); if (legit != -1) DrawRedClock(&itsRect); } break; case kBlueClock: GetObjectRect(&thisObject, &itsRect); OffsetRectRoomRelative(&itsRect, neighbor); if (SectRect(&itsRect, &testRect, &whoCares)) { if (redraw) legit = ReBackUpSavedMap(&itsRect, localNumbers[neighbor], i); else legit = BackUpToSavedMap(&itsRect, localNumbers[neighbor], i); if (legit != -1) DrawBlueClock(&itsRect); } break; case kYellowClock: GetObjectRect(&thisObject, &itsRect); OffsetRectRoomRelative(&itsRect, neighbor); if (SectRect(&itsRect, &testRect, &whoCares)) { if (redraw) legit = ReBackUpSavedMap(&itsRect, localNumbers[neighbor], i); else legit = BackUpToSavedMap(&itsRect, localNumbers[neighbor], i); if (legit != -1) DrawYellowClock(&itsRect); } break; case kCuckoo: GetObjectRect(&thisObject, &itsRect); OffsetRectRoomRelative(&itsRect, neighbor); if (SectRect(&itsRect, &testRect, &whoCares)) { if (redraw) legit = ReBackUpSavedMap(&itsRect, localNumbers[neighbor], i); else legit = BackUpToSavedMap(&itsRect, localNumbers[neighbor], i); if (legit != -1) { DrawCuckoo(&itsRect); if (redraw) ReBackUpPendulum(localNumbers[neighbor], i); else AddPendulum(localNumbers[neighbor], i, itsRect.left + 4, itsRect.top + 46); } } break; case kPaper: case kBattery: case kBands: case kHelium: GetObjectRect(&thisObject, &itsRect); OffsetRectRoomRelative(&itsRect, neighbor); if (SectRect(&itsRect, &testRect, &whoCares)) { if (redraw) legit = ReBackUpSavedMap(&itsRect, localNumbers[neighbor], i); else legit = BackUpToSavedMap(&itsRect, localNumbers[neighbor], i); if (legit != -1) DrawSimplePrizes(thisObject.what, &itsRect); } break; case kGreaseRt: GetObjectRect(&thisObject, &itsRect); OffsetRectRoomRelative(&itsRect, neighbor); if (thisObject.data.c.state) // standing { if (SectRect(&itsRect, &testRect, &whoCares)) { if (redraw) dynamicNum = ReBackUpGrease(localNumbers[neighbor], i); else dynamicNum = AddGrease(localNumbers[neighbor], i, itsRect.left, itsRect.top, thisObject.data.c.length, true); if (dynamicNum != -1) DrawGreaseRt(&itsRect, thisObject.data.c.length, true); } } else // fallen DrawGreaseRt(&itsRect, thisObject.data.c.length, false); break; case kGreaseLf: GetObjectRect(&thisObject, &itsRect); OffsetRectRoomRelative(&itsRect, neighbor); if (thisObject.data.c.state) { if (SectRect(&itsRect, &testRect, &whoCares)) { if (redraw) dynamicNum = ReBackUpGrease(localNumbers[neighbor], i); else dynamicNum = AddGrease(localNumbers[neighbor], i, itsRect.left, itsRect.top, thisObject.data.c.length, false); if (dynamicNum != -1) DrawGreaseLf(&itsRect, thisObject.data.c.length, true); } } else DrawGreaseLf(&itsRect, thisObject.data.c.length, false); break; case kFoil: GetObjectRect(&thisObject, &itsRect); OffsetRectRoomRelative(&itsRect, neighbor); if (SectRect(&itsRect, &testRect, &whoCares)) { if (redraw) legit = ReBackUpSavedMap(&itsRect, localNumbers[neighbor], i); else legit = BackUpToSavedMap(&itsRect, localNumbers[neighbor], i); if (legit != -1) DrawFoil(&itsRect); } break; case kInvisBonus: case kSlider: break; case kStar: GetObjectRect(&thisObject, &itsRect); OffsetRectRoomRelative(&itsRect, neighbor); if (SectRect(&itsRect, &testRect, &whoCares)) { if (redraw) legit = ReBackUpSavedMap(&itsRect, localNumbers[neighbor], i); else legit = BackUpToSavedMap(&itsRect, localNumbers[neighbor], i); if (legit != -1) { if (redraw) ReBackUpStar(localNumbers[neighbor], i); else AddStar(localNumbers[neighbor], i, itsRect.left, itsRect.top); DrawSimplePrizes(thisObject.what, &itsRect); } } break; case kSparkle: GetObjectRect(&thisObject, &itsRect); OffsetRectRoomRelative(&itsRect, neighbor); if (SectRect(&itsRect, &testRect, &whoCares)) { if ((!redraw) && (neighbor == kCentralRoom)) { rectA = itsRect; QOffsetRect(&rectA, -playOriginH, -playOriginV); dynamicNum = AddDynamicObject(kSparkle, &rectA, &thisObject, localNumbers[neighbor], i, thisObject.data.c.state); } } break; case kUpStairs: case kDoorInLf: case kDoorInRt: case kWindowInLf: case kWindowInRt: GetObjectRect(&thisObject, &itsRect); OffsetRectRoomRelative(&itsRect, neighbor); if (SectRect(&itsRect, &testRect, &whoCares)) DrawPictSansWhiteObject(thisObject.what, &itsRect); break; case kDownStairs: case kDoorExRt: case kDoorExLf: case kWindowExRt: case kWindowExLf: GetObjectRect(&thisObject, &itsRect); OffsetRectRoomRelative(&itsRect, neighbor); if (SectRect(&itsRect, &testRect, &whoCares)) DrawPictObject(thisObject.what, &itsRect); break; case kMailboxLf: GetObjectRect(&thisObject, &itsRect); OffsetRectRoomRelative(&itsRect, neighbor); DrawMailboxLeft(&itsRect, playOriginV + VerticalRoomOffset(neighbor)); break; case kMailboxRt: GetObjectRect(&thisObject, &itsRect); OffsetRectRoomRelative(&itsRect, neighbor); DrawMailboxRight(&itsRect, playOriginV + VerticalRoomOffset(neighbor)); break; case kFloorTrans: case kCeilingTrans: GetObjectRect(&thisObject, &itsRect); OffsetRectRoomRelative(&itsRect, neighbor); if (SectRect(&itsRect, &testRect, &whoCares)) DrawSimpleTransport(thisObject.what, &itsRect); break; case kInvisTrans: case kDeluxeTrans: break; case kLightSwitch: GetObjectRect(&thisObject, &itsRect); OffsetRectRoomRelative(&itsRect, neighbor); if (SectRect(&itsRect, &testRect, &whoCares)) { ExtractFloorSuite(thisObject.data.e.where, &floor, &suite); room = GetRoomNumber(floor, suite); obj = (short)thisObject.data.e.who; DrawLightSwitch(&itsRect, GetObjectState(room, obj)); } dynamicNum = masterObjects[i].hotNum; break; case kMachineSwitch: GetObjectRect(&thisObject, &itsRect); OffsetRectRoomRelative(&itsRect, neighbor); if (SectRect(&itsRect, &testRect, &whoCares)) { ExtractFloorSuite(thisObject.data.e.where, &floor, &suite); room = GetRoomNumber(floor, suite); obj = (short)thisObject.data.e.who; DrawMachineSwitch(&itsRect, GetObjectState(room, obj)); } dynamicNum = masterObjects[i].hotNum; break; case kThermostat: GetObjectRect(&thisObject, &itsRect); OffsetRectRoomRelative(&itsRect, neighbor); if (SectRect(&itsRect, &testRect, &whoCares)) { ExtractFloorSuite(thisObject.data.e.where, &floor, &suite); room = GetRoomNumber(floor, suite); obj = (short)thisObject.data.e.who; DrawThermostat(&itsRect, GetObjectState(room, obj)); } dynamicNum = masterObjects[i].hotNum; break; case kPowerSwitch: GetObjectRect(&thisObject, &itsRect); OffsetRectRoomRelative(&itsRect, neighbor); if (SectRect(&itsRect, &testRect, &whoCares)) { ExtractFloorSuite(thisObject.data.e.where, &floor, &suite); room = GetRoomNumber(floor, suite); obj = (short)thisObject.data.e.who; DrawPowerSwitch(&itsRect, GetObjectState(room, obj)); } dynamicNum = masterObjects[i].hotNum; break; case kKnifeSwitch: GetObjectRect(&thisObject, &itsRect); OffsetRectRoomRelative(&itsRect, neighbor); if (SectRect(&itsRect, &testRect, &whoCares)) { ExtractFloorSuite(thisObject.data.e.where, &floor, &suite); room = GetRoomNumber(floor, suite); obj = (short)thisObject.data.e.who; DrawKnifeSwitch(&itsRect, GetObjectState(room, obj)); } dynamicNum = masterObjects[i].hotNum; break; case kInvisSwitch: dynamicNum = masterObjects[i].hotNum; break; case kTrigger: case kLgTrigger: case kSoundTrigger: break; case kCeilingLight: case kLightBulb: case kTableLamp: GetObjectRect(&thisObject, &itsRect); OffsetRectRoomRelative(&itsRect, neighbor); if ((SectRect(&itsRect, &testRect, &whoCares)) && isLit) DrawSimpleLight(thisObject.what, &itsRect); break; case kTrunk: case kBooks: case kHipLamp: case kDecoLamp: case kGuitar: case kCinderBlock: case kFlowerBox: case kFireplace: case kBear: case kVase1: case kVase2: case kRug: case kChimes: GetObjectRect(&thisObject, &itsRect); OffsetRectRoomRelative(&itsRect, neighbor); if ((SectRect(&itsRect, &testRect, &whoCares)) && isLit) DrawPictSansWhiteObject(thisObject.what, &itsRect); break; case kCustomPict: GetObjectRect(&thisObject, &itsRect); OffsetRectRoomRelative(&itsRect, neighbor); if ((SectRect(&itsRect, &testRect, &whoCares)) && isLit) DrawCustPictSansWhite(thisObject.data.g.height, &itsRect); break; case kFlourescent: GetObjectRect(&thisObject, &itsRect); OffsetRectRoomRelative(&itsRect, neighbor); if ((SectRect(&itsRect, &testRect, &whoCares)) && isLit) DrawFlourescent(&itsRect); break; case kTrackLight: GetObjectRect(&thisObject, &itsRect); OffsetRectRoomRelative(&itsRect, neighbor); if ((SectRect(&itsRect, &testRect, &whoCares)) && isLit) DrawTrackLight(&itsRect); break; case kInvisLight: break; case kShredder: case kCDs: GetObjectRect(&thisObject, &itsRect); OffsetRectRoomRelative(&itsRect, neighbor); if ((SectRect(&itsRect, &testRect, &whoCares)) && isLit) DrawSimpleAppliance(thisObject.what, &itsRect); break; case kToaster: GetObjectRect(&thisObject, &itsRect); OffsetRectRoomRelative(&itsRect, neighbor); if (SectRect(&itsRect, &testRect, &whoCares)) { DrawSimpleAppliance(thisObject.what, &itsRect); if ((!redraw) && (neighbor == kCentralRoom)) { rectA = itsRect; QOffsetRect(&rectA, -playOriginH, -playOriginV); dynamicNum = AddDynamicObject(kToaster, &rectA, &thisObject, localNumbers[neighbor], i, thisObject.data.g.state); } } break; case kMacPlus: GetObjectRect(&thisObject, &itsRect); OffsetRectRoomRelative(&itsRect, neighbor); if (SectRect(&itsRect, &testRect, &whoCares)) { DrawMacPlus(&itsRect, thisObject.data.g.state, isLit); if (!redraw) { rectA = itsRect; QOffsetRect(&rectA, -playOriginH, -playOriginV); dynamicNum = AddDynamicObject(kMacPlus, &rectA, &thisObject, localNumbers[neighbor], i, thisObject.data.g.state); } } break; case kTV: GetObjectRect(&thisObject, &itsRect); OffsetRectRoomRelative(&itsRect, neighbor); if (SectRect(&itsRect, &testRect, &whoCares)) { #ifdef COMPILEQT if ((thisMac.hasQT) && (hasMovie) && (neighbor == kCentralRoom) && (!tvInRoom)) { whoCares = tvScreen1; ZeroRectCorner(&whoCares); OffsetRect(&whoCares, itsRect.left + 17, itsRect.top + 10); GetMovieBox(theMovie, &movieRect); CenterRectInRect(&movieRect, &whoCares); SetMovieBox(theMovie, &movieRect); theRgn = NewRgn(); RectRgn(theRgn, &whoCares); SetMovieDisplayClipRgn(theMovie, theRgn); DisposeRgn(theRgn); tvOn = thisObject.data.g.state; } #endif DrawTV(&itsRect, thisObject.data.g.state, isLit); if (!redraw) { rectA = itsRect; QOffsetRect(&rectA, -playOriginH, -playOriginV); dynamicNum = AddDynamicObject(kTV, &rectA, &thisObject, localNumbers[neighbor], i, thisObject.data.g.state); #ifdef COMPILEQT if ((thisMac.hasQT) && (hasMovie) && (neighbor == kCentralRoom) && (!tvInRoom)) { tvWithMovieNumber = dynamicNum; tvInRoom = true; } #endif } } break; case kCoffee: GetObjectRect(&thisObject, &itsRect); OffsetRectRoomRelative(&itsRect, neighbor); if (SectRect(&itsRect, &testRect, &whoCares)) { DrawCoffee(&itsRect, thisObject.data.g.state, isLit); if (!redraw) { rectA = itsRect; QOffsetRect(&rectA, -playOriginH, -playOriginV); dynamicNum = AddDynamicObject(kCoffee, &rectA, &thisObject, localNumbers[neighbor], i, thisObject.data.g.state); } } break; case kOutlet: GetObjectRect(&thisObject, &itsRect); OffsetRectRoomRelative(&itsRect, neighbor); if (SectRect(&itsRect, &testRect, &whoCares)) { if (isLit) DrawOutlet(&itsRect); if (!redraw) { rectA = itsRect; QOffsetRect(&rectA, -playOriginH, -playOriginV); dynamicNum = AddDynamicObject(kOutlet, &rectA, &thisObject, localNumbers[neighbor], i, thisObject.data.g.state); } } break; case kVCR: GetObjectRect(&thisObject, &itsRect); OffsetRectRoomRelative(&itsRect, neighbor); if (SectRect(&itsRect, &testRect, &whoCares)) { DrawVCR(&itsRect, thisObject.data.g.state, isLit); if (!redraw) { rectA = itsRect; QOffsetRect(&rectA, -playOriginH, -playOriginV); dynamicNum = AddDynamicObject(kVCR, &rectA, &thisObject, localNumbers[neighbor], i, thisObject.data.g.state); } } break; case kStereo: GetObjectRect(&thisObject, &itsRect); OffsetRectRoomRelative(&itsRect, neighbor); if (SectRect(&itsRect, &testRect, &whoCares)) { DrawStereo(&itsRect, isPlayMusicGame, isLit); if (!redraw) { rectA = itsRect; QOffsetRect(&rectA, -playOriginH, -playOriginV); dynamicNum = AddDynamicObject(kStereo, &rectA, &thisObject, localNumbers[neighbor], i, thisObject.data.g.state); } } break; case kMicrowave: GetObjectRect(&thisObject, &itsRect); OffsetRectRoomRelative(&itsRect, neighbor); if (SectRect(&itsRect, &testRect, &whoCares)) { DrawMicrowave(&itsRect, thisObject.data.g.state, isLit); if (!redraw) { rectA = itsRect; QOffsetRect(&rectA, -playOriginH, -playOriginV); dynamicNum = AddDynamicObject(kMicrowave, &rectA, &thisObject, localNumbers[neighbor], i, thisObject.data.g.state); } } break; case kBalloon: if ((neighbor == kCentralRoom) && (!redraw)) { GetObjectRect(&thisObject, &itsRect); OffsetRectRoomRelative(&itsRect, neighbor); QOffsetRect(&itsRect, -playOriginH, -playOriginV); dynamicNum = AddDynamicObject(kBalloon, &itsRect, &thisObject, localNumbers[neighbor], i, thisObject.data.h.state); } break; case kCopterLf: if ((neighbor == kCentralRoom) && (!redraw)) { GetObjectRect(&thisObject, &itsRect); OffsetRectRoomRelative(&itsRect, neighbor); QOffsetRect(&itsRect, -playOriginH, -playOriginV); dynamicNum = AddDynamicObject(kCopterLf, &itsRect, &thisObject, localNumbers[neighbor], i, thisObject.data.h.state); } break; case kCopterRt: if ((neighbor == kCentralRoom) && (!redraw)) { GetObjectRect(&thisObject, &itsRect); OffsetRectRoomRelative(&itsRect, neighbor); QOffsetRect(&itsRect, -playOriginH, -playOriginV); dynamicNum = AddDynamicObject(kCopterRt, &itsRect, &thisObject, localNumbers[neighbor], i, thisObject.data.h.state); } break; case kDartLf: if ((neighbor == kCentralRoom) && (!redraw)) { GetObjectRect(&thisObject, &itsRect); OffsetRectRoomRelative(&itsRect, neighbor); QOffsetRect(&itsRect, -playOriginH, -playOriginV); dynamicNum = AddDynamicObject(kDartLf, &itsRect, &thisObject, localNumbers[neighbor], i, thisObject.data.h.state); } break; case kDartRt: if ((neighbor == kCentralRoom) && (!redraw)) { GetObjectRect(&thisObject, &itsRect); OffsetRectRoomRelative(&itsRect, neighbor); QOffsetRect(&itsRect, -playOriginH, -playOriginV); dynamicNum = AddDynamicObject(kDartRt, &itsRect, &thisObject, localNumbers[neighbor], i, thisObject.data.h.state); } break; case kBall: if ((neighbor == kCentralRoom) && (!redraw)) { GetObjectRect(&thisObject, &itsRect); OffsetRectRoomRelative(&itsRect, neighbor); QOffsetRect(&itsRect, -playOriginH, -playOriginV); dynamicNum = AddDynamicObject(kBall, &itsRect, &thisObject, localNumbers[neighbor], i, thisObject.data.h.state); } break; case kDrip: GetObjectRect(&thisObject, &itsRect); OffsetRectRoomRelative(&itsRect, neighbor); if (SectRect(&itsRect, &testRect, &whoCares)) { DrawDrip(&itsRect); if ((!redraw) && (neighbor == kCentralRoom)) { rectA = itsRect; QOffsetRect(&rectA, -playOriginH, -playOriginV); dynamicNum = AddDynamicObject(kDrip, &rectA, &thisObject, localNumbers[neighbor], i, thisObject.data.h.state); } } break; case kFish: GetObjectRect(&thisObject, &itsRect); OffsetRectRoomRelative(&itsRect, neighbor); if (SectRect(&itsRect, &testRect, &whoCares)) { DrawFish(thisObject.what, &itsRect); if ((!redraw) && (neighbor == kCentralRoom)) { rectA = itsRect; QOffsetRect(&rectA, -playOriginH, -playOriginV); dynamicNum = AddDynamicObject(kFish, &rectA, &thisObject, localNumbers[neighbor], i, thisObject.data.h.state); } } break; case kCobweb: case kCloud: GetObjectRect(&thisObject, &itsRect); OffsetRectRoomRelative(&itsRect, neighbor); if ((SectRect(&itsRect, &testRect, &whoCares)) && isLit) DrawPictWithMaskObject(thisObject.what, &itsRect); break; case kMirror: GetObjectRect(&thisObject, &itsRect); OffsetRectRoomRelative(&itsRect, neighbor); if ((SectRect(&itsRect, &testRect, &whoCares)) && isLit) DrawMirror(&itsRect); if ((neighbor == kCentralRoom) && (!redraw)) { InsetRect(&itsRect, 4, 4); AddToMirrorRegion(&itsRect); } break; case kMousehole: case kFaucet: GetObjectRect(&thisObject, &itsRect); OffsetRectRoomRelative(&itsRect, neighbor); if ((SectRect(&itsRect, &testRect, &whoCares)) && isLit) DrawSimpleClutter(thisObject.what, &itsRect); break; case kFlower: GetObjectRect(&thisObject, &itsRect); OffsetRectRoomRelative(&itsRect, neighbor); if ((SectRect(&itsRect, &testRect, &whoCares)) && isLit) DrawFlower(&itsRect, thisObject.data.i.pict); break; case kWallWindow: GetObjectRect(&thisObject, &itsRect); OffsetRectRoomRelative(&itsRect, neighbor); if (SectRect(&itsRect, &testRect, &whoCares)) DrawWallWindow(&itsRect); break; case kCalendar: GetObjectRect(&thisObject, &itsRect); OffsetRectRoomRelative(&itsRect, neighbor); if ((SectRect(&itsRect, &testRect, &whoCares)) && isLit) DrawCalendar(&itsRect); break; case kBulletin: GetObjectRect(&thisObject, &itsRect); OffsetRectRoomRelative(&itsRect, neighbor); if ((SectRect(&itsRect, &testRect, &whoCares)) && isLit) DrawBulletin(&itsRect); break; } } if (!redraw) // set up links { for (n = 0; n < numMasterObjects; n++) { if ((masterObjects[n].objectNum == i) && (masterObjects[n].roomNum == localNumbers[neighbor])) masterObjects[n].dynaNum = dynamicNum; } } } HSetState((Handle)thisHouse, wasState); } \ No newline at end of file diff --git a/Sources/ObjectEdit.c b/Sources/ObjectEdit.c deleted file mode 100755 index 62d2930..0000000 --- a/Sources/ObjectEdit.c +++ /dev/null @@ -1 +0,0 @@ -//============================================================================ //---------------------------------------------------------------------------- // ObjectEdit.c //---------------------------------------------------------------------------- //============================================================================ #include #include #include "Externs.h" #include "House.h" #include "MainWindow.h" #include "Marquee.h" #include "ObjectEdit.h" #include "Objects.h" #include "Play.h" #include "RectUtils.h" #include "Room.h" short FindObjectSelected (Point); void DragHandle (Point); void DragObject (Point); void AddObjectPairing (void); Boolean ObjectIsUpBlower (objectType *); Rect roomObjectRects[kMaxRoomObs]; Rect initialGliderRect; Rect leftStartGliderSrc, rightStartGliderSrc; Rect leftStartGliderDest, rightStartGliderDest; short objActive; Boolean isFirstRoom; extern retroLink retroLinkList[]; extern Rect gliderSrc[kNumGliderSrcRects]; extern short toolSelected, toolMode; extern Boolean noRoomAtAll; //============================================================== Functions //-------------------------------------------------------------- FindObjectSelected #ifndef COMPILEDEMO short FindObjectSelected (Point where) { short found, i; found = kNoObjectSelected; if (PtInRect(where, &initialGliderRect)) return (kInitialGliderSelected); else if (PtInRect(where, &leftStartGliderDest)) return (kLeftGliderSelected); else if (PtInRect(where, &rightStartGliderDest)) return (kRightGliderSelected); for (i = kMaxRoomObs - 1; i >= 0; i--) { if (PtInRect(where, &roomObjectRects[i])) { found = i; break; } } return (found); } #endif //-------------------------------------------------------------- DoSelectionClick void DoSelectionClick (Point where, Boolean isDoubleClick) { #ifndef COMPILEDEMO short direction, dist; StopMarquee(); if ((PtInMarqueeHandle(where)) && (objActive != kNoObjectSelected)) { if (StillDown()) DragHandle(where); if (ObjectHasHandle(&direction, &dist)) { StartMarqueeHandled(&roomObjectRects[objActive], direction, dist); HandleBlowerGlider(); } else StartMarquee(&roomObjectRects[objActive]); } else { objActive = FindObjectSelected(where); if (objActive == kNoObjectSelected) { if (isDoubleClick) DoRoomInfo(); } else { if (isDoubleClick) { DoObjectInfo(); if (ObjectHasHandle(&direction, &dist)) { StartMarqueeHandled(&roomObjectRects[objActive], direction, dist); HandleBlowerGlider(); } else StartMarquee(&roomObjectRects[objActive]); } else { if (StillDown()) DragObject(where); if (ObjectHasHandle(&direction, &dist)) { StartMarqueeHandled(&roomObjectRects[objActive], direction, dist); HandleBlowerGlider(); } else { if (objActive == kInitialGliderSelected) StartMarquee(&initialGliderRect); else if (objActive == kLeftGliderSelected) StartMarquee(&leftStartGliderDest); else if (objActive == kRightGliderSelected) StartMarquee(&rightStartGliderDest); else StartMarquee(&roomObjectRects[objActive]); } } } } UpdateMenus(false); #endif } //-------------------------------------------------------------- DragHandle #ifndef COMPILEDEMO void DragHandle (Point where) { short hDelta, vDelta; Boolean whoCares; switch (thisRoom->objects[objActive].what) { case kFloorVent: case kCeilingVent: case kFloorBlower: case kCeilingBlower: case kSewerGrate: case kTaper: case kCandle: case kStubby: case kTiki: case kBBQ: case kGrecoVent: case kSewerBlower: vDelta = thisRoom->objects[objActive].data.a.distance; DragMarqueeHandle(where, &vDelta); thisRoom->objects[objActive].data.a.distance = vDelta; whoCares = KeepObjectLegal(); break; case kLiftArea: hDelta = thisRoom->objects[objActive].data.a.distance; vDelta = thisRoom->objects[objActive].data.a.tall * 2; DragMarqueeCorner(where, &hDelta, &vDelta, false); thisRoom->objects[objActive].data.a.distance = hDelta; thisRoom->objects[objActive].data.a.tall = vDelta / 2; whoCares = KeepObjectLegal(); InvalWindowRect(mainWindow, &mainWindowRect); GetThisRoomsObjRects(); ReadyBackground(thisRoom->background, thisRoom->tiles); DrawThisRoomsObjects(); break; case kLeftFan: case kRightFan: hDelta = thisRoom->objects[objActive].data.a.distance; DragMarqueeHandle(where, &hDelta); thisRoom->objects[objActive].data.a.distance = hDelta; whoCares = KeepObjectLegal(); break; case kInvisBlower: if (((thisRoom->objects[objActive].data.a.vector & 0x0F) == 1) || ((thisRoom->objects[objActive].data.a.vector & 0x0F) == 4)) { vDelta = thisRoom->objects[objActive].data.a.distance; DragMarqueeHandle(where, &vDelta); thisRoom->objects[objActive].data.a.distance = vDelta; } else { hDelta = thisRoom->objects[objActive].data.a.distance; DragMarqueeHandle(where, &hDelta); thisRoom->objects[objActive].data.a.distance = hDelta; } whoCares = KeepObjectLegal(); break; case kTable: case kShelf: case kDeckTable: hDelta = RectWide(&thisRoom->objects[objActive].data.b.bounds); DragMarqueeHandle(where, &hDelta); thisRoom->objects[objActive].data.b.bounds.right = thisRoom->objects[objActive].data.b.bounds.left + hDelta; whoCares = KeepObjectLegal(); InvalWindowRect(mainWindow, &mainWindowRect); GetThisRoomsObjRects(); ReadyBackground(thisRoom->background, thisRoom->tiles); DrawThisRoomsObjects(); break; case kCabinet: case kInvisObstacle: case kInvisBounce: hDelta = RectWide(&thisRoom->objects[objActive].data.b.bounds); vDelta = RectTall(&thisRoom->objects[objActive].data.b.bounds); DragMarqueeCorner(where, &hDelta, &vDelta, false); thisRoom->objects[objActive].data.b.bounds.right = thisRoom->objects[objActive].data.b.bounds.left + hDelta; thisRoom->objects[objActive].data.b.bounds.bottom = thisRoom->objects[objActive].data.b.bounds.top + vDelta; whoCares = KeepObjectLegal(); InvalWindowRect(mainWindow, &mainWindowRect); GetThisRoomsObjRects(); ReadyBackground(thisRoom->background, thisRoom->tiles); DrawThisRoomsObjects(); break; case kCounter: case kDresser: hDelta = RectWide(&thisRoom->objects[objActive].data.b.bounds); vDelta = RectTall(&thisRoom->objects[objActive].data.b.bounds); DragMarqueeCorner(where, &hDelta, &vDelta, true); thisRoom->objects[objActive].data.b.bounds.right = thisRoom->objects[objActive].data.b.bounds.left + hDelta; thisRoom->objects[objActive].data.b.bounds.top = thisRoom->objects[objActive].data.b.bounds.bottom - vDelta; whoCares = KeepObjectLegal(); InvalWindowRect(mainWindow, &mainWindowRect); GetThisRoomsObjRects(); ReadyBackground(thisRoom->background, thisRoom->tiles); DrawThisRoomsObjects(); break; case kGreaseRt: case kGreaseLf: case kSlider: hDelta = thisRoom->objects[objActive].data.c.length; DragMarqueeHandle(where, &hDelta); thisRoom->objects[objActive].data.c.length = hDelta; whoCares = KeepObjectLegal(); InvalWindowRect(mainWindow, &mainWindowRect); GetThisRoomsObjRects(); ReadyBackground(thisRoom->background, thisRoom->tiles); DrawThisRoomsObjects(); break; case kInvisTrans: hDelta = thisRoom->objects[objActive].data.d.wide; vDelta = thisRoom->objects[objActive].data.d.tall; DragMarqueeCorner(where, &hDelta, &vDelta, false); if (hDelta > 127) hDelta = 127; thisRoom->objects[objActive].data.d.wide = (Byte)hDelta; thisRoom->objects[objActive].data.d.tall = vDelta; whoCares = KeepObjectLegal(); InvalWindowRect(mainWindow, &mainWindowRect); GetThisRoomsObjRects(); ReadyBackground(thisRoom->background, thisRoom->tiles); DrawThisRoomsObjects(); break; case kDeluxeTrans: hDelta = ((thisRoom->objects[objActive].data.d.tall & 0xFF00) >> 8) * 4; vDelta = (thisRoom->objects[objActive].data.d.tall & 0x00FF) * 4; DragMarqueeCorner(where, &hDelta, &vDelta, false); if (hDelta < 64) hDelta = 64; if (vDelta < 32) vDelta = 32; thisRoom->objects[objActive].data.d.tall = ((hDelta / 4) << 8) + (vDelta / 4); whoCares = KeepObjectLegal(); InvalWindowRect(mainWindow, &mainWindowRect); GetThisRoomsObjRects(); ReadyBackground(thisRoom->background, thisRoom->tiles); DrawThisRoomsObjects(); break; case kFlourescent: case kTrackLight: hDelta = thisRoom->objects[objActive].data.f.length; DragMarqueeHandle(where, &hDelta); thisRoom->objects[objActive].data.f.length = hDelta; whoCares = KeepObjectLegal(); InvalWindowRect(mainWindow, &mainWindowRect); GetThisRoomsObjRects(); ReadyBackground(thisRoom->background, thisRoom->tiles); DrawThisRoomsObjects(); break; case kToaster: vDelta = thisRoom->objects[objActive].data.g.height; DragMarqueeHandle(where, &vDelta); thisRoom->objects[objActive].data.g.height = vDelta; whoCares = KeepObjectLegal(); break; case kBall: case kDrip: case kFish: vDelta = thisRoom->objects[objActive].data.h.length; DragMarqueeHandle(where, &vDelta); thisRoom->objects[objActive].data.h.length = vDelta; whoCares = KeepObjectLegal(); break; case kMirror: case kWallWindow: hDelta = RectWide(&thisRoom->objects[objActive].data.i.bounds); vDelta = RectTall(&thisRoom->objects[objActive].data.i.bounds); DragMarqueeCorner(where, &hDelta, &vDelta, false); thisRoom->objects[objActive].data.i.bounds.right = thisRoom->objects[objActive].data.i.bounds.left + hDelta; thisRoom->objects[objActive].data.i.bounds.bottom = thisRoom->objects[objActive].data.i.bounds.top + vDelta; whoCares = KeepObjectLegal(); InvalWindowRect(mainWindow, &mainWindowRect); GetThisRoomsObjRects(); ReadyBackground(thisRoom->background, thisRoom->tiles); DrawThisRoomsObjects(); break; } fileDirty = true; UpdateMenus(false); } #endif //-------------------------------------------------------------- DragObject #ifndef COMPILEDEMO void DragObject (Point where) { Rect newRect, wasRect; short deltaH, deltaV, increment; char wasState; Boolean invalAll; if (objActive == kInitialGliderSelected) { wasRect = initialGliderRect; newRect = initialGliderRect; DragMarqueeRect(where, &newRect, false, false); } else if (objActive == kLeftGliderSelected) { wasRect = leftStartGliderDest; newRect = leftStartGliderDest; DragMarqueeRect(where, &newRect, false, true); } else if (objActive == kRightGliderSelected) { wasRect = rightStartGliderDest; newRect = rightStartGliderDest; DragMarqueeRect(where, &newRect, false, true); } else { wasRect = roomObjectRects[objActive]; newRect = roomObjectRects[objActive]; switch (thisRoom->objects[objActive].what) { case kFloorVent: case kCeilingVent: case kFloorBlower: case kCeilingBlower: case kSewerGrate: case kGrecoVent: case kSewerBlower: case kManhole: case kUpStairs: case kDownStairs: case kCeilingLight: case kHipLamp: case kDecoLamp: case kFlourescent: case kFloorTrans: case kCeilingTrans: case kDoorInLf: case kDoorInRt: case kDoorExRt: case kDoorExLf: case kWindowInLf: case kWindowInRt: case kWindowExRt: case kWindowExLf: case kBalloon: case kCopterLf: case kCopterRt: case kMousehole: case kFireplace: DragMarqueeRect(where, &newRect, true, false); invalAll = false; break; case kDartLf: case kDartRt: DragMarqueeRect(where, &newRect, false, true); invalAll = false; break; case kTiki: case kTable: case kShelf: case kCabinet: case kDeckTable: case kStool: case kInvisObstacle: case kInvisBounce: case kGreaseRt: case kGreaseLf: case kSlider: case kMailboxLf: case kMailboxRt: case kInvisTrans: case kDeluxeTrans: case kMirror: case kWallWindow: DragMarqueeRect(where, &newRect, false, false); invalAll = true; break; case kCounter: case kDresser: case kTrackLight: DragMarqueeRect(where, &newRect, true, false); invalAll = true; break; case kRedClock: case kBlueClock: case kYellowClock: case kCuckoo: case kPaper: case kBattery: case kBands: case kFoil: case kInvisBonus: case kStar: case kSparkle: case kHelium: case kLeftFan: case kRightFan: case kTaper: case kCandle: case kStubby: case kBBQ: case kInvisBlower: case kLiftArea: case kFilingCabinet: case kWasteBasket: case kMilkCrate: case kTrunk: case kBooks: case kLightSwitch: case kMachineSwitch: case kThermostat: case kPowerSwitch: case kKnifeSwitch: case kInvisSwitch: case kTrigger: case kLgTrigger: case kSoundTrigger: case kLightBulb: case kTableLamp: case kInvisLight: case kShredder: case kToaster: case kMacPlus: case kGuitar: case kTV: case kCoffee: case kOutlet: case kVCR: case kStereo: case kMicrowave: case kCinderBlock: case kFlowerBox: case kCDs: case kCustomPict: case kBall: case kDrip: case kFish: case kCobweb: case kOzma: case kFlower: case kBear: case kCalendar: case kVase1: case kVase2: case kBulletin: case kCloud: case kFaucet: case kRug: case kChimes: DragMarqueeRect(where, &newRect, false, false); invalAll = false; break; } } deltaH = newRect.left - wasRect.left; deltaV = newRect.top - wasRect.top; if ((deltaH != 0) || (deltaV != 0)) { fileDirty = true; UpdateMenus(false); } if (objActive == kInitialGliderSelected) { wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); (*thisHouse)->initial.h += deltaH; (*thisHouse)->initial.v += deltaV; HSetState((Handle)thisHouse, wasState); } else if (objActive == kLeftGliderSelected) { increment = thisRoom->leftStart + deltaV; if (increment > 255) increment = 255; else if (increment < 0) increment = 0; thisRoom->leftStart = (Byte)increment; QSetRect(&leftStartGliderDest, 0, 0, 48, 16); QOffsetRect(&leftStartGliderDest, 0, kGliderStartsDown + (short)thisRoom->leftStart); } else if (objActive == kRightGliderSelected) { increment = thisRoom->rightStart + deltaV; if (increment > 255) increment = 255; else if (increment < 0) increment = 0; thisRoom->rightStart = (Byte)increment; QSetRect(&rightStartGliderDest, 0, 0, 48, 16); QOffsetRect(&rightStartGliderDest, 0, kGliderStartsDown + (short)thisRoom->rightStart); } else { switch (thisRoom->objects[objActive].what) { case kFloorVent: case kCeilingVent: case kFloorBlower: case kCeilingBlower: case kSewerGrate: case kGrecoVent: case kSewerBlower: thisRoom->objects[objActive].data.a.topLeft.h += deltaH; break; case kLeftFan: case kRightFan: case kTaper: case kCandle: case kStubby: case kTiki: case kBBQ: case kInvisBlower: case kLiftArea: thisRoom->objects[objActive].data.a.topLeft.h += deltaH; thisRoom->objects[objActive].data.a.topLeft.v += deltaV; break; case kTable: case kShelf: case kCabinet: case kFilingCabinet: case kWasteBasket: case kMilkCrate: case kDeckTable: case kStool: case kTrunk: case kInvisObstacle: case kBooks: case kInvisBounce: thisRoom->objects[objActive].data.b.bounds.left += deltaH; thisRoom->objects[objActive].data.b.bounds.right += deltaH; thisRoom->objects[objActive].data.b.bounds.top += deltaV; thisRoom->objects[objActive].data.b.bounds.bottom += deltaV; break; case kCounter: case kDresser: case kManhole: thisRoom->objects[objActive].data.b.bounds.left += deltaH; thisRoom->objects[objActive].data.b.bounds.right += deltaH; break; case kRedClock: case kBlueClock: case kYellowClock: case kCuckoo: case kPaper: case kBattery: case kBands: case kGreaseRt: case kGreaseLf: case kFoil: case kInvisBonus: case kStar: case kSparkle: case kHelium: case kSlider: thisRoom->objects[objActive].data.c.topLeft.h += deltaH; thisRoom->objects[objActive].data.c.topLeft.v += deltaV; break; case kUpStairs: case kDownStairs: case kFloorTrans: case kCeilingTrans: case kDoorInLf: case kDoorInRt: case kDoorExRt: case kDoorExLf: case kWindowInLf: case kWindowInRt: case kWindowExRt: case kWindowExLf: thisRoom->objects[objActive].data.d.topLeft.h += deltaH; break; case kMailboxLf: case kMailboxRt: case kInvisTrans: case kDeluxeTrans: thisRoom->objects[objActive].data.d.topLeft.h += deltaH; thisRoom->objects[objActive].data.d.topLeft.v += deltaV; break; case kLightSwitch: case kMachineSwitch: case kThermostat: case kPowerSwitch: case kKnifeSwitch: case kInvisSwitch: case kTrigger: case kLgTrigger: case kSoundTrigger: thisRoom->objects[objActive].data.e.topLeft.h += deltaH; thisRoom->objects[objActive].data.e.topLeft.v += deltaV; break; case kCeilingLight: case kHipLamp: case kDecoLamp: case kFlourescent: case kTrackLight: thisRoom->objects[objActive].data.f.topLeft.h += deltaH; break; case kLightBulb: case kTableLamp: case kInvisLight: thisRoom->objects[objActive].data.f.topLeft.h += deltaH; thisRoom->objects[objActive].data.f.topLeft.v += deltaV; break; case kShredder: case kToaster: case kMacPlus: case kGuitar: case kTV: case kCoffee: case kOutlet: case kVCR: case kStereo: case kMicrowave: case kCinderBlock: case kFlowerBox: case kCDs: case kCustomPict: thisRoom->objects[objActive].data.g.topLeft.h += deltaH; thisRoom->objects[objActive].data.g.topLeft.v += deltaV; break; case kBalloon: case kCopterLf: case kCopterRt: thisRoom->objects[objActive].data.h.topLeft.h += deltaH; break; case kDartLf: case kDartRt: thisRoom->objects[objActive].data.h.topLeft.v += deltaV; break; case kBall: case kDrip: case kFish: case kCobweb: thisRoom->objects[objActive].data.h.topLeft.h += deltaH; thisRoom->objects[objActive].data.h.topLeft.v += deltaV; break; case kOzma: case kMirror: case kFlower: case kWallWindow: case kBear: case kCalendar: case kVase1: case kVase2: case kBulletin: case kCloud: case kFaucet: case kRug: case kChimes: thisRoom->objects[objActive].data.i.bounds.left += deltaH; thisRoom->objects[objActive].data.i.bounds.right += deltaH; thisRoom->objects[objActive].data.i.bounds.top += deltaV; thisRoom->objects[objActive].data.i.bounds.bottom += deltaV; break; case kMousehole: case kFireplace: thisRoom->objects[objActive].data.i.bounds.left += deltaH; thisRoom->objects[objActive].data.i.bounds.right += deltaH; break; } } if (KeepObjectLegal()) { } GetThisRoomsObjRects(); if (invalAll) InvalWindowRect(mainWindow, &mainWindowRect); else { InvalWindowRect(mainWindow, &wasRect); if (objActive == kInitialGliderSelected) InvalWindowRect(mainWindow, &initialGliderRect); else if (objActive == kLeftGliderSelected) InvalWindowRect(mainWindow, &leftStartGliderDest); else if (objActive == kRightGliderSelected) InvalWindowRect(mainWindow, &rightStartGliderDest); else InvalWindowRect(mainWindow, &roomObjectRects[objActive]); } ReadyBackground(thisRoom->background, thisRoom->tiles); DrawThisRoomsObjects(); } #endif //-------------------------------------------------------------- DoNewObjectClick void DoNewObjectClick (Point where) { #ifndef COMPILEDEMO short whatObject; StopMarquee(); objActive = kNoObjectSelected; whatObject = toolSelected + ((toolMode - 1) * 0x0010); if (AddNewObject(where, whatObject, true)) IgnoreThisClick(); UpdateMenus(false); AddObjectPairing(); #endif } //-------------------------------------------------------------- AddObjectPairing void AddObjectPairing (void) { roomType *testRoomPtr; short roomNum, emptySlot; char wasState; Str255 message; if (thisRoom->objects[objActive].what == kDoorInRt) { roomNum = DoesNeighborRoomExist(kRoomToRight); if (roomNum != -1) { emptySlot = FindObjectSlotInRoom(roomNum); if ((emptySlot != -1) && (!DoesRoomNumHaveObject(roomNum, kDoorExLf))) { wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); testRoomPtr = &((*thisHouse)->rooms[roomNum]); testRoomPtr->objects[emptySlot].what = kDoorExLf; testRoomPtr->objects[emptySlot].data.d.topLeft.h = kDoorExLfLeft; testRoomPtr->objects[emptySlot].data.d.topLeft.v = kDoorExTop; testRoomPtr->objects[emptySlot].data.d.tall = 0; testRoomPtr->objects[emptySlot].data.d.where = -1; testRoomPtr->objects[emptySlot].data.d.who = 255; testRoomPtr->objects[emptySlot].data.d.wide = 0; testRoomPtr->numObjects++; HSetState((Handle)thisHouse, wasState); GetLocalizedString(45, message); OpenMessageWindow(message); ForeColor(blueColor); GetLocalizedString(46, message); SetMessageWindowMessage(message); ForeColor(blackColor); DelayTicks(60); CloseMessageWindow(); } } } else if (thisRoom->objects[objActive].what == kDoorInLf) { roomNum = DoesNeighborRoomExist(kRoomToLeft); if (roomNum != -1) { emptySlot = FindObjectSlotInRoom(roomNum); if ((emptySlot != -1) && (!DoesRoomNumHaveObject(roomNum, kDoorExRt))) { wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); testRoomPtr = &((*thisHouse)->rooms[roomNum]); testRoomPtr->objects[emptySlot].what = kDoorExRt; testRoomPtr->objects[emptySlot].data.d.topLeft.h = kDoorExRtLeft; testRoomPtr->objects[emptySlot].data.d.topLeft.v = kDoorExTop; testRoomPtr->objects[emptySlot].data.d.tall = 0; testRoomPtr->objects[emptySlot].data.d.where = -1; testRoomPtr->objects[emptySlot].data.d.who = 255; testRoomPtr->objects[emptySlot].data.d.wide = 0; testRoomPtr->numObjects++; HSetState((Handle)thisHouse, wasState); GetLocalizedString(45, message); OpenMessageWindow(message); ForeColor(blueColor); GetLocalizedString(46, message); SetMessageWindowMessage(message); ForeColor(blackColor); DelayTicks(60); CloseMessageWindow(); } } } else if (thisRoom->objects[objActive].what == kDoorExRt) { roomNum = DoesNeighborRoomExist(kRoomToRight); if (roomNum != -1) { emptySlot = FindObjectSlotInRoom(roomNum); if ((emptySlot != -1) && (!DoesRoomNumHaveObject(roomNum, kDoorInLfLeft))) { wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); testRoomPtr = &((*thisHouse)->rooms[roomNum]); testRoomPtr->objects[emptySlot].what = kDoorInLf; testRoomPtr->objects[emptySlot].data.d.topLeft.h = kDoorInLfLeft; testRoomPtr->objects[emptySlot].data.d.topLeft.v = kDoorInTop; testRoomPtr->objects[emptySlot].data.d.tall = 0; testRoomPtr->objects[emptySlot].data.d.where = -1; testRoomPtr->objects[emptySlot].data.d.who = 255; testRoomPtr->objects[emptySlot].data.d.wide = 0; testRoomPtr->numObjects++; HSetState((Handle)thisHouse, wasState); GetLocalizedString(45, message); OpenMessageWindow(message); ForeColor(blueColor); GetLocalizedString(47, message); SetMessageWindowMessage(message); ForeColor(blackColor); DelayTicks(60); CloseMessageWindow(); } } } else if (thisRoom->objects[objActive].what == kDoorExLf) { roomNum = DoesNeighborRoomExist(kRoomToLeft); if (roomNum != -1) { emptySlot = FindObjectSlotInRoom(roomNum); if ((emptySlot != -1) && (!DoesRoomNumHaveObject(roomNum, kDoorInRtLeft))) { wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); testRoomPtr = &((*thisHouse)->rooms[roomNum]); testRoomPtr->objects[emptySlot].what = kDoorInRt; testRoomPtr->objects[emptySlot].data.d.topLeft.h = kDoorInRtLeft; testRoomPtr->objects[emptySlot].data.d.topLeft.v = kDoorInTop; testRoomPtr->objects[emptySlot].data.d.tall = 0; testRoomPtr->objects[emptySlot].data.d.where = -1; testRoomPtr->objects[emptySlot].data.d.who = 255; testRoomPtr->objects[emptySlot].data.d.wide = 0; testRoomPtr->numObjects++; HSetState((Handle)thisHouse, wasState); GetLocalizedString(45, message); OpenMessageWindow(message); ForeColor(blueColor); GetLocalizedString(47, message); SetMessageWindowMessage(message); ForeColor(blackColor); DelayTicks(60); CloseMessageWindow(); } } } else if (thisRoom->objects[objActive].what == kWindowInLf) { roomNum = DoesNeighborRoomExist(kRoomToLeft); if (roomNum != -1) { emptySlot = FindObjectSlotInRoom(roomNum); if ((emptySlot != -1) && (!DoesRoomNumHaveObject(roomNum, kWindowExRt))) { wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); testRoomPtr = &((*thisHouse)->rooms[roomNum]); testRoomPtr->objects[emptySlot].what = kWindowExRt; testRoomPtr->objects[emptySlot].data.d.topLeft.h = kWindowExRtLeft; testRoomPtr->objects[emptySlot].data.d.topLeft.v = kWindowExTop; testRoomPtr->objects[emptySlot].data.d.tall = 0; testRoomPtr->objects[emptySlot].data.d.where = -1; testRoomPtr->objects[emptySlot].data.d.who = 255; testRoomPtr->objects[emptySlot].data.d.wide = 0; testRoomPtr->numObjects++; HSetState((Handle)thisHouse, wasState); GetLocalizedString(45, message); OpenMessageWindow(message); ForeColor(blueColor); GetLocalizedString(48, message); SetMessageWindowMessage(message); ForeColor(blackColor); DelayTicks(60); CloseMessageWindow(); } } } else if (thisRoom->objects[objActive].what == kWindowInRt) { roomNum = DoesNeighborRoomExist(kRoomToRight); if (roomNum != -1) { emptySlot = FindObjectSlotInRoom(roomNum); if ((emptySlot != -1) && (!DoesRoomNumHaveObject(roomNum, kWindowExLf))) { wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); testRoomPtr = &((*thisHouse)->rooms[roomNum]); testRoomPtr->objects[emptySlot].what = kWindowExLf; testRoomPtr->objects[emptySlot].data.d.topLeft.h = kWindowExLfLeft; testRoomPtr->objects[emptySlot].data.d.topLeft.v = kWindowExTop; testRoomPtr->objects[emptySlot].data.d.tall = 0; testRoomPtr->objects[emptySlot].data.d.where = -1; testRoomPtr->objects[emptySlot].data.d.who = 255; testRoomPtr->objects[emptySlot].data.d.wide = 0; testRoomPtr->numObjects++; HSetState((Handle)thisHouse, wasState); GetLocalizedString(45, message); OpenMessageWindow(message); ForeColor(blueColor); GetLocalizedString(48, message); SetMessageWindowMessage(message); ForeColor(blackColor); DelayTicks(60); CloseMessageWindow(); } } } else if (thisRoom->objects[objActive].what == kWindowExRt) { roomNum = DoesNeighborRoomExist(kRoomToRight); if (roomNum != -1) { emptySlot = FindObjectSlotInRoom(roomNum); if ((emptySlot != -1) && (!DoesRoomNumHaveObject(roomNum, kWindowInLf))) { wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); testRoomPtr = &((*thisHouse)->rooms[roomNum]); testRoomPtr->objects[emptySlot].what = kWindowInLf; testRoomPtr->objects[emptySlot].data.d.topLeft.h = kWindowInLfLeft; testRoomPtr->objects[emptySlot].data.d.topLeft.v = kWindowInTop; testRoomPtr->objects[emptySlot].data.d.tall = 0; testRoomPtr->objects[emptySlot].data.d.where = -1; testRoomPtr->objects[emptySlot].data.d.who = 255; testRoomPtr->objects[emptySlot].data.d.wide = 0; testRoomPtr->numObjects++; HSetState((Handle)thisHouse, wasState); GetLocalizedString(45, message); OpenMessageWindow(message); ForeColor(blueColor); GetLocalizedString(49, message); SetMessageWindowMessage(message); ForeColor(blackColor); DelayTicks(60); CloseMessageWindow(); } } } else if (thisRoom->objects[objActive].what == kWindowExLf) { roomNum = DoesNeighborRoomExist(kRoomToLeft); if (roomNum != -1) { emptySlot = FindObjectSlotInRoom(roomNum); if ((emptySlot != -1) && (!DoesRoomNumHaveObject(roomNum, kWindowInRt))) { wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); testRoomPtr = &((*thisHouse)->rooms[roomNum]); testRoomPtr->objects[emptySlot].what = kWindowInRt; testRoomPtr->objects[emptySlot].data.d.topLeft.h = kWindowInRtLeft; testRoomPtr->objects[emptySlot].data.d.topLeft.v = kWindowInTop; testRoomPtr->objects[emptySlot].data.d.tall = 0; testRoomPtr->objects[emptySlot].data.d.where = -1; testRoomPtr->objects[emptySlot].data.d.who = 255; testRoomPtr->objects[emptySlot].data.d.wide = 0; testRoomPtr->numObjects++; HSetState((Handle)thisHouse, wasState); GetLocalizedString(45, message); OpenMessageWindow(message); ForeColor(blueColor); GetLocalizedString(49, message); SetMessageWindowMessage(message); ForeColor(blackColor); DelayTicks(60); CloseMessageWindow(); } } } else if (thisRoom->objects[objActive].what == kUpStairs) { roomNum = DoesNeighborRoomExist(kRoomAbove); if (roomNum != -1) { emptySlot = FindObjectSlotInRoom(roomNum); if ((emptySlot != -1) && (!DoesRoomNumHaveObject(roomNum, kDownStairs))) { wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); testRoomPtr = &((*thisHouse)->rooms[roomNum]); testRoomPtr->objects[emptySlot].what = kDownStairs; testRoomPtr->objects[emptySlot].data.d.topLeft.h = thisRoom->objects[objActive].data.d.topLeft.h; testRoomPtr->objects[emptySlot].data.d.topLeft.v = kStairsTop; testRoomPtr->objects[emptySlot].data.d.tall = 0; testRoomPtr->objects[emptySlot].data.d.where = -1; testRoomPtr->objects[emptySlot].data.d.who = 255; testRoomPtr->objects[emptySlot].data.d.wide = 0; testRoomPtr->numObjects++; HSetState((Handle)thisHouse, wasState); GetLocalizedString(45, message); OpenMessageWindow(message); ForeColor(blueColor); GetLocalizedString(50, message); SetMessageWindowMessage(message); ForeColor(blackColor); DelayTicks(60); CloseMessageWindow(); } } } else if (thisRoom->objects[objActive].what == kDownStairs) { roomNum = DoesNeighborRoomExist(kRoomBelow); if (roomNum != -1) { emptySlot = FindObjectSlotInRoom(roomNum); if ((emptySlot != -1) && (!DoesRoomNumHaveObject(roomNum, kUpStairs))) { wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); testRoomPtr = &((*thisHouse)->rooms[roomNum]); testRoomPtr->objects[emptySlot].what = kUpStairs; testRoomPtr->objects[emptySlot].data.d.topLeft.h = thisRoom->objects[objActive].data.d.topLeft.h; testRoomPtr->objects[emptySlot].data.d.topLeft.v = kStairsTop; testRoomPtr->objects[emptySlot].data.d.tall = 0; testRoomPtr->objects[emptySlot].data.d.where = -1; testRoomPtr->objects[emptySlot].data.d.who = 255; testRoomPtr->objects[emptySlot].data.d.wide = 0; testRoomPtr->numObjects++; HSetState((Handle)thisHouse, wasState); GetLocalizedString(45, message); OpenMessageWindow(message); ForeColor(blueColor); GetLocalizedString(51, message); SetMessageWindowMessage(message); ForeColor(blackColor); DelayTicks(60); CloseMessageWindow(); } } } } //-------------------------------------------------------------- DeleteObject void DeleteObject (void) { #ifndef COMPILEDEMO short i; if ((theMode != kEditMode) || (objActive == kNoObjectSelected)) return; if ((objActive == kInitialGliderSelected) || (objActive == kLeftGliderSelected) || (objActive == kRightGliderSelected)) { SysBeep(1); return; } for (i = 0; i < kMaxRoomObs; i++) { if ((retroLinkList[i].room == thisRoomNumber) && (retroLinkList[i].object == objActive)) retroLinkList[i].room = -1; } thisRoom->objects[objActive].what = kObjectIsEmpty; thisRoom->numObjects--; fileDirty = true; UpdateMenus(false); InvalWindowRect(mainWindow, &mainWindowRect); QSetRect(&roomObjectRects[objActive], -1, -1, 0, 0); DeselectObject(); ReadyBackground(thisRoom->background, thisRoom->tiles); DrawThisRoomsObjects(); #endif } //-------------------------------------------------------------- DuplicateObject void DuplicateObject (void) { objectType tempObject; Point placePt; short direction, dist; Boolean handled; tempObject = thisRoom->objects[objActive]; placePt.h = roomObjectRects[objActive].left + HalfRectWide(&roomObjectRects[objActive]) + 64; placePt.v = roomObjectRects[objActive].top + HalfRectTall(&roomObjectRects[objActive]); StopMarquee(); if (AddNewObject(placePt, tempObject.what, false)) { switch (tempObject.what) { case kFloorVent: case kCeilingVent: case kFloorBlower: case kCeilingBlower: case kSewerGrate: case kLeftFan: case kRightFan: case kTaper: case kCandle: case kStubby: case kTiki: case kBBQ: case kInvisBlower: case kGrecoVent: case kSewerBlower: thisRoom->objects[objActive].data.a.distance = tempObject.data.a.distance; thisRoom->objects[objActive].data.a.initial = tempObject.data.a.initial; thisRoom->objects[objActive].data.a.state = tempObject.data.a.state; thisRoom->objects[objActive].data.a.vector = tempObject.data.a.vector; thisRoom->objects[objActive].data.a.tall = tempObject.data.a.tall; break; case kLiftArea: thisRoom->objects[objActive].data.a.topLeft.h = tempObject.data.a.topLeft.h + 64; thisRoom->objects[objActive].data.a.topLeft.v = tempObject.data.a.topLeft.v; thisRoom->objects[objActive].data.a.distance = tempObject.data.a.distance; thisRoom->objects[objActive].data.a.initial = tempObject.data.a.initial; thisRoom->objects[objActive].data.a.state = tempObject.data.a.state; thisRoom->objects[objActive].data.a.vector = tempObject.data.a.vector; thisRoom->objects[objActive].data.a.tall = tempObject.data.a.tall; break; case kFilingCabinet: case kWasteBasket: case kMilkCrate: case kStool: case kTrunk: case kManhole: case kBooks: thisRoom->objects[objActive].data.b.pict = tempObject.data.b.pict; break; case kTable: case kShelf: case kCabinet: case kCounter: case kDresser: case kDeckTable: case kInvisObstacle: case kInvisBounce: thisRoom->objects[objActive].data.b.bounds = tempObject.data.b.bounds; QOffsetRect(&thisRoom->objects[objActive].data.b.bounds, 64, 0); thisRoom->objects[objActive].data.b.pict = tempObject.data.b.pict; break; case kRedClock: case kBlueClock: case kYellowClock: case kCuckoo: case kPaper: case kBattery: case kBands: case kGreaseRt: case kGreaseLf: case kFoil: case kInvisBonus: case kStar: case kSparkle: case kHelium: thisRoom->objects[objActive].data.c.length = tempObject.data.c.length; thisRoom->objects[objActive].data.c.points = tempObject.data.c.points; thisRoom->objects[objActive].data.c.state = tempObject.data.c.state; thisRoom->objects[objActive].data.c.initial = tempObject.data.c.initial; break; case kSlider: thisRoom->objects[objActive].data.c.topLeft.h = tempObject.data.c.topLeft.h + 64; thisRoom->objects[objActive].data.c.length = tempObject.data.c.length; thisRoom->objects[objActive].data.c.points = tempObject.data.c.points; thisRoom->objects[objActive].data.c.state = tempObject.data.c.state; thisRoom->objects[objActive].data.c.initial = tempObject.data.c.initial; break; case kUpStairs: case kDownStairs: case kMailboxLf: case kMailboxRt: case kFloorTrans: case kCeilingTrans: case kDoorInLf: case kDoorInRt: case kDoorExRt: case kDoorExLf: case kWindowInLf: case kWindowInRt: case kWindowExRt: case kWindowExLf: thisRoom->objects[objActive].data.d.tall = tempObject.data.d.tall; thisRoom->objects[objActive].data.d.where = tempObject.data.d.where; thisRoom->objects[objActive].data.d.who = tempObject.data.d.who; thisRoom->objects[objActive].data.d.wide = tempObject.data.d.wide; break; case kInvisTrans: case kDeluxeTrans: thisRoom->objects[objActive].data.d.topLeft.h = tempObject.data.d.topLeft.h + 64; thisRoom->objects[objActive].data.d.topLeft.v = tempObject.data.d.topLeft.v; thisRoom->objects[objActive].data.d.tall = tempObject.data.d.tall; thisRoom->objects[objActive].data.d.where = tempObject.data.d.where; thisRoom->objects[objActive].data.d.who = tempObject.data.d.who; thisRoom->objects[objActive].data.d.wide = tempObject.data.d.wide; break; case kLightSwitch: case kMachineSwitch: case kThermostat: case kPowerSwitch: case kKnifeSwitch: case kInvisSwitch: case kTrigger: case kLgTrigger: case kSoundTrigger: thisRoom->objects[objActive].data.e.delay = tempObject.data.e.delay; thisRoom->objects[objActive].data.e.where = tempObject.data.e.where; thisRoom->objects[objActive].data.e.who = tempObject.data.e.who; thisRoom->objects[objActive].data.e.type = tempObject.data.e.type; break; case kCeilingLight: case kLightBulb: case kTableLamp: case kHipLamp: case kDecoLamp: case kFlourescent: case kTrackLight: case kInvisLight: thisRoom->objects[objActive].data.f.length = tempObject.data.f.length; thisRoom->objects[objActive].data.f.byte0 = tempObject.data.f.byte0; thisRoom->objects[objActive].data.f.byte1 = tempObject.data.f.byte1; thisRoom->objects[objActive].data.f.initial = tempObject.data.f.initial; thisRoom->objects[objActive].data.f.state = tempObject.data.f.state; break; case kShredder: case kToaster: case kMacPlus: case kGuitar: case kTV: case kCoffee: case kOutlet: case kVCR: case kStereo: case kMicrowave: case kCinderBlock: case kFlowerBox: case kCDs: thisRoom->objects[objActive].data.g.height = tempObject.data.g.height; thisRoom->objects[objActive].data.g.byte0 = tempObject.data.g.byte0; thisRoom->objects[objActive].data.g.delay = tempObject.data.g.delay; thisRoom->objects[objActive].data.g.initial = tempObject.data.g.initial; thisRoom->objects[objActive].data.g.state = tempObject.data.g.state; break; case kCustomPict: thisRoom->objects[objActive].data.g.topLeft.h = tempObject.data.g.topLeft.h + 64; thisRoom->objects[objActive].data.g.topLeft.v = tempObject.data.g.topLeft.v; thisRoom->objects[objActive].data.g.height = tempObject.data.g.height; thisRoom->objects[objActive].data.g.byte0 = tempObject.data.g.byte0; thisRoom->objects[objActive].data.g.delay = tempObject.data.g.delay; thisRoom->objects[objActive].data.g.initial = tempObject.data.g.initial; thisRoom->objects[objActive].data.g.state = tempObject.data.g.state; break; case kBalloon: case kCopterLf: case kCopterRt: case kDartLf: case kDartRt: case kBall: case kDrip: case kFish: case kCobweb: thisRoom->objects[objActive].data.h.length = tempObject.data.h.length; thisRoom->objects[objActive].data.h.delay = tempObject.data.h.delay; thisRoom->objects[objActive].data.h.byte0 = tempObject.data.h.byte0; thisRoom->objects[objActive].data.h.initial = tempObject.data.h.initial; thisRoom->objects[objActive].data.h.state = tempObject.data.h.state; break; case kOzma: case kMousehole: case kFireplace: case kBear: case kCalendar: case kVase1: case kVase2: case kBulletin: case kCloud: case kFaucet: case kRug: case kChimes: thisRoom->objects[objActive].data.i.pict = tempObject.data.i.pict; break; case kMirror: case kFlower: case kWallWindow: thisRoom->objects[objActive].data.i.bounds = tempObject.data.i.bounds; QOffsetRect(&thisRoom->objects[objActive].data.i.bounds, 64, 0); thisRoom->objects[objActive].data.i.pict = tempObject.data.i.pict; break; } if (KeepObjectLegal()) { } handled = ObjectHasHandle(&direction, &dist); ReadyBackground(thisRoom->background, thisRoom->tiles); GetThisRoomsObjRects(); DrawThisRoomsObjects(); InvalWindowRect(mainWindow, &mainWindowRect); if (handled) { StartMarqueeHandled(&roomObjectRects[objActive], direction, dist); HandleBlowerGlider(); } else StartMarquee(&roomObjectRects[objActive]); } } //-------------------------------------------------------------- MoveObject void MoveObject (short whichWay, Boolean shiftDown) { #ifndef COMPILEDEMO Rect wasRect; short deltaH, deltaV, increment; short dist, direction; char wasState; if (theMode != kEditMode) return; StopMarquee(); if (shiftDown) increment = 10; else { if (objActive == kInitialGliderSelected) { increment = 1; } else { if ((whichWay == kBumpRight) || (whichWay == kBumpLeft)) { switch (thisRoom->objects[objActive].what) { case kTaper: case kCandle: case kStubby: case kTiki: case kBBQ: case kRedClock: case kBlueClock: case kYellowClock: case kCuckoo: case kPaper: case kBattery: case kBands: case kGreaseRt: case kGreaseLf: case kFoil: case kInvisBonus: case kStar: case kSparkle: case kHelium: case kSlider: case kLightSwitch: case kMachineSwitch: case kThermostat: case kPowerSwitch: case kKnifeSwitch: case kInvisSwitch: case kTrigger: case kLgTrigger: case kSoundTrigger: case kToaster: case kMacPlus: case kTV: case kCoffee: case kOutlet: case kVCR: case kStereo: case kMicrowave: case kBalloon: case kCopterLf: case kCopterRt: case kBall: case kDrip: case kFish: case kMirror: increment = 2; break; case kManhole: increment = 64; break; default: increment = 1; break; } } else increment = 1; } } switch (whichWay) { case kBumpUp: deltaH = 0; deltaV = -increment; break; case kBumpDown: deltaH = 0; deltaV = increment; break; case kBumpRight: deltaH = increment; deltaV = 0; break; case kBumpLeft: deltaH = -increment; deltaV = 0; break; } if (objActive == kInitialGliderSelected) { wasRect = initialGliderRect; wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); (*thisHouse)->initial.h += deltaH; (*thisHouse)->initial.v += deltaV; HSetState((Handle)thisHouse, wasState); } else if (objActive == kLeftGliderSelected) { wasRect = leftStartGliderDest; increment = thisRoom->leftStart + deltaV; if (increment > 255) increment = 255; else if (increment < 0) increment = 0; thisRoom->leftStart = (Byte)increment; QSetRect(&leftStartGliderDest, 0, 0, 48, 16); QOffsetRect(&leftStartGliderDest, 0, kGliderStartsDown + (short)thisRoom->leftStart); } else if (objActive == kRightGliderSelected) { wasRect = rightStartGliderDest; increment = thisRoom->rightStart + deltaV; if (increment > 255) increment = 255; else if (increment < 0) increment = 0; thisRoom->rightStart = (Byte)increment; QSetRect(&rightStartGliderDest, 0, 0, 48, 16); QOffsetRect(&rightStartGliderDest, kRoomWide - 48, kGliderStartsDown + (short)thisRoom->rightStart); } else { wasRect = roomObjectRects[objActive]; switch (thisRoom->objects[objActive].what) { case kFloorVent: case kCeilingVent: case kFloorBlower: case kCeilingBlower: case kSewerGrate: case kGrecoVent: case kSewerBlower: thisRoom->objects[objActive].data.a.topLeft.h += deltaH; break; case kLeftFan: case kRightFan: case kTaper: case kCandle: case kStubby: case kTiki: case kBBQ: case kInvisBlower: case kLiftArea: thisRoom->objects[objActive].data.a.topLeft.h += deltaH; thisRoom->objects[objActive].data.a.topLeft.v += deltaV; break; case kTable: case kShelf: case kCabinet: case kFilingCabinet: case kWasteBasket: case kMilkCrate: case kDeckTable: case kStool: case kTrunk: case kInvisObstacle: case kBooks: case kInvisBounce: thisRoom->objects[objActive].data.b.bounds.left += deltaH; thisRoom->objects[objActive].data.b.bounds.right += deltaH; thisRoom->objects[objActive].data.b.bounds.top += deltaV; thisRoom->objects[objActive].data.b.bounds.bottom += deltaV; break; case kCounter: case kDresser: case kManhole: thisRoom->objects[objActive].data.b.bounds.left += deltaH; thisRoom->objects[objActive].data.b.bounds.right += deltaH; break; case kRedClock: case kBlueClock: case kYellowClock: case kCuckoo: case kPaper: case kBattery: case kBands: case kGreaseRt: case kGreaseLf: case kFoil: case kInvisBonus: case kStar: case kSparkle: case kHelium: case kSlider: thisRoom->objects[objActive].data.c.topLeft.h += deltaH; thisRoom->objects[objActive].data.c.topLeft.v += deltaV; break; case kUpStairs: case kDownStairs: case kFloorTrans: case kCeilingTrans: thisRoom->objects[objActive].data.d.topLeft.h += deltaH; break; case kMailboxLf: case kMailboxRt: case kInvisTrans: case kDeluxeTrans: thisRoom->objects[objActive].data.d.topLeft.h += deltaH; thisRoom->objects[objActive].data.d.topLeft.v += deltaV; break; case kLightSwitch: case kMachineSwitch: case kThermostat: case kPowerSwitch: case kKnifeSwitch: case kInvisSwitch: case kTrigger: case kLgTrigger: case kSoundTrigger: thisRoom->objects[objActive].data.e.topLeft.h += deltaH; thisRoom->objects[objActive].data.e.topLeft.v += deltaV; break; case kCeilingLight: case kHipLamp: case kDecoLamp: case kFlourescent: case kTrackLight: thisRoom->objects[objActive].data.f.topLeft.h += deltaH; break; case kLightBulb: case kTableLamp: case kInvisLight: thisRoom->objects[objActive].data.f.topLeft.h += deltaH; thisRoom->objects[objActive].data.f.topLeft.v += deltaV; break; case kShredder: case kToaster: case kMacPlus: case kGuitar: case kTV: case kCoffee: case kOutlet: case kVCR: case kStereo: case kMicrowave: case kCinderBlock: case kFlowerBox: case kCDs: case kCustomPict: thisRoom->objects[objActive].data.g.topLeft.h += deltaH; thisRoom->objects[objActive].data.g.topLeft.v += deltaV; break; case kBalloon: case kCopterLf: case kCopterRt: thisRoom->objects[objActive].data.h.topLeft.h += deltaH; break; case kDartLf: case kDartRt: thisRoom->objects[objActive].data.h.topLeft.v += deltaV; break; case kBall: case kDrip: case kFish: case kCobweb: thisRoom->objects[objActive].data.h.topLeft.h += deltaH; thisRoom->objects[objActive].data.h.topLeft.v += deltaV; break; case kOzma: case kMirror: case kFlower: case kWallWindow: case kBear: case kCalendar: case kVase1: case kVase2: case kBulletin: case kCloud: case kFaucet: case kRug: case kChimes: thisRoom->objects[objActive].data.i.bounds.left += deltaH; thisRoom->objects[objActive].data.i.bounds.right += deltaH; thisRoom->objects[objActive].data.i.bounds.top += deltaV; thisRoom->objects[objActive].data.i.bounds.bottom += deltaV; break; case kMousehole: case kFireplace: thisRoom->objects[objActive].data.i.bounds.left += deltaH; thisRoom->objects[objActive].data.i.bounds.right += deltaH; break; } } if (KeepObjectLegal()) { } fileDirty = true; UpdateMenus(false); GetThisRoomsObjRects(); if (objActive == kInitialGliderSelected) { InvalWindowRect(mainWindow, &wasRect); InvalWindowRect(mainWindow, &initialGliderRect); } else if (objActive == kLeftGliderSelected) { InvalWindowRect(mainWindow, &wasRect); InvalWindowRect(mainWindow, &leftStartGliderDest); } else if (objActive == kRightGliderSelected) { InvalWindowRect(mainWindow, &wasRect); InvalWindowRect(mainWindow, &rightStartGliderDest); } else { switch (thisRoom->objects[objActive].what) { case kTiki: case kTable: case kShelf: case kCabinet: case kDeckTable: case kStool: case kCounter: case kDresser: case kGreaseRt: case kGreaseLf: case kSlider: case kMailboxLf: case kMailboxRt: case kTrackLight: case kMirror: case kWallWindow: InvalWindowRect(mainWindow, &mainWindowRect); break; default: InvalWindowRect(mainWindow, &wasRect); InvalWindowRect(mainWindow, &roomObjectRects[objActive]); break; } } ReadyBackground(thisRoom->background, thisRoom->tiles); DrawThisRoomsObjects(); if (ObjectHasHandle(&direction, &dist)) { StartMarqueeHandled(&roomObjectRects[objActive], direction, dist); HandleBlowerGlider(); } else { if (objActive == kInitialGliderSelected) StartMarquee(&initialGliderRect); else if (objActive == kLeftGliderSelected) StartMarquee(&leftStartGliderDest); else if (objActive == kRightGliderSelected) StartMarquee(&rightStartGliderDest); else StartMarquee(&roomObjectRects[objActive]); } #endif } //-------------------------------------------------------------- DeselectObject void DeselectObject (void) { #ifndef COMPILEDEMO if ((theMode != kEditMode) || (objActive == kNoObjectSelected)) return; objActive = kNoObjectSelected; StopMarquee(); UpdateMenus(false); #endif } //-------------------------------------------------------------- ObjectHasHandle #ifndef COMPILEDEMO Boolean ObjectHasHandle (short *direction, short *dist) { if ((objActive == kInitialGliderSelected) || (objActive == kNoObjectSelected)) return (false); switch (thisRoom->objects[objActive].what) { case kFloorVent: case kFloorBlower: case kSewerGrate: case kTaper: case kCandle: case kStubby: case kTiki: case kBBQ: case kGrecoVent: case kSewerBlower: *direction = kAbove; *dist = thisRoom->objects[objActive].data.a.distance; return (true); break; case kCeilingVent: case kCeilingBlower: *direction = kBelow; *dist = thisRoom->objects[objActive].data.a.distance; return (true); break; case kLeftFan: *direction = kToLeft; *dist = thisRoom->objects[objActive].data.a.distance; return (true); break; case kRightFan: *direction = kToRight; *dist = thisRoom->objects[objActive].data.a.distance; return (true); break; case kInvisBlower: switch (thisRoom->objects[objActive].data.a.vector & 0x0F) { case 1: // up *direction = kAbove; break; case 2: // right *direction = kToRight; break; case 4: // down *direction = kBelow; break; case 8: // left *direction = kToLeft; break; } *dist = thisRoom->objects[objActive].data.a.distance; return (true); break; case kTable: case kShelf: case kDeckTable: *direction = kToRight; *dist = 0; return (true); break; case kLiftArea: case kCabinet: case kInvisObstacle: case kInvisBounce: case kMirror: case kWallWindow: *direction = kBottomCorner; *dist = 0; return (true); break; case kCounter: case kDresser: *direction = kTopCorner; *dist = 0; return (true); break; case kGreaseRt: *direction = kToRight; *dist = thisRoom->objects[objActive].data.c.length; return (true); break; case kGreaseLf: *direction = kToLeft; *dist = thisRoom->objects[objActive].data.c.length; return (true); break; case kSlider: *direction = kToRight; *dist = 0; return (true); break; case kInvisTrans: case kDeluxeTrans: *direction = kBottomCorner; *dist = 0; return (true); break; case kFlourescent: case kTrackLight: *direction = kToRight; *dist = 0; return (true); break; case kToaster: *direction = kAbove; *dist = thisRoom->objects[objActive].data.g.height; return (true); break; case kBall: case kFish: *direction = kAbove; *dist = thisRoom->objects[objActive].data.h.length; return (true); break; case kDrip: *direction = kBelow; *dist = thisRoom->objects[objActive].data.h.length; return (true); break; default: return (false); break; } } #endif //-------------------------------------------------------------- ObjectIsUpBlower Boolean ObjectIsUpBlower (objectType *who) { if ((who->what == kFloorVent) || (who->what == kFloorBlower) || (who->what == kSewerGrate) || (who->what == kTaper) || (who->what == kCandle) || (who->what == kStubby) || (who->what == kTiki) || (who->what == kBBQ) || (who->what == kGrecoVent) || (who->what == kSewerBlower)) return (true); else if ((who->what == kInvisBlower) || (who->what == kLiftArea)) { if ((who->data.a.vector & 0x01) == 0x01) return (true); else return (false); } else return (false); } //-------------------------------------------------------------- HandleBlowerGlider void HandleBlowerGlider (void) { #ifndef COMPILEDEMO short direction, dist; if (ObjectIsUpBlower(&thisRoom->objects[objActive])) { if (ObjectHasHandle(&direction, &dist)) { SetMarqueeGliderRect(((roomObjectRects[objActive].right + roomObjectRects[objActive].left) / 2), roomObjectRects[objActive].top - dist); } } #endif } //-------------------------------------------------------------- SelectNextObject void SelectNextObject (void) { #ifndef COMPILEDEMO short direction, dist; Boolean noneFound; if ((theMode != kEditMode) || (thisRoom->numObjects <= 0)) return; noneFound = true; while (noneFound) { objActive++; if (objActive >= kMaxRoomObs) objActive = 0; if (thisRoom->objects[objActive].what != kObjectIsEmpty) noneFound = false; } UpdateMenus(false); if (ObjectHasHandle(&direction, &dist)) { StartMarqueeHandled(&roomObjectRects[objActive], direction, dist); HandleBlowerGlider(); } else StartMarquee(&roomObjectRects[objActive]); #endif } //-------------------------------------------------------------- SelectPrevObject void SelectPrevObject (void) { #ifndef COMPILEDEMO short direction, dist; Boolean noneFound; if ((theMode != kEditMode) || (thisRoom->numObjects <= 0)) return; noneFound = true; while (noneFound) { objActive--; if (objActive < 0) objActive = kMaxRoomObs - 1; if (thisRoom->objects[objActive].what != kObjectIsEmpty) noneFound = false; } UpdateMenus(false); if (ObjectHasHandle(&direction, &dist)) { StartMarqueeHandled(&roomObjectRects[objActive], direction, dist); HandleBlowerGlider(); } else StartMarquee(&roomObjectRects[objActive]); #endif } //-------------------------------------------------------------- GetThisRoomsObjRects #ifndef COMPILEDEMO void GetThisRoomsObjRects (void) { PicHandle thePict; short i, wide, tall; isFirstRoom = (GetFirstRoomNumber() == thisRoomNumber); if ((isFirstRoom) && (!noRoomAtAll) && (houseUnlocked)) WhereDoesGliderBegin(&initialGliderRect, kNewGameMode); else QSetRect(&initialGliderRect, 0, 0, 0, 0); QSetRect(&leftStartGliderDest, 0, 0, 48, 16); QOffsetRect(&leftStartGliderDest, 0, kGliderStartsDown + (short)thisRoom->leftStart); QSetRect(&rightStartGliderDest, 0, 0, 48, 16); QOffsetRect(&rightStartGliderDest, kRoomWide - 48, kGliderStartsDown + (short)thisRoom->rightStart); if ((noRoomAtAll) || (!houseUnlocked)) { return; } else { for (i = 0; i < kMaxRoomObs; i++) { switch (thisRoom->objects[i].what) { case kObjectIsEmpty: QSetRect(&roomObjectRects[i], -2, -2, -1, -1); break; case kFloorVent: case kCeilingVent: case kFloorBlower: case kCeilingBlower: case kSewerGrate: case kLeftFan: case kRightFan: case kTaper: case kCandle: case kStubby: case kTiki: case kBBQ: case kInvisBlower: case kGrecoVent: case kSewerBlower: roomObjectRects[i] = srcRects[thisRoom->objects[i].what]; ZeroRectCorner(&roomObjectRects[i]); QOffsetRect(&roomObjectRects[i], thisRoom->objects[i].data.a.topLeft.h, thisRoom->objects[i].data.a.topLeft.v); break; case kLiftArea: QSetRect(&roomObjectRects[i], 0, 0, thisRoom->objects[i].data.a.distance, thisRoom->objects[i].data.a.tall * 2); QOffsetRect(&roomObjectRects[i], thisRoom->objects[i].data.a.topLeft.h, thisRoom->objects[i].data.a.topLeft.v); break; case kTable: case kShelf: case kCabinet: case kFilingCabinet: case kWasteBasket: case kMilkCrate: case kCounter: case kDresser: case kDeckTable: case kStool: case kTrunk: case kInvisObstacle: case kManhole: case kBooks: case kInvisBounce: roomObjectRects[i] = thisRoom->objects[i].data.b.bounds; break; case kRedClock: case kBlueClock: case kYellowClock: case kCuckoo: case kPaper: case kBattery: case kBands: case kFoil: case kInvisBonus: case kStar: case kSparkle: case kHelium: roomObjectRects[i] = srcRects[thisRoom->objects[i].what]; ZeroRectCorner(&roomObjectRects[i]); QOffsetRect(&roomObjectRects[i], thisRoom->objects[i].data.c.topLeft.h, thisRoom->objects[i].data.c.topLeft.v); break; case kGreaseRt: roomObjectRects[i] = srcRects[thisRoom->objects[i].what]; ZeroRectCorner(&roomObjectRects[i]); QOffsetRect(&roomObjectRects[i], thisRoom->objects[i].data.c.topLeft.h, thisRoom->objects[i].data.c.topLeft.v); if (!thisRoom->objects[i].data.c.initial) QOffsetRect(&roomObjectRects[i], 8, 0); break; case kGreaseLf: roomObjectRects[i] = srcRects[thisRoom->objects[i].what]; ZeroRectCorner(&roomObjectRects[i]); QOffsetRect(&roomObjectRects[i], thisRoom->objects[i].data.c.topLeft.h, thisRoom->objects[i].data.c.topLeft.v); if (!thisRoom->objects[i].data.c.initial) QOffsetRect(&roomObjectRects[i], -8, 0); break; case kSlider: roomObjectRects[i] = srcRects[thisRoom->objects[i].what]; ZeroRectCorner(&roomObjectRects[i]); QOffsetRect(&roomObjectRects[i], thisRoom->objects[i].data.c.topLeft.h, thisRoom->objects[i].data.c.topLeft.v); roomObjectRects[i].right = roomObjectRects[i].left + thisRoom->objects[i].data.c.length; break; case kUpStairs: case kDownStairs: case kMailboxLf: case kMailboxRt: case kFloorTrans: case kCeilingTrans: case kDoorInLf: case kDoorInRt: case kDoorExRt: case kDoorExLf: case kWindowInLf: case kWindowInRt: case kWindowExRt: case kWindowExLf: roomObjectRects[i] = srcRects[thisRoom->objects[i].what]; ZeroRectCorner(&roomObjectRects[i]); QOffsetRect(&roomObjectRects[i], thisRoom->objects[i].data.d.topLeft.h, thisRoom->objects[i].data.d.topLeft.v); break; case kInvisTrans: roomObjectRects[i] = srcRects[thisRoom->objects[i].what]; ZeroRectCorner(&roomObjectRects[i]); QOffsetRect(&roomObjectRects[i], thisRoom->objects[i].data.d.topLeft.h, thisRoom->objects[i].data.d.topLeft.v); roomObjectRects[i].bottom = roomObjectRects[i].top + thisRoom->objects[i].data.d.tall; roomObjectRects[i].right += (short)thisRoom->objects[i].data.d.wide; break; case kDeluxeTrans: // Uses a kludge to get width & height (x4) wide = (thisRoom->objects[i].data.d.tall & 0xFF00) >> 8; tall = thisRoom->objects[i].data.d.tall & 0x00FF; QSetRect(&roomObjectRects[i], 0, 0, wide * 4, tall * 4); QOffsetRect(&roomObjectRects[i], thisRoom->objects[i].data.d.topLeft.h, thisRoom->objects[i].data.d.topLeft.v); break; case kLightSwitch: case kMachineSwitch: case kThermostat: case kPowerSwitch: case kKnifeSwitch: case kInvisSwitch: case kTrigger: case kLgTrigger: case kSoundTrigger: roomObjectRects[i] = srcRects[thisRoom->objects[i].what]; ZeroRectCorner(&roomObjectRects[i]); QOffsetRect(&roomObjectRects[i], thisRoom->objects[i].data.e.topLeft.h, thisRoom->objects[i].data.e.topLeft.v); break; case kCeilingLight: case kLightBulb: case kTableLamp: case kHipLamp: case kDecoLamp: case kInvisLight: roomObjectRects[i] = srcRects[thisRoom->objects[i].what]; ZeroRectCorner(&roomObjectRects[i]); QOffsetRect(&roomObjectRects[i], thisRoom->objects[i].data.f.topLeft.h, thisRoom->objects[i].data.f.topLeft.v); break; case kFlourescent: case kTrackLight: roomObjectRects[i] = srcRects[thisRoom->objects[i].what]; ZeroRectCorner(&roomObjectRects[i]); roomObjectRects[i].right = thisRoom->objects[i].data.f.length; QOffsetRect(&roomObjectRects[i], thisRoom->objects[i].data.f.topLeft.h, thisRoom->objects[i].data.f.topLeft.v); break; case kShredder: case kToaster: case kMacPlus: case kGuitar: case kTV: case kCoffee: case kOutlet: case kVCR: case kStereo: case kMicrowave: case kCinderBlock: case kFlowerBox: case kCDs: roomObjectRects[i] = srcRects[thisRoom->objects[i].what]; ZeroRectCorner(&roomObjectRects[i]); QOffsetRect(&roomObjectRects[i], thisRoom->objects[i].data.g.topLeft.h, thisRoom->objects[i].data.g.topLeft.v); break; case kCustomPict: thePict = GetPicture(thisRoom->objects[i].data.g.height); if (thePict == nil) { thisRoom->objects[i].data.g.height = 10000; roomObjectRects[i] = srcRects[thisRoom->objects[i].what]; } else { HLock((Handle)thePict); roomObjectRects[i] = (*thePict)->picFrame; HUnlock((Handle)thePict); } ZeroRectCorner(&roomObjectRects[i]); QOffsetRect(&roomObjectRects[i], thisRoom->objects[i].data.g.topLeft.h, thisRoom->objects[i].data.g.topLeft.v); break; case kBalloon: case kCopterLf: case kCopterRt: case kDartLf: case kDartRt: case kBall: case kDrip: case kFish: case kCobweb: roomObjectRects[i] = srcRects[thisRoom->objects[i].what]; ZeroRectCorner(&roomObjectRects[i]); QOffsetRect(&roomObjectRects[i], thisRoom->objects[i].data.h.topLeft.h, thisRoom->objects[i].data.h.topLeft.v); break; case kOzma: case kMirror: case kMousehole: case kFireplace: case kFlower: case kWallWindow: case kBear: case kCalendar: case kVase1: case kVase2: case kBulletin: case kCloud: case kFaucet: case kRug: case kChimes: roomObjectRects[i] = thisRoom->objects[i].data.i.bounds; break; default: QSetRect(&roomObjectRects[i], -2, -2, -1, -1); break; } } } } #endif //-------------------------------------------------------------- DrawThisRoomsObjects #ifndef COMPILEDEMO void DrawThisRoomsObjects (void) { Rect tempRect; short i; CGrafPtr wasCPort; GDHandle wasWorld; Pattern dummyPattern; GetGWorld(&wasCPort, &wasWorld); SetGWorld(backSrcMap, nil); if ((noRoomAtAll) || (!houseUnlocked)) return; else { if (GetNumberOfLights(thisRoomNumber) <= 0) { PenMode(srcOr); PenPat(GetQDGlobalsGray(&dummyPattern)); PaintRect(&backSrcRect); PenNormal(); } for (i = 0; i < kMaxRoomObs; i++) { switch (thisRoom->objects[i].what) { case kObjectIsEmpty: break; case kFloorVent: case kCeilingVent: case kFloorBlower: case kCeilingBlower: case kSewerGrate: case kLeftFan: case kRightFan: case kTaper: case kCandle: case kStubby: case kGrecoVent: case kSewerBlower: DrawSimpleBlowers(thisRoom->objects[i].what, &roomObjectRects[i]); break; case kTiki: DrawTiki(&roomObjectRects[i], 0); break; case kInvisBlower: DrawInvisibleBlower(&roomObjectRects[i]); break; case kLiftArea: DrawLiftArea(&roomObjectRects[i]); break; case kTable: DrawTable(&roomObjectRects[i], 0); break; case kShelf: DrawShelf(&roomObjectRects[i]); break; case kCabinet: DrawCabinet(&roomObjectRects[i]); break; case kFilingCabinet: case kDownStairs: case kDoorExRt: case kDoorExLf: case kWindowExRt: case kWindowExLf: case kOzma: DrawPictObject(thisRoom->objects[i].what, &roomObjectRects[i]); break; case kWasteBasket: case kMilkCrate: DrawSimpleFurniture(thisRoom->objects[i].what, &roomObjectRects[i]); break; case kCounter: DrawCounter(&roomObjectRects[i]); break; case kDresser: DrawDresser(&roomObjectRects[i]); break; case kDeckTable: DrawDeckTable(&roomObjectRects[i], 0); break; case kStool: DrawStool(&roomObjectRects[i], 0); break; case kInvisObstacle: DrawInvisObstacle(&roomObjectRects[i]); break; case kInvisBounce: DrawInvisBounce(&roomObjectRects[i]); break; case kRedClock: DrawRedClock(&roomObjectRects[i]); break; case kBlueClock: DrawBlueClock(&roomObjectRects[i]); break; case kYellowClock: DrawYellowClock(&roomObjectRects[i]); break; case kCuckoo: DrawCuckoo(&roomObjectRects[i]); break; case kPaper: case kBattery: case kBands: case kStar: case kSparkle: case kHelium: DrawSimplePrizes(thisRoom->objects[i].what, &roomObjectRects[i]); break; case kGreaseRt: tempRect = roomObjectRects[i]; if (!thisRoom->objects[i].data.c.initial) QOffsetRect(&tempRect, -8, 0); DrawGreaseRt(&tempRect, thisRoom->objects[i].data.c.length, thisRoom->objects[i].data.c.initial); break; case kGreaseLf: tempRect = roomObjectRects[i]; if (!thisRoom->objects[i].data.c.initial) QOffsetRect(&tempRect, 8, 0); DrawGreaseLf(&tempRect, thisRoom->objects[i].data.c.length, thisRoom->objects[i].data.c.initial); break; case kFoil: DrawFoil(&roomObjectRects[i]); break; case kInvisBonus: DrawInvisBonus(&roomObjectRects[i]); break; case kSlider: DrawSlider(&roomObjectRects[i]); break; case kBBQ: case kTrunk: case kManhole: case kBooks: case kUpStairs: case kDoorInLf: case kDoorInRt: case kWindowInLf: case kWindowInRt: case kHipLamp: case kDecoLamp: case kGuitar: case kCinderBlock: case kFlowerBox: case kFireplace: case kBear: case kVase1: case kVase2: case kRug: case kChimes: DrawPictSansWhiteObject(thisRoom->objects[i].what, &roomObjectRects[i]); break; case kCustomPict: DrawCustPictSansWhite(thisRoom->objects[i].data.g.height, &roomObjectRects[i]); break; case kMailboxLf: DrawMailboxLeft(&roomObjectRects[i], 0); break; case kMailboxRt: DrawMailboxRight(&roomObjectRects[i], 0); break; case kFloorTrans: case kCeilingTrans: DrawSimpleTransport(thisRoom->objects[i].what, &roomObjectRects[i]); break; case kInvisTrans: case kDeluxeTrans: DrawInvisTransport(&roomObjectRects[i]); break; case kLightSwitch: DrawLightSwitch(&roomObjectRects[i], true); break; case kMachineSwitch: DrawMachineSwitch(&roomObjectRects[i], true); break; case kThermostat: DrawThermostat(&roomObjectRects[i], true); break; case kPowerSwitch: DrawPowerSwitch(&roomObjectRects[i], true); break; case kKnifeSwitch: DrawKnifeSwitch(&roomObjectRects[i], true); break; case kInvisSwitch: DrawInvisibleSwitch(&roomObjectRects[i]); break; case kTrigger: case kLgTrigger: DrawTrigger(&roomObjectRects[i]); break; case kSoundTrigger: DrawSoundTrigger(&roomObjectRects[i]); break; case kCeilingLight: case kLightBulb: case kTableLamp: DrawSimpleLight(thisRoom->objects[i].what, &roomObjectRects[i]); break; case kFlourescent: DrawFlourescent(&roomObjectRects[i]); break; case kTrackLight: DrawTrackLight(&roomObjectRects[i]); break; case kInvisLight: DrawInvisLight(&roomObjectRects[i]); break; case kShredder: case kToaster: case kCDs: DrawSimpleAppliance(thisRoom->objects[i].what, &roomObjectRects[i]); break; case kMacPlus: DrawMacPlus(&roomObjectRects[i], thisRoom->objects[i].data.g.initial, true); break; case kTV: DrawTV(&roomObjectRects[i], thisRoom->objects[i].data.g.initial, true); break; case kCoffee: DrawCoffee(&roomObjectRects[i], thisRoom->objects[i].data.g.initial, true); break; case kOutlet: DrawOutlet(&roomObjectRects[i]); break; case kVCR: DrawVCR(&roomObjectRects[i], thisRoom->objects[i].data.g.initial, true); break; case kStereo: DrawStereo(&roomObjectRects[i], isPlayMusicGame, true); break; case kMicrowave: DrawMicrowave(&roomObjectRects[i], thisRoom->objects[i].data.g.initial, true); break; case kBalloon: DrawBalloon(&roomObjectRects[i]); break; case kCopterLf: case kCopterRt: DrawCopter(&roomObjectRects[i]); break; case kDartLf: case kDartRt: DrawDart(&roomObjectRects[i], thisRoom->objects[i].what); break; case kBall: DrawBall(thisRoom->objects[i].what, &roomObjectRects[i]); break; case kDrip: DrawDrip(&roomObjectRects[i]); break; case kFish: DrawFish(thisRoom->objects[i].what, &roomObjectRects[i]); break; case kCobweb: case kCloud: DrawPictWithMaskObject(thisRoom->objects[i].what, &roomObjectRects[i]); break; case kMirror: DrawMirror(&roomObjectRects[i]); break; case kMousehole: case kFaucet: DrawSimpleClutter(thisRoom->objects[i].what, &roomObjectRects[i]); break; case kFlower: DrawFlower(&roomObjectRects[i], thisRoom->objects[i].data.i.pict); break; case kWallWindow: DrawWallWindow(&roomObjectRects[i]); break; case kCalendar: DrawCalendar(&roomObjectRects[i]); break; case kBulletin: DrawBulletin(&roomObjectRects[i]); break; default: break; } } } SetGWorld(wasCPort, wasWorld); if (isFirstRoom) { CopyMask((BitMap *)*GetGWorldPixMap(glidSrcMap), (BitMap *)*GetGWorldPixMap(glidMaskMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &gliderSrc[0], &gliderSrc[0], &initialGliderRect); } CopyMask((BitMap *)*GetGWorldPixMap(blowerSrcMap), (BitMap *)*GetGWorldPixMap(blowerMaskMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &leftStartGliderSrc, &leftStartGliderSrc, &leftStartGliderDest); CopyMask((BitMap *)*GetGWorldPixMap(blowerSrcMap), (BitMap *)*GetGWorldPixMap(blowerMaskMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &rightStartGliderSrc, &rightStartGliderSrc, &rightStartGliderDest); CopyBits((BitMap *)*GetGWorldPixMap(backSrcMap), (BitMap *)*GetGWorldPixMap(workSrcMap), &backSrcRect, &backSrcRect, srcCopy, nil); } #endif //-------------------------------------------------------------- HiliteAllObjects void HiliteAllObjects (void) { #ifndef COMPILEDEMO KeyMap theseKeys; short i; Pattern dummyPattern; if (theMode != kEditMode) return; PauseMarquee(); SetPort((GrafPtr)mainWindow); PenPat(GetQDGlobalsGray(&dummyPattern)); PenMode(patXor); for (i = 0; i < kMaxRoomObs; i++) FrameRect(&roomObjectRects[i]); do { GetKeys(theseKeys); } while ((BitTst(&theseKeys, kCommandKeyMap)) && (BitTst(&theseKeys, kOptionKeyMap))); for (i = 0; i < kMaxRoomObs; i++) FrameRect(&roomObjectRects[i]); PenNormal(); ResumeMarquee(); #endif } //-------------------------------------------------------------- GoToObjectInRoom void GoToObjectInRoom (short object, short floor, short suite) { #ifndef COMPILEDEMO short itsNumber, direction, dist; if (RoomExists(suite, floor, &itsNumber)) { if (itsNumber != thisRoomNumber) { CopyRoomToThisRoom(itsNumber); DeselectObject(); ReflectCurrentRoom(false); } else DeselectObject(); if (thisRoom->objects[object].what != kObjectIsEmpty) { objActive = object; if (ObjectHasHandle(&direction, &dist)) { StartMarqueeHandled(&roomObjectRects[objActive], direction, dist); HandleBlowerGlider(); } else StartMarquee(&roomObjectRects[objActive]); UpdateMenus(false); } } #endif } //-------------------------------------------------------------- GoToObjectInRoomNum void GoToObjectInRoomNum (short object, short roomNum) { short floor, suite; if (GetRoomFloorSuite(roomNum, &floor, &suite)) GoToObjectInRoom(object, floor, suite); } \ No newline at end of file diff --git a/Sources/ObjectInfo.c b/Sources/ObjectInfo.c deleted file mode 100755 index f080b59..0000000 --- a/Sources/ObjectInfo.c +++ /dev/null @@ -1 +0,0 @@ - //============================================================================ //---------------------------------------------------------------------------- // ObjectInfo.c //---------------------------------------------------------------------------- //============================================================================ #include #include #include #include "DialogUtils.h" #include "Externs.h" #include "ObjectEdit.h" #include "RectUtils.h" #define kBlowerInfoDialogID 1007 #define kFurnitureInfoDialogID 1010 #define kSwitchInfoDialogID 1011 #define kLightInfoDialogID 1013 #define kApplianceInfoDialogID 1014 #define kInvisBonusInfoDialogID 1015 #define kGreaseInfoDialogID 1019 #define kTransInfoDialogID 1022 #define kEnemyInfoDialogID 1027 #define kFlowerInfoDialogID 1033 #define kTriggerInfoDialogID 1034 #define kMicrowaveInfoDialogID 1035 #define kCustPictInfoDialogID 1045 #define kCustPictIDItem 7 #define kInitialStateCheckbox 6 #define kForceCheckbox 7 #define kDirectionText 9 #define kLeftFacingRadio 16 #define kRightFacingRadio 17 #define kToggleRadio 6 #define kForceOnRadio 7 #define kForceOffRadio 8 #define kDelay3Item 6 #define kDelayItem 8 #define kDelayLabelItem 9 #define k100PtRadio 6 #define k300PtRadio 7 #define k500PtRadio 8 #define kGreaseItem 6 #define kLinkTransButton 6 #define kInitialStateCheckbox3 13 #define kTransRoomText 8 #define kTransObjectText 9 #define kKillBandsCheckbox 8 #define kKillBatteryCheckbox 9 #define kKillFoilCheckbox 10 #define kDelay2Item 7 #define kDelay2LabelItem 8 #define kDelay2LabelItem2 9 #define kInitialStateCheckbox2 10 #define kRadioFlower1 6 #define kRadioFlower6 11 #define kFlowerCancel 12 #define kGotoButton1 11 #define kGotoButton2 14 void UpdateBlowerInfo (DialogPtr); void UpdateFurnitureInfo (DialogPtr); void UpdateCustPictInfo (DialogPtr); void UpdateSwitchInfo (DialogPtr); void UpdateTriggerInfo (DialogPtr); void UpdateLightInfo (DialogPtr); void UpdateApplianceInfo (DialogPtr); void UpdateMicrowaveInfo (DialogPtr); void UpdateGreaseInfo (DialogPtr); void UpdateInvisBonusInfo (DialogPtr); void UpdateTransInfo (DialogPtr); void UpdateEnemyInfo (DialogPtr); void UpdateFlowerInfo (DialogPtr); pascal Boolean BlowerFilter (DialogPtr, EventRecord *, short *); pascal Boolean FurnitureFilter (DialogPtr, EventRecord *, short *); pascal Boolean CustPictFilter (DialogPtr, EventRecord *, short *); pascal Boolean SwitchFilter (DialogPtr, EventRecord *, short *); pascal Boolean TriggerFilter (DialogPtr, EventRecord *, short *); pascal Boolean LightFilter (DialogPtr, EventRecord *, short *); pascal Boolean ApplianceFilter (DialogPtr, EventRecord *, short *); pascal Boolean MicrowaveFilter (DialogPtr, EventRecord *, short *); pascal Boolean GreaseFilter (DialogPtr, EventRecord *, short *); pascal Boolean InvisBonusFilter (DialogPtr, EventRecord *, short *); pascal Boolean TransFilter (DialogPtr, EventRecord *, short *); pascal Boolean EnemyFilter (DialogPtr, EventRecord *, short *); pascal Boolean FlowerFilter (DialogPtr, EventRecord *, short *); void DoBlowerObjectInfo (short); void DoFurnitureObjectInfo (void); void DoCustPictObjectInfo (void); void DoSwitchObjectInfo (void); void DoTriggerObjectInfo (void); void DoLightObjectInfo (void); void DoApplianceObjectInfo (short); void DoMicrowaveObjectInfo (void); void DoGreaseObjectInfo (void); void DoInvisBonusObjectInfo (void); void DoTransObjectInfo (short); void DoEnemyObjectInfo (short); void DoFlowerObjectInfo (void); short newDirection, newPoint; Byte newType; extern retroLink retroLinkList[]; extern short linkRoom, linkType, wasFlower; extern Byte linkObject; extern Boolean linkerIsSwitch; #ifndef COMPILEDEMO //============================================================== Functions //-------------------------------------------------------------- UpdateBlowerInfo void UpdateBlowerInfo (DialogPtr theDialog) { #define kArrowheadLength 4 Rect bounds; DrawDialog(theDialog); DrawDefaultButton(theDialog); FrameDialogItemC(theDialog, 5, kRedOrangeColor8); if ((thisRoom->objects[objActive].what != kLeftFan) && (thisRoom->objects[objActive].what != kRightFan)) { GetDialogItemRect(theDialog, 8, &bounds); bounds.right += 2; bounds.bottom += 2; EraseRect(&bounds); bounds.right -= 2; bounds.bottom -= 2; PenSize(2, 2); switch (newDirection) { case 1: // up MoveTo(bounds.left + HalfRectWide(&bounds), bounds.top); Line(0, RectTall(&bounds)); MoveTo(bounds.left + HalfRectWide(&bounds), bounds.top); Line(kArrowheadLength, kArrowheadLength); MoveTo(bounds.left + HalfRectWide(&bounds), bounds.top); Line(-kArrowheadLength, kArrowheadLength); break; case 2: // right MoveTo(bounds.right, bounds.top + HalfRectTall(&bounds)); Line(-RectWide(&bounds), 0); MoveTo(bounds.right, bounds.top + HalfRectTall(&bounds)); Line(-kArrowheadLength, kArrowheadLength); MoveTo(bounds.right, bounds.top + HalfRectTall(&bounds)); Line(-kArrowheadLength, -kArrowheadLength); break; case 4: // down MoveTo(bounds.left + HalfRectWide(&bounds), bounds.top); Line(0, RectTall(&bounds)); MoveTo(bounds.left + HalfRectWide(&bounds), bounds.bottom); Line(kArrowheadLength, -kArrowheadLength); MoveTo(bounds.left + HalfRectWide(&bounds), bounds.bottom); Line(-kArrowheadLength, -kArrowheadLength); break; case 8: // left MoveTo(bounds.left, bounds.top + HalfRectTall(&bounds)); Line(RectWide(&bounds), 0); MoveTo(bounds.left, bounds.top + HalfRectTall(&bounds)); Line(kArrowheadLength, -kArrowheadLength); MoveTo(bounds.left, bounds.top + HalfRectTall(&bounds)); Line(kArrowheadLength, kArrowheadLength); break; default: break; } PenNormal(); if ((thisRoom->objects[objActive].what == kInvisBlower) || (thisRoom->objects[objActive].what == kLiftArea)) { switch (newDirection) { case 1: // up EraseDialogItem(theDialog, 11); FrameOvalDialogItem(theDialog, 12); FrameOvalDialogItem(theDialog, 13); FrameOvalDialogItem(theDialog, 14); break; case 2: // right FrameOvalDialogItem(theDialog, 11); EraseDialogItem(theDialog, 12); FrameOvalDialogItem(theDialog, 13); FrameOvalDialogItem(theDialog, 14); break; case 4: // down FrameOvalDialogItem(theDialog, 11); FrameOvalDialogItem(theDialog, 12); EraseDialogItem(theDialog, 13); FrameOvalDialogItem(theDialog, 14); break; case 8: // left FrameOvalDialogItem(theDialog, 11); FrameOvalDialogItem(theDialog, 12); FrameOvalDialogItem(theDialog, 13); EraseDialogItem(theDialog, 14); break; } } } } //-------------------------------------------------------------- UpdateFurnitureInfo void UpdateFurnitureInfo (DialogPtr theDialog) { DrawDialog(theDialog); DrawDefaultButton(theDialog); FrameDialogItemC(theDialog, 4, kRedOrangeColor8); } //-------------------------------------------------------------- UpdateCustPictInfo void UpdateCustPictInfo (DialogPtr theDialog) { DrawDialog(theDialog); DrawDefaultButton(theDialog); FrameDialogItemC(theDialog, 5, kRedOrangeColor8); } //-------------------------------------------------------------- UpdateSwitchInfo void UpdateSwitchInfo (DialogPtr theDialog) { DrawDialog(theDialog); DrawDefaultButton(theDialog); SelectFromRadioGroup(theDialog, newType + kToggleRadio, kToggleRadio, kForceOffRadio); FrameDialogItemC(theDialog, 4, kRedOrangeColor8); FrameDialogItemC(theDialog, 13, kRedOrangeColor8); } //-------------------------------------------------------------- UpdateTriggerInfo void UpdateTriggerInfo (DialogPtr theDialog) { DrawDialog(theDialog); DrawDefaultButton(theDialog); FrameDialogItemC(theDialog, 4, kRedOrangeColor8); FrameDialogItemC(theDialog, 13, kRedOrangeColor8); } //-------------------------------------------------------------- UpdateLightInfo void UpdateLightInfo (DialogPtr theDialog) { DrawDialog(theDialog); DrawDefaultButton(theDialog); FrameDialogItemC(theDialog, 5, kRedOrangeColor8); } //-------------------------------------------------------------- UpdateApplianceInfo void UpdateApplianceInfo (DialogPtr theDialog) { DrawDialog(theDialog); DrawDefaultButton(theDialog); FrameDialogItemC(theDialog, 5, kRedOrangeColor8); } //-------------------------------------------------------------- UpdateMicrowaveInfo void UpdateMicrowaveInfo (DialogPtr theDialog) { DrawDialog(theDialog); DrawDefaultButton(theDialog); FrameDialogItemC(theDialog, 5, kRedOrangeColor8); } //-------------------------------------------------------------- UpdateGreaseInfo void UpdateGreaseInfo (DialogPtr theDialog) { DrawDialog(theDialog); DrawDefaultButton(theDialog); FrameDialogItemC(theDialog, 5, kRedOrangeColor8); } //-------------------------------------------------------------- UpdateInvisBonusInfo void UpdateInvisBonusInfo (DialogPtr theDialog) { DrawDialog(theDialog); DrawDefaultButton(theDialog); SelectFromRadioGroup(theDialog, newPoint + k100PtRadio, k100PtRadio, k500PtRadio); FrameDialogItemC(theDialog, 4, kRedOrangeColor8); } //-------------------------------------------------------------- UpdateTransInfo void UpdateTransInfo (DialogPtr theDialog) { DrawDialog(theDialog); DrawDefaultButton(theDialog); FrameDialogItemC(theDialog, 4, kRedOrangeColor8); FrameDialogItemC(theDialog, 10, kRedOrangeColor8); } //-------------------------------------------------------------- UpdateEnemyInfo void UpdateEnemyInfo (DialogPtr theDialog) { DrawDialog(theDialog); DrawDefaultButton(theDialog); FrameDialogItemC(theDialog, 4, kRedOrangeColor8); } //-------------------------------------------------------------- UpdateFlowerInfo void UpdateFlowerInfo (DialogPtr theDialog) { DrawDialog(theDialog); DrawDefaultButton(theDialog); FrameDialogItemC(theDialog, 4, kRedOrangeColor8); } //-------------------------------------------------------------- BlowerFilter pascal Boolean BlowerFilter (DialogPtr dial, EventRecord *event, short *item) { switch (event->what) { case keyDown: switch ((event->message) & charCodeMask) { case kReturnKeyASCII: case kEnterKeyASCII: FlashDialogButton(dial, kOkayButton); *item = kOkayButton; return(true); break; case kEscapeKeyASCII: FlashDialogButton(dial, kCancelButton); *item = kCancelButton; return(true); break; case kTabKeyASCII: // SelectDialogItemText(dial, kRoomNameItem, 0, 1024); return(true); break; default: return(false); } break; case mouseDown: return(false); break; case mouseUp: return(false); break; case updateEvt: SetPort((GrafPtr)dial); BeginUpdate(GetDialogWindow(dial)); UpdateBlowerInfo(dial); EndUpdate(GetDialogWindow(dial)); event->what = nullEvent; return(false); break; default: return(false); break; } } //-------------------------------------------------------------- FurnitureFilter pascal Boolean FurnitureFilter (DialogPtr dial, EventRecord *event, short *item) { switch (event->what) { case keyDown: switch ((event->message) & charCodeMask) { case kReturnKeyASCII: case kEnterKeyASCII: FlashDialogButton(dial, kOkayButton); *item = kOkayButton; return(true); break; default: return(false); } break; case updateEvt: SetPort((GrafPtr)dial); BeginUpdate(GetDialogWindow(dial)); UpdateFurnitureInfo(dial); EndUpdate(GetDialogWindow(dial)); event->what = nullEvent; return(false); break; default: return(false); break; } } //-------------------------------------------------------------- CustPictFilter pascal Boolean CustPictFilter (DialogPtr dial, EventRecord *event, short *item) { switch (event->what) { case keyDown: switch ((event->message) & charCodeMask) { case kReturnKeyASCII: case kEnterKeyASCII: FlashDialogButton(dial, kOkayButton); *item = kOkayButton; return(true); break; default: return(false); } break; case updateEvt: SetPort((GrafPtr)dial); BeginUpdate(GetDialogWindow(dial)); UpdateCustPictInfo(dial); EndUpdate(GetDialogWindow(dial)); event->what = nullEvent; return(false); break; default: return(false); break; } } //-------------------------------------------------------------- SwitchFilter pascal Boolean SwitchFilter (DialogPtr dial, EventRecord *event, short *item) { switch (event->what) { case keyDown: switch ((event->message) & charCodeMask) { case kReturnKeyASCII: case kEnterKeyASCII: FlashDialogButton(dial, kOkayButton); *item = kOkayButton; return(true); break; case kEscapeKeyASCII: FlashDialogButton(dial, kCancelButton); *item = kCancelButton; return(true); break; default: return(false); } break; case updateEvt: SetPort((GrafPtr)dial); BeginUpdate(GetDialogWindow(dial)); UpdateSwitchInfo(dial); EndUpdate(GetDialogWindow(dial)); event->what = nullEvent; return(false); break; default: return(false); break; } } //-------------------------------------------------------------- TriggerFilter pascal Boolean TriggerFilter (DialogPtr dial, EventRecord *event, short *item) { switch (event->what) { case keyDown: switch ((event->message) & charCodeMask) { case kReturnKeyASCII: case kEnterKeyASCII: FlashDialogButton(dial, kOkayButton); *item = kOkayButton; return(true); break; case kEscapeKeyASCII: FlashDialogButton(dial, kCancelButton); *item = kCancelButton; return(true); break; case kTabKeyASCII: SelectDialogItemText(dial, kDelay3Item, 0, 1024); return(true); break; default: return(false); } break; case updateEvt: SetPort((GrafPtr)dial); BeginUpdate(GetDialogWindow(dial)); UpdateTriggerInfo(dial); EndUpdate(GetDialogWindow(dial)); event->what = nullEvent; return(false); break; default: return(false); break; } } //-------------------------------------------------------------- LightFilter pascal Boolean LightFilter (DialogPtr dial, EventRecord *event, short *item) { switch (event->what) { case keyDown: switch ((event->message) & charCodeMask) { case kReturnKeyASCII: case kEnterKeyASCII: FlashDialogButton(dial, kOkayButton); *item = kOkayButton; return(true); break; case kEscapeKeyASCII: FlashDialogButton(dial, kCancelButton); *item = kCancelButton; return(true); break; default: return(false); } break; case mouseDown: return(false); break; case mouseUp: return(false); break; case updateEvt: SetPort((GrafPtr)dial); BeginUpdate(GetDialogWindow(dial)); UpdateLightInfo(dial); EndUpdate(GetDialogWindow(dial)); event->what = nullEvent; return(false); break; default: return(false); break; } } //-------------------------------------------------------------- ApplianceFilter pascal Boolean ApplianceFilter (DialogPtr dial, EventRecord *event, short *item) { switch (event->what) { case keyDown: switch ((event->message) & charCodeMask) { case kReturnKeyASCII: case kEnterKeyASCII: FlashDialogButton(dial, kOkayButton); *item = kOkayButton; return(true); break; case kEscapeKeyASCII: FlashDialogButton(dial, kCancelButton); *item = kCancelButton; return(true); break; case kTabKeyASCII: SelectDialogItemText(dial, kDelayItem, 0, 1024); return(true); break; default: return(false); } break; case mouseDown: return(false); break; case mouseUp: return(false); break; case updateEvt: SetPort((GrafPtr)dial); BeginUpdate(GetDialogWindow(dial)); UpdateApplianceInfo(dial); EndUpdate(GetDialogWindow(dial)); event->what = nullEvent; return(false); break; default: return(false); break; } } //-------------------------------------------------------------- MicrowaveFilter pascal Boolean MicrowaveFilter (DialogPtr dial, EventRecord *event, short *item) { switch (event->what) { case keyDown: switch ((event->message) & charCodeMask) { case kReturnKeyASCII: case kEnterKeyASCII: FlashDialogButton(dial, kOkayButton); *item = kOkayButton; return(true); break; case kEscapeKeyASCII: FlashDialogButton(dial, kCancelButton); *item = kCancelButton; return(true); break; default: return(false); } break; case mouseDown: return(false); break; case mouseUp: return(false); break; case updateEvt: SetPort((GrafPtr)dial); BeginUpdate(GetDialogWindow(dial)); UpdateMicrowaveInfo(dial); EndUpdate(GetDialogWindow(dial)); event->what = nullEvent; return(false); break; default: return(false); break; } } //-------------------------------------------------------------- GreaseFilter pascal Boolean GreaseFilter (DialogPtr dial, EventRecord *event, short *item) { switch (event->what) { case keyDown: switch ((event->message) & charCodeMask) { case kReturnKeyASCII: case kEnterKeyASCII: FlashDialogButton(dial, kOkayButton); *item = kOkayButton; return(true); break; case kEscapeKeyASCII: FlashDialogButton(dial, kCancelButton); *item = kCancelButton; return(true); break; default: return(false); } break; case updateEvt: SetPort((GrafPtr)dial); BeginUpdate(GetDialogWindow(dial)); UpdateGreaseInfo(dial); EndUpdate(GetDialogWindow(dial)); event->what = nullEvent; return(false); break; default: return(false); break; } } //-------------------------------------------------------------- InvisBonusFilter pascal Boolean InvisBonusFilter (DialogPtr dial, EventRecord *event, short *item) { switch (event->what) { case keyDown: switch ((event->message) & charCodeMask) { case kReturnKeyASCII: case kEnterKeyASCII: FlashDialogButton(dial, kOkayButton); *item = kOkayButton; return(true); break; default: return(false); } break; case updateEvt: SetPort((GrafPtr)dial); BeginUpdate(GetDialogWindow(dial)); UpdateInvisBonusInfo(dial); EndUpdate(GetDialogWindow(dial)); event->what = nullEvent; return(false); break; default: return(false); break; } } //-------------------------------------------------------------- TransFilter pascal Boolean TransFilter (DialogPtr dial, EventRecord *event, short *item) { switch (event->what) { case keyDown: switch ((event->message) & charCodeMask) { case kReturnKeyASCII: case kEnterKeyASCII: FlashDialogButton(dial, kOkayButton); *item = kOkayButton; return(true); break; case kEscapeKeyASCII: FlashDialogButton(dial, kCancelButton); *item = kCancelButton; return(true); break; default: return(false); } break; case updateEvt: SetPort((GrafPtr)dial); BeginUpdate(GetDialogWindow(dial)); UpdateTransInfo(dial); EndUpdate(GetDialogWindow(dial)); event->what = nullEvent; return(false); break; default: return(false); break; } } //-------------------------------------------------------------- EnemyFilter pascal Boolean EnemyFilter (DialogPtr dial, EventRecord *event, short *item) { switch (event->what) { case keyDown: switch ((event->message) & charCodeMask) { case kReturnKeyASCII: case kEnterKeyASCII: FlashDialogButton(dial, kOkayButton); *item = kOkayButton; return(true); break; case kEscapeKeyASCII: FlashDialogButton(dial, kCancelButton); *item = kCancelButton; return(true); break; case kTabKeyASCII: SelectDialogItemText(dial, kDelay2Item, 0, 1024); return(true); break; default: return(false); } break; case mouseDown: return(false); break; case mouseUp: return(false); break; case updateEvt: SetPort((GrafPtr)dial); BeginUpdate(GetDialogWindow(dial)); UpdateEnemyInfo(dial); EndUpdate(GetDialogWindow(dial)); event->what = nullEvent; return(false); break; default: return(false); break; } } //-------------------------------------------------------------- EnemyFilter pascal Boolean FlowerFilter (DialogPtr dial, EventRecord *event, short *item) { switch (event->what) { case keyDown: switch ((event->message) & charCodeMask) { case kReturnKeyASCII: case kEnterKeyASCII: FlashDialogButton(dial, kOkayButton); *item = kOkayButton; return(true); break; case kEscapeKeyASCII: FlashDialogButton(dial, kCancelButton); *item = kCancelButton; return(true); break; default: return(false); } break; case mouseDown: return(false); break; case mouseUp: return(false); break; case updateEvt: SetPort((GrafPtr)dial); BeginUpdate(GetDialogWindow(dial)); UpdateFlowerInfo(dial); EndUpdate(GetDialogWindow(dial)); event->what = nullEvent; return(false); break; default: return(false); break; } } //-------------------------------------------------------------- DoBlowerObjectInfo void DoBlowerObjectInfo (short what) { DialogPtr infoDial; Str255 numberStr, kindStr, distStr; short item, initial; Boolean leaving, doReturn, leftFacing; ModalFilterUPP blowerFilterUPP; blowerFilterUPP = NewModalFilterUPP(BlowerFilter); NumToString(objActive + 1, numberStr); GetIndString(kindStr, kObjectNameStrings, thisRoom->objects[objActive].what); NumToString(thisRoom->objects[objActive].data.a.distance, distStr); ParamText(numberStr, kindStr, distStr, "\p"); // CenterDialog(kBlowerInfoDialogID); infoDial = GetNewDialog(kBlowerInfoDialogID, nil, kPutInFront); if (infoDial == nil) RedAlert(kErrDialogDidntLoad); SetPort((GrafPtr)infoDial); newDirection = thisRoom->objects[objActive].data.a.vector & 0x0F; if (thisRoom->objects[objActive].data.a.initial) SetDialogItemValue(infoDial, kInitialStateCheckbox, 1); else SetDialogItemValue(infoDial, kInitialStateCheckbox, 0); if ((what == kTaper) || (what == kCandle) || (what == kStubby) || (what == kTiki) || (what == kBBQ)) { HideDialogItem(infoDial, kInitialStateCheckbox); } if ((what == kLeftFan) || (what == kRightFan)) { if (what == kLeftFan) { SelectFromRadioGroup(infoDial, kLeftFacingRadio, kLeftFacingRadio, kRightFacingRadio); leftFacing = true; } else { SelectFromRadioGroup(infoDial, kRightFacingRadio, kLeftFacingRadio, kRightFacingRadio); leftFacing = false; } HideDialogItem(infoDial, kDirectionText); } else { HideDialogItem(infoDial, kLeftFacingRadio); HideDialogItem(infoDial, kRightFacingRadio); } if (retroLinkList[objActive].room == -1) HideDialogItem(infoDial, 15); ShowWindow(GetDialogWindow(infoDial)); leaving = false; doReturn = false; while (!leaving) { ModalDialog(blowerFilterUPP, &item); if (item == kOkayButton) { GetDialogItemValue(infoDial, kInitialStateCheckbox, &initial); if (initial == 1) thisRoom->objects[objActive].data.a.initial = true; else thisRoom->objects[objActive].data.a.initial = false; thisRoom->objects[objActive].data.a.vector = (Byte)newDirection; if ((what == kLeftFan) || (what == kRightFan)) { if (leftFacing) thisRoom->objects[objActive].what = kLeftFan; else thisRoom->objects[objActive].what = kRightFan; if (KeepObjectLegal()) { } InvalWindowRect(mainWindow, &mainWindowRect); GetThisRoomsObjRects(); ReadyBackground(thisRoom->background, thisRoom->tiles); DrawThisRoomsObjects(); } fileDirty = true; UpdateMenus(false); leaving = true; } else if (item == kCancelButton) leaving = true; else if (item == kInitialStateCheckbox) ToggleDialogItemValue(infoDial, kInitialStateCheckbox); else if (item == 15) // Linked From? button. { GetDialogItemValue(infoDial, kInitialStateCheckbox, &initial); if (initial == 1) thisRoom->objects[objActive].data.a.initial = true; else thisRoom->objects[objActive].data.a.initial = false; thisRoom->objects[objActive].data.a.vector = (Byte)newDirection; if ((what == kLeftFan) || (what == kRightFan)) { if (leftFacing) thisRoom->objects[objActive].what = kLeftFan; else thisRoom->objects[objActive].what = kRightFan; if (KeepObjectLegal()) { } InvalWindowRect(mainWindow, &mainWindowRect); GetThisRoomsObjRects(); ReadyBackground(thisRoom->background, thisRoom->tiles); DrawThisRoomsObjects(); } fileDirty = true; UpdateMenus(false); leaving = true; doReturn = true; } else if (item == kLeftFacingRadio) { leftFacing = true; SelectFromRadioGroup(infoDial, kLeftFacingRadio, kLeftFacingRadio, kRightFacingRadio); } else if (item == kRightFacingRadio) { leftFacing = false; SelectFromRadioGroup(infoDial, kRightFacingRadio, kLeftFacingRadio, kRightFacingRadio); } else if ((thisRoom->objects[objActive].what == kInvisBlower) || (thisRoom->objects[objActive].what == kLiftArea)) { switch (item) { case 11: newDirection = 0x01; break; case 12: newDirection = 0x02; break; case 13: newDirection = 0x04; break; case 14: newDirection = 0x08; break; } UpdateBlowerInfo(infoDial); } } DisposeDialog(infoDial); DisposeModalFilterUPP(blowerFilterUPP); if (doReturn) { GoToObjectInRoomNum(retroLinkList[objActive].object, retroLinkList[objActive].room); } } //-------------------------------------------------------------- DoFurnitureObjectInfo void DoFurnitureObjectInfo (void) { DialogPtr infoDial; Str255 numberStr, kindStr; short item; Boolean leaving, doReturn; ModalFilterUPP furnitureFilterUPP; furnitureFilterUPP = NewModalFilterUPP(FurnitureFilter); if (objActive == kInitialGliderSelected) { PasStringCopy("\p-", numberStr); PasStringCopy("\pGlider Begins", kindStr); } else if (objActive == kLeftGliderSelected) { PasStringCopy("\p-", numberStr); PasStringCopy("\pNew Glider (left)", kindStr); } else if (objActive == kRightGliderSelected) { PasStringCopy("\p-", numberStr); PasStringCopy("\pNew Glider (right)", kindStr); } else { NumToString(objActive + 1, numberStr); GetIndString(kindStr, kObjectNameStrings, thisRoom->objects[objActive].what); } ParamText(numberStr, kindStr, "\p", "\p"); BringUpDialog(&infoDial, kFurnitureInfoDialogID); if ((objActive < 0) || (retroLinkList[objActive].room == -1)) HideDialogItem(infoDial, 6); leaving = false; doReturn = false; while (!leaving) { ModalDialog(furnitureFilterUPP, &item); if (item == kOkayButton) leaving = true; else if (item == 6) // Linked From? button. { leaving = true; doReturn = true; } } DisposeDialog(infoDial); DisposeModalFilterUPP(furnitureFilterUPP); if (doReturn) { GoToObjectInRoomNum(retroLinkList[objActive].object, retroLinkList[objActive].room); } } //-------------------------------------------------------------- DoCustPictObjectInfo void DoCustPictObjectInfo (void) { DialogPtr infoDial; Str255 numberStr, kindStr; long wasPict; short item; Boolean leaving; ModalFilterUPP custPictFilterUPP; custPictFilterUPP = NewModalFilterUPP(CustPictFilter); NumToString(objActive + 1, numberStr); GetIndString(kindStr, kObjectNameStrings, thisRoom->objects[objActive].what); if (thisRoom->objects[objActive].what == kCustomPict) ParamText(numberStr, kindStr, "\pPICT", "\p10000"); else ParamText(numberStr, kindStr, "\pSound", "\p3000"); BringUpDialog(&infoDial, kCustPictInfoDialogID); if (thisRoom->objects[objActive].what == kCustomPict) { wasPict = (long)(thisRoom->objects[objActive].data.g.height); SetDialogNumToStr(infoDial, kCustPictIDItem, wasPict); } else { wasPict = (long)(thisRoom->objects[objActive].data.e.where); SetDialogNumToStr(infoDial, kCustPictIDItem, wasPict); } SelectDialogItemText(infoDial, kCustPictIDItem, 0, 1024); leaving = false; while (!leaving) { ModalDialog(custPictFilterUPP, &item); if (item == kOkayButton) { GetDialogNumFromStr(infoDial, kCustPictIDItem, &wasPict); if (thisRoom->objects[objActive].what == kCustomPict) { if ((wasPict < 10000L) || (wasPict > 32767L)) { SysBeep(1); wasPict = (long)(thisRoom->objects[objActive].data.g.height); SetDialogNumToStr(infoDial, kCustPictIDItem, wasPict); SelectDialogItemText(infoDial, kCustPictIDItem, 0, 1024); } else { thisRoom->objects[objActive].data.g.height = (short)wasPict; if (KeepObjectLegal()) { } fileDirty = true; UpdateMenus(false); InvalWindowRect(mainWindow, &mainWindowRect); GetThisRoomsObjRects(); ReadyBackground(thisRoom->background, thisRoom->tiles); DrawThisRoomsObjects(); leaving = true; } } else { if ((wasPict < 3000L) || (wasPict > 32767L)) { SysBeep(1); wasPict = (long)(thisRoom->objects[objActive].data.e.where); SetDialogNumToStr(infoDial, kCustPictIDItem, wasPict); SelectDialogItemText(infoDial, kCustPictIDItem, 0, 1024); } else { thisRoom->objects[objActive].data.e.where = (short)wasPict; fileDirty = true; UpdateMenus(false); InvalWindowRect(mainWindow, &mainWindowRect); GetThisRoomsObjRects(); ReadyBackground(thisRoom->background, thisRoom->tiles); DrawThisRoomsObjects(); leaving = true; } } } else if (item == kCancelButton) { leaving = true; } } DisposeDialog(infoDial); DisposeModalFilterUPP(custPictFilterUPP); } //-------------------------------------------------------------- DoSwitchObjectInfo void DoSwitchObjectInfo (void) { DialogPtr infoDial; Str255 numberStr, kindStr, roomStr, tempStr, objStr; short item, floor, suite; Boolean leaving, doLink, doGoTo, doReturn; ModalFilterUPP switchFilterUPP; switchFilterUPP = NewModalFilterUPP(SwitchFilter); NumToString(objActive + 1, numberStr); GetIndString(kindStr, kObjectNameStrings, thisRoom->objects[objActive].what); if (thisRoom->objects[objActive].data.e.where == -1) PasStringCopy("\pnone", roomStr); else { ExtractFloorSuite(thisRoom->objects[objActive].data.e.where, &floor, &suite); NumToString((long)floor, roomStr); PasStringConcat(roomStr, "\p / "); NumToString((long)suite, tempStr); PasStringConcat(roomStr, tempStr); } if (thisRoom->objects[objActive].data.e.who == 255) PasStringCopy("\pnone", objStr); else NumToString((long)thisRoom->objects[objActive].data.e.who + 1, objStr); ParamText(numberStr, kindStr, roomStr, objStr); newType = thisRoom->objects[objActive].data.e.type; BringUpDialog(&infoDial, kSwitchInfoDialogID); leaving = false; doLink = false; doGoTo = false; doReturn = false; if (thisRoom->objects[objActive].data.e.who == 255) MyDisableControl(infoDial, kGotoButton2); if (retroLinkList[objActive].room == -1) HideDialogItem(infoDial, 15); while (!leaving) { ModalDialog(switchFilterUPP, &item); if (item == kOkayButton) { thisRoom->objects[objActive].data.e.type = newType; fileDirty = true; UpdateMenus(false); leaving = true; } else if (item == kCancelButton) leaving = true; else if (item == kToggleRadio) { SelectFromRadioGroup(infoDial, item, kToggleRadio, kForceOffRadio); newType = kToggle; } else if (item == kForceOnRadio) { SelectFromRadioGroup(infoDial, item, kToggleRadio, kForceOffRadio); newType = kForceOn; } else if (item == kForceOffRadio) { SelectFromRadioGroup(infoDial, item, kToggleRadio, kForceOffRadio); newType = kForceOff; } else if (item == 9) { thisRoom->objects[objActive].data.e.type = newType; fileDirty = true; UpdateMenus(false); leaving = true; doLink = true; } else if (item == kGotoButton2) { thisRoom->objects[objActive].data.e.type = newType; fileDirty = true; UpdateMenus(false); leaving = true; doGoTo = true; } else if (item == 15) // Linked From? button. { thisRoom->objects[objActive].data.e.type = newType; fileDirty = true; UpdateMenus(false); leaving = true; doReturn = true; } } DisposeDialog(infoDial); DisposeModalFilterUPP(switchFilterUPP); if (doLink) { linkType = kSwitchLinkOnly; linkerIsSwitch = true; OpenLinkWindow(); linkRoom = thisRoomNumber; linkObject = (Byte)objActive; DeselectObject(); } else if (doGoTo) { GoToObjectInRoom((short)thisRoom->objects[objActive].data.e.who, floor, suite); } else if (doReturn) { GoToObjectInRoomNum(retroLinkList[objActive].object, retroLinkList[objActive].room); } } //-------------------------------------------------------------- DoTriggerObjectInfo void DoTriggerObjectInfo (void) { DialogPtr infoDial; Str255 numberStr, kindStr, roomStr, tempStr, objStr; long delayIs; short item, floor, suite; Boolean leaving, doLink, doGoTo, doReturn; ModalFilterUPP triggerFilterUPP; triggerFilterUPP = NewModalFilterUPP(TriggerFilter); NumToString(objActive + 1, numberStr); GetIndString(kindStr, kObjectNameStrings, thisRoom->objects[objActive].what); if (thisRoom->objects[objActive].data.e.where == -1) PasStringCopy("\pnone", roomStr); else { ExtractFloorSuite(thisRoom->objects[objActive].data.e.where, &floor, &suite); NumToString((long)floor, roomStr); PasStringConcat(roomStr, "\p / "); NumToString((long)suite, tempStr); PasStringConcat(roomStr, tempStr); } if (thisRoom->objects[objActive].data.e.who == 255) PasStringCopy("\pnone", objStr); else NumToString((long)thisRoom->objects[objActive].data.e.who + 1, objStr); ParamText(numberStr, kindStr, roomStr, objStr); newType = thisRoom->objects[objActive].data.e.type; BringUpDialog(&infoDial, kTriggerInfoDialogID); leaving = false; doLink = false; doGoTo = false; doReturn = false; if (retroLinkList[objActive].room == -1) HideDialogItem(infoDial, 15); if (thisRoom->objects[objActive].data.e.who == 255) MyDisableControl(infoDial, kGotoButton2); SetDialogNumToStr(infoDial, kDelay3Item, (long)thisRoom->objects[objActive].data.e.delay); SelectDialogItemText(infoDial, kDelay3Item, 0, 1024); while (!leaving) { ModalDialog(triggerFilterUPP, &item); if (item == kOkayButton) { GetDialogNumFromStr(infoDial, kDelay3Item, &delayIs); if ((delayIs < 0L) || (delayIs > 32767L)) { SysBeep(1); SetDialogNumToStr(infoDial, kDelay3Item, (long)thisRoom->objects[objActive].data.e.delay); SelectDialogItemText(infoDial, kDelay3Item, 0, 1024); } else { thisRoom->objects[objActive].data.e.delay = (short)delayIs; fileDirty = true; UpdateMenus(false); leaving = true; } } else if (item == kCancelButton) leaving = true; else if (item == 9) { GetDialogNumFromStr(infoDial, kDelay3Item, &delayIs); if ((delayIs < 0L) || (delayIs > 32767L)) { SysBeep(1); SetDialogNumToStr(infoDial, kDelay3Item, (long)thisRoom->objects[objActive].data.e.delay); SelectDialogItemText(infoDial, kDelay3Item, 0, 1024); } else { thisRoom->objects[objActive].data.e.delay = (short)delayIs; fileDirty = true; UpdateMenus(false); leaving = true; doLink = true; } } else if (item == kGotoButton2) { GetDialogNumFromStr(infoDial, kDelay3Item, &delayIs); if ((delayIs < 0L) || (delayIs > 32767L)) { SysBeep(1); SetDialogNumToStr(infoDial, kDelay3Item, (long)thisRoom->objects[objActive].data.e.delay); SelectDialogItemText(infoDial, kDelay3Item, 0, 1024); } else { thisRoom->objects[objActive].data.e.delay = (short)delayIs; fileDirty = true; UpdateMenus(false); leaving = true; doGoTo = true; } } else if (item == 15) // Linked From? button. { GetDialogNumFromStr(infoDial, kDelay3Item, &delayIs); if ((delayIs < 0L) || (delayIs > 32767L)) { SysBeep(1); SetDialogNumToStr(infoDial, kDelay3Item, (long)thisRoom->objects[objActive].data.e.delay); SelectDialogItemText(infoDial, kDelay3Item, 0, 1024); } else { thisRoom->objects[objActive].data.e.delay = (short)delayIs; fileDirty = true; UpdateMenus(false); leaving = true; doReturn = true; } } } DisposeDialog(infoDial); DisposeModalFilterUPP(triggerFilterUPP); if (doLink) { linkType = kTriggerLinkOnly; linkerIsSwitch = true; OpenLinkWindow(); linkRoom = thisRoomNumber; linkObject = (Byte)objActive; DeselectObject(); } else if (doGoTo) { GoToObjectInRoom((short)thisRoom->objects[objActive].data.e.who, floor, suite); } else if (doReturn) { GoToObjectInRoomNum(retroLinkList[objActive].object, retroLinkList[objActive].room); } } //-------------------------------------------------------------- DoLightObjectInfo void DoLightObjectInfo (void) { DialogPtr infoDial; Str255 numberStr, kindStr; short item, initial; Boolean leaving, doReturn; ModalFilterUPP lightFilterUPP; lightFilterUPP = NewModalFilterUPP(LightFilter); NumToString(objActive + 1, numberStr); GetIndString(kindStr, kObjectNameStrings, thisRoom->objects[objActive].what); ParamText(numberStr, kindStr, "\p", "\p"); // CenterDialog(kLightInfoDialogID); infoDial = GetNewDialog(kLightInfoDialogID, nil, kPutInFront); if (infoDial == nil) RedAlert(kErrDialogDidntLoad); SetPort((GrafPtr)infoDial); if (thisRoom->objects[objActive].data.f.initial) SetDialogItemValue(infoDial, kInitialStateCheckbox, 1); else SetDialogItemValue(infoDial, kInitialStateCheckbox, 0); if (retroLinkList[objActive].room == -1) HideDialogItem(infoDial, 8); ShowWindow(GetDialogWindow(infoDial)); leaving = false; doReturn = false; while (!leaving) { ModalDialog(lightFilterUPP, &item); if (item == kOkayButton) { GetDialogItemValue(infoDial, kInitialStateCheckbox, &initial); if (initial == 1) thisRoom->objects[objActive].data.f.initial = true; else thisRoom->objects[objActive].data.f.initial = false; ReadyBackground(thisRoom->background, thisRoom->tiles); DrawThisRoomsObjects(); InvalWindowRect(mainWindow, &mainWindowRect); fileDirty = true; UpdateMenus(false); leaving = true; } else if (item == kCancelButton) leaving = true; else if (item == kInitialStateCheckbox) ToggleDialogItemValue(infoDial, kInitialStateCheckbox); else if (item == 8) // Linked From? button. { GetDialogItemValue(infoDial, kInitialStateCheckbox, &initial); if (initial == 1) thisRoom->objects[objActive].data.f.initial = true; else thisRoom->objects[objActive].data.f.initial = false; ReadyBackground(thisRoom->background, thisRoom->tiles); DrawThisRoomsObjects(); InvalWindowRect(mainWindow, &mainWindowRect); fileDirty = true; UpdateMenus(false); leaving = true; doReturn = true; } } DisposeDialog(infoDial); DisposeModalFilterUPP(lightFilterUPP); if (doReturn) { GoToObjectInRoomNum(retroLinkList[objActive].object, retroLinkList[objActive].room); } } //-------------------------------------------------------------- DoApplianceObjectInfo void DoApplianceObjectInfo (short what) { DialogPtr infoDial; Str255 numberStr, kindStr; long delay; short item, initial; Boolean leaving, doReturn; ModalFilterUPP applianceFilterUPP; applianceFilterUPP = NewModalFilterUPP(ApplianceFilter); NumToString(objActive + 1, numberStr); GetIndString(kindStr, kObjectNameStrings, thisRoom->objects[objActive].what); ParamText(numberStr, kindStr, "\p", "\p"); BringUpDialog(&infoDial, kApplianceInfoDialogID); if (retroLinkList[objActive].room == -1) HideDialogItem(infoDial, 10); if (thisRoom->objects[objActive].data.g.initial) SetDialogItemValue(infoDial, kInitialStateCheckbox, 1); else SetDialogItemValue(infoDial, kInitialStateCheckbox, 0); if ((what == kShredder) || (what == kMacPlus) || (what == kTV) || (what == kCoffee) || (what == kVCR) || (what == kMicrowave)) { HideDialogItem(infoDial, kDelayItem); HideDialogItem(infoDial, kDelayLabelItem); } delay = thisRoom->objects[objActive].data.g.delay; SetDialogNumToStr(infoDial, kDelayItem, (long)delay); SelectDialogItemText(infoDial, kDelayItem, 0, 1024); leaving = false; doReturn = false; while (!leaving) { ModalDialog(applianceFilterUPP, &item); if (item == kOkayButton) { GetDialogNumFromStr(infoDial, kDelayItem, &delay); if ((delay < 0L) || (delay > 255L)) { SysBeep(0); delay = thisRoom->objects[objActive].data.g.delay; SetDialogNumToStr(infoDial, kDelayItem, (long)delay); SelectDialogItemText(infoDial, kDelayItem, 0, 1024); } else { thisRoom->objects[objActive].data.g.delay = (Byte)delay; GetDialogItemValue(infoDial, kInitialStateCheckbox, &initial); if (initial == 1) thisRoom->objects[objActive].data.g.initial = true; else thisRoom->objects[objActive].data.g.initial = false; fileDirty = true; UpdateMenus(false); InvalWindowRect(mainWindow, &mainWindowRect); GetThisRoomsObjRects(); ReadyBackground(thisRoom->background, thisRoom->tiles); DrawThisRoomsObjects(); leaving = true; } } else if (item == kCancelButton) leaving = true; else if (item == kInitialStateCheckbox) ToggleDialogItemValue(infoDial, kInitialStateCheckbox); else if (item == 10) // Linked From? button. { GetDialogNumFromStr(infoDial, kDelayItem, &delay); if ((delay < 0L) || (delay > 255L)) { SysBeep(0); delay = thisRoom->objects[objActive].data.g.delay; SetDialogNumToStr(infoDial, kDelayItem, (long)delay); SelectDialogItemText(infoDial, kDelayItem, 0, 1024); } else { thisRoom->objects[objActive].data.g.delay = (Byte)delay; GetDialogItemValue(infoDial, kInitialStateCheckbox, &initial); if (initial == 1) thisRoom->objects[objActive].data.g.initial = true; else thisRoom->objects[objActive].data.g.initial = false; fileDirty = true; UpdateMenus(false); InvalWindowRect(mainWindow, &mainWindowRect); GetThisRoomsObjRects(); ReadyBackground(thisRoom->background, thisRoom->tiles); DrawThisRoomsObjects(); leaving = true; doReturn = true; } } } DisposeDialog(infoDial); DisposeModalFilterUPP(applianceFilterUPP); if (doReturn) { GoToObjectInRoomNum(retroLinkList[objActive].object, retroLinkList[objActive].room); } } //-------------------------------------------------------------- DoMicrowaveObjectInfo void DoMicrowaveObjectInfo (void) { DialogPtr infoDial; Str255 numberStr, kindStr; short item, initial, kills; Boolean leaving, doReturn; ModalFilterUPP microwaveFilterUPP; microwaveFilterUPP = NewModalFilterUPP(MicrowaveFilter); NumToString(objActive + 1, numberStr); GetIndString(kindStr, kObjectNameStrings, thisRoom->objects[objActive].what); ParamText(numberStr, kindStr, "\p", "\p"); BringUpDialog(&infoDial, kMicrowaveInfoDialogID); if (retroLinkList[objActive].room == -1) HideDialogItem(infoDial, 11); if (thisRoom->objects[objActive].data.g.initial) SetDialogItemValue(infoDial, kInitialStateCheckbox, 1); else SetDialogItemValue(infoDial, kInitialStateCheckbox, 0); kills = (short)thisRoom->objects[objActive].data.g.byte0; if ((kills & 0x0001) == 0x0001) SetDialogItemValue(infoDial, kKillBandsCheckbox, 1); else SetDialogItemValue(infoDial, kKillBandsCheckbox, 0); if ((kills & 0x0002) == 0x0002) SetDialogItemValue(infoDial, kKillBatteryCheckbox, 1); else SetDialogItemValue(infoDial, kKillBatteryCheckbox, 0); if ((kills & 0x0004) == 0x0004) SetDialogItemValue(infoDial, kKillFoilCheckbox, 1); else SetDialogItemValue(infoDial, kKillFoilCheckbox, 0); leaving = false; doReturn = false; while (!leaving) { ModalDialog(microwaveFilterUPP, &item); if (item == kOkayButton) { GetDialogItemValue(infoDial, kInitialStateCheckbox, &initial); if (initial == 1) thisRoom->objects[objActive].data.g.initial = true; else thisRoom->objects[objActive].data.g.initial = false; kills = 0; GetDialogItemValue(infoDial, kKillBandsCheckbox, &initial); if (initial == 1) kills += 1; GetDialogItemValue(infoDial, kKillBatteryCheckbox, &initial); if (initial == 1) kills += 2; GetDialogItemValue(infoDial, kKillFoilCheckbox, &initial); if (initial == 1) kills += 4; thisRoom->objects[objActive].data.g.byte0 = (Byte)kills; fileDirty = true; UpdateMenus(false); InvalWindowRect(mainWindow, &mainWindowRect); GetThisRoomsObjRects(); ReadyBackground(thisRoom->background, thisRoom->tiles); DrawThisRoomsObjects(); leaving = true; } else if (item == kCancelButton) leaving = true; else if (item == kInitialStateCheckbox) ToggleDialogItemValue(infoDial, kInitialStateCheckbox); else if (item == kKillBandsCheckbox) ToggleDialogItemValue(infoDial, kKillBandsCheckbox); else if (item == kKillBatteryCheckbox) ToggleDialogItemValue(infoDial, kKillBatteryCheckbox); else if (item == kKillFoilCheckbox) ToggleDialogItemValue(infoDial, kKillFoilCheckbox); else if (item == 11) // Linked From? button. { GetDialogItemValue(infoDial, kInitialStateCheckbox, &initial); if (initial == 1) thisRoom->objects[objActive].data.g.initial = true; else thisRoom->objects[objActive].data.g.initial = false; kills = 0; GetDialogItemValue(infoDial, kKillBandsCheckbox, &initial); if (initial == 1) kills += 1; GetDialogItemValue(infoDial, kKillBatteryCheckbox, &initial); if (initial == 1) kills += 2; GetDialogItemValue(infoDial, kKillFoilCheckbox, &initial); if (initial == 1) kills += 4; thisRoom->objects[objActive].data.g.byte0 = (Byte)kills; fileDirty = true; UpdateMenus(false); InvalWindowRect(mainWindow, &mainWindowRect); GetThisRoomsObjRects(); ReadyBackground(thisRoom->background, thisRoom->tiles); DrawThisRoomsObjects(); leaving = true; doReturn = true; } } DisposeDialog(infoDial); DisposeModalFilterUPP(microwaveFilterUPP); if (doReturn) { GoToObjectInRoomNum(retroLinkList[objActive].object, retroLinkList[objActive].room); } } //-------------------------------------------------------------- DoGreaseObjectInfo void DoGreaseObjectInfo (void) { DialogPtr infoDial; Str255 numberStr, kindStr; short item; Boolean leaving, wasSpilled, doReturn; ModalFilterUPP greaseFilterUPP; greaseFilterUPP = NewModalFilterUPP(GreaseFilter); NumToString(objActive + 1, numberStr); GetIndString(kindStr, kObjectNameStrings, thisRoom->objects[objActive].what); ParamText(numberStr, kindStr, "\p", "\p"); BringUpDialog(&infoDial, kGreaseInfoDialogID); if (retroLinkList[objActive].room == -1) HideDialogItem(infoDial, 8); wasSpilled = !(thisRoom->objects[objActive].data.c.initial); SetDialogItemValue(infoDial, kGreaseItem, (short)wasSpilled); leaving = false; doReturn = false; while (!leaving) { ModalDialog(greaseFilterUPP, &item); if (item == kOkayButton) { thisRoom->objects[objActive].data.c.initial = !wasSpilled; fileDirty = true; UpdateMenus(false); InvalWindowRect(mainWindow, &mainWindowRect); GetThisRoomsObjRects(); ReadyBackground(thisRoom->background, thisRoom->tiles); DrawThisRoomsObjects(); leaving = true; } else if (item == kCancelButton) { leaving = true; } else if (item == kGreaseItem) { wasSpilled = !wasSpilled; SetDialogItemValue(infoDial, kGreaseItem, (short)wasSpilled); } else if (item == 8) // Linked From? button. { thisRoom->objects[objActive].data.c.initial = !wasSpilled; fileDirty = true; UpdateMenus(false); InvalWindowRect(mainWindow, &mainWindowRect); GetThisRoomsObjRects(); ReadyBackground(thisRoom->background, thisRoom->tiles); DrawThisRoomsObjects(); leaving = true; doReturn = true; } } DisposeDialog(infoDial); DisposeModalFilterUPP(greaseFilterUPP); if (doReturn) { GoToObjectInRoomNum(retroLinkList[objActive].object, retroLinkList[objActive].room); } } //-------------------------------------------------------------- DoInvisBonusObjectInfo void DoInvisBonusObjectInfo (void) { DialogPtr infoDial; Str255 numberStr, kindStr; short item; Boolean leaving, doReturn; ModalFilterUPP invisBonusFilterUPP; invisBonusFilterUPP = NewModalFilterUPP(InvisBonusFilter); NumToString(objActive + 1, numberStr); GetIndString(kindStr, kObjectNameStrings, thisRoom->objects[objActive].what); ParamText(numberStr, kindStr, "\p", "\p"); switch (thisRoom->objects[objActive].data.c.points) { case 300: newPoint = 1; break; case 500: newPoint = 2; break; default: newPoint = 0; break; } BringUpDialog(&infoDial, kInvisBonusInfoDialogID); if (retroLinkList[objActive].room == -1) HideDialogItem(infoDial, 9); leaving = false; doReturn = false; while (!leaving) { ModalDialog(invisBonusFilterUPP, &item); if (item == kOkayButton) { switch (newPoint) { case 0: thisRoom->objects[objActive].data.c.points = 100; break; case 1: thisRoom->objects[objActive].data.c.points = 300; break; case 2: thisRoom->objects[objActive].data.c.points = 500; break; } fileDirty = true; UpdateMenus(false); leaving = true; } else if (item == kCancelButton) leaving = true; else if (item == k100PtRadio) { SelectFromRadioGroup(infoDial, item, k100PtRadio, k500PtRadio); newPoint = 0; } else if (item == k300PtRadio) { SelectFromRadioGroup(infoDial, item, k100PtRadio, k500PtRadio); newPoint = 1; } else if (item == k500PtRadio) { SelectFromRadioGroup(infoDial, item, k100PtRadio, k500PtRadio); newPoint = 2; } else if (item == 9) // Linked From? button. { switch (newPoint) { case 0: thisRoom->objects[objActive].data.c.points = 100; break; case 1: thisRoom->objects[objActive].data.c.points = 300; break; case 2: thisRoom->objects[objActive].data.c.points = 500; break; } fileDirty = true; UpdateMenus(false); leaving = true; doReturn = true; } } DisposeDialog(infoDial); DisposeModalFilterUPP(invisBonusFilterUPP); if (doReturn) { GoToObjectInRoomNum(retroLinkList[objActive].object, retroLinkList[objActive].room); } } //-------------------------------------------------------------- DoTransObjectInfo void DoTransObjectInfo (short what) { DialogPtr infoDial; Str255 numberStr, kindStr, roomStr, tempStr, objStr; short item, floor, suite; Boolean leaving, doLink, doGoTo, doReturn, wasState; ModalFilterUPP transFilterUPP; transFilterUPP = NewModalFilterUPP(TransFilter); NumToString(objActive + 1, numberStr); GetIndString(kindStr, kObjectNameStrings, thisRoom->objects[objActive].what); if (thisRoom->objects[objActive].data.d.where == -1) PasStringCopy("\pnone", roomStr); else { ExtractFloorSuite(thisRoom->objects[objActive].data.d.where, &floor, &suite); NumToString((long)floor, roomStr); PasStringConcat(roomStr, "\p / "); NumToString((long)suite, tempStr); PasStringConcat(roomStr, tempStr); } if (thisRoom->objects[objActive].data.d.who == 255) PasStringCopy("\pnone", objStr); else NumToString((long)thisRoom->objects[objActive].data.d.who + 1, objStr); ParamText(numberStr, kindStr, roomStr, objStr); BringUpDialog(&infoDial, kTransInfoDialogID); if (retroLinkList[objActive].room == -1) HideDialogItem(infoDial, 12); if (what != kDeluxeTrans) HideDialogItem(infoDial, kInitialStateCheckbox3); else { wasState = (thisRoom->objects[objActive].data.d.wide & 0xF0) >> 4; SetDialogItemValue(infoDial, kInitialStateCheckbox3, (short)wasState); } leaving = false; doLink = false; doGoTo = false; doReturn = false; if (thisRoom->objects[objActive].data.d.who == 255) MyDisableControl(infoDial, kGotoButton1); while (!leaving) { ModalDialog(transFilterUPP, &item); if (item == kOkayButton) { if (what == kDeluxeTrans) thisRoom->objects[objActive].data.d.wide = wasState << 4; fileDirty = true; UpdateMenus(false); leaving = true; } else if (item == kCancelButton) leaving = true; else if (item == kLinkTransButton) { if (what == kDeluxeTrans) thisRoom->objects[objActive].data.d.wide = wasState << 4; fileDirty = true; UpdateMenus(false); leaving = true; doLink = true; } else if (item == kGotoButton1) { if (what == kDeluxeTrans) thisRoom->objects[objActive].data.d.wide = wasState << 4; fileDirty = true; UpdateMenus(false); leaving = true; doGoTo = true; } else if (item == 12) // Linked From? button. { if (what == kDeluxeTrans) thisRoom->objects[objActive].data.d.wide = wasState << 4; fileDirty = true; UpdateMenus(false); leaving = true; doReturn = true; } else if (item == kInitialStateCheckbox3) { wasState = !wasState; SetDialogItemValue(infoDial, kInitialStateCheckbox3, (short)wasState); } } DisposeDialog(infoDial); DisposeModalFilterUPP(transFilterUPP); if (doLink) { linkType = kTransportLinkOnly; linkerIsSwitch = false; OpenLinkWindow(); linkRoom = thisRoomNumber; linkObject = (Byte)objActive; DeselectObject(); } else if (doGoTo) { GoToObjectInRoom((short)thisRoom->objects[objActive].data.d.who, floor, suite); } else if (doReturn) { GoToObjectInRoomNum(retroLinkList[objActive].object, retroLinkList[objActive].room); } } //-------------------------------------------------------------- DoEnemyObjectInfo void DoEnemyObjectInfo (short what) { DialogPtr infoDial; Str255 numberStr, kindStr; long delay; short item, initial; Boolean leaving, doReturn; ModalFilterUPP enemyFilterUPP; enemyFilterUPP = NewModalFilterUPP(EnemyFilter); NumToString(objActive + 1, numberStr); GetIndString(kindStr, kObjectNameStrings, thisRoom->objects[objActive].what); ParamText(numberStr, kindStr, "\p", "\p"); BringUpDialog(&infoDial, kEnemyInfoDialogID); if (retroLinkList[objActive].room == -1) HideDialogItem(infoDial, 11); delay = thisRoom->objects[objActive].data.h.delay; SetDialogNumToStr(infoDial, kDelay2Item, (long)delay); SelectDialogItemText(infoDial, kDelay2Item, 0, 1024); if (thisRoom->objects[objActive].data.h.initial) SetDialogItemValue(infoDial, kInitialStateCheckbox2, 1); else SetDialogItemValue(infoDial, kInitialStateCheckbox2, 0); if (what == kBall) { HideDialogItem(infoDial, kDelay2Item); HideDialogItem(infoDial, 8); HideDialogItem(infoDial, 9); } leaving = false; doReturn = false; while (!leaving) { ModalDialog(enemyFilterUPP, &item); if (item == kOkayButton) { GetDialogNumFromStr(infoDial, kDelay2Item, &delay); if (((delay < 0L) || (delay > 255L)) && (what != kBall)) { SysBeep(0); delay = thisRoom->objects[objActive].data.h.delay; SetDialogNumToStr(infoDial, kDelay2Item, (long)delay); SelectDialogItemText(infoDial, kDelay2Item, 0, 1024); } else { GetDialogItemValue(infoDial, kInitialStateCheckbox2, &initial); if (initial == 1) thisRoom->objects[objActive].data.h.initial = true; else thisRoom->objects[objActive].data.h.initial = false; if (what != kBall) thisRoom->objects[objActive].data.h.delay = (Byte)delay; fileDirty = true; UpdateMenus(false); leaving = true; } } else if (item == kCancelButton) leaving = true; else if (item == kInitialStateCheckbox2) ToggleDialogItemValue(infoDial, kInitialStateCheckbox2); else if (item == 11) // Linked From? button. { GetDialogNumFromStr(infoDial, kDelay2Item, &delay); if (((delay < 0L) || (delay > 255L)) && (what != kBall)) { SysBeep(0); delay = thisRoom->objects[objActive].data.h.delay; SetDialogNumToStr(infoDial, kDelay2Item, (long)delay); SelectDialogItemText(infoDial, kDelay2Item, 0, 1024); } else { GetDialogItemValue(infoDial, kInitialStateCheckbox2, &initial); if (initial == 1) thisRoom->objects[objActive].data.h.initial = true; else thisRoom->objects[objActive].data.h.initial = false; if (what != kBall) thisRoom->objects[objActive].data.h.delay = (Byte)delay; fileDirty = true; UpdateMenus(false); leaving = true; doReturn = true; } } } DisposeDialog(infoDial); DisposeModalFilterUPP(enemyFilterUPP); if (doReturn) { GoToObjectInRoomNum(retroLinkList[objActive].object, retroLinkList[objActive].room); } } //-------------------------------------------------------------- DoFlowerObjectInfo void DoFlowerObjectInfo (void) { DialogPtr infoDial; Str255 numberStr, kindStr; short item, flower; Boolean leaving, doReturn; ModalFilterUPP flowerFilterUPP; flowerFilterUPP = NewModalFilterUPP(FlowerFilter); NumToString(objActive + 1, numberStr); GetIndString(kindStr, kObjectNameStrings, thisRoom->objects[objActive].what); ParamText(numberStr, kindStr, "\p", "\p"); BringUpDialog(&infoDial, kFlowerInfoDialogID); if (retroLinkList[objActive].room == -1) HideDialogItem(infoDial, 13); flower = thisRoom->objects[objActive].data.i.pict + kRadioFlower1; SelectFromRadioGroup(infoDial, flower, kRadioFlower1, kRadioFlower6); leaving = false; doReturn = false; while (!leaving) { ModalDialog(flowerFilterUPP, &item); if (item == kOkayButton) { flower -= kRadioFlower1; if (flower != thisRoom->objects[objActive].data.i.pict) { InvalWindowRect(mainWindow, &thisRoom->objects[objActive].data.i.bounds); thisRoom->objects[objActive].data.i.bounds.right = thisRoom->objects[objActive].data.i.bounds.left + RectWide(&flowerSrc[flower]); thisRoom->objects[objActive].data.i.bounds.top = thisRoom->objects[objActive].data.i.bounds.bottom - RectTall(&flowerSrc[flower]); thisRoom->objects[objActive].data.i.pict = flower; InvalWindowRect(mainWindow, &thisRoom->objects[objActive].data.i.bounds); GetThisRoomsObjRects(); ReadyBackground(thisRoom->background, thisRoom->tiles); DrawThisRoomsObjects(); fileDirty = true; UpdateMenus(false); wasFlower = flower; } leaving = true; } else if ((item >= kRadioFlower1) && (item <= kRadioFlower6)) { flower = item; SelectFromRadioGroup(infoDial, flower, kRadioFlower1, kRadioFlower6); } else if (item == kFlowerCancel) { leaving = true; } else if (item == 13) // Linked From? button. { flower -= kRadioFlower1; if (flower != thisRoom->objects[objActive].data.i.pict) { InvalWindowRect(mainWindow, &thisRoom->objects[objActive].data.i.bounds); thisRoom->objects[objActive].data.i.bounds.right = thisRoom->objects[objActive].data.i.bounds.left + RectWide(&flowerSrc[flower]); thisRoom->objects[objActive].data.i.bounds.top = thisRoom->objects[objActive].data.i.bounds.bottom - RectTall(&flowerSrc[flower]); thisRoom->objects[objActive].data.i.pict = flower; InvalWindowRect(mainWindow, &thisRoom->objects[objActive].data.i.bounds); GetThisRoomsObjRects(); ReadyBackground(thisRoom->background, thisRoom->tiles); DrawThisRoomsObjects(); fileDirty = true; UpdateMenus(false); wasFlower = flower; } leaving = true; doReturn = true; } } DisposeDialog(infoDial); DisposeModalFilterUPP(flowerFilterUPP); if (doReturn) { GoToObjectInRoomNum(retroLinkList[objActive].object, retroLinkList[objActive].room); } } //-------------------------------------------------------------- DoObjectInfo void DoObjectInfo (void) { if ((objActive == kInitialGliderSelected) || (objActive == kLeftGliderSelected) || (objActive == kRightGliderSelected)) { DoFurnitureObjectInfo(); return; } switch (thisRoom->objects[objActive].what) { case kFloorVent: case kCeilingVent: case kFloorBlower: case kCeilingBlower: case kSewerGrate: case kLeftFan: case kRightFan: case kTaper: case kCandle: case kStubby: case kTiki: case kBBQ: case kInvisBlower: case kGrecoVent: case kSewerBlower: case kLiftArea: DoBlowerObjectInfo(thisRoom->objects[objActive].what); break; case kTable: case kShelf: case kCabinet: case kFilingCabinet: case kWasteBasket: case kMilkCrate: case kCounter: case kDresser: case kDeckTable: case kStool: case kTrunk: case kInvisObstacle: case kManhole: case kBooks: case kInvisBounce: case kRedClock: case kBlueClock: case kYellowClock: case kCuckoo: case kPaper: case kBattery: case kBands: case kFoil: case kStar: case kSparkle: case kHelium: case kSlider: case kUpStairs: case kDownStairs: case kDoorInLf: case kDoorInRt: case kDoorExRt: case kDoorExLf: case kWindowInLf: case kWindowInRt: case kWindowExRt: case kWindowExLf: case kCinderBlock: case kFlowerBox: case kCDs: case kGuitar: case kStereo: case kCobweb: case kOzma: case kMirror: case kMousehole: case kFireplace: case kWallWindow: case kBear: case kCalendar: case kVase1: case kVase2: case kBulletin: case kCloud: case kFaucet: case kRug: case kChimes: DoFurnitureObjectInfo(); break; case kGreaseRt: case kGreaseLf: DoGreaseObjectInfo(); break; case kInvisBonus: DoInvisBonusObjectInfo(); break; case kMailboxLf: case kMailboxRt: case kFloorTrans: case kCeilingTrans: case kInvisTrans: case kDeluxeTrans: DoTransObjectInfo(thisRoom->objects[objActive].what); break; case kLightSwitch: case kMachineSwitch: case kThermostat: case kPowerSwitch: case kKnifeSwitch: case kInvisSwitch: DoSwitchObjectInfo(); break; case kTrigger: case kLgTrigger: DoTriggerObjectInfo(); break; case kCeilingLight: case kLightBulb: case kTableLamp: case kHipLamp: case kDecoLamp: case kFlourescent: case kTrackLight: case kInvisLight: DoLightObjectInfo(); break; case kShredder: case kToaster: case kMacPlus: case kTV: case kCoffee: case kOutlet: case kVCR: DoApplianceObjectInfo(thisRoom->objects[objActive].what); break; case kMicrowave: DoMicrowaveObjectInfo(); break; case kBalloon: case kCopterLf: case kCopterRt: case kDartLf: case kDartRt: case kBall: case kDrip: case kFish: DoEnemyObjectInfo(thisRoom->objects[objActive].what); break; case kFlower: DoFlowerObjectInfo(); break; case kSoundTrigger: case kCustomPict: DoCustPictObjectInfo(); break; default: SysBeep(1); break; } } #endif \ No newline at end of file diff --git a/Sources/ObjectRects.c b/Sources/ObjectRects.c deleted file mode 100755 index 1ada2f5..0000000 --- a/Sources/ObjectRects.c +++ /dev/null @@ -1 +0,0 @@ - //============================================================================ //---------------------------------------------------------------------------- // ObjectRects.c //---------------------------------------------------------------------------- //============================================================================ #include "Externs.h" #include "RectUtils.h" #define kFloorColumnWide 4 #define kCeilingColumnWide 24 #define kFanColumnThick 16 #define kFanColumnDown 20 #define kDeadlyFlameHeight 24 #define kStoolThick 25 #define kShredderActiveHigh 40 short AddActiveRect (Rect *, short, short, Boolean, Boolean); extern hotPtr hotSpots; extern short nHotSpots, numChimes; //============================================================== Functions //-------------------------------------------------------------- GetObjectRect void GetObjectRect (objectPtr who, Rect *itsRect) { PicHandle thePict; short wide, tall; switch (who->what) { case kObjectIsEmpty: QSetRect(itsRect, 0, 0, 0, 0); break; case kFloorVent: case kCeilingVent: case kFloorBlower: case kCeilingBlower: case kSewerGrate: case kLeftFan: case kRightFan: case kTaper: case kCandle: case kStubby: case kTiki: case kBBQ: case kInvisBlower: case kGrecoVent: case kSewerBlower: *itsRect = srcRects[who->what]; ZeroRectCorner(itsRect); QOffsetRect(itsRect, who->data.a.topLeft.h, who->data.a.topLeft.v); break; case kLiftArea: QSetRect(itsRect, 0, 0, who->data.a.distance, who->data.a.tall * 2); QOffsetRect(itsRect, who->data.a.topLeft.h, who->data.a.topLeft.v); break; *itsRect = srcRects[who->what]; ZeroRectCorner(itsRect); QOffsetRect(itsRect, who->data.a.topLeft.h, who->data.a.topLeft.v); break; case kTable: case kShelf: case kCabinet: case kFilingCabinet: case kWasteBasket: case kMilkCrate: case kCounter: case kDresser: case kStool: case kTrunk: case kDeckTable: case kInvisObstacle: case kManhole: case kBooks: case kInvisBounce: *itsRect = who->data.b.bounds; break; case kRedClock: case kBlueClock: case kYellowClock: case kCuckoo: case kPaper: case kBattery: case kBands: case kGreaseRt: case kGreaseLf: case kFoil: case kInvisBonus: case kStar: case kSparkle: case kHelium: *itsRect = srcRects[who->what]; ZeroRectCorner(itsRect); QOffsetRect(itsRect, who->data.c.topLeft.h, who->data.c.topLeft.v); break; case kSlider: *itsRect = srcRects[who->what]; ZeroRectCorner(itsRect); QOffsetRect(itsRect, who->data.c.topLeft.h, who->data.c.topLeft.v); itsRect->right = itsRect->left + who->data.c.length; break; case kUpStairs: case kDownStairs: case kMailboxLf: case kMailboxRt: case kFloorTrans: case kCeilingTrans: case kDoorInLf: case kDoorInRt: case kDoorExRt: case kDoorExLf: case kWindowInLf: case kWindowInRt: case kWindowExRt: case kWindowExLf: *itsRect = srcRects[who->what]; ZeroRectCorner(itsRect); QOffsetRect(itsRect, who->data.d.topLeft.h, who->data.d.topLeft.v); break; case kInvisTrans: *itsRect = srcRects[who->what]; ZeroRectCorner(itsRect); QOffsetRect(itsRect, who->data.d.topLeft.h, who->data.d.topLeft.v); itsRect->bottom = itsRect->top + who->data.d.tall; itsRect->right += (short)who->data.d.wide; break; case kDeluxeTrans: wide = (who->data.d.tall & 0xFF00) >> 8; // Get high byte tall = who->data.d.tall & 0x00FF; // Get low byte QSetRect(itsRect, 0, 0, wide * 4, tall * 4); // Scale by 4 QOffsetRect(itsRect, who->data.d.topLeft.h, who->data.d.topLeft.v); break; case kLightSwitch: case kMachineSwitch: case kThermostat: case kPowerSwitch: case kKnifeSwitch: case kInvisSwitch: case kTrigger: case kLgTrigger: case kSoundTrigger: *itsRect = srcRects[who->what]; ZeroRectCorner(itsRect); QOffsetRect(itsRect, who->data.e.topLeft.h, who->data.e.topLeft.v); break; case kCeilingLight: case kLightBulb: case kTableLamp: case kHipLamp: case kDecoLamp: case kInvisLight: *itsRect = srcRects[who->what]; ZeroRectCorner(itsRect); QOffsetRect(itsRect, who->data.f.topLeft.h, who->data.f.topLeft.v); break; case kFlourescent: case kTrackLight: *itsRect = srcRects[who->what]; ZeroRectCorner(itsRect); itsRect->right = who->data.f.length; QOffsetRect(itsRect, who->data.f.topLeft.h, who->data.f.topLeft.v); break; case kShredder: case kToaster: case kMacPlus: case kGuitar: case kTV: case kCoffee: case kOutlet: case kVCR: case kStereo: case kMicrowave: case kCinderBlock: case kFlowerBox: case kCDs: *itsRect = srcRects[who->what]; ZeroRectCorner(itsRect); QOffsetRect(itsRect, who->data.g.topLeft.h, who->data.g.topLeft.v); break; case kCustomPict: thePict = GetPicture(who->data.g.height); if (thePict == nil) { who->data.g.height = 10000; *itsRect = srcRects[who->what]; } else { HLock((Handle)thePict); *itsRect = (*thePict)->picFrame; HUnlock((Handle)thePict); } ZeroRectCorner(itsRect); QOffsetRect(itsRect, who->data.g.topLeft.h, who->data.g.topLeft.v); break; case kBalloon: case kCopterLf: case kCopterRt: case kDartLf: case kDartRt: case kBall: case kDrip: case kFish: case kCobweb: *itsRect = srcRects[who->what]; ZeroRectCorner(itsRect); QOffsetRect(itsRect, who->data.h.topLeft.h, who->data.h.topLeft.v); break; case kOzma: case kMirror: case kMousehole: case kFireplace: case kFlower: case kWallWindow: case kBear: case kCalendar: case kVase1: case kVase2: case kBulletin: case kCloud: case kFaucet: case kRug: case kChimes: *itsRect = who->data.i.bounds; break; } } //-------------------------------------------------------------- AddActiveRect short AddActiveRect (Rect *bounds, short action, short who, Boolean isOn, Boolean doScrutinize) { if (nHotSpots >= kMaxHotSpots) return (-1); hotSpots[nHotSpots].bounds = *bounds; // the active rect hotSpots[nHotSpots].action = action; // what it does hotSpots[nHotSpots].who = who; // local obj. linked to hotSpots[nHotSpots].isOn = isOn; // is it active? hotSpots[nHotSpots].stillOver = false; hotSpots[nHotSpots].doScrutinize = doScrutinize; nHotSpots++; return (nHotSpots - 1); } //-------------------------------------------------------------- CreateActiveRects short CreateActiveRects (short who) { objectType theObject; Rect bounds; short hotSpotNumber, wide, tall; Boolean isOn; hotSpotNumber = -1; theObject = masterObjects[who].theObject; switch (theObject.what) { case kObjectIsEmpty: break; case kFloorVent: QSetRect(&bounds, 0, -theObject.data.a.distance, kFloorColumnWide, 0); QOffsetRect(&bounds, HalfRectWide(&srcRects[kFloorVent]) - kFloorColumnWide / 2, 0); QOffsetRect(&bounds, theObject.data.a.topLeft.h, theObject.data.a.topLeft.v); hotSpotNumber = AddActiveRect(&bounds, kLiftIt, who, theObject.data.a.state, false); break; case kCeilingVent: QSetRect(&bounds, 0, 0, kCeilingColumnWide, theObject.data.a.distance); QOffsetRect(&bounds, HalfRectWide(&srcRects[kCeilingVent]) - kCeilingColumnWide / 2, 0); QOffsetRect(&bounds, theObject.data.a.topLeft.h, theObject.data.a.topLeft.v); hotSpotNumber = AddActiveRect(&bounds, kDropIt, who, theObject.data.a.state, false); break; case kFloorBlower: QSetRect(&bounds, 0, -theObject.data.a.distance, kFloorColumnWide, 0); QOffsetRect(&bounds, HalfRectWide(&srcRects[kFloorBlower]) - kFloorColumnWide / 2, 0); QOffsetRect(&bounds, theObject.data.a.topLeft.h, theObject.data.a.topLeft.v); hotSpotNumber = AddActiveRect(&bounds, kLiftIt, who, theObject.data.a.state, false); break; case kCeilingBlower: QSetRect(&bounds, 0, 0, kCeilingColumnWide, theObject.data.a.distance); QOffsetRect(&bounds, HalfRectWide(&srcRects[kCeilingBlower]) - kCeilingColumnWide / 2, 0); QOffsetRect(&bounds, theObject.data.a.topLeft.h, theObject.data.a.topLeft.v); hotSpotNumber = AddActiveRect(&bounds, kDropIt, who, theObject.data.a.state, false); break; case kSewerGrate: QSetRect(&bounds, 0, -theObject.data.a.distance, kFloorColumnWide, 0); QOffsetRect(&bounds, HalfRectWide(&srcRects[kSewerGrate]) - kFloorColumnWide / 2, 0); QOffsetRect(&bounds, theObject.data.a.topLeft.h, theObject.data.a.topLeft.v); hotSpotNumber = AddActiveRect(&bounds, kLiftIt, who, theObject.data.a.state, false); break; case kLeftFan: QSetRect(&bounds, 0, 0, 13, 43); QOffsetRect(&bounds, theObject.data.a.topLeft.h + 16, theObject.data.a.topLeft.v + 12); hotSpotNumber = AddActiveRect(&bounds, kDissolveIt, who, true, true); QSetRect(&bounds, 0, 0, theObject.data.a.distance, kFanColumnThick); QOffsetRect(&bounds, -(theObject.data.a.distance), kFanColumnDown); QOffsetRect(&bounds, theObject.data.a.topLeft.h, theObject.data.a.topLeft.v); hotSpotNumber = AddActiveRect(&bounds, kPushItLeft, who, theObject.data.a.state, false); break; case kRightFan: QSetRect(&bounds, 0, 0, 13, 43); QOffsetRect(&bounds, theObject.data.a.topLeft.h + 6, theObject.data.a.topLeft.v + 12); hotSpotNumber = AddActiveRect(&bounds, kDissolveIt, who, true, true); QSetRect(&bounds, 0, 0, theObject.data.a.distance, kFanColumnThick); QOffsetRect(&bounds, RectWide(&srcRects[kRightFan]), kFanColumnDown); QOffsetRect(&bounds, theObject.data.a.topLeft.h, theObject.data.a.topLeft.v); hotSpotNumber = AddActiveRect(&bounds, kPushItRight, who, theObject.data.a.state, false); break; case kTaper: QSetRect(&bounds, 0, -theObject.data.a.distance, kFloorColumnWide, 0); QOffsetRect(&bounds, HalfRectWide(&srcRects[kTaper]) - kFloorColumnWide / 2, 0); QOffsetRect(&bounds, theObject.data.a.topLeft.h, theObject.data.a.topLeft.v); if ((bounds.bottom - bounds.top) > kDeadlyFlameHeight) { bounds.bottom -= kDeadlyFlameHeight; hotSpotNumber = AddActiveRect(&bounds, kLiftIt, who, true, false); bounds.bottom += kDeadlyFlameHeight; bounds.top = bounds.bottom - kDeadlyFlameHeight + 2; hotSpotNumber = AddActiveRect(&bounds, kBurnIt, who, true, false); } else hotSpotNumber = AddActiveRect(&bounds, kBurnIt, who, true, false); QSetRect(&bounds, 0, 0, 7, 48); QOffsetRect(&bounds, theObject.data.a.topLeft.h + 6, theObject.data.a.topLeft.v + 11); hotSpotNumber = AddActiveRect(&bounds, kDissolveIt, who, true, true); break; case kCandle: QSetRect(&bounds, 0, -theObject.data.a.distance, kFloorColumnWide, 0); QOffsetRect(&bounds, HalfRectWide(&srcRects[kCandle]) - kFloorColumnWide / 2, 0); QOffsetRect(&bounds, theObject.data.a.topLeft.h - 2, theObject.data.a.topLeft.v); if ((bounds.bottom - bounds.top) > kDeadlyFlameHeight) { bounds.bottom -= kDeadlyFlameHeight; hotSpotNumber = AddActiveRect(&bounds, kLiftIt, who, true, false); bounds.bottom += kDeadlyFlameHeight; bounds.top = bounds.bottom - kDeadlyFlameHeight + 2; hotSpotNumber = AddActiveRect(&bounds, kBurnIt, who, true, false); } else hotSpotNumber = AddActiveRect(&bounds, kBurnIt, who, true, false); QSetRect(&bounds, 0, 0, 8, 20); QOffsetRect(&bounds, theObject.data.a.topLeft.h + 9, theObject.data.a.topLeft.v + 11); hotSpotNumber = AddActiveRect(&bounds, kDissolveIt, who, true, true); break; case kStubby: QSetRect(&bounds, 0, -theObject.data.a.distance, kFloorColumnWide, 0); QOffsetRect(&bounds, (HalfRectWide(&srcRects[kStubby]) - kFloorColumnWide / 2) - 1, 0); QOffsetRect(&bounds, theObject.data.a.topLeft.h, theObject.data.a.topLeft.v); if ((bounds.bottom - bounds.top) > kDeadlyFlameHeight) { bounds.bottom -= kDeadlyFlameHeight; hotSpotNumber = AddActiveRect(&bounds, kLiftIt, who, true, false); bounds.bottom += kDeadlyFlameHeight; bounds.top = bounds.bottom - kDeadlyFlameHeight + 2; hotSpotNumber = AddActiveRect(&bounds, kBurnIt, who, true, false); } else hotSpotNumber = AddActiveRect(&bounds, kBurnIt, who, true, false); QSetRect(&bounds, 0, 0, 15, 26); QOffsetRect(&bounds, theObject.data.a.topLeft.h + 1, theObject.data.a.topLeft.v + 11); hotSpotNumber = AddActiveRect(&bounds, kDissolveIt, who, true, true); break; case kTiki: QSetRect(&bounds, 0, -theObject.data.a.distance, kFloorColumnWide, 0); QOffsetRect(&bounds, HalfRectWide(&srcRects[kTiki]) - kFloorColumnWide / 2, 0); QOffsetRect(&bounds, theObject.data.a.topLeft.h, theObject.data.a.topLeft.v); if ((bounds.bottom - bounds.top) > kDeadlyFlameHeight) { bounds.bottom -= kDeadlyFlameHeight; hotSpotNumber = AddActiveRect(&bounds, kLiftIt, who, true, false); bounds.bottom += kDeadlyFlameHeight; bounds.top = bounds.bottom - kDeadlyFlameHeight + 2; hotSpotNumber = AddActiveRect(&bounds, kBurnIt, who, true, false); } else hotSpotNumber = AddActiveRect(&bounds, kBurnIt, who, true, false); QSetRect(&bounds, 0, 0, 15, 14); QOffsetRect(&bounds, theObject.data.a.topLeft.h + 6, theObject.data.a.topLeft.v + 6); hotSpotNumber = AddActiveRect(&bounds, kDissolveIt, who, true, true); break; case kBBQ: QSetRect(&bounds, 0, -theObject.data.a.distance, kFloorColumnWide, 8); QOffsetRect(&bounds, HalfRectWide(&srcRects[kBBQ]) - kFloorColumnWide / 2, 0); QOffsetRect(&bounds, theObject.data.a.topLeft.h, theObject.data.a.topLeft.v); if ((bounds.bottom - bounds.top) > kDeadlyFlameHeight) { bounds.bottom -= kDeadlyFlameHeight; hotSpotNumber = AddActiveRect(&bounds, kLiftIt, who, true, false); bounds.bottom += kDeadlyFlameHeight; bounds.top = bounds.bottom - kDeadlyFlameHeight + 2; hotSpotNumber = AddActiveRect(&bounds, kBurnIt, who, true, false); } else hotSpotNumber = AddActiveRect(&bounds, kBurnIt, who, true, false); QSetRect(&bounds, 0, 0, 52, 17); QOffsetRect(&bounds, theObject.data.a.topLeft.h + 6, theObject.data.a.topLeft.v + 8); hotSpotNumber = AddActiveRect(&bounds, kDissolveIt, who, true, true); break; case kInvisBlower: switch (theObject.data.a.vector & 0x0F) { case 1: // up QSetRect(&bounds, 0, -theObject.data.a.distance - 24, kFloorColumnWide, 0); QOffsetRect(&bounds, 12 - kFloorColumnWide / 2, 24); QOffsetRect(&bounds, theObject.data.a.topLeft.h, theObject.data.a.topLeft.v); hotSpotNumber = AddActiveRect(&bounds, kLiftIt, who, theObject.data.a.state, false); break; case 2: // right QSetRect(&bounds, 0, 0, theObject.data.a.distance + 24, kFanColumnThick); QOffsetRect(&bounds, 0, 12 - kFanColumnThick / 2); QOffsetRect(&bounds, theObject.data.a.topLeft.h, theObject.data.a.topLeft.v); hotSpotNumber = AddActiveRect(&bounds, kPushItRight, who, theObject.data.a.state, false); break; case 4: // down QSetRect(&bounds, 0, 0, kFloorColumnWide, theObject.data.a.distance + 24); QOffsetRect(&bounds, 12 - kFloorColumnWide / 2, 0); QOffsetRect(&bounds, theObject.data.a.topLeft.h, theObject.data.a.topLeft.v); hotSpotNumber = AddActiveRect(&bounds, kDropIt, who, theObject.data.a.state, false); break; case 8: // left QSetRect(&bounds, 0, 0, theObject.data.a.distance + 24, kFanColumnThick); QOffsetRect(&bounds, -(theObject.data.a.distance), 12 - kFanColumnThick / 2); QOffsetRect(&bounds, theObject.data.a.topLeft.h, theObject.data.a.topLeft.v); hotSpotNumber = AddActiveRect(&bounds, kPushItLeft, who, theObject.data.a.state, false); break; } break; case kGrecoVent: QSetRect(&bounds, 0, -theObject.data.a.distance, kFloorColumnWide, 0); QOffsetRect(&bounds, HalfRectWide(&srcRects[kGrecoVent]) - kFloorColumnWide / 2, 0); QOffsetRect(&bounds, theObject.data.a.topLeft.h, theObject.data.a.topLeft.v); hotSpotNumber = AddActiveRect(&bounds, kLiftIt, who, theObject.data.a.state, false); break; case kSewerBlower: QSetRect(&bounds, 0, -theObject.data.a.distance, kFloorColumnWide, 0); QOffsetRect(&bounds, HalfRectWide(&srcRects[kSewerBlower]) - kFloorColumnWide / 2, 0); QOffsetRect(&bounds, theObject.data.a.topLeft.h, theObject.data.a.topLeft.v); hotSpotNumber = AddActiveRect(&bounds, kLiftIt, who, theObject.data.a.state, false); break; case kLiftArea: QSetRect(&bounds, 0, 0, theObject.data.a.distance, theObject.data.a.tall * 2); QOffsetRect(&bounds, theObject.data.a.topLeft.h, theObject.data.a.topLeft.v); switch (theObject.data.a.vector & 0x0F) { case 1: // up hotSpotNumber = AddActiveRect(&bounds, kLiftIt, who, theObject.data.a.state, false); break; case 2: // right hotSpotNumber = AddActiveRect(&bounds, kPushItRight, who, theObject.data.a.state, false); break; case 4: // down hotSpotNumber = AddActiveRect(&bounds, kDropIt, who, theObject.data.a.state, false); break; case 8: // left hotSpotNumber = AddActiveRect(&bounds, kPushItLeft, who, theObject.data.a.state, false); break; } break; case kTable: case kShelf: case kCabinet: case kFilingCabinet: case kWasteBasket: case kMilkCrate: case kCounter: case kDresser: case kDeckTable: case kTrunk: case kInvisObstacle: bounds = theObject.data.b.bounds; hotSpotNumber = AddActiveRect(&bounds, kDissolveIt, who, true, true); break; case kBooks: bounds = theObject.data.b.bounds; bounds.right -= 2; hotSpotNumber = AddActiveRect(&bounds, kDissolveIt, who, true, true); break; case kManhole: bounds = theObject.data.b.bounds; bounds.left += kGliderWide + 3; bounds.right -= kGliderWide + 3; bounds.top = kFloorLimit - 1; bounds.bottom = kTileHigh; hotSpotNumber = AddActiveRect(&bounds, kIgnoreGround, who, true, false); break; case kInvisBounce: bounds = theObject.data.b.bounds; hotSpotNumber = AddActiveRect(&bounds, kBounceIt, who, true, true); break; case kStool: bounds = theObject.data.b.bounds; InsetRect(&bounds, 1, 1); bounds.bottom = bounds.top + kStoolThick; hotSpotNumber = AddActiveRect(&bounds, kDissolveIt, who, true, true); break; case kRedClock: case kBlueClock: case kYellowClock: case kCuckoo: case kPaper: case kBattery: case kBands: case kFoil: case kInvisBonus: case kStar: case kHelium: bounds = srcRects[theObject.what]; ZeroRectCorner(&bounds); QOffsetRect(&bounds, theObject.data.c.topLeft.h, theObject.data.c.topLeft.v); hotSpotNumber = AddActiveRect(&bounds, kRewardIt, who, theObject.data.c.state, false); break; case kGreaseRt: if (theObject.data.c.state) { bounds = srcRects[theObject.what]; ZeroRectCorner(&bounds); QOffsetRect(&bounds, theObject.data.c.topLeft.h, theObject.data.c.topLeft.v); hotSpotNumber = AddActiveRect(&bounds, kRewardIt, who, true, false); } else { QSetRect(&bounds, 0, -2, theObject.data.c.length - 5, 0); QOffsetRect(&bounds, 32 - 1, 27); QOffsetRect(&bounds, theObject.data.c.topLeft.h, theObject.data.c.topLeft.v); hotSpotNumber = AddActiveRect(&bounds, kSlideIt, who, true, false); } break; case kGreaseLf: if (theObject.data.c.state) { bounds = srcRects[theObject.what]; ZeroRectCorner(&bounds); QOffsetRect(&bounds, theObject.data.c.topLeft.h, theObject.data.c.topLeft.v); hotSpotNumber = AddActiveRect(&bounds, kRewardIt, who, true, false); } else { QSetRect(&bounds, -theObject.data.c.length + 5, -2, 0, 0); QOffsetRect(&bounds, 1, 27); QOffsetRect(&bounds, theObject.data.c.topLeft.h, theObject.data.c.topLeft.v); hotSpotNumber = AddActiveRect(&bounds, kSlideIt, who, true, false); } break; case kSparkle: bounds = srcRects[theObject.what]; ZeroRectCorner(&bounds); QOffsetRect(&bounds, theObject.data.c.topLeft.h, theObject.data.c.topLeft.v); break; case kSlider: QSetRect(&bounds, 0, 0, theObject.data.c.length, 16); QOffsetRect(&bounds, theObject.data.c.topLeft.h, theObject.data.c.topLeft.v); hotSpotNumber = AddActiveRect(&bounds, kSlideIt, who, true, false); break; case kUpStairs: QSetRect(&bounds, 0, 0, 112, 32); QOffsetRect(&bounds, theObject.data.d.topLeft.h, theObject.data.d.topLeft.v); hotSpotNumber = AddActiveRect(&bounds, kMoveItUp, who, true, false); break; case kDownStairs: QSetRect(&bounds, -80, -56, 0, 0); QOffsetRect(&bounds, srcRects[kDownStairs].right, 170); QOffsetRect(&bounds, theObject.data.d.topLeft.h, theObject.data.d.topLeft.v); hotSpotNumber = AddActiveRect(&bounds, kMoveItDown, who, true, false); break; case kMailboxLf: if (theObject.data.d.who != 255) { QSetRect(&bounds, -72, 0, 0, 40); QOffsetRect(&bounds, 30, 16); QOffsetRect(&bounds, theObject.data.d.topLeft.h, theObject.data.d.topLeft.v); hotSpotNumber = AddActiveRect(&bounds, kMailItLeft, who, true, false); } break; case kMailboxRt: if (theObject.data.d.who != 255) { QSetRect(&bounds, 0, 0, 72, 40); QOffsetRect(&bounds, 79, 16); QOffsetRect(&bounds, theObject.data.d.topLeft.h, theObject.data.d.topLeft.v); hotSpotNumber = AddActiveRect(&bounds, kMailItRight, who, true, false); } break; case kFloorTrans: if (theObject.data.d.who != 255) { QSetRect(&bounds, 0, -48, 76, 0); QOffsetRect(&bounds, -8, RectTall(&srcRects[kFloorTrans])); QOffsetRect(&bounds, theObject.data.d.topLeft.h, theObject.data.d.topLeft.v); hotSpotNumber = AddActiveRect(&bounds, kDuctItDown, who, true, false); } break; case kCeilingTrans: if (theObject.data.d.who != 255) { QSetRect(&bounds, 0, 0, 76, 48); QOffsetRect(&bounds, -8, 0); QOffsetRect(&bounds, theObject.data.d.topLeft.h, theObject.data.d.topLeft.v); hotSpotNumber = AddActiveRect(&bounds, kDuctItUp, who, true, false); } break; case kDoorInLf: QSetRect(&bounds, 0, 0, 16, 240); QOffsetRect(&bounds, 0, 52); QOffsetRect(&bounds, theObject.data.d.topLeft.h, theObject.data.d.topLeft.v); hotSpotNumber = AddActiveRect(&bounds, kIgnoreLeftWall, who, true, false); break; case kDoorInRt: QSetRect(&bounds, 0, 0, 16, 240); QOffsetRect(&bounds, 128, 52); QOffsetRect(&bounds, theObject.data.d.topLeft.h, theObject.data.d.topLeft.v); hotSpotNumber = AddActiveRect(&bounds, kIgnoreRightWall, who, true, false); break; case kDoorExRt: QSetRect(&bounds, 0, 0, 16, 240); QOffsetRect(&bounds, 0, 52); QOffsetRect(&bounds, theObject.data.d.topLeft.h, theObject.data.d.topLeft.v); hotSpotNumber = AddActiveRect(&bounds, kIgnoreRightWall, who, true, false); break; case kDoorExLf: QSetRect(&bounds, 0, 0, 16, 240); QOffsetRect(&bounds, 0, 52); QOffsetRect(&bounds, theObject.data.d.topLeft.h, theObject.data.d.topLeft.v); hotSpotNumber = AddActiveRect(&bounds, kIgnoreLeftWall, who, true, false); break; case kWindowInLf: QSetRect(&bounds, 0, 0, 16, 44); QOffsetRect(&bounds, 0, 96); QOffsetRect(&bounds, theObject.data.d.topLeft.h, theObject.data.d.topLeft.v); hotSpotNumber = AddActiveRect(&bounds, kIgnoreLeftWall, who, true, false); break; case kWindowInRt: QSetRect(&bounds, 0, 0, 16, 44); QOffsetRect(&bounds, 4, 96); QOffsetRect(&bounds, theObject.data.d.topLeft.h, theObject.data.d.topLeft.v); hotSpotNumber = AddActiveRect(&bounds, kIgnoreRightWall, who, true, false); break; case kWindowExRt: QSetRect(&bounds, 0, 0, 16, 44); QOffsetRect(&bounds, 0, 96); QOffsetRect(&bounds, theObject.data.d.topLeft.h, theObject.data.d.topLeft.v); hotSpotNumber = AddActiveRect(&bounds, kIgnoreRightWall, who, true, false); break; case kWindowExLf: QSetRect(&bounds, 0, 0, 16, 44); QOffsetRect(&bounds, 0, 96); QOffsetRect(&bounds, theObject.data.d.topLeft.h, theObject.data.d.topLeft.v); hotSpotNumber = AddActiveRect(&bounds, kIgnoreLeftWall, who, true, false); break; case kInvisTrans: if (theObject.data.d.who != 255) { QSetRect(&bounds, 0, 0, 64, 32); QOffsetRect(&bounds, theObject.data.d.topLeft.h, theObject.data.d.topLeft.v); bounds.bottom = bounds.top + theObject.data.d.tall; bounds.right += (short)theObject.data.d.wide; hotSpotNumber = AddActiveRect(&bounds, kTransportIt, who, true, false); } break; case kDeluxeTrans: if (theObject.data.d.who != 255) { wide = (theObject.data.d.tall & 0xFF00) >> 8; // Get high byte tall = theObject.data.d.tall & 0x00FF; // Get low byte QSetRect(&bounds, 0, 0, wide * 4, tall * 4); // Scale by 4 QOffsetRect(&bounds, theObject.data.d.topLeft.h, theObject.data.d.topLeft.v); isOn = theObject.data.d.wide & 0x0F; hotSpotNumber = AddActiveRect(&bounds, kTransportIt, who, isOn, false); } break; case kLightSwitch: case kMachineSwitch: case kThermostat: case kPowerSwitch: case kKnifeSwitch: case kInvisSwitch: case kTrigger: case kLgTrigger: bounds = srcRects[theObject.what]; ZeroRectCorner(&bounds); QOffsetRect(&bounds, theObject.data.e.topLeft.h, theObject.data.e.topLeft.v); if ((theObject.what == kTrigger) || (theObject.what == kLgTrigger)) { if (theObject.data.e.where != -1) hotSpotNumber = AddActiveRect(&bounds, kTriggerIt, who, true, false); } else { if (theObject.data.e.where != -1) hotSpotNumber = AddActiveRect(&bounds, kSwitchIt, who, true, false); } break; case kSoundTrigger: QSetRect(&bounds, 0, 0, 48, 48); QOffsetRect(&bounds, theObject.data.e.topLeft.h, theObject.data.e.topLeft.v); if (LoadTriggerSound(theObject.data.e.where) == noErr) hotSpotNumber = AddActiveRect(&bounds, kSoundIt, who, true, false); break; case kCeilingLight: case kLightBulb: case kTableLamp: case kHipLamp: case kDecoLamp: case kFlourescent: case kTrackLight: case kInvisLight: break; case kShredder: bounds = srcRects[theObject.what]; bounds.bottom = bounds.top + kShredderActiveHigh; bounds.right += 48; ZeroRectCorner(&bounds); QOffsetRect(&bounds, theObject.data.g.topLeft.h, theObject.data.g.topLeft.v); QOffsetRect(&bounds, -24, -36); hotSpotNumber = AddActiveRect(&bounds, kShredIt, who, theObject.data.g.state, true); break; case kGuitar: QSetRect(&bounds, 0, 0, 8, 96); QOffsetRect(&bounds, theObject.data.g.topLeft.h + 34, theObject.data.g.topLeft.v + 32); hotSpotNumber = AddActiveRect(&bounds, kStrumIt, who, true, false); break; case kOutlet: bounds = srcRects[theObject.what]; ZeroRectCorner(&bounds); QOffsetRect(&bounds, theObject.data.g.topLeft.h, theObject.data.g.topLeft.v); hotSpotNumber = AddActiveRect(&bounds, kIgnoreIt, who, theObject.data.g.state, false); break; case kMicrowave: bounds = srcRects[theObject.what]; ZeroRectCorner(&bounds); QOffsetRect(&bounds, theObject.data.g.topLeft.h, theObject.data.g.topLeft.v); hotSpotNumber = AddActiveRect(&bounds, kDissolveIt, who, true, true); bounds.bottom = bounds.top; bounds.top = 0; hotSpotNumber = AddActiveRect(&bounds, kMicrowaveIt, who, true, true); break; case kToaster: case kMacPlus: case kTV: case kCoffee: case kVCR: case kStereo: case kCinderBlock: case kFlowerBox: case kCDs: bounds = srcRects[theObject.what]; ZeroRectCorner(&bounds); QOffsetRect(&bounds, theObject.data.g.topLeft.h, theObject.data.g.topLeft.v); hotSpotNumber = AddActiveRect(&bounds, kDissolveIt, who, true, true); break; case kCustomPict: break; case kBalloon: case kCopterLf: case kCopterRt: case kDartLf: case kDartRt: case kBall: case kDrip: bounds = srcRects[theObject.what]; ZeroRectCorner(&bounds); QOffsetRect(&bounds, theObject.data.h.topLeft.h, theObject.data.h.topLeft.v); hotSpotNumber = AddActiveRect(&bounds, kIgnoreIt, who, true, false); break; case kFish: bounds = srcRects[theObject.what]; ZeroRectCorner(&bounds); QOffsetRect(&bounds, theObject.data.h.topLeft.h, theObject.data.h.topLeft.v); hotSpotNumber = AddActiveRect(&bounds, kDissolveIt, who, true, true); break; case kCobweb: bounds = srcRects[theObject.what]; ZeroRectCorner(&bounds); QOffsetRect(&bounds, theObject.data.h.topLeft.h, theObject.data.h.topLeft.v); InsetRect(&bounds, -24, -10); hotSpotNumber = AddActiveRect(&bounds, kWebIt, who, true, true); break; case kOzma: case kMirror: case kMousehole: case kFireplace: case kFlower: case kWallWindow: case kBear: case kCalendar: case kVase1: case kVase2: case kBulletin: case kCloud: case kFaucet: case kRug: break; case kChimes: numChimes++; bounds = srcRects[kChimes]; ZeroRectCorner(&bounds); QOffsetRect(&bounds, theObject.data.i.bounds.left, theObject.data.i.bounds.top); hotSpotNumber = AddActiveRect(&bounds, kChimeIt, who, true, false); break; } return (hotSpotNumber); } //-------------------------------------------------------------- VerticalRoomOffset short VerticalRoomOffset (short neighbor) { short offset; offset = 0; switch (neighbor) { case kNorthRoom: case kNorthEastRoom: case kNorthWestRoom: offset -= kVertLocalOffset; break; case kSouthEastRoom: case kSouthRoom: case kSouthWestRoom: offset += kVertLocalOffset; break; } return (offset); } //-------------------------------------------------------------- OffsetRectRoomRelative void OffsetRectRoomRelative (Rect *theRect, short neighbor) { QOffsetRect(theRect, playOriginH, playOriginV); switch (neighbor) { case kNorthRoom: QOffsetRect(theRect, 0, -kVertLocalOffset); break; case kNorthEastRoom: QOffsetRect(theRect, kRoomWide, -kVertLocalOffset); break; case kEastRoom: QOffsetRect(theRect, kRoomWide, 0); break; case kSouthEastRoom: QOffsetRect(theRect, kRoomWide, kVertLocalOffset); break; case kSouthRoom: QOffsetRect(theRect, 0, kVertLocalOffset); break; case kSouthWestRoom: QOffsetRect(theRect, -kRoomWide, kVertLocalOffset); break; case kWestRoom: QOffsetRect(theRect, -kRoomWide, 0); break; case kNorthWestRoom: QOffsetRect(theRect, -kRoomWide, -kVertLocalOffset); break; } } //-------------------------------------------------------------- GetUpStairsRightEdge short GetUpStairsRightEdge (void) { objectType thisObject; short i, rightEdge; char wasState; rightEdge = kRoomWide; wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); for (i = 0; i < kMaxRoomObs; i++) { thisObject = (*thisHouse)->rooms[thisRoomNumber].objects[i]; if (thisObject.what == kDownStairs) { rightEdge = thisObject.data.d.topLeft.h + srcRects[kDownStairs].right - 1; break; } } HSetState((Handle)thisHouse, wasState); return (rightEdge); } //-------------------------------------------------------------- GetDownStairsLeftEdge short GetDownStairsLeftEdge (void) { objectType thisObject; short i, leftEdge; char wasState; leftEdge = 0; wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); for (i = 0; i < kMaxRoomObs; i++) { thisObject = (*thisHouse)->rooms[thisRoomNumber].objects[i]; if (thisObject.what == kUpStairs) { leftEdge = thisObject.data.d.topLeft.h + 1; break; } } HSetState((Handle)thisHouse, wasState); return (leftEdge); } \ No newline at end of file diff --git a/Sources/Objects.c b/Sources/Objects.c deleted file mode 100755 index 1e3b86c..0000000 --- a/Sources/Objects.c +++ /dev/null @@ -1 +0,0 @@ -//============================================================================ //---------------------------------------------------------------------------- // Objects.c //---------------------------------------------------------------------------- //============================================================================ #include "Externs.h" #include "ObjectEdit.h" #define kMaxTempManholes 8 short GetObjectLinked (objectType *); void ListOneRoomsObjects (short); Rect blowerSrcRect; // Blowers GWorldPtr blowerSrcMap; GWorldPtr blowerMaskMap; Rect flame[kNumCandleFlames], tikiFlame[kNumTikiFlames]; Rect coals[kNumBBQCoals]; Rect furnitureSrcRect; // Furniture GWorldPtr furnitureSrcMap; GWorldPtr furnitureMaskMap; Rect tableSrc, shelfSrc, hingeSrc, handleSrc, knobSrc; Rect leftFootSrc, rightFootSrc, deckSrc; Rect bonusSrcRect; // Bonuses GWorldPtr bonusSrcMap; GWorldPtr bonusMaskMap; Rect pointsSrcRect; GWorldPtr pointsSrcMap; GWorldPtr pointsMaskMap; Rect starSrc[6], sparkleSrc[kNumSparkleModes]; Rect digits[11], pendulumSrc[3], greaseSrcRt[4], greaseSrcLf[4]; Rect transSrcRect; // Transport GWorldPtr transSrcMap; GWorldPtr transMaskMap; Rect switchSrcRect; // Switches GWorldPtr switchSrcMap; Rect lightSwitchSrc[2], machineSwitchSrc[2], thermostatSrc[2]; Rect powerSrc[2], knifeSwitchSrc[2]; Rect lightSrcRect; // Lights GWorldPtr lightSrcMap; GWorldPtr lightMaskMap; Rect flourescentSrc1, flourescentSrc2, trackLightSrc[kNumTrackLights]; Rect applianceSrcRect, toastSrcRect, shredSrcRect; // Appliances GWorldPtr applianceSrcMap, toastSrcMap, shredSrcMap; GWorldPtr applianceMaskMap, toastMaskMap, shredMaskMap; Rect plusScreen1, plusScreen2, tvScreen1, tvScreen2; Rect coffeeLight1, coffeeLight2, vcrTime1, vcrTime2; Rect stereoLight1, stereoLight2, microOn, microOff; Rect outletSrc[kNumOutletPicts]; Rect balloonSrcRect, copterSrcRect, dartSrcRect; // Enemies Rect ballSrcRect, dripSrcRect, enemySrcRect; Rect fishSrcRect; GWorldPtr balloonSrcMap, copterSrcMap, dartSrcMap; GWorldPtr ballSrcMap, dripSrcMap, enemySrcMap; GWorldPtr fishSrcMap; GWorldPtr balloonMaskMap, copterMaskMap, dartMaskMap; GWorldPtr ballMaskMap, dripMaskMap, enemyMaskMap; GWorldPtr fishMaskMap; Rect balloonSrc[kNumBalloonFrames], copterSrc[kNumCopterFrames]; Rect dartSrc[kNumDartFrames], ballSrc[kNumBallFrames]; Rect dripSrc[kNumDripFrames], fishSrc[kNumFishFrames]; GWorldPtr clutterSrcMap; // Clutter GWorldPtr clutterMaskMap; Rect clutterSrcRect; Rect flowerSrc[kNumFlowers]; Rect *srcRects; Rect tempManholes[kMaxTempManholes]; savedType savedMaps[kMaxSavedMaps]; objDataPtr masterObjects; hotPtr hotSpots; short nLocalObj, nHotSpots, numMasterObjects, numLocalMasterObjects; short numTempManholes, tvWithMovieNumber; Boolean newState; extern linksPtr linksList; extern short srcLocations[], destLocations[]; extern short localNumbers[]; extern short numNeighbors; //============================================================== Functions //-------------------------------------------------------------- IsThisValid Boolean IsThisValid (short where, short who) { char wasState; Boolean itsGood; itsGood = true; wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); switch ((*thisHouse)->rooms[where].objects[who].what) { case kObjectIsEmpty: itsGood = false; break; case kRedClock: case kBlueClock: case kYellowClock: case kCuckoo: case kPaper: case kBattery: case kBands: case kFoil: case kInvisBonus: case kStar: case kSparkle: case kHelium: itsGood = (*thisHouse)->rooms[where].objects[who].data.c.state; break; } HSetState((Handle)thisHouse, wasState); return (itsGood); } //-------------------------------------------------------------- GetRoomLinked short GetRoomLinked (objectType *who) { short compoundRoomNumber, whereLinked; short floor, suite; switch (who->what) { case kMailboxLf: case kMailboxRt: case kFloorTrans: case kCeilingTrans: case kInvisTrans: case kDeluxeTrans: compoundRoomNumber = who->data.d.where; if (compoundRoomNumber != -1) // is object linked { ExtractFloorSuite(compoundRoomNumber, &floor, &suite); whereLinked = GetRoomNumber(floor, suite); } else whereLinked = -1; // not linked break; case kLightSwitch: case kMachineSwitch: case kThermostat: case kPowerSwitch: case kKnifeSwitch: case kInvisSwitch: case kTrigger: case kLgTrigger: compoundRoomNumber = who->data.e.where; if (compoundRoomNumber != -1) // is object linked { ExtractFloorSuite(compoundRoomNumber, &floor, &suite); whereLinked = GetRoomNumber(floor, suite); } else whereLinked = -1; // not linked break; default: whereLinked = -1; break; } return (whereLinked); } //-------------------------------------------------------------- GetObjectLinked short GetObjectLinked (objectType *who) { short whoLinked; switch (who->what) { case kMailboxLf: case kMailboxRt: case kFloorTrans: case kCeilingTrans: case kInvisTrans: case kDeluxeTrans: if (who->data.d.who != 255) // is it linked? whoLinked = (short)who->data.d.who; else whoLinked = -1; // object not linked break; case kLightSwitch: case kMachineSwitch: case kThermostat: case kPowerSwitch: case kKnifeSwitch: case kInvisSwitch: case kTrigger: case kLgTrigger: if (who->data.e.who != 255) // is it linked? whoLinked = (short)who->data.e.who; else whoLinked = -1; // object not linked break; default: whoLinked = -1; break; } return (whoLinked); } //-------------------------------------------------------------- ObjectIsLinkTransport Boolean ObjectIsLinkTransport (objectType *who) { Boolean itIs; itIs = false; if ((who->what == kMailboxLf) || (who->what == kMailboxRt) || (who->what == kFloorTrans) || (who->what == kCeilingTrans) || (who->what == kInvisTrans) || (who->what == kDeluxeTrans)) { itIs = true; } return (itIs); } //-------------------------------------------------------------- ObjectIsLinkSwitch Boolean ObjectIsLinkSwitch (objectType *who) { Boolean itIs; itIs = false; if ((who->what == kLightSwitch) || (who->what == kMachineSwitch) || (who->what == kThermostat) || (who->what == kPowerSwitch) || (who->what == kKnifeSwitch) || (who->what == kInvisSwitch) || (who->what == kTrigger) || (who->what == kLgTrigger)) { itIs = true; } return (itIs); } //-------------------------------------------------------------- ListOneRoomsObjects void ListOneRoomsObjects (short where) { objectType thisObject; short roomNum, n; char wasState; roomNum = localNumbers[where]; if (roomNum == kRoomIsEmpty) return; wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); for (n = 0; n < kMaxRoomObs; n++) { if (numMasterObjects < kMaxMasterObjects) { thisObject = (*thisHouse)->rooms[roomNum].objects[n]; masterObjects[numMasterObjects].roomNum = roomNum; masterObjects[numMasterObjects].objectNum = n; masterObjects[numMasterObjects].roomLink = GetRoomLinked(&thisObject); masterObjects[numMasterObjects].objectLink = GetObjectLinked(&thisObject); masterObjects[numMasterObjects].localLink = -1; masterObjects[numMasterObjects].theObject = (*thisHouse)->rooms[roomNum].objects[n]; if ((where == kCentralRoom) && (IsThisValid(roomNum, n))) masterObjects[numMasterObjects].hotNum = CreateActiveRects(n); else masterObjects[numMasterObjects].hotNum = -1; masterObjects[numMasterObjects].dynaNum = -1; numMasterObjects++; if (where == kCentralRoom) numLocalMasterObjects++; } } HSetState((Handle)thisHouse, wasState); } //-------------------------------------------------------------- ListAllLocalObjects void ListAllLocalObjects (void) { short i, n; char wasState; numMasterObjects = 0; numLocalMasterObjects = 0; nHotSpots = 0; wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); ListOneRoomsObjects(kCentralRoom); if (numNeighbors > 1) { ListOneRoomsObjects(kEastRoom); ListOneRoomsObjects(kWestRoom); } if (numNeighbors > 3) { ListOneRoomsObjects(kNorthRoom); ListOneRoomsObjects(kNorthEastRoom); ListOneRoomsObjects(kSouthEastRoom); ListOneRoomsObjects(kSouthRoom); ListOneRoomsObjects(kSouthWestRoom); ListOneRoomsObjects(kNorthWestRoom); } HSetState((Handle)thisHouse, wasState); for (i = 0; i < numMasterObjects; i++) // correlate links withÉ { // index into this list if ((masterObjects[i].roomLink != -1) && // if object has a link (masterObjects[i].objectLink != -1)) { for (n = 0; n < numMasterObjects; n++) // search for the objectÉ { // linked to in this list if ((masterObjects[i].roomLink == masterObjects[n].roomNum) && (masterObjects[i].objectLink == masterObjects[n].objectNum)) { masterObjects[i].localLink = n; // log the index } } } } } //-------------------------------------------------------------- AddTempManholeRect void AddTempManholeRect (Rect *manHole) { Rect tempRect; if (numTempManholes < kMaxTempManholes) { tempRect = *manHole; tempRect.bottom = tempRect.top + kFloorSupportTall; tempManholes[numTempManholes] = tempRect; numTempManholes++; } } //-------------------------------------------------------------- SetObjectState Boolean SetObjectState (short room, short object, short action, short local) { char wasState; Boolean changed; wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); switch ((*thisHouse)->rooms[room].objects[object].what) { case kFloorVent: case kCeilingVent: case kFloorBlower: case kCeilingBlower: case kLeftFan: case kRightFan: case kSewerGrate: case kInvisBlower: case kGrecoVent: case kSewerBlower: case kLiftArea: switch (action) { case kToggle: newState = !(*thisHouse)->rooms[room].objects[object].data.a.state; (*thisHouse)->rooms[room].objects[object].data.a.state = newState; changed = true; break; case kForceOn: changed = ((*thisHouse)->rooms[room].objects[object].data.a.state == false); newState = true; (*thisHouse)->rooms[room].objects[object].data.a.state = newState; break; case kForceOff: changed = ((*thisHouse)->rooms[room].objects[object].data.a.state == true); newState = false; (*thisHouse)->rooms[room].objects[object].data.a.state = newState; break; } if ((changed) && (local != -1)) { masterObjects[local].theObject.data.a.state = newState; if (room == thisRoomNumber) thisRoom->objects[object].data.a.state = newState; if (newState) PlayPrioritySound(kBlowerOn, kBlowerOnPriority); else PlayPrioritySound(kBlowerOff, kBlowerOffPriority); if (masterObjects[local].hotNum != -1) hotSpots[masterObjects[local].hotNum].isOn = newState; } break; case kTaper: case kCandle: case kStubby: case kTiki: case kBBQ: changed = false; // Cannot switch on/off these break; case kTable: case kShelf: case kCabinet: case kFilingCabinet: case kWasteBasket: case kMilkCrate: case kCounter: case kDresser: case kStool: case kTrunk: case kDeckTable: case kInvisObstacle: case kManhole: case kBooks: case kInvisBounce: changed = false; // Cannot switch on/off these break; case kRedClock: case kBlueClock: case kYellowClock: case kCuckoo: case kPaper: case kBattery: case kBands: case kGreaseRt: case kGreaseLf: case kFoil: case kInvisBonus: case kStar: case kSparkle: case kHelium: changed = ((*thisHouse)->rooms[room].objects[object].data.c.state == true); newState = false; (*thisHouse)->rooms[room].objects[object].data.c.state = newState; if ((changed) && (local != -1)) { masterObjects[local].theObject.data.a.state = false; if (room == thisRoomNumber) { thisRoom->objects[object].data.c.state = false; if (masterObjects[local].hotNum != -1) hotSpots[masterObjects[local].hotNum].isOn = false; } } break; case kSlider: break; case kUpStairs: case kDownStairs: case kMailboxLf: case kMailboxRt: case kFloorTrans: case kCeilingTrans: case kDoorInLf: case kDoorInRt: case kDoorExRt: case kDoorExLf: case kWindowInLf: case kWindowInRt: case kWindowExRt: case kWindowExLf: case kInvisTrans: changed = false; break; case kDeluxeTrans: switch (action) { case kToggle: newState = (*thisHouse)->rooms[room].objects[object].data.d.wide & 0x0F; newState = !newState; (*thisHouse)->rooms[room].objects[object].data.d.wide &= 0xF0; (*thisHouse)->rooms[room].objects[object].data.d.wide += newState; changed = true; break; case kForceOn: changed = (((*thisHouse)->rooms[room].objects[object].data.d.wide & 0x0F) == 0x00); newState = true; (*thisHouse)->rooms[room].objects[object].data.d.wide &= 0xF0; (*thisHouse)->rooms[room].objects[object].data.d.wide += newState; break; case kForceOff: changed = (((*thisHouse)->rooms[room].objects[object].data.d.wide & 0x0F) != 0x00); newState = false; (*thisHouse)->rooms[room].objects[object].data.d.wide &= 0xF0; (*thisHouse)->rooms[room].objects[object].data.d.wide += newState; break; } if ((changed) && (local != -1)) { masterObjects[local].theObject.data.d.wide = (*thisHouse)->rooms[room].objects[object].data.d.wide; if (room == thisRoomNumber) thisRoom->objects[object].data.d.wide = (*thisHouse)->rooms[room].objects[object].data.d.wide; if (masterObjects[local].hotNum != -1) hotSpots[masterObjects[local].hotNum].isOn = newState; } break; case kLightSwitch: case kMachineSwitch: case kThermostat: case kPowerSwitch: case kInvisSwitch: case kTrigger: case kLgTrigger: case kSoundTrigger: changed = false; break; case kCeilingLight: case kLightBulb: case kTableLamp: case kHipLamp: case kDecoLamp: case kFlourescent: case kTrackLight: case kInvisLight: switch (action) { case kToggle: newState = !(*thisHouse)->rooms[room].objects[object].data.f.state; (*thisHouse)->rooms[room].objects[object].data.f.state = newState; changed = true; break; case kForceOn: changed = ((*thisHouse)->rooms[room].objects[object].data.f.state == false); newState = true; (*thisHouse)->rooms[room].objects[object].data.f.state = newState; break; case kForceOff: changed = ((*thisHouse)->rooms[room].objects[object].data.f.state == true); newState = false; (*thisHouse)->rooms[room].objects[object].data.f.state = newState; break; } if ((changed) && (local != -1)) { masterObjects[local].theObject.data.f.state = newState; if (room == thisRoomNumber) thisRoom->objects[object].data.f.state = newState; } break; case kGuitar: // really no point to change this state changed = false; break; case kStereo: newState = !isPlayMusicGame; isPlayMusicGame = newState; changed = true; break; case kShredder: case kToaster: case kMacPlus: case kTV: case kCoffee: case kOutlet: case kVCR: case kMicrowave: switch (action) { case kToggle: newState = !(*thisHouse)->rooms[room].objects[object].data.g.state; (*thisHouse)->rooms[room].objects[object].data.g.state = newState; changed = true; break; case kForceOn: changed = ((*thisHouse)->rooms[room].objects[object].data.g.state == false); newState = true; (*thisHouse)->rooms[room].objects[object].data.g.state = newState; break; case kForceOff: changed = ((*thisHouse)->rooms[room].objects[object].data.g.state == true); newState = false; (*thisHouse)->rooms[room].objects[object].data.g.state = newState; break; } if ((changed) && (local != -1)) { masterObjects[local].theObject.data.g.state = newState; if (room == thisRoomNumber) { thisRoom->objects[object].data.g.state = newState; if ((*thisHouse)->rooms[room].objects[object].what == kShredder) hotSpots[masterObjects[local].hotNum].isOn = newState; } } break; case kCinderBlock: case kFlowerBox: case kCDs: case kCustomPict: changed = false; break; case kBalloon: case kCopterLf: case kCopterRt: case kDartLf: case kDartRt: case kBall: case kDrip: case kFish: switch (action) { case kToggle: newState = !(*thisHouse)->rooms[room].objects[object].data.h.state; (*thisHouse)->rooms[room].objects[object].data.h.state = newState; changed = true; break; case kForceOn: changed = ((*thisHouse)->rooms[room].objects[object].data.h.state == false); newState = true; (*thisHouse)->rooms[room].objects[object].data.h.state = newState; break; case kForceOff: changed = ((*thisHouse)->rooms[room].objects[object].data.h.state == true); newState = false; (*thisHouse)->rooms[room].objects[object].data.h.state = newState; break; } if ((changed) && (local != -1)) { masterObjects[local].theObject.data.h.state = newState; if (room == thisRoomNumber) thisRoom->objects[object].data.h.state = newState; } break; case kCobweb: changed = false; break; case kOzma: case kMirror: case kMousehole: case kFireplace: case kFlower: case kWallWindow: case kBear: case kCalendar: case kVase1: case kVase2: case kBulletin: case kCloud: case kFaucet: case kRug: case kChimes: changed = false; break; } HSetState((Handle)thisHouse, wasState); return (changed); } //-------------------------------------------------------------- GetObjectState Boolean GetObjectState (short room, short object) { char wasState; Boolean theState; theState = true; wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); switch ((*thisHouse)->rooms[room].objects[object].what) { case kFloorVent: case kCeilingVent: case kFloorBlower: case kCeilingBlower: case kLeftFan: case kRightFan: case kSewerGrate: case kInvisBlower: case kGrecoVent: case kSewerBlower: case kLiftArea: theState = (*thisHouse)->rooms[room].objects[object].data.a.state; break; case kTaper: case kCandle: case kStubby: case kTiki: case kBBQ: break; case kTable: case kShelf: case kCabinet: case kFilingCabinet: case kWasteBasket: case kMilkCrate: case kCounter: case kDresser: case kDeckTable: case kStool: case kTrunk: case kInvisObstacle: case kManhole: case kBooks: case kInvisBounce: break; case kRedClock: case kBlueClock: case kYellowClock: case kCuckoo: case kPaper: case kBattery: case kBands: case kGreaseRt: case kGreaseLf: case kFoil: case kInvisBonus: case kStar: case kSparkle: case kHelium: theState = (*thisHouse)->rooms[room].objects[object].data.c.state; break; case kSlider: break; case kUpStairs: case kDownStairs: case kMailboxLf: case kMailboxRt: case kFloorTrans: case kCeilingTrans: case kDoorInLf: case kDoorInRt: case kDoorExRt: case kDoorExLf: case kWindowInLf: case kWindowInRt: case kWindowExRt: case kWindowExLf: case kInvisTrans: break; case kDeluxeTrans: theState = (*thisHouse)->rooms[room].objects[object].data.d.wide & 0x0F; break; case kLightSwitch: case kMachineSwitch: case kThermostat: case kPowerSwitch: case kInvisSwitch: case kTrigger: case kLgTrigger: case kSoundTrigger: break; case kCeilingLight: case kLightBulb: case kTableLamp: case kHipLamp: case kDecoLamp: case kFlourescent: case kTrackLight: case kInvisLight: theState = (*thisHouse)->rooms[room].objects[object].data.f.state; break; case kStereo: theState = isPlayMusicGame; break; case kShredder: case kToaster: case kMacPlus: case kGuitar: case kTV: case kCoffee: case kOutlet: case kVCR: case kMicrowave: theState = (*thisHouse)->rooms[room].objects[object].data.g.state; break; case kCinderBlock: case kFlowerBox: case kCDs: case kCustomPict: break; case kBalloon: case kCopterLf: case kCopterRt: case kDartLf: case kDartRt: case kBall: case kDrip: case kFish: theState = (*thisHouse)->rooms[room].objects[object].data.h.state; break; case kCobweb: break; case kOzma: case kMirror: case kMousehole: case kFireplace: case kFlower: case kWallWindow: case kBear: case kCalendar: case kVase1: case kVase2: case kBulletin: case kCloud: case kFaucet: case kRug: case kChimes: break; } HSetState((Handle)thisHouse, wasState); return (theState); } //-------------------------------------------------------------- SendObjectToBack #ifndef COMPILEDEMO void BringSendFrontBack (Boolean bringFront) { houseType *thisHousePtr; objectType savedObject; short numLinks, i; short srcRoom, srcObj; short sorting[kMaxRoomObs]; short sorted[kMaxRoomObs]; char wasState; if (bringFront) // No need to bring to frontÉ { // or send to back if the objectÉ if (objActive == (kMaxRoomObs - 1)) // in question is already front- return; // most or backmost. } else { if (objActive == 0) return; } CopyThisRoomToRoom(); // Any changes to room writtenÉ // back to the house handle. numLinks = CountHouseLinks(); // Determine space needed for all links. if (numLinks != 0) // Create links list of ALL house links. { linksList = nil; linksList = (linksPtr)NewPtr(sizeof(linksType) * numLinks); if (linksList == nil) { YellowAlert(kYellowCantOrderLinks, MemError()); return; } GenerateLinksList(); // Fill in links list with src/destÉ } // data on objects and room numbers. wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); // Lock down house. thisHousePtr = *thisHouse; // Get a pointer to house structure. for (i = 0; i < kMaxRoomObs; i++) // Set up an ordered array. sorting[i] = i; savedObject = (*thisHouse)->rooms[thisRoomNumber].objects[objActive]; if (bringFront) { for (i = objActive; i < kMaxRoomObs - 1; i++) { // Pull all objects down to fill hole. (*thisHouse)->rooms[thisRoomNumber].objects[i] = (*thisHouse)->rooms[thisRoomNumber].objects[i + 1]; sorting[i] = sorting[i + 1]; SpinCursor(2); } // Insert object at end of array. (*thisHouse)->rooms[thisRoomNumber].objects[kMaxRoomObs - 1] = savedObject; sorting[kMaxRoomObs - 1] = objActive; } else { for (i = objActive; i > 0; i--) { // Move all objects up to fill hole. (*thisHouse)->rooms[thisRoomNumber].objects[i] = (*thisHouse)->rooms[thisRoomNumber].objects[i - 1]; sorting[i] = sorting[i - 1]; SpinCursor(2); } // Insert object at beginning of array. (*thisHouse)->rooms[thisRoomNumber].objects[0] = savedObject; sorting[0] = objActive; } for (i = 0; i < kMaxRoomObs; i++) // Set up retro-ordered array. sorted[sorting[i]] = i; for (i = 0; i < numLinks; i++) // Walk links list in order to assignÉ { // corrected links to objects moved. if (linksList[i].destRoom == thisRoomNumber) { // Does link point to room we re-ordered? srcRoom = linksList[i].srcRoom; // Room where-which an object is linked from. if (srcRoom == thisRoomNumber) // Handle special case for local links. srcObj = sorted[linksList[i].srcObj]; else srcObj = linksList[i].srcObj; switch ((*thisHouse)->rooms[srcRoom].objects[srcObj].what) { case kLightSwitch: case kMachineSwitch: case kThermostat: case kPowerSwitch: case kKnifeSwitch: case kInvisSwitch: case kTrigger: case kLgTrigger: (*thisHouse)->rooms[srcRoom].objects[srcObj].data.d.who = sorted[linksList[i].destObj]; break; default: (*thisHouse)->rooms[srcRoom].objects[srcObj].data.e.who = sorted[linksList[i].destObj]; break; } } } HSetState((Handle)thisHouse, wasState); if (linksList != nil) DisposePtr((Ptr)linksList); ForceThisRoom(thisRoomNumber); fileDirty = true; UpdateMenus(false); InvalWindowRect(mainWindow, &mainWindowRect); DeselectObject(); GetThisRoomsObjRects(); ReadyBackground(thisRoom->background, thisRoom->tiles); DrawThisRoomsObjects(); GenerateRetroLinks(); InitCursor(); } #endif \ No newline at end of file diff --git a/Sources/Play.c b/Sources/Play.c deleted file mode 100755 index 12c3154..0000000 --- a/Sources/Play.c +++ /dev/null @@ -1 +0,0 @@ - //============================================================================ //---------------------------------------------------------------------------- // Play.c //---------------------------------------------------------------------------- //============================================================================ #include #include "Externs.h" #include "Environ.h" #include "House.h" #include "MainWindow.h" #include "RectUtils.h" #include "Scoreboard.h" #define kHouseBannerAlert 1009 #define kInitialGliders 2 #define kRingDelay 90 #define kRingSpread 25000 // 25000 #define kRingBaseDelay 5000 // 5000 #define kChimeDelay 180 typedef struct { short nextRing; short rings; short delay; } phoneType, *phonePtr; void InitGlider (gliderPtr, short); void SetHouseToFirstRoom (void); void SetHouseToSavedRoom (void); void HandlePlayEvent (void); void PlayGame (void); void HandleRoomVisitation (void); void SetObjectsToDefaults (void); void InitTelephone (void); void HandleTelephone (void); Boolean DoesStarCodeExist (short); short GetNumStarsRemaining (short, short); phoneType thePhone, theChimes; Rect glidSrcRect, justRoomsRect; GWorldPtr glidSrcMap, glid2SrcMap; GWorldPtr glidMaskMap; long gameFrame; short batteryTotal, bandsTotal, foilTotal, mortals; Boolean playing, evenFrame, twoPlayerGame, showFoil, demoGoing; Boolean doBackground, playerSuicide, phoneBitSet, tvOn; extern WindowPtr menuWindow; extern FSSpecPtr theHousesSpecs; extern demoPtr demoData; extern gameType smallGame; extern Rect gliderSrc[kNumGliderSrcRects]; extern Rect boardDestRect, boardSrcRect; extern long incrementModeTime; extern short numBands, otherPlayerEscaped, demoIndex, demoHouseIndex; extern short splashOriginH, splashOriginV, countDown, thisHouseIndex; extern short numStarsRemaining, numChimes, saidFollow; extern Boolean quitting, isMusicOn, gameOver, hasMirror, onePlayerLeft; extern Boolean isPlayMusicIdle, failedMusic, quickerTransitions; extern Boolean switchedOut; //============================================================== Functions //-------------------------------------------------------------- NewGame void NewGame (short mode) { Rect tempRect; Size freeBytes, growBytes; OSErr theErr; Boolean wasPlayMusicPref; AdjustScoreboardHeight(); gameOver = false; theMode = kPlayMode; if (isPlayMusicGame) { if (!isMusicOn) { theErr = StartMusic(); if (theErr != noErr) { YellowAlert(kYellowNoMusic, theErr); failedMusic = true; } } SetMusicalMode(kPlayGameScoreMode); } else { if (isMusicOn) StopTheMusic(); } if (mode != kResumeGameMode) SetObjectsToDefaults(); HideCursor(); if (mode == kResumeGameMode) SetHouseToSavedRoom(); else if (mode == kNewGameMode) SetHouseToFirstRoom(); DetermineRoomOpenings(); NilSavedMaps(); gameFrame = 0L; numBands = 0; demoIndex = 0; saidFollow = 0; otherPlayerEscaped = kNoOneEscaped; onePlayerLeft = false; playerSuicide = false; if (twoPlayerGame) // initialize glider(s) { InitGlider(&theGlider, kNewGameMode); InitGlider(&theGlider2, kNewGameMode); SetPort((GrafPtr)glidSrcMap); LoadGraphic(kGliderPictID); SetPort((GrafPtr)glid2SrcMap); LoadGraphic(kGlider2PictID); } else { InitGlider(&theGlider, mode); SetPort((GrafPtr)glidSrcMap); LoadGraphic(kGliderPictID); SetPort((GrafPtr)glid2SrcMap); LoadGraphic(kGliderFoilPictID); } #if !BUILD_ARCADE_VERSION // HideMenuBarOld(); // TEMP #endif SetPort((GrafPtr)mainWindow); // paint strip on screen black tempRect = thisMac.screen; tempRect.top = tempRect.bottom - 20; // thisMac.menuHigh PaintRect(&tempRect); #ifdef COMPILEQT if ((thisMac.hasQT) && (hasMovie)) { SetMovieGWorld(theMovie, (CGrafPtr)mainWindow, nil); } #endif SetPort((GrafPtr)workSrcMap); PaintRect(&workSrcRect); // if (quickerTransitions) // DissBitsChunky(&workSrcRect); // else // DissBits(&workSrcRect); // DebugStr("\pIf screen isn't black, exit to shell."); // TEMP TEMP TEMP DrawLocale(); RefreshScoreboard(kNormalTitleMode); // if (quickerTransitions) // DissBitsChunky(&justRoomsRect); // else // DissBits(&justRoomsRect); if (mode == kNewGameMode) { BringUpBanner(); DumpScreenOn(&justRoomsRect); } else if (mode == kResumeGameMode) { DisplayStarsRemaining(); DumpScreenOn(&justRoomsRect); } else { DumpScreenOn(&justRoomsRect); } InitGarbageRects(); StartGliderFadingIn(&theGlider); if (twoPlayerGame) { StartGliderFadingIn(&theGlider2); TagGliderIdle(&theGlider2); theGlider2.dontDraw = true; } InitTelephone(); wasPlayMusicPref = isPlayMusicGame; freeBytes = MaxMem(&growBytes); #ifdef CREATEDEMODATA SysBeep(1); #endif #ifdef COMPILEQT if ((thisMac.hasQT) && (hasMovie) && (tvInRoom)) { SetMovieActive(theMovie, true); if (tvOn) { StartMovie(theMovie); MoviesTask(theMovie, 0); } } #endif playing = true; // everything before this line is game set-up PlayGame(); // everything following is after a game has ended #ifdef CREATEDEMODATA DumpToResEditFile((Ptr)demoData, sizeof(demoType) * (long)demoIndex); #endif isPlayMusicGame = wasPlayMusicPref; ZeroMirrorRegion(); #ifdef COMPILEQT if ((thisMac.hasQT) && (hasMovie) && (tvInRoom)) { tvInRoom = false; StopMovie(theMovie); SetMovieActive(theMovie, false); } #endif twoPlayerGame = false; theMode = kSplashMode; InitCursor(); if (isPlayMusicIdle) { if (!isMusicOn) { theErr = StartMusic(); if (theErr != noErr) { YellowAlert(kYellowNoMusic, theErr); failedMusic = true; } } SetMusicalMode(kPlayWholeScoreMode); } else { if (isMusicOn) StopTheMusic(); } NilSavedMaps(); SetPortWindowPort(mainWindow); BlackenScoreboard(); UpdateMenus(false); if (!gameOver) { CGrafPtr wasCPort; GDHandle wasWorld; GetGWorld(&wasCPort, &wasWorld); InvalWindowRect(mainWindow, &mainWindowRect); SetGWorld(workSrcMap, nil); PaintRect(&workSrcRect); QSetRect(&tempRect, 0, 0, 640, 460); QOffsetRect(&tempRect, splashOriginH, splashOriginV); LoadScaledGraphic(kSplash8BitPICT, &tempRect); SetGWorld(wasCPort, wasWorld); } WaitCommandQReleased(); demoGoing = false; incrementModeTime = TickCount() + kIdleSplashTicks; } //-------------------------------------------------------------- DoDemoGame void DoDemoGame (void) { short wasHouseIndex; Boolean whoCares; wasHouseIndex = thisHouseIndex; whoCares = CloseHouse(); thisHouseIndex = demoHouseIndex; PasStringCopy(theHousesSpecs[thisHouseIndex].name, thisHouseName); if (OpenHouse()) { whoCares = ReadHouse(); demoGoing = true; NewGame(kNewGameMode); } whoCares = CloseHouse(); thisHouseIndex = wasHouseIndex; PasStringCopy(theHousesSpecs[thisHouseIndex].name, thisHouseName); if (OpenHouse()) whoCares = ReadHouse(); incrementModeTime = TickCount() + kIdleSplashTicks; } //-------------------------------------------------------------- InitGlider void InitGlider (gliderPtr thisGlider, short mode) { WhereDoesGliderBegin(&thisGlider->dest, mode); if (mode == kResumeGameMode) numStarsRemaining = smallGame.wasStarsLeft; else if (mode == kNewGameMode) numStarsRemaining = CountStarsInHouse(); if (mode == kResumeGameMode) { theScore = smallGame.score; mortals = smallGame.numGliders; batteryTotal = smallGame.energy; bandsTotal = smallGame.bands; foilTotal = smallGame.foil; thisGlider->mode = smallGame.gliderState; thisGlider->facing = smallGame.facing; showFoil = smallGame.showFoil; switch (thisGlider->mode) { case kGliderBurning: FlagGliderBurning(thisGlider); break; default: FlagGliderNormal(thisGlider); break; } } else { theScore = 0L; mortals = kInitialGliders; if (twoPlayerGame) mortals += kInitialGliders; batteryTotal = 0; bandsTotal = 0; foilTotal = 0; thisGlider->mode = kGliderNormal; thisGlider->facing = kFaceRight; thisGlider->src = gliderSrc[0]; thisGlider->mask = gliderSrc[0]; showFoil = false; } QSetRect(&thisGlider->destShadow, 0, 0, kGliderWide, kShadowHigh); QOffsetRect(&thisGlider->destShadow, thisGlider->dest.left, kShadowTop); thisGlider->wholeShadow = thisGlider->destShadow; thisGlider->hVel = 0; thisGlider->vVel = 0; thisGlider->hDesiredVel = 0; thisGlider->vDesiredVel = 0; thisGlider->tipped = false; thisGlider->sliding = false; thisGlider->dontDraw = false; } //-------------------------------------------------------------- SetHouseToFirstRoom void SetHouseToFirstRoom (void) { short firstRoom; firstRoom = GetFirstRoomNumber(); ForceThisRoom(firstRoom); } //-------------------------------------------------------------- SetHouseToSavedRoom void SetHouseToSavedRoom (void) { ForceThisRoom(smallGame.roomNumber); } //-------------------------------------------------------------- HandlePlayEvent void HandlePlayEvent (void) { EventRecord theEvent; GrafPtr wasPort; long sleep = 2; if (WaitNextEvent(everyEvent, &theEvent, sleep, nil)) { if ((theEvent.what == updateEvt) && ((WindowPtr)theEvent.message == mainWindow)) { GetPort(&wasPort); SetPortWindowPort(mainWindow); BeginUpdate(mainWindow); CopyBits((BitMap *)*GetGWorldPixMap(workSrcMap), GetPortBitMapForCopyBits(GetWindowPort(mainWindow)), &justRoomsRect, &justRoomsRect, srcCopy, nil); RefreshScoreboard(kNormalTitleMode); EndUpdate(mainWindow); SetPort(wasPort); } else if ((theEvent.what == osEvt) && (theEvent.message & 0x01000000)) { if (theEvent.message & 0x00000001) // resume event { switchedOut = false; ToggleMusicWhilePlaying(); HideCursor(); // HideMenuBarOld(); // TEMP } else // suspend event { InitCursor(); switchedOut = true; ToggleMusicWhilePlaying(); // ShowMenuBarOld(); // TEMP replace with Carbon calls } } } } //-------------------------------------------------------------- PlayGame void PlayGame (void) { while ((playing) && (!quitting)) { gameFrame++; evenFrame = !evenFrame; if (doBackground) { do { HandlePlayEvent(); } while (switchedOut); } HandleTelephone(); if (twoPlayerGame) { HandleDynamics(); if (!gameOver) { GetInput(&theGlider); GetInput(&theGlider2); HandleInteraction(); } HandleTriggers(); HandleBands(); if (!gameOver) { HandleGlider(&theGlider); HandleGlider(&theGlider2); } if (playing) { #ifdef COMPILEQT if ((thisMac.hasQT) && (hasMovie) && (tvInRoom) && (tvOn)) MoviesTask(theMovie, 0); #endif RenderFrame(); HandleDynamicScoreboard(); } } else { HandleDynamics(); if (!gameOver) { if (demoGoing) GetDemoInput(&theGlider); else GetInput(&theGlider); HandleInteraction(); } HandleTriggers(); HandleBands(); if (!gameOver) HandleGlider(&theGlider); if (playing) { #ifdef COMPILEQT if ((thisMac.hasQT) && (hasMovie) && (tvInRoom) && (tvOn)) MoviesTask(theMovie, 0); #endif RenderFrame(); HandleDynamicScoreboard(); } } if (gameOver) { countDown--; if (countDown <= 0) { CGrafPtr wasCPort; GDHandle wasWorld; GetGWorld(&wasCPort, &wasWorld); HideGlider(&theGlider); RefreshScoreboard(kNormalTitleMode); #if BUILD_ARCADE_VERSION // Need to paint over the scoreboard black. SetGWorld(boardSrcMap, nil); PaintRect(&boardSrcRect); CopyBits((BitMap *)*GetGWorldPixMap(boardSrcMap), GetPortBitMapForCopyBits(GetWindowPort(mainWindow)), &boardSrcRect, &boardDestRect, srcCopy, 0L); { Rect bounds; PicHandle thePicture; SInt16 hOffset; if (boardSrcRect.right >= 640) hOffset = (RectWide(&boardSrcRect) - kMaxViewWidth) / 2; else hOffset = -576; thePicture = GetPicture(kScoreboardPictID); if (!thePicture) RedAlert(kErrFailedGraphicLoad); HLock((Handle)thePicture); bounds = (*thePicture)->picFrame; HUnlock((Handle)thePicture); QOffsetRect(&bounds, -bounds.left, -bounds.top); QOffsetRect(&bounds, hOffset, 0); DrawPicture(thePicture, &bounds); ReleaseResource((Handle)thePicture); } #else // ShowMenuBarOld(); // TEMP #endif if (mortals < 0) DoDiedGameOver(); else DoGameOver(); SetGWorld(wasCPort, wasWorld); } } } #if BUILD_ARCADE_VERSION { CGrafPtr wasCPort; GDHandle wasWorld; GetGWorld(&wasCPort, &wasWorld); SetGWorld(boardSrcMap, nil); PaintRect(&boardSrcRect); CopyBits((BitMap *)*GetGWorldPixMap(boardSrcMap), GetPortBitMapForCopyBits(GetWindowPort(mainWindow)), &boardSrcRect, &boardDestRect, srcCopy, 0L); SetGWorld(wasCPort, wasWorld); } { Rect bounds; PicHandle thePicture; SInt16 hOffset; if (boardSrcRect.right >= 640) hOffset = (RectWide(&boardSrcRect) - kMaxViewWidth) / 2; else hOffset = -576; thePicture = GetPicture(kScoreboardPictID); if (!thePicture) RedAlert(kErrFailedGraphicLoad); HLock((Handle)thePicture); bounds = (*thePicture)->picFrame; HUnlock((Handle)thePicture); QOffsetRect(&bounds, -bounds.left, -bounds.top); QOffsetRect(&bounds, hOffset, 0); DrawPicture(thePicture, &bounds); ReleaseResource((Handle)thePicture); } #else // ShowMenuBarOld(); // TEMP #endif } //-------------------------------------------------------------- SetObjectsToDefaults void SetObjectsToDefaults (void) { houseType *thisHousePtr; short numRooms; short r, i; char wasState; Boolean initState; wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); thisHousePtr = *thisHouse; numRooms = thisHousePtr->nRooms; for (r = 0; r < numRooms; r++) { thisHousePtr->rooms[r].visited = false; for (i = 0; i < kMaxRoomObs; i++) { switch (thisHousePtr->rooms[r].objects[i].what) { case kFloorVent: case kCeilingVent: case kFloorBlower: case kCeilingBlower: case kLeftFan: case kRightFan: case kSewerGrate: case kInvisBlower: case kGrecoVent: case kSewerBlower: case kLiftArea: thisHousePtr->rooms[r].objects[i].data.a.state = thisHousePtr->rooms[r].objects[i].data.a.initial; break; case kRedClock: case kBlueClock: case kYellowClock: case kCuckoo: case kPaper: case kBattery: case kBands: case kGreaseRt: case kGreaseLf: case kFoil: case kInvisBonus: case kStar: case kSparkle: case kHelium: thisHousePtr->rooms[r].objects[i].data.c.state = thisHousePtr->rooms[r].objects[i].data.c.initial; break; case kDeluxeTrans: initState = (thisHousePtr->rooms[r].objects[i].data.d.wide & 0xF0) >> 4; thisHousePtr->rooms[r].objects[i].data.d.wide &= 0xF0; thisHousePtr->rooms[r].objects[i].data.d.wide += initState; break; case kCeilingLight: case kLightBulb: case kTableLamp: case kHipLamp: case kDecoLamp: case kFlourescent: case kTrackLight: case kInvisLight: thisHousePtr->rooms[r].objects[i].data.f.state = thisHousePtr->rooms[r].objects[i].data.f.initial; break; case kStereo: thisHousePtr->rooms[r].objects[i].data.g.state = isPlayMusicGame; break; case kShredder: case kToaster: case kMacPlus: case kGuitar: case kTV: case kCoffee: case kOutlet: case kVCR: case kMicrowave: thisHousePtr->rooms[r].objects[i].data.g.state = thisHousePtr->rooms[r].objects[i].data.g.initial; break; case kBalloon: case kCopterLf: case kCopterRt: case kDartLf: case kDartRt: case kBall: case kDrip: case kFish: thisHousePtr->rooms[r].objects[i].data.h.state = thisHousePtr->rooms[r].objects[i].data.h.initial; break; } } } HSetState((Handle)thisHouse, wasState); } //-------------------------------------------------------------- HideGlider void HideGlider (gliderPtr thisGlider) { Rect tempRect; tempRect = thisGlider->whole; QOffsetRect(&tempRect, playOriginH, playOriginV); CopyRectWorkToMain(&tempRect); if (hasMirror) { QOffsetRect(&tempRect, -20, -16); CopyRectWorkToMain(&tempRect); } tempRect = thisGlider->wholeShadow; QOffsetRect(&tempRect, playOriginH, playOriginV); CopyRectWorkToMain(&tempRect); } //-------------------------------------------------------------- InitTelephone void InitTelephone (void) { thePhone.nextRing = RandomInt(kRingSpread) + kRingBaseDelay; thePhone.rings = RandomInt(3) + 3; thePhone.delay = kRingDelay; theChimes.nextRing = RandomInt(kChimeDelay) + 1; } //-------------------------------------------------------------- HandleTelephone void HandleTelephone (void) { short delayTime; if (!phoneBitSet) { if (thePhone.nextRing == 0) { if (thePhone.delay == 0) { thePhone.delay = kRingDelay; PlayPrioritySound(kPhoneRingSound, kPhoneRingPriority); thePhone.rings--; if (thePhone.rings == 0) { thePhone.nextRing = RandomInt(kRingSpread) + kRingBaseDelay; thePhone.rings = RandomInt(3) + 3; } } else thePhone.delay--; } else thePhone.nextRing--; } // handle also the wind chimes (if they are present) if (numChimes > 0) { if (theChimes.nextRing == 0) { if (RandomInt(2) == 0) PlayPrioritySound(kChime1Sound, kChime1Priority); else PlayPrioritySound(kChime2Sound, kChime2Priority); delayTime = kChimeDelay / numChimes; if (delayTime < 2) delayTime = 2; theChimes.nextRing = RandomInt(delayTime) + 1; } else theChimes.nextRing--; } } //-------------------------------------------------------------- StrikeChime void StrikeChime (void) { theChimes.nextRing = 0; } //-------------------------------------------------------------- RestoreEntireGameScreen void RestoreEntireGameScreen (void) { Rect tempRect; HideCursor(); #if !BUILD_ARCADE_VERSION // HideMenuBarOld(); // TEMP #endif SetPort((GrafPtr)mainWindow); tempRect = thisMac.screen; PaintRect(&tempRect); DrawLocale(); RefreshScoreboard(kNormalTitleMode); // if (quickerTransitions) // DissBitsChunky(&justRoomsRect); // else // DissBits(&justRoomsRect); } \ No newline at end of file diff --git a/Sources/Player.c b/Sources/Player.c deleted file mode 100755 index f36208a..0000000 --- a/Sources/Player.c +++ /dev/null @@ -1 +0,0 @@ -//============================================================================ //---------------------------------------------------------------------------- // Player.c //---------------------------------------------------------------------------- //============================================================================ #include "Externs.h" #include "Play.h" #include "RectUtils.h" #define kGravity 3 #define kHImpulse 2 #define kVImpulse 2 #define kMaxHVel 16 #define kShredderCountdown -68 void MoveGlider (gliderPtr); void MoveGliderNormal (gliderPtr); void MoveGliderBurning (gliderPtr); void FadeGliderIn (gliderPtr); void TransportGliderIn (gliderPtr); void FadeGliderOut (gliderPtr); void MoveGliderUpStairs (gliderPtr); void MoveGliderDownStairs (gliderPtr); void MoveGliderFaceLeft (gliderPtr); void MoveGliderFaceRight (gliderPtr); void TransportGliderOut (gliderPtr); void MoveGliderDownDuct (gliderPtr); void MoveGliderUpDuct (gliderPtr); void MoveGliderInMailLeft (gliderPtr); void MoveGliderInMailRight (gliderPtr); void FinishGliderMailingLeft (gliderPtr); void FinishGliderMailingRight (gliderPtr); void MoveGliderFoilGoing (gliderPtr); void MoveGliderFoilLosing (gliderPtr); void MoveGliderShredding (gliderPtr); void HandleIdleGlider (gliderPtr); gliderType theGlider, theGlider2; Rect shadowSrcRect; GWorldPtr shadowSrcMap; GWorldPtr shadowMaskMap; Rect shadowSrc[kNumShadowSrcRects]; Rect gliderSrc[kNumGliderSrcRects]; Rect transRect; long theScore; short fadeInSequence[kLastFadeSequence]; short rightClip, leftClip, transRoom; Boolean shadowVisible, onePlayerLeft, playerDead; extern short numShredded, otherPlayerEscaped; extern Boolean playing, twoPlayerGame, gameOver, hasMirror; extern Boolean takingTheStairs, playerSuicide; //============================================================== Functions //-------------------------------------------------------------- MoveGlider void MoveGlider (gliderPtr thisGlider) { if (thisGlider->hVel > thisGlider->hDesiredVel) { thisGlider->hVel -= kHImpulse; if (thisGlider->hVel < thisGlider->hDesiredVel) thisGlider->hVel = thisGlider->hDesiredVel; } else if (thisGlider->hVel < thisGlider->hDesiredVel) { thisGlider->hVel += kHImpulse; if (thisGlider->hVel > thisGlider->hDesiredVel) thisGlider->hVel = thisGlider->hDesiredVel; } thisGlider->hDesiredVel = 0; if (thisGlider->vVel > thisGlider->vDesiredVel) { thisGlider->vVel -= kVImpulse; if (thisGlider->vVel < thisGlider->vDesiredVel) thisGlider->vVel = thisGlider->vDesiredVel; } else if (thisGlider->vVel < thisGlider->vDesiredVel) { thisGlider->vVel += kVImpulse; if (thisGlider->vVel > thisGlider->vDesiredVel) thisGlider->vVel = thisGlider->vDesiredVel; } thisGlider->vDesiredVel = kGravity; if (thisGlider->hVel < 0) { if (thisGlider->hVel < -kMaxHVel) thisGlider->hVel = -kMaxHVel; thisGlider->wasHVel = thisGlider->hVel; thisGlider->whole.right = thisGlider->dest.right; thisGlider->dest.left += thisGlider->hVel; thisGlider->dest.right += thisGlider->hVel; thisGlider->whole.left = thisGlider->dest.left; thisGlider->wholeShadow.right = thisGlider->destShadow.right; thisGlider->destShadow.left += thisGlider->hVel; thisGlider->destShadow.right += thisGlider->hVel; thisGlider->wholeShadow.left = thisGlider->destShadow.left; } else { if (thisGlider->hVel > kMaxHVel) thisGlider->hVel = kMaxHVel; thisGlider->wasHVel = thisGlider->hVel; thisGlider->whole.left = thisGlider->dest.left; thisGlider->dest.left += thisGlider->hVel; thisGlider->dest.right += thisGlider->hVel; thisGlider->whole.right = thisGlider->dest.right; thisGlider->wholeShadow.left = thisGlider->destShadow.left; thisGlider->destShadow.left += thisGlider->hVel; thisGlider->destShadow.right += thisGlider->hVel; thisGlider->wholeShadow.right = thisGlider->destShadow.right; } if (thisGlider->vVel < 0) { thisGlider->wasVVel = thisGlider->vVel; thisGlider->whole.bottom = thisGlider->dest.bottom; thisGlider->dest.top += thisGlider->vVel; thisGlider->dest.bottom += thisGlider->vVel; thisGlider->whole.top = thisGlider->dest.top; } else { thisGlider->wasVVel = thisGlider->vVel; thisGlider->whole.top = thisGlider->dest.top; thisGlider->dest.top += thisGlider->vVel; thisGlider->dest.bottom += thisGlider->vVel; thisGlider->whole.bottom = thisGlider->dest.bottom; } } //-------------------------------------------------------------- MoveGliderNormal void MoveGliderNormal (gliderPtr thisGlider) { if (thisGlider->facing == kFaceLeft) { if (thisGlider->sliding) { thisGlider->src = gliderSrc[30]; thisGlider->mask = gliderSrc[30]; thisGlider->sliding = false; } else { if (thisGlider->tipped) { thisGlider->src = gliderSrc[3]; thisGlider->mask = gliderSrc[3]; } else { thisGlider->src = gliderSrc[2]; thisGlider->mask = gliderSrc[2]; } } } else { if (thisGlider->sliding) { thisGlider->src = gliderSrc[29]; thisGlider->mask = gliderSrc[29]; thisGlider->sliding = false; } else { if (thisGlider->tipped) { thisGlider->src = gliderSrc[1]; thisGlider->mask = gliderSrc[1]; } else { thisGlider->src = gliderSrc[0]; thisGlider->mask = gliderSrc[0]; } } } MoveGlider(thisGlider); } //-------------------------------------------------------------- MoveGliderBurning void MoveGliderBurning (gliderPtr thisGlider) { thisGlider->frame++; if (thisGlider->frame > 3) thisGlider->frame = 0; if (thisGlider->facing == kFaceLeft) { thisGlider->src = gliderSrc[25 + thisGlider->frame]; thisGlider->mask = gliderSrc[25 + thisGlider->frame]; } else { thisGlider->src = gliderSrc[21 + thisGlider->frame]; thisGlider->mask = gliderSrc[21 + thisGlider->frame]; } thisGlider->wasMode--; if (thisGlider->wasMode <= 0) { StartGliderFadingOut(thisGlider); PlayPrioritySound(kFadeOutSound, kFadeOutPriority); } MoveGlider(thisGlider); } //-------------------------------------------------------------- FadeGliderIn void FadeGliderIn (gliderPtr thisGlider) { if (thisGlider->frame == 0) PlayPrioritySound(kFadeInSound, kFadeInPriority); thisGlider->frame++; if (thisGlider->frame >= kLastFadeSequence) { FlagGliderNormal(thisGlider); thisGlider->enteredRect = thisGlider->dest; } else { if (thisGlider->facing == kFaceLeft) { thisGlider->src = gliderSrc[fadeInSequence[thisGlider->frame] + kLeftFadeOffset]; thisGlider->mask = gliderSrc[fadeInSequence[thisGlider->frame] + kLeftFadeOffset]; } else { thisGlider->src = gliderSrc[fadeInSequence[thisGlider->frame]]; thisGlider->mask = gliderSrc[fadeInSequence[thisGlider->frame]]; } } } //-------------------------------------------------------------- TransportGliderIn void TransportGliderIn (gliderPtr thisGlider) { if (thisGlider->frame == 0) PlayPrioritySound(kTransInSound, kTransInPriority); thisGlider->frame++; if (thisGlider->frame >= kLastFadeSequence) { FlagGliderNormal(thisGlider); thisGlider->enteredRect = thisGlider->dest; } else { if (thisGlider->facing == kFaceLeft) { thisGlider->src = gliderSrc[fadeInSequence[thisGlider->frame] + kLeftFadeOffset]; thisGlider->mask = gliderSrc[fadeInSequence[thisGlider->frame] + kLeftFadeOffset]; } else { thisGlider->src = gliderSrc[fadeInSequence[thisGlider->frame]]; thisGlider->mask = gliderSrc[fadeInSequence[thisGlider->frame]]; } } } //-------------------------------------------------------------- FadeGliderOut void FadeGliderOut (gliderPtr thisGlider) { thisGlider->frame--; if (thisGlider->frame < 0) OffAMortal(thisGlider); else { if (thisGlider->facing == kFaceLeft) { thisGlider->src = gliderSrc[fadeInSequence[thisGlider->frame] + kLeftFadeOffset]; thisGlider->mask = gliderSrc[fadeInSequence[thisGlider->frame] + kLeftFadeOffset]; } else { thisGlider->src = gliderSrc[fadeInSequence[thisGlider->frame]]; thisGlider->mask = gliderSrc[fadeInSequence[thisGlider->frame]]; } } } //-------------------------------------------------------------- MoveGliderUpStairs void MoveGliderUpStairs (gliderPtr thisGlider) { #define kClimbStairsSpeed -4 short vNotClipped; if (thisGlider->facing == kFaceLeft) { thisGlider->src = gliderSrc[2]; thisGlider->mask = gliderSrc[2]; } else { thisGlider->src = gliderSrc[1]; thisGlider->mask = gliderSrc[1]; } thisGlider->whole.bottom = thisGlider->dest.bottom; thisGlider->dest.top += kClimbStairsSpeed; thisGlider->dest.bottom += kClimbStairsSpeed; thisGlider->whole.top = thisGlider->dest.top; vNotClipped = thisGlider->dest.bottom - 29; if (vNotClipped < kGliderHigh) { if (vNotClipped <= 0) { thisGlider->dest.top = thisGlider->dest.bottom; thisGlider->src.top = thisGlider->src.bottom; thisGlider->mask.top = thisGlider->mask.bottom; takingTheStairs = true; if (twoPlayerGame) { if (onePlayerLeft) { if (playerDead == kPlayer1) MoveRoomToRoom(&theGlider2, kAbove); else MoveRoomToRoom(&theGlider, kAbove); } else { if (otherPlayerEscaped == kPlayerEscapedUpStairs) { otherPlayerEscaped = kNoOneEscaped; MoveRoomToRoom(thisGlider, kAbove); } else { otherPlayerEscaped = kPlayerEscapedUpStairs; RefreshScoreboard(kEscapedTitleMode); FlagGliderInLimbo(thisGlider, true); } } } else MoveRoomToRoom(thisGlider, kAbove); } else { thisGlider->dest.top = thisGlider->dest.bottom - vNotClipped; thisGlider->src.top = thisGlider->src.bottom - vNotClipped; thisGlider->mask.top = thisGlider->mask.bottom - vNotClipped; } } } //-------------------------------------------------------------- FinishGliderUpStairs void FinishGliderUpStairs (gliderPtr thisGlider) { #define kVClimbStairsSpeed -4 #define kHClimbStairsSpeed -4 short hNotClipped; thisGlider->src = gliderSrc[2]; thisGlider->mask = gliderSrc[2]; thisGlider->whole.bottom = thisGlider->dest.bottom; thisGlider->dest.top += kVClimbStairsSpeed; thisGlider->dest.bottom += kVClimbStairsSpeed; thisGlider->whole.top = thisGlider->dest.top; thisGlider->whole.right = thisGlider->dest.right; thisGlider->dest.left += kHClimbStairsSpeed; thisGlider->dest.right += kHClimbStairsSpeed; thisGlider->whole.left = thisGlider->dest.left; thisGlider->wholeShadow.right = thisGlider->destShadow.right; thisGlider->destShadow.left += kHClimbStairsSpeed; thisGlider->destShadow.right += kHClimbStairsSpeed; thisGlider->wholeShadow.left = thisGlider->destShadow.left; hNotClipped = rightClip - thisGlider->dest.left; if (hNotClipped < kGliderWide) { thisGlider->dest.right = thisGlider->dest.left + hNotClipped; thisGlider->src.right = thisGlider->src.left + hNotClipped; thisGlider->mask.right = thisGlider->mask.left + hNotClipped; thisGlider->destShadow.right = thisGlider->dest.right; } else { if (thisGlider->frame == kWasBurning) FlagGliderBurning(thisGlider); else FlagGliderNormal(thisGlider); thisGlider->hVel = kHClimbStairsSpeed; thisGlider->hDesiredVel = kHClimbStairsSpeed; thisGlider->vVel = kVClimbStairsSpeed; thisGlider->vDesiredVel = kVClimbStairsSpeed; thisGlider->enteredRect = thisGlider->dest; } } //-------------------------------------------------------------- MoveGliderDownStairs void MoveGliderDownStairs (gliderPtr thisGlider) { #define kVDropStairsSpeed 4 #define kHDropStairsSpeed 4 short hNotClipped; if (thisGlider->facing == kFaceLeft) { thisGlider->src = gliderSrc[2]; thisGlider->mask = gliderSrc[2]; } else { thisGlider->src = gliderSrc[0]; thisGlider->mask = gliderSrc[0]; } thisGlider->whole.left = thisGlider->dest.left; thisGlider->dest.left += kHDropStairsSpeed; thisGlider->dest.right += kHDropStairsSpeed; thisGlider->whole.right = thisGlider->dest.right; thisGlider->wholeShadow.left = thisGlider->destShadow.left; thisGlider->destShadow.left += kHDropStairsSpeed; thisGlider->destShadow.right += kHDropStairsSpeed; thisGlider->wholeShadow.right = thisGlider->destShadow.right; thisGlider->whole.top = thisGlider->dest.top; thisGlider->dest.top += kVDropStairsSpeed; thisGlider->dest.bottom += kVDropStairsSpeed; thisGlider->whole.bottom = thisGlider->dest.bottom; hNotClipped = rightClip - thisGlider->dest.left; if (hNotClipped < kGliderWide) { if (hNotClipped <= 0) { thisGlider->dest.right = thisGlider->dest.left; thisGlider->src.right = thisGlider->src.left; thisGlider->mask.right = thisGlider->mask.left; thisGlider->destShadow.right = thisGlider->dest.right; takingTheStairs = true; if (twoPlayerGame) { if (onePlayerLeft) { if (playerDead == kPlayer1) MoveRoomToRoom(&theGlider2, kBelow); else MoveRoomToRoom(&theGlider, kBelow); } else { if (otherPlayerEscaped == kPlayerEscapedDownStairs) { otherPlayerEscaped = kNoOneEscaped; MoveRoomToRoom(thisGlider, kBelow); } else { otherPlayerEscaped = kPlayerEscapedDownStairs; RefreshScoreboard(kEscapedTitleMode); FlagGliderInLimbo(thisGlider, true); } } } else MoveRoomToRoom(thisGlider, kBelow); } else { thisGlider->dest.right = thisGlider->dest.left + hNotClipped; thisGlider->src.right = thisGlider->src.left + hNotClipped; thisGlider->mask.right = thisGlider->mask.left + hNotClipped; thisGlider->destShadow.right = thisGlider->dest.right; } } } //-------------------------------------------------------------- FinishGliderDownStairs void FinishGliderDownStairs (gliderPtr thisGlider) { #define kVDropStairsSpeed 4 #define kHDropStairsSpeed 4 short hNotClipped; thisGlider->src = gliderSrc[0]; thisGlider->mask = gliderSrc[0]; thisGlider->whole.left = thisGlider->dest.left; thisGlider->dest.left += kHDropStairsSpeed; thisGlider->dest.right += kHDropStairsSpeed; thisGlider->whole.right = thisGlider->dest.right; thisGlider->wholeShadow.left = thisGlider->destShadow.left; thisGlider->destShadow.left += kHDropStairsSpeed; thisGlider->destShadow.right += kHDropStairsSpeed; thisGlider->wholeShadow.right = thisGlider->destShadow.right; thisGlider->whole.top = thisGlider->dest.top; thisGlider->dest.top += kVDropStairsSpeed; thisGlider->dest.bottom += kVDropStairsSpeed; thisGlider->whole.bottom = thisGlider->dest.bottom; hNotClipped = thisGlider->dest.right - leftClip; if (hNotClipped < kGliderWide) { thisGlider->dest.left = thisGlider->dest.right - hNotClipped; thisGlider->src.left = thisGlider->src.right - hNotClipped; thisGlider->mask.left = thisGlider->mask.right - hNotClipped; thisGlider->destShadow.left = thisGlider->dest.left; } else { if (thisGlider->frame == kWasBurning) FlagGliderBurning(thisGlider); else FlagGliderNormal(thisGlider); thisGlider->hVel = kHDropStairsSpeed; thisGlider->hDesiredVel = kHDropStairsSpeed; thisGlider->vVel = kVDropStairsSpeed; thisGlider->vDesiredVel = kVDropStairsSpeed; thisGlider->enteredRect = thisGlider->dest; } } //-------------------------------------------------------------- MoveGliderFaceLeft void MoveGliderFaceLeft (gliderPtr thisGlider) { thisGlider->src = gliderSrc[thisGlider->frame]; thisGlider->mask = gliderSrc[thisGlider->frame]; MoveGlider(thisGlider); thisGlider->frame--; if (thisGlider->frame < kFirstAboutFaceFrame) { thisGlider->mode = kGliderNormal; thisGlider->facing = kFaceLeft; } } //-------------------------------------------------------------- MoveGliderFaceRight void MoveGliderFaceRight (gliderPtr thisGlider) { thisGlider->src = gliderSrc[thisGlider->frame]; thisGlider->mask = gliderSrc[thisGlider->frame]; MoveGlider(thisGlider); thisGlider->frame++; if (thisGlider->frame > kLastAboutFaceFrame) { thisGlider->mode = kGliderNormal; thisGlider->facing = kFaceRight; } } //-------------------------------------------------------------- TransportGliderOut void TransportGliderOut (gliderPtr thisGlider) { Rect tempRect; thisGlider->frame--; if (thisGlider->frame < 0) { tempRect = thisGlider->whole; QOffsetRect(&tempRect, playOriginH, playOriginV); CopyRectWorkToMain(&tempRect); tempRect = thisGlider->wholeShadow; QOffsetRect(&tempRect, playOriginH, playOriginV); CopyRectWorkToMain(&tempRect); thisGlider->dontDraw = true; if (twoPlayerGame) { if (onePlayerLeft) { if (playerDead == kPlayer1) TransportRoomToRoom(&theGlider2); else TransportRoomToRoom(&theGlider); } else { if (otherPlayerEscaped == kPlayerTransportedOut) { otherPlayerEscaped = kNoOneEscaped; TransportRoomToRoom(thisGlider); } else { otherPlayerEscaped = kPlayerTransportedOut; RefreshScoreboard(kEscapedTitleMode); FlagGliderInLimbo(thisGlider, true); } } } else { TransportRoomToRoom(thisGlider); } } else { if (thisGlider->facing == kFaceLeft) { thisGlider->src = gliderSrc[fadeInSequence[thisGlider->frame] + kLeftFadeOffset]; thisGlider->mask = gliderSrc[fadeInSequence[thisGlider->frame] + kLeftFadeOffset]; } else { thisGlider->src = gliderSrc[fadeInSequence[thisGlider->frame]]; thisGlider->mask = gliderSrc[fadeInSequence[thisGlider->frame]]; } } } //-------------------------------------------------------------- MoveGliderDownDuct void MoveGliderDownDuct (gliderPtr thisGlider) { #define kVDropDuctSpeed 4 Rect tempRect; short vNotClipped; if (thisGlider->facing == kFaceLeft) { thisGlider->src = gliderSrc[2]; thisGlider->mask = gliderSrc[2]; } else { thisGlider->src = gliderSrc[0]; thisGlider->mask = gliderSrc[0]; } if (thisGlider->dest.left < thisGlider->clip.left) { thisGlider->whole.left = thisGlider->dest.left; thisGlider->dest.left++; thisGlider->dest.right++; thisGlider->whole.right = thisGlider->dest.right; thisGlider->wholeShadow.left = thisGlider->destShadow.left; thisGlider->destShadow.left++; thisGlider->destShadow.right++; thisGlider->wholeShadow.right = thisGlider->destShadow.right; } else if (thisGlider->dest.left > thisGlider->clip.left) { thisGlider->whole.right = thisGlider->dest.right; thisGlider->dest.left--; thisGlider->dest.right--; thisGlider->whole.left = thisGlider->dest.left; thisGlider->wholeShadow.right = thisGlider->destShadow.right; thisGlider->destShadow.left--; thisGlider->destShadow.right--; thisGlider->wholeShadow.left = thisGlider->destShadow.left; } thisGlider->whole.top = thisGlider->dest.top; thisGlider->dest.top += kVDropDuctSpeed; thisGlider->dest.bottom += kVDropDuctSpeed; thisGlider->whole.bottom = thisGlider->dest.bottom; vNotClipped = 315 - thisGlider->dest.top; if (vNotClipped < kGliderHigh) { if (vNotClipped <= 0) { tempRect = thisGlider->whole; QOffsetRect(&tempRect, playOriginH, playOriginV); CopyRectWorkToMain(&tempRect); tempRect = thisGlider->wholeShadow; QOffsetRect(&tempRect, playOriginH, playOriginV); CopyRectWorkToMain(&tempRect); thisGlider->dontDraw = true; if (twoPlayerGame) { if (onePlayerLeft) { if (playerDead == kPlayer1) MoveDuctToDuct(&theGlider2); else MoveDuctToDuct(&theGlider); } else { if (otherPlayerEscaped == kPlayerDuckedOut) { otherPlayerEscaped = kNoOneEscaped; MoveDuctToDuct(thisGlider); } else { otherPlayerEscaped = kPlayerDuckedOut; RefreshScoreboard(kEscapedTitleMode); FlagGliderInLimbo(thisGlider, true); } } } else MoveDuctToDuct(thisGlider); } else { thisGlider->dest.bottom = thisGlider->dest.top + vNotClipped; thisGlider->src.bottom = thisGlider->src.top + vNotClipped; thisGlider->mask.bottom = thisGlider->mask.top + vNotClipped; } } } //-------------------------------------------------------------- MoveGliderUpDuct void MoveGliderUpDuct (gliderPtr thisGlider) { #define kVRiseDuctSpeed -4 Rect tempRect; short vNotClipped; if (thisGlider->facing == kFaceLeft) { thisGlider->src = gliderSrc[2]; thisGlider->mask = gliderSrc[2]; } else { thisGlider->src = gliderSrc[0]; thisGlider->mask = gliderSrc[0]; } if (thisGlider->dest.left < thisGlider->clip.left) { thisGlider->whole.left = thisGlider->dest.left; thisGlider->dest.left++; thisGlider->dest.right++; thisGlider->whole.right = thisGlider->dest.right; thisGlider->wholeShadow.left = thisGlider->destShadow.left; thisGlider->destShadow.left++; thisGlider->destShadow.right++; thisGlider->wholeShadow.right = thisGlider->destShadow.right; } else if (thisGlider->dest.left > thisGlider->clip.left) { thisGlider->whole.right = thisGlider->dest.right; thisGlider->dest.left--; thisGlider->dest.right--; thisGlider->whole.left = thisGlider->dest.left; thisGlider->wholeShadow.right = thisGlider->destShadow.right; thisGlider->destShadow.left--; thisGlider->destShadow.right--; thisGlider->wholeShadow.left = thisGlider->destShadow.left; } thisGlider->whole.bottom = thisGlider->dest.bottom; thisGlider->dest.top += kVRiseDuctSpeed; thisGlider->dest.bottom += kVRiseDuctSpeed; thisGlider->whole.top = thisGlider->dest.top; vNotClipped = thisGlider->dest.bottom - (kCeilingTransTop + 1); if (vNotClipped < kGliderHigh) { if (vNotClipped <= 0) { tempRect = thisGlider->whole; QOffsetRect(&tempRect, playOriginH, playOriginV); CopyRectWorkToMain(&tempRect); tempRect = thisGlider->wholeShadow; QOffsetRect(&tempRect, playOriginH, playOriginV); CopyRectWorkToMain(&tempRect); thisGlider->dontDraw = true; if (twoPlayerGame) { if (onePlayerLeft) { if (playerDead == kPlayer1) MoveDuctToDuct(&theGlider2); else MoveDuctToDuct(&theGlider); } else { if (otherPlayerEscaped == kPlayerDuckedOut) { otherPlayerEscaped = kNoOneEscaped; MoveDuctToDuct(thisGlider); } else { otherPlayerEscaped = kPlayerDuckedOut; RefreshScoreboard(kEscapedTitleMode); FlagGliderInLimbo(thisGlider, true); } } } else MoveDuctToDuct(thisGlider); } else { thisGlider->dest.top = thisGlider->dest.bottom - vNotClipped; thisGlider->src.top = thisGlider->src.bottom - vNotClipped; thisGlider->mask.top = thisGlider->mask.bottom - vNotClipped; } } } //-------------------------------------------------------------- FinishGliderMailingLeft void FinishGliderMailingLeft (gliderPtr thisGlider) { #define kHPushMailSpeed -4 short hNotClipped; if (thisGlider->dest.left == thisGlider->dest.right) PlayPrioritySound(kTransInSound, kTransInPriority); thisGlider->whole.right = thisGlider->dest.right; thisGlider->dest.left += kHPushMailSpeed; thisGlider->dest.right += kHPushMailSpeed; thisGlider->whole.left = thisGlider->dest.left; thisGlider->wholeShadow.right = thisGlider->destShadow.right; thisGlider->destShadow.left += kHPushMailSpeed; thisGlider->destShadow.right += kHPushMailSpeed; thisGlider->wholeShadow.left = thisGlider->destShadow.left; hNotClipped = thisGlider->clip.right - thisGlider->dest.left; if (hNotClipped < kGliderWide) { thisGlider->dest.right = thisGlider->dest.left + hNotClipped; thisGlider->src.right = thisGlider->src.left + hNotClipped; thisGlider->mask.right = thisGlider->mask.left + hNotClipped; thisGlider->destShadow.right = thisGlider->dest.right; } else { if (thisGlider->frame == kWasBurning) FlagGliderBurning(thisGlider); else FlagGliderNormal(thisGlider); thisGlider->enteredRect = thisGlider->dest; } } //-------------------------------------------------------------- FinishGliderMailingRight void FinishGliderMailingRight (gliderPtr thisGlider) { #define kHPushMailRtSpeed 4 short hNotClipped; if (thisGlider->dest.left == thisGlider->dest.right) PlayPrioritySound(kTransInSound, kTransInPriority); thisGlider->whole.left = thisGlider->dest.left; thisGlider->dest.left += kHPushMailRtSpeed; thisGlider->dest.right += kHPushMailRtSpeed; thisGlider->whole.right = thisGlider->dest.right; thisGlider->wholeShadow.left = thisGlider->destShadow.left; thisGlider->destShadow.left += kHPushMailRtSpeed; thisGlider->destShadow.right += kHPushMailRtSpeed; thisGlider->wholeShadow.right = thisGlider->destShadow.right; hNotClipped = thisGlider->dest.right - thisGlider->clip.left; if (hNotClipped < kGliderWide) { thisGlider->dest.left = thisGlider->dest.right - hNotClipped; thisGlider->src.left = thisGlider->src.right - hNotClipped; thisGlider->mask.left = thisGlider->mask.right - hNotClipped; thisGlider->destShadow.left = thisGlider->dest.left; } else { if (thisGlider->frame == kWasBurning) FlagGliderBurning(thisGlider); else FlagGliderNormal(thisGlider); thisGlider->enteredRect = thisGlider->dest; } } //-------------------------------------------------------------- FinishGliderDuctingIn void FinishGliderDuctingIn (gliderPtr thisGlider) { #define kVDropStairsSpeed 4 short vNotClipped; if (thisGlider->dest.top == thisGlider->dest.bottom) PlayPrioritySound(kTransInSound, kTransInPriority); thisGlider->whole.top = thisGlider->dest.top; thisGlider->dest.top += kVDropDuctSpeed; thisGlider->dest.bottom += kVDropDuctSpeed; thisGlider->whole.bottom = thisGlider->dest.bottom; vNotClipped = thisGlider->dest.bottom - (kCeilingTransTop + 1); if (vNotClipped < kGliderHigh) { thisGlider->dest.top = thisGlider->dest.bottom - vNotClipped; thisGlider->src.top = thisGlider->src.bottom - vNotClipped; thisGlider->mask.top = thisGlider->mask.bottom - vNotClipped; } else { if (thisGlider->frame == kWasBurning) FlagGliderBurning(thisGlider); else FlagGliderNormal(thisGlider); thisGlider->enteredRect = thisGlider->dest; FlagStillOvers(thisGlider); } } //-------------------------------------------------------------- MoveGliderInMailLeft void MoveGliderInMailLeft (gliderPtr thisGlider) { #define kHMailPullSpeed 4 #define kVMailDropSpeed 2 Rect tempRect; short fromIdealTop, hNotClipped; if (thisGlider->facing == kFaceLeft) { thisGlider->src = gliderSrc[2]; thisGlider->mask = gliderSrc[2]; } else { thisGlider->src = gliderSrc[0]; thisGlider->mask = gliderSrc[0]; } if (thisGlider->dest.top < thisGlider->clip.top) { fromIdealTop = thisGlider->clip.top - thisGlider->dest.top; if (fromIdealTop > kVMailDropSpeed) fromIdealTop = kVMailDropSpeed; thisGlider->whole.top = thisGlider->dest.top; thisGlider->dest.top += fromIdealTop; thisGlider->dest.bottom += fromIdealTop; thisGlider->whole.bottom = thisGlider->dest.bottom; } thisGlider->whole.left = thisGlider->dest.left; thisGlider->dest.left += kHMailPullSpeed; thisGlider->dest.right += kHMailPullSpeed; thisGlider->whole.right = thisGlider->dest.right; thisGlider->wholeShadow.left = thisGlider->destShadow.left; thisGlider->destShadow.left += kHMailPullSpeed; thisGlider->destShadow.right += kHMailPullSpeed; thisGlider->wholeShadow.right = thisGlider->destShadow.right; hNotClipped = thisGlider->clip.right - thisGlider->dest.left; if (hNotClipped < kGliderWide) { if (hNotClipped <= 0) { tempRect = thisGlider->whole; QOffsetRect(&tempRect, playOriginH, playOriginV); CopyRectWorkToMain(&tempRect); tempRect = thisGlider->wholeShadow; QOffsetRect(&tempRect, playOriginH, playOriginV); CopyRectWorkToMain(&tempRect); thisGlider->dontDraw = true; if (twoPlayerGame) { if (onePlayerLeft) { if (playerDead == kPlayer1) MoveMailToMail(&theGlider2); else MoveMailToMail(&theGlider); } else { if (otherPlayerEscaped == kPlayerMailedOut) { otherPlayerEscaped = kNoOneEscaped; MoveMailToMail(thisGlider); } else { otherPlayerEscaped = kPlayerMailedOut; RefreshScoreboard(kEscapedTitleMode); FlagGliderInLimbo(thisGlider, true); } } } else MoveMailToMail(thisGlider); } else { thisGlider->dest.right = thisGlider->dest.left + hNotClipped; thisGlider->src.right = thisGlider->src.left + hNotClipped; thisGlider->mask.right = thisGlider->mask.left + hNotClipped; thisGlider->destShadow.right = thisGlider->dest.right; } } } //-------------------------------------------------------------- MoveGliderInMailRight void MoveGliderInMailRight (gliderPtr thisGlider) { #define kHMailPullRtSpeed -4 #define kVMailDropSpeed 2 Rect tempRect; short fromIdealTop, hNotClipped; if (thisGlider->facing == kFaceLeft) { thisGlider->src = gliderSrc[2]; thisGlider->mask = gliderSrc[2]; } else { thisGlider->src = gliderSrc[0]; thisGlider->mask = gliderSrc[0]; } if (thisGlider->dest.top < thisGlider->clip.top) { fromIdealTop = thisGlider->clip.top - thisGlider->dest.top; if (fromIdealTop > kVMailDropSpeed) fromIdealTop = kVMailDropSpeed; thisGlider->whole.top = thisGlider->dest.top; thisGlider->dest.top += fromIdealTop; thisGlider->dest.bottom += fromIdealTop; thisGlider->whole.bottom = thisGlider->dest.bottom; } thisGlider->whole.right = thisGlider->dest.right; thisGlider->dest.left += kHMailPullRtSpeed; thisGlider->dest.right += kHMailPullRtSpeed; thisGlider->whole.left = thisGlider->dest.left; thisGlider->wholeShadow.right = thisGlider->destShadow.right; thisGlider->destShadow.left += kHMailPullRtSpeed; thisGlider->destShadow.right += kHMailPullRtSpeed; thisGlider->wholeShadow.left = thisGlider->destShadow.left; hNotClipped = thisGlider->dest.right - thisGlider->clip.left; if (hNotClipped < kGliderWide) { if (hNotClipped <= 0) { tempRect = thisGlider->whole; QOffsetRect(&tempRect, playOriginH, playOriginV); CopyRectWorkToMain(&tempRect); tempRect = thisGlider->wholeShadow; QOffsetRect(&tempRect, playOriginH, playOriginV); CopyRectWorkToMain(&tempRect); thisGlider->dontDraw = true; if (twoPlayerGame) { if (onePlayerLeft) { if (playerDead == kPlayer1) MoveMailToMail(&theGlider2); else MoveMailToMail(&theGlider); } else { if (otherPlayerEscaped == kPlayerMailedOut) { otherPlayerEscaped = kNoOneEscaped; MoveMailToMail(thisGlider); } else { otherPlayerEscaped = kPlayerMailedOut; RefreshScoreboard(kEscapedTitleMode); FlagGliderInLimbo(thisGlider, true); } } } else MoveMailToMail(thisGlider); } else { thisGlider->dest.left = thisGlider->dest.right - hNotClipped; thisGlider->src.left = thisGlider->src.right - hNotClipped; thisGlider->mask.left = thisGlider->mask.right - hNotClipped; thisGlider->destShadow.left = thisGlider->dest.left; } } } //-------------------------------------------------------------- DeckGliderInFoil void DeckGliderInFoil (gliderPtr thisGlider) { showFoil = true; if (twoPlayerGame) { SetPort((GrafPtr)glidSrcMap); LoadGraphic(kGliderFoilPictID); SetPort((GrafPtr)glid2SrcMap); LoadGraphic(kGliderFoil2PictID); } if (thisGlider->facing == kFaceLeft) { thisGlider->src = gliderSrc[(thisGlider->frame + 2) + kLeftFadeOffset]; thisGlider->mask = gliderSrc[(thisGlider->frame + 2) + kLeftFadeOffset]; } else { thisGlider->src = gliderSrc[thisGlider->frame + 2]; thisGlider->mask = gliderSrc[thisGlider->frame + 2]; } } //-------------------------------------------------------------- MoveGliderFoilGoing void MoveGliderFoilGoing (gliderPtr thisGlider) { thisGlider->frame++; if (thisGlider->frame > 8) { FlagGliderNormal(thisGlider); } else { if (thisGlider->frame < 5) { if (thisGlider->facing == kFaceLeft) { thisGlider->src = gliderSrc[(10 - thisGlider->frame) + kLeftFadeOffset]; thisGlider->mask = gliderSrc[(10 - thisGlider->frame) + kLeftFadeOffset]; } else { thisGlider->src = gliderSrc[10 - thisGlider->frame]; thisGlider->mask = gliderSrc[10 - thisGlider->frame]; } } else DeckGliderInFoil(thisGlider); } MoveGlider(thisGlider); } //-------------------------------------------------------------- xxxx void RemoveFoilFromGlider (gliderPtr thisGlider) { showFoil = false; if (twoPlayerGame) { SetPort((GrafPtr)glidSrcMap); LoadGraphic(kGliderPictID); SetPort((GrafPtr)glid2SrcMap); LoadGraphic(kGlider2PictID); } if (thisGlider->facing == kFaceLeft) { thisGlider->src = gliderSrc[(thisGlider->frame + 2) + kLeftFadeOffset]; thisGlider->mask = gliderSrc[(thisGlider->frame + 2) + kLeftFadeOffset]; } else { thisGlider->src = gliderSrc[thisGlider->frame + 2]; thisGlider->mask = gliderSrc[thisGlider->frame + 2]; } } //-------------------------------------------------------------- MoveGliderFoilLosing void MoveGliderFoilLosing (gliderPtr thisGlider) { thisGlider->frame++; if (thisGlider->frame > 8) FlagGliderNormal(thisGlider); else { if (thisGlider->frame < 5) { if (thisGlider->facing == kFaceLeft) { thisGlider->src = gliderSrc[(10 - thisGlider->frame) + kLeftFadeOffset]; thisGlider->mask = gliderSrc[(10 - thisGlider->frame) + kLeftFadeOffset]; } else { thisGlider->src = gliderSrc[10 - thisGlider->frame]; thisGlider->mask = gliderSrc[10 - thisGlider->frame]; } } else RemoveFoilFromGlider(thisGlider); } MoveGlider(thisGlider); } //-------------------------------------------------------------- MoveGliderShredding void MoveGliderShredding (gliderPtr thisGlider) { #define kDropShredSlow 1 #define kDropShredFast 4 short vNotClipped; if (thisGlider->frame > 0) { if (thisGlider->facing == kFaceLeft) { thisGlider->src = gliderSrc[2]; thisGlider->mask = gliderSrc[2]; } else { thisGlider->src = gliderSrc[0]; thisGlider->mask = gliderSrc[0]; } vNotClipped = thisGlider->frame - thisGlider->dest.top; if (vNotClipped < kGliderHigh) { thisGlider->whole.top = thisGlider->dest.top; thisGlider->dest.top += kDropShredSlow; thisGlider->dest.bottom += kDropShredSlow; thisGlider->whole.bottom = thisGlider->dest.bottom; shadowVisible = false; PlayPrioritySound(kShredSound, kShredPriority); } else { thisGlider->whole.top = thisGlider->dest.top; thisGlider->dest.top += kDropShredFast; thisGlider->dest.bottom += kDropShredFast; thisGlider->whole.bottom = thisGlider->dest.bottom; } vNotClipped = thisGlider->frame - thisGlider->dest.top; if (vNotClipped < kGliderHigh) { if (vNotClipped <= 0) { AddAShreddedGlider(&thisGlider->dest); thisGlider->frame = kShredderCountdown; } else { thisGlider->dest.bottom = thisGlider->dest.top + vNotClipped; thisGlider->src.bottom = thisGlider->src.top + vNotClipped; thisGlider->mask.bottom = thisGlider->mask.top + vNotClipped; } } } else { thisGlider->frame++; if (thisGlider->frame >= 0) OffAMortal(thisGlider); } } //-------------------------------------------------------------- HandleIdleGlider void HandleIdleGlider (gliderPtr thisGlider) { thisGlider->hVel--; if (thisGlider->hVel <= 0) { thisGlider->mode = thisGlider->wasMode; thisGlider->dontDraw = false; } } //-------------------------------------------------------------- HandleGlider void HandleGlider (gliderPtr thisGlider) { switch (thisGlider->mode) { case kGliderNormal: MoveGliderNormal(thisGlider); break; case kGliderFadingIn: FadeGliderIn(thisGlider); break; case kGliderFadingOut: FadeGliderOut(thisGlider); break; case kGliderGoingUp: MoveGliderUpStairs(thisGlider); break; case kGliderComingUp: FinishGliderUpStairs(thisGlider); break; case kGliderGoingDown: MoveGliderDownStairs(thisGlider); break; case kGliderComingDown: FinishGliderDownStairs(thisGlider); break; case kGliderFaceLeft: MoveGliderFaceLeft(thisGlider); break; case kGliderFaceRight: MoveGliderFaceRight(thisGlider); break; case kGliderBurning: MoveGliderBurning(thisGlider); break; case kGliderTransporting: TransportGliderOut(thisGlider); break; case kGliderDuctingDown: MoveGliderDownDuct(thisGlider); break; case kGliderDuctingUp: MoveGliderUpDuct(thisGlider); break; case kGliderDuctingIn: FinishGliderDuctingIn(thisGlider); break; case kGliderMailInLeft: MoveGliderInMailLeft(thisGlider); break; case kGliderMailOutLeft: // <-- G _[] FinishGliderMailingLeft(thisGlider); break; case kGliderMailInRight: MoveGliderInMailRight(thisGlider); break; case kGliderMailOutRight: // []_ G --> FinishGliderMailingRight(thisGlider); break; case kGliderGoingFoil: MoveGliderFoilGoing(thisGlider); break; case kGliderLosingFoil: MoveGliderFoilLosing(thisGlider); break; case kGliderShredding: MoveGliderShredding(thisGlider); break; case kGliderInLimbo: break; case kGliderIdle: HandleIdleGlider(thisGlider); break; case kGliderTransportingIn: TransportGliderIn(thisGlider); break; } thisGlider->ignoreLeft = false; thisGlider->ignoreRight = false; thisGlider->ignoreGround = false; } //-------------------------------------------------------------- OffsetGlider void OffsetGlider (gliderPtr thisGlider, short where) { if ((twoPlayerGame) && (onePlayerLeft) && (thisGlider->which == playerDead)) return; switch (where) { case kToRight: thisGlider->dest.left += kRoomWide; thisGlider->dest.right += kRoomWide; thisGlider->destShadow.left += kRoomWide; thisGlider->destShadow.right += kRoomWide; thisGlider->whole = thisGlider->dest; thisGlider->wholeShadow = thisGlider->destShadow; break; case kToLeft: thisGlider->dest.left -= kRoomWide; thisGlider->dest.right -= kRoomWide; thisGlider->destShadow.left -= kRoomWide; thisGlider->destShadow.right -= kRoomWide; thisGlider->whole = thisGlider->dest; thisGlider->wholeShadow = thisGlider->destShadow; break; case kAbove: thisGlider->dest.top -= kTileHigh; thisGlider->dest.bottom -= kTileHigh; thisGlider->whole = thisGlider->dest; break; case kBelow: thisGlider->dest.top += kTileHigh; thisGlider->dest.bottom += kTileHigh; thisGlider->whole = thisGlider->dest; break; } } //-------------------------------------------------------------- OffAMortal void OffAMortal (gliderPtr thisGlider) { if (gameOver) return; if (numShredded > 0) RemoveShreds(); mortals--; if (mortals < 0) { HideGlider(thisGlider); if (twoPlayerGame) { if (mortals < -1) // both players are now dead { FlagGameOver(); thisGlider->dontDraw = true; } else { FlagGliderInLimbo(thisGlider, false); thisGlider->dontDraw = true; onePlayerLeft = true; playerDead = thisGlider->which; } } else { FlagGameOver(); thisGlider->dontDraw = true; } } else { QuickGlidersRefresh(); HideGlider(thisGlider); } if (mortals >= 0) { if (thisGlider->mode == kGliderGoingFoil) DeckGliderInFoil(thisGlider); FlagGliderNormal(thisGlider); if (playerSuicide) FollowTheLeader(); else { StartGliderFadingIn(thisGlider); thisGlider->dest = thisGlider->enteredRect; thisGlider->whole = thisGlider->dest; thisGlider->destShadow.left = thisGlider->dest.left; thisGlider->destShadow.right = thisGlider->dest.right; thisGlider->wholeShadow = thisGlider->destShadow; } } else if ((mortals == -1) && (onePlayerLeft) && (!gameOver)) { switch (otherPlayerEscaped) { case kPlayerEscapedUp: case kPlayerEscapingUpStairs: case kPlayerEscapedUpStairs: if (playerDead == kPlayer1) MoveRoomToRoom(&theGlider2, kAbove); else MoveRoomToRoom(&theGlider, kAbove); break; case kPlayerEscapedDown: case kPlayerEscapingDownStairs: case kPlayerEscapedDownStairs: if (playerDead == kPlayer1) MoveRoomToRoom(&theGlider2, kBelow); else MoveRoomToRoom(&theGlider, kBelow); break; case kPlayerEscapedLeft: if (playerDead == kPlayer1) MoveRoomToRoom(&theGlider2, kToLeft); else MoveRoomToRoom(&theGlider, kToLeft); break; case kPlayerEscapedRight: if (playerDead == kPlayer1) MoveRoomToRoom(&theGlider2, kToRight); else MoveRoomToRoom(&theGlider, kToRight); break; case kPlayerTransportedOut: if (playerDead == kPlayer1) TransportRoomToRoom(&theGlider2); else TransportRoomToRoom(&theGlider); break; case kPlayerMailedOut: if (playerDead == kPlayer1) MoveMailToMail(&theGlider2); else MoveMailToMail(&theGlider); break; case kPlayerDuckedOut: if (playerDead == kPlayer1) MoveDuctToDuct(&theGlider2); else MoveDuctToDuct(&theGlider); break; default: break; } otherPlayerEscaped = kPlayerIsDeadForever; } } \ No newline at end of file diff --git a/Sources/Prefs.c b/Sources/Prefs.c deleted file mode 100755 index 1a544b0..0000000 --- a/Sources/Prefs.c +++ /dev/null @@ -1 +0,0 @@ - //============================================================================ //---------------------------------------------------------------------------- // Prefs.c //---------------------------------------------------------------------------- //============================================================================ #include #include #include #include #include #include "Externs.h" #include "Environ.h" #define kPrefCreatorType 'ozm5' #define kPrefFileType 'gliP' #define kPrefFileName "\pGlider Prefs" #define kDefaultPrefFName "\pPreferences" #define kPrefsStringsID 160 #define kNewPrefsAlertID 160 #define kPrefsFNameIndex 1 Boolean CanUseFindFolder (void); Boolean GetPrefsFPath (long *, short *); Boolean CreatePrefsFolder (short *); Boolean WritePrefs (long *, short *, prefsInfo *); OSErr ReadPrefs (long *, short *, prefsInfo *); Boolean DeletePrefs (long *, short *); void BringUpDeletePrefsAlert (void); //============================================================== Functions //-------------------------------------------------------------- CanUseFindFolder Boolean CanUseFindFolder (void) { OSErr theErr; long theFeature; if (!thisMac.hasGestalt) return(false); theErr = Gestalt(gestaltFindFolderAttr, &theFeature); if (theErr != noErr) return(false); if (!BitTst(&theFeature, 31 - gestaltFindFolderPresent)) return(false); else return(true); } //-------------------------------------------------------------- GetPrefsFPath Boolean GetPrefsFPath (long *prefDirID, short *systemVolRef) { OSErr theErr; theErr = FindFolder(kOnSystemDisk, kPreferencesFolderType, kCreateFolder, systemVolRef, prefDirID); if (theErr != noErr) return(false); return(true); } //-------------------------------------------------------------- CreatePrefsFolder Boolean CreatePrefsFolder (short *systemVolRef) { HFileParam fileParamBlock; Str255 folderName; OSErr theErr; GetIndString(folderName, kPrefsStringsID, kPrefsFNameIndex); fileParamBlock.ioVRefNum = *systemVolRef; fileParamBlock.ioDirID = 0; fileParamBlock.ioNamePtr = folderName; fileParamBlock.ioCompletion = nil; theErr = PBDirCreate((HParmBlkPtr)&fileParamBlock, false); if (theErr != noErr) { CheckFileError(theErr, "\pPreferences"); return(false); } return(true); } //-------------------------------------------------------------- WritePrefs Boolean WritePrefs (long *prefDirID, short *systemVolRef, prefsInfo *thePrefs) { OSErr theErr; short fileRefNum; long byteCount; FSSpec theSpecs; Str255 fileName = kPrefFileName; theErr = FSMakeFSSpec(*systemVolRef, *prefDirID, fileName, &theSpecs); if (theErr != noErr) { if (theErr != fnfErr) { CheckFileError(theErr, "\pPreferences"); return(false); } theErr = FSpCreate(&theSpecs, kPrefCreatorType, kPrefFileType, smSystemScript); if (theErr != noErr) { CheckFileError(theErr, "\pPreferences"); return(false); } } theErr = FSpOpenDF(&theSpecs, fsRdWrPerm, &fileRefNum); if (theErr != noErr) { CheckFileError(theErr, "\pPreferences"); return(false); } byteCount = sizeof(*thePrefs); theErr = FSWrite(fileRefNum, &byteCount, thePrefs); if (theErr != noErr) { CheckFileError(theErr, "\pPreferences"); return(false); } theErr = FSClose(fileRefNum); if (theErr != noErr) { CheckFileError(theErr, "\pPreferences"); return(false); } return(true); } //-------------------------------------------------------------- SavePrefs Boolean SavePrefs (prefsInfo *thePrefs, short versionNow) { long prefDirID; short systemVolRef; thePrefs->prefVersion = versionNow; if (!GetPrefsFPath(&prefDirID, &systemVolRef)) return(false); if (!WritePrefs(&prefDirID, &systemVolRef, thePrefs)) return(false); return(true); } //-------------------------------------------------------------- ReadPrefs OSErr ReadPrefs (long *prefDirID, short *systemVolRef, prefsInfo *thePrefs) { OSErr theErr; short fileRefNum; long byteCount; FSSpec theSpecs; Str255 fileName = kPrefFileName; theErr = FSMakeFSSpec(*systemVolRef, *prefDirID, fileName, &theSpecs); if (theErr != noErr) { if (theErr == fnfErr) return(theErr); else { CheckFileError(theErr, "\pPreferences"); return(theErr); } } theErr = FSpOpenDF(&theSpecs, fsRdWrPerm, &fileRefNum); if (theErr != noErr) { CheckFileError(theErr, "\pPreferences"); return(theErr); } byteCount = sizeof(*thePrefs); theErr = FSRead(fileRefNum, &byteCount, thePrefs); if (theErr != noErr) { if (theErr == eofErr) theErr = FSClose(fileRefNum); else { CheckFileError(theErr, "\pPreferences"); theErr = FSClose(fileRefNum); } return(theErr); } theErr = FSClose(fileRefNum); if (theErr != noErr) { CheckFileError(theErr, "\pPreferences"); return(theErr); } return(theErr); } //-------------------------------------------------------------- DeletePrefs Boolean DeletePrefs (long *dirID, short *volRef) { FSSpec theSpecs; Str255 fileName = kPrefFileName; OSErr theErr; theErr = FSMakeFSSpec(*volRef, *dirID, fileName, &theSpecs); if (theErr != noErr) return(false); else theErr = FSpDelete(&theSpecs); if (theErr != noErr) return(false); return(true); } //-------------------------------------------------------------- LoadPrefs Boolean LoadPrefs (prefsInfo *thePrefs, short versionNeed) { long prefDirID; OSErr theErr; short systemVolRef; Boolean noProblems; noProblems = GetPrefsFPath(&prefDirID, &systemVolRef); if (!noProblems) return(false); theErr = ReadPrefs(&prefDirID, &systemVolRef, thePrefs); if (theErr == eofErr) { BringUpDeletePrefsAlert(); noProblems = DeletePrefs(&prefDirID, &systemVolRef); return (false); } else if (theErr != noErr) return (false); if (thePrefs->prefVersion != versionNeed) { BringUpDeletePrefsAlert(); noProblems = DeletePrefs(&prefDirID, &systemVolRef); return(false); } return (true); } //-------------------------------------------------------------- BringUpDeletePrefsAlert void BringUpDeletePrefsAlert (void) { short whoCares; InitCursor(); // CenterAlert(kNewPrefsAlertID); whoCares = Alert(kNewPrefsAlertID, nil); } \ No newline at end of file diff --git a/Sources/RectUtils.c b/Sources/RectUtils.c deleted file mode 100755 index 0a01c0f..0000000 --- a/Sources/RectUtils.c +++ /dev/null @@ -1 +0,0 @@ -//============================================================================ //---------------------------------------------------------------------------- // RectUtils.c //---------------------------------------------------------------------------- //============================================================================ #include "Externs.h" #include "RectUtils.h" //============================================================== Functions //-------------------------------------------------------------- FrameWHRect // Given the top left corner and a width and height, this functionÉ // simply creates the necessary rectangle and frames it. void FrameWHRect (short left, short top, short wide, short high) { Rect theRect; theRect.left = left; theRect.top = top; theRect.right = left + wide; theRect.bottom = top + high; FrameRect(&theRect); } //-------------------------------------------------------------- NormalizeRect // This function ensures that a rect's top is less than it's bottomÉ // and that left is less than right. void NormalizeRect (Rect *theRect) { short tempSide; if (theRect->left > theRect->right) { tempSide = theRect->left; theRect->left = theRect->right; theRect->right = tempSide; } if (theRect->top > theRect->bottom) { tempSide = theRect->top; theRect->top = theRect->bottom; theRect->bottom = tempSide; } } //-------------------------------------------------------------- ZeroRectCorner // The rect passed in is slid over so that its top left corner isÉ // at coordinates (0, 0). void ZeroRectCorner (Rect *theRect) // Offset rect to (0, 0) { theRect->right -= theRect->left; theRect->bottom -= theRect->top; theRect->left = 0; theRect->top = 0; } //-------------------------------------------------------------- CenterRectOnPoint // Given a rectangle and a point, this function centers the rectangleÉ // on that point. void CenterRectOnPoint (Rect *theRect, Point where) { ZeroRectCorner(theRect); QOffsetRect(theRect, -HalfRectWide(theRect), -HalfRectTall(theRect)); QOffsetRect(theRect, where.h, where.v); } //-------------------------------------------------------------- HalfRectWide // Given a rectangle, this function returns the rect's width divided by 2. short HalfRectWide (Rect *theRect) { return ((theRect->right - theRect->left) / 2); } //-------------------------------------------------------------- HalfRectTall // Given a rectangle, this function returns the rect's height divided by 2. short HalfRectTall (Rect *theRect) { return ((theRect->bottom - theRect->top) / 2); } //-------------------------------------------------------------- RectWide // Given a rectangle, this simple function returns the rect's width. short RectWide (Rect *theRect) { return (theRect->right - theRect->left); } //-------------------------------------------------------------- RectTall // Given a rectangle, this simple function returns the rect's height. short RectTall (Rect *theRect) { return (theRect->bottom - theRect->top); } //-------------------------------------------------------------- GlobalToLocalRect // This function offsets a rectangle from global to local coordinates. // The "local" coordinate system is assumed to be the current port (window). void GlobalToLocalRect (Rect *theRect) { Point upperLeftPt; upperLeftPt.h = 0; upperLeftPt.v = 0; GlobalToLocal(&upperLeftPt); QOffsetRect(theRect, upperLeftPt.h, upperLeftPt.v); } //-------------------------------------------------------------- LocalToGlobalRect // This function offsets a rectangle from local to global coordinates. // The "local" coordinate system is assumed to be the current port (window). void LocalToGlobalRect (Rect *theRect) { Point upperLeftPt; upperLeftPt.h = 0; upperLeftPt.v = 0; LocalToGlobal(&upperLeftPt); QOffsetRect(theRect, upperLeftPt.h, upperLeftPt.v); } //-------------------------------------------------------------- CenterRectInRect // Given two rectangles, this function centers the first rectangleÉ // within the second. The second rect is unchanged. void CenterRectInRect (Rect *rectA, Rect *rectB) { short widthA, tallA; widthA = RectWide(rectA); tallA = RectTall(rectA); rectA->left = rectB->left + (RectWide(rectB) - widthA) / 2; rectA->right = rectA->left + widthA; rectA->top = rectB->top + (RectTall(rectB) - tallA) / 2; rectA->bottom = rectA->top + tallA; } //-------------------------------------------------------------- HOffsetRect // Just a simple function to offset a rectangle horizontally only. void HOffsetRect (Rect *theRect, short h) { theRect->left += h; theRect->right += h; } //-------------------------------------------------------------- VOffsetRect // Just a simple function to offset a rectangle vertically only. void VOffsetRect (Rect *theRect, short v) { theRect->top += v; theRect->bottom += v; } //-------------------------------------------------------------- IsRectLeftOfRect // Given two rects, this function returns true if the first rectangleÉ // is to the left of the second. Boolean IsRectLeftOfRect (Rect *rect1, Rect *rect2) { short offset; offset = (rect1->right - rect1->left) - (rect2->right - rect2->left) / 2; if ((rect1->left) < (rect2->left + offset)) return (true); else return (false); } //-------------------------------------------------------------- QOffsetRect // This duplicates a Mac ToolBox call, but since it's local, it's faster. // It offsets a rectangle both vertically and horizontally. void QOffsetRect (Rect *theRect, short h, short v) { theRect->right += h; theRect->left += h; theRect->bottom += v; theRect->top += v; } //-------------------------------------------------------------- QSetRect // This also duplicates a ToolBox call. It's needed often though, soÉ // any gains in speed are nice. It sets up a rect structure. void QSetRect (Rect *theRect, short l, short t, short r, short b) { theRect->left = l; theRect->top = t; theRect->right = r; theRect->bottom = b; } //-------------------------------------------------------------- ForceRectInRect // Given a source rectangle and a bounding rectangle, this functionÉ // will clip the source rect so that it is entirely within the boundingÉ // rect. It returns true if any clippiung was necessary. Boolean ForceRectInRect (Rect *small, Rect *large) { SInt16 hOff, vOff; Boolean changed; changed = false; NormalizeRect(small); if ((small->bottom - small->top) > (large->bottom - large->top)) { small->bottom = small->top + (large->bottom - large->top); changed = true; } if ((small->right - small->left) > (large->right - large->left)) { small->right = small->left + (large->right - large->left); changed = true; } hOff = large->left - small->left; if (hOff > 0) { OffsetRect(small, hOff, 0); changed = true; } hOff = large->right - small->right; if (hOff < 0) { OffsetRect(small, hOff, 0); changed = true; } vOff = large->top - small->top; if (vOff > 0) { OffsetRect(small, 0, vOff); changed = true; } vOff = large->bottom - small->bottom; if (vOff < 0) { OffsetRect(small, 0, vOff); changed = true; } return changed; } //-------------------------------------------------------------- QUnionSimilarRect // Given 2 rects that are assumed to have the same width and height,É // this function returns a 3rd rect that is the union of those two. void QUnionSimilarRect (Rect *rectA, Rect *rectB, Rect *rectC) { if (rectA->left < rectB->left) rectC->left = rectA->left; else rectC->left = rectB->left; if (rectA->top < rectB->top) rectC->top = rectA->top; else rectC->top = rectB->top; if (rectA->right > rectB->right) rectC->right = rectA->right; else rectC->right = rectB->right; if (rectA->bottom > rectB->bottom) rectC->bottom = rectA->bottom; else rectC->bottom = rectB->bottom; } //-------------------------------------------------------------- FrameRectSansCorners // This is similar to the ToolBox FrameRect() call. However, it doesn'tÉ // draw the pixels in the 4 corners of the Rect. void FrameRectSansCorners (Rect *theRect) { MoveTo(theRect->left + 1, theRect->top); LineTo(theRect->right - 2, theRect->top); MoveTo(theRect->right - 1, theRect->top + 1); LineTo(theRect->right - 1, theRect->bottom - 2); MoveTo(theRect->left + 1, theRect->bottom - 1); LineTo(theRect->right - 2, theRect->bottom - 1); MoveTo(theRect->left, theRect->top + 1); LineTo(theRect->left, theRect->bottom - 2); } \ No newline at end of file diff --git a/Sources/Render.c b/Sources/Render.c deleted file mode 100755 index 422c0e1..0000000 --- a/Sources/Render.c +++ /dev/null @@ -1 +0,0 @@ - //============================================================================ //---------------------------------------------------------------------------- // Render.c //---------------------------------------------------------------------------- //============================================================================ #include "Externs.h" #include "Environ.h" #include "MainWindow.h" #include "Objects.h" #include "Play.h" #include "Player.h" #include "RectUtils.h" #include "Room.h" #include "RubberBands.h" #define kMaxGarbageRects 48 void DrawReflection (gliderPtr, Boolean); void RenderFlames (void); void RenderPendulums (void); void RenderFlyingPoints (void); void RenderSparkles (void); void RenderStars (void); void RenderBands (void); void RenderShreds (void); void CopyRectsQD (void); void CopyRectsAssm (void); Rect work2MainRects[kMaxGarbageRects]; Rect back2WorkRects[kMaxGarbageRects]; Rect shieldRect; RgnHandle mirrorRgn; Point shieldPt; long nextFrame; short numWork2Main, numBack2Work; Boolean hasMirror; extern bandPtr bands; extern sparklePtr sparkles; extern flyingPtPtr flyingPoints; extern flamePtr flames, tikiFlames, bbqCoals; extern pendulumPtr pendulums; extern starPtr theStars; extern shredPtr shreds; extern Rect sparkleSrc[]; extern Rect pointsSrc[]; extern Rect bandRects[]; extern savedType savedMaps[]; extern Rect shadowSrc[], justRoomsRect, movieRect; extern short numBands, numStars, numShredded; extern short numSparkles, numFlyingPts, numPendulums, clockFrame; extern short numFlames, numSavedMaps, numTikiFlames, numCoals; extern Boolean evenFrame, shadowVisible, twoPlayerGame, tvOn; //============================================================== Functions //-------------------------------------------------------------- AddRectToWorkRects void AddRectToWorkRects (Rect *theRect) { if (numWork2Main < (kMaxGarbageRects - 1)) { work2MainRects[numWork2Main] = *theRect; if (work2MainRects[numWork2Main].left < justRoomsRect.left) work2MainRects[numWork2Main].left = justRoomsRect.left; else if (work2MainRects[numWork2Main].right > justRoomsRect.right) work2MainRects[numWork2Main].right = justRoomsRect.right; if (work2MainRects[numWork2Main].top < justRoomsRect.top) work2MainRects[numWork2Main].top = justRoomsRect.top; else if (work2MainRects[numWork2Main].bottom > justRoomsRect.bottom) work2MainRects[numWork2Main].bottom = justRoomsRect.bottom; numWork2Main++; } } //-------------------------------------------------------------- AddRectToBackRects void AddRectToBackRects (Rect *theRect) { if (numBack2Work < (kMaxGarbageRects - 1)) { back2WorkRects[numBack2Work] = *theRect; if (back2WorkRects[numBack2Work].left < 0) back2WorkRects[numBack2Work].left = 0; else if (back2WorkRects[numBack2Work].right > workSrcRect.right) back2WorkRects[numBack2Work].right = workSrcRect.right; if (back2WorkRects[numBack2Work].top < 0) back2WorkRects[numBack2Work].top = 0; else if (back2WorkRects[numBack2Work].bottom > workSrcRect.bottom) back2WorkRects[numBack2Work].bottom = workSrcRect.bottom; numBack2Work++; } } //-------------------------------------------------------------- AddRectToWorkRectsWhole void AddRectToWorkRectsWhole (Rect *theRect) { if (numWork2Main < (kMaxGarbageRects - 1)) { if ((theRect->right <= workSrcRect.left) || (theRect->bottom <= workSrcRect.top) || (theRect->left >= workSrcRect.right) || (theRect->top >= workSrcRect.bottom)) return; work2MainRects[numWork2Main] = *theRect; if (work2MainRects[numWork2Main].left < workSrcRect.left) work2MainRects[numWork2Main].left = workSrcRect.left; else if (work2MainRects[numWork2Main].right > workSrcRect.right) work2MainRects[numWork2Main].right = workSrcRect.right; if (work2MainRects[numWork2Main].top < workSrcRect.top) work2MainRects[numWork2Main].top = workSrcRect.top; else if (work2MainRects[numWork2Main].bottom > workSrcRect.bottom) work2MainRects[numWork2Main].bottom = workSrcRect.bottom; if ((work2MainRects[numWork2Main].right == work2MainRects[numWork2Main].left) || (work2MainRects[numWork2Main].top == work2MainRects[numWork2Main].bottom)) return; numWork2Main++; } } //-------------------------------------------------------------- DrawReflection void DrawReflection (gliderPtr thisGlider, Boolean oneOrTwo) { RgnHandle wasClip; Rect src, dest; short which; if (thisGlider->dontDraw) return; if (thisGlider->facing == kFaceRight) which = 0; else which = 1; dest = thisGlider->dest; QOffsetRect(&dest, playOriginH - 20, playOriginV - 16); wasClip = NewRgn(); if (wasClip == nil) return; SetPort((GrafPtr)workSrcMap); GetClip(wasClip); SetClip(mirrorRgn); if (oneOrTwo) { if (showFoil) CopyMask((BitMap *)*GetGWorldPixMap(glid2SrcMap), (BitMap *)*GetGWorldPixMap(glidMaskMap), (BitMap *)*GetGWorldPixMap(workSrcMap), &thisGlider->src, &thisGlider->mask, &dest); else CopyMask((BitMap *)*GetGWorldPixMap(glidSrcMap), (BitMap *)*GetGWorldPixMap(glidMaskMap), (BitMap *)*GetGWorldPixMap(workSrcMap), &thisGlider->src, &thisGlider->mask, &dest); } else { CopyMask((BitMap *)*GetGWorldPixMap(glid2SrcMap), (BitMap *)*GetGWorldPixMap(glidMaskMap), (BitMap *)*GetGWorldPixMap(workSrcMap), &thisGlider->src, &thisGlider->mask, &dest); } SetClip(wasClip); DisposeRgn(wasClip); src =thisGlider->whole; QOffsetRect(&src, playOriginH - 20, playOriginV - 16); AddRectToWorkRects(&src); AddRectToBackRects(&dest); } //-------------------------------------------------------------- RenderFlames void RenderFlames (void) { short i; if ((numFlames == 0) && (numTikiFlames == 0) && (numCoals == 0)) return; for (i = 0; i < numFlames; i++) { flames[i].mode++; flames[i].src.top += 15; flames[i].src.bottom += 15; if (flames[i].mode >= kNumCandleFlames) { flames[i].mode = 0; flames[i].src.top = 0; flames[i].src.bottom = 15; } CopyBits((BitMap *)*GetGWorldPixMap(savedMaps[flames[i].who].map), (BitMap *)*GetGWorldPixMap(workSrcMap), &flames[i].src, &flames[i].dest, srcCopy, nil); AddRectToWorkRects(&flames[i].dest); } for (i = 0; i < numTikiFlames; i++) { tikiFlames[i].mode++; tikiFlames[i].src.top += 10; tikiFlames[i].src.bottom += 10; if (tikiFlames[i].mode >= kNumTikiFlames) { tikiFlames[i].mode = 0; tikiFlames[i].src.top = 0; tikiFlames[i].src.bottom = 10; } CopyBits((BitMap *)*GetGWorldPixMap(savedMaps[tikiFlames[i].who].map), (BitMap *)*GetGWorldPixMap(workSrcMap), &tikiFlames[i].src, &tikiFlames[i].dest, srcCopy, nil); AddRectToWorkRects(&tikiFlames[i].dest); } for (i = 0; i < numCoals; i++) { bbqCoals[i].mode++; bbqCoals[i].src.top += 9; bbqCoals[i].src.bottom += 9; if (bbqCoals[i].mode >= kNumBBQCoals) { bbqCoals[i].mode = 0; bbqCoals[i].src.top = 0; bbqCoals[i].src.bottom = 9; } CopyBits((BitMap *)*GetGWorldPixMap(savedMaps[bbqCoals[i].who].map), (BitMap *)*GetGWorldPixMap(workSrcMap), &bbqCoals[i].src, &bbqCoals[i].dest, srcCopy, nil); AddRectToWorkRects(&bbqCoals[i].dest); } } //-------------------------------------------------------------- RenderPendulums void RenderPendulums (void) { short i; Boolean playedTikTok; playedTikTok = false; if (numPendulums == 0) return; clockFrame++; if ((clockFrame == 10) || (clockFrame == 15)) { if (clockFrame >= 15) clockFrame = 0; for (i = 0; i < numPendulums; i++) { if (pendulums[i].active) { if (pendulums[i].toOrFro) { pendulums[i].mode++; pendulums[i].src.top += 28; pendulums[i].src.bottom += 28; if (pendulums[i].mode >= 2) { pendulums[i].toOrFro = !pendulums[i].toOrFro; if (!playedTikTok) { PlayPrioritySound(kTikSound, kTikPriority); playedTikTok = true; } } } else { pendulums[i].mode--; pendulums[i].src.top -= 28; pendulums[i].src.bottom -= 28; if (pendulums[i].mode <= 0) { pendulums[i].toOrFro = !pendulums[i].toOrFro; if (!playedTikTok) { PlayPrioritySound(kTokSound, kTokPriority); playedTikTok = true; } } } CopyBits((BitMap *)*GetGWorldPixMap(savedMaps[pendulums[i].who].map), (BitMap *)*GetGWorldPixMap(workSrcMap), &pendulums[i].src, &pendulums[i].dest, srcCopy, nil); AddRectToWorkRects(&pendulums[i].dest); } } } } //-------------------------------------------------------------- RenderFlyingPoints void RenderFlyingPoints (void) { short i; if (numFlyingPts == 0) return; for (i = 0; i < kMaxFlyingPts; i++) { if (flyingPoints[i].mode != -1) { if (flyingPoints[i].mode > flyingPoints[i].stop) { flyingPoints[i].mode = flyingPoints[i].start; flyingPoints[i].loops++; } if (flyingPoints[i].loops >= kMaxFlyingPointsLoop) { AddRectToWorkRects(&flyingPoints[i].dest); flyingPoints[i].mode = -1; numFlyingPts--; } else { flyingPoints[i].dest.left += flyingPoints[i].hVel; flyingPoints[i].dest.right += flyingPoints[i].hVel; if (flyingPoints[i].hVel > 0) flyingPoints[i].whole.right = flyingPoints[i].dest.right; else flyingPoints[i].whole.left = flyingPoints[i].dest.left; flyingPoints[i].dest.top += flyingPoints[i].vVel; flyingPoints[i].dest.bottom += flyingPoints[i].vVel; if (flyingPoints[i].vVel > 0) flyingPoints[i].whole.bottom = flyingPoints[i].dest.bottom; else flyingPoints[i].whole.top = flyingPoints[i].dest.top; CopyMask((BitMap *)*GetGWorldPixMap(pointsSrcMap), (BitMap *)*GetGWorldPixMap(pointsMaskMap), (BitMap *)*GetGWorldPixMap(workSrcMap), &pointsSrc[flyingPoints[i].mode], &pointsSrc[flyingPoints[i].mode], &flyingPoints[i].dest); AddRectToWorkRects(&flyingPoints[i].whole); AddRectToBackRects(&flyingPoints[i].dest); flyingPoints[i].whole = flyingPoints[i].dest; flyingPoints[i].mode++; } } } } //-------------------------------------------------------------- RenderSparkles void RenderSparkles (void) { short i; if (numSparkles == 0) return; for (i = 0; i < kMaxSparkles; i++) { if (sparkles[i].mode != -1) { if (sparkles[i].mode >= kNumSparkleModes) { AddRectToWorkRects(&sparkles[i].bounds); sparkles[i].mode = -1; numSparkles--; } else { CopyMask((BitMap *)*GetGWorldPixMap(bonusSrcMap), (BitMap *)*GetGWorldPixMap(bonusMaskMap), (BitMap *)*GetGWorldPixMap(workSrcMap), &sparkleSrc[sparkles[i].mode], &sparkleSrc[sparkles[i].mode], &sparkles[i].bounds); AddRectToWorkRects(&sparkles[i].bounds); AddRectToBackRects(&sparkles[i].bounds); sparkles[i].mode++; } } } } //-------------------------------------------------------------- RenderStars void RenderStars (void) { short i; if (numStars == 0) return; for (i = 0; i < numStars; i++) { if (theStars[i].mode != -1) { theStars[i].mode++; theStars[i].src.top += 31; theStars[i].src.bottom += 31; if (theStars[i].mode >= 6) { theStars[i].mode = 0; theStars[i].src.top = 0; theStars[i].src.bottom = 31; } CopyBits((BitMap *)*GetGWorldPixMap(savedMaps[theStars[i].who].map), (BitMap *)*GetGWorldPixMap(workSrcMap), &theStars[i].src, &theStars[i].dest, srcCopy, nil); AddRectToWorkRects(&theStars[i].dest); } } } //-------------------------------------------------------------- RenderGlider void RenderGlider (gliderPtr thisGlider, Boolean oneOrTwo) { Rect src, dest; short which; if (thisGlider->dontDraw) return; if (thisGlider->facing == kFaceRight) which = 0; else which = 1; if (shadowVisible) { dest = thisGlider->destShadow; QOffsetRect(&dest, playOriginH, playOriginV); if ((thisGlider->mode == kGliderComingUp) || (thisGlider->mode == kGliderGoingDown)) { src = shadowSrc[which]; src.right = src.left + (dest.right - dest.left); CopyMask((BitMap *)*GetGWorldPixMap(shadowSrcMap), (BitMap *)*GetGWorldPixMap(shadowMaskMap), (BitMap *)*GetGWorldPixMap(workSrcMap), &src, &src, &dest); } else if (thisGlider->mode == kGliderComingDown) { src = shadowSrc[which]; src.left = src.right - (dest.right - dest.left); CopyMask((BitMap *)*GetGWorldPixMap(shadowSrcMap), (BitMap *)*GetGWorldPixMap(shadowMaskMap), (BitMap *)*GetGWorldPixMap(workSrcMap), &src, &src, &dest); } else CopyMask((BitMap *)*GetGWorldPixMap(shadowSrcMap), (BitMap *)*GetGWorldPixMap(shadowMaskMap), (BitMap *)*GetGWorldPixMap(workSrcMap), &shadowSrc[which], &shadowSrc[which], &dest); src =thisGlider->wholeShadow; QOffsetRect(&src, playOriginH, playOriginV); AddRectToWorkRects(&src); AddRectToBackRects(&dest); } dest = thisGlider->dest; QOffsetRect(&dest, playOriginH, playOriginV); if (oneOrTwo) { if ((!twoPlayerGame) && (showFoil)) CopyMask((BitMap *)*GetGWorldPixMap(glid2SrcMap), (BitMap *)*GetGWorldPixMap(glidMaskMap), (BitMap *)*GetGWorldPixMap(workSrcMap), &thisGlider->src, &thisGlider->mask, &dest); else CopyMask((BitMap *)*GetGWorldPixMap(glidSrcMap), (BitMap *)*GetGWorldPixMap(glidMaskMap), (BitMap *)*GetGWorldPixMap(workSrcMap), &thisGlider->src, &thisGlider->mask, &dest); } else { CopyMask((BitMap *)*GetGWorldPixMap(glid2SrcMap), (BitMap *)*GetGWorldPixMap(glidMaskMap), (BitMap *)*GetGWorldPixMap(workSrcMap), &thisGlider->src, &thisGlider->mask, &dest); } src =thisGlider->whole; QOffsetRect(&src, playOriginH, playOriginV); AddRectToWorkRects(&src); AddRectToBackRects(&dest); } //-------------------------------------------------------------- RenderBands void RenderBands (void) { Rect dest; short i; if (numBands == 0) return; for (i = 0; i < numBands; i++) { dest = bands[i].dest; QOffsetRect(&dest, playOriginH, playOriginV); CopyMask((BitMap *)*GetGWorldPixMap(bandsSrcMap), (BitMap *)*GetGWorldPixMap(bandsMaskMap), (BitMap *)*GetGWorldPixMap(workSrcMap), &bandRects[bands[i].mode], &bandRects[bands[i].mode], &dest); AddRectToWorkRects(&dest); AddRectToBackRects(&dest); } } //-------------------------------------------------------------- RenderShreds void RenderShreds (void) { Rect src, dest; short i, high; if (numShredded > 0) { for (i = 0; i < numShredded; i++) { if (shreds[i].frame == 0) { shreds[i].bounds.bottom += 1; high = shreds[i].bounds.bottom - shreds[i].bounds.top; if (high >= 35) shreds[i].frame = 1; src = shredSrcRect; src.top = src.bottom - high; dest = shreds[i].bounds; QOffsetRect(&dest, playOriginH, playOriginV); CopyMask((BitMap *)*GetGWorldPixMap(shredSrcMap), (BitMap *)*GetGWorldPixMap(shredMaskMap), (BitMap *)*GetGWorldPixMap(workSrcMap), &src, &src, &dest); AddRectToBackRects(&dest); dest.top--; AddRectToWorkRects(&dest); PlayPrioritySound(kShredSound, kShredPriority); } else if (shreds[i].frame < 20) { shreds[i].bounds.top += 4; shreds[i].bounds.bottom += 4; dest = shreds[i].bounds; QOffsetRect(&dest, playOriginH, playOriginV); shreds[i].frame++; if (shreds[i].frame < 20) { CopyMask((BitMap *)*GetGWorldPixMap(shredSrcMap), (BitMap *)*GetGWorldPixMap(shredMaskMap), (BitMap *)*GetGWorldPixMap(workSrcMap), &shredSrcRect, &shredSrcRect, &dest); } else { AddSparkle(&shreds[i].bounds); PlayPrioritySound(kFadeOutSound, kFadeOutPriority); } AddRectToBackRects(&dest); dest.top -= 4; AddRectToWorkRects(&dest); } } } } //-------------------------------------------------------------- CopyRectsQD void CopyRectsQD (void) { short i; for (i = 0; i < numWork2Main; i++) { CopyBits((BitMap *)*GetGWorldPixMap(workSrcMap), GetPortBitMapForCopyBits(GetWindowPort(mainWindow)), &work2MainRects[i], &work2MainRects[i], srcCopy, nil); } for (i = 0; i < numBack2Work; i++) { CopyBits((BitMap *)*GetGWorldPixMap(backSrcMap), (BitMap *)*GetGWorldPixMap(workSrcMap), &back2WorkRects[i], &back2WorkRects[i], srcCopy, nil); } } //-------------------------------------------------------------- RenderFrame void RenderFrame (void) { if (hasMirror) { DrawReflection(&theGlider, true); if (twoPlayerGame) DrawReflection(&theGlider2, false); } HandleGrease(); RenderPendulums(); if (evenFrame) RenderFlames(); else RenderStars(); RenderDynamics(); RenderFlyingPoints(); RenderSparkles(); RenderGlider(&theGlider, true); if (twoPlayerGame) RenderGlider(&theGlider2, false); RenderShreds(); RenderBands(); while (TickCount() < nextFrame) { } nextFrame = TickCount() + kTicksPerFrame; CopyRectsQD(); numWork2Main = 0; numBack2Work = 0; } //-------------------------------------------------------------- InitGarbageRects void InitGarbageRects (void) { short i; numWork2Main = 0; numBack2Work = 0; numSparkles = 0; for (i = 0; i < kMaxSparkles; i++) sparkles[i].mode = -1; numFlyingPts = 0; for (i = 0; i < kMaxFlyingPts; i++) flyingPoints[i].mode = -1; nextFrame = TickCount() + kTicksPerFrame; } //-------------------------------------------------------------- CopyRectBackToWork void CopyRectBackToWork (Rect *theRect) { CopyBits((BitMap *)*GetGWorldPixMap(backSrcMap), (BitMap *)*GetGWorldPixMap(workSrcMap), theRect, theRect, srcCopy, nil); } //-------------------------------------------------------------- CopyRectWorkToBack void CopyRectWorkToBack (Rect *theRect) { CopyBits((BitMap *)*GetGWorldPixMap(workSrcMap), (BitMap *)*GetGWorldPixMap(backSrcMap), theRect, theRect, srcCopy, nil); } //-------------------------------------------------------------- CopyRectWorkToMain void CopyRectWorkToMain (Rect *theRect) { CopyBits((BitMap *)*GetGWorldPixMap(workSrcMap), GetPortBitMapForCopyBits(GetWindowPort(mainWindow)), theRect, theRect, srcCopy, nil); } //-------------------------------------------------------------- CopyRectMainToWork void CopyRectMainToWork (Rect *theRect) { CopyBits(GetPortBitMapForCopyBits(GetWindowPort(mainWindow)), (BitMap *)*GetGWorldPixMap(workSrcMap), theRect, theRect, srcCopy, nil); } //-------------------------------------------------------------- CopyRectMainToBack void CopyRectMainToBack (Rect *theRect) { CopyBits(GetPortBitMapForCopyBits(GetWindowPort(mainWindow)), (BitMap *)*GetGWorldPixMap(backSrcMap), theRect, theRect, srcCopy, nil); } //-------------------------------------------------------------- AddToMirrorRegion void AddToMirrorRegion (Rect *theRect) { RgnHandle tempRgn; if (mirrorRgn == nil) { mirrorRgn = NewRgn(); if (mirrorRgn != nil) RectRgn(mirrorRgn, theRect); } else { tempRgn = NewRgn(); if (tempRgn != nil) { RectRgn(tempRgn, theRect); UnionRgn(mirrorRgn, tempRgn, mirrorRgn); DisposeRgn(tempRgn); } } hasMirror = true; } //-------------------------------------------------------------- ZeroMirrorRegion void ZeroMirrorRegion (void) { if (mirrorRgn != nil) DisposeRgn(mirrorRgn); mirrorRgn = nil; hasMirror = false; } \ No newline at end of file diff --git a/Sources/Room.c b/Sources/Room.c deleted file mode 100755 index 4248936..0000000 --- a/Sources/Room.c +++ /dev/null @@ -1 +0,0 @@ -//============================================================================ //---------------------------------------------------------------------------- // Room.c //---------------------------------------------------------------------------- //============================================================================ #include #include #include "Externs.h" #include "House.h" #include "MainWindow.h" #include "RectUtils.h" #define kDeleteRoomAlert 1005 #define kYesDoDeleteRoom 1 Boolean QueryDeleteRoom (void); void SetToNearestNeighborRoom (short, short); roomPtr thisRoom; Rect backSrcRect; GWorldPtr backSrcMap; short numberRooms, thisRoomNumber, previousRoom; short leftThresh, rightThresh, lastBackground; Boolean autoRoomEdit, newRoomNow, noRoomAtAll; Boolean leftOpen, rightOpen, topOpen, bottomOpen; Boolean doBitchDialogs; extern short tempTiles[]; //============================================================== Functions //-------------------------------------------------------------- SetInitialTiles #ifndef COMPILEDEMO void SetInitialTiles (short background, Boolean doRoom) { short i; if (background >= kUserBackground) { for (i = 0; i < kNumTiles; i++) { if (doRoom) thisRoom->tiles[i] = i; else tempTiles[i] = i; } } else { switch (background) { case kSimpleRoom: case kPaneledRoom: case kBasement: case kChildsRoom: case kAsianRoom: case kUnfinishedRoom: case kSwingersRoom: case kBathroom: case kLibrary: for (i = 0; i < kNumTiles; i++) { if (doRoom) thisRoom->tiles[i] = 1; else tempTiles[i] = 1; } if (doRoom) { thisRoom->tiles[0] = 0; thisRoom->tiles[kNumTiles - 1] = kNumTiles - 1; } else { tempTiles[0] = 0; tempTiles[kNumTiles - 1] = kNumTiles - 1; } break; case kSkywalk: for (i = 0; i < kNumTiles; i++) { if (doRoom) thisRoom->tiles[i] = i; else tempTiles[i] = i; } break; case kField: case kGarden: case kDirt: for (i = 0; i < kNumTiles; i++) { if (doRoom) thisRoom->tiles[i] = 0; else tempTiles[i] = 0; } break; case kMeadow: for (i = 0; i < kNumTiles; i++) { if (doRoom) thisRoom->tiles[i] = 1; else tempTiles[i] = 1; } break; case kRoof: for (i = 0; i < kNumTiles; i++) { if (doRoom) thisRoom->tiles[i] = 3; else tempTiles[i] = 3; } break; case kSky: for (i = 0; i < kNumTiles; i++) { if (doRoom) thisRoom->tiles[i] = 2; else tempTiles[i] = 2; } break; case kStratosphere: case kStars: for (i = 0; i < kNumTiles; i++) { if (doRoom) thisRoom->tiles[i] = i; else tempTiles[i] = i; } break; default: break; } } } #endif //-------------------------------------------------------------- CreateNewRoom #ifndef COMPILEDEMO Boolean CreateNewRoom (short h, short v) { KeyMap theKeys; long howMuch; OSErr theErr; short i, availableRoom; char wasState; CopyThisRoomToRoom(); // save off current room PasStringCopy("\pUntitled Room", thisRoom->name); thisRoom->leftStart = 32; // fill out fields of new room thisRoom->rightStart = 32; thisRoom->bounds = 0; thisRoom->unusedByte = 0; thisRoom->visited = false; thisRoom->background = lastBackground; SetInitialTiles(thisRoom->background, true); thisRoom->floor = v; thisRoom->suite = h; thisRoom->openings = 0; thisRoom->numObjects = 0; for (i = 0; i < kMaxRoomObs; i++) // zero out all objects thisRoom->objects[i].what = kObjectIsEmpty; wasState = HGetState((Handle)thisHouse); MoveHHi((Handle)thisHouse); HLock((Handle)thisHouse); availableRoom = -1; // assume no available rooms if ((*thisHouse)->nRooms > 0) // look for an empty room for (i = 0; i < (*thisHouse)->nRooms; i++) if ((*thisHouse)->rooms[i].suite == kRoomIsEmpty) { availableRoom = i; break; } if (availableRoom == -1) // found no available rooms { HUnlock((Handle)thisHouse); howMuch = sizeof(roomType); // add new room to end of house theErr = PtrAndHand((Ptr)thisRoom, (Handle)thisHouse, howMuch); if (theErr != noErr) { YellowAlert(kYellowUnaccounted, theErr); MoveHHi((Handle)thisHouse); HLock((Handle)thisHouse); return (false); } MoveHHi((Handle)thisHouse); HLock((Handle)thisHouse); (*thisHouse)->nRooms++; // increment nRooms numberRooms = (*thisHouse)->nRooms; previousRoom = thisRoomNumber; thisRoomNumber = numberRooms - 1; } else { previousRoom = thisRoomNumber; thisRoomNumber = availableRoom; } if (noRoomAtAll) (*thisHouse)->firstRoom = thisRoomNumber; HSetState((Handle)thisHouse, wasState); CopyThisRoomToRoom(); UpdateEditWindowTitle(); noRoomAtAll = false; fileDirty = true; UpdateMenus(false); GetKeys(theKeys); if (BitTst(&theKeys, kShiftKeyMap)) newRoomNow = false; else newRoomNow = autoRoomEdit; // Flag to bring up RoomInfo return (true); } #endif //-------------------------------------------------------------- ReadyBackground void ReadyBackground (short theID, short *theTiles) { Rect src, dest; PicHandle thePicture; short i; SetPort((GrafPtr)workSrcMap); if ((noRoomAtAll) || (!houseUnlocked)) { LtGrayForeColor(); PaintRect(&workSrcRect); ForeColor(blackColor); MoveTo(10, 20); if (houseUnlocked) DrawString("\pNo rooms"); else DrawString("\pNothing to show"); CopyBits((BitMap *)*GetGWorldPixMap(workSrcMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &workSrcRect, &workSrcRect, srcCopy, nil); return; } thePicture = GetPicture(theID); if (thePicture == nil) { thePicture = (PicHandle)GetResource('Date', theID); if (thePicture == nil) { YellowAlert(kYellowNoBackground, 0); return; } } HLock((Handle)thePicture); dest = (*thePicture)->picFrame; HUnlock((Handle)thePicture); QOffsetRect(&dest, -dest.left, -dest.top); DrawPicture(thePicture, &dest); ReleaseResource((Handle)thePicture); QSetRect(&src, 0, 0, kTileWide, kTileHigh); QSetRect(&dest, 0, 0, kTileWide, kTileHigh); for (i = 0; i < kNumTiles; i++) { src.left = theTiles[i] * kTileWide; src.right = src.left + kTileWide; CopyBits((BitMap *)*GetGWorldPixMap(workSrcMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &src, &dest, srcCopy, nil); QOffsetRect(&dest, kTileWide, 0); } QSetRect(&src, 0, 0, kRoomWide, kTileHigh); QSetRect(&dest, 0, 0, kRoomWide, kTileHigh); CopyBits((BitMap *)*GetGWorldPixMap(backSrcMap), (BitMap *)*GetGWorldPixMap(workSrcMap), &src, &dest, srcCopy, nil); } //-------------------------------------------------------------- ReflectCurrentRoom void ReflectCurrentRoom (Boolean forceMapRedraw) { #ifndef COMPILEDEMO if (theMode != kEditMode) return; if ((noRoomAtAll) || (!houseUnlocked)) { CenterMapOnRoom(64, 1); UpdateMapWindow(); } else { if ((!ThisRoomVisibleOnMap()) || (forceMapRedraw)) { CenterMapOnRoom(thisRoom->suite, thisRoom->floor); UpdateMapWindow(); // whole map window redrawm } else { FindNewActiveRoomRect(); // find newly selected room rect FlagMapRoomsForUpdate(); // redraw only the portions required } } GenerateRetroLinks(); UpdateEditWindowTitle(); ReadyBackground(thisRoom->background, thisRoom->tiles); GetThisRoomsObjRects(); DrawThisRoomsObjects(); InvalWindowRect(mainWindow, &mainWindowRect); #endif } //-------------------------------------------------------------- CopyRoomToThisRoom void CopyRoomToThisRoom (short roomNumber) { if (roomNumber == -1) return; CopyThisRoomToRoom(); // copy back to house ForceThisRoom(roomNumber); // load new room from house } //-------------------------------------------------------------- CopyThisRoomToRoom void CopyThisRoomToRoom (void) { char tagByte; if ((noRoomAtAll) || (thisRoomNumber == -1)) return; tagByte = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); // copy back to house (*thisHouse)->rooms[thisRoomNumber] = *thisRoom; HSetState((Handle)thisHouse, tagByte); } //-------------------------------------------------------------- ForceThisRoom void ForceThisRoom (short roomNumber) { char tagByte; if (roomNumber == -1) return; tagByte = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); if (roomNumber < (*thisHouse)->nRooms) *thisRoom = (*thisHouse)->rooms[roomNumber]; else YellowAlert(kYellowIllegalRoomNum, 0); HSetState((Handle)thisHouse, tagByte); previousRoom = thisRoomNumber; thisRoomNumber = roomNumber; } //-------------------------------------------------------------- RoomExists Boolean RoomExists (short suite, short floor, short *roomNum) { // pass in a suite and floor; returns true is it is a legitimate room houseType *thisHousePtr; short i; char wasState; Boolean foundIt; foundIt = false; if (suite < 0) return (foundIt); wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); thisHousePtr = *thisHouse; for (i = 0; i < numberRooms; i++) { if ((thisHousePtr->rooms[i].floor == floor) && (thisHousePtr->rooms[i].suite == suite)) { foundIt = true; *roomNum = i; break; } } HSetState((Handle)thisHouse, wasState); return (foundIt); } //-------------------------------------------------------------- RoomNumExists Boolean RoomNumExists (short roomNum) { short floor, suite, whoCares; Boolean exists; exists = false; if (GetRoomFloorSuite(roomNum, &floor, &suite)) exists = RoomExists(suite, floor, &whoCares); return (exists); } //-------------------------------------------------------------- DeleteRoom void DeleteRoom (Boolean doWarn) { #ifndef COMPILEDEMO short wasFloor, wasSuite; char wasState; Boolean firstDeleted; if ((theMode != kEditMode) || (noRoomAtAll)) return; if (doWarn) { if (!QueryDeleteRoom()) return; } DeselectObject(); wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); wasFloor = (*thisHouse)->rooms[thisRoomNumber].floor; wasSuite = (*thisHouse)->rooms[thisRoomNumber].suite; firstDeleted = ((*thisHouse)->firstRoom == thisRoomNumber); // is room "first" thisRoom->suite = kRoomIsEmpty; (*thisHouse)->rooms[thisRoomNumber].suite = kRoomIsEmpty; HSetState((Handle)thisHouse, wasState); noRoomAtAll = (RealRoomNumberCount() == 0); // see if now no rooms if (noRoomAtAll) thisRoomNumber = kRoomIsEmpty; else SetToNearestNeighborRoom(wasFloor, wasSuite); if (firstDeleted) { wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); (*thisHouse)->firstRoom = thisRoomNumber; HSetState((Handle)thisHouse, wasState); } newRoomNow = false; fileDirty = true; UpdateMenus(false); ReflectCurrentRoom(false); #endif } //-------------------------------------------------------------- QueryDeleteRoom #ifndef COMPILEDEMO Boolean QueryDeleteRoom (void) { short hitWhat; // CenterAlert(kDeleteRoomAlert); hitWhat = Alert(kDeleteRoomAlert, nil); if (hitWhat == kYesDoDeleteRoom) return (true); else return (false); } #endif //-------------------------------------------------------------- DoesNeighborRoomExist short DoesNeighborRoomExist (short whichNeighbor) { #ifndef COMPILEDEMO short newH, newV, newRoomNumber; if (theMode != kEditMode) return(-1); newH = thisRoom->suite; newV = thisRoom->floor; switch (whichNeighbor) { case kRoomAbove: newV++; break; case kRoomBelow: newV--; break; case kRoomToRight: newH++; break; case kRoomToLeft: newH--; break; } if (RoomExists(newH, newV, &newRoomNumber)) return (newRoomNumber); else return (-1); #endif } //-------------------------------------------------------------- SelectNeighborRoom void SelectNeighborRoom (short whichNeighbor) { #ifndef COMPILEDEMO short newRoomNumber; newRoomNumber = DoesNeighborRoomExist(whichNeighbor); if (newRoomNumber != -1) { DeselectObject(); CopyRoomToThisRoom(newRoomNumber); ReflectCurrentRoom(false); } #endif } //-------------------------------------------------------------- GetNeighborRoomNumber short GetNeighborRoomNumber (short which) { short hDelta, vDelta, i; short roomH, roomV; short roomNum; char wasState; switch (which) { case kCentralRoom: hDelta = 0; vDelta = 0; break; case kNorthRoom: hDelta = 0; vDelta = 1; break; case kNorthEastRoom: hDelta = 1; vDelta = 1; break; case kEastRoom: hDelta = 1; vDelta = 0; break; case kSouthEastRoom: hDelta = 1; vDelta = -1; break; case kSouthRoom: hDelta = 0; vDelta = -1; break; case kSouthWestRoom: hDelta = -1; vDelta = -1; break; case kWestRoom: hDelta = -1; vDelta = 0; break; case kNorthWestRoom: hDelta = -1; vDelta = 1; break; } roomNum = kRoomIsEmpty; wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); roomH = (*thisHouse)->rooms[thisRoomNumber].suite + hDelta; roomV = (*thisHouse)->rooms[thisRoomNumber].floor + vDelta; for (i = 0; i < numberRooms; i++) { if (((*thisHouse)->rooms[i].suite == roomH) && ((*thisHouse)->rooms[i].floor == roomV)) { roomNum = i; break; } } HSetState((Handle)thisHouse, wasState); return (roomNum); } //-------------------------------------------------------------- SetToNearestNeighborRoom void SetToNearestNeighborRoom (short wasFloor, short wasSuite) { // searches in a clockwise spiral pattern (from thisRoom) for aÉ // legitimate neighboring room - then sets thisRoom to it short distance, h, v; short hStep, vStep; short testRoomNum, testH, testV; char wasState; Boolean finished; wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); finished = false; distance = 1; // we begin our walk a distance of one from source room h = -1; // we begin with the neighbor to the leftÉ v = 0; // and on the same floor hStep = 0; // we don't 'walk' left or rightÉ vStep = -1; // instead, we 'walk' up do { testH = wasSuite + h; testV = wasFloor + v; if (RoomExists(testH, testV, &testRoomNum)) // if a legitimate room { CopyRoomToThisRoom(testRoomNum); finished = true; } else { h += hStep; v += vStep; if ((h > distance) || (h < -distance) || (v > distance) || (v < -distance)) { // we have walked beyond the bounds of our spiral if ((hStep == -1) && (vStep == 0)) // we expand our spiral out { distance++; hStep = 0; // begin travelling up again vStep = -1; } else { h -= hStep; // first, back up a step v -= vStep; if (hStep == 0) // we were travelling up or down { if (vStep == -1) // we were travelling upÉ hStep = 1; // so begin travelling right else // we were travelling downÉ hStep = -1; // so begin travelling left vStep = 0; } else { hStep = 0; // begin travelling down vStep = 1; } h += hStep; // proceed a step now v += vStep; } } } } while (!finished); HSetState((Handle)thisHouse, wasState); } //-------------------------------------------------------------- GetRoomFloorSuite Boolean GetRoomFloorSuite (short room, short *floor, short *suite) { char wasState; Boolean isRoom; wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); if ((*thisHouse)->rooms[room].suite == kRoomIsEmpty) { *floor = 0; *suite = kRoomIsEmpty; isRoom = false; } else { *suite = (*thisHouse)->rooms[room].suite; *floor = (*thisHouse)->rooms[room].floor; isRoom = true; } HSetState((Handle)thisHouse, wasState); return (isRoom); } //-------------------------------------------------------------- GetRoomNumber short GetRoomNumber (short floor, short suite) { // pass in a floor and suite; returns the room index into the house file short roomNum, i; char wasState; roomNum = kRoomIsEmpty; wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); for (i = 0; i < numberRooms; i++) { if (((*thisHouse)->rooms[i].suite == suite) && ((*thisHouse)->rooms[i].floor == floor)) { roomNum = i; break; } } HSetState((Handle)thisHouse, wasState); return (roomNum); } //-------------------------------------------------------------- IsRoomAStructure Boolean IsRoomAStructure (short roomNum) { char wasState; Boolean isStructure; if (roomNum == kRoomIsEmpty) return (false); wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); if ((*thisHouse)->rooms[roomNum].background >= kUserBackground) { if ((*thisHouse)->rooms[roomNum].bounds != 0) { isStructure = (((*thisHouse)->rooms[roomNum].bounds & 32) == 32); } else { if ((*thisHouse)->rooms[roomNum].background < kUserStructureRange) isStructure = true; else isStructure = false; } } else { switch ((*thisHouse)->rooms[roomNum].background) { case kPaneledRoom: case kSimpleRoom: case kChildsRoom: case kAsianRoom: case kUnfinishedRoom: case kSwingersRoom: case kBathroom: case kLibrary: case kSkywalk: case kRoof: isStructure = true; break; default: isStructure = false; break; } } HSetState((Handle)thisHouse, wasState); return (isStructure); } //-------------------------------------------------------------- DetermineRoomOpenings void DetermineRoomOpenings (void) { short whichBack, leftTile, rightTile; short boundsCode; whichBack = thisRoom->background; leftTile = thisRoom->tiles[0]; rightTile = thisRoom->tiles[kNumTiles - 1]; if (whichBack >= kUserBackground) { if (thisRoom->bounds != 0) boundsCode = thisRoom->bounds >> 1; else boundsCode = GetOriginalBounding(whichBack); leftOpen = ((boundsCode & 0x0001) == 0x0001); rightOpen = ((boundsCode & 0x0004) == 0x0004); if (leftOpen) leftThresh = kNoLeftWallLimit; else leftThresh = kLeftWallLimit; if (rightOpen) rightThresh = kNoRightWallLimit; else rightThresh = kRightWallLimit; } else { switch (whichBack) { case kSimpleRoom: case kPaneledRoom: case kBasement: case kChildsRoom: case kAsianRoom: case kUnfinishedRoom: case kSwingersRoom: case kBathroom: case kLibrary: case kSky: if (leftTile == 0) leftThresh = kLeftWallLimit; else leftThresh = kNoLeftWallLimit; if (rightTile == (kNumTiles - 1)) rightThresh = kRightWallLimit; else rightThresh = kNoRightWallLimit; leftOpen = (leftTile != 0); rightOpen = (rightTile != (kNumTiles - 1)); break; case kDirt: if (leftTile == 1) leftThresh = kLeftWallLimit; else leftThresh = kNoLeftWallLimit; if (rightTile == (kNumTiles - 1)) rightThresh = kRightWallLimit; else rightThresh = kNoRightWallLimit; leftOpen = (leftTile != 0); rightOpen = (rightTile != (kNumTiles - 1)); break; case kMeadow: if (leftTile == 6) leftThresh = kLeftWallLimit; else leftThresh = kNoLeftWallLimit; if (rightTile == 7) rightThresh = kRightWallLimit; else rightThresh = kNoRightWallLimit; leftOpen = (leftTile != 6); rightOpen = (rightTile != 7); break; case kGarden: case kSkywalk: case kField: case kStratosphere: case kStars: leftThresh = kNoLeftWallLimit; rightThresh = kNoRightWallLimit; leftOpen = true; rightOpen = true; break; default: if (leftTile == 0) leftThresh = kLeftWallLimit; else leftThresh = kNoLeftWallLimit; if (rightTile == (kNumTiles - 1)) rightThresh = kRightWallLimit; else rightThresh = kNoRightWallLimit; leftOpen = (leftTile != 0); rightOpen = (rightTile != (kNumTiles - 1)); break; } } if (DoesRoomHaveFloor()) bottomOpen = false; else bottomOpen = true; if (DoesRoomHaveCeiling()) topOpen = false; else topOpen = true; } //-------------------------------------------------------------- GetOriginalBounding short GetOriginalBounding (short theID) { boundsHand boundsRes; short boundCode; boundsRes = (boundsHand)GetResource('bnds', theID); if (boundsRes == nil) { if (PictIDExists(theID)) YellowAlert(kYellowNoBoundsRes, 0); boundCode = 0; } else { boundCode = 0; HLock((Handle)boundsRes); if ((*boundsRes)->left) boundCode += 1; if ((*boundsRes)->top) boundCode += 2; if ((*boundsRes)->right) boundCode += 4; if ((*boundsRes)->bottom) boundCode += 8; HUnlock((Handle)boundsRes); ReleaseResource((Handle)boundsRes); } return (boundCode); } //-------------------------------------------------------------- GetNumberOfLights short GetNumberOfLights (short where) { houseType *thisHousePtr; short i, count; char wasState; if (theMode == kEditMode) { switch (thisRoom->background) { case kGarden: case kSkywalk: case kMeadow: case kField: case kRoof: case kSky: case kStratosphere: case kStars: count = 1; break; case kDirt: count = 0; if ((thisRoom->tiles[0] == 0) && (thisRoom->tiles[1] == 0) && (thisRoom->tiles[2] == 0) && (thisRoom->tiles[3] == 0) && (thisRoom->tiles[4] == 0) && (thisRoom->tiles[5] == 0) && (thisRoom->tiles[6] == 0) && (thisRoom->tiles[7] == 0)) count = 1; break; default: count = 0; break; } if (count == 0) { for (i = 0; i < kMaxRoomObs; i++) { switch (thisRoom->objects[i].what) { case kDoorInLf: case kDoorInRt: case kWindowInLf: case kWindowInRt: case kWallWindow: count++; break; case kCeilingLight: case kLightBulb: case kTableLamp: case kHipLamp: case kDecoLamp: case kFlourescent: case kTrackLight: case kInvisLight: if (thisRoom->objects[i].data.f.initial) count++; break; } } } } else { wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); thisHousePtr = *thisHouse; switch (thisHousePtr->rooms[where].background) { case kGarden: case kSkywalk: case kMeadow: case kField: case kRoof: case kSky: case kStratosphere: case kStars: count = 1; break; case kDirt: count = 0; if ((thisHousePtr->rooms[where].tiles[0] == 0) && (thisHousePtr->rooms[where].tiles[1] == 0) && (thisHousePtr->rooms[where].tiles[2] == 0) && (thisHousePtr->rooms[where].tiles[3] == 0) && (thisHousePtr->rooms[where].tiles[4] == 0) && (thisHousePtr->rooms[where].tiles[5] == 0) && (thisHousePtr->rooms[where].tiles[6] == 0) && (thisHousePtr->rooms[where].tiles[7] == 0)) count = 1; break; default: count = 0; break; } if (count == 0) { for (i = 0; i < kMaxRoomObs; i++) { switch (thisHousePtr->rooms[where].objects[i].what) { case kDoorInLf: case kDoorInRt: case kWindowInLf: case kWindowInRt: case kWallWindow: count++; break; case kCeilingLight: case kLightBulb: case kTableLamp: case kHipLamp: case kDecoLamp: case kFlourescent: case kTrackLight: case kInvisLight: if (thisHousePtr->rooms[where].objects[i].data.f.state) count++; break; } } } HSetState((Handle)thisHouse, wasState); } return (count); } //-------------------------------------------------------------- IsShadowVisible Boolean IsShadowVisible (void) { short boundsCode; Boolean hasFloor; if (thisRoom->background >= kUserBackground) { if (thisRoom->bounds != 0) // is this a version 2.0 house? boundsCode = (thisRoom->bounds >> 1); else boundsCode = GetOriginalBounding(thisRoom->background); hasFloor = ((boundsCode & 0x0008) != 0x0008); } else { switch (thisRoom->background) { case kRoof: case kSky: case kStratosphere: case kStars: hasFloor = false; break; default: hasFloor = true; break; } } return (hasFloor); } //-------------------------------------------------------------- DoesRoomHaveFloor Boolean DoesRoomHaveFloor (void) { short boundsCode; Boolean hasFloor; if (thisRoom->background >= kUserBackground) { if (thisRoom->bounds != 0) // is this a version 2.0 house? boundsCode = (thisRoom->bounds >> 1); else boundsCode = GetOriginalBounding(thisRoom->background); hasFloor = ((boundsCode & 0x0008) != 0x0008); } else { switch (thisRoom->background) { case kSky: case kStratosphere: case kStars: hasFloor = false; break; default: hasFloor = true; break; } } return (hasFloor); } //-------------------------------------------------------------- DoesRoomHaveCeiling Boolean DoesRoomHaveCeiling (void) { short boundsCode; Boolean hasCeiling; if (thisRoom->background >= kUserBackground) { if (thisRoom->bounds != 0) // is this a version 2.0 house? boundsCode = (thisRoom->bounds >> 1); else boundsCode = GetOriginalBounding(thisRoom->background); hasCeiling = ((boundsCode & 0x0002) != 0x0002); } else { switch (thisRoom->background) { case kGarden: case kMeadow: case kField: case kRoof: case kSky: case kStratosphere: case kStars: hasCeiling = false; break; default: hasCeiling = true; break; } } return (hasCeiling); } \ No newline at end of file diff --git a/Sources/RoomGraphics.c b/Sources/RoomGraphics.c deleted file mode 100755 index e1de36b..0000000 --- a/Sources/RoomGraphics.c +++ /dev/null @@ -1 +0,0 @@ -//============================================================================ //---------------------------------------------------------------------------- // RoomGraphics.c //---------------------------------------------------------------------------- //============================================================================ #include #include "Externs.h" #include "Environ.h" #include "MainWindow.h" #include "RectUtils.h" #include "Room.h" #define kManholeThruFloor 3957 void LoadGraphicSpecial (short); void DrawRoomBackground (short, short, short); void DrawFloorSupport (void); void ReadyBackMap (void); void RestoreWorkMap (void); void DrawLighting (void); Rect suppSrcRect; GWorldPtr suppSrcMap; Rect localRoomsDest[9]; Rect houseRect; short numNeighbors, numLights, thisTiles[kNumTiles]; short localNumbers[9], thisBackground; Boolean isStructure[9], wardBitSet; extern CGrafPtr savedMaps[]; extern Rect tempManholes[]; extern short numTempManholes, tvWithMovieNumber; extern Boolean shadowVisible, takingTheStairs; //============================================================== Functions //-------------------------------------------------------------- DrawLocale void DrawLocale (void) { short i, roomV; char wasState; CGrafPtr wasCPort; GDHandle wasWorld; ZeroFlamesAndTheLike(); ZeroDinahs(); KillAllBands(); ZeroMirrorRegion(); ZeroTriggers(); numTempManholes = 0; FlushAnyTriggerPlaying(); DumpTriggerSound(); tvInRoom = false; tvWithMovieNumber = -1; wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); roomV = (*thisHouse)->rooms[thisRoomNumber].floor; HSetState((Handle)thisHouse, wasState); for (i = 0; i < 9; i++) { localNumbers[i] = GetNeighborRoomNumber(i); isStructure[i] = IsRoomAStructure(localNumbers[i]); } ListAllLocalObjects(); GetGWorld(&wasCPort, &wasWorld); SetGWorld(backSrcMap, nil); PaintRect(&backSrcRect); if (numNeighbors > 3) { numLights = GetNumberOfLights(localNumbers[kNorthWestRoom]); DrawRoomBackground(localNumbers[kNorthWestRoom], kNorthWestRoom, roomV + 1); DrawARoomsObjects(kNorthWestRoom, false); numLights = GetNumberOfLights(localNumbers[kNorthEastRoom]); DrawRoomBackground(localNumbers[kNorthEastRoom], kNorthEastRoom, roomV + 1); DrawARoomsObjects(kNorthEastRoom, false); numLights = GetNumberOfLights(localNumbers[kNorthRoom]); DrawRoomBackground(localNumbers[kNorthRoom], kNorthRoom, roomV + 1); DrawARoomsObjects(kNorthRoom, false); numLights = GetNumberOfLights(localNumbers[kSouthWestRoom]); DrawRoomBackground(localNumbers[kSouthWestRoom], kSouthWestRoom, roomV - 1); DrawARoomsObjects(kSouthWestRoom, false); numLights = GetNumberOfLights(localNumbers[kSouthEastRoom]); DrawRoomBackground(localNumbers[kSouthEastRoom], kSouthEastRoom, roomV - 1); DrawARoomsObjects(kSouthEastRoom, false); numLights = GetNumberOfLights(localNumbers[kSouthRoom]); DrawRoomBackground(localNumbers[kSouthRoom], kSouthRoom, roomV - 1); DrawARoomsObjects(kSouthRoom, false); } if (numNeighbors > 1) { numLights = GetNumberOfLights(localNumbers[kWestRoom]); DrawRoomBackground(localNumbers[kWestRoom], kWestRoom, roomV); DrawARoomsObjects(kWestRoom, false); DrawLighting(); numLights = GetNumberOfLights(localNumbers[kEastRoom]); DrawRoomBackground(localNumbers[kEastRoom], kEastRoom, roomV); DrawARoomsObjects(kEastRoom, false); DrawLighting(); } numLights = GetNumberOfLights(localNumbers[kCentralRoom]); DrawRoomBackground(localNumbers[kCentralRoom], kCentralRoom, roomV); DrawARoomsObjects(kCentralRoom, false); DrawLighting(); if (numNeighbors > 3) DrawFloorSupport(); RestoreWorkMap(); shadowVisible = IsShadowVisible(); takingTheStairs = false; SetGWorld(wasCPort, wasWorld); } //-------------------------------------------------------------- LoadGraphicSpecial void LoadGraphicSpecial (short resID) { Rect bounds; PicHandle thePicture; thePicture = GetPicture(resID); if (thePicture == nil) { thePicture = (PicHandle)GetResource('Date', resID); if (thePicture == nil) { thePicture = GetPicture(2000); if (thePicture == nil) RedAlert(kErrFailedGraphicLoad); } } HLock((Handle)thePicture); bounds = (*thePicture)->picFrame; HUnlock((Handle)thePicture); OffsetRect(&bounds, -bounds.left, -bounds.top); DrawPicture(thePicture, &bounds); ReleaseResource((Handle)thePicture); } //-------------------------------------------------------------- DrawRoomBackground void DrawRoomBackground (short who, short where, short elevation) { Rect src, dest; short i, pictID; short tiles[kNumTiles]; char wasState; if (where == kCentralRoom) { wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); thisBackground = (*thisHouse)->rooms[who].background; for (i = 0; i < kNumTiles; i++) thisTiles[i] = (*thisHouse)->rooms[who].tiles[i]; HSetState((Handle)thisHouse, wasState); } if ((numLights == 0) && (who != kRoomIsEmpty)) { CGrafPtr wasCPort; GDHandle wasWorld; GetGWorld(&wasCPort, &wasWorld); SetGWorld(backSrcMap, nil); PaintRect(&localRoomsDest[where]); SetGWorld(wasCPort, wasWorld); return; } if (who == kRoomIsEmpty) // This call should be smarter than this { if (wardBitSet) { CGrafPtr wasCPort; GDHandle wasWorld; GetGWorld(&wasCPort, &wasWorld); SetGWorld(backSrcMap, nil); PaintRect(&localRoomsDest[where]); SetGWorld(wasCPort, wasWorld); return; } if (elevation > 1) { pictID = kSky; for (i = 0; i < kNumTiles; i++) tiles[i] = 2; } else if (elevation == 1) { pictID = kMeadow; for (i = 0; i < kNumTiles; i++) tiles[i] = 0; } else { pictID = kDirt; for (i = 0; i < kNumTiles; i++) tiles[i] = 0; } } else { wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); pictID = (*thisHouse)->rooms[who].background; for (i = 0; i < kNumTiles; i++) tiles[i] = (*thisHouse)->rooms[who].tiles[i]; HSetState((Handle)thisHouse, wasState); } SetPort((GrafPtr)workSrcMap); LoadGraphicSpecial(pictID); QSetRect(&src, 0, 0, kTileWide, kTileHigh); QSetRect(&dest, 0, 0, kTileWide, kTileHigh); QOffsetRect(&dest, localRoomsDest[where].left, localRoomsDest[where].top); for (i = 0; i < kNumTiles; i++) { src.left = tiles[i] * kTileWide; src.right = src.left + kTileWide; CopyBits((BitMap *)*GetGWorldPixMap(workSrcMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &src, &dest, srcCopy, nil); QOffsetRect(&dest, kTileWide, 0); } } //-------------------------------------------------------------- DrawFloorSupport void DrawFloorSupport (void) { Rect src, dest, whoCares; short i; CGrafPtr wasCPort; GDHandle wasWorld; GetGWorld(&wasCPort, &wasWorld); SetGWorld(backSrcMap, nil); src = suppSrcRect; if (isStructure[kNorthWestRoom]) { dest = suppSrcRect; // left room's ceiling QOffsetRect(&dest, localRoomsDest[kWestRoom].left, localRoomsDest[kCentralRoom].top - suppSrcRect.bottom); CopyBits((BitMap *)*GetGWorldPixMap(suppSrcMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &src, &dest, srcCopy, nil); for (i = 0; i < numTempManholes; i++) if (SectRect(&dest, &tempManholes[i], &whoCares)) { tempManholes[i].top = dest.top; tempManholes[i].bottom = dest.bottom; LoadScaledGraphic(kManholeThruFloor, &tempManholes[i]); } } if (isStructure[kWestRoom]) { dest = suppSrcRect; // left room's floor QOffsetRect(&dest, localRoomsDest[kWestRoom].left, localRoomsDest[kCentralRoom].bottom); CopyBits((BitMap *)*GetGWorldPixMap(suppSrcMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &src, &dest, srcCopy, nil); for (i = 0; i < numTempManholes; i++) if (SectRect(&dest, &tempManholes[i], &whoCares)) { tempManholes[i].top = dest.top; tempManholes[i].bottom = dest.bottom; LoadScaledGraphic(kManholeThruFloor, &tempManholes[i]); } } if (isStructure[kNorthRoom]) { dest = suppSrcRect; // directly above main room QOffsetRect(&dest, localRoomsDest[kCentralRoom].left, localRoomsDest[kCentralRoom].top - suppSrcRect.bottom); CopyBits((BitMap *)*GetGWorldPixMap(suppSrcMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &src, &dest, srcCopy, nil); for (i = 0; i < numTempManholes; i++) if (SectRect(&dest, &tempManholes[i], &whoCares)) { tempManholes[i].top = dest.top; tempManholes[i].bottom = dest.bottom; LoadScaledGraphic(kManholeThruFloor, &tempManholes[i]); } } if (isStructure[kCentralRoom]) { dest = suppSrcRect; // directly below main room QOffsetRect(&dest, localRoomsDest[kCentralRoom].left, localRoomsDest[kCentralRoom].bottom); CopyBits((BitMap *)*GetGWorldPixMap(suppSrcMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &src, &dest, srcCopy, nil); for (i = 0; i < numTempManholes; i++) if (SectRect(&dest, &tempManholes[i], &whoCares)) { tempManholes[i].top = dest.top; tempManholes[i].bottom = dest.bottom; LoadScaledGraphic(kManholeThruFloor, &tempManholes[i]); } } if (isStructure[kNorthEastRoom]) { dest = suppSrcRect; QOffsetRect(&dest, localRoomsDest[kEastRoom].left, localRoomsDest[kCentralRoom].top - suppSrcRect.bottom); CopyBits((BitMap *)*GetGWorldPixMap(suppSrcMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &src, &dest, srcCopy, nil); for (i = 0; i < numTempManholes; i++) if (SectRect(&dest, &tempManholes[i], &whoCares)) { tempManholes[i].top = dest.top; tempManholes[i].bottom = dest.bottom; LoadScaledGraphic(kManholeThruFloor, &tempManholes[i]); } } if (isStructure[kEastRoom]) { dest = suppSrcRect; QOffsetRect(&dest, localRoomsDest[kEastRoom].left, localRoomsDest[kCentralRoom].bottom); CopyBits((BitMap *)*GetGWorldPixMap(suppSrcMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &src, &dest, srcCopy, nil); for (i = 0; i < numTempManholes; i++) if (SectRect(&dest, &tempManholes[i], &whoCares)) { tempManholes[i].top = dest.top; tempManholes[i].bottom = dest.bottom; LoadScaledGraphic(kManholeThruFloor, &tempManholes[i]); } } SetGWorld(wasCPort, wasWorld); } //-------------------------------------------------------------- ReadyBackMap void ReadyBackMap (void) { CopyBits((BitMap *)*GetGWorldPixMap(workSrcMap), (BitMap *)*GetGWorldPixMap(backSrcMap), &workSrcRect, &workSrcRect, srcCopy, nil); } //-------------------------------------------------------------- RestoreWorkMap void RestoreWorkMap (void) { Rect dest; dest = backSrcRect; CopyBits((BitMap *)*GetGWorldPixMap(backSrcMap), (BitMap *)*GetGWorldPixMap(workSrcMap), &backSrcRect, &backSrcRect, srcCopy, nil); } //-------------------------------------------------------------- ReadyLevel void ReadyLevel (void) { NilSavedMaps(); #ifdef COMPILEQT if ((thisMac.hasQT) && (hasMovie) && (tvInRoom)) { tvInRoom = false; tvWithMovieNumber = -1; StopMovie(theMovie); } #endif DetermineRoomOpenings(); DrawLocale(); InitGarbageRects(); } //-------------------------------------------------------------- DrawLighting void DrawLighting (void) { if (numLights == 0) return; else { // for future construction } } //-------------------------------------------------------------- RedrawRoomLighting void RedrawRoomLighting (void) { short roomV; char wasState; Boolean wasLit, isLit; wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); roomV = (*thisHouse)->rooms[thisRoomNumber].floor; HSetState((Handle)thisHouse, wasState); wasLit = numLights > 0; numLights = GetNumberOfLights(localNumbers[kCentralRoom]); isLit = numLights > 0; if (wasLit != isLit) { DrawRoomBackground(localNumbers[kCentralRoom], kCentralRoom, roomV); DrawARoomsObjects(kCentralRoom, true); DrawLighting(); UpdateOutletsLighting(localNumbers[kCentralRoom], numLights); if (numNeighbors > 3) DrawFloorSupport(); RestoreWorkMap(); AddRectToWorkRects(&localRoomsDest[kCentralRoom]); shadowVisible = IsShadowVisible(); } } \ No newline at end of file diff --git a/Sources/RoomInfo.c b/Sources/RoomInfo.c deleted file mode 100755 index ee736de..0000000 --- a/Sources/RoomInfo.c +++ /dev/null @@ -1 +0,0 @@ - //============================================================================ //---------------------------------------------------------------------------- // RoomInfo.c //---------------------------------------------------------------------------- //============================================================================ #include #include #include #include "DialogUtils.h" #include "Externs.h" #include "RectUtils.h" #include "Utilities.h" #define kRoomInfoDialogID 1003 #define kOriginalArtDialogID 1016 #define kNoPICTFoundAlert 1036 #define kRoomNameItem 3 #define kRoomLocationBox 6 #define kRoomTilesBox 10 #define kRoomPopupItem 11 #define kRoomDividerLine 12 #define kRoomTilesBox2 15 #define kRoomFirstCheck 17 #define kLitUnlitText 18 #define kMiniTileWide 16 #define kBoundsButton 19 #define kOriginalArtworkItem 19 #define kPICTIDItem 5 #define kFloorSupportCheck 12 void UpdateRoomInfoDialog (DialogPtr); void DragMiniTile (Point, short *); void HiliteTileOver (Point); pascal Boolean RoomFilter (DialogPtr, EventRecord *, short *); short ChooseOriginalArt (short); void UpdateOriginalArt (DialogPtr); pascal Boolean OriginalArtFilter (DialogPtr, EventRecord *, short *); Boolean PictIDExists (short); short GetFirstPICT (void); void BitchAboutPICTNotFound (void); Rect tileSrc, tileDest, tileSrcRect, editTETextBox; Rect leftBound, topBound, rightBound, bottomBound; CGrafPtr tileSrcMap; short tempTiles[kNumTiles]; short tileOver, tempBack, cursorIs; Boolean originalLeftOpen, originalTopOpen, originalRightOpen, originalBottomOpen; Boolean originalFloor; extern Cursor handCursor, beamCursor; extern short houseResFork, lastBackground; //============================================================== Functions //-------------------------------------------------------------- UpdateRoomInfoDialog #ifndef COMPILEDEMO void UpdateRoomInfoDialog (DialogPtr theDialog) { Rect src, dest; short i; DrawDialog(theDialog); if (tempBack >= kUserBackground) SetPopUpMenuValue(theDialog, kRoomPopupItem, kOriginalArtworkItem); else SetPopUpMenuValue(theDialog, kRoomPopupItem, (tempBack - kBaseBackgroundID) + 1); CopyBits(GetPortBitMapForCopyBits(tileSrcMap), GetPortBitMapForCopyBits(GetDialogPort(theDialog)), &tileSrcRect, &tileSrc, srcCopy, nil); /* CopyBits(&((GrafPtr)tileSrcMap)->portBits, &(((GrafPtr)theDialog)->portBits), &tileSrcRect, &tileSrc, srcCopy, nil); */ dest = tileDest; dest.right = dest.left + kMiniTileWide; for (i = 0; i < kNumTiles; i++) { QSetRect(&src, 0, 0, kMiniTileWide, 80); QOffsetRect(&src, tempTiles[i] * kMiniTileWide, 0); CopyBits(GetPortBitMapForCopyBits(tileSrcMap), GetPortBitMapForCopyBits(GetDialogPort(theDialog)), &src, &dest, srcCopy, nil); /* CopyBits(&((GrafPtr)tileSrcMap)->portBits, &(((GrafPtr)theDialog)->portBits), &src, &dest, srcCopy, nil); */ QOffsetRect(&dest, kMiniTileWide, 0); } if (GetNumberOfLights(thisRoomNumber) == 0) SetDialogString(theDialog, kLitUnlitText, "\p(Room Is Dark)"); else SetDialogString(theDialog, kLitUnlitText, "\p(Room Is Lit)"); FrameDialogItemC(theDialog, kRoomLocationBox, kRedOrangeColor8); FrameDialogItem(theDialog, kRoomTilesBox); FrameDialogItemC(theDialog, kRoomDividerLine, kRedOrangeColor8); FrameDialogItem(theDialog, kRoomTilesBox2); } #endif //-------------------------------------------------------------- DragMiniTile #ifndef COMPILEDEMO void DragMiniTile (Point mouseIs, short *newTileOver) { Rect dragRect; Point mouseWas; short wasTileOver; Pattern dummyPattern; tileOver = (mouseIs.h - tileSrc.left) / kMiniTileWide; wasTileOver = -1; QSetRect(&dragRect, 0, 0, kMiniTileWide, 80); QOffsetRect(&dragRect, tileSrc.left + (tileOver * kMiniTileWide), tileSrc.top); PenMode(patXor); PenPat(GetQDGlobalsGray(&dummyPattern)); FrameRect(&dragRect); mouseWas = mouseIs; while (WaitMouseUp()) // loop until mouse button let up { GetMouse(&mouseIs); // get mouse coords if (DeltaPoint(mouseWas, mouseIs) != 0L) // the mouse has moved { FrameRect(&dragRect); QOffsetRect(&dragRect, mouseIs.h - mouseWas.h, 0); FrameRect(&dragRect); if (PtInRect(mouseIs, &tileDest)) // is cursor in the drop rect { *newTileOver = (mouseIs.h - tileDest.left) / kMiniTileWide; if (*newTileOver != wasTileOver) { PenNormal(); PenSize(1, 2); ForeColor(blueColor); MoveTo(tileDest.left + (*newTileOver * kMiniTileWide), tileDest.top - 3); Line(kMiniTileWide, 0); MoveTo(tileDest.left + (*newTileOver * kMiniTileWide), tileDest.bottom + 1); Line(kMiniTileWide, 0); if (wasTileOver != -1) { ForeColor(whiteColor); MoveTo(tileDest.left + (wasTileOver * kMiniTileWide), tileDest.top - 3); Line(kMiniTileWide, 0); MoveTo(tileDest.left + (wasTileOver * kMiniTileWide), tileDest.bottom + 1); Line(kMiniTileWide, 0); } ForeColor(blackColor); PenNormal(); PenMode(patXor); PenPat(GetQDGlobalsGray(&dummyPattern)); wasTileOver = *newTileOver; } } else { *newTileOver = -1; // we're not in the drop zone if (wasTileOver != -1) { PenNormal(); PenSize(1, 2); ForeColor(whiteColor); MoveTo(tileDest.left + (wasTileOver * kMiniTileWide), tileDest.top - 3); Line(kMiniTileWide, 0); MoveTo(tileDest.left + (wasTileOver * kMiniTileWide), tileDest.bottom + 1); Line(kMiniTileWide, 0); ForeColor(blackColor); PenNormal(); PenMode(patXor); PenPat(GetQDGlobalsGray(&dummyPattern)); wasTileOver = -1; } } mouseWas = mouseIs; } } if (wasTileOver != -1) { PenNormal(); PenSize(1, 2); ForeColor(whiteColor); MoveTo(tileDest.left + (wasTileOver * kMiniTileWide), tileDest.top - 3); Line(kMiniTileWide, 0); MoveTo(tileDest.left + (wasTileOver * kMiniTileWide), tileDest.bottom + 1); Line(kMiniTileWide, 0); ForeColor(blackColor); PenNormal(); PenMode(patXor); PenPat(GetQDGlobalsGray(&dummyPattern)); wasTileOver = -1; } FrameRect(&dragRect); PenNormal(); } #endif //-------------------------------------------------------------- HiliteTileOver #ifndef COMPILEDEMO void HiliteTileOver (Point mouseIs) { short newTileOver; if (PtInRect(mouseIs, &tileSrc)) { if (cursorIs != kHandCursor) { SetCursor(&handCursor); cursorIs = kHandCursor; } newTileOver = (mouseIs.h - tileSrc.left) / kMiniTileWide; if (newTileOver != tileOver) { PenSize(1, 2); ForeColor(redColor); MoveTo(tileSrc.left + (newTileOver * kMiniTileWide), tileSrc.top - 3); Line(kMiniTileWide, 0); MoveTo(tileSrc.left + (newTileOver * kMiniTileWide), tileSrc.bottom + 1); Line(kMiniTileWide, 0); if (tileOver != -1) { ForeColor(whiteColor); MoveTo(tileSrc.left + (tileOver * kMiniTileWide), tileSrc.top - 3); Line(kMiniTileWide, 0); MoveTo(tileSrc.left + (tileOver * kMiniTileWide), tileSrc.bottom + 1); Line(kMiniTileWide, 0); } ForeColor(blackColor); PenNormal(); tileOver = newTileOver; } } else { if (tileOver != -1) { PenSize(1, 2); ForeColor(whiteColor); MoveTo(tileSrc.left + (tileOver * kMiniTileWide), tileSrc.top - 3); Line(kMiniTileWide, 0); MoveTo(tileSrc.left + (tileOver * kMiniTileWide), tileSrc.bottom + 1); Line(kMiniTileWide, 0); ForeColor(blackColor); PenNormal(); tileOver = -1; } if (PtInRect(mouseIs, &editTETextBox)) { if (cursorIs != kBeamCursor) { SetCursor(&beamCursor); cursorIs = kBeamCursor; } } else { if (cursorIs != kArrowCursor) { InitCursor(); cursorIs = kArrowCursor; } } } } #endif //-------------------------------------------------------------- RoomFilter #ifndef COMPILEDEMO pascal Boolean RoomFilter (DialogPtr dial, EventRecord *event, short *item) { Point mouseIs; short newTileOver; switch (event->what) { case keyDown: switch ((event->message) & charCodeMask) { case kReturnKeyASCII: case kEnterKeyASCII: FlashDialogButton(dial, kOkayButton); *item = kOkayButton; return(true); break; case kEscapeKeyASCII: FlashDialogButton(dial, kCancelButton); *item = kCancelButton; return(true); break; case kTabKeyASCII: SelectDialogItemText(dial, kRoomNameItem, 0, 1024); return(true); break; default: return(false); } break; case mouseDown: mouseIs = event->where; GlobalToLocal(&mouseIs); if (PtInRect(mouseIs, &tileSrc)) { if (StillDown()) { DragMiniTile(mouseIs, &newTileOver); if ((newTileOver >= 0) && (newTileOver < kNumTiles)) { tempTiles[newTileOver] = tileOver; UpdateRoomInfoDialog(dial); } } return(true); } else return(false); break; case mouseUp: return(false); break; case updateEvt: SetPort((GrafPtr)dial); BeginUpdate(GetDialogWindow(dial)); UpdateRoomInfoDialog(dial); EndUpdate(GetDialogWindow(dial)); event->what = nullEvent; return(false); break; default: GetMouse(&mouseIs); HiliteTileOver(mouseIs); return(false); break; } } #endif //-------------------------------------------------------------- DoRoomInfo void DoRoomInfo (void) { #ifndef COMPILEDEMO #define kBackgroundsMenuID 140 DialogPtr roomInfoDialog; MenuHandle backgroundsMenu; Str255 floorStr, suiteStr, objectsStr, tempStr; short item, i, newBack; char wasState; Boolean leaving, wasFirstRoom, forceDraw; ModalFilterUPP roomFilterUPP; CGrafPtr wasCPort; GDHandle wasWorld; OSErr theErr; GetGWorld(&wasCPort, &wasWorld); roomFilterUPP = NewModalFilterUPP(RoomFilter); tileOver = -1; cursorIs = kArrowCursor; tempBack = thisRoom->background; backgroundsMenu = GetMenu(kBackgroundsMenuID); // SetMenuItemTextStyle(backgroundsMenu, kOriginalArtworkItem, italic); if (HouseHasOriginalPicts()) EnableMenuItem(backgroundsMenu, kOriginalArtworkItem); NumToString(thisRoom->floor, floorStr); NumToString(thisRoom->suite, suiteStr); NumToString(thisRoom->numObjects, objectsStr); ParamText(floorStr, suiteStr, objectsStr, "\p"); theErr = CreateOffScreenGWorld(&tileSrcMap, &tileSrcRect, kPreferredDepth); SetGWorld(tileSrcMap, nil); // CreateOffScreenPixMap(&tileSrcRect, &tileSrcMap); // SetPort((GrafPtr)tileSrcMap); if ((tempBack > kStars) && (!PictIDExists(tempBack))) { BitchAboutPICTNotFound(); tempBack = kSimpleRoom; } if ((tempBack == 2002) || (tempBack == 2011) || (tempBack == 2016) || (tempBack == 2017)) LoadScaledGraphic(tempBack - 800, &tileSrcRect); else LoadScaledGraphic(tempBack, &tileSrcRect); SetGWorld(wasCPort, wasWorld); for (i = 0; i < kNumTiles; i++) tempTiles[i] = thisRoom->tiles[i]; // CenterDialog(kRoomInfoDialogID); roomInfoDialog = GetNewDialog(kRoomInfoDialogID, nil, kPutInFront); if (roomInfoDialog == nil) RedAlert(kErrDialogDidntLoad); SetPort((GrafPtr)roomInfoDialog); // Fix this later. TEMP // AddMenuToPopUp(roomInfoDialog, kRoomPopupItem, backgroundsMenu); if (tempBack >= kUserBackground) SetPopUpMenuValue(roomInfoDialog, kRoomPopupItem, kOriginalArtworkItem); else SetPopUpMenuValue(roomInfoDialog, kRoomPopupItem, (tempBack - kBaseBackgroundID) + 1); SetDialogString(roomInfoDialog, kRoomNameItem, thisRoom->name); GetDialogItemRect(roomInfoDialog, kRoomTilesBox, &tileSrc); GetDialogItemRect(roomInfoDialog, kRoomTilesBox2, &tileDest); GetDialogItemRect(roomInfoDialog, kRoomNameItem, &editTETextBox); SelectDialogItemText(roomInfoDialog, kRoomNameItem, 0, 1024); ShowWindow(GetDialogWindow(roomInfoDialog)); DrawDefaultButton(roomInfoDialog); wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); wasFirstRoom = ((*thisHouse)->firstRoom == thisRoomNumber); HSetState((Handle)thisHouse, wasState); SetDialogItemValue(roomInfoDialog, kRoomFirstCheck, (short)wasFirstRoom); if (tempBack >= kUserBackground) MyEnableControl(roomInfoDialog, kBoundsButton); else MyDisableControl(roomInfoDialog, kBoundsButton); leaving = false; while (!leaving) { ModalDialog(roomFilterUPP, &item); if (item == kOkayButton) { for (i = 0; i < kNumTiles; i++) thisRoom->tiles[i] = tempTiles[i]; GetDialogString(roomInfoDialog, kRoomNameItem, tempStr); PasStringCopyNum(tempStr, thisRoom->name, 27); if (wasFirstRoom) { HLock((Handle)thisHouse); (*thisHouse)->firstRoom = thisRoomNumber; HUnlock((Handle)thisHouse); } thisRoom->background = tempBack; if (tempBack < kUserBackground) lastBackground = tempBack; CopyThisRoomToRoom(); ReflectCurrentRoom(false); fileDirty = true; UpdateMenus(false); leaving = true; } else if (item == kCancelButton) { leaving = true; } else if (item == kRoomFirstCheck) { wasFirstRoom = !wasFirstRoom; SetDialogItemValue(roomInfoDialog, kRoomFirstCheck, (short)wasFirstRoom); } else if (item == kRoomPopupItem) { GetPopUpMenuValue(roomInfoDialog, kRoomPopupItem, &newBack); if (newBack == kOriginalArtworkItem) // original art item selected? { if (tempBack < kUserBackground) // was previous bg built-in? { tempBack = GetFirstPICT(); // then assign 1st PICT forceDraw = true; } else forceDraw = false; newBack = ChooseOriginalArt(tempBack); // bring up dialog if ((tempBack != newBack) || (forceDraw)) { tempBack = newBack; SetPort((GrafPtr)tileSrcMap); LoadScaledGraphic(tempBack, &tileSrcRect); InvalWindowRect(GetDialogWindow(roomInfoDialog), &tileSrc); InvalWindowRect(GetDialogWindow(roomInfoDialog), &tileDest); } } else { newBack += (kBaseBackgroundID - 1); // adjust to get real PICT ID if (newBack != tempBack) // if background has changed SetInitialTiles(newBack, false); } if (newBack >= kUserBackground) { MyEnableControl(roomInfoDialog, kBoundsButton); if (newBack != tempBack) // if background has changed SetInitialTiles(newBack, false); } else MyDisableControl(roomInfoDialog, kBoundsButton); if (newBack != tempBack) { tempBack = newBack; SetPort((GrafPtr)tileSrcMap); if ((tempBack == 2002) || (tempBack == 2011) || (tempBack == 2016) || (tempBack == 2017)) LoadScaledGraphic(tempBack - 800, &tileSrcRect); else LoadScaledGraphic(tempBack, &tileSrcRect); InvalWindowRect(GetDialogWindow(roomInfoDialog), &tileSrc); InvalWindowRect(GetDialogWindow(roomInfoDialog), &tileDest); } } else if (item == kBoundsButton) { newBack = ChooseOriginalArt(tempBack); if (tempBack != newBack) { tempBack = newBack; SetPort((GrafPtr)tileSrcMap); LoadScaledGraphic(tempBack, &tileSrcRect); InvalWindowRect(GetDialogWindow(roomInfoDialog), &tileSrc); InvalWindowRect(GetDialogWindow(roomInfoDialog), &tileDest); } } } InitCursor(); DisposeDialog(roomInfoDialog); DisposeModalFilterUPP(roomFilterUPP); // KillOffScreenPixMap(tileSrcMap); DisposeGWorld(tileSrcMap); tileSrcMap = nil; #endif } //-------------------------------------------------------------- UpdateOriginalArt #ifndef COMPILEDEMO void UpdateOriginalArt (DialogPtr theDialog) { Pattern dummyPattern; DrawDialog(theDialog); DrawDefaultButton(theDialog); PenSize(2, 1); if (!originalLeftOpen) BorderDialogItem(theDialog, 7, 8); else { PenPat(GetQDGlobalsGray(&dummyPattern)); BorderDialogItem(theDialog, 7, 8); PenPat(GetQDGlobalsBlack(&dummyPattern)); } PenSize(1, 2); if (!originalTopOpen) BorderDialogItem(theDialog, 8, 4); else { PenPat(GetQDGlobalsGray(&dummyPattern)); BorderDialogItem(theDialog, 8, 4); PenPat(GetQDGlobalsBlack(&dummyPattern)); } PenSize(2, 1); if (!originalRightOpen) BorderDialogItem(theDialog, 9, 1); else { PenPat(GetQDGlobalsGray(&dummyPattern)); BorderDialogItem(theDialog, 9, 1); PenPat(GetQDGlobalsBlack(&dummyPattern)); } PenSize(1, 2); if (!originalBottomOpen) BorderDialogItem(theDialog, 10, 2); else { PenPat(GetQDGlobalsGray(&dummyPattern)); BorderDialogItem(theDialog, 10, 2); PenPat(GetQDGlobalsBlack(&dummyPattern)); } PenSize(1, 1); } #endif //-------------------------------------------------------------- OriginalArtFilter #ifndef COMPILEDEMO pascal Boolean OriginalArtFilter (DialogPtr dial, EventRecord *event, short *item) { Point mouseIs; switch (event->what) { case keyDown: switch ((event->message) & charCodeMask) { case kReturnKeyASCII: case kEnterKeyASCII: FlashDialogButton(dial, kOkayButton); *item = kOkayButton; return(true); break; case kEscapeKeyASCII: FlashDialogButton(dial, kCancelButton); *item = kCancelButton; return(true); break; case kTabKeyASCII: SelectDialogItemText(dial, kPICTIDItem, 0, 1024); return(true); break; default: return(false); } break; case mouseDown: mouseIs = event->where; GlobalToLocal(&mouseIs); if (PtInRect(mouseIs, &leftBound)) { *item = 7; return(true); } else if (PtInRect(mouseIs, &topBound)) { *item = 8; return(true); } else if (PtInRect(mouseIs, &rightBound)) { *item = 9; return(true); } else if (PtInRect(mouseIs, &bottomBound)) { *item = 10; return(true); } else return(false); break; case mouseUp: return(false); break; case updateEvt: SetPort((GrafPtr)dial); BeginUpdate(GetDialogWindow(dial)); UpdateOriginalArt(dial); EndUpdate(GetDialogWindow(dial)); event->what = nullEvent; return(false); break; default: return(false); break; } } #endif //-------------------------------------------------------------- ChooseOriginalArt #ifndef COMPILEDEMO short ChooseOriginalArt (short was) { DialogPtr theDialog; long longID; short item, newPictID, tempShort, wasPictID; Boolean leaving; ModalFilterUPP originalArtFilterUPP; originalArtFilterUPP = NewModalFilterUPP(OriginalArtFilter); if (was < kUserBackground) was = kUserBackground; InitCursor(); BringUpDialog(&theDialog, kOriginalArtDialogID); if (was >= kOriginalArtworkItem) { newPictID = was; wasPictID = was; } else { newPictID = kUserBackground; wasPictID = 0; } SetDialogNumToStr(theDialog, kPICTIDItem, (long)newPictID); SelectDialogItemText(theDialog, kPICTIDItem, 0, 16); GetDialogItemRect(theDialog, 7, &leftBound); GetDialogItemRect(theDialog, 8, &topBound); GetDialogItemRect(theDialog, 9, &rightBound); GetDialogItemRect(theDialog, 10, &bottomBound); tempShort = thisRoom->bounds >> 1; // version 2.0 house originalLeftOpen = ((tempShort & 1) == 1); originalTopOpen = ((tempShort & 2) == 2); originalRightOpen = ((tempShort & 4) == 4); originalBottomOpen = ((tempShort & 8) == 8); originalFloor = ((tempShort & 16) == 16); SetDialogItemValue(theDialog, kFloorSupportCheck, (short)originalFloor); leaving = false; while (!leaving) { ModalDialog(originalArtFilterUPP, &item); if (item == kOkayButton) { GetDialogNumFromStr(theDialog, kPICTIDItem, &longID); if ((longID >= 3000) && (longID < 3800) && (PictIDExists((short)longID))) { newPictID = (short)longID; if (newPictID != wasPictID) SetInitialTiles(tempBack, false); tempShort = 0; if (originalLeftOpen) tempShort += 1; if (originalTopOpen) tempShort += 2; if (originalRightOpen) tempShort += 4; if (originalBottomOpen) tempShort += 8; if (originalFloor) tempShort += 16; tempShort = tempShort << 1; // shift left 1 bit tempShort += 1; // flag that says orginal bounds used thisRoom->bounds = tempShort; leaving = true; } else { SysBeep(1); SetDialogNumToStr(theDialog, kPICTIDItem, (long)newPictID); } } else if (item == kCancelButton) { newPictID = was; leaving = true; } else if (item == 7) { originalLeftOpen = !originalLeftOpen; UpdateOriginalArt(theDialog); } else if (item == 8) { originalTopOpen = !originalTopOpen; UpdateOriginalArt(theDialog); } else if (item == 9) { originalRightOpen = !originalRightOpen; UpdateOriginalArt(theDialog); } else if (item == 10) { originalBottomOpen = !originalBottomOpen; UpdateOriginalArt(theDialog); } else if (item == kFloorSupportCheck) { originalFloor = !originalFloor; ToggleDialogItemValue(theDialog, kFloorSupportCheck); } } DisposeDialog(theDialog); DisposeModalFilterUPP(originalArtFilterUPP); return (newPictID); } #endif //-------------------------------------------------------------- PictIDExists Boolean PictIDExists (short theID) { PicHandle thePicture; // Handle resHandle; // Str255 resName; // ResType resType; // short numPicts, i; // short resID; Boolean foundIt; foundIt = true; thePicture = GetPicture(theID); if (thePicture == nil) { thePicture = (PicHandle)GetResource('Date', theID); if (thePicture == nil) { foundIt = false; } else ReleaseResource((Handle)thePicture); } else ReleaseResource((Handle)thePicture); // foundIt = false; // numPicts = Count1Resources('PICT'); // for (i = 1; i <= numPicts; i++) // { // resHandle = Get1IndResource('PICT', i); // if (resHandle != nil) // { // GetResInfo(resHandle, &resID, &resType, resName); // ReleaseResource(resHandle); // if (resID == theID) // { // foundIt = true; // break; // } // } // } return (foundIt); } //-------------------------------------------------------------- GetFirstPICT short GetFirstPICT (void) { Handle resHandle; Str255 resName; ResType resType; short resID; resHandle = Get1IndResource('PICT', 1); if (resHandle != nil) { GetResInfo(resHandle, &resID, &resType, resName); ReleaseResource(resHandle); return (resID); } else return (-1); } //-------------------------------------------------------------- BitchAboutPICTNotFound #ifndef COMPILEDEMO void BitchAboutPICTNotFound (void) { short hitWhat; // CenterAlert(kNoPICTFoundAlert); hitWhat = Alert(kNoPICTFoundAlert, nil); } #endif \ No newline at end of file diff --git a/Sources/RubberBands.c b/Sources/RubberBands.c deleted file mode 100755 index 657f6ba..0000000 --- a/Sources/RubberBands.c +++ /dev/null @@ -1 +0,0 @@ -//============================================================================ //---------------------------------------------------------------------------- // RubberBands.c //---------------------------------------------------------------------------- //============================================================================ #include "Externs.h" #include "RectUtils.h" #define kRubberBandVelocity 20 #define kBandFallCount 4 #define kKillBandMode -1 void CheckBandCollision (short); void KillBand (short); bandPtr bands; Rect bandsSrcRect; Rect bandRects[3]; GWorldPtr bandsSrcMap; GWorldPtr bandsMaskMap; short numBands, bandHitLast; extern hotPtr hotSpots; extern long gameFrame; extern short nHotSpots, leftThresh, rightThresh; extern Boolean twoPlayerGame, onePlayerLeft, playerDead; //============================================================== Functions //-------------------------------------------------------------- CheckBandCollision void CheckBandCollision (short who) { short i, action, whoLinked; Boolean collided, nothingCollided; nothingCollided = true; if ((leftThresh == kLeftWallLimit) && (bands[who].dest.left < kLeftWallLimit)) { if (bands[who].hVel < 0) bands[who].hVel = -bands[who].hVel; bands[who].dest.left = kLeftWallLimit; bands[who].dest.right = bands[who].dest.left + 16; PlayPrioritySound(kBandReboundSound, kBandReboundPriority); collided = true; } else if ((rightThresh == kRightWallLimit) && (bands[who].dest.right > kRightWallLimit)) { if (bands[who].hVel > 0) bands[who].hVel = -bands[who].hVel; bands[who].dest.right = kRightWallLimit; bands[who].dest.left = bands[who].dest.right - 16; PlayPrioritySound(kBandReboundSound, kBandReboundPriority); collided = true; } for (i = 0; i < nHotSpots; i++) { if (hotSpots[i].isOn) { action = hotSpots[i].action; if ((action == kDissolveIt) || (action == kRewardIt) || (action == kSwitchIt) || (action == kTriggerIt) || (action == kBounceIt)) { if (bands[who].dest.bottom < hotSpots[i].bounds.top) collided = false; else if (bands[who].dest.top > hotSpots[i].bounds.bottom) collided = false; else if (bands[who].dest.right < hotSpots[i].bounds.left) collided = false; else if (bands[who].dest.left > hotSpots[i].bounds.right) collided = false; else collided = true; if (collided) { nothingCollided = false; // we have detected a collision if (bandHitLast != i) // don't count it if same as last frame { // we don't want rapid on/off toggles bandHitLast = i; // note who so we don't double-toggle it if ((action == kDissolveIt) || (action == kBounceIt)) { if (bands[who].hVel > 0) { if ((bands[who].dest.right - bands[who].hVel) < hotSpots[i].bounds.left) { bands[who].hVel = -bands[who].hVel; bands[who].dest.right = hotSpots[i].bounds.left; bands[who].dest.left = bands[who].dest.right - 16; } else bands[who].mode = kKillBandMode; } else { if ((bands[who].dest.left - bands[who].hVel) > hotSpots[i].bounds.right) { bands[who].hVel = -bands[who].hVel; bands[who].dest.left = hotSpots[i].bounds.right; bands[who].dest.right = bands[who].dest.left + 16; } else bands[who].mode = kKillBandMode; } PlayPrioritySound(kBandReboundSound, kBandReboundPriority); break; } else if (action == kRewardIt) { whoLinked = hotSpots[i].who; if ((masterObjects[whoLinked].theObject.what == kGreaseRt) || (masterObjects[whoLinked].theObject.what == kGreaseLf)) { if (SetObjectState(thisRoomNumber, masterObjects[whoLinked].objectNum, 0, whoLinked)) SpillGrease(masterObjects[whoLinked].dynaNum, masterObjects[whoLinked].hotNum); hotSpots[i].isOn = false; } } else if (action == kSwitchIt) { HandleSwitches(&hotSpots[i]); } else if (action == kTriggerIt) { ArmTrigger(&hotSpots[i]); } } } } } } if (nothingCollided) // the rubberband has hit nothing bandHitLast = -1; // so make note of that for the next time if (bands[who].hVel != 0) { if (bands[who].dest.bottom < theGlider.dest.top) collided = false; else if (bands[who].dest.top > theGlider.dest.bottom) collided = false; else if (bands[who].dest.right < theGlider.dest.left) collided = false; else if (bands[who].dest.left > theGlider.dest.right) collided = false; else collided = true; if (collided) { if ((!twoPlayerGame) || (!onePlayerLeft) || (playerDead == kPlayer2)) { theGlider.hVel += (bands[who].hVel / 2); bands[who].hVel = 0; PlayPrioritySound(kHitWallSound, kHitWallPriority); } } if (twoPlayerGame) { if (bands[who].dest.bottom < theGlider2.dest.top) collided = false; else if (bands[who].dest.top > theGlider2.dest.bottom) collided = false; else if (bands[who].dest.right < theGlider2.dest.left) collided = false; else if (bands[who].dest.left > theGlider2.dest.right) collided = false; else collided = true; if (collided) { if ((!onePlayerLeft) || (playerDead == kPlayer1)) { theGlider2.hVel += (bands[who].hVel / 2); bands[who].hVel = 0; PlayPrioritySound(kHitWallSound, kHitWallPriority); } } } } if ((bands[who].dest.left < kLeftWallLimit) || (bands[who].dest.right > kRightWallLimit)) { bands[who].mode = kKillBandMode; } else if (bands[who].dest.bottom > kFloorLimit) { bands[who].mode = kKillBandMode; } } //-------------------------------------------------------------- HandleBands void HandleBands (void) { Rect dest; short i, count; if (numBands == 0) return; for (i = 0; i < numBands; i++) { bands[i].mode++; if (bands[i].mode > 2) bands[i].mode = 0; bands[i].count++; if (bands[i].count >= kBandFallCount) { bands[i].vVel++; bands[i].count = 0; } dest = bands[i].dest; QOffsetRect(&dest, playOriginH, playOriginV); AddRectToWorkRects(&dest); bands[i].dest.left += bands[i].hVel; bands[i].dest.right += bands[i].hVel; bands[i].dest.top += bands[i].vVel; bands[i].dest.bottom += bands[i].vVel; CheckBandCollision(i); } count = 0; do { while (bands[count].mode == kKillBandMode) { bands[count].mode = 0; KillBand(count); } count++; } while (count < numBands); } //-------------------------------------------------------------- AddBand Boolean AddBand (gliderPtr thisGlider, short h, short v, Boolean direction) { if (numBands >= kMaxRubberBands) return (false); bands[numBands].mode = 0; bands[numBands].count = 0; if (thisGlider->tipped) bands[numBands].vVel = -2; else bands[numBands].vVel = 0; bands[numBands].dest.left = h - 8; bands[numBands].dest.right = h + 8; bands[numBands].dest.top = v - 3; bands[numBands].dest.bottom = v + 3; if (direction == kFaceLeft) { bands[numBands].dest.left -= 32; bands[numBands].dest.right -= 32; bands[numBands].hVel = -kRubberBandVelocity; } else { bands[numBands].dest.left += 32; bands[numBands].dest.right += 32; bands[numBands].hVel = kRubberBandVelocity; } thisGlider->hVel -= (bands[numBands].hVel / 2); numBands++; PlayPrioritySound(kFireBandSound, kFireBandPriority); return (true); } //-------------------------------------------------------------- KillBand void KillBand (short which) { short lastBand; lastBand = numBands - 1; if (which != lastBand) bands[which] = bands[lastBand]; numBands--; } //-------------------------------------------------------------- KillAllBands void KillAllBands (void) { short i; for (i = 0; i < kMaxRubberBands; i++) { bands[i].mode = 0; } numBands = 0; } \ No newline at end of file diff --git a/Sources/SavedGames.c b/Sources/SavedGames.c deleted file mode 100755 index cd9f08c..0000000 --- a/Sources/SavedGames.c +++ /dev/null @@ -1 +0,0 @@ - //============================================================================ //---------------------------------------------------------------------------- // SavedGames.c //---------------------------------------------------------------------------- //============================================================================ #include #include "Externs.h" #include "House.h" #define kSavedGameVersion 0x0200 void SavedGameMismatchError (StringPtr); gameType smallGame; extern FSSpecPtr theHousesSpecs; extern short numStarsRemaining, thisHouseIndex; extern Boolean twoPlayerGame; //============================================================== Functions //-------------------------------------------------------------- SaveGame2 void SaveGame2 (void) { // Add NavServices later. /* StandardFileReply theReply; FSSpec tempSpec; Str255 gameNameStr; Size byteCount; OSErr theErr; houseType *thisHousePtr; roomType *srcRoom; savedRoom *destRoom; gamePtr savedGame; short r, i, numRooms, gameRefNum; char wasState; FlushEvents(everyEvent, 0); wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); thisHousePtr = *thisHouse; numRooms = thisHousePtr->nRooms; HSetState((Handle)thisHouse, wasState); byteCount = sizeof(game2Type) + sizeof(savedRoom) * numRooms; savedGame = (gamePtr)NewPtr(byteCount); if (savedGame == nil) { YellowAlert(kYellowFailedSaveGame, MemError()); return; } GetFirstWordOfString(thisHouseName, gameNameStr); if (gameNameStr[0] > 23) gameNameStr[0] = 23; PasStringConcat(gameNameStr, "\p Game"); StandardPutFile("\pSave Game As:", gameNameStr, &theReply); if (!theReply.sfGood) return; if (theReply.sfReplacing) { theErr = FSMakeFSSpec(theReply.sfFile.vRefNum, theReply.sfFile.parID, theReply.sfFile.name, &tempSpec); if (!CheckFileError(theErr, "\pSaved Game")) return; theErr = FSpDelete(&tempSpec); if (!CheckFileError(theErr, "\pSaved Game")) return; } wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); thisHousePtr = *thisHouse; savedGame->house = theHousesSpecs[thisHouseIndex]; savedGame->version = kSavedGameVersion; savedGame->wasStarsLeft = numStarsRemaining; savedGame->timeStamp = thisHousePtr->timeStamp; savedGame->where.h = theGlider.dest.left; savedGame->where.v = theGlider.dest.top; savedGame->score = theScore; savedGame->unusedLong = 0L; savedGame->unusedLong2 = 0L; savedGame->energy = batteryTotal; savedGame->bands = bandsTotal; savedGame->roomNumber = thisRoomNumber; savedGame->gliderState = theGlider.mode; savedGame->numGliders = mortals; savedGame->foil = foilTotal; savedGame->nRooms = numRooms; savedGame->facing = theGlider.facing; savedGame->showFoil = showFoil; for (r = 0; r < numRooms; r++) { destRoom = &(savedGame->savedData[r]); srcRoom = &(thisHousePtr->rooms[r]); destRoom->unusedShort = 0; destRoom->unusedByte = 0; destRoom->visited = srcRoom->visited; for (i = 0; i < kMaxRoomObs; i++) destRoom->objects[i] = srcRoom->objects[i]; } HSetState((Handle)thisHouse, wasState); theErr = FSpCreate(&theReply.sfFile, 'ozm5', 'gliG', theReply.sfScript); if (CheckFileError(theErr, "\pSaved Game")) { theErr = FSpOpenDF(&theReply.sfFile, fsCurPerm, &gameRefNum); if (CheckFileError(theErr, "\pSaved Game")) { theErr = SetFPos(gameRefNum, fsFromStart, 0L); if (CheckFileError(theErr, "\pSaved Game")) { theErr = FSWrite(gameRefNum, &byteCount, (Ptr)savedGame); if (CheckFileError(theErr, "\pSaved Game")) { theErr = SetEOF(gameRefNum, byteCount); if (CheckFileError(theErr, "\pSaved Game")) { } } } theErr = FSClose(gameRefNum); if (CheckFileError(theErr, "\pSaved Game")) { } } } DisposePtr((Ptr)savedGame); */ } //-------------------------------------------------------------- SavedGameMismatchError void SavedGameMismatchError (StringPtr gameName) { #define kSavedGameErrorAlert 1044 short whoCares; InitCursor(); // CenterAlert(kSavedGameErrorAlert); ParamText(gameName, thisHouseName, "\p", "\p"); whoCares = Alert(kSavedGameErrorAlert, nil); } //-------------------------------------------------------------- OpenSavedGame Boolean OpenSavedGame (void) { return false; // TEMP fix this iwth NavServices /* StandardFileReply theReply; SFTypeList theList; houseType *thisHousePtr; roomType *destRoom; savedRoom *srcRoom; gamePtr savedGame; long byteCount; OSErr theErr; short r, i, gameRefNum; char wasState; theList[0] = 'gliG'; StandardGetFile(nil, 1, theList, &theReply); if (!theReply.sfGood) return(false); theErr = FSpOpenDF(&theReply.sfFile, fsCurPerm, &gameRefNum); if (!CheckFileError(theErr, "\pSaved Game")) return(false); theErr = GetEOF(gameRefNum, &byteCount); if (!CheckFileError(theErr, "\pSaved Game")) { theErr = FSClose(gameRefNum); return(false); } savedGame = (gamePtr)NewPtr(byteCount); if (savedGame == nil) { YellowAlert(kYellowFailedSaveGame, MemError()); theErr = FSClose(gameRefNum); return(false); } theErr = SetFPos(gameRefNum, fsFromStart, 0L); if (!CheckFileError(theErr, "\pSaved Game")) { DisposePtr((Ptr)savedGame); theErr = FSClose(gameRefNum); return(false); } theErr = FSRead(gameRefNum, &byteCount, savedGame); if (!CheckFileError(theErr, "\pSaved Game")) { DisposePtr((Ptr)savedGame); theErr = FSClose(gameRefNum); return(false); } wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); thisHousePtr = *thisHouse; if (!EqualString(savedGame->house.name, thisHouseName, true, true)) { SavedGameMismatchError(savedGame->house.name); HSetState((Handle)thisHouse, wasState); DisposePtr((Ptr)savedGame); theErr = FSClose(gameRefNum); return(false); } else if (thisHousePtr->timeStamp != savedGame->timeStamp) { YellowAlert(kYellowSavedTimeWrong, 0); HSetState((Handle)thisHouse, wasState); DisposePtr((Ptr)savedGame); theErr = FSClose(gameRefNum); return(false); } else if (savedGame->version != kSavedGameVersion) { YellowAlert(kYellowSavedVersWrong, kSavedGameVersion); HSetState((Handle)thisHouse, wasState); DisposePtr((Ptr)savedGame); theErr = FSClose(gameRefNum); return(false); } else if (savedGame->nRooms != thisHousePtr->nRooms) { YellowAlert(kYellowSavedRoomsWrong, savedGame->nRooms - thisHousePtr->nRooms); HSetState((Handle)thisHouse, wasState); DisposePtr((Ptr)savedGame); theErr = FSClose(gameRefNum); return(false); } else { smallGame.wasStarsLeft = savedGame->wasStarsLeft; smallGame.where.h = savedGame->where.h; smallGame.where.v = savedGame->where.v; smallGame.score = savedGame->score; smallGame.unusedLong = savedGame->unusedLong; smallGame.unusedLong2 = savedGame->unusedLong2; smallGame.energy = savedGame->energy; smallGame.bands = savedGame->bands; smallGame.roomNumber = savedGame->roomNumber; smallGame.gliderState = savedGame->gliderState; smallGame.numGliders = savedGame->numGliders; smallGame.foil = savedGame->foil; smallGame.unusedShort = 0; smallGame.facing = savedGame->facing; smallGame.showFoil = savedGame->showFoil; for (r = 0; r < savedGame->nRooms; r++) { srcRoom = &(savedGame->savedData[r]); destRoom = &(thisHousePtr->rooms[r]); destRoom->visited = srcRoom->visited; for (i = 0; i < kMaxRoomObs; i++) destRoom->objects[i] = srcRoom->objects[i]; } } HSetState((Handle)thisHouse, wasState); DisposePtr((Ptr)savedGame); theErr = FSClose(gameRefNum); if (!CheckFileError(theErr, "\pSaved Game")) return (false); return (true); */ } //-------------------------------------------------------------- SaveGame // This is probably about 3 days away from becoming the "old" functionÉ // for saving games. void SaveGame (Boolean doSave) { houseType *thisHousePtr; UInt32 stamp; char wasState; if (twoPlayerGame) return; wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); thisHousePtr = *thisHouse; if (doSave) { thisHousePtr->savedGame.version = kSavedGameVersion; thisHousePtr->savedGame.wasStarsLeft = numStarsRemaining; GetDateTime(&stamp); thisHousePtr->savedGame.timeStamp = (long)stamp; thisHousePtr->savedGame.where.h = theGlider.dest.left; thisHousePtr->savedGame.where.v = theGlider.dest.top; thisHousePtr->savedGame.score = theScore; thisHousePtr->savedGame.unusedLong = 0L; thisHousePtr->savedGame.unusedLong2 = 0L; thisHousePtr->savedGame.energy = batteryTotal; thisHousePtr->savedGame.bands = bandsTotal; thisHousePtr->savedGame.roomNumber = thisRoomNumber; thisHousePtr->savedGame.gliderState = theGlider.mode; thisHousePtr->savedGame.numGliders = mortals; thisHousePtr->savedGame.foil = foilTotal; thisHousePtr->savedGame.unusedShort = 0; thisHousePtr->savedGame.facing = theGlider.facing; thisHousePtr->savedGame.showFoil = showFoil; thisHousePtr->hasGame = true; } else { thisHousePtr->hasGame = false; } HSetState((Handle)thisHouse, wasState); if (doSave) { if (!WriteHouse(theMode == kEditMode)) YellowAlert(kYellowFailedWrite, 0); } } \ No newline at end of file diff --git a/Sources/Scoreboard.c b/Sources/Scoreboard.c deleted file mode 100755 index 85db244..0000000 --- a/Sources/Scoreboard.c +++ /dev/null @@ -1 +0,0 @@ - //============================================================================ //---------------------------------------------------------------------------- // Scoreboard.c //---------------------------------------------------------------------------- //============================================================================ #include #include "Externs.h" #include "Environ.h" #include "RectUtils.h" #define kGrayBackgroundColor 251 #define kGrayBackgroundColor4 10 #define kFoilBadge 0 #define kBandsBadge 1 #define kBatteryBadge 2 #define kHeliumBadge 3 #define kScoreRollAmount 13 void RefreshRoomTitle (short); void RefreshNumGliders (void); void RefreshPoints (void); Rect boardSrcRect, badgeSrcRect, boardDestRect; GWorldPtr boardSrcMap, badgeSrcMap; Rect boardTSrcRect, boardTDestRect; GWorldPtr boardTSrcMap; Rect boardGSrcRect, boardGDestRect; GWorldPtr boardGSrcMap; Rect boardPSrcRect, boardPDestRect; Rect boardPQDestRect, boardGQDestRect; Rect badgesBlankRects[4], badgesBadgesRects[4]; Rect badgesDestRects[4]; GWorldPtr boardPSrcMap; long displayedScore; short wasScoreboardMode; Boolean doRollScore; extern Rect localRoomsDest[], justRoomsRect; extern long gameFrame; extern short numNeighbors, otherPlayerEscaped; extern Boolean evenFrame, onePlayerLeft; //============================================================== Functions //-------------------------------------------------------------- RefreshScoreboard void RefreshScoreboard (short mode) { doRollScore = true; RefreshRoomTitle(mode); RefreshNumGliders(); RefreshPoints(); CopyBits((BitMap *)*GetGWorldPixMap(boardSrcMap), GetPortBitMapForCopyBits(GetWindowPort(mainWindow)), &boardSrcRect, &boardDestRect, srcCopy, 0L); QuickBatteryRefresh(false); QuickBandsRefresh(false); QuickFoilRefresh(false); } //-------------------------------------------------------------- HandleDynamicScoreboard void HandleDynamicScoreboard (void) { #define kFoilLow 2 // 25% #define kBatteryLow 17 // 25% #define kHeliumLow -38 // 25% #define kBandsLow 2 // 25% long whosTurn; if (theScore > displayedScore) { if (doRollScore) { displayedScore += kScoreRollAmount; if (displayedScore > theScore) displayedScore = theScore; } else displayedScore = theScore; PlayPrioritySound(kScoreTikSound, kScoreTikPriority); QuickScoreRefresh(); } whosTurn = gameFrame & 0x00000007; switch (whosTurn) { case 0: // show foil if ((foilTotal > 0) && (foilTotal < kFoilLow)) QuickFoilRefresh(false); break; case 1: // hide battery if ((batteryTotal > 0) && (batteryTotal < kBatteryLow)) QuickBatteryRefresh(true); else if ((batteryTotal < 0) && (batteryTotal > kHeliumLow)) QuickBatteryRefresh(true); break; case 2: // show rubber bands if ((bandsTotal > 0) && (bandsTotal < kBandsLow)) QuickBandsRefresh(false); break; case 4: // show battery if ((batteryTotal > 0) && (batteryTotal < kBatteryLow)) QuickBatteryRefresh(false); else if ((batteryTotal < 0) && (batteryTotal > kHeliumLow)) QuickBatteryRefresh(false); break; case 5: // hide foil if ((foilTotal > 0) && (foilTotal < kFoilLow)) QuickFoilRefresh(true); break; case 7: // hide rubber bands if ((bandsTotal > 0) && (bandsTotal < kBandsLow)) QuickBandsRefresh(true); break; } } //-------------------------------------------------------------- RefreshRoomTitle void RefreshRoomTitle (short mode) { RGBColor theRGBColor, wasColor; SetPort((GrafPtr)boardTSrcMap); GetForeColor(&wasColor); if (thisMac.isDepth == 4) Index2Color(kGrayBackgroundColor4, &theRGBColor); else Index2Color(kGrayBackgroundColor, &theRGBColor); RGBForeColor(&theRGBColor); PaintRect(&boardTSrcRect); RGBForeColor(&wasColor); MoveTo(1, 10); ForeColor(blackColor); switch (mode) { case kEscapedTitleMode: DrawString("\pHit Delete key if unable to Follow"); break; case kSavingTitleMode: DrawString("\pSaving GameÉ"); break; default: DrawString(thisRoom->name); break; } MoveTo(0, 9); ForeColor(whiteColor); switch (mode) { case kEscapedTitleMode: DrawString("\pHit Delete key if unable to Follow"); break; case kSavingTitleMode: DrawString("\pSaving GameÉ"); break; default: DrawString(thisRoom->name); break; } ForeColor(blackColor); CopyBits((BitMap *)*GetGWorldPixMap(boardTSrcMap), (BitMap *)*GetGWorldPixMap(boardSrcMap), &boardTSrcRect, &boardTDestRect, srcCopy, nil); } //-------------------------------------------------------------- RefreshNumGliders void RefreshNumGliders (void) { RGBColor theRGBColor, wasColor; Str255 nGlidersStr; long displayMortals; SetPort((GrafPtr)boardGSrcMap); GetForeColor(&wasColor); if (thisMac.isDepth == 4) Index2Color(kGrayBackgroundColor4, &theRGBColor); else Index2Color(kGrayBackgroundColor, &theRGBColor); RGBForeColor(&theRGBColor); PaintRect(&boardGSrcRect); RGBForeColor(&wasColor); displayMortals = mortals; if (displayMortals < 0) displayMortals = 0; NumToString(displayMortals, nGlidersStr); MoveTo(1, 10); ForeColor(blackColor); DrawString(nGlidersStr); MoveTo(0, 9); ForeColor(whiteColor); DrawString(nGlidersStr); ForeColor(blackColor); CopyBits((BitMap *)*GetGWorldPixMap(boardGSrcMap), (BitMap *)*GetGWorldPixMap(boardSrcMap), &boardGSrcRect, &boardGDestRect, srcCopy, nil); } //-------------------------------------------------------------- RefreshPoints void RefreshPoints (void) { RGBColor theRGBColor, wasColor; Str255 scoreStr; SetPort((GrafPtr)boardPSrcMap); GetForeColor(&wasColor); if (thisMac.isDepth == 4) Index2Color(kGrayBackgroundColor4, &theRGBColor); else Index2Color(kGrayBackgroundColor, &theRGBColor); RGBForeColor(&theRGBColor); PaintRect(&boardPSrcRect); RGBForeColor(&wasColor); NumToString(theScore, scoreStr); MoveTo(1, 10); ForeColor(blackColor); DrawString(scoreStr); MoveTo(0, 9); ForeColor(whiteColor); DrawString(scoreStr); ForeColor(blackColor); CopyBits((BitMap *)*GetGWorldPixMap(boardPSrcMap), (BitMap *)*GetGWorldPixMap(boardSrcMap), &boardPSrcRect, &boardPDestRect, srcCopy, nil); displayedScore = theScore; } //-------------------------------------------------------------- QuickGlidersRefresh void QuickGlidersRefresh (void) { RGBColor theRGBColor, wasColor; Str255 nGlidersStr; SetPort((GrafPtr)boardGSrcMap); GetForeColor(&wasColor); if (thisMac.isDepth == 4) Index2Color(kGrayBackgroundColor4, &theRGBColor); else Index2Color(kGrayBackgroundColor, &theRGBColor); RGBForeColor(&theRGBColor); PaintRect(&boardGSrcRect); RGBForeColor(&wasColor); NumToString((long)mortals, nGlidersStr); MoveTo(1, 10); ForeColor(blackColor); DrawString(nGlidersStr); MoveTo(0, 9); ForeColor(whiteColor); DrawString(nGlidersStr); ForeColor(blackColor); CopyBits((BitMap *)*GetGWorldPixMap(boardGSrcMap), GetPortBitMapForCopyBits(GetWindowPort(mainWindow)), &boardGSrcRect, &boardGQDestRect, srcCopy, nil); } //-------------------------------------------------------------- QuickScoreRefresh void QuickScoreRefresh (void) { RGBColor theRGBColor, wasColor; Str255 scoreStr; SetPort((GrafPtr)boardPSrcMap); GetForeColor(&wasColor); if (thisMac.isDepth == 4) Index2Color(kGrayBackgroundColor4, &theRGBColor); else Index2Color(kGrayBackgroundColor, &theRGBColor); RGBForeColor(&theRGBColor); PaintRect(&boardPSrcRect); RGBForeColor(&wasColor); NumToString(displayedScore, scoreStr); MoveTo(1, 10); ForeColor(blackColor); DrawString(scoreStr); MoveTo(0, 9); ForeColor(whiteColor); DrawString(scoreStr); ForeColor(blackColor); CopyBits((BitMap *)*GetGWorldPixMap(boardPSrcMap), GetPortBitMapForCopyBits(GetWindowPort(mainWindow)), &boardPSrcRect, &boardPQDestRect, srcCopy, nil); } //-------------------------------------------------------------- QuickBatteryRefresh void QuickBatteryRefresh (Boolean flash) { if ((batteryTotal > 0) && (!flash)) { CopyBits((BitMap *)*GetGWorldPixMap(badgeSrcMap), GetPortBitMapForCopyBits(GetWindowPort(mainWindow)), &badgesBadgesRects[kBatteryBadge], &badgesDestRects[kBatteryBadge], srcCopy, nil); } else if ((batteryTotal < 0) && (!flash)) { CopyBits((BitMap *)*GetGWorldPixMap(badgeSrcMap), GetPortBitMapForCopyBits(GetWindowPort(mainWindow)), &badgesBadgesRects[kHeliumBadge], &badgesDestRects[kHeliumBadge], srcCopy, nil); } else { CopyBits((BitMap *)*GetGWorldPixMap(badgeSrcMap), GetPortBitMapForCopyBits(GetWindowPort(mainWindow)), &badgesBlankRects[kBatteryBadge], &badgesDestRects[kBatteryBadge], srcCopy, nil); } } //-------------------------------------------------------------- QuickBandsRefresh void QuickBandsRefresh (Boolean flash) { if ((bandsTotal > 0) && (!flash)) { CopyBits((BitMap *)*GetGWorldPixMap(badgeSrcMap), GetPortBitMapForCopyBits(GetWindowPort(mainWindow)), &badgesBadgesRects[kBandsBadge], &badgesDestRects[kBandsBadge], srcCopy, nil); } else { CopyBits((BitMap *)*GetGWorldPixMap(badgeSrcMap), GetPortBitMapForCopyBits(GetWindowPort(mainWindow)), &badgesBlankRects[kBandsBadge], &badgesDestRects[kBandsBadge], srcCopy, nil); } } //-------------------------------------------------------------- QuickFoilRefresh void QuickFoilRefresh (Boolean flash) { if ((foilTotal > 0) && (!flash)) { CopyBits((BitMap *)*GetGWorldPixMap(badgeSrcMap), GetPortBitMapForCopyBits(GetWindowPort(mainWindow)), &badgesBadgesRects[kFoilBadge], &badgesDestRects[kFoilBadge], srcCopy, nil); } else { CopyBits((BitMap *)*GetGWorldPixMap(badgeSrcMap), GetPortBitMapForCopyBits(GetWindowPort(mainWindow)), &badgesBlankRects[kFoilBadge], &badgesDestRects[kFoilBadge], srcCopy, nil); } } //-------------------------------------------------------------- AdjustScoreboardHeight void AdjustScoreboardHeight (void) { short offset, newMode; if (numNeighbors == 9) newMode = kScoreboardHigh; else newMode = kScoreboardLow; if (wasScoreboardMode != newMode) { switch (newMode) { case kScoreboardHigh: // 9 neighbors offset = localRoomsDest[kCentralRoom].top; offset = -offset; justRoomsRect = workSrcRect; break; case kScoreboardLow: // 1 or 3 neighbors offset = localRoomsDest[kCentralRoom].top; justRoomsRect = workSrcRect; justRoomsRect.top = localRoomsDest[kCentralRoom].top; justRoomsRect.bottom = localRoomsDest[kCentralRoom].bottom; break; } QOffsetRect(&boardDestRect, 0, offset); QOffsetRect(&boardGQDestRect, 0, offset); QOffsetRect(&boardPQDestRect, 0, offset); QOffsetRect(&badgesDestRects[kBatteryBadge], 0, offset); QOffsetRect(&badgesDestRects[kBandsBadge], 0, offset); QOffsetRect(&badgesDestRects[kFoilBadge], 0, offset); QOffsetRect(&badgesDestRects[kHeliumBadge], 0, offset); wasScoreboardMode = newMode; } } //-------------------------------------------------------------- BlackenScoreboard void BlackenScoreboard (void) { UpdateMenuBarWindow(); } \ No newline at end of file diff --git a/Sources/SelectHouse.c b/Sources/SelectHouse.c deleted file mode 100755 index e829e21..0000000 --- a/Sources/SelectHouse.c +++ /dev/null @@ -1 +0,0 @@ - //============================================================================ //---------------------------------------------------------------------------- // SelectHouse.c //---------------------------------------------------------------------------- //============================================================================ #include #include #include #include #include "DialogUtils.h" #include "Externs.h" #include "Environ.h" #include "House.h" #include "RectUtils.h" #define kLoadHouseDialogID 1000 #define kDispFiles 12 #define kLoadTitlePictItem 3 #define kLoadNameFirstItem 5 #define kLoadNameLastItem 16 #define kLoadIconFirstItem 17 #define kLoadIconLastItem 28 #define kScrollUpItem 29 #define kScrollDownItem 30 #define kLoadTitlePict1 1001 #define kLoadTitlePict8 1002 #define kDefaultHousePict1 1003 #define kDefaultHousePict8 1004 #define kGrayedOutUpArrow 1052 #define kGrayedOutDownArrow 1053 #define kMaxExtraHouses 8 void UpdateLoadDialog (DialogPtr); void PageUpHouses (DialogPtr); void PageDownHouses (DialogPtr); pascal Boolean LoadFilter (DialogPtr, EventRecord *, short *); void SortHouseList (void); void DoDirSearch (void); Rect loadHouseRects[12]; FSSpecPtr theHousesSpecs; FSSpec extraHouseSpecs[kMaxExtraHouses]; long lastWhenClick; Point lastWhereClick; short housesFound, thisHouseIndex, maxFiles, willMaxFiles; short housePage, demoHouseIndex, numExtraHouses; char fileFirstChar[12]; extern UInt32 doubleTime; //============================================================== Functions //-------------------------------------------------------------- UpdateLoadWindow #ifndef COMPILEDEMO void UpdateLoadDialog (DialogPtr theDialog) { Rect tempRect, dialogRect, dummyRect; short houseStart, houseStop, i, wasResFile, isResFile, count; // char wasState; WindowRef theWindow; // RgnHandle theRegion; theWindow = GetDialogWindow(theDialog); GetWindowBounds(theWindow, kWindowContentRgn, &dialogRect); /* wasState = HGetState((Handle)(((DialogPeek)theDialog)->window).port.visRgn); HLock((Handle)(((DialogPeek)theDialog)->window).port.visRgn); dialogRect = (**((((DialogPeek)theDialog)->window).port.visRgn)).rgnBBox; HSetState((Handle)(((DialogPeek)theDialog)->window).port.visRgn, wasState); */ DrawDialog(theDialog); ColorFrameWHRect(8, 39, 413, 184, kRedOrangeColor8); // box around files houseStart = housePage; houseStop = housesFound; if ((houseStop - houseStart) > kDispFiles) houseStop = houseStart + kDispFiles; wasResFile = CurResFile(); count = 0; for (i = 0; i < 12; i++) fileFirstChar[i] = 0x7F; for (i = houseStart; i < houseStop; i++) { SpinCursor(1); GetDialogItemRect(theDialog, kLoadIconFirstItem + i - housePage, &tempRect); if (SectRect(&dialogRect, &tempRect, &dummyRect)) { isResFile = HOpenResFile(theHousesSpecs[i].vRefNum, theHousesSpecs[i].parID, theHousesSpecs[i].name, fsRdPerm); if (isResFile != -1) { if (Get1Resource('icl8', -16455) != nil) { LargeIconPlot(&tempRect, -16455); } else LoadDialogPICT(theDialog, kLoadIconFirstItem + i - housePage, kDefaultHousePict8); CloseResFile(isResFile); } else LoadDialogPICT(theDialog, kLoadIconFirstItem + i - housePage, kDefaultHousePict8); } fileFirstChar[count] = theHousesSpecs[i].name[1]; if ((fileFirstChar[count] <= 0x7A) && (fileFirstChar[count] > 0x60)) fileFirstChar[count] -= 0x20; count++; DrawDialogUserText(theDialog, kLoadNameFirstItem + i - housePage, theHousesSpecs[i].name, i == (thisHouseIndex + housePage)); } InitCursor(); UseResFile(wasResFile); } #endif //-------------------------------------------------------------- PageUpHouses #ifndef COMPILEDEMO void PageUpHouses (DialogPtr theDial) { Rect tempRect; if (housePage < kDispFiles) { SysBeep(1); return; } housePage -= kDispFiles; thisHouseIndex = kDispFiles - 1; ShowDialogItem(theDial, kScrollDownItem); if (housePage < kDispFiles) { GetDialogItemRect(theDial, kScrollUpItem, &tempRect); HideDialogItem(theDial, kScrollUpItem); DrawCIcon(kGrayedOutUpArrow, tempRect.left, tempRect.top); } QSetRect(&tempRect, 8, 39, 421, 223); EraseRect(&tempRect); InvalWindowRect(GetDialogWindow(theDial), &tempRect); } #endif //-------------------------------------------------------------- PageDownHouses #ifndef COMPILEDEMO void PageDownHouses (DialogPtr theDial) { Rect tempRect; if (housePage >= (housesFound - kDispFiles)) { SysBeep(1); return; } housePage += kDispFiles; thisHouseIndex = 0; ShowDialogItem(theDial, kScrollUpItem); if (housePage >= (housesFound - kDispFiles)) { GetDialogItemRect(theDial, kScrollDownItem, &tempRect); HideDialogItem(theDial, kScrollDownItem); DrawCIcon(kGrayedOutDownArrow, tempRect.left, tempRect.top); } QSetRect(&tempRect, 8, 39, 421, 223); EraseRect(&tempRect); InvalWindowRect(GetDialogWindow(theDial), &tempRect); } #endif //-------------------------------------------------------------- LoadFilter #ifndef COMPILEDEMO pascal Boolean LoadFilter (DialogPtr dial, EventRecord *event, short *item) { short screenCount, i, wasIndex; char theChar; switch (event->what) { case keyDown: theChar = (event->message) & charCodeMask; switch (theChar) { case kReturnKeyASCII: case kEnterKeyASCII: FlashDialogButton(dial, kOkayButton); *item = kOkayButton; return(true); break; case kEscapeKeyASCII: FlashDialogButton(dial, kCancelButton); *item = kCancelButton; return(true); break; case kPageUpKeyASCII: *item = kScrollUpItem; return (true); break; case kPageDownKeyASCII: *item = kScrollDownItem; return (true); break; case kUpArrowKeyASCII: InvalWindowRect(GetDialogWindow(dial), &loadHouseRects[thisHouseIndex]); thisHouseIndex -= 4; if (thisHouseIndex < 0) { screenCount = housesFound - housePage; if (screenCount > kDispFiles) screenCount = kDispFiles; thisHouseIndex += 4; thisHouseIndex = (((screenCount - 1) / 4) * 4) + (thisHouseIndex % 4); if (thisHouseIndex >= screenCount) thisHouseIndex -= 4; } InvalWindowRect(GetDialogWindow(dial), &loadHouseRects[thisHouseIndex]); return(true); break; case kDownArrowKeyASCII: InvalWindowRect(GetDialogWindow(dial), &loadHouseRects[thisHouseIndex]); thisHouseIndex += 4; screenCount = housesFound - housePage; if (screenCount > kDispFiles) screenCount = kDispFiles; if (thisHouseIndex >= screenCount) thisHouseIndex %= 4; InvalWindowRect(GetDialogWindow(dial), &loadHouseRects[thisHouseIndex]); return(true); break; case kLeftArrowKeyASCII: InvalWindowRect(GetDialogWindow(dial), &loadHouseRects[thisHouseIndex]); thisHouseIndex--; if (thisHouseIndex < 0) { screenCount = housesFound - housePage; if (screenCount > kDispFiles) screenCount = kDispFiles; thisHouseIndex = screenCount - 1; } InvalWindowRect(GetDialogWindow(dial), &loadHouseRects[thisHouseIndex]); return(true); break; case kTabKeyASCII: case kRightArrowKeyASCII: InvalWindowRect(GetDialogWindow(dial), &loadHouseRects[thisHouseIndex]); thisHouseIndex++; screenCount = housesFound - housePage; if (screenCount > kDispFiles) screenCount = kDispFiles; if (thisHouseIndex >= screenCount) thisHouseIndex = 0; InvalWindowRect(GetDialogWindow(dial), &loadHouseRects[thisHouseIndex]); return(true); break; default: if (((theChar > 0x40) && (theChar <= 0x5A)) || ((theChar > 0x60) && (theChar <= 0x7A))) { if ((theChar > 0x60) && (theChar <= 0x7A)) theChar -= 0x20; wasIndex = thisHouseIndex; thisHouseIndex = -1; i = 0; do { if ((fileFirstChar[i] >= theChar) && (fileFirstChar[i] != 0x7F)) thisHouseIndex = i; i++; } while ((thisHouseIndex == -1) && (i < 12)); if (thisHouseIndex == -1) { screenCount = housesFound - housePage; if (screenCount > kDispFiles) screenCount = kDispFiles; thisHouseIndex = screenCount - 1; } if (wasIndex != thisHouseIndex) { InvalWindowRect(GetDialogWindow(dial), &loadHouseRects[wasIndex]); InvalWindowRect(GetDialogWindow(dial), &loadHouseRects[thisHouseIndex]); } return(true); } else return(false); } break; case mouseDown: lastWhenClick = event->when - lastWhenClick; SubPt(event->where, &lastWhereClick); return(false); break; case mouseUp: lastWhenClick = event->when; lastWhereClick = event->where; return(false); break; case updateEvt: BeginUpdate(GetDialogWindow(dial)); UpdateLoadDialog(dial); EndUpdate(GetDialogWindow(dial)); event->what = nullEvent; return(false); break; default: return(false); break; } } #endif //-------------------------------------------------------------- DoLoadHouse #ifndef COMPILEDEMO void DoLoadHouse (void) { Rect tempRect; DialogPtr theDial; short i, item, wasIndex, screenCount; Boolean leaving, whoCares; ModalFilterUPP loadFilterUPP; loadFilterUPP = NewModalFilterUPP(LoadFilter); BringUpDialog(&theDial, kLoadHouseDialogID); if (housesFound <= kDispFiles) { GetDialogItemRect(theDial, kScrollUpItem, &tempRect); HideDialogItem(theDial, kScrollUpItem); DrawCIcon(kGrayedOutUpArrow, tempRect.left, tempRect.top); GetDialogItemRect(theDial, kScrollDownItem, &tempRect); HideDialogItem(theDial, kScrollDownItem); DrawCIcon(kGrayedOutDownArrow, tempRect.left, tempRect.top); } else { if (thisHouseIndex < kDispFiles) { GetDialogItemRect(theDial, kScrollUpItem, &tempRect); HideDialogItem(theDial, kScrollUpItem); DrawCIcon(kGrayedOutUpArrow, tempRect.left, tempRect.top); } else if (thisHouseIndex > (housesFound - kDispFiles)) { GetDialogItemRect(theDial, kScrollDownItem, &tempRect); HideDialogItem(theDial, kScrollDownItem); DrawCIcon(kGrayedOutDownArrow, tempRect.left, tempRect.top); } } wasIndex = thisHouseIndex; housePage = (thisHouseIndex / kDispFiles) * kDispFiles; thisHouseIndex -= housePage; for (i = 0; i < 12; i++) { GetDialogItemRect(theDial, kLoadNameFirstItem + i, &loadHouseRects[i]); GetDialogItemRect(theDial, kLoadIconFirstItem + i, &tempRect); loadHouseRects[i].top = tempRect.top; loadHouseRects[i].bottom++; } leaving = false; while (!leaving) { ModalDialog(loadFilterUPP, &item); if (item == kOkayButton) { thisHouseIndex += housePage; if (thisHouseIndex != wasIndex) { whoCares = CloseHouse(); PasStringCopy(theHousesSpecs[thisHouseIndex].name, thisHouseName); if (OpenHouse()) whoCares = ReadHouse(); } leaving = true; } else if (item == kCancelButton) { thisHouseIndex = wasIndex; leaving = true; } else if ((item >= kLoadNameFirstItem) && (item <= kLoadNameLastItem)) { screenCount = housesFound - housePage; if (screenCount > kDispFiles) screenCount = kDispFiles; if ((item - kLoadNameFirstItem != thisHouseIndex) && (item - kLoadNameFirstItem < screenCount)) { InvalWindowRect(GetDialogWindow(theDial), &loadHouseRects[thisHouseIndex]); thisHouseIndex = item - kLoadNameFirstItem; InvalWindowRect(GetDialogWindow(theDial), &loadHouseRects[thisHouseIndex]); } if (lastWhereClick.h < 0) lastWhereClick.h = -lastWhereClick.h; if (lastWhereClick.v < 0) lastWhereClick.v = -lastWhereClick.v; if ((lastWhenClick < doubleTime) && (lastWhereClick.h < 5) && (lastWhereClick.v < 5)) { thisHouseIndex += housePage; if (thisHouseIndex != wasIndex) { MyDisableControl(theDial, kOkayButton); MyDisableControl(theDial, kCancelButton); whoCares = CloseHouse(); PasStringCopy(theHousesSpecs[thisHouseIndex].name, thisHouseName); if (OpenHouse()) whoCares = ReadHouse(); } leaving = true; } } else if ((item >= kLoadIconFirstItem) && (item <= kLoadIconLastItem)) { screenCount = housesFound - housePage; if (screenCount > kDispFiles) screenCount = kDispFiles; if ((item - kLoadIconFirstItem != thisHouseIndex) && (item - kLoadIconFirstItem < screenCount)) { InvalWindowRect(GetDialogWindow(theDial), &loadHouseRects[thisHouseIndex]); thisHouseIndex = item - kLoadIconFirstItem; InvalWindowRect(GetDialogWindow(theDial), &loadHouseRects[thisHouseIndex]); } if (lastWhereClick.h < 0) lastWhereClick.h = -lastWhereClick.h; if (lastWhereClick.v < 0) lastWhereClick.v = -lastWhereClick.v; if ((lastWhenClick < doubleTime) && (lastWhereClick.h < 5) && (lastWhereClick.v < 5)) { thisHouseIndex += housePage; if (thisHouseIndex != wasIndex) { MyDisableControl(theDial, kOkayButton); MyDisableControl(theDial, kCancelButton); whoCares = CloseHouse(); PasStringCopy(theHousesSpecs[thisHouseIndex].name, thisHouseName); if (OpenHouse()) whoCares = ReadHouse(); } leaving = true; } } else if (item == kScrollUpItem) { PageUpHouses(theDial); } else if (item == kScrollDownItem) { PageDownHouses(theDial); } } DisposeDialog(theDial); DisposeModalFilterUPP(loadFilterUPP); } #endif //-------------------------------------------------------------- SortHouseList void SortHouseList (void) { FSSpec tempSpec; short i, h, whosFirst; i = 0; // remove exact duplicate houses while (i < housesFound) { h = i + 1; while (h < housesFound) { if ((EqualString(theHousesSpecs[i].name, theHousesSpecs[h].name, true, true)) && (theHousesSpecs[i].vRefNum == theHousesSpecs[i].vRefNum) && (theHousesSpecs[i].parID == theHousesSpecs[i].parID)) { theHousesSpecs[h] = theHousesSpecs[housesFound - 1]; housesFound--; } h++; } i++; } for (i = 0; i < housesFound - 1; i++) { for (h = 0; h < (housesFound - i - 1); h++) { whosFirst = WhichStringFirst(theHousesSpecs[h].name, theHousesSpecs[h + 1].name); if (whosFirst == 1) { tempSpec = theHousesSpecs[h + 1]; theHousesSpecs[h + 1] = theHousesSpecs[h]; theHousesSpecs[h] = tempSpec; } } } } //-------------------------------------------------------------- DoDirSearch void DoDirSearch (void) { #define kMaxDirectories 32 CInfoPBRec theBlock; Str255 nameString; long theDirs[kMaxDirectories]; OSErr theErr, notherErr; short count, i, currentDir, numDirs; for (i = 0; i < kMaxDirectories; i++) theDirs[i] = 0L; currentDir = 0; theDirs[currentDir] = thisMac.dirID; numDirs = 1; theBlock.hFileInfo.ioCompletion = nil; theBlock.hFileInfo.ioVRefNum = thisMac.vRefNum; theBlock.hFileInfo.ioNamePtr = nameString; while ((currentDir < numDirs) && (currentDir < kMaxDirectories)) { count = 1; theErr = noErr; while (theErr == noErr) { SpinCursor(1); theBlock.hFileInfo.ioFDirIndex = count; theBlock.hFileInfo.ioDirID = theDirs[currentDir]; theErr = PBGetCatInfo(&theBlock, false); if (theErr == noErr) { if ((theBlock.hFileInfo.ioFlAttrib & 0x10) == 0x00) { if ((theBlock.hFileInfo.ioFlFndrInfo.fdType == 'gliH') && (theBlock.hFileInfo.ioFlFndrInfo.fdCreator == 'ozm5') && (housesFound < maxFiles)) { notherErr = FSMakeFSSpec(thisMac.vRefNum, theBlock.hFileInfo.ioFlParID, nameString, &theHousesSpecs[housesFound]); if (notherErr == noErr) housesFound++; } } else if ((theBlock.hFileInfo.ioFlAttrib & 0x10) == 0x10) { if (numDirs < kMaxDirectories) { theDirs[numDirs] = theBlock.hFileInfo.ioDirID; numDirs++; } } count++; } } currentDir++; } if (housesFound < 1) { thisHouseIndex = -1; YellowAlert(kYellowNoHouses, 0); } else { SortHouseList(); thisHouseIndex = 0; for (i = 0; i < housesFound; i++) { if (EqualString(theHousesSpecs[i].name, thisHouseName, false, true)) { thisHouseIndex = i; break; } } PasStringCopy(theHousesSpecs[thisHouseIndex].name, thisHouseName); demoHouseIndex = -1; for (i = 0; i < housesFound; i++) { if (EqualString(theHousesSpecs[i].name, "\pDemo House", false, true)) { demoHouseIndex = i; break; } } } } //-------------------------------------------------------------- BuildHouseList void BuildHouseList (void) { short i; if (thisMac.hasSystem7) { housesFound = 0; // zero the number of houses found for (i = 0; i < numExtraHouses; i++) // 1st, insert extra houses into list { theHousesSpecs[housesFound] = extraHouseSpecs[i]; housesFound++; } DoDirSearch(); // now, search folders for the rest } } //-------------------------------------------------------------- AddExtraHouse void AddExtraHouse (FSSpec *newHouse) { if (numExtraHouses >= kMaxExtraHouses) return; extraHouseSpecs[numExtraHouses] = *newHouse; numExtraHouses++; } \ No newline at end of file diff --git a/Sources/Settings.c b/Sources/Settings.c deleted file mode 100755 index aefbe11..0000000 --- a/Sources/Settings.c +++ /dev/null @@ -1 +0,0 @@ - //============================================================================ //---------------------------------------------------------------------------- // Settings.c //---------------------------------------------------------------------------- //============================================================================ #include #include #include "DialogUtils.h" #include "Externs.h" #include "Environ.h" #include "House.h" #define kMainPrefsDialID 1012 #define kDisplayPrefsDialID 1017 #define kSoundPrefsDialID 1018 #define kControlPrefsDialID 1023 #define kBrainsPrefsDialID 1024 #define kDisplayButton 3 #define kSoundButton 4 #define kControlsButton 5 #define kBrainsButton 6 #define kDisplay1Item 3 #define kDisplay3Item 4 #define kDisplay9Item 5 #define kDoColorFadeItem 9 #define kCurrentDepth 10 #define k256Depth 11 #define k16Depth 12 #define kDispDefault 15 #define kUseQDItem 16 #define kUseScreen2Item 17 #define kSofterItem 4 #define kLouderItem 5 #define kVolNumberItem 7 #define kIdleMusicItem 8 #define kPlayMusicItem 9 #define kSoundDefault 13 #define kRightControl 5 #define kLeftControl 6 #define kBattControl 7 #define kBandControl 8 #define kControlDefaults 13 #define kESCPausesRadio 14 #define kTABPausesRadio 15 #define kMaxFilesItem 5 #define kQuickTransitCheck 7 #define kDoZoomsCheck 8 #define kBrainsDefault 9 #define kDoDemoCheck 10 #define kDoBackgroundCheck 11 #define kDoErrorCheck 12 #define kDoPrettyMapCheck 13 #define kDoBitchDlgsCheck 14 void SetBrainsToDefaults (DialogPtr); void UpdateSettingsBrains (DialogPtr); pascal Boolean BrainsFilter (DialogPtr, EventRecord *, short *); void DoBrainsPrefs (void); void SetControlsToDefaults (DialogPtr); void UpdateControlKeyName (DialogPtr); void UpdateSettingsControl (DialogPtr); pascal Boolean ControlFilter (DialogPtr, EventRecord *, short *); void DoControlPrefs (void); void SoundDefaults (DialogPtr); void UpdateSettingsSound (DialogPtr); void HandleSoundMusicChange (short, Boolean); pascal Boolean SoundFilter (DialogPtr, EventRecord *, short *); void DoSoundPrefs (void); void DisplayDefaults (void); void FrameDisplayIcon (DialogPtr); void DisplayUpdate (DialogPtr); pascal Boolean DisplayFilter (DialogPtr, EventRecord *, short *); void DoDisplayPrefs (void); void SetAllDefaults (void); void FlashSettingsButton (short); void UpdateSettingsMain (DialogPtr); pascal Boolean PrefsFilter (DialogPtr, EventRecord *, short *); void BitchAboutChanges (void); Rect prefButton[4], controlRects[4]; Str15 leftName, rightName, batteryName, bandName; Str15 tempLeftStr, tempRightStr, tempBattStr, tempBandStr; long tempLeftMap, tempRightMap, tempBattMap, tempBandMap; short whichCtrl, wasDepthPref; Boolean wasFade, wasIdle, wasPlay, wasTransit, wasZooms, wasBackground; Boolean wasEscPauseKey, wasDemos, wasScreen2, nextRestartChange, wasErrorCheck; Boolean wasPrettyMap, wasBitchDialogs; extern short numNeighbors, isDepthPref, maxFiles, willMaxFiles; extern Boolean isDoColorFade, isPlayMusicIdle, isUseSecondScreen; extern Boolean isHouseChecks, doBitchDialogs; extern Boolean isEscPauseKey, failedMusic, isSoundOn, doBackground; extern Boolean isMusicOn, quickerTransitions, doAutoDemo; extern Boolean changeLockStateOfHouse, saveHouseLocked, doPrettyMap; //============================================================== Functions //-------------------------------------------------------------- SetBrainsToDefaults void SetBrainsToDefaults (DialogPtr theDialog) { SetDialogNumToStr(theDialog, kMaxFilesItem, 24L); #ifdef powerc wasTransit = false; #else wasTransit = true; #endif wasZooms = true; wasDemos = true; wasBackground = false; wasErrorCheck = true; wasPrettyMap = true; wasBitchDialogs = true; SetDialogItemValue(theDialog, kQuickTransitCheck, (short)wasTransit); SetDialogItemValue(theDialog, kDoZoomsCheck, (short)wasZooms); SetDialogItemValue(theDialog, kDoDemoCheck, (short)wasDemos); SetDialogItemValue(theDialog, kDoBackgroundCheck, (short)wasBackground); SetDialogItemValue(theDialog, kDoErrorCheck, (short)wasErrorCheck); SetDialogItemValue(theDialog, kDoPrettyMapCheck, (short)wasPrettyMap); SetDialogItemValue(theDialog, kDoBitchDlgsCheck, (short)wasBitchDialogs); } //-------------------------------------------------------------- UpdateSettingsBrains void UpdateSettingsBrains (DialogPtr theDialog) { DrawDialog(theDialog); DrawDefaultButton(theDialog); SetDialogNumToStr(theDialog, kMaxFilesItem, (long)willMaxFiles); SelectDialogItemText(theDialog, kMaxFilesItem, 0, 1024); FrameDialogItemC(theDialog, 3, kRedOrangeColor8); } //-------------------------------------------------------------- BrainsFilter pascal Boolean BrainsFilter (DialogPtr dial, EventRecord *event, short *item) { switch (event->what) { case keyDown: switch ((event->message) & charCodeMask) { case kReturnKeyASCII: case kEnterKeyASCII: FlashDialogButton(dial, kOkayButton); *item = kOkayButton; return(true); break; case kEscapeKeyASCII: FlashDialogButton(dial, kCancelButton); *item = kCancelButton; return(true); break; case kCapAKeyASCII: case kAKeyASCII: *item = kDoDemoCheck; return(true); break; case kCapBKeyASCII: case kBKeyASCII: *item = kDoBackgroundCheck; return(true); break; case kCapDKeyASCII: case kDKeyASCII: *item = kBrainsDefault; FlashDialogButton(dial, kBrainsDefault); return(true); break; case kCapEKeyASCII: case kEKeyASCII: *item = kDoErrorCheck; return(true); break; case kCapQKeyASCII: case kQKeyASCII: *item = kQuickTransitCheck; return(true); break; case kCapZKeyASCII: case kZKeyASCII: *item = kDoZoomsCheck; return(true); break; default: return(false); } break; case mouseDown: return(false); break; case updateEvt: SetPort((GrafPtr)dial); BeginUpdate(GetDialogWindow(dial)); UpdateSettingsBrains(dial); EndUpdate(GetDialogWindow(dial)); event->what = nullEvent; return(false); break; default: return(false); break; } } //-------------------------------------------------------------- DoBrainsPrefs void DoBrainsPrefs (void) { DialogPtr prefDlg; long tempLong; short itemHit, wasMaxFiles; Boolean leaving; ModalFilterUPP brainsFilterUPP; brainsFilterUPP = NewModalFilterUPP(BrainsFilter); BringUpDialog(&prefDlg, kBrainsPrefsDialID); leaving = false; wasMaxFiles = willMaxFiles; wasTransit = quickerTransitions; wasZooms = doZooms; wasDemos = doAutoDemo; wasBackground = doBackground; wasErrorCheck = isHouseChecks; wasPrettyMap = doPrettyMap; wasBitchDialogs = doBitchDialogs; SetDialogItemValue(prefDlg, kQuickTransitCheck, (short)wasTransit); SetDialogItemValue(prefDlg, kDoZoomsCheck, (short)wasZooms); SetDialogItemValue(prefDlg, kDoDemoCheck, (short)wasDemos); SetDialogItemValue(prefDlg, kDoBackgroundCheck, (short)wasBackground); SetDialogItemValue(prefDlg, kDoErrorCheck, (short)wasErrorCheck); SetDialogItemValue(prefDlg, kDoPrettyMapCheck, (short)wasPrettyMap); SetDialogItemValue(prefDlg, kDoBitchDlgsCheck, (short)wasBitchDialogs); while (!leaving) { ModalDialog(brainsFilterUPP, &itemHit); switch (itemHit) { case kOkayButton: GetDialogNumFromStr(prefDlg, kMaxFilesItem, &tempLong); if (tempLong > 500) tempLong = 500; else if (tempLong < 12) tempLong = 12; willMaxFiles = tempLong; if (willMaxFiles != wasMaxFiles) nextRestartChange = true; quickerTransitions = wasTransit; doZooms = wasZooms; doAutoDemo = wasDemos; doBackground = wasBackground; isHouseChecks = wasErrorCheck; doPrettyMap = wasPrettyMap; doBitchDialogs = wasBitchDialogs; leaving = true; break; case kCancelButton: willMaxFiles = wasMaxFiles; leaving = true; break; case kQuickTransitCheck: wasTransit = !wasTransit; SetDialogItemValue(prefDlg, kQuickTransitCheck, (short)wasTransit); break; case kDoZoomsCheck: wasZooms = !wasZooms; SetDialogItemValue(prefDlg, kDoZoomsCheck, (short)wasZooms); break; case kDoDemoCheck: wasDemos = !wasDemos; SetDialogItemValue(prefDlg, kDoDemoCheck, (short)wasDemos); break; case kDoBackgroundCheck: wasBackground = !wasBackground; SetDialogItemValue(prefDlg, kDoBackgroundCheck, (short)wasBackground); break; case kBrainsDefault: SetBrainsToDefaults(prefDlg); break; case kDoErrorCheck: wasErrorCheck = !wasErrorCheck; SetDialogItemValue(prefDlg, kDoErrorCheck, (short)wasErrorCheck); break; case kDoPrettyMapCheck: wasPrettyMap = !wasPrettyMap; SetDialogItemValue(prefDlg, kDoPrettyMapCheck, (short)wasPrettyMap); break; case kDoBitchDlgsCheck: wasBitchDialogs = !wasBitchDialogs; SetDialogItemValue(prefDlg, kDoBitchDlgsCheck, (short)wasBitchDialogs); break; } } DisposeDialog(prefDlg); DisposeModalFilterUPP(brainsFilterUPP); } //-------------------------------------------------------------- SetControlsToDefaults void SetControlsToDefaults (DialogPtr theDialog) { PasStringCopy("\plf arrow", tempLeftStr); PasStringCopy("\prt arrow", tempRightStr); PasStringCopy("\pdn arrow", tempBattStr); PasStringCopy("\pup arrow", tempBandStr); tempLeftMap = kLeftArrowKeyMap; tempRightMap = kRightArrowKeyMap; tempBattMap = kDownArrowKeyMap; tempBandMap = kUpArrowKeyMap; wasEscPauseKey = false; SelectFromRadioGroup(theDialog, kTABPausesRadio, kESCPausesRadio, kTABPausesRadio); } //-------------------------------------------------------------- UpdateControlKeyName void UpdateControlKeyName (DialogPtr theDialog) { DrawDialogUserText(theDialog, kRightControl + 4, tempRightStr, whichCtrl == 0); DrawDialogUserText(theDialog, kLeftControl + 4, tempLeftStr, whichCtrl == 1); DrawDialogUserText(theDialog, kBattControl + 4, tempBattStr, whichCtrl == 2); DrawDialogUserText(theDialog, kBandControl + 4, tempBandStr, whichCtrl == 3); } //-------------------------------------------------------------- UpdateSettingsControl void UpdateSettingsControl (DialogPtr theDialog) { short i; DrawDialog(theDialog); PenSize(2, 2); ForeColor(whiteColor); for (i = 0; i < 4; i++) FrameRect(&controlRects[i]); ForeColor(redColor); FrameRect(&controlRects[whichCtrl]); ForeColor(blackColor); PenNormal(); UpdateControlKeyName(theDialog); FrameDialogItemC(theDialog, 3, kRedOrangeColor8); } //-------------------------------------------------------------- ControlFilter pascal Boolean ControlFilter (DialogPtr dial, EventRecord *event, short *item) { long wasKeyMap; switch (event->what) { case keyDown: switch (whichCtrl) { case 0: wasKeyMap = (long)GetKeyMapFromMessage(event->message); if ((wasKeyMap == tempLeftMap) || (wasKeyMap == tempBattMap) || (wasKeyMap == tempBandMap) || (wasKeyMap == kTabKeyMap) || (wasKeyMap == kEscKeyMap) || (wasKeyMap == kDeleteKeyMap)) { if (wasKeyMap == kEscKeyMap) { FlashDialogButton(dial, kCancelButton); *item = kCancelButton; return(true); } else SysBeep(1); } else { GetKeyName(event->message, tempRightStr); tempRightMap = wasKeyMap; } break; case 1: wasKeyMap = (long)GetKeyMapFromMessage(event->message); if ((wasKeyMap == tempRightMap) || (wasKeyMap == tempBattMap) || (wasKeyMap == tempBandMap) || (wasKeyMap == kTabKeyMap) || (wasKeyMap == kEscKeyMap) || (wasKeyMap == kDeleteKeyMap)) { if (wasKeyMap == kEscKeyMap) { FlashDialogButton(dial, kCancelButton); *item = kCancelButton; return(true); } else SysBeep(1); } else { GetKeyName(event->message, tempLeftStr); tempLeftMap = wasKeyMap; } break; case 2: wasKeyMap = (long)GetKeyMapFromMessage(event->message); if ((wasKeyMap == tempRightMap) || (wasKeyMap == tempLeftMap) || (wasKeyMap == tempBandMap) || (wasKeyMap == kTabKeyMap) || (wasKeyMap == kEscKeyMap) || (wasKeyMap == kDeleteKeyMap)) { if (wasKeyMap == kEscKeyMap) { FlashDialogButton(dial, kCancelButton); *item = kCancelButton; return(true); } else SysBeep(1); } else { GetKeyName(event->message, tempBattStr); tempBattMap = wasKeyMap; } break; case 3: wasKeyMap = (long)GetKeyMapFromMessage(event->message); if ((wasKeyMap == tempRightMap) || (wasKeyMap == tempLeftMap) || (wasKeyMap == tempBattMap) || (wasKeyMap == kTabKeyMap) || (wasKeyMap == kEscKeyMap) || (wasKeyMap == kDeleteKeyMap)) { if (wasKeyMap == kEscKeyMap) { FlashDialogButton(dial, kCancelButton); *item = kCancelButton; return(true); } else SysBeep(1); } else { GetKeyName(event->message, tempBandStr); tempBandMap = wasKeyMap; } break; } UpdateControlKeyName(dial); return(false); break; case mouseDown: return(false); break; case updateEvt: SetPort((GrafPtr)dial); BeginUpdate(GetDialogWindow(dial)); UpdateSettingsControl(dial); EndUpdate(GetDialogWindow(dial)); event->what = nullEvent; return(false); break; default: return(false); break; } } //-------------------------------------------------------------- DoControlPrefs void DoControlPrefs (void) { DialogPtr prefDlg; short i, itemHit; Boolean leaving; ModalFilterUPP controlFilterUPP; controlFilterUPP = NewModalFilterUPP(ControlFilter); // CenterDialog(kControlPrefsDialID); prefDlg = GetNewDialog(kControlPrefsDialID, nil, kPutInFront); if (prefDlg == nil) RedAlert(kErrDialogDidntLoad); SetPort((GrafPtr)prefDlg); for (i = 0; i < 4; i++) { GetDialogItemRect(prefDlg, i + kRightControl, &controlRects[i]); InsetRect(&controlRects[i], -3, -3); } whichCtrl = 1; PasStringCopy(leftName, tempLeftStr); PasStringCopy(rightName, tempRightStr); PasStringCopy(batteryName, tempBattStr); PasStringCopy(bandName, tempBandStr); tempLeftMap = theGlider.leftKey; tempRightMap = theGlider.rightKey; tempBattMap = theGlider.battKey; tempBandMap = theGlider.bandKey; wasEscPauseKey = isEscPauseKey; leaving = false; ShowWindow(GetDialogWindow(prefDlg)); if (isEscPauseKey) SelectFromRadioGroup(prefDlg, kESCPausesRadio, kESCPausesRadio, kTABPausesRadio); else SelectFromRadioGroup(prefDlg, kTABPausesRadio, kESCPausesRadio, kTABPausesRadio); while (!leaving) { ModalDialog(controlFilterUPP, &itemHit); switch (itemHit) { case kOkayButton: PasStringCopy(tempLeftStr, leftName); PasStringCopy(tempRightStr, rightName); PasStringCopy(tempBattStr, batteryName); PasStringCopy(tempBandStr, bandName); theGlider.leftKey = tempLeftMap; theGlider.rightKey = tempRightMap; theGlider.battKey = tempBattMap; theGlider.bandKey = tempBandMap; isEscPauseKey = wasEscPauseKey; leaving = true; break; case kCancelButton: leaving = true; break; case kRightControl: case kLeftControl: case kBattControl: case kBandControl: PenSize(2, 2); ForeColor(whiteColor); FrameRect(&controlRects[whichCtrl]); whichCtrl = itemHit - kRightControl; ForeColor(redColor); FrameRect(&controlRects[whichCtrl]); ForeColor(blackColor); PenNormal(); UpdateControlKeyName(prefDlg); break; case kESCPausesRadio: case kTABPausesRadio: SelectFromRadioGroup(prefDlg, itemHit, kESCPausesRadio, kTABPausesRadio); wasEscPauseKey = !wasEscPauseKey; break; case kControlDefaults: SetControlsToDefaults(prefDlg); UpdateControlKeyName(prefDlg); break; } } DisposeDialog(prefDlg); DisposeModalFilterUPP(controlFilterUPP); } //-------------------------------------------------------------- SoundDefaults void SoundDefaults (DialogPtr theDialog) { wasIdle = true; wasPlay = true; SetDialogItemValue(theDialog, kIdleMusicItem, (short)wasIdle); SetDialogItemValue(theDialog, kPlayMusicItem, (short)wasPlay); UnivSetSoundVolume(3, thisMac.hasSM3); SetDialogNumToStr(theDialog, kVolNumberItem, 3L); HandleSoundMusicChange(3, true); } //-------------------------------------------------------------- UpdateSettingsSound void UpdateSettingsSound (DialogPtr theDialog) { short howLoudNow; DrawDialog(theDialog); DrawDefaultButton(theDialog); UnivGetSoundVolume(&howLoudNow, thisMac.hasSM3); if (howLoudNow >= 7) SetDialogNumToStr(theDialog, kVolNumberItem, 11L); else SetDialogNumToStr(theDialog, kVolNumberItem, (long)howLoudNow); FrameDialogItemC(theDialog, 11, kRedOrangeColor8); } //-------------------------------------------------------------- HandleSoundMusicChange void HandleSoundMusicChange (short newVolume, Boolean sayIt) { OSErr theErr; isSoundOn = (newVolume != 0); if (wasIdle) { if (newVolume == 0) StopTheMusic(); else { if (!isMusicOn) { theErr = StartMusic(); if (theErr != noErr) { YellowAlert(kYellowNoMusic, theErr); failedMusic = true; } } } } if ((newVolume != 0) && (sayIt)) PlayPrioritySound(kChord2Sound, kChord2Priority); } //-------------------------------------------------------------- SoundFilter pascal Boolean SoundFilter (DialogPtr dial, EventRecord *event, short *item) { short newVolume; switch (event->what) { case keyDown: switch ((event->message) & charCodeMask) { case kReturnKeyASCII: case kEnterKeyASCII: FlashDialogButton(dial, kOkayButton); *item = kOkayButton; return(true); break; case kEscapeKeyASCII: FlashDialogButton(dial, kCancelButton); *item = kCancelButton; return(true); break; case kUpArrowKeyASCII: *item = kLouderItem; return(true); break; case kDownArrowKeyASCII: *item = kSofterItem; return(true); break; case k0KeyASCII: case k1KeyASCII: case k2KeyASCII: case k3KeyASCII: case k4KeyASCII: case k5KeyASCII: case k6KeyASCII: case k7KeyASCII: newVolume = (((event->message) & charCodeMask) - k0KeyASCII); if (newVolume == 7L) SetDialogNumToStr(dial, kVolNumberItem, 11L); else SetDialogNumToStr(dial, kVolNumberItem, (long)newVolume); UnivSetSoundVolume(newVolume, thisMac.hasSM3); HandleSoundMusicChange(newVolume, true); return(false); break; case kCapDKeyASCII: case kDKeyASCII: *item = kSoundDefault; FlashDialogButton(dial, kSoundDefault); return(true); break; case kCapGKeyASCII: case kGKeyASCII: *item = kPlayMusicItem; return(true); break; case kCapIKeyASCII: case kIKeyASCII: *item = kIdleMusicItem; return(true); break; default: return(false); } break; case mouseDown: return(false); break; case updateEvt: SetPort((GrafPtr)dial); BeginUpdate(GetDialogWindow(dial)); UpdateSettingsSound(dial); EndUpdate(GetDialogWindow(dial)); event->what = nullEvent; return(false); break; default: return(false); break; } } //-------------------------------------------------------------- DoSettingsMain void DoSoundPrefs (void) { Rect tempRect; DialogPtr prefDlg; short wasLoudness, tempVolume; OSErr theErr; short itemHit; Boolean leaving; ModalFilterUPP soundFilterUPP; soundFilterUPP = NewModalFilterUPP(SoundFilter); BringUpDialog(&prefDlg, kSoundPrefsDialID); UnivGetSoundVolume(&wasLoudness, thisMac.hasSM3); wasIdle = isPlayMusicIdle; wasPlay = isPlayMusicGame; SetDialogItemValue(prefDlg, kIdleMusicItem, (short)wasIdle); SetDialogItemValue(prefDlg, kPlayMusicItem, (short)wasPlay); leaving = false; while (!leaving) { ModalDialog(soundFilterUPP, &itemHit); switch (itemHit) { case kOkayButton: isPlayMusicIdle = wasIdle; isPlayMusicGame = wasPlay; leaving = true; UnivGetSoundVolume(&tempVolume, thisMac.hasSM3); isSoundOn = (tempVolume != 0); break; case kCancelButton: UnivSetSoundVolume(wasLoudness, thisMac.hasSM3); HandleSoundMusicChange(wasLoudness, false); if (isPlayMusicIdle != wasIdle) { if (isPlayMusicIdle) { if (wasLoudness != 0) { theErr = StartMusic(); if (theErr != noErr) { YellowAlert(kYellowNoMusic, theErr); failedMusic = true; } } } else StopTheMusic(); } leaving = true; break; case kSofterItem: UnivGetSoundVolume(&tempVolume, thisMac.hasSM3); if (tempVolume > 0) { GetDialogItemRect(prefDlg, kSofterItem, &tempRect); DrawCIcon(1034, tempRect.left, tempRect.top); tempVolume--; SetDialogNumToStr(prefDlg, kVolNumberItem, (long)tempVolume); UnivSetSoundVolume(tempVolume, thisMac.hasSM3); HandleSoundMusicChange(tempVolume, true); InvalWindowRect(GetDialogWindow(prefDlg), &tempRect); DelayTicks(8); } break; case kLouderItem: UnivGetSoundVolume(&tempVolume, thisMac.hasSM3); if (tempVolume < 7) { GetDialogItemRect(prefDlg, kLouderItem, &tempRect); DrawCIcon(1033, tempRect.left, tempRect.top); tempVolume++; if (tempVolume == 7) SetDialogNumToStr(prefDlg, kVolNumberItem, 11L); else SetDialogNumToStr(prefDlg, kVolNumberItem, tempVolume); UnivSetSoundVolume(tempVolume, thisMac.hasSM3); HandleSoundMusicChange(tempVolume, true); InvalWindowRect(GetDialogWindow(prefDlg), &tempRect); DelayTicks(8); } break; case kIdleMusicItem: wasIdle = !wasIdle; SetDialogItemValue(prefDlg, kIdleMusicItem, (short)wasIdle); if (wasIdle) { UnivGetSoundVolume(&tempVolume, thisMac.hasSM3); if (tempVolume != 0) { theErr = StartMusic(); if (theErr != noErr) { YellowAlert(kYellowNoMusic, theErr); failedMusic = true; } } } else StopTheMusic(); break; case kPlayMusicItem: wasPlay = !wasPlay; SetDialogItemValue(prefDlg, kPlayMusicItem, (short)wasPlay); break; case kSoundDefault: SoundDefaults(prefDlg); break; } } DisposeDialog(prefDlg); DisposeModalFilterUPP(soundFilterUPP); } //-------------------------------------------------------------- DisplayDefaults void DisplayDefaults (void) { numNeighbors = 9; wasDepthPref = kSwitchIfNeeded; wasFade = true; wasScreen2 = false; } //-------------------------------------------------------------- FrameDisplayIcon void FrameDisplayIcon (DialogPtr theDialog) { Rect theRect; switch (numNeighbors) { case 1: GetDialogItemRect(theDialog, kDisplay1Item, &theRect); break; case 3: GetDialogItemRect(theDialog, kDisplay3Item, &theRect); break; default: GetDialogItemRect(theDialog, kDisplay9Item, &theRect); break; } theRect.left -= 3; theRect.top += 0; theRect.right += 3; theRect.bottom -= 1; FrameRect(&theRect); InsetRect(&theRect, 1, 1); FrameRect(&theRect); } //-------------------------------------------------------------- DisplayUpdate void DisplayUpdate (DialogPtr theDialog) { DrawDialog(theDialog); DrawDefaultButton(theDialog); SetDialogItemValue(theDialog, kDoColorFadeItem, (short)wasFade); SelectFromRadioGroup(theDialog, kCurrentDepth + wasDepthPref, kCurrentDepth, k16Depth); // SetDialogItemValue(theDialog, kUseQDItem, (short)wasQD); SetDialogItemValue(theDialog, kUseScreen2Item, (short)wasScreen2); ForeColor(redColor); FrameDisplayIcon(theDialog); ForeColor(blackColor); FrameDialogItemC(theDialog, 8, kRedOrangeColor8); FrameDialogItemC(theDialog, 13, kRedOrangeColor8); FrameDialogItemC(theDialog, 14, kRedOrangeColor8); } //-------------------------------------------------------------- DisplayFilter pascal Boolean DisplayFilter (DialogPtr dial, EventRecord *event, short *item) { switch (event->what) { case keyDown: switch ((event->message) & charCodeMask) { case kReturnKeyASCII: case kEnterKeyASCII: FlashDialogButton(dial, kOkayButton); *item = kOkayButton; return(true); break; case kEscapeKeyASCII: FlashDialogButton(dial, kCancelButton); *item = kCancelButton; return(true); break; case kLeftArrowKeyASCII: switch (numNeighbors) { case 1: *item = kDisplay9Item; break; case 3: *item = kDisplay1Item; break; case 9: *item = kDisplay3Item; break; } return(true); break; case kRightArrowKeyASCII: switch (numNeighbors) { case 1: *item = kDisplay3Item; break; case 3: *item = kDisplay9Item; break; case 9: *item = kDisplay1Item; break; } return(true); break; case kUpArrowKeyASCII: switch (wasDepthPref) { case kSwitchIfNeeded: *item = k16Depth; break; case kSwitchTo256Colors: *item = kCurrentDepth; break; case kSwitchTo16Grays: *item = k256Depth; break; } return(true); break; case kDownArrowKeyASCII: switch (wasDepthPref) { case kSwitchIfNeeded: *item = k256Depth; break; case kSwitchTo256Colors: *item = k16Depth; break; case kSwitchTo16Grays: *item = kCurrentDepth; break; } return(true); break; case k1KeyASCII: *item = kDisplay1Item; return(true); break; case k3KeyASCII: *item = kDisplay3Item; return(true); break; case k9KeyASCII: *item = kDisplay9Item; return(true); break; case kCapBKeyASCII: case kBKeyASCII: *item = kDoColorFadeItem; return(true); break; case kCapDKeyASCII: case kDKeyASCII: *item = kDispDefault; FlashDialogButton(dial, kDispDefault); return(true); break; case kCapRKeyASCII: case kRKeyASCII: *item = kUseScreen2Item; FlashDialogButton(dial, kUseQDItem); return(true); break; case kCapUKeyASCII: case kUKeyASCII: *item = kUseQDItem; return(true); break; default: return(false); } break; case mouseDown: return(false); break; case updateEvt: SetPort((GrafPtr)dial); BeginUpdate(GetDialogWindow(dial)); DisplayUpdate(dial); EndUpdate(GetDialogWindow(dial)); event->what = nullEvent; return(false); break; default: return(false); break; } } //-------------------------------------------------------------- DoDisplayPrefs void DoDisplayPrefs (void) { DialogPtr prefDlg; short itemHit, wasNeighbors; Boolean leaving; ModalFilterUPP displayFilterUPP; displayFilterUPP = NewModalFilterUPP(DisplayFilter); BringUpDialog(&prefDlg, kDisplayPrefsDialID); if (!thisMac.can8Bit) { MyDisableControl(prefDlg, kDoColorFadeItem); MyDisableControl(prefDlg, k256Depth); } if (!thisMac.can4Bit) MyDisableControl(prefDlg, k16Depth); if (thisMac.numScreens < 2) MyDisableControl(prefDlg, kUseScreen2Item); wasNeighbors = numNeighbors; wasFade = isDoColorFade; wasDepthPref = isDepthPref; wasScreen2 = isUseSecondScreen; leaving = false; while (!leaving) { ModalDialog(displayFilterUPP, &itemHit); switch (itemHit) { case kOkayButton: isDoColorFade = wasFade; isDepthPref = wasDepthPref; if (isUseSecondScreen != wasScreen2) nextRestartChange = true; isUseSecondScreen = wasScreen2; leaving = true; break; case kCancelButton: numNeighbors = wasNeighbors; leaving = true; break; case kDisplay1Item: ForeColor(whiteColor); FrameDisplayIcon(prefDlg); numNeighbors = 1; ForeColor(redColor); FrameDisplayIcon(prefDlg); ForeColor(blackColor); break; case kDisplay3Item: if (thisMac.screen.right > 512) { ForeColor(whiteColor); FrameDisplayIcon(prefDlg); numNeighbors = 3; ForeColor(redColor); FrameDisplayIcon(prefDlg); ForeColor(blackColor); } break; case kDisplay9Item: if (thisMac.screen.right > 512) { ForeColor(whiteColor); FrameDisplayIcon(prefDlg); numNeighbors = 9; ForeColor(redColor); FrameDisplayIcon(prefDlg); ForeColor(blackColor); } break; case kDoColorFadeItem: wasFade = !wasFade; SetDialogItemValue(prefDlg, kDoColorFadeItem, (short)wasFade); break; case kCurrentDepth: case k256Depth: case k16Depth: wasDepthPref = itemHit - kCurrentDepth; SelectFromRadioGroup(prefDlg, itemHit, kCurrentDepth, k16Depth); break; case kDispDefault: ForeColor(whiteColor); FrameDisplayIcon(prefDlg); ForeColor(blackColor); DisplayDefaults(); DisplayUpdate(prefDlg); break; case kUseQDItem: // wasQD = !wasQD; // SetDialogItemValue(prefDlg, kUseQDItem, (short)wasQD); break; case kUseScreen2Item: wasScreen2 = !wasScreen2; SetDialogItemValue(prefDlg, kUseScreen2Item, (short)wasScreen2); break; } } DisposeDialog(prefDlg); DisposeModalFilterUPP(displayFilterUPP); } //-------------------------------------------------------------- SetAllDefaults void SetAllDefaults (void) { OSErr theErr; // Default brain settings willMaxFiles = 48; doZooms = true; doAutoDemo = true; doBackground = false; isHouseChecks = true; doPrettyMap = true; doBitchDialogs = true; // Default control settings PasStringCopy("\plf arrow", leftName); PasStringCopy("\prt arrow", rightName); PasStringCopy("\pdn arrow", batteryName); PasStringCopy("\pup arrow", bandName); theGlider.leftKey = kLeftArrowKeyMap; theGlider.rightKey = kRightArrowKeyMap; theGlider.battKey = kDownArrowKeyMap; theGlider.bandKey = kUpArrowKeyMap; isEscPauseKey = false; // Default sound settings isPlayMusicIdle = true; isPlayMusicGame = true; UnivSetSoundVolume(3, thisMac.hasSM3); isSoundOn = true; if (!isMusicOn) { theErr = StartMusic(); if (theErr != noErr) { YellowAlert(kYellowNoMusic, theErr); failedMusic = true; } } // Default display settings numNeighbors = 9; quickerTransitions = false; isDepthPref = kSwitchIfNeeded; isDoColorFade = true; } //-------------------------------------------------------------- FlashSettingsButton void FlashSettingsButton (short who) { #define kNormalSettingsIcon 1010 #define kInvertedSettingsIcon 1014 short theID; theID = kInvertedSettingsIcon + who; DrawCIcon (theID, prefButton[who].left + 4, prefButton[who].top + 4); DelayTicks(8); theID = kNormalSettingsIcon + who; DrawCIcon (theID, prefButton[who].left + 4, prefButton[who].top + 4); } //-------------------------------------------------------------- UpdateSettingsMain void UpdateSettingsMain (DialogPtr theDialog) { Str255 theStr; DrawDialog(theDialog); DrawDefaultButton(theDialog); GetIndString(theStr, 129, 1); DrawDialogUserText(theDialog, 7, theStr, false); GetIndString(theStr, 129, 2); DrawDialogUserText(theDialog, 8, theStr, false); GetIndString(theStr, 129, 3); DrawDialogUserText(theDialog, 9, theStr, false); GetIndString(theStr, 129, 4); DrawDialogUserText(theDialog, 10, theStr, false); ColorFrameRect(&prefButton[0], kRedOrangeColor8); ColorFrameRect(&prefButton[1], kRedOrangeColor8); ColorFrameRect(&prefButton[2], kRedOrangeColor8); ColorFrameRect(&prefButton[3], kRedOrangeColor8); } //-------------------------------------------------------------- PrefsFilter pascal Boolean PrefsFilter (DialogPtr dial, EventRecord *event, short *item) { Point testPt; short i; Boolean foundHit; switch (event->what) { case keyDown: switch ((event->message) & charCodeMask) { case kReturnKeyASCII: case kEnterKeyASCII: FlashDialogButton(dial, kOkayButton); *item = kOkayButton; return(true); break; case kCapBKeyASCII: case kBKeyASCII: *item = kBrainsButton; return(true); break; case kCapCKeyASCII: case kCKeyASCII: *item = kControlsButton; return(true); break; case kCapDKeyASCII: case kDKeyASCII: *item = kDisplayButton; return(true); break; case kCapSKeyASCII: case kSKeyASCII: *item = kSoundButton; return(true); break; default: return(false); } break; case mouseDown: testPt = event->where; GlobalToLocal(&testPt); foundHit = false; for (i = 0; i < 4; i++) { if (PtInRect(testPt, &prefButton[i])) { *item = kDisplayButton + i; foundHit = true; } } return(foundHit); break; case updateEvt: if ((WindowPtr)event->message == (WindowPtr)mainWindow) { SetPortWindowPort(mainWindow); BeginUpdate(mainWindow); UpdateMainWindow(); EndUpdate(mainWindow); SetPort((GrafPtr)dial); } else if ((WindowPtr)event->message == GetDialogWindow(dial)) { SetPortDialogPort(dial); BeginUpdate(GetDialogWindow(dial)); UpdateSettingsMain(dial); EndUpdate(GetDialogWindow(dial)); } event->what = nullEvent; return(false); break; default: return(false); break; } } //-------------------------------------------------------------- DoSettingsMain void DoSettingsMain (void) { #define kAllDefaultsButton 11 DialogPtr prefDlg; short itemHit; Boolean leaving; ModalFilterUPP prefsFilterUPP; prefsFilterUPP = NewModalFilterUPP(PrefsFilter); BringUpDialog(&prefDlg, kMainPrefsDialID); GetDialogItemRect(prefDlg, kDisplayButton, &prefButton[0]); InsetRect(&prefButton[0], -4, -4); GetDialogItemRect(prefDlg, 4, &prefButton[1]); InsetRect(&prefButton[1], -4, -4); GetDialogItemRect(prefDlg, 5, &prefButton[2]); InsetRect(&prefButton[2], -4, -4); GetDialogItemRect(prefDlg, 6, &prefButton[3]); InsetRect(&prefButton[3], -4, -4); leaving = false; nextRestartChange = false; while (!leaving) { ModalDialog(prefsFilterUPP, &itemHit); switch (itemHit) { case kOkayButton: leaving = true; break; case kDisplayButton: FlashSettingsButton(0); DoDisplayPrefs(); SetPort((GrafPtr)prefDlg); break; case kSoundButton: FlashSettingsButton(1); DoSoundPrefs(); SetPort((GrafPtr)prefDlg); FlushEvents(everyEvent, 0); break; case kControlsButton: FlashSettingsButton(2); DoControlPrefs(); SetPort((GrafPtr)prefDlg); break; case kBrainsButton: if ((OptionKeyDown()) && (!houseUnlocked)) { houseUnlocked = true; changeLockStateOfHouse = true; saveHouseLocked = false; } FlashSettingsButton(3); DoBrainsPrefs(); SetPort((GrafPtr)prefDlg); break; case kAllDefaultsButton: SetAllDefaults(); break; } } DisposeDialog(prefDlg); DisposeModalFilterUPP(prefsFilterUPP); if (nextRestartChange) BitchAboutChanges(); } //-------------------------------------------------------------- BitchAboutChanges void BitchAboutChanges (void) { #define kChangesEffectAlert 1040 short hitWhat; // CenterAlert(kChangesEffectAlert); hitWhat = Alert(kChangesEffectAlert, nil); } \ No newline at end of file diff --git a/Sources/Sound.c b/Sources/Sound.c deleted file mode 100755 index 6861749..0000000 --- a/Sources/Sound.c +++ /dev/null @@ -1 +0,0 @@ - //============================================================================ //---------------------------------------------------------------------------- // Sound.c //---------------------------------------------------------------------------- //============================================================================ #include #include #include "Externs.h" #define kBaseBufferSoundID 1000 #define kMaxSounds 64 #define kNoSoundPlaying -1 pascal void CallBack0 (SndChannelPtr, SndCommand *); pascal void CallBack1 (SndChannelPtr, SndCommand *); pascal void CallBack2 (SndChannelPtr, SndCommand *); OSErr LoadBufferSounds (void); void DumpBufferSounds (void); OSErr OpenSoundChannels (void); OSErr CloseSoundChannels (void); SndCallBackUPP callBack0UPP, callBack1UPP, callBack2UPP; SndChannelPtr channel0, channel1, channel2; Ptr theSoundData[kMaxSounds]; short numSoundsLoaded, priority0, priority1, priority2; short soundPlaying0, soundPlaying1, soundPlaying2; Boolean soundLoaded[kMaxSounds], dontLoadSounds; Boolean channelOpen, isSoundOn, failedSound; //============================================================== Functions //-------------------------------------------------------------- PlayPrioritySound void PlayPrioritySound (short which, short priority) { short lowestPriority, whosLowest; if (failedSound || dontLoadSounds) return; if ((priority == kTriggerPriority) && ((priority0 == kTriggerPriority) || ((priority1 == kTriggerPriority)) || ((priority2 == kTriggerPriority)))) return; whosLowest = 0; lowestPriority = priority0; if (priority1 < lowestPriority) { lowestPriority = priority1; whosLowest = 1; } if (priority2 < lowestPriority) { lowestPriority = priority2; whosLowest = 2; } if (priority >= lowestPriority) { switch (whosLowest) { case 0: PlaySound0(which, priority); break; case 1: PlaySound1(which, priority); break; case 2: PlaySound2(which, priority); break; } } } //-------------------------------------------------------------- FlushAnyTriggerPlaying void FlushAnyTriggerPlaying (void) { SndCommand theCommand; OSErr theErr; if (priority0 == kTriggerPriority) { theCommand.cmd = quietCmd; theCommand.param1 = 0; theCommand.param2 = 0; theErr = SndDoImmediate(channel0, &theCommand); theCommand.cmd = flushCmd; theCommand.param1 = 0; theCommand.param2 = 0; theErr = SndDoImmediate(channel0, &theCommand); } if (priority1 == kTriggerPriority) { theCommand.cmd = quietCmd; theCommand.param1 = 0; theCommand.param2 = 0; theErr = SndDoImmediate(channel1, &theCommand); theCommand.cmd = flushCmd; theCommand.param1 = 0; theCommand.param2 = 0; theErr = SndDoImmediate(channel1, &theCommand); } if (priority2 == kTriggerPriority) { theCommand.cmd = quietCmd; theCommand.param1 = 0; theCommand.param2 = 0; theErr = SndDoImmediate(channel2, &theCommand); theCommand.cmd = flushCmd; theCommand.param1 = 0; theCommand.param2 = 0; theErr = SndDoImmediate(channel2, &theCommand); } } //-------------------------------------------------------------- PlaySound0 void PlaySound0 (short soundID, short priority) { SndCommand theCommand; OSErr theErr; if (failedSound || dontLoadSounds) return; theErr = noErr; if (isSoundOn) { priority0 = priority; soundPlaying0 = soundID; theCommand.cmd = bufferCmd; theCommand.param1 = 0; theCommand.param2 = (long)(theSoundData[soundID]); theErr = SndDoImmediate(channel0, &theCommand); theCommand.cmd = callBackCmd; theCommand.param1 = 0; theCommand.param2 = SetCurrentA5(); theErr = SndDoCommand(channel0, &theCommand, true); } } //-------------------------------------------------------------- PlaySound1 void PlaySound1 (short soundID, short priority) { SndCommand theCommand; OSErr theErr; if (failedSound || dontLoadSounds) return; theErr = noErr; if (isSoundOn) { priority1 = priority; soundPlaying1 = soundID; theCommand.cmd = bufferCmd; theCommand.param1 = 0; theCommand.param2 = (long)(theSoundData[soundID]); theErr = SndDoImmediate(channel1, &theCommand); theCommand.cmd = callBackCmd; theCommand.param1 = 0; theCommand.param2 = SetCurrentA5(); theErr = SndDoCommand(channel1, &theCommand, true); } } //-------------------------------------------------------------- PlaySound2 void PlaySound2 (short soundID, short priority) { SndCommand theCommand; OSErr theErr; if (failedSound || dontLoadSounds) return; theErr = noErr; if (isSoundOn) { theCommand.cmd = bufferCmd; theCommand.param1 = 0; theCommand.param2 = (long)(theSoundData[soundID]); theErr = SndDoImmediate(channel2, &theCommand); theCommand.cmd = callBackCmd; theCommand.param1 = 0; theCommand.param2 = SetCurrentA5(); theErr = SndDoCommand(channel2, &theCommand, true); priority2 = priority; soundPlaying2 = soundID; } } //-------------------------------------------------------------- CallBack0 pascal void CallBack0 (SndChannelPtr theChannel, SndCommand *theCommand) { #pragma unused (theChannel) long thisA5, gameA5; gameA5 = theCommand->param2; thisA5 = SetA5(gameA5); priority0 = 0; soundPlaying0 = kNoSoundPlaying; thisA5 = SetA5(thisA5); } //-------------------------------------------------------------- CallBack1 pascal void CallBack1 (SndChannelPtr theChannel, SndCommand *theCommand) { #pragma unused (theChannel) long thisA5, gameA5; gameA5 = theCommand->param2; thisA5 = SetA5(gameA5); priority1 = 0; soundPlaying1 = kNoSoundPlaying; thisA5 = SetA5(thisA5); } //-------------------------------------------------------------- CallBack2 pascal void CallBack2 (SndChannelPtr theChannel, SndCommand *theCommand) { #pragma unused (theChannel) long thisA5, gameA5; gameA5 = theCommand->param2; thisA5 = SetA5(gameA5); priority2 = 0; soundPlaying2 = kNoSoundPlaying; thisA5 = SetA5(thisA5); } //-------------------------------------------------------------- LoadTriggerSound OSErr LoadTriggerSound (short soundID) { Handle theSound; long soundDataSize; OSErr theErr; if ((dontLoadSounds) || (theSoundData[kMaxSounds - 1] != nil)) theErr = -1; else { // FlushAnyTriggerPlaying(); theErr = noErr; theSound = GetResource('snd ', soundID); if (theSound == nil) { theErr = -1; } else { soundDataSize = GetHandleSize(theSound) - 20L; theSoundData[kMaxSounds - 1] = NewPtr(soundDataSize); HLock(theSound); if (theSoundData[kMaxSounds - 1] == nil) { ReleaseResource(theSound); theErr = MemError(); } else { BlockMove((Ptr)(*theSound + 20L), theSoundData[kMaxSounds - 1], soundDataSize); ReleaseResource(theSound); } } } return (theErr); } //-------------------------------------------------------------- DumpTriggerSound void DumpTriggerSound (void) { if (theSoundData[kMaxSounds - 1] != nil) DisposePtr(theSoundData[kMaxSounds - 1]); theSoundData[kMaxSounds - 1] = nil; } //-------------------------------------------------------------- LoadBufferSounds OSErr LoadBufferSounds (void) { Handle theSound; long soundDataSize; OSErr theErr; short i; theErr = noErr; for (i = 0; i < kMaxSounds - 1; i++) { theSound = GetResource('snd ', i + kBaseBufferSoundID); if (theSound == nil) return (MemError()); HLock(theSound); soundDataSize = GetHandleSize(theSound) - 20L; HUnlock(theSound); theSoundData[i] = NewPtr(soundDataSize); if (theSoundData[i] == nil) return (MemError()); HLock(theSound); BlockMove((Ptr)(*theSound + 20L), theSoundData[i], soundDataSize); ReleaseResource(theSound); } theSoundData[kMaxSounds - 1] = nil; return (theErr); } //-------------------------------------------------------------- DumpBufferSounds void DumpBufferSounds (void) { short i; for (i = 0; i < kMaxSounds; i++) { if (theSoundData[i] != nil) DisposePtr(theSoundData[i]); theSoundData[i] = nil; } } //-------------------------------------------------------------- OpenSoundChannels OSErr OpenSoundChannels (void) { OSErr theErr; callBack0UPP = NewSndCallBackProc(CallBack0); callBack1UPP = NewSndCallBackProc(CallBack1); callBack2UPP = NewSndCallBackProc(CallBack2); theErr = noErr; if (channelOpen) return (theErr); theErr = SndNewChannel(&channel0, sampledSynth, initNoInterp + initMono, (SndCallBackUPP)callBack0UPP); if (theErr == noErr) channelOpen = true; else return (theErr); theErr = SndNewChannel(&channel1, sampledSynth, initNoInterp + initMono, (SndCallBackUPP)callBack1UPP); if (theErr == noErr) channelOpen = true; else return (theErr); theErr = SndNewChannel(&channel2, sampledSynth, initNoInterp + initMono, (SndCallBackUPP)callBack2UPP); if (theErr == noErr) channelOpen = true; return (theErr); } //-------------------------------------------------------------- CloseSoundChannels OSErr CloseSoundChannels (void) { OSErr theErr; theErr = noErr; if (!channelOpen) return (theErr); if (channel0 != nil) theErr = SndDisposeChannel(channel0, true); channel0 = nil; if (channel1 != nil) theErr = SndDisposeChannel(channel1, true); channel1 = nil; if (channel2 != nil) theErr = SndDisposeChannel(channel2, true); channel2 = nil; if (theErr == noErr) channelOpen = false; DisposeSndCallBackUPP(callBack0UPP); DisposeSndCallBackUPP(callBack1UPP); DisposeSndCallBackUPP(callBack2UPP); return (theErr); } //-------------------------------------------------------------- InitSound void InitSound (void) { OSErr theErr; if (dontLoadSounds) return; failedSound = false; channel0 = nil; channel1 = nil; channel2 = nil; priority0 = 0; priority1 = 0; priority2 = 0; soundPlaying0 = kNoSoundPlaying; soundPlaying1 = kNoSoundPlaying; soundPlaying2 = kNoSoundPlaying; theErr = LoadBufferSounds(); if (theErr != noErr) { YellowAlert(kYellowFailedSound, theErr); failedSound = true; } if (!failedSound) { theErr = OpenSoundChannels(); if (theErr != noErr) { YellowAlert(kYellowFailedSound, theErr); failedSound = true; } } } //-------------------------------------------------------------- KillSound void KillSound (void) { OSErr theErr; if (dontLoadSounds) return; DumpBufferSounds(); theErr = CloseSoundChannels(); } //-------------------------------------------------------------- SoundBytesNeeded long SoundBytesNeeded (void) { Handle theSound; long totalBytes; short i; totalBytes = 0L; SetResLoad(false); for (i = 0; i < kMaxSounds - 1; i++) { theSound = GetResource('snd ', i + kBaseBufferSoundID); if (theSound == nil) { SetResLoad(true); return ((long)ResError()); } totalBytes += GetMaxResourceSize(theSound); // ReleaseResource(theSound); } SetResLoad(true); return totalBytes; } //-------------------------------------------------------------- TellHerNoSounds void TellHerNoSounds (void) { #define kNoMemForSoundsAlert 1039 short hitWhat; // CenterAlert(kNoMemForSoundsAlert); hitWhat = Alert(kNoMemForSoundsAlert, nil); } //-------------------------------------------------------------- BitchAboutSM3 void BitchAboutSM3 (void) { #define kNoSoundManager3Alert 1030 short hitWhat; // CenterAlert(kNoSoundManager3Alert); hitWhat = Alert(kNoSoundManager3Alert, nil); } \ No newline at end of file diff --git a/Sources/StringUtils.c b/Sources/StringUtils.c deleted file mode 100755 index 9f317f2..0000000 --- a/Sources/StringUtils.c +++ /dev/null @@ -1 +0,0 @@ - //============================================================================ //---------------------------------------------------------------------------- // StringUtils.c //---------------------------------------------------------------------------- //============================================================================ #include #include "Externs.h" //============================================================== Functions //-------------------------------------------------------------- PasStringCopy // Given a source string and storage for a second, this functionÉ // copies from one to the other. It assumes Pascal style strings. void PasStringCopy (StringPtr p1, StringPtr p2) { register short stringLength; stringLength = *p2++ = *p1++; while (--stringLength >= 0) *p2++ = *p1++; } //-------------------------------------------------------------- WhichStringFirst // This is a sorting function that handles two Pascal strings. ItÉ // will return a 1 to indicate the 1st string is "greater", a 1 toÉ // indicate the 2nd was greater and a 0 to indicate that the stringsÉ // are equal. short WhichStringFirst (StringPtr p1, StringPtr p2) { short smallestLength, seek, greater; char char1, char2; Boolean foundIt; smallestLength = p1[0]; if (p2[0] < smallestLength) smallestLength = p2[0]; greater = 0; // neither are greater, they are equal seek = 1; // start at character #1 foundIt = false; do { char1 = p1[seek]; // make upper case (if applicable) if ((char1 > 0x60) && (char1 < 0x7B)) char1 -= 0x20; char2 = p2[seek]; // make upper case (if applicable) if ((char2 > 0x60) && (char2 < 0x7B)) char2 -= 0x20; if (char1 > char2) // first string is greater { greater = 1; foundIt = true; } else if (char1 < char2) // second string is greater { greater = 2; foundIt = true; } seek++; if (seek > smallestLength) // we've reached the end of the line { if (!foundIt) { if (p1[0] < p2[0]) // shortest string wins greater = 1; else if (p1[0] > p2[0]) greater = 2; } foundIt = true; } } while (!foundIt); return (greater); } //-------------------------------------------------------------- PasStringCopyNum // This function copies a specified number of characters from oneÉ // Pascal string to another. void PasStringCopyNum (StringPtr p1, StringPtr p2, short charsToCopy) { short i; if (charsToCopy > *p1) // if trying to copy more chars than there are charsToCopy = *p1; // reduce the number of chars to copy to this size *p2 = charsToCopy; *p2++; *p1++; for (i = 0; i < charsToCopy; i++) *p2++ = *p1++; } //-------------------------------------------------------------- PasStringConcat // This function concatenates the second Pascal string to the end ofÉ // the first Pascal string. void PasStringConcat (StringPtr p1, StringPtr p2) { short wasLength, addedLength, i; wasLength = *p1; if (wasLength > 255) wasLength = 255; addedLength = *p2; if ((wasLength + addedLength) > 255) addedLength = 255 - wasLength; *p1 = wasLength + addedLength; *p1++; *p2++; for (i = 0; i < wasLength; i++) *p1++; for (i = 0; i < addedLength; i++) *p1++ = *p2++; } //-------------------------------------------------------------- GetLineOfText // This function walks through a source string and looks for anÉ // entire line of text. A "line" of text is assumed to be boundedÉ // by carriage returns. The index variable indicates which lineÉ // is sought. void GetLineOfText (StringPtr srcStr, short index, StringPtr textLine) { short i, srcLength, count, start, stop; Boolean foundIt; PasStringCopy("\p", textLine); srcLength = srcStr[0]; if (index == 0) // walk through to "index" start = 1; else { start = 0; count = 0; i = 0; foundIt = false; do { i++; if (srcStr[i] == kReturnKeyASCII) { count++; if (count == index) { start = i + 1; foundIt = true; } } } while ((i < srcLength) && (!foundIt)); } if (start != 0) { i = start; foundIt = false; do { if (srcStr[i] == kReturnKeyASCII) { stop = i; foundIt = true; } i++; } while ((i < srcLength) && (!foundIt)); if (!foundIt) { if (start > srcLength) { start = srcLength; stop = srcLength - 1; } else stop = i; } count = 0; for (i = start; i <= stop; i++) { count++; textLine[count] = srcStr[i]; } textLine[0] = count; } } //-------------------------------------------------------------- WrapText // Given a string and the maximum number of characters to put onÉ // one line, this function goes through and inserts carriage returnsÉ // in order to ensure that no line of text exceeds maxChars. void WrapText (StringPtr theText, short maxChars) { short lastChar, count, chars, spaceIs; Boolean foundEdge, foundSpace; lastChar = theText[0]; count = 0; do { chars = 0; foundEdge = false; foundSpace = false; do { count++; chars++; if (theText[count] == kReturnKeyASCII) foundEdge = true; else if (theText[count] == kSpaceBarASCII) { foundSpace = true; spaceIs = count; } } while ((count < lastChar) && (chars < maxChars) && (!foundEdge)); if ((!foundEdge) && (count < lastChar) && (foundSpace)) { theText[spaceIs] = kReturnKeyASCII; count = spaceIs + 1; } } while (count < lastChar); } //-------------------------------------------------------------- GetFirstWordOfString // Walks a string looking for a space (denoting first word of string). void GetFirstWordOfString (StringPtr stringIn, StringPtr stringOut) { short isLong, spaceAt, i; isLong = stringIn[0]; spaceAt = isLong; for (i = 1; i < isLong; i++) { if ((stringIn[i] == ' ') && (spaceAt == isLong)) spaceAt = i - 1; } if (spaceAt <= 0) PasStringCopy("\p", stringOut); else PasStringCopyNum(stringIn, stringOut, spaceAt); } //-------------------------------------------------------------- CollapseStringToWidth // Given a string and a maximum width (in pixels), this functionÉ // calculates how wide the text would be drawn with the currentÉ // font. If the text would exceed our width limit, charactersÉ // are dropped off the end of the string and "É" appended. void CollapseStringToWidth (StringPtr theStr, short wide) { short dotsWide; Boolean tooWide; dotsWide = StringWidth("\pÉ"); tooWide = StringWidth(theStr) > wide; while (tooWide) { theStr[0]--; tooWide = ((StringWidth(theStr) + dotsWide) > wide); if (!tooWide) PasStringConcat(theStr, "\pÉ"); } } //-------------------------------------------------------------- GetChooserName // This function extracts the user name stored away by the Chooser. void GetChooserName (StringPtr thisName) { #define kChooserStringID -16096 Handle theNameHandle; Byte oldState; theNameHandle = (Handle)GetString(kChooserStringID); if (theNameHandle != nil) { oldState = HGetState(theNameHandle); HLock(theNameHandle); PasStringCopy((StringPtr)*theNameHandle, thisName); HSetState(theNameHandle, oldState); } else thisName[0] = 0; } //-------------------------------------------------------------- GetLocalizedString StringPtr GetLocalizedString (short index, StringPtr theString) { #define kLocalizedStringsID 150 GetIndString(theString, kLocalizedStringsID, index); return (theString); } \ No newline at end of file diff --git a/Sources/StructuresInit.c b/Sources/StructuresInit.c deleted file mode 100755 index 9153acf..0000000 --- a/Sources/StructuresInit.c +++ /dev/null @@ -1 +0,0 @@ -//============================================================================ //---------------------------------------------------------------------------- // StructuresInit.c //---------------------------------------------------------------------------- //============================================================================ #include #include "Externs.h" #include "Objects.h" #include "Play.h" #include "Player.h" #include "RectUtils.h" #include "RubberBands.h" #include "Scoreboard.h" #include "Utilities.h" #define kShadowPictID 3998 #define kBlowerPictID 4000 #define kFurniturePictID 4001 #define kBonusPictID 4002 #define kSwitchPictID 4003 #define kLightPictID 4004 #define kAppliancePictID 4005 #define kPointsPictID 4006 #define kRubberBandsPictID 4007 #define kTransportPictID 4008 #define kToastPictID 4009 #define kShreddedPictID 4010 #define kBalloonPictID 4011 #define kCopterPictID 4012 #define kDartPictID 4013 #define kBallPictID 4014 #define kDripPictID 4015 #define kEnemyPictID 4016 #define kFishPictID 4017 #define kBadgePictID 1996 extern Rect glidSrcRect, leftStartGliderSrc, rightStartGliderSrc; extern Rect gliderSrc[], shadowSrcRect, shadowSrc[]; extern Rect bandsSrcRect, bandRects[], boardSrcRect, boardDestRect; extern Rect boardTSrcRect, boardTDestRect, badgeSrcRect; extern Rect boardGSrcRect, boardGDestRect, boardPSrcRect, boardPDestRect; extern Rect boardPQDestRect, boardGQDestRect, badgesBlankRects[]; extern Rect badgesBadgesRects[], badgesDestRects[]; extern Rect nailSrcRect, sparkleSrc[]; extern Rect pointsSrc[], breadSrc[]; extern short wasScoreboardMode; //============================================================== Functions //-------------------------------------------------------------- InitScoreboardMap // Any graphics and structures relating to the scoreboard that appearsÉ // across the top of the game are initialized and loaded up here. void InitScoreboardMap (void) { Rect bounds; PicHandle thePicture; CGrafPtr wasCPort; GDHandle wasWorld; OSErr theErr; short hOffset; GetGWorld(&wasCPort, &wasWorld); wasScoreboardMode = kScoreboardHigh; boardSrcRect = houseRect; ZeroRectCorner(&boardSrcRect); boardSrcRect.bottom = kScoreboardTall; theErr = CreateOffScreenGWorld(&boardSrcMap, &boardSrcRect, kPreferredDepth); SetGWorld(boardSrcMap, nil); if (boardSrcRect.right >= 640) hOffset = (RectWide(&boardSrcRect) - kMaxViewWidth) / 2; else hOffset = -576; thePicture = GetPicture(kScoreboardPictID); if (thePicture == nil) RedAlert(kErrFailedGraphicLoad); HLock((Handle)thePicture); bounds = (*thePicture)->picFrame; HUnlock((Handle)thePicture); QOffsetRect(&bounds, -bounds.left, -bounds.top); QOffsetRect(&bounds, hOffset, 0); DrawPicture(thePicture, &bounds); ReleaseResource((Handle)thePicture); QSetRect(&badgeSrcRect, 0, 0, 32, 66); // 2144 pixels theErr = CreateOffScreenGWorld(&badgeSrcMap, &badgeSrcRect, kPreferredDepth); SetGWorld(badgeSrcMap, nil); LoadGraphic(kBadgePictID); boardDestRect = boardSrcRect; QOffsetRect(&boardDestRect, 0, -kScoreboardTall); hOffset = (RectWide(&houseRect) - 640) / 2; if (hOffset < 0) hOffset = -128; QSetRect(&boardTSrcRect, 0, 0, 256, 12); // room title theErr = CreateOffScreenGWorld(&boardTSrcMap, &boardTSrcRect, kPreferredDepth); SetGWorld(boardTSrcMap, nil); boardTDestRect = boardTSrcRect; QOffsetRect(&boardTDestRect, 137 + hOffset, 5); TextFont(applFont); TextSize(12); TextFace(bold); QSetRect(&boardGSrcRect, 0, 0, 20, 10); // # gliders theErr = CreateOffScreenGWorld(&boardGSrcMap, &boardGSrcRect, kPreferredDepth); SetGWorld(boardGSrcMap, nil); boardGDestRect = boardGSrcRect; QOffsetRect(&boardGDestRect, 526 + hOffset, 5); TextFont(applFont); TextSize(12); TextFace(bold); QSetRect(&boardPSrcRect, 0, 0, 64, 10); // points theErr = CreateOffScreenGWorld(&boardPSrcMap, &boardPSrcRect, kPreferredDepth); SetGWorld(boardPSrcMap, nil); boardPDestRect = boardPSrcRect; QOffsetRect(&boardPDestRect, 570 + hOffset, 5); // total = 6396 pixels boardPQDestRect = boardPDestRect; QOffsetRect(&boardPQDestRect, 0, -kScoreboardTall); boardGQDestRect = boardGDestRect; QOffsetRect(&boardGQDestRect, 0, -kScoreboardTall); TextFont(applFont); TextSize(12); TextFace(bold); QSetRect(&badgesBlankRects[0], 0, 0, 16, 16); // foil QOffsetRect(&badgesBlankRects[0], 0, 0); QSetRect(&badgesBlankRects[1], 0, 0, 16, 16); // rubber bands QOffsetRect(&badgesBlankRects[1], 0, 16); QSetRect(&badgesBlankRects[2], 0, 0, 16, 17); // battery QOffsetRect(&badgesBlankRects[2], 0, 32); QSetRect(&badgesBlankRects[3], 0, 0, 16, 17); // helium QOffsetRect(&badgesBlankRects[3], 0, 49); QSetRect(&badgesBadgesRects[0], 0, 0, 16, 16); // foil QOffsetRect(&badgesBadgesRects[0], 16, 0); QSetRect(&badgesBadgesRects[1], 0, 0, 16, 16); // rubber bands QOffsetRect(&badgesBadgesRects[1], 16, 16); QSetRect(&badgesBadgesRects[2], 0, 0, 16, 17); // battery QOffsetRect(&badgesBadgesRects[2], 16, 32); QSetRect(&badgesBadgesRects[3], 0, 0, 16, 17); // helium QOffsetRect(&badgesBadgesRects[3], 16, 49); QSetRect(&badgesDestRects[0], 0, 0, 16, 16); // foil QOffsetRect(&badgesDestRects[0], 432 + hOffset, 2 - kScoreboardTall); QSetRect(&badgesDestRects[1], 0, 0, 16, 16); // rubber bands QOffsetRect(&badgesDestRects[1], 449 + hOffset, 2 - kScoreboardTall); QSetRect(&badgesDestRects[2], 0, 0, 16, 17); // battery QOffsetRect(&badgesDestRects[2], 467 + hOffset, 1 - kScoreboardTall); QSetRect(&badgesDestRects[3], 0, 0, 16, 17); // helium QOffsetRect(&badgesDestRects[3], 467 + hOffset, 1 - kScoreboardTall); SetGWorld(wasCPort, wasWorld); } //-------------------------------------------------------------- InitGliderMap // Graphics and structures relating to the little paper glider (theÉ // player) are cretaed, loaded up and initialized here. void InitGliderMap (void) { CGrafPtr wasCPort; GDHandle wasWorld; OSErr theErr; short i; GetGWorld(&wasCPort, &wasWorld); QSetRect(&glidSrcRect, 0, 0, kGliderWide, 668); // 32112 pixels theErr = CreateOffScreenGWorld(&glidSrcMap, &glidSrcRect, kPreferredDepth); SetGWorld(glidSrcMap, nil); LoadGraphic(kGliderPictID); theErr = CreateOffScreenGWorld(&glid2SrcMap, &glidSrcRect, kPreferredDepth); SetGWorld(glid2SrcMap, nil); LoadGraphic(kGlider2PictID); theErr = CreateOffScreenGWorld(&glidMaskMap, &glidSrcRect, 1); SetGWorld(glidMaskMap, nil); LoadGraphic(kGliderPictID + 1000); for (i = 0; i <= 20; i++) { QSetRect(&gliderSrc[i], 0, 0, kGliderWide, kGliderHigh); QOffsetRect(&gliderSrc[i], 0, kGliderHigh * i); } for (i = 21; i <= 28; i++) { QSetRect(&gliderSrc[i], 0, 0, kGliderWide, kGliderBurningHigh); QOffsetRect(&gliderSrc[i], 0, 420 + (kGliderBurningHigh * (i - 21))); } QSetRect(&gliderSrc[29], 0, 0, kGliderWide, kGliderHigh); QOffsetRect(&gliderSrc[29], 0, 628); QSetRect(&gliderSrc[30], 0, 0, kGliderWide, kGliderHigh); QOffsetRect(&gliderSrc[30], 0, 648); QSetRect(&shadowSrcRect, 0, 0, kGliderWide, kShadowHigh * kNumShadowSrcRects); theErr = CreateOffScreenGWorld(&shadowSrcMap, &shadowSrcRect, kPreferredDepth); SetGWorld(shadowSrcMap, nil); LoadGraphic(kShadowPictID); theErr = CreateOffScreenGWorld(&shadowMaskMap, &shadowSrcRect, 1); SetGWorld(shadowMaskMap, nil); LoadGraphic(kShadowPictID + 1000); for (i = 0; i < kNumShadowSrcRects; i++) { QSetRect(&shadowSrc[i], 0, 0, kGliderWide, kShadowHigh); QOffsetRect(&shadowSrc[i], 0, kShadowHigh * i); } QSetRect(&bandsSrcRect, 0, 0, 16, 18); // 304 pixels theErr = CreateOffScreenGWorld(&bandsSrcMap, &bandsSrcRect, kPreferredDepth); SetGWorld(bandsSrcMap, nil); LoadGraphic(kRubberBandsPictID); theErr = CreateOffScreenGWorld(&bandsMaskMap, &bandsSrcRect, 1); SetGWorld(bandsMaskMap, nil); LoadGraphic(kRubberBandsPictID + 1000); for (i = 0; i < 3; i++) { QSetRect(&bandRects[i], 0, 0, 16, 6); QOffsetRect(&bandRects[i], 0, 6 * i); } SetGWorld(wasCPort, wasWorld); } //-------------------------------------------------------------- InitBlowers // All blower graphics and structures are loaded up and initialized here. // Blowers include vents, ducts, candles, fans, etc. void InitBlowers (void) { CGrafPtr wasCPort; GDHandle wasWorld; short i; OSErr theErr; GetGWorld(&wasCPort, &wasWorld); QSetRect(&blowerSrcRect, 0, 0, 48, 402); // 19344 pixels theErr = CreateOffScreenGWorld(&blowerSrcMap, &blowerSrcRect, kPreferredDepth); SetGWorld(blowerSrcMap, nil); LoadGraphic(kBlowerPictID); theErr = CreateOffScreenGWorld(&blowerMaskMap, &blowerSrcRect, 1); SetGWorld(blowerMaskMap, nil); LoadGraphic(kBlowerPictID + 1000); for (i = 0; i < kNumCandleFlames; i++) { QSetRect(&flame[i], 0, 0, 16, 15); QOffsetRect(&flame[i], 32, 179 + (i * 15)); } for (i = 0; i < kNumTikiFlames; i++) { QSetRect(&tikiFlame[i], 0, 0, 8, 10); QOffsetRect(&tikiFlame[i], 40, 69 + (i * 10)); } for (i = 0; i < kNumBBQCoals; i++) { QSetRect(&coals[i], 0, 0, 32, 9); QOffsetRect(&coals[i], 0, 304 + (i * 9)); } QSetRect(&leftStartGliderSrc, 0, 0, 48, 16); QOffsetRect(&leftStartGliderSrc, 0, 358); QSetRect(&rightStartGliderSrc, 0, 0, 48, 16); QOffsetRect(&rightStartGliderSrc, 0, 374); SetGWorld(wasCPort, wasWorld); } //-------------------------------------------------------------- InitFurniture // Structures and graphics relating to the furniture is loaded up. // Furniture includes tables, cabinets, shelves, etc. void InitFurniture (void) { CGrafPtr wasCPort; GDHandle wasWorld; OSErr theErr; GetGWorld(&wasCPort, &wasWorld); QSetRect(&furnitureSrcRect, 0, 0, 64, 278); // 17856 pixels theErr = CreateOffScreenGWorld(&furnitureSrcMap, &furnitureSrcRect, kPreferredDepth); SetGWorld(furnitureSrcMap, nil); LoadGraphic(kFurniturePictID); theErr = CreateOffScreenGWorld(&furnitureMaskMap, &furnitureSrcRect, 1); SetGWorld(furnitureMaskMap, nil); LoadGraphic(kFurniturePictID + 1000); QSetRect(&tableSrc, 0, 0, 64, 22); QOffsetRect(&tableSrc, 0, 0); QSetRect(&shelfSrc, 0, 0, 16, 21); QOffsetRect(&shelfSrc, 0, 22); QSetRect(&hingeSrc, 0, 0, 4, 16); QOffsetRect(&hingeSrc, 16, 22); QSetRect(&handleSrc, 0, 0, 4, 21); QOffsetRect(&handleSrc, 20, 22); QSetRect(&knobSrc, 0, 0, 8, 8); QOffsetRect(&knobSrc, 24, 22); QSetRect(&leftFootSrc, 0, 0, 16, 16); QOffsetRect(&leftFootSrc, 32, 22); QSetRect(&rightFootSrc, 0, 0, 16, 16); QOffsetRect(&rightFootSrc, 48, 22); QSetRect(&deckSrc, 0, 0, 64, 21); QOffsetRect(&deckSrc, 0, 162); SetGWorld(wasCPort, wasWorld); } //-------------------------------------------------------------- InitPrizes // Structures and graphics relating to the prizes (bonuses) are loaded up. // Prizes includes clocks, rubber bands, extra gliders, etc. void InitPrizes (void) { CGrafPtr wasCPort; GDHandle wasWorld; short i; OSErr theErr; GetGWorld(&wasCPort, &wasWorld); QSetRect(&bonusSrcRect, 0, 0, 88, 378); // 33264 pixels theErr = CreateOffScreenGWorld(&bonusSrcMap, &bonusSrcRect, kPreferredDepth); SetGWorld(bonusSrcMap, nil); LoadGraphic(kBonusPictID); theErr = CreateOffScreenGWorld(&bonusMaskMap, &bonusSrcRect, 1); SetGWorld(bonusMaskMap, nil); LoadGraphic(kBonusPictID + 1000); for (i = 0; i < 11; i++) { QSetRect(&digits[i], 0, 0, 4, 6); QOffsetRect(&digits[i], 28, i * 6); } for (i = 0; i < 3; i++) { QSetRect(&pendulumSrc[i], 0, 0, 32, 28); QOffsetRect(&pendulumSrc[i], 56, 186 + (i * 28)); } QSetRect(&greaseSrcRt[0], 0, 0, 32, 27); QOffsetRect(&greaseSrcRt[0], 0, 243); QSetRect(&greaseSrcRt[1], 0, 0, 32, 27); QOffsetRect(&greaseSrcRt[1], 0, 270); QSetRect(&greaseSrcRt[2], 0, 0, 32, 27); QOffsetRect(&greaseSrcRt[2], 0, 297); QSetRect(&greaseSrcRt[3], 0, 0, 32, 27); QOffsetRect(&greaseSrcRt[3], 32, 297); QSetRect(&greaseSrcLf[0], 0, 0, 32, 27); QOffsetRect(&greaseSrcLf[0], 0, 324); QSetRect(&greaseSrcLf[1], 0, 0, 32, 27); QOffsetRect(&greaseSrcLf[1], 32, 324); QSetRect(&greaseSrcLf[2], 0, 0, 32, 27); QOffsetRect(&greaseSrcLf[2], 0, 351); QSetRect(&greaseSrcLf[3], 0, 0, 32, 27); QOffsetRect(&greaseSrcLf[3], 32, 351); for (i = 0; i < 6; i++) { QSetRect(&starSrc[i], 0, 0, 32, 31); QOffsetRect(&starSrc[i], 48, i * 31); } for (i = 0; i < 3; i++) { QSetRect(&sparkleSrc[i + 2], 0, 0, 20, 19); QOffsetRect(&sparkleSrc[i + 2], 0, 70 + (i * 19)); } sparkleSrc[0] = sparkleSrc[4]; sparkleSrc[1] = sparkleSrc[3]; QSetRect(&pointsSrcRect, 0, 0, 24, 120); // 2880 pixels theErr = CreateOffScreenGWorld(&pointsSrcMap, &pointsSrcRect, kPreferredDepth); SetGWorld(pointsSrcMap, nil); LoadGraphic(kPointsPictID); theErr = CreateOffScreenGWorld(&pointsMaskMap, &pointsSrcRect, 1); SetGWorld(pointsMaskMap, nil); LoadGraphic(kPointsPictID + 1000); for (i = 0; i < 15; i++) { QSetRect(&pointsSrc[i], 0, 0, 24, 8); QOffsetRect(&pointsSrc[i], 0, i * 8); } SetGWorld(wasCPort, wasWorld); } //-------------------------------------------------------------- InitTransports // Structures and graphics relating to the transports is loaded up. // Transports includes transport ducts, mailboxes, etc. void InitTransports (void) { CGrafPtr wasCPort; GDHandle wasWorld; OSErr theErr; QSetRect(&transSrcRect, 0, 0, 56, 32); // 1848 pixels theErr = CreateOffScreenGWorld(&transSrcMap, &transSrcRect, kPreferredDepth); SetGWorld(transSrcMap, nil); LoadGraphic(kTransportPictID); theErr = CreateOffScreenGWorld(&transMaskMap, &transSrcRect, 1); SetGWorld(transMaskMap, nil); LoadGraphic(kTransportPictID + 1000); SetGWorld(wasCPort, wasWorld); } //-------------------------------------------------------------- InitSwitches // Structures and graphics relating to switches are loaded up. // Switches includes triggers, light switches, etc. void InitSwitches (void) { CGrafPtr wasCPort; GDHandle wasWorld; OSErr theErr; GetGWorld(&wasCPort, &wasWorld); QSetRect(&switchSrcRect, 0, 0, 32, 104); // 3360 pixels theErr = CreateOffScreenGWorld(&switchSrcMap, &switchSrcRect, kPreferredDepth); SetGWorld(switchSrcMap, nil); LoadGraphic(kSwitchPictID); QSetRect(&lightSwitchSrc[0], 0, 0, 15, 24); QOffsetRect(&lightSwitchSrc[0], 0, 0); QSetRect(&lightSwitchSrc[1], 0, 0, 15, 24); QOffsetRect(&lightSwitchSrc[1], 16, 0); QSetRect(&machineSwitchSrc[0], 0, 0, 16, 24); QOffsetRect(&machineSwitchSrc[0], 0, 24); QSetRect(&machineSwitchSrc[1], 0, 0, 16, 24); QOffsetRect(&machineSwitchSrc[1], 16, 24); QSetRect(&thermostatSrc[0], 0, 0, 15, 24); QOffsetRect(&thermostatSrc[0], 0, 48); QSetRect(&thermostatSrc[1], 0, 0, 15, 24); QOffsetRect(&thermostatSrc[1], 16, 48); QSetRect(&powerSrc[0], 0, 0, 8, 8); QOffsetRect(&powerSrc[0], 0, 72); QSetRect(&powerSrc[1], 0, 0, 8, 8); QOffsetRect(&powerSrc[1], 8, 72); QSetRect(&knifeSwitchSrc[0], 0, 0, 16, 24); QOffsetRect(&knifeSwitchSrc[0], 0, 80); QSetRect(&knifeSwitchSrc[1], 0, 0, 16, 24); QOffsetRect(&knifeSwitchSrc[1], 16, 80); SetGWorld(wasCPort, wasWorld); } //-------------------------------------------------------------- InitLights // Structures and graphics relating to lights are loaded up. // Lights includes table lamps, flourescent lights, track lights, etc. void InitLights (void) { CGrafPtr wasCPort; GDHandle wasWorld; short i; OSErr theErr; GetGWorld(&wasCPort, &wasWorld); QSetRect(&lightSrcRect, 0, 0, 72, 126); // 9144 pixels theErr = CreateOffScreenGWorld(&lightSrcMap, &lightSrcRect, kPreferredDepth); SetGWorld(lightSrcMap, nil); LoadGraphic(kLightPictID); theErr = CreateOffScreenGWorld(&lightMaskMap, &lightSrcRect, 1); SetGWorld(lightMaskMap, nil); LoadGraphic(kLightPictID + 1000); QSetRect(&flourescentSrc1, 0, 0, 16, 12); QOffsetRect(&flourescentSrc1, 0, 78); QSetRect(&flourescentSrc2, 0, 0, 16, 12); QOffsetRect(&flourescentSrc2, 0, 90); for (i = 0; i < kNumTrackLights; i++) { QSetRect(&trackLightSrc[i], 0, 0, 24, 24); QOffsetRect(&trackLightSrc[i], 24 * i, 102); } SetGWorld(wasCPort, wasWorld); } //-------------------------------------------------------------- InitAppliances // Structures and graphics relating to appliances are loaded up. // Appliances includes toasters, T.V.s, etc. void InitAppliances (void) { CGrafPtr wasCPort; GDHandle wasWorld; short i; OSErr theErr; GetGWorld(&wasCPort, &wasWorld); QSetRect(&applianceSrcRect, 0, 0, 80, 269); // 21600 pixels theErr = CreateOffScreenGWorld(&applianceSrcMap, &applianceSrcRect, kPreferredDepth); SetGWorld(applianceSrcMap, nil); LoadGraphic(kAppliancePictID); theErr = CreateOffScreenGWorld(&applianceMaskMap, &applianceSrcRect, 1); SetGWorld(applianceMaskMap, nil); LoadGraphic(kAppliancePictID + 1000); QSetRect(&toastSrcRect, 0, 0, 32, 174); // 5600 pixels theErr = CreateOffScreenGWorld(&toastSrcMap, &toastSrcRect, kPreferredDepth); SetGWorld(toastSrcMap, nil); LoadGraphic(kToastPictID); theErr = CreateOffScreenGWorld(&toastMaskMap, &toastSrcRect, 1); SetGWorld(toastMaskMap, nil); LoadGraphic(kToastPictID + 1000); QSetRect(&shredSrcRect, 0, 0, 40, 35); // 1440 pixels theErr = CreateOffScreenGWorld(&shredSrcMap, &shredSrcRect, kPreferredDepth); SetGWorld(shredSrcMap, nil); LoadGraphic(kShreddedPictID); theErr = CreateOffScreenGWorld(&shredMaskMap, &shredSrcRect, 1); SetGWorld(shredMaskMap, nil); LoadGraphic(kShreddedPictID + 1000); QSetRect(&plusScreen1, 0, 0, 32, 22); QOffsetRect(&plusScreen1, 48, 127); QSetRect(&plusScreen2, 0, 0, 32, 22); QOffsetRect(&plusScreen2, 48, 149); QSetRect(&tvScreen1, 0, 0, 64, 49); QOffsetRect(&tvScreen1, 0, 171); QSetRect(&tvScreen2, 0, 0, 64, 49); QOffsetRect(&tvScreen2, 0, 220); QSetRect(&coffeeLight1, 0, 0, 8, 4); QOffsetRect(&coffeeLight1, 72, 171); QSetRect(&coffeeLight2, 0, 0, 8, 4); QOffsetRect(&coffeeLight2, 72, 175); for (i = 0; i < kNumOutletPicts; i++) { QSetRect(&outletSrc[i], 0, 0, 16, 24); QOffsetRect(&outletSrc[i], 64, 22 + (i * 24)); } for (i = 0; i < kNumBreadPicts; i++) { QSetRect(&breadSrc[i], 0, 0, 32, 29); QOffsetRect(&breadSrc[i], 0, i * 29); } QSetRect(&vcrTime1, 0, 0, 16, 4); QOffsetRect(&vcrTime1, 64, 179); QSetRect(&vcrTime2, 0, 0, 16, 4); QOffsetRect(&vcrTime2, 64, 183); QSetRect(&stereoLight1, 0, 0, 4, 1); QOffsetRect(&stereoLight1, 68, 171); QSetRect(&stereoLight2, 0, 0, 4, 1); QOffsetRect(&stereoLight2, 68, 172); QSetRect(µOn, 0, 0, 16, 35); QOffsetRect(µOn, 64, 222); QSetRect(µOff, 0, 0, 16, 35); QOffsetRect(µOff, 64, 187); SetGWorld(wasCPort, wasWorld); } //-------------------------------------------------------------- InitEnemies // Structures and graphics relating to enemies are loaded up. // Enemies includes darts, balloons, fish, etc. void InitEnemies (void) { CGrafPtr wasCPort; GDHandle wasWorld; short i; OSErr theErr; GetGWorld(&wasCPort, &wasWorld); QSetRect(&balloonSrcRect, 0, 0, 24, 30 * kNumBalloonFrames); theErr = CreateOffScreenGWorld(&balloonSrcMap, &balloonSrcRect, kPreferredDepth); SetGWorld(balloonSrcMap, nil); LoadGraphic(kBalloonPictID); theErr = CreateOffScreenGWorld(&balloonMaskMap, &balloonSrcRect, 1); SetGWorld(balloonMaskMap, nil); LoadGraphic(kBalloonPictID + 1000); QSetRect(&copterSrcRect, 0, 0, 32, 30 * kNumCopterFrames); theErr = CreateOffScreenGWorld(&copterSrcMap, &copterSrcRect, kPreferredDepth); SetGWorld(copterSrcMap, nil); LoadGraphic(kCopterPictID); theErr = CreateOffScreenGWorld(&copterMaskMap, &copterSrcRect, 1); SetGWorld(copterMaskMap, nil); LoadGraphic(kCopterPictID + 1000); QSetRect(&dartSrcRect, 0, 0, 64, 19 * kNumDartFrames); theErr = CreateOffScreenGWorld(&dartSrcMap, &dartSrcRect, kPreferredDepth); SetGWorld(dartSrcMap, nil); LoadGraphic(kDartPictID); theErr = CreateOffScreenGWorld(&dartMaskMap, &dartSrcRect, 1); SetGWorld(dartMaskMap, nil); LoadGraphic(kDartPictID + 1000); QSetRect(&ballSrcRect, 0, 0, 32, 32 * kNumBallFrames); theErr = CreateOffScreenGWorld(&ballSrcMap, &ballSrcRect, kPreferredDepth); SetGWorld(ballSrcMap, nil); LoadGraphic(kBallPictID); theErr = CreateOffScreenGWorld(&ballMaskMap, &ballSrcRect, 1); SetGWorld(ballMaskMap, nil); LoadGraphic(kBallPictID + 1000); QSetRect(&dripSrcRect, 0, 0, 16, 12 * kNumDripFrames); theErr = CreateOffScreenGWorld(&dripSrcMap, &dripSrcRect, kPreferredDepth); SetGWorld(dripSrcMap, nil); LoadGraphic(kDripPictID); theErr = CreateOffScreenGWorld(&dripMaskMap, &dripSrcRect, 1); SetGWorld(dripMaskMap, nil); LoadGraphic(kDripPictID + 1000); QSetRect(&enemySrcRect, 0, 0, 36, 33); theErr = CreateOffScreenGWorld(&enemySrcMap, &enemySrcRect, kPreferredDepth); SetGWorld(enemySrcMap, nil); LoadGraphic(kEnemyPictID); theErr = CreateOffScreenGWorld(&enemyMaskMap, &enemySrcRect, 1); SetGWorld(enemyMaskMap, nil); LoadGraphic(kEnemyPictID + 1000); QSetRect(&fishSrcRect, 0, 0, 16, 16 * kNumFishFrames); theErr = CreateOffScreenGWorld(&fishSrcMap, &fishSrcRect, kPreferredDepth); SetGWorld(fishSrcMap, nil); LoadGraphic(kFishPictID); theErr = CreateOffScreenGWorld(&fishMaskMap, &fishSrcRect, 1); SetGWorld(fishMaskMap, nil); LoadGraphic(kFishPictID + 1000); for (i = 0; i < kNumBalloonFrames; i++) { QSetRect(&balloonSrc[i], 0, 0, 24, 30); QOffsetRect(&balloonSrc[i], 0, 30 * i); } for (i = 0; i < kNumCopterFrames; i++) { QSetRect(&copterSrc[i], 0, 0, 32, 30); QOffsetRect(&copterSrc[i], 0, 30 * i); } for (i = 0; i < kNumDartFrames; i++) { QSetRect(&dartSrc[i], 0, 0, 64, 19); QOffsetRect(&dartSrc[i], 0, 19 * i); } for (i = 0; i < kNumBallFrames; i++) { QSetRect(&ballSrc[i], 0, 0, 32, 32); QOffsetRect(&ballSrc[i], 0, 32 * i); } for (i = 0; i < kNumDripFrames; i++) { QSetRect(&dripSrc[i], 0, 0, 16, 12); QOffsetRect(&dripSrc[i], 0, 12 * i); } for (i = 0; i < kNumFishFrames; i++) { QSetRect(&fishSrc[i], 0, 0, 16, 16); QOffsetRect(&fishSrc[i], 0, 16 * i); } SetGWorld(wasCPort, wasWorld); } \ No newline at end of file diff --git a/Sources/StructuresInit2.c b/Sources/StructuresInit2.c deleted file mode 100755 index 1999b39..0000000 --- a/Sources/StructuresInit2.c +++ /dev/null @@ -1 +0,0 @@ -//============================================================================ //---------------------------------------------------------------------------- // StructuresInit2.c //---------------------------------------------------------------------------- //============================================================================ #include #include "Externs.h" #include "Environ.h" #include "GameOver.h" #include "MainWindow.h" #include "Objects.h" #include "RectUtils.h" #include "Room.h" #include "RoomGraphics.h" #include "Utilities.h" #define kAngelPictID 1019 #define kSupportPictID 1999 #define kClutterPictID 4018 void InitClutter (void); void InitSupport (void); void InitAngel (void); extern Rect suppSrcRect, justRoomsRect; extern Rect tileSrcRect, angelSrcRect; extern GDHandle thisGDevice; extern CGrafPtr tileSrcMap; extern FSSpecPtr theHousesSpecs; extern hotPtr hotSpots; extern sparklePtr sparkles; extern flyingPtPtr flyingPoints; extern flamePtr flames, tikiFlames, bbqCoals; extern pendulumPtr pendulums; extern savedPtr savedMaps; extern bandPtr bands; extern greasePtr grease; extern starPtr theStars; extern shredPtr shreds; extern dynaPtr dinahs; extern demoPtr demoData; extern short maxFiles; //============================================================== Functions //-------------------------------------------------------------- InitClutter // Structures and graphics relating to clutter are loaded up. // Clutter includes mirrors, teddy bears, fireplaces, calendars, etc. void InitClutter (void) { CGrafPtr wasCPort; GDHandle wasWorld; OSErr theErr; GetGWorld(&wasCPort, &wasWorld); QSetRect(&clutterSrcRect, 0, 0, 128, 69); theErr = CreateOffScreenGWorld(&clutterSrcMap, &clutterSrcRect, kPreferredDepth); SetGWorld(clutterSrcMap, nil); LoadGraphic(kClutterPictID); theErr = CreateOffScreenGWorld(&clutterMaskMap, &clutterSrcRect, 1); SetGWorld(clutterMaskMap, nil); LoadGraphic(kClutterPictID + 1000); QSetRect(&flowerSrc[0], 0, 0, 10, 28); QOffsetRect(&flowerSrc[0], 0, 23); QSetRect(&flowerSrc[1], 0, 0, 24, 35); QOffsetRect(&flowerSrc[1], 10, 16); QSetRect(&flowerSrc[2], 0, 0, 34, 35); QOffsetRect(&flowerSrc[2], 34, 16); QSetRect(&flowerSrc[3], 0, 0, 27, 23); QOffsetRect(&flowerSrc[3], 68, 14); QSetRect(&flowerSrc[4], 0, 0, 27, 14); QOffsetRect(&flowerSrc[4], 68, 37); QSetRect(&flowerSrc[5], 0, 0, 32, 51); QOffsetRect(&flowerSrc[5], 95, 0); SetGWorld(wasCPort, wasWorld); } //-------------------------------------------------------------- InitSupport // The floor support grphic is loaded up. It is only visible whenÉ // playing in 9-room mode. It is the horizontal wooden beam thatÉ // seperates floors from one another. void InitSupport (void) { CGrafPtr wasCPort; GDHandle wasWorld; OSErr theErr; GetGWorld(&wasCPort, &wasWorld); QSetRect(&suppSrcRect, 0, 0, kRoomWide, kFloorSupportTall); // 44 theErr = CreateOffScreenGWorld(&suppSrcMap, &suppSrcRect, kPreferredDepth); SetGWorld(suppSrcMap, nil); LoadGraphic(kSupportPictID); SetGWorld(wasCPort, wasWorld); } //-------------------------------------------------------------- InitAngel // This loads the graphic of the girl riding the glider. It is seenÉ // only upon completing a house. She flies across the screen droppingÉ // stars below. void InitAngel (void) { CGrafPtr wasCPort; GDHandle wasWorld; OSErr theErr; GetGWorld(&wasCPort, &wasWorld); QSetRect(&angelSrcRect, 0, 0, 96, 44); theErr = CreateOffScreenGWorld(&angelSrcMap, &angelSrcRect, kPreferredDepth); SetGWorld(angelSrcMap, nil); LoadGraphic(kAngelPictID); theErr = CreateOffScreenGWorld(&angelMaskMap, &angelSrcRect, 1); SetGWorld(angelMaskMap, nil); LoadGraphic(kAngelPictID + 1); SetGWorld(wasCPort, wasWorld); } //-------------------------------------------------------------- CreateOffscreens // All "utility" or "work" offscreen pix/bit maps are created here. // These would be offscreens that are reused throughout a game - theyÉ // are not static (mere repositories for graphics). Most are usedÉ // to facilitate the animation when a game is in progress. void CreateOffscreens (void) { CGrafPtr wasCPort; GDHandle wasWorld; OSErr theErr; GetGWorld(&wasCPort, &wasWorld); justRoomsRect = houseRect; ZeroRectCorner(&justRoomsRect); workSrcRect = houseRect; // Set up work map ZeroRectCorner(&workSrcRect); theErr = CreateOffScreenGWorld(&workSrcMap, &workSrcRect, kPreferredDepth); backSrcRect = houseRect; // Set up background map ZeroRectCorner(&backSrcRect); theErr = CreateOffScreenGWorld(&backSrcMap, &backSrcRect, kPreferredDepth); InitScoreboardMap(); SpinCursor(1); InitGliderMap(); SpinCursor(1); InitBlowers(); SpinCursor(1); InitFurniture(); SpinCursor(1); InitPrizes(); SpinCursor(1); InitTransports(); SpinCursor(1); InitSwitches(); SpinCursor(1); InitLights(); SpinCursor(1); InitAppliances(); SpinCursor(1); InitEnemies(); SpinCursor(1); InitClutter(); SpinCursor(1); InitSupport(); SpinCursor(1); InitAngel(); SpinCursor(1); QSetRect(&tileSrcRect, 0, 0, 128, 80); tileSrcMap = nil; // ???? } //-------------------------------------------------------------- CreatePointers // This function allocates other large structures. Pointers to holdÉ // large arrays, etc. void CreatePointers (void) { Handle tempHandle; short i; thisRoom = nil; thisRoom = (roomPtr)NewPtr(sizeof(roomType)); if (thisRoom == nil) RedAlert(kErrNoMemory); hotSpots = nil; hotSpots = (hotPtr)NewPtr(sizeof(hotObject) * kMaxHotSpots); if (hotSpots == nil) RedAlert(kErrNoMemory); sparkles = nil; sparkles = (sparklePtr)NewPtr(sizeof(sparkleType) * kMaxSparkles); if (sparkles == nil) RedAlert(kErrNoMemory); flyingPoints = nil; flyingPoints = (flyingPtPtr)NewPtr(sizeof(flyingPtType) * kMaxFlyingPts); if (flyingPoints == nil) RedAlert(kErrNoMemory); flames = nil; flames = (flamePtr)NewPtr(sizeof(flameType) * kMaxCandles); if (flames == nil) RedAlert(kErrNoMemory); tikiFlames = nil; tikiFlames = (flamePtr)NewPtr(sizeof(flameType) * kMaxTikis); if (tikiFlames == nil) RedAlert(kErrNoMemory); bbqCoals = nil; bbqCoals = (flamePtr)NewPtr(sizeof(flameType) * kMaxCoals); if (bbqCoals == nil) RedAlert(kErrNoMemory); pendulums = nil; pendulums = (pendulumPtr)NewPtr(sizeof(pendulumType) * kMaxPendulums); if (pendulums == nil) RedAlert(kErrNoMemory); savedMaps = nil; savedMaps = (savedPtr)NewPtr(sizeof(savedType) * kMaxSavedMaps); if (savedMaps == nil) RedAlert(kErrNoMemory); for (i = 0; i < kMaxSavedMaps; i++) savedMaps[i].map = nil; bands = nil; bands = (bandPtr)NewPtr(sizeof(bandType) * kMaxRubberBands); if (bands == nil) RedAlert(kErrNoMemory); grease = nil; grease = (greasePtr)NewPtr(sizeof(greaseType) * kMaxGrease); if (grease == nil) RedAlert(kErrNoMemory); theStars = nil; theStars = (starPtr)NewPtr(sizeof(starType) * kMaxStars); if (theStars == nil) RedAlert(kErrNoMemory); shreds = nil; shreds = (shredPtr)NewPtr(sizeof(shredType) * kMaxShredded); if (shreds == nil) RedAlert(kErrNoMemory); dinahs = nil; dinahs = (dynaPtr)NewPtr(sizeof(dynaType) * kMaxDynamicObs); if (dinahs == nil) RedAlert(kErrNoMemory); masterObjects = nil; masterObjects = (objDataPtr)NewPtr(sizeof(objDataType) * kMaxMasterObjects); if (masterObjects == nil) RedAlert(kErrNoMemory); srcRects = nil; srcRects = (Rect *)NewPtr(sizeof(Rect) * kNumSrcRects); if (srcRects == nil) RedAlert(kErrNoMemory); theHousesSpecs = nil; theHousesSpecs = (FSSpecPtr)NewPtr(sizeof(FSSpec) * maxFiles); if (theHousesSpecs == nil) RedAlert(kErrNoMemory); #ifdef CREATEDEMODATA demoData = nil; demoData = (demoPtr)NewPtr(sizeof(demoType) * 2000); if (demoData == nil) RedAlert(kErrNoMemory); #else demoData = nil; demoData = (demoPtr)NewPtr(kDemoLength); if (demoData == nil) RedAlert(kErrNoMemory); tempHandle = GetResource('demo', 128); if (tempHandle == nil) RedAlert(kErrNoMemory); else { BlockMove(*tempHandle, demoData, kDemoLength); ReleaseResource(tempHandle); } #endif } //-------------------------------------------------------------- InitSrcRects // This is a nasty, ugly function that initializes all global rectanglesÉ // used in Glider PRO. void InitSrcRects (void) { QSetRect(&srcRects[kFloorVent], 0, 0, 48, 11); // Blowers QOffsetRect(&srcRects[kFloorVent], 0, 0); QSetRect(&srcRects[kCeilingVent], 0, 0, 48, 11); QOffsetRect(&srcRects[kCeilingVent], 0, 11); QSetRect(&srcRects[kFloorBlower], 0, 0, 48, 15); QOffsetRect(&srcRects[kFloorBlower], 0, 22); QSetRect(&srcRects[kCeilingBlower], 0, 0, 48, 15); QOffsetRect(&srcRects[kCeilingBlower], 0, 37); QSetRect(&srcRects[kSewerGrate], 0, 0, 48, 17); QOffsetRect(&srcRects[kSewerGrate], 0, 52); QSetRect(&srcRects[kLeftFan], 0, 0, 40, 55); QOffsetRect(&srcRects[kLeftFan], 0, 69); QSetRect(&srcRects[kRightFan], 0, 0, 40, 55); QOffsetRect(&srcRects[kRightFan], 0, 124); QSetRect(&srcRects[kTaper], 0, 0, 20, 59); QOffsetRect(&srcRects[kTaper], 0, 209); QSetRect(&srcRects[kCandle], 0, 0, 32, 30); QOffsetRect(&srcRects[kCandle], 0, 179); QSetRect(&srcRects[kStubby], 0, 0, 20, 36); QOffsetRect(&srcRects[kStubby], 0, 268); QSetRect(&srcRects[kTiki], 0, 0, 27, 28); QOffsetRect(&srcRects[kTiki], 21, 268); QSetRect(&srcRects[kBBQ], 0, 0, 64, 33); QSetRect(&srcRects[kInvisBlower], 0, 0, 24, 24); QSetRect(&srcRects[kGrecoVent], 0, 0, 48, 18); QOffsetRect(&srcRects[kGrecoVent], 0, 340); QSetRect(&srcRects[kSewerBlower], 0, 0, 32, 12); QOffsetRect(&srcRects[kSewerBlower], 0, 390); QSetRect(&srcRects[kLiftArea], 0, 0, 64, 32); QSetRect(&srcRects[kTable], 0, 0, 64, kTableThick); // Furniture QSetRect(&srcRects[kShelf], 0, 0, 64, kShelfThick); QSetRect(&srcRects[kCabinet], 0, 0, 64, 64); QSetRect(&srcRects[kFilingCabinet], 0, 0, 74, 107); QSetRect(&srcRects[kWasteBasket], 0, 0, 64, 61); QOffsetRect(&srcRects[kWasteBasket], 0, 43); QSetRect(&srcRects[kMilkCrate], 0, 0, 64, 58); QOffsetRect(&srcRects[kMilkCrate], 0, 104); QSetRect(&srcRects[kCounter], 0, 0, 128, 64); QSetRect(&srcRects[kDresser], 0, 0, 128, 64); QSetRect(&srcRects[kDeckTable], 0, 0, 64, kTableThick); QSetRect(&srcRects[kStool], 0, 0, 48, 38); QOffsetRect(&srcRects[kStool], 0, 183); QSetRect(&srcRects[kTrunk], 0, 0, 144, 80); QSetRect(&srcRects[kInvisObstacle], 0, 0, 64, 64); QSetRect(&srcRects[kManhole], 0, 0, 123, 22); QSetRect(&srcRects[kBooks], 0, 0, 64, 51); QSetRect(&srcRects[kInvisBounce], 0, 0, 64, 64); QSetRect(&srcRects[kRedClock], 0, 0, 28, 17); // Prizes QSetRect(&srcRects[kBlueClock], 0, 0, 28, 25); QOffsetRect(&srcRects[kBlueClock], 0, 17); QSetRect(&srcRects[kYellowClock], 0, 0, 28, 28); QOffsetRect(&srcRects[kYellowClock], 0, 42); QSetRect(&srcRects[kCuckoo], 0, 0, 40, 80); QOffsetRect(&srcRects[kCuckoo], 0, 148); QSetRect(&srcRects[kPaper], 0, 0, 48, 21); QOffsetRect(&srcRects[kPaper], 0, 127); QSetRect(&srcRects[kBattery], 0, 0, 16, 25); QOffsetRect(&srcRects[kBattery], 32, 0); QSetRect(&srcRects[kBands], 0, 0, 28, 23); QOffsetRect(&srcRects[kBands], 20, 70); QSetRect(&srcRects[kGreaseRt], 0, 0, 32, 27); QOffsetRect(&srcRects[kGreaseRt], 0, 243); QSetRect(&srcRects[kGreaseLf], 0, 0, 32, 27); QOffsetRect(&srcRects[kGreaseLf], 0, 324); QSetRect(&srcRects[kFoil], 0, 0, 55, 15); QOffsetRect(&srcRects[kFoil], 0, 228); QSetRect(&srcRects[kInvisBonus], 0, 0, 24, 24); QSetRect(&srcRects[kStar], 0, 0, 32, 31); QOffsetRect(&srcRects[kStar], 48, 0); QSetRect(&srcRects[kSparkle], 0, 0, 20, 19); QOffsetRect(&srcRects[kSparkle], 0, 70); QSetRect(&srcRects[kHelium], 0, 0, 56, 16); QOffsetRect(&srcRects[kHelium], 32, 270); QSetRect(&srcRects[kSlider], 0, 0, 64, 16); QSetRect(&srcRects[kUpStairs], 0, 0, 160, 267); // Transport QSetRect(&srcRects[kDownStairs], 0, 0, 160, 267); QSetRect(&srcRects[kMailboxLf], 0, 0, 94, 80); QSetRect(&srcRects[kMailboxRt], 0, 0, 94, 80); QSetRect(&srcRects[kFloorTrans], 0, 0, 56, 15); QOffsetRect(&srcRects[kFloorTrans], 0, 1); QSetRect(&srcRects[kCeilingTrans], 0, 0, 56, 15); QOffsetRect(&srcRects[kCeilingTrans], 0, 16); QSetRect(&srcRects[kDoorInLf], 0, 0, 144, 322); QSetRect(&srcRects[kDoorInRt], 0, 0, 144, 322); QSetRect(&srcRects[kDoorExRt], 0, 0, 16, 322); QSetRect(&srcRects[kDoorExLf], 0, 0, 16, 322); QSetRect(&srcRects[kWindowInLf], 0, 0, 20, 170); QSetRect(&srcRects[kWindowInRt], 0, 0, 20, 170); QSetRect(&srcRects[kWindowExRt], 0, 0, 16, 170); QSetRect(&srcRects[kWindowExLf], 0, 0, 16, 170); QSetRect(&srcRects[kInvisTrans], 0, 0, 64, 32); QSetRect(&srcRects[kDeluxeTrans], 0, 0, 64, 64); QSetRect(&srcRects[kLightSwitch], 0, 0, 15, 24); // Switch QSetRect(&srcRects[kMachineSwitch], 0, 0, 16, 24); QOffsetRect(&srcRects[kMachineSwitch], 0, 48); QSetRect(&srcRects[kThermostat], 0, 0, 15, 24); QOffsetRect(&srcRects[kThermostat], 0, 48); QSetRect(&srcRects[kPowerSwitch], 0, 0, 8, 8); QOffsetRect(&srcRects[kPowerSwitch], 0, 72); QSetRect(&srcRects[kKnifeSwitch], 0, 0, 16, 24); QOffsetRect(&srcRects[kKnifeSwitch], 0, 80); QSetRect(&srcRects[kInvisSwitch], 0, 0, 12, 12); QSetRect(&srcRects[kTrigger], 0, 0, 12, 12); QSetRect(&srcRects[kLgTrigger], 0, 0, 48, 48); QSetRect(&srcRects[kSoundTrigger], 0, 0, 32, 32); QSetRect(&srcRects[kCeilingLight], 0, 0, 64, 20); // Lights QOffsetRect(&srcRects[kCeilingLight], 0, 0); QSetRect(&srcRects[kLightBulb], 0, 0, 16, 28); QOffsetRect(&srcRects[kLightBulb], 0, 20); QSetRect(&srcRects[kTableLamp], 0, 0, 48, 70); QOffsetRect(&srcRects[kTableLamp], 16, 20); QSetRect(&srcRects[kHipLamp], 0, 0, 72, 276); QSetRect(&srcRects[kDecoLamp], 0, 0, 64, 212); QSetRect(&srcRects[kFlourescent], 0, 0, 64, 12); QSetRect(&srcRects[kTrackLight], 0, 0, 64, 24); QSetRect(&srcRects[kInvisLight], 0, 0, 16, 16); QSetRect(&srcRects[kShredder], 0, 0, 73, 22); // Appliances QSetRect(&srcRects[kToaster], 0, 0, 48, 27); QOffsetRect(&srcRects[kToaster], 0, 22); QSetRect(&srcRects[kMacPlus], 0, 0, 48, 58); QOffsetRect(&srcRects[kMacPlus], 0, 49); QSetRect(&srcRects[kGuitar], 0, 0, 64, 172); QSetRect(&srcRects[kTV], 0, 0, 92, 77); QSetRect(&srcRects[kCoffee], 0, 0, 43, 64); QOffsetRect(&srcRects[kCoffee], 0, 107); QSetRect(&srcRects[kOutlet], 0, 0, 16, 24); QOffsetRect(&srcRects[kOutlet], 64, 22); QSetRect(&srcRects[kVCR], 0, 0, 96, 22); QSetRect(&srcRects[kStereo], 0, 0, 128, 53); QSetRect(&srcRects[kMicrowave], 0, 0, 92, 59); QSetRect(&srcRects[kCinderBlock], 0, 0, 40, 62); QSetRect(&srcRects[kFlowerBox], 0, 0, 80, 32); QSetRect(&srcRects[kCDs], 0, 0, 16, 30); QOffsetRect(&srcRects[kCDs], 48, 22); QSetRect(&srcRects[kCustomPict], 0, 0, 72, 34); QSetRect(&srcRects[kBalloon], 0, 0, 24, 30); // Enemies QSetRect(&srcRects[kCopterLf], 0, 0, 32, 30); QSetRect(&srcRects[kCopterRt], 0, 0, 32, 30); QSetRect(&srcRects[kDartLf], 0, 0, 64, 19); QSetRect(&srcRects[kDartRt], 0, 0, 64, 19); QSetRect(&srcRects[kBall], 0, 0, 32, 32); QSetRect(&srcRects[kDrip], 0, 0, 16, 12); QSetRect(&srcRects[kFish], 0, 0, 36, 33); QSetRect(&srcRects[kCobweb], 0, 0, 54, 45); QSetRect(&srcRects[kOzma], 0, 0, 102, 92); // Clutter QSetRect(&srcRects[kMirror], 0, 0, 64, 64); QSetRect(&srcRects[kMousehole], 0, 0, 10, 11); QSetRect(&srcRects[kFireplace], 0, 0, 180, 142); QSetRect(&srcRects[kWallWindow], 0, 0, 64, 80); QSetRect(&srcRects[kBear], 0, 0, 56, 58); QSetRect(&srcRects[kCalendar], 0, 0, 63, 92); QSetRect(&srcRects[kVase1], 0, 0, 36, 45); QSetRect(&srcRects[kVase2], 0, 0, 35, 57); QSetRect(&srcRects[kBulletin], 0, 0, 80, 58); QSetRect(&srcRects[kCloud], 0, 0, 128, 30); QSetRect(&srcRects[kFaucet], 0, 0, 56, 18); QOffsetRect(&srcRects[kFaucet], 0, 51); QSetRect(&srcRects[kRug], 0, 0, 144, 18); QSetRect(&srcRects[kChimes], 0, 0, 28, 74); } \ No newline at end of file diff --git a/Sources/Tools.c b/Sources/Tools.c deleted file mode 100755 index b8c281e..0000000 --- a/Sources/Tools.c +++ /dev/null @@ -1 +0,0 @@ -//============================================================================ //---------------------------------------------------------------------------- // Tools.c //---------------------------------------------------------------------------- //============================================================================ #include #include "Externs.h" #include "Environ.h" #include "RectUtils.h" #include "Utilities.h" #define kToolsHigh 4 #define kToolsWide 4 #define kTotalTools 16 // kToolsHigh * kToolsWide #define kPopUpControl 129 #define kFirstBlower 1 #define kLastBlower 15 #define kBlowerBase 1 #define kFirstFurniture 1 #define kLastFurniture 15 #define kFurnitureBase 21 #define kFirstBonus 1 #define kLastBonus 15 #define kBonusBase 41 #define kFirstTransport 1 #define kLastTransport 12 #define kTransportBase 61 #define kFirstSwitch 1 #define kLastSwitch 9 #define kSwitchBase 81 #define kFirstLight 1 #define kLastLight 8 #define kLightBase 101 #define kFirstAppliance 1 #define kLastAppliance 14 #define kApplianceBase 121 #define kFirstEnemy 1 #define kLastEnemy 9 #define kEnemyBase 141 #define kFirstClutter 1 #define kLastClutter 15 #define kClutterBase 161 #define kToolsPictID 1011 void CreateToolsOffscreen (void); void KillToolsOffscreen (void); void FrameSelectedTool (void); void DrawToolName (void); void DrawToolTiles (void); void SwitchToolModes (short); Rect toolsWindowRect, toolSrcRect, toolTextRect; Rect toolRects[kTotalTools]; ControlHandle classPopUp; GWorldPtr toolSrcMap; WindowPtr toolsWindow; short isToolsH, isToolsV; short toolSelected, toolMode; short firstTool, lastTool, objectBase; Boolean isToolsOpen; //============================================================== Functions //-------------------------------------------------------------- CreateToolsOffscreen #ifndef COMPILEDEMO void CreateToolsOffscreen (void) { CGrafPtr wasCPort; GDHandle wasWorld; OSErr theErr; if (toolSrcMap == nil) { GetGWorld(&wasCPort, &wasWorld); QSetRect(&toolSrcRect, 0, 0, 360, 216); theErr = CreateOffScreenGWorld(&toolSrcMap, &toolSrcRect, kPreferredDepth); SetGWorld(toolSrcMap, nil); LoadGraphic(kToolsPictID); SetGWorld(wasCPort, wasWorld); } } #endif //-------------------------------------------------------------- KillToolsOffscreen #ifndef COMPILEDEMO void KillToolsOffscreen (void) { if (toolSrcMap != nil) { DisposeGWorld(toolSrcMap); // KillOffScreenPixMap(toolSrcMap); toolSrcMap = nil; } } #endif //-------------------------------------------------------------- FrameSelectedTool #ifndef COMPILEDEMO void FrameSelectedTool (void) { Rect theRect; short toolIcon; toolIcon = toolSelected; if ((toolMode == kBlowerMode) && (toolIcon >= 7)) { toolIcon--; } else if ((toolMode == kTransportMode) && (toolIcon >= 7)) { if (toolIcon >= 15) toolIcon -= 4; else toolIcon = ((toolIcon - 7) / 2) + 7; } theRect = toolRects[toolIcon]; PenSize(2, 2); ForeColor(redColor); FrameRect(&theRect); PenNormal(); ForeColor(blackColor); } #endif //-------------------------------------------------------------- DrawToolName #ifndef COMPILEDEMO void DrawToolName (void) { Str255 theString; if (toolSelected == 0) PasStringCopy("\pSelection Tool", theString); else GetIndString(theString, kObjectNameStrings, toolSelected + ((toolMode - 1) * 0x0010)); EraseRect(&toolTextRect); MoveTo(toolTextRect.left + 3, toolTextRect.bottom - 6); TextFont(applFont); TextSize(9); TextFace(bold); ColorText(theString, 171L); } #endif //-------------------------------------------------------------- DrawToolTiles #ifndef COMPILEDEMO void DrawToolTiles (void) { Rect srcRect, destRect; short i; DrawCIcon(2000, toolRects[0].left, toolRects[0].top); // Selection Tool for (i = 0; i < 15; i++) // Other tools { QSetRect(&srcRect, 0, 0, 24, 24); QSetRect(&destRect, 0, 0, 24, 24); QOffsetRect(&srcRect, i * 24, (toolMode - 1) * 24); QOffsetRect(&destRect, toolRects[i + 1].left + 2, toolRects[i + 1].top + 2); CopyBits((BitMap *)*GetGWorldPixMap(toolSrcMap), GetPortBitMapForCopyBits(GetWindowPort(toolsWindow)), &srcRect, &destRect, srcCopy, nil); } } #endif //-------------------------------------------------------------- EraseSelectedTool void EraseSelectedTool (void) { #ifndef COMPILEDEMO Rect theRect; short toolIcon; if (toolsWindow == nil) return; SetPort((GrafPtr)toolsWindow); toolIcon = toolSelected; if ((toolMode == kBlowerMode) && (toolIcon >= 7)) { toolIcon--; } else if ((toolMode == kTransportMode) && (toolIcon >= 7)) { if (toolIcon >= 15) toolIcon -= 4; else toolIcon = ((toolIcon - 7) / 2) + 7; } theRect = toolRects[toolIcon]; PenSize(2, 2); ForeColor(whiteColor); FrameRect(&theRect); #endif } //-------------------------------------------------------------- SelectTool void SelectTool (short which) { #ifndef COMPILEDEMO Rect theRect; short toolIcon; if (toolsWindow == nil) return; SetPort((GrafPtr)toolsWindow); toolIcon = which; if ((toolMode == kBlowerMode) && (toolIcon >= 7)) { toolIcon--; } else if ((toolMode == kTransportMode) && (toolIcon >= 7)) { if (toolIcon >= 15) toolIcon -= 4; else toolIcon = ((toolIcon - 7) / 2) + 7; } theRect = toolRects[toolIcon]; ForeColor(redColor); FrameRect(&theRect); PenNormal(); ForeColor(blackColor); toolSelected = which; DrawToolName(); #endif } //-------------------------------------------------------------- UpdateToolsWindow void UpdateToolsWindow (void) { #ifndef COMPILEDEMO if (toolsWindow == nil) return; SetPortWindowPort(toolsWindow); DrawControls(toolsWindow); DkGrayForeColor(); MoveTo(4, 25); Line(108, 0); ForeColor(blackColor); DrawToolTiles(); FrameSelectedTool(); DrawToolName(); #endif } //-------------------------------------------------------------- OpenToolsWindow void OpenToolsWindow (void) { #ifndef COMPILEDEMO Rect src, dest; Point globalMouse; short h, v; if (toolsWindow == nil) { QSetRect(&toolsWindowRect, 0, 0, 116, 152); // 143 QSetRect(&toolTextRect, 0, 0, 116, 12); InsetRect(&toolTextRect, -1, -1); QOffsetRect(&toolTextRect, 0, 157 - 15); if (thisMac.hasColor) toolsWindow = NewCWindow(nil, &toolsWindowRect, "\pTools", false, kWindoidWDEF, kPutInFront, true, 0L); else toolsWindow = NewWindow(nil, &toolsWindowRect, "\pTools", false, kWindoidWDEF, kPutInFront, true, 0L); if (toolsWindow == nil) RedAlert(kErrNoMemory); // if (OptionKeyDown()) // { // isToolsH = qd.screenBits.bounds.right - 120; // isToolsV = 35; // } MoveWindow(toolsWindow, isToolsH, isToolsV, true); globalMouse = MyGetGlobalMouse(); QSetRect(&src, 0, 0, 1, 1); QOffsetRect(&src, globalMouse.h, globalMouse.v); GetWindowRect(toolsWindow, &dest); BringToFront(toolsWindow); ShowHide(toolsWindow, true); // FlagWindowFloating(toolsWindow); TEMP - use flaoting windows HiliteAllWindows(); classPopUp = GetNewControl(kPopUpControl, toolsWindow); if (classPopUp == nil) RedAlert(kErrFailedResourceLoad); SetControlValue(classPopUp, toolMode); for (v = 0; v < kToolsHigh; v++) for (h = 0; h < kToolsWide; h++) { QSetRect(&toolRects[(v * kToolsWide) + h], 2, 29, 30, 57); QOffsetRect(&toolRects[(v * kToolsWide) + h], h * 28, v * 28); } CreateToolsOffscreen(); SwitchToolModes(toolMode); toolSelected = kSelectTool; } UpdateToolsCheckmark(true); #endif } //-------------------------------------------------------------- CloseToolsWindow void CloseToolsWindow (void) { #ifndef COMPILEDEMO CloseThisWindow(&toolsWindow); KillToolsOffscreen(); UpdateToolsCheckmark(false); #endif } //-------------------------------------------------------------- ToggleToolsWindow void ToggleToolsWindow (void) { #ifndef COMPILEDEMO if (toolsWindow == nil) { OpenToolsWindow(); isToolsOpen = true; } else { CloseToolsWindow(); isToolsOpen = true; } #endif } //-------------------------------------------------------------- SwitchToolModes #ifndef COMPILEDEMO void SwitchToolModes (short newMode) { if (toolsWindow == nil) return; SelectTool(kSelectTool); switch (newMode) { case kBlowerMode: firstTool = kFirstBlower; lastTool = kLastBlower; objectBase = kBlowerBase; break; case kFurnitureMode: firstTool = kFirstFurniture; lastTool = kLastFurniture; objectBase = kFurnitureBase; break; case kBonusMode: firstTool = kFirstBonus; lastTool = kLastBonus; objectBase = kBonusBase; break; case kTransportMode: firstTool = kFirstTransport; lastTool = kLastTransport; objectBase = kTransportBase; break; case kSwitchMode: firstTool = kFirstSwitch; lastTool = kLastSwitch; objectBase = kSwitchBase; break; case kLightMode: firstTool = kFirstLight; lastTool = kLastLight; objectBase = kLightBase; break; case kApplianceMode: firstTool = kFirstAppliance; lastTool = kLastAppliance; objectBase = kApplianceBase; break; case kEnemyMode: firstTool = kFirstEnemy; lastTool = kLastEnemy; objectBase = kEnemyBase; break; case kClutterMode: firstTool = kFirstClutter; lastTool = kLastClutter; objectBase = kClutterBase; break; } toolMode = newMode; InvalWindowRect(toolsWindow, &toolsWindowRect); } #endif //-------------------------------------------------------------- HandleToolsClick void HandleToolsClick (Point wherePt) { #ifndef COMPILEDEMO ControlHandle theControl; short i, part, newMode, toolIcon; if (toolsWindow == nil) return; SetPortWindowPort(toolsWindow); GlobalToLocal(&wherePt); part = FindControl(wherePt, toolsWindow, &theControl); if ((theControl != nil) && (part != 0)) { part = TrackControl(theControl, wherePt, (ControlActionUPP)-1L); if (part != 0) { newMode = GetControlValue(theControl); if (newMode != toolMode) { EraseSelectedTool(); SwitchToolModes(newMode); } } } else { for (i = 0; i < kTotalTools; i++) if ((PtInRect(wherePt, &toolRects[i])) && (i <= lastTool)) { EraseSelectedTool(); toolIcon = i; if ((toolMode == kBlowerMode) && (toolIcon >= 7)) { toolIcon++; } if ((toolMode == kTransportMode) && (toolIcon >= 7)) { if (toolIcon >= 11) toolIcon += 4; else toolIcon = ((toolIcon - 7) * 2) + 7; } SelectTool(toolIcon); break; } } #endif } //-------------------------------------------------------------- NextToolMode void NextToolMode (void) { #ifndef COMPILEDEMO if (toolsWindow == nil) return; if ((theMode == kEditMode) && (toolMode < kClutterMode)) { EraseSelectedTool(); toolMode++; SetControlValue(classPopUp, toolMode); SwitchToolModes(toolMode); toolSelected = kSelectTool; } #endif } //-------------------------------------------------------------- PrevToolMode void PrevToolMode (void) { #ifndef COMPILEDEMO if (toolsWindow == nil) return; if ((theMode == kEditMode) && (toolMode > kBlowerMode)) { EraseSelectedTool(); toolMode--; SetControlValue(classPopUp, toolMode); SwitchToolModes(toolMode); toolSelected = kSelectTool; } #endif } //-------------------------------------------------------------- SetSpecificToolMode void SetSpecificToolMode (short modeToSet) { #ifndef COMPILEDEMO if ((toolsWindow == nil) || (theMode != kEditMode)) return; EraseSelectedTool(); toolMode = modeToSet; SetControlValue(classPopUp, toolMode); SwitchToolModes(toolMode); toolSelected = kSelectTool; #endif } \ No newline at end of file diff --git a/Sources/Transit.c b/Sources/Transit.c deleted file mode 100755 index 627c6ab..0000000 --- a/Sources/Transit.c +++ /dev/null @@ -1 +0,0 @@ - //============================================================================ //---------------------------------------------------------------------------- // Transit.c //---------------------------------------------------------------------------- //============================================================================ #include "Externs.h" #include "Environ.h" #include "RectUtils.h" void HandleRoomVisitation (void); short linkedToWhat; Boolean takingTheStairs, firstPlayer; extern Rect justRoomsRect, transRect; extern short transRoom, otherPlayerEscaped; extern short localNumbers[9]; extern Boolean topOpen, twoPlayerGame, onePlayerLeft; extern Boolean playerDead, playerSuicide, tvOn; //============================================================== Functions //-------------------------------------------------------------- WhatAreWeLinkedTo short WhatAreWeLinkedTo (short where, Byte who) { short what, whatType; char wasState; wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); what = (*thisHouse)->rooms[where].objects[who].what; HSetState((Handle)thisHouse, wasState); switch (what) { case kMailboxLf: whatType = kLinkedToLeftMailbox; break; case kMailboxRt: whatType = kLinkedToRightMailbox; break; case kCeilingTrans: whatType = kLinkedToCeilingDuct; break; default: whatType = kLinkedToOther; break; } return (whatType); } //-------------------------------------------------------------- ReadyGliderFromTransit void ReadyGliderFromTransit (gliderPtr thisGlider, short toWhat) { Rect tempRect; if ((twoPlayerGame) && (onePlayerLeft) && (thisGlider->which == playerDead)) return; FlagGliderNormal(thisGlider); switch (toWhat) { case kLinkedToOther: StartGliderTransportingIn(thisGlider); // set glider's mode tempRect = thisGlider->dest; // position glider CenterRectInRect(&tempRect, &transRect); thisGlider->dest.left = tempRect.left; thisGlider->dest.right = tempRect.right; thisGlider->dest.top = tempRect.top; thisGlider->dest.bottom = tempRect.bottom; thisGlider->destShadow.left = tempRect.left; thisGlider->destShadow.right = tempRect.right; thisGlider->whole = thisGlider->dest; thisGlider->wholeShadow = thisGlider->destShadow; thisGlider->enteredRect = thisGlider->dest; break; case kLinkedToLeftMailbox: StartGliderMailingOut(thisGlider); thisGlider->clip = transRect; // fix clip thisGlider->clip.right -= 64; thisGlider->clip.bottom -= 25; tempRect = thisGlider->dest; thisGlider->dest.left = thisGlider->clip.right; thisGlider->dest.right = thisGlider->dest.left; thisGlider->dest.bottom = thisGlider->clip.bottom - 4; thisGlider->dest.top = thisGlider->dest.bottom - RectTall(&tempRect); thisGlider->destShadow.left = thisGlider->dest.left; thisGlider->destShadow.right = thisGlider->dest.right; thisGlider->whole = thisGlider->dest; thisGlider->wholeShadow = thisGlider->destShadow; break; case kLinkedToRightMailbox: StartGliderMailingOut(thisGlider); thisGlider->clip = transRect; // fix clip thisGlider->clip.left += 79; thisGlider->clip.bottom -= 25; tempRect = thisGlider->dest; thisGlider->dest.right = thisGlider->clip.left; thisGlider->dest.left = thisGlider->dest.right; thisGlider->dest.bottom = thisGlider->clip.bottom - 4; thisGlider->dest.top = thisGlider->dest.bottom - RectTall(&tempRect); thisGlider->destShadow.left = thisGlider->dest.left; thisGlider->destShadow.right = thisGlider->dest.right; thisGlider->whole = thisGlider->dest; thisGlider->wholeShadow = thisGlider->destShadow; break; case kLinkedToCeilingDuct: StartGliderDuctingIn(thisGlider); tempRect = thisGlider->dest; // set glider's position CenterRectInRect(&tempRect, &transRect); thisGlider->dest.left = tempRect.left; thisGlider->dest.right = tempRect.right; thisGlider->dest.top = tempRect.top; thisGlider->dest.bottom = thisGlider->dest.top; QOffsetRect(&thisGlider->dest, 0, -RectTall(&tempRect)); thisGlider->destShadow.left = tempRect.left; thisGlider->destShadow.right = tempRect.right; thisGlider->whole = thisGlider->dest; thisGlider->wholeShadow = thisGlider->destShadow; break; case kLinkedToFloorDuct: break; default: break; } if ((twoPlayerGame) && (thisGlider->which != firstPlayer)) TagGliderIdle(thisGlider); } //-------------------------------------------------------------- MoveRoomToRoom void MoveRoomToRoom (gliderPtr thisGlider, short where) { Rect enterRect; HandleRoomVisitation(); switch (where) { case kToRight: SetMusicalMode(kProdGameScoreMode); if (twoPlayerGame) { UndoGliderLimbo(&theGlider); UndoGliderLimbo(&theGlider2); InsureGliderFacingRight(&theGlider); InsureGliderFacingRight(&theGlider2); } else InsureGliderFacingRight(thisGlider); ForceThisRoom(localNumbers[kEastRoom]); if (twoPlayerGame) { OffsetGlider(&theGlider, kToLeft); OffsetGlider(&theGlider2, kToLeft); QSetRect(&enterRect, 0, 0, 48, 20); QOffsetRect(&enterRect, 0, kGliderStartsDown + (short)thisRoom->leftStart - 2); theGlider.enteredRect = enterRect; theGlider2.enteredRect = enterRect; } else { OffsetGlider(thisGlider, kToLeft); QSetRect(&enterRect, 0, 0, 48, 20); QOffsetRect(&enterRect, 0, kGliderStartsDown + (short)thisRoom->leftStart - 2); thisGlider->enteredRect = enterRect; } break; case kToLeft: SetMusicalMode(kProdGameScoreMode); if (twoPlayerGame) { UndoGliderLimbo(&theGlider); UndoGliderLimbo(&theGlider2); InsureGliderFacingLeft(&theGlider); InsureGliderFacingLeft(&theGlider2); } else InsureGliderFacingLeft(thisGlider); ForceThisRoom(localNumbers[kWestRoom]); if (twoPlayerGame) { OffsetGlider(&theGlider, kToRight); OffsetGlider(&theGlider2, kToRight); QSetRect(&enterRect, 0, 0, 48, 20); QOffsetRect(&enterRect, kRoomWide - 48, kGliderStartsDown + (short)thisRoom->rightStart - 2); theGlider.enteredRect = enterRect; theGlider2.enteredRect = enterRect; } else { OffsetGlider(thisGlider, kToRight); QSetRect(&enterRect, 0, 0, 48, 20); QOffsetRect(&enterRect, kRoomWide - 48, kGliderStartsDown + (short)thisRoom->rightStart - 2); thisGlider->enteredRect = enterRect; } break; case kAbove: SetMusicalMode(kKickGameScoreMode); ForceThisRoom(localNumbers[kNorthRoom]); if (!takingTheStairs) { if (twoPlayerGame) { UndoGliderLimbo(&theGlider); UndoGliderLimbo(&theGlider2); OffsetGlider(&theGlider, kBelow); OffsetGlider(&theGlider2, kBelow); theGlider.enteredRect = theGlider.dest; theGlider2.enteredRect = theGlider2.dest; } else { OffsetGlider(thisGlider, kBelow); thisGlider->enteredRect = thisGlider->dest; } } else { if (twoPlayerGame) { ReadyGliderForTripUpStairs(&theGlider); ReadyGliderForTripUpStairs(&theGlider2); } else ReadyGliderForTripUpStairs(thisGlider); } break; case kBelow: SetMusicalMode(kKickGameScoreMode); ForceThisRoom(localNumbers[kSouthRoom]); if (!takingTheStairs) { if (twoPlayerGame) { UndoGliderLimbo(&theGlider); UndoGliderLimbo(&theGlider2); OffsetGlider(&theGlider, kAbove); OffsetGlider(&theGlider2, kAbove); theGlider.enteredRect = theGlider.dest; theGlider2.enteredRect = theGlider2.dest; } else { OffsetGlider(thisGlider, kAbove); thisGlider->enteredRect = thisGlider->dest; } } else { if (twoPlayerGame) { ReadyGliderForTripDownStairs(&theGlider); ReadyGliderForTripDownStairs(&theGlider2); } else ReadyGliderForTripDownStairs(thisGlider); } break; default: break; } if ((twoPlayerGame) && (!onePlayerLeft)) { if (firstPlayer == kPlayer1) TagGliderIdle(&theGlider2); else TagGliderIdle(&theGlider); } ReadyLevel(); RefreshScoreboard(kNormalTitleMode); WipeScreenOn(where, &justRoomsRect); #ifdef COMPILEQT RenderFrame(); if ((thisMac.hasQT) && (hasMovie) && (tvInRoom) && (tvOn)) { GoToBeginningOfMovie(theMovie); StartMovie(theMovie); } #endif } //-------------------------------------------------------------- TransportRoomToRoom void TransportRoomToRoom (gliderPtr thisGlider) { Boolean sameRoom; SetMusicalMode(kKickGameScoreMode); HandleRoomVisitation(); sameRoom = (transRoom == thisRoomNumber); if (!sameRoom) ForceThisRoom(transRoom); if (twoPlayerGame) { UndoGliderLimbo(&theGlider); // turn off limbo if needed UndoGliderLimbo(&theGlider2); // turn off limbo if needed ReadyGliderFromTransit(&theGlider, linkedToWhat); ReadyGliderFromTransit(&theGlider2, linkedToWhat); } else ReadyGliderFromTransit(thisGlider, linkedToWhat); if (!sameRoom) ReadyLevel(); RefreshScoreboard(kNormalTitleMode); if (!sameRoom) WipeScreenOn(kAbove, &justRoomsRect); #ifdef COMPILEQT RenderFrame(); if ((thisMac.hasQT) && (hasMovie) && (tvInRoom) && (tvOn)) { GoToBeginningOfMovie(theMovie); StartMovie(theMovie); } #endif } //-------------------------------------------------------------- MoveDuctToDuct void MoveDuctToDuct (gliderPtr thisGlider) { Boolean sameRoom; SetMusicalMode(kKickGameScoreMode); HandleRoomVisitation(); sameRoom = (transRoom == thisRoomNumber); if (!sameRoom) ForceThisRoom(transRoom); if (twoPlayerGame) { UndoGliderLimbo(&theGlider); // turn off limbo if needed UndoGliderLimbo(&theGlider2); // turn off limbo if needed ReadyGliderFromTransit(&theGlider, linkedToWhat); ReadyGliderFromTransit(&theGlider2, linkedToWhat); } else ReadyGliderFromTransit(thisGlider, linkedToWhat); if (!sameRoom) ReadyLevel(); RefreshScoreboard(kNormalTitleMode); if (!sameRoom) WipeScreenOn(kAbove, &justRoomsRect); #ifdef COMPILEQT RenderFrame(); if ((thisMac.hasQT) && (hasMovie) && (tvInRoom) && (tvOn)) { GoToBeginningOfMovie(theMovie); StartMovie(theMovie); } #endif } //-------------------------------------------------------------- MoveMailToMail void MoveMailToMail (gliderPtr thisGlider) { Boolean sameRoom; SetMusicalMode(kKickGameScoreMode); HandleRoomVisitation(); sameRoom = (transRoom == thisRoomNumber); if (!sameRoom) ForceThisRoom(transRoom); if (twoPlayerGame) { UndoGliderLimbo(&theGlider); // turn off limbo if needed UndoGliderLimbo(&theGlider2); // turn off limbo if needed ReadyGliderFromTransit(&theGlider, linkedToWhat); ReadyGliderFromTransit(&theGlider2, linkedToWhat); } else ReadyGliderFromTransit(thisGlider, linkedToWhat); if (!sameRoom) ReadyLevel(); RefreshScoreboard(kNormalTitleMode); if (!sameRoom) WipeScreenOn(kAbove, &justRoomsRect); #ifdef COMPILEQT RenderFrame(); if ((thisMac.hasQT) && (hasMovie) && (tvInRoom) && (tvOn)) { GoToBeginningOfMovie(theMovie); StartMovie(theMovie); } #endif } //-------------------------------------------------------------- HandleRoomVisitation void HandleRoomVisitation (void) { houseType *thisHousePtr; char wasState; if (!thisRoom->visited) { wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); thisHousePtr = *thisHouse; thisHousePtr->rooms[localNumbers[kCentralRoom]].visited = true; HSetState((Handle)thisHouse, wasState); theScore += kRoomVisitScore; thisRoom->visited = true; } } //-------------------------------------------------------------- ForceKillGlider void ForceKillGlider (void) { if (theGlider.mode == kGliderInLimbo) { if (theGlider2.mode != kGliderFadingOut) { StartGliderFadingOut(&theGlider2); PlayPrioritySound(kFadeOutSound, kFadeOutPriority); playerSuicide = true; } } else if (theGlider2.mode == kGliderInLimbo) { if (theGlider.mode != kGliderFadingOut) { StartGliderFadingOut(&theGlider); PlayPrioritySound(kFadeOutSound, kFadeOutPriority); playerSuicide = true; } } } //-------------------------------------------------------------- FollowTheLeader void FollowTheLeader (void) { short wasEscaped; Boolean oneOrTwo; playerSuicide = false; wasEscaped = otherPlayerEscaped; otherPlayerEscaped = kNoOneEscaped; if (theGlider.mode == kGliderInLimbo) { oneOrTwo = true; theGlider2.dest = theGlider.dest; theGlider2.destShadow = theGlider.destShadow; theGlider2.whole = theGlider2.dest; theGlider2.wholeShadow = theGlider2.destShadow; } else if (theGlider2.mode == kGliderInLimbo) { oneOrTwo = false; theGlider.dest = theGlider2.dest; theGlider.destShadow = theGlider2.destShadow; theGlider.whole = theGlider.dest; theGlider.wholeShadow = theGlider.destShadow; } switch (wasEscaped) { case kPlayerEscapedUp: case kPlayerEscapingUpStairs: case kPlayerEscapedUpStairs: if (oneOrTwo) MoveRoomToRoom(&theGlider2, kAbove); else MoveRoomToRoom(&theGlider, kAbove); break; case kPlayerEscapedDown: case kPlayerEscapingDownStairs: case kPlayerEscapedDownStairs: if (oneOrTwo) MoveRoomToRoom(&theGlider2, kBelow); else MoveRoomToRoom(&theGlider, kBelow); break; case kPlayerEscapedLeft: if (oneOrTwo) MoveRoomToRoom(&theGlider2, kToLeft); else MoveRoomToRoom(&theGlider, kToLeft); break; case kPlayerEscapedRight: if (oneOrTwo) MoveRoomToRoom(&theGlider2, kToRight); else MoveRoomToRoom(&theGlider, kToRight); break; case kPlayerTransportedOut: if (oneOrTwo) TransportRoomToRoom(&theGlider2); else TransportRoomToRoom(&theGlider); break; case kPlayerMailedOut: if (oneOrTwo) MoveMailToMail(&theGlider2); else MoveMailToMail(&theGlider); break; case kPlayerDuckedOut: if (oneOrTwo) MoveDuctToDuct(&theGlider2); else MoveDuctToDuct(&theGlider); break; default: break; } } \ No newline at end of file diff --git a/Sources/Transitions.c b/Sources/Transitions.c deleted file mode 100755 index 86ccef8..0000000 --- a/Sources/Transitions.c +++ /dev/null @@ -1 +0,0 @@ - //============================================================================ //---------------------------------------------------------------------------- // Transitions.c //---------------------------------------------------------------------------- //============================================================================ #include "Externs.h" #include "Environ.h" #include "MainWindow.h" #include "RectUtils.h" //============================================================== Functions //-------------------------------------------------------------- PourScreenOn void PourScreenOn (Rect *theRect) { #define kMaxColumnsWide 96 #define kChipHigh 20 #define kChipWide 16 Rect columnRects[kMaxColumnsWide]; short columnProgress[kMaxColumnsWide]; short i, colsComplete, colWide, rowTall; Boolean working; colWide = theRect->right / kChipWide; // determine # of cols rowTall = (theRect->bottom / kChipHigh) + 1; // determine # of rows working = true; colsComplete = 0; for (i = 0; i < colWide; i++) { columnProgress[i] = 0; QSetRect(&columnRects[i], 0, 0, kChipWide, kChipHigh); QOffsetRect(&columnRects[i], (i * kChipWide) + theRect->left, theRect->top); } while (working) { do { i = RandomInt(colWide); } while (columnProgress[i] >= rowTall); if (columnRects[i].left < theRect->left) columnRects[i].left = theRect->left; if (columnRects[i].top < theRect->top) columnRects[i].top = theRect->top; if (columnRects[i].right > theRect->right) columnRects[i].right = theRect->right; if (columnRects[i].bottom > theRect->bottom) columnRects[i].bottom = theRect->bottom; CopyBits((BitMap *)*GetGWorldPixMap(workSrcMap), GetPortBitMapForCopyBits(GetWindowPort(mainWindow)), &columnRects[i], &columnRects[i], srcCopy, nil); QOffsetRect(&columnRects[i], 0, kChipHigh); columnProgress[i]++; if (columnProgress[i] >= rowTall) { colsComplete++; if (colsComplete >= colWide) working = false; } } } //-------------------------------------------------------------- WipeScreenOn void WipeScreenOn (short direction, Rect *theRect) { #define kWipeRectThick 4 Rect wipeRect; RgnHandle dummyRgn; short hOffset, vOffset; short i, count; wipeRect = *theRect; switch (direction) { case kAbove: wipeRect.bottom = wipeRect.top + kWipeRectThick; hOffset = 0; vOffset = kWipeRectThick; count = ((theRect->bottom - theRect->top) / kWipeRectThick) + 1; break; case kToRight: wipeRect.left = wipeRect.right - kWipeRectThick; hOffset = -kWipeRectThick; vOffset = 0; count = workSrcRect.right / kWipeRectThick; break; case kBelow: wipeRect.top = wipeRect.bottom - kWipeRectThick; hOffset = 0; vOffset = -kWipeRectThick; count = ((theRect->bottom - theRect->top) / kWipeRectThick) + 1; break; case kToLeft: wipeRect.right = wipeRect.left + kWipeRectThick; hOffset = kWipeRectThick; vOffset = 0; count = workSrcRect.right / kWipeRectThick; break; } dummyRgn = NewRgn(); for (i = 0; i < count; i++) { CopyBits((BitMap *)*GetGWorldPixMap(workSrcMap), GetPortBitMapForCopyBits(GetWindowPort(mainWindow)), &wipeRect, &wipeRect, srcCopy, GetPortVisibleRegion(GetWindowPort(mainWindow), dummyRgn)); QOffsetRect(&wipeRect, hOffset, vOffset); if (wipeRect.top < theRect->top) wipeRect.top = theRect->top; else if (wipeRect.top > theRect->bottom) wipeRect.top = theRect->bottom; if (wipeRect.bottom < theRect->top) wipeRect.bottom = theRect->top; else if (wipeRect.bottom > theRect->bottom) wipeRect.bottom = theRect->bottom; } DisposeRgn(dummyRgn); } //-------------------------------------------------------------- DumpScreenOn void DumpScreenOn (Rect *theRect) { CopyBits((BitMap *)*GetGWorldPixMap(workSrcMap), GetPortBitMapForCopyBits(GetWindowPort(mainWindow)), theRect, theRect, srcCopy, nil); } \ No newline at end of file diff --git a/Sources/Triggers.c b/Sources/Triggers.c deleted file mode 100755 index 7e742e2..0000000 --- a/Sources/Triggers.c +++ /dev/null @@ -1 +0,0 @@ - //============================================================================ //---------------------------------------------------------------------------- // Triggers.c //---------------------------------------------------------------------------- //============================================================================ #include "Externs.h" #define kMaxTriggers 16 typedef struct { short object, room; short index, timer; short what; Boolean armed; } trigType, *trigPtr; short FindEmptyTriggerSlot (void); void FireTrigger (short); trigType triggers[kMaxTriggers]; //============================================================== Functions //-------------------------------------------------------------- ArmTrigger void ArmTrigger (hotPtr who) { short where, whoLinked; if (who->stillOver) return; where = FindEmptyTriggerSlot(); if (where != -1) { whoLinked = who->who; // what is trigger's obj. # triggers[where].room = masterObjects[whoLinked].roomLink; triggers[where].object = masterObjects[whoLinked].objectLink; triggers[where].index = whoLinked; triggers[where].timer = masterObjects[whoLinked].theObject.data.e.delay * 3; triggers[where].what = masterObjects[triggers[where].object].theObject.what; triggers[where].armed = true; } who->stillOver = true; } //-------------------------------------------------------------- FindEmptyTriggerSlot short FindEmptyTriggerSlot (void) { short where, i; where = -1; for (i = 0; i < kMaxTriggers; i++) { if (!triggers[i].armed) { where = i; break; } } return (where); } //-------------------------------------------------------------- HandleTriggers void HandleTriggers (void) { short i; for (i = 0; i < kMaxTriggers; i++) { if (triggers[i].armed) { triggers[i].timer--; if (triggers[i].timer <= 0) { triggers[i].timer = 0; triggers[i].armed = false; FireTrigger(i); } } } } //-------------------------------------------------------------- FireTrigger void FireTrigger (short index) { short triggerIs, triggeredIs; char wasState; triggerIs = triggers[index].index; if (masterObjects[triggerIs].localLink != -1) { triggeredIs = masterObjects[triggerIs].localLink; switch (masterObjects[triggeredIs].theObject.what) { case kGreaseRt: case kGreaseLf: if (SetObjectState(triggers[index].room, triggers[index].object, kForceOn, triggeredIs)) { SpillGrease(masterObjects[triggeredIs].dynaNum, masterObjects[triggeredIs].hotNum); } break; case kLightSwitch: case kMachineSwitch: case kThermostat: case kPowerSwitch: case kKnifeSwitch: case kInvisSwitch: TriggerSwitch(masterObjects[triggeredIs].dynaNum); break; case kSoundTrigger: PlayPrioritySound(kChordSound, kChordPriority); // Change me break; case kToaster: TriggerToast(masterObjects[triggeredIs].dynaNum); break; case kGuitar: PlayPrioritySound(kChordSound, kChordPriority); break; case kCoffee: PlayPrioritySound(kCoffeeSound, kCoffeePriority); break; case kOutlet: TriggerOutlet(masterObjects[triggeredIs].dynaNum); break; case kBalloon: TriggerBalloon(masterObjects[triggeredIs].dynaNum); break; case kCopterLf: case kCopterRt: TriggerCopter(masterObjects[triggeredIs].dynaNum); break; case kDartLf: case kDartRt: TriggerDart(masterObjects[triggeredIs].dynaNum); break; case kDrip: TriggerDrip(masterObjects[triggeredIs].dynaNum); break; case kFish: TriggerFish(masterObjects[triggeredIs].dynaNum); break; } } else { wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); triggeredIs = masterObjects[triggerIs].localLink; switch ((*thisHouse)->rooms[triggers[index].room]. objects[triggers[index].object].what) { case kGreaseRt: case kGreaseLf: if (SetObjectState(triggers[index].room, triggers[index].object, kForceOn, triggeredIs)) { SpillGrease(masterObjects[triggeredIs].dynaNum, masterObjects[triggeredIs].hotNum); } break; } HSetState((Handle)thisHouse, wasState); } } //-------------------------------------------------------------- ZeroTriggers void ZeroTriggers (void) { short i; for (i = 0; i < kMaxTriggers; i++) triggers[i].armed = false; } \ No newline at end of file diff --git a/Sources/Trip.c b/Sources/Trip.c deleted file mode 100755 index 18b5031..0000000 --- a/Sources/Trip.c +++ /dev/null @@ -1 +0,0 @@ - //============================================================================ //---------------------------------------------------------------------------- // Trip.c //---------------------------------------------------------------------------- //============================================================================ #include "Externs.h" #include "Environ.h" extern dynaPtr dinahs; extern hotPtr hotSpots; extern short numDynamics, tvWithMovieNumber; extern Boolean tvOn; //============================================================== Functions //-------------------------------------------------------------- ToggleToaster void ToggleToaster (short index) { dinahs[index].active = !dinahs[index].active; } //-------------------------------------------------------------- ToggleMacPlus void ToggleMacPlus (short index) { dinahs[index].active = !dinahs[index].active; if (dinahs[index].active) dinahs[index].timer = 40; else dinahs[index].timer = 10; } //-------------------------------------------------------------- ToggleTV void ToggleTV (short index) { dinahs[index].active = !dinahs[index].active; if ((thisMac.hasQT) && (hasMovie) && (tvInRoom) && (tvWithMovieNumber == index)) { if (dinahs[index].active) { GoToBeginningOfMovie(theMovie); StartMovie(theMovie); tvOn = true; } else { StopMovie(theMovie); tvOn = false; } } dinahs[index].timer = 4; } //-------------------------------------------------------------- ToggleCoffee void ToggleCoffee (short index) { dinahs[index].active = !dinahs[index].active; dinahs[index].timer = 4; } //-------------------------------------------------------------- ToggleOutlet void ToggleOutlet (short index) { dinahs[index].active = !dinahs[index].active; } //-------------------------------------------------------------- ToggleVCR void ToggleVCR (short index) { dinahs[index].active = !dinahs[index].active; dinahs[index].timer = 4; } //-------------------------------------------------------------- ToggleStereo void ToggleStereos (short index) { if (dinahs[index].timer == 0) { dinahs[index].active = !dinahs[index].active; dinahs[index].timer = 4; } } //-------------------------------------------------------------- ToggleMicrowave void ToggleMicrowave (short index) { dinahs[index].active = !dinahs[index].active; dinahs[index].timer = 4; } //-------------------------------------------------------------- ToggleBalloon void ToggleBalloon (short index) { dinahs[index].active = !dinahs[index].active; } //-------------------------------------------------------------- ToggleCopter void ToggleCopter (short index) { dinahs[index].active = !dinahs[index].active; } //-------------------------------------------------------------- ToggleDart void ToggleDart (short index) { dinahs[index].active = !dinahs[index].active; } //-------------------------------------------------------------- ToggleBall void ToggleBall (short index) { dinahs[index].active = !dinahs[index].active; } //-------------------------------------------------------------- ToggleDrip void ToggleDrip (short index) { dinahs[index].active = !dinahs[index].active; } //-------------------------------------------------------------- ToggleFish void ToggleFish (short index) { dinahs[index].active = !dinahs[index].active; } //-------------------------------------------------------------- TriggerSwitch void TriggerSwitch (short who) { HandleSwitches(&hotSpots[who]); } //-------------------------------------------------------------- TriggerToast void TriggerToast (short who) { if (!dinahs[who].moving) { if (dinahs[who].active) { dinahs[who].vVel = (short)-dinahs[who].count; dinahs[who].frame = 0; dinahs[who].moving = true; PlayPrioritySound(kToastLaunchSound, kToastLaunchPriority); } else dinahs[who].frame = dinahs[who].timer; } } //-------------------------------------------------------------- TriggerOutlet void TriggerOutlet (short who) { if (dinahs[who].position == 0) { if (dinahs[who].active) { dinahs[who].position = 1; dinahs[who].timer = kLengthOfZap; PlayPrioritySound(kZapSound, kZapPriority); } else dinahs[who].timer = dinahs[who].count; } } //-------------------------------------------------------------- TriggerDrip void TriggerDrip (short who) { if ((!dinahs[who].moving) && (dinahs[who].timer > 7)) dinahs[who].timer = 7; // kick off drip } //-------------------------------------------------------------- TriggerFish void TriggerFish (short who) { if ((dinahs[who].active) && (!dinahs[who].moving)) { dinahs[who].whole = dinahs[who].dest; dinahs[who].moving = true; dinahs[who].frame = 4; PlayPrioritySound(kFishOutSound, kFishOutPriority); } } //-------------------------------------------------------------- TriggerBalloon void TriggerBalloon (short who) { if (!dinahs[who].moving) dinahs[who].timer = kStartSparkle + 1; } //-------------------------------------------------------------- TriggerCopter void TriggerCopter (short who) { if (!dinahs[who].moving) dinahs[who].timer = kStartSparkle + 1; } //-------------------------------------------------------------- TriggerDart void TriggerDart (short who) { if (!dinahs[who].moving) dinahs[who].timer = kStartSparkle + 1; } //-------------------------------------------------------------- UpdateOutletsLighting void UpdateOutletsLighting (short room, short nLights) { short i; for (i = 0; i < numDynamics; i++) { if ((dinahs[i].type == kOutlet) && (dinahs[i].room == room)) dinahs[i].hVel = nLights; } } \ No newline at end of file diff --git a/Sources/Utilities.c b/Sources/Utilities.c deleted file mode 100755 index 533cb5f..0000000 --- a/Sources/Utilities.c +++ /dev/null @@ -1 +0,0 @@ -//============================================================================ //---------------------------------------------------------------------------- // Utilities.c //---------------------------------------------------------------------------- //============================================================================ #include #include #include #include #include #include #include "Externs.h" #include "Utilities.h" GDHandle thisGDevice; UInt32 theSeed; extern Boolean switchedOut; //============================================================== Functions //-------------------------------------------------------------- MyGetGlobalMouse // Returns the position of the mouse in global coordinates. Point MyGetGlobalMouse (void) { Point localWhere; GetMouse(&localWhere); LocalToGlobal(&localWhere); return (localWhere); } //-------------------------------------------------------------- ToolBoxInit // The standard ToolBox intialization that must happen when any MacÉ // program first launches. void ToolBoxInit (void) { #if !TARGET_CARBON InitGraf(&qd.thePort); InitFonts(); FlushEvents(everyEvent, 0); InitWindows(); InitMenus(); TEInit(); InitDialogs(nil); MaxApplZone(); MoreMasters(); MoreMasters(); MoreMasters(); MoreMasters(); GetDateTime((UInt32 *)&qd.randSeed); #endif InitCursor(); switchedOut = false; } //-------------------------------------------------------------- RandomInt // Returns a random integer (short) within "range". short RandomInt (short range) { register long rawResult; rawResult = Random(); if (rawResult < 0L) rawResult *= -1L; rawResult = (rawResult * (long)range) / 32768L; return ((short)rawResult); } //-------------------------------------------------------------- RandomLong // Returns a random long interger within "range". long RandomLong (long range) { register long highWord, lowWord; register long rawResultHi, rawResultLo; highWord = (range & 0xFFFF0000) >> 16; lowWord = range & 0x0000FFFF; rawResultHi = Random(); if (rawResultHi < 0L) rawResultHi *= -1L; rawResultHi = (rawResultHi * highWord) / 32768L; rawResultLo = Random(); if (rawResultLo < 0L) rawResultLo *= -1L; rawResultLo = (rawResultLo * lowWord) / 32768L; rawResultHi = (rawResultHi << 16) + rawResultLo; return (rawResultHi); } //-------------------------------------------------------------- InitRandomLongQUS // Initializes random seed for quick & dirty long random number function (below). void InitRandomLongQUS (void) { GetDateTime(&theSeed); } //-------------------------------------------------------------- RandomLongQUS // Very simple (but fast) pseudo-random number generator. UInt32 RandomLongQUS (void) { theSeed = theSeed * 1103515245 + 12345; return (theSeed); } //-------------------------------------------------------------- RedAlert // Called when we must quit app. Brings up a dialog informing userÉ // of the problem and the exits to shell. void RedAlert (short errorNumber) { #define rDeathAlertID 170 // alert res. ID for death error #define rErrTitleID 170 // string ID for death error title #define rErrMssgID 171 // string ID for death error message short dummyInt; Str255 errTitle, errMessage, errNumberString; InitCursor(); if (errorNumber > 1) // <= 0 is unaccounted for { GetIndString(errTitle, rErrTitleID, errorNumber); GetIndString(errMessage, rErrMssgID, errorNumber); } else { GetIndString(errTitle, rErrTitleID, 1); GetIndString(errMessage, rErrMssgID, 1); } NumToString((long)errorNumber, errNumberString); ParamText(errTitle, errMessage, errNumberString, "\p"); // CenterAlert(rDeathAlertID); dummyInt = Alert(rDeathAlertID, nil); ExitToShell(); } //-------------------------------------------------------------- FindOurDevice // Finds the main device (monitor with the menu bar on it). void FindOurDevice (void) { thisGDevice = GetMainDevice(); if (thisGDevice == nil) RedAlert(kErrFailedGetDevice); } //-------------------------------------------------------------- CreateOffScreenBitMap // Creates an offscreen bit map (b&w - 1 bit depth). /* void CreateOffScreenBitMap (Rect *theRect, GrafPtr *offScreen) { GrafPtr theBWPort; BitMap theBitMap; long theRowBytes; theBWPort = (GrafPtr)(NewPtr(sizeof(GrafPort))); OpenPort(theBWPort); theRowBytes = (long)((theRect->right - theRect->left + 15L) / 16L) * 2L; theBitMap.rowBytes = (short)theRowBytes; theBitMap.baseAddr = NewPtr((long)theBitMap.rowBytes * (theRect->bottom - theRect->top)); if (theBitMap.baseAddr == nil) RedAlert(kErrNoMemory); theBitMap.bounds = *theRect; if (MemError() != noErr) RedAlert(kErrNoMemory); SetPortBits(&theBitMap); ClipRect(theRect); RectRgn(theBWPort->visRgn, theRect); EraseRect(theRect); *offScreen = theBWPort; } */ //-------------------------------------------------------------- CreateOffScreenPixMap // Creates an offscreen pix map using the depth of the current device. /* void CreateOffScreenPixMap (Rect *theRect, CGrafPtr *offScreen) { CTabHandle thisColorTable; GDHandle oldDevice; CGrafPtr newCGrafPtr; Ptr theseBits; long sizeOfOff, offRowBytes; OSErr theErr; short thisDepth; char wasState; oldDevice = GetGDevice(); SetGDevice(thisGDevice); newCGrafPtr = nil; newCGrafPtr = (CGrafPtr)NewPtr(sizeof(CGrafPort)); if (newCGrafPtr != nil) { OpenCPort(newCGrafPtr); thisDepth = (**(*newCGrafPtr).portPixMap).pixelSize; offRowBytes = ((((long)thisDepth * (long)(theRect->right - theRect->left)) + 15L) >> 4L) << 1L; sizeOfOff = (long)(theRect->bottom - theRect->top + 1) * offRowBytes; // sizeOfOff = (long)(theRect->bottom - theRect->top) * offRowBytes; OffsetRect(theRect, -theRect->left, -theRect->top); theseBits = NewPtr(sizeOfOff); if (theseBits != nil) { // workaround (**(*newCGrafPtr).portPixMap).baseAddr = theseBits + offRowBytes; // (**(*newCGrafPtr).portPixMap).baseAddr = theseBits; (**(*newCGrafPtr).portPixMap).rowBytes = (short)offRowBytes + 0x8000; (**(*newCGrafPtr).portPixMap).bounds = *theRect; wasState = HGetState((Handle)thisGDevice); HLock((Handle)thisGDevice); thisColorTable = (**(**thisGDevice).gdPMap).pmTable; HSetState((Handle)thisGDevice, wasState); theErr = HandToHand((Handle *)&thisColorTable); (**(*newCGrafPtr).portPixMap).pmTable = thisColorTable; ClipRect(theRect); RectRgn(newCGrafPtr->visRgn, theRect); ForeColor(blackColor); BackColor(whiteColor); EraseRect(theRect); } else { CloseCPort(newCGrafPtr); DisposePtr((Ptr)newCGrafPtr); newCGrafPtr = nil; RedAlert(kErrNoMemory); } } else RedAlert(kErrNoMemory); *offScreen = newCGrafPtr; SetGDevice(oldDevice); } */ //-------------------------------------------------------------------- CreateOffScreenGWorld // Creates an offscreen GWorldÊusing the depth passed in. OSErr CreateOffScreenGWorld (GWorldPtr *theGWorld, Rect *bounds, short depth) { OSErr theErr; theErr = NewGWorld(theGWorld, depth, bounds, nil, nil, useTempMem); if (theErr) theErr = NewGWorld(theGWorld, depth, bounds, nil, nil, 0); LockPixels(GetGWorldPixMap(*theGWorld)); return theErr; } //-------------------------------------------------------------- KillOffScreenPixMap // Destroys memory allocated by an offscreen pix map. /* void KillOffScreenPixMap (CGrafPtr offScreen) { Ptr theseBits; if (offScreen != nil) { theseBits = (**(*offScreen).portPixMap).baseAddr; theseBits -= (**(*offScreen).portPixMap).rowBytes & 0x7FFF; // workaround DisposePtr(theseBits); DisposeHandle((Handle)(**(*offScreen).portPixMap).pmTable); CloseCPort(offScreen); DisposePtr((Ptr)offScreen); } } */ //-------------------------------------------------------------- KillOffScreenBitMap // Destroys memory allocated by an offscreen bit map. /* void KillOffScreenBitMap (GrafPtr offScreen) { if (offScreen != nil) { DisposePtr((Ptr)(offScreen->portBits.baseAddr)); ClosePort(offScreen); DisposePtr((Ptr)offScreen); } } */ //-------------------------------------------------------------- LoadGraphic // Function loads the specified 'PICT' from disk and draws it toÉ // the current port (no scaling, clipping, etc, are done). AlwaysÉ // draws in the upper left corner of current port. void LoadGraphic (short resID) { Rect bounds; PicHandle thePicture; thePicture = GetPicture(resID); if (thePicture == nil) RedAlert(kErrFailedGraphicLoad); HLock((Handle)thePicture); bounds = (*thePicture)->picFrame; HUnlock((Handle)thePicture); OffsetRect(&bounds, -bounds.left, -bounds.top); DrawPicture(thePicture, &bounds); ReleaseResource((Handle)thePicture); } //-------------------------------------------------------------- LoadScaledGraphic // Loads the specified 'PICT' and draws it mapped to the rectangleÉ // specified. If this rect isn't the same size of the 'PICT', scalingÉ // will occur. void LoadScaledGraphic (short resID, Rect *theRect) { PicHandle thePicture; thePicture = GetPicture(resID); if (thePicture == nil) RedAlert(kErrFailedGraphicLoad); DrawPicture(thePicture, theRect); ReleaseResource((Handle)thePicture); } //-------------------------------------------------------------- PlotSICN // Draws a small icon (16 x 16 pixels). /* void PlotSICN (Rect *theRect, SICNHand theSICN, long theIndex) { char state; BitMap srcBits; if ((theSICN != nil) && ((GetHandleSize((Handle)theSICN) / sizeof(SICN)) > theIndex)) { state = HGetState((Handle)theSICN); HLock((Handle)theSICN); srcBits.baseAddr = (Ptr)(*theSICN)[theIndex]; srcBits.rowBytes = 2; SetRect(&srcBits.bounds, 0, 0, 16, 16); CopyBits(&srcBits,&(*qd.thePort).portBits, &srcBits.bounds, theRect, srcCopy, nil); HSetState((Handle) theSICN, state); } } */ //-------------------------------------------------------------- LargeIconPlot // Draws a standard b&w icon (32 x 32) - resource is an 'ICON'. void LargeIconPlot (Rect *theRect, short theID) { OSErr theErr; Handle theSuite; theErr = GetIconSuite(&theSuite, theID, svAllLargeData); if (theErr == noErr) theErr = PlotIconSuite(theRect, atNone, ttNone, theSuite); } //-------------------------------------------------------------- DrawCIcon // Draws a standard color icon (32 x 32) - resource is a 'CICN'. void DrawCIcon (short theID, short h, short v) { CIconHandle theIcon; Rect theRect; theIcon = GetCIcon(theID); if (theIcon != nil) { SetRect(&theRect, 0, 0, 32, 32); OffsetRect(&theRect, h, v); PlotCIcon(&theRect, theIcon); DisposeCIcon(theIcon); } } //-------------------------------------------------------------- LongSquareRoot // This is a quick and dirty square root function that returns prettyÉ // accurate long integer results. It uses no transcendental functions orÉ // floating point. long LongSquareRoot (long theNumber) { long currentAnswer; long nextTrial; if (theNumber <= 1L) return (theNumber); nextTrial = theNumber / 2; do { currentAnswer = nextTrial; nextTrial = (nextTrial + theNumber / nextTrial) / 2; } while (nextTrial < currentAnswer); return(currentAnswer); } //-------------------------------------------------------------- WaitForInputEvent // Wait for either a key to be hit or the mouse button to be clicked. // Also has a "timeout" parameter ("seconds"). Boolean WaitForInputEvent (short seconds) { EventRecord theEvent; KeyMap theKeys; long timeToBail; Boolean waiting, didResume; timeToBail = TickCount() + 60L * (long)seconds; FlushEvents(everyEvent, 0); waiting = true; didResume = false; while (waiting) { GetKeys(theKeys); if ((BitTst(&theKeys, kCommandKeyMap)) || (BitTst(&theKeys, kOptionKeyMap)) || (BitTst(&theKeys, kShiftKeyMap)) || (BitTst(&theKeys, kControlKeyMap))) waiting = false; if (GetNextEvent(everyEvent, &theEvent)) { if ((theEvent.what == mouseDown) || (theEvent.what == keyDown)) waiting = false; else if ((theEvent.what == osEvt) && (theEvent.message & 0x01000000)) { if (theEvent.message & 0x00000001) // resuming { didResume = true; waiting = false; } else // suspending { InitCursor(); } } } if ((seconds != -1) && (TickCount() >= timeToBail)) waiting = false; } FlushEvents(everyEvent, 0); return (didResume); } //-------------------------------------------------------------- WaitCommandQReleased // Waits until the Command-Q key combination is released. void WaitCommandQReleased (void) { KeyMap theKeys; Boolean waiting; waiting = true; while (waiting) { GetKeys(theKeys); if ((!BitTst(&theKeys, kCommandKeyMap)) || (!BitTst(&theKeys, kQKeyMap))) waiting = false; } FlushEvents(everyEvent, 0); } //-------------------------------------------------------------- KeyMapOffsetFromRawKey // Converts a raw key code to keymap offset (ugly stuff). char KeyMapOffsetFromRawKey (char rawKeyCode) { char hiByte, loByte, theOffset; hiByte = rawKeyCode & 0xF0; loByte = rawKeyCode & 0x0F; if (loByte <= 0x07) theOffset = hiByte + (0x07 - loByte); else theOffset = hiByte + (0x17 - loByte); return (theOffset); } //-------------------------------------------------------------- GetKeyMapFromMessage // Gets the key map offset from a keyDown event's message field. char GetKeyMapFromMessage (long message) { long theVirtual; char offset; theVirtual = (message & keyCodeMask) >> 8; offset = KeyMapOffsetFromRawKey((char)theVirtual); return (offset); } //-------------------------------------------------------------- GetKeyName // Given a keyDown event (it's message field), this function returnsÉ // a string with that key's name (so we get "Shift" and "Esc", etc.). void GetKeyName (long message, StringPtr theName) { long theASCII, theVirtual; theASCII = message & charCodeMask; theVirtual = (message & keyCodeMask) >> 8; if ((theASCII >= kExclamationASCII) && (theASCII <= kZKeyASCII)) { if ((theVirtual >= 0x0041) && (theVirtual <= 0x005C)) { PasStringCopy("\p( )", theName); theName[2] = (char)theASCII; } else { PasStringCopy("\p key", theName); theName[1] = (char)theASCII; } } else { switch (theASCII) { case kHomeKeyASCII: PasStringCopy("\phome", theName); break; case kEnterKeyASCII: PasStringCopy("\penter", theName); break; case kEndKeyASCII: PasStringCopy("\pend", theName); break; case kHelpKeyASCII: PasStringCopy("\phelp", theName); break; case kDeleteKeyASCII: PasStringCopy("\pdelete", theName); break; case kTabKeyASCII: PasStringCopy("\ptab", theName); break; case kPageUpKeyASCII: PasStringCopy("\ppg up", theName); break; case kPageDownKeyASCII: PasStringCopy("\ppg dn", theName); break; case kReturnKeyASCII: PasStringCopy("\preturn", theName); break; case kFunctionKeyASCII: switch (theVirtual) { case 0x0060: PasStringCopy("\pF5", theName); break; case 0x0061: PasStringCopy("\pF6", theName); break; case 0x0062: PasStringCopy("\pF7", theName); break; case 0x0063: PasStringCopy("\pF3", theName); break; case 0x0064: PasStringCopy("\pF8", theName); break; case 0x0065: PasStringCopy("\pF9", theName); break; case 0x0067: PasStringCopy("\pF11", theName); break; case 0x0069: PasStringCopy("\pF13", theName); break; case 0x006B: PasStringCopy("\pF14", theName); break; case 0x006D: PasStringCopy("\pF10", theName); break; case 0x006F: PasStringCopy("\pF12", theName); break; case 0x0071: PasStringCopy("\pF15", theName); break; case 0x0076: PasStringCopy("\pF4", theName); break; case 0x0078: PasStringCopy("\pF2", theName); break; case 0x007A: PasStringCopy("\pF1", theName); break; default: NumToString(theVirtual, theName); break; } break; case kClearKeyASCII: PasStringCopy("\pclear", theName); break; case kEscapeKeyASCII: if (theVirtual == 0x0047) PasStringCopy("\pclear", theName); else PasStringCopy("\pesc", theName); break; case kLeftArrowKeyASCII: PasStringCopy("\plf arrow", theName); break; case kRightArrowKeyASCII: PasStringCopy("\prt arrow", theName); break; case kUpArrowKeyASCII: PasStringCopy("\pup arrow", theName); break; case kDownArrowKeyASCII: PasStringCopy("\pdn arrow", theName); break; case kSpaceBarASCII: PasStringCopy("\pspace", theName); break; case kForwardDeleteASCII: PasStringCopy("\pfrwd del", theName); break; default: PasStringCopy("\p????", theName); break; } } } //-------------------------------------------------------------- OptionKeyDown // Returns true is the Option key is being held down. Boolean OptionKeyDown (void) { KeyMap theKeys; GetKeys(theKeys); if (BitTst(&theKeys, kOptionKeyMap)) return (true); else return (false); } //-------------------------------------------------------------- ExtractCTSeed // Very esoteric - gets the "color table seed" from a specified graf port. /* long ExtractCTSeed (CGrafPtr porter) { long theSeed; theSeed = (**((**(porter->portPixMap)).pmTable)).ctSeed; return(theSeed); } */ //-------------------------------------------------------------- ForceCTSeed // Forces the "color table seed" from a specified graf port to aÉ // specified value. /* void ForceCTSeed (CGrafPtr porter, long newSeed) { (**((**(porter->portPixMap)).pmTable)).ctSeed = newSeed; } */ //-------------------------------------------------------------- DelayTicks // Lil' function that just sits and waits a specified number ofÉ // Ticks (1/60 of a second). void DelayTicks (long howLong) { UInt32 whoCares; Delay(howLong, &whoCares); } //-------------------------------------------------------------- UnivGetSoundVolume // Returns the speaker volume (as set by the user) in the range ofÉ // zero to seven (handles Sound Manager 3 case as well). void UnivGetSoundVolume (short *volume, Boolean hasSM3) { #pragma unused (hasSM3) long longVol; OSErr theErr; // if (hasSM3) // { theErr = GetDefaultOutputVolume(&longVol); *volume = LoWord(longVol) / 0x0024; // } // else // GetSoundVol(volume); if (*volume > 7) *volume = 7; else if (*volume < 0) *volume = 0; } //-------------------------------------------------------------- UnivSetSoundVolume // Sets the speaker volume to a specified value (in the range ofÉ // zero to seven (handles Sound Manager 3 case as well). void UnivSetSoundVolume (short volume, Boolean hasSM3) { #pragma unused (hasSM3) long longVol; OSErr theErr; if (volume > 7) volume = 7; else if (volume < 0) volume = 0; // if (hasSM3) // { longVol = (long)volume * 0x0025; if (longVol > 0x00000100) longVol = 0x00000100; longVol = longVol + (longVol << 16); theErr = SetDefaultOutputVolume(longVol); // } // else // SetSoundVol(volume); } \ No newline at end of file diff --git a/Sources/WindowUtils.c b/Sources/WindowUtils.c deleted file mode 100755 index c0d1d72..0000000 --- a/Sources/WindowUtils.c +++ /dev/null @@ -1 +0,0 @@ - //============================================================================ //---------------------------------------------------------------------------- // WindowUtils.c //---------------------------------------------------------------------------- //============================================================================ #include "Externs.h" #include "Environ.h" #include "RectUtils.h" #define kFloatingKind 2048 #define kMessageWindowTall 48 WindowPtr mssgWindow; //============================================================== Functions //-------------------------------------------------------------- GetWindowTopLeft // Returns the top left coordinate of the specified window. CorrdinatesÉ // are (of course) global (local coordinates would always be (0, 0)). void GetWindowLeftTop (WindowPtr theWindow, short *left, short *top) { Point thePoint; Rect bounds; *left = 0; *top = 0; if (theWindow != nil) { SetPortWindowPort(theWindow); GetWindowBounds(theWindow, kWindowContentRgn, &bounds); thePoint.h = bounds.left; thePoint.v = bounds.top; LocalToGlobal(&thePoint); *left = thePoint.h; *top = thePoint.v; } } //-------------------------------------------------------------- GetWindowRect // Returns bounding rectangle of the specified window in global coords. void GetWindowRect (WindowPtr theWindow, Rect *bounds) { if (theWindow != nil) { SetPortWindowPort(theWindow); GetWindowBounds(theWindow, kWindowContentRgn, bounds); LocalToGlobalRect(bounds); } } //-------------------------------------------------------------- GetLocalWindowRect // Returns bounding rectangle of the specified window in local coords. // (When you just need its width and height.) void GetLocalWindowRect (WindowPtr theWindow, Rect *bounds) { if (theWindow != nil) { SetPortWindowPort(theWindow); GetWindowBounds(theWindow, kWindowContentRgn, bounds); } } //-------------------------------------------------------------- FlagWindowFloating // Sets the specified window's windowKind field to my own kFloatingKindÉ // variable. This way I can examine a window later and determine ifÉ // it's supposed to "float" above all other windows. /* void FlagWindowFloating (WindowPtr theWindow) { if (theWindow != nil) { ((WindowPeek)theWindow)->windowKind = kFloatingKind; BringToFront(theWindow); } } //-------------------------------------------------------------- IsWindowFloating // Tests a specific window to see if it is supposed to "float" above allÉ // other windows. Boolean IsWindowFloating (WindowPtr theWindow) { if (theWindow != nil) { return (((WindowPeek)theWindow)->windowKind == kFloatingKind); } else return (false); } */ //-------------------------------------------------------------- OpenMessageWindow // Brings up a simple message window. Nice sort of utility function. // Anytime you want a small, quick message to come up, call this. void OpenMessageWindow (StringPtr title) { Rect mssgWindowRect; SetRect(&mssgWindowRect, 0, 0, 256, kMessageWindowTall); if (thisMac.hasColor) mssgWindow = NewCWindow(nil, &mssgWindowRect, title, false, noGrowDocProc, kPutInFront, false, 0L); else mssgWindow = NewWindow(nil, &mssgWindowRect, title, false, noGrowDocProc, kPutInFront, false, 0L); if (mssgWindow != nil) { ShowWindow(mssgWindow); SetPort((GrafPtr)mssgWindow); ClipRect(&mssgWindowRect); ForeColor(blackColor); BackColor(whiteColor); TextFont(systemFont); } } //-------------------------------------------------------------- SetMessageWindowMessage // For the above message window, this function displays a string of textÉ // in the center of the window. void SetMessageWindowMessage (StringPtr message) { Rect mssgWindowRect; if (mssgWindow != nil) { SetPort((GrafPtr)mssgWindow); SetRect(&mssgWindowRect, 0, 0, 256, kMessageWindowTall); InsetRect(&mssgWindowRect, 16, 16); EraseRect(&mssgWindowRect); MoveTo(mssgWindowRect.left, mssgWindowRect.bottom - 6); DrawString(message); } } //-------------------------------------------------------------- CloseMessageWindow // Closes the previously referred to "message window". void CloseMessageWindow (void) { if (mssgWindow != nil) DisposeWindow(mssgWindow); mssgWindow = nil; } //-------------------------------------------------------------- CloseThisWindow // Given a specific window, this function will close it and set the windowÉ // pointer to null. void CloseThisWindow (WindowPtr *theWindow) { if (*theWindow != nil) DisposeWindow(*theWindow); *theWindow = nil; } \ No newline at end of file diff --git a/hqx2bin/hqx2bin.aps b/hqx2bin/hqx2bin.aps new file mode 100644 index 0000000000000000000000000000000000000000..9f64a7c703c27738977973b3f1c0a521a42e9ce7 GIT binary patch literal 1308 zcmb7D&2G~`5dI9ggr5rs&Ti?Um1yLI3PEqdc8Wz}N3oL@$&y85i&#oy)lHN>01v~X z0OBPoE<6NM_;zDw69TPRYxZa6n{URmI{=_l7K^2DyDlpplxr;?;vpT6C;@DoadzOsL>qlr)TkH+ zRE#{ilJvC^@bpgqdqe>1{?F3Ma6F3>eRrNtNLCx|K7K$9Q@b1XCRgJ$5E*gvcv z;1HVpA2I*nV=2ZjuA6oEDlMY+WgQm9s8%c-BZQ9(GvpW|fzF%H5OWve1Y@Lf-=!|c zl)4cvag7GfX_@ex6M41fUn4@inB}NeOc|j|T!xRFKj4BfTJ#=EPaXT@dxe)cAls>A zjftI;RmVG?r`(0Cfx+2f%ppBzMTSCKlTs%`1F!jsb4bJm=egut=D5tPwN;;QTlER} z7#!DZ_bomGY2D)=t!o>9)xKD11s-^={dpIv56Zg`{cKTg>u1rQpDF*-pQ0y!-s+=r vAxsY0d(8RYakhK!hMpmPRQ{^(3R;La88e*1s5e<+#JzkXy~3z_DKWnR!TRUT literal 0 HcmV?d00001 diff --git a/hqx2bin/hqx2bin.cpp b/hqx2bin/hqx2bin.cpp new file mode 100644 index 0000000..270811f --- /dev/null +++ b/hqx2bin/hqx2bin.cpp @@ -0,0 +1,76 @@ +#include + +/* +Copyright 2019 Eric Lasota + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +#include "CFileStream.h" +#include "ScopedPtr.h" +#include "BinHex4.h" +#include "MacBinary2.h" +#include "MacFileMem.h" + +using namespace PortabilityLayer; + +int main(int argc, const char **argv) +{ + if (argc != 3) + { + fprintf(stderr, "Usage: hqx2bin "); + return -1; + } + +#ifdef _CRT_INSECURE_DEPRECATE + FILE *f = nullptr; + if (fopen_s(&f, argv[1], "rb")) + f = nullptr; +#else + FILE *f = fopen(argv[1], "rb"); +#endif + + if (!f) + { + fprintf(stderr, "Could not open input file"); + return -1; + } + + CFileStream fs(f, true, false, true); + + ScopedPtr memFile = BinHex4::LoadHQX(&fs); + + fs.Close(); + +#ifdef _CRT_INSECURE_DEPRECATE + FILE *outF = nullptr; + if (fopen_s(&outF, argv[2], "wb")) + outF = nullptr; +#else + FILE *outF = fopen(argv[2], "wb"); +#endif + + CFileStream outFS(outF, false, true, true); + + MacBinary2::WriteBin(memFile, &outFS); + + outFS.Close(); + + return 0; +} diff --git a/hqx2bin/hqx2bin.vcxproj b/hqx2bin/hqx2bin.vcxproj new file mode 100644 index 0000000..ea4d9f0 --- /dev/null +++ b/hqx2bin/hqx2bin.vcxproj @@ -0,0 +1,136 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 15.0 + {45B1B18C-C846-4044-9206-74F58DFC5E88} + hqx2bin + 10.0.16299.0 + + + + Application + true + v141 + MultiByte + + + Application + false + v141 + true + MultiByte + + + Application + true + v141 + MultiByte + + + Application + false + v141 + true + MultiByte + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Level3 + Disabled + true + true + + + + + Level3 + Disabled + true + true + + + + + Level3 + MaxSpeed + true + true + true + true + + + true + true + + + + + Level3 + MaxSpeed + true + true + true + true + + + true + true + + + + + + + + {6ec62b0f-9353-40a4-a510-3788f1368b33} + + + + + + \ No newline at end of file diff --git a/hqx2bin/hqx2bin.vcxproj.filters b/hqx2bin/hqx2bin.vcxproj.filters new file mode 100644 index 0000000..764ae5e --- /dev/null +++ b/hqx2bin/hqx2bin.vcxproj.filters @@ -0,0 +1,22 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Source Files + + + \ No newline at end of file diff --git a/hqx2bin/x64/Debug/RCa77828 b/hqx2bin/x64/Debug/RCa77828 new file mode 100644 index 0000000000000000000000000000000000000000..6ef5c74ec2caa5fe9ad70f00a15f825c06e878a0 GIT binary patch literal 2860 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 S0YyL&Py`eKMd1Gffqw(SueJ05 literal 0 HcmV?d00001 diff --git a/hqx2gp/hqx2gp.cpp b/hqx2gp/hqx2gp.cpp new file mode 100644 index 0000000..893e0cc --- /dev/null +++ b/hqx2gp/hqx2gp.cpp @@ -0,0 +1,116 @@ +#include + +/* +Copyright 2019 Eric Lasota + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +#include "CFileStream.h" +#include "ScopedPtr.h" +#include "BinHex4.h" +#include "MacBinary2.h" +#include "MacFileMem.h" + +#include + +using namespace PortabilityLayer; + +int main(int argc, const char **argv) +{ + if (argc != 3) + { + fprintf(stderr, "Usage: hqx2gp "); + return -1; + } + +#ifdef _CRT_INSECURE_DEPRECATE + FILE *f = nullptr; + if (fopen_s(&f, argv[1], "rb")) + f = nullptr; +#else + FILE *f = fopen(argv[1], "rb"); +#endif + + if (!f) + { + fprintf(stderr, "Could not open input file"); + return -1; + } + + CFileStream fs(f, true, false, true); + + ScopedPtr memFile = BinHex4::LoadHQX(&fs); + + fs.Close(); + + std::string fname = argv[2]; + + const char* extensions[] = { ".gpf", ".gpr", ".gpd", ".gpc" }; + + MacFilePropertiesSerialized sp; + sp.Serialize(memFile->FileInfo().m_properties); + + for (int i = 0; i < 4; i++) + { + const void *bufferToWrite = nullptr; + size_t sizeToWrite = 0; + + switch (i) + { + case 0: + bufferToWrite = sp.m_data; + sizeToWrite = sp.kSize; + break; + case 1: + bufferToWrite = memFile->ResourceFork(); + sizeToWrite = memFile->FileInfo().m_resourceForkSize; + break; + case 2: + bufferToWrite = memFile->DataFork(); + sizeToWrite = memFile->FileInfo().m_dataForkSize; + break; + case 3: + bufferToWrite = memFile->Comment(); + sizeToWrite = memFile->FileInfo().m_commentSize; + break; + }; + + if (sizeToWrite == 0) + continue; + + std::string path = fname + extensions[i]; + +#ifdef _CRT_INSECURE_DEPRECATE + FILE *outF = nullptr; + if (fopen_s(&outF, path.c_str(), "wb")) + outF = nullptr; +#else + FILE *outF = fopen(path.c_str(), "wb"); +#endif + + if (!outF) + continue; + + fwrite(bufferToWrite, 1, sizeToWrite, outF); + fclose(outF); + } + + return 0; +} diff --git a/hqx2gp/hqx2gp.vcxproj b/hqx2gp/hqx2gp.vcxproj new file mode 100644 index 0000000..e974956 --- /dev/null +++ b/hqx2gp/hqx2gp.vcxproj @@ -0,0 +1,136 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 15.0 + {5FDE4822-C771-46A5-B6B2-FD12BACE86BF} + hqx2gp + 10.0.17763.0 + + + + Application + true + v141 + MultiByte + + + Application + false + v141 + true + MultiByte + + + Application + true + v141 + MultiByte + + + Application + false + v141 + true + MultiByte + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Level3 + Disabled + true + true + + + + + Level3 + Disabled + true + true + + + + + Level3 + MaxSpeed + true + true + true + true + + + true + true + + + + + Level3 + MaxSpeed + true + true + true + true + + + true + true + + + + + + + + {6ec62b0f-9353-40a4-a510-3788f1368b33} + + + + + + \ No newline at end of file diff --git a/hqx2gp/hqx2gp.vcxproj.filters b/hqx2gp/hqx2gp.vcxproj.filters new file mode 100644 index 0000000..721f55e --- /dev/null +++ b/hqx2gp/hqx2gp.vcxproj.filters @@ -0,0 +1,22 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Source Files + + + \ No newline at end of file diff --git a/hqx2gp/x64/Debug/vc141.idb b/hqx2gp/x64/Debug/vc141.idb new file mode 100644 index 0000000000000000000000000000000000000000..ab5e992a9381cb95ccc88ebaccf54b6312b92dd2 GIT binary patch literal 175104 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

      S%G$c5Fw|Fm- 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

    S%G$c5Fw|Fm- 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