home *** CD-ROM | disk | FTP | other *** search
- ;********************************************************************
- ;
- ; YachtC
- ; Copyright 1985 by Sheldon Leemon. Feel free to copy and distribute the
- ; program and source code, but don't try to sell, license, or otherwise
- ; commercially exploit it.
- ;
- ; If you have questions or comments, you may contact the author through
- ; Delphi (username = DRX) or Compuserve ID 72705,1355. No late-night
- ; phone calls, please.
- ;
- ;*********************************************************************
- ;
- ;Version 2.0 modifications by Mark Schretlen of Calgary,Alberta
- ; 86-03-16 ( some fixes & Steve Bennett's "scales"
- ; incorporated with calls to Happy, Bomb, and YahtzeeSound).
- ;
- ;Version 3.0 further modifications by M. Schretlen for
- ; multitasking "scales" 87-12-30.
- ;
- ;Version 4.0 Converted C to assembly code. Revamped audio portion of
- ; program to use dissidents' custom music library. Jeff Glatt
-
- SECTION YachtC4Code,CODE
-
- SMALLOBJ ;PC relative mode for CAPE assembler. If MANX, search for MANX
- ;comments and make appropriate changes. Also eliminate this
- ;PC relative directive. Please read "ManxPCBug" on this disc
- ;because I've used a switch which Manx will probably assemble
- ;incorrectly. Why not buy a real assembler instead of Manx Asm?
-
- ;MANX - uncomment these two lines
- ;far code ;Everyone else says "Small Data" if desired. Just like Manx to
- ;far data ;do it completely backwards.
-
- ;from amiga.lib or small.lib
- XREF _LVOOpenFont,_LVOCloseFont,_LVOSetFont
- XREF _LVOSetAPen,_LVOSetDrMd,_LVOPolyDraw,_LVOLoadRGB4
- XREF _LVOWait,_LVOGetMsg,_LVOReplyMsg,_LVOPutMsg
- XREF _LVOOpenWindow,_LVOCloseWindow,_LVOOpenScreen,_LVOCloseScreen
- XREF _LVOOpenLibrary,_LVOCloseLibrary
- XREF _LVORemoveGadget,_LVOAddGadget,_LVOOnGadget,_LVOOffGadget
- XREF _LVOAutoRequest,_LVOSetMenuStrip,_LVOViewPortAddress
- XREF _LVODraw,_LVOMove,_LVOText,_LVODrawImage
- XREF _LVOAllocMem,_LVOFreeMem
- XREF _LVOCurrentTime
-
- ;from SmallStart.asm
- XREF _SysBase,_DOSBase,_ThisTask,_exit
-
- ;from CHIP.asm
- XREF OneSpot,TwoSpot,ThreeSpot,FourSpot,FiveSpot,SixSpot
-
- ; XREF _do_sound,_init_sound
-
- _do_sound:
- _init_sound rts
-
- XDEF _main
- _main:
- link a5,#-358
- ;---Open libs, screen, windows
- bsr open_libs
- beq Cleanup
- ;---Initialize sound
- jsr _init_sound
- ;---do_sound(YAHSOUND,7)
- pea 7
- pea 1
- jsr _do_sound
- addq.l #8,sp
- ;---draw the score pad
- bsr draw_scorecard
- ;==================get number of players================
- ; while return value < 64, (wait until number of players selected from menu)
- .18 bsr IMsg ;returns 64,65,66,or 67 for players
- moveq #63,d1
- sub.w d1,d0
- bls.s .18
- move.w d0,d6 ;number of players (1-4)
- ;===============initialize the scores================
- moveq #4-1,d3 ;initialize 4 score cards
- ;for cats = 0 to < SCORECATS scores[players][cats++] = -1)
- ;==========blank the scoring columns to -1 to start with==========
- .22 moveq #84,d0
- mulu.w d3,d0
- lea -350(a5),a0
- adda.l d0,a0
- moveq #20-1,d2 ;20 scores in this players score structure
- moveq #-1,d1
- .27 move.l d1,(a0)+
- Dbra d2,.27
- ;---Now re-initialize certain fields
- ;---except for the rows with graphics or totals (they = 0)
- ;---scores[players][6] = 0
- lea -326(a5),a0
- clr.l 0(a0,d0.l)
- ;---scores[players][7] = 0
- lea -322(a5),a0
- clr.l 0(a0,d0.l)
- ;---scores[players][8] = 0
- lea -318(a5),a0
- clr.l 0(a0,d0.l)
- ;---scores[players][9] = 0
- lea -314(a5),a0
- clr.l 0(a0,d0.l)
- ;---scores[players][17] = 0
- lea -282(a5),a0
- clr.l 0(a0,d0.l)
- ;---scores[players][18] = 0
- lea -278(a5),a0
- clr.l 0(a0,d0.l)
- ;---scores[players][19] = 0
- lea -274(a5),a0
- clr.l 0(a0,d0.l)
- ;---scores[players][20] = 0
- lea -270(a5),a0
- clr.l 0(a0,d0.l)
- Dbra d3,.22
- ;=================draw the score pad================
- bsr draw_scorecard
- ;================Draw the 4 player Names=============
- ;---Set DrawMode to JAM1
- moveq #0,d0
- movea.l RastPort,a1
- movea.l _GfxBase,a6
- jsr _LVOSetDrMd(a6)
- moveq #0,d2
- .30 bsr Name
- addq.b #1,d2
- cmp.w d6,d2
- bcs.s .30
- ;========================play a whole game==============
- ;======for turns = 1 to 13 (score slots on a Yachtze Card)
- moveq #13-1,d7
- ;=======for cur_player = 1 to #ofplayers
- .34 moveq #0,d2
- lea -350(a5),a3 ;scores[player0]
- ;---highlight the player's name
- .38 moveq #5,d0 ;JAM2+INVERSVID
- movea.l RastPort,a1
- jsr _LVOSetDrMd(a6)
- bsr Name
- ;---get dice values
- lea -2(a5),a4 ;bones structure + 10 [start is -12(a5)]
- bsr roll_dice
- ;---do_sound(DICEROLL,4)
- pea 4
- pea 4
- jsr _do_sound
- addq.w #8,sp
- ;---score_turn(scores[cur_player],bones,cur_player)
- lea -12(a5),a0
- bsr score_turn
- ;---unhighlight the player's name
- moveq #1,d0 ;JAM2
- movea.l RastPort,a1
- movea.l _GfxBase,a6
- jsr _LVOSetDrMd(a6)
- bsr Name
- ;---next player
- moveq #84,d0
- adda.l d0,a3 ;next player's scores structure
- addq.b #1,d2
- cmp.w d6,d2
- bcs.s .38
- ;---one score slot complete
- Dbra d7,.34
- bra .18 ;go back for next game, or quit
-
- ;================== "BONES" STRUCTURE ========================
- ; 12 byte structure holding current dice values and # of rolls
- ;bones dc.w die1value ;0(BASE) value of die #1
- ; dc.w die2value ;2
- ; dc.w die3value ;4
- ; dc.w die4value ;6
- ; dc.w die5value ;8
- ; dc.w #ofRolls ;10 total rolls/turns (3 max)
- ;
- ; This routine rolls all 5 dice (via Rollrep), waits for user to select and
- ; change dice for 3 turns/rolls (via IMsg and Shake), and returns the bones
- ; structure with final, filled-in values.
- ;
- ; roll_dice(bones+10)
- ; a4
-
- XDEF roll_dice
- roll_dice:
- movem.l d2/a2/a3,-(sp)
- movea.l _IntuitionBase,a6
- lea DieGadg5,a3 ;start with last die's gadget
- moveq #5-1,d2 ;last die number
- ;---bones[#ofRolls] = 1
- moveq #1,d0
- move.w d0,(a4)
- ;---this die's Gadget Activation = TOGGLESELECT
- .45 Bset.b #0,14(a3)
- ;---roll all 5 dice and store results (i.e. the 1st turn/roll)
- bsr Rollrep
- move.w d0,-(a4)
- moveq #44,d1
- suba.l d1,a3
- Dbra d2,.45
- ;---Turn on the "ROLL" gadget
- suba.l a2,a2
- movea.l ScoreWindow,a1
- lea RollGadget,a0
- jsr _LVOOnGadget(a6)
- ;============while changed=1 AND bones[TURNS] < 3 ==================
- ;while flag < 17 OR flag > 24 (wait til "ROLL" gadget selected)
- .49 bsr IMsg
- cmp.w #17,d0
- bcs.s .49
- cmp.w #24,d0
- bhi.s .49 ;branch back if not ROLL gadget
- ;----shake whichever die is selected
- movea.l _IntuitionBase,a6
- bsr Shake ;returns # of dice selected for change
- move.b d0,d1
- beq.s .48 ;exit if none changed
- moveq #3,d0
- sub.w 10(a4),d0
- bhi.s .49 ;branch if not 3 rolls yet (turn = 0,1,or 2)
- ;----Turn "ROLL" Gadget off
- .48 movea.l ScoreWindow,a1
- lea RollGadget,a0
- jsr _LVOOffGadget(a6)
- ;---Disable all 5 dice gadgets
- moveq #5-1,d1
- lea DieGadg1+14,a0
- moveq #44,d0
- .54 clr.w (a0) ;this die's Gadget Activation = NULL
- adda.l d0,a0
- Dbra d1,.54
- ;=============CHECK FOR YAHTZEE (all 5 die equal)==============
- ;if all 5 bones values are equal, then do_sound(YAHSOUND,5)
- move.w (a4)+,d0
- cmp.w (a4)+,d0
- bne.s .56
- cmp.w (a4)+,d0
- bne.s .56
- cmp.w (a4)+,d0
- bne.s .56
- sub.w (a4)+,d0
- bne.s .56
- pea 5
- pea 1
- jsr _do_sound
- addq.l #8,sp
- .56 movem.l (sp)+,d2/a2/a3
- rts
-
- ;**************************************************************
- ; This routine evaluates the current dice values in the bones array
- ; in terms of the score they produce for the scoring category (passed
- ; as row for the function "Evaluate" which returns the score).
- ;
- ;score_turn(scores,bones,cur_player)
- ; a3 a0 d2
-
- XDEF score_turn
- score_turn:
- link a5,#-22
- movem.l d3/a2,-(sp)
- ;-----Zero out temporary sort array
- moveq #7-1,d0
- lea -20(a5),a2 ;values[0]
- movea.l a2,a1
- .62 clr.w (a2)+
- Dbra d0,.62
- ;============for 5 die (sort dice by number of spots)===========
- moveq #5-1,d0
- lea 12(a1),a2 ;values[6]
- .66 move.w (a0)+,d1 ;bones[die#]
- ;---add (1+bones[die#]) to value[6] /* add die to total */
- add.w d1,(a2) ;total of all 5 die
- addq.w #1,(a2)
- ;---add 1 to values[bones[die#]]
- add.w d1,d1
- addq.w #1,0(a1,d1.w)
- Dbra d0,.66
- ;===============position score gadget==================
- ;ScoreGadget.LeftEdge = VLINL + (VLINS*cur_player) + 4
- moveq #90,d0
- mulu.w d2,d0
- addi.w #132,d0
- move.w d0,_ScoreGadget+4
- ;==============show possible scores to let player select===============
- moveq #17-1,d3 ;do 17 rows
- lea 68(a3),a2 ;past row #16
- ;----if scores[row] = -1, then no score there yet
- .70 move.l -(a2),d0
- bpl.s .72
- ;----erase dots with bg pen
- moveq #0,d0
- movea.l RastPort,a1
- movea.l _GfxBase,a6
- jsr _LVOSetAPen(a6)
- ;---ShowDots (row,cur_player)
- move.w d2,d0
- move.w d3,d1
- bsr ShowDots
- ;---show possible scores in purple
- moveq #PURP,d0
- movea.l RastPort,a1
- jsr _LVOSetAPen(a6)
- ;---score = Evaluate(values,row)
- lea -20(a5),a0
- bsr Evaluate
- ;---ShowScore (score,row,cur_player)
- move.l d2,-(sp)
- move.l d3,-(sp)
- move.l d0,-(sp)
- bsr _ShowScore
- lea 12(sp),sp
- .72 Dbra d3,.70
- ;====wait until user clicks on a score of an unused category=======
- ; while row > 17 OR scores[row] is not = -1 (already scored slot)
- .73 bsr IMsg
- moveq #17,d1
- sub.w d0,d1
- bcs.s .73
- move.w d0,d3 ;row # (0 to 17)
- add.b d0,d0
- add.w d0,d0
- move.l 0(a2,d0.w),d1
- bpl.s .73 ;branch back if already scored
- ;----selected score in forest green
- moveq #FGRP,d0
- movea.l RastPort,a1
- movea.l _GfxBase,a6
- jsr _LVOSetAPen(a6)
- ;---score = Evaluate(values,row) /* evaluate row selected */
- lea -20(a5),a0
- bsr Evaluate
- move.w d0,-2(a5)
- ;---ShowScore (score,row,cur_player), and save score in score structure
- move.l d2,-(sp)
- move.w d3,d1
- move.l d3,-(sp)
- add.b d1,d1
- add.w d1,d1
- move.l d0,0(a2,d1.w) ;store score in the this row's field
- move.l d0,-(sp)
- bsr _ShowScore
- lea 12(sp),sp
- ;**************Steve Bennett's "scales" sounds.**************
- ;if score < 3 OR (score < 6 AND row > 2) do_sound(BOMBSOUND,5)
- move.w -2(a5),d0
- cmp.b #3,d0
- bcs.s .77
- cmp.b #6,d0
- bcc.s .76
- cmp.w #2,d3
- bls.s .76
- .77 pea 5
- pea 3
- jsr _do_sound
- addq.w #8,sp
- bra .78
- ;else if (score > 18 AND row < 6) OR (score > 25 AND row > 8)
- ;do_sound(HAPPYSOUND,5)
- .76 cmpi.b #18,d0
- bls.s .81
- cmp.w #6,d3
- bcs.s .80
- .81 cmpi.b #25,d0
- bls.s .79
- cmp.w #8,d3
- bls.s .79
- .80 pea 5
- pea 2
- jsr _do_sound
- addq.w #8,sp
- bra.s .78
- ;else if (score < 20 AND row > 8) do_sound(HAPPYSOUND,1)
- .79 cmpi.b #20,d0
- bcc.s .78
- cmp.w #8,d3
- bhi.s .80
- ;=================if row < 7====================
- .78 moveq #7,d1
- sub.w d1,d3
- bcc.s .84
- ;---ClearRow(7,cur_player)
- move.w d2,d0
- ; #7,d1
- bsr ClearRow
- ;ShowScore (scores[7],7,cur_player) /* do upper sub-total
- move.l d2,-(sp)
- pea 7
- move.w -2(a5),d0
- add.w d0,30(a3) ;add score to scores[7]
- move.l 28(a3),-(sp)
- bsr _ShowScore
- lea 12(sp),sp
- bra.s .85
- ;----ClearRow(18,cur_player)
- .84 move.w d2,d0
- moveq #18,d1
- bsr ClearRow
- ;ShowScore (scores[18],18,cur_player) /* or else lower total
- move.l d2,-(sp)
- pea 18
- move.w -2(a5),d0
- add.w d0,74(a3) ;add score to scores[18]
- move.l 72(a3),-(sp)
- bsr _ShowScore
- lea 12(sp),sp
- ;if scores[7] > BONUS
- .85 moveq #63,d0
- sub.l 28(a3),d0
- bhi.s .86
- ;---ClearRow(8,cur_player)
- move.w d2,d0
- moveq #8,d1
- bsr ClearRow
- ;ShowScore (scores[8] = 35, 8, cur_player) /* check for bonus
- move.l d2,-(sp)
- pea 8
- moveq #35,d0
- move.l d0,32(a3)
- move.l d0,-(sp)
- bsr _ShowScore
- lea 12(sp),sp
- ;==============add sub-totals to total and display=============
- ;---ClearRow(20,cur_player)
- .86 move.w d2,d0
- moveq #20,d1
- bsr ClearRow
- ;ShowScore (scores[20]=scores[7]+scores[8]+scores[18],20,cur_player)
- move.l d2,-(sp)
- pea 20
- move.l 28(a3),d0
- add.l 32(a3),d0
- add.l 72(a3),d0
- move.l d0,80(a3)
- move.l d0,-(sp)
- bsr _ShowScore
- lea 12(sp),sp
- ;============================= Do 17 Rows =============================
- moveq #17-1,d3
- lea 68(a3),a2 ;past row #16
- ;----Check if this row is unscored still
- .89 move.l -(a2),d0
- bpl.s .91
- ;------erase the score of this row with bg pen
- moveq #0,d0
- movea.l RastPort,a1
- movea.l _GfxBase,a6
- jsr _LVOSetAPen(a6)
- ;---score = Evaluate(values,row
- lea -20(a5),a0
- bsr Evaluate
- ;---ShowScore (score,row,cur_player)
- move.l d2,-(sp)
- move.l d3,-(sp)
- move.l d0,-(sp)
- bsr _ShowScore
- lea 12(sp),sp
- ;==========draw dots in black pen===============
- moveq #7,d0
- movea.l RastPort,a1
- movea.l _GfxBase,a6
- jsr _LVOSetAPen(a6)
- ;----ShowDots (row,cur_player)
- move.w d2,d0
- move.w d3,d1
- bsr ShowDots
- ;------------Next row------------
- .91 Dbra d3,.89
- movem.l (sp)+,d3/a2
- unlk a5
- rts
-
- ;********************************************************************
- ; Handles IntuiEvents of MENUPICK, GADGETUP, and CLOSEWINDOW. If CLOSEWINDOW,
- ; exits immediately. If GADGETUP, returns 0 to 17 for row in scorecard.
- ; Returns between 17 to 24 for ROLL gadg. Otherwise, default return = 35.
- ; If MENUPICK, returns 64 + # of players if MENU #0 selected, 32 if MENU #1
- ; selected.
-
- XDEF IMsg
- IMsg:
- movem.l d2-d4/a2,-(sp)
- ;---Initially, flag = 35
- moveq #35,d2
- ;----Wait for Score window message, then get it
- movea.l ScoreWindow,a0
- movea.l 86(a0),a2
- move.b 15(a2),d1
- moveq #0,d0
- Bset.l d1,d0
- movea.l _SysBase,a6
- jsr _LVOWait(a6)
- .95 movea.l a2,a0
- jsr _LVOGetMsg(a6)
- move.l d0,d1
- bne.s .96
- ;---return flag
- move.w d2,d0
- movem.l (sp)+,d2-d4/a2
- rts
- .96 movea.l d0,a1
- lea 20(a1),a0
- move.l (a0)+,-(sp)
- move.w (a0)+,d3 ;CODE
- addq.l #8,a0
- move.w (a0)+,d4 ;MOUSEY
- jsr _LVOReplyMsg(a6)
- move.l (sp)+,d0 ;CLASS
- Btst.l #6,d0
- bne.s .100
- Btst.l #8,d0
- bne.s .101
- Btst.l #9,d0
- beq.s .95
- ;===============case CLOSEWINDOW:==================
- .99 movem.l (sp)+,d2-d4/a2
- bra Cleanup
- ;===============case GADGETUP:=====================
- ;---flag (i.e. row #) = (MOUSEY-29)/8
- .100 move.w d4,d2
- moveq #29,d1
- sub.w d1,d2
- lsr.w #3,d2
- bra.s .95
- ;==============case MENUPICK:====================
- .101 move.w d3,d1
- andi.w #$1F,d3
- beq .104
- subq.w #1,d3
- bne.s .95
- ;=============MENU 1:
- .105 lsr.w #5,d1
- andi.w #$3F,d1
- beq.s .108
- ;----------ITEM 1:
- ; Show the about requester
- .109 move.w #148,d3
- lea _AboutText+200,a1
- .PP movem.l a2/a3/a6,-(sp)
- move.w #515,d2
- moveq #0,d0
- moveq #0,d1
- movea.l ScoreWindow,a0
- lea _OKText,a3
- suba.l a2,a2
- movea.l _IntuitionBase,a6
- jsr _LVOAutoRequest(a6)
- movem.l (sp)+,a2/a3/a6
- ;---flag = 32
- moveq #32,d2
- bra .95
- ;--------ITEM 0:
- ; Show the Instructions requester
- .108 move.w #180,d3
- lea _InstructText+260,a1
- bra.s .PP
- ;==============MENU 0:
- ;-----flag (i.e. number of players + 64) = 64 + ITEMNUM
- .104 lsr.w #5,d1
- andi.w #$3F,d1
- moveq #64,d2
- add.b d1,d2
- bra .95
-
- ;==================================================================
- ;changed = Shake(bones, IntuitionBase)
- ; a4 a6
-
- XDEF Shake
- Shake:
- movem.l d2/d3/a2/a3,-(sp)
- moveq #0,d3 ;initially, changed = 0
- moveq #5-1,d2 ;# of die
- lea DieGadg5,a3 ;start with last die
- suba.l a2,a2 ;for OnGadget
- ;---Turn on this die
- .115 movea.l ScoreWindow,a1
- movea.l a3,a0
- jsr _LVOOnGadget(a6)
- ;If this die's Flags = SELECTED, then roll die and store result
- Btst.b #7,13(a3)
- beq.s .113
- bsr.s Rollrep
- move.l d2,d1
- add.b d1,d1
- move.w d0,0(a4,d1.l)
- ;=============Deselect the die Gadget==============
- ;Since its not nice to change the SELECTED flag while the gadget is active
- ;(only the user is supposed to do that by clicking on it), we'll be nice
- ;and first Remove the die gadget from the list, THEN change the flag
- ;and finally, Add it back to the list again.
- ;---RemoveGadget(BdWdw, &DieGadg[die#])
- movea.l a3,a1
- movea.l ScoreWindow,a0
- jsr _LVORemoveGadget(a6)
- ;---toggle SELECTED flag
- Bchg.b #7,13(a3)
- ;---AddGadget(BdWdw,&DieGadg[die#],Gadget#)
- movea.l a3,a1
- movea.l ScoreWindow,a0
- jsr _LVOAddGadget(a6)
- addq.b #1,d3
- .113 moveq #44,d0
- suba.l d0,a3 ;next die Gadget
- Dbra d2,.115
- ;----increment bones[TURNS] (another roll finished)
- addq.w #1,10(a4)
- ;---return total number of changed (selected) dice
- move.w d3,d0
- movem.l (sp)+,d2/d3/a2/a3
- rts
-
- ;==================================================================
- ;throw = Rollrep(die_number, DieGadgAddr, Intuitionbase)
- ; d2 a3 a6
-
- XDEF Rollrep
- Rollrep:
- move.l d3,-(sp)
- move.l d4,-(sp)
- moveq #9-1,d3 ;do 9 random throws before final value returned
- ;----throw = random()%6
- roll bsr.s random
- moveq #6,d1
- divu d1,d0
- swap d0
- move.w d0,d4
- ;---Blank out the Die face
- moveq #31,d1 ;BLANKS
- mulu.w d2,d1
- moveq #20,d0 ;BLANKT
- add.w d0,d1 ;TopOffset = (BLANKS*Die#)+BLANKIT
- move.w #530,d0 ;LeftOffset = BLANKL
- lea BlankImage,a1
- movea.l RastPort,a0
- movem.l d0/d1/a0,-(sp)
- jsr _LVODrawImage(a6)
- ;---Draw the die Image that was thrown and store address in die's Gadget-
- ; Render field for subsequent updates
- moveq #20,d0
- mulu.w d4,d0
- lea Die1Image,a1
- adda.l d0,a1 ;The image struct of this die
- move.l a1,18(a3) ;store in die's GadgetRender field
- movem.l (sp)+,d0/d1/a0
- jsr _LVODrawImage(a6)
- Dbra d3,roll
- ;---return(throw)
- move.w d4,d0
- move.l (sp)+,d4
- move.l (sp)+,d3
- rts
-
- XDEF random,RAND
- random:
- ;----RAND = RAND * 1103515245 + 12345
- move.l #1103515245,d1
- move.l RAND,d0
- bsr.s multiply
- addi.l #12345,d0
- move.l d0,RAND
- ;-----return (RAND/65536) % 32768
- clr.w d0
- swap d0 ;divide by 65536
- Bclr.l #15,d0
- rts
-
- XDEF multiply
- ;This routine multiplies 2 numbers passed in d0 and d1.
- ;d0 x d1 = d0 (unsigned)
- multiply movea.l d2,a0 ;save d2 and d3
- movea.l d3,a1
- move.l d0,d2
- move.l d1,d3
- swap d2
- swap d3
- mulu d1,d2
- mulu d0,d3
- mulu d1,d0
- add.w d3,d2
- swap d2
- clr.w d2
- add.l d2,d0
- move.l a1,d3 ;restore d2 and d3
- move.l a0,d2
- rts
-
- RAND dc.l 1
-
- ;==================================================================
- ;score = Evaluate (values,row)
- ; a0 d3
- evl dc.w .zr-evl2
- dc.w .zr-evl2
- dc.w .zr-evl2
- dc.w .140-evl2
- dc.w .148-evl2
- dc.w .156-evl2
- dc.w .164-evl2
- dc.w .176-evl2
- dc.w .199-evl2
- dc.w .205-evl2
-
- XDEF Evaluate
- Evaluate:
- move.l d2,-(sp)
- ;--------switch(row)
- move.l d3,d1
- subq.l #7,d1
- bls.s .0to5
- moveq #10,d0
- cmp.l d0,d1
- bcc.s .zr
- add.b d1,d1
- move.w evl(pc,d1.w),d1
- evl2 jmp evl2(pc,d1.w)
- ;=================case 0: through case 5:=====================
- ;----return (row+1)*values[row] (return total of desired spots)
- .0to5:
- move.w d3,d0
- move.l d3,d1
- addq.b #1,d0
- add.b d1,d1
- adda.l d1,a0
- mulu.w (a0),d0
- bra.s .139
- ;===============case 10: 3 of a kind===============
- .140 moveq #2,d1
- bra.s KD
- ;===============case 11: 4 of a kind===============
- .148 moveq #3,d1
- KD moveq #0,d0
- ;----if values[count] > 3, return values[6] (total of dice) instead of 0
- moveq #6-1,d2
- lea 12(a0),a1
- .151 cmp.w (a0)+,d1
- bcc.s .149
- move.w (a1),d0
- .149 Dbra d2,.151
- bra.s .139
- ;==============case 12: full house=============
- .156 moveq #0,d1
- ;---if values[count] > 1, flagg = flagg + values[count]
- moveq #6-1,d2
- moveq #1,d0
- .159 cmp.w (a0)+,d0
- bcc.s .158
- add.w -2(a0),d1
- .158 Dbra d2,.159
- ;---If flagg = 5, return 25. Otherwise 0.
- moveq #0,d0
- subq.b #5,d1
- bne.s .139
- moveq #25,d0
- .139 move.l (sp)+,d2
- rts
- ;============case 13: small straight============
- .164 moveq #3-1,d1 ;do 3 checks
- SRT movea.l a0,a1
- moveq #4-1,d2 ;check for 4 numbers in order
- ;---Is there 1 (or more) of this #?
- AGN move.w (a1)+,d0
- Dbeq d2,AGN ;fall through if no occurences of this #
- bne.s strt ;must be a straight of 4 numbers
- ;---Try next 4 numbers
- addq.l #2,a0
- Dbra d1,SRT
- bra.s .zr
- strt moveq #30,d0
- bra.s .139
- ;==============case 14: large straight===============
- .176 moveq #2-1,d1 ;do 2 checks
- SRt movea.l a0,a1
- moveq #5-1,d2 ;check for 5 numbers in order
- ;---Is there 1 (or more) of this #?
- AGn move.w (a1)+,d0
- Dbeq d2,AGn ;fall through if no occurences of this #
- bne.s strT ;must be a straight of 4 numbers
- ;---Try next 4 numbers
- addq.l #2,a0
- Dbra d1,SRt
- .zr moveq #0,d0
- bra.s .139
- strT moveq #40,d0
- bra.s .139
- ;================case 15: Yachtze==============
- ;---if values[count] = 5, then return 50
- .199 moveq #6-1,d2 ;do 6 die
- moveq #0,d0
- moveq #5,d1 ;check for 5 of this die
- .202 cmp.w (a0)+,d1
- Dbeq d2,.202
- bne .139
- moveq #50,d0
- bra .139
- ;=============case 16: Chance============
- ;----return values[6]
- .205 moveq #0,d0
- move.w 12(a0),d0
- bra .139
-
- ;==================================================================
- ;ShowScore(score,row,player)
-
- XDEF _ShowScore
- _ShowScore:
- movem.l d2/a2,-(sp)
- movea.l _GfxBase,a6
- ;---SetDrMd to JAM1
- moveq #0,d0
- movea.l RastPort,a1
- movea.l a1,a2
- jsr _LVOSetDrMd(a6)
- ;---Move (BdRp,DOTL + (DOTS*player), (row*TEXTS)+DOTT )
- move.w 18(sp),d1
- lsl.w #3,d1
- moveq #36,d2
- add.w d2,d1
- move.w 22(sp),d0
- mulu.w #90,d0
- move.b #155,d2
- add.w d2,d0
- movea.l a2,a1
- jsr _LVOMove(a6)
- ;---Text (BdRp, " ",4)
- moveq #4,d0
- lea Spaces,a0
- movea.l a2,a1
- jsr _LVOText(a6)
- ;---format_4(score_str,score)
- move.l 12(sp),d0
- lea Zeros,a0
- bsr.s format_4
- ;Move (BdRp,DOTL + (DOTS*player + ((4-length)*SPACEW) ), (row*TEXTS)+DOTT )
- move.w 22(sp),d0
- mulu.w #90,d0
- add.w #155,d0 ;x
- ;---
- move.w 18(sp),d1
- lsl.w #3,d1
- moveq #36,d2
- add.w d2,d1 ;y
- movea.l a2,a1
- jsr _LVOMove(a6)
- ;---Text (BdRp, score_str, length)
- moveq #4,d0
- lea Zeros,a0
- movea.l a2,a1
- movem.l (sp)+,d2/a2
- jmp _LVOText(a6)
-
- ;===================================================================
- ; An sprintf for positive hex to decimal ascii string, 4 digit field. Blanks
- ; are filled for leading zeros, and buffer padded out to 4 chars.
- ;
- ; format_4(value, Buffer)
- ; d0 a0
-
- Conversion dc.w 1000,100,10,1
-
- XDEF format_4
- format_4:
- movem.l d2-d4,-(sp)
- moveq #0,d4 ;leading zero flag
- ;---Convert the value to Decimal
- moveq #4-1,d2 ;do 4 digits
- lea Conversion,a1
- g07 moveq #0,d1 ;where to store the converted digit
- move.w (a1)+,d3 ;the next conversion factor
- ;---Convert a digit field (for example, the 10s digit)
- Rep1 cmp.w d3,d0
- bcs.s g011
- addq.b #1,d1
- sub.l d3,d0
- bra.s Rep1
- ;---Check whether we have a leading digit of zero. If so, move
- ;---on to the next field unless this IS the last field in
- ;---which case we have to store a 0. If this digit is
- ;---not a zero, then print it.
- g011 move.b d1,d3 ;test for 0 digit
- beq.s g012
- moveq #1,d4 ;indicate non-zero digit (only set once)
- g012 move.b d4,d3
- bne.s g013
- move.w d2,d3
- beq.s g013 ;branch if the 1's digit AND value is zero
- moveq #' ',d1
- bra.s SF
- ;---Convert to Ascii and store this digit
- g013 addi.b #'0',d1
- SF move.b d1,(a0)+
- g014 Dbra d2,g07 ;next digit calculation
- clr.b (a0)
- movem.l (sp)+,d2-d4
- rts
-
- ;=================================================================
- ;ShowDots (row,player)
- ; d1 d0
-
- XDEF ShowDots
- ShowDots:
- ;----Move (BdRp,DOTL + (DOTS*player), (row*TEXTS)+DOTT )
- move.l d2,-(sp)
- lsl.w #3,d1
- moveq #36,d2
- add.w d2,d1
- moveq #90,d2
- mulu.w d2,d0
- move.b #155,d2
- add.w d2,d0
- movea.l RastPort,a1
- move.l (sp),d2
- move.l a1,(sp)
- movea.l _GfxBase,a6
- jsr _LVOMove(a6)
- ;---SetDrMd to JAM1
- moveq #0,d0
- movea.l (sp),a1
- jsr _LVOSetDrMd(a6)
- ;---Print out '....'
- moveq #4,d0
- lea Dots,a0
- movea.l (sp)+,a1
- jmp _LVOText(a6)
-
- Dots dc.b '....',0
- Zeros dc.b '0000',0
-
- ;======================================================================
- ;ClearRow (row,player)
- ; d1 d0
-
- XDEF ClearRow
- ClearRow:
- ;----Move (BdRp,DOTL + (DOTS*player), (row*TEXTS)+DOTT )
- move.l d2,-(sp)
- lsl.w #3,d1
- moveq #36,d2
- add.w d2,d1
- moveq #90,d2
- mulu.w d2,d0
- move.b #155,d2
- add.w d2,d0
- movea.l RastPort,a1
- move.l (sp),d2
- move.l a1,(sp)
- movea.l _GfxBase,a6
- jsr _LVOMove(a6)
- ;---SetDrMd to JAM2
- moveq #1,d0
- movea.l (sp),a1
- jsr _LVOSetDrMd(a6)
- ;---Output " "
- moveq #4,d0
- lea Spaces,a0
- movea.l (sp)+,a1
- jmp _LVOText(a6)
-
- ;====================================================================
- ;Name (player, _GfxBase)
- ; d2 a6
-
- XDEF Name
- Name:
- ;---Move(BdRp, DOTL -(2*SPACEW) + (DOTS*player), TEXTT+2)
- moveq #90,d0
- mulu.w d2,d0
- moveq #0,d1
- move.b #135,d1
- add.w d1,d0
- moveq #22,d1
- movea.l RastPort,a1
- move.l a1,-(sp)
- jsr _LVOMove(a6)
- ;---Text(BdRp, textline[MAXLINES+player], 8)
- movea.l (sp)+,a1
- moveq #8,d0
- moveq #23,d1 ;MAXLINES
- add.w d2,d1
- add.w d1,d1
- add.w d1,d1
- lea _textline,a0
- adda.w d1,a0
- movea.l (a0),a0
- jmp _LVOText(a6)
-
- ;===================================================================
- ; Open intuition, graphics libs, font, windows, screen, set menu
- ; returns d0 = 1 if successful, 0 if something failed.
-
- LIB_VERSION equ 33
-
- XDEF open_libs
- open_libs:
- ;======Open The Intuition Library=======
- B0 moveq #LIB_VERSION,d0
- lea IntuitionName,a1
- movea.l _SysBase,a6
- jsr _LVOOpenLibrary(a6)
- move.l d0,_IntuitionBase
- beq B10
- ;======Open The Graphics Library========
- B1 moveq #LIB_VERSION,d0
- lea GfxName,a1
- jsr _LVOOpenLibrary(a6)
- move.l d0,_GfxBase
- beq B10
- ;========Open the Topaz 8 Font==========
- B4 lea TextAttr,a0
- movea.l _GfxBase,a6
- jsr _LVOOpenFont(a6)
- move.l d0,FontPtr
- beq B10
- ;==========Open Custom Screen===========
- B5 lea NewScreen,a0
- movea.l _IntuitionBase,a6
- jsr _LVOOpenScreen(a6)
- move.l d0,Screen
- beq B10
- lea NewWindow,a0
- move.l d0,30(a0)
- ;=========Open the main window==========
- jsr _LVOOpenWindow(a6)
- move.l d0,ScoreWindow
- beq B10
- ;====Get Pointer to Window's RastPort=====
- B6 movea.l d0,a0
- movea.l 50(a0),a1
- move.l a1,RastPort ;the address our this window's rastport.
- ;====Set the Font for this window to Topaz 8====
- B7 movea.l FontPtr,a0
- movea.l _GfxBase,a6
- jsr _LVOSetFont(a6)
- ;====Attach our menus to the window======
- B8 lea _BdMenu,a1
- movea.l ScoreWindow,a0
- movea.l _IntuitionBase,a6
- jsr _LVOSetMenuStrip(a6)
- ;====Get the Front Window's ViewPort==========
- movea.l ScoreWindow,a0
- jsr _LVOViewPortAddress(a6)
- move.l d0,_WVPort
- ;=======load our new set of (8) colors======
- movea.l d0,a0
- moveq #8,d0
- lea _colormap,a1
- movea.l _GfxBase,a6
- jsr _LVOLoadRGB4(a6)
- ;====Indicate that everything worked=====
- moveq #1,d0 ;If we got here, indicate success by d0 = 1.
- B10 rts
-
- XDEF draw_scorecard
- draw_scorecard:
- link a5,#-8
- movem.l d2/d3/a2/a3/a4,-(sp)
- ;====================Set up the board outline===========================
- ;--SetAPen to BLKP
- moveq #7,d0
- movea.l RastPort,a1
- movea.l a1,a2
- movea.l _GfxBase,a6
- jsr _LVOSetAPen(a6)
- ;--Move to (0,VLINT)
- moveq #13,d1 ;VLINT
- moveq #0,d0
- movea.l a2,a1
- jsr _LVOMove(a6)
- ;---SetDrMd = JAM2
- moveq #1,d0
- movea.l a2,a1
- jsr _LVOSetDrMd(a6)
- ;---PolyDraw 8 boardlines points
- lea _boardlines,a0
- moveq #8,d0
- movea.l a2,a1
- jsr _LVOPolyDraw(a6)
- ;==============Put in text and horizontal lines for board===========
- ;---Move to (TEXTL,TEXTT+2)
- moveq #22,d1
- moveq #5,d0
- movea.l a2,a1
- jsr _LVOMove(a6)
- ;---Print out "players"
- lea _textline,a3
- movea.l (a3)+,a0
- movea.l a0,a1
- len move.b (a1)+,d0
- bne.s len
- subq.l #1,a1
- move.l a1,d0
- sub.l a0,d0
- movea.l a2,a1
- jsr _LVOText(a6)
- ;===========for count = 1 to < MAXLINES==================
- moveq #1,d0
- move.w d0,-8(a5)
- moveq #28,d2 ;Y position = (line# * TEXTS) + TEXTT
- ;---if the textline string = ' ' then draw a line
- .238 movea.l (a3)+,a4
- move.b (a4),d0
- bne.s .239
- ;----Move to (1,[count*HLINS+HLINT])
- move.w d2,d1
- subq.w #2,d1
- moveq #1,d0
- movea.l a2,a1
- jsr _LVOMove(a6)
- ;-----Draw to (HLINR,[count*HLINS+HLINT])
- move.w d2,d1
- subq.w #2,d1
- move.w #489,d0
- movea.l a2,a1
- jsr _LVODraw(a6)
- bra.s .236
- ;=======else, print the text and do columns=============
- ;---Move(BdRp,TEXTL,(count*TEXTS)+TEXTT)
- .239 move.w d2,d1
- moveq #5,d0
- movea.l a2,a1
- jsr _LVOMove(a6)
- ;---Text(BdRp,textline[count],strlen(textline[count]))
- movea.l a4,a0
- leN move.b (a4)+,d0
- bne.s leN
- subq.l #1,a4
- move.l a4,d0
- sub.l a0,d0
- movea.l a2,a1
- jsr _LVOText(a6)
- ;=========for column = 0 to < MAXPLAYERS
- moveq #4-1,d3
- ;----ClearRow(count-2,column)
- .243 move.w d3,d0
- move.w -8(a5),d1
- subq.w #2,d1
- bsr ClearRow
- ;---ShowDots(count-2,column)
- move.w d3,d0
- move.w -8(a5),d1
- subq.w #2,d1
- bsr ShowDots
- Dbra d3,.243
- .236 addq.w #8,d2
- addq.w #1,-8(a5)
- cmp.w #23,-8(a5)
- bcs.s .238
- ;==================Draw vertical lines for board==================
- ; for count = 0 to < MAXPLAYERS should replace this with DrawBorder
- moveq #4-1,d3
- moveq #127,d2
- addq.b #2,d2 ;VLINL+1
- ;----Move(BdRp,(count*VLINS)+VLINL+1,VLINT)
- .246 move.w d2,d0
- moveq #13,d1 ;VLINT
- movea.l a2,a1
- jsr _LVOMove(a6)
- ;---Draw(BdRp,(count*VLINS)+VLINL+1,VLINB)
- moveq #0,d1
- move.b #199,d1
- move.w d2,d0
- movea.l a2,a1
- jsr _LVODraw(a6)
- ;---Move(BdRp,(count*VLINS)+VLINL,VLINT)
- moveq #13,d1
- subq.w #1,d2
- move.w d2,d0
- movea.l a2,a1
- jsr _LVOMove(a6)
- ;---Draw(BdRp,(count*VLINS)+VLINL,VLINB)
- move.w d2,d0
- moveq #0,d1
- move.b #199,d1
- movea.l a2,a1
- jsr _LVODraw(a6)
- moveq #91,d1 ;VLINS+1
- add.w d1,d2 ;next line y position
- Dbra d3,.246
- ;=======================Blank players names======================
- ;---SetDrMd = JAM2
- moveq #1,d0
- movea.l a2,a1
- jsr _LVOSetDrMd(a6)
- moveq #4-1,d3
- move.w #135,d2
- ;---Move(BdRp, DOTL - (2*SPACEW) + (DOTS*count), TEXTT+2)
- .249 moveq #22,d1
- move.w d2,d0
- movea.l a2,a1
- jsr _LVOMove(a6)
- ;---Output 8 spaces
- moveq #8,d0
- lea Spaces,a0
- movea.l a2,a1
- jsr _LVOText(a6)
- moveq #90,d1
- add.w d1,d2
- Dbra d3,.249
- ;================Set initial 5 die images to Sixes=======================
- moveq #5-1,d3
- moveq #20,d2 ;BLANKT
- movea.l _IntuitionBase,a6
- ;DrawImage (BdRp, &Blank, BLANKL, (BLANKS*count) + BLANKT)
- .252 move.w d2,d1
- move.w #530,d0
- lea BlankImage,a1
- movea.l a2,a0
- movem.l d0/d1/a0,-(sp)
- jsr _LVODrawImage(a6)
- ;DrawImage (BdRp, &DieImage[5], BLANKL, (BLANKS*count) + BLANKT)
- movem.l (sp)+,d0/d1/a0
- lea Die6Image,a1
- jsr _LVODrawImage(a6)
- moveq #31,d1 ;BLANKS
- add.w d1,d2
- Dbra d3,.252
- ;================use time to seed random number generator============
- ;---CurrentTime(&Seconds,&Micros)
- lea -8(a5),a1
- lea -4(a5),a0
- jsr _LVOCurrentTime(a6)
- ;---seed random generator with Micros
- move.l -8(a5),RAND
- movem.l (sp)+,d2/d3/a2/a3/a4
- unlk a5
- rts
-
- XDEF Cleanup
- Cleanup:
- ;----do_sound(NULL,0)
- clr.l -(sp)
- clr.l -(sp)
- jsr _do_sound
- addq.l #8,sp
- ;---Close BdWdw window
- noM movea.l _IntuitionBase,a6
- move.l ScoreWindow,d0
- beq.s noW
- movea.l d0,a0
- jsr _LVOCloseWindow(a6)
- ;---Close BdScr screen
- noW move.l Screen,d0
- beq.s NoS
- movea.l d0,a0
- jsr _LVOCloseScreen(a6)
- ;---Close Graphics and Intuition Libraries
- NoS movea.l _SysBase,a6
- move.l _GfxBase,d0
- beq.s noG
- movea.l d0,a1
- jsr _LVOCloseLibrary(a6)
- noG move.l _IntuitionBase,d0
- beq.s noI
- movea.l d0,a1
- jsr _LVOCloseLibrary(a6)
- noI clr.l -(sp)
- jsr _exit
-
- ;MANX need this section directive
- ; SECTION YahtzeeData,DATA
-
- XDEF _GfxBase,_IntuitionBase,Screen,ScoreWindow,_BackWdw,_WVPort
- _IntuitionBase dc.l 0
- _GfxBase dc.l 0
- Screen dc.l 0
- FontPtr dc.l 0
- ScoreWindow dc.l 0
- RastPort dc.l 0
- _BackWdw dc.l 0
- _WVPort dc.l 0
-
- ;=========================== NEWSCREEN STRUCTURE =========================
- XDEF NewScreen
- NewScreen:
- dc.w 0,0,640,200 ;LEFTEDGE,TOPEDGE,WIDTH,HEIGHT
- dc.w 3
- dc.b 5,2
- dc.w $8000
- dc.w 15
- dc.l TextAttr
- dc.l $0000
- dc.l $0000
- dc.l $0000
-
- ;============================ NEWWINDOW STRUCTURES =======================
- XDEF NewWindow
- NewWindow:
- dc.w 0,0,640,200
- dc.b 6,3
- ;---IDCMPFlags = CLOSEWINDOW | GADGETUP | MENUPICK
- dc.l $0340
- dc.l $180c
- dc.l _ScoreGadget
- dc.l $0000
- dc.l NBTitle
- dc.l $0000
- dc.l $0000
- dc.w 0,0,0,0
- dc.w 15
-
- ;=========================== BORDER FOR SCORECARD =========================
- HLINR equ 489
- VLINT equ 13
- VLINB equ 199
- HLINL equ 1
-
- XDEF _boardlines
- _boardlines: dc.w HLINR,VLINT,HLINR,VLINB,HLINL-1,VLINB,HLINL-1,VLINT
- dc.w HLINL,VLINT,HLINL,VLINB,HLINR-1,VLINB,HLINR-1,VLINT
-
- ;======================== PEN COLORS (COLORMAP) =====================
- BGRP equ 0
- REDP equ 1
- GRNP equ 2
- YELP equ 3
- FGRP equ 4
- PURP equ 5
- BLUP equ 6
- BLKP equ 7
-
- XDEF _colormap
- _colormap:
- dc.w $FFF ;WHITE (background color)
- dc.w $F00 ;RED (color of window-close box)
- dc.w $0F0 ;GREEN (color of menu title)
- dc.w $FF0 ;YELLOW (color of window-close dot)
- dc.w $0B1 ;FOREST GREEN (scores)
- dc.w $91F ;PURPLE (color of possible scores)
- dc.w $00F ;BLUE
- dc.w $000 ;BLACK
-
- ;==================== TEXT ATTRIBUTE STRUCTURE (Topaz 9) =================
- XDEF TextAttr
- TextAttr:
- dc.l FontName
- dc.w 9
- dc.b 0
- dc.b 1
-
- ;================== IMAGE STRUCTURE FOR BLANKING DIE ================
- XDEF BlankImage
- BlankImage:
- dc.w 0,0,56,23
- dc.w 1
- dc.l $0000
- dc.b 0,1
- dc.l $0000
-
- ;================= IMAGE STRUCTURES FOR 6 FACES OF A DIE ==================
- XDEF Die1Image,Die2Image,Die3Image,Die4Image,Die5Image,Die6Image
- Die1Image:
- dc.w 4,2,48,19
- dc.w 1
- dc.l OneSpot
- dc.b 2,1
- dc.l $0000
-
- Die2Image:
- dc.w 4,2,48,19
- dc.w 1
- dc.l TwoSpot
- dc.b 2,1
- dc.l $0000
-
- Die3Image:
- dc.w 4,2,48,19
- dc.w 1
- dc.l ThreeSpot
- dc.b 2,1
- dc.l $0000
-
- Die4Image:
- dc.w 4,2,48,19
- dc.w 1
- dc.l FourSpot
- dc.b 2,1
- dc.l $0000
-
- Die5Image:
- dc.w 4,2,48,19
- dc.w 1
- dc.l FiveSpot
- dc.b 2,1
- dc.l $0000
-
- Die6Image:
- dc.w 4,2,48,19
- dc.w 1
- dc.l SixSpot
- dc.b 2,1
- dc.l $0000
-
- ;================== GADGET STRUCTURES FOR 5 DICE ==================
- XDEF DieGadg1
- DieGadg1:
- dc.l DieGadg2
- dc.w 530,20,56,23
- dc.w 6 ;Flags = GADGIMAGE | GADGHIMAGE
- dc.w 0 ;Activation is initially none. Only enabled when rolled
- dc.w 1 ;BOOLGADGET type
- dc.l Die6Image ;Selected Image is changed depending on die roll
- dc.l BlankImage ;DeSelected Image is always Blank
- dc.l $0000
- dc.l $0000
- dc.l $0000
- dc.w 1
- dc.l 0
-
- DieGadg2:
- dc.l DieGadg3
- dc.w 530,51,56,23
- dc.w 6
- dc.w 0
- dc.w 1
- dc.l Die6Image
- dc.l BlankImage
- dc.l $0000
- dc.l $0000
- dc.l $0000
- dc.w 2
- dc.l $0000
-
- DieGadg3:
- dc.l DieGadg4
- dc.w 530,82,56,23
- dc.w 6
- dc.w 0
- dc.w 1
- dc.l Die6Image
- dc.l BlankImage
- dc.l $0000
- dc.l $0000
- dc.l $0000
- dc.w 3
- dc.l $0000
-
- DieGadg4:
- dc.l DieGadg5
- dc.w 530,113,56,23
- dc.w 6
- dc.w 0
- dc.w 1
- dc.l Die6Image
- dc.l BlankImage
- dc.l $0000
- dc.l $0000
- dc.l $0000
- dc.w 4
- dc.l $0000
-
- DieGadg5:
- dc.l 0
- dc.w 530,144,56,23
- dc.w 6
- dc.w 0
- dc.w 1
- dc.l Die6Image
- dc.l BlankImage
- dc.l $0000
- dc.l $0000
- dc.l $0000
- dc.w 5
- dc.l $0000
-
- XDEF _RollText
- _RollText:
- dc.b 2
- dc.b 1
- dc.b 1
- dc.b 0
- dc.w 0
- dc.w 7
- dc.l TextAttr
- dc.l ROLL
- dc.l $0000
-
- ROLL dc.b ' ROLL',0
-
- XDEF RollGadget
- RollGadget:
- dc.l DieGadg1
- dc.w 530,175,56,23
- dc.w 260
- dc.w 1
- dc.w 1
- dc.l BlankImage
- dc.l $0000
- dc.l _RollText
- dc.l $0000
- dc.l $0000
- dc.w 6
- dc.l 0
-
- XDEF _ScoreGadget
- _ScoreGadget:
- dc.l RollGadget
- dc.w 132,29,84,136
- dc.w 3
- dc.w 1
- dc.w 1
- dc.l $0000
- dc.l $0000
- dc.l $0000
- dc.l $0000
- dc.l $0000
- dc.w 7
- dc.l 0
-
- XDEF _AboutText
- _AboutText:
- dc.b 6
- dc.b 0
- dc.b 1
- dc.b 0
- dc.w 20
- dc.w 9
- dc.l TextAttr
- dc.l .4+0
- dc.l $0000
-
- dc.b 6
- dc.b 0
- dc.b 1
- dc.b 0
- dc.w 20
- dc.w 18
- dc.l TextAttr
- dc.l .4+46
- dc.l _AboutText
-
- dc.b 6
- dc.b 0
- dc.b 1
- dc.b 0
- dc.w 20
- dc.w 27
- dc.l TextAttr
- dc.l .4+92
- dc.l _AboutText+20
-
- dc.b 6
- dc.b 0
- dc.b 1
- dc.b 0
- dc.w 20
- dc.w 36
- dc.l TextAttr
- dc.l .4+138
- dc.l _AboutText+40
-
- dc.b 6
- dc.b 0
- dc.b 1
- dc.b 0
- dc.w 20
- dc.w 45
- dc.l TextAttr
- dc.l .4+184
- dc.l _AboutText+60
-
- dc.b 6
- dc.b 0
- dc.b 1
- dc.b 0
- dc.w 20
- dc.w 54
- dc.l TextAttr
- dc.l .4+230
- dc.l _AboutText+80
-
- dc.b 6
- dc.b 0
- dc.b 1
- dc.b 0
- dc.w 20
- dc.w 63
- dc.l TextAttr
- dc.l .4+276
- dc.l _AboutText+100
-
- dc.b 6
- dc.b 0
- dc.b 1
- dc.b 0
- dc.w 20
- dc.w 72
- dc.l TextAttr
- dc.l .4+322
- dc.l _AboutText+120
-
- dc.b 6
- dc.b 0
- dc.b 1
- dc.b 0
- dc.w 20
- dc.w 81
- dc.l TextAttr
- dc.l .4+368
- dc.l _AboutText+140
-
- dc.b 6
- dc.b 0
- dc.b 1
- dc.b 0
- dc.w 20
- dc.w 90
- dc.l TextAttr
- dc.l .4+414
- dc.l _AboutText+160
-
- dc.b 6
- dc.b 0
- dc.b 1
- dc.b 0
- dc.w 20
- dc.w 98
- dc.l TextAttr
- dc.l .4+460
- dc.l _AboutText+180
-
- ;=========================== TEXT ============================
- XDEF _textline
- _textline:
- dc.l SC1
- dc.l SC2
- dc.l SC3
- dc.l SC4
- dc.l SC5
- dc.l SC6
- dc.l SC7
- dc.l SC8
- dc.l SC9
- dc.l SC10
- dc.l SC11
- dc.l SC12
- dc.l SC13
- dc.l SC14
- dc.l SC15
- dc.l SC16
- dc.l SC17
- dc.l SC18
- dc.l SC19
- dc.l SC20
- dc.l SC21
- dc.l SC22
- dc.l SC23
- dc.l SC24
- dc.l SC25
- dc.l SC26
- dc.l SC27
-
- XDEF _InstructText
- _InstructText:
- dc.b 6
- dc.b 0
- dc.b 1
- dc.b 0
- dc.w 16
- dc.w 9
- dc.l TextAttr
- dc.l .5+0
- dc.l $0000
-
- dc.b 6
- dc.b 0
- dc.b 1
- dc.b 0
- dc.w 16
- dc.w 18
- dc.l TextAttr
- dc.l .5+47
- dc.l _InstructText
-
- dc.b 6
- dc.b 0
- dc.b 1
- dc.b 0
- dc.w 16
- dc.w 27
- dc.l TextAttr
- dc.l .5+94
- dc.l _InstructText+20
-
- dc.b 6
- dc.b 0
- dc.b 1
- dc.b 0
- dc.w 16
- dc.w 36
- dc.l TextAttr
- dc.l .5+141
- dc.l _InstructText+40
-
- dc.b 6
- dc.b 0
- dc.b 1
- dc.b 0
- dc.w 16
- dc.w 45
- dc.l TextAttr
- dc.l .5+188
- dc.l _InstructText+60
-
- dc.b 6
- dc.b 0
- dc.b 1
- dc.b 0
- dc.w 16
- dc.w 54
- dc.l TextAttr
- dc.l .5+235
- dc.l _InstructText+80
-
- dc.b 6
- dc.b 0
- dc.b 1
- dc.b 0
- dc.w 16
- dc.w 63
- dc.l TextAttr
- dc.l .5+282
- dc.l _InstructText+100
-
- dc.b 6
- dc.b 0
- dc.b 1
- dc.b 0
- dc.w 16
- dc.w 72
- dc.l TextAttr
- dc.l .5+329
- dc.l _InstructText+120
-
- dc.b 6
- dc.b 0
- dc.b 1
- dc.b 0
- dc.w 16
- dc.w 81
- dc.l TextAttr
- dc.l .5+376
- dc.l _InstructText+140
-
- dc.b 6
- dc.b 0
- dc.b 1
- dc.b 0
- dc.w 16
- dc.w 90
- dc.l TextAttr
- dc.l .5+423
- dc.l _InstructText+160
-
- dc.b 6
- dc.b 0
- dc.b 1
- dc.b 0
- dc.w 16
- dc.w 99
- dc.l TextAttr
- dc.l .5+470
- dc.l _InstructText+180
-
- dc.b 6
- dc.b 0
- dc.b 1
- dc.b 0
- dc.w 16
- dc.w 108
- dc.l TextAttr
- dc.l .5+517
- dc.l _InstructText+200
-
- dc.b 6
- dc.b 0
- dc.b 1
- dc.b 0
- dc.w 16
- dc.w 117
- dc.l TextAttr
- dc.l .5+564
- dc.l _InstructText+220
-
- dc.b 6
- dc.b 0
- dc.b 1
- dc.b 0
- dc.w 16
- dc.w 126
- dc.l TextAttr
- dc.l .5+611
- dc.l _InstructText+240
-
- XDEF _OKText
- _OKText:
- dc.b 6
- dc.b 0
- dc.b 1
- dc.b 0
- dc.w 6
- dc.w 3
- dc.l TextAttr
- dc.l .6
- dc.l $0000
-
- .6 dc.b 32,80,114,111,99,101,101,100,32,0
-
- XDEF _Menu0IText
- _Menu0IText:
- dc.b 6
- dc.b 0
- dc.b 1
- dc.b 0
- dc.w 0
- dc.w 0
- dc.l TextAttr
- dc.l .7+0
- dc.l $0000
-
- dc.b 6
- dc.b 0
- dc.b 1
- dc.b 0
- dc.w 0
- dc.w 0
- dc.l TextAttr
- dc.l .7+22
- dc.l $0000
-
- dc.b 6
- dc.b 0
- dc.b 1
- dc.b 0
- dc.w 0
- dc.w 0
- dc.l TextAttr
- dc.l .7+44
- dc.l $0000
-
- dc.b 6
- dc.b 0
- dc.b 1
- dc.b 0
- dc.w 0
- dc.w 0
- dc.l TextAttr
- dc.l .7+66
- dc.l $0000
-
- XDEF _Menu1IText
- _Menu1IText:
- dc.b 6
- dc.b 0
- dc.b 1
- dc.b 0
- dc.w 0
- dc.w 0
- dc.l TextAttr
- dc.l INSTR
- dc.l $0000
-
- dc.b 6
- dc.b 0
- dc.b 1
- dc.b 0
- dc.w 0
- dc.w 0
- dc.l TextAttr
- dc.l ABOUT
- dc.l $0000
-
- XDEF _Menu0Item
- _Menu0Item:
- dc.l _Menu0Item+34
- dc.w 0,0,210,9
- dc.w 82
- dc.l $0000
- dc.l _Menu0IText
- dc.l $0000
- dc.b 0,0
- dc.l $0000
- dc.w -1
-
- dc.l _Menu0Item+68
- dc.w 0,9,210,9
- dc.w 82
- dc.l $0000
- dc.l _Menu0IText+20
- dc.l $0000
- dc.b 0,0
- dc.l $0000
- dc.w -1
-
- dc.l _Menu0Item+102
- dc.w 0,18,210,9
- dc.w 82
- dc.l $0000
- dc.l _Menu0IText+40
- dc.l $0000
- dc.b 0,0
- dc.l $0000
- dc.w -1
-
- dc.l $0000
- dc.w 0,27,210,9
- dc.w 82
- dc.l $0000
- dc.l _Menu0IText+60
- dc.l $0000
- dc.b 0,0
- dc.l $0000
- dc.w -1
-
- XDEF _Menu1Item
- _Menu1Item:
- dc.l _Menu1Item+34
- dc.w 0,0,140,9
- dc.w 82
- dc.l $0000
- dc.l _Menu1IText
- dc.l $0000
- dc.b 0,0
- dc.l $0000
- dc.w -1
-
- dc.l $0000
- dc.w 0,9,140,9
- dc.w 82
- dc.l $0000
- dc.l _Menu1IText+20
- dc.l $0000
- dc.b 0,0
- dc.l $0000
- dc.w -1
-
- XDEF _BdMenu
- _BdMenu:
- dc.l _BdMenu+30
- dc.w 40
- dc.w 0
- dc.w 90
- dc.w 0
- dc.w 1
- dc.l START
- dc.l _Menu0Item
- ds.b 8
-
- dc.l $0000
- dc.w 160
- dc.w 0
- dc.w 130
- dc.w 0
- dc.w 1
- dc.l INFO
- dc.l _Menu1Item
- ds.b 8
-
- SC1 dc.b 'Players'
- SC2:
- SC9:
- SC12:
- SC20:
- SC22:
- dc.b 0
- SC3 dc.b 'Aces ',0
- SC4 dc.b 'Twos ',0
- SC5 dc.b 'Threes ',0
- SC6 dc.b 'Fours ',0
- SC7 dc.b 'Fives ',0
- SC8 dc.b 'Sixes ',0
- SC10 dc.b 'Upper Total',0
- SC11 dc.b 'Bonus ',0
- SC13 dc.b '3 of a Kind',0
- SC14 dc.b '4 of a Kind',0
- SC15 dc.b 'Full House ',0
- SC16 dc.b 'Sm Straight',0
- SC17 dc.b 'Lg Straight',0
- SC18 dc.b 'Yacht ',0
- SC19 dc.b 'Yarboro ',0
- SC21 dc.b 'Lower Total',0
- SC23 dc.b 'Grand Total',0
- SC24 dc.b ' One ',0
- SC25 dc.b ' Two ',0
- SC26 dc.b ' Three ',0
- SC27 dc.b ' Four ',0
-
- .4 dc.b ' ',0
- dc.b ' YachtC ',0
- dc.b ' Copyright 1985 by Sheldon Leemon ',0
- dc.b ' ',0
- dc.b ' You may copy and distribute this program ',0
- dc.b ' freely (i.e. for no money), but any kind ',0
- dc.b ' of commercial exploitation is a no-no. ',0
- dc.b ' **** Version 4.0 by Jeff Glatt **** ',0
- dc.b ' Based on a version by Mark Schretlen with ',0
- dc.b ' "scales" sound sources by Steve Bennett. ',0
- dc.b ' ',0
-
- .5 dc.b ' ',0
- dc.b ' Instructions ',0
- dc.b ' ',0
- dc.b ' To start game, select 1-4 Player game from ',0
- dc.b ' the Project menu. Each player gets up to ',0
- dc.b ' 3 rolls of the dice to make the best hand ',0
- dc.b ' possible. Click on the dice you wish to ',0
- dc.b ' change, then click on the button below the ',0
- dc.b ' dice to roll. If you are satisfied with ',0
- dc.b ' your hand, and wish to score, click on the ',0
- dc.b ' button without blanking any dice. All ',0
- dc.b ' possible scores will appear in purple on ',0
- dc.b ' the scorepad. Click on the one you want. ',0
- dc.b ' ',0
-
- .7 dc.b ' Start 1-Player Game ',0
- dc.b ' Start 2-Player Game ',0
- dc.b ' Start 3-Player Game ',0
- dc.b ' Start 4-Player Game ',0
-
- INSTR dc.b ' Instructions ',0
- ABOUT dc.b ' About YachtC ',0
-
- START dc.b ' Start ',0
- INFO dc.b ' Information ',0
-
- FontName dc.b 'topaz.font',0
- IntuitionName dc.b 'intuition.library',0
- GfxName dc.b 'graphics.library',0
-
- NBTitle dc.b ' YachtC (V4.0) ',0
- Spaces dc.b ' ',0
-
- END
-