From c064619e4d7b3c71a820d36716cc041d779732c5 Mon Sep 17 00:00:00 2001 From: pete gamache Date: Sat, 15 Oct 2016 10:52:32 -0400 Subject: [PATCH] first commit --- .gitignore | 2 + Duane Blehm's Code.zip | Bin 0 -> 411012 bytes .../Animation Æ’/About Animation.txt | 24 + Duane Blehm's Code/Animation Æ’/Anim.R | 16 + Duane Blehm's Code/Animation Æ’/Anim:rsrc | 0 Duane Blehm's Code/Animation Æ’/Animation | 0 .../Animation Æ’/Animation Steps | Bin 0 -> 21382 bytes Duane Blehm's Code/Animation Æ’/Animation.Pas | 534 ++++ .../Cairo Æ’/About Cairo files.. | 1 + Duane Blehm's Code/Cairo Æ’/Cairo Animation | Bin 0 -> 26618 bytes Duane Blehm's Code/Cairo Æ’/Cairo Shapes | Bin 0 -> 25679 bytes .../Cairo Æ’/Cairo ShootOut v1.2L | 0 Duane Blehm's Code/Cairo Æ’/CairoFont.pro | 1 + Duane Blehm's Code/Cairo Æ’/CairoShootOut.Pas | 2811 +++++++++++++++++ Duane Blehm's Code/Cairo Æ’/aCairo.R | 38 + Duane Blehm's Code/Cairo Æ’/aCairo:rsrc | 0 Duane Blehm's Code/Copy Mask Æ’/About CopyMask | Bin 0 -> 25836 bytes Duane Blehm's Code/Copy Mask Æ’/CMask.R | 16 + Duane Blehm's Code/Copy Mask Æ’/CMask:rsrc | 0 Duane Blehm's Code/Copy Mask Æ’/CopyMask | 0 Duane Blehm's Code/Copy Mask Æ’/CopyMask.pas | 533 ++++ .../Drag Piece Æ’/About DragPiece.txt | 14 + .../Drag Piece Æ’/DragPiece animation | Bin 0 -> 29173 bytes Duane Blehm's Code/Drag Piece Æ’/DragPieceDemo | 0 .../Drag Piece Æ’/DragPieceDemo.Pas | 392 +++ .../Drag Piece Æ’/aDragPiece.rsrc | 0 .../More Info*/Programming the Mac.4.6 | Bin 0 -> 30798 bytes .../More Info*/TML Std.Procedures | 1 + Duane Blehm's Code/Regions Æ’/About Regions | Bin 0 -> 11883 bytes Duane Blehm's Code/Regions Æ’/Regions | 0 Duane Blehm's Code/Regions Æ’/Regions.pas | 776 +++++ Duane Blehm's Code/Regions Æ’/RgnWork.rsrc | 0 Duane Blehm's Code/Regions Æ’/aRegions.R | 35 + Duane Blehm's Code/Regions Æ’/aRegions:Rsrc | 0 .../StuntCopter Æ’/About StuntCopter files.. | 1 + Duane Blehm's Code/StuntCopter Æ’/Anim.R | 16 + .../StuntCopter Æ’/StuntCopter.R | 33 + .../StuntCopter Æ’/StuntCopter.pas | 1823 +++++++++++ .../StuntCopter Æ’/StuntCopter.shapes | Bin 0 -> 14636 bytes .../StuntCopter Æ’/StuntCopter1.5 | 0 .../StuntCopter Æ’/StuntCopter:Rsrc | 0 .../Zero GravityÆ’/About Zero Animation | Bin 0 -> 4126 bytes .../Zero GravityÆ’/About Zero files.. | 1 + .../Zero GravityÆ’/Game Animation | Bin 0 -> 15095 bytes Duane Blehm's Code/Zero GravityÆ’/ZeroGravity | 0 .../Zero GravityÆ’/ZeroGravity.R | 35 + .../Zero GravityÆ’/ZeroGravity.pas | 1906 +++++++++++ .../Zero GravityÆ’/ZeroGravity:Rsrc | 0 Makefile | 16 + README.md | 87 + __MACOSX/._Duane Blehm's Code | Bin 0 -> 120 bytes __MACOSX/Duane Blehm's Code/._.DS_Store | Bin 0 -> 120 bytes __MACOSX/Duane Blehm's Code/._Animation Æ’ | Bin 0 -> 120 bytes __MACOSX/Duane Blehm's Code/._Cairo Æ’ | Bin 0 -> 120 bytes __MACOSX/Duane Blehm's Code/._Copy Mask Æ’ | Bin 0 -> 120 bytes __MACOSX/Duane Blehm's Code/._Drag Piece Æ’ | Bin 0 -> 120 bytes __MACOSX/Duane Blehm's Code/._More Info* | Bin 0 -> 120 bytes __MACOSX/Duane Blehm's Code/._Regions Æ’ | Bin 0 -> 120 bytes __MACOSX/Duane Blehm's Code/._StuntCopter Æ’ | Bin 0 -> 120 bytes __MACOSX/Duane Blehm's Code/._Zero GravityÆ’ | Bin 0 -> 120 bytes .../Animation Æ’/._About Animation.txt | Bin 0 -> 467 bytes .../Duane Blehm's Code/Animation Æ’/._Anim.R | Bin 0 -> 468 bytes .../Animation Æ’/._Anim:rsrc | Bin 0 -> 5619 bytes .../Animation Æ’/._Animation | Bin 0 -> 9491 bytes .../Animation Æ’/._Animation Steps | Bin 0 -> 120 bytes .../Animation Æ’/._Animation.Pas | Bin 0 -> 468 bytes .../Cairo Æ’/._About Cairo files.. | Bin 0 -> 467 bytes .../Cairo Æ’/._Cairo Animation | Bin 0 -> 120 bytes .../Duane Blehm's Code/Cairo Æ’/._Cairo Shapes | Bin 0 -> 120 bytes .../Cairo Æ’/._Cairo ShootOut v1.2L | Bin 0 -> 66316 bytes .../Cairo Æ’/._CairoFont.pro | Bin 0 -> 468 bytes .../Cairo Æ’/._CairoShootOut.Pas | Bin 0 -> 468 bytes .../Duane Blehm's Code/Cairo Æ’/._aCairo.R | Bin 0 -> 468 bytes .../Duane Blehm's Code/Cairo Æ’/._aCairo:rsrc | Bin 0 -> 38768 bytes .../Copy Mask Æ’/._About CopyMask | Bin 0 -> 120 bytes .../Duane Blehm's Code/Copy Mask Æ’/._CMask.R | Bin 0 -> 468 bytes .../Copy Mask Æ’/._CMask:rsrc | Bin 0 -> 3785 bytes .../Duane Blehm's Code/Copy Mask Æ’/._CopyMask | Bin 0 -> 7839 bytes .../Copy Mask Æ’/._CopyMask.pas | Bin 0 -> 468 bytes .../Drag Piece Æ’/._About DragPiece.txt | Bin 0 -> 120 bytes .../Drag Piece Æ’/._DragPiece animation | Bin 0 -> 120 bytes .../Drag Piece Æ’/._DragPieceDemo | Bin 0 -> 4214 bytes .../Drag Piece Æ’/._DragPieceDemo.Pas | Bin 0 -> 468 bytes .../Drag Piece Æ’/._aDragPiece.rsrc | Bin 0 -> 1332 bytes .../More Info*/._Programming the Mac.4.6 | Bin 0 -> 982 bytes .../More Info*/._TML Std.Procedures | Bin 0 -> 468 bytes .../Regions Æ’/._About Regions | Bin 0 -> 120 bytes .../Duane Blehm's Code/Regions Æ’/._Regions | Bin 0 -> 19148 bytes .../Regions Æ’/._Regions.pas | Bin 0 -> 468 bytes .../Regions Æ’/._RgnWork.rsrc | Bin 0 -> 406 bytes .../Duane Blehm's Code/Regions Æ’/._aRegions.R | Bin 0 -> 468 bytes .../Regions Æ’/._aRegions:Rsrc | Bin 0 -> 12194 bytes .../StuntCopter Æ’/._About StuntCopter files.. | Bin 0 -> 467 bytes .../Duane Blehm's Code/StuntCopter Æ’/._Anim.R | Bin 0 -> 468 bytes .../StuntCopter Æ’/._StuntCopter.R | Bin 0 -> 468 bytes .../StuntCopter Æ’/._StuntCopter.pas | Bin 0 -> 468 bytes .../StuntCopter Æ’/._StuntCopter.shapes | Bin 0 -> 120 bytes .../StuntCopter Æ’/._StuntCopter1.5 | Bin 0 -> 30998 bytes .../StuntCopter Æ’/._StuntCopter:Rsrc | Bin 0 -> 15098 bytes .../Zero GravityÆ’/._About Zero Animation | Bin 0 -> 850 bytes .../Zero GravityÆ’/._About Zero files.. | Bin 0 -> 467 bytes .../Zero GravityÆ’/._Game Animation | Bin 0 -> 120 bytes .../Zero GravityÆ’/._ZeroGravity | Bin 0 -> 47472 bytes .../Zero GravityÆ’/._ZeroGravity.R | Bin 0 -> 468 bytes .../Zero GravityÆ’/._ZeroGravity.pas | Bin 0 -> 468 bytes .../Zero GravityÆ’/._ZeroGravity:Rsrc | Bin 0 -> 28224 bytes 106 files changed, 9112 insertions(+) create mode 100644 .gitignore create mode 100644 Duane Blehm's Code.zip create mode 100755 Duane Blehm's Code/Animation Æ’/About Animation.txt create mode 100755 Duane Blehm's Code/Animation Æ’/Anim.R create mode 100755 Duane Blehm's Code/Animation Æ’/Anim:rsrc create mode 100755 Duane Blehm's Code/Animation Æ’/Animation create mode 100755 Duane Blehm's Code/Animation Æ’/Animation Steps create mode 100755 Duane Blehm's Code/Animation Æ’/Animation.Pas create mode 100755 Duane Blehm's Code/Cairo Æ’/About Cairo files.. create mode 100755 Duane Blehm's Code/Cairo Æ’/Cairo Animation create mode 100755 Duane Blehm's Code/Cairo Æ’/Cairo Shapes create mode 100755 Duane Blehm's Code/Cairo Æ’/Cairo ShootOut v1.2L create mode 100755 Duane Blehm's Code/Cairo Æ’/CairoFont.pro create mode 100755 Duane Blehm's Code/Cairo Æ’/CairoShootOut.Pas create mode 100755 Duane Blehm's Code/Cairo Æ’/aCairo.R create mode 100755 Duane Blehm's Code/Cairo Æ’/aCairo:rsrc create mode 100755 Duane Blehm's Code/Copy Mask Æ’/About CopyMask create mode 100755 Duane Blehm's Code/Copy Mask Æ’/CMask.R create mode 100755 Duane Blehm's Code/Copy Mask Æ’/CMask:rsrc create mode 100755 Duane Blehm's Code/Copy Mask Æ’/CopyMask create mode 100755 Duane Blehm's Code/Copy Mask Æ’/CopyMask.pas create mode 100755 Duane Blehm's Code/Drag Piece Æ’/About DragPiece.txt create mode 100755 Duane Blehm's Code/Drag Piece Æ’/DragPiece animation create mode 100755 Duane Blehm's Code/Drag Piece Æ’/DragPieceDemo create mode 100755 Duane Blehm's Code/Drag Piece Æ’/DragPieceDemo.Pas create mode 100755 Duane Blehm's Code/Drag Piece Æ’/aDragPiece.rsrc create mode 100755 Duane Blehm's Code/More Info*/Programming the Mac.4.6 create mode 100755 Duane Blehm's Code/More Info*/TML Std.Procedures create mode 100755 Duane Blehm's Code/Regions Æ’/About Regions create mode 100755 Duane Blehm's Code/Regions Æ’/Regions create mode 100755 Duane Blehm's Code/Regions Æ’/Regions.pas create mode 100755 Duane Blehm's Code/Regions Æ’/RgnWork.rsrc create mode 100755 Duane Blehm's Code/Regions Æ’/aRegions.R create mode 100755 Duane Blehm's Code/Regions Æ’/aRegions:Rsrc create mode 100755 Duane Blehm's Code/StuntCopter Æ’/About StuntCopter files.. create mode 100755 Duane Blehm's Code/StuntCopter Æ’/Anim.R create mode 100755 Duane Blehm's Code/StuntCopter Æ’/StuntCopter.R create mode 100755 Duane Blehm's Code/StuntCopter Æ’/StuntCopter.pas create mode 100755 Duane Blehm's Code/StuntCopter Æ’/StuntCopter.shapes create mode 100755 Duane Blehm's Code/StuntCopter Æ’/StuntCopter1.5 create mode 100755 Duane Blehm's Code/StuntCopter Æ’/StuntCopter:Rsrc create mode 100755 Duane Blehm's Code/Zero GravityÆ’/About Zero Animation create mode 100755 Duane Blehm's Code/Zero GravityÆ’/About Zero files.. create mode 100755 Duane Blehm's Code/Zero GravityÆ’/Game Animation create mode 100755 Duane Blehm's Code/Zero GravityÆ’/ZeroGravity create mode 100755 Duane Blehm's Code/Zero GravityÆ’/ZeroGravity.R create mode 100755 Duane Blehm's Code/Zero GravityÆ’/ZeroGravity.pas create mode 100755 Duane Blehm's Code/Zero GravityÆ’/ZeroGravity:Rsrc create mode 100644 Makefile create mode 100644 README.md create mode 100644 __MACOSX/._Duane Blehm's Code create mode 100644 __MACOSX/Duane Blehm's Code/._.DS_Store create mode 100644 __MACOSX/Duane Blehm's Code/._Animation Æ’ create mode 100644 __MACOSX/Duane Blehm's Code/._Cairo Æ’ create mode 100644 __MACOSX/Duane Blehm's Code/._Copy Mask Æ’ create mode 100644 __MACOSX/Duane Blehm's Code/._Drag Piece Æ’ create mode 100644 __MACOSX/Duane Blehm's Code/._More Info* create mode 100644 __MACOSX/Duane Blehm's Code/._Regions Æ’ create mode 100644 __MACOSX/Duane Blehm's Code/._StuntCopter Æ’ create mode 100644 __MACOSX/Duane Blehm's Code/._Zero GravityÆ’ create mode 100644 __MACOSX/Duane Blehm's Code/Animation Æ’/._About Animation.txt create mode 100644 __MACOSX/Duane Blehm's Code/Animation Æ’/._Anim.R create mode 100644 __MACOSX/Duane Blehm's Code/Animation Æ’/._Anim:rsrc create mode 100644 __MACOSX/Duane Blehm's Code/Animation Æ’/._Animation create mode 100644 __MACOSX/Duane Blehm's Code/Animation Æ’/._Animation Steps create mode 100644 __MACOSX/Duane Blehm's Code/Animation Æ’/._Animation.Pas create mode 100644 __MACOSX/Duane Blehm's Code/Cairo Æ’/._About Cairo files.. create mode 100644 __MACOSX/Duane Blehm's Code/Cairo Æ’/._Cairo Animation create mode 100644 __MACOSX/Duane Blehm's Code/Cairo Æ’/._Cairo Shapes create mode 100644 __MACOSX/Duane Blehm's Code/Cairo Æ’/._Cairo ShootOut v1.2L create mode 100644 __MACOSX/Duane Blehm's Code/Cairo Æ’/._CairoFont.pro create mode 100644 __MACOSX/Duane Blehm's Code/Cairo Æ’/._CairoShootOut.Pas create mode 100644 __MACOSX/Duane Blehm's Code/Cairo Æ’/._aCairo.R create mode 100644 __MACOSX/Duane Blehm's Code/Cairo Æ’/._aCairo:rsrc create mode 100644 __MACOSX/Duane Blehm's Code/Copy Mask Æ’/._About CopyMask create mode 100644 __MACOSX/Duane Blehm's Code/Copy Mask Æ’/._CMask.R create mode 100644 __MACOSX/Duane Blehm's Code/Copy Mask Æ’/._CMask:rsrc create mode 100644 __MACOSX/Duane Blehm's Code/Copy Mask Æ’/._CopyMask create mode 100644 __MACOSX/Duane Blehm's Code/Copy Mask Æ’/._CopyMask.pas create mode 100644 __MACOSX/Duane Blehm's Code/Drag Piece Æ’/._About DragPiece.txt create mode 100644 __MACOSX/Duane Blehm's Code/Drag Piece Æ’/._DragPiece animation create mode 100644 __MACOSX/Duane Blehm's Code/Drag Piece Æ’/._DragPieceDemo create mode 100644 __MACOSX/Duane Blehm's Code/Drag Piece Æ’/._DragPieceDemo.Pas create mode 100644 __MACOSX/Duane Blehm's Code/Drag Piece Æ’/._aDragPiece.rsrc create mode 100644 __MACOSX/Duane Blehm's Code/More Info*/._Programming the Mac.4.6 create mode 100644 __MACOSX/Duane Blehm's Code/More Info*/._TML Std.Procedures create mode 100644 __MACOSX/Duane Blehm's Code/Regions Æ’/._About Regions create mode 100644 __MACOSX/Duane Blehm's Code/Regions Æ’/._Regions create mode 100644 __MACOSX/Duane Blehm's Code/Regions Æ’/._Regions.pas create mode 100644 __MACOSX/Duane Blehm's Code/Regions Æ’/._RgnWork.rsrc create mode 100644 __MACOSX/Duane Blehm's Code/Regions Æ’/._aRegions.R create mode 100644 __MACOSX/Duane Blehm's Code/Regions Æ’/._aRegions:Rsrc create mode 100644 __MACOSX/Duane Blehm's Code/StuntCopter Æ’/._About StuntCopter files.. create mode 100644 __MACOSX/Duane Blehm's Code/StuntCopter Æ’/._Anim.R create mode 100644 __MACOSX/Duane Blehm's Code/StuntCopter Æ’/._StuntCopter.R create mode 100644 __MACOSX/Duane Blehm's Code/StuntCopter Æ’/._StuntCopter.pas create mode 100644 __MACOSX/Duane Blehm's Code/StuntCopter Æ’/._StuntCopter.shapes create mode 100644 __MACOSX/Duane Blehm's Code/StuntCopter Æ’/._StuntCopter1.5 create mode 100644 __MACOSX/Duane Blehm's Code/StuntCopter Æ’/._StuntCopter:Rsrc create mode 100644 __MACOSX/Duane Blehm's Code/Zero GravityÆ’/._About Zero Animation create mode 100644 __MACOSX/Duane Blehm's Code/Zero GravityÆ’/._About Zero files.. create mode 100644 __MACOSX/Duane Blehm's Code/Zero GravityÆ’/._Game Animation create mode 100644 __MACOSX/Duane Blehm's Code/Zero GravityÆ’/._ZeroGravity create mode 100644 __MACOSX/Duane Blehm's Code/Zero GravityÆ’/._ZeroGravity.R create mode 100644 __MACOSX/Duane Blehm's Code/Zero GravityÆ’/._ZeroGravity.pas create mode 100644 __MACOSX/Duane Blehm's Code/Zero GravityÆ’/._ZeroGravity:Rsrc diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5ca0973 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +.DS_Store + diff --git a/Duane Blehm's Code.zip b/Duane Blehm's Code.zip new file mode 100644 index 0000000000000000000000000000000000000000..2de5814ffe3b7952824ac3187249fb08d82b82e0 GIT binary patch literal 411012 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 z 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

0!g(GcFFM>vJJ5n6n<6)(MoKF6gUA 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

jP_# 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

sPn50L7(U>wE?v;^ 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 NB_HKV?W1mB{2%yoVHN-Y literal 0 HcmV?d00001 diff --git a/Duane Blehm's Code/Cairo Æ’/Cairo ShootOut v1.2L b/Duane Blehm's Code/Cairo Æ’/Cairo ShootOut v1.2L new file mode 100755 index 0000000..e69de29 diff --git a/Duane Blehm's Code/Cairo Æ’/CairoFont.pro b/Duane Blehm's Code/Cairo Æ’/CairoFont.pro new file mode 100755 index 0000000..95f0e46 --- /dev/null +++ b/Duane Blehm's Code/Cairo Æ’/CairoFont.pro @@ -0,0 +1 @@ + {... here's how we copied the bitImage and locTable of Cairo font...} TYPE {GLOBAL types used for this procedure} FintPtr = ^FontRec; FontHandle = ^FintPtr;{FintPtr???, because FontPtr is already declared!} var {GLOBAL varibles used in this procedure} myFont: FontHandle;{so we can load resource and access FontRec} FontMap: BitMap;{will point to copy of font bitimage} RowWords: integer; RowBytes: integer; tPtr: Ptr; tLong: Longint; BitPtr: Ptr;{pointer to our Copy of BitImage} Locate: Array[0..130] of integer;{'partial' Cairo location table} LocatePtr: Ptr; procedure CreateCairoStuff; var trect:Rect; Begin {load Cairo font and make copies of Character image and locate table} myFont := FontHandle(GetResource('FONT',1426)); HLock(Handle(myFont));{lock it so it won't move... pointers!} RowWords := myFont^^.rowWords;{number of words in row} RowBytes := RowWords * 2;{number of bytes in row} {make tPtr point to start of fontRec bitimage} tPtr := @myFont^^.rowWords;{field just before the bitimage} tLong := ORD(tPtr);{coerce to longint,i-80} tLong := tLong + 2;{2 bytes to get to beginning of bit image,i-234} tPtr := Pointer(tLong);{coerce back to pointer} {create BitPtr size of the bitimage} BitPtr := NewPtr(RowBytes * myFont^^.fRectHeight); {bytes to move = bytes per row * number of rows....} BlockMove(tPtr,BitPtr,RowBytes * myFont^^.fRectHeight);{make the move!} {make tPtr point to start of fontRec locTable.. just beyond bitimage} tPtr := @myFont^^.rowWords;{find start of LocTable for font} tLong := ORD(tPtr);{coerce to longint,i-80} tLong := tLong + (RowBytes * myFont^^.fRectHeight) + 2;{bitimage + integer} tPtr := Pointer(tLong);{coerce back to pointer} {make LocatePtr point to start of our Locate table} LocatePtr := @Locate[0]; {bytes to move = (last char + 1) * 2.. in our case (130+1)*2 = 262} {or Locate[] contains 131 integers (zero based) = 262 bytes} BlockMove(tPtr,LocatePtr,262);{copy LocTable to our Locate array} {for Cairo: Locate[130] = 1656.. offset to rightside of last character, use ResEdit to look at last char of font... will give this OffSet} SetRect(tRect,0,0,Locate[130],myFont^^.fRectHeight); FontMap.baseAddr := QDPtr(BitPtr);{make FontMap point to BitPtr image} FontMap.rowbytes := RowBytes;{row width in bytes, must be even no.} FontMap.bounds := tRect; HUnlock(Handle(myFont));{unlock it, we're done with Ptr stuff} ReleaseResource(Handle(myFont));{if you're done with it} End; {once you have the FontMap ....to draw the char '33' from the BitImage:} var p,q:integer; SourceRect,DestRect:Rect; Begin SourceRect := FontMap.Bounds;{set top and bottom of Rect} SourceRect.left := Locate[33];{coordinate offset to leftside of char 33} SourceRect.right := Locate[33 + 1];{offset to rightside of char 33} DestRect := SourceRect;{size the destination rect} OffSetRect(DestRect,p,q);{locate the DestRect where you want drawn} {now do the transfer!} CopyBits(FontMap,myWindow^.portBits,SourceRect,DestRect,srcCopy,nil); End; \ No newline at end of file diff --git a/Duane Blehm's Code/Cairo Æ’/CairoShootOut.Pas b/Duane Blehm's Code/Cairo Æ’/CairoShootOut.Pas new file mode 100755 index 0000000..1bbecd8 --- /dev/null +++ b/Duane Blehm's Code/Cairo Æ’/CairoShootOut.Pas @@ -0,0 +1,2811 @@ +Program CairoShootOut;{Copyright © 1987 by Duane Blehm, All Rights Reserved, +Distribution of this SourceCode is strictly prohibited!} + +{version 1.2, fixes bug in formula to find random Char's for targets} +{disclaimer: We make not claims about the 'elegance' of this code. We are +relatively new to Pascal and to Mac specific memory management, etc. Our +trial and error code will seem crude to anyone experienced in these matters. +... but we just keep on learning and having fun! If you find any 'for sure' +Errors, let us know.} + +{A couple of procedures dealing with the 'Double KeyCode Lock' scheme +have been removed from this code. Also the game resulting +from compiling this code will not execute very well beyond the first +few levels; however as an example of how the game works the code +is otherwise complete. Please do not distribute any copys of the +game produced by compiling this code! The Copy of 'Cairo ShootOut!' +on this disk is complete in every way.} + +{we have a growing library of 'crude' utilitys for creating the various +'custom' resources used in this and our other programs. For instance +we've written one to create our 'RGN ' resources which are 'tracings' of +picture outlines used to mask irregular shapes for use with CopyBits. We +have a couple that take resources created with MacroMind's Music to +Video utility (from MusicWorks data) and create our 'SONG' resources. +Also one that reads text from a text file data fork and creates the +'TBUF' text resources we use with the TextBox() rom call. We noticed the +'bmap' resource type in ResEdit and came up with procedures to save and +'get' this type resource which can result in significant savings of space +and code in the late stages of program developement. Including all this +stuff is beyond the scope of this code. However, if you are interested +in specific (not elegant) code, it is available. Drop us a line about +what you'd like to see plus $15 and we'll send you a disk on +'how we did it'.} + +{note this version executes GameLoop level#1 at approx. 4 ticks/loop +or 15 loops/ second} +{also does away with Cairo font,had to write myTextBox() to draw clues +between levels with myCFPtr (Cairo font bitimage)} + +USES MacIntf,MacPrint;{we may have to print the order form} + +{$T APPL NILE set the TYPE and CREATOR}{TML Pascal Directives} +{$B+ set the application's bundle bit } +{$L aCairo.rsrc}{link all our resource stuff} + +CONST + WindResId = 128; {Window Resource} + lastMenu = 5; {Number of Menus} + appleMenu = 1; + fileMenu = 256; {Menu Resource Id's} + optionMenu = 257; + worksMenu = 258; + messageMenu = 259; + {Control Resources} + pressResume = 130; + pressEnd = 131; + LastTarget = 7;{number of targets in list} + MaxInteger = 32767; + +TYPE + {type Dialogs and Sounds so we can access them by name} + DialogList = (Help,About,ClueDial,BMap,Tomb,Guard,What, + UnLock,Source,Scores,Name,SetSpeed,PrintDial); + SoundList = (GunShot,GoodHit,BadHit,Miss,BonusSnd,TimeOut, + SnakeCharmer,Walk,Silence); + + {type bmap for loading previously created 'bmap' resources} + BmapRec = Record + baseAddr:Ptr; + rowBytes:integer; + bounds:Rect; + bitStart:array[1..1] of byte;{so we can Ptr to start of BitImage} + end; + BmapPtr = ^BmapRec; + BmapHand = ^BmapPtr; + + {to get bmap's we created the BitMaps as in the Animation Example, then + drew the pictures,etc... then called the following to make the bmap: + + procedure CreateBMaps(addBits:Boolean); + var + theErr:OsErr; + myBMap:BmapHand; + Begin + (*make a copy of the Bitmap with a Handle*) + myBMap := BmapHand(NewHandle(SizeOf(BitMap))); + myBMap^^.rowBytes := OffScreen.rowBytes; + myBMap^^.bounds := OffScreen.bounds; + (*now stick a copy of the BitImage on the end of the Handle*) + If addBits then theErr := PtrAndHand(OffScreen.baseAddr, + Handle(myBMap),GetPtrSize(OffScreen.baseAddr)); + (*watch out for memory errors!*) + AddResource(Handle(myBmap),'bmap',128,'offscreen'); + If theErr <> noErr then SysBeep(1);(*our PtrAndHand probably failed*) + End; + + this is more efficient than a lot of pictures, creating Bitmaps, + drawing, locating rects, etc... however locking all this down too soon + in development process could hinder making changes later on....} + + ScoreNText = Record {record for hiscores} + nameStr:Str255;{we'll pack 4 names into NameStr} + level:array [1..4] of Longint; + score:array [1..4] of Longint; + end; + ScorePtr = ^ScoreNText; + + {at one time we included the Cairo font in resources, loaded it and made + copies of Bitimage and locate table... but came up with this record to + store only the parts we needed!.. see 'CairoFont.pro' file for more info} + CFRec = Record {resource contains only bitimage and locate table of Cairo} + bitImage:Array[1..105,1..24] of integer;{char. bitimage} + locate:Array[0..130] of integer;{partial location table} + end; + CFPtr = ^CFRec; + CFHandle = ^CFPtr; + + {note: it is easy to create a resource... just create the data with a + handle to it... do an AddResource()..copy/paste it into application + resource file and reverse the procedure to load it into application.} + + nrctRec = Record {so we can load a list of rects from resource} + num:integer;{Number of records} + theRects:array[1..100] of Rect;{limits on # of rects??} + end; + nrctPtr = ^nrctRec; + nrctHandle = ^nrctPtr; + + ClueRec = Record{record of stuff for drawing clues between levels} + message:Str255; {message for this clue} + messRect:Rect; {box to contain message.. TextBox()} + hint:Str255; {clue word} + hintRect:Rect; + just:integer; {justification for hint textbox,all messages centered} + glyphPic:PicHandle;{heiroglyph picture from resource} + dialHand:Handle;{handle to textitem in dialog} + dialWord:Str255;{string contains user input} + end; + + SongRec = Record {import a song record from our snake 'SONG' resource} + noteCount:integer;{how many notes in this song} + pitch:array[1..48,1..2] of Longint;{48 notes,2 voices} + duration:array[1..48] of integer;{how many ticks will pitch play} + end; + SongPtr = ^SongRec; + SongHandle = ^SongPtr; + + WSongRec = Record {import a song record from our Walk 'SONG' resource} + noteCount:integer;{how many notes in this song} + pitch:array[1..68,1..2] of Longint;{68 notes,2 voices} + duration:array[1..68] of integer;{how many ticks will pitch play} + end; + WSongPtr = ^WSongRec; + WSongHandle = ^WSongPtr; + {note:could have used same song type for both songs except for # of notes, + We'll change the Record to be note 'independent' next time.} + + TimeBonusRec = Record {stuff for display of Time-to-Score at end of level} + frame:Rect; {size window for Timebonus} + hourmove:Point; {offset for hourglass...move from normal position} + numbox:Rect; {frame for numbers} + arrowDest:Rect; {destination for copybits of arrow} + arrowSource:Rect;{source in Cairo bitmap} + end; + + TargetRec = Record {record of individual targets on display} + theChar:integer;{character in the font} + head:integer; {pixOff when the target begins in Wings} + wide:integer; {width of target} + end; + + ValidRec = Record {record for scorebox and score targets} + which:integer; {which char in font} + points:integer; {points for hitting this target} + remain:integer; {how many of this target left to hit} + remainPt:Point; {for finding moveto point for drawString} + blankRect:Rect; {erase rect for drawing remain # into scorebox} + centerPt:Point; {top,centerline of box in scoreframe} + end; + + StatusRec = Record {4 boxes for score,hiscore,etc} + blankRect:Rect; {rect to erase before drawing new number} + centerPt:Point; {for finding MoveTo point before DrawString} + end; + +VAR + {local var's made global.. for speed of execution of code} + unNames: array[1..4] of Str255; {unpack our hiscore names} + RListHand: nrctHandle; + si,sj: integer;{StartOne and StaggerOne} + di,dj,dk,dm: integer;{DetectAHit and HandlAHit} + HitAValidTarget: boolean; + + GameOver: Boolean; {set True if hourglass empty} + myRects: nrctHandle; {access to Rects in nrct resource} + TarWindPic: PicHandle; {pic of our collective windows} + myCFPtr: CFPtr; {access to Cairo font stuff in resources} + SpeedTrapOn: Boolean; {if true slow down the game} + SpeedFactor, + SpeedTicks: Longint; {rate of delay / slow down} + theHighs: ScorePtr; {access to hiscore record/handle} + ScoreHandle: Handle; {handle to hiscore resource} + NameString: Str255; {store our players name for hiscore} + BuffSize: Longint; {size buffers} + PagePrint: THPrint; { handle to the page setup record } + ResRefNum: integer; {reference number for appl.resource file} + tBuf: Handle; {text from TBUF resource for TextBox} + ClueNdx: integer; {point to next clueword} + ClueWords: Array[1..10] of Str255; {hold various possible clues} + DialNdx: DialogList; {will step through our dialogs array} + myDialog: Array[Help..PrintDial] of DialogPtr; + myDialogRec: Array[Help..PrintDial] of DialogRecord; + Tut: Array[168..171] of PicHandle; {for drawing tomb} + ClueShadow: PicHandle; {shadow the booth to hilight clue} + ClueErase: Rect; {rect for erase before Clues} + Clues: Array[1..4] of ClueRec; {our awards..} + FetchChar: Rect; {used in startOne... constant top/bottom} + CursorNdx: integer; {which cursor to use} + myCursor: Array[1..3] of CursHandle;{our three cursors} + StartPitch: Array[1..4] of Longint;{pitches to start targetsound} + UpDateMap: BitMap; {keep a copy of targetwindows during pause} + UpDateRect: Rect; {for copybits of bitmap} + ResumeButton, + EndButton: ControlHandle; { handles to controlbuttons } + RedrawRect: Rect; {area for invalRect for levels} + TimeCount: integer; {interval between hourglass moves} + TBone: TimeBonusRec;{hold all our timebonus stuff} + ShadowRect: Rect; {rect used to shadow booth interior} + LastValid: integer; {number of Score targets..max of 6} + Score,HiScore, + Level,MissCount: Longint; + StatPic: PicHandle; {Status is pic of Score/HiScore frame} + StatList: Array[1..4] of StatusRec;{stuff for drawing Scores,etc} + ValidDone: Boolean; {flag is all valids have 0 remain} + Direction: Array[1..3] of integer;{scroll right or left} + Vector: Array[1..3] of integer;{will be product of speed and direction} + TarWindRgn: RgnHandle; {region to mask drawing eye in TarWindow[4]} + BonusMap: BitMap; {load from bmap resource, contains BTarget pics} + OffBonus: Array[1..6,1..2] of Rect;{Rects to shapes in BonusMap} + BonusNdx: integer; {pointer to OffBonus rects, 1-6} + BonusShape: integer; {pointer to 1 of two shapes,internal anim.} + BonusRect: Rect; {onScreen Rect for CopyBits of Bonus Shapes} + BonusUnderWay: Boolean; {is bonus underway?} + BonusLoops, + PrevBonusLoops: integer; {count for # of loops} + BonusSpeed: integer; {-4 to +4 lateral movement...left or right} + + MouseRect, + GunLimit: Rect; {limit movement of site during game} + GameUnderWay: Boolean; + PauseStatus: integer; {0 no pause,1 game pause, 2 clue pause} + NowValid: Array[1..6] of integer;{list of Valids with targets remaining} + NowNdx: integer; {index for NowValid} + ScoreNumRect, + ScoreFrameRect: Rect; + ScoreNum, + ScoreFrame: PicHandle; {for drawing ScoreBox frame} + tPt: Point; + tFlag: Boolean; + tRect,sRect,dRect: Rect; {global temporary varibles} + LeftSide,RightSide, + BackSide: PicHandle; {our shooting gallery pics} + Valid: Array[1..6] of ValidRec;{list of valid targets} + + OffHour,Hour, {hourglass} + OffBotSand,OffTopSand, {frame complete top and bottom sand} + OBSand,BotSand, {partial top and bottom sand,for animation} + OTSand,TopSand: Rect; + TrickleTop, + TrickleBot: Point; {left sand trickle (line) top and bottom} + TrickTopR, + TrickBotR: Point; {points for drawing right sand trickle line} + TrickleLeft: Boolean; {true if trickle currently leftside} + BotSandRgn, + TopSandRgn: RgnHandle; {regions for masking sand into hourglass} + + {for drawing spot targets in side windows} + SpotSpeed: Array[5..6] of integer;{window 5&6,speed of target} + OffSpotTarget: Rect; {whole spot} + OffSpot: Array[5..6] of Rect;{partial spot...} + SpotRect: Array[5..6] of Rect;{locate spot on screen} + TopSpot,BotSpot: Array[5..6] of integer;{turn around point for spots,speed} + + TarList: Array[1..3,1..LastTarget] Of TargetRec;{targets on Screen} + NxtTar, {points to TarList element} + Speed,PixOff: Array[1..3] of integer;{pixoff= # of pixels target moves} + HitWhich, {which target in the window target list} + HitWindow: integer; {which window hit was made in} + Hit: Boolean; {true if a target was hit} + TargetCenter: Point; {point at center of Rect pointed to by mouse/site} + myMenus: Array[1..lastMenu] of MenuHandle; + refNum,theMenu, + theItem: integer; + Finished: Boolean; {used to terminate the program,quit} + ClockCursor: CursHandle; {handle to watch cursor} + myWindow: WindowPtr; + wRecord: WindowRecord;{we alocate window on the stack} + Screen,DragArea: Rect; {set limits of drag area} + myMouse: Point; {used with GetMouse in animateoneloop} + aTick: Longint; {usually with TickCount but sometimes just temp.} + + ExplodeRect, + OffExplode: Rect; {Rects to explode shape in offscreen} + WhichGun: integer; {which gun to draw for gray backgound} + GunRect: Rect; {destination rect for drawing Gun} + OffGun,OffSite: Array[0..1] of Rect;{two guns, for drawing over gray} + TarWindow: Array[1..6] of Rect;{our targets windows..6 of them} + ShotFired: Boolean; + Piece,OffPiece: Array[1..3] of Rect;{rects to tiny area left after scroll} + SiteRect:Rect; + SiteRgn: Array[0..1] of RgnHandle;{for drawing site into OffGun rects} + myPattern, + myDiagPat: Pattern; {patterns for drawing shading} + + FontMap: BitMap; {Cairo font bitimage from resource,myCFPtr} + Wings: Array[1..3] of BitMap;{new targets just coming into window} + + tStr: Str255; + tPtr: Ptr; + tLong: Longint; + + OffScreen,OldBits: BitMap; {for drawing into offscreen} + tRgn: RgnHandle; + Counter: integer; {count loops for hourglass/time} + i,j,k,m,n: integer; + + {Sound varibles} + Buff: Array[GunShot..TimeOut] of Longint;{for Sound buffers} + myPtr: Ptr; + myHandle: Handle; + Sound: Array[GunShot..SnakeCharmer] of FFSynthPtr;{FreeForm synthesizer sound} + SnakeSynth: FTSynthPtr; {Snake is a FourTone sound/use for Walk too} + SnakeSound: FTSndRecPtr; {two FourTone Sounds} + SoundParmBlk: ParmBlkPtr; {used for PBWrite instead of StartSound} + WhichSound: SoundList; {which sound is being played?} + err: OSerr; + SawToothWave: wavePtr; + SquareWave: wavePtr; + mySongPtr: SongPtr; {snake song} + myWSongPtr: WSongPtr; {walk song.. different # of notes} + ToneTicks, + ToneDelay: Longint; {# of ticks each song pitch will play} + NoteCount: Longint; {# of notes played for song} + SoundOn: Boolean; {user request for sound off/on} +{----------------------------------------------} +procedure SetCursorMenus(StartGame:Boolean); +var i:integer; +Begin + If StartGame then begin {starting the game} + InsertMenu(myMenus[5],0); {display 'any key to exit' message} + For i := 1 to 4 do DisableItem(myMenus[i],0);{disable (gray) others} + DrawMenuBar; {draw the menus} + GameUnderWay := True; {we're back into game mode} + HideCursor; + FlushEvents(mDownMask,0); {clear all mouseDowns} + end + Else Begin {interrupt the game} + If CursorNdx < 3 then inc(CursorNdx) else CursorNdx := 1; + SetCursor(myCursor[CursorNdx]^^);{display one of our 3 cursors} + ShowCursor; + GameUnderWay := False; + DeleteMenu(MessageMenu); {remove exit message,i-354} + For i := 1 to 4 do EnableItem(myMenus[i],0);{show other menu options} + DrawMenuBar; + end; +End; + +procedure DrawStatus(which:integer;amount:Longint); +{draw score,missCount, etc. into Stat frame} +Begin + NumToString(amount,tStr);{convert number to string} + MoveTo(StatList[which].centerPt.h-(StringWidth(tStr) div 2), + StatList[which].centerPt.v);{center it} + EraseRect(StatList[which].blankRect);{erase last} + DrawString(tStr);{draw it!} +end; + +{myTextBox is similar to TextBox() rom but uses Cairo BitImage in myCFPtr} +procedure myTextBox(text:Ptr;length:Longint;box:Rect;just:integer); +var + StartLine:Ptr; + EndLine,TestEnd:Ptr; + LineWidth,TestWidth:integer; + Done:Boolean; + which:byte; +procedure DrawLine; +var + index:Longint; +Begin + Case just of {justification....find starting point for first dRect} + -1: dRect.left := box.right - LineWidth; {right} + 0: dRect.left := box.left;{left} + 1: dRect.left := box.left + ((box.right-box.left-LineWidth) div 2);{center} + end;{case} + For index := ord(StartLine) to ord(EndLine) do begin + If Ptr(index)^ <> 32 then begin {Ptr(index)^ points to which} + sRect.left := myCFPtr^.locate[Ptr(index)^]; + sRect.right := myCFPtr^.locate[Ptr(index)^+1]; + dRect.right := dRect.left + sRect.right-sRect.left; + CopyBits(FontMap,myWindow^.portBits,sRect,dRect,srcCopy,nil); + dRect.left := dRect.right + 2;{move over for next char} + end{if Ptr(} + else dRect.left := dRect.right + 10;{for space char} + end;{for index} +End; + +procedure InitialLine; +Begin + StartLine := EndLine; + TestEnd := Endline; + LineWidth := 0; + TestWidth := 0; +end; + +procedure NewLine; +Begin + OffSetRect(dRect,0,28);{move down a line,font height + 4} + EndLine := Ptr(ord(EndLine)+1);{end currently a space so move one} + {could test here for more spaces!} + InitialLine; +End; + +Begin + SetRect(sRect,0,0,0,24);{height of 24 for Cairo} + If length > 0 then length := length -1;{we're zero based} + {initialize varibles} + EndLine := text; + InitialLine; + dRect.top := box.top; + dRect.bottom := dRect.top + 24;{fHeight := 24 for Cairo} + Done := false; + EraseRect(box); + Repeat + which := TestEnd^; + If which <> 32 then begin {break lines on spaces} + TestWidth := TestWidth + myCFPtr^.locate[which+1] - + myCFPtr^.locate[which] + 2; + {test for end of text here} + If ord(TestEnd) >= (ord(text) + length) then Begin {end of text} + If TestWidth > (Box.right-Box.left) then begin {line too long} + DrawLine; + NewLine;{set TestEnd back to Last EndLine and continue} + end + else begin {line width ok so draw it all} + EndLine := Ptr(ord(text)+length);{set to end of text} + LineWidth := TestWidth;{approx width?} + DrawLine; + Done := True; {we're finished} + end;{else} + end;{if ord} + end{if which} + else begin {current which is a space} + TestWidth := TestWidth + 10;{width of my space} + If TestWidth > (Box.right-Box.left) then begin {word won't fit} + DrawLine;{draw the line without Test stuff on end} + NewLine; + end + else begin {move actual end of line up to testend} + EndLine := TestEnd; + LineWidth := TestWidth; + end;{else } + end;{else} + TestEnd := Ptr(ord(TestEnd)+1);{move TestEnd up one} + + Until(Done); +End; + +procedure DrawAClue(index:integer);{clues are displayed on even levels 2-8} +Begin + DrawPicture(ClueShadow,ClueShadow^^.picFrame);{shadow on booth} + EraseRect(ClueErase);{erase the background in target area} + {draw one of 4 glyph pictures} + DrawPicture(Clues[index].glyphpic,Clues[index].glyphpic^^.picframe); + {myTextBox uses Cairo bitimage in FontMap to display text} + myTextBox(Pointer(ord(@Clues[index].message)+1),Length(Clues[index].message), + Clues[index].messRect,teJustCenter);{draw message} + myTextBox(Pointer(ord(@Clues[index].hint)+1),Length(Clues[index].hint), + Clues[index].hintRect,Clues[index].just);{draw clueword} +End; + +procedure DrawRemainIntoScoreBox(which:integer); +{draw # of targets remaining for 'which' Valid target} +Begin + EraseRect(Valid[which].blankRect);{erase last} + NumToString(Valid[which].remain,tStr); + MoveTo(Valid[which].remainPt.h-(StringWidth(tStr) div 2), + Valid[which].remainPt.v);{center it} + DrawString(tStr); +end; + +procedure PaintAShadow(aRect:Rect);{used to shade booth and Valid targets} +Begin + PenMode(patOr);{ will combine pattern with existing background} + PenPat(myDiagPat);{diagonal lines} + PaintRect(aRect);{fill aRect with the pattern... mode 'or'} + PenNormal; {reset the Pen stuff to default} +end; + +procedure DrawHourGlass;{draw hourglass and top/bottom sand} +Begin + CopyBits(OffScreen,myWindow^.portBits,OffHour,Hour,srcCopy,nil);{hourglass} + {OTSand & OBSand rects are moving over Sand pics on OffScreen} + CopyBits(OffScreen,myWindow^.portBits,OTSand, + TopSand,srcCopy,TopSandRgn);{top Sand} + CopyBits(OffScreen,myWindow^.portBits,OBSand, + BotSand,srcCopy,BotSandRgn);{Bottom sand} +end; + +procedure SizeRectsForBox(whichchar,whichbox:integer); +{for drawing char/targets into scorebox each level and updates} +Begin + {sRect.top and bottom are constant.. fontMap.bounds} + sRect.left := myCFPtr^.locate[whichchar];{left point from locate table} + sRect.right := myCFPtr^.locate[whichchar+1];{right point from locate table} + {center tRect in its ScoreBox} + tRect.left := Valid[whichBox].centerPt.h - ((sRect.right-sRect.left) div 2); + tRect.right := tRect.left + (sRect.right-sRect.left); +End; + +procedure DrawTargetsInScoreBox; +Begin + {draw the targets into the scoreBox} + sRect := FontMap.bounds;{bounds rect of FontMap bitmap,top/bottom constant} + For i := 1 to LastValid do begin {4-6 scoreboxes} + tRect.top := Valid[i].centerPt.v;{topcenter of box} + tRect.bottom := tRect.top + 24;{height of font} + + SizeRectsForBox(Valid[i].which,i);{size sRect/tRect left and right} + + CopyBits(FontMap,myWindow^.portBits,sRect,tRect,srcCopy,nil); + DrawRemainIntoScoreBox(i);{# remaining, draw just below target} + if Valid[i].remain = 0 then begin {disabled shading over box} + tRect := Valid[i].blankrect; + tRect.top := Valid[i].centerPt.v;{tRect now is whole box} + PaintAShadow(tRect); + end;{if valid remain} + end; +End; + +procedure DrawWindowContents(WhichWindow:WindowPtr);{update events} +Begin + DrawPicture(BackSide,BackSide^^.picFrame);{back/center of booth} + DrawPicture(LeftSide,LeftSide^^.picFrame);{left side of booth} + DrawPicture(RightSide,RightSide^^.picFrame);{right side of booth} + DrawPicture(ScoreFrame,ScoreFrameRect); {score box frame} + DrawPicture(ScoreNum,ScoreNumRect); {points in score box} + DrawPicture(StatPic,StatPic^^.picFrame); {status/score box frame} + DrawHourGlass; {hourglass stuff} + DrawStatus(1,Level);{four varibles in status box, score etc.} + DrawStatus(2,Score); + DrawStatus(3,MissCount); + DrawStatus(4,HiScore); + + Case PauseStatus of + {PauseStatus tells us 'how' the screen 'looks',what to draw} + 0:Begin {no pause.. usually in between games} + DrawPicture(TarWindPic,TarWindPic^^.picFrame); + If not(GameUnderWay) then begin + PaintAShadow(ShadowRect);{shadow the booth interior} + DrawTargetsInScoreBox; + end; + end;{case 0} + 1,2:Begin {game under way pause...1 = keydown interrupt?, 2 = clue} + If PauseStatus = 1 then CopyBits(OffScreen,mywindow^.portBits, + OffGun[whichGun],GunRect,srcCopy,nil);{redraw gun} + DrawTargetsInScoreBox; + If PauseStatus = 2 then DrawAClue(Level div 2) {clue on display} + else {Copy from UpDateMap... contains copy of targets, when pause began} + CopyBits(UpDateMap,myWindow^.portBits,UpDateMap.bounds,UpDateRect, + srcCopy,nil); + end;{case 1,2} + end;{case pauseStatus} + + DrawControls(myWindow);{draw Continue/End buttons if they're not hidden} +End; + +procedure UpdateMyWindow; +Begin + BeginUpDate(myWindow); + EraseRect(myWindow^.portRect);{will be clipped to update rgn} + DrawWindowContents(myWindow); + EndUpDate(myWindow); +End; + +procedure DrawBoldButton(WhichDialog:DialogList);{bold button in dialogs} +var + tHand:Handle;{j:integer,tRect:Rect} +Begin + PenSize(3,3); + GetDItem(myDialog[WhichDialog],1,j,tHand,tRect);{frame Item #1} + InsetRect(tRect,-4,-4); + FrameRoundRect(tRect,16,16); + PenSize(1,1); +End; + +procedure DisplayWhatDialog(WhichDialog:DialogList);{called from Guard dialog} +var + tRect,fRect: Rect; + itemHit,i,j: integer; + tPort: GrafPtr; +Begin + GetPort(tPort); + ShowWindow(myDialog[WhichDialog]);{all dialogs are hidden} + SelectWindow(myDialog[WhichDialog]);{bring it to the front, activate} + SetPort(myDialog[WhichDialog]); {so we can draw into our dialog window} + tBuf := GetResource('TBUF',127);{load our text from resource} + HLock(tBuf);{lock it down, so we can use a ptr, don't want it moving on us} + TextFont(3); + TextSize(9); + {draw text into dialog window} + TextBox(tBuf^,GetHandleSize(tBuf),myDialog[what]^.portRect,teJustLeft); + HUnLock(tBuf);{done} + DrawBoldButton(WhichDialog); + ModalDialog(Nil,itemHit); + + HideWindow(myDialog[WhichDialog]); + SetPort(tPort);{restore port} +end; + +procedure DrawOrderForm(frame:Rect);{for printing} +var + tRect:Rect; + tStr:Str255; + myHandle:Handle; +Begin + {all drawing is being done into the printer port/bit map} + TextFont(geneva); + TextSize(10); + tRect := frame;{size of printing output} + tRect.top := tRect.top + 130;{reserve 130 pixels for our header} + InsetRect(tRect,20,0);{shink the page size} + {draw page stuff here} + HLock(tBuf);{tbuf loaded in the DoPrint procedure} + TextBox(tBuf^,GetHandleSize(tBuf),tRect,teJustCenter);{draw it } + HUnLock(tBuf); + tRect := Clues[3].glyphpic^^.picframe;{Chariot glyph pic, upper left} + OffSetRect(tRect,frame.left+20-tRect.left,frame.top+10-tRect.top); + DrawPicture(Clues[3].glyphpic,tRect); + + GetIndString(tStr,1000,7);{source of copy of program} + tRect.top := tRect.top + 10;{relocate tRect from pic above} + tRect.left := tRect.right + 10; + tRect.right := tRect.left + 100; + tRect.bottom := 129; + TextBox(Pointer(ord(@tStr)+1),Length(tStr),tRect,teJustLeft); + + TextSize(12); + GetIndString(tStr,1000,5);{logo text stuff,upper right} + tRect := frame; + tRect.top := tRect.top + 10; + tRect.left := tRect.right - 180; + tRect.bottom := 129;{just above completed textbox!} + TextBox(Pointer(ord(@tStr)+1),Length(tStr),tRect,teJustLeft); + + OffSetRect(tRect,-186,0); + tRect.bottom := tRect.top + 32; + tRect.left := tRect.right - 32;{for drawing logo icon} + myHandle := GetIcon(130); + PlotIcon(tRect,myHandle); + + MoveTo(Frame.left + 20,Frame.top + 120);{just below glyph pic} + TextSize(12); + TextFace([Bold,Shadow]); + DrawString('Cairo #1 KeyCode = '); +End; + +procedure DoPrintUpdates;{Printer dialogs erase the windows behind them so +update myWindow,Guard dialog,display PrintDialog} +{there has got to be a better way of updating while dialogs are on display.. +perhaps by using Modeless dialogs and handling all events in the program rather +than calling ModalDialog()} +var + EventFlag,Result:Boolean; + tPort:GrafPtr; + myEvent:EventRecord; + itemHit:integer; + Digit:Char; +Begin + GetPort(tport); + SetPort(myWindow); + UpdateMyWindow;{dialogs have erased our window so do updates} + SetPort(myDialog[Guard]);{do updates pending for dialog} + Repeat + Result := GetNextEvent(everyEvent,myEvent);{mask only Updates?} + EventFlag := IsDialogEvent(myEvent); + If EventFlag then + Result := DialogSelect(myEvent,myDialog[guard],itemHit) + Until(not(EventAvail(EveryEvent,myEvent))); + + ShowWindow(myDialog[PrintDial]);{our 'cancel printing' dialog} + SelectWindow(myDialog[PrintDial]); + SetPort(myDialog[PrintDial]); {so we can draw into our dialog window} + Digit := chr(17);{this is the 'Commandkey symbol'} + tStr := concat(Digit,' .'); + ParamText(tStr,'','','');{install command key-period into dialog ^0} + Repeat + Result := GetNextEvent(everyEvent,myEvent);{do updates} + EventFlag := IsDialogEvent(myEvent); + If EventFlag then + Result := DialogSelect(myEvent,myDialog[PrintDial],itemHit) + Until(not(EventAvail(EveryEvent,myEvent))); + SetPort(tPort);{restore port and get back to printing stuff} +End; + +procedure DoPrint;{print the order form} +var + myPrPort:TPPrPort; + myStRec:TPrStatus; + tPort:GrafPtr; +begin + GetPort(tPort);{we'll be changing to printer port, so get copy of current} + tBuf := GetResource('TBUF',128);{order form text,had error during OpenPage?} + PagePrint := THPrint(NewHandle(SizeOf(TPrint)));{create our print record} + PROpen;{open the print manager!! ii-157} + If PrError = noErr then begin + PrintDefault(PagePrint);{fill with default values ii-158} + {tFlag := PrStlDialog(PagePrint);this is page setup stuff} + If PrJobDialog(PagePrint) then begin {dialog with user} + DoPrintUpDates;{clean up our windows,display 'cancel' dialog} + myPrPort := PrOpenDoc(PagePrint,nil,nil); + PrOpenPage(myPrPort,nil); { start new page} + If PrError = noErr then + DrawOrderForm(PagePrint^^.prInfo.rPage);{draw my page} + + PrClosePage(myPrPort); + + PrCloseDoc(myPrPort); + If (PagePrint^^.prJob.bjDocLoop = bSpoolLoop) AND + (PrError = noErr) then + PrPicFile(PagePrint,nil,nil,nil,myStRec); + + {If PrError <> noErr then alert user of printing error} + end;{if user says then open the printing job} + end;{if PROpen successfull} + PRClose;{close the print manager} + HideWindow(myDialog[PrintDial]);{close our cancel/command-period dialog} + SetPort(tPort); +End; + +procedure DisplayAlert(WhichAlert:integer;Var result:integer); +var + tPort:GrafPtr; +Begin + GetPort(tPort); + result := NoteAlert(WhichAlert,nil);{display the alert} + ResetAlrtStage;{i-423} + SetPort(tPort); +End; + +procedure SetControlValue(which:integer); +{for SetSpeed dialog,which item#, the radio controls are numbered 2 thru 4} +var + i,h:integer; +Begin + For i := 2 to 4 do begin {reset controls to user selected control,which} + GetDItem(myDialog[SetSpeed],i,h,myHandle,tRect); + If i = which then SetCtlValue(ControlHandle(myHandle),1) + else SetCtlValue(ControlHandle(myHandle),0); + end; + Case which of + 2: SpeedTrapOn := False;{normal mode... no delays} + 3,4:begin + SpeedTrapOn := True;{flag that delays are needed} + If which = 3 then SpeedFactor := 2 + else SpeedFactor := 3;{how much delay.. 2 or 3 ticks} + end; + end;{case which} +End; + +procedure DisplayDialog(WhichDialog:DialogList);{from dialog list} +var + tRect,fRect,messFrame,itemRect: Rect; + itemHit,i,j,theType: integer; + tPort: GrafPtr; + tHandle: Handle; + index:integer; +Begin + GetPort(tPort); + ShowWindow(myDialog[WhichDialog]);{dialogs are hidden in resource} + SelectWindow(myDialog[WhichDialog]);{bring to front, activate} + SetPort(myDialog[WhichDialog]); {so we can draw into our dialog window} + + FlushEvents(mDownMask,0); {clear all mouseDowns} + + DrawBoldButton(whichDialog);{draw item one button bold, Enter key default} + Case WhichDialog of + Help: + ModalDialog(Nil,itemHit); {close it no matter what was hit} + About:begin + aTick := 1;{for a delay} + Repeat + ModalDialog(Nil,itemHit); + If itemHit = 8 then begin {animate the chariot from OffScreen} + SetRect(tRect,0,0,43,19);{size of one chariot} + fRect := tRect; + OffSetRect(tRect,OffScreen.bounds.right-tRect.right, + OffScreen.bounds.bottom-tRect.bottom);{in offScreen} + OffSetRect(fRect,myDialog[About]^.portRect.left-fRect.right, + myDialog[About]^.portRect.bottom - 2 -fRect.bottom); + MoveTo(fRect.right,fRect.bottom); + LineTo(500,fRect.bottom);{baseline} + {animate until chariot is off right side} + While (fRect.left < myDialog[About]^.portRect.right) do begin + CopyBits(OffScreen,myDialog[About]^.portBits,tRect,fRect, + srcCopy,nil);{draw a chariot} + OffSetRect(fRect,3,0);{move destination to right 3 pixels} + {make tRect point to one of chariot shapes in ChariotMap} + If tRect.right < OffScreen.bounds.right then + OffSetRect(tRect,43,0) {move right to next shape} + else OffSetRect(tRect,-86,0);{move back to first} + Delay(aTick,SpeedTicks);{delay one tick} + end;{while fRect} + end;{if itemhit} + + Until(itemHit = 1); + end; + ClueDial:{get 4 clue words from user to open tomb} + Begin + For i := 1 to 4 do SetIText(Clues[i].dialHand,'');{empty strings} + SelIText(myDialog[ClueDial],6,0,0);{select first box} + Repeat + ModalDialog(Nil,itemHit);{Modal does an Update event for the dialog box} + + Until((itemHit = 1) or (itemHit = 11));{ok button or Pass} + + {exit with Pausestatus = 3 for tomb or 0 for continue} + If itemHit = 1 then begin {check the user input against hints} + PauseStatus := 3; + For i := 1 to 4 do begin {check user input against clues} + GetIText(Clues[i].dialHand,Clues[i].dialWord); + If Clues[i].hint <> Clues[i].dialWord then PauseStatus := 0; + end;{for i} + + If PauseStatus = 0 then DisplayAlert(134,i);{sorry, bad clues} + end{If itemhit} + else If itemHit = 11 then PauseStatus := 0;{user wants to pass} + End;{cluedial} + + BMap:begin{peek offscreen bitmap} + CopyBits(OffScreen,myDialog[BMap]^.portBits,OffScreen.bounds, + OffScreen.bounds,srcCopy,nil); {copy bitmap to dialog box} + tRect := BonusMap.bounds; + OffSetRect(tRect,myDialog[BMap]^.portRect.right - 3 - trect.right, + myDialog[BMap]^.portRect.bottom - 3 - trect.bottom); + CopyBits(BonusMap,myDialog[BMap]^.portBits,BonusMap.bounds, + tRect,srcCopy,nil); {bonus pics to bottom right} + DrawBoldButton(whichDialog); + ModalDialog(Nil,itemHit); {close it no matter what was hit} + end;{BMap} + + Tomb:begin + SetOrigin(70,6);{shrink tut to fit in dialogue window} + + {draw inside of tomb} + DrawPicture(Tut[170],Tut[170]^^.picFrame);{background} + tRect := Tut[169]^^.picFrame; + For i := 1 to 11 do begin + DrawPicture(Tut[169],tRect);{pics along back wall} + OffSetRect(tRect,36,0); + end; + DrawPicture(Tut[171],Tut[171]^^.picFrame);{tutplatform} + DrawPicture(Tut[168],Tut[168]^^.picFrame);{tut} + + SetOrigin(0,0); + GetDItem(myDialog[Tomb],1,j,myHandle,tRect);{erase under button} + InsetRect(tRect,-2,-2); + EraseRect(tRect); + + {frame the text box, item #2} + DrawBoldButton(WhichDialog); + GetDItem(myDialog[Tomb],2,j,myHandle,tRect); + InsetRect(tRect,-1,-1);{frame the text item} + EraseRect(tRect); + FrameRect(tRect); + + ModalDialog(Nil,itemHit); + end;{tomb} + Guard:begin {this is the protection dialog} + GetDItem(myDialog[Guard],9,theType,tHandle,itemRect); + tStr := 'disabled'; + GetDItem(myDialog[Guard],13,theType,tHandle,tRect); + SetIText(tHandle,tStr); + InsetRect(tRect,-3,-3); + GetDItem(myDialog[Guard],10,theType,tHandle,messFrame); + InsetRect(messFrame,-4,-8);{message frame} + Repeat + FrameRect(tRect);{this is around our #1keycode} + FrameRoundRect(messFrame,10,10);{around our message} + DrawBoldButton(whichDialog);{draw each time in case updates} + ModalDialog(Nil,itemHit); + Case itemHit of + 2: DisplayWhatDialog(What);{reinterate dialogs? don't work} + 4: begin + DoPrint;{print out our order form stuff} + InvalRect(myDialog[Guard]^.portRect);{redraw our Dialog} + FlushEvents(KeyDownMask,0);{case of key commands or such} + end;{4:} + 5: begin {lock the game} + {display alert... consequences} + DisplayAlert(135,i); + If i = 2 then begin {item LOCKIT} + Finished := True;{quit the game after lock!} + itemHit := 1;{will close the Guard dialog} + end; {if i = 2} + end; + 6: begin {unlock all the features?} + GetDItem(myDialog[Guard],7,theType,tHandle,fRect); + GetIText(tHandle,tStr); + SetIText(tHandle,'disabled'); + DisplayAlert(136,i);{sorry invalid keycode2} + end;{6:} + end;{case itemHit} + InvalRect(itemRect);{always redraw the Messages:} + Until(itemHit = 1);{done button} + end; + UnLock:begin {at end of Locked levels,about more levels,etc.} + tBuf := GetResource('TBUF',129);{get text from resource} + HLock(tBuf);{locked for Ptr} + TextFont(3); + TextSize(10); + TextBox(tBuf^,GetHandleSize(tBuf),myDialog[UnLock]^.portRect,teJustLeft); + HUnLock(tBuf); + DrawBoldButton(WhichDialog); + ModalDialog(Nil,itemHit); + end;{Unlock:} + Source:{source code message} + ModalDialog(Nil,itemHit); {close it no matter what was hit} + Scores:begin {hiscore stuff} + TextFont(3); + Repeat + For i := 1 to 4 do begin + TextSize(9); + {unpack 4 names stored in theHighs^.nameStr,etc. + and draw into dialog} + unNames[i] := copy(theHighs^.nameStr,((i-1) * 23)+1,23);{short} + MoveTo(7,87+16*i); + DrawString(unNames[i]);{draw all 4 names} + TextSize(12); + Moveto(180,87+16*i); + NumToString(theHighs^.level[i],tStr);{draw all 4 levels} + DrawString(tStr); + NumToString(theHighs^.score[i],tStr); + MoveTo(myDialog[Scores]^.portRect.right - + StringWidth(tStr) - 7,87+16*i); + DrawString(tStr);{draw all 4 scores} + PenPat(gray); + move(0,3); + lineto(7,90+16*i);{draw the lines in between scores} + PenPat(black); + end; + ModalDialog(Nil,itemHit); + if itemHit = 4 then begin {reset the hiscore stuff} + For i := 1 to 4 do begin + theHighs^.level[i] := 0; + theHighs^.score[i] := 0; + end; + theHighs^.nameStr := ''; + While Length(theHighs^.nameStr) < 102 do + theHighs^.nameStr := Concat(theHighs^.nameStr,' '); + ChangedResource(ScoreHandle);{write changes on quit} + InvalRect(myDialog[Scores]^.portRect);{modalDialog will redraw items} + EraseRect(myDialog[Scores]^.portRect); + HiScore := 0; + DrawBoldButton(WhichDialog);{redraw after erase} + end;{if itemhit} + Until(itemhit = 1) + end;{Score} + Name:Begin {get hiscorer's name/sort into hiscore record} + GetDItem(myDialog[Name],3,theType,tHandle,tRect); + SetIText(tHandle,NameString);{put default in text box} + SelIText(myDialog[Name],3,0,maxint);{select the text} + + Repeat + ModalDialog(Nil,itemHit);{Modal handles Update events for dialog} + Until(itemHit = 1);{ok button} + + GetIText(tHandle,NameString);{must be happy with text..so use it} + + For i := 1 to 4 do {copy packed strings into temp full strings} + unNames[i] := copy(theHighs^.nameStr,((i-1) * 23)+1,23); + {sort the New LoScore} + index := 4;{we know that score is more than 4 already} + For i := 3 Downto 1 do + If Score > theHighs^.score[i] then index := i;{how how is it,#1?} + + i := 4; + While (i > index) do begin {switch old for new scores} + unNames[i] := unNames[i-1]; + theHighs^.score[i] := theHighs^.score[i-1]; + theHighs^.level[i] := theHighs^.level[i-1]; + dec(i); + end;{While} + theHighs^.score[index] := Score;{make 'index' score = new high} + theHighs^.level[index] := Level; + unNames[index] := copy(NameString,1,23);{just first 23 chars of name} + + theHighs^.namestr := ''; + For i := 1 to 4 do begin {repack the strings into namestr} + theHighs^.nameStr := concat(theHighs^.nameStr,unNames[i]); + While Length(theHighs^.nameStr)< (i*23) do + theHighs^.nameStr := concat(theHighs^.nameStr,' '); + end;{for i} + + ChangedResource(ScoreHandle);{flag, write out changes on Quit} + end;{Name:} + SetSpeed:Begin + Repeat + ModalDialog(Nil,itemHit); + Case itemHit of + 2,3,4: SetControlValue(itemHit);{our radio controls} + end;{case itemhit} + Until(itemHit = 1); + end;{SetSpeed} + end;{Case WhichDialog} + + HideWindow(myDialog[WhichDialog]); + SelectWindow(myWindow);{restore our game window} + SetPort(tPort);{restore port} +end; + +procedure GetIndRect(Var theRect:Rect;rectListID:integer;index:integer); +{similar to GetIndString RomCall for use with 'nrct' resource type} +Begin + {make sure we've got a copy of resource in memory} + RListHand := nrctHandle(GetResource('nrct',rectListID)); + If (index > RListHand^^.num) or (RListHand = Nil) {watch out for errors} + then SetRect(theRect,0,0,0,0) + else + theRect := RListHand^^.theRects[index];{copy the rect...} +End; + +procedure CreateStrings;{messages and hints} +Begin + For i := 1 to 4 do begin + GetIndString(Clues[i].message,1000,i);{4 messages} + GetIndRect(Clues[i].messRect,1000,i);{box for textbox messages} + GetIndRect(Clues[i].hintRect,1001,i);{box to contain hints} + end; + For i := 1 to 10 do GetIndString(ClueWords[i],1001,i);{10 cluewords} + + Clues[1].just := teJustRight;{justification for hint rect... next to glyph} + Clues[2].just := teJustCenter; + Clues[3].just := teJustLeft; + Clues[4].just := teJustCenter; +end; + +procedure NextTrgtSound(Trgt:integer);{we'll use our snake stuff to play sound} +Begin + SnakeSound^.sound1Rate := StartPitch[1] * Trgt;{*2 is one octave} + SnakeSound^.sound2Rate := StartPitch[2] * Trgt; + SnakeSound^.sound3Rate := StartPitch[3] * Trgt; + SnakeSound^.sound4Rate := StartPitch[4] * Trgt; + SnakeSound^.duration := 120;{so tone will keep playing} +end; + +procedure WriteASoundBlock(aSoundPtr:Ptr;BuffSize:Longint;LastTick:Longint); +{make changes to our SoundParmBlk and then start the sound,the lasttick pause +is included due to occassional buzz/click/or worse if sound is written +immediately.. might be because Sound Driver set ioResult to zero before +the other soundstuff was complete.. and we happened to peek at it at just +the wrong moment} +Begin + SoundParmBlk^.iobuffer := aSoundPtr;{set pointer to our sound} + SoundParmBlk^.ioreqcount := BuffSize;{size of our sound buffer} + Repeat Until(TickCount > LastTick);{we'll wait a tick before writing sound} + err := PBWrite(SoundParmBlk,true);{start the sound, asynch} +end; + +procedure SetSnakeSoundStuff;{for whichsound} +Begin + Case WhichSound of {our 2 voice FourTone sounds} + SnakeCharmer:Begin + SnakeSound^.sound1Rate := mySongPtr^.pitch[NoteCount,1]; + SnakeSound^.sound2Rate := mySongPtr^.pitch[NoteCount,2]; + ToneDelay := mySongPtr^.duration[NoteCount] + TickCount; + end; + Walk:Begin + SnakeSound^.sound1Rate := myWSongPtr^.pitch[NoteCount,1]; + SnakeSound^.sound2Rate := myWSongPtr^.pitch[NoteCount,2]; + ToneDelay := myWSongPtr^.duration[NoteCount] + TickCount; + end; + end;{case whichsound} + SnakeSound^.duration := 80;{none of our notes is over 60 ticks long} + +end; + +procedure InitialSnakeSong(BeginNote:integer);{use for 'Walk' also, just use myWSongPtr stuff} +Begin + NoteCount := BeginNote;{set to first note in our song array} + SetSnakeSoundStuff; + SnakeSound^.sound3Rate := 0;{no 3 and 4 voices sound} + SnakeSound^.sound4Rate := 0; + + If SoundOn then WriteASoundBlock(ptr(Sound[SnakeCharmer]), + SizeOf(Sound[SnakeCharmer]^),TickCount); +End;{of Procedure} + +procedure CreateSound;{i,j,k = global} +{we're writing direct to the sound driver with PBWrite...this procedure sets +up all the various buffers, Parm blocks, and such for the different +types of sounds used in this game. You can determine if a sound is finished +by checking the ioresult field of the Parmblock, if it is less than 1 +then the sound is done. In the mainloop we check it and start another sound +if the last one is done. Sometimes the Driver has changed ioresult but is not +done with the ParmBlock so writing another sound can be messed up.. buzzing, +this can be avoided by waiting for Tickcount to increment once,or by doing +a PBKillIO. We use the PBKill when we want to switch sounds before they +are complete... this avoids the problem of our program trying to write to +the Driver buffers at the same time the driver is trying to access them. +To avoid system errors always be sure to Kill sound I/O before exiting the +program!!.. and remember freeform sound slows the program by about 20%, +fourTone sound by 50%.} +Begin + myHandle := (GetResource('SONG',522));{snake charmer notes} + {HLock(myHandle);locked in resource file} + mySongPtr := SongPtr(myHandle^); + + myHandle := (GetResource('SONG',523));{'Walk like' notes} + {HLock(myHandle);locked in resource file} + myWSongPtr := WSongPtr(myHandle^); + + new(SawToothWave); {wavePtr...a SawToothWave form for Blue sound} + new(SquareWave); {wavePtr...a squarewave form for Blue sound} + for i := 0 to 127 do {build our four tone waves} + begin + SawToothWave^[i] := 2*i;{sort of a raspy sound....} + {SawToothWave^[i+128] := 0;} + SquareWave^[i] := 0; + SquareWave^[i+128] := 255;{height of Square determines Loudness} + end; + + {we'll coerce Snake to FreeForm pointer throughout the program just so we + can use WhichSound and our SoundList type later on....} + new(SnakeSynth); {my FTSynthPtr, FourTone Synthesizer} + SnakeSynth^.mode := ftMode; + + new(SnakeSound);{our fourtone sound} + SnakeSound^.sound1Phase := 0; + SnakeSound^.sound2Phase := 128; + SnakeSound^.sound3Phase := 128; {out of phase just for fun} + SnakeSound^.sound4Phase := 0; + SnakeSound^.sound1Wave := SawToothWave; + SnakeSound^.sound2Wave := SquareWave; + SnakeSound^.sound3Wave := SawToothWave; + SnakeSound^.sound4Wave := SquareWave; + + {must make sndRec point to our Sound} + SnakeSynth^.sndRec := SnakeSound; + Sound[SnakeCharmer] := FFSynthPtr(SnakeSynth);{its just a pointer.. so coerce it} + + {note: We're using Snake FourTone stuff also for both Walk and Trgt sounds} + + Buff[GunShot] := 376;{size of all the freeform buffers,keep multiples of 370} + Buff[GoodHit] := 1486;{!!! remember to set range below} + Buff[BadHit] := 746; + Buff[Miss] := 746; + Buff[BonusSnd] := 746; + + {now create all the FreeForm sounds....} + For WhichSound := GunShot to BonusSnd do begin {they all have these in common} + Sound[WhichSound] := FFSynthPtr(NewPtr(Buff[WhichSound]));{sound block} + Sound[WhichSound]^.mode := ffMode; + {knock off 6 bytes for mode & count.. plus 1 for switch to Zero base} + Buff[WhichSound] := Buff[WhichSound] - 7;{size of waveBytes} + end; + + {GunShot Stuff, played when a shot is fired, mousedown} + Sound[GunShot]^.count := FixRatio(1,6);{see the Sound Driver stuff} + j := 0; + While j<= Buff[GunShot] do Begin + If j > 30 then i := abs(Random) div (j*3) {just fading noise} + else begin + If (j mod 5) = 0 then i := 255;{SquareWave with Period of 10} + If (j mod 10) = 0 then i := 0; + end;{else} + Sound[GunShot]^.WaveBytes[j] := i; {fill up the buffer} + inc(j); + end; { of while} + + {GoodHit Stuff, sound played if valid target hit} + {set .count field by target value} + j := 0; + While j<= Buff[GoodHit] do Begin + If j > 370 then begin + If (j mod 64) = 0 then i := 255 - (j div 12); + If (j mod 128) = 0 then i := (j div 12); + end + else begin + If (j mod 64) = 0 then + If (j mod 128) = 0 then i := 0 else i := 255; + end;{else} + Sound[GoodHit]^.WaveBytes[j] := i; {fill up the buffer} + inc(j); + end; { of while} + +{BadHit Stuff, hit a target but not a valid one} + Sound[BadHit]^.count := FixRatio(1,4); + j := 0; + While j<= Buff[BadHit] do Begin + if i < 127 then inc(i) else i := 0;{sawtooth} + Sound[BadHit]^.WaveBytes[j] := i; {fill up the buffer} + inc(j); + end; { of while} + + {Miss Stuff, missed everything! splat} + Sound[Miss]^.count := FixRatio(1,2);{see the Sound Driver stuff} + j := 0; + i := 0; + While j<= Buff[Miss] do Begin + if i < 255 then inc(i) else i := 0; + Sound[Miss]^.WaveBytes[j] := i; + inc(j); + end; { of while} + + {BonusSnd Stuff, sound played if bonus target underway} + Sound[BonusSnd]^.count := FixRatio(1,4); + j := 0; + While j<= Buff[BonusSnd] do Begin + If (j mod 37) = 0 then + If (j mod 74) = 0 then i := 0 else i := 63; + Sound[BonusSnd]^.WaveBytes[j] := i; {fill up the buffer} + inc(j); + end; { of while} + + {create our Sound Parameter block for use with PBWrite} + new(SoundParmBlk);{create record the Ptr will point to!} + with SoundParmBlk^ do begin {see Apple tech note 19, PBWrite vs. StartSound} + iocompletion := nil; + iorefnum := -4; + {we'll poke in the pointers and size stuff in WriteASoundBlock} + ioresult := 0; {will Start sound ,MainEventLoop} + end; {of with} +end; + +procedure PauseThisGame(index:integer); {called if a keydown during game} +var + i: integer; +Begin + err := PBKillIO(SoundParmBlk,false);{kill sound} + PauseStatus := index;{determines update drawing} + + {copy current screen to UpDateMap, so update events are redrawn correctly} + CopyBits(myWindow^.portBits,UpDateMap,UpDateRect, + UpDateMap.bounds,srcCopy,nil); + + ShowControl(ResumeButton); + ShowControl(EndButton); + SetCursorMenus(false); +End; + +procedure NewHiScore;{check for new hiscore/update HiScore??} +Begin + If Score > HiScore then begin + HiScore := Score; + DrawStatus(4,HiScore); + end; +End; + +procedure MoveHourGlass(Horz,Vert:integer);{move for timescore after each level} +Begin + OffSetRect(Hour,Horz,Vert); + OffSetRect(TopSand,Horz,Vert); + OffSetRgn(TopSandRgn,Horz,Vert); + OffSetRect(BotSand,Horz,Vert); + OffSetRgn(BotSandRgn,Horz,Vert); + + TrickleTop.h := TrickleTop.h + Horz; + TrickleBot.h := TrickleTop.h; + TrickTopR.h := TrickleTop.h + 1;{right side line trickle} + TrickBotR.h := TrickTopR.h; + TrickleTop.v := BotSand.top; + TrickleBot.v :=TrickleBot.v + Vert; + TrickBotR.v := TrickleBot.v; +end; + +procedure BuildValidNow; +{list of Valids which have targets remaining, we step thru NowValid to find +the next valid target to display in StartOne(), so we have a good mix of +all the remaining valid targets in the windows, for instance if we have 6 valid +targets numbered 1..6 but the user has completed numbers 2,5 and 6 (they +have no targets remaining) then after this procedure NowValid will contain +the following... 1,3,4,0,0,0 NowNdx is inc'd until NowValid = 0 +then its reset to 1} +Var + i:integer; +Begin + For i := 1 to 6 do NowValid[i] := 0;{initialize all to zero} + NowNdx := 1; + For i := 1 to LastValid do + If Valid[i].remain > 0 then begin {has targets remaining so Valid} + NowValid[NowNdx] := i; + inc(NowNdx);{inc to point to next now} + end; + NowNdx := 1;{reset to first in list} +End; + +procedure BuildValidTargets; +{create list of targets for scorebox & initial them} +Var + i,j:integer; +Begin + randSeed := TickCount;{longint seed Random Function} + {our font bitimage has shapes for chars 33 thru 129} + Valid[1].which := trunc(abs(Random) / MaxInteger * 96) + 33;{pick one} + For i := 2 to LastValid do begin + Repeat + Valid[i].which := trunc(abs(Random) / MaxInteger * 96) + 33;{33 to 129} + tFlag := True; + For j := 1 to i-1 do {check against ones already picked} + If (Valid[i].which = Valid[j].which) then tFlag := False; + Until(tFlag = True); + end;{for i} + If LastValid < 6 then begin {create #of each target to be hit} + For i := 1 to LastValid do Valid[i].remain := LastValid+1-i;{4,3,2,1} + end + else For i := 1 to LastValid do Valid[i].remain := Level+4-i; + BuildValidNow; +End; + +procedure CreatePictures; {get PICT's from resource file} +Begin + {note: we've either created our pics in FullPaint or by doing 'openPicture' + type stuff. In the case of FullPaint we 'copy' the picture from a document + where the pic is located in same position relative to upperleft of page + as it will be relative to upperleft of window origin.. this way when we + draw the picture in its picFrame it appears in proper place in window, to + move a picture.. just set a rect = to picframe and OffsetRect it, then + draw the picture into the rect instead of the picframe} + + LeftSide := GetPicture(138); + RightSide := GetPicture(139);{of gallery walls} + BackSide := GetPicture(140); + + ScoreFrame := GetPicture(142); + ScoreFrameRect := ScoreFrame^^.picFrame; + ScoreNum := GetPicture(141); + ScoreNumRect := ScoreNum^^.picFrame; + OffSetRect(ScoreFrameRect,8,3); + OffSetRect(ScoreNumRect,ScoreFrameRect.left +2-ScoreNumRect.left, + ScoreFrameRect.top + 4-ScoreNumRect.top); + + StatPic := GetPicture(145);{status display box} + {locate all the stuff for drawing our scores, etc. into Status} + StatList[1].centerPt := StatPic^^.picFrame.topleft; + StatList[1].centerPt.h := StatList[1].centerPt.h + 44; + StatList[1].centerPt.v := StatList[1].centerPt.v + 26; + StatList[2].centerPt.h := StatList[1].centerPt.h + 84; + StatList[2].centerPt.v := StatList[1].centerPt.v; + StatList[3].centerPt.h := StatList[1].centerPt.h; + StatList[3].centerPt.v := StatList[1].centerPt.v + 27; + StatList[4].centerPt.h := StatList[2].centerPt.h; + StatList[4].centerPt.v := StatList[3].centerPt.v; + For i := 1 to 4 do SetRect(StatList[i].blankRect, + StatList[i].centerPt.h - 38,StatList[i].centerPt.v - 13, + StatList[i].centerPt.h + 38,StatList[i].centerPt.v); + + For i := 1 to 4 do Clues[i].glyphPic := GetPicture(160 + i);{load glyphs} + ClueShadow := GetPicture(165); + For i := 168 to 171 do Tut[i] := GetPicture(i);{load tut pics} + + TarWindPic := GetPicture(166); + + BotSandRgn := RgnHandle(GetResource('RGN ',356));{mask sand into glass} + TopSandRgn := RgnHandle(GetResource('RGN ',357)); + {these rgns are a tracing of the outline of the top and bottom half of + the Hourglass. We wrote a little utility that can import a picture, trace + its outline into a RgnHandle then save the new rgn into our 'RGN ' resource, + the rgn resource can then be used to mask drawing done by CopyBits().. both + our GunSite and the sand in the hourGlass are examples of this. Some truly + stunning effects can be created with Rgn masks and CopyBits()!} +end; + +{bmap Type resources contain a Bitmap 'and' bitimage. we created our bmaps by +using PtrAndHand to stick our bitimage (already containing pictures +shapes,etc.) onto the end of its bitmap and store as bmap... +Getbmap() loads the resource, locks it down, and makes 'theMap' point to +the BitImage. In some cases there is no bitimage (empty) so we create a +ptr in the conventional way} +procedure Getbmap(Var theMap:Bitmap;resID:integer); +var + myBmap:BmapHand; +Begin + myBMap := BmapHand(GetResource('bmap',resID)); + {HLock(Handle(myBMap));locked in resource file} + theMap.rowBytes := myBMap^^.rowBytes; + theMap.bounds := myBMap^^.bounds; + theMap.baseAddr := Ptr(@myBMap^^.bitStart[1]);{point to bitimage} +End; + +procedure CreateOffScreenBitMap; {see CopyBits stuff,also tech.note 41} +Begin + {offScreen contains Gun/explode/spot/hourglass/sand and chariot pics} + Getbmap(OffScreen,128);{bmaps come with complete BitImages!} + Getbmap(BonusMap,129); + Getbmap(UpDateMap,131); + {we saved no bitimage for UpDateMap, so create it} + UpDateMap.baseAddr := QDPtr(NewPtr((UpdateMap.bounds.bottom- + UpdateMap.bounds.top)*UpdateMap.rowBytes)); + + For i := 1 to 3 do begin + GetbMap(Wings[i],131+i); + Wings[i].baseAddr := QDPtr(NewPtr((Wings[i].bounds.bottom- + Wings[i].bounds.top)*Wings[i].rowBytes)); + end; +End; + +procedure CreateCairoStuff; +{we're only using bitimage and locate table of Cairo font, to access the +'parts' of the Font we did some pointer math and made copies of only +bitImage and locate table, then saved the new records in our 'MYCF' resource, +the bitImage contains shapes for chars 33 thru 129.. see CairoFont.pro file +for more information on how we accessed the Cairo Font.} +var + trect,bRect:Rect; + i:integer; +Begin + {load font Character image and locate table} + myHandle := GetResource('MYCF',128); + {HLock(myHandle);locked in resource} + myCFPtr := CFPtr(myHandle^);{lock it down, used as ptr block} + + FontMap.baseAddr := QDPtr(myCFPtr);{make FontMap point to bit image} + FontMap.rowbytes := 210;{row width in bytes, must be even number} + SetRect(FontMap.bounds,0,0,1656,24);{looked at with ResEdit}; +End; + +procedure InitialHourGlass;{position hourglass stuff for start of game} +Begin + OffSetRect(OBSand,0,OffBotSand.top-OBSand.top);{at top, will move down} + OffSetRect(OTSand,0,OffTopSand.bottom-OTSand.bottom);{at bottom, will move up} + TrickleBot.v := BotSand.bottom-1;{trickle to top of pile} +End; + +procedure SizeLocateSpots(offset:integer); +Begin + For i := 5 to 6 do begin + OffSpot[i].bottom := OffSpot[i].bottom - (5 + offset); + SpotRect[i] := OffSpot[i];{size SpotRect} + end; + OffSetRect(OffSpot[5],0,OffSpotTarget.top+offset-OffSpot[5].top); + OffSetRect(OffSpot[6],0,OffSpotTarget.bottom-offset-OffSpot[6].bottom); +End; + +procedure InitialSpotTargets; +Var + i:integer; +Begin + {locate and size all the Spot target rectangles, we're doing some + shifting/sizing of OffSpots to minimize the work of CopyBits()} + For i := 5 to 6 do OffSpot[i] := OffSpotTarget; + Case SpotSpeed[5] of + 2: SizeLocateSpots(2); + 4: SizeLocateSpots(0); + End;{Case Spotspeed} + + OffSetRect(SpotRect[5],TarWindow[5].left+7-SpotRect[5].left, + TarWindow[5].top-SpotRect[5].top);{top moving down} + OffSetRect(SpotRect[6],TarWindow[6].left+7-SpotRect[6].left, + TarWindow[6].bottom-SpotRect[6].bottom);{bottom moving up} +End; + +procedure OneTimeGameStuff; +Begin + {when we created the bmaps we saved the rects we'd already calculated + in a 'nrct' resource so we wouldn't have to rewrite the code} + GetIndRect(OffGun[0],2000,1);{Rects for shapes in OffScreen bmap} + GunRect := OffGun[0];{size} + GetIndRect(OffGun[1],2000,2); + GetIndRect(OffExplode,2000,3); + ExplodeRect := OffExplode; + GetIndRect(OffSpotTarget,2000,4); + GetIndRect(OffHour,2000,5); + GetIndRect(OffBotSand,2000,6); + GetIndRect(OffTopSand,2000,7); + + {find all individual bonus shapes in the map... 6 in a row, 2 rows} + with BonusMap.bounds do SetRect(tRect,left,top,left+37,top+23);{size of one} + For i := 1 to 6 do begin + OffBonus[i,1] := tRect;{top row} + OffSetRect(tRect,0,23); + OffBonus[i,2] := tRect;{bottom row} + OffSetRect(tRect,37,-23); + end; + BonusRect := OffBonus[1,1];{size BonusRect} + + GetIndPattern(myPattern,sysPatListID,25);{see i-473} + GetIndPattern(myDiagPat,sysPatListID,26);{used to disable valid} + + For i := 1 to 3 do begin {size 3 scrolling windows} + SetRect(TarWindow[i],125,39 + 36*i,125+251,66 + 36*i);{font - 1} + OffPiece[i] := TarWindow[i];{establish Height of OffPiece} + Piece[i] := TarWindow[i];{establish Height of Piece} + OffSetRect(OffPiece[i],0,1-OffPiece[i].top);{ready for startone} + end; + + SetRect(SiteRect,0,0,25,25);{circular site in synch with gun} + + For i := 0 to 1 do begin + OffSite[i] := SiteRect;{two offSites for two offguns} + OffSetRect(OffSite[i],OffGun[i].left+ 4 -OffSite[i].left, + OffGun[i].top+ 13-OffSite[i].top); + SiteRgn[i] := NewRgn;{create the site regions for use with CopyBits} + OpenRgn; + FrameOval(OffSite[i]);{used to mask background drawn into Offsite} + CloseRgn(SiteRgn[i]); + end; + + SetRect(TarWindow[5],0,0,37,105);{top is even,bottom odd due to pattern} + OffSetRect(TarWindow[5],TarWindow[1].left-TarWindow[5].right-10, + TarWindow[1].top-TarWindow[5].top-5);{locate to left of others} + TarWindow[6] := TarWindow[5];{6 is exactly like 5,except on right side} + OffSetRect(TarWindow[6],TarWindow[1].right-TarWindow[5].left+10,0);{right} + For i := 5 to 6 do begin + TopSpot[i] := TarWindow[i].top + 4;{used in SpotStatus for speed} + BotSpot[i] := TarWindow[i].bottom - 4; + end; + + {locate and size #4/bottom window.. bonus targets} + TarWindow[4].top := TarWindow[3].top + 38; + TarWindow[4].bottom := TarWindow[3].bottom + 38; + TarWindow[4].left := TarWindow[5].left +1; + TarWindow[4].right := TarWindow[6].right -1; + OffSetRect(BonusRect,TarWindow[4].left-BonusRect.right, + TarWindow[4].top-BonusRect.top); + + TarWindRgn := NewRgn;{region - frame of bonus target window} + OpenRgn; + FrameRect(TarWindow[4]);{will mask the bonuspics} + CloseRgn(TarWindRgn); + + Hour := OffHour;{hourglass stuff} + OffSetRect(Hour,280-Hour.left,3-Hour.top);{position in scorebox} + TopSand := TopSandRgn^^.rgnBBox;{size of rgn or of sand pic????} + OTSand := TopSand; + OffSetRect(TopSand,Hour.left-TopSand.left,Hour.top+4-TopSand.top); + OffSetRect(TopSand,(Hour.right-TopSand.right) div 2,0);{center it} + OffSetRgn(TopSandRgn,TopSand.left -TopSandRgn^^.rgnBBox.left, + TopSand.top-TopSandRgn^^.rgnBBox.top); + + BotSand := BotSandRgn^^.rgnBBox;{size of rgn or of sand pic????} + OBSand := BotSand; + OffSetRect(BotSand,Hour.left -BotSand.left,Hour.bottom-4-BotSand.bottom); + OffSetRect(BotSand,(Hour.right-BotSand.right) div 2,0);{center it} + OffSetRgn(BotSandRgn,BotSand.left -BotSandRgn^^.rgnBBox.left, + BotSand.bottom-BotSandRgn^^.rgnBBox.bottom); + + OffSetRect(OBSand,OffBotSand.left-OBSand.left, + OffBotSand.bottom-OBSand.bottom); + OffSetRect(OTSand,OffTopSand.left-OTSand.left, + OffTopSand.top-OTSand.top); + + TrickleTop.h := Hour.left + ((Hour.right-Hour.left)div 2)-1; + TrickleBot.h := TrickleTop.h; + TrickTopR.h := TrickleTop.h + 1;{right side line trickle} + TrickBotR.h := TrickTopR.h; + TrickleTop.v := BotSand.top; + + {all the Score box stuff} + tPt.h := ScoreFrameRect.left + 2 + 22;{center of first box} + tPt.v := ScoreFrameRect.top + 16;{to top of draw area} + j := ScoreFrameRect.bottom - 5;{to bottom of blank area} + For i := 1 to 6 do begin + Valid[i].centerPt := tPt; + Valid[i].remainPt.h := tPt.h; + Valid[i].remainPt.v := j; + SetRect(Valid[i].blankRect,tPt.h-20,tPt.v +28,tPt.h+20,j); + tPt.h := tPt.h + 44; + end;{for i} + Valid[6].points := 500;{scoring for our valid targets} + Valid[5].points := 100; + Valid[4].points := 50; + Valid[3].points := 20; + Valid[2].points := 10; + Valid[1].points := 5; + + {set up all the Timebonus stuff.. TBone topleft := 179,85} + SetRect(TBone.frame,179,85,328,154); + SetRect(TBone.numBox,267,110,319,130); + SetPt(TBone.hourMove,-93,88); + SetRect(TBone.arrowSource,myCFPtr^.locate[104],FontMap.bounds.top, + myCFPtr^.locate[105],FontMap.bounds.bottom); + TBone.arrowDest := TBone.arrowSource; + OffsetRect(TBone.arrowDest,234-TBone.arrowDest.left, + 108-TBone.arrowDest.top); + + StartPitch[1] := 29316;{Long integers for notes,played when targets} + StartPitch[2] := 78264;{are displayed,doubling long integers is an octive} + StartPitch[3] := 98607; + StartPitch[4] := 117264; + + {locate gun and site} + OffSetRect(GunRect,100-GunRect.left, + 300-GunRect.bottom); + OffSetRect(SiteRect,GunRect.left+ 4-SiteRect.left, + GunRect.top+ 13-SiteRect.top);{synch Site with gun} + + SetRect(MouseRect,LeftSide^^.picFrame.right,ScoreFrameRect.bottom, + RightSide^^.picFrame.left - 32,GunRect.top - 32); + GunLimit := MouseRect;{GunLimit is fixed... MouseRect will slide with mouse} + SetRect(ShadowRect,LeftSide^^.picFrame.left,ScoreFrameRect.bottom+3, + RightSide^^.picFrame.right,297); + + {shadow rect extends down to edge of front counter in booth} + RedrawRect := ShadowRect; + RedrawRect.bottom := GunRect.bottom;{redraw extends farther,to bottom of gun} + + SetRect(ClueErase,LeftSide^^.picFrame.right+1,64, + RightSide^^.picFrame.left-1,219);{erase tarwindows for Clues} + + UpDateRect := ClueErase;{update area to redraw windows from CopyBits copy} + {our UpDateMap.bounds is equal to UpDateRect} + + FetchChar := FontMap.bounds;{Used to speed up StartOne, top/bottom coords.} + + For i := 1 to 4 do {get handle to text items in clue dialog} + GetDItem(myDialog[ClueDial],5 + i,j,Clues[i].dialHand,tRect); + + RandSeed := TickCount; + ClueNdx := (abs(Random) div 3277) + 1;{ndx to cluewords,1-10} + tRgn := NewRgn;{used tRgn in the ScrollRect call} + ShotFired := False;{flag a shot fired... mousedown} + NameString := ''; + GameUnderWay := False;{game is not under way on start up} + PauseStatus := 0;{no pause} + HiScore := theHighs^.score[4];{lowest of the hiscores} + Score := 0; + Level := 0; + MissCount := 0;{number of misses} + CursorNdx := 1;{point to first of three cursors} + LastValid := 6;{we'll draw 6 targets on start up} + Level := 4; {for BuildValidTargets to work} + BuildValidTargets;{so that update will work correctly} +End; + +procedure StaggerOne(Which:integer); +{fill wings with pattern and OffSet, so our targets aren't lined up vertically} +Begin + OldBits := myWindow^.portBits; {preserve old BitMap} + SetPortBits(Wings[Which]); { our new BitMap } + + FillRect(Wings[Which].bounds,myPattern);{fill with horz.lines} + + si := abs(Random div 1368) + 10;{10 to 33,random offset for start} + If Direction[Which] > 0 then begin + OffPiece[Which].right := Wings[Which].bounds.right - si; + OffPiece[Which].left := OffPiece[Which].right - Speed[Which]; + end + Else begin + OffPiece[Which].left := si; + OffPiece[Which].right := si + Speed[Which]; + end; + + SetPortBits(OldBits); {restore old bitmap} +end; + +procedure StartOne(Which:integer); {which TarWindow[1..3]} +{get a char from either valid targets or not-valid targets and draw it into +a Wings Bitmap and initial stuff for scrolling it onto the screen via +OffPiece/Piece and CopyBits()} +Begin + OldBits := myWindow^.portBits; {preserve old BitMap} + SetPortBits(Wings[Which]); { our new BitMap } + + FillRect(Wings[Which].bounds,myPattern);{erase previous with horiz.line patt} + {FetchChar := FontMap.bounds;}{bounds rect of FontMap bitmap} + + {find which char to draw... one from Valid targets or not} + If ((abs(Random) div 3277) > 5) and not(ValidDone) then begin {get a Valid.which} + si := Valid[NowValid[NowNdx]].which;{NowValid points to Valid with remain} + If NowNdx < 6 then begin + inc(NowNdx); + If NowValid[NowNdx] = 0 then NowNdx := 1;{reset to first} + end{if NowNdx} + else NowNdx := 1;{6 is last so reset to first} + end {if ((abs...} + Else {put up one that's not on our list} + Repeat {find i not in our Valid list} + si := trunc(abs(Random) / MaxInteger * 96) + 33;{si := 33 to 129} + tFlag := True; + For sj := 1 to LastValid do + If (si = Valid[sj].which) then tFlag := False;{in our list} + Until(tFlag = True); + + FetchChar.left := myCFPtr^.locate[si];{locate[i] is offset in Bitimage} + FetchChar.right := myCFPtr^.locate[si+1];{FetchChar frames Char image in Fontmap} + dRect := FetchChar; + + {dRect.top := 0;}{FetchChar.top is already 0} + dRect.bottom := 29; + + {expand dRect make white border/frame around target} + If Direction[Which] > 0 then begin {offset to rightside} + {resize dRect to frame target and offset to proper side} + dRect.left := 42 - (FetchChar.right - FetchChar.left);{grow by 8 pixels} + dRect.right := 50;{Wings[Which].bounds.right} + OffPiece[Which].right := Wings[Which].bounds.right; + {'Speed' := width of OffPiece/Piece and vice versa} + OffPiece[Which].left := OffPiece[Which].right - Speed[Which]; + end + Else begin {offset to leftside} + dRect.left := 0; + dRect.right := 8 + FetchChar.right - FetchChar.left; + OffPiece[Which].left := 0; + OffPiece[Which].right := Speed[Which];{size based on speed} + end; + + EraseRect(dRect);{to erase pattern...inside target area} + FrameRect(dRect);{frame around target} + + {TarList stuff...install this new target in TarList for this window} + TarList[Which,NxtTar[Which]].theChar := si; + TarList[Which,NxtTar[Which]].head := PixOff[Which] - Speed[Which]; + TarList[Which,NxtTar[Which]].wide := dRect.right - dRect.left; + + If NxtTar[Which] < LastTarget then inc(NxtTar[Which]) + Else NxtTar[Which] := 1;{index of TarList} + + {now shrink relocated dRect back to size of FetchChar before copybits} + dRect.top := dRect.top + 3; + dRect.bottom := dRect.bottom - 2; + dRect.left := dRect.left + 4; + dRect.right := dRect.right - 4; + CopyBits(FontMap,Wings[Which],FetchChar,dRect,srcCopy,nil);{char into target} + + SetPortBits(OldBits); {restore old bitmap} +end; + +procedure InitialBonus;{set up bonus for drawing..movement} +Begin + BonusUnderWay := True; + BonusRect.left := TarWindow[4].left - (BonusRect.right-BonusRect.left); + BonusRect.right := TarWindow[4].left;{move BonusRect to left side window} + BonusSpeed := 4;{max right, pixels per loop} + BonusLoops := 20;{20 * 4 = 80 pixels....} + WhichSound := BonusSnd;{will start the BonusSnd} +End;{of procedure} + +Procedure InitialAnimation; +Var + i,j:integer; + myErase:Rect; +Begin + BuildValidTargets;{pick out Cairo chars for targets,etc.} + + {draw the scorebox} + EraseRect(ScoreFrameRect);{erase old} + DrawPicture(ScoreFrame,ScoreFrameRect); + DrawPicture(ScoreNum,ScoreNumRect); + + If SoundOn then begin + NextTrgtSound(1);{initialize pitches for sound during drawing} + WriteASoundBlock(ptr(Sound[SnakeCharmer]), + SizeOf(Sound[SnakeCharmer]^),TickCount);{use snake for target} + end;{if soundon} + {draw the targets into the scoreBox, for each level} + SpeedTicks := 1;{for our delay} + sRect := FontMap.bounds;{bounds rect of FontMap bitmap,top/bottom constant} + For i := 1 to LastValid do begin + NextTrgtSound(i);{change pitch for each box} + with Valid[i].centerPt do SetRect(myErase,h-21,v,h+21,v+24);{erase area} + tRect.top := Valid[i].centerPt.v; + tRect.bottom := tRect.top + 24; + For j := 32 to Valid[i].which do begin + SystemTask; + If SpeedTrapOn then Delay(SpeedTicks,aTick);{slow down for MacII's} + SizeRectsForBox(j,i);{sRect and tRect} + EraseRect(myErase);{erase the previous} + CopyBits(FontMap,myWindow^.portBits,sRect,tRect,srcCopy,nil); + end;{for j := 32} + DrawRemainIntoScoreBox(i);{# remaining, draw just below target} + end; + + err := PBKillIO(SoundParmBlk,false);{kill sound} + + randSeed := TickCount; + For i := 1 to 3 do begin {initilize for each of scrolling windows} + For j := 1 to LastTarget do TarList[i,j].theChar := 0;{no targets} + NxtTar[i] := 1;{point to first target} + + PixOff[i] := -32766;{will determine offsets to targets in list} + If odd(Random) then Direction[i] := 1 else Direction[i] := -1; + Vector[i] := Direction[i] * Speed[i];{used to speed up animateoneloop} + {locate Piece} + If Direction[i] > 0 then begin {moving right, Piece is on left side} + Piece[i].left := TarWindow[i].left; + Piece[i].right := Piece[i].left + Speed[i]; + end + else begin + Piece[i].right := TarWindow[i].right;{Piece is on right side} + Piece[i].left := Piece[i].right - Speed[i]; + end; + end; + + StartOne(1);{start a target in top window} + StaggerOne(2);{stagger wings, so targets out of synch} + StaggerOne(3); + + Counter := 1;{number of loops before sand in hourglass moves} + + InitialSpotTargets; + ValidDone := False; + MissCount := 0; + DrawStatus(3,MissCount); + BonusNdx := 0;{will be inc'd by first bonus to point to first} + BonusShape := 1;{point to first shape} + If SoundOn then begin {start the Walk song just before start of level} + WhichSound := Walk; + InitialSnakeSong(57);{start the walk song...just the last bit...} + Repeat + SystemTask; + If (TickCount > ToneDelay) then begin {start another note} + inc(NoteCount); + SetSnakeSoundStuff;{get next sound,etc.} + end; {if TickCount} + Until(NoteCount = myWSongPtr^.noteCount);{our last walk note} + err := PBKillIO(SoundParmBlk,false); + WhichSound := Silence; + end;{if soundOn} + InitialHourGlass;{position and draw hourglass} + TrickleLeft := True; + CopyBits(OffScreen,myWindow^.portBits,OffHour, + Hour,srcCopy,nil); + CopyBits(OffScreen,myWindow^.portBits,OTSand, + TopSand,srcCopy,TopSandRgn); +end; + +procedure BeginTheGame; +Begin + SetCursorMenus(True);{do all the cursor and menus stuff} + DisableItem(myMenus[2],1);{disable 'begin' until end of game} + ClipRect(RedrawRect);{so drawing will only affect RedrawREct} + EraseRect(RedrawRect);{erase the shadow in booth} + DrawWindowContents(myWindow);{redraw shaded area (gameunderWay)} + ClipRect(myWindow^.portRect);{reset clipRgn to whole window} + + For i := 1 to 4 do begin {list of clues for this game} + Clues[i].hint := ClueWords[ClueNdx]; + If ClueNdx < 10 then inc(ClueNdx) else ClueNdx := 1; + end; + + Score := 0; + DrawStatus(2,Score); + DrawStatus(4,HiScore); + Level := 1; + DrawStatus(1,Level); + LastValid := 4;{only 4 valid targets for now} + For i := 1 to 3 do Speed[i] := 1;{start out at slowest speed, 1 pix/loop} + SpotSpeed[5] := 2;{start at top moving down} + SpotSpeed[6] := -2;{start at bottom moving up} + TimeCount := 45;{# of loops for each move of hourglass} + InitialAnimation; + BonusUnderWay := False; +end; + +procedure DetectAHit;{search targets for a hit} +Begin + Hit := False; + For dj := 1 to 6 do begin {check all 6 TarWindows} + If PtInRect(TargetCenter,TarWindow[dj]) then {is hit in the Window Rect?} + Case dj of + 1,2,3:{check the three scrolling windows} + Case Direction[dj] of + 1: begin {scrolling right} + dk := TarWindow[dj].left + PixOff[dj];{locate head constant} + di := LastTarget;{search TarList in reverse} + Repeat + If TarList[dj,di].theChar <> 0 then + If TargetCenter.h < (dk - TarList[dj,di].head) then + if TargetCenter.h > (dk - TarList[dj,di].head - + TarList[dj,di].wide) then begin + Hit := True; + HitWhich := di;{which target in List is hit} + HitWindow := dj;{which window} + end; + dec(di); + Until((di = 0) or (Hit = True)); + end;{case 1:} + -1: begin {scrolling left} + dk := TarWindow[dj].right - PixOff[dj];{Locate head constant} + di := LastTarget; + Repeat + If TarList[dj,di].theChar <> 0 then + If TargetCenter.h > (dk + TarList[dj,di].head) then + if TargetCenter.h < (dk + TarList[dj,di].head + + TarList[dj,di].wide) then begin + Hit := True; + HitWhich := di;{which target in List is hit} + HitWindow := dj;{which window} + end; + dec(di); + Until((di = 0) or (Hit = True)); + end;{Case -1:} + end;{Case Direction} + 4: If BonusUnderWay then begin {this is bonus window} + tRect := BonusRect; + tRect.left := tRect.left + 4; + tRect.right := tRect.right - 4;{shrink the rect border for hittest} + If PtInRect(TargetCenter,tRect) then begin + Hit := True; + HitWindow := dj; + WhichSound := Silence;{kill bonus sound} + end;{if PtInRect} + end;{ If BonusUnderWay } + 5,6: begin + tRect := SpotRect[dj]; + tRect.top := tRect.top + abs(SpotSpeed[dj]); + tRect.right := tRect.right - abs(SpotSpeed[dj]);{shrink the rect for hittest} + If PtInRect(TargetCenter,tRect) then begin + Hit := True; + HitWindow := dj; + end;{if PtInRect} + end; {these are spot windows} + end;{Case dj} + end;{for dj:= 1} + If not(Hit) then begin {hit will be true if a hit was detected} + + If SoundOn then begin {play miss sound} + err := PBKillIO(SoundParmBlk,false);{kill current sound} + WriteASoundBlock(ptr(Sound[Miss]),Buff[Miss],TickCount); + end;{if soundOn} + + inc(MissCount); + DrawStatus(3,MissCount);{draw in new missCount} + end;{if not(Hit)} +End; + +procedure EraseTargetInTarWindow(Window,Index:integer); +{remove a target from a window... watch out for targets on window borders} +Begin + {erase the target in window} + tRect.top := TarWindow[Window].top; + tRect.bottom := TarWindow[Window].bottom; + If Direction[Window] > 0 then begin{moving right} + tRect.right := TarWindow[Window].left + PixOff[Window] + - TarList[Window,Index].head; + tRect.left := tRect.right - TarList[Window,Index].wide; + {in case the target is not fully in the window yet} + If tRect.left < TarWindow[Window].left then begin + OldBits := myWindow^.portBits; {preserve old BitMap} + SetPortBits(Wings[Window]); { our new BitMap } + FillRect(Wings[Window].bounds,myPattern); + SetPortBits(OldBits); {restore old bitmap} + + tRect.left := TarWindow[Window].left;{limit to left} + end{if tRect.left} + else If tRect.right > TarWindow[Window].right then + tRect.right := TarWindow[Window].right; + end + Else begin + tRect.left := TarWindow[Window].right - + (PixOff[Window] - TarList[Window,Index].head); + tRect.right := tRect.left + TarList[Window,Index].wide; + {in case the target is not fully in the window yet} + If tRect.right > TarWindow[Window].right then begin + OldBits := myWindow^.portBits; {preserve old BitMap} + SetPortBits(Wings[Window]); { our new BitMap } + FillRect(Wings[Window].bounds,myPattern); + SetPortBits(OldBits); {restore old bitmap} + + tRect.right := TarWindow[Window].right;{limit to left} + end{if tRect.left} + else If tRect.left < TarWindow[Window].left then + tRect.left := TarWindow[Window].left; + end; + + FillRect(tRect,myPattern);{fill what is showing with myPattern} +End; + +procedure HandleAHit;{Hit = True... process it} +Begin + Case HitWindow of {one of our 6 windows} + 1,2,3:begin {scrolling windows} + EraseTargetInTarWindow(HitWindow,HitWhich);{erase the hit target} + HitAValidTarget := False;{initialize to false} + {is the target hit on our Valid list?} + dj := TarList[HitWindow,HitWhich].theChar;{this is target char we hit} + For di := 1 to LastValid do begin {is it a valid target?} + If (Valid[di].which = dj) and + (Valid[di].remain > 0) then begin {this is a valid target} + + If SoundOn then begin {start the hit sound} + err := PBKillIO(SoundParmBlk,false);{kill current sound} + Sound[GoodHit]^.count := FixRatio(di+3,2);{tone by value of target} + WriteASoundBlock(ptr(Sound[GoodHit]),Buff[GoodHit],TickCount); + end;{if soundOn} + + Score := Score + Valid[di].points;{update score} + DrawStatus(2,Score); + NewHiScore; + HitAValidTarget := True; + dec(Valid[di].remain);{one less of this target} + DrawRemainIntoScoreBox(di);{draw into scorebox} + + If Valid[di].remain = 0 then begin {disable this valid target} + If not(BonusUnderWay) then begin {start only if not already going} + InitialBonus;{start a bonus target} + BonusUnderWay := True; + If BonusNdx < 6 then inc(BonusNdx); + end + else If BonusNdx < 6 then inc(BonusNdx);{get next bonus} + Sound[BonusSnd]^.count := FixRatio(BonusNdx,10); + + BuildValidNow; {rebuild NowValid list} + + {draw disabled Validtarget in scorebox} + tRect := Valid[di].blankrect; + tRect.top := Valid[di].centerPt.v; + PenPat(myDiagPat); + PenMode(patOr);{black force black,white leave alone} + PaintRect(tRect);{use penPat and mode to fill rect,i-177} + PenNormal;{i-170} + {erase other targets of this char already on the screen} + For dk := 1 to 3 do {three tarWindows} + For dm := 1 to LastTarget do {search thru list for each window} + If TarList[dk,dm].theChar = Valid[di].which then begin + TarList[dk,dm].theChar := 0; + EraseTargetInTarWindow(dk,dm); + end;{if TarList} + + {check to see if all Valids are disabled/complete} + If NowValid[NowNdx] = 0 then ValidDone := True; + end;{if Valid.remain} + + end;{if (Valid.which} + end;{for di} + If not(HitAValidTarget) then begin {target hit was not a Valid one} + If SoundOn then begin + err := PBKillIO(SoundParmBlk,false);{kill current sound} + WriteASoundBlock(ptr(Sound[BadHit]),Buff[BadHit],TickCount); + end;{if soundOn} + inc(MissCount); + DrawStatus(3,MissCount); + end; + TarList[HitWindow,HitWhich].theChar := 0;{reset TarList} + end;{Case 1,2,3} + + 4:begin {bonus window} + If SoundOn then begin + err := PBKillIO(SoundParmBlk,false);{kill current sound} + Sound[GoodHit]^.count := FixRatio(8,2); + WriteASoundBlock(ptr(Sound[GoodHit]),Buff[GoodHit],TickCount); + end;{if soundOn} + Score := Score + (Level * 100); + DrawStatus(2,Score); + NewHiScore; + FillRect(TarWindow[4],myPattern);{erase the BonusRect} + BonusUnderWay := False; + end;{bonus window} + 5,6:begin {spot targets on sides} + If MissCount > 0 then begin {if there are misses then reduce count} + If SoundOn then begin + err := PBKillIO(SoundParmBlk,false);{kill current sound} + Sound[GoodHit]^.count := FixRatio(8,2); + WriteASoundBlock(ptr(Sound[GoodHit]),Buff[GoodHit],TickCount); + end;{if soundOn} + dec(MissCount); + DrawStatus(3,MissCount); + end;{if Misscount} + end;{spot windows on sides} + end;{Case HitWindow} +End;{procedure} + +procedure CheckSpotStatus;{move spot targets to next position} +Begin + For si := 5 to 6 do begin {both targets} + If SpotSpeed[si] < 0 then begin {moving up...} + If SpotRect[si].top > TopSpot[si] then begin {move up by speed pixels} + SpotRect[si].top := SpotRect[si].top + SpotSpeed[si]; + SpotRect[si].bottom := SpotRect[si].bottom + SpotSpeed[si]; + end + else begin {upper limit,reverse direction} + OffSpot[si].top := OffSpot[si].top + SpotSpeed[si]-1;{speed is minus} + OffSpot[si].bottom := OffSpot[si].bottom + SpotSpeed[si]-1; + SpotSpeed[si] := -SpotSpeed[si];{reverse direction} + dec(SpotRect[si].top); + dec(SpotRect[si].bottom); + end; + end {If SpotSpeed} + Else begin {moving down} + If SpotRect[si].bottom < BotSpot[si] then begin + SpotRect[si].top := SpotRect[si].top + SpotSpeed[si]; + SpotRect[si].bottom := SpotRect[si].bottom + SpotSpeed[si]; + end + else begin {at lower limit, reverse direction} + OffSpot[si].top := OffSpot[si].top + SpotSpeed[si]+1;{speed is plus} + OffSpot[si].bottom := OffSpot[si].bottom + SpotSpeed[si]+1; + SpotSpeed[si] := -SpotSpeed[si];{reverse direction} + inc(SpotRect[si].top); + inc(SpotRect[si].bottom); + end; + end; + CopyBits(OffScreen,myWindow^.portBits,OffSpot[si], + SpotRect[si],srcCopy,nil); {draw the spot} + end;{for si:=} +End; + +procedure DrawSandStuff;{hourglass... GameOver will flag end of level} +Begin + GameOver := False; + {set up for drawing on sand trickle} + If TrickleLeft then begin {draw left trickle in gray} + PenPat(Gray); + MoveTo(TrickleTop.h,TrickleTop.v); + LineTo(TrickleBot.h,TrickleBot.v);{gray left trickle} + PenPat(White); + TrickleLeft := False; + end + else begin {erase left trickle} + PenPat(White); + MoveTo(TrickleTop.h,TrickleTop.v);{white left trickle} + LineTo(TrickleBot.h,TrickleBot.v); + PenPat(Gray); + TrickleLeft := True; + end; + + {draw right trickle either gray or white (erase) set above} + MoveTo(TrickTopR.h,TrickleTop.v);{right side line,opposite of left} + LineTo(TrickBotR.h,TrickleBot.v); + PenPat(Black);{back to normal penPat} + + If Counter < TimeCount then inc(Counter) {move sand shapes yet?} + else begin {animate the hour glass} + dec(OTSand.top); + dec(OTSand.bottom);{top sand lower means off Rect goes higher} + inc(OBSand.top); + inc(OBSand.bottom);{bottom sand higher} + dec(TrickleBot.v);{shorten trickle} + CopyBits(OffScreen,myWindow^.portBits,OTSand, + TopSand,srcCopy,TopSandRgn);{draw topsand} + If OTSand.top = OffTopSand.top then begin + GameOver := True;{flag end of game/hourglass empty!!} + CopyBits(OffScreen,myWindow^.portBits,OffHour, + Hour,srcCopy,nil);{erase all the trickles} + end; + + CopyBits(OffScreen,myWindow^.portBits,OBSand, + BotSand,srcCopy,BotSandRgn);{draw bottom sand} + + Counter := 1;{reset the counter} + end; {if else} +End; + +procedure DoCommonLevelStuff; +Begin + inc(Level);{next level} + DrawStatus(1,Level); + {increase speeds etc.} + Case Level of + 3: inc(Speed[3]); + 4: begin + inc(Speed[2]);{increase scroll window speed} + inc(Speed[3]); + SpotSpeed[5] := 4;{increase spot speed} + SpotSpeed[6] := -4; + end; + end;{of case level} + + SpotSpeed[5] := abs(SpotSpeed[5]);{a must for each level,positive speed} + SpotSpeed[6] := -abs(SpotSpeed[6]);{negative speed} + + If LastValid < 6 then inc(LastValid);{increase Valid targets} + err := PBKillIO(SoundParmBlk,false);{kill sound} + InitialAnimation; + FlushEvents(mDownMask,0); +End; + +procedure EndThisGame; +var i:integer; +Begin + {draw hourglass empty} + OffSetRect(OBSand,0,OffBotSand.bottom-OBSand.bottom); + OffSetRect(OTSand,0,OffTopSand.top-OTSand.top); + + If PauseStatus = 2 then InvalRect(myWindow^.portRect) {clue, redraw window} + else begin + InvalRect(RedrawRect);{force redraw of shade area+gun} + InvalRect(Hour);{update will draw empty hourglass} + end; + PauseStatus := 0;{no pause} + + WhichSound := Silence;{not sound} + SetCursorMenus(false);{show cursor and menus} + EnableItem(myMenus[2],1);{enable begin} + If Score > theHighs^.score[4] then begin {new hiscore} + UpDateMyWindow;{update/draw window before dialog} + FlushEvents(upDatemask,0);{we just updated} + DisplayDialog(Name);{new hiScore dialog,name and sort} + end;{if score} +End; + +procedure AnimateOneLoop; +Begin + GetMouse(myMouse); + {limit movement to target area, note: by using a sliding MouseRect with a + fixed GunLimit we can get the GunRect to respond immediately to a change of + direction outside the GunLimit Rect. MouseRect simply moves with the mouse + when the mouse is outside the GunLimit Rect then we map the mouse to + MouseRect and GunLimit to get relative move inside GunLimit if there is any} + + If not(PtInRect(myMouse,MouseRect)) then begin + {a coordinate is outside mouseRect so slide mouseRect to myMouse} + If myMouse.h < MouseRect.left then begin {slide MouseRect to left} + MouseRect.right := MouseRect.right - + (MouseRect.left - myMouse.h); + MouseRect.left := myMouse.h; + end + else If myMouse.h > MouseRect.right then begin + MouseRect.left := MouseRect.left + myMouse.h - MouseRect.right; + MouseRect.right := myMouse.h; + end; + If myMouse.v < MouseRect.top then begin + MouseRect.bottom := MouseRect.bottom - + (MouseRect.top - myMouse.v); + MouseRect.top := myMouse.v; + end + else If myMouse.v > MouseRect.bottom then begin + MouseRect.top := MouseRect.top + myMouse.v - MouseRect.bottom; + MouseRect.bottom := myMouse.v; + end; + end;{if not(ptinRect)} + + {myMouse is to Mouse as site is to GunLimit,myMouse becomes Site coordinates} + MapPt(myMouse,MouseRect,GunLimit); + + If myMouse.h < GunRect.left-2 then begin {slide gun and site to left or right} + GunRect.left := GunRect.left - 3; + GunRect.right := GunRect.right - 3;{gun/site rect.top/bottom are constant} + SiteRect.left := SiteRect.left - 3; + SiteRect.right := SiteRect.right - 3; + end + Else If myMouse.h > GunRect.left+2 then begin + GunRect.left := GunRect.left + 3; + GunRect.right := GunRect.right + 3; + SiteRect.left := SiteRect.left + 3; + SiteRect.right := SiteRect.right + 3; + end; + {horizontal site always points to area directly above the gun} + {vertical siteRect moves with mouse,whatever user requests} + SiteRect.top := myMouse.v; + SiteRect.bottom := myMouse.v + 25;{25 is Site bottom - top} + + {we have two OffGuns in OffScreen, one is offset over gray by one pixel} + WhichGun := GunRect.right mod 2;{proper shape to draw over gray background} + + CheckSpotStatus;{move and draw the spot targets} + + {do all the scrolling window stuff} + For i := 1 to 3 do begin + ScrollRect(TarWindow[i],Vector[i],0,tRgn);{scroll the 3 windows} + If (OffPiece[i].left < 0) then StartOne(i) {scrolling right} + else {scrolling left} + If (OffPiece[i].right > Wings[i].bounds.right) then StartOne(i); + + CopyBits(Wings[i],myWindow^.portBits,OffPiece[i],Piece[i],srcCopy,nil); + OffPiece[i].left := OffPiece[i].left - Vector[i];{move OffPiece} + OffPiece[i].right := OffPiece[i].right - Vector[i];{Direction[i] * Speed[i]} + end;{for i := 1 to 3} + + {delay either 2 or 3 ticks, in our tests Delay returned 0.4 ticks sooner + than speedFactor requested} + If SpeedTrapOn then Delay(SpeedFactor,aTick); + + If BonusUnderWay then begin {draw all the BonusRect target stuff} + dec(BonusLoops); + If BonusLoops = 0 then begin {find new speed/loop count} + If BonusSpeed < 0 then begin {moving left so double to right} + BonusSpeed := abs(BonusSpeed); + BonusLoops := PrevBonusLoops * 2;{multiply is faster than add} + end + else begin {moving right.. pick a new at random..left or right} + BonusSpeed := Random div 6554;{-4 to +4} + BonusLoops := abs(Random div 1639) + 8; + PrevBonusLoops := BonusLoops;{Prev.. needed later if moving left} + end; + end;{If BonusLoops} + + {is new Rect.left to right side of window yet?} + If BonusRect.left + BonusSpeed > TarWindow[4].right then begin + WhichSound := Silence;{will kill the bonussnd} + BonusUnderWay := false; + end + else begin {draw the bonus shape} + {change shapes..ie.each of two faces every 8 loops} + Case BonusShape of + 1: If ((Counter Mod 8) = 0) then inc(BonusShape); + 2: If ((Counter Mod 8) = 0) then dec(BonusShape); + end;{case BonusShape} + + {draw the BonusRect...} + BonusRect.left := BonusRect.left + BonusSpeed;{move rect} + BonusRect.right := BonusRect.right + BonusSpeed;{offset BonusRect rect} + CopyBits(BonusMap,myWindow^.portBits, + OffBonus[BonusNdx,BonusShape], + BonusRect,srcCopy,TarWindRgn);{draw it} + end; + end;{If BonusUnderWay} + + If ShotFired = True then begin {ShotFired is set by mouseDown event} + {draw bullet trace and explode, use PatXOr mode so we can reverse it} + PenMode(PatXOr);{invert} + TargetCenter.h := GunRect.left+ 16; + TargetCenter.v := myMouse.v + 14; + MoveTo(TargetCenter.h,GunRect.top); + LineTo(TargetCenter.h,TargetCenter.v);{line from gun to explode} + + {locate Explode shape} + ExplodeRect.right := GunRect.left+(ExplodeRect.right-ExplodeRect.left); + ExplodeRect.left := GunRect.left; + ExplodeRect.bottom := myMouse.v+(ExplodeRect.bottom-ExplodeRect.top); + ExplodeRect.top := myMouse.v; + CopyBits(OffScreen,myWindow^.portBits,OffExplode, + ExplodeRect,srcXor,nil);{draw it} + + {detect a hit here....sound and such....} + DetectAHit;{we'll process the hit later, after erasing line/explode} + + {draw Site (from screen) to OffGun then OffGun to Screen, do it + here so explode is shown in site!} + CopyBits(myWindow^.portBits,OffScreen,SiteRect, + OffSite[WhichGun],srcCopy,SiteRgn[WhichGun]); + CopyBits(OffScreen,myWindow^.portBits,OffGun[WhichGun], + GunRect,srcCopy,nil); + + aTick := TickCount;{delay abit...so we can see line/explode} + inc(aTick); + Repeat Until(TickCount > aTick); + + ShotFired := False;{reset gun,ready for next mousedown} + + {erase the bullet line & explode, just invert the inversion!} + MoveTo(TargetCenter.h,GunRect.top); + LineTo(TargetCenter.h,TargetCenter.v);{inverse is still in effect} + CopyBits(OffScreen,myWindow^.portBits,OffExplode, + ExplodeRect,SrcXor,nil);{inverse mode} + PenMode(PatCopy);{set back to normal} + + {window is back to normal (no lines/explode) so do hit stuff} + {would have a mess if we erased targets before erasing explode} + If Hit = True then HandleAHit; + + end + Else begin {no shot fired... just draw the site/gun} + CopyBits(myWindow^.portBits,OffScreen,SiteRect, + OffSite[WhichGun],srcCopy,SiteRgn[WhichGun]);{site into OffGun} + CopyBits(OffScreen,myWindow^.portBits,OffGun[WhichGun], + GunRect,srcCopy,nil);{offGun into window} + end; + + PixOff[1] := PixOff[1] + Speed[1];{distance (in pixels) targets have moved} + PixOff[2] := PixOff[2] + Speed[2]; + PixOff[3] := PixOff[3] + Speed[3]; + + If ValidDone then {all score targets finished, check for end of this level} + If (MissCount = 0) and not(BonusUnderWay) then begin {do new levelstuff} + FlushEvents(mDownMask,0);{flush the mouseDown events} + DrawPicture(TarWindPic,TarWindPic^^.picFrame);{erase old targets} + ClipRect(GunRect);{erase the gun area only} + EraseRect(GunRect);{will erase in clipped area only} + DrawPicture(BackSide,BackSide^^.picframe);{will draw over gun} + ClipRect(myWindow^.portRect);{reset to whole window} + + {display the timebonus frame stuff and animate} + EraseRect(Hour);{erase current hourglass} + MoveHourGlass(TBone.hourMove.h,TBone.hourMove.v);{move hourglass to new} + EraseRect(TBone.frame); + tRect := TBone.frame; + PenSize(2,2); + FrameRect(tRect); + PenSize(1,1); + InsetRect(tRect,3,3); + FrameRect(tRect);{erase and frame area for timebonus} + DrawHourGlass;{draw hourglass in new location} + Copybits(FontMap,myWindow^.portbits,TBone.arrowSource, + TBone.arrowDest,srcCopy,nil);{draw the arrow} + FrameRect(TBone.numBox);{draw box to frame numbers} + tRect := TBone.numBox; + InsetRect(tRect,4,4);{for moveTo and erase} + + aTick := 0;{will use to accumulate/display time score} + If SoundOn then begin + If odd(Level) then begin + whichSound := SnakeCharmer; {designate which of FourTone} + i := mySongPtr^.noteCount; + end + else begin + whichSound := Walk; + i := myWSongPtr^.noteCount;{walk noteCount for loop} + end; + InitialSnakeSong(1);{Start the Song} + end;{if sound} + + {now animate hourglass and score until sand is gone (GameOver)} + Repeat + SystemTask; + {check song note to see if we need to start another note} + If (TickCount > ToneDelay) then begin {get another songnote} + {if last note then reset to beginning} + If NoteCount < i then inc(NoteCount) else NoteCount := 1; + SetSnakeSoundStuff;{get next sound,etc.} + end; {if TickCount} + If SpeedTrapOn then Delay(Speedticks,BuffSize);{slow down 1 tick} + DrawSandStuff; {will return GameOver true if done} + {use aTick to accumulate the Time Score} + aTick := aTick + (Level div 2) + 1;{timebonus score} + NumToString(aTick,tStr); + MoveTo(tRect.right-StringWidth(tStr)-1,tRect.bottom); + EraseRect(tRect); + DrawString(tStr);{draw the new score} + Until(GameOver = True);{true when all the sand is gone} + + Score := Score + aTick;{update score} + DrawStatus(2,Score); + NewHiScore; + MoveHourGlass(-TBone.hourMove.h,-TBone.hourMove.v);{back to original} + DrawHourGlass; + whichSound := Silence; + err := PBKillIO(SoundParmBlk,false);{kill sound} + EraseRect(TBone.frame);{get rid of TimeBonus frame} + + If Level <> 4 then begin {handle various levels} + Case Level of + 2:Begin + DrawAClue(1);{draw a clue} + PauseThisGame(2);{2 indicates a clue pause} + end; + 10:Begin {display the clue dialog, get user input} + ShowCursor;{for dialog input} + DisplayDialog(ClueDial);{will cause update for myWindow} + HideCursor;{continue with game} + + If PauseStatus = 3 then begin {3 if tomb,0 if not} + ShowCursor; + DisplayDialog(Tomb);{display the tomb dialog} + HideCursor; + PauseStatus := 0;{enable normal redrawing} + Score := Score + 10000;{tomb bonus = 10000} + DrawStatus(2,Score); + NewHiScore; + end; + + InvalRect(myWindow^.portRect);{whole window} + UpdateMyWindow; + FlushEvents(updateMask,0); + + DrawPicture(TarWindPic,TarWindPic^^.picFrame);{continue} + DoCommonLevelStuff; + end;{case 5} + OtherWise begin + {draw the empty TarWindows and start another level} + DrawPicture(TarWindPic,TarWindPic^^.picFrame); + DoCommonLevelStuff;{do here for no clue, controls for clues} + end;{otherwise} + end;{case level} + end{if level <> 4} + Else begin {game is locked...let user know} + ShowCursor; + DisplayDialog(Unlock);{text about unlocking the game} + HideCursor; + EndThisGame; + end; + FlushEvents(mDownMask,0); + end;{if (MissCount} + + {draw the hourglass stuff, end game if out of sand} + If PauseStatus = 0 then begin {if no pause, watch out for clue level pause} + DrawSandStuff; {SandStuff will return GameOver = true if sand empty} + If GameOver then EndThisGame; + end;{if pauseStatus} +End; + + +PROCEDURE InitThings; +Begin + InitGraf(@thePort); {create a grafport for the screen} + + MoreMasters; {extra pointer blocks at the bottom of the heap} + MoreMasters; {this is 5 X 64 master pointers} + MoreMasters; + MoreMasters; + MoreMasters; + MoreMasters; + + {get the cursors we use and lock them down - no clutter} + ClockCursor := GetCursor(watchCursor); + {HLock(Handle(ClockCursor));locked in resource} + + For i := 1 to 3 do begin + myCursor[i] := GetCursor(129 + i); + {HLock(Handle(myCursor[i]));locked in resource} + end; + + {show the watch while we wait for inits & setups to finish} + SetCursor(ClockCursor^^); + + {init everything in case the app is the Startup App} + InitFonts; {startup the fonts manager} + InitWindows; {startup the window manager} + InitMenus; {startup the menu manager} + TEInit; {startup the text edit manager} + InitDialogs(Nil); {startup the dialog manager} + + Finished := False; {set program terminator to false} + FlushEvents(everyEvent,0); {clear events from previous program} + { set up screen size stuff } + Screen := ScreenBits.Bounds; { Get screen dimensions from thePort } + with Screen do SetRect(DragArea,Left+4,Top+24,Right-4,Bottom-4); + + ResRefNum := CurResFile;{i-116} +End; + +procedure CreateWindow;{windows,dialogs} +var + tRect: Rect; +Begin + {get window. template will use our WDEF 128 resource. set PROCId field} + myWindow := GetNewWindow(WindResId,@wRecord,Pointer(-1)); + SetRect(tRect,0,-10,600,400);{this will clip OffScreen bitMaps as well!!} + + ResumeButton := GetNewControl(pressResume,myWindow); + EndButton := GetNewControl(pressEnd,myWindow); + + {remember: Dialog itemlists should be purgable, dialogs invisible} + For DialNdx := Help to PrintDial do begin {read all the dialogs into array} + myDialog[DialNdx] := + GetNewDialog(ord(DialNdx)+129,@myDialogRec[DialNdx],myWindow); + SetPort(myDialog[DialNdx]); + ClipRect(tRect);{set clip to smaller size..} + end; + + Environs(i,j);{peek to see what hardware, i is rom, j is machine + 1 = 128k thru Plus,2 = Mac II,3 = SE} + If j = 2 then SetControlValue(4) {must be a Mac II speedwise} + else SetControlValue(2);{set NORMAL button in Speed dialog} + + ShowWindow(myWindow);{done so back to myWindow...} + SetPort(myWindow); + ClipRect(tRect); {i-166, set cliprgn to small rgn} + TextFont(3);{Geneva font, installed in System resource file} + TextSize(12); + + ScoreHandle := GetResource('HSCR',128);{we're keeping Scores in Resource} + {HLock(ScoreHandle);lock it permanently in resource} + theHighs := ScorePtr(ScoreHandle^); +end; + +procedure DoMenuCommand(mResult:LongInt); +var + name: Str255; + tPort: GrafPtr; + i,h: integer; +Begin + theMenu := HiWord(mResult); + theItem := LoWord(mResult); + Case theMenu of + appleMenu: + Begin + GetPort(tPort); + If theItem = 1 then DisplayDialog(About) + Else begin + GetItem(myMenus[1],theItem,name);{must be a desk acc.} + refNum := OpenDeskAcc(name); + end; + SetPort(tPort); + End; + fileMenu: + Case theItem of + 1:Begin + HiliteMenu(0); + BeginTheGame;{rem draws a new menu bar} + end; + 2:Finished := True; {quit this program} + end;{of case} + optionMenu: + Case theItem of + 1:DisplayDialog(Guard);{protection dialog} + 2:DisplayDialog(Help); + 3:DisplayDialog(Scores);{hiscore stuff} + 4:Begin {toggle sound on or off} + If SoundOn then SoundOn := false else SoundOn := true; + CheckItem(myMenus[3],theItem,SoundOn);{check if true,none if false} + end; + 5:DisplayDialog(SetSpeed);{for hardware} + end; { case theItem} + worksMenu: + Case theItem of + 1:DisplayDialog(BMap);{two of our Offscreen bitmaps} + 2:DisplayDialog(Source);{our source code offer} + end;{case theItem} + End;{case theMenu of} + HiliteMenu(0); +End; + +procedure TakeCareKeyDown(Event:EventRecord); +Var + CharCode: char; +Begin + CharCode := chr(LoWord(BitAnd(Event.message,CharCodeMask))); + + If BitAnd(Event.modifiers,CmdKey) = CmdKey then + DoMenuCommand(MenuKey(CharCode)) + Else If GameUnderWay then PauseThisGame(1);{pause with any other key press} +End; + +procedure TakeCareControls(whichControl:ControlHandle;localMouse:point); +var + ControlHit,i: integer; +Begin + ControlHit := TrackControl(whichControl,localMouse,nil); { Find out which} + If ControlHit > 0 then {i-417} + Begin + If whichControl = ResumeButton then {RESUME the game..} + Begin + HideControl(ResumeButton);{watch out for update event} + HideControl(EndButton); + If (PauseStatus = 2) then InvalRect(myWindow^.portRect);{erase clue} + + BeginUpdate(myWindow);{clear Update stuff...buttons} + EraseRect(myWindow^.portRect); + Case PauseStatus of + 2:Begin {clue is being draw over} + PauseStatus := 0;{so Draw will redraw properly} + GameUnderWay := True; + DrawWindowContents(myWindow); + PauseStatus := 2;{so we can DoCommon... below} + end; + OtherWise DrawWindowContents(myWindow) {just the hidden control area} + end;{case PauseStatus} + EndUpDate(myWindow); + + FlushEvents(updateMask,0);{clear Update caused by HideControl} + If PauseStatus = 2 then DoCommonLevelStuff;{start next level} + SetCursorMenus(True); + PauseStatus := 0; + End; + If whichControl = EndButton then {END this current game...} + Begin + HideControl(ResumeButton);{hide the resume and end} + HideControl(EndButton); + EndThisGame; + End; + End; {of If ControlHit} +End; { of procedure} + +procedure TakeCareMouseDown(myEvent:EventRecord); +var + Location: integer; + WhichWindow: WindowPtr; + WhichControl: ControlHandle; + MouseLoc: Point; + WindowLoc: integer; + ControlHit: integer; + GlobalMouse:Point; +Begin + If GameUnderWay = True then begin {handle a game click} + ShotFired := True;{flag a shot, will be checked in AnimateOneLoop} + If SoundOn then begin {write/start a Gunshot sound} + {leave whichsound = to whatever it is} + err := PBKillIO(SoundParmBlk,false);{kill current sound} + WriteASoundBlock(ptr(Sound[GunShot]),Buff[GunShot],TickCount); + end;{if soundOn} + end + Else begin {Mouse is normal...handle normal functions} + MouseLoc := myEvent.Where; {Global coordinates} + WindowLoc := FindWindow(MouseLoc,WhichWindow); {I-287} + case WindowLoc of + inMenuBar: + DoMenuCommand(MenuSelect(MouseLoc)); + inSysWindow: + SystemClick(myEvent,WhichWindow); {I-441} + inDrag: + DragWindow(WhichWindow,MouseLoc,DragArea); + inContent: + If WhichWindow <> FrontWindow then SelectWindow(WhichWindow) + else Begin + GlobaltoLocal(MouseLoc); + {check to see if our Continue/End buttons were clicked} + ControlHit := FindControl(MouseLoc,whichWindow,whichControl); + If ControlHit > 0 then TakeCareControls(whichControl,Mouseloc) + {check to see if click on hourglass, begin the game} + Else If (PtInRect(MouseLoc,Hour)) and (PauseStatus = 0) + then BeginTheGame;{start the game} + end;{else} + end; {case of} + end;{Else} +end; { TakeCareMouseDown } + + +procedure TakeCareActivates(myEvent:EventRecord); +var + WhichWindow: WindowPtr; +Begin + WhichWindow := WindowPtr(myEvent.message); + SetPort(WhichWindow); +End; + +procedure TakeCareUpdates(Event:EventRecord); +var + UpDateWindow,TempPort: WindowPtr; +Begin + UpDateWindow := WindowPtr(Event.message); + GetPort(TempPort); + SetPort(UpDateWindow); + BeginUpDate(UpDateWindow); + EraseRect(UpDateWindow^.portRect); + DrawWindowContents(UpDateWindow);{we only have one window!} + EndUpDate(UpDateWindow); + SetPort(TempPort); +End; + +procedure TakeCareSoundStuff;{called from MainEvent} +{the current sound is complete if ioResult < 0. Some of our sounds only play +thru once so we leave WhichSound = Silence so that the sound is not restarted. +BonusSnd is played over and over while a Bonus (bottom target) is displayed so +we set WhichSound = BonusSnd.. and each time it is finished this procedure +starts another BonusSnd. In the case of our two 'songs' we are changing the +notes before the sound is complete (before ioResult < 1 or duration = 0). +We check the current TickCount against a variable ToneDelay which equals the +TickCount when the note started plus the ticks the note should play... so +if TickCount > ToneDelay we need to start another note.. we just change the +pitches and reset the Duration field and keep going! Note: the sound i/o +decrements the duration field so it must be reset each time!} +Begin + If SoundParmBlk^.ioResult < 1 then {sound is finished find another/play it} + Case WhichSound of + BonusSnd:{start another BonusSnd} + WriteASoundBlock(ptr(Sound[BonusSnd]),Buff[BonusSnd],TickCount); + end; {case whichsound} + + {we don't use Songs from MainEvent loop but if we did we'd need this Else. + All our 'song's are played from closed loops in the AnimateOneLoop} + (* Else {sound is still underway if Snake or Walk check for next note} + Case WhichSound of + SnakeCharmer:begin {snakeCharmer song is underway check for new note} + If (TickCount > ToneDelay) then begin {then get next note} + inc(NoteCount); + SetSnakeSoundStuff; + {check to see if this is the last note} + If mySongPtr^.noteCount = NoteCount then WhichSound := Silence; + end;{if} + end;{snake} + Walk:begin {Walk song is underway check for new note} + If (TickCount > ToneDelay) then begin {need new note} + inc(NoteCount); + SetSnakeSoundStuff; + If myWSongPtr^.noteCount = NoteCount then WhichSound := Silence; + end;{if} + end;{walk} + end;{case & else} *) +End;{of procedure} + +procedure MainEventLoop; +var + myEvent: EventRecord; + i: integer; +Begin + InitCursor; + SetCursor(myCursor[1]^^);{one of 3 custom cursors} + Repeat + SystemTask; + If GetNextEvent(EveryEvent,myEvent) then {handle the event} + Case myEvent.What of + mouseDown: TakeCareMouseDown(myEvent); + KeyDown: TakeCareKeyDown(myEvent); + ActivateEvt: TakeCareActivates(myEvent); + UpdateEvt: TakeCareUpdates(myEvent); + End {of Case} + Else {no event pending so lets do some game stuff} + If GameUnderWay then begin + AnimateOneLoop; + If SoundOn then TakeCareSoundStuff; + end;{ if GameUnderWay} + Until Finished; +End; + +procedure SetUpMenus; +var + i: integer; +Begin + myMenus[1] := GetMenu(appleMenu); {get menu info from resources} + AddResMenu(myMenus[1],'DRVR'); {add in all the DA's} + myMenus[2] := GetMenu(fileMenu); + myMenus[3] := GetMenu(optionMenu); + myMenus[4] := GetMenu(worksMenu); + myMenus[5] := GetMenu(MessageMenu); {this is the backspace message} + CheckItem(myMenus[3],4,True); {check the Sound item} + SoundOn := True; {sound will start on first begin} + For i := 1 to 4 do InsertMenu(myMenus[i],0); + DrawMenuBar; +End; + +procedure CloseStuff; +Begin + ShowCursor; + err := PBKillIO(SoundParmBlk,false);{always kill sound before quitting} + WriteResource(ScoreHandle);{write out if changes were flagged..HiScore} +End; + +{Main Program begins here} +BEGIN + InitThings; + SetUpMenus; {load the menus from resources} + CreateWindow; {load game window and dialogs from resources} + CreateSound; {load songs and create sound stuff} + CreateCairoStuff; {load Cairo font bitimage and locate table} + CreatePictures; {load Pictures from resources} + CreateOffScreenBitMap; {load Bitmap from resources} + CreateStrings; {load strings from resources} + OneTimeGameStuff; {locate all our rects, etc. in game window} + MainEventLoop; {let's play a game! get user input} + CloseStuff; {done so close} +END. diff --git a/Duane Blehm's Code/Cairo Æ’/aCairo.R b/Duane Blehm's Code/Cairo Æ’/aCairo.R new file mode 100755 index 0000000..f0de4c2 --- /dev/null +++ b/Duane Blehm's Code/Cairo Æ’/aCairo.R @@ -0,0 +1,38 @@ +* aCairo.R + +aCairo.rsrc + +TYPE NILE = STR + ,0 +Cairo ShootOut ver1.2src, by Duane Blehm, 9/15/87 + +TYPE MENU + ,1 +\14 + About ShootOut... + (- + + ,256 +Game + Begin + Quit /Q + + ,257 +Options + Unlock.. + Help.. + HiScore.. + ! Sound + Set Speed.. + + ,258 +Works + Peek OffScreen + Source Code... + + ,259 +(Any Key to Exit) + +* will include Resource file built with ResEdit and ScrapBook +INCLUDE aCairo/rsrc + diff --git a/Duane Blehm's Code/Cairo Æ’/aCairo:rsrc b/Duane Blehm's Code/Cairo Æ’/aCairo:rsrc new file mode 100755 index 0000000..e69de29 diff --git a/Duane Blehm's Code/Copy Mask Æ’/About CopyMask b/Duane Blehm's Code/Copy Mask Æ’/About CopyMask new file mode 100755 index 0000000000000000000000000000000000000000..894ca3d8e8a28c406974d68af9572cc34ed7e697 GIT binary patch literal 25836 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 MouseRect.right then begin + MouseRect.left := MouseRect.left + tPoint.h - MouseRect.right; + MouseRect.right := tPoint.h; + end; + If tPoint.v < MouseRect.top then begin + MouseRect.bottom := MouseRect.bottom - + (MouseRect.top - tPoint.v); + MouseRect.top := tPoint.v; + end + else If tPoint.v > MouseRect.bottom then begin + MouseRect.top := MouseRect.top + tPoint.v - MouseRect.bottom; + MouseRect.bottom := tPoint.v; + end; + end;{if not(ptinRect)} + + {tPoint is to MouseRect as FlyRect.topleft is to FlightRect} + MapPt(tPoint,MouseRect,FlightRect); + + {determine horiz/vert. offset if needed, MaskRect moves in sync with FlyRect} + If tPoint.h > FlyRect.left + 2 then begin + FlyRect.left := FlyRect.left + 3;{offsetRect to right} + FlyRect.right := FlyRect.right + 3; + MaskRect.left := MaskRect.left + 3;{offsetRect to right} + MaskRect.right := MaskRect.right + 3; + end + else if tPoint.h < FlyRect.left - 2 then begin + FlyRect.left := FlyRect.left - 3;{offsetRect to left} + FlyRect.right := FlyRect.right - 3; + MaskRect.left := MaskRect.left - 3;{offsetRect to left} + MaskRect.right := MaskRect.right - 3; + end; + {vertical offset?} + If tPoint.v > FlyRect.top + 2 then begin + FlyRect.top := FlyRect.top + 3; + FlyRect.bottom := FlyRect.bottom + 3; + MaskRect.top := MaskRect.top + 3; + MaskRect.bottom := MaskRect.bottom + 3; + end + else if tPoint.v < FlyRect.top - 2 then begin + FlyRect.top := FlyRect.top - 3; + FlyRect.bottom := FlyRect.bottom - 3; + MaskRect.top := MaskRect.top - 3; + MaskRect.bottom := MaskRect.bottom - 3; + end; + + {draw the fly from OffScreen to myWindow using MaskMap} + CopyMask(OffScreen,MaskMap,myWindow^.portBits,OffFly[FlyNdx], + MaskRect,FlyRect); + + If FlyNdx = 1 then inc(FlyNdx) {next shape, there are 2} + else FlyNdx := 1; {back to first shape} +end; + + +PROCEDURE InitThings; +Begin + InitGraf(@thePort); {create a grafport for the screen} + + MoreMasters; {extra pointer blocks at the bottom of the heap} + MoreMasters; {this is 5 X 64 master pointers} + MoreMasters; + MoreMasters; + MoreMasters; + + {get the cursors we use and lock them down - no clutter} + ClockCursor := GetCursor(watchCursor); + HLock(Handle(ClockCursor)); + + {show the watch while we wait for inits & setups to finish} + SetCursor(ClockCursor^^); + + {init everything in case the app is the Startup App} + InitFonts; {startup the fonts manager} + InitWindows; {startup the window manager} + InitMenus; {startup the menu manager} + TEInit; {startup the text edit manager} + InitDialogs(Nil); {startup the dialog manager} + + Finished := False; {set program terminator to false} + FlushEvents(everyEvent,0); {clear events from previous program} + { set up screen size stuff } + Screen := ScreenBits.Bounds; { Get screen dimensions from thePort } + with Screen do { Screen.Left, etc. } + Begin + SetRect(DragArea,Left+4,Top+24,Right-4,Bottom-4); + SetRect(GrowArea,Left,Top+24,Right,Bottom); + End; +End; + +procedure CreateWindow; +var + Wrect: Rect; + TypeWind: Integer; + Visible: Boolean; + GoAway: Boolean; + RefVal: Longint; +Begin + SetRect(Wrect,8,40,504,336); + TypeWind := 0; + Visible := True; + GoAway := True; + + myWindow := NewWindow(Nil,Wrect,'CopyMask Demo',Visible, + TypeWind,Nil,GoAway,RefVal); + SetPort(myWindow); + ClipRect(myWindow^.portRect);{set clipping area as per Inside Mac} +End; + +procedure DoMenuCommand(mResult:LongInt); +var + name: Str255; + tPort: GrafPtr; +Begin + theMenu := HiWord(mResult); + theItem := LoWord(mResult); + Case theMenu of + appleMenu: + Begin + GetItem(myMenus[1],theItem,name); + refNum := OpenDeskAcc(name); + End; + fileMenu: + Case theItem of + 1:{display offScreen bitmap in dialog} + Begin + myDialog := GetNewDialog(128,nil,myWindow);{from resource} + GetPort(tPort); + ShowWindow(myDialog);{invisible in resource} + SelectWindow(myDialog); + SetPort(myDialog); {so we can draw into our window} + + CopyBits(OffScreen,myDialog^.portBits,OffScreen.bounds, + OffScreen.bounds,srcOr,Nil);{the whole thing} + FrameRect(OffScreen.bounds);{frame it } + MoveTo(OffScreen.bounds.left + 10,OffScreen.bounds.bottom + 20); + DrawString('^ copy of OffScreen Bitmap'); + ModalDialog(Nil,theItem);{we'll close no matter what hit} + + HideWindow(myDialog); + SelectWindow(myWindow);{restore our game window} + SetPort(tPort); + end;{1:} + 2:Finished := True; + end;{case theItem} + End; + HiliteMenu(0); +End; + +procedure TakeCareMouseDown(myEvent:EventRecord); +var + Location: integer; + WhichWindow: WindowPtr; + MouseLoc: Point; + WindowLoc: integer; +Begin + MouseLoc := myEvent.Where; {Global coordinates} + WindowLoc := FindWindow(MouseLoc,WhichWindow); {I-287} + case WindowLoc of + inMenuBar: + DoMenuCommand(MenuSelect(MouseLoc)); + inSysWindow: + SystemClick(myEvent,WhichWindow); {I-441} + inContent: + If WhichWindow <> FrontWindow then + SelectWindow (WhichWindow); + inGoAway: + If TrackGoAway(WhichWindow,MouseLoc) then + Finished := True;{end the game} + end; {case of} +end; { TakeCareMouseDown } + +procedure TakeCareActivates(myEvent:EventRecord); +var + WhichWindow: WindowPtr; +Begin + WhichWindow := WindowPtr(myEvent.message); + SetPort(WhichWindow); +End; + +procedure TakeCareUpdates(Event:EventRecord); +var + UpDateWindow,TempPort: WindowPtr; +Begin + UpDateWindow := WindowPtr(Event.message); + GetPort(TempPort); + SetPort(UpDateWindow); + BeginUpDate(UpDateWindow); + EraseRect(UpDateWindow^.portRect);{ or UpdateWindow^.VisRgn^^.rgnBBox } + DrawWindowContents(UpDateWindow); + EndUpDate(UpDateWindow); + SetPort(TempPort); +End; + +procedure MainEventLoop; +var + myEvent: EventRecord; +Begin + InitCursor; + CursorIsOn := True;{keep track of hide/show cursor} + Repeat + SystemTask; + If GetNextEvent(EveryEvent,myEvent) then + Case myEvent.What of + mouseDown: TakeCareMouseDown(myEvent); + KeyDown: Finished:= True; + ActivateEvt:TakeCareActivates(myEvent); + UpDateEvt: TakeCareUpdates(myEvent); + End + + Else AnimateStuff; + + Until Finished; +End; + +procedure SetUpMenus; +var + i: integer; +Begin + myMenus[1] := GetMenu(appleMenu); {get menu info from resources} + AddResMenu(myMenus[1],'DRVR'); {add in all the DA's} + myMenus[2] := GetMenu(fileMenu); + For i := 1 to lastMenu do + begin + InsertMenu(myMenus[i],0); + end; + DrawMenuBar; +End; + +procedure CloseStuff; +Begin + {be sure to kill any sound I/O before quitting!} +End; + +{Main Program begins here} +BEGIN + InitThings; + {check for the 64k ROMs, abort if they're present} + Environs(x,y); + If x >= 117 then begin {64k roms aren't present,so go ahead} + SetUpMenus; + CreateWindow; + CreatePictures;{load picts from resource file} + CreateOffScreenBitMap;{for use with copyBits procedure} + DrawPicsIntoOffScreen;{OffScreen holds all our fly shapes} + InitialAnimation;{set up stuff for start of animation} + MainEventLoop;{will animate fly if nothing else is going on} + end + else begin + InitCursor;{show arrow cursor} + i := NoteAlert(128,nil); {display alert and exit} + end;{else} + CloseStuff; +END. diff --git a/Duane Blehm's Code/Drag Piece Æ’/About DragPiece.txt b/Duane Blehm's Code/Drag Piece Æ’/About DragPiece.txt new file mode 100755 index 0000000..422730b --- /dev/null +++ b/Duane Blehm's Code/Drag Piece Æ’/About DragPiece.txt @@ -0,0 +1,14 @@ +About the DragPieceDemo files.... + +'DragPieceDemo.pas' is an 'Edit' text file containing sourcecode for our +'almost generic' DragPiece() procedure used in a simple example program. + +'aDragPiece.rsrc' is a resource file which is linked to the Demo code. + +'DragPieceDemo' is the application file. + +'DragPiece animation' is a paint-type file that illustrates what's happening. + +We're including this Demo with 'ZeroGravity' because it illustrates the same +principle of animation over backgrounds with some improvements, refinements, +etc. We make extensive use of this procedure in our new 'PUZZ'L' application. \ No newline at end of file diff --git a/Duane Blehm's Code/Drag Piece Æ’/DragPiece animation b/Duane Blehm's Code/Drag Piece Æ’/DragPiece animation new file mode 100755 index 0000000000000000000000000000000000000000..881bd8ae7eeefda35834c8fb2ce99a858fbf0317 GIT binary patch literal 29173 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 literal 0 HcmV?d00001 diff --git a/Duane Blehm's Code/Drag Piece Æ’/DragPieceDemo b/Duane Blehm's Code/Drag Piece Æ’/DragPieceDemo new file mode 100755 index 0000000..e69de29 diff --git a/Duane Blehm's Code/Drag Piece Æ’/DragPieceDemo.Pas b/Duane Blehm's Code/Drag Piece Æ’/DragPieceDemo.Pas new file mode 100755 index 0000000..2b65670 --- /dev/null +++ b/Duane Blehm's Code/Drag Piece Æ’/DragPieceDemo.Pas @@ -0,0 +1,392 @@ +Program DragPieceDemo;{Thu Dec 17, 1987, © HomeTown Software,1987 +all rights reserved, this code not for distribution} +{this program demonstrates use of our 'generic' DragPiece() procedure for +animation of a 'piece' over a background. We're still trying to make the +procedure truly independent. Currently it has some 'options' embedded +within it for initializing the PicMap and PatchMap and also for how +the piece is effected on completion... see DragPiece(). The procedure +is called from TakeCareMouseDown() in window contents. } + +{also you might want to check out the MakeBitMap() procedure, this is a big +improvement over our old CreateOffScreenBitmap() stuff!} + +USES MacIntf;{TML Directives} + +{$L aDragPiece.rsrc}{link the resource file} + +CONST + lastMenu = 2; {Number of Menus} + appleMenu = 1; + fileMenu = 256; + +VAR {global program stuff} + myMenus: Array[1..lastMenu] of MenuHandle; + refNum,theMenu,theItem: integer; + Finished: Boolean;{used to terminate the program} + ClockCursor: CursHandle; {handle to watch cursor} + myWindow: WindowPtr; + Screen,DragArea,GrowArea: Rect; + + tRect:Rect; + tPt:Point; + DragRgn:RgnHandle; + LogoLoc:Point; +{----------------------------------------------} + +procedure DrawWindowContents(WhichWindow:WindowPtr); +var + trect:Rect; + tStr:Str255; + myPic:PicHandle; +Begin + FillRect(whichWindow^.portRect,ltGray); + tStr := 'Click to create a spot and then DRAG it!'; + SetRect(tRect,0,80,StringWidth(tStr) + 20,105); + EraseRect(tRect); + moveTo(10,100); + DrawString(tStr); + myPic := GetPicture(128);{logo} + tRect := myPic^^.picFrame; + {watchout! the window^.portRect is offset by a SetOrigin() call!} + OffSetRect(tRect,LogoLoc.h-tRect.right,LogoLoc.v-tRect.bottom); + DrawPicture(myPic,tRect); +End; + +procedure DragPiece(aWindow:WindowPtr;var theMouse:Point; + DragRect:Rect;PieceRgn:RgnHandle); +{aWindow is window the piece is to be dragged in, theMouse is location of +mouseDown, DragRect limits the area the piece can be dragged within the +window, PieceRgn is destination Region in aWindow for the piece. PieceRgn +defines the size of the piece by its .rgnBBox and shape by the shape of +the region... the Piece drawn into the PicMap is masked into the ComboMap +by a copy of the PieceRgn. If no Mask is desired just pass a new Rgn set +to the Rect in the window with a RectRgn() call. This procedure does NO +error checking for memory available, etc., beware!} +var + tRgn:RgnHandle;{temp copy of PieceRgn for animation} + PatchMap,ComboMap,PicMap,OldBits:Bitmap; + sRect,sUnionRect,LastsRect, + cRect,cUnionRect,LastcRect:Rect; + MouseLoc,LastMouseLoc,tPt:Point; + ExitToAnimate:boolean; + MaxMove:Point; + +procedure MakeBitMap(var theMap:Bitmap);{create a bitmap record} +{assumes that 'theMap.bounds' is predefined rect for size and +does NO error checking for available memory or MemErr..} +Begin + {following same as OffsetRect(theMap.bounds,-left,-top)} + theMap.bounds.right := theMap.bounds.right-theMap.bounds.left; + theMap.bounds.left := 0; + theMap.bounds.bottom := theMap.bounds.bottom-theMap.bounds.top; + theMap.bounds.top := 0; + + {now with 0,0 origin.. '.right' is width, and '.bottom' is height} + theMap.rowbytes := (((theMap.bounds.right - 1) DIV 16) + 1) * 2; + {size of bitimage is bottom times rowBytes, potential MemError here} + theMap.baseAddr := NewPtr(theMap.bounds.bottom * theMap.rowbytes); +End; + +Begin {procedure dragPiece} + SetPt(MaxMove,20,20);{piece will move max. of 20 pixels per loop} + {create temp. bitmaps, size Combo for MaxMove} + PicMap.bounds := PieceRgn^^.rgnBBox;{size to contain the region} + MakeBitMap(PicMap);{create the bitmap record.. must define .bounds first} + PatchMap.bounds := PicMap.bounds;{same size} + MakeBitMap(PatchMap); + + ComboMap.bounds := PatchMap.bounds; + {increase size to accomodate extra for drawing background/union } + ComboMap.bounds.right := ComboMap.bounds.right + MaxMove.h; + ComboMap.bounds.bottom := ComboMap.bounds.bottom + MaxMove.v; + MakeBitMap(ComboMap); + + tRgn := NewRgn; + CopyRgn(PieceRgn,tRgn);{make a temp. copy for use in drawing} + + {_________ PicMap must contain image to be 'dragged' ______} + {we're just going to 'fill' the PieceRgn for this example, this bitmap + could be passed as a parameter.} + OldBits := aWindow^.portBits; + SetPortBits(PicMap);{so we can quickdraw 'piece' into the PicMap} + tRect := aWindow^.portRect; + InsetRect(tRect,-50,-50);{in case mouse is near edge of window,clipping} + ClipRect(tRect); + SetOrigin(tRgn^^.rgnBBox.left,tRgn^^.rgnBBox.top); + EraseRect(tRgn^^.rgnBBox);{erase to white first} + FillRgn(tRgn,gray); + FrameRgn(tRgn); + SetOrigin(0,0); + SetPortBits(OldBits); + {__________________________} + + {____ initialize PatchMap, will be background under piece _____} + {restore, erase or draw initial BackGround under piece to PatchMap} + SetPortBits(PatchMap);{so we can quickdraw into the PatchMap} + {make the PatchMap topleft = to PieceRgn topleft for drawing, so + that the correct stuff is drawn into PatchMap for Piece location + in aWindow!} + SetOrigin(PieceRgn^^.rgnBBox.left,PieceRgn^^.rgnBBox.top); + EraseRect(PieceRgn^^.rgnBBox);{erase whole thing to white first} + {note: SetOrigin effects the aWindow^.portRect!!} + DrawWindowContents(aWindow);{draw window just like update event...} + SetOrigin(0,0);{restore normal origin} + SetPortBits(OldBits); + {___________________________} + + LastsRect := tRgn^^.rgnBBox;{last location in aWindow!} + sRect := LastsRect;{initialize sRect for size} + cRect := sRect; + LastMouseLoc := theMouse;{this is where user clicked} + MouseLoc := LastMouseLoc; + MouseLoc.h := MouseLoc.h + 1;{this will force redraw thru first loop} + Repeat { the entire process Until a MouseUp} + {determine If the mouse has moved and how much} + ExitToAnimate := false;{will flag mouse movement, need to draw stuff} + Repeat {wait for mouse move or mouse up} + {keep the piece on screen} + If not (PtInRect(MouseLoc,DragRect)) then Begin {move it back in} + If MouseLoc.h > DragRect.right then + MouseLoc.h := DragRect.right + Else If MouseLoc.h < DragRect.left then + MouseLoc.h := DragRect.left; + If MouseLoc.v > DragRect.bottom then + MouseLoc.v := DragRect.bottom + Else If MouseLoc.v < DragRect.top then + MouseLoc.v := DragRect.top; + End; + tPt.h := MouseLoc.h - LastMouseLoc.h;{tPt is offset requested} + tPt.v := MouseLoc.v - LastMouseLoc.v; + If (tPt.h <> 0) OR (tPt.v <> 0) then Begin {must have moved so animate} + {tPt move must be less than MaxMove} + If tPt.h > MaxMove.h then tPt.h := MaxMove.h + Else If tPt.h < -MaxMove.h then tPt.h := -MaxMove.h; + + If tPt.v > MaxMove.v then tPt.v := MaxMove.v + Else If tPt.v < -MaxMove.v then tPt.v := -MaxMove.v; + + {slide sRect to new location by tPt offset} + sRect.left := sRect.left + tPt.h; + sRect.right := sRect.right + tPt.h; + sRect.top := sRect.top + tPt.v; + sRect.bottom := sRect.bottom + tPt.v; + + {LastMouse is moved to the 'adjusted' location} + LastMouseLoc.h := tPt.h + LastMouseLoc.h; + LastMouseLoc.v := tPt.v + LastMouseLoc.v; + ExitToAnimate := True;{TML users can do a 'Leave' here!} + End;{If (abs..} + GetMouse(MouseLoc); + Until (not(StillDown) or ExitToAnimate); + + {combine/union the Last and new sRects, in the aWindow/screen} + UnionRect(LastsRect,sRect,sUnionRect); + LastcRect := LastsRect;{copy the sRects to cRects in ComboMap} + cRect := sRect; + cUnionRect := sUnionRect; + + {offset/slide all the cRects (combo) rects so cUnion is topleft} + LastcRect.right := LastcRect.right-cUnionRect.left; + LastcRect.left := LastcRect.left-cUnionRect.left; + LastcRect.bottom := LastcRect.bottom-cUnionRect.top; + LastcRect.top := LastcRect.top-cUnionRect.top; + cRect.right := cRect.right-cUnionRect.left; + cRect.left := cRect.left-cUnionRect.left; + cRect.bottom := cRect.bottom-cUnionRect.top; + cRect.top := cRect.top-cUnionRect.top; + cUnionRect.right := cUnionRect.right-cUnionRect.left; + cUnionRect.left := cUnionRect.left-cUnionRect.left; + cUnionRect.bottom := cUnionRect.bottom-cUnionRect.top; + cUnionRect.top := cUnionRect.top-cUnionRect.top; + + {copy current screen Union to ComboMap} + CopyBits(aWindow^.portBits,ComboMap,sUnionRect, + cUnionRect,srcCopy,NIL); + + {copy patch over last in combo.. will restore previous background} + CopyBits(PatchMap,ComboMap,PatchMap.bounds,LastcRect,srcCopy,NIL); + + CopyBits(ComboMap,PatchMap,cRect,PatchMap.bounds,srcCopy,NIL); + + {copy the piece into new location in Combo} + {move the tRgn to cRect to mask drawing into the Combo map} + OffSetRgn(tRgn,cRect.left - tRgn^^.rgnBBox.left, + cRect.top - tRgn^^.rgnBBox.top); + Copybits(PicMap,ComboMap,PicMap.bounds,cRect,srcCopy,tRgn); + + {copy Combo union to screen} + CopyBits(ComboMap,aWindow^.portBits,cUnionRect, + sUnionRect,srcCopy,NIL); + + LastsRect := sRect;{remember where the last piece is drawn} + Until (not(StillDown));{Until the mouse button is released,i-259} + + {________ optional to erase the piece or leave it, etc. _____} + {we'll restore the patch of background over the piece... erasing it} + CopyBits(PatchMap,aWindow^.portBits,PatchMap.bounds,sRect,srcCopy,nil); + {____________________} + + theMouse := LastMouseLoc;{return last mouse location to caller} + DisposPtr(PatchMap.baseAddr);{dispose of temp stuff in heap} + DisposPtr(ComboMap.baseAddr); + DisposPtr(PicMap.baseAddr); + DisposeRgn(tRgn); +End;{DragPiece procedure} + +PROCEDURE InitThings; +Begin + InitGraf(@thePort); {create a grafport for the screen} + + MoreMasters; {extra pointer blocks at the bottom of the heap} + MoreMasters; {this is 5 X 64 master pointers} + MoreMasters; + MoreMasters; + MoreMasters; + + {get the cursors we use and lock them down - no clutter} + ClockCursor := GetCursor(watchCursor); + HLock(Handle(ClockCursor)); + + {show the watch while we wait for inits & setups to finish} + SetCursor(ClockCursor^^); + + {init everything in case the app is the Startup App} + InitFonts; {startup the fonts manager} + InitWindows; {startup the window manager} + InitMenus; {startup the menu manager} + TEInit; {startup the text edit manager} + InitDialogs(Nil); {startup the dialog manager} + + Finished := False; {set program terminator to false} + FlushEvents(everyEvent,0); {clear events from previous program} + { set up screen size stuff } + Screen := ScreenBits.Bounds; { Get screen dimensions from thePort } + with Screen do Begin + SetRect(DragArea,Left+4,Top+24,Right-4,Bottom-4); + SetRect(GrowArea,Left,Top+24,Right,Bottom); + End; +End; + +procedure CreateWindow; +Begin + SetRect(tRect,2,40,508,40 + 290); + myWindow := NewWindow(Nil,tRect,'DragPiece Demo',True,4,Nil,True,0); + SetPort(myWindow); + ClipRect(myWindow^.portRect); +End; + +procedure DoMenuCommand(mResult:LongInt); +var + name: Str255; + tPort: GrafPtr; +Begin + theMenu := HiWord(mResult); + theItem := LoWord(mResult); + Case theMenu of + appleMenu: + Begin + GetItem(myMenus[1],theItem,name); + refNum := OpenDeskAcc(name); + End; + fileMenu: Finished := True; + End; + HiliteMenu(0); +End; + +procedure TakeCareMouseDown(myEvent:EventRecord); +var + Location: integer; + WhichWindow: WindowPtr; + MouseLoc: Point; + WindowLoc: integer; +Begin + MouseLoc := myEvent.Where; {Global coordinates} + WindowLoc := FindWindow(MouseLoc,WhichWindow); {I-287} + case WindowLoc of + inMenuBar: + DoMenuCommand(MenuSelect(MouseLoc)); + inSysWindow: + SystemClick(myEvent,WhichWindow); {I-441} + inContent: + If WhichWindow <> FrontWindow then + SelectWindow (WhichWindow) + else Begin + GlobalToLocal(MouseLoc); + SetRect(tRect,MouseLoc.h-20,MouseLoc.v-26, + MouseLoc.h+20,MouseLoc.v+26); + DragRgn := NewRgn; + OpenRgn; + FrameOval(tRect); + CloseRgn(DragRgn); + + tRect := WhichWindow^.portRect; + DragPiece(WhichWindow,MouseLoc,tRect,DragRgn); + end; + inGoAway: + Finished := True; + end; {case of} +end; { TakeCareMouseDown } + +procedure TakeCareActivates(myEvent:EventRecord); +var + WhichWindow: WindowPtr; +Begin + WhichWindow := WindowPtr(myEvent.message); + SetPort(WhichWindow); +End; + +procedure TakeCareUpdates(Event:EventRecord); +var + UpDateWindow,TempPort: WindowPtr; +Begin + UpDateWindow := WindowPtr(Event.message); + GetPort(TempPort); + SetPort(UpDateWindow); + BeginUpDate(UpDateWindow); + EraseRect(UpDateWindow^.portRect);{ or UpdateWindow^.VisRgn^^.rgnBBox } + DrawWindowContents(UpDateWindow); + EndUpDate(UpDateWindow); + SetPort(TempPort); +End; + +procedure MainEventLoop; +var + myEvent: EventRecord; + EventAvail: Boolean; +Begin + InitCursor; + Repeat + SystemTask; + EventAvail := GetNextEvent(EveryEvent,myEvent); + If EventAvail then + Case myEvent.What of + mouseDown: TakeCareMouseDown(myEvent); + KeyDown: Finished:= True; + ActivateEvt:TakeCareActivates(myEvent); + UpDateEvt: TakeCareUpdates(myEvent); + End; + Until Finished; +End; + +procedure SetUpMenus; +var + i: integer; +Begin + myMenus[1] := GetMenu(appleMenu); {get menu info from resources} + myMenus[2] := GetMenu(fileMenu); + For i := 1 to lastMenu do InsertMenu(myMenus[i],0); + DrawMenuBar; +End; + +{Main Program begins here} +BEGIN + InitThings; + MaxApplZone; + SetUpMenus; + CreateWindow; + + {set destination for bottom right of our logo picture} + SetPt(LogoLoc,myWindow^.portRect.right-20,myWindow^.portRect.bottom-20); + + MainEventLoop;{until finished = true} +END. diff --git a/Duane Blehm's Code/Drag Piece Æ’/aDragPiece.rsrc b/Duane Blehm's Code/Drag Piece Æ’/aDragPiece.rsrc new file mode 100755 index 0000000..e69de29 diff --git a/Duane Blehm's Code/More Info*/Programming the Mac.4.6 b/Duane Blehm's Code/More Info*/Programming the Mac.4.6 new file mode 100755 index 0000000000000000000000000000000000000000..3fb3fefb5ecc8b1a960d79a39357bd134a68e895 GIT binary patch literal 30798 zcmdtLeOOfIxi9>zHN(vCxt20DV2Lx6EzTH77>KB(wlFB7iG~S-(RiXDkU&u6%Yng= z%s@1HlI$?#qq=)`3*?QOa`vfmc4KmN_u68rwpYyAVy~)g&rZa|Cf%OA(Jp4zvaON# zcRyw=izGVofnb5YJNhEhT-g9!p!WP($QJy8Sy zPyX=Q@d}T;$n1=j{hnE-6t)0=znD^lpH0ypmcr1-J4=sH>GGlfuyluz%kcMh2Ya5e z)-+2AW6ev%-+#01M8=G4O!yG}ND?OaSCWKAQwVAOj{`po;t6JAdT;J1D}2oJ*9kvo z!Vepnxab&9|GQ+p4EWue^N!-5_V+kXt+>Y_{OM}G{1@{Wb+#TO^?YiXI<96{Z|~1FmG%tx=O*M>)5_FcEzRorHOkoBbN8Eyk}5-6lB@k| z62{SLxq7~!)?a)-i?&J4E!*Y76nr?;Qd{k}=g2$G`B$IoP8iP#n7>=4UUd4D329xh z6QArbYE@0r!*wt8=Sp2Rr$_Sl`eYd#5lvJk%{Vff)2XBlsUed^n#>8k_^3#I$inVQp92-3<`ovMm^X0I# zHWEIPFZuTsH%PUW$0CdNjn#!C8NKS|+N0g^<}g)`GukG3i%IILq7PB;c4w+>3FD}6 z4&9d*wuK{?PHozf=L}IB7fN#E$i;K0_)B$kdXne&Cb;=~)X>}MYUiKSIzu(;!a3S- zN_F#Ro^W=8Ru${;Og9I=lU&_p>$IZZ&JM>T9><{5awSvhYBVJUo7*w}xuy`>$&tI~ zC5$WG3(^M)l-8ZsdTRa4#p8C5X7lgLG)a}3 ir3e>Ky=$2~bs~PEexu&o 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 literal 0 HcmV?d00001 diff --git a/Duane Blehm's Code/Regions Æ’/Regions b/Duane Blehm's Code/Regions Æ’/Regions new file mode 100755 index 0000000..e69de29 diff --git a/Duane Blehm's Code/Regions Æ’/Regions.pas b/Duane Blehm's Code/Regions Æ’/Regions.pas new file mode 100755 index 0000000..5c66c82 --- /dev/null +++ b/Duane Blehm's Code/Regions Æ’/Regions.pas @@ -0,0 +1,776 @@ +Program aRegions;{Sun Aug 23, 1987 09:19:36} +{version 0.87,copyright ©,1987...Duane Blehm,HomeTown Software} + +USES MacIntf; + +{$T APPL RDBN set the TYPE and CREATOR} +{$B+ set the application's bundle bit } +{$L aRegions.rsrc}{link resource file stuff} + +CONST + lastMenu = 4; {Number of Menus} + appleMenu = 1; + fileMenu = 256; + editMenu = 257; + optionsMenu = 258; + +TYPE + {type the dialogs so we can access by name and add to list} + DialogList = (Save,Help,SizeTheRgn,About,HowTo,Source); + +VAR + tRgn: RgnHandle; {temporary region,used to Invert DemoRgn} + tStr: Str255; + myPattern: Pattern; {will hold the background pattern} + DemoRgn: RgnHandle; {region to be used in demo animation} + DemoUnderWay: Boolean; {flag if demo is underway} + i: integer; + Demo,InvertDemo: ControlHandle; {Rgn Demo and Invert It! buttons} + OffScreen: BitMap; {contains our offscreen MacPic image} + MacPic: PicHandle; {for loading PICT resource} + WorkRefNum: integer; {work resource file RefNum} + alertResult: integer; {result of putting up Alert dialogs} + DisplayStatus: integer; {what's on display,0 = nothing,1 = pic,2 = rgn} + DialNdx: DialogList; {will step through our dialogs array} + myDialog: Array[Save..Source] of DialogPtr;{our 'dialogList'} + myDialogRec: Array[Save..Source] of DialogRecord; + + WorkRect: Rect; {'work'ing/drawing area of myWindow,left side} + CreateRgn,SaveRgn: ControlHandle; {Create Rgn,Save Rgn buttons} + myPic: PicHandle; {Handle to Pic pasted in from Clipboard} + PicRect: Rect; {Rect for offsetting/Drawing myPic} + DemoBox: Rect; {Bounds for movement of demo animation} + myRgn: RgnHandle; {Region created by alogrithm} + RgnFrame, {Rect limits for FindRegion call...} + tRect: Rect; + length,offSet, + theErr: Longint; + + myMenus: Array[1..lastMenu] of MenuHandle; + refNum,theMenu, + theItem: integer;{menustuff} + Finished: Boolean;{used to terminate the program} + ClockCursor: CursHandle; {handle to watch cursor} + myWindow: WindowPtr; + wRecord: WindowRecord; + Screen,DragArea, + GrowArea: Rect; + +{----------------------------------------------} +procedure AnimateDemo; +{animate the mac image clipped to DemoRgn} +var + tPoint:Point; + dh,dv:integer; +Begin + GetMouse(tPoint);{get current mouse coordinates} + + {limit mac image (PicRect) to DemoBox extremes..} + {to keep PicRect from wondering off our visual area} + + If not(PtInRect(tPoint,DemoBox)) then begin {force tPoint into DemoBox} + If tPoint.h > DemoBox.right then tPoint.h := DemoBox.right + else if tPoint.h < DemoBox.left then tPoint.h := DemoBox.left; + If tPoint.v > DemoBox.bottom then tPoint.v := DemoBox.bottom + else if tPoint.v < DemoBox.top then tPoint.v := DemoBox.top; + end; + + {determine horizontal offset if needed} + If tPoint.h > PicRect.left + 2 then begin + PicRect.left := PicRect.left + 3;{offsetRect to right} + PicRect.right := PicRect.right + 3; + end + else if tPoint.h < PicRect.left - 2 then begin + PicRect.left := PicRect.left - 3;{offsetRect to left} + PicRect.right := PicRect.right - 3; + end; + {vertical offset?} + If tPoint.v > PicRect.top + 1 then begin + PicRect.top := PicRect.top + 2; {only move 2 because of pattern} + PicRect.bottom := PicRect.bottom + 2; + end + else if tPoint.v < PicRect.top - 1 then begin + PicRect.top := PicRect.top - 2; {only move 2 because of pattern} + PicRect.bottom := PicRect.bottom - 2; + end; + + {ok... now draw it using the DemoRgn as a mask} + CopyBits(OffScreen,myWindow^.portBits,OffScreen.bounds, + PicRect,srcCopy,DemoRgn); +end; + +procedure CreateOffScreenBitMap; {see CopyBits stuff,also tech.note 41} +var + tRect: Rect; + OffRowBytes,SizeOfOff:integer; + OldBits:Bitmap; +Begin + MacPic := GetPicture(128);{load the Mac picture from resource file} + tRect := MacPic^^.picframe;{size tRect for creating offscreen} + + {calculate size/dimensions of OffScreen stuff} + with tRect do begin + OffRowBytes := (((right - left -1) div 16) +1) * 2;{has to be even!} + SizeOfOff := (bottom - top) * OffRowBytes; + OffSetRect(tRect,-left,-top);{move rect to 0,0 topleft} + end; { of with } + + OffScreen.baseAddr := QDPtr(NewPtr(SizeOfOff));{Create BitImage with Ptr} + OffScreen.rowbytes := OffRowBytes;{bytes / row in BitImage} + OffScreen.bounds := tRect; + + {draw the Mac Picture into OffScreen} + OldBits := myWindow^.portBits; {preserve old BitMap} + SetPortBits(OffScreen); { our new BitMap } + FillRect(OffScreen.bounds,white); {erase our new BitMap to white} + DrawPicture(MacPic,OffScreen.bounds); {draw all the pictures} + ReleaseResource(handle(MacPic)); {done so dump picture from memory} + + SetPortBits(OldBits); {restore old bitmap} +end; + +procedure InitialDemo;{set up stuff for Demo Regions animation} +var + dh,dv,myErr:integer; +begin + myErr := noErr;{myErr will flag a resource loading error} + If DisplayStatus = 2 then begin {use the current rgn in the demo} + DemoRgn := NewRgn;{Create a fresh DemoRgn, disposed of the last} + CopyRgn(myRgn,DemoRgn);{Copy of current myRgn into DemoRgn} + end + else begin {no current myRgn so we'll load our own in from resources} + DemoRgn := RgnHandle(GetResource('RGN ',20843)); + myErr := ResError;{check for loading error} + DetachResource(Handle(DemoRgn));{take control from resource Manager} + end; + If myErr = noErr then begin {continue if no errors where encountered} + DemoUnderWay := True;{flag Demo animation in MainEventLoop} + {disable menus, other controls} + HiliteControl(CreateRgn,255);{disable} + HiliteControl(SaveRgn,255);{disable} + ShowControl(InvertDemo); + DisableItem(myMenus[4],2);{size the Rgn} + For i := 1 to LastMenu do DisableItem(myMenus[i],0);{disable menus} + DrawMenuBar; + SetCTitle(Demo,'End Demo');{so user can end the demo} + EraseRect(WorkRect);{erase the work area of window} + {find offsets to relocate DemoRgn in center of work area} + with DemoRgn^^.rgnBBox do begin + dh := ((WorkRect.right-(right-left)) div 2) - left; + dv := ((WorkRect.bottom-(bottom-top)) div 2) - top; + end; + OffSetRgn(DemoRgn,dh,dv);{center the rgnBBox} + FillRgn(DemoRgn,myPattern);{pattern of horizontal lines} + FrameRgn(DemoRgn);{outline the Rgn} + InsetRgn(DemoRgn,1,1);{so the animation won't erase Frame lines} + DemoBox := DemoRgn^^.rgnBBox;{DemoBox will limit movement of PicRect} + InsetRect(DemoBox,-120,-80);{expand beyond the Rgn a little} + PicRect := OffScreen.bounds;{Size PicRect for CopyBits} + + {we'll use Mouse location and PicRect.topleft to offset PicRect + so subtract width and height of PicRect from DemoBox limits} + DemoBox.right := DemoBox.right - (PicRect.right - PicRect.left); + DemoBox.bottom := DemoBox.bottom - (PicRect.bottom - PicRect.top); + + If not(odd(DemoBox.top)) then inc(DemoBox.top);{force odd for pattern} + + {start the PicRect in upper left of DemoBox} + OffSetRect(PicRect,DemoBox.left-PicRect.left,DemoBox.top-PicRect.top); + end + else begin + alertResult := NoteAlert(134,nil);{sorry, bad resource} + ResetAlrtStage; + end; +end; + +procedure DisplayDialog(WhichDialog:DialogList); +var + tRect,fRect: Rect; + itemHit,i,j,tIDNum,RepeatID,count: integer; + tPort: GrafPtr; + tHandle,nameHand,tbuf:Handle; + tStr,nameStr:Str255; + aLong:Longint; + tFlag:boolean; + theType:ResType; +Begin + GetPort(tPort);{save the current port} + ShowWindow(myDialog[WhichDialog]); + SelectWindow(myDialog[WhichDialog]); + SetPort(myDialog[WhichDialog]); {we may draw into our dialog window} + + Case WhichDialog of + + HowTo:begin {text for how to use a 'RGN ' resource} + TextFont(geneva); + Textsize(10); + tbuf := GetResource('TBUF',128);{text created with our TransText utility} + HLock(tbuf);{lock it we'll be using ptr's} + TextBox(tbuf^,GetHandleSize(tBuf),myDialog[HowTo]^.portRect,teJustLeft); + HUnLock(tBuf);{done} + ModalDialog(Nil,itemHit); + end; + + Source:begin {text for Source code offer} + TextFont(geneva); + Textsize(10); + tbuf := GetResource('TBUF',129); + HLock(tbuf); + TextBox(tbuf^,GetHandleSize(tBuf),myDialog[Source]^.portRect,teJustLeft); + HUnLock(tBuf);{done} + ModalDialog(Nil,itemHit); + end; + + About:ModalDialog(nil,itemHit); {put up our about Regions dialog} + + SizeTheRgn:{user input data for doing an InsetRgn call} + Repeat + SelIText(myDialog[SizetheRgn],5,0,32767);{select horiz.size text} + ModalDialog(nil,itemHit); + If itemHit = 1 then Begin {size the rgn} + GetDItem(myDialog[SizetheRgn],5,i,tHandle,tRect);{Handle textitem} + GetIText(tHandle,tStr);{get the horiz. size text} + StringToNum(tStr,aLong);{convert to Number,error check?} + i := aLong;{horiz.size} + GetDItem(myDialog[SizetheRgn],6,j,tHandle,tRect);{vertical size} + GetIText(tHandle,tStr); + StringToNum(tStr,aLong); + j := aLong; + InsetRgn(myRgn,i,j); + DisplayStatus := 2;{so InvalRect 'update' will draw the region} + end; + Until((itemHit = 1) or (itemhit = 7));{size or cancel} + + Help:ModalDialog(nil,itemHit);{help dialog box} + + Save: Begin {save myRgn into our work resource file} + nameStr := 'myRegion';{set default Res. name} + Repeat + {get a 'unique' resID number > 128} + Repeat + tIDNum := UniqueID('RGN '); + Until(tIDNum > 127); + {install resID in item 4, name in item 3} + NumToString(tIDNum,tStr); + GetDItem(myDialog[Save],4,i,tHandle,tRect); + SetIText(tHandle,tStr);{set res Id to unique ID} + SelIText(myDialog[Save],4,0,32767);{select the res Id text} + GetDItem(myDialog[Save],3,i,nameHand,tRect); + SetIText(nameHand,NameStr); + ModalDialog(Nil,itemHit); {close it no matter what was hit} + Case itemHit of + 1:{add it} begin + {get,check name and id, watch out for duplicates} + GetIText(nameHand,nameStr);{nameString} + GetIText(tHandle,tStr); + StringtoNum(tStr,aLong); + tIdNum := aLong; + + {check for resource using tIDNum as ID#} + count := CountResources('RGN ');{how many rgns} + tFlag := True;{initial flag for duplicate Id numbers} + If Count > 0 then {if there any RGN'S} + For i := 1 to count do begin {step thru 'RGN ' resources} + tHandle := GetIndResource('RGN ',i); + GetResInfo(tHandle,j,theType,tStr); + If j = tIdNum then tFlag := false;{id already exists!} + end; + + If tFlag then begin {unique id, so save it} + UseResFile(WorkRefNum); + AddResource(Handle(myRgn),'RGN ',tIdNum,nameStr); + UpdateResFile(WorkRefNum); + end + Else begin {id alreay used, alert user, Replace it?} + alertResult := CautionAlert(128,nil); + ResetAlrtStage; + If alertResult = 1 then begin {replace old with new} + {tIDNum is the repeated ID no.!} + tHandle := GetResource('RGN ',tIdNum);{handle to old} + RmveResource(tHandle);{remove the old} + UseResFile(WorkRefNum);{our Work file} + AddResource(Handle(myRgn),'RGN ',tIdNum,nameStr); + UpDateResFile(WorkRefNum);{force write of new} + end + else itemHit := 0;{Cancel,reset itemhit so won't exit Save:} + end;{else} + end;{1:} + + end;{case itemhit} + Until((itemHit = 1) or (itemHit = 2)); + end;{Save:} + end;{Case WhichDialog} + + HideWindow(myDialog[WhichDialog]); {put away dialog window} + SelectWindow(myWindow);{restore our game window} + SetPort(tPort);{restore port} + InvalRect(WorkRect);{force redraw of 'whole' work area.. new Rgn?} +end; + +procedure FindRegion(tRect:Rect;var theRgn:RgnHandle); +{be sure that tRect is in visible window on screen before executing this +procedure to avoid system crash} +var + x,y:integer; + ExitNoBlack: Boolean; + Vector,LineVector,ExitStatus:integer; + Original:Point; + SizeCount:integer; +Begin + SetEmptyRgn(theRgn);{in case we have to abort, will return empty} + {scanning by 'pixels' with GetPixel() ... 'pixel' is right and left + of the 'Coordinate' so move inside 1 coordinate} + dec(tRect.right); + dec(tRect.bottom); + x := tRect.left;{we'll begin in topleft, looking for topleftmost black pixel} + y := tRect.top; + {find upper left black pixel} + ExitNoBlack := false; + While ((not GetPixel(x,y)) and (not ExitNoBlack)) do + Begin + If x < tRect.right then inc(x) {move right on line} + else begin {move down to next line} + x := tRect.left;{reset x to left side of line} + If y < tRect.bottom then inc(y) + else ExitNoBlack := true; {exit!,didn't find any black pixels} + end;{else} + end;{while} + + If not(ExitNoBlack) then begin {have a Black pixel..x,y so start region} + OpenRgn; + SetPt(Original,x,y); {keep track of starting point} + MoveTo(x,y); + + LineVector := 1;{track direction of line, won't LineTo() until it changes} + Vector := 1; {first vector is down (1)} + inc(y);{move coordinates to next} + ExitStatus := 0;{1 = 'Original' found, rgn complete, 2 = rgn too large} + SizeCount := 0;{count LineTo's for size of region,avoid overflow} + + {from Original begin 'counterclockwise' circuit around Black pixel border} + Repeat + Case Vector of {case 'last vector move' of.. get next vector} + 1: Begin {last vector move was down} + {if pixel left and below is black then move left} + If GetPixel(x-1,y) then Vector := 4 + + {if not, then check pixel right and below... move down} + else If GetPixel(x,y) then Vector := 1 + {if not, then must be pixel right and above... move right} + else Vector := 2; + end; + 2: Begin {last was right} + If GetPixel(x,y) then Vector := 1 + else If GetPixel(x,y-1) then Vector := 2 + else Vector := 3; + end; + 3: Begin {last was move up} + If GetPixel(x,y-1) then Vector := 2 + else If GetPixel(x-1,y-1) then Vector := 3 + else Vector := 4; + end; + 4: Begin {last was move left} + If GetPixel(x-1,y-1) then Vector := 3 + else If GetPixel(x-1,y) then Vector := 4 + else Vector := 1; + end;{of case 4:} + End; {of case vector} + + If Vector <> LineVector then begin{new direction,end of current 'line'} + SystemTask;{keep system happy?} + LineTo(x,y);{include line into region} + + {sizeCount limits number of LineTo()'s, to avoid Stack crashes} + If SizeCount < 4000 then inc(SizeCount) {we'll get another line} + else begin {too much!, getting too big!.. abort the region} + ExitStatus := 2;{force exit of loop} + LineTo(Original.h,Original.v);{we'll show the Region} + end; + + LineVector := Vector;{start a new line} + end; + + Case Vector of {we checked for new 'line',etc. so move coordinates} + 1:inc(y);{vector moves down} + 2:inc(x);{vector moves right} + 3:dec(y);{moves up} + 4:dec(x);{moves left} + end;{case vector} + + If x = Original.h then {is the new Coordinate our 'Original'} + If y = Original.v then begin + ExitStatus := 1;{finished if it is!,will force exit} + LineTo(x,y);{last line} + end; + + Until (ExitStatus <> 0);{until we get back to start or too large} + + CloseRgn(theRgn);{we're done so close the rgn} + InitCursor;{in case of alerts} + If ExitStatus = 2 then begin {display the abort rgn alert} + alertResult := NoteAlert(136,nil);{rgn aborted too big} + ResetAlrtStage; + end; + end {if not(Done)} + else begin {display no black pix alert} + InitCursor;{show arrow cursor for alert} + alertResult := NoteAlert(135,nil);{no black pixels} + ResetAlrtStage; + end; +End; + +procedure DrawWindowContents(WhichWindow:WindowPtr); +{Remember to SetPort first, response to update event} +var + trect:Rect; + i:integer; + tRgn:RgnHandle; + tStr:Str255; +Begin + ClipRect(WorkRect);{limit drawing to WorkRect} + Case DisplayStatus of + 1:Begin {picture on display} + DrawPicture(myPic,PicRect);{draw clipboard picture} + end; + 2:Begin {region on display} + OffSetRgn(myRgn,5-myRgn^^.rgnBBox.left,5-myRgn^^.rgnBBox.top); + FillRgn(myRgn,ltGray); + FrameRgn(myRgn);{will appear same coords as pict} + end; + end;{case displayStatus} + ClipRect(myWindow^.portRect);{set clip to window borders.. controls} + MoveTo(WorkRect.right,WorkRect.top);{draw right work border line} + LineTo(WorkRect.right,WorkRect.bottom); + DrawControls(WhichWindow); +End; + +PROCEDURE InitThings; +Begin + InitGraf(@thePort); {create a grafport for the screen} + + MoreMasters; {extra pointer blocks at the bottom of the heap} + MoreMasters; {this is 5 X 64 master pointers} + MoreMasters; + MoreMasters; + MoreMasters; + + {get the cursors we use and lock them down - no clutter} + ClockCursor := GetCursor(watchCursor); + HLock(Handle(ClockCursor)); + + {show the watch while we wait for inits & setups to finish} + SetCursor(ClockCursor^^); + + {init everything in case the app is the Startup App} + InitFonts; {startup the fonts manager} + InitWindows; {startup the window manager} + InitMenus; {startup the menu manager} + TEInit; {startup the text edit manager} + InitDialogs(Nil); {startup the dialog manager} + + Finished := False; {set program terminator to false} + FlushEvents(everyEvent,0); {clear events from previous program} + { set up screen size stuff } + Screen := ScreenBits.Bounds; { Get screen dimensions from thePort } + with Screen do { Screen.Left, etc. } + Begin + SetRect(DragArea,Left+4,Top+24,Right-4,Bottom-4); + SetRect(GrowArea,Left,Top+24,Right,Bottom); + End; +End; + +procedure CreateWindow; +var + tRect: Rect; +Begin + SetRect(tRect,2,24,508,338);{size the window} + + myWindow := NewWindow(@wRecord,tRect,'',True,2,Nil,True,0); + + SetRect(tRect,0,0,520,340);{size of clip rgn} + For DialNdx := Save to Source do begin {read all the dialogs into array} + myDialog[DialNdx] := + GetNewDialog(ord(DialNdx)+128,@myDialogRec[DialNdx],myWindow); + SetPort(myDialog[DialNdx]); + ClipRect(tRect);{set clip to smaller size..} + end; + + SetPort(myWindow); + ClipRect(tRect); + + SetRect(tRect,416,35,502,59);{size/location of 1st control button} + CreateRgn := NewControl(myWindow,tRect,'Create Rgn',True,0,0,0,0,0); + OffSetRect(tRect,0,36); + SaveRgn := NewControl(myWindow,tRect,'Save Rgn',True,0,0,0,0,0); + OffSetRect(tRect,0,36); + Demo := NewControl(myWindow,tRect,'Rgn Demo',True,0,0,0,0,0); + OffSetRect(tRect,0,36); + InvertDemo := NewControl(myWindow,tRect,'Invert It!',False,0,0,0,0,0); +End; + +procedure DoMenuCommand(mResult:LongInt); +var + name: Str255; + tPort: GrafPtr; +Begin + theMenu := HiWord(mResult); + theItem := LoWord(mResult); + Case theMenu of + appleMenu: Begin + If theItem = 1 then DisplayDialog(About) + Else begin + GetPort(tPort); + GetItem(myMenus[1],theItem,name);{must be a desk acc.} + refNum := OpenDeskAcc(name); + SetPort(tPort); + end; + End; + fileMenu: Finished := True; + editMenu: + {if systemEdit returns false then process click at our end} + If not(SystemEdit(theItem - 1)) then + Case theItem of + 5:begin {paste} + {call GetScrap and draw picture into window} + length := GetScrap(Handle(myPic),'PICT',offset); + If length < 0 then begin {no PICT type scrap available!} + alertResult := NoteAlert(129,nil);{sorry no picture} + ResetAlrtStage; + end + else begin {we've got a picture waiting, 'paste' it} + PicRect := myPic^^.picframe; + OffSetRect(PicRect,5 - PicRect.left,5 - PicRect.top); + {check to see it picture is too large for work area} + If (PicRect.right > (WorkRect.right-6)) or + (PicRect.bottom > (WorkRect.bottom-6)) then Begin + {alert user... pic too large!} + alertResult := NoteAlert(130,nil); + ResetAlrtStage; + DisplayStatus := 0;{display nothing} + InvalRect(WorkRect);{force update redraw of work} + end + else begin {draw the scrap picture!} + EraseRect(WorkRect); + ClipRect(WorkRect); + DrawPicture(myPic,PicRect); + ClipRect(myWindow^.portRect); + RgnFrame := PicRect; + {enlarge by one pixel,to ensure white pixel border!} + InsetRect(RgnFrame,-1,-1); + DisplayStatus := 1;{flag picture on display} + HiliteControl(CreateRgn,0);{enable create a rgn} + HiliteControl(SaveRgn,255);{disable} + DisableItem(myMenus[4],2);{size} + end;{else} + end;{else} + end;{5:} + 6:begin {clear to original start up status} + DisplayStatus := 0; + InvalRect(myWindow^.portRect); + HiliteControl(CreateRgn,255); + HiliteControl(SaveRgn,255);{disable} + DisableItem(myMenus[4],2);{size} + end;{6:} + end;{case theitem} + + optionsMenu: + Case theItem of + 1:DisplayDialog(Help); + 2:DisplayDialog(SizeTheRgn); + 3:DisplayDialog(HowTo); + 4:DisplayDialog(Source); + end;{case theItem} + End; + HiliteMenu(0);{take hilite off menubar} +End; + +procedure TakeCareControls(whichControl:ControlHandle;localMouse:point); +var + ControlHit,i: integer; + refnum:integer; +Begin + ControlHit := TrackControl(whichControl,localMouse,nil); { Find out which} + If ControlHit > 0 then {i-417} + Begin + If whichControl = CreateRgn then Begin + {handle a hit in the Create region button} + SetCursor(ClockCursor^^);{while we work on the region} + myRgn := NewRgn; + FindRegion(RgnFrame,myRgn); + DisplayStatus := 2; + InvalRect(workRect); + HiliteControl(CreateRgn,255);{disable} + HiliteControl(SaveRgn,0); + EnableItem(myMenus[4],2);{size rgn} + End; + If whichControl = SaveRgn then Begin + DisplayDialog(Save);{will handle all the save stuff} + end; + If whichControl = Demo then begin {could be begin or end of demo!} + If DemoUnderWay then begin {then end it} + DemoUnderWay := False;{stop the animation} + {enable menus, other controls} + SetCTitle(Demo,'Rgn Demo'); + HideControl(InvertDemo); + InvalRect(WorkRect); + For i := 1 to LastMenu do EnableItem(myMenus[i],0); + DrawMenuBar; + DisposHandle(Handle(DemoRgn));{dump DemoRgn from memory} + If DisplayStatus = 2 then begin {still have a valid myRgn} + HiliteControl(SaveRgn,0); + EnableItem(myMenus[4],2);{size rgn} + end + else DisplayStatus := 0;{won't preserve picture?} + end {if demoUnderway begin} + else InitialDemo; {start the demo} + end;{if whichcontrol} + If whichControl = InvertDemo then Begin {invert the region} + FillRgn(DemoRgn,white);{fill with white, will erase pattern,etc.} + FrameRgn(DemoRgn);{frame is just 'inside' the rgn} + RectRgn(tRgn,WorkRect);{tRgn of WorkRect} + DiffRgn(tRgn,DemoRgn,DemoRgn);{DemoRgn out of tRgn,new in DemoRgn} + FillRgn(DemoRgn,myPattern);{Fill new DemoRgn with horz.lines} + HideControl(InvertDemo);{we can't invert it again.. so hide button} + end; + End; {of If ControlHit} +End; { of procedure} + +procedure TakeCareMouseDown(myEvent:EventRecord); +var + Location: integer; + WhichWindow: WindowPtr; + MouseLoc: Point; + WindowLoc: integer; + ControlHit: integer; + WhichControl:ControlHandle; +Begin + MouseLoc := myEvent.Where; {Global coordinates} + WindowLoc := FindWindow(MouseLoc,WhichWindow); {I-287} + case WindowLoc of + inMenuBar: + DoMenuCommand(MenuSelect(MouseLoc)); + inSysWindow: + SystemClick(myEvent,WhichWindow); {I-441,scrapbook,etc.} + inContent: + If WhichWindow <> FrontWindow then + SelectWindow(WhichWindow) {bring window to front} + else Begin {check for hit in control buttons} + GlobaltoLocal(MouseLoc); + ControlHit := FindControl(MouseLoc,whichWindow,whichControl); + If ControlHit > 0 then TakeCareControls(whichControl,Mouseloc); + end; + end; {case of} +end; { TakeCareMouseDown } + +procedure TakeCareActivates(myEvent:EventRecord); +var + WhichWindow: WindowPtr; +Begin + WhichWindow := WindowPtr(myEvent.message); + If odd(myEvent.modifiers) then begin {becoming active} + SetPort(WhichWindow); + {disable undo,cut,copy} + DisableItem(myMenus[3],1); + DisableItem(myMenus[3],3); + DisableItem(myMenus[3],4); + end + else begin {deactivated must be desk accessory} + {enable all the Edit stuff} + For i := 1 to 6 do EnableItem(myMenus[3],i);{for DA's} + end; +End; + +procedure TakeCareUpdates(Event:EventRecord); +var + UpDateWindow,TempPort: WindowPtr; +Begin + UpDateWindow := WindowPtr(Event.message); + GetPort(TempPort); + SetPort(UpDateWindow); + BeginUpDate(UpDateWindow); + EraseRect(UpDateWindow^.portRect); + DrawWindowContents(UpDateWindow); + EndUpDate(UpDateWindow); + SetPort(TempPort); +End; + +procedure TakeCareKeyDown(Event:EventRecord); +Var + KeyCode,i: integer; + CharCode: char; +Begin + { KeyCode := LoWord(BitAnd(Event.message,keyCodeMask)) div 256; not used } + CharCode := chr(LoWord(BitAnd(Event.message,CharCodeMask))); + + If BitAnd(Event.modifiers,CmdKey) = CmdKey then begin + {key board command - probably a menu command} + DoMenuCommand(MenuKey(CharCode)); + end; +End; + +procedure MainEventLoop; +var + myEvent: EventRecord; + EventAvail: Boolean; +Begin + InitCursor; + Repeat + SystemTask; + If GetNextEvent(EveryEvent,myEvent) then + Case myEvent.What of + mouseDown: TakeCareMouseDown(myEvent); + KeyDown: TakeCareKeyDown(myEvent); + ActivateEvt: TakeCareActivates(myEvent); + UpDateEvt: TakeCareUpdates(myEvent); + End + else If DemoUnderWay then AnimateDemo;{animate one step of demo} + Until Finished; +End; + +procedure SetUpMenus; +var + i: integer; +Begin + myMenus[1] := GetMenu(appleMenu); {get menu info from resources} + AddResMenu(myMenus[1],'DRVR'); {add in all the DA's} + myMenus[2] := GetMenu(fileMenu); + myMenus[3] := GetMenu(editMenu); + myMenus[4] := GetMenu(optionsMenu); + DisableItem(myMenus[4],2);{size region} + For i := 1 to lastMenu do + begin + InsertMenu(myMenus[i],0); + end; + DrawMenuBar; +End; + +procedure CloseStuff; +Begin + {always kill sound i/o before quit} + CloseResFile(WorkRefNum);{close work resource file} +End; + +{Main Program begins here} +BEGIN + InitThings; + MaxApplZone;{grow application zone to max... Scrapbook uses appl.heap} + theErr := ZeroScrap;{initialize the Scrap, erases any existing scrap, i-458} + SetUpMenus; + CreateWindow; + CreateOffScreenBitMap; + myPic := picHandle(NewHandle(0));{create valid handle for GetScrap call} + myRgn := NewRgn;{create the rgns} + tRgn := NewRgn; + WorkRect := myWindow^.portRect;{size the work area of window} + WorkRect.right := 410; + DisplayStatus := 0;{nothing is on display} + HiliteControl(CreateRgn,255);{disable} + HiliteControl(SaveRgn,255);{disable} + CreateResFile('RgnWork.rsrc');{no action if it already exists} + {will be created in same folder as Regions application?} + WorkRefNum := OpenResFile('RgnWork.rsrc');{open for action.. save} + DemoUnderWay := false;{no demo to start} + GetIndPattern(myPattern,sysPatListID,25);{horiz.line pattern in systemfile} + MainEventLoop; + CloseStuff; +END. diff --git a/Duane Blehm's Code/Regions Æ’/RgnWork.rsrc b/Duane Blehm's Code/Regions Æ’/RgnWork.rsrc new file mode 100755 index 0000000..e69de29 diff --git a/Duane Blehm's Code/Regions Æ’/aRegions.R b/Duane Blehm's Code/Regions Æ’/aRegions.R new file mode 100755 index 0000000..0620cd9 --- /dev/null +++ b/Duane Blehm's Code/Regions Æ’/aRegions.R @@ -0,0 +1,35 @@ +* aRegions.R + +aRegions.rsrc + +TYPE RDBN = STR + ,0 +Regions ver0.87, Duane Blehm, 8/87 + +TYPE MENU + ,1 +\14 + About Regions.. + (- + + ,256 +File + Quit /Q + + ,257 +Edit + Undo /Z + (- + Cut /X + Copy /C + Paste /V + Clear + + ,258 +Options + Help + Size Region.. + Using Rgns.. + Source offer.. + +INCLUDE aRegions/Rsrc diff --git a/Duane Blehm's Code/Regions Æ’/aRegions:Rsrc b/Duane Blehm's Code/Regions Æ’/aRegions:Rsrc new file mode 100755 index 0000000..e69de29 diff --git a/Duane Blehm's Code/StuntCopter Æ’/About StuntCopter files.. b/Duane Blehm's Code/StuntCopter Æ’/About StuntCopter files.. new file mode 100755 index 0000000..7f2c97c --- /dev/null +++ b/Duane Blehm's Code/StuntCopter Æ’/About StuntCopter files.. @@ -0,0 +1 @@ +About the StuntCopter files: 'StuntCopter.shapes' is a 'FullPaint' document containing the shapes that are used for animation, score, etc... can be opened from MacPaint. 'StuntCopter.Pas' is an 'Edit' text file containing pascal source code to be compiled by the Pascal compiler. 'StuntCopter.R' is an 'Edit' text file containing RMaker source code to be compiled by RMaker. 'StuntCopter.Rsrc' is a resource document containing resources built with ResEdit, the resource editor. These resources are 'included' when StuntCopter.R is compiled by RMaker. 'StuntCopter' is our application... the result of Link. \ No newline at end of file diff --git a/Duane Blehm's Code/StuntCopter Æ’/Anim.R b/Duane Blehm's Code/StuntCopter Æ’/Anim.R new file mode 100755 index 0000000..abf2d0c --- /dev/null +++ b/Duane Blehm's Code/StuntCopter Æ’/Anim.R @@ -0,0 +1,16 @@ +* Anim.R + +Anim.rsrc + +TYPE MENU + ,1 +\14 + + ,256 +File + OffScreen.. + Quit + +* will include Pict resource file built with ResEdit and ScrapBook +INCLUDE Anim/rsrc + diff --git a/Duane Blehm's Code/StuntCopter Æ’/StuntCopter.R b/Duane Blehm's Code/StuntCopter Æ’/StuntCopter.R new file mode 100755 index 0000000..ddb3bba --- /dev/null +++ b/Duane Blehm's Code/StuntCopter Æ’/StuntCopter.R @@ -0,0 +1,33 @@ +* StuntCopter.R + +aSCopt.rsrc + +TYPE COPT = STR + ,0 +StuntCopter 1.5.. by Duane Blehm, 7/87 + +TYPE MENU + ,1 +\14 + About Stunt... + (- + + ,256 +File + Quit /Q + + ,257 +Options + ! Sound + Reset HiScore + Help.. + Set Speed.. + Source Code.. + OffScreen.. + + ,258 +(Backspace to Exit) + Hi! + +* the rest of the resources where built with ResEdit in StuntCopter.Rsrc +INCLUDE StuntCopter/Rsrc diff --git a/Duane Blehm's Code/StuntCopter Æ’/StuntCopter.pas b/Duane Blehm's Code/StuntCopter Æ’/StuntCopter.pas new file mode 100755 index 0000000..6bab39d --- /dev/null +++ b/Duane Blehm's Code/StuntCopter Æ’/StuntCopter.pas @@ -0,0 +1,1823 @@ +Program StuntCopter;{Copyright © 1986,1987 by Duane Blehm, All Rights Reserved} + +{ Version 1.5 ,drag-able window, speed selection dialog for faster Macs} + +{note: we increased the speed of StuntCopter 20% by NOT expanding window +beyond edge of screen... must have something to do with Clipping} +{Our window is using our custom WDEF..Window definition resource, it only +has ability to drag,draw and calcRegions..no close,etc. just poke +(16 * Resource ID) into window template ProcID} + +{Format note: 'tabs' for this text should be set to '3'} +{StuntCopter animation is based on the CopyBits procedure. The various shapes +are loaded from three PICT resources and drawn into an OffScreen bitmap. +See Apple Tech Note #41 - 'Drawing into an OffScreen Bitmap'. Access +to these shapes is thru various Rectangles that describe their +position in the OffScreen bitmap. The destination OnScreen for the shape is an +identically sized rectangle that has been positioned (OffSetRect procedure) +to receive the drawing. + +Note: to move a given rectangle 'myRect' from its present location +(Current) to another location (Destination) the following is used throughout +this program... + + OffsetRect(myRect,Destination.h - Current.h,Destination.v - Current.v); +or + OffsetRect(myRect,DestRect.left - myRect.left,DestRect.top - myRect.top); + +Copter control is based around the MapPt procedure... by 'Mapping' the mouse +coordinates into a Rectangle (DeltaRect) sized according to the extreme +Copter moves in any direction. Shapes must have white borders equal to +these extreme coordinates because the next shape erases the previous by drawing +over it.: + + -3 x x x x x x x x x + -2 x x x x x x x x x + -1 x x x x x x x x x + 0 x x x x x x x x x < 1 then FlipSound[i]^.sound2Rate := 78264 + else FlipSound[i]^.sound2Rate := 0; + If i > 2 then FlipSound[i]^.sound3Rate := 98607 + else FlipSound[i]^.sound3Rate := 0; + If i > 3 then FlipSound[i]^.sound4Rate := 117264 + else FlipSound[i]^.sound4Rate := 0; + end; { for i} +End; + +procedure CreateStrings; +var + i:integer; +begin {i-468, get all the strings from resource file} + For i := 1 to lastString do GetIndString(myStrings[i],StringId,i); +end; + +procedure DrawAString(theString:Str255;h,v:integer); +begin + moveto(h,v); + DrawString(theString); +end; + +procedure DrawAllmyStrings; +var + tRect:Rect; +begin + TextFace([bold,underline]); + DrawAString(myStrings[1],(504-StringWidth(myStrings[1]))div 2,60);{centered} + TextFace([]); + DrawAString(myStrings[2],(504-StringWidth(myStrings[2]))div 2,80); + {lets draw a cloud} + tRect := Cloud[3]; {this is a cloud rect, lets draw one of our clouds} + OffSetRect(tRect,256-tRect.left,30-tRect.top);{locate it on the screen} + {now draw it with 'srcOr' mode so we won't disturb our text} + CopyBits(OffScreen,myWindow^.portBits,OffCloud[3],tRect,srcOr,Nil); +end; + +procedure CreateSound; +{we're writing direct to the sound driver with PBWrite... this procedure sets +up all the various buffers, Parm blocks, and such for the three different +types of sounds used in this game, the copter engine is a freeform sound, +the fanfare played for a good jump is 4 fourtone sounds, and the splat is +a freeform sound. You can determine if a sound is finished by checking +the ioresult field of the Parmblock, if it is less than 1 then the sound +is done. In the mainloop we check it and start another sound if the last +one is done.... sometimes the Driver has changed ioresult but is not done +with the ParmBlock so writing another sound can be messed up.. buzzing, +this can be avoided by waiting for Tickcount to increment once,or by doing +a PBKillIO. We use the PBKill when we want to switch sounds before they +are complete... this avoids the problem of our program trying to write to +the Driver buffers at the same time the driver is trying to access them. +To avoid system errors always be sure to Kill sound I/O before exiting the +program!!.. and remember freeform sound slows the program by about 20%} + +Var + i,j: integer; +Begin + CoptBuff := 7406; { Create the Copter sound stuff,6 bytes for mode & count} + myHandle := NewHandle(CoptBuff); + HLock(myHandle); + myPtr := myHandle^; + CoptSound := FFSynthPtr(myPtr); + CoptSound^.mode := ffMode; {freeform mode} + CoptSound^.count := FixRatio(1,6); {fixed point notation} + CoptBuff := CoptBuff - 7; {this is size of WaveForm array'0-7399'} + For j := 0 to CoptBuff do CoptSound^.WaveBytes[j] := 127; {set all to 127} + j := 0; + While j<= CoptBuff do Begin + i := abs(Random) div 512; {random number 0 to 64} + CoptSound^.WaveBytes[j] := i; {fill up the buffer with copter sound} + if (j mod 370 = 100) then + begin + j:= j+200; + CoptSound^.WaveBytes[j] := 255; + j:= j+ 70; + end + else inc(j); + end; { of while} + + SplatBuff := 1486; { Create the Splat sound stuff } + myHandle := NewHandle(SplatBuff); + HLock(myHandle); + myPtr := myHandle^; + SplatSound := FFSynthPtr(myPtr); + SplatSound^.mode := ffMode; + SplatSound^.count := FixRatio(1,2); {fixed point notation} + SplatBuff := SplatBuff - 7; {this is size of WaveForm array '0-1479'} + j := 0; + i := 0; + While j<= SplatBuff do Begin + SplatSound^.WaveBytes[j] := i; {fill up the buffer} + If i < 255 then inc(i) else i := 0; {Sawtooth wave form} + inc(j); + end; { of while} + + new(Squarewave); {my wavePtr...describe a squarewave form for flip sound} + for i := 0 to 127 do + begin + Squarewave^[i] := 255; + Squarewave^[i+128] := 0; + end; + + new(FlipSynth); {my FTSynthPtr, FourTone Synthesizer} + FlipSynth^.mode := ftMode; + + FlipTime[1] := 10; FlipTime[2] := 5; {durations for flipsounds} + FlipTime[3] := 5; FlipTime[4] := 20; + + {note: the duration field must be reset after each flipsound as the driver + decrements its value} + + For i := 1 to 4 do begin {Build the four FourToneSndRecords} + new(FlipSound[i]); + FlipSound[i]^.duration := FlipTime[i]; {initial for each sound} + FlipSound[i]^.sound1Phase := 64; + FlipSound[i]^.sound2Phase := 192; + FlipSound[i]^.sound3Phase := 128; {out of phase just for fun} + FlipSound[i]^.sound4Phase := 0; + FlipSound[i]^.sound1Wave := Squarewave; + FlipSound[i]^.sound2Wave := Squarewave; + FlipSound[i]^.sound3Wave := Squarewave; + FlipSound[i]^.sound4Wave := Squarewave; + end; { of for i } + {remember must InitialSoundRates each game,at BeginButton press} + WhichSound := 0; + + new(SoundParmBlk); {TML standard procedure,10-1} + with SoundParmBlk^ do begin {see tech note 19, PBWrite vs. StartSound} + iocompletion := nil; + iorefnum := -4; + iobuffer := ptr(CoptSound);{coerce the Sound pointer to plain ptr} + ioreqcount := CoptBuff; + ioresult := 0; {will Start coptersound when game begins,MainEventLoop} + end; {of with} +end; + +procedure CreateWindow;{windows,dialogs, and controls} +var + h,v,width: integer; + tRect:Rect; +Begin + myWindow := GetNewWindow(WindResId,@wRecord,Pointer(-1)); + SetPort(myWindow); + ClipRect(myWindow^.PortRect); {i-166, set cliprgn to small rgn} + TextFont(0);{System font, should be Chicago unless its been altered} + HelpDialog := GetNewDialog(HelpId,@dRecord,myWindow); + AboutDialog := GetNewDialog(AboutId,@AboutdRecord,myWindow); + {our new dialogs} + SourceDialog := GetNewDialog(137,@SrcRec,myWindow); + SpeedDialog := GetNewDialog(138,@SpdRec,myWindow); + GetDItem(SpeedDialog,2,h,myHandle,tRect); + SetCtlValue(ControlHandle(myHandle),1);{click the Normal Box} + SpeedTrapOn := False; + BitMapDialog := GetNewDialog(139,@BitRec,myWindow); + + BeginButton := GetNewControl(pressBegin,myWindow); + ResumeButton := GetNewControl(pressResume,myWindow); + EndButton := GetNewControl(pressEnd,myWindow); + LevelButton := GetNewControl(pressLevel,myWindow); + + LevelOnDisplay := false; { flag when level is displayed} +{locate the control buttons in the center of myWindow.. Begin and Resume +are in same location as are End and Level} + width := myWindow^.portRect.right-myWindow^.portRect.left; + h := myWindow^.portRect.left + ((width-80) div 2); {center control} + v := 165; + SizeControl(BeginButton,80,26);MoveControl(BeginButton,h,v); + SizeControl(ResumeButton,80,26);MoveControl(ResumeButton,h,v); + SetRectRgn(BeginRgn,h,v,h+80,v+26); { BeginButton rect. region } + v := 200; + SizeControl(EndButton,80,26);MoveControl(EndButton,h,v); + SizeControl(LevelButton,80,26);MoveControl(LevelButton,h,v); + SetRectRgn(EndRgn,h,v,h+80,v+26); + CopyRgn(EndRgn,LevelUnion); + OffsetRgn(LevelUnion,-1,0); {used to mask level on scrolling CopterRgn} +End; + +procedure CreatePictures; {get 3 PICT's from resource file} +var + i: integer; +Begin + Copter := GetPicture(CopterId); {contains 3 Copters,3 Wagons,14 Flips} + CoptRect := Copter^^.picFrame; { i-159 } + Man := GetPicture(ManId); {contains 12 Men,2 thumbs,10 numbers,Cross,etc.} + ManRect := Man^^.picFrame; + ScoreBox := GetPicture(ScoreBoxId); {Score,status,yoke control,etc.} + ScoreBoxRect := ScoreBox^^.picFrame; +{cloudstuff} + For i := 1 to 3 do begin + CloudPic[i] := GetPicture(i+355); {the three cloud pictures} + Cloud[i] := CloudPic[i]^^.picFrame;{set the cloud Rects size} + OffCloud[i] := Cloud[i]; + CloudRgn[i] := RgnHandle(GetResource('RGN ',i+355));{regions for clouds} + {enlarge region so we can mask just inside it as we move to the left} + InsetRgn(CloudRgn[i],-1,0); + end; {for i} +end; + +procedure CreateOffScreenBitMap; {see CopyBits stuff,also tech.note 41} +const + OffLeft = 0; + OffTop = 0; + OffRight = 426; + OffBottom = 261; {size bitmap to contain all six PICTs} +var + bRect: Rect; +Begin + SetRect(bRect,Offleft,OffTop,OffRight,OffBottom); { drawing area } + with bRect do begin + OffRowBytes := (((right - left -1) div 16) +1) * 2;{has to be even!} + SizeOfOff := (bottom - top) * OffRowBytes; + OffSetRect(bRect,-left,-top); { local coordinates } + end; { of with } + + with OffScreen do begin; { create new BitMap record } + baseAddr := QDPtr(NewPtr(SizeOfOff));{big enough for all 6 picts} + rowbytes := OffRowBytes; + bounds := bRect; + end; { of with OffScreen } +End; + +procedure DrawPicsIntoOffScreen; +Begin + OldBits := myWindow^.portBits; {preserve old BitMap} + SetPortBits(OffScreen); { our new BitMap } + {if offscreen bitmap is bigger than myWindow bitmap watchout for + clipping caused by ClipRgn and VisRgn fields of grafport record, you + can set cliprgn with ClipRect procedure and use CopyRgn procedure + to store old visrgn in temporary rgn... etc.} + + FillRect(myWindow^.PortRect,white); {erase our new BitMap to white} + + OffSetRect(ScoreBoxRect,-ScoreBoxRect.left,-ScoreBoxRect.top); + DrawPicture(ScoreBox,ScoreBoxRect); { ScoreBox stuff } + OffSetRect(CoptRect,-CoptRect.left, + ScoreBoxRect.bottom-CoptRect.top);{below ScoreBox} + DrawPicture(Copter,CoptRect); + OffSetRect(ManRect,CoptRect.right-ManRect.left, + ScoreBoxRect.bottom-ManRect.top); + DrawPicture(Man,ManRect); { right of Copter,below ScoreBox } + + ReleaseResource(handle(ScoreBox)); {done with Pictures so dump them} + ReleaseResource(handle(Man)); + ReleaseResource(handle(Copter)); + + SetPortBits(OldBits); {restore old bitmap} +end; + +procedure DrawCloudsIntoOffScreen; {draw the 3 clouds into offscreen} +var i:integer; +Begin + OldBits := myWindow^.portBits; {preserve old BitMap} + SetPortBits(OffScreen); { our new BitMap } + + OffSetRect(OffCloud[3],-OffCloud[3].left, + OffFlip[14].bottom-OffCloud[3].top);{left side,below flips} + DrawPicture(CloudPic[3],OffCloud[3]); + + OffSetRect(OffCloud[1],OffCross.right-OffCloud[1].left, + OffHorse.bottom-OffCloud[1].top);{right of cross,below deadhorse} + DrawPicture(CloudPic[1],OffCloud[1]); + + OffSetRect(OffCloud[2],OffCloud[3].right-OffCloud[2].left, + OffCloud[1].bottom-OffCloud[2].top);{right of cloud3,below cloud1} + DrawPicture(CloudPic[2],OffCloud[2]); + + ReleaseResource(handle(CloudPic[1])); + ReleaseResource(handle(CloudPic[2])); + ReleaseResource(handle(CloudPic[3])); + + {let's shrink our cloud borders...leave one pixel border on right side, + this will limit cloud movement to left only!} + {so now CloudRgn[]^^.RgnBBox.topleft will be same as Cloud[].topleft} + for i := 1 to 3 do begin + InsetRect(OffCloud[i],1,1);inc(OffCloud[i].right); + InsetRect(Cloud[i],1,1);inc(Cloud[i].right); + end;{for i} + + SetPortBits(OldBits); {restore old bitmap} +end; + +procedure CreateOffScreenRects; +{ where are all those shapes? locate all the shapes in the OffScreen bitmap +by defining the rectangles that contain them. } +var + i: integer; + tRect: Rect; +Begin + OffScoreBox := ScoreBoxRect; {Scorebox is easy... already upper left} + + {find the 3 copters} + tRect := CoptRect; {here CoptRect is the whole Copter PICT.frame} + tRect.right := trect.left + 74; { width of one copter } + trect.bottom := tRect.top + 26; { height of copter } + for i := 1 to 3 do begin + OffCopter[i] := tRect; + OffSetRect(tRect,74,0); { 3 copters in a row } + end; + CoptRect := OffCopter[1]; {now CoptRect is set to size of first copter} + + {find the 3 wagons} + tRect.left := CoptRect.left; {left edge of OffScreen} + tRect.top := CoptRect.bottom; {3 wagons are just below copters} + tRect.right := trect.left + 73; { width of one wagon } + trect.bottom := tRect.top + 22; { height of wagon } + for i := 1 to 3 do begin + OffWagon[i] := tRect; + OffSetRect(tRect,73,0); { 3 wagons in a row } + end; + WagonRect := OffWagon[1]; {Size onscreen rect} + + {find the 14 flip shapes} + tRect.left := WagonRect.left; { topleft corner for reference } + tRect.top := WagonRect.bottom; {2 rows of 7 Flips just below wagons} + tRect.right := trect.left + 32; { width of one manflip } + trect.bottom := tRect.top + 41; { height of manflip } + for i := 1 to 7 do begin + OffFlip[i] := tRect; { 7 in top row } + OffSetRect(tRect,0,41); + OffFlip[i+7] := tRect; { 7 in bottom row } + OffSetRect(tRect,32,-41); + end; + OffFlip[15] := OffFlip[1]; { complete animation back to 'stand up' } + For i := 1 to 2 do FlipRect[i] := tRect; {Size onscreen Rects} + + {find men hanging,dropping,splat and thumb up/down shapes} + tRect := ManRect; {upper left corner of Man Picture} + tRect.right := trect.left + 14; { width of one man } + trect.bottom := tRect.top + 16; { height of man } + for i := 1 to 7 do begin + OffMan[i] := tRect; {7 in toprow,1=manhanging,2-6=dropping,7=thumbup} + OffSetRect(tRect,0,16); + OffMan[i+7] := tRect; {7 in bottom row,1-6=splat,7th=thumbdown} + OffSetRect(tRect,14,-16); + end; + ManRect := OffMan[1]; + ManHt := ManRect.bottom - ManRect.top; + ManWdth := ManRect.right - ManRect.left; + + {find the 10 numeral shapes used for score} + tRect.left := ManRect.left; + tRect.top := OffMan[8].bottom; {2 rows of 5 numerals below men} + tRect.right := trect.left + 20; {width of one number} + trect.bottom := tRect.top + 15; { height of number } + for i := 0 to 4 do begin + OffNum[i] := tRect; { 5 numerals '0-4'in top row } + OffSetRect(tRect,0,15); + OffNum[i+5] := tRect; { 5 numerals '5-9' in bottom row } + OffSetRect(tRect,20,-15); + end; + NumRect := tRect; + + tRect.left := ManRect.left;{cross/yoke in scorebox shows mouse movements} + tRect.top := OffNum[5].bottom; {cross/yoke is below numerals} + tRect.right := trect.left + 81; + trect.bottom := tRect.top + 81; { height of cross/yoke } + OffCross := tRect; + CrossRect := tRect; + + tRect.top := OffCross.top; {ManInWagon is drawn for safe landing} + tRect.left := OffCross.right; + tRect.Bottom := tRect.top + 10; + tRect.right := tRect.left + 28; + OffManInWagon := tRect; + ManInWagon := tRect; + + tRect.top := OffManInWagon.bottom; {Driver is drawn if driver is hit} + tRect.bottom := tRect.top + 22; + tRect.left := OffCross.right; + tRect.right := tRect.left + 40; + OffDriver := tRect; + DriverRect := OffDriver; + + tRect.top := OffDriver.bottom; {Horse is drawn if horse is hit} + tRect.bottom := tRect.top + 22; + tRect.left := OffCross.right; + tRect.right := tRect.left + 29; + OffHorse := tRect; + HorseRect := OffHorse; +End; + +procedure DisplayHelpDialog; +var + itemHit: integer; +Begin {Display help dialog window} + ShowWindow(HelpDialog); + SelectWindow(HelpDialog); + ModalDialog(Nil,itemHit); {We'll close it not matter what was hit} + HideWindow(HelpDialog); + SelectWindow(myWindow); +end; + +procedure DisplayAboutDialog;{ display the About Stunt... dialog window} +var + tRect,fRect: Rect; + itemHit,i: integer; + tPort: GrafPtr; +Begin {Display about dialog window} + GetPort(tPort); + ShowWindow(AboutDialog); + SelectWindow(AboutDialog); + SetPort(AboutDialog); {so we can draw into our window} + + tRect := FlipRect[1]; + with tRect do begin + right := 2*(right-left)+left; {enlarge 4 times} + bottom := 2*(bottom-top)+top; + end; + OffSetRect(tRect,AboutDialog^.portRect.right-40-tRect.right, + AboutDialog^.portRect.top+54-tRect.top); + fRect := tRect; + InsetRect(fRect,-2,-2); + FrameRect(fRect); + InsetRect(fRect,-1,-1); {draw a frame for the enlarged flip} + FrameRect(fRect); + InsetRect(fRect,-2,-2); + FrameRoundRect(fRect,8,8); + FillRect(tRect,gray); + + fRect := Cloud[3]; {this is a cloud rect, lets draw one of our clouds} + OffSetRect(fRect,120-fRect.left,-12-fRect.top); + CopyBits(OffScreen,AboutDialog^.portBits,OffCloud[3], + fRect,srcOr,Nil); + + Repeat + ModalDialog(Nil,itemHit); {find which button hit,OK or BACKFLIP} + + If itemHit = 4 then + begin { do a backflip } + For i := 1 to 15 do begin + CopyBits(OffScreen,AboutDialog^.portBits,OffFlip[i], + tRect,srcCopy,Nil); + aTick := TickCount + 10; + repeat until (TickCount > aTick); {pause...} + end; + FillRect(tRect,gray); {erase the last flipshape} + end; { of if itemHit} + Until ((itemHit = 3) or (itemHit = 1)); {the done button or 'enter' key} + HideWindow(AboutDialog); + SelectWindow(myWindow);{restore our game window} + SetPort(tPort); +end; + +procedure DisplaySourceDialog; +var + itemHit: integer; + tPort: GrafPtr; +Begin + GetPort(tPort); + ShowWindow(SourceDialog); + SelectWindow(SourceDialog); + SetPort(SourceDialog); + ModalDialog(Nil,itemHit); {close it no matter what was hit} + HideWindow(SourceDialog); + SelectWindow(myWindow);{restore our game window} + SetPort(tPort);{restore port} +end; + +procedure DisplayBitMapDialog; +var + itemHit: integer; + tPort: GrafPtr; +Begin + GetPort(tPort); + ShowWindow(BitMapDialog); + SelectWindow(BitMapDialog); + SetPort(BitMapDialog); + CopyBits(OffScreen,BitMapDialog^.portBits,OffScreen.bounds, + OffScreen.bounds,srcCopy,nil); + ModalDialog(Nil,itemHit); {close it no matter what was hit} + HideWindow(BitMapDialog); + SelectWindow(myWindow);{restore our game window} + SetPort(tPort);{restore port} +end; + +procedure SetControlValue(which:integer); +var + i,h:integer; + tRect:Rect; +Begin + For i := 2 to 4 do begin + GetDItem(SpeedDialog,i,h,myHandle,tRect); + If i = which then SetCtlValue(ControlHandle(myHandle),1) + else SetCtlValue(ControlHandle(myHandle),0); + end; +End; +procedure DisplaySpeedDialog; +var + itemHit,i: integer; + tPort: GrafPtr; +Begin + GetPort(tPort); + ShowWindow(SpeedDialog); + SelectWindow(SpeedDialog); + SetPort(SpeedDialog); {so we can draw into our dialog window} + + Repeat + ModalDialog(Nil,itemHit); {close it no matter what was hit} + Case itemHit of + 2:Begin + SetControlValue(2); + SpeedTrapOn := False; + end;{2:} + 3:Begin + SetControlValue(3); + SpeedFactor := 1; + SpeedTrapOn := True; + end; + 4:Begin + SetControlValue(4); + SpeedFactor := 2; + SpeedTrapOn := True; + end; + end;{case itemhit} + Until(itemHit = 1); + + HideWindow(SpeedDialog); + SelectWindow(myWindow);{restore our game window} + SetPort(tPort);{restore port} +end; + +{note: we've since figured out a way to simplify putting up and adding +all the dialogs... we declare a ordinal TYPE called DialogList with +the names of our dialogs in sequence the way they're stored in resource +and declare arrays of DialogPtr's and Records! so that all dialogs can +be called from one procedure that uses a 'Case WhichDialog of' to display +the desired dialog...reference the 'name' from the DialogList} + +procedure DoMenuCommand(mResult:LongInt); +var + name: Str255; + tPort: GrafPtr; + h: integer; +Begin + theMenu := HiWord(mResult); + theItem := LoWord(mResult); + Case theMenu of + appleMenu: + Begin + GetPort(tPort); + If theItem = 1 then DisplayAboutDialog + Else begin + GetItem(myMenus[1],theItem,name);{must be a desk acc.} + refNum := OpenDeskAcc(name); + end; + SetPort(tPort); + End; + fileMenu: Finished := True; {quit this program} + optionMenu: + Case theItem of + 1:Begin {toggle sound on or off} + If SoundOn then SoundOn := false else SoundOn := true; + CheckItem(myMenus[3],theItem,SoundOn); + end; + 2: Begin {reset hiscore} + HiScore := 0; + DrawScoreIntoBox(HiScore,HiScoreNum); + end; + 3: DisplayHelpDialog; + 4: DisplaySpeedDialog; + 5: DisplaySourceDialog; + 6: DisplayBitmapDialog;{show our pics and shapes} + end; { case theItem} + End; + HiliteMenu(0); +End; + +procedure StartNewCloud; +{get one of 3 clouds, locate at right of screen,do all the rgn stuff} +var + tRect: Rect; + cloudheight:integer; +Begin + If CloudNdx < 3 then inc(CloudNdx) else CloudNdx := 1;{get the next cloud} + CloudHeight := abs(Random) div 256;{random between 0 and 128} + OffSetRect(Cloud[CloudNdx],512-Cloud[CloudNdx].left, + CloudHeight-Cloud[CloudNdx].top); + OffSetRgn(CloudRgn[CloudNdx],512-CloudRgn[CloudNdx]^^.rgnBBox.left, + CloudHeight-CloudRgn[CloudNdx]^^.rgnBBox.top); + {define region copter can be drawn in...will move with cloud} + tRect := FlightRect; + tRect.right := Cloud[CloudNdx].right + 514; {a screen width beyond cloud} + RectRgn(tempRgn,tRect); + DiffRgn(tempRgn,CloudRgn[CloudNdx],CopterRgn);{cloud out of the Copter area} +end; + +procedure InitialCopterStuff; +var + Dest: point; + i:integer; +Begin + OffsetRect(CoptRect,212-CoptRect.left,110-CoptRect.top); {dest. - source} + CoptNdx := 1; + OffsetRect(WagonRect,-WagonRect.left, + ScoreBoxRect.top-4-WagonRect.bottom); + + WagonNdx := 1; {set index to first wagon shape} + WagonMoving := True; + ManNdx := 1; {this is the man hanging} + Dh := 0;Dv := 0; { no initial copter movement } + + Score := 0; + MenLeft := 5; { # of men/level } + ManStatus := 4; { a man is hanging from the copter } + GoodJumps := 0; { # of successfull jumps } + WagonSpeed := 1; { Slowest, wagon will move 1 pixel per loop } + Gravity := 4; { fastest, man drops 4 pixels per loop } + CurrentLevel := 1; { keeps count of levels...} + + For i := 1 to 5 do begin { erase the thumbs...} + EraseRect(ThumbUp[i]); + EraseRect(ThumbDown[i]); + ThumbState[i] := 0; {none are drawn, keep track for 'update' drawing} + end; + + {cloudstuff} + CloudNdx := 3; {Which cloud is being drawn?} + StartNewCloud;{set up a cloud on right side and get all the regions ready} +End; + +procedure TakeCareControls(whichControl:ControlHandle;localMouse:point); +var + ControlHit,i: integer; +Begin + ControlHit := TrackControl(whichControl,localMouse,nil); { Find out which} + If ControlHit > 0 then {i-417} + Begin + If whichControl = BeginButton then {BEGIN a game} + Begin + InsertMenu(myMenus[4],0); + For i := 1 to 3 do DisableItem(myMenus[i],0); + DrawMenuBar; {display exit message} + HideControl(BeginButton); + InitialCopterStuff; {Reset game varibles to beginning} + DrawScoreIntoBox(Score,ScoreNum);{overwrite previous score,zero} + DrawWagonStatus; { into Scorebox } + InitialSoundRates; {reset pitch of flipsounds} + InvertRect(ScoreMan[1]); {hilite first man in scorebox} + GameUnderWay := True; { animation loop branch is active} + CloudOnDisplay := True; {flag for Update, will draw in cloud} + EraseRect(FlightRect); { Clear the Screen....} + HideCursor; {game mode,no normal mouse functions} + FlushEvents(mDownMask,0); {clear mousedowns} + Mask := 4; { mask shapes to flightRect } + WagonMoving := True; + end; {of begin} + If whichControl = ResumeButton then {RESUME} + Begin + InsertMenu(myMenus[4],0); {display exit message} + For i := 1 to 3 do DisableItem(myMenus[i],0); + DrawMenuBar; + + HideControl(ResumeButton); + HideControl(EndButton); + + {now hilite the proper man in the scorebox, was unhilited + when the user paused the game.} + If MenLeft > 0 then InvertRect(ScoreMan[6-MenLeft]); + + GameUnderWay := True; {we're back into game mode} + HideCursor; + Mask := 4;{entire flight area} + CopyRgn(tempRgn,CopterRgn); {restore prior region saved in PauseThisGame} + FlushEvents(mDownMask,0); {clear all mouseDowns} + End; + If whichControl = EndButton then {END current game...} + Begin + If LevelOnDisplay then begin {Hide levelbutton if it's drawn} + LevelOnDisplay := False; + HideControl(LevelButton); + UnionRgn(CopterRgn,LevelUnion,CopterRgn);{restore button area to CopterRgn} + end; + HideControl(ResumeButton);{hide the resume and end} + HideControl(EndButton); + InvalRect(FlightRect); {make 'Update' redraw the begin screen} + For i := 1 to 2 do FillRect(FlipFrame[i],dkGray);{flip showing?} + WhichSound := 0; + ShowControl(BeginButton); + Mask := 1;{mask out begin button} + CloudOnDisplay := False; + CopyRgn(FlightRgn[Mask],CopterRgn);{must use CopyRgn instead of ':='} + End; + End; {of If ControlHit} +End; { of procedure} + +procedure PauseThisGame; {called if a backspace or doubleclick during game} +var + i: integer; +Begin + GameUnderWay := False; { halt animation } + FillRect(YokeErase,Gray); { Cover the yoke } + If MenLeft > 0 then InvertRect(ScoreMan[6-MenLeft]);{unhilite man in scorebox} + ShowCursor; + ShowControl(ResumeButton); + ShowControl(EndButton); + DeleteMenu(MessageMenu); {remove exit message,i-354} + For i := 1 to 3 do EnableItem(myMenus[i],0);{show other menu options} + DrawMenuBar; + Mask := 3; { flags a pause is underway....mask out buttons} + CopyRgn(CopterRgn,tempRgn); {keep old region in case we resume this game} + DiffRgn(FlightRgn[Mask],CloudRgn[CloudNdx],CopterRgn);{Mask Cloud from region} + err := PBKillIO(SoundParmBlk,false); {kill any current sound} +End; + +procedure TakeCareMouseDown(myEvent:EventRecord); +var + Location: integer; + WhichWindow: WindowPtr; + WhichControl: ControlHandle; + MouseLoc: Point; + WindowLoc: integer; + ControlHit,i: integer; + tLong: LongInt; +Begin + If GameUnderWay then begin {game is underway..Mousedown can only drop man} + + If ManStatus = 4 then begin{man is hanging so begin the drop} + ManNdx := 2; { draw first man dropping at current manRect} + CopyBits(OffScreen,myWindow^.portBits,OffMan[ManNdx], + ManRect,srcCopy,CopterRgn); + ManStatus := 0; {this flags that a man is now dropping} + HeightOfDrop := WagonRect.bottom - CoptRect.bottom; {for score} + end; { of if ManStatus} + end + + Else begin { then Mouse is normal...handle normal functions } + MouseLoc := myEvent.Where; {Global coordinates} + WindowLoc := FindWindow(MouseLoc,WhichWindow); {I-287} + case WindowLoc of + inMenuBar: + DoMenuCommand(MenuSelect(MouseLoc)); + inSysWindow: + SystemClick(myEvent,WhichWindow); {i-441} + inDrag: + DragWindow(WhichWindow,MouseLoc,DragArea); + inContent:{by not selecting the window, DA's can be open during game} + Begin + GlobaltoLocal(MouseLoc); + ControlHit := FindControl(MouseLoc,whichWindow,whichControl); + If ControlHit > 0 then TakeCareControls(whichControl,Mouseloc); + end; + end; {case of} + end; { of Else} +end; { TakeCareMouseDown } + +PROCEDURE TakeCareKeyDown(Event:EventRecord); +Var + KeyCode,i: integer; + CharCode: char; +Begin + { KeyCode := LoWord(BitAnd(Event.message,keyCodeMask)) div 256; not used } + CharCode := chr(LoWord(BitAnd(Event.message,CharCodeMask))); + + If BitAnd(Event.modifiers,CmdKey) = CmdKey then begin + {key board command - probably a menu command} + DoMenuCommand(MenuKey(CharCode)); + end + Else If (CharCode = chr(BackSpace)) and GameUnderWay then PauseThisGame; +End; + +procedure TakeCareActivates(myEvent:EventRecord); +var + WhichWindow: WindowPtr; +Begin + WhichWindow := WindowPtr(myEvent.message); + SetPort(WhichWindow); + {other windows can't be selected or worked while in game mode} +End; + +procedure OneTimeGameStuff; {set up the gamestuff only needed on startup} +var + Dest: Point; + i,width,dh,dv:integer; + tRect:Rect; +Begin + CloudOnDisplay := False;{no clouds are to be drawn by update} + { center ScoreBoxRect in Window bottom } + with ScoreBoxRect do begin + OffSetRect(ScoreBoxRect,-left,myWindow^.portRect.bottom - bottom); + i := (myWindow^.portRect.right - right) div 2; + end; {with} + OffSetRect(ScoreBoxRect,i,-2); + OffsetRect(WagonRect,-WagonRect.left, + ScoreBoxRect.top-4-WagonRect.bottom);{wagon to baseline} + OffSetRect(CoptRect,0,WagonRect.top-10-CoptRect.bottom);{lowest copter} + CopterBottomLimit := CoptRect.bottom; {lower limit for copterflight} + SetRect(BorderRect,-76,-4,509,CoptRect.top-1); + + {we'll let Update draw the scorebox over a gray background} + + {now define the flight area and various masking regions} + FlightRect := myWindow^.portRect; + FlightRect.bottom := ScoreBoxRect.top-4; {define flight area} + RectRgn(FlightRgn[4],FlightRect); + DiffRgn(FlightRgn[4],BeginRgn,FlightRgn[1]); { Flight less begin button } + DiffRgn(FlightRgn[4],EndRgn,FlightRgn[2]); { Flight less End button} + DiffRgn(FlightRgn[1],EndRgn,FlightRgn[3]); {Flight less both buttons} + DisposeRgn(BeginRgn); + + {now locate two fliprect's on either side of scoreBox } + with myWindow^.portRect do begin + width := ScoreBoxRect.left - left;{width of area} + dh := (width - (FlipRect[1].right - FlipRect[1].left)) div 2; + width := bottom - ScoreBoxRect.top + 4;{height of area} + dv := (width - (FlipRect[1].bottom - FlipRect[1].top)) div 2; + {Left flip location, destination-source} + OffSetRect(FlipRect[1],left + dh - FlipRect[1].left,bottom - + dv - FlipRect[1].bottom); + {Right flip location, destination-source} + OffSetRect(FlipRect[2],ScoreBoxRect.right + dh - FlipRect[2].left, + bottom - dv - FlipRect[2].bottom); + end; { of with} + + For i := 1 to 2 do begin { Frames for flips....} + tRect := FlipRect[i]; + InsetRect(tRect,-4,-4); {give the guy some room to flip} + tRect.bottom := tRect.bottom - 3;{but keep his feet on the ground} + FlipFrame[i] := tRect; + end; { of for i} + + {establish Crosshair control limits} + YokeLimits := ScoreBoxRect; + YokeLimits.right := YokeLimits.left + 51; + YokeErase := YokeLimits; + InsetRect(YokeLimits,7,7);{limits of movement of center of cross} + InsetRect(YokeErase,4,4); {used to create MaskRgn,mask copyBits for cross} + + {using MaskRgn forces CopyBits to draw only the visible part of the cross + into the ScoreBox, making it appear to slide inside the box} + MaskRgn := NewRgn; + OpenRgn; + FrameRect(YokeErase); + CloseRgn(MaskRgn); {create maskrgn for copybits crosshair} + + {now locate Cross centerline relative to Yoke window.topleft, each loop the + destination rectangle for the drawing the Cross is offset from this + position... the offset is determined by mapping the mouse position into + the MouseRect in the AnimateOneLoop procedure} + with CrossRect do begin + Dest.h := YokeLimits.left - ((right - left) div 2); + Dest.v := YokeLimits.top - ((bottom - top) div 2); + OffSetRect(CrossRect,Dest.h - left,Dest.v - top); + end; {with CrossRect} + + SetRect(MouseRect,210,134,302,206); { this is for mapping control } + SetRect(DeltaRect,-4,-3,4,4); { this is for finding copter offset } + + {find all the Constants used to locate Cross in ScoreBox, we'll be + replacing MapPt and OffSetRect calls} + YokeHt := YokeLimits.bottom-YokeLimits.top; + YokeWdth := YokeLimits.right-YokeLimits.left; + MouseHt := MouseRect.bottom-MouseRect.top; + MouseWdth := MouseRect.right-MouseRect.left; + OffsetHt := YokeLimits.top-CrossRect.top; + OffsetWdth := YokeLimits.left-CrossRect.left; + CrossHt := CrossRect.bottom - CrossRect.top; + CrossWdth := CrossRect.right - CrossRect.left; + DeltaHt := DeltaRect.bottom - DeltaRect.top; + DeltaWdth := DeltaRect.right - DeltaRect.left; + + { onscreen rectangles based in ScoreBox } + tRect:= OffMan[1]; {size of man..locate ScoreMan in ScoreBox} + OffSetRect(tRect,ScoreBoxRect.left + 54 - tRect.left, + ScoreBoxRect.top - tRect.top); + for i := 1 to 5 do begin + ScoreMan[i] := tRect; { boxes to track which man is in action} + OffSetRect(tRect,0,17); { move one row down } + ThumbUp[i] := tRect; { boxes for thumbs up } + OffSetRect(tRect,0,17); + ThumbDown[i] := tRect; { Boxes for thumbs down } + OffSetRect(tRect,15,-34); { back to top and over one} + ThumbState[i] := 0; {No Thumbs are drawn yet} + end; { of for } + + tRect:= OffNum[1]; {size of Numbers..locate in ScoreBox} + OffSetRect(tRect,ScoreBoxRect.left + 135 - tRect.left, + ScoreBoxRect.top + 10 - tRect.top); + for i := 1 to 6 do begin + ScoreNum[i] := tRect; { boxes to record score digits} + OffSetRect(tRect,0,25); { move one row down } + HiScoreNum[i] := tRect; { boxes for hiscore digits } + OffSetRect(tRect,21,-25); + end; { of for } + + {find point for writing current height into the scorebox} + {HtStatRect is destination rect in scorebox, Offheight is source rect + in OffScreen, HeightPt is moveto location in offScreen} + HeightStr := '444'; {max width for 3 numerals?,for centering in box} + HtStatRect.top := ScoreBoxRect.top + 2; + HtStatRect.left := ScoreBoxRect.right - 48; + HtStatRect.bottom := ScoreBoxRect.top + 14; + HtStatRect.right := HtStatRect.left + StringWidth(HeightStr); + OffHeight := HtStatRect; {offScreen rect to contain drawstring} + OffSetRect(OffHeight,OffHorse.right-OffHeight.left, + OffHorse.bottom-OffHeight.bottom); {right of dead horse} + HeightPt.h := OffHeight.left; + HeightPt.v := OffHeight.bottom; {'moveto' location for height in offscreen} + + OldBits := myWindow^.portBits;{always preserve the old map!!} + SetPortBits(OffScreen); + FillRect(OffHeight,white); {erase to white} + SetPortBits(OldBits); {restore old bitmap} + + tRect := HtStatRect; + InSetRect(tRect,-14,-1); + OffSetRect(tRect,0,17); {size and locate Rects for Wagon/gravity} + WagStatRect := tRect; + OffSetRect(tRect,0,17); + GravStatRect := tRect; + + WagonStatus[1] := 'WALK'; + WagonStatus[2] := 'TROT'; + WagonStatus[3] := 'GALLOP'; + GravityStatus[4] := 'HEAVY'; {strings for Wagon speed and gravity} + GravityStatus[3] := 'NORMAL'; + GravityStatus[2] := 'OH BOY'; + GravityStatus[1] := 'FLYING'; +End; { of OneTimeGameStuff } + +procedure AnimateWagonCopter(ClipTo:RgnHandle;DrawWagon:Boolean); + {animate copter/wagon while game is not underway} +Begin + If CoptNdx < 3 then inc(CoptNdx) else CoptNdx := 1; + OffsetRect(CoptRect,212-CoptRect.left,110-CoptRect.top); + CopyBits(OffScreen,myWindow^.portBits,OffCopter[CoptNdx], + CoptRect,srcCopy,ClipTo); + If DrawWagon then begin + If WagonNdx < 3 then inc(WagonNdx) else WagonNdx := 1; + If (WagonRect.left > 510 ) then OffSetRect(WagonRect,-WagonRect.right,0) + else OffsetRect(WagonRect,WagonSpeed,0); + CopyBits(OffScreen,myWindow^.portBits,OffWagon[WagonNdx], + WagonRect,srcCopy,nil); + end; {if DrawWagon} + {draw current height into scorebox} + Height := WagonRect.bottom - CoptRect.bottom; + NumToString(Height,HeightStr); + OldBits := myWindow^.portBits; + SetPortBits(OffScreen); {we want to draw into offScreen} + EraseRect(OffHeight); {erase to white} + MoveTo(HeightPt.h,HeightPt.v);{move the pen to bottom left of OffHeight} + DrawString(HeightStr); { draw current height into offscreen} + SetPortBits(OldBits); {restore old bitmap} + CopyBits(OffScreen,myWindow^.portBits,OffHeight, + HtStatRect,srcCopy,nil); {now stamp it onto the screen} +End; + +procedure ResetManHanging; {test for end of game, reset if more men available} +var + i: integer; +Begin { the following executed success or fail } + ManStatus := 4;{man is hanging} + InvertRect(ScoreMan[6-MenLeft]); { make last scorebox man normal} + dec(MenLeft); + If MenLeft > 0 then InvertRect(ScoreMan[6-MenLeft]); {next man} + OffSetRect(ManRect,CoptRect.left+36-ManRect.left, + CoptRect.top+23-ManRect.top); {move ManRect back up to Copter} + If MenLeft = 0 then { *** end of this level...} + begin + If GoodJumps < 5 then begin { **** end of this game } + GameUnderWay := False; + If Score > HiScore then begin {New HiScore?} + HiScore := Score; + DrawScoreIntoBox(HiScore,HiScoreNum); + end; + ShowCursor; + err := PBKillIO(SoundParmBlk,false); {kill sound} + whichSound := 0; + EraseRect(CoptRect); {erase last copter} + EraseRect(Cloud[CloudNdx]); {erase last cloud} + CloudOnDisplay := False; {no cloud for Update} + FillRect(YokeErase,Gray); { fill in yoke } + DeleteMenu(MessageMenu); { remove exit message,i-354} + For i := 1 to 3 do EnableItem(myMenus[i],0); + DrawMenuBar; + ShowControl(BeginButton); + Mask := 1; + DrawAllmyStrings; + end { of If GoodJumps } + Else begin { move on to next level stuff} + Mask := 2; { mask out level button } + inc(CurrentLevel); { next level } + LevelToButtonTitle(CurrentLevel);{level to buttontitle} + ShowControl(LevelButton); + LevelOnDisplay := True; + DiffRgn(CopterRgn,EndRgn,CopterRgn);{mask levelbutton from CopterRgn} + LevelTimer := TickCount + 120; {time levelbutton onscreen 2 secs.} + If (WagonSpeed = 3) and (Gravity > 1) then + Gravity := Gravity - 1; {MaxGravity = 4} + If WagonSpeed < 3 then WagonSpeed := WagonSpeed + 1; + DrawWagonStatus; {update scorebox for wagon/gravity} + MenLeft := 5; { # of men/level } + InvertRect(ScoreMan[1]); + GoodJumps := 0; { # of successfull jumps } + For i := 1 to 5 do begin {erase the last set of thumbs...} + EraseRect(ThumbUp[i]); + EraseRect(ThumbDown[i]); + ThumbState[i] := 0; + end; { of for i} + If CurrentLevel < 6 then begin { higher pitch flipsound } + For i := 1 to 4 do begin + with FlipSound[i]^ do begin + sound1Rate := 2 * sound1Rate;{raise pitch one octave} + sound2Rate := 2 * sound2Rate; + sound3Rate := 2 * sound3Rate; + sound4Rate := 2 * sound4Rate; + end; { of with} + end; { of for i} + end; { if CurrentLevel} + end; { of Else} + end; { of If MenLeft} + FlushEvents(mDownMask,0); {so an old mousedown will not drop new man!} +End; + +procedure AnimateOneLoop; +var + i,j:integer; + Where,which: integer; + MouseLoc,tpoint: Point; + tRect: Rect; +Begin + GetMouse(MouseLoc); { MouseLoc in Coords of currentGrafPort } + + {if out of bounds then limit MouseLoc to MouseRect extremes } + If MouseLoc.h > MouseRect.right then MouseLoc.h := MouseRect.right + else If MouseLoc.h < MouseRect.left then MouseLoc.h := MouseRect.left; + + If MouseLoc.v > MouseRect.bottom then MouseLoc.v := MouseRect.bottom + else If MouseLoc.v < MouseRect.top then MouseLoc.v := MouseRect.top; + + Case CoptNdx of + {split time between clouds,height and cross...draw each every 3rd loop} + + 1:begin {height into scorebox, use offscreen to avoid flicker} + NumToString(WagonRect.bottom - CoptRect.bottom,HeightStr); + OldBits := myWindow^.portBits; + SetPortBits(OffScreen); {we want to draw into offScreen} + EraseRect(OffHeight); {erase to white} + MoveTo(HeightPt.h,HeightPt.v);{move the pen to bottom left of OffHeight} + DrawString(HeightStr); { draw current height into offscreen} + SetPortBits(OldBits); {restore old bitmap} + CopyBits(OffScreen,myWindow^.portBits,OffHeight, + HtStatRect,srcCopy,nil); {now stamp it onto the screen} + inc(CoptNdx); + end;{of Case 1:} + + 2:begin {cloudstuff} + If (Cloud[CloudNdx].right < 0) then StartNewCloud;{is it offscreen left?} + dec(Cloud[CloudNdx].left); + dec(Cloud[CloudNdx].right); {move cloudrect left,faster than OffsetRect} + OffSetRgn(CloudRgn[CloudNdx],-1,0);{move the masking region too} + + {draw the cloud masked by the cloudrgn} + CopyBits(OffScreen,myWindow^.portBits,OffCloud[CloudNdx], + Cloud[CloudNdx],srcCopy,CloudRgn[CloudNdx]); + + {move the CopterRgn to mask the new cloud position} + OffsetRgn(CopterRgn,-1,0); + inc(CoptNdx); {next Copter shape} + + {level stuff is here because we are masking the button onto CopterRgn} + If LevelOnDisplay then begin { is level button being shown?} + If TickCount>LevelTimer then begin {put away levelbutton if time is up} + Mask := 4; { normal window} + UnionRgn(CopterRgn,LevelUnion,CopterRgn); {put back last level mask} + HideControl(LevelButton); + LevelOnDisplay := False; + end {if Tickcount} + else begin {make sure level is masked properly as copterRgn scrolls} + UnionRgn(CopterRgn,LevelUnion,CopterRgn); {put back last mask} + DiffRgn(CopterRgn,EndRgn,CopterRgn); {mask out present} + end; { of else} + End; { if LevelOnDisplay} + end; {of case 2:} + + 3:begin + {Draw CrossHair into ScoreBox,use tpoint to preserve MouseLoc} + {lets do our own MapPt and Offset calculations here instead of ROM calls} + tRect.left := CrossRect.left + YokeWdth * (MouseLoc.h - 210) div 92; + tRect.right := tRect.left + CrossWdth; + tRect.top := CrossRect.top + YokeHt * (MouseLoc.v- 134) div 72; + tRect.bottom := tRect.top + CrossHt; + CopyBits(OffScreen,myWindow^.PortBits,OffCross, + tRect,srcCopy,MaskRgn); + CoptNdx := 1; + end; {of case 3:} + end; {of case CoptNdx} + + + {find distance to move the copter for this loop} + {MapPt will convert our MouseLoc into a point in the DeltaRect which + represents what the user is requesting for the copter move in pixels per + loop, since objects cannot instantly accelerate, we will accelerate one + pixel of offset per loop. Therefore if the copter is currently flying + backwords at 4 pixels per loop it will take 8 loops to reach a forward + speed of 4 pixels per loop assuming that the user has the mouse on full + forward position. Full forward position being a Point on the rightmost + of MouseRect which will return a horizontal value of 4 when mapped into + the DeltaRect.} + MapPt(MouseLoc,MouseRect,DeltaRect); + + If MouseLoc.h>Dh then inc(Dh) {MouseLoc.h won't be over 4 or under -4} + else if MouseLoc.h < Dh then dec(Dh); + If MouseLoc.v > Dv then inc(Dv) + else if MouseLoc.v < Dv then dec(Dv);{Dh,Dv are offset to move copter} + + CoptRect.left := CoptRect.left + Dh; {faster than an OffsetRect} + CoptRect.right := CoptRect.right + Dh; + CoptRect.top := CoptRect.top + Dv; + CoptRect.bottom := CoptRect.bottom + Dv; + + {now check location,BorderRect sets limits for Copter at edges of window} + If not(PtInRect(CoptRect.topleft,BorderRect)) then begin{outside,find which} + If CoptRect.left > 510 then OffSetRect(CoptRect,-CoptRect.right,0);{wraparound} + If CoptRect.left < -76 then OffSetRect(CoptRect,510-CoptRect.left,0);{wrap} + If CoptRect.top < -4 then OffSetRect(CoptRect,0,-4-CoptRect.top); + If CoptRect.bottom > CopterBottomLimit then + OffSetRect(CoptRect,0,CopterBottomLimit-CoptRect.Bottom); + end;{of if not PtInRect} + + If WagonNdx < 3 then inc(WagonNdx) else WagonNdx := 1;{which wagon shape} + If (WagonRect.left > 512) then OffSetRect(WagonRect,-582,0) + else begin + WagonRect.left := WagonRect.left + WagonSpeed; {locate next wagon} + WagonRect.right := WagonRect.right + WagonSpeed; + end;{of else} + + Case ManStatus of + 0:begin { man is dropping......} + If ManRect.bottom > WagonRect.top then {Check for a hit!} + begin + CopyBits(OffScreen,myWindow^.portBits,OffCopter[CoptNdx], + CoptRect,srcCopy,CopterRgn); {draw copter} + EraseRect(ManRect); { erase man and redraw wagon} + CopyBits(OffScreen,myWindow^.portBits, + OffWagon[WagonNdx],WagonRect,srcCopy,nil); + + Where := ManRect.left - WagonRect.left;{where relative to wagon} + If (Where < -6) or (Where > 70) then Which := 0 {no hit} + else if Where < 34 then Which := 1 {success } + else If where < 45 then Which := 2 {hit driver} + Else Which := 3; {hit horse!} + Case Which of + 1: begin {landed in hay so initialize Success} + CopyBits(OffScreen,myWindow^.portBits,OffMan[7], + ThumbUp[6-MenLeft],srcCopy,Nil); {draw Thumbs UP!} + ThumbState[6-MenLeft] := 1; + Score := Score + CurrentLevel * HeightOfDrop; + DrawScoreIntoBox(Score,ScoreNum); + If Score > HiScore then begin {New HiScore?} + HiScore := Score; + DrawScoreIntoBox(HiScore,HiScoreNum); + end; + for i := 1 to 2 do begin + EraseRect(FlipFrame[i]);{erase area for the flips} + FrameRect(FlipFrame[i]); {frame for Flips} + end; + inc(GoodJumps); + ManStatus := 1; {flag its a success!} + FlipCount := 3; {index for the flips} + If SoundOn then begin {start the first of four flipsounds} + err := PBKillIO(SoundParmBlk,false);{kill sound} + WhichSound := 1; + {store flipsound stuff into SoundParmBlk} + SoundParmBlk^.iobuffer := ptr(FlipSynth); + SoundParmBlk^.ioreqcount := SizeOf(FlipSynth^); + FlipSynth^.sndRec := FlipSound[whichSound]; + {reset duration always..as it is altered by Driver} + For j:=1 to 4 do FlipSound[j]^.duration:= FlipTime[j]; + err := PBWrite(SoundParmBlk,true); {do the Flip sound} + end;{If soundOn} + end; {of case 1:} + 0,2,3: begin { missed the hay.... initialize Splat} + CopyBits(OffScreen,myWindow^.portBits,OffMan[14], + ThumbDown[6-MenLeft],srcCopy,Nil); {Thumbs down} + ThumbState[6-MenLeft] := 2;{remember thumbstate for update} + FlipCount := 16; {index for drawing flip/splat shapes} + If SoundOn then Begin + err := PBKillIO(SoundParmBlk,false); + WhichSound := 0; {restart copter sound after splat} + SoundParmBlk^.iobuffer := ptr(SplatSound); + SoundParmBlk^.ioreqcount := SplatBuff; + err := PBWrite(SoundParmBlk,true); {do the splatsound} + end;{if SoundOn} + OffSetRect(ManRect,0,WagonRect.bottom-13-ManRect.bottom); + case which of {determine which kind of failure} + 0: begin {missed the whole thing!} + ManStatus := 2; {its a failure} + OffSetRect(ManRect,0,WagonRect.bottom-ManRect.bottom); + end; + 2: ManStatus := 8; {hit the driver} + 3: ManStatus := 9; {hit the horse} + end; { of case which} + end; { case 0,2,3: } + end; { of Case which } + end {Of If manRect} + Else {man is dropping but not down to wagon yet..keep going} + begin + If ManNdx < 6 then inc(ManNdx) else ManNdx := 2;{next man} + {how about some effects on man dropping thru cloud!!} + If PtInRgn(ManRect.topleft,CloudRgn[CloudNdx]) then + OffSetRect(ManRect,Random div 10924,1) {drop is 1 pixel} + Else begin {man not behind cloud so normal drop} + ManRect.top:= ManRect.top + Gravity; {locate next man} + ManRect.bottom:= ManRect.bottom + Gravity; + end;{of else} + CopyBits(OffScreen,myWindow^.portBits,OffCopter[CoptNdx], + CoptRect,srcCopy,CopterRgn); + CopyBits(OffScreen,myWindow^.portBits,OffMan[ManNdx], + ManRect,srcCopy,CopterRgn); + CopyBits(OffScreen,myWindow^.portBits,OffWagon[WagonNdx], + WagonRect,srcCopy,nil); + end; { of last else(mandropping)} + end; { of case 0: mandropping} + + 1: {Success is underway... flips and man in wagon} + Begin + CopyBits(OffScreen,myWindow^.portBits,OffCopter[CoptNdx], + CoptRect,srcCopy,CopterRgn);{draw the copter} + If FlipCount < 46 then {for 1 to 15 shapes every third loop} + begin + If (FlipCount mod 3) = 0 then begin {Draw every 3rd time thru} + i := FlipCount div 3; + CopyBits(OffScreen,myWindow^.portBits,OffFlip[i], + FlipRect[1],srcCopy,Nil); {Draw left flip} + CopyBits(OffScreen,myWindow^.portBits, + OffFlip[i],FlipRect[2],srcCopy,Nil); + end;{ if not odd(Flipcount)} + OffsetRect(ManInWagon,WagonRect.left-ManInWagon.left, + WagonRect.top-ManInWagon.top); + CopyBits(OffScreen,myWindow^.portBits,OffWagon[WagonNdx], + WagonRect,srcCopy,Nil); {draw wagon} + CopyBits(OffScreen,myWindow^.portBits,OffManInWagon, + ManInWagon,srcCopy,Nil); {draw Man in Wagon} + inc(FlipCount); + end + Else {the flip is complete...get ready for the next man} + Begin {Erase last flip} + For i := 1 to 2 do FillRect(FlipFrame[i],dkGray); + CopyBits(OffScreen,myWindow^.portBits,OffWagon[WagonNdx], + WagonRect,srcCopy,Nil); {draw wagon} + ResetManHanging;{ set up another man/level or end} + end; + end; { of case 1: success} + + 2,8,9: {Fail is underway... drawing splat shapes} + begin + CopyBits(OffScreen,myWindow^.portBits,OffCopter[CoptNdx], + CoptRect,srcCopy,CopterRgn); + If FlipCount < 27 then {for 8 to 13 shapes} + begin + CopyBits(OffScreen,myWindow^.portBits, {draw wagon} + OffWagon[WagonNdx],WagonRect,srcCopy,Nil); + If not odd(Flipcount) then begin {Draw every other time thru} + CopyBits(OffScreen,myWindow^.portBits, + OffMan[FlipCount div 2],ManRect,srcCopy,Nil); + end; {if not odd} + inc(FlipCount); + end + Else {Splat animation is complete...finish up} + Begin + EraseRect(ManRect); + CopyBits(OffScreen,myWindow^.portBits,OffWagon[WagonNdx], + WagonRect,srcCopy,Nil); {draw wagon} + Case ManStatus of + 8: begin {hit the driver} + OffSetRect(DriverRect,WagonRect.right-DriverRect.right, + WagonRect.top-DriverRect.top); + CopyBits(OffScreen,myWindow^.portBits,OffDriver, + DriverRect,srcCopy,Nil);{draw dead driver} + InvertRect(ScoreMan[6-MenLeft]); + MenLeft := 1; {this will end the game} + InvertRect(ScoreMan[6-MenLeft]); + WagonMoving := False;{leave the last wagon as is} + end; {of case 8:} + 9: begin {hit the horse} + OffSetRect(horseRect,WagonRect.right-horseRect.right, + WagonRect.top-horseRect.top); + CopyBits(OffScreen,myWindow^.portBits,Offhorse, + horseRect,srcCopy,Nil);{draw dead horse} + InvertRect(ScoreMan[6-MenLeft]); + MenLeft := 1; {end the game} + InvertRect(ScoreMan[6-MenLeft]); + WagonMoving := False; + end; {of case 8:} + end; {of case Manstatus} + + ResetManHanging; + end; + end; {of case Fail} + + 4: {ManHanging on to copter} + begin { Draw Man and Wagon and continue...waiting for mousedown} + ManRect.left := CoptRect.left + 36; + ManRect.right := ManRect.left + ManWdth; + ManRect.top := CoptRect.top + 23; + ManRect.bottom := ManRect.top + ManHt;{locate man relative to copter} + CopyBits(OffScreen,myWindow^.portBits,OffWagon[WagonNdx], + WagonRect,srcCopy,nil); + CopyBits(OffScreen,myWindow^.portBits,OffCopter[CoptNdx], + CoptRect,srcCopy,CopterRgn); + CopyBits(OffScreen,myWindow^.portBits,OffMan[1], + ManRect,srcCopy,CopterRgn); + end; { of case 4: manhanging} + + end; { of Case ManStatus } + If SpeedTrapOn then Delay(SpeedFactor,SpeedTick);{ii-384} +End; { of procedure } + +Procedure DrawUpDateStuff; +{will draw all our images in response to Update event,an Update event is +waiting for our newly opened window so will draw our first stuff too!} +var + tRect: Rect; + tpoint: Point; + i: integer; +Begin + { draw in the scorebox over gray background } + tRect := myWindow^.portRect;tRect.top := ScoreBoxRect.top - 3; + FillRect(tRect,dkGray); + CopyBits(OffScreen,myWindow^.portBits,OffScoreBox, + ScoreBoxRect,srcCopy,Nil); + Moveto(0,ScoreBoxRect.top-4); + Lineto(512,ScoreBoxRect.top-4); {wagon Baseline or 'ground'line} + + CopyBits(OffScreen,myWindow^.portBits,OffWagon[WagonNdx], + WagonRect,srcCopy,nil);{draw the wagon} + + { Draw Thumbs into ScoreBox } + For i := 1 to 5 do begin + Case ThumbState[i] of {ThumbState determines which thumb to draw if any} + {0: don't do anything there is no thumb drawn in this position} + 1: CopyBits(OffScreen,myWindow^.portBits,OffMan[7], + ThumbUp[i],srcCopy,Nil); {Thumbs UP! in upper box} + 2: CopyBits(OffScreen,myWindow^.portBits,OffMan[14], + ThumbDown[i],srcCopy,Nil); {Thumbs down in lower box} + end; { of case} + end; {of for i} + + DrawScoreIntoBox(Score,ScoreNum); { Draw Scores into ScoreBox } + DrawScoreIntoBox(HiScore,HiScoreNum); + + DrawWagonStatus; { Draw Wagon and Gravity info} + + {Invert proper man in scorebox, don't think this is ever used} + If (MenLeft > 0) and GameUnderWay then InvertRect(ScoreMan[6-MenLeft]); + + For i := 1 to 2 do FillRect(FlipFrame[i],dkGray); + FillRect(YokeErase,Gray); { cover the yoke until resume or newgame} + + If Mask = 1 then begin {this is used on start up or waiting for begin} + DrawAllmyStrings; + ShowControl(BeginButton); + end; + {draw cloud if one is showing} + If CloudOnDisplay then CopyBits(OffScreen,myWindow^.portBits, + OffCloud[CloudNdx],Cloud[CloudNdx],srcCopy,CloudRgn[CloudNdx]); +end; + +procedure TakeCareUpdates(Event:EventRecord); +var + UpDateWindow,TempPort: WindowPtr; + itemHit: integer; + Test: Boolean; +Begin + UpDateWindow := WindowPtr(Event.message); + GetPort(TempPort); + SetPort(UpDateWindow); + BeginUpDate(UpDateWindow); + EraseRect(UpDateWindow^.portRect); + If UpDateWindow = myWindow then DrawUpDateStuff; + DrawControls(UpDateWindow); + EndUpDate(UpDateWindow); + SetPort(TempPort); +End; + +procedure MainEventLoop; +var + myEvent: EventRecord; + i: integer; +Begin + InitCursor; + Repeat + SystemTask; + If GetNextEvent(EveryEvent,myEvent) then + Case myEvent.What of + mouseDown: TakeCareMouseDown(myEvent); + mouseUp: + begin + LastMouseUp := myEvent.when; {to test for DoubleClick} + WhereMouseUp := myEvent.where; + end; + KeyDown: TakeCareKeyDown(myEvent); + ActivateEvt:TakeCareActivates(myEvent); + UpdateEvt:TakeCareUpdates(myEvent); + End {of Case} + Else {no event pending so lets do some game stuff} + Begin + If GameUnderWay then begin + AnimateOneLoop; {draw all our shapes) + + {sound stuff... ioresult will be <1 if sound is finished} + If (SoundParmBlk^.ioresult < 1) then begin {only if sound is done} + If GameUnderWay and SoundOn then begin {animate loop might end game} + aTick := TickCount;{we'll wait a tick before PBWrite} + Case WhichSound of + 0: begin {reset copterSound} + SoundParmBlk^.iobuffer := ptr(CoptSound); + SoundParmBlk^.ioreqcount := CoptBuff; + end; + 1,2,3: begin {reset next flipsound} + inc(WhichSound); + FlipSynth^.sndRec := FlipSound[whichSound]; + end; + 4: begin {reset last flipsound} + WhichSound := 0; + FlipSynth^.sndRec := FlipSound[4]; + end; { of case 4:} + end; { of Case} + repeat until (TickCount > aTick); {wait a tick,just in case} + err := PBWrite(SoundParmBlk,true); {start the sound} + end; { if GameUnderWay} + end; {if SoundParmBlk} + end { if GameUnderWay} + else {game is not underway..waiting for a begin or resume} + Case Mask of + 1:Begin { animate during Wait for Beginbutton press } + AnimateWagonCopter(FlightRgn[Mask],WagonMoving); + If SpeedTrapOn then Delay(SpeedFactor,SpeedTick); + End; + 3: { animate stationary copter during wait for Resume/end } + Begin + If SpeedTrapOn then Delay(SpeedFactor,SpeedTick); + If CoptNdx < 3 then inc(CoptNdx) else CoptNdx := 1; + CopyBits(OffScreen,myWindow^.portBits,OffCopter[CoptNdx], + CoptRect,srcCopy,CopterRgn); + If ManStatus = 4 then begin + OffSetRect(ManRect,CoptRect.left+36-ManRect.left, + CoptRect.top+23-ManRect.top); + CopyBits(OffScreen,myWindow^.portBits,OffMan[1], + ManRect,srcCopy,CopterRgn); + end; { if ManStatus} + end; { of 3:} + end; { case mask} + End; {else no event pending} + Until Finished; +End; + +procedure SetUpMenus; +var + i: integer; +Begin + myMenus[1] := GetMenu(appleMenu); {get menu info from resources} + AddResMenu(myMenus[1],'DRVR'); {add in all the DA's} + myMenus[2] := GetMenu(fileMenu); + myMenus[3] := GetMenu(optionMenu); + myMenus[4] := GetMenu(MessageMenu); {this is the backspace message} + CheckItem(myMenus[3],1,True); {check the Sound item} + SoundOn := True; {sound will start on first begin} + For i := 1 to 3 do + begin + InsertMenu(myMenus[i],0); + end; + DrawMenuBar; +End; + +procedure CloseStuff; +var i:integer; +Begin + HideWindow(HelpDialog); + HideWindow(AboutDialog); + err := PBKillIO(SoundParmBlk,false);{always kill sound i/o before quitting!} +End; + +PROCEDURE InitThings; +Begin + InitGraf(@thePort); {create a grafport for the screen} + + MoreMasters; {extra pointer blocks at the bottom of the heap} + MoreMasters; {this is 5 X 64 master pointers} + MoreMasters; + MoreMasters; + MoreMasters; + + {get the cursors we use and lock them down - no clutter} + ClockCursor := GetCursor(watchCursor); + HLock(Handle(ClockCursor)); + + {show the watch while we wait for inits & setups} + SetCursor(ClockCursor^^); + + {init everything in case the app is the Startup App} + InitFonts; + InitWindows; + InitMenus; + TEInit;{for the Dialog stuff} + InitDialogs(Nil); + + Finished := False; {set terminator to false} + FlushEvents(everyEvent,0); {clear events} + Screen := ScreenBits.Bounds; { Get screen dimensions from thePort } + with Screen do SetRect(DragArea,Left+4,Top+24,Right-4,Bottom-4); +End; + +{Main Program begins here} +BEGIN + InitThings; + SetUpMenus; + CreateRegions; + CreateWindow; {load window,dialogs,controls} + CreateSound; {set up sound buffers, Apple tech note 19} + CreateOffScreenBitMap; {see Apple tech note 41} + CreatePictures; {load pictures from resources} + DrawPicsIntoOffScreen; + CreateStrings; {load strings from resources} + CreateOffScreenRects; {set all rectangles for 'copybits' shape drawing} + DrawCloudsIntoOffScreen;{depends on OffScreenRects being defined} + OneTimeGameStuff; {Game varibles, scorebox stuff,etc} + HiScore := 0; + InitialCopterStuff; {called at start of each game,begin button} + GameUnderWay := False; + Mask := 1; { FlightRgn[1] } + {first Update event will draw everything in our game window } + MainEventLoop; + CloseStuff; +END. diff --git a/Duane Blehm's Code/StuntCopter Æ’/StuntCopter.shapes b/Duane Blehm's Code/StuntCopter Æ’/StuntCopter.shapes new file mode 100755 index 0000000000000000000000000000000000000000..56fd984c605055dc17e34d1ed719b5c21965c7bc GIT binary patch literal 14636 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 literal 0 HcmV?d00001 diff --git a/Duane Blehm's Code/Zero GravityÆ’/About Zero files.. b/Duane Blehm's Code/Zero GravityÆ’/About Zero files.. new file mode 100755 index 0000000..5687c16 --- /dev/null +++ b/Duane Blehm's Code/Zero GravityÆ’/About Zero files.. @@ -0,0 +1 @@ +About the ZeroGravity files: 'Game Animation' is a 'FullPaint' document illustrating the way animation is done in the ZeroGravity Chamber. 'About Zero Animation' is a MacWrite document that describes ZeroGravity animation. 'ZeroGravity.Pas' is an 'Edit' text file containing pascal source code to be compiled by the Pascal compiler. 'ZeroGravity.R' is an 'Edit' text file containing RMaker source code to be compiled by RMaker. 'ZeroGravity/Rsrc' is a resource document containing resources built with ResEdit, the resource editor. These resources are 'included' when ZeroGravity.R is compiled by RMaker. 'ZeroGravity' is our application... the result of Link. \ No newline at end of file diff --git a/Duane Blehm's Code/Zero GravityÆ’/Game Animation b/Duane Blehm's Code/Zero GravityÆ’/Game Animation new file mode 100755 index 0000000000000000000000000000000000000000..700f448db7f33239ea4097849f2d1c4110315cdb GIT binary patch literal 15095 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 asvfaNQZE0ST6?1&|JTTW?ZAI_2mUWKr|VMy literal 0 HcmV?d00001 diff --git a/Duane Blehm's Code/Zero GravityÆ’/ZeroGravity b/Duane Blehm's Code/Zero GravityÆ’/ZeroGravity new file mode 100755 index 0000000..e69de29 diff --git a/Duane Blehm's Code/Zero GravityÆ’/ZeroGravity.R b/Duane Blehm's Code/Zero GravityÆ’/ZeroGravity.R new file mode 100755 index 0000000..7db72d4 --- /dev/null +++ b/Duane Blehm's Code/Zero GravityÆ’/ZeroGravity.R @@ -0,0 +1,35 @@ +* ZeroGravity.R + +ZeroGravity.rsrc + +TYPE ZGRV = STR + ,0 +ZeroGravity ver1.0, by Duane Blehm, 2/12/87 + +TYPE MENU + ,1 +\14 + About Zero... + (- + + ,256 +File + Quit /Q + + ,257 +Options + Help... + LoScore... + ! Sound + + ,258 +Works + Peek OffScreen + Source Code... + + ,259 +(Any Key to Exit) + Hi! + +* the rest of the resources where built with ResEdit +INCLUDE ZeroGravity/Rsrc diff --git a/Duane Blehm's Code/Zero GravityÆ’/ZeroGravity.pas b/Duane Blehm's Code/Zero GravityÆ’/ZeroGravity.pas new file mode 100755 index 0000000..7bf664d --- /dev/null +++ b/Duane Blehm's Code/Zero GravityÆ’/ZeroGravity.pas @@ -0,0 +1,1906 @@ +Program ZeroGravity;{Copyright © 1986 by Duane Blehm, All Rights Reserved} + +{ Version 1.0 code enhancement,shrink pict resources...cover,mask,cntlbox} +{Format note: 'tabs' for this text should be set to '3'} + +USES MacIntf; {used for TML version 2.0,instead of the 'includes' directive} + +{$T APPL ZGRV set the TYPE and CREATOR} +{$B+ set the application's bundle bit } +{$L ZeroGravity.rsrc} { Link resource file } + +CONST + WindResId = 128; {Window Resource} + + lastMenu = 5; {Number of Menus} + appleMenu = 1; + fileMenu = 256; {Menu Resource Id's} + optionMenu = 257; + worksMenu = 258; + messageMenu = 259; + + {Control Resources} + pressResume = 130; + pressEnd = 131; + + Disable = 255; {disable button controls,i-322} + Enable = 0; + maxint = 32767; + Pi = 3.141593; + Decimal = '.'; + +TYPE + PilotActs = (InChamber,OpenDoors,FreeFlight,EnterLock,Resting); + SoundList = (AirDoor,BigDoor,Game,GravTone,Buzz,Blue,Silence); + + PictureList = (Pilot,BigPilot,Pod,Door,Star,Flip,BigFlip,Numeral, + BigChamber,TimerBox,TargetBox,AirLock,ScoreBox,Mask,Title, + CntlBox,Cover); + {2/14/87 note: Cntlbox... will use QuickDraw Commands + also will shrink Mask in resource and expand it later..all to save + on size of resources and application size!} + + DialogList = (Help,About,Name,LScore,SCode,BMap); + + {We used MacroMind's 'Music to Video' utility to convert Blue Danube notes + into a resource... then did some compacting,etc. to come up with our 'SONG' + resource which contains notes for use with the FourTone synthesizer} + + SongRec = Record {we'll import a song record from our 'SONG' resource file} + noteCount:integer;{how many notes in this song} + pitch:array[1..160,1..4] of Longint;{160 notes,4 voices} + duration:array[1..160] of integer;{how many ticks will pitch play} + end; + + SongPtr = ^SongRec; + SongHandle = ^SongPtr; + + Force = Record {will contain facts about force acting on Pilot in Chamber} + magH,magV: integer; {horizontal,vertical magnitude of force} + duration: integer; {how many loops will force be in effect} + liteNdx:integer; {index to array of rects used to draw lites} + end;{of record} + + ScoreNText = Record {we're keeping our scores in a resource} + nameStr:Str255; + score: Real; + end; + + ScoreBlk = Array[1..3,1..3] of ScoreNText;{3 difficultys,3 names per diff.} + + ScorePtr = ^ScoreBlk; + + +VAR + tDialPeek: DialogPeek; {so we can access TextH field of dialogrec} + FontFacts: FontInfo; {so we can change TEHandle size stuff} + MouseLoc,tpoint: Point; + FigureLoScore: boolean; {if true-track loscores; if false-don't bother} + ScoreControl: array[2..3] of Handle;{radio buttons,LoScoreDialog} + ScoreHandle: Handle; {handle to our LoScore resource data} + NameHandle: Handle; {Handle to textitem in NameDialog box} + NameString: Str255; {will hold LoScore name from one time to next} + WindFrame: array[1..16] of Rect;{array frame rects around window} + PauseUnderWay: Boolean; {flag if pause} + LastPilot: Rect; {last location of Pilot} + OffPatch, {Pilot sized rect. over OffChamber shape} + OffPilotMask: Rect; {Pilot sized rect. over OffMask shape} + DoorOpening: Boolean; {true while airlock door is opening} + FlipInProgress: Boolean; {true if a flip is being animated} + OffHold: Rect; {Pilot sized rect. in OffScreen bitmap} + CntlCover: Rect; {used to draw gray over diff. Controls} + LoopCount: integer; {count each loop of game for avgscore} + WholePart, + FractPart: Longint; {used to draw real numbers} + RotateRight: Boolean; {will pilot flip rotate right or left?} + + tinyBonus,tinyPenalty, + tinyScore, + tinyLoScore: Rect;{four boxes for drawing text into box} + BonusRect,PenaltyRect, + ScoreRect, + LoScoreRect: Rect; {four boxes inside of scoreBox} + TimeLine: integer; {how many loops to increment per game} + TimeSlide: Rect; {rect inside TimerBox for drawing indictor} + Difficulty: integer; {1 issoeasy,2 issoso,3 issotuff} + Radio: Array[1..3] of ControlHandle;{difficulty buttons} + PicNdx: PictureList;{use as index to picture arrays} + R: Array[Pilot..Cover] of Rect;{all our pic/shape rectangles!} + Home: Point;{base for drawing shapes, R[BigChamber].topleft} + TargetNum: Rect;{destination for Numerals in TargetBox} + + ChamberRgn: RgnHandle;{mask drawing of chamber interior} + + TopCover,BotCover:Rect; {two halfs of the chamber cover that opens} + PilotStatus: PilotActs;{will determine which animation is going} + CoverLoops: integer; + + {all our offscreen rectangles} + OffPod: Array[1..2] of Rect; + OffDoor,OffFrame, + OffStar,InStar,OffStarWindow, + OffBigChamber, + OffTargetBox,OffMask, + OffTimerBox,OffScoreBox, + OffAirLock,OffTitle: Rect; + OffNumeral: Array[0..3] of Rect; + OffFlip: Array[1..7] of Rect; + OffBigFlip: Array[1..7] Of Rect; + OffDoorSlide: Rect; + OffPilot: array[1..3,1..3] of Rect; + OffBigPilot: array[1..3,1..3] of Rect; + + StarRgn,BigChamberRgn,{most regions are used to 'mask' during CopyBits} + LimitRgn, + DoorRgn,DoorSlideRgn, + CoverRgn,tRgn: RgnHandle; + StarBox: Rect; + + TargetRgn: Array[0..3] of RgnHandle;{Rgns for finding subscore} + Bonus, + Penalty: Longint;{running total of all subscores for game} + SubScore: Longint;{score for distance of pilot from scorecenter} + LoScore: ScorePtr;{access ScoreBlk in Resource file} + AvgScore: Real;{Score for game divided by no. of loops} + ScoreCenter: Point; + ScoreStr,tStr: Str255; + ScoreH,ScoreV: integer;{location of pen prior to drawing Score string} + + MouseRect, {limit mouse movement to this rect} + DeltaRect: Rect; {map rect for copter control;dh,dv} + BorderRect: Rect; + + PilotNdx: Point; {index for OffPilot array} + Dh,Dv: Integer; {Offset for Pilot rectangle/shape} + Grav: array[1..30] of Force; {will wind varibles for game} + GravNdx: integer;{index for Grav array} + Gh,Gv: Integer;{offset for gravity forces} + Sustain: integer;{how many loops will force work?} + Nh,Nv: integer;{net effect of Dh,Dv and Gh,Gv} + Lights: array[0..16] of Rect;{list of lights around chamber} + LightNdx: integer; + + myMenus: Array[1..lastMenu] of MenuHandle; + refNum,theMenu, + theItem: integer; + SoundOn: Boolean; {flag for sound off or on, a menu option} + Finished: Boolean; {terminate the program,quit} + GameUnderWay: Boolean; {are we playing or pausing?} + ClockCursor: CursHandle; {handle to watch cursor} + myWindow: WindowPtr; {our game window} + wRecord: WindowRecord;{allocate record on stack} + DialNdx: DialogList;{will step through our dialogs array} + myDialog: Array[Help..BMap] of DialogPtr; + myDialogRec: Array[Help..BMap] of DialogRecord; + Screen,DragArea: Rect; + mySize: Size; {longint for CompactMem call} + + OffScreen,OldBits, + InScreen: BitMap; {for drawing into offscreen} + SizeOfOff: Size; {Size offscreen bitmap} + OffRowBytes: Integer; + + pPict: Array[Pilot..CntlBox] of PicHandle;{array of pictures} + + ResumeButton, + EndButton: ControlHandle; { handles to controlbuttons } + + aTick: Longint; {TickCount varible, sound delay} + + {Sound varibles} + Buff: Array[AirDoor..Buzz] of Longint;{for Sound buffers} + myPtr: Ptr; + myHandle: Handle; + Sound: Array[AirDoor..Blue] of FFSynthPtr;{FreeForm synthesizer sound} + BlueSynth: FTSynthPtr; {Blue is a FourTone sound} + BlueSound: FTSndRecPtr; {four FourTone Sounds} + SoundParmBlk: ParmBlkPtr; {used for PBWrite instead of StartSound} + WhichSound: SoundList; {which sound is being played?} + err: OSerr; + SawToothWave: wavePtr; + SquareWave: wavePtr; + ToneTicks,ToneDelay:Longint; + mySong: SongHandle; + mySongPtr: SongPtr; + NoteCount: Longint; + +{**********************************************} +procedure MoveRect(VAR aRect:Rect;h,v:integer;WhichCorner:integer); +{move aRect so that 'whichCorner' is alligned with the point h,v} +Begin + Case WhichCorner of + 1:Begin{aRect.topleft to h,v} + aRect.right := aRect.right - aRect.left + h; + aRect.bottom := aRect.bottom - aRect.top + v; + aRect.left := h; + aRect.top := v; + end; + 2:Begin{aRect.topright to h,v} + aRect.left := h - aRect.right + aRect.left;{h - width} + aRect.bottom := aRect.bottom - aRect.top + v; + aRect.right := h; + aRect.top := v; + end; + 3:Begin{aRect.bottomright to h,v} + aRect.left := h - aRect.right + aRect.left;{h - width} + aRect.top := v - aRect.bottom + aRect.top;{h - width} + aRect.right := h; + aRect.bottom := v; + end; + 4:Begin{aRect.bottomleft to h,v} + aRect.right := aRect.right - aRect.left + h; + aRect.top := v - aRect.bottom + aRect.top;{h - width} + aRect.left := h; + aRect.bottom := v; + end; + end;{of case whichmatch} +End; + +procedure DrawLoScores;{into loScoredialog window} +var + i,j:integer; +begin + {draw LoScores into Dialog window} + For i := 1 to 3 do begin + For j := 1 to 3 do begin + MoveTo((i-1)*160 + 10,j*16 + 60); + DrawString(LoScore^[i,j].nameStr); + + WholePart := trunc(LoScore^[i,j].score);{whole part of real number} + NumToString(WholePart,ScoreStr); + FractPart := Round((LoScore^[i,j].score-WholePart)*1000); + NumToString(FractPart,tStr); + While length(tStr) < 3 do tStr := concat('0',tStr);{ if fractpart< 0.1} + ScoreStr := concat(ScoreStr,Decimal,tStr); + MoveTo(i*160-10-StringWidth(ScoreStr),j*16+60); + DrawString(ScoreStr); + end; {for j} + end;{for i} +end;{procedure} + +procedure DrawIntegerIntoBox(theInteger:integer;theRect:Rect); +Begin + NumToString(theInteger,ScoreStr);{rom call.. convert integer into string} + MoveTo(theRect.right-StringWidth(ScoreStr),theRect.bottom); + EraseRect(theRect); + DrawString(ScoreStr); +end; + +procedure DrawScoreIntoBox(theScore:Real;theRect:Rect); +Begin + WholePart := trunc(theScore); {Whole&Fract Parts are Global Longint} + NumToString(WholePart,ScoreStr); + FractPart := Round((theScore-WholePart)*1000); + NumToString(FractPart,tStr); + While length(tStr) < 3 do tStr := concat('0',tStr);{ if fractpart< 0.1} + ScoreStr := concat(ScoreStr,Decimal,tStr); + MoveTo(theRect.right-StringWidth(ScoreStr),theRect.bottom); + EraseRect(theRect); + DrawString(ScoreStr); +End;{of procedure} + +procedure ProcessNewLoScore;{display new LoScore stuff and get name} +var + itemHit,i,index: integer; +Begin + {put up the dialog box... get nameStr} + Case Difficulty of + 1:ParamText('IsSoEasy','','','');{we're using the ^1 character, in Resource} + 2:ParamText('IsSoSo','','',''); + 3:ParamText('IsSoTuff','','','');{display difficulty string in DialogBox} + end;{of Case} + + ShowWindow(myDialog[Name]);{show the hidden dialog window} + SelectWindow(myDialog[Name]); + SetIText(NameHandle,NameString);{put default in text box} + SelIText(myDialog[Name],4,0,maxint);{select the text} + + Repeat + ModalDialog(Nil,itemHit);{Modal does an Update event for the dialog box} + + Until(itemHit = 1);{ok button} + + GetIText(NameHandle,NameString);{must be happy with text..so use it} + {Test the length of the text... shorten if its too long} + i := length(NameString); + While (StringWidth(NameString)> 86) do begin {limit width of string} + Dec(i); + NameString := copy(NameString,1,i);{drop one char off the string} + end; + + HideWindow(myDialog[Name]);{close the dialogwindow} + SelectWindow(myWindow); + + {sort the New LoScore} + index := 3;{we know that score is less than 3 already} + For i := 2 Downto 1 do + If AvgScore < LoScore^[Difficulty,i].score then index := i; + + i := 3; + While (i > index) do begin {switch old for new scores} + LoScore^[Difficulty,i] := LoScore^[Difficulty,i - 1]; + dec(i); + end;{While} + LoScore^[Difficulty,index].score := AvgScore; + LoScore^[Difficulty,index].nameStr := NameString; + + DrawScoreIntoBox(LoScore^[Difficulty,1].score,tinyLoScore);{lowest to scorebox} + + ChangedResource(ScoreHandle);{flag so we will write out changes on Quit} +End;{of procedure} + +procedure CreateLoScoreStuff; +{load in our LoScores from resource file} +Begin + ScoreHandle := GetResource('LSCR',128);{we're keeping LoScores in Resource} + HLock(ScoreHandle);{lock it permanently.. for speed} + LoScore := ScorePtr(ScoreHandle^); +end; + +procedure WriteASoundBlock(aSoundPtr:Ptr;BuffSize:Longint;LastTick:Longint); +{make changes to our SoundParmBlk and then start the sound,the lasttick pause +is included due to occassional buzz/click/or worse if sound is written +immediately.. might be because Sound Driver set ioResult to zero before +the other soundstuff was complete.. and we happened to peek at it at just +the wrong moment} +Begin + SoundParmBlk^.iobuffer := aSoundPtr;{set pointer to our sound} + SoundParmBlk^.ioreqcount := BuffSize;{size of our sound buffer} + Repeat Until(TickCount > LastTick);{we'll wait a tick before writing sound} + err := PBWrite(SoundParmBlk,true);{start the sound, asynch} +end; + +procedure InitialFourToneSound; +{Set NoteCount to first pitch and duration of our Song array (loaded from +resource file), load that data into BlueSound record and start the sound. +The varible ToneDelay is checked on each event loop, will flag if another note +needs to be loaded into BlueSound. We're loading in TakeCareSound...,if +BlueSound duration runs out then the Song is restarted from the top.} +var + i:integer; +Begin + NoteCount := 1; + + BlueSound^.sound1Rate := mySongPtr^.pitch[NoteCount,1]; + BlueSound^.sound2Rate := mySongPtr^.pitch[NoteCount,2]; + BlueSound^.sound3Rate := mySongPtr^.pitch[NoteCount,3]; + BlueSound^.sound4Rate := mySongPtr^.pitch[NoteCount,4]; + BlueSound^.duration := 80;{none of our notes is over 60 ticks long} + + ToneDelay := mySongPtr^.duration[NoteCount] + TickCount; + + If SoundOn then + WriteASoundBlock(ptr(Sound[Blue]),SizeOf(Sound[Blue]^),TickCount); +End;{of Procedure} + + +procedure CreateSound; +Var + i,j,k: integer; +Begin + {load Blue Danube from resource file} + mySong := SongHandle(GetResource('SONG',524));{this is BlueDanube notes} + HLock(Handle(mySong));{we're locking it permanently} + mySongPtr := SongPtr(mySong^); + + new(SawToothWave); {wavePtr...a SawToothWave form for Blue sound} + new(SquareWave); {wavePtr...a squarewave form for Blue sound} + for i := 0 to 127 do {build our four tone waves} + begin + SawToothWave^[i] := 2*i;{sort of a raspy sound....} + SawToothWave^[i+128] := 0; + SquareWave^[i] := 0; + SquareWave^[i+128] := 192;{height of Square determines Loudness} + end; + + {we'll coerce Blue to FreeForm pointer throughout the program just so we + can use WhichSound and our SoundList type later on....} + new(BlueSynth); {my FTSynthPtr, FourTone Synthesizer} + BlueSynth^.mode := ftMode; + + {note: the duration field must be reset after each Bluesound as the driver + decrements its value} + + new(BlueSound);{our fourtone sound} + BlueSound^.sound1Phase := 0; + BlueSound^.sound2Phase := 128; + BlueSound^.sound3Phase := 128; {out of phase just for fun} + BlueSound^.sound4Phase := 0; + BlueSound^.sound1Wave := SawToothWave; + BlueSound^.sound2Wave := SawToothWave; + BlueSound^.sound3Wave := SquareWave; + BlueSound^.sound4Wave := SquareWave; + + {must make sndRec point to our Sound} + BlueSynth^.sndRec := BlueSound; + Sound[Blue] := FFSynthPtr(BlueSynth);{its just a pointer.. so coerce it} + + Buff[AirDoor] := 1486;{size all the freeform buffers} + Buff[BigDoor] := 3706;{size should be multiple of 370 plus 6 bytes} + Buff[Game] := 3706; {6 bytes for mode and count fields} + Buff[GravTone] := 1486; + Buff[Buzz] := 1486; + + {now create all the FreeForm sounds....} + For WhichSound := AirDoor to Buzz do begin {they all have these in common} + myHandle := NewHandle(Buff[WhichSound]);{new block for our sound} + HLock(myHandle); {we're locking the blocks permanently!!} + myPtr := myHandle^; {dereference the handle} + Sound[WhichSound] := FFSynthPtr(myPtr); + Sound[WhichSound]^.mode := ffMode; + {knock off 6 bytes for mode & count.. plus 1 for switch to Zero base} + Buff[WhichSound] := Buff[WhichSound] - 7; + end; + + {AirDoor Stuff} + Sound[AirDoor]^.count := FixRatio(1,6);{see the Sound Driver stuff} + j := 0; + While j<= Buff[AirDoor] do Begin + Sound[AirDoor]^.WaveBytes[j] := abs(Random) div 1024; {fill up the buffer} + inc(j); + end; { of while} + + {BigDoor sound} + Sound[BigDoor]^.count := FixRatio(1,2); + j := 0; + While j<= Buff[BigDoor] do Begin + If j< 2000 then i := abs(Random) div 1024; {random number 0 to 64} + If j = 2000 then i := 127; + if (j mod 127 = 0) and (i=127) then i := 0 + else if (j mod 127 = 0) and (i=0) then i := 127; + Sound[BigDoor]^.WaveBytes[j] := i; {fill up the buffer} + inc(j); + end; { of while} + + {Game background sound} + Sound[Game]^.count := FixRatio(1,8); {fixed point notation} + j := 0; + k := 1; + While j<= Buff[Game] do Begin + If k > 0 then i := (abs(Random) div 1024) + 127; + If k > 10 then i := 96; + If k > 20 then i := 159; + If k > 30 then k := 0; + Sound[Game]^.WaveBytes[j] := i; {fill up the buffer} + inc(k); + inc(j); + end; { of while} + + {GravTone when Force Changes sound...} + {We'll set the Count Field each time we play a tone..in AnimateOneLoop} + j := 0; + i := 0; + k := 0; + While j<= Buff[GravTone] do Begin {Square wave with freq of 128 bytes} + Sound[GravTone]^.WaveBytes[j] := i; + If k = 64 then i := 255; + If k = 128 then begin + k := 0; + i := 0; + end;{if k} + inc(k); + inc(j); + end; { of while} + + {Buzz Sound during penaltys against the chamber wall} + Sound[Buzz]^.count := FixRatio(1,2); {fixed point notation} + j := 0; + i := 0; + While j<= Buff[Buzz] do Begin + Sound[Buzz]^.WaveBytes[j] := i; + If i < 255 then inc(i) else i := 0;{SawTooth wave} + inc(j); + end; { of while} + + {create our Sound Parameter block for use with PBWrite} + new(SoundParmBlk); + with SoundParmBlk^ do begin {see Apple tech note 19, PBWrite vs. StartSound} + iocompletion := nil; + iorefnum := -4; + {we'll poke in the pointers and size stuff in WriteASoundBlock} + ioresult := 0; {will Start sound ,MainEventLoop} + end; {of with} +end; + +procedure BuildGravArray(Diff:integer);{Diff is difficulty} +{build array of 30 forces to be used during game} +var + mag,dir: real; + maxmag,maxdir,maxtime,mintime:real; + i:integer; +Begin + maxmag := diff + 1.5; {maximum magnitude of vector} + maxdir := diff*Pi/3.0; {maximum change in angle of vector} + maxtime := 30.0/diff; {maximum number of loops force will last} + minTime := 15.0/diff; {minimum loops force will last} + dir := abs(Random/(maxint/2*Pi));{set a random angle to start} + For i := 1 to 30 do begin + mag := abs(Random/(maxint/maxmag));{magnitude of force vector} + If mag < 1.0 then mag := 1.0; + dir := abs(dir + Random/(maxint/maxdir));{angle of force in radians} + If dir > 2*Pi then dir := dir - 2*Pi; + Grav[i].magH := round(mag*cos(dir));{x axis component of force} + Grav[i].magV := round(mag*sin(dir));{y axis component of force} + Grav[i].duration := round(abs(Random/(maxint/(maxtime-mintime)))+mintime); + Grav[i].liteNdx := round(dir/(2*Pi/16.0));{which lite to light?} + end;{for i := } +End; + +procedure CreateWindow;{windows,dialogs} +var + tRect: Rect; +Begin + myWindow := GetNewWindow(WindResId,@wRecord,Pointer(-1)); + SetRect(tRect,0,0,600,400);{this will clip OffScreen bitMaps as well!!} + + {remember: Dialog itemlists should be purgable, dialogs invisible} + SetDAFont(202);{Stuttgart font for all the dialogs...} + For DialNdx := Help to BMap do begin {read all the dialogs into array} + myDialog[DialNdx] := + GetNewDialog(ord(DialNdx)+129,@myDialogRec[DialNdx],myWindow); + SetPort(myDialog[DialNdx]); + ClipRect(tRect);{set clip to smaller size..} + TextSize(9); {size of font} + end; + + {editText item TextHandle controls the font stuff in the NameDialog box} + GetFontInfo(FontFacts);{will get fontstuff from current grafport(BMap)} + SetPort(myDialog[Name]);{has a editable text item...effects Text} + tDialPeek := DialogPeek(myDialog[Name]);{coerce pointer} + tDialPeek^.textH^^.txSize := 9;{see TextHandle stuff,changing font size} + tDialPeek^.textH^^.fontAscent := FontFacts.ascent; + tDialPeek^.textH^^.lineHeight := FontFacts.ascent + FontFacts.descent; + + ShowWindow(myWindow);{done so back to myWindow...} + SetPort(myWindow); + ClipRect(tRect); {i-166, set cliprgn to small rgn} + TextFont(202);{Stuttgart font,installed in resource file} + TextSize(9); +end; + +procedure CreateControls; +var + i,width: integer; +Begin + ResumeButton := GetNewControl(pressResume,myWindow); + EndButton := GetNewControl(pressEnd,myWindow); + {load Difficulty buttons,locate them later in CntlBox rectangle} + For i := 1 to 3 do Radio[i] := GetNewControl(132 + i,myWindow); +End; + +procedure CreatePictures; {get all the PICT's from resource file} +{we've created a type called PictureList so that we can access the +PicHandle and Rect arrays by 'title' instead of a number,also +all Picture.picframes are preset in resource to proper coordinates for +drawing into OffScreen bitmap otherwise they'd have to be 'Located' first.} +var + tRect:Rect; +Begin + For PicNdx := Pilot to Title do begin {almost all of PictureList..} + pPict[PicNdx] := GetPicture(ord(PicNdx) + 128);{get picture} + R[PicNdx] := pPict[PicNdx]^^.picFrame;{get Rect for picture} + end; + + {create CntlBox picture... just a frame} + SetRect(R[CntlBox],0,0,97,59);{size of CntlBox} + tRect := R[CntlBox]; + InSetRect(tRect,2,2); + pPict[CntlBox] := OpenPicture(R[CntlBox]); + EraseRect(R[CntlBox]); + FrameRect(R[CntlBox]); + FrameRoundRect(R[CntlBox],20,20); + FrameRect(tRect); + ClosePicture; +end; + +procedure CreateOffScreenBitMap; {see CopyBits stuff,also tech.note 41} +var + bRect: Rect; +Begin + {OffScreen BitMap stuff, will hold all our shapes for animation} + SetRect(bRect,0,0,320,296); { drawing area,size to contain all pics } + with bRect do begin + OffRowBytes := (((right - left -1) div 16) +1) * 2;{has to be even!} + SizeOfOff := (bottom - top) * OffRowBytes; + OffSetRect(bRect,-left,-top);{move rect to 0,0 topleft} + end; { of with } + + OffScreen.baseAddr := QDPtr(NewPtr(SizeOfOff)); + OffScreen.rowbytes := OffRowBytes; + OffScreen.bounds := bRect; + + {InScreen BitMap, Shapes are 'overlaid' in InScreen, then go to myWindow} + bRect := myWindow^.portRect;{ drawing area same as our onscreen window! } + with bRect do begin + OffRowBytes := (((right - left -1) div 16) +1) * 2;{has to be even!} + SizeOfOff := (bottom - top) * OffRowBytes; + OffSetRect(bRect,-left,-top); + end; { of with } + + InScreen.baseAddr := QDPtr(NewPtr(SizeOfOff)); + InScreen.rowbytes := OffRowBytes; + InScreen.bounds := bRect; +End; + +procedure DrawPicsIntoOffScreen; +{watch out for clipping of portRect,visRgn,& clipRgn of grafport record} +var + tRect:Rect; +Begin + OldBits := myWindow^.portBits; {preserve old BitMap} + tRect := myWindow^.portRect; + SetPortBits(OffScreen); { our new BitMap } + PortSize(400,330);{adjust portRect,visRgn & clipRgn for larger draw area} + CopyRgn(myWindow^.visRgn,tRgn); + CopyRgn(myWindow^.clipRgn,myWindow^.visRgn); + + FillRect(OffScreen.bounds,white); {erase our new BitMap to white} + + {All our Pictures were copied from a drawing of the bitmap in FullPaint + (the bitmap was located UpperLeft on the page) into the + ScrapBook. Then transfered from the ScrapBook to PICT resources with + ResEdit. By doing this the Picture.picFrame is already set to + Coordinates of picture location in OffScreen. OtherWise all Rects + would have to be moved into correct position before drawing.} + + For PicNdx := Pilot to Title do begin + DrawPicture(pPict[PicNdx],R[PicNdx]); {draw all the pictures} + ReleaseResource(handle(pPict[PicNdx])); {done so dump them} + end; + + {we've dumped the pictures so how about compacting the heap before loading + other stuff, like all those sound buffers we're going to lock down?} + mySize := CompactMem(1024);{force compaction of the heap...???} + + myWindow^.portRect := tRect; {restore old portRect} + CopyRgn(tRgn,myWindow^.visRgn);{restore old visRgn} + SetPortBits(OldBits); {restore old bitmap} +end; + +procedure CreateOffScreenRects; +{ where are all those shapes? locate all the shapes in the OffScreen bitmap +by defining the rectangles that contain them. We'll use the OffScreen rects +as the 'Source' in Copybits. Probably would be more efficent to have all +OffScreen Rects in a list like our pict Rects and have them predefined in +a resource file... then just load in the whole bunch all at once. } +var + i,j: integer; + tRect: Rect; +Begin + OffBigChamber := R[BigChamber]; + + tRect := R[Pilot]; {locate OffPilot shapes} + tRect.right := tRect.left + 19; + tRect.bottom := tRect.top + 19; {size of one pilot} + For i := 1 to 3 do begin + For j := 1 to 3 do begin + OffPilot[j,i] := tRect;{load 9 shapes} + tRect.left := tRect.left + 19; + tRect.right := tRect.right + 19; + end;{for j} + MoveRect(tRect,R[Pilot].left,tRect.bottom,1);{next row} + end;{for i} + R[Pilot] := tRect;{resize Pilot to a single shape} + + tRect := R[BigPilot]; {locate OffBigPilot shapes} + tRect.right := tRect.left + 22; + tRect.bottom := tRect.top + 22; {size of one BigPilot} + For i := 1 to 3 do begin + For j := 1 to 3 do begin + OffBigPilot[j,i] := tRect;{9 shapes} + tRect.left := tRect.left + 22; + tRect.right := tRect.right + 22; + end;{for j} + MoveRect(tRect,R[BigChamber].right,tRect.bottom,1); + end;{for i} + R[BigPilot] := tRect;{resize to hold one BigPilot} + + tRect := R[Pod]; + tRect.right := tRect.left + 27; + OffPod[1] := tRect;{empty pod} + OffSetRect(tRect,26,0);{2 Pods one with pilot,one empty} + OffPod[2] := tRect; + R[Pod] := tRect; + + OffDoor := R[Door]; + OffDoor.right := OffDoor.left + 65; + OffFrame := R[Door]; + OffFrame.left := OffFrame.right - 33; + R[Door] := OffFrame; + OffDoorSlide := OffFrame;{DoorSlide will slide along OffDoor} + OffSetRect(OffDoorSlide,OffDoor.right-OffDoorSlide.right,0); + + OffStar := R[Star]; + SetRect(tRect,0,0,38,38); + OffStarWindow := tRect; + MoveRect(OffStarWindow,OffStar.right,OffStar.top,2); + InStar := OffStarWindow; + + tRect := R[BigFlip]; + tRect.right := tRect.left + 22;{width of one flip} + For i := 1 to 7 do begin + OffBigFlip[i] := tRect; + tRect.left := tRect.left + 22; + tRect.right := tRect.right + 22; + end;{for i} + OffHold := tRect;{will hold last inscreen during freeflight animation} + MoveRect(OffHold,OffPod[2].right,R[TargetBox].bottom,1); + + tRect := R[Flip]; + tRect.right := tRect.left + 19;{width of one flip} + For i := 1 to 7 do begin + OffFlip[i] := tRect; + tRect.left := tRect.left + 19; + tRect.right := tRect.right + 19; + end;{for i} + OffPatch := tRect;{will be used to refresh background under pilot} + OffPilotMask := tRect;{will be used to mask target over pilot} + + OffAirLock := R[AirLock]; + OffTargetBox := R[TargetBox]; + + OffScoreBox := R[ScoreBox]; + OffTimerBox := R[TimerBox]; + OffTitle := R[Title]; + + tRect := R[Numeral]; + tRect.right := tRect.left + 20; + for i := 0 to 3 do begin + OffNumeral[i] := tRect; + tRect.left := tRect.left + 20; + tRect.right := tRect.right + 20; + end;{for i} + TargetNum := tRect; + + {expand Mask to size of BigChamber for OffPilotMask} + i := R[Mask].left - R[BigChamber].left; + InsetRect(R[Mask],-i,-i); + OffMask := R[Mask]; +End; + +procedure CreateRegions; +var i: integer; +Begin + StarRgn := NewRgn;{rgn used to mask stars drawn into InScreen} + LimitRgn := NewRgn;{rgn used to limit Pilot movement to inside chamber} + DoorRgn := NewRgn; + CoverRgn := NewRgn;{rgn used to mask Cover doors over chamber} + tRgn := NewRgn;{temporary region} + ChamberRgn := NewRgn;{rgn used to mask to chamber} + BigChamberRgn := NewRgn;{a little larger than chamber} + DoorSlideRgn := NewRgn; + for i := 0 to 3 do TargetRgn[i] := NewRgn;{used to find points/score} +End; + +procedure DisplayDialog(WhichDialog:DialogList); +var + tRect,fRect: Rect; + itemHit,i,j: integer; + tPort: GrafPtr; +Begin + GetPort(tPort); + ShowWindow(myDialog[WhichDialog]); + SelectWindow(myDialog[WhichDialog]); + SetPort(myDialog[WhichDialog]); {so we can draw into our dialog window} + + Case WhichDialog of + Help: + ModalDialog(Nil,itemHit); {close it no matter what was hit} + About: + ModalDialog(Nil,itemHit); {close it no matter what was hit} + LScore:begin + DrawLoScores;{draw the scorestuff into the dialog box} + + Repeat + ModalDialog(Nil,itemHit); {find which button hit,OK or BACKFLIP} + + Case itemHit of + 2:begin{control button, start processing loScores} + SetCtlValue(ControlHandle(ScoreControl[2]),1);{set control true} + SetCtlValue(ControlHandle(ScoreControl[3]),0);{set control true} + FigureLoScore := True;{set the flag to true} + end; + 3:begin{Stop processing LoScores} + SetCtlValue(ControlHandle(ScoreControl[2]),0);{set control true} + SetCtlValue(ControlHandle(ScoreControl[3]),1);{set control true} + FigureLoScore := False;{set the flag to true} + end; + 6:begin{Reset the LoScores to defaults} + For i := 1 to 3 do + For j := 1 to 3 do begin + LoScore^[i,j].nameStr := 'Pilot';{set all nameStrings to pilot} + LoScore^[i,j].score := i + 1.0;{new loscores} + end; + InvalRect(myDialog[LScore]^.portRect);{modalDialog will redraw items} + EraseRect(myDialog[LScore]^.portRect); + DrawLoScores;{draw our reset scores back in} + DrawScoreIntoBox(LoScore^[Difficulty,1].score,tinyLoScore); + ChangedResource(ScoreHandle);{flag so we write out changes} + end;{case 6} + end; { of case itemHit} + + Until (itemHit = 1); {the ok button or 'enter' key} + end;{LScore} + SCode:{about the sourcecode} + ModalDialog(Nil,itemHit); {close it no matter what was hit} + BMap:begin{peek offscreen bitmap} + CopyBits(OffScreen,myDialog[BMap]^.portBits,OffScreen.bounds, + OffScreen.bounds,srcCopy,nil); {copy bitmap to dialog box} + ModalDialog(Nil,itemHit); {close it no matter what was hit} + end;{BMap} + end;{Case WhichDialog} + + HideWindow(myDialog[WhichDialog]); + SelectWindow(myWindow);{restore our game window} + SetPort(tPort);{restore port} +end; + +procedure DoMenuCommand(mResult:LongInt); +var + name: Str255; + tPort: GrafPtr; + i,h: integer; +Begin + theMenu := HiWord(mResult); + theItem := LoWord(mResult); + Case theMenu of + appleMenu: + Begin + GetPort(tPort); + If theItem = 1 then DisplayDialog(About) + Else begin + GetItem(myMenus[1],theItem,name);{must be a desk acc.} + refNum := OpenDeskAcc(name); + end; + SetPort(tPort); + End; + fileMenu: Finished := True; {quit this program} + optionMenu: + Case theItem of + 1:DisplayDialog(Help); + 2:DisplayDialog(LScore); + 3:Begin {toggle sound on or off} + If SoundOn then SoundOn := false else SoundOn := true; + CheckItem(myMenus[3],theItem,SoundOn);{check if true,none if false} + end; + end; { case theItem} + worksMenu: + Case theItem of + 1:DisplayDialog(BMap); + 2:DisplayDialog(SCode); + end;{case theItem} + End; + HiliteMenu(0); +End; + +procedure InitialThisGame;{set up for opening the coverdoors/starting game} +var i:integer; +Begin + MoveRect(R[Pilot],Home.h+65,Home.v+65,1);{locate pilot} + MoveRect(OffPilotMask,OffMask.left+65,OffMask.top+65,1);{synch with pilot} + Dh := 0;Dv := 0;{no pilot movement} + BuildGravArray(Difficulty);{create the forces for this difficulty} + GravNdx := 1;{force stuff} + Sustain := 0; + LightNdx := 0; + CoverLoops := 24; {number of loops that coverdoor animation will take} + PilotStatus := OpenDoors; {this will begin coverdoor animation in maineventloop} + SetPt(PilotNdx,2,2);{this is standing still shape} + Penalty := 0; + Bonus := 0;{score stuff} + TimeLine := TimeSlide.left - 1;{TimeLine will be coordinate and counter} + LoopCount := 1;{divided into score to find avg.score} + FlipInProgress := False; + err := PBKillIO(SoundParmBlk,false);{kill AirLock sound} + WhichSound := BigDoor; {will start BigDoor Sound} +end; + +procedure CloseTheCoverDoors; +Begin + TopCover.bottom := R[Cover].top + 69; + BotCover.top := R[Cover].bottom - 70; +End;{of CloseTheCover..} + +procedure TakeCareControls(whichControl:ControlHandle;localMouse:point); +var + ControlHit,i: integer; +Begin + ControlHit := TrackControl(whichControl,localMouse,nil); { Find out which} + If ControlHit > 0 then {i-417} + Begin + If whichControl = ResumeButton then {RESUME the game..} + Begin + InsertMenu(myMenus[5],0); {display exit message} + For i := 1 to 4 do DisableItem(myMenus[i],0); + DrawMenuBar; + HideControl(ResumeButton); + HideControl(EndButton); + GameUnderWay := True; {we're back into game mode} + PauseUnderWay := False; + HideCursor; + FlushEvents(mDownMask,0); {clear all mouseDowns} + End; + If whichControl = EndButton then {END current game...} + Begin + HideControl(ResumeButton);{hide the resume and end} + HideControl(EndButton); + InvalRect(myWindow^.portRect);{force redraw of all} + CloseTheCoverDoors; + {close the airlock doors just in case} + OffSetRect(OffDoorSlide,OffDoor.right-OffDoorSlide.right,0); + For i := 1 to 3 do HiliteControl(Radio[i],0);{enable controls} + EraseRect(CntlCover); + For i := 1 to 3 do ShowControl(Radio[i]); + PilotStatus := Resting;{just so drawupdate will handle controls ok} + PauseUnderWay := False; + WhichSound := Silence;{no sounds} + End; + For i := 1 to 3 do begin + If whichControl = Radio[i] then begin + SetCtlValue(Radio[Difficulty],0); {uncheck current button} + Difficulty := i; {this is our new difficulty from 1 to 3} + {check new button,(contrlMax field must be set to 1)} + SetCtlValue(Radio[i],1); + DrawScoreIntoBox(LoScore^[Difficulty,1].score,tinyLoScore); + end;{if which} + end;{for i} + End; {of If ControlHit} +End; { of procedure} + +procedure PauseThisGame; {called if a keydown during game} +var + i: integer; +Begin + err := PBKillIO(SoundParmBlk,false);{kill sound} + {copy current screen to InScreen, so update events are redrawn correctly} + CopyBits(myWindow^.portBits,InScreen,myWindow^.portRect, + InScreen.bounds,srcCopy,nil); + GameUnderWay := False; { halt animation } + ShowCursor; + ShowControl(ResumeButton); + ShowControl(EndButton); + DeleteMenu(MessageMenu); {remove exit message,i-354} + For i := 1 to 4 do EnableItem(myMenus[i],0);{show other menu options} + DrawMenuBar; + PauseUnderWay := True; +End; + +procedure InitialAirLock;{setup to start Airlock animation} +Begin + CopyBits(OffScreen,myWindow^.portBits,OffHold, + R[BigPilot],srcCopy,nil);{erase last pilot} + MoveRect(R[BigPilot],R[Door].left+3,R[Door].top+3,1);{pilot in front of door} + SetPt(PilotNdx,2,2);{this is standing still shape} + Dh := 0;Dv := 0; + PilotStatus := EnterLock;{will begin Airlock animation} + FlipInProgress := False; + OffSetRect(OffDoorSlide,OffDoor.right-OffDoorSlide.right,0);{DoorSlide to right} + DoorOpening := True;{flag if door is opening or closing}; + err := PBKillIO(SoundParmBlk,false);{kill Blue Danube sound} + WhichSound := AirDoor;{will start AirDoor Sound} +end;{procedure} + +procedure InitialFreeFlight;{on mousedown in Pod... begin Freeflight} +var + i:integer; +Begin + GameUnderWay := True; + InsertMenu(myMenus[5],0); + For i := 1 to 4 do DisableItem(myMenus[i],0); + DrawMenuBar; {display exit message} + For i := 1 to 3 do HiliteControl(Radio[i],255);{disable Controls} + FillRect(BonusRect,Gray); + FillRect(PenaltyRect,Gray);{gray out for nice dark background} + FillRect(ScoreRect,Gray); + FillRect(LoScoreRect,Gray); + FillRect(TargetNum,Gray); + + For i := 1 to 3 do HideControl(Radio[i]);{will generate update event} + BeginUpdate(myWindow);{clear Update stuff...} + EndUpDate(myWindow); + FlushEvents(updateMask,0);{clear Update stuff caused by HideControl} + + FillRect(CntlCover,Gray);{cover where the controls were} + CopyBits(OffScreen,myWindow^.portBits,OffPod[1], + R[Pod],srcCopy,nil);{empty Pod} + {copy myWindow to InScreen so we can do animation 'overlays' in InScreen} + CopyBits(myWindow^.portBits,InScreen,myWindow^.portRect, + myWindow^.portRect,srcCopy,nil); {copy screen to inscreen} + + MoveRect(R[BigPilot],R[Pod].left,R[Pod].bottom,4);{pilot on top of empty Pod} + {OffHold will hold a copy of background under the pilot} + CopyBits(InScreen,OffScreen,R[BigPilot],OffHold,srcCopy,nil); + SetPt(PilotNdx,2,2);{this is standing still shape} + PilotStatus := FreeFlight;{type of animation} + Dh := 0;Dv := 0; + FlipInProgress := False; + LoopCount := 1;{for flashing door} + HideCursor; {game mode,no normal mouse functions} + FlushEvents(mDownMask,0); {clear mousedowns} + + WhichSound := Blue;{Blue Danube song} + InitialFourToneSound;{start the song} +end; + +procedure BeginAFlip; +Begin {start a flip} + FlipInProgress := True; + If Dh>1 then begin {man is moving right so rotate flip right} + PilotNdx.h := 1;{set to first flip} + RotateRight := True;{will cause PilotNdx to be incremented} + end {if Dh>1} + else begin {else pilot will flip to the left} + PilotNdx.h := 7; + RotateRight := False;{will cause PilotNdx to be decremented} + end;{else} +end;{procedure} + +procedure TakeCareMouseDown(myEvent:EventRecord); +var + Location: integer; + WhichWindow: WindowPtr; + WhichControl: ControlHandle; + MouseLoc: Point; + WindowLoc: integer; + ControlHit: integer; +Begin + If GameUnderWay = True then {handle a game click} + Case PilotStatus of + InChamber,OpenDoors: BeginAFlip; + + FreeFlight:If RectInRgn(R[BigPilot],DoorRgn) then InitialAirLock + else BeginAFlip; + end {Case pilotStatus} + Else begin {Mouse is normal...handle normal functions} + MouseLoc := myEvent.Where; {Global coordinates} + WindowLoc := FindWindow(MouseLoc,WhichWindow); {I-287} + case WindowLoc of + inMenuBar: + DoMenuCommand(MenuSelect(MouseLoc)); + inSysWindow: + SystemClick(myEvent,WhichWindow); {i-441} + inContent: + If WhichWindow <> FrontWindow then SelectWindow(WhichWindow) + else + Begin + GlobaltoLocal(MouseLoc); + ControlHit := FindControl(MouseLoc,whichWindow,whichControl); + If ControlHit > 0 then TakeCareControls(whichControl,Mouseloc) + Else {check for click in Pod Rect, will begin freeflight} + If (PtInRect(MouseLoc,R[Pod])) and (not(PauseUnderWay)) + then InitialFreeFlight; + end; + end; {case of} + end; { of Else} +end; { TakeCareMouseDown } + +PROCEDURE TakeCareKeyDown(Event:EventRecord); +Var + CharCode: char; +Begin + CharCode := chr(LoWord(BitAnd(Event.message,CharCodeMask))); + + If BitAnd(Event.modifiers,CmdKey) = CmdKey then + DoMenuCommand(MenuKey(CharCode)) + Else If GameUnderWay then PauseThisGame;{pause with any other key press} +End; + +procedure TakeCareActivates(myEvent:EventRecord); +var + WhichWindow: WindowPtr; +Begin + WhichWindow := WindowPtr(myEvent.message); + SetPort(WhichWindow); +End; + +procedure OneTimeGameStuff; {set up the gamestuff only needed on startup} +var + Dest: Point; + i,j,width,dh,dv,h,v:integer; + tRect:Rect; +Begin + SetRect(MouseRect,210,134,302,206); { this is for mapping control } + SetRect(DeltaRect,-4,-4,4,4); { this is for finding Pilot offset } + BorderRect := myWindow^.portRect; { limit pilot to this area } + InsetRect(BorderRect,10,10);{shrink by width of pilot} + MoveRect(BorderRect,0,0,1);{will use topleft} + + SetRect(tRect,32,32,463,274); {inside rect of borderframes} + For i := 1 to 16 do begin + WindFrame[i] := tRect;{we'll let update draw the border} + InsetRect(tRect,-2,-2); + end; + + OpenRgn; + FrameOval(InStar); + CloseRgn(StarRgn);{used as mask for drawing stars into chamber 'window'} + + OpenRgn; + SetRect(tRect,0,0,105,105); + FrameOval(tRect); + CloseRgn(LimitRgn);{used to limit pilot.topleft movement inside chamber} + + tRect := OffBigChamber; + InsetRect(tRect,13,13); + OpenRgn; + FrameOval(tRect); + CloseRgn(ChamberRgn); {used to mask Chamber} + + tRect := OffFrame; {DoorFrame} + InsetRect(tRect,3,3); + OpenRgn; + FrameRect(tRect); + CloseRgn(DoorRgn); {used to mask door during slide open} + + tRect := OffFrame; {DoorFrame} + OpenRgn; + FrameRect(tRect); + CloseRgn(DoorSlideRgn); {used to mask door during slide closed} + + {Locate BigChamber !!!!! note: was (32,30) in small window} + OffSetRect(R[BigChamber],64,66); + + {all other shapes are relative to R[BigChamber].topleft..call it 'Home'} + Home := R[BigChamber].topleft; + + OpenRgn; + FrameOval(R[BigChamber]); + CloseRgn(BigChamberRgn);{mask when drawing onto screen} + + OffSetRgn(StarRgn,Home.h+54-StarRgn^^.rgnBBox.left, + Home.v+54-StarRgn^^.rgnBBox.top); + StarBox := StarRgn^^.rgnBBox; + MoveRect(InStar,StarBox.right,StarBox.top,2); {InStar is dest.for OffStar} + + R[Cover] := R[BigChamber]; + InsetRect(R[Cover],4,4);{size of cover over the chamber} + TopCover := R[Cover];{locate... CloseTheCover.. will set proper size} + BotCover := R[Cover]; + CloseTheCoverDoors; + + OpenRgn; + FrameOval(R[Cover]); + CloseRgn(CoverRgn); {used to mask coverdoors} + + i := 13; {this is amount Chamber is inset from R[BigChamber]} + OffSetRgn(ChamberRgn,Home.h + i-ChamberRgn^^.rgnBBox.left, + Home.v + i-ChamberRgn^^.rgnBBox.top); + + OffSetRgn(LimitRgn,Home.h+12-LimitRgn^^.rgnBBox.left, + Home.v+12-LimitRgn^^.rgnBBox.top); + + {create target rings...concentric regions with limitRgn as outside} + CopyRgn(LimitRgn,TargetRgn[3]);{copy of LimitRgn for extreme target edge} + + For i := 3 downto 1 do begin + CopyRgn(TargetRgn[i],TargetRgn[i-1]); + InsetRgn(TargetRgn[i-1],10,10); + DiffRgn(TargetRgn[i],TargetRgn[i-1],TargetRgn[i]); + end;{for i} + + MoveRect(R[Mask],Home.h+24,Home.v+24,1); + + MoveRect(R[TargetBox],Home.h+147,Home.v-7,1); + MoveRect(TargetNum,R[TargetBox].left+14,R[TargetBox].top+17,1); + + MoveRect(R[AirLock],Home.h+157,Home.v+47,1); + MoveRect(R[Door],Home.h+171, + Home.v+67,1); + OffSetRgn(DoorRgn,R[Door].left+3-DoorRgn^^.rgnBBox.left, + R[Door].top+3-DoorRgn^^.rgnBBox.top); + + MoveRect(R[CntlBox],Home.h+208, + Home.v-14,1); + CntlCover := R[CntlBox]; + InsetRect(CntlCover,3,3);{will cover controls during freeflight} + + h := R[CntlBox].left + 9; + v := R[CntlBox].top + 6; + For i := 1 to 3 do begin + MoveControl(Radio[i],h,v);{locate Diff.buttons in Cntlbox} + v := v + 16; + end;{for i} + + MoveRect(R[ScoreBox],Home.h+313,Home.v-14,1); + {locate the four score areas in scorebox} + + BonusRect := R[ScoreBox]; + OffSetRect(BonusRect,3,16);{move topleft to bonus rect} + BonusRect.right := BonusRect.left + 62; + BonusRect.bottom := BonusRect.top + 18; + tinyBonus := BonusRect; + InsetRect(tinyBonus,7,5);{inset to reduce erase area,calculation for text} + PenaltyRect := BonusRect; + OffSetRect(PenaltyRect,0,41); + tinyPenalty := PenaltyRect; + InsetRect(tinyPenalty,7,5); + ScoreRect := PenaltyRect; + OffSetRect(ScoreRect,0,41); + tinyScore := ScoreRect; + InsetRect(tinyScore,7,5); + LoScoreRect := ScoreRect; + OffSetRect(LoScoreRect,0,41); + tinyLoScore := LoScoreRect; + InsetRect(tinyLoScore,7,5); + + MoveRect(R[TimerBox],Home.h+19,Home.v+166,1); + MoveRect(R[Title],R[TimerBox].left,R[TimerBox].top,1);{title on top of Timerbox} + SetRect(TimeSlide,0,0,99,7);{size of rect inside TimerBox} + MoveRect(TimeSlide,R[TimerBox].left+5,R[TimerBox].top+11,1); + MoveRect(R[Pod],Home.h+252,Home.v+144,1); + MoveRect(MouseRect,R[Pod].left-50,R[Pod].top-35,1);{center mouse on R[Pod]} + + Difficulty := 1;{Radio buttons come with 1 preset,IsSoEasy value = 1} + + CreateLoScoreStuff; + NameString := 'Pilot';{will start with pilot then use user input} + GetDItem(myDialog[Name],4,i,NameHandle,tRect);{get handle to text item} + {get handle to controls,Calculate LoScore buttons} + For i := 2 to 3 do GetDItem(myDialog[LScore],i,j, + ScoreControl[i],tRect); + SetCtlValue(ControlHandle(ScoreControl[2]),1);{set control true} + FigureLoScore := True;{flag to true,we will calculate LoScores as default} + Penalty := 0; + Bonus := 0; + AvgScore := 0.0; + PauseUnderWay := False; + PilotStatus := Resting;{for proper update drawing} + + CopyBits(OffScreen,InScreen,OffBigChamber,R[BigChamber],srcCopy,nil); + +End; { of OneTimeGameStuff } + +procedure MapMouseToDelta; +{change current mouse location into offset for pilot..Dh,Dv} +Begin + If FlipInProgress and (PilotStatus <> FreeFlight) then SetPt(MouseLoc,0,0) + Else begin {get user mouse input} + GetMouse(MouseLoc); { MouseLoc in Coords of currentGrafPort } + + {if out of bounds then limit MouseLoc to MouseRect extremes } + If MouseLoc.h > MouseRect.right then MouseLoc.h := MouseRect.right + else If MouseLoc.h < MouseRect.left then MouseLoc.h := MouseRect.left; + + If MouseLoc.v > MouseRect.bottom then MouseLoc.v := MouseRect.bottom + else If MouseLoc.v < MouseRect.top then MouseLoc.v := MouseRect.top; + + {now map MouseLoc from MouseRect into DeltaRect...MouseLoc becomes + request from user for new Offset for Pilot} + MapPt(MouseLoc,MouseRect,DeltaRect);{great!,thanks to Bill Atkinson} + end;{else} + {we want change of direction to be smooth so 'damp' by letting MouseLoc + change Dh,Dv only one unit per loop.} + If MouseLoc.h>Dh then inc(Dh) {MouseLoc.h won't be over 4 or under -4} + else if MouseLoc.h < Dh then dec(Dh); + If MouseLoc.v > Dv then inc(Dv) + else if MouseLoc.v < Dv then dec(Dv);{Dh,Dv are rate of pilot movement} +end; + +procedure AnimateStuffInCommon;{for both OneLoop & CoverDoors} +Begin + {test if new location is ok... not outside the chamber area} + tPoint.h := R[Pilot].left + Nh;{tPoint = temporary new pilot location} + tPoint.v := R[Pilot].top + Nv; + If not(PtInRgn(tPoint,LimitRgn)) then begin {new pilot is outside the Chamber!} + Repeat + Nh := Nh div 2;{move half way back to last pilot location} + Nv := Nv div 2; + tPoint.h := R[Pilot].left + Nh; + tPoint.v := R[Pilot].top + Nv; + Until(PtInRgn(tPoint,LimitRgn));{half offset until back inside limitRgn} + + inc(Penalty);{add to penalty,does nothing in CoverDoors} + + If SoundOn and (WhichSound <> Buzz) then begin {write out a buzzsound} + err := PBKillIO(SoundParmBlk,false);{kill current sound} + WriteASoundBlock(ptr(Sound[Buzz]),Buff[Buzz],TickCount); + WhichSound := Buzz; + end;{if soundOn} + end;{of if not PtInRect} + + {locate our 3 rects which move in sequence} + R[Pilot].left := R[Pilot].left + Nh; {faster than an OffsetRect} + R[Pilot].right := R[Pilot].right + Nh; + R[Pilot].top := R[Pilot].top + Nv; + R[Pilot].bottom := R[Pilot].bottom + Nv; + + OffPatch.left := OffPatch.left + Nh; {faster than an OffsetRect} + OffPatch.right := OffPatch.right + Nh; + OffPatch.top := OffPatch.top + Nv; + OffPatch.bottom := OffPatch.bottom + Nv; + + OffPilotMask.left := OffPilotMask.left + Nh; {faster than an OffsetRect} + OffPilotMask.right := OffPilotMask.right + Nh; + OffPilotMask.top := OffPilotMask.top + Nv; + OffPilotMask.bottom := OffPilotMask.bottom + Nv; + + {which shape to draw?,PilotNdx points to one of 9 shapes} + If not(FlipInProgress) then begin + If MouseLoc.h = 0 then PilotNdx.h := 2 + else if MouseLoc.h > 0 then PilotNdx.h := 3 else PilotNdx.h := 1; + If MouseLoc.v = 0 then PilotNdx.v := 2 + else if MouseLoc.v > 0 then PilotNdx.v := 3 else PilotNdx.v := 1; + end;{if not flip} + + If OffStarWindow.left = OffStar.left then + OffSetRect(OffStarWindow,OffStar.right-OffStarWindow.right,0) + Else OffSetRect(OffStarWindow,-1,0);{so we can animate our stars} + + {score ....start in center, if pilot is there fall thru else try next, + TargetRgn is an array of concentric rings} + SubScore := 0; + While (not(PtInRgn(R[Pilot].topleft,TargetRgn[SubScore]))) do begin + inc(SubScore); {find if pilot is in 0-3 target circles} + end; + + CopyBits(OffScreen,myWindow^.portBits,OffNumeral[SubScore], + TargetNum,srcCopy,nil);{proper numeral into target box} +end;{of procedure} + +procedure DrawTheCoverDoors; +Begin + OldBits := myWindow^.portBits; + SetPortBits(InScreen); + + FillRect(TopCover,dkGray); + FillRect(BotCover,dkGray); + MoveTo(TopCover.left,TopCover.bottom); + LineTo(TopCover.right,TopCover.bottom); + MoveTo(BotCover.left,BotCover.top); + LineTo(BotCover.right,BotCover.top); + + SetRectRgn(tRgn,TopCover.left,TopCover.bottom,TopCover.right,BotCover.top); + DiffRgn(CoverRgn,tRgn,tRgn);{find area for mask on coverdoors} + CopyBits(OffScreen,InScreen,OffMask,R[BigChamber],srcBic,tRgn); + + SetPortBits(OldBits); + CopyBits(InScreen,myWindow^.portBits,R[Cover],R[Cover],srcCopy,CoverRgn); +end; + +procedure AnimateOneLoop;{this is the main game loop} +var + i,j:integer; + tRect: Rect; +Begin + {OffPatch floats over OffBigChamber..used to restore background over + last pilot in InScreen} + CopyBits(OffScreen,InScreen,OffPatch,R[Pilot],srcCopy,nil); + lastPilot := R[Pilot];{keep a temporary copy of our last R[Pilot]} + + MapMouseToDelta;{get new Dh,Dv for pilot} + + If Sustain <1 then begin {then go get another Grav record,new force} + Gh := Grav[GravNdx].magH; + Gv := Grav[GravNdx].magV; + Sustain := Grav[GravNdx].duration;{how many loops will grav work} + + FillOval(Lights[LightNdx],dkgray);{erase last light} + LightNdx := Grav[GravNdx].liteNdx;{get next light index} + EraseOval(Lights[LightNdx]); + FrameOval(Lights[LightNdx]);{turn on new light} + If SoundOn then begin {write a Tone Sound for new force} + err := PBKillIO(SoundParmBlk,false);{kill current sound} + i := abs(Gh) + abs(Gv);{watch out for zero magnitude} + Sound[GravTone]^.count := FixRatio(i,2);{let magnitude influence GravTone} + WriteASoundBlock(ptr(Sound[GravTone]),Buff[GravTone],TickCount); + end;{if soundOn} + If GravNdx < 30 then inc(GravNdx) else GravNdx := 1;{30 elements in array} + end{if Sustain} + Else dec(Sustain); + Nh := Dh + Gh;{net effect of flight control and gravity} + Nv := Dv + Gv; + + AnimateStuffInCommon;{stuff in common to OneLoop and CoverDoors} + + Penalty := Penalty + SubScore; + inc(LoopCount); + DrawIntegerIntoBox(Penalty,tinyPenalty); + AvgScore := (Penalty - Bonus)/LoopCount; + If AvgScore < 0 then AvgScore := 0; + DrawScoreIntoBox(AvgScore,tinyScore); + + CopyBits(OffScreen,InScreen,OffStarWindow,InStar,srcCopy,StarRgn); + + If FlipInProgress then begin {draw the Pilot flip shapes, get next} + CopyBits(OffScreen,InScreen,OffFlip[PilotNdx.h], + R[Pilot],notSrcBic,nil); + If RotateRight then + If PilotNdx.h < 7 then inc(PilotNdx.h) {next flip shape} + else begin + FlipInProgress := False; {flip is over.. reset normal status} + Bonus := Bonus + Difficulty;{more points for higher level} + DrawIntegerIntoBox(Bonus,tinyBonus); + end{else} + else + If PilotNdx.h > 1 then dec(PilotNdx.h) {next flip shape} + else begin + FlipInProgress := False; {flip is over.. reset normal status} + Bonus := Bonus + Difficulty; + DrawIntegerIntoBox(Bonus,tinyBonus); + end;{else} + end { if flipinprogress} + Else {normal pilot... not flipping} + CopyBits(OffScreen,InScreen,OffPilot[PilotNdx.h,PilotNdx.v], + R[Pilot],notSrcBic,nil); {modes on page i-157} + + {copy pilot sized piece of mask over the new pilot,OffPilotMask + floats over OffMask shape in synch with Pilot and OffPatch} + CopyBits(OffScreen,InScreen,OffPilotMask,R[Pilot],srcOr,nil); + + UnionRect(LastPilot,R[Pilot],LastPilot);{rect that contains both Pilots} + UnionRect(LastPilot,Instar,LastPilot); {find rect that contains pilots & Stars} + + CopyBits(InScreen,myWindow^.portBits,LastPilot, + LastPilot,srcCopy,ChamberRgn); + + {monitor our game time...indicator below chamber} + If (LoopCount mod 6 = 0) then begin {we only draw a line every 6 loops} + inc(TimeLine);{one step closer to ending game} + + If TimeLine = TimeSlide.right then begin {then end this game } + GameUnderWay := False; { halt animation } + PilotStatus := Resting;{for draw update stuff} + err := PBKillIO(SoundParmBlk,false); + WhichSound := Silence; + ShowCursor; + DeleteMenu(MessageMenu); {remove exit message,i-354} + For i := 1 to 4 do EnableItem(myMenus[i],0);{show other menu options} + DrawMenuBar; + FillOval(Lights[LightNdx],dkGray);{erase last light} + FillRect(TargetNum,Gray);{Cover last Num...} + CloseTheCoverDoors; + DrawTheCoverDoors;{draw cover & mask} + + CopyBits(OffScreen,myWindow^.portBits,OffPod[2], + R[Pod],srcCopy,nil); + If (AvgScore < LoScore^[Difficulty,3].score) and + FigureLoScore then ProcessNewLoScore; + For i := 1 to 3 do HiliteControl(Radio[i],0);{enable controls} + InvalRect(CntlCover);{will force redraw of controls} + InvalRect(R[Title]);{will force redraw of Title over TimerBox} + end{then begin} + Else begin + moveTo(TimeLine,TimeSlide.top); + LineTo(TimeLine,TimeSlide.bottom);{draw the indicator line in timerbox} + end;{else} + end;{if LoopCount mod 6} +End;{of procedure} + +procedure AnimateFreeFlight;{animate Pilot over the entire window} +var + i,j:integer; + tRect: Rect; + Where:Longint; +Begin + MapMouseToDelta; + + tRect := R[BigPilot];{keep last location in temporaryRect} + R[BigPilot].left := R[BigPilot].left + Dh; {faster than an OffsetRect} + R[BigPilot].right := R[BigPilot].right + Dh; + R[BigPilot].top := R[BigPilot].top + Dv; + R[BigPilot].bottom := R[BigPilot].bottom + Dv; + + If not(PtInRect(R[BigPilot].topleft,BorderRect)) then begin{outside,find which} + If R[BigPilot].left > BorderRect.right then + OffSetRect(R[BigPilot],BorderRect.right-R[BigPilot].left,0); + If R[BigPilot].left < BorderRect.left then + OffSetRect(R[BigPilot],BorderRect.left-R[BigPilot].left,0); + If R[BigPilot].top > BorderRect.bottom then + OffSetRect(R[BigPilot],0,BorderRect.bottom-R[BigPilot].top); + If R[BigPilot].top < BorderRect.top then + OffSetRect(R[BigPilot],0,BorderRect.top-R[BigPilot].top); + end;{of if not PtInRect} + + {which shape to draw?} + If not(FlipInProgress) {no flip} then begin + If MouseLoc.h = 0 then PilotNdx.h := 2 + else if MouseLoc.h > 0 then PilotNdx.h := 3 else PilotNdx.h := 1; + If MouseLoc.v = 0 then PilotNdx.v := 2 + else if MouseLoc.v > 0 then PilotNdx.v := 3 else PilotNdx.v := 1; + end;{if not flip} + + CopyBits(OffScreen,InScreen,OffHold,tRect,srcCopy,nil);{restore inscreen} + CopyBits(InScreen,OffScreen,R[BigPilot],OffHold,srcCopy,nil);{save current} + + If FlipInProgress then begin + CopyBits(OffScreen,InScreen,OffBigFlip[PilotNdx.h], + R[BigPilot],notSrcBic,nil); + If RotateRight then + If PilotNdx.h < 7 then inc(PilotNdx.h) {next flip shape} + else FlipInProgress := False {flip is over.. reset freeflight status} + else + If PilotNdx.h > 1 then dec(PilotNdx.h) {next flip shape} + else FlipInProgress := False;{flip is over.. reset freeflight status} + end { if FlipInProgress} + Else {normal pilot... not flipping} + CopyBits(OffScreen,InScreen,OffBigPilot[PilotNdx.h,PilotNdx.v], + R[BigPilot],notSrcBic,nil); + + UnionRect(tRect,R[BigPilot],tRect);{Rect to contain both last and current} + + CopyBits(InScreen,myWindow^.portBits,tRect,tRect,srcCopy,nil); + + If LoopCount < 7 then inc(LoopCount) + else begin + InvertRect(R[Door]);{flashing Airlock door stuff} + LoopCount := 1; + {take care of offscreen stuff in case of invert on screen} + CopyBits(OffScreen,InScreen,OffHold,R[BigPilot],srcCopy,nil);{restore inscreen} + OldBits := myWindow^.portBits; + SetPortBits(InScreen); + InvertRect(R[Door]);{invert the patched Door in InScreen bitmap} + SetPortBits(OldBits); + CopyBits(InScreen,OffScreen,R[BigPilot],OffHold,srcCopy,nil);{save current} + end; + +End;{of procedure} + +procedure DrawAirLockShapes;{tRgn masks frame over or behind pilot} +Begin + CopyBits(OffScreen,InScreen,OffFrame,R[Door],srcCopy,nil); + CopyBits(OffScreen,InScreen,OffDoorSlide,R[Door],srcCopy,DoorRgn); + CopyBits(OffScreen,InScreen,OffBigPilot[PilotNdx.h,PilotNdx.v], + R[BigPilot],notsrcBic,tRgn); + CopyBits(InScreen,myWindow^.portBits,R[Door],R[Door],srcCopy,nil); +end; + +procedure AnimateAirLock; +var + i,j:integer; + MouseLoc,tpoint: Point; + tRect: Rect; +Begin + {find random movement for our Pilot while door is opening/closing} + SetPt(MouseLoc,Random div (Maxint div 2),Random div (Maxint div 2)); + If MouseLoc.h>Dh then inc(Dh) {MouseLoc.h won't be over 4 or under -4} + else if MouseLoc.h < Dh then dec(Dh); + If MouseLoc.v > Dv then inc(Dv) + else if MouseLoc.v < Dv then dec(Dv);{Dh,Dv are rate of pilot movement} + + R[BigPilot].left := R[BigPilot].left + Dh; {faster than an OffsetRect} + R[BigPilot].right := R[BigPilot].right + Dh; + R[BigPilot].top := R[BigPilot].top + Dv; + R[BigPilot].bottom := R[BigPilot].bottom + Dv; + + If R[BigPilot].left < R[Door].left then + OffSetRect(R[BigPilot],R[Door].left-R[BigPilot].left,0) + else If R[BigPilot].right > R[Door].right then + OffSetRect(R[BigPilot],R[Door].right-R[BigPilot].right,0); + If R[BigPilot].top < R[Door].top then + OffSetRect(R[BigPilot],0,R[Door].top-R[BigPilot].top) + else If R[BigPilot].bottom > R[Door].bottom then + OffSetRect(R[BigPilot],0,R[Door].bottom-R[BigPilot].bottom); + + If DoorOpening then begin {The door is opening} + If OffDoorSlide.left > OffDoor.left then begin {still sliding} + OffSetRect(OffDoorSlide,-1,0); {move it one to left} + RectRgn(tRgn,myWindow^.portRect);{whole screen,just so its not nil} + DrawAirLockShapes; + + end {if still sliding} + else begin {begin door closing stuff} + OffSetRgn(DoorSlideRgn,R[Door].right-DoorSlideRgn^^.rgnBBox.left, + R[Door].top-DoorSlideRgn^^.rgnBBox.top);{will mask pilot} + DoorOpening := False; + end;{else} + end {door is opening} + Else begin {Door is Closing} + If OffDoorSlide.right < OffDoor.right then begin {still sliding} + OffSetRect(OffDoorSlide,1,0); {move it one to right} + OffSetRgn(DoorSlideRgn,-1,0); {move it to left, will hide pilot} + DiffRgn(DoorRgn,DoorSlideRgn,tRgn);{pilot appears to be behind door} + + DrawAirLockShapes; + + end {if still sliding} + else InitialThisGame;{will begin coverdoor sequence and game} + end; {else door is closing} +End; { of procedure } + +procedure AnimateCoverDoors; +var + i,j:integer; + tRect: Rect; +Begin + MapMouseToDelta; + Nh := Dh;{net force and flight effects on Pilot} + Nv := Dv; + + AnimateStuffInCommon; + + CopyBits(OffScreen,InScreen,OffBigChamber,R[BigChamber],srcCopy,nil); + CopyBits(OffScreen,InScreen,OffStarWindow,InStar,srcCopy,StarRgn); + + If FlipInProgress then begin + CopyBits(OffScreen,InScreen,OffFlip[PilotNdx.h], + R[Pilot],notSrcBic,nil); {modes on page i-157} + If RotateRight then + If PilotNdx.h < 7 then inc(PilotNdx.h) {next flip shape} + else FlipInProgress := False {flip is over.. reset normal status} + else + If PilotNdx.h > 1 then dec(PilotNdx.h) {next flip shape} + else FlipInProgress := False; {flip is over.. reset normal status} + end { if flipinprogress} + Else {normal pilot... not flipping} + CopyBits(OffScreen,InScreen,OffPilot[PilotNdx.h,PilotNdx.v], + R[Pilot],notSrcBic,nil); {modes on page i-157} + + {copy just pilot sized piece of mask over the new pilot} + CopyBits(OffScreen,InScreen,OffPilotMask,R[Pilot],srcOr,nil); + + TopCover.bottom := TopCover.bottom - 3; + BotCover.top := BotCover.top + 3; + + DrawTheCoverDoors; + + If CoverLoops > 0 then dec(CoverLoops) + Else begin + PilotStatus := InChamber;{doors are open so begin the game animation} + EraseRect(BonusRect); + EraseRect(PenaltyRect); + EraseRect(ScoreRect); + EraseRect(LoScoreRect); + EraseRect(CntlCover); + For i := 1 to 3 do ShowControl(Radio[i]); + DrawScoreIntoBox(LoScore^[Difficulty,1].score,tinyLoScore); + CopyBits(OffScreen,myWindow^.portBits,OffTimerBox, + R[TimerBox],srcCopy,nil);{will erase Titlebox} + {sequence OffPatch and OffPilotMask with current R[Pilot]} + i := R[Pilot].left - Home.h; + j := R[Pilot].top - Home.v; + MoveRect(OffPatch,OffBigChamber.left+i,OffBigChamber.top+j,1); + err := PBKillIO(SoundParmBlk,false);{kill CoverDoors sound} + WhichSound := Game; {will start GameSound} + end;{of Else} +End;{of procedure} + +procedure CreateLightsArray;{array of 17 rects around chamber} +var + dir:real; + mag,i,centerH, + centerV: integer; + tpoint: Point; + tRect:Rect; +begin + SetRect(tRect,0,0,12,12); + dir := 0; + mag := 84;{radius to center of buttons} + centerh := R[BigChamber].left + ((R[BigChamber].right-R[BigChamber].left) div 2); + centerV := R[BigChamber].top + ((R[BigChamber].right-R[BigChamber].left) div 2); + + For i := 0 to 15 do begin + tPoint.h := round(mag * cos(i*2*Pi/16.0))+centerH-6;{-6 for half tRect} + tPoint.v := round(mag * sin(i*2*Pi/16.0))+centerV-6; + MoveRect(tRect,tpoint.h,tpoint.v,1); + Lights[i] := tRect; + end; {for i :=} + Lights[16] := Lights[0]; {0 radians is same as 2*Pi radians} +end; + +Procedure DrawUpDateStuff; +{will draw all our images in response to Update event,an Update event is +waiting for our newly opened window so will draw our first stuff too!} +var + tRect: Rect; + tpoint: Point; + i: integer; +Begin + {if the game is paused the screen has been saved in InScreen Bitmap} + If PauseUnderWay then CopyBits(InScreen,myWindow^.portBits, + InScreen.bounds,myWindow^.portRect,srcCopy,nil) {restore screen} + Else begin + For i := 16 downto 2 do FrameRect(WindFrame[i]); + FillRect(WindFrame[1],dkgray); + FrameRect(WindFrame[1]); + + CopyBits(OffScreen,myWindow^.portBits,OffBigChamber, + R[BigChamber],srcCopy,BigChamberRgn); + + DrawTheCoverDoors;{draw the Covers} + + For i := 0 to 15 do begin + FillOval(Lights[i],dkgray); + end;{for i :=} + + CopyBits(OffScreen,myWindow^.portBits,OffTargetBox, + R[TargetBox],srcCopy,nil); + CopyBits(OffScreen,myWindow^.portBits,OffAirLock, + R[AirLock],srcCopy,nil); + DrawPicture(pPict[CntlBox],R[CntlBox]); + If PilotStatus = FreeFlight then FillRect(CntlCover,gray);{update during freeflight} + CopyBits(OffScreen,myWindow^.portBits,OffScoreBox, + R[ScoreBox],srcCopy,nil); + + CopyBits(OffScreen,myWindow^.portBits,OffFrame, + R[Door],srcCopy,nil); + CopyBits(OffScreen,myWindow^.portBits,OffDoorSlide, + R[Door],srcCopy,DoorRgn);{mask to inside of door frame} + + Case PilotStatus of + InChamber:Begin {draw the timerBox instead of title,due to Switcher} + CopyBits(OffScreen,myWindow^.portBits,OffTimerBox, + R[TimerBox],srcCopy,nil); + tRect := TimeSlide;{indicator area} + tRect.right := TimeLine + 1; + FillRect(tRect,black); + end;{InChamber} + Otherwise CopyBits(OffScreen,myWindow^.portBits,OffTitle, + R[Title],srcCopy,nil); + end;{case Pilotstatus} + + CopyBits(OffScreen,myWindow^.portBits,OffPod[2], + R[Pod],srcCopy,nil); + + DrawIntegerIntoBox(Penalty,tinyPenalty); + DrawIntegerIntoBox(Bonus,tinyBonus); + DrawScoreIntoBox(AvgScore,tinyScore); + DrawScoreIntoBox(LoScore^[Difficulty,1].score,tinyLoScore); + end;{of Else} +end; + +procedure TakeCareUpdates(Event:EventRecord); +var + UpDateWindow,TempPort: WindowPtr; + itemHit: integer; + Test: Boolean; +Begin + UpDateWindow := WindowPtr(Event.message); + GetPort(TempPort); + SetPort(UpDateWindow); + BeginUpDate(UpDateWindow); + EraseRect(UpDateWindow^.portRect); + If UpDateWindow = myWindow then DrawUpDateStuff; + DrawControls(UpDateWindow); + EndUpDate(UpDateWindow); + SetPort(TempPort); +End; + +procedure TakeCareSoundStuff; +Begin + If SoundParmBlk^.ioResult < 1 then {sound is finished find another/play it} + Case WhichSound of + Blue: InitialFourToneSound; {Waltz quit.. so start again} + + Buzz:begin {buzz pilot touching wall sound,finished so go back to game} + WhichSound := Game; + WriteASoundBlock(ptr(Sound[Game]),Buff[Game],TickCount); + end;{buzz} + + AirDoor,BigDoor,Game: + WriteASoundBlock(ptr(Sound[WhichSound]),Buff[WhichSound],TickCount); + end {of case WhichSound} + Else If (WhichSound = Blue) and (TickCount > ToneDelay) then begin + inc(NoteCount); + BlueSound^.sound1Rate := mySongPtr^.pitch[NoteCount,1]; + BlueSound^.sound2Rate := mySongPtr^.pitch[NoteCount,2]; + BlueSound^.sound3Rate := mySongPtr^.pitch[NoteCount,3]; + BlueSound^.sound4Rate := mySongPtr^.pitch[NoteCount,4]; + BlueSound^.duration := 80; + + ToneDelay := mySongPtr^.duration[NoteCount] + TickCount; + + If mySongPtr^.noteCount = NoteCount then NoteCount := 0; + + end; {if TickCount} +End;{of procedure} + +procedure MainEventLoop; +var + myEvent: EventRecord; + i: integer; +Begin + InitCursor; + Repeat + SystemTask; + If GetNextEvent(EveryEvent,myEvent) then + Case myEvent.What of + mouseDown: TakeCareMouseDown(myEvent); + KeyDown: TakeCareKeyDown(myEvent); + ActivateEvt:TakeCareActivates(myEvent); + UpdateEvt:TakeCareUpdates(myEvent); + End {of Case} + Else {no event pending so lets do some game stuff} + Begin + If GameUnderWay then begin + Case PilotStatus of + InChamber: AnimateOneLoop;{animate Pilot in chamber, gamestuff} + OpenDoors: AnimateCoverDoors;{animate Chamber doors opening} + FreeFlight:begin {animate Pilot over entire window} + If not(SoundOn) then begin + aTick := TickCount; + Repeat Until(TickCount > aTick + 2);{slow down} + end; + AnimateFreeFlight; + end;{case 3}; + EnterLock:begin {animate pilot entering airlock door} + If not(SoundOn) then begin + aTick := TickCount; + Repeat Until(TickCount > aTick + 1);{slow down} + end; + AnimateAirLock; + end;{case 4} + end;{case PilotStatus} + + If SoundOn then TakeCareSoundStuff; + + end { if GameUnderWay} + + End; {else no event pending} + Until Finished; +End; + +procedure SetUpMenus; +var + i: integer; +Begin + myMenus[1] := GetMenu(appleMenu); {get menu info from resources} + AddResMenu(myMenus[1],'DRVR'); {add in all the DA's} + myMenus[2] := GetMenu(fileMenu); + myMenus[3] := GetMenu(optionMenu); + myMenus[4] := GetMenu(worksMenu); + myMenus[5] := GetMenu(MessageMenu); {this is the backspace message} + CheckItem(myMenus[3],3,True); {check the Sound item} + SoundOn := True; {sound will start on first begin} + For i := 1 to 4 do + begin + InsertMenu(myMenus[i],0); + end; + DrawMenuBar; +End; + +procedure CloseStuff; +var i:integer; +Begin + err := PBKillIO(SoundParmBlk,false);{kill sound before quitting} + WriteResource(ScoreHandle);{write out if changes were flagged..LoScore} +End; + +PROCEDURE InitThings; +Begin + InitGraf(@thePort); {create a grafport for the screen} + + MoreMasters; {extra pointer blocks at the bottom of the heap} + MoreMasters; {this is 5 X 64 master pointers} + MoreMasters; + MoreMasters; + MoreMasters; + + {get the cursors we use and lock them down - no clutter} + ClockCursor := GetCursor(watchCursor); + HLock(Handle(ClockCursor)); + + {show the watch while we wait for inits & setups} + SetCursor(ClockCursor^^); + + {init everything in case the app is the Startup App} + InitFonts; + InitWindows; + InitMenus; + TEInit;{for the Dialog stuff} + InitDialogs(Nil); + + Finished := False; {set terminator to false} + FlushEvents(everyEvent,0); {clear events} + Screen := ScreenBits.Bounds; { Get screen dimensions from thePort } +End; + +{Main Program begins here} +BEGIN + InitThings; + SetUpMenus; + CreateWindow; {load window,dialogs} + CreateControls; {our buttons, and radio controls} + CreateRegions; {newRgn for all our regions} + CreateOffScreenBitMap; {see Apple tech note 41,create OffScreen,InScreen} + CreatePictures; {load pictures from resources} + DrawPicsIntoOffScreen;{draw the pics into the OffScreen Bitmap} + CreateOffScreenRects; {set all rectangles for 'copybits' shape drawing} + CreateSound; {create all the sound buffers, etc} + OneTimeGameStuff; {Game varibles, scorebox stuff,etc} + CreateLightsArray; {array of rects for drawing indicator lights} + GameUnderWay := False;{click on Pod will begin a game sequence, mousedown event} + WhichSound := Silence; + For Dh := 1 to 3 do ShowControl(Radio[Dh]);{these are our difficulty controls} + MainEventLoop; {manage all user input until quit} + CloseStuff; {do this before quitting... always kill sound before quit} +END. diff --git a/Duane Blehm's Code/Zero GravityÆ’/ZeroGravity:Rsrc b/Duane Blehm's Code/Zero GravityÆ’/ZeroGravity:Rsrc new file mode 100755 index 0000000..e69de29 diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..5f4373c --- /dev/null +++ b/Makefile @@ -0,0 +1,16 @@ +# Tested only on Mac OS X, YMMV, etc + +all: unzip detab + +unzip: + unzip -o Duane\ Blehm\'s\ Code.zip >/dev/null + +detab: unzip + cp -Rp Duane\ Blehm\'s\ Code Duane\ Blehm\'s\ Code.bak + ( cd Duane\ Blehm\'s\ Code && find . -name '*.[pP]as' -exec tab2space -lf -t3 {} {} \; ) + ( cd Duane\ Blehm\'s\ Code && find . -name '*.[pP]as' -exec perl -i -p -e "s/ +\Z//" {} \; ) + ( cd Duane\ Blehm\'s\ Code && find . -name '*.[rR]' -exec tab2space -lf {} {} \; ) + ( cd Duane\ Blehm\'s\ Code && find . -name '*.txt' -exec tab2space -lf {} {} \; ) + ( cd Duane\ Blehm\'s\ Code && find . -exec touch -r ../Duane\ Blehm\'s\ Code.bak/{} {} \; ) + rm -r Duane\ Blehm\'s\ Code.bak + diff --git a/README.md b/README.md new file mode 100644 index 0000000..92f6845 --- /dev/null +++ b/README.md @@ -0,0 +1,87 @@ +# Duane Blehm's Code + +This is an archive of the Duane Blehm's source code. Duane Blehm was an +early game developer for the Macintosh. He released three games in the +1980's: +[Zero Gravity](http://www.macintoshrepository.org/4249-zero-gravity-), +[StuntCopter](http://www.macintoshrepository.org/5314-stuntcopter), and +[Cairo ShootOut!](http://www.macintoshrepository.org/4856-cairo-shootout-). + +As a preteen computer nerd and budding developer, I not only loved the +games, but also had an interest in how a real application was made. +The About screens for the games offered source code printouts and unlock +codes for a small fee, so I saved up my allowance for a month or two, +stuffed a few bills and a note into an envelope, and mailed it off. + +I received a reply about a year later. It was from Blehm's parents, +gently explaining that their son had passed away and they couldn't offer +the unlock codes. They returned my money. I was too young and lucky to +have much experience with death. When I read the news, I remember +feeling a pang of... something. I never forgot this feeling, and I +never forgot about the source code. + +Some years later (a little over fifteen of them), Apple released a +Newton that ran NeXTSTEP and had cell phone radio. I was done becoming +a programmer and on to becoming a better one. I thought that porting +Zero Gravity to the iPhone would be a fun project, and began looking for +the source code again so that I could get the physics exactly right. + +Despite the best efforts of a small LiveJournal community, I came up +empty. I had enough other projects that I lost interest in that one +for the time being. + +But, just like before, I never stopped thinking about the code. +I decided earlier this year that it had been long enough since my last +try, and in 2016 the venue of choice was Twitter. I pecked out a short +plea for help, and in a hail-mary attempt to reach someone who had some +idea of how to help, I cc'ed Avadis Tevanian, Jr., who most people know +as a longtime VP at Apple but I remember primarily as the developer of +a beloved Missile Command port called MacCommand, and John Calhoun, who +wrote the fantastic paper-airplane game Glider. + +Avi Tevanian doesn't tweet, really. But John Calhoun did. Suddenly I +had the source code. + +So here it is, offered without license or warranty, the code for all +three of Duane Blehm's releases. I've converted line endings to LF and +detabbed the files according to Blehm's preference for three-space tab +stops, and I wrote this README and a top-level Makefile, but the rest was +his and now it's ours. + +Rest in peace, Duane Blehm. Thanks for the games. + + +## Contents + + ├── Duane Blehm's Code Data forks + │   ├── Animation Æ’ + │   ├── Cairo Æ’ + │   ├── Copy Mask Æ’ + │   ├── Drag Piece Æ’ + │   ├── More Info* + │   ├── Regions Æ’ + │   ├── StuntCopter Æ’ + │   └── Zero GravityÆ’ + │ + ├── __MACOSX Resource forks + │   └── Duane Blehm's Code + │   ├── Animation Æ’ + │   ├── Cairo Æ’ + │   ├── Copy Mask Æ’ + │   ├── Drag Piece Æ’ + │   ├── More Info* + │   ├── Regions Æ’ + │   ├── StuntCopter Æ’ + │   └── Zero GravityÆ’ + │ + ├── Duane Blehm's Code.zip Original source dump + │ + ├── Makefile Run `make` to rebuild this archive + │ + └── README.md This file + + +## Maintainer + +Pete Gamache, [pete@gamache.org](mailto:pete@gamache.org). + diff --git a/__MACOSX/._Duane Blehm's Code b/__MACOSX/._Duane Blehm's Code new file mode 100644 index 0000000000000000000000000000000000000000..0b8a2bf31e10b47079f42cec81ba7e7c59b1d085 GIT binary patch literal 120 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}u^SMB_!U6Rz|hBF##qcam6_o`5HNy; TPzlG7kRYfCNC!k0suBhOUmOf( literal 0 HcmV?d00001 diff --git a/__MACOSX/Duane Blehm's Code/._.DS_Store b/__MACOSX/Duane Blehm's Code/._.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..09fa6bdda3a49951cf3fb7aa68796ee7d5c71310 GIT binary patch literal 120 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}u^SMB_!U6R09PRZ;$Z`hAt6CfagYwM HE_8JOM2!ci literal 0 HcmV?d00001 diff --git a/__MACOSX/Duane Blehm's Code/._Animation Æ’ b/__MACOSX/Duane Blehm's Code/._Animation Æ’ new file mode 100644 index 0000000000000000000000000000000000000000..2c1a46ee8ff82906b287b89e28d30d2a9c9b201e GIT binary patch literal 120 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}u^SMB_!U6Rz>vnE#K_6W%LwK`NH7yl SIEI7-K{+5D5M6Lt2m=5q6$d&1 literal 0 HcmV?d00001 diff --git a/__MACOSX/Duane Blehm's Code/._Cairo Æ’ b/__MACOSX/Duane Blehm's Code/._Cairo Æ’ new file mode 100644 index 0000000000000000000000000000000000000000..5b7a2ce7f9ecb2278b3476e317e252da39a8a9f0 GIT binary patch literal 120 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}u^SMB_!U6Rz>v-$#K^(e#mK$Vqox1Ojhs@R)|o50+1L3ClDI}u^SMB_!U6Rz);KZh*6gD7$b$Vqox1Ojhs@R)|o50+1L3ClDI}u^SMB_!U6Rz+lI~$MBeun~{ORf#Cp< S!~l*VAwf_$Vqox1Ojhs@R)|o50+1L3ClDI}u^SMB_!U6Rz+lI~$MAq*6(a*f10w^F S!~l*VAwf_$Vqox1Ojhs@R)|o50+1L3ClDI}u^SMB_!U6Rz!1bB!SI#gBO{Q>2!xox QF(f1iDhkp8(S@cA0F=`R>i_@% literal 0 HcmV?d00001 diff --git a/__MACOSX/Duane Blehm's Code/._StuntCopter Æ’ b/__MACOSX/Duane Blehm's Code/._StuntCopter Æ’ new file mode 100644 index 0000000000000000000000000000000000000000..65d88d0e224c32ce9b44b5fd6db4eaf0509f6bf1 GIT binary patch literal 120 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}u^SMB_!U6Rz+lI~$MA^JnvsE_fq?-? SVgSdGkRYfaNC!k0nkoQzx(I{- literal 0 HcmV?d00001 diff --git a/__MACOSX/Duane Blehm's Code/._Zero GravityÆ’ b/__MACOSX/Duane Blehm's Code/._Zero GravityÆ’ new file mode 100644 index 0000000000000000000000000000000000000000..b51dfc814db399264e51e4b052788adaf732d72b GIT binary patch literal 120 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}u^SMB_!U6Rz+lI~$MA^Jmyv;?fuR9N SVgSdGkRYfaNC!k0nkoR9s0kJT literal 0 HcmV?d00001 diff --git a/__MACOSX/Duane Blehm's Code/Animation Æ’/._About Animation.txt b/__MACOSX/Duane Blehm's Code/Animation Æ’/._About Animation.txt new file mode 100644 index 0000000000000000000000000000000000000000..74b1a774ff839937b9a3f0fc3b07c5e5d06f358b GIT binary patch literal 467 zcmZuu%}T>S5T3LtvWH$2J&Eis6+$3ARy?GdfCm+tJrs(CHQi{m?n<(ig5XK;DSQ_X zy?OBwJPP^_b#}?6)mi3$X201TXzgr31K^Zr^gN|QT9b(ZLGB_a$i|-oI3pGhS$urL z91Osl5$hB&HmGCRVY>b!)9-AfFr2grA!1qys#9HdY44C`N@iSltnYhU(WRPc8p-00 z>q5yu&$Xb7DhTeiDk)C+XRhZ})Yq^49l&+X8_cEQ{(%9t<{Dn;dp*y$$aT>`WZD#^ znqzpD=i_lO>8rV@M*KmP{7PKd+X`6;ZHhZq`k{|7kJWWq$Xluv#e6XlG%s;B0;F{` x6kQ=sv*aBncXiz{&A$Vqox1Ojhs@R)|o50+1L3ClDI}u^SMB_!SHcj4>gu5h1QFo*|433=Tku z1vrL;1VM#?IzYOx0ib>cMlm1(!eASC+%hYC6H7AmG7A!m(X_BR=4IyU1!d;v=>;Sf z7ZmH2RFtGD94Xe*D=5h?QUJOV!(A2y|~yY7UAD1_mw$ zPB!2Cyu{@EJfI8<0~-Se&}~2_Qm9DI3}96Q3dsONh|$%}F9gUIat(2G0@8BKumArC T(hLleoB5dEfZ2QulAF2!dfq`w literal 0 HcmV?d00001 diff --git a/__MACOSX/Duane Blehm's Code/Animation Æ’/._Anim:rsrc b/__MACOSX/Duane Blehm's Code/Animation Æ’/._Anim:rsrc new file mode 100644 index 0000000000000000000000000000000000000000..0e356763df30b4026b8b4f27a39af7d7590845e3 GIT binary patch literal 5619 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 Q7!nc$6$9x2>q1up0K5|kg#Z8m literal 0 HcmV?d00001 diff --git a/__MACOSX/Duane Blehm's Code/Animation Æ’/._Animation.Pas b/__MACOSX/Duane Blehm's Code/Animation Æ’/._Animation.Pas new file mode 100644 index 0000000000000000000000000000000000000000..f31f13447b80d1d4a54f43952cda2184c0a37344 GIT binary patch literal 468 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}u^SMB_!SHcj4>gu5h1QFo*|433=Rwj zfT9?{F(f1iDhSj8(uEBG^)oPv0SORx`%eJyI_72OCYEI8=jjC`7H8(97VGJyDjWfl z1ts}K3P4w4xT^)#*4a0?Vi*`))`0v#z%n{W1Kq~Oz{%#DpO=`N4{|6A0~-S~&}~2_ zB2*Y8X9lpU0fl6Malq*6<`)8F3%Q0kIss`p=GXuK18D{Z$xYLk-+$Vqox1Ojhs@R)|o50+1L3ClDI}u^SMB_!SHcjL{*k5h1QFo*|4t0T9Ln zjv*mIP*I=`kS=ThtX~u;1Hx|V3aJ$ZsmUd&DSAMz0KdAcp9`{>uwznwX^Db!VrEgk zLRw}{YO$VPs=^T$Vqox1Ojhs@R)|o50+1L3ClDI}u^SMB_!U6R5a1W$9^mK~!pOkj0EAe8 QV@OC4R2ZZKtP5Qk0KAh4g#Z8m literal 0 HcmV?d00001 diff --git a/__MACOSX/Duane Blehm's Code/Cairo Æ’/._Cairo Shapes b/__MACOSX/Duane Blehm's Code/Cairo Æ’/._Cairo Shapes new file mode 100644 index 0000000000000000000000000000000000000000..c1eb7c6397bca81cf18a61bf14c90e416e0eb9ca GIT binary patch literal 120 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}u^SMB_!U6R5a1W$9^mK~!pOkj0ODf; Q$B>X9s3=GWSQok~0IpLBMF0Q* literal 0 HcmV?d00001 diff --git a/__MACOSX/Duane Blehm's Code/Cairo Æ’/._Cairo ShootOut v1.2L b/__MACOSX/Duane Blehm's Code/Cairo Æ’/._Cairo ShootOut v1.2L new file mode 100644 index 0000000000000000000000000000000000000000..55663fa0400901ddef7905e7e39c2e7eaeee814a GIT binary patch literal 66316 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 Iy;A%?0omD!cK`qY literal 0 HcmV?d00001 diff --git a/__MACOSX/Duane Blehm's Code/Cairo Æ’/._CairoFont.pro b/__MACOSX/Duane Blehm's Code/Cairo Æ’/._CairoFont.pro new file mode 100644 index 0000000000000000000000000000000000000000..741c199995feff2278eb80eb881e810e52799766 GIT binary patch literal 468 zcmZuu%}N6?5YD##5G6eb_9T*nhZbbP9z@zx+ug-ttFQ*zgO_DD+Xii>q-m>2AH$>X z;=#93@C~f9rC2FWn3-?BFqtn2*)Hyq93h=3<~O&z$5)ndgrZl_1N5wZB*eKBeoy#b zOE^f7w=8U0U5IeSVMo^WpJn|{5kuwyrPNbt8uoR`VmS5W5dP#cYevdI0NT1E1C~$E z+)A6jk6m|U!EjW$sjILQxSsqPUVRg?|CQaL#-AbOt&}(MKm!k#%Fdau6XZE=;DlHv z6C>x0{bDYnd)bVP?7(C!J(%gz@X4P_ZL7-|${0*iuCZxk7;QrwSp~YvmA0}kO^wm+ zK*fWu(h1C}sB4eVoetJ7}t`H#f{ PGd5H%@}EmwK-~TTuh3#C literal 0 HcmV?d00001 diff --git a/__MACOSX/Duane Blehm's Code/Cairo Æ’/._CairoShootOut.Pas b/__MACOSX/Duane Blehm's Code/Cairo Æ’/._CairoShootOut.Pas new file mode 100644 index 0000000000000000000000000000000000000000..849cf5ab8554c4163caed3418f0af636940e0321 GIT binary patch literal 468 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}u^SMB_!SHcj4>gu5h1QFo*|433=Rwj zfT9?{F(f1iDhSj8(uEBG^)oPv0SORx)8}8YBfvj_;a?5|1Iw2LE(Qi?7gsk1Mg}Io zu>X%do(noBW)|fKXXNLX_?MRG1tb>h8Tlw2Db~{~D9JBU0J;+0U3?%5kicBC?cEHF zvo?bK(9qa$uwh~U#1765)(&PM=Io!?un;KL*ueN72*C0W`#<*o?El;UABcbUe{6V& zkZ)vcW^85b{5U~yf#3lko*>xyu@xxR$OzF7l5c11|2Y5S{*V8Gc>c%!kL^hE4IsC1 zF>tc^=I13Q=Q{y;EDUTw4D>K^s4z&*3}9^m3dsQDfYH^>F9gUIat(0=>5yZ7{r^9Z SW?+ztddB<)%;p2K9{~X4cz@3T literal 0 HcmV?d00001 diff --git a/__MACOSX/Duane Blehm's Code/Cairo Æ’/._aCairo.R b/__MACOSX/Duane Blehm's Code/Cairo Æ’/._aCairo.R new file mode 100644 index 0000000000000000000000000000000000000000..71beef9f1a6c83076fc3224235be09809e7b2882 GIT binary patch literal 468 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 Q7!nc$6$9x2>q1up0K5|kg#Z8m literal 0 HcmV?d00001 diff --git a/__MACOSX/Duane Blehm's Code/Copy Mask Æ’/._CMask.R b/__MACOSX/Duane Blehm's Code/Copy Mask Æ’/._CMask.R new file mode 100644 index 0000000000000000000000000000000000000000..e4b3b192b6e5f56f3b2d08129dc1b1a4effe0d0c GIT binary patch literal 468 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 literal 0 HcmV?d00001 diff --git a/__MACOSX/Duane Blehm's Code/Copy Mask Æ’/._CopyMask.pas b/__MACOSX/Duane Blehm's Code/Copy Mask Æ’/._CopyMask.pas new file mode 100644 index 0000000000000000000000000000000000000000..1ba2b59a02a284b8511965be5e30e650eb018822 GIT binary patch literal 468 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}u^SMB_!SHcj4>gu5h1QFo*|433=Tjs zEWj}&BnT=D)B)0k4FL5sFp2>Q5O(`d0Pr~H7gYKt7H8`fBo^oACYEI8=lLicDb~{~ zD9JBU0J;*xT`j1#&c4YN!@%Ie4e|p4%jh5tbQ>1~C!246USe`S$e}C@Yz)jmw*i@m zP+^dq8NdqihYT$Vqox1Ojhs@R)|o50+1L3ClDI}u^SMB_!U6R5aJpU;_K+_$Oz&zfCzNp Q7!nc$6$9x2>q1up0Jj1OZ~y=R literal 0 HcmV?d00001 diff --git a/__MACOSX/Duane Blehm's Code/Drag Piece Æ’/._DragPiece animation b/__MACOSX/Duane Blehm's Code/Drag Piece Æ’/._DragPiece animation new file mode 100644 index 0000000000000000000000000000000000000000..4c97340ef0240d0720d6a9d269ecb9da671fcab8 GIT binary patch literal 120 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}u^SMB_!U6R5a1W$9^mK~!pOkj0EAe8 QV@OC4R2ZZKtP5Qk0KAh4g#Z8m literal 0 HcmV?d00001 diff --git a/__MACOSX/Duane Blehm's Code/Drag Piece Æ’/._DragPieceDemo b/__MACOSX/Duane Blehm's Code/Drag Piece Æ’/._DragPieceDemo new file mode 100644 index 0000000000000000000000000000000000000000..2b3a53c504099739344939ede19ceafe1f7c49ad GIT binary patch literal 4214 zcmaJ^e@t7~6+V7`!4Jm?Hn@ysN&Ld9&Rf9HsB628^21nI1y9(3SB9Fau!)2Yf?{ez4{8U73FdD4;rVZz8}3vbll_0^(U6xVU$pAGYKq) zIz_iyn9G)j!Yol_0g3^|i!7>|=fS$T&0CdMvLec_JTEHk?$YL_eNV}4t@6GD4SU-f zpT5qKu^;^0?fGE3a(C z%H=)5e&t=Ij&%k;G4nXvazmQ`qUL`mBIM*njX)$fGlu8Tcsh^9Ft%xDU7&@;=}J0}lWn0p_d! zJ#a5DUwzM}E;6x0h+8Cjpte7HaI5hDSAkW7qXHi{@NwWb z49*+Crwn`w_%(yW*Dzw>5uW=z_u#<=?gh#SvhRet05on$C()i>m2w`}97mbdrFqDG zx3(`}`_-Xl5{oRW{p08hIP0#0e;I|3pFuh9ZRF#$nJ(P54j$D(-7aF*$Bv;MV8eR! zpP<{@pdY`B&sW!{^Z5>NpJF|*JFbk03urH(oke>Y?MG;r)PLcmo#5wH)eW-q6H7Zo zrHaql={%bn25$=GEXo85w==4p?_%`t9@kbso65^&obiIYg-y9b7_(DNMAM`B(Tm;_ z(PzB5>>N%G=53T+!`rsDuwr%2Mim|FzwI?GCt#dnHRlbM?ApmbbWLTG+cq z;DKv!(3?Y!L#;CWHI@qy-mHsBdSroRPn84zSV z%KV-|Ml7ix@R91@5Q8Q4LpRoS_kF@=;r2O)GnBE|2beQ|H6r)H>Z}ow0<;1m5^!=K067SuM3npY3^0VvPJ?uK7yqo*V<+z*Oz=2i2 z3w0^Whm`MXFjxqf$79im$CMEVWQrDt570`8$GPp;XJ~u%tkI&9K+Z_oUNuGE)}D;E zb4_IQ#*s%RWJ>}zgfP*41(urfkClqg*=XJaj}db4$6Uj29_{8#D9dan`Ve*o&I_eI zrwebB+B=srwt{noDzV-p%2>P&Pd4VpPAbfyOg(puo>T9s5%@mMZDjAksZi;OC{ORF zywv+A1X*d{PmkT&-XR=)@<(!qDZeyka>~-cb8WWQx*IaHcW#+7IkO{PM|OvBGP_sq zelJQkrG0pxZtJDZ9^8cN4D9Y1Mkccn4gC=4<>3cW4`IoUJ0BSgKa-RDvFXl-2N#Ov zP0bDB&i1A@uEfv0)x1^MMC%2G-gKBuWKDKnpe#U1@X>@O^3j{g7H{mI8vk`GWHQHY zlMpYKV`N{!_%*2?pO17`c^89@B7DFhIAc*GJr%OMWh*xRM)HQf!;GNkFKTf#8%ODpnLGu zhH2u0h>w}B1PPW2to*z8kZ`-UHYA8QZ)~>T%pR32&%KxNk0Hi2=94Gas^;5k?Jqg3 z)n_eJkERdgY|%BfyG_%=8ms+nM{1~t+&itW%ok}IA@RDTa?P+q>g|!-JH;}$tZPg+ z2Qm9i`-}F)-X6>OfwQIaE~a@x>4V9&I;14BKlUwX)nog=Mfl{vhghmZG%eo0m{shG z*zs6aC^MZ)(?vmgUvd`9RdDC09dTVOUK34UI2O~3W&2=`sk{ebgqaeeO|Yg*4lZ`P zyj;wU2$CqQU6$+ZROp}+OZjXE;hQX)Dk zX!3%Z zcYXDrs~KsLVj*tpPTFXvLt{sMMnXkb56<&*xDAFxT0kq#VlAYQ3(Rb@VG z!3{fnN-f%L!HUulblZs-lL54!iLnPbpZ|dI@tUncaDX4u$Vqox1Ojhs@R)|o50+1L3ClDI}u^SMB_!SHcj4>gu5h1QFo*|433=Rwp zKv4|f7!nc$6$I)4>B0tp`WYC-fCLD;{U-nfU5XOZ12R*SQ(aPX^YsD}i;MI0O!Un3 z^a@Jyixhya#Bf&&s;#qca>Xz(82<$Mfq-RnkOsPqi-D8PH$N{iIUnRu76vv3W}w@E zOhl+KFo`NKuLBCn0ONqs)y*#i$QE)9adZOGa?G#){|C~*xY;Vh{07YC1F|Imo9fH3 literal 0 HcmV?d00001 diff --git a/__MACOSX/Duane Blehm's Code/Drag Piece Æ’/._aDragPiece.rsrc b/__MACOSX/Duane Blehm's Code/Drag Piece Æ’/._aDragPiece.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..58523f5e19f627e0cd083c555194bf6719c60676 GIT binary patch literal 1332 zcmZvcUuauZ9LK-++>_=ct@hj`ty4O4>x;q8Ob7ZPqrJUb$_6e?x>Scaw3bo|l}gt^ z!7{QCSf6xC9(+-^`C#qa-h9|txD;B@7suY+ro#^0nq_6COPcsQx%XC({kVtU_k4c8 z^Y5PDy$JLM!GIGJlji72^OWhCVhB+?L~Vqc>MsKP8u_+qfaS^mx#3)H%tJInje3^R zcDWI-sJ%h$SI4%0B>y@2*L8GIeCV*X&N#E>J_xDMW)4++`q@5ARn2To#NTEGYf7a^Z|Wsk=6ok(Z zvWjjLFVyzbLsC6dleA2O@g}g;1PhjF=P&kv?T(M<7_V-b@|5A?f{@l)C@76{85MkrTAA{+i;bEq9*&8uQXMJ^d)xhN7@ zel%ga5v^LH)vNM*Sy?Uy*DtOe*^IZ^Cqbm-@6`~#k{>@q?VVWO;dCa0zM+u8waS~7 zeO5d#>00XOjVK!7OxzSP%N(WSytCMFF~7^TM@A)LnX+_18z~Z|*Ni6bV&RA|6i&o# zh1DcXaMt-$$g-I!CHmXh3hNnK(WuBw{LAP@T+OYn1Kl_N^j`gw5BprDcXi}lb$BL~ zYb*WU%?~zRwtDyMtt~|A>Ynqv;IfRtb4|J%Rd^{XyfhVF$}LRa1JOD<8Naf$^T+LI zciv*nLKCq%W$`QLSqyy==lIeRK{v6q`1o@E7E&}Z}CPX?^V)H8(oFb3^JDm_jKk<9TUIbyFtYtaZY aW(keHK2lV07Dt{G@HW`cHlLlFp8FRyEkrl~ literal 0 HcmV?d00001 diff --git a/__MACOSX/Duane Blehm's Code/More Info*/._Programming the Mac.4.6 b/__MACOSX/Duane Blehm's Code/More Info*/._Programming the Mac.4.6 new file mode 100644 index 0000000000000000000000000000000000000000..0602a069db77f44ddfc00405116fa99feb279706 GIT binary patch literal 982 zcmZ`&&ui0g6#ryNo0OF;E35M`@GC|U8C7H(q6aCCf@5jx67A+;m?g0-wn_Om5j`k) z^Dod-{{}B!L{UM#s0S||cF?o`MSaOa632Yx@!tEqpWkoZ7ljitW&qu?S<7HMETITP ziTE;cgE+Du0peb#wY{O&Z`1_>j;Fe5ZYLhfh_a5OC|@Lw3S*CWp+rOUJ<}RIh_JiH zu0eeaid(~*r8f7w+!_x1UY7+umr-nOwYFZXjRK!Dn)2ve=bflT#+8I-NK&0=Zs2j>>W`g4 z&%Qq*EWkO)xPuO!VHP`hOBllv-s1yoe586+yu>GbMiFJaz)48>LTft*1r_|nSA4^F zJi#KK(u*mmr&L*8RV7K%7B%g<%rsTiG_`PPUQ;Dj)tE3RE-UnJsZDPGXR1sp6SPck sLAcp8wjH2=Voar(^v&#I@Id0mPn;EC2ui literal 0 HcmV?d00001 diff --git a/__MACOSX/Duane Blehm's Code/More Info*/._TML Std.Procedures b/__MACOSX/Duane Blehm's Code/More Info*/._TML Std.Procedures new file mode 100644 index 0000000000000000000000000000000000000000..33cef055b68cdcc7e29bdb2714210de27d70bdc6 GIT binary patch literal 468 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}u^SMB_!SHcj4>gu5h1QFo*|433=Tjs zEWj}&BnT=D)B)0k4FL5sFp2>Q5O%wGVB@?0i;@`_>=g3;FAC^T-~iGe{3hr+{GaF5 zkj@|!;_IUjT#}*}P?VpXno?SnTAZwBqGzV3S5T5)qyTg!y1V#579fGSHDLBfJo0i#V_=Z;$omHrhqw^rItDh7SwVUKmn57?_~IA#e+SS^#{XY*bN@K} ze*;waB?x5p6Ft5EZ-A=%6!L%$<6_`s^UcpoOwI?nl7)edfdl9^AQKTP3{0X5%fy6|NntB&{NwTnBRced_cAf0Mrw8F#rGn literal 0 HcmV?d00001 diff --git a/__MACOSX/Duane Blehm's Code/Regions Æ’/._About Regions b/__MACOSX/Duane Blehm's Code/Regions Æ’/._About Regions new file mode 100644 index 0000000000000000000000000000000000000000..9596566f3b07dc88db267d4a4a4bfe69fd58b2f8 GIT binary patch literal 120 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}u^SMB_!U6R5a1W$9^mK~!U*CxfCzNp Q7!nc$6$9x2>q1up0IkyrMF0Q* literal 0 HcmV?d00001 diff --git a/__MACOSX/Duane Blehm's Code/Regions Æ’/._Regions b/__MACOSX/Duane Blehm's Code/Regions Æ’/._Regions new file mode 100644 index 0000000000000000000000000000000000000000..7e425306f12fe8ff2c52de8cbd98bdcf4c2d48ae GIT binary patch literal 19148 zcmeHvdw5jU)%V(yNhX8@5(J8flP>)Yvn`fppWCB=%S-vHtQ|V)Q;Qp`G|arJ z`g0z-!{8C~-xpE#meP;!ph|1~*h*_%N_?xTwo=o?_*NoSb&b6vkuhp(Q#@lxbs0SZ zEouJy6vHh~v>w^==tlQ!#YKs+50WV*@wHz^jeqRb_G@C8zSX#ae_dZrq4p_tqhk+8 zD1aS@CzZ%F3-4Gw3Q=Azi9k2emCUKI2fuZXeUaK*`f*fjsY?w7Jk?t>ENZBU2gmq|-5$bUIQ)bJN4Y zs*+svx~BxREjNCv=rN}IyH*7}U};Pd{o^WRV0XTQzf0$H6d z{aB1!vK4Y{4eYTbPcI4XPi?|em5z35FMeY%N6hYNml~`rDScyWh!QJG-Yc0?qV}+i zfbV_loZ5r(dC0sMxS*{h&xCg`zy1CtTLGUheIvtU?;P7L$9Or%rS=3nr-MGY2fv}< zKIXOLoO-(KEE(qJQo`7G7QV%r3%=}c(fGgcfPV-0-_Irgd4>YdVZ_t^mih0GYt`oy zWZhd`YB;`$48eoY`1mDT{m12~&u65ou~Gu>K#EhAY|Y3P?RmKimj~Ll`s%HL-E)&M zlQ2^S9-fDO>PRfQYAuOiM@D+M8*)+u-vx9w0tI&k7Ng%;C>sLV;9SI)kkLhyl546g z{>WbTnVOn0>khKk2eP?_EvKTy9#l^TuE!`Zm97z^0=Gjur~J=B^3SJM%}t}&ryI$b zn;!1kUQ+t{4?<+vj`EyhHHf+x)EQ8BW>B30bs^?C57NgI@}J-mB=xla7(@QIWi7Y^ zpThrvHqvy~G2u5xHL{Q7<*IFXe&!EMhm6C$_}v#~3lBft6b|O5t1;V4a*EX$wnkuj zfiX&qac;Uwu_mHLZ`e$bc}xX*V~Ydcz-?g_f1y(|FGKKge0jUZ!!d7`g{!Qco>@-4=7dsh(83J!lvo;S=zP^fiWx@Dco$hmT*q z#$XS>g9x2%$PTi}0G1rpM*4_;1Iqu!P??_y5H{ekV0({ooNCiEQwzoec++^=HKf5oMq z1EO>e-hBsTe7QN#6nH8vIlWjtqV>&k?t7DG74Rd{pV{M5yVzr_mcB!;xcUzC$A{PE z0aH&jB`-aAAn>G&UD?72xp&DKydd#EgfHDDeW?|`)E4ojq~nNxBKRhH&SgI60JqaE zQgRY_ad5x%lgsoQgE)E${f~eyP9b)QdI}#KqHDu|uESZNv}m3ek4Vsj^%?JI$Yb1l zC3AC{W9%234Pol*>C5fQ46O|vyVOeqV=+ftAQ^Hx;rDVx45VriLAkwZtNk#?g3CRz zO{=wBhpMdA#r$aNT2ySRi{jI(QHc(f)TU5!La8prs(zEv!N6d8m9N zJ$TOhofDJUnkN7o7enG8Y?-nlg&t@)3=PFqVEw{;Q?x!%a~?Gzz2-b>V%a{_FA?WE zCUP$(mY%`q|10e9O#e8o{m>(GnEssnJ&WGYL-yTxPTPZGS~ahrJ(XBZBiw%?S+-MYd)g{I&WQ3L`+GSYQmyKPObLyh!z^b9e%Y^uhvHo$ z+tt&$9wB=gCFR!*iY`27{144>sb|%5tb5iH-ZtG9a$!?ko`pBt#=pUh`ilCxdPqIS z^8+^=2POh$TRH=n#}+D&ty$$m$Va;CsqdU_$$#^g!y651H)yr>v~BQuns5YMjPsX6 zW4W|>NKI$Nugc+9_C?_@kp;%e9OQ1anTPzQhgWYu&!?Ot53;jZWF}aBI5Ww^ia4lj zfW;u+P|?GM6`XIVvHrKw5;-o`1{pWhU3eR?BK(r`JYMnqcjqC$!E?(0hz>!z8Ccr` z4d4#>oaGtLP!UeSTiIt99?yvPyX>9uy?A=?bmKXT=Zwr=je-B<98S&0==s3Df^qUw ztI%elKO7hp$P65W1n#z`t8@s+G z$yV#e@urxK_yTIpi?$YxH~l_D9VMRy&y;*sP8q`?5nEvGwB)H9k%jiR;+zyw7GwDD z=04@RV?w<0Gkv5+n*nFZG#Nac$2*5-z%&~FbVzayKIMNq169m@xLe~M^i%i?U=aPI zm!&`Z59x2Y96j=8DV@voKhbK|d8vmiB{#uc_(C|rUkGt!t`$y?Pbu?FLK}J`)#oHX;_s* zejjF<3Twy$e-tRL-YVZO^SZ3&W>`RhT+~SXMWN0`?sy*24b&WU1F!KHs<;`kI-eyL z?m>=v3ihT1`lLlniGL9~CUpvQHC}r4`oUg3jMwV7Q=7s)sa2fWBY#I`j~Q?t&Yr8~ z;Tk0KaOCk_-z~{Se!r*WHmrAm&V08x8`*tl@ojnzCs&tT+Aw6KHP)u!L5>%JRE&8W zL;mOF@7)8j10JY*`gCxhj>d0D9f$dhW)I}YA3**nf(Oy28@ct6@2bcb75Xpc(IUMC zQkfchzvMe?5Iy3KnuT~1jeOc3n(Uol{SfmX z0vrvv4RD&?*FRZP)Lm*P;y5CnAr;j8l?Q5ANr^BZJdYl_0`=`T82|r&|F23Q91~7d z*TUAbuvQ=<@fufNR#=6MRqkByeig;@DhPjDCciX7@*5-MCXs7F-77DKdA*+pf6&*r z$o>Yezv^f_vG&fMu=Zu9`RGuO(L7D}mmBmx&!W#*tJ&V!{ji1!z68vsdFjCpH*k$ySq64Ip0{^K8~S%=#(}r9Lpg%i#jwZo z+unIDP3LD9_{qk|*ww&JQ2(yRg>5qKyq}SNVH?--O&le*vt>qBhD_itbhf4|#1FYsQ{TF`U@+ZFf) zO0Fea15+%?X(;d6%z3n|Nk+{q(4F?*rS;2Ll-~<9%Dzv=^S9(ld`pf%&3kxG+dKQt zpcUtY`uCT5FC@x&)Ps0O;r%#PwtbOYNj=NEd6%8dm&k4`YB;h-1FoiFgtLAx)~n1s z=r91;N+_xyG6u3S`V?KmG5jSbX-omuYfQgh&uaT`TE2$w+keah?=hUk8p)Zomwy8( zsmOI@KKLA$v6gxyelmW+-H@KUF0U&KzOSsCaCv&F6(BVDPsg3+#J6N8^Z+K z8HGHNH8fY#TQ7E-21)K5xF&yj;Fr9vsw(*G4m8WJphn1GCYPa&!+>wrV6_?Wd<_n7 z0-UeIyxThq9CSlQylSN49ShkhL)QUy7bU8ll!)KA@w|>!BXniSdGTe3~pps4`{Apx4bpn}27w@;dN6#CJ6x zvbWeO7FFnZImtbQZ4n;R)^dKrb%;R4_D(tkPY6j)C)hiY?{xOSra!^%n{_8@yJe=> zGZ4Qb(1mS?ZZ>2uiQ!ZD9UVTCvsP>icX3o08p~k0$O90S<_3O_Tx$)b2A+_6AO|>N zm16&s^Jlt}d9inf$AODtmS#MXy~S?Na*N07siC2zl-u!bFyGQ@zpI%thRxV#Q0y(u zbjSI5S%wGhoTjW2nT5S#v=aN^L%#T*ZE%iFSvcu{7@g8;O-fm1=tyZ(HvBO_@%EPX z8hZ=(_2Y>aWD@Gj5>AnD2jJV=Cj;9qp=&Iycg9$sK>0yDTO@8OpbZk52543LZ2bCW zgs}OrP5UldvLGY3yr61wo`vE9?J3ynP?GB>DEUfx=D3+yLEMQi<-6i53+j#KrFZl; z$F^JSw<)*t7oXxLd{MyX&jB(jt+2gB31vt;0e^e>0{dYob8?D)j-()O&a`A*pQhMa z94@C~ZFDYcN>j2jvaSc&bfmNRM>HlAuZv>z$bzNr7N4RwMhM40k@F}!VqnIy-bZ9K9ZSX}`yK3DE-4f}^ScnnmW}@gqck^n63bBn=?(iag zCzxP#VWZRG(R#ziv@i@F(X^o1$ERb)QfFf`(O ziO%%iN26^;xp66zD~2VFx-a&D`}g-O?0q&RlO9S+q_(#Eo8Q=9axSZ_mYfluia;~6`;TTP*hSriMCdvbzp(V#~GYS-A5zU6N8>tLnGDA zVUxO5jl#nsr({*l9jU7Kj8wzwNHwIYU-YVKH>&svHG?FycAXl|S_fJ@Lblzkn$+*% z`3;^|(civM6vh%5Q;v@#IX+7SC-^skk2>)dWrg<160^RzqNrGd!04e;_e#a*R$9DH z#i5vaL(i<#$gi$iW$9|gx2(adG<)3j9!FDlLV?%Y(!^@;Epzx3hf7&dS62yYr%PGd z;A?U;D>ZJH&(Yvw8dNtlIqIFtGKW`L$~1bv7K`F&Y}EQd?=Gja)>-=vCU8QkDfl07 zqo64muWRsleM+O-QLDgSS2p;TDPDJz6MTb(#)joijN?@5+>MRyl|W@DB&=|F5)=iy zl=ZG`wx?2utG3aZldu%l=8DuP*>eW!QcIk^3Z0!)O-5;8ugo@eYR=sfQ06H8{Fd4N zBf;sa%}GeW$Swc{j;G_7g%;s$uw%G)f> zZjX=2)4UbV8edwi{6(bXMj*o+red^67Z3uZThrLk%<_@d%!HSRhSpqeO*Rl;t;ey_ zr64eP8)`K<=^m#jWp#=iMyYi>p(3|r-s$mTd^rP;bWH|b-{{dIoAW%i?pRaYL!-L} zAM?Q9ZsWpd$t5_Hixmn-UXz)!kD`=$|Fa~rvS4IX~xvZgPnKWVaU~8zW(`M+d zlatnrTIUPqiMAd{-r=fm0nd>>KnxFoy4gw;2b>mh-O#hx;ew9b5Vw1|0)?|XD9%-m zrshVcf`AN*Q}ozbYBH!mS!vC|AG%c!e+xw)S> zqe6<(YgTF-yvqj#16cSpMHwJeYNaAH4`(jeLTlVjO->hEh|Z;Ck11VVp9iMn)kMi$ zf$4rv(PNJ{O@;wx%FG{eX1-*h)Op-Z;9eUEB-(Ta&9q{{O&s8AoO~&R<%UJg?b4%~ zBO(Ua5Ko|ge*X^VY?6cHr<`>ER5;>d7P?^BDF!jcQ6UXc5>DITs%dPg#Y~*5;3_Un zDQH-SoiRB>wvWb!rUsv^@^YtamX5}Hw+G>{iOpSxSKST=Y}TvIs=Tqqt67QJxe9`Y z`XFIF=&q8|ZmZeLyFHOC%ex8|Ztq zgPun@3CWZVrF-cleTecX`U&k2!^K3vSCAF8_tHiY%NQ{kxY1Mq>_*x|&(TjrG-@Ub zGw@^RLpmj*fH8~dD37IlP;R2l!T{`akq+FqXfw5u3QW4NpgfN9K=mwo3Il5qnZR91 zeH0d%VkY46bdmbROmQvXt7tB$gLF|`D`ufQfi6%`%o5iDzFJ%-X5&4Pdg+3gEv^Tg zOmooUYw8u(3*6oyIBH(67IUkX>IaAsP+svQn2z^0cqW)T`tGDS-qDT~@JWJ}B zZS9ZrHpJY`E1n_KW6R%qPI|<3#(y_ne83rJXqjZl%~V_Z=`PeLhmadR(l1oX~5nD zx&l~r5a2)CUDGj1gDqc2|y3XUbaWmrm2iB2m^}t=sBCjD9O> zj=~F0ixH^3T1sjdiJAfA>dJMyR38HEYu-6Hbh(-BUSln!;5i!Dq@^?|Xo_Ruai9z``l-Q?l zht*|6&bJ7oh(`GilyX=ffE|GHSYLpb0xFr93uqiJm}tBRnw=*iG~V z{Sf6%@X$Fde;J>CNZWwhEOnHF8n)MM^dsQfq`VPt0N=;@hWBT~7h35@v>muD(9aF* zKd{56#3(TaxbI8bTnp?|^o&SitQZUY{j5{D?ma{8VkBzDigCdIK-xI#pZVdnvYmb` z5Bp#CvE3!P2S<@AvBYxo=6 zDrg^;@c_2S{tK$BfqO*y_)6&DYPl{xD&q;;G3<-uzHZx(ApFV^REg5}E2&B(3k7sf${5D+qym<@f>r|eLm8J4r(kcBbiHpwq#MPt4D~+( zG+M^F1&C%XXvMrt5-F(Lj+!x8b-rFW*MSp!vab(oUgY#H2I8rlS9!$h8SJA>$s$xK#L} z=07`NwfS_A{s7E0-M5~XYvI%M3}R%Ll=(DdADaK|l5>Pt1kK!HEHlw_EEpI zd6pq;mEHse$794SP^62Sq+bURQ*vSZ+c}2I*oHht+$eYr>VUSk(eLO@X?GTpA?Ar2 zfqy~z2>eQ}4Q!_wh&5X5_$fUGk2^rW12&0s9;_|AF1{%J2sQv~e2jQKN)n?{I}0(1 z*YjPl=!b#%7GqG}E&XgOuy4=-VA&6ThSsa#9b4f8Y+pZ@{`CWT0Jg+=+)L6I?uUQ9 zj#gL`q0ei8|AmaT--kc)dV7u3!7t(6--q0%q5fA)4{4_Xewk&1_y1xa3PF%5Q**sen0r!0;@XAvPSuJJvVtn&PmH<4uInO`WpN@K=;FH|HQfm{hLxokO|;} zQl=~~jfX$Tc|e|QH>f`(bp)B~`RH3x1`pChs5>lm{t$Ge&FzoUZaDTlEaUInh$xQ= zO$L9GcE`GUlpfP%bVS-I>;Ex&ob3gD9)(@!OCNt6Hp96ZYz+8gSS?zBc~aVQn#`;J zEPcj{nkQj*m^a%wXph6ctoTmxN?S$V20cy({x348y9+gl>r#Gf`|v5${Z;yEGu_28 zUHUBBzFAB~-QQ%c=b~oRJT3i`^Pg+v_rN>ItV(D(xnynvy-7RPZ0ue6?NX0g&S#)o z-6r2d-e<>ZT@UOI*u(FoeN2@0`@XE%0YCjMYP#tw#DD%qIRVViX)mx}A(tN`*NhJ& z<~+U+lH{6m65kCW_A$_Z$j~|!5DnWrY_n(-*BPS4(Ig=#E>d`s#sbU~kBZ}r!ux3C zja`sWv4WY-siK$S4A>A2!YvNewC3=pR&M*a5h)%m@Y#KJ?b zQTw|(_6Aw%g9*z2rxLJjJqp{}1KWBOwzUVgrN3b_gQoa@Wd@^INF{w8#uqM?lFDL? zi~+-nx_5{eVR=!}0|Z<&{!b!EWJ%?RDLPrz=5a+lW|~i&N1uu?ni$VSI5O$0{z%S6 zCyJru%Mb-Sh7b+y>C)jwv9FYz=o=)KkxlHyB9h7KgHFkk&ml!R`FU#vzXtS;w6Bm4o842#uKJ3rUkkK&O-6f6Gn_oLwsdm$xe+ONv-cW;m)tDwzr-3{xR2Q#?PJg#?;gT9V!|(|Usvz_JS-``rs1NBu2tK? zyvWCw4!AJBpnj_El|793nxavkN@M!C8cg)6(c#_d8A{ehfIviVwV{?`H3CF1HQd`_ zc)4S@BuE57GzePMUM2;TOc4adOEgkau#KJ)nON43<1Lr>$eVD{Kx=+W+mj4o3X$fW zDH&naaIv?a{)KlkDo)4HAe-?^ zdN77nP>dL$py)oC4Ddv0uhbXULJou&N3hX2GJT;McXPYgFUT;a8u;O4`cjSV>bNX& z@8u{5kYFp){Iba1{mlnaUIrQL_@_u1T4W$Z5WP>q%tvx4q*F-6s8v-zfMK?-|B+A% zezHElpw*z@DWB9D9maF<#~@JmR##Vdb!_N5x`N%&o8vjdBW8C8_~XX{KD!BzQ;Q|e*IJnc!R%%_HyCmtADj^pD4!j|+*xK+2<#a9XR zf30zL=SrN?IU3#dl4K%we&&e_gGkn2N|H*sNPb@%M6%&hk}OIUv&FFilBT_vl1xCp zJ71h1Ac^k#?~({BHhuWtc6`LVL{Avw3T!t0q+iD$pqIpWV@zRzy|75TH?R_0_gm=M z2PFYMaX#cvOTAQ!BLSZ%Xv?gKoY31HP0sAdUtSM=_tTWwvSnw(u}v{kIJT--!RwQU&6i$Eh@48BZO%GJOQVmEF!{{Y?O8oF7yaHT|AL&b z?K2vmOO3|3ilXxQ1%*XQnf6!NmH4c6(cgwh@d|9LWYec@>H58j2&dXL1$i1@W}A$Y zIvm~BuEqf$nDfeMROlLCfDg_(df#YRaHE{v7}$D_xUy|VrQ73Kou(8zTxK61m-_ew z)skSx>2u`llMnF8pF{l&NulKQ(n4YQ4c!69CE6PBlMDn6;2ml3Bhdx92DZ{6DR)- zHGG1pG&B41T7W#P<(_c->Hy<7z~+*E6seeTI9cPw@gyT9GiKZ@aeHcUjX>V5;A3(= z%eOeCw2H8>Z4#&3emG4(!Z%AvnOWD4{^7qlC?7`id2baT=r6;~1ao2k-yxV;&O^A8 zmaDO*ai(*mpTkCGiIe4T9KdQOi;aen^egdk+mdNYDUTNU`v-LAR=oVj5IkY+>{;Vo zHz;ZUo`@Uj_bM*qG?o%6j~=9SSBcNt9$btWgoEYINw z3})$S?P3h#4V!%(ma_7ORnA6uwstQEVNTw>K;Y#W@--aT6k?#XHJ4&8YHIea#-#v{ zV#d7=ghaS&DCN0#=ccwHK)-JB`l`YhG94;^J7(&DK+HB)+&~2g3ZR0gv zdzBS@6*Hlrr5+ZPrp&lOUcw|C@5Cb$d8X};1M~4YmSZs7J?f9r|1|nZTaiHz7o>2t zLl2%qgPkS`E%Hh2!Mfy4Dh?g;<_E@O6K9=iYo)fb4qi&DcqtvI9vs>=zjHJd%CYJ+q*817^zqOd^^}#Y1iR|ECu~WN$MdWh=F}B^E9yUs6$4Qd*@124wp# zWZNg6ZL5o1cVhEi4qeJ+sbAo1(71x7Sp%;2X!mF2C7CJLa_pLN9a}m3qqn&M_hmRH zRW3v5f=@X!aOtJg?Q(lq?{oDvIS=u=lHTgK+ADAXohC-LT`kw-L7HXTapN8q-!hxT z`SU0_FT&>kI&8}C)_Yi__gjf0je7b^f4^7KGRhYd+pg34ZE-o4A{zqB^0K480z@>% z^W>XSiUYA3?m3Bvs?vL|K+ko9dLD~ov$^8xwrlk)0v?YnLf+wlsQM$UT-RN0+%4wl z-YjFrBwXFc@spMt&%+gl+vsFJ$78WAJO>=7=}VQ)3-gx1lF%bR2a*B7AYP-(lK%gb z4v8^S46}inV6ans;R0I`2=3Icv2M7j$X-oR^niYy^%eax>zh`)jWgF{{P*UdKgsza z%0YHBj1W^+xWJD0sDk+wRrt1@Xq&$Pe~~8YY-LsRkz?<|-+HLrK>ib|ivOw21g)S# zb65Hzc)&kmm~Tu2epAAr2Ygn-28PFT#z?eY!jBKYS8bCpK9h*9+M&Vxd)03xydG;4 zB|pLN!sUqVl(JRgTXErnGWpYkV~S#=8@|->Y4{_Y6%t;LV-d>UB;gG>LZEDI+)Y>m zDf@Ye-^`b_vtO2Q8*GiTUzczz4jU-@n1t8k>xr^2NO%K|kts)$!}st#Ksk95e=m+m zC}*jJH{zIrayCl1m3AojgH(o79^*OYo@02`QHJMyhhg;iQ-$WdB;gJ83x)EfOq%vG zjWwI`MfD8Zx*3k{W4LH0!xRl|E2PFI~!*NF>9AwyJUgloubDK?Oc|*}W4EcPM z8($FSXmgXJ#ys3ySp&x|^dL=%Gnd(lWX=sT*g0nwAb@EuZKy}V9B*FgsD+2I!=d1E xFJ(`FBY+BBYJ}z(GsjuHmf`ZcITp7gIn@CNF#i@G@IKtC<9_kdnED4T{x_c5dd2_% literal 0 HcmV?d00001 diff --git a/__MACOSX/Duane Blehm's Code/Regions Æ’/._Regions.pas b/__MACOSX/Duane Blehm's Code/Regions Æ’/._Regions.pas new file mode 100644 index 0000000000000000000000000000000000000000..41ab0d8797c33c2b97ae87a1fc92b8270a480180 GIT binary patch literal 468 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}u^SMB_!SHcj4>gu5h1QFo*|433=Rwp zKv4|f7!nc$6$I)4>B0tp`WYC-fCLD;nb+U9mHGOgL71Pxc<-9}pZ}{G7}r)XFq)=; z#WcBtQqwc@^NRHf5{sSl3rbRp6w)$tQj7KU3QF>e6o9V8a90bet#gBnOBfi^SwVha zc^vlp-+!+63=ATF7#P?L7#M_@Of19x{%85#z`#}WkAW$HfkBwt&u@MC{r^uq9T-?w z0L2!7#9R-qFaP`h(6bE;OeH`u2L=Xy?zDpM_V)K1t!FSW%KQfM@5RLbum96F_Y4C= z3y6O_zWo2=|BPO51Q-%P{A167HZyQBaI*R4=OrfR133&V3~WHmfEp?ck~0HXLH>{d n#sQ$Vqox1Ojhs@R)|o50+1L3ClDI}u^SMB_!SHcjB-F43>ZOV1DJ_MIEI7- zL4|-iK)SF2kbbZkAW5jH0w@Y)ka#>n>3QM#McH~q#YM^a1tqCP3Tc@+sl|GF1ts}K z3LsZP0o+|JFcAp7kY`IHga!124uc_sF@ptzC4(J<3($W)3_%Q$4Dk%94A~5Y4CO#K zS25HvG&8g_^fF9kn8UD$VFklFhRqB+81^w7VK~Zgn&BeDHHNzkj~QMvyl42z@SBm5 zk%N(sQIt`RQJGPLQI}Dl(S*^A(UQ@T(V5YM(U&oZF`O}mF@Z6aF^e&WF(2Z0bpHe0 KC&M83|33g$Vqox1Ojhs@R)|o50+1L3ClDI}u^SMB_!SHcj4>gu5h1QFo*|433=Tjs zEWj}&BnT=D)B)0k4FL5sFp2>Q5C+-slsz%Hq%^O@6l9fSK!6XBVgRWEf-fn3L|Hq4ciJdPYvV;keCRFc*+O1 z(mB7NB(=y;&p;1mx3hmhh#~_+3PS?JQ=sR=L5dL|DxHBLhGF)i+gd>E01~fwj*!J< z1-3HiVTf`uaI*R4=OrfRgQQp(*cdn<{zVEE$(aGHAb-dJLx|DU%`XJV7IF=7bOO?H X%&-6d2ht1-lA9(mzX7xPfb2E^?kGbv literal 0 HcmV?d00001 diff --git a/__MACOSX/Duane Blehm's Code/Regions Æ’/._aRegions:Rsrc b/__MACOSX/Duane Blehm's Code/Regions Æ’/._aRegions:Rsrc new file mode 100644 index 0000000000000000000000000000000000000000..098c475e7092732903a853f370ef986288993201 GIT binary patch literal 12194 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 literal 0 HcmV?d00001 diff --git a/__MACOSX/Duane Blehm's Code/StuntCopter Æ’/._Anim.R b/__MACOSX/Duane Blehm's Code/StuntCopter Æ’/._Anim.R new file mode 100644 index 0000000000000000000000000000000000000000..c170d8ffb8b1c897e2873b24b3099dd68a4b70a4 GIT binary patch literal 468 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}u^SMB_!SHcj4>gu5h1QFo*|4t0fqx0 z0v$MpgakpwfI2|BumO;MMlm1(!eASC+%hYC6H7AmG7A!m(X_BR=4IyU1?3l%q!#HF zXCxM+7N=$Aq!#Px6_n%`DF9uG?k+yC0};l|_UvB(70U-)xv8#f(Ox*s#nRz8? z*er)B=Y*&f4R8!raY-%Cc1%w8NKH%ux+t+Y7p4eIb3s({1|%kDhZH3i6zc`0=Afux zVBlilWb@6>OH9ts1In;4urY7|-3DYLg^J|N09G}ikPI+{7+u}`LV#=`*APc1AT7uI X`u~3*&A=eJnUDDmn9au^xv2{P-IhUr literal 0 HcmV?d00001 diff --git a/__MACOSX/Duane Blehm's Code/StuntCopter Æ’/._StuntCopter.R b/__MACOSX/Duane Blehm's Code/StuntCopter Æ’/._StuntCopter.R new file mode 100644 index 0000000000000000000000000000000000000000..13f4f2ffec74508a5af4417a912601ee2b1438a4 GIT binary patch literal 468 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}u^SMB_!SHcj4>gu5h1QFo*|4t0fq(; zfesu)LV}=TKph}m*Z@dBqZp6?VYiZ?)Z`MqlKcWqYXx4;I740yLrn#R;MCm2ypqgh zD+S)*lG3~q=lp__)FQp0#Ny=C;BLB89yC5`~o14E<^$cu#lXqto1d4MoDXs-3j-Si2heRmCL&ZABxeS&wg81>fN{X+>gE>$ gWDB{5I647oIp){@{{v|T2FXp2nBRced_Z;+0I4QikN^Mx literal 0 HcmV?d00001 diff --git a/__MACOSX/Duane Blehm's Code/StuntCopter Æ’/._StuntCopter.pas b/__MACOSX/Duane Blehm's Code/StuntCopter Æ’/._StuntCopter.pas new file mode 100644 index 0000000000000000000000000000000000000000..b62909b2b7f240eb3c2ea29ec660b28c521db416 GIT binary patch literal 468 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}u^SMB_!SHcj4>gu5h1QFo*|4t0qnpr zBqRtb1JnW1g$;o8Gl~HT5C+=7sKXPSnvsp+gky?bNg+I8YG_S-tzn~=j=t^{VNtL4-G5fZ*BLgG5F31lkGL5Q0E@LB#7OH9t61C(H4U}Ingx&z2W3Khwj u0jw=RAsJu@F}k|>g#g(?t|5+2Kw6IZ_5c4snt?%b(=O&WU^X9+y$t{pM>)R$ literal 0 HcmV?d00001 diff --git a/__MACOSX/Duane Blehm's Code/StuntCopter Æ’/._StuntCopter.shapes b/__MACOSX/Duane Blehm's Code/StuntCopter Æ’/._StuntCopter.shapes new file mode 100644 index 0000000000000000000000000000000000000000..4c97340ef0240d0720d6a9d269ecb9da671fcab8 GIT binary patch literal 120 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}u^SMB_!U6R5a1W$9^mK~!pOkj0EAe8 QV@OC4R2ZZKtP5Qk0KAh4g#Z8m literal 0 HcmV?d00001 diff --git a/__MACOSX/Duane Blehm's Code/StuntCopter Æ’/._StuntCopter1.5 b/__MACOSX/Duane Blehm's Code/StuntCopter Æ’/._StuntCopter1.5 new file mode 100644 index 0000000000000000000000000000000000000000..5bddb050adcdc96a2036fe0b1618397bbb9a6e9b GIT binary patch literal 30998 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 literal 0 HcmV?d00001 diff --git a/__MACOSX/Duane Blehm's Code/StuntCopter Æ’/._StuntCopter:Rsrc b/__MACOSX/Duane Blehm's Code/StuntCopter Æ’/._StuntCopter:Rsrc new file mode 100644 index 0000000000000000000000000000000000000000..558b752fd24dc3a38f00e49966fd326238e0e344 GIT binary patch literal 15098 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

y+tnp zZpE92JMed&4!~P2I~PooIy(qswg@k(acf+QK;!paTDayct?@T)DyhP{niCyCTKps6 t8lQKLeNLgbrf!bI+7{>78{~EyDQpcK$gS_F;tII%(t3Z3eWTp;{tsD$6Kntg literal 0 HcmV?d00001 diff --git a/__MACOSX/Duane Blehm's Code/Zero GravityÆ’/._About Zero Animation b/__MACOSX/Duane Blehm's Code/Zero GravityÆ’/._About Zero Animation new file mode 100644 index 0000000000000000000000000000000000000000..c2a5d9a475e8736e2713eb45be2515a44cef0732 GIT binary patch literal 850 zcmchVF;Bu!5Xb)ofig*qaWdu&gux&tj=I=LNF)?Y+XUleDGz7@EqT0W)XBlY58-Dp zegHp$gR@_zUX`>(P29ZXdUwCO>s>EJVXK53V7eab+3cJxC1xm-9+0+3f`u!1XOn7Z}?-_Kcs0l)~FvH3s9?i( cEJkb>h@#k`s%L1QewF$Vqox1Ojhs@R)|o50+1L3ClDI}u^SMB_!SHcjL{*k5h1QFo*|4t0T9Ln zjv*mIP*I=`kS=ThtX~u;1Hx|V3aJ$ZsmUd&DSAMz0KdAcp9`{>kYiGQX^BEqYEiyI zT4qjav7TOj9+)a9$uCj>x)R-8d}xlFliqv^=#9A`Klr2BCn@1tR0K38Gf$x)u_!S& zwIsDjAt$rA1mqZDq0l^-;}nW3bCdFOK*D^y>Q=}u1dC{*iiilS2L$=M2RZtpii?T> z4d7(pWOdF-P0Y&&a#($Vqox1Ojhs@R)|o50+1L3ClDI}u^SMB_!U6R5a1W$9^mK~!pOkj0EAe8 QV@OC4R2ZZKtP5Qk0KAh4g#Z8m literal 0 HcmV?d00001 diff --git a/__MACOSX/Duane Blehm's Code/Zero GravityÆ’/._ZeroGravity b/__MACOSX/Duane Blehm's Code/Zero GravityÆ’/._ZeroGravity new file mode 100644 index 0000000000000000000000000000000000000000..0ca9f97817b3bd4588530ab40fc345263b34e0f6 GIT binary patch literal 47472 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 N%D#uz_n4=_JHKS5Th9Oh literal 0 HcmV?d00001 diff --git a/__MACOSX/Duane Blehm's Code/Zero GravityÆ’/._ZeroGravity:Rsrc b/__MACOSX/Duane Blehm's Code/Zero GravityÆ’/._ZeroGravity:Rsrc new file mode 100644 index 0000000000000000000000000000000000000000..1e2987f1697825151b76db6cbd74c8c9afa0badb GIT binary patch literal 28224 zcmeIb3wTu3)i=KOIg>dvxy=MJBtXav7$s7K@G6#KWF}z((ISM)0JRE<5D|?elAr;B zIe|dX*8++cv@HSag-#T(Z&3;g!^J{4%8 z`JU(dKmRkC*=w!6_S$Q&z4qQ~pIa!dk3tgBZ6$LYlcqXmIwA+Bks06rz;_(J9Iqz2 z{|HiXFd`TEBS^O-Z`!me5duo^QkOeWp6;~~&Bs^%FUdSLZ+gL$f@ygps26e)6O+al zOe@Tr=$=q8^_JTUthbjgEFZtHi-%9CTsUVKJ{47!!-iE1he9Goo=5rv492;d#-NG8{p17 zkUwblfqVzPTdp~fKWxnbnR=66%^>89YGR9mmT~*|Dbta%TgFbj3Mo;|xG4qP)`0L; z@`{Qk2#k@2!&71LXzR{t(?`GJ2{q1e{>U@!H(%sKL|Kc~c$un*pvh}|jXMFJU z+g};|quQ+4TWnjmU$~Uc?zH*dXuj@)J4XKe_8&Dj{KYnH>b;L{-T8Sz z!MrJ3H{7^Z(ewZPX zGRVXxvR2U#!Y&ChP60v|Nxfnyjt5H@<_sH^eAi-!dr`@PQb&GS={@&@&j!vl^a-mX z_)6s921mvqTEYsM8k4ai!jR}#&$+(^6KSpZO*CX;fXJYYjj;TmCm384R8c(VhYLwu z?fT)&|B_Ro>^PzgX0zn-_bsILImFhl&oSn^{MOjA7Jn>8r1mzeT@(Qs98}yz`DZ|4 z(k1gp`QlZA7B~z8vtG(!rdzJbFEQP6ZSBCU-44IV;Ij_pIH)3mi3Fs`vH5z^f z_$RHBa<*;uW>-Y2`S%gPw%E~mVewzc*`ykBTp4810-1}0BxRuo$ziY@-G}kKfasj6 zX?|)tl~wbki{%x&o~xnsoQ38@>lUNYXfT=5`>xL!ke;5CQ{2lq!u`DCS_4~h`qxWt zs@Qb)j+S>n)e`R-v95V*cAP0awYYfJ;?tY>UqIsNmeuK=7nAxV)vmV|4xD+YP?hqR zWY6BeIw8E2t~RfyqIheL>tR1z@JNal^zCv{ZM|vXCYO}Ay=hQq+u&mb-z7bs(k?05 zMXfE5w&3TyE1E%eTeFc?N5qF}-AU z-=E@#|4sQ#ecFZJQ`?$BrOs8v@*go3)~_}VeC+eLdlk}}6l;#R)`2nAixL}WLW|lb zRzKBxC@+T&$cDn%qjF z{r`x6%02l}b%nLilu}$gds%DKa*L*2yfvbQ>&46qNpBPn)K1-%bxTgpL9?lF%c|bm zQ^xEUvY5fKKF3w3sqC{C{C`x_U1T}+;-k;GOnEsDO*X7?6ntk;Iz^A9XY^e^=&@1h z)*Z#r;#zC1DU0gT=d2i?^tAP0@(6$5erq0`5?`Y^zf89Vigg1xR+xnrbJmXXFHY=Z zTD`g5lwIn$UegZt$}X(0e!=l#(vc?$<*@fyj;ofIQ|fk2<66|#=Pz7em@~%NB!w<2 zM}KD;+a|+1L&}%^zx19+O#9MuY<5apZ72ypKt15vT?cj4UKhPj{+x=$R5V)-J8k5>b!oaRvYugZV;;S#@H zKYTQR2j83=7k-_g7+&D~aQXeJ0RA_Ba=Gw`7A{d%6~FlD0-}UVsp}Hh4N|*d{|55? zx$NH%_U{yBFit$BP&(Ps1B0;E4W^-V9Rj)Q=_lx@v2-g2;X zgUw_6S?Yo?=h4jqKNK6ZR$m z!_Kn{td+I1Fbhj&DOJjlu9AjG{~?W*T+%pcf;2^%Db14RO7}_?(u2}cX}P3IE2Y)a zW6~4SMro7ug5;BSNUuw8N(ZF3r6bb2();*)C>@tRm%fzFNav*%sZHvXxE`B*Y;ya3iSv z%jt$l9_P^cBvHl~DVGSk86TdHl*s}zAynnK{xw0G8Q(-mPyosJjn=~{`iJYGpu9{* z{OY_s$A~Y_Gr}K@5sYiiSNKGHy6WcTzyA>uxzx+#L5h&9X^_TSpx2}8mW^`xFAtlsIL6yx`vKk3jfIjR_kZA!jj|*gC6lCZ z2&qYqGsKxBBQr5jF7q+O8H|RwIN1<)x!mv3xZEBe)WK_%OiU6|xFqq_d6CO;@lgy4 zPrL9qjx#g=$e5}bJW1w$W`??vkEC#_0l)ksDf&m|4T?}=pg76E^D*ZeP^%*IUv3e` z>y%9Vmwy=K2@63lY$z3cxW+6^vsXNh5cgngZ*OjFK5qg`FRd( zT3_m_QUdog@;QHO{tuC7fGjy@=oRI~=Euq-9L%wvCzn0g#y-?DKNjct zvGUmG6T0zpJob=2ggtuH7mM?J+H$_Dh~SU)H=d6pZkvk?D_}n^uSdSHUrhcFk;i2T z`&~g^Y<{df!V#-K$77ElWWSj9{*Tx%)_*V49l%+& zkk^&Z=bsq;cv)t>lP8xw#CYwIAItymj#oa%#L5$Rj6ZRlAIAOnh%tG&d~UC9`7!!l zj-Shm&WD%F7xs_Lry@T_9xu!DuXJ3_Ua`DA^Z9%hEAL;;Z$h7#@hkBAF3let=ZCNd z#^B}h8Th;9{}Xva7=F0F%I|EvqP%YTG4i72dD*VHC}w`XQodn@J~#7xKEAnp?)&`U z`p4pe*yE>LKI)6&Ql3NDJBmk(Me)n!3x9~IpU*#rKL$veQ$b>Wfj>m?E_v`Du@>|B z8~LUcUy3m*@-hCRc(nhcc(i;Jzg#{aFTDRm-$vF`j>jI+@hCq#aFMJ>6d*FpjXoWqOm@}6g z6L%Zih7Z$16L)8?=IL*LlfO;-?&hV$v@>I_d*#&L1=<;$<{p?AkB z&xzB+!NSwdQK-v;eOD?zJdMLIPj%XrpeXl0=lY+{{b99UiA!%E&y5%D)bUF?M$1K0 zo|6r3{=HNtSJ*Q=u|53pu8AoGHi1&vC&pf5OUmXfDl4ffbxbIqI;VVL zX{E?dL4Fqdt1;1CzF=^bBfq@rp3;RPrw=_x*=*Pv8^4s|h+J~(Dy#{fp*Wj#Gdr@z z9o<<(FB|qu^=(B@s*dwKeMbSAD{$5CX{t3OPbsY|t?H@{IXIJkLQ_et`6YAYy-?%I zQzZw!MFZ8iFuomIz@Y8(cs$L%70r#)Y0Prqfpk( zzcnfwg)d_&jHl8EOqI`GRBwJpQ4g}s>-tUhT&#L}w{O?47eNPpVW^hgWy@naVio8T zKkdMeR2oRv&?lyT?$QTK%gQTC=QX=hLx71PcV9ETllDo=Ehv7(?TDoAaBWuLvbySs)=F(U)m9wkp*{)8P=tf+1JiMmoRj?7mazyRxQTqohZq4euamjS<{L1@K z>w>D1`3vSRmIU-1D)tq5N9VJk+s_V zy~Q8$Q$ftI=8hR9(7LJ|b(bu-&jE9C6L1fAIvg`#_&IY*E2>~@$90aZk&e0L3recy zmoKPv%-7YeteC%WewCyAZpYMnP(4>+IGRvczMy;|+QHm7wZ;#A3T`a5nrf$3EnGBj zUKww(aD+*B-#vBC!qUp1RTTv=7R zaDHheG@N$N`~~+3>)q|BTDX`)i_t3%G-j@&q^g^NBi2PJp;10Gs)I&POaecugs+X| zu2z2c-K7g1_s^eqPnF}YQe9lt{5khw@WD)#xX`{}UL|jE)%^QmAJkJ?T~WHAlDnp( zvJ_5;UL2fvSNWnUVaH*^20P|gmEP|_qac{)=2cXbp{Gk1EE3kfACr&cmIW}p-d?@` zAH|92P4vr%58E(~X5k9#b1?&LHE+k=#ILjx4X4{-;HSG>-a!2^_f#wX6m3@2)H z44RcQXy8Cmi27pw9zxzVy$Ueo7V3>HM4QS=#Xy3LHFPa~!NW%L?Quo(%gQk&@~g#_ zg=Ek^Lbr}0^M*q>Q)u4s5lK%!O44&xf?}X!^d7nCC^)h~SUj7kEO{i64GSG73jh z=p&^PoBTU6Zy85zpqgK5-z@#=IV?8jr|xxiT}S!-9rW_}D4J`PCx~gOt-b)q-F_Uz}#lUof})A!55-WUgOJ?2V<7Qb{kL&nE+J zoGQ;J6EGx+2l9V=_CUVVl}}bsa5vTQkf2UHcEHaI;{-U4_@Zf3P>ZNZgui-C;}gf1 zR^^o~teVQBBp#VX>Pm&k>iqcUM0FDvK@^YL#A*IS++~(GVal|r)AGg_h#Del|5T4e zFNp*DC2=F57D3{Hd@jz_!zV5Y6w#rsU8~7mHV?62RVhE+4^cmc4wVOR!R-AKH2d!d z@`u$6aZ$=&59Af+UFc$HB=hsz#R>hFiIw&t^NlWIbJucv=m+=nITuLc{xc_8_nWAn z&%0H}=S|bodp?Qa5x%=GL~tz1gFYd;t{F1t;tQLr7;F7M1AH~P`cEKNKfcD{czw2> z{^(oETR0PCR%4hWlGcyN=*U}G3mo1DE+Gy36|?XQpx3!XsrbLYMCKRMi3Y>Q$ykG4 zMC)Em1%vL|C_QvT1jbtRVj0mjhHestB;oqtg@jmsF2&_|(t+f`Z5-*pm;Z{x{DMQI zT!ZM5$I!L5J19^8HLRsP!^hp=Jjzp^B(mnB2%n7zE;%zX$ z)J(4IGorl9zDcCamO-pPtjJ(1Yz)Xjl$XzkXu6=Y{(h9tpuD^wX#8;Ci#*UsIsrQ7 zQ54S`GYE7yzIq%3fFJ7hdMbF^0Gt0KA77WC#%-3!HA&Ys#wUu<5G8e`a8>(7jY5}A;%PvqMy+Aw z$5T4MlN?N71Hxg=(AuGCAlpG|Le|pDOOWhZxKoolv}g_S%no+h%L_Am2f(ucuUNPh zg`2<%IVSlUhC_%R4uFS9|b@o&vo-)xe@bolKJTKDO zsj=3}D~_Qb_d?tY)IjOjZ9c4bMg-YN$(&B_lNw1M?n=oNA}RN@+Ck<{T#P;R!qN_k z?<7NY#>=ulLBCQJrkiE3D&g*qy^bacIrGKWBULYwggIT`b| z3%BXM3>1Zuu74l*Xbgi*0VpuN{qdT`50Vm}F!C4sUEX%1~p_e*X} zpuh{W(16Xx9K#Biz>9jJ37gp(Gt=?)W`iGXnA?jvcs_F&9^q~3l|}0X?vgOaY$o#& zD&n~0;^TTV8LU(&a20zP;F5!~Ic`vCJ;#}YvN#^cA>g29&K+=);4l)S-L@A4U0f8_TY&h)&Brb|%0Wqi|r;xINNUG!l zTM-p<#Km-^2ngc{cc}N_P#th6J$<+<6~($Zxr`WOJ+0?59Lzxp(q`J+PU!y4J>UQZ zK*ujh=lNd}9}S(j%{r{H042*Rkp$EfCWz^tsTW9)E{V8OHHlJ;E}K9>hR3-^7$DLm-8w6#8+-Qg_kEzJj~IIR5W2FPkM;CH*2718`Y`qIaq2k+ zdXAB9V~D#)hnR=dNcwPB%13AH_ygKwbQ)YSW4Fi1M$jEQ?lEU{pB4D<=Tk^@&WM>& zx=%NJnu?irH^wzXfc3nBBsXFb`Pj^OW5AX5xkqdTmc@OREAATDe*cP1i*gOT$pbz-^Yi}dh2EI)8 zHm89vop=e(XQitnd=9!g!grNqi|`f5wg}&Nod$U~>omyg$6k!^^49i zc)LZfH{Dv$tk-LGh&sUMuwK1e*U#awah)O0kz<1;xqg6PU9KM>Se&=RaSw+$pLM37 zY1+=5&`5Ni2_3bbcOp{JnO!L_(CBIOu51C6=JU0nV*o`u3s9s30Yy5M;1_fTpB)f# zfZo^rB7*SYx&u`mppT;YT`9(a9ic%0OHc}Sa8j}Zlr&H_Beh|AM7(Xz+P`O>5P(77q8>i+#4%(aw2n%e>EP$^A!ixKGF4P2rYio!)wUZ@8tch11gl$$-CF zBKVsw?3I)I@7xSKWb)A-z-S+^%!|#u1mOzx!79m>(3Oc*Pgj_?_$)pL(Bk*#q~78P zvJodW4xq*F(U;Nut`s8eZM?W^OJScZ39c#@_a z)j|T(j)soLVi$qcYdR;Gj%wr#3Mm;J3wtrRP%chjAvBFkiGxhYiD06>qag?tQn)Th zLuBE)L^X`2XfnS~9M`lO=~nh*y~z=Thtb#4G0;av^Se@tYta}svvj&sGqwAC+u%P3 zfF4GK(CG0@$5yGG-`3u#g?(|`{QPum5?O$G;-;(oZexo$kAcpP+YUS#A1@>!^qwKm zq)yEoKK{tEZGxF&okfqN=tV`|vB@bhd3OxFa$Z+C3*nRpml`Q)At&%o)EQL?IB}J9 z$s(URV^r4j(V$2ZI3Ant73HJ(&@(2NV_|NLXp4Seo<*FDiYdu$44rg4S@^D0$kol* z-N;GgjOl75B*V6U;)s1Mx#T9&T+LIl}}yDs{`{XviBccs)j#a?fR zb6UdAbzwU^)b8Z8br$>4uoAK>AxqesnJH+8jS6UO$uek56EnP=@1!ap4a=alS;Eyc zO5?P1ezq=3%b^DZEr89pCWn%hHv1W(0HuJ(ui9JdJm@#t zL*rFWt2k*$bmeGdKcS8@q@VEfIs)HPVg@ONd+S!757Edf`tys}OSoY?O-N=ne5ZtG1-oz_;&PFM~e4A!aW+!Fy4sFsylsF;HG zlZV?ZWOQo#gT$$fQ`?*;4~OiWstRhRRck9jub-$3XVPlBW~%1Aqed0GO4J<9FKdZx zwPei50M%NN>!OkXYr}0>sWzuG#TeSQv4cP5mI>D{7yB)tJNu*7C51W zN3oC`p^out$(&lDg_lODUUiH&oS_6Qfl=NVDz|#BC7=Xzxz#ZwxLl3*&{BIqX&b|P zNT;4aB<2l;ok2^;3#z6mZG1$}#>YY%*forVb3_r$?f}?&LQsOV2xqa~@IPaBn!^KgBj_|I(k?0DEZR~k$?L9`O_oo2fqtkr)2gxa z9<$WX=Wio6ufa%ZEgE?g>VE-CPlH8H^LApgHg+~Ooy9v3EJ^*xo%!so)oU}~`{75zqR7KJv zgJ2uS@F>p@#L!q#TbB%>T(p@ii6vnZa0EA9wdvDL1i?MgQTq4N$kqDQuo8{fr{U=I z@#EDuaH3*HBRUSpcXqgL>-Oq<-d=t48{U`EC)=xsza@3P@zC}^Ea&jsD{p=SCAF6A zcw$=X+$r2~A1~VJ+ltuY)t$HF6&D`gZ#|yd|1G$M%bC&4mKTW<|kdYH3saWPjKJG?EJV^%Vm=2tXA0Xtr9K|#i$nv9(E2V@Ry44undem#eNdtpgm;akgj|T4UchRZtxq4Awff}P6MtAwpmdRUdcffRDn|D^(!IK z0#!R<3F|G;POb}!7G!u2)`fJvoplG>gx(nzxh7D7vKh&WT;mS_N>7$#RSo0-!b5p# zjlUa|VX0I0ALM*k_Sc=%fT3hQqXAh0#W!KtIt_una zCMyT){3k%mOqN%!R0DuAl4ZF@0AD)W=9GDw7busS-S z$^t&*tWUofx=O(BI>Wi%P^Ey^*#Wnm6R^b+%5?^VfX$l}xh>c34|oCpN}*u7g`g{7 zS*=J^j&`9v_+Qs>t=d{_%DcWNgEj8>4=W)X12 z3LJ)$2#WwVmq&P7HHGG2CwmxaF;ZB?Tw(XC#1OjzUP=tGN={y0wTH;rCT!tFaFmYN zN60-S+Rtra_C{>chMlZ;tsU)edqBVzCAi!Y2y%F-g#~gIH8=`zwL*X?kgmfnyx~BH zWfd^%6) zO+n!zmNriJ!>7G%h{XV_PQW3AK?&x1n3uFLU^A;f0k^0VRITl(cHXXWxK2BM1ze}X zTuoB>w=td0_}AFv#SVMZO!WGB(`!z$;u%NoqC`MDf> zofguZ8suYyCH^>(--E-$>J8BdTOfLbO}L?RqsY$&2R}rbfZN)sA<->= zX-;GyT7TkqjcGvWvu};RQpE*zL43%kE^2(pGh>E-$Xk9+?2U`|XJqr4PM>M_j`ZXJ z-uT3N#UYG3{)*D!QSLBquYj@TR0UJxDC;KQwoae2oyq7S`{7g*u754rJksN7?DQD@ z4SxnP$O|V1@)vaYl!k!o3y=bc|EX`Y+PKKGtQC9anWN7~sW%;z(Uw2HvfSr;)6}7o zCCGUndQ)lfR1bIq8|>*us3~ildL}j5*RZnL*ESm0ySSp9%8tKj^Gv_lvvbBTJTvN` ztJQ8(i0v9O+P4ecYC7rjy}NP;7EJKUqd#x-%<*`3dS*6yLicUNrXv-rZ1LFUhP7z^ zw$Z-bu1~O80&8;fO3!q(Yp2Ka3(wLaXUKl2w~>}z3x{GPR5N{T_4)4g`SxxP`;71SerpV*qYwBa zFNFL5Hb&A7T`AcN^zoL)X<<*o=f7|9cnUlf4aMoQtvCB2=g48_)4-m${>(mOuba96Xh%-1|{7h2L=zIT=9wo=$- z=k$@&{_2_5?;|^UO)fF|KK`9=w9nV@=x-bD-DdrW8`9XEpW-TaEr_ndG0ULUOaQo{?^lh-Eoe`QhF zlQhz^?2SgxQ;3oe?6JZZ`kU_kE$rFQ>}&VEtioZ`$hlxo2AAj2WGGdP)K2 z@2N){Zj5jKo$poOwtd=m-|N2L`aVmlKWIz5aYv)a^E1yP1l*pfVUJw$YW-oGe52L( zdf1oPplR*stXF&|lIrUqVMk-BXR7BzMA#@Yy%D^Mjg?u$zU0?^h{D6WUxnGW7>~;~ zWx*CSsMIq%teK$7^u~&9pD>$JHV|t18unqP-yQZD?%lB(RJLGC*dyIG!wcR|;Zt`O zfj89%-j97BZ^H?|GY$7Pfb}@Df;Hs9maC=HBUf%~l2eTz<#pqFbF8;6)%fv2*yyP{ zQMA=F(lc`QS6+WF_ECPPk8s79+B<#nuCep{f^Vm1r_Kjp_E&QPkeH7tvUv{*cW_|q z*owB^?Bj!-9>O(d6Lu(#p4nej+am(OM;#Ejb?kDMD1EGXS~NooDx_57r(vIp*#-=4 zxB+0u)`z?`;5ZoN*!VpO-d{y3dPuM6PE_R0xQs^2L4=@K-MwEeO~jz!ZG=j!9p;5j zOO1SR6=85yV{qx|hOQJke$P@%CDb>T+jK9K5SHIHcB#}0mWKskDq;H>XO6@6dJlE+ z{nzRyxWlE+WS>rlLltdnS{Lp3?J*tSq(z-%MwgR-H(*OFv+nl!UT@GH3eDJJY~t?w zT9@-J;?DQLt95~>qsr&us5p)Kif>C&jn?JV6*v{q$esFuSJyis!6XL2UZ=J#G5~&c zX|T*riwu^#_SA#g-_$Gy)@PA{^;v(6ZK?lOeGqo?K{(svIk3mR5d-!yeZcP12dwYZ z_4W)5?(Hqz26y=NO!Qh({qER#;LRH|GHi*-&9+NZ2GmVBlab74mwqv`i_cn?p8UOu zXnMb|F{@(I8rEad64d+Rx=nCHKFZ+J-i}9OC&R4+cV*f!oqliP&}$adm0y8|;(*UY}f7_hJ8tH9>iRUmI0qBy=>SYww9%zBquS7>Q!WC7~*nRjCn z;!6-FJ-${AxU^Qyz*>c6(S%iP7*;hOR?FzRRx4J(I?wcx9*h-Cw0H0oaIIJ@S8j_g zmb>_33DaU-J$z|hUD~jbGLyv`JiIxw1~>S==4&wL#d^Icx?Xz@W4+EWf=XxlVNs8) z?JKdiXDEF9Rb%||D{p$bp(}--AxL;-fF}|p%-}&nCi;`;rh{14^nhYp`ok)xV%yxe zxdscN2tJC2oJa6sNfA+s3%83H^&my#6a+Ji+9Q#S)z2dt#5|+<@+=~rG~NZ>BO{v! zcRfmHWEo7mMEKN4>xGaCaaK#nqv%oA01fe&%;T}J&)l%x@8a=T=1LF^8ST5~HNth5 z9c+B;dY01?5e@2`U2$Vj#EpHJ%d)3QeH`PmUE0v19f#sm zhq_j*O6O%g9+8_Nr8?Zh{WaOMH`lhOX1hYGObRcnamm?Jcy2b;3@vi3ibt-hm#r3B z4St-Ra@;W3U-P4Nn`eNVoO@xa?V z6IvPajoFi*c6dwT)4rYjnk#!q>OC&KY{gifYZ!j)Nrx-1<2$Kni!1Ba)ZuQeEAs4rpT!-^~nw*61Lbu{;ZR*~Uu_k{#r5K>7em3u|e|Xum6abDrV6`t9IndtSNynst%MF8%4$Lk> z+5XTh93($-T|BqYDh+fQvRzxUdD;F0aC3VFCa6K=$~vb8>yEK4V+@0v24+uGC5s_# z$<-H*@lM0#K-Fk9*z&Uqihvu=kz^q$-jJ5(9(N4QGsYWi6}1ILyrtc#yacEAH>NGg z8iy_pOK?XME+mlx&s1H!`Ta5ES>1F*&d-p0EiVfWUbZl{ ztgF|`izkopdQlejZo=ds#q+YHw~pJG^w#|=YA?=ff@E||Ocja@7*jj=7%$R``xhOL{p0RxRKIzkGGxn(DW{h4+CQa%SeLX z;|;-l_D9zb!Y$?!Zt+btso)vVKb@%s@5!53Ywj8;F#4oFcX8#WJCyawyHI36f2-^t zmm&?sB(f&KdR3|;f7PP{i%oZ!-o`5nQC9Z5Txq7{Lh{3=%$tTA+;;sF92XdF0>s`uvV=c-i6V?bagwT!Wz?@9! zKyj-vxqwE8_hlQKj??87LdzUDo#k*9V^z(<`6kg&V$!Z}&koDoB_G+OxaywCt!_&j zm^ExPM53X@=um?7wR}HiZ^`z5ITOB`z9s9manZ6=+iu;mT$Mi`nC)6qV(nyzT_i$JT8@Al1}a4FVhO-QR7VF5erEJi zbffi0>xO-M^1o|Ra&HO35>iGVl(W9*m^n^GH(C>2uO*}oW!Fl#b``ZgHU3zBHG0u% znzSW8?Mw2FxdkWa(9|?ubj_NgaR$>WvSt@;Nx+FOcYY!7E>SHVHPsy(-G*MY96{NW zUy^&wPfzi(|Eww8)0e^1pM|F{gQp{==}O`0SN3huZ*A-KcaV}d3x3L1TZ#*TCY*bP zVdbCHX4`?2n_Z6P)9~~6{kd_p>WJt!`2amRg!Su_kXr1$x_>JC{04`_LQgwHS)QBB z;#1>O9hkg%ZmMGpqbD7rEL&lC@>viXc6Wr?+IIHLaJgZSQ?U0Kb& z@%GvG{V4m?0Ya}?TS><3WNITBL(+&h<+hPQ_TvhiPWh*{>YHfA_$@RT^gf59_z5vG zm!CI=`YK=2R zdYoA|8&b225Dn}8LMlp{A|0-0POgdi3rYs!Op*R(7Kd{3$i%%O%83`_SQ1N=7{eUw z(K-Y5`@)AO%TD7eIO1BQ<$%rwP(nbm{@f+NFnqt*cw+ojPU}=qM!FGzjh-ZY{2DiJN5Msxrq*zm|Ry-?) zacSsuldFRg@i?pIL67&Z;SY$+qcDH2P;ehD!@Dl<%TEuG-%bQ@gQ3~f)sIL3p7acMzZ zVxNs&M%bNDJ!!(&LvA)O~7J+TjnOH0OoS zuud(xKINSK=P$n(aNP=)T&Ltjooz@;+GMnUtkBee?dG&fg5pk7a1wMc;voehU}X z(~rkHT5IkZ*BUf)7~e=%Bcp|#JJDj z{^K3*mv>wQ?|5Cogi5=1@xA>sp53Rlep?L%j)}&&Ebc(y%)@u%2G_RG?D2jVPNtap zJ=>IW?t#UhzZKS$){FME$5V70O)`8}q0Q2?pKIaptnr83oSJc?Qw!d7Gs^#LwszjB zY3Foa#eG9YtLFT4u6Chw`FOv9Q<$SG6$_D&~w?_X`1Vk~|umXVDZk77CLN{N@qI<4(j*^>o1 zbms}T3(e-lAq^d4{WLknWwl>yz2P~XXny1T8v)l11*$uLql-HgCSZ%@OU;j&m!+gF zYx&twol$P8*Zi1L4S9cy$5gH}?t6Zp{{gH;CEA{^2kSJ$@=*BAVA!pU4A<0Bgl|mt z-nTBkmtwVRPpzNevJ$VvS?>L+{gm51`yGP=GqtEVW6jbppkjw|Y<)_-UeLg}&%pzRBS{FD! z+q*bm#qI!S@UXxoJLfe8_i26uPKD`A(wcS8R}Wh^VtqR9=+;kCoqYJ!#lxRLbS+l2 zr0oCnwXJ*Rh9X8PUR8z_O-cUoUmu=V>vnJ8(os2_FIosc#tMc=2B3I74VFeano{QDoMAAd=7srXR2?%p)tp-tfQY#+!O|8hm z&I(IuB4PkQ!U!4=(;%wIhvlsNVmn2j{IA1KcQf7E_2mC=@ZVQ(C!=V(~ZO3a zYFb4%;SCoJfS1y0x&iKuHF&XFDul5Ho|Kxoe1=oAINqVVh?3qHF!aQkNeprvD+P@5 zI9B2IB1(pBaIEGV`{YFeuH*j;Dfwv*ONkV3pyWRY`U?DC3F<#sz$!fm9i9?}^4Z1iTji!-8Bl3-}Rw5jU)D7Vx9=OT4(HPQWTXg@4|(QNT6y7|}R~ zfY*mHT zEPp6|aJ0bS`26|v#@Sn5UI2#0&WH%d1V(@andO0OF?2uPQ55 zz&EaJeuY8&xXa5InkFs+LrGbsk~e?hgz`D}$wlRJP2w$)C}p^

AZ^v3_*H-z-o0_VW}6#ww6@As5U==jifHE@Zic+e4?PmEMfLAi zyn2%4&qT%NhI%vPGHUvwUPtNJKtg57I>vT5;N1v2XPffIQwY{M;(de|# z|H=iuV%~Vz#vR1I-ZF}?eba8dq@(fb=`XaMQFD!gdD;Y5xpOvZRx7wip_5(G%D^`> za5m~az-146;gr?k>OV{lkZY5B$ zSxRN5&YM}+fqFko)=#+$&)um|Z_LZT8QIJ%+-@$u_~)33r_OZcwS#nS#&VUN3k$Aa z#0gn-=pDY9xp`d8S4nfw|Mc{6cj5t$&?{1{c>^AfR2p$Pn%gDS}`e*Q7ur^xZNr8eG$$Lq_eZupBuFz6lLJA_{DF@8itO0O5M~rGtsS9@^7_+HJMJA z$_TRE>!?0sb9EhsidD%0u~+m^He- zQXr~Pm3z=4Wf7!7=_6r*obQv0Fp0yCMn{-S-=i|E2gB-Zkp7`-$a>w18( zs0Y9;u1!byG=P0pM7us#p7W0svUthMQ~HcJZzzRdBA+{2l{4Dk>xJlBXkcuP=33XAc(n97K5c>x|hqWI(;q(KZT z`aboD#A}aWgh<$3L}Ij7BiX&2FX@8Q(%KhB&D8IjPE26-yOYfzK>i2MjQefMi(_+@ zKF7@SXIkLI-M1~o!}r00eofv;n70Q&kGn?aPI|bh>_4)uM?TtmLmxAC0WOWnHXS~Q z`OnbZ5zdD3u+oZj)y8sJ7x9Z(mPCPf>3H2DAQ^bWf=fIN_TN^d^_k|LG zUg~3F^bS(yi6;V|0P%(kK=0Qt@@DGZv?Ulz`UUR#lK#fiyEiHSXB7(RJjI<-(s0&j zK#n#|oAXK%&t}n_DVq4&3wIvw;Cc4ZgUe$t%cZBNRA1xhoX#21CwYPBBVO&@k**O= ze%?XLg@M9zcoPIwse#3-dUoR*7V~~?emkOMh`5)wRwd-$UZ6n;b zf#~G*9n*G-&!Ifg-^CL)zpc^SnZ_O9z}{VBjbM!R;S`xxUchLTM(V1ao4UUd!i^jMErwX))$^-S^TXDG{uoM z8FA`J0v-}lkG_<+@zT}HcVkmine$#qd*Sg4O!OoXHFv%~VK=h-44WH*t}>PugTG>& z(Yxfp{OkIsP5CS)d$aOyPmhF}eZ_obzuZ-gLFJtVZOSF}UcVgq}E+WR>n$!b<`~5MuCtN&KvhKuGNVy!b|+hbB8McdVRThF_1Lz0Lm^jeWaCC%PT>lk+}a zc=O|~|NUGD{Cv|TJuS73c|o^@Ii=7O*jlwp{}lQ1Tlfvx@Y$_Fyo9*znprs60-Sl> zrWakl+Q!ztVsLfFx^Z{%`Asf7OQsfG>eH-i2i_(%#n#rzemy4@T^`fF!!G!1v463W zWSe!knTv5@#)6k^Gl%xVJ+KxRwaLBItp!DEl6mrjh!(xUa+i2iWP&c}=J3 zBdtu1yXk%wZgKx-Kg$OAOa*@i#mZ|eDT`KHo-=h-+mI&lva|J)9j2?K;&^|p`YZNW zTOMhe>WUdHcCP1?MasEx$CA|yjboH?;_=%RKHcGTnvOJdL{LFs{ptv9+G$L40+B<# zk?gx(J9~s}_%Yvzr-+OeD}Nr6lo>lOa#TXw;0t`)z;+Ief`J#2m$Q@ zc(|2+wC9$e=r`8L#Le+mKRQ(tm5`8@M(H!mx%dsa0*w%AS2Z3e?YyYhX1BLeJyVM* zl7vnv%T#A;v9q$VfTFhE-mVYyH{_~p?kwq4rQB3$?QQ7L`a*V7bk$8-T?}T5pUkYR zVz)Sqx}iJS|4`Uit9W%B)mqXi=Q7-&*Dp zr`tRRxK&;dsFHKKf5j9Z|5%05u2E9AOPO&D`Lu`TfdqZHiHeSN%;o@o>Lc0uz7u_G zoww?ovq$yk9I&t351*r)azE&s&Wv4Csu`f+2O5~pD^5o$(EcG7K zlrPFTOK>+zXq;q{E?n{Ed)Zg}y5RwJ2||4WFTblH{k;4i(kJn1*b7pOQxt2vg%HNi zGn(tKX&A@pPK(QeYjX+@H7{v?llB`^?{KgCY7Vavbwa&+(zhuhj80v^)&sB4LdD^yCZqZUP^CAj zD!NJ%-{)b4=w1BJle7ODd!+EAFTU=m>0BA)y=f@8cJm&E)QMkLK^eC%pY1|#ISwxY z&rcirMUPpnS0wE9PLHTawv2A6gaa6);xc}(iGk{C54vR&y`YzF= zDXO&G`T0%_TujZ?sk?oxy%IJ~^6I9QsqkYdZMaX&jFhdhv-C5pXol{(PK&AXWlvK| zP1eOla_Va3>1z3Niz*yz7PeJ#rJ7>RpMlaAHOksuCEc`AilRaZ$(7SotJLuWktm*| zd_gRhw=h#U+M1cHwJ3o$ipu;OJwjQ8zL;vLw5ZCP9WB+R^*<9Q6p??l^;iBwwU5}; z(%#A6-fGv>)M~T*=G~{PwOY?t5nRhk_KMf4WK$EqBdZCj(nMU2tlX?GsWkLueG}zS zO{EZB$+EIq$di3up`BcunVDIEs~Mm>p_X=*euSZlj9P%86eZZgI2(In>%qj_Qa#&p zR?0rvP07kaqXl&aRl{bt6EVLK1#wqx>O8||BGZ-ZV8lTp?d(Y(#ERF-dyh| zrRmx-@B2~?X4cw>6r?rRNpJl}Lw{r_eU;)VJOCe_((d(zDcW9E7H@84RW`k_pD2Hw z-4HQL>y+9kFr)66&1O+#8ZhxMp>hWLSD5nowbg))O||X#?#|w-J&A3A-AL_uwk;KLPgG>VZ{1&BL%f~S!ZW)a*@4l zI=v|FOl4DqApLMMQoUB~$~py1YI2lHO;R(VOXa8ohll&@R;Ix(H$)0Le6rCLn>Vwz zDC@jvhuJfMrg{)EDn$u4f4;B0(sO9F(yTh!l599#>s~$?(KIpRCe=*K>Tw+!J4-qYcCpd2$N!Aw)fP*RrVPXH(QFduCsT6-j~m17c^-%d>Ld(Z>KXirVpDr%}3ZwODuFzrL99$Qt!Y1 z(bQEI)6{egL!O$LsKQ{kTj{Cu?5FgF^tQzWdWJcvwt2yG$D)v(-h4adr2b6Gj6=)4 zn{-C36;#2TK%`zpCAT?Q%Z=^j<@If<)5BU>)=0A)+Chk?fBbJH#xBvUiC?KI%kZD( zE%d}hQ8d<7^)z-nTLljhPwXNl3^S@&mS}ZdW9OC7(elVnZ*8sirMBi`O7`FXn3;vs z+=#!qQ(C69P{{~FBqJ7kx~$dISs}-4M1OAsX`!!0#GM!}su-az*VNftjP^b1`_p|; zKya{ehU?qjie#miN>616bEm8d)~s}-xVXg>jfIV!vDF+zgsuUYt_!3O7Q2K!Bt0V9 zh?`rEdqOZ1y}BheknaKIkPbLA!WH3mKtA*{g6HU3KyQ4RA&bydKtBAsaY|4-&>lE5 zBIjyUAYUleLd*wICjkWgG9&{q)PL;7V>yGUEYJ+d(J{e#+pzE8r35TlYk<0wZt|^o z2#U}9YYSRjaE!~*+rvaEQg6V&7@K2AQYZpFdYQDehLtM+o&Es!-$LmY^Y`l|4)!x? zX9Ob~K(V9?>Lb4QJ0(EsmjnkG#WSf*{}w4wA-g>&I|M*q$u1%k%NWvso|Wk!zci%1 zKy7&>zCdSr{LNjyyjk7yKvla7u3a*IvyV$AfAYso9t)1SDisfj;SuV(_fgWKI)UQe z5RI#kk#Mu5%>69UiSRu&Pn4ZRV*~C?Cf*3nu>r}ZJ%QBjNNc_4fb_O3@-7)!L~g}6 z>(*F@K4L1)3a;6few92|3awB1JR?`iOs2CrA)f~%qEePfSq|#u2H5_fKc1nlTUh2M zQ`rE_E$XBd_(r=s1Uuw1NoP=6hm+&ZVYs3=!O`0R?ZsPbO%F{^((8ac2IRis$qBz- z9$Le2HQ*mKS~1I#yJ!6+qGY=grG9z?IBk)V!8QG2g8bt5PMFIB1Q-3={49kGZhjI_<4E+W5x^R(Uzr|gwXs))&8PO0!;wSBhy%HaQ&%Whpn|FEjEy7k*kld<9x@TXG^09%!VKiLwz+>>gVn0$PGY?(S(2CF`QS^(`&D~UZO^n?z#*p@l| zThTem;mW9sLf+HHM9ZOT3~JD6^jd=Z{dtRoeE+qP2{# zO3T&c6qd;JPbo%XU@>je9B`23L6ZU070I^Dfb30 zncM;!Jexjorh=JaQ0fXDFSQNDcXkKPaE+DlTJc!U7fH+`R+_BGWz-;cg$G6T>`1n8 z8NI;mHr)XkgCG*SCw7AgmRv+a@k9a@dN_xyN+OZ5PduwWPxMHKkesJYW86mBV(p&? znFftWrcM{OMnr$37?QzpMYv41C|Y>|l}r~BuA>;u?}AZa8Eq;g12M&kMvdrT_5tyN zMNBwuzzvZd0q4pyRAUfMt|mr~FLJ}7O6WKX*O*p*bpxRI1=FTRG6Xd5VAT;O;}CSm zAI)^AUoUj7ikoBohJ3tZ%R8At!fX^ z_g+6kA_!b_e(NZVKox3+T(F?H01XH>7~}RlXeX_v+q7^uEpm zX3xdX;Q>!aiD#ct7uuWz-Pc|GfS|P=d+45mmzNstdApd^Q!M?xm)_pp-q5A87B=tV zB$n^T-yhG}TlpMRU;nMGmhYf8J^v}soy*MKLav{w_jcJO5H0rXn@>n4y6|4{*zE4d zSmnH5;O}3Zr29e)ukMz&ngD!R9vAJ_!&NdUEDWFR7(Rdf=`_ByUV*pte#ddP;a^ZD zQ7B9^Gb~l67%EBB3Z-HSxTL3W?qCxO7}M+xbS$Mv^H~c;Ap_=2&C)(hGVY1$L`_tB z{pV;zc~A>$fo#S>N`AcgK?7zx81&Old`O8>8X6=*IM&ppC)N7)8;OtIT!Z^S^|q>= z0VA*9Eexulk;tDm`Va+Yy-xrP;RtP>4u+Pyx4)T7_;I`QTsOATww-jsX3$9bjS1+9 zfMX@CWGi^o%Bffa^@p00*g_M7FK$wLSt_aJyi72lA?^w9B&<)|(P<1OYxThk6 zacK9DN%Z*wr*c1AKh+r_c}7M^7-R=_60Bntr+ zEdIp{)aSDzIJ)80o^w5em58Supz1#&JpbxPQp5sjC4hZ9t@1RXTx6*s>#q2zA+$7E zMb_~-StZF(Y$POsY&7{rMLqZXH;kzqr6tBPY`f&}P<|m)*;jVV9DMwFhm=51EVAlt zY(1n3V^w9Mbr{Bs!V2*!a$3F|jkrC*zjZDB646W$-4f*uZ_|L14KB_^U`SmH@)H~+R3Cg7)K6Bf zu<`{20j!~6>`xW)#6SFy+!11;lw~-ghYiVCAgh>af+03+h5gMKmj0avO)<7WknkesWAZL4O-5RFm1tmt*rdYYm5np;Y$dd;)=A=_@` z+z0h2ah)H}vjvx}An9yUF3+g*2SH?O*K?K}YmSq$%F@dtokf_5O#e}jfAN-q(``^4 zKO#_ksP|s0OzAM(>gl+gm(jxuWyOy`ot)?9GTMvM{LN$i zj)00vO_zBQ#%j>sCx@}tRhXAC4p=jnZ_(suh*Q7p0DCX%>?(N%4efGu+p~lGaCLUJ z&zti5=cj&_U!~g5>X~2o!S%j&c9w4Kb|rUQ)qt8_pvirE=Y8^%xy`$J$*9a;ZDrsn z;dC-R&qh70H3PP;Q7Opm9JF$@T(0w^6wO*H+LtZ!c^Zb^bX*%P^4oW#(lTEwGy5sP zsQ74W;<8jsR5Sx$X-QUH=pAapI_`JE#P;U>>Wz;YNrb4#+sRs`8GFy2OXoAcXu zqIiVvv5o?v)7z(0_5fB4W$y47?`96D1?9>qui?JM*^|kPEwy`ENXF#Aevv~3N#)L7 zPW?PZ^ra|&6pRrcX6&y=7PNIkkl{@2D2#>84izEW)sS3eLv&|$1W$n4)QCb_LCU9Xdx~g!yqVpA@*U1=YB%45t+EbiPb7%{{7k;h1=W68#`b0}|yCqWq_n=7*5jaPzu;79@?60 z?4YaDuzUTdc;~J)$t9+oaYGK>54=EaX4T)*? zUur6$rf84*0VG(avIMgTM3Xp+au~UUB&sV=BkNIGVuy)HaYFo#lql*>-1+`VkntHG zotQ*+J<+t}h!#>6rrR+CW=*-%;gtVfxR83!?Hj@LXv=5|k*a>^0%p$Q*rJSA;ze;q zVA*V#8ht!g*4;I)`uJbCqKyoPkU3PidkMra(BO6BrF^?a6IjLJ`qWZw76ovNWdUOH zTkLW16j@=JsvIW9T^k_=h z%hGBB;ou`kd7pFDAT_V1xq$Ln565i56oZ38zo|#2j?g8r!Ww)kEeh-u0xxPMS0PFO z#XsEvCg9M9QvgaeMlTymH-HUG_)WyDyXP^GiWW&lnpuyw;jjn@1EVs~F3d@npI1PK zY?fU%P+{jBA$V;RjdIp*QiP4&K@U76WipUA4Wd|xp4;o5sVFk2GOKzcaU-%Uhr*PX zYe6OcTUR<1%vqj1HAK26kVH1>(NL4(pCsK8&oX3G50Vy$UE0g<`_rK~P#ZJ$-(QPc=(*2cbir(F&-!d~MEE`L$7wP@J=dJ>rl zlo&E?3=LeU#KGDo=M7gB8+}-Uk8T3dKLvq1c|xY0B)F;SKSmLBg0c6PdPHJ)^?Ak2 zfC$qkQd%kJ?MOAs(SA;92)bk91S(m^2SU)UjN+UTiA2$o37g@;5>z+xs~6f#maY2m z1R{N)$Sqg+%QX359Wn7s3lbSn?rfradi)W|G8Bq-+>0LzC-#XNwb z3bCe5;(^`hgLhK&2STMc8m5^LA>|VpeEp#9jq?ZB*!5-!a#N8H3*Zg9`EZ(@rCZ}) zP#e-)$Zh$Ka6g)?gPSap?+Pl6cX$^mm0 zBcM#|F*>X+8c%;k8Tp4FxX%W6CR$G+5_LX-km2_QCyw<+BW< z2SM{ZBr-Iri&)kT;-~Qm(nyH=eyV+zXrypY;g&j~7O1t#ungWH9n>1iHF9u2a%`d* z17x^u8O#{&reN=~45J!jq!YFi2>t4)tV1T}fzfG6pmqA6aBA<2N-<;#0|frT%#dzS zY7c1D-$dXB0uU$V(V=fpwm^kNF<6+MfSbcV3m#%AmTi^Rv7 zTAJ`23z{DDkg)fo)q*ug-m+^*x{H15 z03EC>WuW+LcEehShVrD$FRDb3C;XdG!f5_qO}xk0zhjb{x0SALZa=38XlQ7gw?60m zN*x||7`JL?`+}Iw1OK!LeD-R*h1c_Ww^n&a(c808p}Uo`eW;3PvT1W6$ekq2zi7&E z*<$=f?Bk@O(P})?x%%zVzdmO!TtVN9;U)yK>?x;ds?`Q**-`|72iBDCEJ1{O3FO0Z z(r_sL*GcDJZ7Lo1Q>k2L(2KEu7r%hvIxp(lq?8j+vN}?Aq!y&rPfvml_;d$<(B5OA zX+j~M`n*3DE_et5P2GnnAq;Cvo>P-i6BMNPdnSX~yB%Iw))d#rduGFr6N#qMQw=?y zVoM?)N=w2Q+7|-6K`bWj$AZS5bmEkx4CIxa3e{O(L(W;xe+dxYl!2hXkl|?Wq!U4D zejY9p%RmJ|Ye>Vuu1tK~68OM14jOjWJW3HyLZRLir9iX)+aKe2o%s$7AONhes((&3 za%;?OqXXR*5Kx({?I!aGx`m{|TQg;l-?EQrJC9%t@YP~IO_4Z}{4dJBG0Kvt$+m3Uc6HfSmu=g&ZQHidW!|!FblFv1w(Pkd&4Slz>T|8MSMsU|j-<$fkF5DKaY463L(Kd_| zqD>jz7unyc<^1smT8DNc0^&!sW_Jz@K{-YLwGSMA$E&gE`B$Ogu zx2?ecAzJ~S`JW9X`M)y(Xqh_M6Nx(+x>>q-jwCVsyLs6EX5RmnshF-qK>d$@oc+Hw zo{*8fs|(S;Od@1wX=~_WX>a$BIbM{l)j*0)$o_E&Qq}Ecv{%vnufYZGM;!=jaX3G-qnE!q+bdG;ABt-FEdq?Z4QsCM3tgo8$*Ci*M_!$@*FM->JVoCZe zPzpaqa91Ojuz{|o>`e5@di2)g0xWt|dp0QSCB##haAi>HBUVpvBN~!kjllbQt*|!F z?%5|kRpRm)KlbF{%#!&_y@^=uE3NU;l8nbs&<%1+h+z&^AAfCiY00IaA^Mg>R-nKw z*QAoryiIpXD;RjbHEBDWZ+Q!M&=`;kcYxG7#Sw@RjDeiLxheo?MW$F&0tZQ-rCV2Jd9#wP@)8mt{ zM9)|0utoGnri`C^$bHkJTvKbKib!n^*Ypv4k%YUGG%SphoLo2C&z(Q|Kk>K`+wQg0*wmRZs!L5jS}*5XNOTP+`D3R~Q@$Mqgn+<)c@3`tX7KSK`dPJrA2 z&Zqx`!)~IRNAu9&&wK6dL7IV;g(t)ik=Q4em%SCT}3(loNIXwdD zHUoVc%-ivr_^bc?Xg8N5;5thMXH>1>hE8sje7N$`&V8Me(J6P>cwR$Us$0;2_`-yNNcs+iH(SimCG>8Z1wN+15g|(r;m1F? zO~TCcCyxzk4?P5mdg(YnJF)yRY{~1PeCRu|K$^AM!sOkAIVWw#5QpLV?9>8n|I{Tf z@B>|?huz7kd0oN$OlDF_$~}DH04~cX)v@xPgy?8fGMc$qZTmt=UMNbqUTj$NFd`7r z2hR`H+aBt@P_~vpE-$lD*FDr7n3uc-#Gt#qxO%(0y)N+ETwAC}YdQW2jKomrQuQR#l$QRYdds(_2wD7IIq_YC;4E%4 znb_le%m5%KCy$;I(HrUQK)VKC#kJhC^W#sB=#{ZJpkr{tdQ8AQ36!@>vK8y*cBJ*) zP-vs!SlHB(a&BKMrhwTYM-2;W+osqe&ya6JejRR^ux~Mq_BXU6 z6uAH4N#kYd?-`YsS*kl}1aZkMt`6o1+##L5$S^^WMtp#WA>SfKO5%Op*G!~|-`$v)Qs{FO)?Ia=r$6bmFR zU||ZfibRQ7M91AL!JkLx37~7kTaDc-g)x^V%v@o@bn!|l!6xAy!KA3M$E%6iAa1bZ zGmS0lFu?Qe2pORXsdg3kf6}#IsZX%ccbKGRhoWkkI5Cfpr!r=9ronKUHgd>v4 z@+)R&N5zSLa;sB=s@u6`vUR@Cpdmdc4op__t@Lp5dDeVI%$xW<+J zV(~&g&gZ5|u0J|wh5s7d_d9GaGK+EMubU-mE)3CEyIgzrcECo8>$ha@sTxX=-OC|? zYrfkQq?7l-!mSN6qn6|SN@mx~HD?~aluHs@B(!Ytn>)ni+L?MU!41MN-+NSgt>rmx ztX@!5X^R0H_J*y0wRYXE*j6hJ2`^t1GrR@!U$#)TH}2RjQ%hmhKfh*W^>buLmtonK zVjGNm45L}DFr2a6v(vwiS37|u$$3i`B;mt2&Jm&rHnrB@@ycJ`i1aU10~Y=D^WIuC zz)0&!s8r?T23zn4=C9tfEQw=HB45p1FOj=aViSD?s4y;|k@Hex^m9Opd3$nqpUJ6P z0UDzaw-ylJ2GgmB1S+WRlyVG6!K2ac-`7K2T1WN)f0M3|t3YjA_elt1&j}#G zH&O)a9ojjOsNYz6MLHzS;NOHIqWPmvdCOGKdaIXJK)(vb84N_@bR}FhqE-CI#|k?O z5>kqcE24V|m?mDvt>Dengi;n7ICq7BML8&5+pWu>7p(l;x2Y-7SLl9u&=&_=x^UwwsqBr(C+uLab_v$&N# zK?GZiWari4$Xg#j9nzcqQ8Qp1kBZDqO>B6(YYfO1RHrI^#6%1fKJZCd@G@LwOk&Gkp!N2Pj4EFMmeb)0EeU|8snbvq*MQc)9@I3soxiey%*ly4b2feKR0U0zb0 zhP69`wuDU4Z9eKsvH)5#ggr4nlIZgMe*p{(w(kMMjBPgPL?$IwNmog`(^b7Z!;(SH z4Ug`WV_&$KpX9ZqR_NxCZhL;A`fje_Tmg>;x6tqWrVvQ-3SON$u^?|bD`c_aVKEEK zWj9S4BMkBpTm7tiD0WaHlGQXEf*v)>e~IaV_BPv)V1a-Lkp3gPmz`|7#D9#zY5z&`@qY>K8Ow0h|FQog@cw@X z_d@@(f$8=CJ8^!CQoq!oAX07#yR1A0vOI}56`w@yt|9}3bpJwg5*SUM%%Ux>L~{M_ z)U)wmNPz)+B!NEpo88~}mB}azveX`T{U+PlGG_V|fpjx{m#jcXv}_-|3zpfyK?YaC*UyN7X&5mjpV1;h(hdP~4Pz;fx&LyUo&84h|H2@8uh z$Z=bvfQn2-A$2?<)Jg^X1xG4X7jue?r2^Ls27zB2^q4lfl`dNf?LX}2cwB}`gnzqa za%gA&z-77*ZlTXya2S$P4{5Fd?GR!aQX%7ARm~pBnGsJh^@AXYcMA1;n-6xuePDky ziOr@f?T~cn*VGgG0}EJjgFYgT))BylWU)uF{|YZ)?~%G5LrA1u^(_yF_ii;Vb&gwn ztq!z008K&vMe468u*gv5aM-Q?kNl8XLOId}7zjuS^gkxD75^olWBs4zb7qz{rq1;A z|DMft75-~B7n?XOH^_(-l23G9&!Ml-?i`KuAY4i#EWF>^&}O1K8h61~Y9F8bK-nDb z)CAzUpI(zaNe*}b%SZd5+2xo7ZndH2S54L06P)8DP*~#u#{(AXrm*H1lS9M$wJ0bT zP%En_yzQ)?yhDJ9o|htO0U$MS2lc*kJf&K~UX`(&xPj;t`$X0_6;2@lhZDtbFK%xJ zI7I(3Qm|*7@k3aO-qR606))>4=uXzDIwWMWYDV&f>4bv|e5s-xHJs{#=p0-!W?>-s zHON-?iCCk15I2Co25>q0UK=ThzeYW^aPZ3q-)D`PBX0%qPV2FvPE$ctPHf7#OGRYs z^OjGyU}-=<|qU1c8x8z~YFBg%r%d z(Tsr&K8plFLbjIBm1tp%`sF!+ATif8tt5l+z`c09YakGQgPr2)cAS&qW62?gEEN{9H9%!gV0=08{dWibNH$ z*_AV4!Z|4dUCtmPz=A-}8U=eKnsO`)J$SJo2oehg5))p~b?xo0u37}nbzQ0P{^t3! ztkwN|{d}qG?f>qr8i=&7@_CKw+VP}Y=W9~qTVLgC@_9W#X-`kNWA=IdsAIP|u5jm^ z6zj?ol&)SF>qjoB1TK`2@I>jk6>$WzS*uf5AuGp0dba3$M}yy2_?ruqLTcEj*~H(F^%m;yREypKwz?xlieH_;Gg&3 zJ3V+(!i(dFdy_@;78sq`nFBu2U-*9BdprA5tE!6ZnBpoTiqXL}pvTf6l_e2}LL z($tNF8^Jzh2Q_w{@;dk^OO61x$ayTz@ZR=&EH4v-lz2h7n?tqxN%0Nf**7FJ6HL$Zhtz!KNj&q3ICwe*C^wWtfIB*-d?Jr+oM$n9B#!?!0)v=*L5QL)zgzoe}!VtzbSH zct8-M=#{7MY_W0`1J3D%*ro}2cEQP5YBBJTO8ag=+$x{^d}VwC4n$G^i^8UmTmbZ- z9!(1&0c=~znxxJFzvv3N{GwDF`uLf@-M?_opnU6U*0Jk5Pgx#vGR#WjJkZ~)hOp( zQ#`a0l4IJSw%Q2s=0+k37uK8EESTmt(@_w_o_f3AY=7A)mb9!nU0!}9En>*6&WTeH zwlGB*(*jq5b-;qsJ89#G*R}PXw)A1!l^4!aUeVN|VtMJZV5SnnCgF%UnoS*EJgpzw zwjh^C1*+<(X)M>RF&C$rpKO}<;T6lh2+o8~EYK00D7>M2W2T3nEnIe5*e&ESl#pm* zs3ke0a~-g>HotkzN2g4Qtv(8`s%G)Qnof{$7Chc}J0rLN%5d2Pb$gj(c$^dhGMd+# zpk@!XHi-c20$QfO8bO~oD_$dQ1ZWN){iU%xmOS>rhY_#9c?m*R2@!$dxKd2fTS6Z| z_s66(t0T|RCAR*#M1Gh_H^jowCDn-Y0MQLF@90xIg7vCF%tpYij%_eNHW3-QUH3}L zGl|GJ!f+F26Ut}fKtXz$#iKPS^h*^>-QeQA5`wM4pi;LNvSKzsYkE)R)xB}^Q@{_g zDhJiaEDxgPPH!k@Yav`A61b(D053k8sjjlNa@d*q2J#?c9kpgx?D$YU8QChrSow=v zZTrWhxZXJdt-ZHAe|=wHoSpbgPx>rT8BrYmPD)_8kpiv{*sPw8r@xfMAVnm3xV_Cf%+vlFN{99N9S-QFX*zQABfbho{%Em$ zsQE#M^4}Y;m_{cM^J5mDJL{2|SLmL-=qLAEL+G8|oSzefUV5-}r~B|cS$l1kX2Nn|u_ttkNMApT9ofjqr(_FBcH4Nr{nPkHKg#7KXJxT$ zK{^b zqADqmfyqkFPEYgl_qAtRCs3<3yv>Yve?irk+&0-{KU#2(oEV8oLQ&!(^lzHh^tANZ zyJ+pPvDsZ+gFh#gXI?Km`%*%b<)tF+KgV6ZLN4aVzXTZWEDv?9chxvtyDNpk-tz!F z{7zXCWs+m{P7629<71}Wnblrm{o`E@xm8y%0%5lxhE;NTGJk(S5iBDfhn#0-=i)S*l%~Jan?P5H4AQvo=e{w6g=WGV zoDwq5klPP}LY$|KH5b`7!#(1f%D44`pLr66qK|q?s(y(;6Ch3WWD#zY@0{Mod2R7! zq4^V-aOfgNUN@9Kta49zXcWd|1t#i3-@SlV!^*R&cxCJOGPm_RLYW^AH+kN#;Auj) zk^cu6v4J84eAxGi-Miv7xj_n^_~JAqixF18!6|CHh;5BE(gY%w*Wq&qJ`3Ox3?a&h zpJ{FDSK}?Nl8SQ5)L2o4&QQUN)+S@Qm#y5GPlG>#g))T zV58%(2R4*v(j$^fdZ^2K4tB@wPath29hxV?$s0ZnKBDa;KIrWa1z0#X3p40@IFR71 z2Uqdh?1YB#{7LSI7#2Y+(4Am|Vy0%_$pT}=#{B1)xcI>Stx%b4d~eXkc6o2lBR?#A z9_V)%3k!+f)gpgN8`x!#+tbigKU{@OnukF`ID-O*a@pC5p*jWU+t;)8^*Kyt#fns; zEu-KX9>^?>C^i}%*sY8i1@l{rwbgkC@=DZH+r&(vp2Pg(JRM?_3Hv$$pLXKc{vd68 zMFlD2WfsQmI&g!P_rdu7D;%?2O0!&t1GP^coE*+5_ZCHlMt#-ZBE3Vdt>~MfXrwT< zK*P8~Ma>~gL!H;8s<6n#fw0B>$VH<-vWrfCo$4yxB>{epm{t^4T=#ebqFNq5 zG2L5oHZ`6B^!p+7`+zuaBf)H!Ujp^LZRsALyHLMolRJes&j*vb$gjaT&qc=i^FFX+ z*)Ysh!X#@Hxky%aBfmzC;n!FrRCy(^e*U=s3+KqRb>fJ$I27uz{`r#>NsqTk61Yoe zPOIt1b(`(0ff_ng9zkJ0YTTpo-!EMpR34Nkrw54%)9!uBo0gA(dfkApE$PKl< zZU&amx)@l#pd5!8d>SSMeRC-4z-Hsf5aTKz$yDj4T0Z5qgEYT}-cgu`*Jxyj2RAcG zURaGLR*=P(*1LYpN??LCl(YCD2!lG=A&B^|S@02#y^tTEnBQAJNRKuM<@CAhr1g~q z7#E6E$>_KQ)%;n| z{Fln6l?t_Gyf+Qf+p9gNWsUlW>A-;Wx9_lpcWFcEza1V)k2o5>rs4fUw=^0MM?dbZ z{Cb-osBbjmGw6ads+T4$840i5p*2YI+g}%y7{+=Jz&I*W55$b@rTPYRq{ehc@G2mW zPL5&f<{WYn0$ybUDYMuxuk3?xMJqoOEk(3s9k8I@$NZu>rKdMOj~T_@linYE1#xNQN1s3%ZAxIRmPAsAWx3ZjXFdM!1&?nZD&7k4>?W#HpEVfV8LwBSIiJ@r9)9xrIUo zYtzf#rY2FVEgO`NsU=$PxS7fSGat9_8$b*qQ)Xq<1y)iU_py0kJ;WrjkB%Zh)Xy$q2GPB1rNZif-N89q z1j;v@24EuIehq8dT?Nk;@2ZkKnD@2<8ogy4BR|~tZ_68}KhDP_kM{70Hdd>gy;_?C zi!I8JGG+iW8#FzpDk3n(-eDvrAa2}8wTN?xFIE01?)=dQg*WBrZ4TylHE#~$S9Uujx8K=kN$ zGg;PlIHC>a(EFk3G(4Cp_)DX`ah|pe5!w#JRPyj9;Ar<(LY9C{Ewt7a3XcJ+Cj)Wz zYEt%2XN8B7tG1JCbm{u?J>4Hik@%svA;ALv4P}H5(B8dNn|0$w?{%C^$vh|AOD=Km zBnDERV5rK(apq2}^RBq^!C z)Ry4B$^j$gLhH2i6ewPfWNc8o?<(gC6XR?TljBuKh~BrLqX@b(gjfoBY?5w0*=~4 z&UV#c)KPAhL_C*kf&5hdO4LUIV;QwK3wLP4)TVXmgW+b8_1uiz`gdaBM$i-yZ+Ngn zIMlZ;G6+?iwuoJvY*71*u(4(xB} zV}+g1jswjg=`VywsYFK3jaux(7JYYg*%1P-=BL36Ukr6)!IkD})D`&u(JL(U^`E%Q zSOaVR8iSkLZblzhl^01^_sMuyN&kG+%~K8K=HBbT&cSy_%Ve=~+$ki?U2TXi_pmDe zvlaqrF%&Gqn}VA1%t7b@0&-kZ8E&vJyOq><4Bok$MHBEE`$EOw9(eWoF2gZFq@vO_a&HH^q$$MS( z{>8csw@_A|0#C(vSQGcD4fRPU6|AJ0v&(e-O^H^+55jiFuelGm(;qL2(MF2oEr0bL zd4L<87rh#vxbFH`xyDMxpoVnDDk|tzpenCbu$28LI;!uubUIqIhYDO3Q_q_!c4vTc z#sdIzQb6&(QuCO2Y7jw##;o<^yRM)(8JgY_iocb8$;>5V2mA)B%r6F<2RYv+5rSeX z0ZQcL)UqQY}c6iPXGf`#~w=0MwBZ{;s zA$}(bu+foDh`;V@S3||!jzDx#WCTJdx+vI{SavZ483kT@YKbkAe(yXg_{alH!$sND zDu=6xsxnk@bFY%OPk~MQJ~(;A1=Z$%Yx|S;;I4vIyUa5oeVW7DIKzzdLKar!a&akd zXOX&>4v5<&JkQhs)9R|1S2bkZ`QCKLdOV5ow)wAO$H3lf5?&H1cR)FytH}pHbKQq7 znZO1*^WYq+?~u~8maF@zTurYR&zeFVqs*(>ze%Ydhp^zI z0f6yqm0_ZnWTO1$e)u;l=Ry4SGF^Mgq#G$t5x!*X5^{3~2e`eDfgINLK(zS*b*iNP zBHIVtU*;8Mwsv88W#qo;<6z1DoXZWP#@D;*yD}o`P+%{7&3lqZh`q{S>;imw1EjC~ z>%p)xy>=l^ny7(eJ(1%S*TqBfew74(Z_S6^O-tolO@0^=U764#5Vr&TZ{?s*bVCh< z8+CN$8{?O*EsjmY&j8#8OJe3oCTlNZ_Z_n94RM0hZk$c0QFsd_-D9%G#EbUJ0^j1Y z5A-B`0P?{^aEVz@&eUGhOAn%hgC41i^$4_dYaoIhtXmHxPP=lM>2{(NdP{|{F5z#S z(Om6YUM1v7-W$S%^4UR_ZL-W)*BerYpfmpzOE4ob}b^xveJRE8iQo0PXYL3fi+_;!n(5aX~My=>S5B7YO~a*`024z~39c+@5nBMBB@v z`|=@P9GB~r3w;90Q8=G1(mn{<)7qYYd}_-ar(I|mL-k^D1P)pp-=?GIIN1+Z&1Cg< zBaT=JX{H1BqO{c}roM(&W}2KKAbll%D5}d;Wx5l$lT}EDrv|D@GOk-S(<|#%N5&g2 z;swONu-^_obtY? z$muhS3Lc}-U7~g5Ba$Q;jNsuL7Tl3bI~}pOsI6l9?2io11rj<0X%+OqCQc2+%<8&~ zZHIx;y9%TJAnKwZC|hWqFs!b!S9EnGRr@eFrx4nrdU3l3EYqo(afgcZfR$&cU1@g$yE7cg!KNUWLr6?((RwMSu`l>3Euc}#Q zI;C9b^V5F{CQ+Lsr^(J*5yJp;Tevz!)S+=SAld~QaPVUHzzRU0y-hlGF-th>!OfZzJ|FQPO^xeXc_dE8lVHby!o z>2;B-d#Xsh!-CBg!YKsm#fK{*Rh#V9EobrYdzrx@%oiqcLJODNXyL=)&D8|aCRB9T zz1GOwh}1-=ehO35cTq=?!IDS-mWIm34X(#%aclS8_LdXJ8lF{{95M@-rs2wA(4RVZ z_#*4-rrLJ?K*q<%oBj3Q&T;|Enle+HG)Bin>Qh-4?t@T8?Wu?!vB);7L@1Cv>$H;w zk`R`eFW&%pDBgu~6_T{bKx}BRL50-{tMB}XLcKS3VvX(0?c|+3t(~<)8s}|D1f9T!PWinPj;@7rWZp zVFN`Yf2f04SSJ1#3K~}K#nEOfdgtC_=A$NeB8t1vZ61o!cN*8;f`O$^nl9ulK`WC4 zWilbbi?lIXG+xwY=;M_1r+(HcCa%=Zr?#@7gE$M1rgVP#N2=ysZvyi2r#KGbFvx9n zMwYXnAZ7}p==+;v4m@eZoQur0wC|ti$>Z`aoalWbg3Pjr5^lnRBpU?aoTz*HnN$P_ zDH!rod7Jz9Desa#d|%NAegvVB88ND5>K5y9#^foP#Tpos6XK%RSLNQ*k~Wcz-~ z_C-J=k|c`9&KRpM+YWsDjXllr*xgluw4MAO+I6IbCJ@)w3FqJ_dqa#k8A|gR{ULCD zUeHEVR#c`w^d#6Z*U%qE*){$S!vRr!*bREO`$c2OSW$Uzv(xBQ=&MQjmDBU94-RYI zAq#H)CNGmMz-@pdozV_rWU>g%xEYfBnr;3Wan7MRw#DMzS+Mis&8DXHr2E;6EaUNa;H5d1k^E;Iv|= z;~=m#&qv#MbVmDrYgzFDoSDS}z`H&6>uNNWtk+4y-tlF4uE?p^LYszQ3S$d*H^g6P z+eL!w##mzGP_KR2S!@3oiI=@sI_niUptf$rUG!N52qOF9&MFmOiMf%ocxk)ku-z~V zZ-#Q5*feSZ4$?3Rp00>T*Vqds0|U2Fh0P6oqi@+&Hu*W>VbSoB6AJm5vN;0YZ@w!K zC3#DF!^uA11vg{!tD2|nSUuzD2o!L5v6iawP)=g%GeK!aGT3TL4W3HKaN3roF;C0_xz zeY`$&cJ&=NX0L9HRJ0c0g-L2iV>+LsPR^_Ck(s_6gpBS4QmIE*1WLZAPW*Jaq9yB| z$PLC`=Z41WiAJKDGw7T%0QGuQ>5~X#UE+9SO;Jeaab)}Jf+;b;i67Jp*Z$P^x+YJ= zZ-tvvBAnb#7iXdPQ*I-sot5P59a6vThMw4>b{||%8WfXugn-*pe(zRJMVtC#({~Cp zb9ofdBeW5p&MoGWWecdO@3>D&u(V_THsKEv`4Yy6Fq@L9KBk8ZDE1Zjr&Ey8zz@Ee zr3iX|W?~pk&F#qKU!()S#nob4bkg36Ge}iSkryY57MU%Kb(Z5y#XrSgFxT(y*N1Lv z^2(LH|F=+ zT0W(I^NKx%hD8wx)(*3zho8}^;Xx-t)GyV|DZCMlc)d;#P=MlLj^IB3MWVb=9mh~| zW+-;7Q=Y-lB8*h$!iMZbE$WkAbb{57N)Trdi(w$CqSR?9)Q0?Y3w3mt zBa(jTY8mSiy_ebO@;Pji<+EyHmG-1Byt?T;;qpWzhSR(t&w@iNxLsn}fv#+1U*`~v z5Nz=MbD=i`bkh3O0`-D!jN%j-FLBHd?qADpJER@UkF{Un&e5>!;c@K`Fs#WKg-D|{ z3r^WP2loNX7Psipbej8V9$RlLQ8&}PSxftxd(;Roq3B#j(uWsm9u3;!QwG3$j~$etsbs=Cs!@%lxi6iN#*RZmy9CvlC$rrVEoesUF&0|}{a8{yE>5`L5EJ`Qul~nH zj}X-<&(i6$vUqoo=QqeznU(q(sXI66y3XJA97hr3NwRqaensAm24aK92<>%C^DNyI z9bB><&2oI++6=ocDQ*ty+@M@W^4_uYT-i9ovX$Rpdw73xGPd)m)arSpC58}BC`#J4Hd#*BTPmd$Su@Iy6+EDvF^?&u1$q83jzV>LCp{=vN%e*kTSO5m&3M| z(ztzXhx#P8D?fTln{C4K8R+~t7_^txH?_5;q;Wq!1i~rIbpds?XtFaXF|Cbh3tgHP z*@?NOj*Bk}n$rC&GO*{rt{tBv7LNR1@(VtnPkIHu*G|4c{s95v)$5@~A^`$={x>C0 zG$5$I+kZu${4=f1{{lmy*Z=Kc z;a@N_sE@@|eE&z+QGLUI?h>N=Z=uTmVf(-JApLs-l26&c!pZ(O9Ou6d&G|pYDE@zD zx#))VQC3}{>XA#Lu%woSp;Muf6&B=;-=i(b4Di_Z(KFMOjdo0P(U}#<*OA9HSJ0kYEkK)u1(+UWz_g{bahb z2Ip}D;5ONd6l7|ypVEAP=$5%%qKEqh%ER}C5a=6~LDdnk&)US!q`KHlE1FR9)pgno zN~Mkc@>Ai_9WeK&A@lzDcsl#*V-Z#lkJaxBfSsA?EPXtclb@;CX>i3$D)n2f&a!g; zvNpT>umbGz4!{1Y`O2p#)zTitV348 z7b-Cry+1&mb{ST;%pe(!f)#f_F$5AYG&d)wf41pnCw`bAnPe2O4 z{2|a>$&tPd2r4#GDp%r1lQ@4UDvk$BfWriZtq9`XEkOQhVj=eXY$~8=ztU7NfFGXS zEk(Ew3Kj^*OdB@Lj7pcq>SWGB6?QBT){FL&BeWlvMjo~%TChC07o-x~GOD5x%B^P9 zPf!0;sO&5#RUux9@MDka<~p{i>NcoyTwfz>5Fdr5h{U{SI9F<%$I+121Q{6r5hU*D z@ys|KlIV{hSn5SKlxY-J`F#r|tXYONn)R?>CaqM-Y+KDB6X92aU?uMQIj=kr^RwtE9f5;6@RXr@7w%2^Mg1j=0iFk=!vBD#+fDAf` zOPX2NUMG~fc7nl}ky6Za5z72rnS;)wDiR>Q4ISwwlo8*r?d|+~H&wg&tlS z_>ZFvM}NaW5P|ogw~(cKl8RIbK8FWHj&%jZ#e^@_3V&RiGGZ~Yf7_I^%;Jecgkzm%O zR&jd7)->C(36uR!-sJU^aga4N=zA_dh8E7_nr+dZ2M_S)lH@Tq@QxAERqLGd$317k zNxPqIDS=ty?*;Vp{Nxu9ZL`A(hzUJg#J*jmzC_PiHh-cUOCuL0Xa2CBs8Fs7U>jO; z+$Numr6DLur14`nK1gOZE!_=ENT1NxAC@MT-V3Mc(QjOpnEXL5Z7h{HlWyg~F#QvW zykzkQ8RPc?@{)l30kzISXocf=T9LqaBL(xKSoJ$_EgX4bbTUXC zLl4p6;uGqzpBDX>oyQ+8b~>KoTi$7sra<3_N|43RC1aU*#0iVQDic2rxCsl+T>VW2 zbyXqHg%ZdBER4DHsU=C3M_eaAb4FU>w);`QZ{{;xG(6P`Y5_y~pDA%U{NJJptG1WL=)qzATNR?-s-|Uz zf_j6J`&tUtBTu+;2pMZG&?m4ww}dQ)LoWuk4@PcP`p~ESR3f)?&+}1Lp_yTPYz4Wn zQ`Vvk#^rFQ=wp+qwjNaR%aS=SG#K*Eh^Urma8%_QL9Ypm9PXGb_GS?GvKp`P4NC_A z+JaM#UbNz_)>7p=VN*xjNti)XUG7~RLYhmVQW19%L$8P;di#fEPVh(50>ib>itE`K z0J8zw`_~@acgAm^%C%}z311ThjJ|P%zvP(Bg!Z+*0f^F21`s^(euKO7Xxg zCxKbrsf7^Yft?0i9Z`Ur1HPem!n0#@J&xzB(8R%-F|gwf(G~xYEHRzN-*x>UOM%8P zd=!#hJ10+^(L%5}O0X?D5zIn=sK3lHNN*5mph!mIV*^a$zqzGQCp1cP?9y%#xVF;7 zK38ryE#`~S(-bSSu3^N!`&Qrw2#Ru)A#vtV2#YWThBgn@Cc-O*@rgTiKevr}qKIJUv$FWoOp9BPs3TNN`GdF z-XUIk#@CAcfk44G6w?Q9X&GSRo4mQHFh}bsz7zPC6$E#$p$ffSfV%}(xn)PbMb zj>!M;tb2=q;A2DBxH))B*v`A#OM>FgBpk=SK%SBQir`Q1Zx{BR6MF(ahvAHd^lrrV zZUj04;@>E1y@rnC&tAffIAC4!LY}1zy~Fk3k3Csli;}o>C(5RpY)c_4+(xmLz<`WO zjAlb@t&Ids%cQW4duY4mQN~6NQ3gFjj_o;&K9No+SZ~y~yhpYMuhhdgTW@-d6IgYC z@AnXj?@=FWYbfws&}K5>M`7#1z zj?4%ZvGv#r-`FnDwgn8#>%YX&x?3v0>3{X6t@@V_zMXh}N(2155BUZsZDW>^bTcs5 zW&2wV{jyc`z_KB3ex)D5V{PrT0#hBJK!iYr#@@N)opde?sBI zwekBb2`q1`Zs&!!oru2BY=pWaZp30SI3J}`Q;q{lB`B$jWw_w1Q>nv^YMGBfo7cC+ z8jA(=8{wixD_sTbb%$04y}%>6$zJK}Dz|i$=_#D5n{B&g8U$=0XS&0jzXP1(AAm1# zH#F)2+l20L?1WkBnM=5nlR{f`y{7LLb0$3j?jtK3A`m@PZvBGr!a&=9o(e*EfQ6YnTkXln?g7e zZygBvu#JOG?P1qviq$P1=5JMEPqol>UGnARjV+y$GDn;kFA!9wbr6TCh(^_cHA}bpOyuaK{BZo#X*^i1$;%k9hbf!j$0~IgeWR#CiKAIyhvUz= zqVn9)0y&>mmF=Cm>r{u3gJ(sP!;IPIEC%9ljZy0%F0@&jf!yDAqyBR}lT7}CjD$3igne3@6swZ3~A)GgS^uMifo z`&yb4=NEg4*V=eZKR}weecZr<$Mq`&VlfG8vC_aNnSfF>~cxXv!@-HC%U7Bj<%0^*2|qp$^X>e#-@Y_}Xk0(JDi9C4*TXM%OG! zEGzkgD-&NG-*Q&$q4!-+4P63%R`M^rHxMgRuzqA;&(= zzhJy$4Mu3U8qg1*9r@zIp?QNqK3@QxyqnVK3ORuuI}L;yLSMu-u`4`;MxPy?6!2yI zQuuM=mV{3ZLYE9l?J}B(=uIGI1Od%cLC-*g_+kD^5MsC=C6tk)rQh0G0DDyX`7!N_ zNo_!O+nPXoamsA7k_1TePl^#)n1|?@tr>~;9g7Y|wF##mB@H2~gK;O7K68S1(`9sV zEKc-n5w1BxUa)W9?4yJvyktBV#H?-uUkUNv;G?mp3spPfo&zUqEQcin-DBNs0DC}- z-x|x@0UwYgnRE(RW?bmPAH?fg%;(T`;Nk6eK>E#BKpTH?`z?3f>u@YbJB7W0&t~er zaY#4wMKl)mY`DB9v42KZ{#_Z|vdmaF@9~mEj(zgmGUG4on=6*;Fy!9EF=Mi>zj{g8Eancv1G~@nsfycH7~5l8fZUTcATa5z17IYvZHIj4_D*@^3jp=( z5*^#PRJ-#E4?F4xw1awn>gXYlRs~zwzsfn>L#?yv1T~7w-+cck|Mzx>ufQ=tSmj$5t*w8JA%(&LCyj^8j8q zq|?hw%duXW_Zr?8d#__J`|!Tr-NrVOJv8L~!Iimb7HPhSYaZ8Yq8^3Rqu34Fx5%)c zYK8RrIoE4B*Q-6hxUn4N_zRiLgFM@;;<(k=GI%mt@m1XhWGLH#oqhrBo!_B7|o{g zyvb8X6-xA&_axq@dQamF>5=CQQCd+Qr)b7$+7p643PB%)AZG~L5`?^~Lb%!xR1?v^ zK3ROmYx;spJ6LbeN36G}Y5qblz2u;i^-R!yH&%*5N}(#b9mdcWCSIy{I4no5bEX$-a!cd7sW69tpNfEQp+KAa_ zamUZ0`qc_c&G2BYU^lC7{iF(Qb{gfP>r60)70gnOqG6o-&j^5bx1f5kgk2Q0QFGRc zD1FXJFK$ug|F1>$C`SrpbVJ>6hgC__BTppaHeX2JPqtK(_}RiUL5B*JX zn7qbcfY2VSW47FbwI4ueyn#Q{Y3+~jDEV|Z&VniCwY<(4-0psS(4Z(GR&kWabWm!(~2(Bd=-lY;Gt;uyy zV);{uJrycH8C9NZDfT(>a$p2_zM%HXx`)v3o7Y*2n>SgC{ev-=;@wPR!HbcLZ*yp$ zW4FB5bQ-TZoUhJIz}-RPDXQ7{x+SBrOnUM|ft5MIs1vOVvyw{UKF496?Z zUsXfoH9#e;ZqnY;e;<$cXIBlQlJM$Q^-GlYt*R+_UtKkYkNZOG#ZZxV6(NKAx z+{S8b`X+>1>u_gQS#akivT4rl%B0d$uI*gcRsouX*G?07K_mh(DTXgT6Feslr*b@ zXDx*l!RLBPZP*X`ekJ*VtS?$?j6vNYe7C&jWcUjm6S#gSbNx=neV(%Ff!kX1!M4^U z3pP%b-f;-|npRrrf~_}}rHB?!GQeo`JEA90jQqvPAV+xWaZRXCtiLx1If18{cwcACKcsc%9=92ptYVt`M{<2zggX z&~5y1O0*yH^}P?j--&ITr4d8k9ON0PdG8jy6q4pU@`hjQu_YF2?3lI=y7l4hsKF^x1a>`X!Jxw1CC0^EjW6mj^Ra{;=tamXZkHiQ&qm>TJ=3-2b1xiCuj0#kv%)uEBz?m&v;{EYNG&5itAw!Ug0pBdd) zw)Rnutr{*pnZB_Fag|8pL2P~1|HRyzk5*Lm%`^au~){#yqo+FBaTK{7d=g4xPZ5{8W8B%dpic^EYpD$vcS`&Eel*!z3{8J>y zKXc^RX`XaOBCl-MI@V=oCcAD~fiXQhvJ&@N*DNdPq>3;C99bE^g5KCfO?P{=!j#Fb zRb@-PZ*pMU2^ilMO0u;4DyprkXz>o(;%_Hi#Xeo7s5K?L>RzIei{7R}Poka23Y?=d zF+J+onqPb~V9H|h1w^58Y$cB#fFA9O$9s|w=R03Kmc-HJsG^*_}0}kuFCS(S}CoamQ)2%QeTx=x=)*-#Ta) zb4hOVX}TO+`HqgtKXQDFd*Ms$65i`2+apD1x*SzfO``Lz;&dX>H7P=LO1eUH8@Yc+ z(M6QhIKD-x?xPt4FAF~hxzD?l%X%M|rPlE+Ni0V<58#TlCw=1jIjGlQoD;?=aR2O< za;RlR(|)|Gn?9$0n=+aXHs z+M5Mju6bN8r{mk<<;zFGkuqSSyyFXl8hyc|0%T zEK3<2i4p5AokwOef7PS%d62%{c@VC_-tm$&!h`Ll`HIe@#y1|P6RXB=Xw8H3js2Z-uUA$yBMG+A-b~UcW`|ied6fcHr zpazD?_UIb2?3SPgzQjIwe}$`k7GA?-TqSZiEzegoh!f4Uji<40)?-r4HVk=m3h^kV zRY-0l5Ncy}sJxJ7Z^Y7B?R~slfzX|y^1(b-z?JP(-GDOqu%YguGWek3eDIyge0l@9 zxPi}PRlkwnUnGCXL<;mmT4%E~R_+-MN9n18L>c7?C&Oo3(wSCpKZPw0ZK}un15MYk z-TRxa%Mrecc3>3sQ1s)yM6;w6`2?ev@b?IU=P6P&gAoYELX!^VYK~$YglizKKn;gU zpAI{&jI$_LH7`4(;fp=RzBrr#;vd4a;R`HFlCf%%8?ow!FA#GWFBdkiM zQ#DYGd6@J}YoeoB=0nj`+;~i}PM07K>!>GSD)Vs2G!B`D<765~n;oPUM}oJmxOvM% zc@3W!G<2p^>QyWt>T&%RGHU`+5@c1H6S{xnPRP+s#E%xw>7^UnUk5)o` zs@NGxpZv@yGaT)Aua}~I%pb;UTlnq3lXMD&^}=m6dJ*=?urJ&$?dKbB$nXt>=gBl^ zqsHfD_<4j&Wtvii7s&7egrAXVaNcVyk>L`ApOR^wLU@i0&q+g{h~v>EJoa#L!xyuF z$F~X}#f+&K14F|Xb0wUTu zc4@~%(HVcTk;NG0aTHKgi~7jSXgW_PiL^qMf^5k+w842CL3NS)3ZlGBlnMC@N`Y3N z(AbFdms>n%q%q}Kh_&8DuYH~Gg5H!MoQ2lmwcfD?@0A>S1MhF)^(M!y<Tvdrf3##Jc-THnIk-^zMhADOlw}p->xfeUKjK^4&jVJeegNa*DIw_?{gr$p2j@x z19qd=oUTJ}8j#m?dVF!?>lh`Tp%t;9_UKzwwjSr>j696^OZZhUeR}~ZUXOSVfRI#1 zZ>J1E2xo6xA#nD_9YoW0j1(b~1Ah~)xT&6KP$lgx^0U;|2MgposF6I;y3d_gXL)Ij%Te5$Oi^FjrB!*ZDf2rZ;0} zfnY{IIEC0#dx{&~m`|lMDQWc$`)?Oj=u}h9&NwFgE2mT)jjizMOF?b@8T8PH+nk-$ zM4p{QKPyrs(X%4%S@qnru5r)0E`3Xa`zLyqm9JV2N2HzbU&{X3^U11oiqERj>1l=u zwS?Dcng=;l=XfK0lEOT+hsT{$S=1W?8I6HDT-!y;b? z{Io}=Qw5y;$)5rk5p+R6OOj6Rd|lQTHwNVMR;iTU*a(&;M3wrnR3EHsnT_T8^>oIh z36;jri7br|mj2&ZCnLPOTz(Tk^7#(VyW~;*s}4r>EO}J>+l=becB5KNBNWq=c4IeK z@>3)9ae0J>+9J8Rq?ooDdsGtY70J^0x+F{E>)6t-XwT=^ES=LuX(Dt|`xC1-)()?v z?KKvD3x{HX$Tid}QtgnoWo*-W3CmA0uKqK62(9Xo>v>$bjfhcll}l10y}z4n$jY)Y z`UU~kI8^buNz*abVW&40+Qri{E)-8^GH<(hTE+$A>3?=SO5@8*V==Ceia%37TTm+|(Wxt)HsO3(LvJ*qH2ka}l#dIZ6rjg1qUXcNdo%K;J`R?6 z;~FFJu94fJ)0qz_FGY3*wXNHvv)hZ$MA+6#wk@c=z6f_jPK?4)hZJ`-=61Y~`-%0t zqmh2A_51(CNdMVuG3s>vq;rHz z2#LXSf_)Lsw_>k{A_4_}&J*;3Bl7q@FP~q~$#1-4E06Bzd#iMvlA}U;m-_~Pm)p1Pv0nMD9$g6tL$fqzMqw=7rj`6MVU(1U-n|ww z<(%|xH9RO!mEFKHaPOq?aI;zbTf9`91IXC(V+ctS#l`PxJeo z?VndstfNVxZ{)#0`itHr*{XaV0Qd=;Mc%z@5V}hfw>O*SWc6M z`l}#gWcW#nMkKiPIDPvcqc@NIBq$wIEv<^t?}@P*(6d_51OML#}7-_#fB z`-ewZF-0XBzLF<t;ln}kjuNC>kJr0+y@MB8Mp(srs;c@UmvcPIIUcbk zI4_M)pNMtFImD_iRfDUJShiNZWI=67Q7OICFrc`>%#!e)%Tj`8p99OK?z_|#F$sS zPAyyPg9m|XV_KiNpziak^!G*x^Ibk+#*elrj4$Ar$?1|ZJMJ4{LQa=ctk9zH3zZ06n+sGfi(WPMf8wR2C^VE3@syQO2kdqb7`T+P!Dv{9IaaC*s1qh-#_r-}y}?;CXQeS?Pn z66yPaK;I?XERXN_ZL&6+S{-prXLM3;cI=FOOC95MIFAS3#u3(CmqiRn2dFB<=C=8MJ! zbB!YxJ-wixBL8WbRQR>#b;E#;mqIs-* z6Dyx(9K3*F1&hMos`UuLJLKFc7Ax*W?+{s_lhVMLO=ODJwqnFV8gglA&n1qkw6-$g zX2Z;&Fd1J;(|(;5rB9R)H49#6jv*BjzzC{opS2IQcf|L za>A=pF5X2sn1wk7K%xjr%q6x$0_N@(L4~<^yU4ToQdVJ>va6-6VB}d!pi<=M1T_-j znzdErl@j7WWd`BmW)DCv&uWdJj^7dwu#{)Ju7(uP#tR@kD1xpN?gC&2RHnETxpqeR z{Jz+MO7&pXQZvsNcEK)G3a`crQhs%;ihBNJ7r{t*!KnH*^{Go=Sk3ch#XQQ#9)?27 zE6jq5@+v*#^Sm8irM$uj>6BO5ah#BbjL?_zF$9s0RzniyV|nK=pATIqkG-?=KS|dY z;uyp$xPqZA)y zk|<+En6a&m+xtLUA8G4DZGEh*54QEuwm#g}$J>p8wqqn}43T@Z@Ttcxr!R%lw&Sn; z=!_b>ZANyRao=uMXgg;_%qY>*O`EBx-82=R!lGuk$Z4sBxK?W^I(&V#Qe;ZM(*vDicTRqJ#c!_mvKAujtX7sSyyABrm+)mxSBJ}Z zgpZw;@yZo9(g`0YIICNU4RPN|+?x;^)9mB|1O>sNg@XLwOL2$`r4eZmzXQ{-Tp^7~ z3e-To-^tS^)LUsNPr9Fnx_%dRFQr+bG(>z$8`Szq6{xaltyZheipq%<>h}hif-Amh z3a;H(7#Sqi`N`G$OTYg_Qt-cD`FiiOpGb<|mC}93vwxNGEjPD6`&SA7Nuc|VIoBl3 zPovO<&_}|YG?Je*wYJ5LhKuWVhX*=TEj)voWG_c6g&?JwB zWf7ynwz6}|LfPw=m3eR0%3j~PxXCjlJQ{8WN6E64oqa>1M?)uJrxoMUv;Xaf11Wz$ zpM}hFniWdhDgWmV2i4A2D?1_5^rVIQ7N+o{;+0Kj***$=`Di$MZtsB=uMgu2K3li% z)3TTT&J};QPTX7O>mlR!d|KAh%JHu0`wpxK^q_w1M23ir1!n+9g+DwM{x>rLt_X@G zT=<{G?a^8|EUgG~W-Sswi%a_&ILuLzDa2}YxSe23WU-nQTv!2=D`GWW8N0|>^WIoZ zH>Y!_9XdN>HQi4nH<=;%W5flH?KH9PevH*5m(8~JvVP`8+|6I??BV=uJK{=yXH8}! ziSF-bcJ@?q+)K6AZUV>Md|^ncAkqD3O_Feb|NBlE_tGcUZpx86Io-~l;%9p$x@7A} zr$pD2eYR7gOA|hGN^~heHHc0Rcgb`{xJ#zHQ;{swjZ`Mfba@gE>4r-OYg|QjDK9Npvatk@XUt-guWxXVl+SE4OP*-Yd}=2PdzP=n!Hu-QZ-9>7F8p z==4)KjN>j~SkCWN{>olR&M2pJ1P1`HdO`~t4wza7Y8 zKYT6ug`8Q-!PN+!3ZgT z{_KrC%7mUfD^U+=G}@7&ve(Nt+!HI1xdyu7v``rmCQ>{}VCwOY_-{Y<lA#Q!dq3A&zD27z^+mI~F(= znQO+}2G%U+@E@2w%1}$+5LQE4AFvf+;txW58I&08>_G9)CE=(t^)=9V<@}q}o zTAApKslhpT*Uq5iT=cGJoV(Pofv2XIh}wP?u?tMJVaIhI=CL8WLybPf9@=+Kv;{OG_P}itZ7Y{uAnXB`YcXO2 zN|y<-ibLb)*@E7j0K9oW4Lh0rvtT#?ehR(1;YAF7Y+psgtc>Qnx6Tlqt(x?6w_dZ zfoT^JcIeO|^K|=Q=2EhFVTD4Snu=I`X_gtLy9FPB!LC_>o9YB?&EPg+FPQRG+}pbt z_9CF6zPU{HR2y5VVa$Dwi9>~eQpRT6SOQ^7nOGjg+7K(IYCJmkP+J6+w4SANYdl$` zby31HvQW9ft?^}(g(U1bT(oTg(d5wuY$jSJG(H;9)9{}T)(CeCz?~zQ!Py)gZ1h7KP5 z(gt_Y5#JbI9+>~eT?M={UKT`65X zHrH(T{3G+LwL-G>CKDR1u?j5kfiSyT4c(gP@ISK4|InH>_Mq z6f<1Fe?C;5PF8U+Lkp-6Rg7Q|6-p%)t3ls{Hj=v5s)A%M%7Niot+QIbeHud6*Va_a zx7#3PR%%E_#>tce==C#mK@mbcxNyO43Y~?{82lfG3h)It2|TkJ)IqRa${#f`wt^nk z+`E^+RwsSl`?%F=oqXa)Ug||h5^ru_^wei7hJS3^iZQ}xf3|G+ z$5@j!ZD;HNYu(A+QRe2rrR}|)k2#%hTb)%_>tp{VxQXD&^#pI1@U@)3)Rxo>sYf*L zE>|pv9|R>18TlMd&QKu!0}iKT+{_Xx88@-P6a#D=zaE3A@x*F0IGO5v8dt1F={9)` zKAk;QqxaEsqHMiZNHL(dc?QR7(gfzxFu)21NCWT)1T9G&obsHKptXU9w8g(5Xr1js zMPNQbsip%fea|73mTEY#(o>31YP@EN(p6N7kXpG!X?GE%Pzr+G9tEW-HG;6uPFyq< z%a&c(M-VPzhu8&z+%}IPpd&~UJ_4r(4bBZNH3*nsNA)HZK#ot3+#wa96iTTFHkT&A zdthhhbfVM)cA-M#JxH}3SQ(JyHmyA1<8r6!luO*DBx8a`xy0p0C?!FmwA0EBR&8-V4J!mDg2%y2tm~z7fQ*I@o3W7%~7?zrC@}2?jEmh^cU2bbI1V&KZRfY={97sxVsJS5F}jnbE8aJi9Z>^cp2Qgnc_BCNERrX&b1 z4h#086t!S)3!jOA>jalOMWeKnY-g3{JXyMxE^6!SAr@F{Vi!1!y#VIZaah&@!L~3Q zJ6EQ;$uuwnw~B`_Ey5JF5?g9;*+IZK72$Fa?DXG6_3efLn0#CpHVk-DF!tf_LEeAT zMXXKMg%5YHwp9k~zwbE?>olIlI=6@5a-HDL(%3yi5niMLgu$I6!R9Q53@hyj3$7G? zjy4WW{w$h&oa6WiO>?x(om8Dd2_>AV9d$DGvn;JQ*V;+o(fc3mjf)M|BD3IIOXkW+e!2g42}t zqAa!GB0i}ChwVc->_S)>gi(zWoF-hro*%OFc9jg(&Ri0I7GNfZ{BeZE|1$oU{C$Hp zuqGH`^NbW>(+^**mD4rhv{N%EY|P~c!Qk%X2iou=tZ^r_K#Y>1m-t%HaXg(di!&&5 zVJQwb#Ni%_2|9NG1ieik0FCk-vztvGA0kq8h)@_R>P4p@nh=o&i2=}-FQ%t;xRNGA-kMV2MMLic5b)37CX1EC)Cldtq_;h03I;M zx)U$kMZ{GQuJOut02ib=o85%dC5g~U_z~$af)?Cq9z>>T2&r6O?b7}A1rZ+GJ`|Cu z9I0CrU-XjGx&76H$~r99bOl*)Ay2LWV<0S^#xf294^@tLTS{7-nrgTC5~AD~|HB>i z_7e-OFW!MyC;|6<@8pTvH!d^>C za8@s?clw4otCb`uVTHQg$<|53tve_G#yWW=%BnXcYe3l5f0%O@npJzj={&k@2heT< zl*7I|VVz;M?zB!hVGTUH7B?M9xXKodsIOjy-LDzutTms(%@UF()GxD68bYMj-&o80 zUjxIzu4?GKPwm`RA8=|eIcxOKgW+g$4D@n#wvH36aY#ANIxX&FFswoi^jzM@vG z$4F~wby12kxvOw$gwxUAS(8wc;B+o^){ZFU*xF^*32$4cH0``#wLWN_GGIrlCb_F} z$5Q8(FPx~uUG>g6&idZFuqR!W&%9!NWG3om=cFMMPg*DTIAuVqDW|KQr$2BGb2_VE ztEzscMt_PFsjlyAef!agCs2_yCs>C}j=M@aSMQIj?!T=Hb^gH?=eyO~IR<-j*93nu zYGyv^{L#OlMl4%oibTdvJpEp(>hILS`=l{iPD-gLb7H~Zxqv6 zy%%TtTG6R`X2%M|3MCswtKyN#Hl+PK`qUGJNSmZa+SAU{HNl@5+_9og&?9NUD*wpf z{F<}MB=xDBD5~8fY%4qX*+QGEi}d4%)mYiz>QwF;G26xIB7Y=t+Lak@Vuvi=i9 zwh-VLQR?d|oIcQMg~^D+9m)yov@44YT|&R62raGjV~UG~h#z>gb@T&|wk1e$AV{&c z9S7SwxuF-NhMvHNY^fbcv^ce$?6xcA@$G-$v0P1qs}SfHD%Z;Cno!!&4?LDDI{1Od zaz(ozc&t+fEfk{rpDWI4B8@5heG)oUVa?f!py9Vi82&5^I?3dalOU}-Iew15*6IAH zT5>4t#zys7a^Lqu&bN@9@45F@x`U3YY(z&DoiW>-8#^yyA*U{7tmygp7HX#Qs z9{_tytVSLH>%xO&T6cM{{OXepd|=h{fpuOUSm%4<*jDs(NQ1DI2H`ZTb^j-ZwK!m3 zmj>)!X}~%!{=$%ogL`}Q;1)khL#uV(P#ZZ9?0z6MH90<^K4Qv1aXVd0O`zGON5t&n z)XzytXg3i}>TxxNCb;RDZ6+;_eKsa)g6n@Om8QKNuSHIVj^4Y{3>{6Jw6KLISshKX zyGE3v7CM-a4L~!yF>+?#sCFBc(JD|GxeDaeU=&Bog+6k*z*(<@bp^_k9WhK1JlWw^GdYH0i| z;&I_xIb9PiOdRgTlVKM~?X&Nb@NC*ZLH7PII39F*uV+rb=2Oov~DfrMO@+iez z?{})DAcYYIgPDbXIg-)4D3ZaLXBg?5M?BqGyT~Znnka(eno@~GyLkB2jdj703gfJ% zfK?+!S-lvBUP_9`L}zUEc9)srv9x7~RHgcN%|3yy`|^QmirkWalwv%M8w1X2_me!v z>-M7*4LV)A6V}C0#-l-rG88v@c-+|S8V@k*w^IO{R?7p-hD&KTZg!B;=X|xm<7KREYj9N&a6dOj)57FA&lUt48amg>2UB8(_42bN_tFN zkG76gb_2K{Aw{e*8DOG>OJeLT3752Ra*~XDraDQ+O>Pb1=IDaBDKSA@sV0akg`FB?Brdmp89DY_>1@UW3vX3Bi7t z;Vrpub_nX_b*-$c}P^oIr z@wbfToEER5aHF~J!%2f&QoBXVq`HYzs!%D$Z8Z0JE$Jz_-J%@qFSdIWOU=z*MZw0w zy<;zIJ&tt~v6uF@S^(_mc=l$bPl-vgo8RJZp&m1|;LQ|ZO1G>AyWHg@yDR825)_SF zQW?bM6a{eyJl_zGoHYZT)r!uVflg{gCk>{6x)gQawDr%h&!QK{OE`LkydHxqHRvxR zLQ2%qEA5^uK!4I&?*g?R1e?*gxUT|d0fiBiMlc#lW6)h>-H*dQb9!Zts?mP^p5H2K zvQ+m})O1>9SM-8zqO<#P!EH;o=iC)1#HCMB+-uPo3-28`&W?4HMQis$!EL?^7Gr7b z*yD=ci&gg=>z!VRb$ikYvp`NOeOP7x< zq@G4&sRm(ts=Jr<9fc+q6)O4}Z2{*c^h~>%J6kgSxh}k*R=Dsdd#|h)OVb`-pgfp1 zhC57m>;l%*F5Rz4>JN8XUa>6CWvL=50eV|r0fS|^N>xeUjFVLd zU^*jFTg6jvX|d;+|Ok~|AONaJ4JnexCttS0q);xh zEVVQGy@!68o}0c;E8;|miPuUqO^RS2`K5Bba5L*wg?rcqSJsR3*FUaVov_P8#@8!d zqY@RpaT0m8lm5;mqve&?dKYOQ*M6qO8NFwU(v=&h=q+5#E{xOn>FzeS#+l68LhUO) zURSVFDI{5_GzlzA;*7jhY8N0^C9GFo$Tr65dvtYYy&Sv2tXZvIj&&12PktUiGd9qB z#gHQMFLZ#ppjd|s7vljWf z_wJiHjC(oi2o84Azi)9t`o?tE_fybUQ#ST}e^jt8Ecfd-F19Pb>z!_Xwa^^!=r{J= zXbIL;yb`B>-)vXi)jQqwYN5rhP5FJ_jlsGQz`8ZrOO@x-?lG@io%OP(d#}D5sog}- zlkeOF>aY?`r0xtU*Q8w5PjvMTTssAfN)&*W)E!0)Dk#5|F99g;u|D_wc33%@Q9qy} z^ZJE9FGZy*S&AG7U&RgIwcj^?&_I@ety4EAq3tr^14)-AjBobB^hz@rqU#1 zwg7J#CFfqMdaIw%<{Z>w6etoeWfZXy>NZ2>@Q&dH!742 zE)|Yj67(0W>5kFL_7-$T&4t4Sdw7%+$H%cknyyo1uuXqd(BqO*4Tj4MaN+~)B<&>F zgwtdKyeY-Ca)x$62*MY*3zE_|Ln$bJ05#65IG8jyK~R~SL5*W7(FYnIW^<)9Q7@&r zW*@|&rkTJzeu!%Zl`2=2o9m~8^_av&eWG69LTFI6=7PBe;+sKWCX9f-v}35+3@wNa zK%5_kub^*DY=Hy}%2lcWqUjWyVHU&y6PnX7o9OD?f}J!!*^(>rO#|kV6Ymuh6+&X7 z$TtlwpqgkdA7gIKRpEM^w!JfsV?#5G>5l79uW7i;5OX^%8armh!Q5Od@3sdwF}R6H z?DV2R*Y!)37q?z7C$>UsZm06GI;HE$TwFi9wa^i_V8X!YMO}9#V_(zv9&ZxToO^I& zZuwY^@?bepc9+hi-%sqGxDQF+_;Pq+B9fjZtT{I~CdQ4lONbWtQT&{F2nIE8oO@8G zd83gvGdJ{l8LZcchHhOJ37BzlJHluOQKp#gB;nB18reif%x z?sI2}xe7?6gXX(F!8I`PTvqq4UpAPSO#}mP4OFAX=C~iv)9kyLRe%C>Z0j3;`%gpS zxnAABZEz1aAYYD!+=F9}f)Ot%h!idcvyA1u@@!_W9#q&uwW&+B`|XPV)_{`OAHif47(2 zyuJtpILy9|bdETW{R4d(8{X zd+?FZ4*iuaxkD@aigwS~Gt6D8*%$u^E1C+tZz3}_{qZLI(qQ=d-ma}DP$?3vYV1}f z+DD!}bTEhImRZ1nqhlINu6V)b9ci^4vrcC3w<^qr7PK2EW}KaktDbGcLG#=z0WNRX zy^A*N{oCGgiHz-iBhl6<>o*1rFP|u)UxwU!FvoWDVh*Rh*|_)E^A~eR9z>s-IE{Td zFn0sV(EF2?Z9W{4^lq7nx$JhreqyqEUUegYwzG-k1;ehf)5Rm zeeU_#rB52&C71JkP_l*a!z!CwrHvnj`T@ng67{*m@v z%UUxz6;8l9-S^CeGp~@?{pF@d2TFv>vm2NTr&LwW-{Np8mk9T6+Ut4_*P`j{ldJbg zIMw2SxZ5MAQdbkEUM3Z~mzg@{tTtu?K8( zFZ$VDC(yx{Otr4U-8jwmqFax&xgNbzdLrbU?*_pVM+XhAxp zy71C_FAn-`i@c(BPX7<5uj04&7Ybm9WWW_olkm%vFU?+_Ya}LsBw9tKy=>6gbqYN# zdeGSqDu-?Krz?pC==`AWuN}Po>nH84!BS<;{Y%YKDX!*PP`vPUQ4Fu!3B#P_dKGWH z^G#62B$Wn}~(L>}%aV{Nh{ZY7|YKQB& z_A#tA1`;&6Gv`0MU~VZP8H1@H1N?s) z=17{5{@}y>d{D7dX#SxPyXGLq(Xnezf#RLlK=JMZj#0sJ_!4sA7*eDoW-*DnW@%*( zNrO8rdh0MgC@NhXZ~oy6ghye$FX7k=`1w12{?!y>-x9&R`x_9RO+~Ibm+g?_elw^c z>9x72Pdt732!wGTKrC*ahH}@iXU3f5T()(LN7FZ=W!q4&j=ENW@{qYhZ3HD1gGMZ?5b?_HhRP+~EIKh7X`Sct5!jE(~6Ptc8=m@{Vl#0e8~@<#F&WM==CfPIW) zr;TKHFNy`oQDWCt6Jds$FvFYL+&Qxgr_Wz76Jj|ldZ%mtekH_zJsrFK?S4z<2F@;s zIk`WlDCb5fdjeuNZRhWPZ3SUwH;8?}48oJEqWyfv4N#E3%t(m#^Vtu}=|m}g>WrM1 z>1N%K^O*pB&H!Z8ljXSVU`LbpJdf~QVD32v%sm!M?R_*&N(WqroOx5Q&I%mnf;~zT zShAdtU83UL&|tA3O#_f&=C$I!-2$uj({!=jKY+ho{u`7&t7528rh&z97f08j5vu=~`kJhTot;T*psI2HQ z&f2`-om%Iv|FICDlLdYol1JF_7~JmDwp?MXjn1z;a@+cC%X$7(MpRxHaj6}BjBYJ% z5EgV;PWj04pTm!6l|>)kl3!$bBtNc$2>P}k(ofs+$UN6yqI}koC3H++lf0Uvl}+;YYN}!2@r}FS0z6AMdkqHQeeWtnJpWJTgz^k^F@3#zdE6 zKJugZtMRt{s2nynM$Ay;E2=6ZzdUEs z53FzB+nvf+;l$?aPw8okuVBtkLJ#qG^l47?>|*F8fOq--?6Vu9dp~H_tL`D`D}RI= zB}xeyRm}RRD{@>>bTYRk@g3$nzZ!TA{D|dMI2or)C(9jpK+*VfJ-In|=#}@m1sjQ0 zwD2u>AUPBIp7(3NId;5RyzAh5fR9bn=QaN;cl6&%P5O)fX|FwbNq$Voi@y`CZWGvp zm<9K?&39a;yWnG-yNP(BX(M?}i>nFu4oCZN%=#c+SJl$HEzh0`ec3vGn$oBEdC~l= znGe)#v6Cl-MqVzh%WuAXOT|3Jk?rg9q2V&x8sYhGB9o!Nyjt2d#&-$hQ1q|`;`vyQ6?UZ6x!p>9 z&@Xv(UuW!&fw7c`{DRfw?<_xW?XsqPu*9J|udNbIgD=NVg0N8*b*)T&A5G58lsVH$ zZM04}>MhVkkklG2H^LR<_#)r|B;10M6fNRp-BNYqvTH)<*zeJ}m_}k#Ibq?nDGqp%PgI_u}>|b+y9JhHZ zLn9Q^HJp!nPkM+dHF#C6>DuxjyBw;{%pR+1p6r6GNpd{>zh$!Crg=Ctv$R-8{*|t~ z)PX?P=bhAx&4r)Tw_7bMm{x018jJ$w#!Llzv{Q%R_}C!WG#f@*tCTue066$#^=hbGc1+ncZ0(OmDtUXR~soOKkS_HTk|M z{d!<+7IoUa^?Sf(aiu!l-Wz@eOZw#rUa!18eML0_R+(s9cZsbDKm;+EbaQiQL4#=* z6}Qf67n%9n^)`TnwYt5Yy}oqCuI|D~9JqzwVqdFyfSJRqjK&O>e_rS8uKsxU(AHee z*m9QIrlb}orz$b}^c+Kk&vfQ3nhJ?9KAO^fjOfy(jp#S=(=Cqx3DevSo~K1DHDyw> zH(!Hz3?Ac$Nmz+2i3F|H)`~w7s;_RzjbG3+p@%OCJ%l|ppVz^VU5z}Eau=GE0I*_Pi02V0+DbEMnC}qel3L3n0S>yP7>dLUb%h*9pQm zg4~uijSMs+Tj_`2R>)3d&fnUU=M-gZA2T}?N&id1)tU(VR_$RJc>ZdOGVvw5j(cjVjIodpS5))3+kUn|$ zg<)&0{T7Vrhn62*q17@f2Ph5w9h3{OyF(L1^I-5zgUbt1@JWq=3{MIOnrupxBh^%?Yon_Y% zdb)|?kjLCUj*3Th8De3|R@=HWKWhBMI(@nNe&sX|yEj5^dgbvdZLWs4x?c*9DWN%e z73o#i{!DNGncp!nolKXW_9h#8eNnxi5E5*$sF%NV^UUet>`-P!H8Y+S=JR~tWVoW(IFbU__c?rSOFS%5Pz^FlmR4Eh{|GeUK~qB&Hy ztjPlSWxk_1gSJrWLUL1bZ6U@P+9#-2$Za0}+_p3B7iY-qS?Uw^rg(3u=^6W`P%Xrs zK(t*fKIC`MXOKv+GM*$F6)GeGeKJ_GK(id_6yhoPl;2%bow6EPGvo!m6~YdhD+G9u zFSsrkX;9)I`M$?q^If4GUmNk|&mkP`%dL+7<&7qW^qnj14~{klY%4uHsI@aI;W5uz zH;w^B z^E)nLUfBt?XsV*9b1pTc7!SplW_#s-*H5 z`D-z^0FfneCCR^m^eqqtqC+X7@XW0zJE%^rBYE&8aT39fD$wTo{Goh>kAnYv zct!y>ilpj8g6MDb6zJu#Baxl^WGoPyx8DdQ1%yY2d327|gkt=lgU*T+>Y{;6n{n+)L!gp`!SA$cvrVj=wc+SdWadbM#|&K=|wPQ?El*0(0PPmg( zA+2T|i&-L=Yv3Z65QRIHG^VM2f|})NKMK%n3HR=E3M1yyV(4bn+5dof5(_2LD&3}T zlRClbIzO5}E;yn~Kn9CJxwdYp84ffTGazJfls*RB23Z9)b5tQXsM)4;Rs9W z2F^!*`zS!s2x`!o!pWlQx_&}Aa$`z}Sd#=-x|6A!*okIws+(Unv9FXN_MH4>ZY+Pqrw4JJw{0{eH~p2IIb`=Fj9I~7XIxS?kE z#4uj83v2@Z&-2~BWjL=PH#WRC@c~u%#x>tI$|p1W)RrSGfJrNSf9buaCj`O>Ru6|Dd%PqP(psvCW-#jeU z1k7~ohIk4f8nIo$mWGy!iP7#5mdd$1CdbZYZR@gr%~O(%;xThqOQxE3WHjrkh;c5d z+FI9qz3NCviw^UMW!@-HgQ6?f6~+iGZ%9YOh)+-x7&lAGj~SNkMYuUHp(ZETQq@gr zPGnFbrGi3Bi)Ex%Zgu(L_UfYrlp6;c=Cba|;b-*jgDGtna>x~fD(kOLU0fKy;R>QjkrQjrGB;(#$vcSZuMTZVL^~FozY@H^DyA0IoH!=QQRxtjA>3 zyA3Z??htPDjq@e+1Aca$x6y~gx)tp2M4W%iL@{s zEY(9g-R~iSzYKCehl>uwQa@RJTZghYKewF<>{2|N5-BV$*7{65J_qH2qiUT~94I&lEAI|0*3;(qTlEM$eG=)|LB3*G19=%YKdU|{Vn!QZo!73vs#z^~Ot_-zw z1^<7$;}hsfac?*wMvr0#K6;|Q3b^6N_u~xKH}S87UWf>p=^1RM$mZwa)7ZyW=1H9{ z5x&~$%Kqc$Wt4)R(j#Jha&vRWe>LtAGA$?hY6yLQ1jFFX1v)!18A)i-VxFw?JrBY$ zevs$5bP7j&0-Hm!nLy(=0ngU1*2s$;;%k6We5JhvzOVhiB< z-(A_hm}8#qhw}Y3-~iI!;Y&_{1w0kBU2{QVfWChOWmydqf)~`Xd{IKs>dR#OH2#GC z6KO&*V3TnUo4`u|l(S%$5L`u+EOqdh0HwYI7bM|8rsxQM+^qQ4f-z?E$zt?(cnavL zS4LQdzL5JJu>5=<*`ocfh^Zy{JG%j-s;{gqTRBq~XF%z0_&=HePrk+QV3Y3X7f#u~ z=&}gvL(iq;0O1ZZAgDFL4V;=vfe#bm7$&xl`L%8K{{0p^rDqJg08S2-09mbsxjg$O z@W8vy5ErQFVN2la%OTFV%uQ!=z5imIL6{jc>R^VuNnn^3jS^x-IO4|ZJ%CC#VjQQ% z@Ay3tr;RLHtA#kRGBJKO`4UpsSy2&NNA1}TdK+E{R$8-ZJ7oKGOE>eDme4C$P!F#M z%2{|#9b}k7u|DqOZ_Al1qm6J-M(K?*S2E7X|1+9zT8>yWbkIAL4h=j;H)~kYOLVqG zDsdVmtk@{gTOhjj%aWFaHH;q)dq5Sri1xlfY@`d25TR!b*)>FIRd9M7b z(*GWag+k(~h-6v3twx-+2N5yH#EhfHD*S(m2nrxs{=`(&yz|{B)pk0spdcn3v)P$Z zTR1`ey>~5Zx^FJ*RCA^qCXaa^)!rOawNan0e!tb(yR(r^Pn;il6Z>IzZb?a7$NQ97 z#}i8qzP=fxa-&Db5TKRElQU6sYb1sTGX=+Cbj)`O{x@0aH)pm7D?D$7ru;rm5+#O z-hZbqjx|SHmv*Hi#g$Li$;oBQrn%KCzgu6&69)%Z$9#IY zKa@BM2XB8z_a2Edq7zL;XL7rJT$=J7W$@c))|@zKL)E3Vt5wIxmW-HZ6A}t!2v`t~x8WITdK&Y+Z= znPw|LWq3OZ8RK5La%R78R!$^%hraJSHLG3dYqh6fUe`F!Mg44fHcKR(eobmf>qM{0 zRb?5F)b1Hpx+%=iQoNpcdOD`7D7l_ye(L3n2*op(n;fq*g`Jc#O-1NxX`P~tyqxs* zc=GN++Q7>_<&`%k*w0$cd7lz~c{?htHU|orwM#}uUsq9EKD`S^7Pd`ZJJOe*jl8ZN zXh*%&_r?6`ncSa;SbuoO!$wS4OVh4?TrT0TA{CDseHn?%f5jGkSUg;F4M3ONmb@M1 zQ=2G#7^a@ki~xK;y%o=z)=usTODdK}j;qCHaMPOC>Y|`@-13l_mL>C0&A#uZt{LST z?(U`}a(R0`kK&#$-YMncEYQxQpXslJII-25wlntu3jjUXsl_PRT(r%alED~9*nZPk zx$;booMZmu^KZ=Wp*??Ed~o>W&CEVx$}v;pzCP4vpSVAOk=^+y#5vXeM9<>u@(nc% z7oTdugLA?6`Bj@eWMnIFwok|ixckGYKjNv4+#l+v?hwySPDyd1qqHQ)R4GQDPl$<0 zFg)nTA|?Cf9^!FgA4RJ+@6DA1;ha)-%|bqtN~nA%0EgpD?pqEZ9{uyvqMtTCdYneR zJM-q2$;(bwbNNJ-`pY!S#^oa#PUiJVlJOWh>pOuwf)K=LdW6lP;%vOKtF1H)H~7|! zestvNsElI3QR^lcFAAwZy4G=wm#KvSG%zur1aUG+>_{+-fWVQ4D2Pt1B(}#(Ol#}*KG9tzP*`xX^GV;$$Bz$p9RQ6oK5USFETjkz_g!*riAI2 ztlWb98O@wVwSv@lbaYLIw-7n+JF#BQ*gL*z9vwMpF19dcZk)h~!PrY&((u5DCL9%a zp5#3L!4UB15lfnxd))Z_&PG7I`KXDFW=(fs&J>BUP=KF%Yuupj`k_C61MkYB_-T4V z^!m)4l;`?#@}yc>$~o?&22pSpRb$#cC}&mEzU?N3s0P_?A2a5hwOtVB#W2WgfC+nv zPCZDf9q;Y_<}iA$zN>(cT)JVJ{z+WOEHKy!I%Wor9S6`{hu~+lvlQ$fCqs$K7ef%j z_jZ0|+Oaq5yX{DDGe2)Sgl}e-1(XMwG0L3WC@#Oi93<|rsJ%liL{eSLh?{b(WJ()A z;8*+hbp}2BFQl`X&#zT_qxKZ8Y+yEgNX5<9T4ZBt)iEcs|ai-xd|e;V8KIUG4{$C_8z8sB;pX-RdAf3bVc^x zJ>LXrM~2AIROMZiYcd2K2%+)%6TF-E4|kSLR5)^ZLPDY(5Pw4E{3P085^$^0B*oxn z&TONc{AIF6@kT>+6f>dFT!<>*nLW({5gQP!IaiFdsCu@Xx4y9sclB>$1-wK|-W?J` z(Bpy|Fo7Hv0RXYu0T@aOhpYCCIiB# z%2Rs>OmA%!U>t5}Bu-@^aK+|6&%st~6Lx-(@aJ`->lqu8C)n~K}VP7OZ9nZ8W6XHL% zv_XuS?G$bQslI72Xc8pSJ$k=_#*!rc*owMO&wV{ywHT;;6^mYuVtmwA}G|eA(=^4>2KJa06KT$F< zrD7+UV|PezkA2%zbdXcvz_rThrc2hH!?DWZDscG7nK*yJw|^WBzfeZQh4`lHt9p8& zj%d?}`AS~DALMMDLNmDrP#0-&Qhjq|1j5!J0_y;kfAMi#c_f|r zqaGs0E@x+o4}@U-Y75`QRgdNs?Yb$XVtCw74-I;0O8t1P{u}Uyir=WyV$*Dpr9xVh zgY*si>nQ%Ut!~b&37cj}S_}}d+vw(kLLy%4c^UyZMYRsD1P1P!tAQZMK&LM<8QEq> zOOwU`syQV8o=K}PLMB+}Hxai~^d5R{*++ah0*bOZyNMB0EOqSBOhwPHtC5Mvdw|oF z5fK6)8+gd&j8M%0jg#rz`A`FX*!3IATT z3lIH#Y_y4wR86oxq8O62%W=WUqWP{;Z$Av|Ft5J^+p%5`Gk9!~6=>b+G|qLLK5x^% z)_yZz(7gBsM0463-I9ruMXSX5(?3^+>OM>~1nONxyWlqQ-I|{{`<;0R2yykH4mOtx zPrXXosV$dNzEI?B|2<|3fW@`&_l5ajfY}J!Q`Bw702h#6?A#@2canF%+K zx~w6ebxet=_BX_u&&sB0bD$4-c-q&PU#5^Hm17GRl@p%eIC_~slN=kmPP`A1P4hAx zeMRVN%5P1$uu{p6GBg)}vZ=Ry`qsbSf_*-6`)pvJcRvqtBRy2pFT=p8p{W0fUR8P6 zLx}%DqMmU3SmAV7B3+8CJ4wf(#e`^bQ;tF-)ZB$sHEisQjv_b$YKuVCRgce4V7Et< zoaD>&bemY%10Q7GzZXSB;iP7q^dC~_#JR%~K5+Yqz-Sa1Ao}z!fm%B9sxL;0iCe)m zHfI+L-{}deQ!kp_LyQ!c&ps_EB007MR*#VIpu~uL)>Q%N!&g}LJB7UX2Spr&;)h=Z zVKnJIhsSt;$)0SiR8yKs=Nu@I<$!!&!KT+5kDs8b^K|fr~t z3zrg!oWLe&_d|6=?BEYqM>y$)!z|rop_x+MSB*!vMc z+`JJy9N(x+fPv`Lvcp>6-9BeBeI;T|XwzY|)9=uw~}4>!qT#1l?p7lIb0*mGC(xs@$%=U(BA z->Dmqi7Ih~#zWzzu*un7Wy23r`Ei%xHxLOR^ras72`~|O(d+EW@ISc3NTu(n_W+)DYR^T=$&?d?eQhmsC zT0=_vl}H_zmT5w5-c|AahKDq&J6Ie9S3;6`dPw;jT}S^nCgJd2LnbHBWa{m$cT}Y< z{}p8vUiBerb|T5q1w*pVNCJ~>X|Iq_+2giiPNM!#4$S}+VqnOU8=(eFWK&+2+9{_N zEX`0l4%~2_E~0WjOAl9p?84pU@L*}rR0LL{N{J{CzbdZfY_A{uy*9@*Jj3-A(YP(U z9oU=_50K@gDdT3L%jh#;WZHH&&BW(d%aum#IuzIVBks>dB)s+nxD*t>LXjH>fb!Ma z?xQ`GlI;q_(f;kEKKEvW%;K&F=_f2-+@AICw(6I96(R)w3DJFpO?Vo>&)Lt%F&W}z z@cfv&$92(Ccf#z%S}-}i_v)r@MgUv_MN`6Hb=A&$!6h`DVJ9xh`*?+zT2ZF_V`Ni_ zaD~hn(LW9LGe1ZB3g-3wDtn8K7nLm8>QMC*p3rpTOYGn8_Pn0iHwufe{p z$t~`OE3>1;3msm!%N6D2Io|t1o0@e_uwJA-E*H(yyA}Vb9DFaVv*wuXWDWrwP+q~ZysM!SX0IEydBTF500 z1^qA}svQ?bO2q2zecPUz_m#81^lsXYZ3Dx(4|vRBka2y+uWa0NbJxaJnqhjVIcz6q zq8y%iJ>FMkl3@$|k~L|oNF2*U&yXmnsj`=FW&u88T9YQSg{*5=d}z48ubyR^E~<5P zam;)dLpv#n{JjHSgVH*s+*~@Hc;*upffP zrp})BTBOq|egVt$?U->B-#o|0d5~o+o9b0$xzkQI5LOez`gVN6FIc_{idVM=yk=Wv zgC@XcFh%lSPT;@3$Pr9Fu5uk_0`&-<&oW}qT4-0%U3T*lwOi7{+vi+}wKX*;R|mKa zQ1LC_Jq$?mB%q7Y!!1p7zCd7A>i@*YNl_Dgc_xIo^`Gt=z49JYfTwc<$0CA*g9)!5 zZP`Fot3f3Hc>i($X$2?{eR{Cd$ef{)#nr2Kjv$%?`dpU5p4^7M^uVt4fY1I^zCN`X zT)E=$4l62mPeZE^c2{d)(@!bGGo!XpMD;OJydsU%dS4r#*=Lz(&f%@d13Ka z`&;KNphvu+5qM)(W2fqA=Fwt+?kpA++*+9f9z|v;IupAjlI2}x3{|bA>~(h`)b?0t zKY@`K@hTRe0tsM#yU}CT0myrgVxJgn?jtwfwfhbUykI>pU3QjvS@o0iOqsP?+X851 zm+hAum1DGI+!kk)s}Je9Z*#%bn}D#XubAg7{qM=Kq-Jin46`Ze$!O~zWLl)?jFd_*DePO+vhl;R}-zh$P+s@46 zgiD&F{TdDz=e@yALw5visrB^eC!Sf&8F7k1^&P-)9)nR7s-X`f-d~rKFU|~;>jJwE z+N&S+nN$O^xx+!VLAmIaJ+2mjQ^Q2cnAdHvCyxyW>1C`_A?_o3Fol5R>PUk%niv*% zinikYwpI!HOUi*T%Bw|Ku0yk)wgevC*%|d??7ix zLSy>$KLE=?29ZWU?!>&(%-dd|6;^`cy1j_n5~9J}L3G&=*9POQF_#->-2Y||BUuy% zfK6?s=3>#F-SE73`5jK;}cTbNT7S_x`0l#Ge+ysa%?GvGEwq&d19!* zcl)Ota7S?@Xo*OgVCc}Ss!y@r>ysQ^JIrV$4ue;H09lo%{qrz3bdWyDR~)gI+!RUU zm>mp7&(H2$)7}kIr*_sYo;KZ;+rMuguB)u>PEVE38%9||P5_0&1o4|NXD?}C^28Dy zFSAe#O(0_17zt}U=8>axmA)IZ|LaW{sl17h=^ArW`1dQ@2HfV%6a;!@0$Gy|o~>WO z`x2!noIdTorMpj9Ekc+)XB{EqxL(aS^+&SGyBv6f$C5ufQCk`*iRM~F>Im&=a3dFC z)5=dHs~!s309r+hK*w%n;==q99abwiX3O4={HoNxj3pnBV88;1wFfe*hGfZwm35r7 zMd(gcNaR4sTRm#QKy*wn+Pn_KB-rvH$XI?_q=S8>Jsq}I7_|K#OX|_vq5oD+oq#Nj z1r~zSd^*4HH5XUKJ%=5Gbl<@}7oN^>HLLz1C7wWju%t3r$*aqnP#83ZN5GkXLUt+t2<-+SHom+gnVpv3K zIO3At172gYK6tFG|L6T9Kn1-=8CmY2ORi_R1?%22YyhXjS>h7oTjj*`LIiqgWQ^RI z)4YpC#eL2#CF#PgNGl2UYw16r438kDH9x=Kg6;X#KCP6EK;}(H6l&A}IB_RCTEJs} zsQ;FtuCJkG5_zL-`HVk|fD5W~XCv`1y3fd^7o0U%ZpNx99sZ1 zm{yzs@2p%c)Vd>5c!O>^*mMCRDRxdg1NKfCydbBokJ>dfEUZy_@VdL9Dy0b8kBC$Y zxNwvGiVP|3k9PG$>RavXept=VhX*ZKE=ZI1I99%j@V9o%`5xsy`g0*hDhGdvT2SdN zvh6Jt@^yCiv==S}8puHpKExIFf5`go(g9i&(dsw z`%|_;lvRhwmBA z8Ik`JX)$?FXI({Yi0?Wp?do+`nzyxWBEcTFt)lMNEOJM#=KbS<0yr0yRS=J0R{(mj zX2;3tY{Lfo&~=zF@ej$?n{##vfK$gu%q|VL=pJM-y8f12I@3_KP-Az|TO!NII$viZ zJw~loh}zQLZz<7y)x@RW;J>&>4OuKmI_ZSX2eN@}7|nrmOn_0?$Y8SybN@zJ6cYtA zG^A zkjA7+FX1XZ-Beln*ZeaBF{K1{F0d*gY@4^YTub^S4%w9$2vhS)Pjn;SS)7H} z3fqDPl_iHVu5`GC=)S*nYa3hJ%6`ieY|bZ)KE;vzdE728Xd4jQSqCcNH2t&iu!~=~ zbA7=Ou+^idJ(^#EJ}-d}nSNnj)KMRil$l*e@EI42Tk(gpR6O%&eHV8J($t6tR{BJ% zy`Vd{WolRYO%?_^=l#?Z@OOkdyqk$UVY98 z3&Ph>B`FCA!txQ{Joz`Ihkj4CiGvmdTYkhF;VFxUw1gW`Mm5D02`ALkC6P}$>F{uD zH^|LMjh|MPCeT0doP2${?er9*-3uf-f5B-FmPX)q$$FWoXdUlOXQGUf&wzJzQFAgB1A<$| z6J&J-pBE42%ChOb1mqrY9Vxjq8q(D!3T@&yxq*Bm75Yk(w84M7n6|Nb`$s*fP7S5h zHBIs)$Hb@Clt4yGqM*A>b-z8+vx^E0TSi={5hVd?&+t7XeEp~t4Vmw5a?mtU4aJzH zaSVVxuLqf2VgDWzS2-V@`({_>WIY=+_i#|*+rHF!t4d;*?8(Bu_?u{n80TlRerCeV z39cOu4-3LudND7JjPPm1phu2-TIt=9TjizOLsVXz$A1ky)=_k>hG;Sc>&OC4!@>U3 z3Kuj9{8vggPAr)kuN7CVFSb)NWa`0T?Wcvnb6|cX3_ad6tg&9SnYVqvKfL2>+=lNK z5w%?|LI!#m7ZGMDuOeP9p-3#X&ZBi^F%^nDWO9LE`;qg$BBBB2Wr*hQ&h}!Za)Uj; za1`u{kjMvy#|aUF$b4h6DWD)(9lq+y1V4&el$tbjLFr;aee~$w1@MSEE$Tz}GGI;( z(U$(&*Kh3^V_~U>9GG|XfYJLHUj2CK#RCQhXH(Rm0SYlkF}X1;ku|cHI-lL zuH++Lm3Zo-sgwV(y~v2egU-3I{U@~)LC8XO72hoWyRo$`<)R-zJSYGe^}ljBcK;zQ zN=jV#ugCI>1#Xrh)ES7>Zbs@y59^O7g;GDhRJEZoI(mJ&AunAU1x4vUqM0~v50{Hy zD(GgFbUVqx!06%wR_&=-Nf5};thx8paH$a>;vWX=RL?BUX^qpPkUwC%iiQ%L(fAZW?vEo0(2Y%k|@BGm{Qf1YkWJu$HxAHRfc+e5Gy)pE`BF$(b1W$eM z?WB=afGIneCIGbCf{OyZ=Vgau>J+X75_K1@?u;pWvRTtLa)Ws%c5;{v3g(smD(o3X z^*4h)+^h0dxkb`Qo+P0Yb)Y`(x-H&R(TKiaF`s8o7z^La!tY$(`QF^MIFKm6`+)cbdFpdAsCZ>#uE^xjR|Dh688_u2MzXqF3v)|Xn*_NK);8AkGq z7-6&VDvZ8S-f{YS$eaE~aHp}ZHH@p<(r~_=E2{%Q`aHZP_*K(mvg0uez!fX#rmBn2%-;)-XZTY=P67hC)cM*og>}Q~hywUS%9w zPKs1YC=qr1JE8~LxNDLb99I6OzdKCO4bA2gA-3QbPr(2XL5auL@HC|48Qiy&f~s%22mJ}@Z>R+AR{*IQnwRXKa+&kV1)Q0s8X;UVODhd$ZLO7s<8h)dBZufPK5u{wa_&3Lze(5EXn`I2dW1&Kay**~Y=g*6H2 z5!N?(DjQ3p2zYB_0wUt)(0E={7sCONh`nkgu^t)URM3vUw&yX;PU!cmP; z2b0k2;BjmAHbh6#03?#Bl};TeQ-d`mLVS_#R;hWZxjhms$ABq`pb4<4xg=ic_%#|xAW@Bkz<*??3Vdv5syi#p9H~3Nky>FAL+n(d{P7Vf(jjr2 zR6|>y1@c6hFdkxKIkmPAaB;1y75Gszl#uj{3VP}XxWBJ{3$Lx#g>R_6cc`6@Rc`Za z8{7S?VdR3aDAG(jy?0A2ld?ycIPn(66=3BJG?Ecz0_t&nPimfr^9qvSUG!d6x415; zy1PEzB}p@BC(*M&_rd&{;o(~NqY1v|1y`qwN9-EGlK-wtP#RCqKIX>L;FoejcHcBzEH!qYlTCQB(qx$=K}}Bf z=T4&xg7EKw4k$V(&Lbdp&PCW2n&$2dhdoaauA_75BHd)4%Xo{|Y@R^;0?@nl;Xu6dHWklKyEs zQ!4|n&ViepH)2MQ$O++ zZk?`oO0p9Zl>s0d>Q)jY9j%&rb1xHG{G<=WOaM@0xTq-X3~6{I=0w{iVVTJVew^)d zvEU-$QDJ^$+GU(kKd5n-!U)BLdR4tpsk8jo+61W@Q94xWNF9+bjIx+6->v@GfXd3z zm#ZbEM=O;ebl)^ie@hB6TJnQee^wPRK~9u*55>>LmR0JPx!?GMke{bD_y^vGFnZD(CO^S^Z_Z&1YHK9`?G!i~E-PDhuhY_cN#$sqJWvn({hR z_4D}h7x0%oT8V_$;rML-3(4{5wnK#GgBjF)oU-tddJ7PBwt)a}Rhp02f>fz;2a!H{ z%8+_UvZB+T(h``0NjxFc@x5YQ>7nm6_sSAG zv<9f@_r=bo|73ovBk4!tGp#pkYZ$3QX-yVg+JNArV7GpCrpWh9{n)=SsxmeE^7^#$ zu8l&*plt%~XHPBuUF5w%!x2Kf6#tgUX{~GR3r0aWdWf2D0SyW4)C8hMcy+xH=ZlT4 ziNpUW2=71TJ$uF-W9Br#tYY`~qH8+1pABi)uk=WlnW;tiH@mZL@P5U$ zd0^kjLRa~oCJhVxDPPuD{VDVixCQ=k-Zlc4H!8gXT;5mR7=oMH`8nlNJ=Wn0?z3i%EXr057Fz=LT{RufGjl|tS-x$aOJjdK zcu482g~m!LJb;2@{~|xMPYd})EFXONwlS_LMDs}=)APe`nwHBLX7qsQqaKqE3*^)l zc3xbDZ7KtJQDSNM(PtgL@XwYIJ$N+69Ga>@yRtwh4q7;ZQk|V}0ad470&SEqI;S)g z0OA4gD6)qI?xTq?Rak5Y8M)q$IJ~?7tH&UOu%Z79do=**&D)D9@!4$dpo2XWMJ}$x z+qYm9me41vP{Ub$t(1ZB7E{q|HlG-kH?t~IG_m)~Z5Yqz^LV4L&;9389_#p|2>?UA zQ`Sr>lv8aB+J;bNZ@nVe6>ud#p)Gl*zm&IXtZ&ew0!t+QI<$f}-2I%vZmiSm2IzN4 zZ*7vbrLm(kgI7-zd*xaN#4*lng44%B6ugGdnQRKZP?PpOd=7%u z3YE{DrQ~F5wu?SP1M$55i8Z*AG-~f?9!x6%>^5JsC{tx9cq|9_;g$~iA01|$fj<>0 zc77}oG_iw!&TO_2m3lJHezr@jL2s`1F)hyOcgu+Tfw8%lQv!e08BYvW2Nv31w3oqb z3IA*YmL|}HD`zRmTW99-4Rsj)Yi5nJM2^vZN3n}c)dm7hS(4#&P>I=6|Gslb`45&E z1=Xjrv-S6OHwqe+;Vbj)P6~r(cexkE=(B?~X?vo2qlv@2Km_`3W?`KdMFR)>>3CJd zBJBib+3BW~w*D7sz#_#WsuEQU{OoATh+Vz*!l?rzvoSkwFKrf{M@u!QULdUuiQbBl6@@ARgg^?SDCr;z z7Tj0p9x-F*MmhHU8QGA5+GWiM`n|iy@!UyP$^Nz!^>;@XJ(p83I~q++r(uy*UX0V+ z0zxZ@pb*UKAqs#1X^t&RZ#P_gTBzZO{h5o$=%AKq32036^;MY^E|{b}pZRvSm2~%i z=D+qYY~SfHw1q^wFOoG%`bpsi;iSwG?7soV3=i%NNQ7g0bgt)OP5ABg5S*0wnJQE78Vl z;{#)1(nPt0>N3Ay{kH^eog<6+EjEU(oy!9I35TWB=MWB4<>o!%SPd?0B~pZ$KzO5t z>C@kVmT#^+@|S&fFQ_=i<^Hxp}*9r2LTm0O3Il?m8WL$i0{wf zuUloi16Z$P)}2A+ow98BUcjvO(Z-~VMORwxIl!%)vKx~vmIlFkTv=}qkpR&s0gVII+WPSQP(ZE>_n`EIK z0vs~VXR^hO;+$V}TsG!|RT%&DTz)kdVUBeD{BoJ}$5A&68iN%AbT7_>h-Va67H{FZ z&l6=Q37NYXXGbp{O5y+hy?}4c=~JT`j$dbXVUB7yGL3!!*~gA$6PU)0ppZJ$D4h zUR?N5vX{#J9@{G0klypRZc2d~+qL?*y&kB)o3D9mz&ZJEPId*S5~9 zK1vmFL3vpj3N7#9fOj5^*hI=|7RX;1IXv%{hT043mM$ecRK3 zWD+Gv1q(8Z6>qt2qpLj2PY(eO5RUrwW(L zZ>azEdP4~LWXtxwV?l0|o3-Z%v+c;S zlLuG-rMK>}C7D725{Ya)C{Y^-F=D7sGj3>T8j4*v9f6k$YoWBZ%?R|E7#7-MPwlR* z)d_suY`>c4kbf57_`h6@_6K-vbTK)ythW52EK=g-%3rpHA1A$+>2Z;2T{E-1A>5PIFjP zip#vxsZHyXtUfS;O?oC!L#}U_Dx_t3T1dUb<_#%(k(EhOX$n~GTo5}>%y8<#?EHr` zs%1Ew8$5+p3cVhmX37nm=a)uJSAP`9hg+Afuy{ciR=~2_aP2 z+6;ktd){{(w_RL3mq$H;X>hQFkQY_U0)dAQF*4EtyXMItf}g7MoGzPVY!V@_Ciq~} zlC$k4dRJsR)J%c493}YiCnC8yb_z)l(m5`84e}UcT>>%?Ptr2v zcy<4MIv9FD+Wju=LO|P{rf{dkhiF#|Q<8m@v5XQHY?}0eRY#0?lTeD#sKFKWBQep* z-bCFS6ct6QmxP{+uMh7NvKUWq=#0f(?^b*oVOC(p`Z^UNjkp|P9 zFzAIi1j9(eRp=7VVZ&g zHObL6gCZ;{JYA?rOqFpIhesPO#A$XkRN5lCin3Re9bCxj{+j%iHIfGO4zSfdkmSFa zf+7`0Gpn{{ZdVF?for*-SToPW50g=kk%;1~h`|G!>(VjQRNHM9C1poCRi1iuimCFaR3qf;L|A(}9juj^8 z9yG6Q+qP}nwr$(C{a*9Ewr$&buWftp_uHM>&Fo~7$^6ktS0&w@oa$5Q>YRF>S3+<> zV`u3hD9Lrl4K^vbp%t7Ys}=S5aZv|X%yJ-Dh@^y_rTZMF|CkZ! z9c_L>7ehnJG#?3T$6=&vkLXJ&{!}k0>!W@{Ly%dGFN==SlJUNdy2EC1|^@z-BAXSBW%`s2Jt$C^L_d6Razxv1bc zL9LO_fndxJj;u9wZ&p<@uWrX^@1t%>aq4K>G?{sWmR7dKbH~GL3vz3`fcZ3RT2EbL z0QQeXWjzP1*n2d#&>MmQ{zZ!ZJr`^xC&eW@?9;9m9Z_me5`u0zeP!+i!BL3O3a-!;|ZpneF?ZiExy1(vW}O4D77A z?(!OP_gx5qI$TmDLKRKTie7D*;p0K!Q8@?gy=E$3C(eAiS4iohxmC}VZMlw8=|U?f;~>B>3Y>7+9hN`oOOOs=j{)b&W+O1TccRz36w^1 zi=EXaAsgVlrXJP~_u*~#lzxLFn$oF@jJpjKvLW2WIL6uby`tUvkonWH3g;X!)!_{$ z35J35kBf+Z?IOdfU1evxBq+w=kfwQECR~gA!j&u$9=p3BJGq#E6U%`N&(5@g-5xgQ z*eEMGu`IjWtvmRyMR98IeU7NG2ZL+SF5(!bCiSf;q_IC5m#2_r<* z0{B{6iV+>rb~TkcXnSl+Fw~JO?WU2l1Gurp{rCphJygNrgl7_V~ z#CQ`QJ5|43n#X;=9SQnq%(^oL)8eW}s&N>M8Rj3;N|v4k?w+WT=6X^8KhYREsHf-X z$X3_;+pK$TjysNt3J%+qiQe+lWsOoX9fKfOMhA3q+g6>ubYjvMHXrBST5iHvHhcp= z-t!DOhI!bbnG-KvsP1)7bmonXN%mP|;C3j9o0f-E1Vvaji~4RT7Ml4-iJsPOznk53 zcXv8pgMOv-2Peb#1TBj#gs(vJ2r*FB&$B}8sT0wam_zn2m@{7=tl6L5E;CT=h~nA_ zebNPuqr11{i7@aCtrz<^wnRKZBUsLA4uOYEPG1u4?hD(xl1`(0PD8#s;X0W|#)T)O zD1w(Ph5r_BgsTBRdR^BR0X*(%A2h7f^j)J02j-(hci?d*lGUOHIXl;oj0_BwApTVG zhnqb-SeOg%`n)gY{gKV(qvem*8Bip)LSE8RGOqd;>_tqQ3dsuqN?)v{L)!l=t^32V z1FQ36FfQz_p#SB58<#BicYJ8UiEYcZI7J6_rbOLD`!kPV;eKG#K12-D3;>kTb`VAQ zi|%2gFw*joukj`#OVfIpu6Dz@0_6bgsb7-|XXnw{upJJ3^CL2O(j=XRsD7{?a+|?o zMNBNZ6~b_6Ff9nuXw>$#RUaUAxdc>apazBzn+L9i?Q%ICprN~5s2ENRB(w zr7L9Jd{_ZDfn+062iO5>KSP{#?t1_{&tdS9PjC|nLW#tF1{At4%fE(DsV?_nUb6=x zbZiqxMOazqU3=plYCA6IJ1RDi>KJt5An9@50tqEB>jm02l%JpO%||>)`p#z&cVmN* zTF?t=bw0n`-Pnb@<3WSkh6fF`nfjXaDp8xNaukgFPMTsIEIyr^rA%sdoA~0oU#^i~ zwXMA{9$Z?Wxzd#<X^xCQc|`C^2;*+zSTb=V9u<1oo80t3R{5X#}o z8bl`A-O}xOi`-$tpcSxKvMXRlbVbb}TcU1cKr`HkElR+{CKy5~k2_8&mup+468gH{ z7)mBs6lAvsG=*6TNl1*X31qtmV&gHl_B(YLd2It8+ACV_^Oe zsiyFw= zSOEjyJAcrpT&=^L-tkkQ)d_aRS~Sa;haFgKKD|mVY<*~GOIRVpw+RKmZz=eeC)~!C zFyTO&@c!h1;w)zy3A<`%B0R~S$LP6lXVDqd%iNqYQ}f~C;4unkc^8-XjwM9zietsd zT{bgrRgud_x909i@ zM?sced1Ye2q7R0Nf*Z*%*0~atD|m*-aRMvOLv2P3$54TMB-b1wn$j*_f!T^r1a@v* z7->D;I^y^`Ax7~IXEIInT`gvtSsO(fJ<00%#T4(YZNQ~DWtis7WBQzWW0sJzp^ZK&$0 zdw*TRFP>FX0|Vu}PcR~YV5#Ua(PC3JSi=c@#2Wk-EFzt+R+K~nx;5E1%8&3RbeGCV zPW$|)&5Hxr{-d7Lx$10b&2cLyjl_j+ zZN<8>Bww`L2v5VT12@m|;3s@#3;mw*Pw7CA>_;YlrUNr0b_4ISGdyiBGv2!_`qEh0 zC)(S;nn~LV>fhjMy=kui2&zz8fd_QWhW8odwp=<6yO&wa=ei7HiuGi39fQOL)5tYs zrqRyIX|3Mkl_#lgui)y*QM#ZBdWe0^#!)r2Q3Sv;fAVj)-RNdbb!?MO~o zrr8QJxz;^rCJOm}9V~;n@(JavXrzL-+D!$+8DI9QnC(R){Yl%XH$_CVk z7S?kCfClRwLYZyKjXZGgKev?w5!k4S^&@3y{s9L`gVoZ(z`Z>FlsV6x{ zBDc=7H%S~3T%o~I$}lM0DHHcKc*$cFTt_RuivoLI-Td0}n$Iq~n-*DpbX}wF?!LXS z?W*m*x}a-5jqikGUf+CR8VN)QWzu#Uk?S@@VO064Du~X$4>nDwA9F_^g* z1zSddxw6+_Cr4r}0ZCg$uXB_^D__rdeO|df^QuBbK3ij=Xw?(MFPw8;yi_%t@w>Dt zAi!_%eLms4o7(It>9`C_cZ#soFxfBpr}kkSUvsYD7s)-&7xZA@e&hhh(mWk&oBRSF zz3xD>VrW$MfJ(NACN~>9T)(ELhKDUnUB;Ohg%u$MHXwx8iMs)dY51^vJ?G=z5x_Cf z;#g-yeRFxLT9Ot=mu7P*E05+AoO9xPW)&$=xu-T=*kOc}id<()Sq{sUZf(cl(g&yI zTwBsCMoCWT>^OFVW4eK%-6*d-lc5!_jApR|1W3omi*pzc4 zR_K!(H(9kZ7o3Pvviq{fM>-~JKpemC(gl>{8G0b_!R5S4hv&AahgTg%swB{c(4KLk zd^qNm6K07J$m2<(mgedJdj}gW(Z>n#aYVvWRReHV2}tXQBO+2m8oU>yhsKE2FX+QzdLqr3R z0CF+Fi6{QlKj7p;V&X_fM-@2ur?m@a(0ypz+D%rwXI3k^#XBWBDblx8n;SJ~i~2OZ zclM%k9V9#@Q<*)-Y$!WoZwzUsj~1jylH(K2hx%quX`+`$9F4&bXcg}yANZ_6?%%6 zvf|*CUWE?7F+gYmTO&;F9N>x?ARCsm8223t7!mFhU9Fe1Qh}9( zDd!>vdUd0CaqrHVEG{T}y;?*go`vzUj=?&Hdt|_|inns^*2y^?h;Y-m-TO()pbgen zCC20g9`NSQ_u6*WupnnKhG2cF_MzUo0Q6D>{iB$kuV%W)DPXQse-=?zyJ|{Ai^BM&|S+Vgsiv z$AgNJ4GbQySzNp%CSh?t58k{ppUJb{m_}oVbKxut3SpHimI{veDjFovp$cDE29B%fF&m4pce`B;$X7sFtB zvX4wkc58Y_bo5IwZV;|*Me$fe#;%7d|PB2M2L#Ku-3 zQ-r3|x0G}?D#G^FRqi_!nN$#HyHoG$omvp%`p1L1i`0s%{#1IgJt@A&0_$oeu%eYO1rXQUDaID zXXR)XZgn!R0k=FgY3Xm&v}jc)3&n7)%zpaU{CQ`(m_ZcP5-Mw3JK!^!Xa%LpRF{yf zV5%QR9|C;&_dpA(fnA9YcifvXuirmV^UomI#1IhuBb{lj(&M}qBjLd7pyivYX0^oN zljxw+OI>)UMorm7eE4Ds3wR#3M&y27twLa}sm{vT-uQgQ&^Jg#^8=35VX zjRvkwEvT`NqGr34cDoU$%N!0b>$eh5>CB4zV$MI`CEW82 z(X0<=wVdFS3M4mF^oHcOH|H6>;f8SJ*9ncylP;lA%RtIa3s3XET8&#v;2IXH4pAWybzq2EGvr??psWMpTXnI* z#B}?@&`}nSojwRimM~%g+wAM+YrGAD2KGJVS=uSYh!KTF{lj$ zE<}^*D{bdVBf8fIONGG)LSV6CZA=N6Bj`(6kUAU)TlaOmXGv2>_2@PKBbpvR=5OT!(ojRXHQM*wYt6;39la*w9raE;&|FPOup(**@**5l#O z(nSC11H)X^F+iI%Q>V2V0Zf~p@PT}PP0P;|^t=(?HrxAInee^+?IPdJ;5pdQ z5>*ZXwXw#4AV34Zy&^eRUMb0Ju)4ORFo&@YLj-d-Vlgxe+UaUqtmio;tgK6npy!)C zdLcc*`J&0yR}|uC35$)j=Y$ZL_lRTw=+&-C`pD+=ih!fRHE!nIJ;?n!VZDfW0PGak zW>p4|h?wd$r8+;E#j>3dYUOvwg9siyS4@rMt#6F`hy7bx@LYbMaqOA-r$m%$2cCb? zZE~?zQS3&|F#rL8+)-qh;B*`9YgkB0-^@nbckk}w&(~W_-+L4#d2BeqjrqwX{mo2z zQ4;0oX6!+HsEn3MQ<+haFMI8ZfVuzQVFD7sGE;n>Us{^bkLXSio!JlWyuE7ctKCKC z;QpRLYw!96?_Bfl+IF7(WmGj*4pOXV{5H;DX+)K^?fGi#_A5krh8q=eL%21tOLHW| z0X-I}W#$RGwVGAkh@jA)7>{so!3Frq`Hc6D7um}61YC^n9;Q$kV@L@c{msbQqpj7wMQ*fwYiRk~;&L#99_QU=Va(r)ec9vA zk!c$^;+K^*e*=!;+YZ_Gdl54orsf>Mkb|Te{Q%gCZ9z`c@_znQ1DA@JELjm zG&p(*($#<{o7M$sL0GR%(zIA>AY=DUE2A< zGHn=6eSN+*D7o~Her0IhpT&=MrLA3v&s;sE-HE)RA$#Ru)4=JYkyUzcuAfALC!b#U1$pGpJg8Af)DMsjya7BbhbIDp>mAl&Q^sC|}hLotk5^IZ_V z&v6igUnB{}!Xsi$$sxHLDbJWCaJC}SP|LS1q^C22HpsL?a^8E_elW2Duno7Pj@-=Y z+B{=l=wrVssZT@U{R%IYef8fi-}s5mN~)W!qI)@MQ)e+#Hc#c=N&jsrwyb8Vo}+jd zhse!l?CrVsTIj6 zT&&=c^cIqm`$lP=2XC(3txVYAX{nPmG?uH{I@j%Zqvl!j>qE;EuX4+(W zbQYYqBbz!X!R#1K>@XO!BT3PkFC%+l3f|?xAkdqXaw`H(kLG7eWKvqy`ewwcn_|sC5r5rpD=yfcWd#8y{l+wJQO$GqK7|PxLY-qyw7_H0@Sz1mU zV=fiv#RI>$H(pNdh{afJTCe0#1P&k*O!L0HFCMQOop6Fcco(qrF=2|NEYK@ID;tHR zyJ$IPw==RTG(H4O1o%fuKHz`-QqObg@pJumYG@8(M>D+`agg zkcu+W0D3znno#_fP7$9}lZr_x_s>z0pFStUB*~Go{T`AZJXBlMwP^_b)i*Y6Hv=$k z`ZR&CN}w_WB~tFk)+92r2Kr2bTC{_*=w=W^Y38drau6Tjuhp$;1%|&$gGMyXE4NXB zrN(aVf#U6E{2C4=-$E?A5^MP8vt&MklZ6-=M*}a;7e*`Xj@-A?L?+D!fEs30-F3P! z*!-2oBuc2`^VEq3+7m4Q69!~;xqLv7RFZ*gCI%xQqz|D|GVW1xObThhFi%^KOfPb; z_!*_?`7D_wd|`j$JP48LS_D4C^l}bYTCDnTJjHZIN#9E@Xm!Dg~+Z3LYtj|!wGIU28L z59zf#6Q7qNE@Xs6$(K;lVv$)wc@tL=B{%7!SDz)FiSi=(rH7qm8x7)>ppaq zzMH+-DKR>N0w!29A^cUAoh}O1uL)W8V-bV*6fcq7XHd0Zg^Z4MhPeq~eSvtVL9FbfskpP0&7=@hNVi5O*?kvvlzsNusCI|4+yN)Bc}<1#J^%rGOMsMtU!bS&hI1 zgAf=4nb8g>lk1$6=1g6s4tYH0<#!UMF&t{#jYKF-VGF0NEJ;BST3PjOxtRh)4f)cJg zP3f#=@@lL?R?LbkxcDln{1o*x#wTxx!CIx`0`x<2n|lpD+i>!QaVjUSQdE=!M!yCQgOyxN~v0WE3M6uv1PG=pNJ4b`usND zT-s0vAK&+sEJ$AVJt5INlEB3IIIReE}>UE5e@Ku+beX7!o0 z6O_bYx(BME_URREk*m>RQgyiN{4bK@Ze7nHgBI-vq6R-=S!SpIe+ZCiZLgzTfB*nX zzlXwqCqSD14+Kd1|7`-K(tqPW()It}{72b@X}JLbl+e6?J%fhf#Vt*W{h`nyQDTQ> zps_=+w)TsV&A*DKI(vIemb2?`pOc)!$2wEeGAnnKjuzm;=f6^@$kqJmd@YOraN!|V z0U^|SWB0};nm^DAv68LS8StEEdT2f3E;tAK^9Hl|cUhFud$zC#D3Vgy)>~|mJ64xI zyEeJKkT{XmQs*4h(hmaAz-dhsk#aftG5Te~>Q!ux;e<3%$3gKH!c{)NbeV4IB^DXf zra=E-qB4&#F;W5VD!Z#Jc^qMB4g4U!{~brbEyQyfQP8m(d-P|6BbCFX7E_7TIUsQf z3y|hV%+fnPSU1~mrFIQ+4)6U>pabA!nLdA!nr8pYKy&?{B**_R=Eer7#^we_2Dh>@ zYPaxe5efl72^hfS2-tx2*a*R|s4y@wjD$6agf(=zgfRkuVZbmN0mc#%2q~I?!x{h* z{6!cE0EX|OOI1LdU6Q~-ik(9zn*n5Dti?xMZN^}G)<)n^c4M? z^s00ng(R)2GIfO{{bB$Y(vHsJ3B{{y;#ULWxe=BG{Dx>$Bx#g@5h{|S^pwLBs>8BC zPt1x)(B`h3o;T5op2%U+3en+}oMlqX%wZ@26DSy5X5>(vx)32jKQlZDz$~XO9=)0K zN0o?f0dPk~hlaP~6H>C1G9XVH7#kRz(}Dp4PUZkr*s&zQ229=UPoV%C!c_!uast}X z&-Wkyx>XYP2gY8&#y1R-lk5M?Q{WH-e7fJn|DPOy`Y-Y+gzPEYe@CGHo-qCI<^Y$H zvy<_EOM_e2dxHO9Q2*Z?`ycPm`+qR>|I(}0>!=T-2C|Veth*fOFU~?*LFW|SXXzyY>-<9lnWw3 z0K6R2Hp%9hW}7S1ivjcY_(j!@zZ!X9_T3-k>w)wE>a|UzGI~GDpwcMotGCzj@|b{W zgwfyaf__!SaB4C)nwiIh0%{;*W3!W5ySa_9oGevoy6>i&cF^~>IY>F~6irI0$7X6O zbvdx?h?bBRiKC~Yp>6tYh}RUVtL}dLx#s^<2G#QO$$D8Mq=zy7Vi4M@8ms9WvDlzS z*(b}uuV&a`_tip!0lhbR8fs0<@u6^j4HC{|^Rex{Q#d}A4Hve)k{MS|nIwCDvo(`Pf&PW) zQr0+l3xC1oMli+PnNi&(|&4daobmUxh}=GMPU}MDG4@;D4TOY;fq$_ z3jlw4TIY$VFObo7L%{t55|i$oiL0~I@?#ZEI&nI|<6Fd8HB(OK@PSHu_DIzq)Vr}t(wQVM@jXfXO;Ey+(Q*+(o@L)g7tlel zbP0OeT!|{rF(F20G&0$(L1UH8tBUSuX|SIXv0hN_qET&Y%{K$4%v|#XJ=-XQkZH|`vX`0 zLH1|+WBUsv`X4|pHrUx#dw`_3Ho8u`BD=L@eLUO**zA2-%WEoZEgOI#wrOG7zqvcF zHXn&GEF2_O4Wl^dYJLT)P!`bAN)42z=R6nSZol7|-bxp%7dZ-sm}ogDFR5n^HXHr^ zV*D35cOhLfDb>-l)4Fvn-R%PsmM6S_(c;vT=tsN%aL43&G8|nuH4S>{K0m_(pEYhQ zr7K5_sAV6QmomNWo8IJ^L<7f|>v`^rhSL#Gi-}H?X|IsRE)DV;Np{q@y(S;fmTtF~ z56hNP=|ZV!qt#?1z2uzL8CJb?^k?U0VCqU<>1)gM=#*G*a`CPj?H%9ksMZI&U|)2) zRJ^rlQ}FT-uy)p5nr>1%j^@pv1z#sy#!;0Agy^O)(f&PWineZCB-_Xi6)1Drf9a6K zB@#0ic=sAxymi?}Jr%C9_=C@<&u$d2MZV9SPU?)HDJ^gqwVn(u(?iahy( zK0lvBvz}$Ez3L)IJlJQa=6BP%k$$Xg;f$Tu&IUF$Ju>f|NgMu}HchYg_w%Ak9L=%N zIj9Vf#Vqrs;SvN+sDz%);ak*cw<*Y+Xr)J3^I4{7+#;)Yf17|TcL>WaE2*dQCJ16* z8oIcWe^*rRn5zt3u+^A?A9L0T{?=F8vsz8HUjHeG&UY*%#G^3~g@+mKwgZU?%4SUL z1icpEmI?AU0GkR1t;2xI2T>cuq5x+vm0rG;_5eHor@97d-{0u~@(qM9i0lJKI|pU^ zyL3eo221KU!Dvs6A!|*DB#D+GZ5+pO;?I=7A46(LsUj#bVNDztyXUANoJ~3zQ@h7* zi2aPaB=R2fb4vJ({0z+@kUdmh5b7b@O^iNdvLx62-JTGnCxMU@auJ$1ARh`DB%DDb zgK7r#5b`!av`1JV;h{o-P6eW=L2rYSi;|1h0<{^E4jNyl?IG0#_g&g9aWUERyZf?NQ_rZh_u7lo#1J^l>|biXJ^V%ryV&L}UN^ z(izIN~W3EsQMWi|(nFP$R0=bAqkxNk81%y()omCObM>I04ymIxWvxM4m4g5lJ4lz&~ zvKK|~&jxfSX;)FoI|FId={oJclI+}IVXk-voeMNlkySB5=~f|I10ReiB$isVbx+vE z-#sh{B12!OjyVj-i32nt-Z?WQY}6IUD5KGYIIcpAP%pw7(jGWdC zYGgcm)IYXgzHU$7m!VsHeeceDKMg*{EiSGqp?~ned-p>`Yb$bO*%Y3h>Px%|xe-8dW z8G2Vd@r&Udpe~B(D(ji}7W43#Y18Ul5NU(!D&j{rzDsx>PFDC{^yX}oRo~WMfgja- zt@+i{`yYB}@aidY<3{<`D9v7>EB+WCGV0moS&v0m#iy+5|9r2;H|U3S{g6IK$L!)a z;AhA4oA5V(kB&jlj#{tZgdbO)0k*9SpIG<4OMLcn>u1U(-gE5K=IU+)OTXoGY4Hwz zEd4-u7ChZ*-M=rr;Q#b$?S3Oaf6}j06YX$(JLu==ZsB1Ft5=$P(n$-i~1#&1?nI_x&P@Uwcb z7gc8hmuCjqE%KX;W-PEWo9P{isl6Yz$8uh0HBJPNTSM9U{LTiTysbC}PVW|8b}NUy zU=qa&vjUD|~n#O#AKBfc9!)d!32B;uR^Cf{^?QFF*K?2VUK1>h`uQ_$SR9 zqAl{G9L@6CE_Sp3nri-)71{TkI;f4R6^&Li;H>lu7t`#|&%d8qzQwQSOx{C5r8}gd z{6azY;|(g#C!M5x^?Kr}0#C*^u?*j5QTUipk;cq70F&>b&}wMLsHa*$E>Nt8s z)JKhdq299DRy5m;L@H<->s&1T7;7;>=!K{-yT_;ar0PTYq#;>LbIegbQLc$b**S&D zp*LCSjx-#vxQ;~nAHxA}aa1f}m>;C?rHNfrDS2g06R7<~Z7}K8xtL7)!)kL3om3F? zw>J|5**bJ;)Mh(YN;&Hq?w+O+o!+S3G#@4yG?OFgqu+yIG@0=>xz;O{$PVsABVtC9 z_lSw2Pq>ddbJGt8i+jv&VbsmfoIiNH{Tq=|;KTm@^HoCJi-3JaVmU|T2Mp_vz0I_% zWB!@{3>ql>6m1zzOQma`?s5N1OI~YYsMl{X7B!?JrWuW~-y4VWZttb!d3$Dr&jYfI6v0Bgjy! zC|N63WOE7vs@qjX&}))X4Y4jQEa7)HFkfWjS#D=|&*D8x`o2{auppnyB&M>1|_qRBt;;}JlzGc%6pI;C2ZuC+SVcw?0-ww}8 zS1ZEzq}pRG?7t*O4VyO3^S99G$LOhr^|tJrN+auNs5N8Mx@v8OLoG6jt;H6acMVF~ zdq$g8C2PFOhA?o1oerXgjB&vn%i=qicZ(zztE$sfw0i9(l7QHZ@F8c>=(AcHIeEPU zY3)@mo_dH@QE~e97AdsG!wpAWjf!k4k+Z^PxSRK?q$O{|llRgJgX_}i)gBqz_Vv|G z9;m@;1?o1^nP(4D9~c_VbS?W>riEh5<@1Y+iTaVvk~B+D==39TY4q9+O-s)PJw!Dw z>jU8r?U_;xZfZ1?dtbELxwE=C`f4e?g(0D()g=6RFU&*-{R62bTX99=@pZJ+)B1LU zf&~U@*@`M5cMkU7QK?%Sla4~0*Ls2ZOnSpV@_j&SV7*GlYcUTNeB)&FVlqv!m$r;Q z#i#}_Tj5}SbU61|7(vN5i?We6sw(QRJK46cpG|v%VU$EQgUuc!ZS1gP0|4}DVA-+8 zRAVQ|kft^R6>q50i;pj&M>NzFG^#|kB-kvE$d{%(r>!`K^3<(9Km*S50k=k!WfuQP zd;sJ)0&yxNDh!BPsw!s_BC%Jcu(8AL&m!L?!WMCNyTflyY+e9!JYZ^P@7`Vu~lk^q5t|2gi-?cw{n(&fG*^<7~UKxYRT!RcefdCJz&rj@4 z;u@sxm0nd*dxVSz^SmfvJTBf9FlfPVcRiJ8`_D9QDoZBv znpJ2|DvxZfI0Y#G_%*A%{h_p?q&O;8wt8#O+JQfG@WIoTc21*J=>cG6?(K82Utv*y zZ5&Mw$GIb1%NdCgLHd_4fUG5#XilLBTYhUnc2HBDS?`p&za(7R?%o(a?v&yG$_nEj zN}2#q|4d5$JkNA19|?dadXj=>UZpX#qD|5tJ=q^yEu_%Xk-!Q_E0U0-w$&2j0$1D2u%tGoWROF68cn}W9ZMeXwYXv{as6QeL_PlTUfqu)g|iDTI(p&fm4cYv$PvQ^ z$a}imUHDxs;5a_W`zDS6n(a0A2{e6h-@a)09P@xC$p zrmLr%b=+n89D_fB_OSaHO{h4))G5BYn*}KS?|Ds7W(V2Y6uBd|Mv*j>hfnAZe)*|} z?{n;Jc5b(7^FJP_kF^>AV)?PKZTCGvMc$->f1W;Bt)N2&bbh1&`(m^BklKq8=%peK z&C>^;V_>7jfA@}#1v2RVG{mOM1ka@k&NUx@5DI&)+KjB0`Tm0$OUMOeD5>m?OZBbJOw%qx4Uy*BMQ@)_2z3R7O#0i@sw;UW(>C|#cz&we2uYpq+U zntlSexP_^KJVxOI`>L$|C&4?q$z8SSAvx6s4kt*B#D-~qpg%e`W}>__aAp#b{$OJA zsw!$Lg}WfY5$mEOUhg>~@(e2We5XVsqH|A62;uoQ^R_7C!VCjvr?hc^LSy39Sv zV3Q>jSutabjZ&Qk{h$G(QCrIpxS$A44>(N3HUeX7Of$%4gxJLlJW+yEV$BJC4!rm{`|At=dmLPu zWtNl(vV>|F0E*i*oGZ*A&>{)N1oPYZd!O|}P%r`@p^PM`NC=Togp?5$CUGXhR762B zz9Uea3DXGRiU~L(5W*S)z7c>+v4ABh)&r*cGky}ZOH4yy#4(8H1wGO2y*>Ds!1x2N za08;x^l{T+cmR|Vk?=4?ae4wO=q6$3+7&DjD2~;3@2B^|R4>9rFbkt9zA;-*seEo+kQvCp6XGbnMf_AXHvGePD)0>&sYOc#%D^yqzDv;8`0AKu}F@XQiXsqVLU#91+?-s0Z?^!p{1V^~sA1hepFq(Qy5 zZWskvYHs6b&lG#3nj(gI6TPTfUu2Wo)T<4KS$`4yqa%ZI&IH;^hprVmwurns7Ldwe zuyuN{`vdzIs{eBN^Sn}6`$7%&Jk_XG;#MV^N zXy`j+Xirn%l#}*nk0h6b~grgx3RzgSx{jec;ECF8^|# z%h;_;J5ouw=ew}&E*#&(;t?M7tBF)Il zo4I#bL{5uYo;AW=)AQ&EDPrhN7qwu4@An&CYKvK~bwWmS_`?+@63<5YZKkd!UZ_0; zZ-@AvG?_RrR34}X^oV&7whABiR{p&%eTHfe&3x6ptfIx3d%BQtPyZomsyzbd-+R)` zxW7JVoAYd;vqlqEs;@FFzt?1+h51_bvN;zGm`gL;tGpr6fxCRdJk_rMm2#FxS10vnnOt_60>nK}ZV-0s8@!S#nr>6DMD z!L1OzN=Bg2G0s%!(qOJ6drS#}1jABBN>q$4#4v*(8~WbYJe+9r#^T8&JPD&KY{*$+ z2ZQ7GIkR0|8}S@BU#FKFj&Xp&pYzqxuC4r?+my$JXmM>~a^zLP=XrYF_>+@q$jcc&ItyvspUk{Z ze147ZcGcm)P23i&^H<9ngnOTN?IcGprxHaGo)?jd`YG3XrSoIS_y(~V=A(8A^NsmW zgqE3cmFlI53AnsoWk!8%;z1wYUcj0_h&{sDQ}(`04Cp=w+%LFz+>73t*3-sSkh0Nb38c6jtUG`G3W)?H)A@-v)Ii_MQ2qX%hO zs?kZ7hO=YC8biNeRfP=+!y?p>Ix+xS*^hOzxUW;3V^%CLlj_j1+pkqytBYF=T#UA zw$0&Cl=r?(alJMSSB%H)!F38JA&3(=i|3+VYj3zTsAmtV1YEcpw*;lgGgWR86L}pl zR<7q=hcjd)_Vn?tL`q!bh9am$@5+NwmE+z8Ln_Ef;pM1s11xFOC28;^luPn0`AGNp z&K9%=XnGt-Hh=1T7iLDlHhF;D)sn7JGbmC6L4s_m;ZDsoI1>V?H_ z>rPlPy-8LK$5w>?&o+eiPz;ENLkObg8e)ZsK?ExGauR7pdWj-S7X_V&*4Eh& z?<$Hgn78f!D(yVrseIo*eq?8b?1=2tu}8MD_ev#OviFwJp~#LRTQ-r5LL{Ri*;(0< zGLP(;{GaFRtIqM2`2C&NdA)eO>V7|;>%Q*my6*da?&sn0>Ih{wPU!vmPQxUgOlX7K znyU_PrET8a+;YnErO#x{hiOzsl|0=(A*p&%tTaP%6>2J6-k11DAA5h%gH}1PrmB8U#BL zOlz~njF;%T*wYs#q@aJt=SfuKwZ}4~GQ*4`uK}v&vrOH-Ie1>_xKCwJzbRy6W}0pa z<4yHf7#dB#P6U1-IB{7`n}7%Jx}uCHnpNhy(K*3@dZu;9Bu1x*Sm#{3cO<=*J`po)U^`sjptRAYt>Y7v9&)O zzF~~+7oJ}=ZEYpj@1o`rvobR>k}cm4yWUTAYj)8s$=Tg|++lEa*teftxHPJ!;^c-X zRDV)|LTarM<6@L5`Y<73R>;OFC8?`teo`wlbJN_UXb1`Tq#B6L*P>s=%d);4c_%oh z@Y2E*W4r0r?*D$%oejIGj3e0Bto|`xO)R4W~geS9`}_nLgG3q zStOf{VcWC8^Sm%348~r9E3U%6st%FMb}y>1Qqr&Hs4smZrAsGalj?1xm0*yJ-V|?0 zm3%J|D;HtW{mk~ld)k4wVeOjU1F)$eJg*0JJ98FZ*#Y13Z)EUx5&CoUa;opFgs zobY5JVOgd6?QrqTtWXIPwC5R2?`7_fiRw_RE|pw4J^R^%nc|(iK4C{YZD5q%>5HU( zv>%EHtc@d1JXuVrznN3G4BjQ&%18@5;|I z8sOd2m&u!MCz!sbun|S&==@Efym!hrWkP_Z)QCv6MY>T2!}EC_>uKw#O%N%U6~OA3C+#tM zP6RGr@V)06kRdp1$2z1%Dx;62(1$@AN+3GXZ7H1m{V>~0M~L=bhRz# zv8kW}7P4!&ZyOEIjB7uaoF(ufMM*xRmn=nOl6k$@tuNUoZ>8vUTzI?q-NX_*av7B8 zZ{8br9mjQ9t=+g7m6a%8a3VaYzM$zH(bH7+A`cVVn5;88_%mdNH-v2sZ}n0_Zef<* zr6Q)m`6hZww6?z0D#bOoWTLtw_f|1U{qQ_iKxkxD?ZhH?*?_F)WaP~0aJyJEEWg&& z>M$pXyHXT}qc7&h&A8jX5~MW(Ybht7n;dl$VuY1LPHJOwrXS7q?`p!06M3j|PIKQF zaxYE}xEJw8FT~t6;JsmQnB8rTGW=#7o_hsJor!e?+21t#?0xl~t7Ba0=)j!Zum~Er zmvd2Y+gKV&VU)H#W^+d8{5A6Vq{q01Y&S_spDf)FIY&1m)HGroWtRVe6#q)28Pp-} zO{C648(L8e=3ob#@@Ti%1cq8ecj16atYA9w=IrW*baWYS#cx|dC!3WkgFGo8y96!R z`@b8axh1r{P(%8O=tIGU)El25Ic9Dd10S!~Ir)Ch9D>qn=_`^Ipt9FSwzlD^oq5MH zIZ;LZJVVZ+W+($gBG^lS`a&oOD>6W5NrD7)qWE-V96%AuKkQ zbChD<=df1cl;Lj~lzF1xeaoMBbFmgYlVl_rLHMBDW%%by%Zx^!HD*(a2-P;!V4cV>vbH*J!D=_o4kcdoM;W)a1@~#d_73&M?f2kd#@JlYv;6j zsY1DaMJ`t8c_!c(e;B{@;>^svY{k8MG(|KDZ760}dcqxF#(C&y+rH7iKVceb>=nya zE~4(&I!_Ym8M6(%zsjLQzNgPcn7cLJj#IL7vEZKZddD;gO{-A34Mm8zwAT!EPV;5H zC2L`W*7nr6GbWvm*cd8rHnddg(Nz52pES{Qn4&JWY|+gZarBvtyB=B|mv>2ol*nYEJCzE1(Fda`ZJ#{=zMM zjxIOFxze&lpl)g-BiD26LIDj$_T4f+?bhk1DB(*{rdg9}1+Q(xd{dGHdO{wvQC=`D zBbBVe>uxrK(Ovcvd6tTHT2pzVOsC5eOTj*S=|c__d>#_q&@U*WKvFE zBO8Aq`@YPmw2>D&;Va^H)vepvjyY{=uuCFhf4sYyQc6&aK;hMd|Elr`NP@ zaguYhWq-%0!{A8V>VrYKNcYEOw-U#@R)x*pR6b2QrZQbnDG&)8y+oz63cN99rHO)n z(>A}?PpmMt=dJM5@s8nJOm4z>DnIf^QW7&&V(4Bxwa+*85v{<+ixq3+wXs<$ZTi-C zsU44Af1A4R$Lcc=J*zg7t0s%$mmX1^*QmAnxmaZ+Nzrmmh1u+j1(O?%McbL_X+M$g zyszxzNh)c2+W4}tNyN3BK05S#EoDg8D=l1h4j-3l%}1qq{w)`eefXG7F~`_)l*E+* zfu6q7c%4?GXiu{$Y-7WFvnj(VB2?NUx=E|TRja2cBSSicT+6&i;s$wKZCX+DJ<+&V zdq&7@f^D`c$MITQq{|x@qsLv7*hi=E?v*Bh;yTI;q3nxr@cnRpYfK@SgZ4kHUrorm?7|^y-sKY3_d-SX4EuC8@MbSt-i`xQ-xa|Y22E*Ul zV9dm5c5>eL^eC%GcZ~37e#q40Yx^PZN%huDyc&yLefn`CHcxq7Yt0US>WjWBi;ppT z*a#^EeIHZ2{KDzV=x_?(-m3DV?`DsMOgJmG$ZhJE5Asvhq&||AS5&cvQDd*OeGI>h;sWbBZaaUEv7Nnn2Gfu3b2^eGvbz#p<4>c6g zswJKyn0@wzI5$cqkG(T+`Q3?x{@VN09~fo~AK1Yfoz1G8*_1yqM`8D8D_(7ly`Cp0 z@X~cTaiFF&vfa|&dGkyU%+*Fgo~xcxn?4#>lm8oVw&*F;k6w!`Jg3^I%!n?Id+j>T z_0J2^tJj|kERST1;taf3iTqSlx*7QXon3uFWkYxF`2;KDY26#4RuO)fth6xu zuE$HZdUk-+xhyxdPPf^w!o*BJcT~v0`8&RwSU(E?Vza|mOWVztkF29HUO%Im9=y^> zRdTTi_PxefyGx|3X7PN#AKnM=O0MVn6=5UZiRoW&ZGOfcsq_+=h077e`Y)2V1a~Ck={mQh3<2#5VQoga zln~#BrVmiw2b}KLnEWoZqTRGjnrHaP#zkMuCW=*iK}|BVQrL@964OBbuDjOtYDU&; z-Ks%3kKQj7K9(6SXq+}!zq;VTU=dlq0yVE~)4f#&GqL%$C?CeW&M{&&cYgH3(BnmU zzKMCtcpZ|0I8(plrUJH0i?8h4E+iS0%o<@^Er=!=#I*(xtDROOR_o+^_)L)L?D~_~ zm76d07;~w|UY=Q1O5Y;BQJkxfFOr?2A8qZjtn>zxm%LWagFkonK`nvBMDuKO{!pHe zDk=?is#wrZtW*QeSK?ezX?{Ug?^MHl@7i(4zLn#D&}7#@gYPZH7~#dTsS>Vt<8((! zk$xNrCdxq2{l{d@kYW<;V;QY1&+kMz5^MHd!oxmmZKHBe%K*3io77!1DfN5NZ_Gcc zQm4V(YHnUM6+$_y;YW+jBpiQRnOu;;P*2A`$t1j^-P3& z=bfKXzW+pa%F6J*wZjv?un)an41$IajR!GsETbD74n{iSWd7{dxBM%8b;a5e^i7{;$$v`Ls=pW>z&*vjvMJgvD9Dc8 zQIdt%QTob-sK4$D%U9EKlpDChFNxRBt6>*?q4;^elepW)vlugbLZg{B_mcAc%9Q(R zk6%CkuyNu%J-?*T%=W$Zs|7hRhb1f7#O_%w>XhEVffsw?^Sn2j@F z?G(Q_diPXT@=5>8X3`1d(Q$s(0R_x$-g8Dz{km?(-!a5jdSZO*tfkNm7V(q$31K6j zWna>6=Bh-(iFxVc0y2~zpr}mImf3 zL;9|m;3q{6pJX@Hui;2jrz+_ra#84>I>|HhJq#;ffjqXz4>LY?D-dfF=bl&k*Vcu$ zrOQ$ctB-O5lF%d4uIY-p1 z+_^k)8)v$;IH_-M;p9~YzL3K2<`XJ^#<9r0pyY9gAEz%@xsMce zb$0owl`Mt{?e#O8Cm(cCss#&qrgbRD5D&L4ZPj1BZTZYEMdA@5FSQM2{Q6kDLAjnl zm|sx&P>O`Epx2M#sN*K+6p_h!fBs}z{nxEWo|pYJ5t`8B=daoVB0(lJ#A@_Dp{2qHq3&IYUYpVvAZ9`X9nmN={Ul2r=gqSIN?h zWalgCPph1YD@t6ZB48pFf>&cSdFQE8VMaS1kN(N-??FAAh*nI5()OV4i>w5y$?DvB z$g&8h=i5c%5AC6u$(TWf2oi;V_9yl(Q*UNqy1rAu?Uj{W=oTmhN?9Vvr`u{ zv(sa;(E38_#-7g!YsK6(KAa~>CoMTY>Q~F^=caQ4#}!#hUc!YeqK5I%U60qXZc~qB zLq59MJ?qHZE*`KD?Nt9>@FMA*z;;_a4LVgATa6c15``QFL6F>g=V1;8lrKND;>C}( z_PSlyvZQUtZpY@+d3DX&*ZK_1)Jh&`Mc9#;!qd{}V*VHZ8u@<3V;0vtEgJ3DlTS+# z#^wy2__Nr)-XYX-{1d!ZJ?ILUW|9N1wvK-d7^JbRU5|g-&LUbbK7Z`n z`}g;Gu(HAu-2G49)v-DClw$4l3+IWe5$@E!V%$>J$K8L7*-SQNCv4CR5s5Gl8wY*N zp<&MSP`YT*QbNP4C;pQnSMyZ9W=l5iJDidwsYy*A;xr|T3!-pHt3&F#FzLgueW|`% zb!o5~efQ@EA_^#EqHWFX&9FynD#5}}$6lPRRhGc2z2$aX{X^CpMyz2NY0u>ZMRlPQ zp=rd=1+qqk#HYkNa~{q!WjF~6iibyM-r1<2Ehpxo%&ME5F(T+r8~vg*&!oXm@0VGR z9cFV6j&>0qgW^SN{G<?m$|NR^RhD)60_U{eowkjOT4 zb=c%2n@Uz1>fC@?m@!V3|6&lP*Q7)iWPV0s5pUC;AVe%NNnp+o$7KrNHwu_zG<0x# zuBt@fC&?xIA9u89)$rMl;{CbQ_SQ#dZqP*PWy0|m`VJL=)+QC<70$EGZk#t|33xl- z=@*q(kJ`%hEP%Jn{Xvpy*Mqml>#y9Yt(W!i{kUERpdQ3q3jN>+cKNxC#eYJ z6!Vx2KlB>6MDZ&0g?k4ZQR7RKP_-X#t$#GUJ{aKh+KtS@n=7#Bgo)Ve4H5rrbx~^Q zx`dZ^ccHONw|DPK_@aKaO7hg0?{lBhI-jzPBAbB#c=Pb`Rm^ws317aQC* zG<0QNP*yt`!dm#Tg#f?BDOWt5s_$=1Bm{I4eHF;D&E;|0W zE2HJLZgXEAp4k01Ym|gasYmB*>LTkFIv&Qj%7xJzo$38Eoj&8bpMH+xOi1Cz;T(T9 z_KG(ru}@52l6_TEao&Rbvd8E3wQ0(2iAn9AV;ij%>DnP~+|bvf5$n8-9P#tABBsZD zA2n7kYSQZ#e1jWzevPZxezqiB$?>p}@jDq!TC*;@?b3|!>HA><=VYCIG!_KeY!EX_h#apW3I^IVc8hCoM^HaZ=jhKX2(CbXb zM`pUJb@U2!TPx$A4LXw=dn${+a(Ya@uapV*Qe=D9kyDr|#IeOa#TJQQH>BV=j(Ym~ z{l5O6pOnQ4w8c&d6=Y$Drp{SpR!RFgXe}1fQ*^!*B+e5MB2{&4Hl9_u23^JO(b>2e z{<**TFz!gN(kA7~qNeOk`0T6*Fb*kf zHZ*@MF2VSd^{U;{;wCAYEVB4JbmAo|5(dcFf22jM{OFo=dn-@uFs|M=@Yao&X@;p8 zrG>F3hi~#n>{*)tvdo|TIJ3$+*rv|-37iFlv8TnK&*3IwQ=7^_SZ6f|*f!`!wr4 zJ<}Gig!h{SD1Qk-pSSv;R~MXnhr{!2zn(_zAZminEOik3d)N3u(NL%hSCangwF)x# z-c-^=d6;Yu-gAib_u-}nPpEgRYuHnZb*D14?lWJ{iLg8{E&BKw)}b6AO~_r8ax0ST z=361f?v|D7`kMDPO4(n-9S7nVg}6%vud0q5v*Phq>fKhjI7-}8vgP@(mW8iJ?b(B^ z&f(!Sd)6!DRQeW6qQ1A(Xa=|8Sa&mXu+WC*F%v(Q8JLh{dlG99yy{<gl(O!`3RaRl4sZB`q^GR{kN)DI2#Gjm~Dnd|c?pK%F2S^51s!{by{1`ki z(5mlmwAgO<@-5}Bi1l3JE25M0`K0TX8O-N#TVzfBrMK>vin8j;52m#pu-m6|rc8m9rmR2{-@w!oVn==B+dAX29mGYi=wShYQRl9ctYZ5ImNo`ZUIV zS};I8xZ)-LoqExx&{1n+j^-RLbGLDO_~Sr%7Wt03r#vfMV#fCLs*+A`Qdm0bxGt_Z zm$&Kvyz)h^lx7xt`|GwXtiYB<5RH`5Yg>b5WfNnJn1K*c<-p0H5CI2XA%+pAF+p4gJpk!9fSzOZCoTo@jBRj}8#RWZ(gnR4NC-egB6 z?Q8g~Tt}ASWUQd&N5yl)A70-2Xf^PPpin=_ukCV!;dQhh#27`%>NTqr31L4dX^k%m z^T}F&nG?hyxKKN?jAq>MxJ?Q-&C0!Y-)_GWUe4C_N zupJA-2H)2` zn388k(^o%B+%6-yi5*Ayor9I+>cHx*&_d3f_dSGt=%z$9~Lj3 ziJ=UrJ)Xe8L}5Co>U;~6cFXW`sTf32)AKon%cz4FS-|OlD-f=!3qR0)9H%YT?t)*t zEqDF0kQg?{HS>zVEn8JrHZhsilb_w&mZ1U3{=tx!tz4>NxlShLlaa4RKTb6HMysw1Bx7?2NULOs?i_CMhQL%uUYQ{H9^7 z%}UYN^>dO1tAb|8^nX@=&`1xh=+2| z{pHZ?&eH>aKTZHVj!PAvqeTJfVFr)m{`G`3twDWt{oK9wM-i|T;1hvDEZ~0!O(K@W zPS*^)Fib2A6Hb3I;F{ck@9)#Sx=N2^5igV)@j{{c|9$QOcx9^^mRf|FR96mnWo`8a zbyu4NqGCtHPH=D;9IL;7pO&TgSUwKk&V_Y63Vkg4>%vfuk)ZAzY~Fim#1P!wD;0-J zfWQ9t>ew$|1&;IndwHq~U}GmCSilEtOtFo$bR9T9jYbQBoI+?U9R{|xPh(I?4SfwK zTL%-cRZuYa-D!2_5^eTa4;!J?Es2N6Aitj=0XD$_{CDtsP!ot3wk6Ss*u*|p_}^B4 z%Uz=AdBp<=13R1<;lk2kB&Y}%woj{2{l6+Nia~a8S_A-GA|C+k)2@V#xwWB_xvdQ? z@W2f4($N4HzrEefjM!5X1^C3DL^4ht2c)B+K_J|SEyI2sqGbsqTW2TQUofbXn-d5F z-2ydZoZ%qrvm(H@BwR5Lw$m@ft{&tL-suWZk0wSo8Y|#=9l%!<0g(=CISK-*e<*1? z++5(<82!{UYe7KwCjwt41TGxri1qg#0_8!0hc)b&t`K-Y24X*f?Z+lRl0*YEfluY& zL}))9W{7mXEVqN00qB(5PJy@>jeJM-<%C>U(n&7=N#;)F~HoAsFX(*bRaFjjGDmTPW({@7X;$30fDe1m=6w1U_XK&S`8-?J4aB~8Zclhx%rX$ z2?RB`p$~}w&Hx5BK?G1bEZ^vVlXWn&2JrL&LR?yVatI_(5&}7oz=Xq$jgKG>s%rR4 zTHl@l1!AHmzj0OpvcLf)fPhJdiFy8S(heemL0r0(@Uzgr#ypEebn-fwxHD>ZVQU5<-&b+><2g9^whi2<|> zdNE?pq{E#24rwr`{+~fRjwPeYjTA!>OB^_C{LW!y{0h>blBhCuq)-C_5^cl-?@i(_zAQkErB87H85n{!8{;=>?z=-Y|tg*brE7*sI=y#q4zZuWDr1mqo7- zA_)Q^#LHa2P?4*T{xj!in}p0hWibYERbYVYA-7g1cBh9qCkWYNa?VCfOOD<>HgDE8fJ%q zHu{kgG%?jK5urmM-+_7uxyT9`JcK-HTN@{+orCSJ1BS9fk#vEG^0A8k-3PfL7g^|E zj;8BxG!Y;Y;r}>J7vT$m6vmBC3?c8aV z3>_^I)3yu9Z3LjOA2 zj)J}OaztO=lDM9Ju!Sz|m9k&v2Bjbtq8AXPq{E7ig7}ra|EOvwar?&KBjBjbF`Adn!Exiz?P0s={UH7D>i_Y zOdMd^a}L3JaM-|`!^_!u9O}-5?&cn!11Zave73u@9)1K$I!wI(f0A?%5R7h9WaOE` zzz70okcf^46sQ9S19!}}8|Zc;=UY#VVd5Fp&;%b+V1)oSOYgHzCSRKA{uK; zf_3;{WBpgrevuSZ^pUpj!EO;JhG49880<)l-B5ZcarEX9NFfNhpcDFhh+Z=M4cc8@ z0?oJ}vunnkKm?M|(?gS7fvGAFP+uVzbg=;GpmB?AMqp-iI4F;4AOX*u?3qMP2xQrQ zucri#9YWqO5Ut_v((P`_m3&!=RNH|x#K{G6FUF9f9!cV%z&m4&YfmpC*A(hxsQXnb z$R_3_%pDi`vL_tVAZUY2lmL)@3R)##--lMt=BDjg_FbRv-4lyT zBVLlmt}s0|QiMR1fn0)EU%+9<1pd~ps)MbmgQ2yxxs55UlbH#SRg9rLP`+K<2OKe$ zgElJ=>%T3Do;wHIYLA}%A~C3E9y$P{2J%Wb5URux?34~WclXc$sQ#g)?F2|!y-))A z*$_%Y!1HbabmUN6AMiIzYAPuLYq&R{0M^*#hO@)(B?H&*wMcOaBw^gZNCMUd{_%6< zP#hh21dWG>f)04$9LwWh`(-xskdqLIC3Nq?l-gh0-KjPH1?^sZg$(&)W7wH;lJ(w zo~ljNB2U#o!a}xtAm+brjJ)y{n09EB0p-L2upQ^B4@TauLJZPy7)r)r<^22j@12PN z$vG~hfeAvyJv{WD0lQzR><|cYA87-SgYqka6Z}^62i}gT?|VccuI$5MUR8e+h2R2U z&N1902W);l`J1ypGX&Bkj~vm`VQoP3hnDjfk}2Q{?oIN8lnf9EI43wq@zM56 z*9Z=vZfbMI*1-~rSdqhi?d$A}P>|uQWg@r@P@(}cAKZ`rGe7y<@Z=dlJAIgxn36a6PfF(KMW#ZJdC004Ea% z#3X>TXW4EM*roEm-@*az7?}at88K(VVfBY9YK57@DPK}mc$jJ zgH47A`gb33zr+A43onunQv{TO`)|?+R!fH!91XIY91z)m6uIMudvDS}^b0ub_Q}Ka z+V6WOz^Uhcw`n{ih)Cbvk3&urb|gnKBcSltjT-yGqJXvV)H$381vOxo97s)w_k;j@ za-@fmgJ3PJ-Z4Z=&gp;c@h8u%0u25cC`F|$onHxGMX9xDW#0b6KY_w4_Ki` zjPh_8#QLb>9Fg|!J`WO#^Gezkd){x#6&G0KCs^ z5WzpdNQv+#Qjwv~w2CAWWchv^M(BHBL9Hhk$7v5MC9p|U;Ys# zazc4`)6R!I0zp#QQjmENkl9GxkyArDYy==3lt&TF2wD{i+->3&OhPPn;jqC&wY`&3{{jAI>;G8l!MCv>CsV_XgDtj?sQr>DD2hu~BhU$mSL(p> zfdo=WE9A_@Hq*unQIzOdeF))QwSkX0a@AdlO_bq(8 zgU>S)x%)s2pVErhLtWs;o|k)Xw9^AH2gR&CJf!#j{fWp9+}elu)vqBx|?4Zd#;Q6I=cJW_&OFth-y|J64S#DcjF@qh?&MnxsU zI1u~a(6p)k*b=0JVHB&0$G-;12$Dr$ma$a$1oFVi&hilUfg|1%AZL|LKsaDBL45QMRt zE3dit;>wn_eTK2tBgk-qJHRMvDKkwU_x7h?f7Ky(DteQm#B+sFJXSNPI!$_s>(2P?P@vq_|j& z&;M8I@HjnAUb;dgok&YTk2yH~S+zeG(PbNJZV70QKi<*(+wF;iZxgAfp&u{d6oHzK z=>2o_bVGdaKwI!#qC3X(G(JJ(n!w+)Boyby09%l5)t{WBZ`%`3{!R!&NHqj_PGgu% zn{4QP9z89_lRGT33JJnF=ou%;D5$EuvBuxy(YrdjJGRq-VTjJ3BZtXGoIOV}-sDHe z=oONrG0IMm!yuZV8oWVwE;GFrNxW>=BPh{`?%DM#yg?%?cl~mVUMFYqzmjNB`B@TE zPiJlX{y1^Yi0v4iDH}`Meft=p(Ag=l83PJ8dNUia`b=OV*%s?o1Fl*1`gI zTt^g|1Hn7Ld76r8Nw@pK-LDRL4>aCFVh77$W-05rn}s#E|r zdK5F(2%uS=v49DM6aWJviIC`oL`$`2mAi9!*O1qUC#pAZ*P(iTK0gW|dSHAU!#a^a zO&_D*-bP*JGbCuj84?vTPSYo7&D$gu=kq4;2va!>Og=w$8a8_f9W%C;jN^DOQ27|i zUdbSB1hpMQ6_2B^5{0si!gmNh4O_!dQsNZ4qw>CFY5BpT!SFu$;Nh=qo*;RtMx=Z~ zP8ljmvMom-ffbrGdWtTl%KOE>fuK7Wtaj+3pl%X1fG6-FNnbSuuHUas%Hq$G1nU4k zBmUgN4?B+8c%%7f7CIa<$*Jq43Gyk1*pNpdOU>Y9~s$Rm}GZmCMv>gdEf- z{;P2jQM=hFe22q;*HH_6+ z$J*kog%3>OMb;q5!i0RWYZR`(yRlKdWK3AIEUTGj7evoTC!Qd=f$M^CRwhKptX)K> z+b1+<)k{RT@7XaS$nTl7G{Hc}(g3>2_>?@dL#PmB{o;M25%yBwtfONB8YOl)J{&(o z7-{iCNI#dC$Cl-D#rQiuKR@a^mzO4r^J6e1@=cJa65;~JuoGb-pFaZ|`V@1}#S16a zIf%d~U>IM752xu*vsGnD@(xUBx@Ub0$~Z1;m=m z&o#SVdT(Nvc=5zz-04g1Z*qNg)wSi{?WljE?A6{8xbl6hE7)Q6M=!HvUrP-vPXfnMLuFuk?qatb2LmJKB@1U=qAr8<8)aqv> zRuY&5Q$0hMNXkx=uF3hRQ~q~@mZ@&47Rxj$8Iw(YCeQ53q2t$Y@&2}KsQHlhK68RD zx!qAk^jBJ~pe*;BRFzW9h)|uS(uiy{oS_fMyEGnM*XY}uOsC?$`zNTp*mPb>^wn&I zph}mTRF?WpA)$eBAoP$Ne&dW zv5pcg9&HePNj+tATt(s-k_ZkeH82eYR#fbZlYR@ni~pt4~loW>+YIx ziT+gv52`4RktpyeIsOtHu2FC-qq@^H2o4cFGls!L^sOZEGgKY0fCW26?s-Htrasyh zKnz+R zEuJ8MF{TqCM^p?o-!`c=1fLqR@Y<%dyCL4u-?8JcJ9-=A7Xcs8&`v~|`M|fDRNLP8 z6RF3>rx~B@=iDLM!1#5*-w4^#3q)4|UuRPBc;Axo#2KWM8eXItCahOKOGVnItwo_N z(AJk7Y~f~56UMG%f>dcgxU-0BCaHp98TTYNS={JRg+v4k%%AdRGzU|!I=_>s+#pIq z$vl&?i_RclsC%~le)VsLa^LM4uDb;R6ntKrFR&QF%tJ2HP}hKga7t8i6g>`$FQTeN zvFkkPcC6j|7H@>v*+=WF#HkL{Kg9c<}NL2&3JsTW#gbc~$D>#tw~n5BjJKeNF8 zbf`)@_DC=m?_+S0{5`a=C;*8)F!N`4s4>zFQ`nqeJ06Q?8B5ZBRH+2QRn$g7@VNjh z_;*aoCF*JB?kHe=Cf-AC_$=YK3FBAUtf0!{?=t(dN3|0z-DxOUM)bF^2o=opS;^uA zsjXn?JWHo|in8X#Psv|FRtBQ3BGRq{Zgq~7yKJ0F^&3`fU#Kjo?=4SVIn;ir`4j*) z508_#9Xv=GASws#5 z-U35$^}qthHOvqzvKcBTXby}*$eE=4!6f=9L3E{oL54vGI|)i>l+zAA@)reTW*AplVJ4hwzd$yiA)(AgGei zvntx9fsk!$%n(H{oNgX?+y&@i0C%<)Fdy{w{*s@>;nT1w5e_g{6Ci7vtBi2o_h~req7cz*r=S^?|o?WZp4uQhA+umXNFy zJ#z**0vKa)LDR*FxN}8NsceX7>|S6J#Q1#le=m)hHF>rdZB?p3^K0GDO;lT18pVCX|79>U-X&D36c6@^A` zCD%GE^AssvRQtwbxq~%Jx{peg-@Ut~?ZLt8i1k1Mo4@)df(x9Wy9D-puY;rtxHO4z zw?`SM2u2zjGRe&SVyqz=OrVu)4PcUPx1x&Y4m8#<+c|8Xg)(r}cY>?+ifbQ8WWxWt>yK_NEWAPS404vLioE1<774?zOMg`ra!SS%hA~w1~ zyuTV{98%FxgnKVTvJ7G0ge(sISK%{9OpdFSXXp*|`3W=tpSToj3)=#Kma*u>WGlc) zDPkeTlW-apMH-4yuz!V8B>QAj?3_UQMVg5DNkw`GZs8=k1uyCuzuIq_cNkrfVYbbYPpDE)LxLR^*FOdG$}RBw`oK{7`nHIG>rFCovvNolMG z<&1exJSC=6y6MlP(gsY&cng9k{RxN=a~o=4$HENC+$`0gXC+Etk|pz~t&n+^<)~)EQfv$jw}N8Kq?n*=Aj!Fbc`l$V zWy+vM(Pr|nw4Y4!s1^ko{U~f4L19W?ViKWPh_kRL&OkbC$b3|G!@5a`JOvS+zE{Ak z%~ED_-B9bJ!^nwAoPtm?Vgf=UI$4;~jzaaqLgnuLCWkr^v!r>9`vdh1U+?(>8RUu zsl@?H5KkV@)5LKbjOh~9GT>m+ahpRBM^M5pC!L33zdRpfm#`dkl^g-Nm|RID&eD@u zExCC6me<||F2)$JD#etse@Ws9c9OkWgbH~|758}0e(j*rvv+Q|UvH8tTFfKmJvSuo*-!?N+N8)6BuY<>Vw9P-d$0&J1Pr@o2yfUn)=SZjdA=$85vRysnC+fkqznEvXJX~E;2m{b|)5O;RP8so_7 zr)2OXx&8}Kv2GZ>I5Jq<`%=$aMQMM^d>`b&+zWc6o z8)&1|AOt>`lT}L_gOTzweNxzm!~q3WQ>N&v4%{_WEs$Y1;>a{vscY$YXS#s^uoZyc zZW;o;6IrQAAixBev(;+K6am)n%3{4n5X?qm4b@wAA6T}JdD?a{9;E_dwlJ%9aPvj` z%1JJ;*meV9f;Sq}d&2#MaA%L~6pvEBU||Xr;Q}?Y1tnUctDuniIUY!39#rqVs)46| z!KG>#o^8zJ`Pf=SYc@D!88eCk+%~H=b`gwOnF+yX`2xCV(S=YhXZM9D?d6c+h2>#E z0F#|T5;-B@1%V_KxZcUJ8*yY=v{CItk7^J~Y#k>^>Uheycmlie z-Yg%z;m8FYvKWpvEe4GCsAYJ=^F`8g4=u|rzH0G=wDFQUKqu>4ELxjNI8lOe zEw|))$Gk)P2RD{&7q%>3Tyt)*EOqy;pB9b4C~BPC**uk&8gFrTc5p*kuh0#aWfO}f zsVI<`sm4{eTe_%eOKn$Cf=VaVc)>G&i^aogT!F;-YOvGPla9t>a*8~bnps|E3AhR@ zk|gz4euq_6_)~>iec=$YU+UST>SnZ7OkkdxG7pR)_AiCcmx$RZ3}=3@w47y6Jm;s5 z5XNY7>;GJSamCL0h@D-|EewrNNlyg470zE>BTfneqTAqG%#56syHalEbi=aDXA1NdCmDiYF;fV{1VinC>{1 zm&|EZ4r7Zdl%o#dN*qH6O_Dw(K{in=nvE9}2e?==BV2sxn5_iiTr|U6GTlAEG+a<3 z+9f!-Ds(9@q4O~k1|FxP(}K>BQygmYUEiI+Y>uWG7Z4?1CcQ3>6)JOT7ZAmH>(dSM z3Y_YNMAe^eP_ZgzPUS)(#5P!Bq4RS@Z&OjId!5ZG&*X%&120}s1o^`GMKVx?ZK3IQ zV&MiD85fi>?t(IOHIm(#oan|2Oa4E=Ai)DmkRa^`w|O)Qr>uWo-j1{q7u$1^Nsj2vw_D#_MZal^o2utBXC0#qu| z3;<9M#?oh2;X!7O7}jbxz!McWx%o zR<8G#Xfs6O44?N+igBUgylP5;5So*{nw3K)c5#Kq2~+;mpm{Yjq4q$WBA1D#hTF#` z3eCk5Ny5f4uMcg0lE(9*D?k1jxw$*ACIb(|S_m``SE7^g+`sK49X%Sop zr=B?0w3?5Zh`RvV*Z=V4thFkR{2`irkmZZqN;o)BvVaJ}UgPRfZ*KgO1r_^yP2v+V$kW{O;s=WJoHIuY7;) z+8?dHq)H(sAv$}P5#0w<{sMFl;tBL;Js1$9xg&1_jvkv%h0xCbz+N;7@4NVKMA3MVIpoKLmpW?RJ<@LH2IE$=Z3&6(!q zm7G0zGh;sQ?(&#gZJ!2DcJp~9|62^wx>|IzfVAR5fgq`qq|a5`C6xwJO&z_7&sXFO zx#X>SA50rt)@*q*E6>CdEeqo47jxRgg3VsYIW6{rhC!@U5=gBx(p;enbWWP)c|8LR z_DfBTB6uG9!nKCBRWvtfj+rxv4p2_?w(Sk zGx;Z1JQjTu=*^|Kf-ae8i7-07R+{E730eFF`s5;O2A$Dr=1b5RZI zCr-+rT-5QF|5Vx3!Vjkf)2qVsmWU*NbVAsDEXP5PSC1b(G5HBwh9V^lY_ZOOScN7R zo`)30`XTK4o(B}MYr;F$GbI+vz7Y5E6XH{aitwy%F`oyNM7>*K%`=d^(|vve{!`*~ zT|UqFr_(+@Ax?Z@m$A_QbK?2!_|vQNr}Lq2&K4@}pjK*);t1K{HD!bEUfUgMZ->b^ zaW_J^DT7O}@LUkN)6eeCS$0xN;eDak?`qyC)j!j7a40u?U4eO$d~5ZlsA&4l0li<3 zr=kgqT{yej+T<&x)x!-@F>!OpfZlfuWXyUPLz<*U1yI#YazGzoW>8^5Q`GRmTlcr; zZti$|Z_klcsjJW9g|$`K7DriYD^s9l*dyZ&E-q&!cDZfn(;ucO*!kzPXx3;$6{09k z8;L5B9EqQt5Ko?%B7_jS@gIa~d@0qw{y)kuT{QTkqj&ZU$A+5B^Vy0i7WMasAFZg& z+*RdX>C156PH8Kq+n8GMPGu&!^gvAgn1^MC(o$*wJ-NdTx)zN2Oh}*RhVK2D-VSY_ zZ(Fi#@JjDSRC~H<$o~1D8wuVF78K&tm!$u+d+Zaa9Qa?y0jrKK5faM@2Ogx1T7?4N zu9375Y13sT^p&#RTNf{AsrljdR|554Ie0}Dd+Ly&lJ23HyCND{P^HUN!Qe_{eRjFK z?f3Nyqpf&L%xgc7-sY(e`%V=@O_Ak|Lq55v|OSOO8xN*bLyIa~H z?w0-q8;wp?EK#ETkh`@F>8;8u8n(50X7AqRZ9QI8lo^uWH zvR_2+_io&HMN>yr;v4_)$n}3rjP#W4D>^EFO@9_kQkI9riMeHPYZ|wIid#BR5x>sI zjh6?^cr3CmfRhMEP|hU%4=);{OK9_=C1o3CA57r7PiTEd-EeTTzoWaULn=F9Ywujx z^nwchkL3Y66N`jWX86guLHU8C|Iv4uUw=d&=yK>O+{C#|HwWB7J<}e~n8|^l%^wNI zRo0IZx+fMf8dKrED(IK}598Pt{C)aB@g#po|AFAbO#2O=bR??^{M8GiDew9Rd>f^? z;Eyg(CBi*(7mC|lng0D_xPQR>ip}rG*+DR<``a5QlEOd`=XeH&5Qo^8(50Hb-RaQR z;p&fH?|6K0VQFdms-}*PvVEwfVB$F+c61r(2p-lrh3lJq*GCWp$S_~GrhmW$r~NT! z6~b#wNizf{Nw7h-KIK^q%!=LJ_w{BE-Zc25jZ$6Bl9mGPz~dGUI`<8!w5f*$86rg$>zH_&M{vl+!*Xc z#bFskiOultlPqK(el zSMSHABCCuH|n!=B*!4T5&5?)>qMvt!3#-r7Kk#?o5U|+bh?b zpP|0hZja|WcSS^ppH~G#HAoQLQP$m{$|?VV8}*cAJtCYd@g7mS)OlbwTH7nbpMrNm zas5wUa4(GL+vML>1#2~=9yV_XZ9O{IiMCq26D6~K(5$j%1DY-73MCR#-NA^SO75r% zx+^TjqukJlbh@PELWYazE6ycdDaXQy{{d;cexSMU$f~VHby#SCW54L0!NHA#3Zx_g zHq@o3BcdBMINaHy&TAb_*0ruH52NXvSso_AFi+BJ*ctpZFWm4Hj{UNqVYnsn!}^b2 zw%&Aw8(t>tJ}Uwew^4F*8OD7*xz}bC$sZcV{Z+5x24kouw77R)QR0>|Sw~0=?2BNz z-)0z@rP0QEaraxkDk`g22AbL*V+a{vW1|yUsNKSASL>2~XAM9ob zW^2X5S%;3i;zG2O4Zz&z$R*&)c%1m&G8F{Qp~X)uUfio~*EYHqx9lDoNnFzVY)dC& zFK>w70M7?Df%y&Q;#3m22C*RrsjVqC&uB?B7MbJF((Y)i!Iw^XqKhICX049J8!c9c z0dB&jatBz$T?ivW7?&UB(5)q*+ah!3TCAaTdejqrH@cr$2W!)-qO27h&J?Si&1zS? zAuSqgUh%}Ey*xdHN}>%B4>l~J*odc1PgIFT_$uUCx+qNPSqnAo5{$;ijMFTk;TUgr7h}J?bp+kB z_#Ym9aC>&|!Me~*x$iHzyQ%U}^NAXC4|pW8>7^e|td+6r9e{bwAx{h!F}127(t}hm zBxf>My6^}9J4&=qRYTOGb zc0*$&xZeq}eu#C;nND626`;$1{ZxM9b-^5AN3f*s-L4%wQ0K2qEo@G1Q{v4*KKN&; zH|BAp5u4o}t^oR$uV-m!IbYQ@Ko1pRYkM!5m#`?%VP*W3q;)CZI7hRz8|UEhhjGy; zaRY#xhq(7U%P{);$ldSMD%eeP7;3BnW|@h-Fw`Dd!zRrL;WFENo;-F!iLpLQVhTHB ztVFPk$c-nUN@!LB6Rl|QPAgyBrtd*ByZcUK1al49Ah(9u$^tp$O+yLmZg9b8FQS_U z>)U$g4!W)w+DM)&LKTBQYI3#o!e``_zLW(mxU3ZnE}~#XtRe0WDp-G+ax7F4tjx4W zBADRh*u2qkY*3<-_zyp&?~P#E3NBo^C+@!7*)Z>u0{-sy=za^YqJLcqeCtbn+--ug z-eL$MVR2UrF*P}RBy7wdU zYLsZxH1j8Y?1>|U?or+#&l-nG1+TNpYEaha5k)wd2?raY*U0NP*7#){#H@u!nIF)b zq?Vav_9Z$M#cg|&@d10O=Oiu`d2=R7SzP-S{M3LO{sb z6YCrGpKk8Ed(mL+i@%k8>r3wrymJ$7m${X#a~#2y2cjw@iA_fe{>El?F&>}LGW{Rw zTJlkZ@V#a_-7nv%1d)4y%QH6^yEnvKvl=oubYjn=gz^EiJqfn1OSR;V>f7RXccjxl zmwN}9EdaKvU@QV~IpA*FA;#x?g~kS~O2u#_^c;Ej9? z^^1pp=~WWK2MA3Les;>k&l&LjNWN*BJxf^lgo>K^j-IJ#Xg-p5IRNq`3`eJ4k#78R zc4E=+a720){`QPU?)9SP;~smBW^0N4$l9;-syBKQ9KKPc8sCFYHX?yD6QrFWCt+JC zOtUz~d8lJ@TuA4l_?MxWR zuh3^2x)j$nW*J@+9>fQ?30OG@*#aRkc~JXqLjAz%$EovJt6zm1ap>y&6o;;LJY=uZ zY{P^b^EoU0+0;&wL_g-yQw>Z<#C<9%g2cfK8x-&q7tcc&0reyaR5A`62HN_MMU4P7 zaI+gG&s`x?Q%)iVl?={)WnWFpKWv%1q20@^XiMymjU8<8D{9>)quqy3J5<<%>WzO`g4~ z3C>D^taeldjhH9yc1NO010IQoOdl2?%g^N%K6Vuo=vAwh3mp18H7)mC>u{~?+#lL9 z%dGth*K)RH=zQL)AQLi962b^(Xlu2m;G-urdAdqJ7-1rxAbYWIz{FWMP9CHx3B)X9 zuSO<;sRt*Yl<>eAkn~|nbG3O%(@>E-LlQ?4n1=v?XBm?a8E-Ug9Q66dx-6z60cW8J zbpOtMi|@O#qV&t#_hyGTfBDtN_QB{hZ1H3&aC%{kATLDIA=Xz*BdtgRyT!jd0&Ul~Ao$ z=mP@%8R_k@0XP`$BYk|Yeu*IrB?k(rawEW5`HXvXhCCQgrOCH`ukI6wVB$X>B&sL2B?*%1L|aG zsSs^nP=7_lp&h<5e6((rS)I5gfQD?VVyT6c9+Nt6ogF_pgNDGaFn-|qbA3Hp_xg`r7t64{9xDz85Z-{6~=FpRm zR$#OmBI&eSi$+3-g`C{+bJom(XSB5Dx=tP{JgW7W%~A2r!uFL z92{?=cBd_&JKQ>+`%zLX)L0SJHHK8%5GO-QC2b#urLD93MyD36sXJJzmDKeg9*jn_ z?;-^}$r}mq9_)2$f0%q{soX_$hBXm&^?IRsDQBA%6osJKn4 z*Z=xKSs0p|zU-#@lmTlcBo0~b_BvcE(dbeWNuwaQy^TQ=fq;{1T) z-~zG%UxA0&I9Z5i`hhbU#y~-`O>Bp$(Xx%%Vk9E>2-?jc={hjCrpq~V~ z2k5umG+?2Z>dymxlw?gqr@&UR>kC|8WjvDgRSWoPmG6WGmpoDi_q z%Xo^_E%QU%SjM_)p5;Q#E<|r~p^|zQ3vB0?vrD>*HkMmYWtUccue3aO1o7(wtmoZT znlG;U`}rB{icbc*QacW#qdx$X0?G~En=Q&=|A4ZsCkrObeWeytqnNQs=vM`&4j^H^ zgsQ5nXI1&lz5EFE?$Wug(#Q8cM3Mt_;oqY5TOI-B$1)tBQyciGnB{j^ z)S7TN;UucV>w*$H_mR-myi~WSFH;4T3>|(Jd+Ld!+TDR%cKAm%i|_0iIantgN*oQ; zU;cM3+1D9VCEzi9e=2jId?&%RB2i}*W-dynGW}JRB{9PS>AS13pU$A(?BUA+lK-+Q zSVQU22cE3bD<(k|0A*5{dt_{1R5J+cFg)vJX0)p6P>d&YW5iOqdp~y6Q`_HM|Y|p@^f;;JP2OsTTpBs&f7~!Ha_FL ziy`>p44}lHmmdrdHXkbZ>o{6+OQ8M=_x(sTidMCMmpj*+%MSi%a|;&12fY_zF8YW{ zFe>~7JGTb4c)@p>6BpQ`@#~O!$niDzbB{Z?^P~K1qAmt9nSOAh9m4W~;Ocjo({ki- ztXlOaOQPR+0jUT$KjC4JvxnUiQDr|ki&RWTqqv8_U$hf-7x-43WrYZYKf}38wH&Wb z^1#RytT4t3eJUmT~`Fl!gcBG7w1@fxu^*l_DY;G{x65YF9+gqeI zZPW31K>%F@@5M9M7&r|hg1kmb;GB$I+A7Rq5G8!05Ukz&08h|jETj?si!W=k{;Cw< z0hdK=x$1cK`AH-bGW}GCRP0e{SY5hd?a0<_jP<Eh+`Se=)_Yt@U zR<^Z!X5AuHC9I^N>eZW4i??`>@+4GVIW%_=kp%OBAi>o%TIut}LaX)UfXR6P>0Nrt zgYQ(~`KRCC;10qCF?*8tU0@sLZMx0Ek~Q@+_R6^Lfh1<0e*d-Z%ULk07Qi%YvLkC0 zQ_~H`4oJt0h75o?@Vx>V855DNV9|?hM1_QYTl^JXd{M^^f5%+1a)9z^W%HHSdbjbE zRIXg>Sb#$+fsl)2c|FrG!sk#(m`KG!QlY;V)cMs`M{4x01P z2)zOrzFui|9qrmN#;YC?Il_b{FJrG@GV;d>RsMD(xrRn)Hc|m>gts13=`Sc`U@NT% zE|wBBGz~6+d<4>~-HKA7{p+%J#)nDNXvIY}2%r`oNkLeh!ecW^!41mYcoq-FwPJA7 z!sZoo8k?|r+S048QWvLJJpS}!yI)vU-XuMCuoiOyLcrr!;*Q?a`QJf2Bx89Sxz(Ra zrRlO*+>=&g@z%6ZrQMUpXz9TifBVR%-^T6AhWyKxipyhNk=1^+BTfF5FM1vVKD@Q9 zDhK?j4*mG8CZ2&82w#OHpV@QjDU23sRUJd@@~auJ#C#651T3jg72WCcB{97j25y`v z&#YLx_NA-;)@nxmU~FL|d`xXh8~$k8;VoLcrS+%ynv50R@+OylVli}}m)`$PKL6jd zi6zh>6GjkQw1UWAM}y-ow{i#Wl3l;+2YV3rEUJ^KUZ&y;)C5|N+d?1W+kE!e1Goac zyo^#Z!YP)m0tKr{{JzksG}z?Y013Yk@SSVC8ze;d3msIfoKvD~!dp!8@<-8>HGHX( zKxH*V{rGYpR19dvhkMr+(h8Y42IJrei_QxZ|2(#qx6nVvID~3iwlp7F(#=7xeD|S^ zMMqtM-MwYcXg}QU*!|eZ@N2+a7Kt>P5nr6cS%sGN;c#(4>#M5L?w23d1{^^P(;6L0 zM0_`J;40J7n{a^myIc=2nevCV{%7D!f`BJdHS!y=1~uYqr-a$zQ>Z`T> zs%oSIH!2DEXy7=bYg!KF!k$$eq3W{n7Mu$PvX7PNxtq&ZYXf_Sfi82KoPr-mNU_cX z`3{hVZ!wed#bfp@i1#cKoJd0WLaV1);5AdqUbSmj_#;@MNyB9dt~NeBK~78)i}r13 z&f=ZkUmFZYtandV951}54%@j!fAq zb{<07=F?~^)=MbIno0bKUPjr)o45a=_CZhg=6ZZDQ=!bK>kq}Ep7zYZvHnS%@6x52 z+uV+#%)m8$Q)OCTx*_WDWd?Me%l=5Sk1PzVu1(%qw7IG@5Y<1T7f3X$Z!1CV4qDNL K6R!XG=YIj6{RZj) literal 0 HcmV?d00001 diff --git a/Duane Blehm's Code/Animation Æ’/Animation.Pas b/Duane Blehm's Code/Animation Æ’/Animation.Pas new file mode 100755 index 0000000..e695a01 --- /dev/null +++ b/Duane Blehm's Code/Animation Æ’/Animation.Pas @@ -0,0 +1,534 @@ +Program Anim; +{this is a simple animation program.. in CreatePictures we load several +pictures. These pictures can be created in any Paint or Drawing type +program.. then copied to Scrapbook DA. Using ResEdit, the resource editor, +these Pictures can be copied from the Scrapbook into 'PICT' type resources. +Note that in our Anim.R source file we have an INCLUDE Anim.rsrc... when +RMaker compiles the Anim.R file it 'includes' any resources in the file +Anim.rsrc. That's how our Paint pictures get into the SimpleAnimation +resources. + +Once we have them loaded into our various picHandles we then +CreateOffScreenBitMap so we have a place to DrawPicture() them. The +OffScreen bitmap is a section of memory just like the memory being +displayed on the screen... we just can't see it! at least not until we +CopyBits() some of it over to the visible screen Bitmap. We 'Draw' into +the OffScreen by setting our window^.portbits to our OffScreen bitmap.. +watch out for 'clipping' if your OffScreen is bigger than your window. +Now for the fun! We have everything we need for the CopyBits() ROM call. +We have two Rectangles... one (sRect) that frames the shape to be copied +from OffScreen, the other (dRect) frames the location in our window where +we want the shape to be drawn. If dRect is not same size as sRect then +CopyBits will scale the shape to fit. This program uses the srcCopy mode +to 'erase' any previous stuff in the dRect... by using a 3 pixel white +border on the left side of our wagon we can offset it by 3 pixels per +animation loop and still 'erase' the previous wagon just by drawing over it. +Internal Animation (wheels turning, horse running,etc.) is achieved by +alternately drawing 3 different shapes in sequence as the dRect moves across +the screen... this is easily done by having an array of offscreen sRect's +and an index to step thru the array...} + +{note: to move a given rectangle 'myRect' from its present location +(Current) to another location (Destination) the following can be used... + +OffsetRect(myRect,Destination.h - Current.h,Destination.v - Current.v); + +or... + +OffsetRect(myRect,DestRect.left - myRect.left,DestRect.top - myRect.top);} + +USES MacIntf; + +{$L Anim.rsrc}{link resources...just our menu stuff} + +CONST + lastMenu = 2; {Number of Menus} + appleMenu = 1; + fileMenu = 256; + + WagonOne = 128;{Three wagon shapes loaded from resource file} + WagonTwo = 129; + WagonThree = 130; + {Resource Picts pasted from Scrapbook into Resource file using ResEdit} + +VAR {global program stuff} + myDialog: DialogPtr; + myMenus: Array[1..lastMenu] of MenuHandle; + refNum,theMenu, + theItem: integer; + Finished: Boolean;{used to terminate the program} + ClockCursor: CursHandle; {handle to watch cursor} + myWindow: WindowPtr; + Screen,DragArea, + GrowArea: Rect; + + HomeTown: PicHandle;{handle for our Logo pic} + HomeRect: Rect;{destination rect for our Logo} + Wagon: Array[1..3] of PicHandle;{we got three wagon pics} + WagonRect: Rect;{size of one wagon, onScreen destination for Copybits} + OffWagonRect: Array[1..3] of Rect;{wagon shape rects in offScreen} + WagonNdx: integer;{which of 3 wagon shapes is to be drawn} + + {here's all the fly/regions stuff} + Fly: array[1..2] of PicHandle;{for loading 2 fly pictures} + FlyRect: Rect;{destination rect for drawing fly} + OffFly: array[1..2] of Rect;{source rects in offscreen} + FlyNdx: integer;{which offFly to draw} + Flower: PicHandle;{load picture from resource} + FlowerRect: Rect;{for locating the flower} + FlowerRgn: RgnHandle;{For 'clipping' fly and flower} + FlyLimits: Rect;{for fly border} + FlightRect: Rect;{For limiting fly flight} + CursorIsOn: Boolean; + MouseRect: Rect;{size of FlightRect, slides with mouse to smooth movement} + + OffScreen,OldBits: BitMap; {for drawing into offscreen} + SizeOfOff: Size; {Size offscreen bitmap} + OffRowBytes: Integer; + +{----------------------------------------------} +procedure CreatePictures; {get 3 Wagon PICT's from resource file} +var + i:integer; +Begin + HomeTown := GetPicture(131);{HomeTown logo} + HomeRect := HomeTown^^.picFrame;{size dest.Rest for drawing pic} + + {we'll draw logo into upper right corner of window so relocate} + OffSetRect(HomeRect,myWindow^.portRect.right - 20 - + HomeRect.right,20 - HomeRect.top); + + Wagon[1] := GetPicture(WagonOne); {load Wagon shapes from resources} + Wagon[2] := GetPicture(WagonTwo); + Wagon[3] := GetPicture(WagonThree); + WagonRect := Wagon[1]^^.picFrame; { i-159, size our WagonRect } + {Size Rects for OffScreen shapes...will locate them later} + For i := 1 to 3 do OffWagonRect[i] := WagonRect; + + {load flystuff to demonstrate regions} + Fly[1] := GetPicture(132); + Fly[2] := GetPicture(133); + {size the fly rectangles} + For i := 1 to 2 do OffFly[i] := Fly[i]^^.picFrame;{they're both same size} + FlyRect := OffFly[1]; + + Flower := GetPicture(134); + FlowerRect := Flower^^.picFrame; + + {load the region resource and coerce it to RgnHandle} + FlowerRgn := RgnHandle(GetResource('RGN ',128));{flower region... outline} + {note this region created with our 'Regions' utility} +end; + +procedure CreateOffScreenBitMap; {see CopyBits stuff,also tech.note 41} +const + OffLeft = 0; + OffTop = 0; + OffRight = 115; + OffBottom = 95; {size bitmap to contain three wagon Picts} +var + bRect: Rect; +Begin + {find size/rows/bounds of bitimage} + SetRect(bRect,Offleft,OffTop,OffRight,OffBottom); { drawing area } + with bRect do begin + OffRowBytes := (((right - left -1) div 16) +1) * 2;{has to be even!} + SizeOfOff := (bottom - top) * OffRowBytes; + OffSetRect(bRect,-left,-top); {local coordinates...0,0 = topleft } + end; { of with } + + with OffScreen do begin; { create new BitMap record } + {create new bitimage and make baseAddr point to it} + baseAddr := QDPtr(NewPtr(SizeOfOff)); + rowbytes := OffRowBytes;{number of bytes/row,can extend beyond bounds} + bounds := bRect;{limits of bitimage drawing?} + end; { of with OffScreen } +End; + +procedure DrawPicsIntoOffScreen; +var + i: integer; +Begin + OldBits := myWindow^.portBits; {preserve old myWindow BitMap} + SetPortBits(OffScreen); {our new myWindow BitMap } + + {note: If offscreen bitmap is bigger than myWindow bitmap watchout for + clipping caused by ClipRgn and VisRgn fields of grafport record, you + can set cliprgn with ClipRect procedure and use CopyRgn procedure + to store old visrgn in temporary rgn... etc.} + + FillRect(myWindow^.PortRect,white); {erase our new BitMap to white} + + {locate wagon shape Rectangles in OffScreen Bitmap} + OffSetRect(OffWagonRect[1],-OffWagonRect[1].left, + -OffWagonRect[1].top);{topleft corner..0,0} + OffSetRect(OffWagonRect[2],-OffWagonRect[2].left, + OffWagonRect[1].bottom - OffWagonRect[2].top);{below 1} + OffSetRect(OffWagonRect[3],-OffWagonRect[3].left, + OffWagonRect[2].bottom - OffWagonRect[3].top);{below 2} + + {draw the wagons into the offscreen bitmap} + For i := 1 to 3 do DrawPicture(Wagon[i],OffWagonRect[i]); + + {locate the flys in the offscreen bitmap} + OffSetRect(OffFly[1],OffWagonRect[1].right - OffFly[1].left, + -OffFly[1].top); {right of wagons, at top} + OffSetRect(OffFly[2],OffWagonRect[1].right - OffFly[2].left, + OffFly[1].bottom-OffFly[2].top); {right of wagons, below fly[1]} + + {draw the flys into offscreen} + For i := 1 to 2 do DrawPicture(Fly[i],OffFly[i]); + + {could do a 'ReleaseResource' here if you're done with the Pictures} + + SetPortBits(OldBits); {restore old bitmap} +end; + +procedure DrawWindowContents(WhichWindow:WindowPtr);{response to Update event} +var + trect:Rect; + i:integer; +Begin + DrawPicture(HomeTown,HomeRect);{draw our logo} + + {draw groundline under wagon} + MoveTo(myWindow^.portRect.left,WagonRect.bottom); + LineTo(myWindow^.portRect.right,WagonRect.bottom); + + {copy offScreen Wagons & flys into Window..upperleft corner,as in bitmap} + CopyBits(OffScreen,myWindow^.portBits,OffScreen.bounds, + OffScreen.bounds,srcCopy,nil); + + {draw current wagon Shape being animated into WagonRect} + CopyBits(OffScreen,myWindow^.portBits,OffWagonRect[WagonNdx], + WagonRect,srcCopy,nil); + + {all the fly stuff} + DrawPicture(Flower,FlowerRect); + CopyBits(OffScreen,myWindow^.portBits,OffFly[FlyNdx], + FlyRect,srcCopy,FlowerRgn); + FrameRoundRect(FlyLimits,48,32);{border around the fly area} +End; + +Procedure InitialAnimation;{locate everything to begin animation} +var + tRgn:RgnHandle; +Begin + {locate first WagonRect,left side of window on groundline (250)} + OffSetRect(WagonRect,-WagonRect.left,250-WagonRect.bottom); + WagonNdx := 1;{set to first Wagon shape} + + {locate the flower} + OffSetRect(FlowerRect,160-FlowerRect.left,90-FlowerRect.top); + + {locate the FlowerRgn in sync with Flower} + OffSetRgn(FlowerRgn,FlowerRect.left-FlowerRgn^^.rgnBBox.left, + FlowerRect.top-FlowerRgn^^.rgnBBox.top); + + {size the FlyLimits} + FlyLimits := FlowerRect; + InsetRect(FlyLimits,-18,0);{expand left/right for border} + FlyLimits.top := FlyLimits.top - 18;{also top.. leave bottom for stem} + + {create the region to exclude drawing in the flower} + tRgn := NewRgn; + OpenRgn; + FrameRoundRect(FlyLimits,48,32); + CloseRgn(tRgn);{region of limits rectangle} + + DiffRgn(tRgn,FlowerRgn,FlowerRgn);{take out flower,put result in FlowerRgn} + + {expand limits by 1 so we can have a frame border} + InSetRect(FlyLimits,-1,-1); + + FlightRect := FlyLimits;{FlightRect will compensate for using fly.topleft} + InSetRect(FlightRect,-20,-20);{expand it so fly will be outside border} + OffSetRect(FlightRect,-20,-20);{compensate for using flyRect.topleft} + MouseRect := FlightRect;{MouseRect moves with cursor,& map into FlightRect} + + {locate fly in upperleft of FlightRect} + OffSetRect(FlyRect,FlightRect.left-FlyRect.left, + FlightRect.top-FlyRect.top); + FlyNdx := 1;{set to first Fly shape} +end; + +procedure AnimateWagon; +var tPoint:Point; + tRect:Rect; +Begin + {locate next WagonRect for wagon shape} + If WagonRect.left > myWindow^.portRect.right then + OffSetRect(WagonRect,-WagonRect.right,0) {back to left side} + else OffSetRect(WagonRect,1,0); {move one pixel to right} + + {draw Current WagonNdx shape into WagonRect} + CopyBits(OffScreen,myWindow^.portBits,OffWagonRect[WagonNdx], + WagonRect,srcCopy,nil); + + {next wagon shape to be drawn} + If WagonNdx < 3 then inc(WagonNdx) {next shape} + else WagonNdx := 1; {back to first shape} + + {now animate the fly} + GetMouse(tPoint);{get current mouse coordinates} + + {hide cursor if its over the fly area} + If PtInRect(tPoint,FlyLimits) then begin + If CursorIsOn then begin {hide cursor if its on} + HideCursor; + CursorIsOn := False; + end; + end + else If not(CursorIsOn) then begin {show cursor if its off} + ShowCursor; + CursorIsOn := True; + end; + + {limit fly image (FlyRect) to FlightRect extremes..} + {to keep fly from wondering off visible area} + {mouseRect moves with the cursor and tPoint is mapped into FlightRect} + + If not(PtInRect(tPoint,MouseRect)) then begin + {a coordinate is outside mouseRect so slide mouseRect to tPoint} + If tPoint.h < MouseRect.left then begin {slide MouseRect to left} + MouseRect.right := MouseRect.right - + (MouseRect.left - tPoint.h); + MouseRect.left := tPoint.h; + end + else If tPoint.h > MouseRect.right then begin + MouseRect.left := MouseRect.left + tPoint.h - MouseRect.right; + MouseRect.right := tPoint.h; + end; + If tPoint.v < MouseRect.top then begin + MouseRect.bottom := MouseRect.bottom - + (MouseRect.top - tPoint.v); + MouseRect.top := tPoint.v; + end + else If tPoint.v > MouseRect.bottom then begin + MouseRect.top := MouseRect.top + tPoint.v - MouseRect.bottom; + MouseRect.bottom := tPoint.v; + end; + end;{if not(ptinRect)} + + {tPoint is to Mouse as FlyRect.topleft is to FlightRect} + MapPt(tPoint,MouseRect,FlightRect); + + {determine horizontal offset if needed} + If tPoint.h > FlyRect.left + 2 then begin + FlyRect.left := FlyRect.left + 3;{offsetRect to right} + FlyRect.right := FlyRect.right + 3; + end + else if tPoint.h < FlyRect.left - 2 then begin + FlyRect.left := FlyRect.left - 3;{offsetRect to left} + FlyRect.right := FlyRect.right - 3; + end; + {vertical offset?} + If tPoint.v > FlyRect.top + 2 then begin + FlyRect.top := FlyRect.top + 3; + FlyRect.bottom := FlyRect.bottom + 3; + end + else if tPoint.v < FlyRect.top - 2 then begin + FlyRect.top := FlyRect.top - 3; + FlyRect.bottom := FlyRect.bottom - 3; + end; + + CopyBits(OffScreen,myWindow^.portBits,OffFly[FlyNdx], + FlyRect,srcCopy,FlowerRgn); + + If FlyNdx = 1 then inc(FlyNdx) {next shape, there are 2} + else FlyNdx := 1; {back to first shape} +end; + + +PROCEDURE InitThings; +Begin + InitGraf(@thePort); {create a grafport for the screen} + + MoreMasters; {extra pointer blocks at the bottom of the heap} + MoreMasters; {this is 5 X 64 master pointers} + MoreMasters; + MoreMasters; + MoreMasters; + + {get the cursors we use and lock them down - no clutter} + ClockCursor := GetCursor(watchCursor); + HLock(Handle(ClockCursor)); + + {show the watch while we wait for inits & setups to finish} + SetCursor(ClockCursor^^); + + {init everything in case the app is the Startup App} + InitFonts; {startup the fonts manager} + InitWindows; {startup the window manager} + InitMenus; {startup the menu manager} + TEInit; {startup the text edit manager} + InitDialogs(Nil); {startup the dialog manager} + + Finished := False; {set program terminator to false} + FlushEvents(everyEvent,0); {clear events from previous program} + { set up screen size stuff } + Screen := ScreenBits.Bounds; { Get screen dimensions from thePort } + with Screen do { Screen.Left, etc. } + Begin + SetRect(DragArea,Left+4,Top+24,Right-4,Bottom-4); + SetRect(GrowArea,Left,Top+24,Right,Bottom); + End; +End; + +procedure CreateWindow; +var + Wrect: Rect; + TypeWind: Integer; + Visible: Boolean; + GoAway: Boolean; + RefVal: Longint; +Begin + SetRect(Wrect,10,40,500,300); + TypeWind := 0; + Visible := True; + GoAway := True; + + myWindow := NewWindow(Nil,Wrect,'Simple Animation',Visible, + TypeWind,Nil,GoAway,RefVal); + SetPort(myWindow); + ClipRect(myWindow^.portRect);{set clipping area as per Inside Mac} +End; + +procedure DoMenuCommand(mResult:LongInt); +var + name: Str255; + tPort: GrafPtr; +Begin + theMenu := HiWord(mResult); + theItem := LoWord(mResult); + Case theMenu of + appleMenu: + Begin + GetItem(myMenus[1],theItem,name); + refNum := OpenDeskAcc(name); + End; + fileMenu: + Case theItem of + 1:{display offScreen bitmap in dialog} + Begin + myDialog := GetNewDialog(128,nil,myWindow);{from resource} + GetPort(tPort); + ShowWindow(myDialog);{invisible in resource} + SelectWindow(myDialog); + SetPort(myDialog); {so we can draw into our window} + + CopyBits(OffScreen,myDialog^.portBits,OffScreen.bounds, + OffScreen.bounds,srcOr,Nil);{the whole thing} + FrameRect(OffScreen.bounds);{frame it } + MoveTo(OffScreen.bounds.left + 10,OffScreen.bounds.bottom + 20); + DrawString('^ copy of OffScreen Bitmap'); + + ModalDialog(Nil,theItem);{we'll close no matter what hit} + + HideWindow(myDialog); + SelectWindow(myWindow);{restore our game window} + SetPort(tPort); + end;{1:} + 2:Finished := True; + end;{case theItem} + End; + HiliteMenu(0); +End; + +procedure TakeCareMouseDown(myEvent:EventRecord); +var + Location: integer; + WhichWindow: WindowPtr; + MouseLoc: Point; + WindowLoc: integer; +Begin + MouseLoc := myEvent.Where; {Global coordinates} + WindowLoc := FindWindow(MouseLoc,WhichWindow); {I-287} + case WindowLoc of + inMenuBar: + DoMenuCommand(MenuSelect(MouseLoc)); + inSysWindow: + SystemClick(myEvent,WhichWindow); {I-441} + inContent: + If WhichWindow <> FrontWindow then + SelectWindow (WhichWindow); + inGoAway: + If TrackGoAway(WhichWindow,MouseLoc) then + Finished := True;{end the game} + end; {case of} +end; { TakeCareMouseDown } + +procedure TakeCareActivates(myEvent:EventRecord); +var + WhichWindow: WindowPtr; +Begin + WhichWindow := WindowPtr(myEvent.message); + SetPort(WhichWindow); +End; + +procedure TakeCareUpdates(Event:EventRecord); +var + UpDateWindow,TempPort: WindowPtr; +Begin + UpDateWindow := WindowPtr(Event.message); + GetPort(TempPort); + SetPort(UpDateWindow); + BeginUpDate(UpDateWindow); + EraseRect(UpDateWindow^.portRect);{ or UpdateWindow^.VisRgn^^.rgnBBox } + DrawWindowContents(UpDateWindow); + EndUpDate(UpDateWindow); + SetPort(TempPort); +End; + +procedure MainEventLoop; +var + myEvent: EventRecord; +Begin + InitCursor; + CursorIsOn := True;{keep track of hide/show cursor} + Repeat + SystemTask; + If GetNextEvent(EveryEvent,myEvent) then + Case myEvent.What of + mouseDown: TakeCareMouseDown(myEvent); + KeyDown: Finished:= True; + ActivateEvt:TakeCareActivates(myEvent); + UpDateEvt: TakeCareUpdates(myEvent); + End + + Else AnimateWagon;{animate one loop of our wagon shape} + + Until Finished; +End; + +procedure SetUpMenus; +var + i: integer; +Begin + myMenus[1] := GetMenu(appleMenu); {get menu info from resources} + AddResMenu(myMenus[1],'DRVR'); {add in all the DA's} + myMenus[2] := GetMenu(fileMenu); + For i := 1 to lastMenu do + begin + InsertMenu(myMenus[i],0); + end; + DrawMenuBar; +End; + +procedure CloseStuff; +Begin + {be sure to kill any sound I/O before quitting!} +End; + +{Main Program begins here} +BEGIN + InitThings; + SetUpMenus; + CreateWindow; + CreatePictures;{load picts from resource file} + CreateOffScreenBitMap;{for use with copyBits procedure} + DrawPicsIntoOffScreen;{OffScreen holds all our wagon/fly shapes} + InitialAnimation;{set up stuff for start of animation} + MainEventLoop;{will animate wagon/fly if nothing else is going on} + CloseStuff; +END. diff --git a/Duane Blehm's Code/Cairo Æ’/About Cairo files.. b/Duane Blehm's Code/Cairo Æ’/About Cairo files.. new file mode 100755 index 0000000..4e955e1 --- /dev/null +++ b/Duane Blehm's Code/Cairo Æ’/About Cairo files.. @@ -0,0 +1 @@ +about the Cairo files.... 'Cairo Shapes' is a 'FullPaint' document containing the shapes that are used for animation, score, etc... can be opened from MacPaint. 'Cairo Animation' is a 'FullPaint' document illustrating the way animation is done in the game. 'CairoFont.pro' is an 'Edit' text file containing source code for procedure used to access the Cairo FontRecord. 'CairoShootOut.Pas' is an 'Edit' text file containing pascal source code to be compiled by the Pascal compiler. 'aCairo.R' is an 'Edit' text file containing RMaker source code to be compiled by RMaker. 'aCairo.Rsrc' is a resource document containing resources built with ResEdit, the resource editor. These resources are 'included' when 'aCairo.R' is compiled by RMaker. 'CairoShootOut' is our application... the result of Link. \ No newline at end of file diff --git a/Duane Blehm's Code/Cairo Æ’/Cairo Animation b/Duane Blehm's Code/Cairo Æ’/Cairo Animation new file mode 100755 index 0000000000000000000000000000000000000000..fab5e2a727e781b1f2f631f6815bf60da40fa7ae GIT binary patch literal 26618 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 literal 0 HcmV?d00001 diff --git a/Duane Blehm's Code/Cairo Æ’/Cairo Shapes b/Duane Blehm's Code/Cairo Æ’/Cairo Shapes new file mode 100755 index 0000000000000000000000000000000000000000..757000faaa7451a1b926391450a3ee87ef31f5d1 GIT binary patch literal 25679 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