diff --git a/heartpieces.asm b/heartpieces.asm index 528f708..1009d8a 100644 --- a/heartpieces.asm +++ b/heartpieces.asm @@ -147,6 +147,8 @@ RTL HeartPieceSpritePrep: PHA + LDA ServerRequestMode : BEQ + : : + + LDA #$01 : STA !REDRAW LDA $5D : CMP #$14 : BEQ .skip ; skip if we're mid-mirror diff --git a/newitems.asm b/newitems.asm index f3213d1..51f54ee 100755 --- a/newitems.asm +++ b/newitems.asm @@ -29,8 +29,8 @@ ; #$63 - RNG Pool Item (Multi) ; #$6A - Goal Item (Single/Triforce) ; #$6B - Goal Item (Multi/Power Star) -; #$6C - Server Request Synchronous -; #$6D - Server Request Asychronous +; #$6D- Server Request +; #$6E - Server Request (Dungeon Drop) ; #$70 - Maps ; #$80 - Compasses ; #$90 - Big Keys @@ -296,6 +296,12 @@ AddReceivedItemExpandedGetItem: LDA !GOAL_COUNTER : INC : STA !GOAL_COUNTER CMP GoalItemRequirement : !BLT ++ : JSL.l ActivateGoal : ++ BRL .done + + CMP.b #$6D : BNE + ; Server Request + JSL ItemGetServiceRequest + BRL .done + + CMP.b #$6E : BNE + ; Server Request (Dungeon Drop) + JSL ItemGetServiceRequest + BRL .done + CMP.b #$70 : !BLT + : CMP.b #$80 : !BGE + ; Free Map AND #$0F : CMP #$08 : !BGE ++ %ValueShift() diff --git a/servicerequest.asm b/servicerequest.asm index 2517658..b946163 100644 --- a/servicerequest.asm +++ b/servicerequest.asm @@ -8,16 +8,51 @@ ; $80 - $9F - TX Buffer ; $A0 - $FE - Reserved ; $FF - TX Status +;-------------------------------------------------------------------------------- +; Status Codes +; #$00 - Idle +; #$01 - Local Read/Write +; #$02 - Ready for External Read/Write +;-------------------------------------------------------------------------------- +; Block Commands +; #$00 - Wait +; #$01 - Signal Item-Seen +; #$02 - Signal Item-Get +; #$03 - Prompt Text +;-------------------------------------------------------------------------------- !RX_BUFFER = "$7F5300" !RX_STATUS = "$7F537F" !RX_SEQUENCE = "$7EF4A0" !TX_BUFFER = "$7F5380" !TX_STATUS = "$7F53FF" !TX_SEQUENCE = "$7EF4A0" +;-------------------------------------------------------------------------------- PollService: - LDA !RX_BASE : BNE + : RTL : + ; return if command is 0 + LDA !RX_BUFFER : BNE + : RTL : + ; return if command is 0 LDA #$01 : STA !RX_STATUS ; mark busy - LDA !RX_BASE+1 : STA !RX_SEQUENCE ; mark this as handled - LDA !RX_BASE+2 : STA !RX_SEQUENCE+1 + LDA !RX_BUFFER+1 : STA !RX_SEQUENCE ; mark this as handled + LDA !RX_BUFFER+2 : STA !RX_SEQUENCE+1 + ; whatever LDA #$00 : STA !RX_STATUS ; mark ready -RTL \ No newline at end of file +RTL +;-------------------------------------------------------------------------------- +macro ServiceRequest(type) + LDA !TX_STATUS : BEQ + : SEC : RTL : + ; return fail if status is anything but idle + LDA #$01 : STA !TX_STATUS ; mark busy + LDA $7B : STA !TX_BUFFER+1 ; world + LDA $1B : STA !TX_BUFFER+2 ; indoor/outdoor + LDA $A0 : STA !TX_BUFFER+3 ; roomid low + LDA $A1 : STA !TX_BUFFER+4 ; roomid high + LDA $76 : STA !TX_BUFFER+5 ; object index (type 2 only) + LDA : STA !TX_BUFFER ; item get + LDA #$02 : STA !TX_STATUS ; mark ready for tx + CLC ; mark request as successful +RTL +endmacro +;-------------------------------------------------------------------------------- +ItemVisualServiceRequest: +%ServiceRequest(#$01) +;-------------------------------------------------------------------------------- +ItemGetServiceRequest: +%ServiceRequest(#$02) +;-------------------------------------------------------------------------------- \ No newline at end of file