G_OBJECT RET ; INPUT: ; A - OBJECT ID GET_OBJECT_PROP LD IX,OBJECTS_AREA-OBJECT_SIZE LD BC,OBJECT_SIZE LD E,A GOP1 ADD IX,BC LD A,(IX+0) OR A RET Z CP E JR NZ,GOP1 LD L,(IX+2) LD A,(IX+4) SUB L LD C,A LD E,(IX+6) LD A,(IX+8) SUB E LD B,A XOR A INC A RET ; INPUT: ; A - OBJECT ID ; L - X ; E - Y ; B - HEIGHT ; C - WIDTH ADD_OBJECT LD IX,OBJECTS_AREA PUSH BC LD BC,(OBJECTS_AREA_SIZE) ADD IX,BC POP BC ; LD A,ID LD (IX+0),A XOR A LD (IX+1),A LD (IX+3),A LD (IX+5),A LD (IX+7),A LD (IX+9),A LD (IX+2),L ;X-MIN LD A,C ADD A,L LD (IX+4),A ;X-MAX LD (IX+6),E ;Y-MIN LD A,B ADD A,E LD (IX+8),A ;Y-MAX XOR A LD (IX+OBJECT_SIZE),A LD HL,(OBJECTS_AREA_SIZE) LD BC,OBJECT_SIZE ADD HL,BC LD (OBJECTS_AREA_SIZE),HL RET REMOVE_OBJECT RET P_MX DW 0 P_MY DW 0 M_OBJECT LD C,3 RST #30 ;GET MOUSE STATE OR A JP NZ,MFORCE LD BC,(P_MX) ;16 BIT CMP LD A,C CP L JR NZ,DMC LD A,B CP H JR NZ,DMC ; LD BC,(P_MY) LD A,C CP E JR NZ,DMC LD A,B CP D JR NZ,DMC ; ZERO FLAG=1 DMC LD (P_MX),HL LD (P_MY),DE RET Z MFORCE ;CORRECT FOR TEXT MODE SRL H RR L SRL H RR L SRL H RR L SRL D RR E SRL D RR E SRL D RR E ; E - Y, L - X CALL GET_OBJECT_ID RET ; ; INPUT: ; L - X ; E - Y ; OUTPUT: ; Z = 1, A - ID ; Z = 0 - OBJECT NOT FOUND GET_OBJECT_ID LD IX,OBJECTS_AREA OBJECT_LOOP LD A,(IX+0) OR A ;INC A RET Z ;OBJECT NOT FOUND LD A,(IX+2) ;X-MIN SUB L JR Z,OBJ_X_OK JR NC,OBJ_NEXT LD A,(IX+4) ;X-MAX SUB L JR C,OBJ_NEXT OBJ_X_OK LD A,(IX+6) ;Y-MIN SUB E JR Z,OBJ_Y_OK JR NC,OBJ_NEXT LD A,(IX+8) ;Y-MAX SUB E JR Z,OBJ_NEXT JR C,OBJ_NEXT OBJ_Y_OK LD A,(IX+0) ;ID AND A RET OBJ_NEXT LD BC,OBJECT_SIZE ADD IX,BC JR OBJECT_LOOP OBJECTS_AREA_SIZE DW 0 OBJECTS_AREA DB 0 ;+00 OBJECT HANDLE DB 0 ;+01 RESERVED DB 0 ;+02 MIN X DB 0 ;+03 RESERVED DB 0 ;+04 MAX X DB 0 ;+05 RESERVED DB 0 ;+06 MIN Y DB 0 ;+07 RESERVED DB 0 ;+08 MAX Y DB 0 ;+09 RESERVED OBJECT_SIZE EQU $-OBJECTS_AREA DS 320