trog/TROGTIPS.ASM

1877 lines
46 KiB
NASM
Raw Permalink Blame History

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

.MLIB "TROGMACS.LIB"
.FILE 'TROGTIPS.ASM'
.TITLE " <<< T R O G -- TIPS, LIES AND VIDEOTAPE >>>"
.WIDTH 132
.OPTION B,D,L,T
.MNOLIST
**************************************************************************
* *
* COPYRIGHT (C) 1990 MIDWAY MANUFACTURING COMPANY, *
* MANUFACTURERS OF BALLY/MIDWAY AMUSEMENT GAMES. *
* ALL RIGHTS RESERVED. *
* *
**************************************************************************
.INCLUDE "MPROCEQU.ASM" ; MPROC equates
.INCLUDE "DISPEQU.ASM" ; Display processor equates
.INCLUDE "GSPINC.ASM" ; GSP assembler equates
.INCLUDE "SYSINC.ASM" ; Zunit system equates
.INCLUDE "TROGEQU.ASM" ; PALETTE HANDLER STUFF
.INCLUDE "IMGTBL.GLO"
.INCLUDE "STRING.H"
.INCLUDE "TROGAEQU.ASM" ;DINO ANIMATION EQUATES
.INCLUDE "TROGSEQU.ASM"
.DEF HBOX_COLORS, WAVE1_HELP, KILL_HELP, BONE_TIP4
.DEF PLACE_TEXT, WAIT_FOR_BONE, PLAYER_ENABLE
.DEF PLACE_MESS_DIR, WAVE2_HELP, END_TUTOR
.REF SLEEP_SWITCHX, WIPEOUT, TOMOVE, GET_DIRECTIONS_TO_MOVE
.REF P1BOXBONEh, P1BOXBONEv, DRONE_MOVE, DRONE_BONE
.REF OWINDOW, OWINDOW_OID, GPLAYNUM, BARTAB, SPLAYER_NUM
.REF SPLAYER_COL, DINO_START, EGG_START, TWO_MOVES
.REF TIP1_FLAG, TIP2_FLAG, TIP3_FLAG, TIP4_FLAG, TIP5_FLAG
.REF TIP6_FLAG, TIP2A_FLAG, DINO_FIND_CLOSEST, FINDMOVE
.REF ONE_MOVE, BONED_IN_4, GET_DIRECTIONS, TUTOR, EGG_START_IMM
.REF STORY_MODE, TIP8_FLAG, FIND_CLOSE_MPNT, LAY_EGGS
.BSS HELP_PAUSE,16,1 ;VARIABLE PAUSE TIME
TIP_ZPOS EQU 2800H ;TIP BASE Z POSITION
HELP_ZPOS EQU PIZPOS-1
END_TUTOR EQU 2 ;AFTER THIS WAVE, NO MORE TUTORIALS
.TEXT
.EVEN
HDINO .EQU PDATA
HTEMP1 .EQU PDATA+20H
**************************************************************************
* *
* WAVE1_HELP - PROCESS TO START OFF THE PLAYER FOR THE FIRST WAVE *
* STARTS WITH A BRIEF TUTORIAL. *
* A11 = PLAYER TO START *
* *
**************************************************************************
WAVE1_HELP:
MOVE @TUTOR,A0,W ;IN TUTOR MODE?
JRZ WAVEX_START ;BR = NO,JUST START THE STUFF
MOVI (10*63)/3,A1
MOVE @GAME_STATE,A0
CMPI INAMODE,A0
JRNE W1H_PTIME
MOVI (1*63)/3,A1
W1H_PTIME:
MOVE A1,@HELP_PAUSE,W
MOVK 1,A0
MOVE A0,*A11(PINSTRUCT),W ;MARK INSTRUCTIONAL MODE
MOVE A0,@TUTOR,W ;PUT HIM IN TUTOR MODE
CALLR PLAYER_DISABLE
*
*THIS IS A TEST TO SHORTEN THE INSTRUCTIONAL MODE, IT SKIPS STRAIGHT TO
*THE DINO & HAND STUFF (GNP 6/8/90)
MOVE @TIP1_FLAG,A0,W
JRNZ W1H_NEWHELP
SLEEP 30 ;LET SHIT COME UP
INCM @TIP1_FLAG,W
W1H_NEWHELP
MOVE *A11(POBJ),A8,L
CALLA OBJ_ON
MOVK DOWN,A0
MOVE *A11(PMOVE),A1,L
CALLA TWO_MOVES
CALLA TWO_MOVES
MOVE A1,*A13(HTEMP1),L
**** MOVE @TIP1_FLAG,A0,W
**** JRNZ WAVE1_HELP_IMM
**** SLEEP 30 ;LET SHIT COME UP
**** JSRP TROG_TIP1
****WAVE1_HELP_IMM:
**** MOVE *A11(POBJ),A8,L
**** CALLA OBJ_ON
**** JSRP POINT_HAND ;POINT OUT HIS HAND
**** MOVK DOWN,A0
**** MOVE *A11(PMOVE),A1,L
**** CALLA TWO_MOVES
**** CALLA TWO_MOVES
**** MOVE A1,A10
*****POINT OUT THE PLACE WE WANT HIM TO GO
**** CALLR KILL_HELP
**** SLEEP 5 ;MAKE IT LOOK NICE
**** MOVI MOVE_TEXT,A8
**** CLR A9 ;MOVK UP,A9
**** MOVE A10,A6
**** MOVE *A10(MOVEPOS),A10,L
**** CREATE INDPID,HELP_BOX
**** MOVE A6,A9
**** CLR A0
**** MOVE A0,*A11(PNOMOVE),W
*****WAIT ON PLAYER TO GET TO THIS MOVE SPOT
***** MOVI (10*62)/3,A8
**** MOVE @HELP_PAUSE,A8,W
****W1H_LP:
**** SLEEP 3
**** MOVE *A11(PMOVE),A10,L
**** CMP A9,A10 ;DID HE MAKE IT?
**** JREQ W1H_THERE ;BR = YES
**** DEC A8 ;TAKEN TOO LONG?
**** JRNZ W1H_LP ;BR = NO
**** JSRP HAND_TO_MOVE ;HELP THE PLAYER ALONG
****W1H_THERE
**** CALLR PLAYER_DISABLE
**** MOVE *A11(POBJ),A8,L
**** MOVE A9,A0
**** CALLA TOMOVE ;RE-ALIGN THAT HAND
****
*****PLAYER COMPLETED THE MOVE PORTION, NOW GIVE HIM HIS DIPLOMA
**** CALLR KILL_HELP
**** SLEEP 5 ;MAKE IT LOOK NICE
****
**** MOVE *A9(MOVEPOS),A10,L
****
**** MOVE @STORY_MODE,A0,W
**** JRNE W1H_BONEHELP
****
**** MOVI GOOD_TEXT,A8
**** CLR A9 ;MOVK UP,A9
**** CREATE INDPID,HELP_BOX
****
**** MOVK 30,A0
**** JSRP BONESLEEP_30
****
**** CALLA KILL_HELP
**** SLEEP 5
****
*****BONE DRAWING HELP
****W1H_BONEHELP:
**** JSRP TROG_TIP2
**** SLEEP 5
*****NOW FOR OUR NEXT LESSON, BONE DRAWING 101
**** CALLR PLACE_MESSAGE
**** CALLR PLAYER_ENABLE
**** MOVE *A11(PMOVE),A9,L ;WE ARE WAITING ON THIS MOVE
**** JSRP WAIT_FOR_BONE
**** CALLR PLAYER_DISABLE
**** MOVE *A11(POBJ),A8,L
**** MOVE A10,A0
**** CALLA TOMOVE ;RE-ALIGN THAT HAND
*****CONGRATULATE THE PLAYER FOR BONING
**** CALLR KILL_HELP
**** SLEEP 5 ;MAKE IT LOOK NICE
****
**** MOVE @STORY_MODE,A0,W
**** JRNE W1H_ERASEHELP
****
**** PUSHP A10
**** MOVI NICE_TEXT,A8
**** CLR A9 ;MOVK UP,A9
**** MOVE *A10(MOVEPOS),A10,L
**** CREATE INDPID,HELP_BOX
**** PULLP A10
****
**** MOVK 30,A0
**** JSRP BONESLEEP_30
****
**** CALLR KILL_HELP
**** SLEEP 5
****
*****BONE ERASING HELP
****W1H_ERASEHELP:
**** JSRP TROG_TIP2A
**** SLEEP 5
**** MOVE A10,A9
**** MOVE *A9(MOVEPOS),A10,L
**** CALLR REMOVE_MESSAGE
**** CALLR PLAYER_ENABLE
**** MOVE *A11(PMOVE),A9,L ;WE ARE WAITING ON THIS MOVE
**** JSRP WAIT_FOR_REMOVE
**** CALLR PLAYER_DISABLE
**** MOVE *A11(POBJ),A8,L
**** MOVE A10,A0
**** CALLA TOMOVE ;RE-ALIGN THAT HAND
*****CONGRATULATE THE PLAYER
**** CALLR KILL_HELP
**** SLEEP 5 ;MAKE IT LOOK NICE
****
**** MOVE A10,*A13(HTEMP1),L
****
**** MOVE @STORY_MODE,A0,W
**** JRNE W1H_DINOHELP
****
**** MOVI GOODJ_TEXT,A8
**** CLR A9 ;MOVK UP,A9
**** MOVE *A10(MOVEPOS),A10,L
**** CREATE INDPID,HELP_BOX
****
**** MOVK 30,A0
**** JSRP BONESLEEP_30
****
**** CALLR KILL_HELP
**** SLEEP 5
*DINO HELP
W1H_DINOHELP:
JSRP TROG_TIP3
SLEEP 5
CALLR PLAYER_ENABLE
MOVK 1,A0
MOVE A0,*A11(PDINOSTOP),W ;TURN DINO OFF
MOVE A11,A2
CALLA DINO_START ;FIRE UP THE DUDES DINO
CALLA GPLAYNUM
ORI DINOOID,A0
MOVE A0,A9
MOVI DINOS,A10
JSRP WAIT_FOR_OBJ
MOVE A8,*A13(HDINO),L
CALLA GET_BOTTOM_MID
MOVE A1,A10
MOVI HELP_TEXT,A8
CLR A9 ;MOVK UP,A9
CREATE INDPID,HELP_BOX
MOVI 140,A0
JSRP BONESLEEP_30
CALLA KILL_HELP
SLEEP 5
CLR A0
MOVE A0,*A11(PDINOSTOP),W
MOVK DOWN,A0
MOVE *A13(HTEMP1),A1,L ;GET OUR CURRENT MOVE
CALLA TWO_MOVES
CALLA TWO_MOVES
MOVI PLACE_TEXT,A8
MOVE *A1(MOVEPOS),A10,L
MOVK 1,A9
CALLA CREATE_HELP
MOVE A1,A10
CLRM *A11(PSWITCHESC),W
MOVE A11,A2
CALLA GPLAYNUM
MOVE A0,A9
MOVE @HELP_PAUSE,A8,W
W1HBW_LP:
SLEEP 3
MOVE *A11(PBONEHIT),A0,W ;BONE COLLISION DURING WAIT?
JRNZ W1H_EGG ;BR = YES
MOVB *A10(MOVEPLYR),A0
JRNN W1HBW_X
MOVE *A11(PSWITCHESC),A0,W ;DID HE BONE ELSEWHERE?
JRZ W1HBW_NXT
SLEEP 6
MOVB *A10(MOVEPLYR),A0 ;CHECK AGAIN FOR ANI SAKE
JRNN W1HBW_X
JSRP FLASH_TEXT
JSRP FLASH_TEXT
CLRM *A11(PSWITCHESC),W
W1HBW_NXT:
DSJ A8,W1HBW_LP
*PLACE HAND OURSELVES
MOVE A10,A9
JSRP HAND_TO_MOVE
CALLR PLAYER_DISABLE
MOVE *A11(POBJ),A8,L
MOVE A9,A0
CALLA TOMOVE ;RE-ALIGN THAT HAND
JSRP DRONE_BONE ;BONE ACTION MAN
CALLR PLAYER_ENABLE
W1HBW_X
CALLR KILL_HELP
SLEEP 5
MOVE *A11(PBONEHIT),A0,W ;WAS THIS BY ANOTHER NAME
JRNZ W1H_EGG ;BR = YES
MOVE @STORY_MODE,A0,W
JRNE W1HT4_LP
MOVI GREAT_TEXT,A8
MOVE *A10(MOVEPOS),A10,L
MOVK 1,A9
CALLA CREATE_HELP
MOVK 30,A0
JSRP BONESLEEP_30
CALLR KILL_HELP
*BONE DEFLECT HELP
W1HT4_LP
SLEEP 3
MOVE *A11(PBONEHIT),A0,W ;BONE COLLISION DURING WAIT?
JRZ W1HT4_LP ;BR = NO
*EGG HELP
W1H_EGG:
CALLR KILL_HELP
SLEEP 100
JSRP TROG_TIP5
MOVK 1,A0
MOVE A0,*A11(PDINOSTOP),W ;STOP THE PLAYERS DINOSAUR
*SPECIFIC EGG LAYER
MOVE A11,A2
CALLA GPLAYNUM
MOVE A0,A9
ORI EGGOID,A9
SLL 5,A0
ADDI W1_EGG_POS,A0
MOVE *A0,A10,L
CALLA EGG_START_IMM
MOVI EGGS,A10
JSRP WAIT_FOR_OBJ
CALLA GETCPNT
MOVE A1,A10
MOVI EGG_TEXT,A8
MOVK 1,A9
CALLR CREATE_HELP
SLEEP 30
MOVI 100,A0
JSRP BONESLEEP_30
CALLA KILL_HELP
SLEEP 5
*COMMUNITY EGG LAYER
.IF 0
MOVI LIST_O_EGGS,A1
CALLA LAY_EGGS
SLEEP 30
.ENDIF
W1HH_LP:
MOVI HOUSELST,A1
MOVI HOUSEOID|PXPLAYER,A0
CALLA ISSUPPID ;LOOK FOR GLOBAL HOUSE FIRST
JRZ W1HH_SPEC
MOVE A1,A8
CALLA GETANIXY_PACKED
MOVE A3,A1
CALLA FIND_CLOSE_MPNT
MOVE *A0(MOVEEPTR),A9,L
JRUC W1HH_HOUSE_TIP
W1HH_SPEC
MOVE *A11(PEXITPNT),A9,L
MOVE *A9(EMOVEOBJ),A0,L
JRNZ W1HH_HOUSE_TIP
MOVE *A13(HDINO),A8,L
JSRP HELP_DINO
SLOOP 5,W1HH_LP
W1HH_HOUSE_TIP:
MOVE @TIP6_FLAG,A0,W
JRNE W1HHH_LP
JSRP TROG_TIP6
MOVK 1,A0
MOVE A0,*A11(PDINOSTOP),W ;STOP! LITTLE DINO MAN.
MOVE *A9(EMOVEPOS),A10,L
MOVB *A9(EMOVEDIR),A9
MOVI HOME_TEXT,A8
CREATE INDPID,HELP_BOX
MOVI 140,A0
JSRP BONESLEEP_30
CALLR KILL_HELP
W1HHH_LP:
**** MOVE @GAME_STATE,A0,W
**** CMPI INPLAY,A0
**** JRNE W1HHH_NXT
MOVE @WAVE_OVER,A0,W
JRNZ W1HHH_NXT
MOVE *A13(HDINO),A8,L
JSRP HELP_DINO ;HELP THE LITTLE DINO HOME
W1HHH_NXT:
SLOOP 5,W1HHH_LP
DIE
W1_EGG_POS:
.LONG [120,66],[120,130],[120,258],[120,322]
LIST_O_EGGS
.LONG [120,194],[152,194],[184,194],0
**************************************************************************
* *
* WAVE2_HELP - PROCESS TO START OFF THE PLAYER FOR THE SECOND WAVE *
* GIVES THE PLAYER A REMINDER OF WHO HE IS AND *
* HOW MANY EGGS TO PICK UP. *
* A11 = PLAYER TO START *
* *
**************************************************************************
WAVE2_HELP:
MOVE @TUTOR,A0,W ;IN TUTOR MODE?
JRZ WAVEX_START ;BR = NO,JUST START THE STUFF
MOVI (10*63)/3,A1
MOVE A1,@HELP_PAUSE,W
CALLR PLAYER_DISABLE
MOVE @TIP8_FLAG,A0,W
JRNZ WAVE2_HELP_IMM
SLEEP 30 ;LET SHIT COME UP
JSRP TROG_TIP8
WAVE2_HELP_IMM:
MOVE *A11(POBJ),A8,L
CALLA OBJ_ON
MOVE A11,A2
CALLA GPLAYNUM
MOVE A0,A9
ORI DINOOID,A9
*OUTPUT A PATTERN OF THIS GUYS EGGS
SLL 5,A0
ADDI W2_EGG_POS,A0
MOVE *A0,A0,L
W2ES_LP:
MOVE *A0+,A10,L
JRZ W2ESD
CALLA EGG_START_IMM
JRUC W2ES_LP
W2ESD:
**** JSRP POINT_HAND
CALLR PLAYER_ENABLE
MOVK 1,A0
MOVE A0,*A11(PDINOSTOP),W ;TURN DINO OFF
MOVE A11,A2
CALLA DINO_START ;FIRE UP THE DUDES DINO
MOVI DINOS,A10
JSRP WAIT_FOR_OBJ
MOVE A8,*A13(HDINO),L
SLEEP 60 ;PAUSE ON DINO FIRST
CLR A0
MOVE A0,*A11(PDINOSTOP),W
DIE
*ALL HELP ENDS LIKE THIS
*A11 = PLAYER DATA
WAVEX_START:
MOVE *A11(POBJ),A8,L
CALLA OBJ_ON
MOVE A11,A2
CALLA DINO_START
CALLA EGG_START
DIE
*
*WAVE 2 CANNED EGG POSITIONS
W2_EGG_POS:
.LONG P1W2_LAY, P2W2_LAY, P3W2_LAY, P4W2_LAY
P1W2_LAY:
.LONG [216,98]
.LONG [152,162]
.LONG [184,258]
.LONG 0
P2W2_LAY:
.LONG [120,98]
.LONG [216,162]
.LONG [184,322]
.LONG 0
P3W2_LAY:
.LONG [184,66]
.LONG [216,226]
.LONG [120,290]
.LONG 0
P4W2_LAY:
.LONG [184,130]
.LONG [152,226]
.LONG [216,290]
.LONG 0
**************************************************************************
* *
* POINT_HAND - PROCESS SUBROUTINE TO POINT OUT THE PLAYERS HAND. *
* A11 = PTR TO PLAYER DATA AREA. *
* *
**************************************************************************
****POINT_HAND:
**** MMTM A12,A8,A9,A10
**** MOVE *A11(PMOVE),A10,L
**** MOVI YOU_TEXT,A8 ;MESSAGE THIS
**** MOVK 1,A9
**** MOVE *A10(MOVEPOS),A10,L
**** CALLR CREATE_HELP
**** MOVI 170,A0
**** JSRP JOYSLEEP_30
**** CALLR KILL_HELP
**** SLEEP 5 ;KILL MESSAGE
**** MMFM A12,A8,A9,A10
**** RETP
**************************************************************************
* *
* HELP_DINO - PROCESS SUBROUTINE TO DETERMINE THE NEXT SPOT THAT A *
* BONE SHOULD BE PLACED TO MAKE A DINOSAUR WALK TOWARDS *
* SOMETHING GOOD. *
* A8 = PTR TO DINO *
* A11 = PTR TO PLAYER CONTROLLING THIS DINO *
* NOTE: CALL WITH JSRP *
* TRASHES A8-A10, PTEMP1 - PTEMP3 *
* *
**************************************************************************
HELP_DINO:
CLR A0
MOVE A0,*A11(PDINOSTOP),W
MOVE A13,A9
MOVE *A8(OPLINK),A13,L
CALLA DINO_FIND_CLOSEST
MOVE A1,A4
CALLA GET_DIRECTIONS
SWAP A13,A9
MOVE A1,*A13(PTEMP1),W
MOVE A4,A8
CALLA GETANIXY_PACKED ;GET TARGET CENTER POSITION
MOVE A3,A2
MOVE *A9(TCURMPOS),A3,L ;GET THE DINOS CURRENT MOVE POSITION
CALLA FINDMOVE ;NOW FIND THE POINT
JRNC HELP_DINO_X
MOVE A1,*A13(PTEMP2),L
SWAP A2,A3
MOVE *A9(DDIR),A1,W
MOVE A1,A8
CALLR GET_NEXT_TURN
JRZ HELP_DINO_X
MOVE A1,A9
MOVE A4,*A13(PTEMP3),W
*CHECK THE 1x1 BOX
MOVE *A13(PTEMP2),A0,L
MOVE A0,A1
CALLA BONED_IN_4
JRNZ HD_REMOVE_LP
MOVE *A13(PTEMP1),A1,W
CALLA ONE_MOVE
JRZ HELP_DINO_X
MOVB *A1(MOVEPLYR),A0
JRN HELP_DINO_X
JSRP WAIT_MOVE_REMOVE
JRUC HELP_DINO_X
HD_REMOVE_LP
CMP A1,A9
JREQ HELP_BONE_HERE
MOVB *A1(MOVEPLYR),A6
JRNN HELP_BONE_REMOVE
MOVE A1,A0
MOVE A8,A1
CALLA ONE_MOVE
JRNZ HD_REMOVE_LP
JRUC HELP_DINO_X
HELP_BONE_REMOVE:
JSRP WAIT_MOVE_REMOVE
JRUC HD_REMOVE_LP
*NOW TELL HIM TO PLACE A BLOCKER BONE, UNLESS HE IS IN FRONT OF HIS HOUSE
HELP_BONE_HERE
MOVE *A9(MOVEEPTR),A1,L ;IS THIS AN EXIT MOVE?
JRN HELP_BONE_OK ;BR = NO
MOVB *A1(EMOVEPLYR),A0
CMPI PXPLAYER,A0 ;IS IT A COMMUNITY EXIT?
JREQ HB_ALL_EXIT ;BR = YES
MOVE *A11(PEXITPNT),A1,L
MOVE *A1(EMOVEMPTR),A0,L
CMP A0,A9 ;IS THIS OUR PLAYERS EXIT?
JRNE HELP_BONE_OK ;BR = NO
HB_ALL_EXIT
MOVE *A1(EMOVEOBJ),A0,L ;IS THERE A HOUSE ON THIS EXIT?
JRZ HELP_BONE_OK ;BR = NO
MOVB *A9(MOVEPLYR),A1 ;BONE IN FRONT OF THIS HOUSE?
JRN HELP_DINO_X ;BR = NO
MOVE A9,A1
JSRP WAIT_MOVE_REMOVE ;REMOVE THAT BONE!
JRUC HELP_DINO_X
HELP_BONE_OK:
MOVE *A13(PTEMP3),A1,W
JRNE HELP_DINO_X
MOVB *A9(MOVEPLYR),A1 ;IS THERE A BONE HERE?
JRNN HELP_DINO_X ;BR = YES, THEN NO NEW ONE
MOVK 1,A0
MOVE A0,*A11(PDINOSTOP),W
MOVE A9,A0
CALLR PLACE_MESS_DIR
JSRP WAIT_FOR_BONE
CALLR PLAYER_ENABLE
CALLR KILL_HELP
HELP_DINO_X:
RETP
**************************************************************************
* *
* GET_NEXT_TURN - GET THE NEXT TURN POINT FOR AN OBJECT *
* A1 = OBJECT DIRECTION *
* A2 = OBJECT [Y,X] *
* A3 = TARGET [Y,X] *
* RETURNS: *
* Z = NO POINT FOUND (A1 = 0) *
* A1 = 0 *
* A4 = UNDEFINED *
* NZ = POINT FOUND (A1 = PTR TO MOVE) *
* A1 = PTR TO MOVE *
* A4 = 1 IF TARGET IN SIGHT, OTHERWISE 0 *
* *
**************************************************************************
GET_NEXT_TURN:
MMTM SP,A0,A2,A3,A8
CLR A4
CMPI UP,A1
JREQ GNT_UP
CMPI DOWN,A1
JREQ GNT_DOWN
CMPI LEFT,A1
JREQ GNT_LEFT
*OBJECT MOVING RIGHT
CMPXY A2,A3
JRXLE GNT_IMM ;IMMEADIATELY DRAW BONE IN FRONT
JRUC GNT_INTERSECT_X
*OBJECT MOVING LEFT
GNT_LEFT:
CMPXY A2,A3
JRXGE GNT_IMM
JRUC GNT_INTERSECT_X
*DINO MOVING DOWN
GNT_DOWN:
CMPXY A2,A3
JRYLE GNT_IMM
JRUC GNT_INTERSECT_Y
*DINO MOVING UP
GNT_UP:
CMPXY A2,A3
JRYGE GNT_IMM
GNT_INTERSECT_Y:
JRXNE GNT_IY_NE ;IN LINE OF SIGHT? BR = NO
INC A4
GNT_IY_NE:
MOVY A3,A2
JRUC GNT_IMM
GNT_INTERSECT_X:
JRYNE GNT_IX_NE ;IN LINE OF SIGHT? BR = NO
INC A4
GNT_IX_NE:
MOVX A3,A2
*A1 = CURRENT DINO DIRECTION
*A2 = CURRENT [Y,X] DINO MOVE POINT POSITION, OR DINO TARGET INTERSECT
*A4 = LINE OF SIGHT FLAG
GNT_IMM:
MOVE A1,A8
MOVE A2,A3
CALLA FINDMOVE
JRNC GNT_FAIL
MOVE A1,A0
MOVE A8,A1
CALLA ONE_MOVE
JRNZ GNT_CHECK ;FUNKY END OF ISLAND SHIT
MOVE A0,A1 ;JUST USE THE LAST POINT
GNT_CHECK:
MOVB *A1(MOVETYPE),A3
CMPI HORBAR,A3
JREQ GNT_POINT
CMPI VERTBAR,A3
JREQ GNT_POINT
MOVE A1,A0
MOVE A8,A1
CALLA ONE_MOVE
JRNZ GNT_POINT
GNT_FAIL:
CLR A1
JRUC GNT_X
GNT_POINT:
MOVE A1,A3
MOVE A1,A0
MOVE A8,A1
CALLA ONE_MOVE ;CHECK TO SEE IF WE END IN DEATH
JRNZ GNT_INNER_POINT ;BR = NO
CLR A4 ;FREAKIN' DRAW A SAFETY BONE DUDE!
GNT_INNER_POINT:
MOVE A3,A1
GNT_X:
MMFM SP,A0,A2,A3,A8
RETS
**************************************************************************
* *
* WAIT_FOR_OBJ - PROCESS SUBROUTINE TO WAIT FOR THE FIRST OCCURANCE *
* OF AN OBJECT ON A SUPP LIST THEN RETURN. *
* A9 = OID OF OBJECT *
* A10 = SUPPLEMENTAL LIST *
* RETURNS: *
* A8 = OBJECT *
* NOTE: CALL WITH JSRP *
* *
**************************************************************************
WAIT_FOR_OBJ:
SLEEP 5
MOVE A9,A0
MOVE A10,A1
CALLA ISSUPPID
JRZ WAIT_FOR_OBJ
MOVE A1,A8
RETP
**************************************************************************
* *
* PLAYER_DISABLE - DISABLE THE PLAYERS CONTROLS, JOYSTICK AND BUTTON. *
* A11 = PTR TO PLAYER DATA AREA *
* NOTE: TRASHES A0 *
* *
**************************************************************************
PLAYER_DISABLE:
MOVK 1,A0
JRUC PDG
**************************************************************************
* *
* PLAYER_ENABLE - ENABLE THE PLAYERS CONTROLS, JOYSTICK AND BUTTON. *
* A11 = PTR TO PLAYER DATA AREA *
* NOTE: TRASHES A0 *
* *
**************************************************************************
PLAYER_ENABLE:
CLR A0
PDG:
MOVE A0,*A11(PNOMOVE),W
MOVE A0,*A11(PNODRAW),W
RETS
**************************************************************************
* *
* WAIT_FOR_BONE - WAIT FOR PLAYER TO PLACE A BONE ON A GIVEN MOVE. *
* IF IT DOESN'T GET A BONE IT WILL START TO BITCH *
* AT THE PLAYER THEN EVENTUALLY MOVE THE HAND TO *
* THE SPOT AND PLACE THE BONE ITSELF. *
* A9 = MOVE THAT WE ARE WATCHING *
* A11 = PLAYER DATA AREA *
* RETURNS: *
* A10 = PTR TO CURRENT PLAYER MOVE POINT *
* NOTE: TRASHES A8,A9 *
* *
**************************************************************************
WAIT_FOR_BONE:
MOVE A9,A10
MOVE A11,A2
CALLA GPLAYNUM
MOVE A0,A9
MOVE @HELP_PAUSE,A8,W
CLRM *A11(PSWITCHESC),W
WAITFB_LP:
SLEEP 3
MOVB *A10(MOVEPLYR),A0
JRNN WAITFB_X
MOVE *A11(PSWITCHESC),A0,W ;DID HE BONE ELSEWHERE?
JRZ WAITFB_NXT
SLEEP 6
MOVB *A10(MOVEPLYR),A0 ;CHECK AGAIN FOR ANI SAKE
CMP A0,A9
JREQ WAITFB_X
JSRP FLASH_TEXT
JSRP FLASH_TEXT
CLRM *A11(PSWITCHESC),W
WAITFB_NXT:
DSJ A8,WAITFB_LP
*IF YOU WANT IT DONE, YOU HAVE TO DO IT YOURSELF
MOVE A10,A9
JSRP HAND_TO_MOVE
CALLR PLAYER_DISABLE
MOVE *A11(POBJ),A8,L
MOVE A9,A0
CALLA TOMOVE ;RE-ALIGN THAT HAND
JSRP DRONE_BONE ;BONE ACTION MAN
WAITFB_X:
RETP
**************************************************************************
* *
* WAIT_FOR_REMOVE - WAIT FOR PLAYER TO REMOVE A BONE ON A GIVEN MOVE. *
* IF HE DOESN'T IT WILL START TO BITCH *
* AT THE PLAYER THEN EVENTUALLY MOVE THE HAND TO *
* THE SPOT AND REMOVE THE BONE ITSELF. *
* A9 = MOVE THAT WE ARE WATCHING *
* A11 = PLAYER DATA AREA *
* RETURNS: *
* A10 = PTR TO CURRENT PLAYER MOVE POINT *
* NOTE: TRASHES A8,A9 *
* *
**************************************************************************
WAIT_FOR_REMOVE:
MOVE A9,A10
MOVE A11,A2
CALLA GPLAYNUM
MOVE A0,A9
* MOVI (10*62)/3,A8 ;WAIT ON HIM FOR TEN SECS
MOVE @HELP_PAUSE,A8,W
CLRM *A11(PSWITCHESC),W
WAITFR_LP:
SLEEP 3
MOVB *A10(MOVEPLYR),A0
JRN WAITFR_X
MOVE *A11(PSWITCHESC),A0,W ;DID HE BONE ELSEWHERE?
JRZ WAITFR_NXT
SLEEP 6
MOVB *A10(MOVEPLYR),A0 ;CHECK AGAIN FOR ANI SAKE
JRN WAITFR_X
JSRP FLASH_TEXT
JSRP FLASH_TEXT
CLRM *A11(PSWITCHESC),W
WAITFR_NXT:
DSJ A8,WAITFR_LP
*IF YOU WANT IT DONE, YOU HAVE TO DO IT YOURSELF
MOVE A10,A9
JSRP HAND_TO_MOVE
CALLR PLAYER_DISABLE
MOVE *A11(POBJ),A8,L
MOVE A9,A0
CALLA TOMOVE ;RE-ALIGN THAT HAND
WAITFR_BLP:
JSRP DRONE_BONE ;BONE ACTION MAN
MOVB *A10(MOVEPLYR),A0 ;DID WE ERASE IT?
JRNN WAITFR_BLP ;BR = NO, DO IT AGAIN
WAITFR_X:
RETP
**************************************************************************
* *
* WAIT_MOVE_REMOVE - PROCESS SUBROUTINE TO WAIT FOR A BONE TO BE *
* REMOVED FROM A MOVE. *
* A1 = PTR TO MOVE *
* A11 = PTR TO PLAYER DATA *
* RETURNS: *
* A10 = PTR TO MOVE THAT WE WAITED ON *
* NOTE: CALL WITH JSRP *
* *
**************************************************************************
WAIT_MOVE_REMOVE:
MMTM A12,A1,A8,A9
MOVE A1,A9
MOVK 1,A0
MOVE A0,*A11(PDINOSTOP),W
MOVE A9,A0
MOVI REMOVE_TEXT,A8
CALLR MESSAGE_DIR
JSRP WAIT_FOR_REMOVE
CALLR PLAYER_ENABLE
CALLR KILL_HELP
MMFM A12,A1,A8,A9
RETP
**************************************************************************
* *
* FLASH_TEXT - FLASH THE TEXT IN A PLAYERS HELP BOX. OFF AND ON *
* A9 = PLAYER # *
* NOTE: CALL WITH JSRP *
* *
**************************************************************************
FLASH_TEXT:
PUSHP A10 ;GRAB THE PLAYERS ATTENTION
MOVI HTEXTOID,A10
OR A9,A10
MOVE A10,A0
CLR A1
NOT A1
CALLA OBJECTS_OFF
SLEEP 6
MOVE A10,A0
CLR A1
NOT A1
MOVI DMACNZ,A4
CALLA OBJECTS_ON
SLEEP 8
PULLP A10
RETP
**************************************************************************
* *
* JOYSLEEP_30 - PROCESS SUBROUTINE TO SLEEP A GIVEN NUMBER OF TICKS *
* ABOVE AND BEYOND THE 3O MINIMUM REQUIRED. IF *
* THE JOYSTICK IS FOUND MOVING AFTER 30 TICKS THEN *
* IT RETURNS IMMEADIATELY. *
* A0 = NUMBER OF TICKS TO SLEEP PAST 30 *
* A11 = PLAYER DATA AREA *
* RETURNS: *
* Z = NORMAL EXIT *
* NZ = EXIT BECAUSE OF JOYSTICK *
* NOTE: CALL WITH JSRP *
* *
**************************************************************************
JOYSLEEP_30:
MMTM A12,A9,A11
MOVI PJOYESC,A1
JRUC BJS30_G
**************************************************************************
* *
* BONESLEEP_30 - PROCESS SUBROUTINE TO SLEEP A GIVEN NUMBER OF TICKS *
* ABOVE AND BEYOND THE 3O MINIMUM REQUIRED. IF THE BONE *
* BUTTON IS PRESSED AFTER 30 TICKS THEN IT RETURNS *
* IMMEADIATELY. *
* A0 = NUMBER OF TICKS TO SLEEP PAST 30 *
* A11 = PLAYER DATA AREA *
* RETURNS: *
* Z = NORMAL EXIT *
* NZ = EXIT BECAUSE OF BONE BUTTON *
* NOTE: CALL WITH JSRP *
* *
**************************************************************************
BONESLEEP_30:
MMTM A12,A9,A11
MOVI PSWITCHESC,A1
*
*ENTRY FOR BUTTON OR STICK WAIT
*A1 = OFFSET FROM A11 TO LOOK FOR ACTIVITY
BJS30_G:
ADD A1,A11
MOVE A0,A9
SLEEP 30
SRL 2,A9 ;4 TICK RESOLUTION
JRZ BJS30_X
CLRM *A11,W
BJS30_LP:
SLEEP 4
MOVE *A11,A0,W
JRNZ BJS30_X
DSJS A9,BJS30_LP
CLR A9
BJS30_X:
MMFM A12,A9,A11
RETP
**************************************************************************
* *
* HAND_TO_MOVE - PROCESS SUBROUTINE TO KINDLY TAKE A PLAYERS HAND FROM *
* IT'S CURRENT POSITION AND PUT IT WHERE YOU WANT *
* IT. *
* A9 = PTR TO DESIRED MOVE POINT *
* A11 = PLAYER DATA AREA *
* NOTE: CALL WITH JSRP *
* *
**************************************************************************
HAND_TO_MOVE:
PUSHP A8
HANDTM_LP:
MOVE *A11(PMOVE),A0,L
CMP A0,A9
JREQ HANDTM_X
MOVE A9,A0
MOVE *A11(POBJ),A8,L
CALLA GET_DIRECTIONS_TO_MOVE
MOVE A2,A0
JSRP DRONE_MOVE
SLOOP 4,HANDTM_LP
HANDTM_X:
PULLP A8
RETP
**************************************************************************
* *
* PLACE_MESSAGE - PUT THE PLACE BONE MESSAGE ON THE SCREEN. *
* A10 = [Y,X] POSITION *
* A11 = PLAYER THAT OWNS THE MESSAGE *
* *
**************************************************************************
PLACE_MESSAGE:
MMTM SP,A0,A1,A7,A8,A9
MOVI PLACE_TEXT,A8
CLR A9 ;MOVK UP,A9
CREATE INDPID,HELP_BOX
MMFM SP,A0,A1,A7,A8,A9
RETS
**************************************************************************
* *
* PLACE_MESS_DIR - PUT THE PLACE BONE MESSAGE ON THE SCREEN *
* USING THE BONE TYPE AND SCREEN POSITION TO *
* DETERMINE MESSAGE DIRECTION. *
* A0 = MOVE POINT TO POINT TO *
* A11 = PLAYER THAT OWNS THE MESSAGE *
* *
**************************************************************************
PLACE_MESS_DIR:
PUSH A8
MOVI PLACE_TEXT,A8
CALLR MESSAGE_DIR
PULL A8
RETS
**************************************************************************
* *
* REMOVE_MESSAGE - PUT THE REMOVE BONE MESSAGE ON THE SCREEN. *
* A10 = [Y,X] POSITION *
* A11 = PLAYER THAT OWNS THE MESSAGE *
* *
**************************************************************************
REMOVE_MESSAGE:
MMTM SP,A0,A1,A7,A8,A9
MOVI REMOVE_TEXT,A8
CLR A9 ;MOVK UP,A9
CREATE INDPID,HELP_BOX
MMFM SP,A0,A1,A7,A8,A9
RETS
**************************************************************************
* *
* HELP BOX MESSAGES *
* ALL OF THEM USE THE SAME INITIALIZATION HEADER *
* *
**************************************************************************
PLACE_TEXT:
.STRING "PLACE\n\fBONE\n\fHERE",0
.LONG [-2,0]
.LONG [-4,0]
.EVEN
REMOVE_TEXT:
.STRING "REMOVE\n\fTHIS\n\fBONE",0
.LONG [-2,0]
.LONG [-4,0]
.EVEN
****YOU_TEXT:
**** .STRING "YOU\n\fMOVE\n\fHAND",0
**** .LONG [-2,0]
**** .LONG [-4,0]
**** .EVEN
****MOVE_TEXT:
**** .STRING "MOVE\n\fHAND\n\fHERE",0
**** .LONG [-2,0]
**** .LONG [-4,0]
**** .EVEN
****GOOD_TEXT:
**** .STRING "\n\fGOOD!",0
**** .LONG [-3,0]
**** .EVEN
****NICE_TEXT:
**** .STRING "\n\fNICE!",0
**** .LONG [-3,0]
**** .EVEN
****GOODJ_TEXT:
**** .STRING "\n\fGOOD\n\fJOB!",0
**** .LONG [-8,0]
**** .LONG [-10,0]
**** .EVEN
GREAT_TEXT:
.STRING "\n\fGREAT!",0
.LONG [-3,0]
.EVEN
HELP_TEXT:
.STRING "\n\fYOUR\n\fDINO",0
.LONG [-8,0]
.LONG [-10,0]
.EVEN
EGG_TEXT:
.STRING "\n\fEGG",0
.LONG [-3,0]
.EVEN
HOME_TEXT:
.STRING "LEAD\n\fDINO\n\fHOME",0
.LONG [-2,0]
.LONG [-4,0]
.EVEN
**************************************************************************
* *
* TROG HELP POINTER BOX HANDLERS *
* *
**************************************************************************
**************************************************************************
* *
* MESSAGE_DIR - PUT A HELP MESSAGE ON THE SCREEN USING THE MOVE TYPE *
* AND SCREEN POSITION TO DETERMINE MESSAGE DIRECTION. *
* A0 = MOVE POINT TO POINT MESSAGE AT *
* A8 = MESSAGE *
* A11 = PLAYER THAT GETS THE MESSAGE *
* *
**************************************************************************
MESSAGE_DIR:
MMTM SP,A9,A10
MOVB *A0(MOVETYPE),A9
CMPI HORBAR,A9
JREQ MESSAGE_UD
MOVK 1,A9
JRUC MESSAGE_OUT
MESSAGE_UD:
CLR A9
MESSAGE_OUT:
MOVE *A0(MOVEPOS),A10,L
CALLR CREATE_HELP
MMFM SP,A9,A10
RETS
**************************************************************************
* *
* CREATE_HELP - CREATE THE HELP BOX PROCESS, THIS ROUTINE WILL PICK *
* ONE OF TWO DIRECTIONS BASED ON THE POSITION OF *
* THE POINT OF INTEREST. *
* A8 = TEXT TO PLACE IN THE HELP BOX. *
* A9 = ORIENTATION (0 = LEFT/RIGHT, ~0 = UP/DOWN) *
* A10 = POINT THE ARROW AT THIS [Y,X] POINT. *
* A11 = PLAYER DATA AREA *
* *
**************************************************************************
CREATE_HELP:
MMTM SP,A0,A1,A7,A9
MOVE @SCRNTL,A0,L
MOVE @SCRNLR,A1,L
CALLA MIDPOINT
MOVE A9,A9
JRNZ CREATE_H_UD
CMPXY A0,A10
JRXLT CREATE_H_LEFT
MOVK RIGHT,A9
JRUC CREATE_H
CREATE_H_LEFT
MOVK LEFT,A9
JRUC CREATE_H
CREATE_H_UD:
CMPXY A0,A10
JRYLT CREATE_H_UP
MOVK DOWN,A9 ;UP/DOWN BOX
JRUC CREATE_H
CREATE_H_UP:
CLR A9 ;MOVK UP,A9
CREATE_H:
CREATE INDPID,HELP_BOX
MMFM SP,A0,A1,A7,A9
RETS
**************************************************************************
* *
* KILL_HELP - ROUTINE TO KILL ANY CURRENT HELP BOXES FOR THIS PLAYER *
* A11 = PTR TO PLAYER DATA AREA *
* *
**************************************************************************
KILL_HELP:
MMTM SP,A0,A1,A2
MOVE *A11(PPID),A0,W
ORI PHELPPID,A0
CLR A1
NOT A1
CALLA KILALL ;KILL ANY OTHERS
MOVE A11,A2
CALLA GPLAYNUM
ORI HBOXOID,A0
MOVI HBOXMASK,A1 ;KILL ALL PARTS
CALLA KILOBJ ;ONLY ONE INSTRUCTION AT A TIME
MMFM SP,A0,A1,A2
RETS
*
*HELP_BOX PROCESS EQUATES
HBOID .EQU PDATA
HBPLAY .EQU PDATA+10H
HBTEXT .EQU PDATA+20H
HBDIR .EQU PDATA+40H
HBPOS .EQU PDATA+50H
HBPDATA .EQU PDATA+70H
HBZVAL .EQU PDATA+90H
**************************************************************************
* *
* HELP_BOX - PROCESS TO PLACE A HELP BOX ON THE SCREEN *
* A8 = TEXT TO PLACE IN THE HELP BOX. *
* A9 = DIRECTION TO POINT THE ARROW *
* A10 = POINT THE ARROW AT THIS [Y,X] POINT. *
* A11 = PLAYER DATA AREA *
* *
**************************************************************************
HELP_BOX:
MOVE *A11(PPID),A0,W
ORI PHELPPID,A0
MOVE A0,*A13(PROCID),W
MOVE A11,A2
CALLA GPLAYNUM
MOVE A0,*A13(HBPLAY),W
MOVI HELP_ZPOS,A1
SUB A0,A1
SLL 16,A1
MOVE A1,*A13(HBZVAL),L
ORI HBOXOID,A0
MOVE A0,*A13(HBOID),W
CALLR KILL_HELP ;ONE HELPER/PLAYER AT A TIME
MOVE A8,*A13(HBTEXT),L
MOVE A9,*A13(HBDIR),W
SLL 5,A9
ADDI HBOFFSET_TAB,A9
MOVE *A9,A9,L
ADDXY A9,A10
MOVE A10,*A13(HBPOS),L
MOVE A11,*A13(HBPDATA),L
*OPEN WINDOWS
MOVK 1,A0
MOVE *A13(HBZVAL),A1,L
MOVI [37,51],A8
MOVE *A13(HBOID),A9,W
JSRP OWINDOW_OID
JRZ HELP_BOX_DIE
MOVE *A13(HBPOS),A10,L
MOVE *A13(HBPLAY),A0,W
SLL 4,A0
ADDI HBOX_COLORS,A0
MOVE *A0(0),*A8(OCONST),W ;SET BORDER COLOR
*INNER WINDOW FOR COOL BORDER LOOK
MOVK 1,A0
MOVE *A13(HBZVAL),A1,L
MOVI [33,47],A8
MOVE *A13(HBOID),A9,W
JSRP OWINDOW_OID
JRZ HELP_BOX_FAIL
*OUTPUT THE DESIRED TEXT
MOVI HELP_SETUP,A8
CALLA LM_SETUP
MOVE *A13(HBTEXT),A8,L ;REAL STRING PLEASE
MOVE *A13(HBPOS),A9,L
SUBI [13,0],A9 ;TO THE TOP OF THE BOX
MOVE *A13(HBPDATA),A0,L
MOVE *A0(PPALID),A0,L
CALLA FINDPAL ;GET CORRECT PLAYER PALETTE
MOVX A0,A5
CLR A0 ;ZERO SLEEP FOR SURE
JSRP PRINTF
MOVI TEXTOID,A0
MOVE *A13(HBZVAL),A1,L
CALLA CHANGEZPOS
MOVE *A13(HBPLAY),A1,W
ORI HTEXTOID,A1
CALLA CHANGOID
*CREATE THE ARROW STABBER
MOVE *A13(HBPLAY),A14,W
SLL 5,A14
ADDI BARTAB,A14
MOVE *A14,A14,L
CALLA GPALOBJSTF ;LOAD THE POINTER ARROW
JRZ HELP_BOX_FAIL ;BR = BOGUS, NO MORE OBJECTS
MOVE A0,A8
MOVE *A13(HBPLAY),A3,W
ORI HARROWOID,A3
MOVE A3,*A8(OID),W ;MAKE THE ARROW SPECIFIC
MOVE A13,*A8(OPLINK),L
MOVE *A13(HBPOS),A3,L
CALLA OBJ_TO_PNT
MOVE *A13(HBZVAL),*A8(OZVAL),L
MOVE *A13(HBDIR),A9,W
SLL 5,A9
ADDI HBOX_ANIMS,A9
MOVE *A9,A9,L ;SCRIPT TO PLAY WITH
MOVK 4,A1
JSRP FRANIM
CALLA INSERT_OBJ ;LET THEM ALL SEE IT
MOVK 1,A1
JSRP FRANIM
HELP_BOX_FAIL:
MOVE *A13(HBOID),A0,W
MOVI HBOXMASK,A1
CALLA KILOBJ ;WE FAILED, SCREW THE BOX
HELP_BOX_DIE:
DIE
*
*GENERIC TEXT HEADER FOR ALL HELP BOX MESSAGES
HELP_SETUP:
MESS_MAC RD7FONT,1,0,0,0E0E0000H,STRCNRMO,0
*
*HELP BOX DUXPAL COLOR ASSIGNMENTS FOR EACH PLAYER
HBOX_COLORS:
.WORD TROG_RED, TROG_BLUE, TROG_YELLOW, TROG_PURPLE
*
*HELP BOX OFFSET FROM END OF ARROW TO CENTER OF BOX
*USED FOR CONVERTING "POINT OF INFO" TO "CENTER OF HELP BOX."
HBOFFSET_TAB:
.LONG [40,0],[-40,0],[0,47],[0,-47]
*
*HELP BOX ARROW ANIMATIONS
HBOX_ANIMS:
.LONG HBOXUP_ANIM, HBOXDOWN_ANIM, HBOXLEFT_ANIM, HBOXRIGHT_ANIM
*UP/DOWN
HBOXDOWN_ANIM:
.LONG BOXARV1
.WORD 1|FLIPBITS,M_FLIPV
HBOXUP_ANIM:
.LONG BOXARV1
.WORD 10
.LONG BOXARV2
.WORD 10|SCRIPT
.LONG HBOXUP_ANIM
*LEFT/RIGHT
HBOXLEFT_ANIM:
.LONG BOXARH1
.WORD 1|FLIPBITS,M_FLIPH
HBOXRIGHT_ANIM:
.LONG BOXARH1
.WORD 10
.LONG BOXARH2
.WORD 10|SCRIPT
.LONG HBOXRIGHT_ANIM
**************************************************************************
* *
* TROG TIPS BOX HANDLERS *
* *
**************************************************************************
**************************************************************************
* *
* TROG_TIP1 - PROCESS SUBROUTINE FOR THE FIRST TROG TIP *
* NOTE: CALL WITH JSRP *
* *
**************************************************************************
****TROG_TIP1:
**** MOVI TIP1_FLAG,A1
**** MOVI TIP1_DEF,A3
**** JRUC TROG_TIP_FLAG
**************************************************************************
* *
* TROG_TIP2 - PROCESS SUBROUTINE FOR THE SECOND TROG TIP *
* NOTE: CALL WITH JSRP *
* *
**************************************************************************
****TROG_TIP2:
**** MOVI TIP2_FLAG,A1
**** MOVI TIP2_DEF,A3
**** JRUC TROG_TIP_FLAG
**************************************************************************
* *
* TROG_TIP2A - PROCESS SUBROUTINE FOR THE SECOND SUB TROG TIP *
* NOTE: CALL WITH JSRP *
* *
**************************************************************************
****TROG_TIP2A:
**** MOVI TIP2A_FLAG,A1
**** MOVI TIP2A_DEF,A3
**** JRUC TROG_TIP_FLAG
**************************************************************************
* *
* TROG_TIP3 - PROCESS SUBROUTINE FOR THE THIRD TROG TIP *
* NOTE: CALL WITH JSRP *
* *
**************************************************************************
TROG_TIP3:
MOVI TIP3_FLAG,A1
MOVI TIP3_DEF,A3
JRUC TROG_TIP_FLAG
**************************************************************************
* *
* TROG_TIP4 - PROCESS SUBROUTINE FOR THE FOURTH TROG TIP *
* NOTE: CALL WITH JSRP *
* *
**************************************************************************
TROG_TIP4:
MOVI TIP4_FLAG,A1
MOVI TIP4_DEF,A3
JRUC TROG_TIP_FLAG
**************************************************************************
* *
* TROG_TIP5 - PROCESS SUBROUTINE FOR THE FIFTH TROG TIP *
* NOTE: CALL WITH JSRP *
* *
**************************************************************************
TROG_TIP5:
MOVI TIP5_FLAG,A1
MOVI TIP5_DEF,A3
JRUC TROG_TIP_FLAG
**************************************************************************
* *
* TROG_TIP6 - PROCESS SUBROUTINE FOR THE SIXTH TROG TIP *
* NOTE: CALL WITH JSRP *
* *
**************************************************************************
TROG_TIP6:
MOVI TIP6_FLAG,A1
MOVI TIP6_DEF,A3
JRUC TROG_TIP_FLAG
**************************************************************************
* *
* TROG_TIP8 - PROCESS SUBROUTINE FOR THE EIGTH TROG TIP *
* NOTE: CALL WITH JSRP *
* *
**************************************************************************
TROG_TIP8:
MOVI TIP8_FLAG,A1
MOVI TIP8_DEF,A3
JRUC TROG_TIP_FLAG
**************************************************************************
* *
* BONE_TIP4 - SPECIAL PROCESS TO ACTIVATE TROG_TIP4 DUE TO MAJOR PROCESS *
* STACK USAGE BY TROG_TIP. *
* *
**************************************************************************
BONE_TIP4:
JSRP TROG_TIP4
DIE
**************************************************************************
* *
* TROG_TIP_FLAG - CHECK GIVEN FLAG, IF = 0 THEN SET AND CALL TIP *
* IF <> 0, RETURN. *
* A1 = PTR TO FLAG LOCATION *
* A3 = PTR TO TIP *
* NOTE: CALL WITH JSRP *
* *
**************************************************************************
TROG_TIP_FLAG:
MOVE *A1,A0,W
JRNZ TIP_RETP
INC A0
MOVE A0,*A1,W
JRUC TROG_TIP
**************************************************************************
* *
* TROG_TIP - PROCESS SUBROUTINE TO SHOW A TROG TIP TO THE PLAYERS *
* A3 = PTR TO TROG TIP DEFINITION *
* RETURNS: *
* NOTHING *
* NOTE: BASHES PTEMP1 *
* *
**************************************************************************
TROG_TIP:
MMTM A12,A8,A9,A10,A11
MOVE *A13(PROCID),*A13(PTEMP1),W
MOVI INDPIDE,A9
MOVE A9,*A13(PROCID),W
PAUSEON
MOVI HBOXOID,A0
MOVI HBOXMASK,A1
SRL 4,A1
SLL 4,A1
CALLA OBJECTS_OFF ;TURN ALL HELP BOXES OFF
MOVE *A3+,A9,L ; BASE LOCATION
MOVE *A3+,A8,L ; BOX SIZE
CALLR TIP_TOP
PUSHP A3
JSRP TIP_BACKBOX
PULLP A3
MOVE *A3+,A0,W ; GET THE FIRST SLEEP
JRZ TROG_TIP_TEXT_LOOP
PUSHP A3
JSRP SLEEP_SWITCHX
PULLP A3
TROG_TIP_TEXT_LOOP
MOVE *A3+,A8,L ; TEXT POINTER
JRZ TROG_TIP_WAIT
PUSHP A3
JSRP LM_PRINTF
MOVI TEXTOID,A0
MOVI TIPOID,A1
CALLA CHANGOID ; CLEAN OUT ALL THE TEXT THINGS
PULLP A3
MOVE *A3+,A0,W ; SLEEP TIME
JRZ TROG_TIP_WAIT ; LAST ONE ( ZERO )
PUSHP A3
JSRP SLEEP_SWITCHX ; SLEEP FOR TEXT TIME
PULLP A3
JRUC TROG_TIP_TEXT_LOOP
TROG_TIP_WAIT
MOVI 200,A0
JSRP SLEEP_SWITCHX
TROG_TIP_DONE
CALLA TIP_KILL
MOVI HBOXOID,A0
MOVI 0FFF0H,A1
MOVI DMACAL,A4
CALLA OBJECTS_ON ;TURN ALL HELP BOXES BACK ON
MOVI HTEXTOID,A0
MOVI DMACNZ,A4
CALLA OBJECTS_ON
MOVI HARROWOID,A0
MOVI DMAWNZ,A4
CALLA OBJECTS_ON
PAUSEOFF
MOVE *A13(PTEMP1),*A13(PROCID),W
MMFM A12,A8,A9,A10,A11
*NOTE: THIS LABEL MUST STAY AT A RETP, NO PULLING OF REGGIES PLEASE.
TIP_RETP:
RETP
**************************************************************************
* *
* TIP_BACKBOX - OPEN THE TROG TIP BOX WINDOWS IN THE COLOR OF THE *
* PLAYER THAT STARTED THIS GAME. *
* A8 = SIZE OF BOX *
* A9 = LOCATION OF TIP SIGN *
* NOTE: CALL WITH JSRP *
* *
**************************************************************************
BOXYOFFSET EQU 45
TIP_BACKBOX:
CLR A0
MOVE A8,A1
CALLA GETCENT
ADDI BOXYOFFSET,A0
SLL 16,A0
MOVE A9,A10
ADDXY A0,A10
MOVK 1,A0 ; 1 TICK
MOVI TIP_ZPOS,A1
SLL 16,A1 ;FULL Z POSITION FOR WINDOW OPEN
MOVI TIPOID,A9 ; STUFF THIS I.D.
*WARNING: THIS PUSH IS THE MAX AT THIS LEVEL, PUSH MORE AND BLOW IT!!! (GNP)
MMTM A12,A8,A10
JSRP OWINDOW_OID
MOVE @SPLAYER_COL,A0,W
MOVE A0,*A8(OCONST),W ;MAKE IT RIGHT
MMFM A12,A8,A10
SUBI [6,6],A8 ;SIZE OF INNER BOX
MOVK 1,A0 ; 1 TICK
MOVI TIP_ZPOS,A1
SLL 16,A1 ;FULL Z POSITION FOR WINDOW OPEN
MOVI TIPOID,A9 ; STUFF THIS I.D.
JSRP OWINDOW_OID
RETP
**************************************************************************
* *
* TIP_TOP *
* *
* PLOT OUT THE HEAD AND THE "TROG TIPS" LOGO *
* *
* ENTRY *
* A9 RELATIVE LOCATION TO PUT IT AT *
* *
* EXIT *
* A0 ZERO IF SOMETHING WENT WRONG *
* *
**************************************************************************
TIP_TOP:
MMTM SP,A3,A8
MOVI LOGO_HEAD_INIT,A14
CALLA GPALOBJSTF
JRZ TIP_TOP_DIE
MOVE A9,A3
MOVE A0,A8
CALLA OBJ_TO_PNT ; PLACE IN A GOOD SPOT
MOVI LOGO_SIGN_INIT,A14
CALLA GPALOBJSTF
JRNZ TIP_COOL ; BR = COOL
MOVE A8,A0
CALLA DELETE_OBJ ; DELETE THE HEAD OFF
JRUC TIP_TOP_DIE
TIP_COOL
CALLA INSERT_OBJ
MOVE A0,A8
CALLA OBJ_TO_PNT
CALLA INSERT_OBJ
MOVE A8,A8
TIP_TOP_DIE
MMFM SP,A3,A8
RETS
**************************************************************************
* *
* TIP_KILL *
* *
* KILL OFF ALL THE TIPOID OBJECTS *
* *
* ENTRY *
* NOTHING *
* *
* EXIT *
* NOTHING *
* *
**************************************************************************
TIP_KILL:
MMTM SP,A0,A1
MOVI TIPOID,A0 ;BOX AND TEXT
CLR A1
NOT A1
CALLA KILOBJ ;WIPE THEM OUT
MOVI TIPHEADOID,A0 ;HEADER OBJECT
CALLA KILL_OBJECTS ;RID 'O PLEASE
MMFM SP,A0,A1
RETS
**************************************************************************
* *
* TIP SCRIPTS *
* *
**************************************************************************
TIP_Y EQU 60
TIP_X EQU -78
****TIP1_DEF:
**** .LONG [70,200] ; LOCATION
**** .LONG [95,172] ; SIZE OF BOX
**** .WORD 60 ; INITIAL SLEEP
**** .LONG TIP_START_TEXT1 ; TEXT TO PLOT
**** .WORD 0
****TIP2_DEF:
**** .LONG [70,200] ; LOCATION
**** .LONG [95,172] ; SIZE OF BOX
**** .WORD 0 ; INITIAL SLEEP
**** .LONG TIP_START_TEXT1 ; TEXT TO PLOT
**** .WORD 60
**** .LONG TIP_START_TEXT2
**** .WORD 0
****TIP2A_DEF:
**** .LONG [70,200] ; LOCATION
**** .LONG [95,172] ; SIZE OF BOX
**** .WORD 0 ; INITIAL SLEEP
**** .LONG TIP_START_TEXT1 ; TEXT TO PLOT
**** .WORD 1
**** .LONG TIP_START_TEXT2
**** .WORD 60
**** .LONG TIP_START_TEXT2A
**** .WORD 0
TIP3_DEF:
.LONG [70,200] ; LOCATION
.LONG [95,172] ; SIZE OF BOX
.WORD 60 ; INITIAL SLEEP
.LONG TIP_START_TEXT3 ; TEXT TO PLOT
.WORD 0
TIP4_DEF:
.LONG [70,200] ; LOCATION
.LONG [95,172] ; SIZE OF BOX
.WORD 0 ; INITIAL SLEEP
.LONG TIP_START_TEXT3 ; TEXT TO PLOT
.WORD 60
.LONG TIP_START_TEXT4
.WORD 0
TIP5_DEF:
.LONG [70,200] ; LOCATION
.LONG [95,172] ; SIZE OF BOX
.WORD 0 ; INITIAL SLEEP
.LONG TIP_START_TEXT3 ; TEXT TO PLOT
.WORD 1
.LONG TIP_START_TEXT4
.WORD 60
.LONG TIP_START_TEXT5
.WORD 0
TIP6_DEF:
.LONG [70,200] ; LOCATION
.LONG [95,172] ; SIZE OF BOX
.WORD 60 ; INITIAL SLEEP
.LONG TIP_START_TEXT6
.WORD 260
.LONG TIP_START_TEXT7
.WORD 0
TIP8_DEF:
.LONG [70,200] ; LOCATION
.LONG [95,172] ; SIZE OF BOX
.WORD 60 ; INITIAL SLEEP
.LONG TIP_TEXT9 ; TEXT TO PLOT
.WORD 200
.LONG TIP_TEXT10
.WORD 120
.LONG TIP_TEXT11
.WORD 0
**************************************************************************
* *
* TIP TEXT *
* *
**************************************************************************
****TIP_START_TEXT1
**** MESS_MAC RD7FONT,1,200+TIP_X,70+TIP_Y,DINO_PWHITE,STRLNRMO,0
**** .STRING "\c",7EH,"\c JOYSTICK MOVES \p\*bHAND.",0
**** .WORD DMACAL
**** .WORD DMACNZ
**** .LONG GAMEFIX
**** .LONG SPLAYER_COL
****TIP_START_TEXT2
**** MESS_MAC RD7FONT,1,200+TIP_X,88+TIP_Y,DINO_PWHITE,STRLNRMO,0
**** .STRING "\c",7EH,"\c BONE BUTTON MAKES \p\*bHAND\p\b"
**** .STRING "\n PLACE\f\c",7FH,7FH,7FH,7FH,"\f",7FH,"\c BONES.",0
**** .WORD DMACAL
**** .WORD DMACNZ
**** .LONG GAMEFIX
**** .LONG SPLAYER_COL
**** .LONG RED16
**** .WORD DINO_WHITE
**** .LONG [0,-36] ; BACKSPACE 5 CHARS
**** .WORD DMACAL
**** .LONG [0,-1] ; BACKSPACE LAST UNDERLINE BY A DOT
**** .WORD DMACNZ
****TIP_START_TEXT2A
**** MESS_MAC RD7FONT,1,200+TIP_X,116+TIP_Y,DINO_PWHITE,STRLNRMO,0
**** .STRING "\c",7EH,"\c BONE BUTTON MAKES \p\*bHAND\p\b"
**** .STRING "\n REMOVE\f\c",7FH,7FH,7FH,7FH,7FH,"\f",7FH,"\c BONES,"
**** .STRING " TOO!",0
**** .WORD DMACAL
**** .WORD DMACNZ
**** .LONG GAMEFIX
**** .LONG SPLAYER_COL
**** .LONG RED16
**** .WORD DINO_WHITE
**** .LONG [0,-42] ; BACKSPACE 4 CHARS
**** .WORD DMACAL
**** .LONG [0,-1] ; BACKSPACE LAST UNDERLINE BY A DOT
**** .WORD DMACNZ
TIP_START_TEXT3
MESS_MAC RD7FONT,1,200+TIP_X,70+TIP_Y,DINO_PWHITE,STRLNRMO,0
.STRING "\c",7EH,"\c REMEMBER!\p\*b YOU\p\b CONTROL"
.STRING "\n THE \p\*bHAND\f\c",7FH,7FH,7FH,"\f",7FH
.STRING "\c\f,\p\b NOT THE DINO!!",0
.WORD DMACAL
.WORD DMACNZ
.LONG GAMEFIX
.LONG SPLAYER_COL
.LONG RED16
.WORD DINO_WHITE
.LONG GAMEFIX
.LONG SPLAYER_COL
.LONG [0,-28] ; BACKSPACE 4 CHARS
.WORD DMACAL
.LONG [0,-1] ; BACKSPACE LAST UNDERLINE BY A DOT
.WORD DMACNZ
.LONG [0,1] ; MAKE COMMA NOT LOOK STUPID
.LONG RED16
.WORD DINO_WHITE
TIP_START_TEXT4
MESS_MAC RD7FONT,1,200+TIP_X,100+TIP_Y,DINO_PWHITE,STRLNRMO,0
.STRING "\c",7EH,"\c\p\*b BONES \p\bMAKE DINOS TURN.",0
.WORD DMACAL
.WORD DMACNZ
.LONG GAMEFIX
.LONG SPLAYER_COL
.LONG RED16
.WORD DINO_WHITE
TIP_START_TEXT5
MESS_MAC RD7FONT,1,200+TIP_X,117+TIP_Y,DINO_PWHITE,STRLNRMO,0
.STRING "\c",7EH,"\c USE \p\*bBONES\p\b TO LEAD DINO"
.STRING "\n TO THE \p\*bEGGS.\p\b",0
.WORD DMACAL
.WORD DMACNZ
.LONG GAMEFIX
.LONG SPLAYER_COL
.LONG RED16
.WORD DINO_WHITE
.LONG GAMEFIX
.LONG SPLAYER_COL
.LONG RED16
.WORD DINO_WHITE
TIP_START_TEXT6
MESS_MAC RD7FONT,1,200+TIP_X,70+TIP_Y,DINO_PWHITE,STRLNRMO,0
.STRING "\c",7EH,"\c THE DINOS \p\*bHOME\p\b APPEARS"
.STRING "\n WHEN THERE ARE NO MORE"
.STRING "\n \p\*bEGGS\p\b TO PICK UP.",0
.WORD DMACAL
.WORD DMACNZ
.LONG GAMEFIX
.LONG SPLAYER_COL
.LONG RED16
.WORD DINO_WHITE
.LONG GAMEFIX
.LONG SPLAYER_COL
.LONG RED16
.WORD DINO_WHITE
TIP_START_TEXT7
MESS_MAC RD7FONT,1,200+TIP_X,111+TIP_Y,DINO_PWHITE,STRLNRMO,0
.STRING "\c",7EH,"\c USE \p\*bBONES\p\b TO LEAD DINO"
.STRING "\n \p\*bHOME!\p\b",0
.WORD DMACAL
.WORD DMACNZ
.LONG GAMEFIX
.LONG SPLAYER_COL
.LONG RED16
.WORD DINO_WHITE
.LONG GAMEFIX
.LONG SPLAYER_COL
.LONG RED16
.WORD DINO_WHITE
TIP_TEXT9
MESS_MAC RD7FONT,1,200+TIP_X,70+TIP_Y,DINO_PWHITE,STRLNRMO,0
.STRING "\c",7EH,"\c DO NOT LET YOUR \p\*bDINO\p\b"
.STRING "\n FALL OFF OF THE ISLAND!",0
.WORD DMACAL
.WORD DMACNZ
.LONG GAMEFIX
.LONG SPLAYER_COL
.LONG RED16
.WORD DINO_WHITE
TIP_TEXT10
MESS_MAC RD7FONT,1,200+TIP_X,96+TIP_Y,DINO_PWHITE,STRLNRMO,0
.STRING "\c",7EH,"\c \bRED PLANT:\b\n SPEEDS DINO UP.",0
.WORD DMACAL
.WORD DMACNZ
.WORD DINO_INTENSE
.WORD DINO_WHITE
TIP_TEXT11
MESS_MAC RD7FONT,1,200+TIP_X,121+TIP_Y,DINO_PWHITE,STRLNRMO,0
.STRING "\c",7EH,"\c \bMUSHROOM:\b\n SLOWS DINO DOWN.",0
.WORD DMACAL
.WORD DMACNZ
.WORD DINO_GREY
.WORD DINO_WHITE
**************************************************************************
* *
* OBJECT INITS *
* *
**************************************************************************
LOGO_HEAD_INIT:
.LONG [0,0],[0,0]
.WORD 0,TIP_ZPOS+5
.LONG TRTIPSb,0,DUMCOLL
.WORD DMAWNZ,TIPHEADOID
LOGO_SIGN_INIT:
.LONG [0,0],[0,0]
.WORD 0,TIP_ZPOS+5
.LONG TRTIPSa,0,DUMCOLL
.WORD DMAWNZ,TIPHEADOID
.END