diff --git a/newitems.asm b/newitems.asm index 19d161f..da98f1a 100755 --- a/newitems.asm +++ b/newitems.asm @@ -32,15 +32,22 @@ ; #$6A - Goal Item (Single/Triforce) ; #$6B - Goal Item (Multi/Power Star) ; #$6C - Goal Item (Multi/Triforce Piece) -; #$6D - Server Request -; #$6E - Server Request (Dungeon Drop) +; #$6D - Server Request F0 (Hearts / Powder / Mushroom / Bonkable) +; #$6E - Server Request F1 (Hearts / Boss Heart / NPC) +; #$6F - Server Request F2 (Tablets / Pedestal) ; #$70 - Maps ; #$80 - Compasses ; #$90 - Big Keys ; #$A0 - Small Keys -; #$FE - Server Request (Null Chest) +; #$FE - Server Request (Asychronous Chest) ; #$FF - Null Chest ;-------------------------------------------------------------------------------- +; Service Indexes +; 0x00 - 0x04 - chests +; 0xF0 - freestanding heart / powder / mushroom / bonkable +; 0xF1 - freestanding heart 2 / boss heart / npc +; 0xF3 - tablet/pedestal +;-------------------------------------------------------------------------------- ;GetAnimatedSpriteGfxFile: ; LDY.b #$32 ; CMP.b #$39 : BCS + ; If tile index >= 0x39, use sprite file 0x32 (Blank file) @@ -320,15 +327,18 @@ AddReceivedItemExpandedGetItem: JSL.l ActivateGoal ++ BRL .done - + CMP.b #$6D : BNE + ; Server Request - JSL ItemGetServiceRequest + + CMP.b #$6D : BNE + ; Server Request F0 + JSL.l ItemGetServiceRequest_F0 + BRL .done + + CMP.b #$6E : BNE + ; Server Request F1 + JSL.l ItemGetServiceRequest_F1 + BRL .done + + CMP.b #$6F : BNE + ; Server Request F2 + JSL.l ItemGetServiceRequest_F2 BRL .done ;+ CMP.b #$FE : BNE + ; Server Request (Null Chest) - ; JSL ItemGetServiceRequest + ; JSL.l 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() @@ -494,9 +504,9 @@ AddReceivedItemExpanded: ++ : CMP.b #$65 : BNE ++ ; Progressive Bow 2 LDA.l !INVENTORY_SWAP_2 : ORA #$20 : STA.l !INVENTORY_SWAP_2 BRA -- - ++ : CMP.b #$FE : BNE ++ ; Server Request (Null Chest) - JSL ItemGetServiceRequest - BRA .done + ; ++ : CMP.b #$FE : BNE ++ ; Server Request (Null Chest) + ; JSL ChestItemServiceRequest + ; BRA .done ++ : CMP.b #$62 : BNE ++ ; RNG Item (Single) JSL.l GetRNGItemSingle : STA $02D8 XBA : JSR.w MarkRNGItemSingle diff --git a/servicerequest.asm b/servicerequest.asm index c6529a6..2a1077e 100644 --- a/servicerequest.asm +++ b/servicerequest.asm @@ -14,6 +14,12 @@ ; #$01 - Ready to Read ; #$FF - Busy ;-------------------------------------------------------------------------------- +; Service Indexes +; 0x00 - 0x04 - chests +; 0xF0 - freestanding heart / powder / mushroom / bonkable +; 0xF1 - freestanding heart 2 / boss heart / npc +; 0xF2 - tablet/pedestal +;-------------------------------------------------------------------------------- ; Block Commands !SCM_WAIT = "#$00" @@ -69,7 +75,7 @@ PollService: CLC ; mark request as successful RTL ;-------------------------------------------------------------------------------- -macro ServiceRequest(type) +macro ServiceRequestChest(type) LDA !TX_STATUS : BEQ + : SEC : RTL : + ; return fail if we don't have the lock LDA $1B : STA !TX_BUFFER+8 ; indoor/outdoor BEQ + @@ -87,10 +93,42 @@ macro ServiceRequest(type) RTL endmacro ;-------------------------------------------------------------------------------- -ItemVisualServiceRequest: -%ServiceRequest(!SCM_SEEN) +macro ServiceRequest(type,index) + LDA !TX_STATUS : BEQ + : SEC : RTL : + ; return fail if we don't have the lock + LDA $1B : STA !TX_BUFFER+8 ; indoor/outdoor + BEQ + + LDA $A0 : STA !TX_BUFFER+9 ; roomid low + LDA $A1 : STA !TX_BUFFER+10 ; roomid high + BRA ++ + + + LDA $040A : STA !TX_BUFFER+9 ; area id + LDA.b #$00 : STA !TX_BUFFER+10 ; protocol defines this as a ushort + ++ + LDA : STA !TX_BUFFER+11 ; object index (type 2 only) + LDA : STA !TX_BUFFER ; item get + LDA #$01 : STA !TX_STATUS ; mark ready for reading + CLC ; mark request as successful +RTL +endmacro +;-------------------------------------------------------------------------------- +ItemVisualServiceRequest_F0: +%ServiceRequest(!SCM_SEEN, #$F0) +;-------------------------------------------------------------------------------- +ItemVisualServiceRequest_F1: +%ServiceRequest(!SCM_SEEN, #$F1) +;-------------------------------------------------------------------------------- +ItemVisualServiceRequest_F2: +%ServiceRequest(!SCM_SEEN, #$F2) ;-------------------------------------------------------------------------------- ChestItemServiceRequest: -ItemGetServiceRequest: -%ServiceRequest(!SCM_GET) +%ServiceRequestChest(!SCM_GET) +;-------------------------------------------------------------------------------- +ItemGetServiceRequest_F0: +%ServiceRequest(!SCM_GET, #$F0) +;-------------------------------------------------------------------------------- +ItemGetServiceRequest_F1: +%ServiceRequest(!SCM_GET, #$F1) +;-------------------------------------------------------------------------------- +ItemGetServiceRequest_F2: +%ServiceRequest(!SCM_GET, #$F2) ;-------------------------------------------------------------------------------- \ No newline at end of file diff --git a/utilities.asm b/utilities.asm index c5af9df..1bd2215 100644 --- a/utilities.asm +++ b/utilities.asm @@ -16,14 +16,31 @@ GetSpriteID: CMP.b #$3C : BEQ .bottle ; Bee w/bottle CMP.b #$3D : BEQ .bottle ; Fairy w/bottle CMP.b #$48 : BEQ .bottle ; Gold Bee w/bottle - BRA .notBottle + CMP.b #$6D : BEQ .server ; Server Request F0 + CMP.b #$6E : BEQ .server ; Server Request F1 + CMP.b #$6F : BEQ .server ; Server Request F2 + BRA .normal .bottle PHA : JSR.w CountBottles : CMP.l BottleLimit : !BLT + PLA : LDA.l BottleLimitReplacement JSL.l GetSpriteID RTL + - PLA : .notBottle + PLA : BRA .normal + .server_F0 + ItemVisualServiceRequest_F0 + LDA.b #$14 + RTL + .server_F1 + ItemVisualServiceRequest_F1 + LDA.b #$14 + RTL + .server_F2 + ItemVisualServiceRequest_F2 + LDA.b #$14 + RTL + .normal + PHX PHB : PHK : PLB ;--------