![]() |
Routines |
| Prev: 57625 | Up: Map | Next: 57949 |
|
Used by the routines at Handler_Controls, Animate_Waiting, Event_Landed, 60150 and Controller_JumpPunch.
|
||||||||||||||||||||
|
First off, check if the active monster is computer controlled.
|
||||||||||||||||||||
| Controls | 57721 | LD A,(53842) | Jump to PlayerControlled if *Active_MonsterControlType is not set to "computer controlled". | |||||||||||||||||
| 57724 | AND A | |||||||||||||||||||
| 57725 | JR NZ,PlayerControlled | |||||||||||||||||||
|
Handles the monster being computer controlled.
|
||||||||||||||||||||
| ComputerControlled | 57727 | CALL RandomNumber | Write a random number between 0-31 (00000000-00011111 e.g. Up/ Down/ Left/ Right/ Action) to *Active_MonsterControl. | |||||||||||||||||
| 57730 | AND %00011111 | |||||||||||||||||||
| 57732 | LD (53783),A | |||||||||||||||||||
|
Check if the currently active monster is jumping.
|
||||||||||||||||||||
| 57735 | LD A,(53832) | A=*Flag_MonsterJumping. | ||||||||||||||||||
| 57738 | RRCA | Rotate A right one position, setting the carry flag if bit 0 was set. | ||||||||||||||||||
| 57739 | JR NC,Controls_IsMonsterClimbing | Jump to Controls_IsMonsterClimbing if the monster isn't currently jumping. | ||||||||||||||||||
|
The active monster is jumping...
|
||||||||||||||||||||
| 57741 | LD A,8 | Write 00001000 to *Active_MonsterControl. | ||||||||||||||||||
| 57743 | LD (53783),A | |||||||||||||||||||
| 57746 | RET | Return. | ||||||||||||||||||
|
Check if the currently active monster is climbing.
|
||||||||||||||||||||
| Controls_IsMonsterClimbing | 57747 | LD A,(53830) | A=*Flag_MonsterClimbing. | |||||||||||||||||
| 57750 | RRCA | Rotate A right one position, setting the carry flag if bit 0 was set. | ||||||||||||||||||
| 57751 | JR NC,Controls_CheckBoundaries | Jump to Controls_CheckBoundaries if the monster isn't currently climbing. | ||||||||||||||||||
|
The active monster is climbing...
|
||||||||||||||||||||
| 57753 | LD A,(53783) | Jump to ComputerControlled if *Active_MonsterControl is equal to 16 (00010000 e.g. "jumping/ punching"). | ||||||||||||||||||
| 57756 | CP 16 | |||||||||||||||||||
| 57758 | JR Z,ComputerControlled | |||||||||||||||||||
| 57760 | RET | Return. | ||||||||||||||||||
|
Checks the screen boundaries to ensure the monster can't go off-screen.
|
||||||||||||||||||||
| Controls_CheckBoundaries | 57761 | LD A,(53838) | A=*Active_MonsterYPosition. | |||||||||||||||||
| 57764 | CP 17 | Compare A with 17... | ||||||||||||||||||
| 57766 | LD A,(53783) | A=*Active_MonsterControl. | ||||||||||||||||||
| 57769 | RET C | Return if A was is lower than 17 on line 57764. | ||||||||||||||||||
| 57770 | CP 16 | Jump to ComputerControlled if A is equal to 16. | ||||||||||||||||||
| 57772 | JR Z,ComputerControlled | |||||||||||||||||||
| 57774 | LD A,(53837) | A=*Active_MonsterXPosition. | ||||||||||||||||||
| 57777 | CP 250 | Jump to ComputerUnset_Left if A is higher than 250. | ||||||||||||||||||
| 57779 | JR NC,ComputerUnset_Left | |||||||||||||||||||
| 57781 | CP 3 | Jump to ComputerUnset_Left if A is lower than 3. | ||||||||||||||||||
| 57783 | JR C,ComputerUnset_Left | |||||||||||||||||||
| 57785 | CP 27 | Compare A with 27... | ||||||||||||||||||
| 57787 | LD A,(53783) | A=*Active_MonsterControl. | ||||||||||||||||||
| 57790 | RET C | Return if A was lower 27 on line 57785. | ||||||||||||||||||
|
Unsets the computer controlled monster "right" option.
|
||||||||||||||||||||
| 57791 | RES 1,A | Reset bit 1 of A. | ||||||||||||||||||
| 57793 | JR ComputerUnset_JumpPunch | Jump to ComputerUnset_JumpPunch. | ||||||||||||||||||
|
Unsets the computer controlled monster "left" option.
|
||||||||||||||||||||
| ComputerUnset_Left | 57795 | LD A,(53783) | A=*Active_MonsterControl. | |||||||||||||||||
| 57798 | RES 0,A | Reset bit 0 of A. | ||||||||||||||||||
|
Unsets the computer controlled monster "jump/punch" option.
|
||||||||||||||||||||
| ComputerUnset_JumpPunch | 57800 | RES 4,A | Reset bit 4 of A. | |||||||||||||||||
| 57802 | LD (53783),A | Write A to *Active_MonsterControl. | ||||||||||||||||||
| 57805 | RET | Return. | ||||||||||||||||||
|
The active monster is player controlled so using Active_MonsterControlType fetch the controller routine.
|
||||||||||||||||||||
| PlayerControlled | 57806 | ADD A,A | Create an offset in HL using A*2. | |||||||||||||||||
| 57807 | LD H,0 | |||||||||||||||||||
| 57809 | LD L,A | |||||||||||||||||||
| 57810 | LD DE,57935 | HL+=JumpTable_Controls. | ||||||||||||||||||
| 57813 | ADD HL,DE | |||||||||||||||||||
|
Load the controls address into HL and jump to it.
|
||||||||||||||||||||
| 57814 | LD A,(HL) | Load the low byte of the controls address from the jump table. | ||||||||||||||||||
| 57815 | INC HL | Increment the controls jump table pointer by one. | ||||||||||||||||||
| 57816 | LD H,(HL) | Set the high byte of the controls address from the jump table. | ||||||||||||||||||
| 57817 | LD L,A | Set low byte of the controls address from A. | ||||||||||||||||||
| 57818 | JP (HL) | Jump to the address held by *HL. | ||||||||||||||||||
| Controls_ComputerControlled | 57819 | XOR A | A=0. | |||||||||||||||||
| 57820 | JP Controls_Return | Jump to Controls_Return. | ||||||||||||||||||
|
Read the controls from the Sinclair Interface 2 joystick (port 2).
|
||||||||||||||||||||
| Controls_ReadSinclair2_P2 | 57823 | LD A,247 | Read from the keyboard;
|
|||||||||||||||||
| 57825 | IN A,(254) | |||||||||||||||||||
| 57827 | XOR %10111111 | Flip bits 0-5 and 7. | ||||||||||||||||||
| 57829 | AND %00011111 | Keep only bits 0-4. | ||||||||||||||||||
| 57831 | JP Controls_Return | Jump to Controls_Return. | ||||||||||||||||||
|
Read the controls from the Sinclair Interface 2 joystick (port 1).
|
||||||||||||||||||||
| Controls_ReadSinclair2_P1 | 57834 | LD A,239 | Read from the keyboard;
|
|||||||||||||||||
| 57836 | IN A,(254) | |||||||||||||||||||
|
Converts the input into a table address beginning at PortMappings.
|
||||||||||||||||||||
| 57838 | LD B,198 | Create an offset using BC - where B=198 and C=A. | ||||||||||||||||||
| 57840 | LD C,A | |||||||||||||||||||
| 57841 | LD A,(BC) | A=*BC. | ||||||||||||||||||
| 57842 | RRCA | Rotate A right three positions (bits 3 to 7 are now in positions 0 to 4). | ||||||||||||||||||
| 57843 | RRCA | |||||||||||||||||||
| 57844 | RRCA | |||||||||||||||||||
| 57845 | XOR %10111111 | Flip bits 0-5 and 7. | ||||||||||||||||||
| 57847 | AND %00011111 | Keep only bits 0-4. | ||||||||||||||||||
| 57849 | JP Controls_Return | Jump to Controls_Return. | ||||||||||||||||||
|
Read the controls from the Kempston joystick port.
|
||||||||||||||||||||
| Controls_ReadKempston | 57852 | IN A,(31) | Read Kempston Joystick input. | |||||||||||||||||
| 57854 | AND %00011111 | Keep only bits 0-4. | ||||||||||||||||||
| 57856 | JP Z,Controls_Return | Jump to Controls_Return if the result is zero. | ||||||||||||||||||
| 57859 | LD B,A | B=A. | ||||||||||||||||||
| 57860 | AND %00000011 | Keep only bits 0-1. | ||||||||||||||||||
| 57862 | LD A,B | A=B. | ||||||||||||||||||
| 57863 | JP Z,Controls_0 | Jump to Controls_0 if A is zero. | ||||||||||||||||||
| 57866 | XOR %00000011 | Flip bits 0-1. | ||||||||||||||||||
| Controls_0 | 57868 | OR A | Set the bits from A. | |||||||||||||||||
| 57869 | JP Controls_Return | Jump to Controls_Return. | ||||||||||||||||||
|
Use user-defined keys set 1.
|
||||||||||||||||||||
| Controls_Set1 | 57872 | LD HL,51280 | HL=UserDefinedKeys_Set1. | |||||||||||||||||
| 57875 | JR Controller_ReadKeyboard | Jump to Controller_ReadKeyboard. | ||||||||||||||||||
|
Use user-defined keys set 2.
|
||||||||||||||||||||
| Controls_Set2 | 57877 | LD HL,51290 | HL=UserDefinedKeys_Set2. | |||||||||||||||||
| 57880 | JR Controller_ReadKeyboard | Jump to Controller_ReadKeyboard. | ||||||||||||||||||
|
Use user-defined keys set 3.
|
||||||||||||||||||||
| Controls_Set3 | 57882 | LD HL,51300 | HL=UserDefinedKeys_Set3. | |||||||||||||||||
|
Read the keyboard set in HL.
|
||||||||||||||||||||
| Controller_ReadKeyboard | 57885 | LD C,0 | C=0. | |||||||||||||||||
|
Has "left" been pressed?
|
||||||||||||||||||||
| 57887 | CALL Controls_ReadKeyboard | Call Controls_ReadKeyboard. | ||||||||||||||||||
| 57890 | JR NZ,Controls_ReadKeyboardRight | Jump to Controls_ReadKeyboardRight if "left" is not being pressed. | ||||||||||||||||||
| 57892 | SET 0,C | Set bit 0 of C if "left" is being pressed. | ||||||||||||||||||
|
Has "right" been pressed?
|
||||||||||||||||||||
| Controls_ReadKeyboardRight | 57894 | CALL Controls_ReadKeyboard | Call Controls_ReadKeyboard. | |||||||||||||||||
| 57897 | JR NZ,Controls_ReadKeyboardUp | Jump to Controls_ReadKeyboardUp if "right" is not being pressed. | ||||||||||||||||||
| 57899 | SET 1,C | Set bit 1 of C if "right" is being pressed. | ||||||||||||||||||
|
Has "up" been pressed?
|
||||||||||||||||||||
| Controls_ReadKeyboardUp | 57901 | CALL Controls_ReadKeyboard | Call Controls_ReadKeyboard. | |||||||||||||||||
| 57904 | JR NZ,Controls_ReadKeyboardDown | Jump to Controls_ReadKeyboardDown if "up" is not being pressed. | ||||||||||||||||||
| 57906 | SET 3,C | Set bit 3 of C if "up" is being pressed. | ||||||||||||||||||
|
Has "down" been pressed?
|
||||||||||||||||||||
| Controls_ReadKeyboardDown | 57908 | CALL Controls_ReadKeyboard | Call Controls_ReadKeyboard. | |||||||||||||||||
| 57911 | JR NZ,Controls_ReadKeyboardJumpPunch | Jump to Controls_ReadKeyboardJumpPunch if "down" is not being pressed. | ||||||||||||||||||
| 57913 | SET 2,C | Set bit 2 of C if "down" is being pressed. | ||||||||||||||||||
|
Has "jump/punch" been pressed?
|
||||||||||||||||||||
| Controls_ReadKeyboardJumpPunch | 57915 | CALL Controls_ReadKeyboard | Call Controls_ReadKeyboard. | |||||||||||||||||
| 57918 | JR NZ,Controls_ReadKeyboardSet | Jump to Controls_ReadKeyboardSet if "jump/punch" is not being pressed. | ||||||||||||||||||
| 57920 | SET 4,C | Set bit 4 of C if "jump/punch" is being pressed. | ||||||||||||||||||
| Controls_ReadKeyboardSet | 57922 | LD A,C | A=C. | |||||||||||||||||
|
Set the "zero" flag if no controls are being pressed.
|
||||||||||||||||||||
| Controls_Return | 57923 | AND A | Set flags. | |||||||||||||||||
| 57924 | LD (53783),A | Write A to *Active_MonsterControl. | ||||||||||||||||||
| 57927 | RET | Return. | ||||||||||||||||||
|
Using the keyboard set in HL, read the control from the keyboard.
|
||||||||||||||||||||
| Controls_ReadKeyboard | 57928 | LD A,(HL) | A=*HL. | |||||||||||||||||
| 57929 | IN A,(254) | Read from the entire keyboard. | ||||||||||||||||||
| 57931 | INC HL | Increment HL by one. | ||||||||||||||||||
| 57932 | AND (HL) | Merge the bits from *HL. | ||||||||||||||||||
| 57933 | INC HL | Increment HL by one. | ||||||||||||||||||
| 57934 | RET | Return. | ||||||||||||||||||
|
The monster control type jump table. See Active_MonsterControlType.
|
||||||||||||||||||||
| JumpTable_Controls | 57935 | DEFW Controls_ComputerControlled | Control type ID: 0. | |||||||||||||||||
| 57937 | DEFW Controls_ReadSinclair2_P2 | Control type ID: 1. | ||||||||||||||||||
| 57939 | DEFW Controls_ReadSinclair2_P1 | Control type ID: 2. | ||||||||||||||||||
| 57941 | DEFW Controls_ReadKempston | Control type ID: 3. | ||||||||||||||||||
| 57943 | DEFW Controls_Set1 | Control type ID: 4. | ||||||||||||||||||
| 57945 | DEFW Controls_Set2 | Control type ID: 5. | ||||||||||||||||||
| 57947 | DEFW Controls_Set3 | Control type ID: 6. | ||||||||||||||||||
| Prev: 57625 | Up: Map | Next: 57949 |