shithub: pokecrystal

Download patch

ref: 6f226f584cf939015ccc3376f23c798833db4e83
parent: 9fea403be2b1cfc23323a2201ea3ecc55c6c9965
author: Rangi <remy.oukaour+rangi42@gmail.com>
date: Tue Dec 8 16:24:48 EST 2020

Identify link.asm WRAM labels based on ax6's research notes <https://pastebin.com/NTxjzKGQ>

--- a/constants/serial_constants.asm
+++ b/constants/serial_constants.asm
@@ -22,6 +22,8 @@
 USING_INTERNAL_CLOCK       EQU $02
 CONNECTION_NOT_ESTABLISHED EQU $ff
 
+; length of a patch list (less than any of the signal bytes)
+SERIAL_PATCH_LIST_LENGTH          EQU $fc
 ; signals the start of an array of bytes transferred over the link cable
 SERIAL_PREAMBLE_BYTE              EQU $fd
 ; this byte is used when there is no data to send
@@ -28,10 +30,16 @@
 SERIAL_NO_DATA_BYTE               EQU $fe
 ; signals the end of one part of a patch list (there are two parts) for player/enemy party data
 SERIAL_PATCH_LIST_PART_TERMINATOR EQU $ff
+; used to replace SERIAL_NO_DATA_BYTE
+SERIAL_PATCH_REPLACEMENT_BYTE     EQU $ff
 
 SERIAL_PREAMBLE_LENGTH EQU 6
 SERIAL_RN_PREAMBLE_LENGTH EQU 7
 SERIAL_RNS_LENGTH EQU 10
+
+SERIAL_MAIL_PREAMBLE_BYTE EQU $20
+SERIAL_MAIL_REPLACEMENT_BYTE EQU $21
+SERIAL_MAIL_PREAMBLE_LENGTH EQU 5
 
 ; timeout duration after exchanging a byte
 SERIAL_LINK_BYTE_TIMEOUT EQU $5000
--- a/engine/link/link.asm
+++ b/engine/link/link.asm
@@ -82,14 +82,14 @@
 	ld [de], a
 
 	ld hl, wLinkData
-	ld de, wOTPlayerName
-	ld bc, $1a8
+	ld de, wOTPartyData
+	ld bc, SERIAL_PREAMBLE_LENGTH + NAME_LENGTH + 1 + PARTY_LENGTH + 1 + (REDMON_STRUCT_LENGTH + NAME_LENGTH * 2) * PARTY_LENGTH + 3
 	call Serial_ExchangeBytes
 	ld a, SERIAL_NO_DATA_BYTE
 	ld [de], a
 
-	ld hl, wLink_c608
-	ld de, wTrademons
+	ld hl, wPlayerPatchLists
+	ld de, wOTPatchLists
 	ld bc, 200
 	call Serial_ExchangeBytes
 
@@ -100,7 +100,7 @@
 
 	call Link_CopyRandomNumbers
 
-	ld hl, wOTPlayerName
+	ld hl, wOTPartyData
 	call Link_FindFirstNonControlCharacter_SkipZero
 	push hl
 	ld bc, NAME_LENGTH
@@ -113,11 +113,11 @@
 	jp nc, ExitLinkCommunications
 
 	ld de, wLinkData
-	ld bc, $1a2
+	ld bc, NAME_LENGTH + 1 + PARTY_LENGTH + 1 + (REDMON_STRUCT_LENGTH + NAME_LENGTH * 2) * PARTY_LENGTH + 3
 	call Link_CopyOTData
 
-	ld de, wPlayerTrademon
-	ld hl, wTimeCapsulePlayerData
+	ld de, wOTPatchLists
+	ld hl, wLinkPatchList1
 	ld c, 2
 .loop
 	ld a, [de]
@@ -143,7 +143,7 @@
 	jr .loop
 
 .next
-	ld hl, wc90f
+	ld hl, wLinkPatchList2
 	dec c
 	jr nz, .loop
 
@@ -156,6 +156,7 @@
 	ld a, [hli]
 	ld [de], a
 	inc de
+
 .party_loop
 	ld a, [hli]
 	cp -1
@@ -238,14 +239,14 @@
 	ld [de], a
 
 	ld hl, wLinkData
-	ld de, wOTPlayerName
-	ld bc, $1c2
+	ld de, wOTPartyData
+	ld bc, SERIAL_PREAMBLE_LENGTH + NAME_LENGTH + 1 + PARTY_LENGTH + 1 + 2 + (PARTYMON_STRUCT_LENGTH + NAME_LENGTH * 2) * PARTY_LENGTH + 3
 	call Serial_ExchangeBytes
 	ld a, SERIAL_NO_DATA_BYTE
 	ld [de], a
 
-	ld hl, wLink_c608
-	ld de, wTrademons
+	ld hl, wPlayerPatchLists
+	ld de, wOTPatchLists
 	ld bc, 200
 	call Serial_ExchangeBytes
 
@@ -252,9 +253,9 @@
 	ld a, [wLinkMode]
 	cp LINK_TRADECENTER
 	jr nz, .not_trading
-	ld hl, wc9f4
-	ld de, wcb84
-	ld bc, $186
+	ld hl, wLinkPlayerMail
+	ld de, wLinkOTMail
+	ld bc, wLinkPlayerMailEnd - wLinkPlayerMail
 	call ExchangeBytes
 
 .not_trading
@@ -267,14 +268,14 @@
 
 	call Link_CopyRandomNumbers
 
-	ld hl, wOTPlayerName
+	ld hl, wOTPartyData
 	call Link_FindFirstNonControlCharacter_SkipZero
 	ld de, wLinkData
-	ld bc, $1b9
+	ld bc, NAME_LENGTH + 1 + PARTY_LENGTH + 1 + 2 + (PARTYMON_STRUCT_LENGTH + NAME_LENGTH * 2) * PARTY_LENGTH
 	call Link_CopyOTData
 
 	ld de, wPlayerTrademon
-	ld hl, wLinkPlayerData
+	ld hl, wLinkPatchList1
 	ld c, 2
 .loop1
 	ld a, [de]
@@ -300,7 +301,7 @@
 	jr .loop1
 
 .next1
-	ld hl, wc90f
+	ld hl, wLinkPatchList2
 	dec c
 	jr nz, .loop1
 
@@ -307,26 +308,26 @@
 	ld a, [wLinkMode]
 	cp LINK_TRADECENTER
 	jp nz, .skip_mail
-	ld hl, wcb84
+	ld hl, wLinkOTMail
 .loop2
 	ld a, [hli]
-	cp MAIL_MSG_LENGTH
+	cp SERIAL_MAIL_PREAMBLE_BYTE
 	jr nz, .loop2
 .loop3
 	ld a, [hli]
 	cp SERIAL_NO_DATA_BYTE
 	jr z, .loop3
-	cp MAIL_MSG_LENGTH
+	cp SERIAL_MAIL_PREAMBLE_BYTE
 	jr z, .loop3
 	dec hl
-	ld de, wcb84
-	ld bc, $190 ; 400
+	ld de, wLinkOTMail
+	ld bc, wLinkDataEnd - wLinkOTMail ; should be wLinkOTMailEnd - wLinkOTMail
 	call CopyBytes
-	ld hl, wcb84
-	ld bc, $c6 ; 198
+	ld hl, wLinkOTMail
+	ld bc, (MAIL_MSG_LENGTH + 1) * PARTY_LENGTH
 .loop4
 	ld a, [hl]
-	cp MAIL_MSG_LENGTH + 1
+	cp SERIAL_MAIL_REPLACEMENT_BYTE
 	jr nz, .okay1
 	ld [hl], SERIAL_NO_DATA_BYTE
 .okay1
@@ -335,13 +336,13 @@
 	ld a, b
 	or c
 	jr nz, .loop4
-	ld de, wcc9e
+	ld de, wOTPlayerMailPatchSet
 .loop5
 	ld a, [de]
 	inc de
 	cp SERIAL_PATCH_LIST_PART_TERMINATOR
 	jr z, .start_copying_mail
-	ld hl, wcc4a
+	ld hl, wLinkOTMailMetadata
 	dec a
 	ld b, 0
 	ld c, a
@@ -350,8 +351,8 @@
 	jr .loop5
 
 .start_copying_mail
-	ld hl, wcb84
-	ld de, wc9f4
+	ld hl, wLinkOTMail
+	ld de, wLinkReceivedMail
 	ld b, PARTY_LENGTH
 .copy_mail_loop
 	push bc
@@ -366,7 +367,7 @@
 	pop bc
 	dec b
 	jr nz, .copy_mail_loop
-	ld de, wc9f4
+	ld de, wLinkReceivedMail
 	ld b, PARTY_LENGTH
 .copy_author_loop
 	push bc
@@ -382,7 +383,7 @@
 	dec b
 	jr nz, .copy_author_loop
 	ld b, PARTY_LENGTH
-	ld de, wc9f4
+	ld de, wLinkReceivedMail
 .fix_mail_loop
 	push bc
 	push de
@@ -409,7 +410,7 @@
 	pop bc
 	dec b
 	jr nz, .fix_mail_loop
-	ld de, wcb0e
+	ld de, wLinkReceivedMailEnd
 	xor a
 	ld [de], a
 
@@ -605,7 +606,7 @@
 	dec b
 	jr nz, .rn_loop
 
-	ld hl, wLink_c608
+	ld hl, wPlayerPatchLists
 	ld a, SERIAL_PREAMBLE_BYTE
 	ld [hli], a
 	ld [hli], a
@@ -618,13 +619,13 @@
 	dec b
 	jr nz, .loop1
 
-	ld hl, wTimeCapsulePlayerData - 1 + PARTY_LENGTH
-	ld de, wc612
+	ld hl, (wLinkData + SERIAL_PREAMBLE_LENGTH + NAME_LENGTH + 1 + PARTY_LENGTH + 1) - 1
+	ld de, wPlayerPatchLists + 10 ; ???
 	lb bc, 0, 0
 .loop2
 	inc c
 	ld a, c
-	cp SERIAL_PREAMBLE_BYTE
+	cp SERIAL_PATCH_LIST_LENGTH + 1
 	jr z, .next1
 	ld a, b
 	dec a
@@ -632,9 +633,9 @@
 	push bc
 	ld a, [wLinkMode]
 	cp LINK_TIMECAPSULE
-	ld b, $d
+	ld b, REDMON_STRUCT_LENGTH * PARTY_LENGTH - SERIAL_PATCH_LIST_LENGTH + 1
 	jr z, .got_value
-	ld b, $27
+	ld b, 2 + PARTYMON_STRUCT_LENGTH * PARTY_LENGTH - SERIAL_PATCH_LIST_LENGTH + 1
 .got_value
 	ld a, c
 	cp b
@@ -648,7 +649,7 @@
 	ld a, c
 	ld [de], a
 	inc de
-	ld [hl], SERIAL_PATCH_LIST_PART_TERMINATOR
+	ld [hl], SERIAL_PATCH_REPLACEMENT_BYTE
 	jr .loop2
 
 .next1
@@ -872,12 +873,12 @@
 	cp LINK_TRADECENTER
 	ret nz
 
-; Fill 5 bytes at wc9f4 with $20
-	ld de, wc9f4
-	ld a, $20
+; Fill 5 bytes at wLinkPlayerMailPreamble with $20
+	ld de, wLinkPlayerMailPreamble
+	ld a, SERIAL_MAIL_PREAMBLE_BYTE
 	call Link_CopyMailPreamble
 
-; Copy all the mail messages to wc9f9
+; Copy all the mail messages to wLinkPlayerMailMessages
 	ld a, BANK(sPartyMail)
 	call OpenSRAM
 	ld hl, sPartyMail
@@ -886,12 +887,12 @@
 	push bc
 	ld bc, MAIL_MSG_LENGTH + 1
 	call CopyBytes
-	ld bc, sPartyMon1MailEnd - sPartyMon1MailAuthor
+	ld bc, MAIL_STRUCT_LENGTH - (MAIL_MSG_LENGTH + 1)
 	add hl, bc
 	pop bc
 	dec b
 	jr nz, .loop2
-; Copy the mail data to wcabf
+; Copy the mail data to wLinkPlayerMailMetadata
 	ld hl, sPartyMail
 	ld b, PARTY_LENGTH
 .loop3
@@ -898,7 +899,7 @@
 	push bc
 	ld bc, MAIL_MSG_LENGTH + 1
 	add hl, bc
-	ld bc, sPartyMon1MailEnd - sPartyMon1MailAuthor
+	ld bc, MAIL_STRUCT_LENGTH - (MAIL_MSG_LENGTH + 1)
 	call CopyBytes
 	pop bc
 	dec b
@@ -905,7 +906,7 @@
 	jr nz, .loop3
 	ld b, PARTY_LENGTH
 	ld de, sPartyMail
-	ld hl, wc9f9
+	ld hl, wLinkPlayerMailMessages
 .loop4
 	push bc
 	push hl
@@ -931,7 +932,7 @@
 	ld d, h
 	ld e, l
 	pop hl
-	ld bc, sPartyMon1MailAuthor - sPartyMon1Mail
+	ld bc, MAIL_MSG_LENGTH + 1
 	add hl, bc
 	pop bc
 	dec b
@@ -938,13 +939,13 @@
 	jr nz, .loop4
 	call CloseSRAM
 
-	ld hl, wc9f9
-	ld bc, PARTY_LENGTH * (sPartyMon1MailAuthor - sPartyMon1Mail)
+	ld hl, wLinkPlayerMailMessages
+	ld bc, (MAIL_MSG_LENGTH + 1) * PARTY_LENGTH
 .loop5
 	ld a, [hl]
 	cp SERIAL_NO_DATA_BYTE
 	jr nz, .skip2
-	ld [hl], sPartyMon1MailAuthor - sPartyMon1Mail
+	ld [hl], SERIAL_MAIL_REPLACEMENT_BYTE
 .skip2
 	inc hl
 	dec bc
@@ -952,16 +953,16 @@
 	or c
 	jr nz, .loop5
 
-	ld hl, wcabf
-	ld de, wcb13
-	ld b, PARTY_LENGTH * (sPartyMon1MailEnd - sPartyMon1MailAuthor)
-	ld c, $0
+	ld hl, wLinkPlayerMailMetadata
+	ld de, wLinkPlayerMailPatchSet
+	ld b, (MAIL_STRUCT_LENGTH - (MAIL_MSG_LENGTH + 1)) * PARTY_LENGTH
+	ld c, 0
 .loop6
 	inc c
 	ld a, [hl]
 	cp SERIAL_NO_DATA_BYTE
 	jr nz, .skip3
-	ld [hl], SERIAL_PATCH_LIST_PART_TERMINATOR
+	ld [hl], SERIAL_PATCH_REPLACEMENT_BYTE
 	ld a, c
 	ld [de], a
 	inc de
@@ -976,7 +977,7 @@
 
 Link_CopyMailPreamble:
 ; fill 5 bytes with the value of a, starting at de
-	ld c, 5
+	ld c, SERIAL_MAIL_PREAMBLE_LENGTH
 .loop
 	ld [de], a
 	inc de
@@ -989,7 +990,7 @@
 	ld d, h
 	ld e, l
 	ld bc, wLinkOTPartyMonTypes
-	ld hl, wcbe8
+	ld hl, wCurLinkOTPartyMonTypePtr
 	ld a, c
 	ld [hli], a
 	ld [hl], b
@@ -1039,7 +1040,7 @@
 	ld a, [de]
 	inc de
 	ld [hl], a
-	ld hl, wcbe8
+	ld hl, wCurLinkOTPartyMonTypePtr
 	ld a, [hli]
 	ld h, [hl]
 	ld l, a
@@ -1050,9 +1051,9 @@
 	ld [hli], a
 	inc de
 	ld a, l
-	ld [wcbe8], a
+	ld [wCurLinkOTPartyMonTypePtr], a
 	ld a, h
-	ld [wcbe8 + 1], a
+	ld [wCurLinkOTPartyMonTypePtr + 1], a
 	push bc
 	ld hl, MON_ITEM
 	add hl, bc
@@ -1481,7 +1482,7 @@
 	farcall CheckAnyOtherAliveMonsForTrade
 	jp nc, LinkTrade
 	xor a
-	ld [wcf57], a
+	ld [wUnusedLinkAction], a
 	ld [wOtherPlayerLinkAction], a
 	hlcoord 0, 12
 	ld b, 4
@@ -1495,7 +1496,7 @@
 
 .abnormal
 	xor a
-	ld [wcf57], a
+	ld [wUnusedLinkAction], a
 	ld [wOtherPlayerLinkAction], a
 	ld a, [wCurOTTradePartyMon]
 	ld hl, wOTPartySpecies
@@ -1655,7 +1656,7 @@
 
 LinkTrade:
 	xor a
-	ld [wcf57], a
+	ld [wUnusedLinkAction], a
 	ld [wOtherPlayerLinkAction], a
 	hlcoord 0, 12
 	ld b, 4
@@ -1784,7 +1785,7 @@
 	ld bc, MAIL_STRUCT_LENGTH
 	call AddNTimes
 	push hl
-	ld hl, wc9f4
+	ld hl, wLinkPlayerMail
 	ld a, [wCurOTTradePartyMon]
 	ld bc, MAIL_STRUCT_LENGTH
 	call AddNTimes
@@ -2554,7 +2555,7 @@
 Link_EnsureSync:
 	add $d0
 	ld [wPlayerLinkAction], a
-	ld [wcf57], a
+	ld [wUnusedLinkAction], a
 	ld a, $2
 	ldh [hVBlank], a
 	call DelayFrame
--- a/wram.asm
+++ b/wram.asm
@@ -683,10 +683,15 @@
 wUnownPuzzleEnd::
 
 NEXTU
-wMobileTransferData:: ds $1e0
+; link patch lists
+wPlayerPatchLists:: ds 200
+wOTPatchLists:: ds 200
 
 NEXTU
+wMobileTransferData:: ds 480
 
+NEXTU
+
 ; This union spans 200 bytes.
 UNION
 ; timeset temp storage
@@ -703,11 +708,6 @@
 wHallOfFameTemp:: hall_of_fame wHallOfFameTemp
 
 NEXTU
-; link engine data
-wLink_c608:: ds 10
-wc612:: ds 10
-
-NEXTU
 ; odd egg
 wOddEgg:: party_struct wOddEgg
 wOddEggName:: ds MON_NAME_LENGTH
@@ -796,7 +796,6 @@
 
 NEXTU
 ; trade
-wTrademons::
 wPlayerTrademon:: trademon wPlayerTrademon
 wOTTrademon::     trademon wOTTrademon
 wTradeAnimAddress:: dw
@@ -967,29 +966,7 @@
 
 NEXTU
 ; raw link data
-wLinkData:: ds 271
-wc90f:: ds 229
-wc9f4:: ds 5
-wc9f9:: ds 198
-wcabf:: ds 79
-wcb0e:: ds 5
-wcb13:: ds 113
-wcb84:: ds 100
-wcbe8:: dw
-wLinkOTPartyMonTypes:: ds 2 * PARTY_LENGTH
-	ds 84
-wcc4a:: ds 22
-wcc60:: ds 1
-wcc61:: ds 1
-wcc62:: ds 2
-wcc64:: ds 1
-wcc65:: ds 57
-wcc9e:: ds 22
-wccb4:: ds 1
-wccb5:: ds 3
-wccb8:: ds 1
-wccb9:: ds 1
-wccba:: ds 90
+wLinkData:: ds 1300
 wLinkDataEnd::
 
 NEXTU
@@ -1000,6 +977,18 @@
 wLinkPartyEnd:: db ; older code doesn't check PartyCount
 
 UNION
+; link player data
+wLinkPlayerData::
+wLinkPlayerPartyMon1:: party_struct wLinkPlayerPartyMon1
+wLinkPlayerPartyMon2:: party_struct wLinkPlayerPartyMon2
+wLinkPlayerPartyMon3:: party_struct wLinkPlayerPartyMon3
+wLinkPlayerPartyMon4:: party_struct wLinkPlayerPartyMon4
+wLinkPlayerPartyMon5:: party_struct wLinkPlayerPartyMon5
+wLinkPlayerPartyMon6:: party_struct wLinkPlayerPartyMon6
+wLinkPlayerPartyMonOTNames:: ds NAME_LENGTH * PARTY_LENGTH
+wLinkPlayerPartyMonNicks:: ds MON_NAME_LENGTH * PARTY_LENGTH
+
+NEXTU
 ; time capsule party data
 wTimeCapsulePlayerData::
 wTimeCapsulePartyMon1:: red_party_struct wTimeCapsulePartyMon1
@@ -1008,23 +997,45 @@
 wTimeCapsulePartyMon4:: red_party_struct wTimeCapsulePartyMon4
 wTimeCapsulePartyMon5:: red_party_struct wTimeCapsulePartyMon5
 wTimeCapsulePartyMon6:: red_party_struct wTimeCapsulePartyMon6
-wTimeCapsulePartyMonOTNames:: ds PARTY_LENGTH * NAME_LENGTH
-wTimeCapsulePartyMonNicks:: ds PARTY_LENGTH * MON_NAME_LENGTH
+wTimeCapsulePartyMonOTNames:: ds NAME_LENGTH * PARTY_LENGTH
+wTimeCapsulePartyMonNicks:: ds MON_NAME_LENGTH * PARTY_LENGTH
 
 NEXTU
-; link player data
-wLinkPlayerData::
-wLinkPlayerPartyMon1:: party_struct wLinkPlayerPartyMon1
-wLinkPlayerPartyMon2:: party_struct wLinkPlayerPartyMon2
-wLinkPlayerPartyMon3:: party_struct wLinkPlayerPartyMon3
-wLinkPlayerPartyMon4:: party_struct wLinkPlayerPartyMon4
-wLinkPlayerPartyMon5:: party_struct wLinkPlayerPartyMon5
-wLinkPlayerPartyMon6:: party_struct wLinkPlayerPartyMon6
-wLinkPlayerPartyMonOTNames:: ds PARTY_LENGTH * NAME_LENGTH
-wLinkPlayerPartyMonNicks:: ds PARTY_LENGTH * MON_NAME_LENGTH
+; link patch lists
+wLinkPatchList1:: ds SERIAL_PATCH_LIST_LENGTH
+wLinkPatchList2:: ds SERIAL_PATCH_LIST_LENGTH
 ENDU
 
 NEXTU
+; link data prep
+	ds 1000
+wCurLinkOTPartyMonTypePtr:: dw
+wLinkOTPartyMonTypes:: ds 2 * PARTY_LENGTH
+
+NEXTU
+; link mail data
+	ds 500
+wLinkPlayerMail::
+wLinkPlayerMailPreamble:: ds SERIAL_MAIL_PREAMBLE_LENGTH
+wLinkPlayerMailMessages:: ds (MAIL_MSG_LENGTH + 1) * PARTY_LENGTH
+wLinkPlayerMailMetadata:: ds (MAIL_STRUCT_LENGTH - (MAIL_MSG_LENGTH + 1)) * PARTY_LENGTH
+wLinkPlayerMailPatchSet:: ds 103
+wLinkPlayerMailEnd::
+	ds 10
+wLinkOTMail::
+wLinkOTMailMessages:: ds (MAIL_MSG_LENGTH + 1) * PARTY_LENGTH
+wLinkOTMailMetadata:: ds (MAIL_STRUCT_LENGTH - (MAIL_MSG_LENGTH + 1)) * PARTY_LENGTH
+wOTPlayerMailPatchSet:: ds 103 + SERIAL_MAIL_PREAMBLE_LENGTH
+wLinkOTMailEnd::
+	ds 10
+
+NEXTU
+; received link mail data
+	ds 500
+wLinkReceivedMail:: ds MAIL_STRUCT_LENGTH * PARTY_LENGTH
+wLinkReceivedMailEnd:: db
+
+NEXTU
 ; mystery gift data
 wMysteryGiftStaging:: ds 80
 
@@ -1099,7 +1110,18 @@
 wMobileSDK_ReceivePacketBufferAlt:: ds 11
 wMobileSDK_ReceivedBytes:: dw
 wMobileSDK_ReceivePacketBuffer:: ds 267
-wMobileSDK_PacketBuffer:: ds 461
+wMobileSDK_PacketBuffer:: ds 281
+wcc60:: ds 1
+wcc61:: ds 1
+wcc62:: ds 2
+wcc64:: ds 1
+wcc65:: ds 57
+	ds 22
+wccb4:: ds 1
+wccb5:: ds 3
+wccb8:: ds 1
+wccb9:: ds 1
+wccba:: ds 90
 
 if DEF(_DEBUG)
 NEXTU
@@ -1337,7 +1359,7 @@
 wOtherPlayerLinkAction:: db
 	ds 3
 wPlayerLinkAction:: db
-wcf57:: db
+wUnusedLinkAction:: db
 	ds 3
 wLinkTimeoutFrames:: dw
 wLinkByteTimeout:: dw
@@ -2512,6 +2534,7 @@
 
 NEXTU
 ; enemy party
+wOTPartyData::
 wOTPlayerName:: ds NAME_LENGTH
 wOTPlayerID:: dw
 	ds 8