Post-midsummer update; Eric’s Ultimate Solitaire

As we estimated previously, the progress has been a bit slow during the summer months, with so many things to do in “real life”. But there have been a few things here and there that have been tweaked in the moments, when there has been a moment of time. Here’s a brief breakdown of the key things that have been changed:

In attempt to get some picky color games to work (such as Warlords 2, Warcraft and A/10 attack), a number of hacks have been added:

  • A number of placeholder gestalt functions, with dummy values to allow the games to pass startup tests (for example, Warlords 2 appears to not start unless the system tells it supports truetype fonts…)
  • Some help manager’s Pack14 selectors, such as querying balloon help mode and setting the balloon help mode
  • A number of process manager selectors in OSDispatch, which seem to be used by some apps to check if it is in foreground in multitasking environment
  • More dummy placeholders for Apple Events. There was not yet time to research futher, but I’m guessing some of the apps are expecting kAEOpenApplication (‘oapp’) event at startup to proceed correctly. The apple events will most likely be implemented parallel to better process manager support later, so that any dependencies with EPPC can be verified)
  • subPin mode for the awesome looking alpha-blended shadows in Warlord’s 2 windows

More work is still needed to make the above games work, assumedly the lack of AppleEvents right now is blocking a number of them from working.

Eric’s Ultimate Solitaire Sampler also required implementing (& fixing) some things:

  • Some color blitter updates (blend and srcBic transfer mode improvements, and other minor improvements). The game uses these to do nice blending effects on the highlighted cards, including blending the card “slots” with background. These appear now to draw exactly like on real Mac.
  • ‘PICT’ opOrigin opcode was fixed, if a picture would have a non-zero origin, the fact that V and H values were swapped would cause it to be drawn at a wrong location

One of the most important changes was finally fixing the SANE’s Extended 80-bit to 64-bit double encoding/decoding bugs. The basic exponent/fraction conversion was already fixed over one year ago, but the special cases were completely broken (such as NaN, Inf and zero values). Also, clamping the exponent/fraction values when doing conversion to lower bit size was broken, instead of actually getting clamped these values would wrap around…not good! Most notable result of these fixes is that Speedometer now displays properly zero (0) as the initial score instead of 2.0.

Below are some screenshots of this awesome-looking card game:

There are still a couple issues left to fix, most notably the game complains about missing resources on each startup, even though it still succeeds to open. And as the sound manager implementation for the color version environment is still unfinished, there are no sounds yet. But mostly, the game works quite well, and is very playable, as you can see from the number of games and time played statistics screenshot above 🙂

At the moment, Toni is working on getting the picture recording to work in color mode (PICT2 support), which is required to get some editors to work properly in ResEdit, and Pukka is researching the full extension word format of 68020 emulation, which when will allow a large number of new color applications to work.

Full list of changes since last post

2020-07-31 22:06:34 +0300 • More work on PICT2 recording (pixpats in-progress)
2020-07-21 05:29:26 +0300 • Support grafProcs' putPicProc for StdPutPic
2020-07-21 05:01:31 +0300 • Implement CopyPixPat trap
2020-07-16 22:41:09 +0300 • Initialize pnMode correctly in OpenPicture
2020-07-16 22:40:40 +0300 • Fix PICT verb recorder bugs (pnSize & swap pnMode)
2020-07-16 05:13:03 +0300 • Make StdComment recording version 2 compatible
2020-07-14 05:47:44 +0300 • OpenCPicture & ColorQD OpenPicture abstraction
2020-07-08 05:31:55 +0300 • Tweak Float64 to Float80 conversion (denorm exp)
2020-07-07 14:34:46 +0300 • Other Float80 special cases; NaN, denormals, infs
2020-07-04 20:35:08 +0300 • Handle zero special case @ 80-bit float conversion
2020-07-04 12:28:21 +0300 • Fix mixed up H and V delta values in opOrigin
2020-07-04 12:26:43 +0300 • Add non-colorizing stretch blitter for srcBic mode
2020-07-04 04:05:17 +0300 • Fix opOrigin picture opcode
2020-07-04 02:35:44 +0300 • Fix missing alignment shift of arithmetic blitters
2020-07-03 14:39:58 +0300 • Implement FSUBS for SANE's FP68K dispatcher
2020-07-03 14:34:15 +0300 • Improve direct color support in stretch blitter
2020-06-28 01:38:25 +0300 • Add indexed region blitter for "blend" (0x20) mode
2020-06-28 01:36:23 +0300 • Add Eric's Ultimate Solitaire Sample test app
2020-06-22 02:45:59 +0300 • Fix inverted handling of TE record's active flag
2020-06-22 02:44:50 +0300 • Add AE and ProcMgr control configs to environment
2020-06-14 04:58:58 +0300 • Add Prince of Destruction test app to cmake JSON
2020-06-13 21:42:12 +0300 • Add missing procNotFound define to MacErrors.h
2020-06-13 21:41:27 +0300 • Add A10 Attack! Demo test app to cmake json config
2020-06-13 19:13:46 +0300 • Add dummy GetNextProcess
2020-06-13 19:13:10 +0300 • Add some missing data types & enums to Processes.h
2020-06-12 04:08:43 +0300 • Add dummy InitEditionPack & EditionManager module
2020-06-12 03:56:06 +0300 • Add dummy RestoreDeviceClut selector
2020-06-12 03:44:33 +0300 • Properly fix the previously disabled optimization
2020-06-12 00:10:50 +0300 • Add dummy AESetInteractionAllowed Pack8 selector
2020-06-11 17:48:36 +0300 • Fix InvalMenuBar to really work (Warlords 2 menus)
2020-06-10 20:57:41 +0300 • Disable a buggy copybits colorization optimization
2020-06-10 19:09:03 +0300 • subPin mode color region blitter (WarLords 2 demo)
2020-06-10 19:08:15 +0300 • Fix invCT pointer in color mapping (skip header)
2020-06-10 13:59:56 +0300 • Fix WDCB allocation: list size is bytes, not count
2020-06-10 05:57:31 +0300 • Dummy HMIsBalloon & HMSetBalloons for Pack14
2020-06-10 05:51:30 +0300 • GetCurrentProcess, GetProcessFromLayer, SameProc..
2020-06-10 05:29:24 +0300 • Implement AECreateDesc in Pack8 (AppleEvents)
2020-06-10 05:28:23 +0300 • Add MacAppleEvents.h (+move old stuff from Events)
2020-06-10 05:27:17 +0300 • Tweak trap generator to allow "result" param name
2020-06-10 04:49:08 +0300 • Add dummy OSDispatch & GetProcessInformation
2020-06-10 04:17:52 +0300 • Fake gestaltLaunchControl flag for Warlords 2
2020-06-10 03:52:44 +0300 • Fix script mgr gestalt functions (emIntlGlobals)
2020-06-10 02:35:00 +0300 • Add 'a/ux', 'edtn', 'help', 'pop!', 'font', 'stdf'
2020-06-10 01:23:22 +0300 • Add dummy AEInteractWithUser selector for Pack8
2020-06-10 01:14:16 +0300 • Add 'kbd', 'hdwr', 'evnt' and 'os ' gestalt funcs