Solitaire 4.0 b2 Mac OS X Server 1.0/OpenStep-Mach/Rhapsody/YellowBoxForWindows release ++++ This is a quick port to OS X Server 1.0 of Solitaire. In doing so I've probably screwed up compatibility with other OSs. I've fixed the sound support, and added standard library path searching for games. Scott Anguish sanguish@digifix.com +++++ Since the last release of Solitaire, I played (mainly Spider) on other platform to realise what the Openstep version is missing. So here is my 2 cents. You may find that this release is verry stable and wonder why this is beta 1. Simply because Pyramids is not yet fully converted. History The first release of Solitaire was made by Blake Stone a long time ago (~1991). From there, before he worked for the evil empire, Gary Ritchie took it, added the game bundle concept and numerous other card games to the package, including FortyThieves, Pyramid, Spider and Tenpile. Then OpenStep came along and the package was converted seperately by both Todd Thomas and Bill Chin . Our efforts were merged and we came up with this package. In fall1998 Jean-Francois Veillette (jfv@iname.com) began to work on undo/redo to realize that the code needed a lot more changes. Changes from Previous Releases User ameliorations: - Undo/Redo - Save/Load - Basic Statistic User downgrade : - only one size of card - lost card back preferences - Pyramids in not fully converted yet (see compile comments) - Freezel lost is one sessions statistic (sometimes we remove codes to help see the logic, then we forget to put it back ... could be that case. ) Code modifications: - Infrastructure modification so that we are now moving card object from a pile to the other (vs. copying card object to different array). - Model / View / Controller compliant (could even have multiple window on the same game). That will allow us to write network distributed games (500, Bridges, etc...) more easily. Those game are still pipe dream, nothing done in that way yet. - Basic architecture for different card Imager which will allow different card size or different card interactions. (See the TiffImager.bproj, which is a replication of CardImager in a bundle. The Application doesn't know yet how to use it.) Todo ( or pipe dream ) : - integrate the TiffImager concept - integrate a new Preferences mechanism for things like CardImager (so card back images), background, save / load, etc ... - find a way for a game to describe the layout of its game without using a nib with size-dependents view. Developed a kind of Card Game Layout Markup Language. And a Card Game Layout Markup Language Layout view that will set up the view and connect pass it to the GameGUI object. - fix bugs. - finish the Pyramids game conversion, essentialy try to understand how the scoring is done. - find a way for the game model object to interact with the interface without depending on the AppKit. Because eventualy those game bundles could be part of a WebObject application (or whatever other User Interface Frameworks). - convert to MacOS-X Server / YellowBox NT (remove the NSUndoManager code) - write / update documentation on new infrastructure - use the new NSDocument architecture Bugs : - this is my own implementation of NSUndoManager. It is using NSInvocation to store almost everythings. When we unarchive an NSInvocation that was set to not retain its arguments, the arguments is retained anyway during the initWithCoder: so we have memory leak on loaded games. (thank's to OmniObjectAlloc.app to find this one ! ) Have fun and feel free to email any suggestions for improvements (developer or user wise). Building and Installation If you received this package in source form you'll need to compile the framework, application and the various game modules before you can play. The following steps will build the various pieces and install them: 1. Open PB.project in the Frameworks/Solitaire framework and set the install path in the inpsector. The default is $(HOME)/Library/Frameworks. Set the build target to install and build. 2. Open the top level PB.project in the Games subdirectory. The default install path for each game is $(HOME)/Library/Solitaire. If you change the install path for the games you neeed to selet each game individually in Project Builder and change it for e ach game. Note, for those of you with OPENSTEP, that if you still have the NEXTSTEP version of Solitaire then it searches for games by default in the same location as this application (~/Library/Solitaire and /LocalLibrary/Solitaire). If you want both ga mes to peacefully coexist it's better to install the games somewhere else and change this application's search path completely. Instructions on how to do this can be found in Optional Step 3 below. By default the engine searches for games in ~/Library/Sol itaire, /LocalLibrary/Solitaire, and the the Solitaire app wrapper. If you decide to install it any other place you'll neeed to tell the engine where to look. Instructions on how to do this are in are below in Step 5. 3 [Optional if you have the NEXTSTEP version of Solitaire and want them to peacefully coexist] I suggest that you change the application source code before you build the application. In the source code (Solitaire/Solitaire) you should find a file called SolitaireMore.m. The first method is called -getGameType. In it is where you define your paths to find the game bundles. For example you could change the search paths to ~/Library/Solitaire-os/ and /LocalLibrary/Solitaire-os/ so that the OpenStep Solitair e.app only finds the OpenStep game bundles and not the NEXTSTEP ones (since they won't load anyways). 4. Open PB.project in the Solitaire app directory and set the install path in the inspector. The default is $(HOME)/Apps. If you installed the above Solitaire.framework in some place other than $(HOME)/Library/Frameworks then you'll also need to add that path to the project's framework search paths so it can be found during building. This can be done from the inspector. Take note that if you build this on Windows that you'll need to remove the SoundKit framework from the list of dependant frameworks befor e building. Finally, set the build target to install and build. 5. [Optional if you installed the Games somewhere other than ~/Library/Solitaire, /LocalLibrary/Solitaire or the app wrapper and didn't do Step 3 above]. The Solitaire game engine needs to know where the games are located. There's a user default, Solitai reBundlePaths that can be used to add game search paths. Just type this at the command line: defaults write Solitaire SolitaireBundlePaths /Whereever/You/Installed/Games;/AndHereToo/Solitaire or on Windows c:\winnt\system32 (isn't that where everything goes on Windows :-) Platforms This app compiles and has been tested under OPENSTEP4.2/Mach, RhapsodyDR2/Intel, and Yellow Box for Windows. It will also likely work fine under RhapsodyDR2/PPC. It may also work under OpenStep4.2/NT too. Jean-Francois Veillette February 1999 Todd Thomas Bill Chin February 1998