diff options
Diffstat (limited to 'engines/wage')
-rw-r--r-- | engines/wage/detection.cpp | 1 | ||||
-rw-r--r-- | engines/wage/detection_tables.h | 196 | ||||
-rw-r--r-- | engines/wage/gui.cpp | 136 | ||||
-rw-r--r-- | engines/wage/gui.h | 5 | ||||
-rw-r--r-- | engines/wage/util.cpp | 13 | ||||
-rw-r--r-- | engines/wage/wage.cpp | 20 | ||||
-rw-r--r-- | engines/wage/wage.h | 4 | ||||
-rw-r--r-- | engines/wage/world.h | 2 |
8 files changed, 228 insertions, 149 deletions
diff --git a/engines/wage/detection.cpp b/engines/wage/detection.cpp index 512d432e54..1b418b5aa8 100644 --- a/engines/wage/detection.cpp +++ b/engines/wage/detection.cpp @@ -54,6 +54,7 @@ static const PlainGameDescriptor wageGames[] = { class WageMetaEngine : public AdvancedMetaEngine { public: WageMetaEngine() : AdvancedMetaEngine(Wage::gameDescriptions, sizeof(ADGameDescription), wageGames) { + _md5Bytes = 50000; _singleId = "wage"; _guiOptions = GUIO2(GUIO_NOSPEECH, GUIO_NOMIDI); } diff --git a/engines/wage/detection_tables.h b/engines/wage/detection_tables.h index 1a177c2bb0..096338659b 100644 --- a/engines/wage/detection_tables.h +++ b/engines/wage/detection_tables.h @@ -32,108 +32,148 @@ namespace Wage { #define BIGGAME(t,v,f,m,s) { t,v,AD_ENTRY1s(f,m,s),Common::EN_ANY,Common::kPlatformMacintosh,ADGF_DEFAULT,GUIO0()} static const ADGameDescription gameDescriptions[] = { - FANGAME("3rd Floor", "913812a1ac7a6b0e48dadd1afa1c7763", 281409), - BIGGAME("afm", "v1.8", "Another Fine Mess 1.8", "94a9c4f8b3dabd1846d76215a49bd221", 1420723), - BIGGAME("amot", "v1.8", "A Mess O' Trouble 1.8", "26207bdf0bb539464f136f0669af885f", 1843104), + FANGAME("3rd Floor", "3ed49d2163e46d2c9b33fd80927d9e22", 281409), + FANGAME("3rd Floor", "3ed49d2163e46d2c9b33fd80927d9e22", 281423), // alt version + BIGGAME("afm", "v1.8", "Another Fine Mess 1.8", "abc7188469a9a7083fd4caec55a4f76e", 1420723), + BIGGAME("amot", "v1.8", "A Mess O' Trouble 1.8", "6b59e5bb9a4b74ecdd9f66d4e36a59cf", 1843104), // No Next on the first screen? - FANGAME("Brownie's Dream", "94a9c4f8b3dabd1846d76215a49bd221", 440704), - FANGAMEN("Brownie's Time Travels", "Brownie's Time Travels v1.2", "94a9c4f8b3dabd1846d76215a49bd221", 471589), - FANGAME("Bug Hunt", "595117cbed33e8de1ab3714b33880205", 195699), - BIGGAME("cantitoe", "", "Camp Cantitoe", "913812a1ac7a6b0e48dadd1afa1c7763", 616985), + FANGAME("Brownie's Dream", "6fdcce532bcd50b7e4f3f6bab50a0ee6", 440704), + FANGAMEN("Brownie's Time Travels", "Brownie's Time Travels v1.2", "55842a100b56e236c5ad69563e01fc24", 471589), + FANGAME("Bug Hunt", "738e2e8a1020be48c5ef42da571674ae", 195699), + FANGAME("Bug Hunt", "118a41121143488719d28daa9af8cd39", 195779), // alt version + BIGGAME("cantitoe", "", "Camp Cantitoe", "1780c41d14b876461a19dbeceebf2a37", 616985), // Problems with letter rendering - FANGAME("Canal District", "a56aa3cd4a6e070e15ce1d5815c7be0a", 641470), - FANGAME("Carbon Copy", "913812a1ac7a6b0e48dadd1afa1c7763", 519445), + FANGAME("Canal District", "34e7a8e84b33ba8ea38b4ffd76ef074f", 641470), + FANGAME("Carbon Copy", "9e781acd63290ae390d515cffc742011", 519445), // Invalid rect in scene "FINALE" - FANGAME("Castle of Ert", "327610eb2298a9427a566288312df040", 198955), - FANGAME("Deep Angst", "b130b3c811cd89024dd5fdd2b71f70b8", 329550), - FANGAME("Deep Ennui", "913812a1ac7a6b0e48dadd1afa1c7763", 86075), + FANGAME("Castle of Ert", "a45b439bb3a9c8a4a14b996024222068", 198955), + FANGAMEN("Castle of Ert", "Castle of Ert.1", "a45b439bb3a9c8a4a14b996024222068", 198983), // alt version + FANGAMEND("Death Mall", "Death Mall Demo", "1c78fc15fb037b242a0bc6bac7d4d889", 254874), + FANGAME("Deep Angst", "7f8821f7b279269a91f9aadfed98eec0", 329550), // Original gile name "Deep Angst™" + FANGAME("Deep Ennui", "7fa4368834a22a9d4b7246a6297b455f", 86075), // Polygons with ignored byte 1 - FANGAME("Double Trouble", "1652e36857a04c01dc560234c4818619", 542371), - BIGGAME("drakmythcastle", "disk I", "Drakmyth Castle disk I of II", "94a9c4f8b3dabd1846d76215a49bd221", 793784), - BIGGAME("drakmythcastle", "disk II", "Drakmyth Castle II", "cc978cc9a5256724702463cb5aaaffa0", 1685659), + FANGAME("Double Trouble", "3f0c032377d87704267283380800633a", 542371), + BIGGAME("drakmythcastle", "disk I", "Drakmyth Castle disk I of II", "5b1fd760fbc081c608acebfe1d07a58a", 793784), + BIGGAME("drakmythcastle", "disk II", "Drakmyth Castle II", "1116f9c2c781f79e1f9c868b51ae7fa5", 1685659), // Crash at start in GUI rendering - FANGAME("Dune Eternity", "94a9c4f8b3dabd1846d76215a49bd221", 290201), // Original file name is "***DUNE ETERNITY*** " - FANGAMEN("Dungeon World II", "DungeonWorld2", "0154ea11d3cbb536c13b4ae9e6902d48", 230199), - FANGAME("Edg's World", "913812a1ac7a6b0e48dadd1afa1c7763", 106769), - FANGAME("Eidisi I", "595117cbed33e8de1ab3714b33880205", 172552), + FANGAME("Dune Eternity", "6b29f82e235815ffc4c9f30dc09968dd", 290201), // Original file name is "***DUNE ETERNITY*** " + FANGAMEN("Dungeon World II", "DungeonWorld2", "753df07166ca48e303d782cc72dd4053", 230199), + // Made for bigger resolution + FANGAME("Dynasty of Dar", "b2e9a5cca28acb85617b1477a5fca3e2", 275693), + FANGAME("Edg's World", "0a3a3aaa36088c514b668f1f62120006", 106769), + FANGAME("Eidisi I", "3d778c0fe7addf5f29e7593ba0fd3953", 172552), + FANGAME("Eidisi I", "8c2fb325a49344568c5536bba36a2556", 172566), // alt version // Problems(?) with text on the first screen - FANGAMEN("Enchanted Pencils", "Enchanted Pencils 0.99 (PG)", "595117cbed33e8de1ab3714b33880205", 408913), - FANGAME("Escape from School!", "913812a1ac7a6b0e48dadd1afa1c7763", 50105), - FANGAME("Everyman 1", "4b0e1a1fbaaa4930accd0f9f0e1519c7", 335705), - FANGAME("Exploration Zeta!", "c477921aeee6ed0f8997ba44447eb2d0", 366599), + FANGAMEN("Enchanted Pencils", "Enchanted Pencils 0.99 (PG)", "9a9777a83e58bebfa6f1662d5e236384", 408913), + FANGAME("Escape!", "3ada261c2d1d9ce6b9da068237472689", 65075), // Original file name "Escape!†" + FANGAME("Escape from School!", "2055747bb874052333190eb993246a7f", 50105), + FANGAME("Escape from School!", "fcc581e52d1fc8ea4603d7c953fa935a", 50119), // Original file name "Escape from School!†" + FANGAME("Everyman 1", "e20cebf0091a1b1bf023aac6f28c9011", 335705), + FANGAME("Exploration Zeta!", "6127d9c04ad68f0cbb5f6aa1d95b48a2", 366599), + // Cannot proceed past the first scene + FANGAMEND("Explorer", "Explorer DEMO", "a9ebdecf6c8de95a03e593d877dacc13", 461228), // Crash in console rendering on the first scene - FANGAME("Fantasy Quest", "4b0e1a1fbaaa4930accd0f9f0e1519c7", 762754), - FANGAME("Find the Heart", "595117cbed33e8de1ab3714b33880205", 106235), // From Joshua's Worlds 1.0 - // Problems with window overlay - FANGAMEN("Jumble", "LSJUMBLE", "e12ec4d76d48bdc86567c5e63750547e", 647339), // Original file name is "LSJUMBLE† " - FANGAME("Karth of the Jungle", "595117cbed33e8de1ab3714b33880205", 96711), - FANGAME("Karth of the Jungle", "595117cbed33e8de1ab3714b33880205", 96960), // Alternative version - FANGAME("Karth of the Jungle II", "c106835ab4436de054e03aec3ce904ce", 201053), - FANGAMEN("Little Pythagoras", "Little Pythagoras 1.1.1", "94a9c4f8b3dabd1846d76215a49bd221", 628821), - FANGAME("Lost Crystal", "8174c81ea1858d0079ae040dae2cefd3", 771072), + FANGAME("Fantasy Quest", "b42b0e86e2c84464283640c74b25e015", 762754), + FANGAME("Find the Heart", "aa244c15f2ba8cef468714be34223acd", 106235), // From Joshua's Worlds 1.0 + FANGAME("Find the Heart", "a6834cb230cea1953f5bf1f8f7aacabd", 105885), // From Joshua's Worlds. Alt version + FANGAME("Find the Heart", "a6834cb230cea1953f5bf1f8f7aacabd", 105871), // Standalone + FANGAMEN("Fortune Teller", "Fortune Teller 1.1", "7d2628eeea67b33379e01c0aef8dd196", 73931), + FANGAMEN("Haunted House", "Haunted House 1.5", "5db2f95c7abaa9d060b94271a5bc57f8", 177500), + // Cropped graphics on first scene + FANGAME("Intro to Gothic", "6f732eaad6e3b85795f8ee6c6a40d837", 208067), + // No Next button in intro + FANGAME("Jamie the Demon Slayer", "fa0ca9618c18425b6d9bf913f762d91b", 232789), + FANGAMEN("Journey", "The Journey 1.6.2 US", "e66f37472e1414a088eb5d5acc4df794", 820572), + FANGAMEN("Jumble", "LSJUMBLE", "7c46851d2f90c7da9efe40b1688869c2", 647339), // Original file name is "LSJUMBLE† " + FANGAME("Karth of the Jungle", "5f2346834821dc3c4008e139cd37b3cb", 96711), + FANGAME("Karth of the Jungle", "444f9426f342135fbcc32180e5ba5b1c", 96960), // Alternative version + FANGAME("Karth of the Jungle II", "32161b27de894fd9e3f054afc4013f34", 201053), + FANGAMEN("Little Pythagoras", "Little Pythagoras 1.1.1", "75906fa955de695ac3e8164e7d88ac7b", 628821), + FANGAME("Lost Crystal", "d5e27a83f2884a24c6ec26c6cb776fe9", 771072), // Crash in design drawing on startup - FANGAMEN("Lost In Kookyville", "Lost In Kookyville 1.2.4", "e6cea2234cee9d0dba7be10bc1ad6055", 721569), - FANGAME("Magic Rings", "913812a1ac7a6b0e48dadd1afa1c7763", 109044), + FANGAMEN("Lost In Kookyville", "Lost In Kookyville 1.2.4", "5ab6259706b33230dbfba05618c2c5c9", 721569), + FANGAME("Magic Rings", "450e986694b96f3b9e6cc64e57b753dc", 109044), // No way to click on the house - FANGAME("Messy House", "913812a1ac7a6b0e48dadd1afa1c7763", 177120), - FANGAME("Midnight Snack", "913812a1ac7a6b0e48dadd1afa1c7763", 67952), - FANGAME("Midnight Snack", "913812a1ac7a6b0e48dadd1afa1c7763", 67966), // Alt version - FANGAME("Minitorian", "913812a1ac7a6b0e48dadd1afa1c7763", 586464), - FANGAME("M'Lord's Warrior", "7d30b6e68ecf197b2d15492630bdeb89", 465639), // Original file name is "M'Lord's Warrior †" + FANGAME("Messy House", "705df61da9e7d742b7ad678e59eb7bfb", 177120), + FANGAME("Midnight Snack", "76986389f9a08dd95450c8b9cf408653", 67952), + FANGAME("Midnight Snack", "76986389f9a08dd95450c8b9cf408653", 67966), // Alt version + FANGAME("Mike's House", "3d23c2b88cefd958bcbc4d4c711003d8", 87357), + FANGAME("Minitorian", "15fbb2bd75d83155ed21edbc5dc9558f", 586464), + FANGAME("M'Lord's Warrior", "0bebb2c62529c89590f6c5be6e1e9838", 465639), // Original file name is "M'Lord's Warrior †" // Unhandled comparison case - FANGAME("Mountain of Mayhem", "4b0e1a1fbaaa4930accd0f9f0e1519c7", 750003), // Original file name "Mountain of Mayhem †" + FANGAME("Mountain of Mayhem", "4088fc534042081b7ab7b49675ab4a6e", 750003), // Original file name "Mountain of Mayhem †" // No way to pass through the first screen - FANGAME("Nightcrawler Ned", "94a9c4f8b3dabd1846d76215a49bd221", 366542), + FANGAME("Nightcrawler Ned", "0cf27bf82de299c69405f7910146bf00", 366542), // Crash on startup - FANGAMEN("Parrot Talk", "PARROT TALK V1", "d81f2d03a1e863f04fb1e3a5495b720e", 118936), + FANGAMEN("Parrot Talk", "PARROT TALK V1", "b1570b0779891d5d50a3cf0146d28202", 118936), // Crash on startup - FANGAMEN("Parrot Talk", "PARROT TALKV2", "d81f2d03a1e863f04fb1e3a5495b720e", 118884), - FANGAME("Pavilion", "4d991d7d1534d48d90598d86ea6d5d97", 231687), - FANGAMEN("Pencils", "Pencils.99", "913812a1ac7a6b0e48dadd1afa1c7763", 408551), + FANGAMEN("Parrot Talk", "PARROT TALKV2", "0c1e920ed3ff74b8f22eaaf0d3496d5a", 118884), + FANGAME("Pavilion", "3a33149569325a44d98544452323c819", 231687), + FANGAMEN("Pencils", "Pencils.99", "9c200938488565080e12989e784586e2", 408551), // Polygons with byte 1 - FANGAME("Periapt", "913812a1ac7a6b0e48dadd1afa1c7763", 406006), - FANGAME("Puzzle Piece Search", "595117cbed33e8de1ab3714b33880205", 247693), // From Joshua's Worlds 1.0 + FANGAME("Periapt", "fb4052819126b88d7e03ebc00c669a9d", 406006), + FANGAME("Psychotic!", "6b4ae6261b405e2feac58c5a2ddb67c5", 247693), + FANGAME("Puzzle Piece Search", "6b4ae6261b405e2feac58c5a2ddb67c5", 247693), // From Joshua's Worlds 1.0 + FANGAME("The Puzzle Piece Search", "fb99797c429c18ec68418fdd12af17a1", 247338), // From Joshua's Worlds + FANGAME("The Puzzle Piece Search", "fb99797c429c18ec68418fdd12af17a1", 247324), // Stnadalone // Empty(?) first scene - FANGAME("Pyramid of No Return", "77a55a45f794b4d4a56703d3acce871e", 385145), - FANGAME("Queen Quest", "4b0e1a1fbaaa4930accd0f9f0e1519c7", 57026), - FANGAME("Quest for T-Rex", "913812a1ac7a6b0e48dadd1afa1c7763", 592584), + FANGAME("Pyramid of No Return", "38383ac85cc16703f13f8d82f1398123", 385145), + // Cropped graphics at the first scene + FANGAME("Psychotic!", "29b30e6aae9cc6db5eccb09f695ff25e", 367309), + FANGAME("P-W Adventure", "9bf86fb946683500d23887ef185726ab", 219216), + FANGAMEN("Pyramid of Ert", "Pyramid of Ert V1.2", "fb931cd35440a66864a434c773b496da", 315783), + FANGAME("Queen Quest", "8273e29afe64a984eb0ce7b43fdf3a59", 57039), // alt version + FANGAME("Quest for T-Rex", "f16f2cd525c9aeb4733295d8d842b902", 592584), // Crash in console rendering on the initial scene - FANGAME("Quest for the Dark Sword", "b35dd0c078da9f35fc25a455f56bb129", 572576), - FANGAME("Radical Castle", "677bfee4afeca2f7152eb8b76c85ca8d", 355601), - FANGAME("Radical Castle 1.0", "677bfee4afeca2f7152eb8b76c85ca8d", 347278), - BIGGAME("raysmaze", "v1.5", "Ray's Maze1.5", "064b16d8c20724f8debbbdc3aafde538", 1408516), - BIGGAME("raysmaze", "v1.5/alt", "Ray's Maze1.5", "92cca777800c3d31a77b5ed7f6ee49ad", 1408516), + FANGAME("Quest for the Dark Sword", "4815d9a770904b26c463b7e4fcd121c7", 572576), + FANGAME("Radical Castle", "09b70763c7a48a76240bd0e42737caaa", 355601), + FANGAME("Radical Castle 1.0", "8ae2e29ffeca52a5c7fae66dec4764a3", 347278), + BIGGAME("raysmaze", "v1.5", "Ray's Maze1.5", "521583e59bdc1d611f963cef1dc25869", 1408516), + BIGGAME("raysmaze", "v1.5/alt", "Ray's Maze1.5", "120e65bec953b981b2e0aed45ad45d70", 1408516), + // Next button is not visible + FANGAME("Ray's World Builder Demo", "d252ee8e38c9abc50455d071a367d031", 116056), // Unhandled comparison case - FANGAME("Sands of Time", "913812a1ac7a6b0e48dadd1afa1c7763", 122672), // Original file name "Sands of Time†" - BIGGAME("scepters", "", "Scepters", "3311deef8bf82f0b4b1cfa15a3b3289d", 346595), + FANGAME("Sands of Time", "b00ea866cb04cd87124e5720bc2c84c7", 122672), // Original file name "Sands of Time†" + BIGGAME("scepters", "", "Scepters", "f8db17cd96be056cf8a8bb9cfe46cf3a", 346595), + BIGGAME("scepters", "", "Scepters", "1fd7ca93ef16f4752fb46ee9cfa0949a", 347540), // alt version + FANGAME("Schmoozer", "e0f416bae626e2c638055b7f495d8c78", 221500), // ??? problems with dog bitmap? - FANGAMEN("Space Adventure", "SpaceAdventure", "f9f3f1c419f56955f7966355b34ea5c8", 155356), - FANGAMEN("Spear of Destiny", "SpearOfDestiny", "913812a1ac7a6b0e48dadd1afa1c7763", 333665), // Original file name "SpearOfDestiny†" - FANGAME("Star Trek", "44aaef4806578700429de5aaf95c266e", 53320), - FANGAME("Strange Disappearance", "d81f2d03a1e863f04fb1e3a5495b720e", 772282), + FANGAMEN("Space Adventure", "SpaceAdventure", "7b6c883b3510e21cfabf4c8caaeb1f16", 155356), + FANGAMEN("Space Adventure", "SpaceAdventure", "3bd6fc9327f35db5390a9bf86afcd872", 155356), // alt version + FANGAMEN("Spear of Destiny", "SpearOfDestiny", "f1252ff34dd279f4ec1844bb403a578c", 333665), // Original file name "SpearOfDestiny†" + FANGAME("Star Trek", "fe20d06bc50c7fcebda0db533e141d4a", 53320), + FANGAME("Strange Disappearance", "782fae517f7374cd7f43f428331ce445", 772282), // Code 0x03 in text - FANGAME("Swamp Witch", "913812a1ac7a6b0e48dadd1afa1c7763", 739781), // Original file name "Swamp Witch†" - FANGAME("Sweetspace Now!", "e12ec4d76d48bdc86567c5e63750547e", 123813), // Comes with Jumble + FANGAME("Swamp Witch", "4f146c0a5c59e7d4717a0423271fa89d", 739781), // Original file name "Swamp Witch†" + FANGAME("Sweetspace Now!", "1d419bc0b04c51468ddc40a90125bf00", 123813), // Comes with Jumble // Wrong scrolling in the first console text - FANGAMEN("Sword of Siegfried", "Sword of Siegfried 1.0", "913812a1ac7a6b0e48dadd1afa1c7763", 234763), - FANGAME("Time Bomb", "4b0e1a1fbaaa4930accd0f9f0e1519c7", 64564), - FANGAME("Time Bomb", "4b0e1a1fbaaa4930accd0f9f0e1519c7", 64578), // Alt version - FANGAMEND("The Ashland Revolution", "The Ashland Revolution Demo", "913812a1ac7a6b0e48dadd1afa1c7763", 145023), // Original file name "The Ashland Revolution Demo†" - FANGAME("The Axe-orcist", "94a9c4f8b3dabd1846d76215a49bd221", 308764), - FANGAMEN("The Hotel Caper", "The Hotel Caper V1.0", "595117cbed33e8de1ab3714b33880205", 231969), + FANGAMEN("Sword of Siegfried", "Sword of Siegfried 1.0", "1ee92830690f89ea142ac0847176a0c3", 234763), + FANGAME("Terrorist", "68208fa5e426312fb12402894add5e4a", 524469), // Original file name "Terrorist†" + FANGAME("Time Bomb", "b7a369d57d43ec8d9fd53832fd38d7db", 64564), + FANGAME("Time Bomb", "b7a369d57d43ec8d9fd53832fd38d7db", 64578), // Alt version + FANGAMEND("The Ashland Revolution", "The Ashland Revolution Demo", "3c7a1bdeab48a077a4f54fe69da61a9f", 145023), // Original file name "The Ashland Revolution Demo†" + FANGAME("The Axe-orcist", "bfdf6a4ce87e6b368977af3b683466db", 308764), + FANGAMEN("The Hotel Caper", "The Hotel Caper V1.0", "0d11a6ca1357e27ffff5231fe89cc429", 231969), + FANGAMEN("The Hotel Caper", "The Hotel Caper V1.0", "6c80fa6a36d16aa0edef86d8800c90db", 231969), // alt version // Invalid rect in scene "Access Tube 1" - FANGAMEN("The Phoenix v1.2", "The Phoenix", "4b0e1a1fbaaa4930accd0f9f0e1519c7", 431640), - FANGAME("The Sultan's Palace", "358799d446ee4fc12f793febd6c94b95", 456855), + FANGAMEN("The Phoenix v1.2", "The Phoenix", "0a4a01b83c993408ae824cc4f63957ea", 431640), + FANGAME("The Phoenix", "0a4a01b83c993408ae824cc4f63957ea", 431643), + FANGAME("The Sultan's Palace", "98c845323489344d7e2c9d1c3e53d1fc", 456855), // Admission for on 3rd screen is messed up - FANGAME("The Tower", "435f420b9dff895ae1ddf1338040c51d", 556539), + FANGAME("The Tower", "135fe861928d15b5acd8b355460c54bf", 556539), // Polygons with ignored byte 1 and 2 on second scene - FANGAME("The Village", "913812a1ac7a6b0e48dadd1afa1c7763", 314828), + FANGAME("The Village", "b9b5cfbfc7f482eae7587b55edc135ed", 314828), + FANGAME("The Wizard's Apprentice", "7eff3cb7d1a3f59639c62cf196039745", 782824), + // Messed up first scene + FANGAMEND("Tombworld", "Demo TombWorld", "f7c86166e29fb8b57f7a1400d4963a4e", 664252), // Original file name "Demo TombWorld©" // Doesn't go past first scene - BIGGAME("twisted", "", "Twisted! 1.6", "26207bdf0bb539464f136f0669af885f", 960954), - FANGAME("Wishing Well", "913812a1ac7a6b0e48dadd1afa1c7763", 103688), - FANGAME("Wizard's Warehouse", "913812a1ac7a6b0e48dadd1afa1c7763", 159748), - FANGAME("ZikTuria", "418e74ca71029a1e9db80d0eb30c0843", 52972), - FANGAME("Zoony", "539a64151426edc92da5eedadf39f23c", 154990), // original filename "Zoony™" + BIGGAME("twisted", "", "Twisted! 1.6", "97ab265eddf0cfed6d43d062c853cbc0", 960954), + FANGAME("Volcano II", "4dbb7ec6111c0f872da8ed8ba14763c9", 82991), // Original file name "Volcano II†" + FANGAME("Wishing Well", "ece06c419cbb2d32941e6b5c7d9d7c1a", 103688), + FANGAME("Wizard's Warehouse", "ee1b86841583e2b58ac39bf97017dc7b", 159748), + FANGAMEN("Wizard's Warehouse 2", "WizWarehouse 2.0", "6502bd974fe149fe76d6d5ae9d1e6878", 230870), + FANGAME("ZikTuria", "1b934fca68d633d231dccd2047d2d274", 52972), + FANGAME("Zoony", "7bb293b81117cbd974ce54fafa06f258", 154990), // original filename "Zoony™" AD_TABLE_END_MARKER }; diff --git a/engines/wage/gui.cpp b/engines/wage/gui.cpp index 9dd1a24b3c..93c799e73a 100644 --- a/engines/wage/gui.cpp +++ b/engines/wage/gui.cpp @@ -50,6 +50,7 @@ #include "graphics/cursorman.h" #include "graphics/fonts/bdf.h" #include "graphics/palette.h" +#include "graphics/primitives.h" #include "wage/wage.h" #include "wage/design.h" @@ -237,39 +238,20 @@ void Gui::draw() { return; } - if (_scene != _engine->_world->_player->_currentScene || _sceneDirty) { - _scene = _engine->_world->_player->_currentScene; - - drawDesktop(); - + if (_scene != _engine->_world->_player->_currentScene) _sceneDirty = true; - _consoleDirty = true; - _menuDirty = true; - _consoleFullRedraw = true; - - _scene->paint(&_screen, _scene->_designBounds->left, _scene->_designBounds->top); - _sceneArea.left = _scene->_designBounds->left + kBorderWidth - 2; - _sceneArea.top = _scene->_designBounds->top + kBorderWidth - 2; - _sceneArea.setWidth(_scene->_designBounds->width() - 2 * kBorderWidth); - _sceneArea.setHeight(_scene->_designBounds->height() - 2 * kBorderWidth); + if (_sceneDirty || _bordersDirty) + drawDesktop(); - _consoleTextArea.left = _scene->_textBounds->left + kBorderWidth - 2; - _consoleTextArea.top = _scene->_textBounds->top + kBorderWidth - 2; - _consoleTextArea.setWidth(_scene->_textBounds->width() - 2 * kBorderWidth); - _consoleTextArea.setHeight(_scene->_textBounds->height() - 2 * kBorderWidth); + if (_sceneIsActive) { + drawConsole(); + drawScene(); + } else { + drawScene(); + drawConsole(); } - if (_scene && (_bordersDirty || _sceneDirty)) - paintBorder(&_screen, _sceneArea, kWindowScene); - - // Render console - if (_consoleDirty || _consoleFullRedraw) - renderConsole(&_screen, _consoleTextArea); - - if (_bordersDirty || _consoleDirty || _consoleFullRedraw) - paintBorder(&_screen, _consoleTextArea, kWindowConsole); - if (_menuDirty) _menu->render(); @@ -287,6 +269,41 @@ void Gui::draw() { _consoleFullRedraw = false; } +void Gui::drawScene() { + if (!_sceneDirty && !_bordersDirty) + return; + + _scene = _engine->_world->_player->_currentScene; + + _sceneDirty = true; + _consoleDirty = true; + _menuDirty = true; + _consoleFullRedraw = true; + + _scene->paint(&_screen, _scene->_designBounds->left, _scene->_designBounds->top); + + _sceneArea.left = _scene->_designBounds->left + kBorderWidth - 2; + _sceneArea.top = _scene->_designBounds->top + kBorderWidth - 2; + _sceneArea.setWidth(_scene->_designBounds->width() - 2 * kBorderWidth); + _sceneArea.setHeight(_scene->_designBounds->height() - 2 * kBorderWidth); + + _consoleTextArea.left = _scene->_textBounds->left + kBorderWidth - 2; + _consoleTextArea.top = _scene->_textBounds->top + kBorderWidth - 2; + _consoleTextArea.setWidth(_scene->_textBounds->width() - 2 * kBorderWidth); + _consoleTextArea.setHeight(_scene->_textBounds->height() - 2 * kBorderWidth); + + paintBorder(&_screen, _sceneArea, kWindowScene); +} + +// Render console +void Gui::drawConsole() { + if (!_consoleDirty && !_consoleFullRedraw && !_bordersDirty) + return; + + renderConsole(&_screen, _consoleTextArea); + paintBorder(&_screen, _consoleTextArea, kWindowConsole); +} + void Gui::drawBox(Graphics::Surface *g, int x, int y, int w, int h) { Common::Rect r(x, y, x + w + 1, y + h + 1); @@ -310,7 +327,17 @@ const int arrowPixels[ARROW_H][ARROW_W] = { {0,1,1,1,1,1,1,1,1,1,1,0}, {1,1,1,1,1,1,1,1,1,1,1,1}}; -void Gui::paintBorder(Graphics::Surface *g, Common::Rect &r, WindowType windowType, int highlightedPart) { +static void drawPixelInverted(int x, int y, int color, void *data) { + Graphics::Surface *surface = (Graphics::Surface *)data; + + if (x >= 0 && x < surface->w && y >= 0 && y < surface->h) { + byte *p = (byte *)surface->getBasePtr(x, y); + + *p = *p == kColorWhite ? kColorBlack : kColorWhite; + } +} + +void Gui::paintBorder(Graphics::Surface *g, Common::Rect &r, WindowType windowType, int highlightedPart, float scrollPos, float scrollSize) { bool active = false, scrollable = false, closeable = false, drawTitle = false; const int size = kBorderWidth; int x = r.left - size; @@ -351,39 +378,28 @@ void Gui::paintBorder(Graphics::Surface *g, Common::Rect &r, WindowType windowTy } else { int x1 = x + width - 15; int y1 = y + size + 1; - int color1 = kColorBlack; - int color2 = kColorWhite; - if (highlightedPart == kBorderScrollUp) { - SWAP(color1, color2); - fillRect(g, x + width - kBorderWidth + 2, y + size, size - 4, r.height() / 2); - } + for (int yy = 0; yy < ARROW_H; yy++) { - for (int xx = 0; xx < ARROW_W; xx++) { - if (arrowPixels[yy][xx] != 0) { - g->hLine(x1 + xx, y1 + yy, x1 + xx, color1); - } else { - g->hLine(x1 + xx, y1 + yy, x1 + xx, color2); - } - } + for (int xx = 0; xx < ARROW_W; xx++) + g->hLine(x1 + xx, y1 + yy, x1 + xx, (arrowPixels[yy][xx] != 0 ? kColorBlack : kColorWhite)); } - fillRect(g, x + width - 13, y + size + ARROW_H, 8, r.height() / 2 - ARROW_H, color1); - color1 = kColorBlack; - color2 = kColorWhite; - if (highlightedPart == kBorderScrollDown) { - SWAP(color1, color2); - fillRect(g, x + width - kBorderWidth + 2, y + size + r.height() / 2, size - 4, r.height() / 2); - } - fillRect(g, x + width - 13, y + size + r.height() / 2, 8, r.height() / 2 - ARROW_H, color1); + fillRect(g, x + width - 13, y + size + ARROW_H, 8, height - 2 * size - 1 - ARROW_H * 2); + y1 += height - 2 * size - ARROW_H - 2; for (int yy = 0; yy < ARROW_H; yy++) { - for (int xx = 0; xx < ARROW_W; xx++) { - if (arrowPixels[ARROW_H - yy - 1][xx] != 0) { - g->hLine(x1 + xx, y1 + yy, x1 + xx, color1); - } else { - g->hLine(x1 + xx, y1 + yy, x1 + xx, color2); - } - } + for (int xx = 0; xx < ARROW_W; xx++) + g->hLine(x1 + xx, y1 + yy, x1 + xx, (arrowPixels[ARROW_H - yy - 1][xx] != 0 ? kColorBlack : kColorWhite)); + } + + if (highlightedPart == kBorderScrollUp || highlightedPart == kBorderScrollDown) { + int rx1 = x + width - kBorderWidth + 2; + int ry1 = y + size + r.height() * scrollPos; + int rx2 = rx1 + size - 4; + int ry2 = ry1 + r.height() * scrollSize; + Common::Rect rr(rx1, ry1, rx2, ry2); + + Graphics::drawFilledRect(rr, kColorBlack, drawPixelInverted, g); } } if (closeable) { @@ -619,7 +635,11 @@ void Gui::mouseDown(int x, int y) { } else if (_consoleTextArea.contains(x, y)) { startMarking(x, y); } else if ((borderClick = isInBorder(_consoleTextArea, x, y)) != kBorderNone) { - paintBorder(&_screen, _consoleTextArea, kWindowConsole, borderClick); + int textFullSize = _lines.size() * _consoleLineHeight + _consoleTextArea.height(); + float scrollPos = (float)_scrollPos / textFullSize; + float scrollSize = (float)_consoleTextArea.height() / textFullSize; + + paintBorder(&_screen, _consoleTextArea, kWindowConsole, borderClick, scrollPos, scrollSize); } } diff --git a/engines/wage/gui.h b/engines/wage/gui.h index 73814d39b4..48ec41c30a 100644 --- a/engines/wage/gui.h +++ b/engines/wage/gui.h @@ -121,9 +121,12 @@ public: void enableNewGameMenus(); private: + void drawScene(); + void drawConsole(); void undrawCursor(); void drawDesktop(); - void paintBorder(Graphics::Surface *g, Common::Rect &r, WindowType windowType, int highlightedPart = kBorderNone); + void paintBorder(Graphics::Surface *g, Common::Rect &r, WindowType windowType, int highlightedPart = kBorderNone, + float scrollPos = 0.0, float scrollSize = 0.0); void renderConsole(Graphics::Surface *g, Common::Rect &r); void drawBox(Graphics::Surface *g, int x, int y, int w, int h); void fillRect(Graphics::Surface *g, int x, int y, int w, int h, int color = kColorBlack); diff --git a/engines/wage/util.cpp b/engines/wage/util.cpp index f31a83ca04..8c8af6652e 100644 --- a/engines/wage/util.cpp +++ b/engines/wage/util.cpp @@ -122,4 +122,17 @@ const char *getGenderSpecificPronoun(int gender, bool capitalize) { return capitalize ? "It" : "it"; } +bool isStorageScene(const Common::String &name) { + if (name.equalsIgnoreCase(STORAGESCENE)) + return true; + + if (name.equalsIgnoreCase("STROAGE@")) // Jumble + return true; + + if (name.equalsIgnoreCase("STORAGE@@")) // Jumble + return true; + + return false; +} + } // End of namespace Wage diff --git a/engines/wage/wage.cpp b/engines/wage/wage.cpp index e0299c8da2..aa480b63fe 100644 --- a/engines/wage/wage.cpp +++ b/engines/wage/wage.cpp @@ -281,15 +281,16 @@ void WageEngine::performInitialSetup() { debug(5, "Resetting Owners: %d", _world->_orderedObjs.size()); for (uint i = 0; i < _world->_orderedObjs.size(); i++) { Obj *obj = _world->_orderedObjs[i]; - if (!obj->_sceneOrOwner.equalsIgnoreCase(STORAGESCENE)) { + if (!isStorageScene(obj->_sceneOrOwner)) { Common::String location = obj->_sceneOrOwner; location.toLowercase(); - if (_world->_scenes.contains(location)) { - _world->move(obj, _world->_scenes[location]); + Scene *scene = getSceneByName(location); + if (scene != NULL) { + _world->move(obj, scene); } else { if (!_world->_chrs.contains(location)) { // Note: PLAYER@ is not a valid target here. - warning("Couldn't move %s to %s", obj->_name.c_str(), obj->_sceneOrOwner.c_str()); + warning("Couldn't move %s to \"%s\"", obj->_name.c_str(), obj->_sceneOrOwner.c_str()); } else { // TODO: Add check for max items. _world->move(obj, _world->_chrs[location]); @@ -301,7 +302,7 @@ void WageEngine::performInitialSetup() { bool playerPlaced = false; for (uint i = 0; i < _world->_orderedChrs.size(); i++) { Chr *chr = _world->_orderedChrs[i]; - if (!chr->_initialScene.equalsIgnoreCase(STORAGESCENE)) { + if (!isStorageScene(chr->_initialScene)) { Common::String key = chr->_initialScene; key.toLowercase(); if (_world->_scenes.contains(key) && _world->_scenes[key] != NULL) { @@ -328,13 +329,14 @@ void WageEngine::doClose() { } Scene *WageEngine::getSceneByName(Common::String &location) { - Scene *scene; if (location.equals("random@")) { - scene = _world->getRandomScene(); + return _world->getRandomScene(); } else { - scene = _world->_scenes[location]; + if (_world->_scenes.contains(location)) + return _world->_scenes[location]; + else + return NULL; } - return scene; } void WageEngine::onMove(Designed *what, Designed *from, Designed *to) { diff --git a/engines/wage/wage.h b/engines/wage/wage.h index 8ca306aea3..a0be7a70a9 100644 --- a/engines/wage/wage.h +++ b/engines/wage/wage.h @@ -75,6 +75,8 @@ typedef Common::Array<Chr *> ChrArray; typedef Common::List<Obj *> ObjList; typedef Common::List<Chr *> ChrList; +#define STORAGESCENE "STORAGE@" + enum OperandType { OBJ = 0, CHR = 1, @@ -113,7 +115,7 @@ Common::Rect *readRect(Common::SeekableReadStream *in); const char *getIndefiniteArticle(const Common::String &word); const char *prependGenderSpecificPronoun(int gender); const char *getGenderSpecificPronoun(int gender, bool capitalize); - +bool isStorageScene(const Common::String &name); typedef Common::Array<byte *> Patterns; diff --git a/engines/wage/world.h b/engines/wage/world.h index e9041139df..355d660c8d 100644 --- a/engines/wage/world.h +++ b/engines/wage/world.h @@ -50,8 +50,6 @@ namespace Wage { -#define STORAGESCENE "STORAGE@" - class Sound; class World { |