summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpikalaxalt <PikalaxALT@gmail.com>2016-06-20 09:38:59 -0400
committerpikalaxalt <PikalaxALT@gmail.com>2016-06-20 09:38:59 -0400
commit1b4991c001c8621364c397e2e3ffceb5690278f1 (patch)
tree832012a603fab1e6bc2edbf421a8722e455ef857
parent25cec8486a08716b840d4dc20fb5c7099c1ef568 (diff)
continue disassembling bank 2
-rwxr-xr-xengine/player_object.asm786
-rwxr-xr-xengine/specials.asm2
-rw-r--r--main.asm126
-rw-r--r--wram.asm3
4 files changed, 899 insertions, 18 deletions
diff --git a/engine/player_object.asm b/engine/player_object.asm
new file mode 100755
index 00000000..45562e8e
--- /dev/null
+++ b/engine/player_object.asm
@@ -0,0 +1,786 @@
+BlankScreen:
+ call DisableSpriteUpdates
+ xor a
+ ld [hBGMapMode], a
+ call ClearBGPalettes
+ call ClearSprites
+ ld hl, wTileMap
+ ld bc, SCREEN_HEIGHT * SCREEN_WIDTH
+ ld a, " "
+ call ByteFill
+ ld hl, wAttrMap
+ ld bc, SCREEN_HEIGHT * SCREEN_WIDTH
+ ld a, $7
+ call ByteFill
+ call Function3456
+ call SetPalettes
+ ret
+
+SpawnPlayer: ; 861a (2:461a)
+ ld a, $ff
+ ld [wObjectFollow_Leader], a
+ ld [wObjectFollow_Follower], a
+ ld a, $0
+ ld hl, .PlayerObjectTemplate
+ call CopyPlayerObjectTemplate
+ ld b, $0
+ call PlayerSpawn_ConvertCoords
+ ld a, $0
+ ld [hObjectStructIndexBuffer], a
+ ld de, wObjectStructs
+ ld a, $0
+ ld [hMapObjectIndexBuffer], a
+ ld bc, wMapObjects
+ call CopyMapObjectToObjectStruct
+ ld a, $0
+ ld [wCenteredObject], a
+ ret
+
+.PlayerObjectTemplate
+ person_event SPRITE_CHRIS, -4, -4, SPRITEMOVEDATA_PLAYER, 15, 15, -1, -1, 0, PERSONTYPE_SCRIPT, 0, 0, -1
+
+CopyDECoordsToMapObject: ; 8653 (2:4653)
+ push de
+ ld a, b
+ call GetMapObject
+ pop de
+ ld hl, $3
+ add hl, bc
+ ld [hl], d
+ ld hl, $2
+ add hl, bc
+ ld [hl], e
+ ret
+
+PlayerSpawn_ConvertCoords: ; 8664 (2:4664)
+ push bc
+ ld a, [wXCoord]
+ add $4
+ ld d, a
+ ld a, [wYCoord]
+ add $4
+ ld e, a
+ pop bc
+ call CopyDECoordsToMapObject
+ ret
+
+WritePersonXY:
+ ld a, b
+ call CheckObjectVisibility
+ ret c
+ ld hl, $10
+ add hl, bc
+ ld d, [hl]
+ ld hl, $11
+ add hl, bc
+ ld e, [hl]
+ ld a, [hConnectionStripLength]
+ ld b, a
+ call CopyDECoordsToMapObject
+ and a
+ ret
+
+RefreshPlayerCoords:
+ ld a, [wXCoord]
+ add $4
+ ld d, a
+ ld hl, wPlayerStandingMapX
+ sub [hl]
+ ld [hl], d
+ ld hl, wPlayerObjectXCoord
+ ld [hl], d
+ ld hl, wPlayerLastMapX
+ ld [hl], d
+ ld d, a
+ ld a, [wYCoord]
+ add $4
+ ld e, a
+ ld hl, wPlayerStandingMapY
+ sub [hl]
+ ld [hl], e
+ ld hl, wPlayerObjectYCoord
+ ld [hl], e
+ ld hl, wPlayerLastMapY
+ ld [hl], e
+ ld e, a
+ ld a, [wObjectFollow_Leader]
+ cp $0
+ ret nz
+ ret
+
+SpawnPlayer2:
+ ld a, $1
+ ld hl, .PlayerObjectTemplate
+ call CopyPlayerObjectTemplate
+ ld b, $1
+ call PlayerSpawn_ConvertCoords
+ ret
+
+.PlayerObjectTemplate:
+ person_event SPRITE_CHRIS, -4, -4, SPRITEMOVEDATA_12, 15, 15, -1, -1, 0, PERSONTYPE_SCRIPT, 0, 0, -1
+
+CopyObjectStruct_:: ; 86d7 (2:46d7)
+ call CheckObjectMask
+ and a
+ ret nz
+ ld hl, wPlayerStructEnd
+ ld a, $1
+ ld de, $28
+.asm_86e4
+ ld [hObjectStructIndexBuffer], a
+ ld a, [hl]
+ and a
+ jr z, .asm_86f4
+ add hl, de
+ ld a, [hConnectedMapWidth]
+ inc a
+ cp $d
+ jr nz, .asm_86e4
+ scf
+ ret
+
+.asm_86f4
+ ld d, h
+ ld e, l
+ call CopyMapObjectToObjectStruct
+ ld a, [wVramState]
+ bit 7, a
+ ret z
+ ld hl, $5
+ add hl, de
+ set 5, [hl]
+ ret
+
+CopyMapObjectToObjectStruct: ; 8706 (2:4706)
+ call CopyMapObjectToTempObject
+ call CopyTempObjectToObjectStruct
+ ret
+
+CopyMapObjectToTempObject: ; 870d (2:470d)
+ ld a, [hConnectedMapWidth]
+ ld hl, $0
+ add hl, bc
+ ld [hl], a
+ ld a, [hMapObjectIndexBuffer]
+ ld [wce99], a
+ ld hl, $1
+ add hl, bc
+ ld a, [hl]
+ ld [wce9a], a
+ call GetSpriteVTile
+ ld [wce9b], a
+ ld a, [hl]
+ call GetSpritePalette
+ ld [wce9c], a
+ ld hl, $8
+ add hl, bc
+ ld a, [hl]
+ and $f0
+ jr z, .asm_873e
+ swap a
+ and $7
+ ld [wce9c], a
+.asm_873e
+ ld hl, $4
+ add hl, bc
+ ld a, [hl]
+ ld [wce9d], a
+ ld hl, $9
+ add hl, bc
+ ld a, [hl]
+ ld [wce9e], a
+ ld hl, $3
+ add hl, bc
+ ld a, [hl]
+ ld [wce9f], a
+ ld hl, $2
+ add hl, bc
+ ld a, [hl]
+ ld [wcea0], a
+ ld hl, $5
+ add hl, bc
+ ld a, [hl]
+ ld [wcea1], a
+ ret
+
+InitializeVariableSprites:
+ ld bc, wMap2Object
+ ld a, $2
+.asm_876c
+ ld [hConnectionStripLength], a
+ ld hl, $1
+ add hl, bc
+ ld a, [hl]
+ and a
+ jr z, .asm_87ab
+ ld hl, $0
+ add hl, bc
+ ld a, [hl]
+ cp $ff
+ jr nz, .asm_87ab
+ ld a, [wXCoord]
+ ld d, a
+ ld a, [wYCoord]
+ ld e, a
+ ld hl, $3
+ add hl, bc
+ ld a, [hl]
+ add $1
+ sub d
+ jr c, .asm_87ab
+ cp $c
+ jr nc, .asm_87ab
+ ld hl, $2
+ add hl, bc
+ ld a, [hl]
+ add $1
+ sub e
+ jr c, .asm_87ab
+ cp $b
+ jr nc, .asm_87ab
+ push bc
+ call CopyObjectStruct_
+ pop bc
+ jp c, Function87b9
+.asm_87ab
+ ld hl, $10
+ add hl, bc
+ ld b, h
+ ld c, l
+ ld a, [hMapObjectIndexBuffer]
+ inc a
+ cp $10
+ jr nz, .asm_876c
+ ret
+
+Function87b9: ; 87b9 (2:47b9)
+ ret
+
+CheckObjectEnteringVisibleRange:
+ nop
+ ld a, [wPlayerStepDirection]
+ cp $ff
+ ret z
+ ld hl, .Jumptable
+ rst JumpTable
+ ret
+
+.Jumptable:
+ dw Function87d5
+ dw Function87ce
+ dw Function8822
+ dw Function8829
+
+Function87ce:
+ ld a, [wYCoord]
+ sub $1
+ jr asm_87da
+
+Function87d5:
+ ld a, [wYCoord]
+ add $9
+asm_87da
+ ld d, a
+ ld a, [wXCoord]
+ ld e, a
+ ld bc, wMap2Object
+ ld a, $2
+.asm_87e4
+ ld [hConnectionStripLength], a
+ ld hl, $1
+ add hl, bc
+ ld a, [hl]
+ and a
+ jr z, .asm_8814
+ ld hl, $2
+ add hl, bc
+ ld a, d
+ cp [hl]
+ jr nz, .asm_8814
+ ld hl, $0
+ add hl, bc
+ ld a, [hl]
+ cp $ff
+ jr nz, .asm_8814
+ ld hl, $3
+ add hl, bc
+ ld a, [hl]
+ add $1
+ sub e
+ jr c, .asm_8814
+ cp $c
+ jr nc, .asm_8814
+ push de
+ push bc
+ call CopyObjectStruct_
+ pop bc
+ pop de
+.asm_8814
+ ld hl, $10
+ add hl, bc
+ ld b, h
+ ld c, l
+ ld a, [hMapObjectIndexBuffer]
+ inc a
+ cp $10
+ jr nz, .asm_87e4
+ ret
+
+Function8822:
+ ld a, [wXCoord]
+ sub $1
+ jr asm_882e
+
+Function8829:
+ ld a, [wXCoord]
+ add $a
+asm_882e
+ ld e, a
+ ld a, [wYCoord]
+ ld d, a
+ ld bc, wMap2Object
+ ld a, $2
+.asm_8838
+ ld [hConnectionStripLength], a
+ ld hl, $1
+ add hl, bc
+ ld a, [hl]
+ and a
+ jr z, .asm_8868
+ ld hl, $3
+ add hl, bc
+ ld a, e
+ cp [hl]
+ jr nz, .asm_8868
+ ld hl, $0
+ add hl, bc
+ ld a, [hl]
+ cp $ff
+ jr nz, .asm_8868
+ ld hl, $2
+ add hl, bc
+ ld a, [hl]
+ add $1
+ sub d
+ jr c, .asm_8868
+ cp $b
+ jr nc, .asm_8868
+ push de
+ push bc
+ call CopyObjectStruct_
+ pop bc
+ pop de
+.asm_8868
+ ld hl, $10
+ add hl, bc
+ ld b, h
+ ld c, l
+ ld a, [hConnectionStripLength]
+ inc a
+ cp $10
+ jr nz, .asm_8838
+ ret
+
+CopyTempObjectToObjectStruct: ; 8876 (2:4876)
+ ld a, [wce99]
+ ld hl, $1
+ add hl, de
+ ld [hl], a
+ ld a, [wce9d]
+ call CopySpriteMovementData
+ ld a, [wce9c]
+ ld hl, $6
+ add hl, de
+ or [hl]
+ ld [hl], a
+ ld a, [wcea0]
+ call InitTempObjectYCoord
+ ld a, [wce9f]
+ call InitTempObjectXCoord
+ ld a, [wce9a]
+ ld hl, $0
+ add hl, de
+ ld [hl], a
+ ld a, [wce9b]
+ ld hl, $2
+ add hl, de
+ ld [hl], a
+ ld hl, $9
+ add hl, de
+ ld [hl], $0
+ ld hl, $d
+ add hl, de
+ ld [hl], $ff
+ ld a, [wcea1]
+ call InitTempObjectRadius
+ ld a, [wce9e]
+ ld hl, $20
+ add hl, de
+ ld [hl], a
+ and a
+ ret
+
+InitTempObjectYCoord: ; 88c5 (2:48c5)
+ ld hl, $15
+ add hl, de
+ ld [hl], a
+ ld hl, $11
+ add hl, de
+ ld [hl], a
+ ld hl, wYCoord
+ sub [hl]
+ and $f
+ swap a
+ ld hl, wce82
+ sub [hl]
+ ld hl, $18
+ add hl, de
+ ld [hl], a
+ ret
+
+InitTempObjectXCoord: ; 88e1 (2:48e1)
+ ld hl, $14
+ add hl, de
+ ld [hl], a
+ ld hl, $10
+ add hl, de
+ ld [hl], a
+ ld hl, wXCoord
+ sub [hl]
+ and $f
+ swap a
+ ld hl, wce81
+ sub [hl]
+ ld hl, $17
+ add hl, de
+ ld [hl], a
+ ret
+
+InitTempObjectRadius: ; 88fd (2:48fd)
+ ld h, a
+ inc a
+ and $f
+ ld l, a
+ ld a, h
+ add $10
+ and $f0
+ or l
+ ld hl, $16
+ add hl, de
+ ld [hl], a
+ ret
+
+TrainerWalkToPlayer:
+ ld a, [hLastTalked]
+ call InitMovementBuffer
+ ld a, movement_step_sleep
+ call AppendToMovementBuffer
+ ld a, [wcf2a]
+ dec a
+ jr z, .asm_892b
+ ld a, [hLastTalked]
+ ld b, a
+ ld c, PLAYER
+ ld d, $1
+ call GetTrainerPathToPlayer
+ call DecrementMovementBufferCount
+.asm_892b
+ ld a, movement_step_end
+ call AppendToMovementBuffer
+ ret
+
+GetTrainerPathToPlayer: ; 8931 (2:4931)
+ push de
+ push bc
+ ld a, c
+ call GetMapObject
+ ld hl, $0
+ add hl, bc
+ ld a, [hl]
+ call GetObjectStruct
+ ld d, b
+ ld e, c
+ pop bc
+ ld a, b
+ call GetMapObject
+ ld hl, $0
+ add hl, bc
+ ld a, [hl]
+ call GetObjectStruct
+ ld hl, $10
+ add hl, bc
+ ld a, [hl]
+ ld hl, $11
+ add hl, bc
+ ld c, [hl]
+ ld b, a
+ ld hl, $10
+ add hl, de
+ ld a, [hl]
+ ld hl, $11
+ add hl, de
+ ld e, [hl]
+ ld d, a
+ pop af
+ call ComputePathToWalkToPlayer
+ ret
+
+Special_SurfStartStep: ; 8969 (2:4969)
+ call InitMovementBuffer
+ call GetInitialSurfStep
+ call AppendToMovementBuffer
+ ld a, movement_step_end
+ call AppendToMovementBuffer
+ ret
+
+GetInitialSurfStep: ; 8978 (2:4978)
+ ld a, [wPlayerDirection]
+ srl a
+ srl a
+ and $3
+ ld e, a
+ ld d, $0
+ ld hl, .Data ; $498a
+ add hl, de
+ ld a, [hl]
+ ret
+
+.Data
+ slow_step DOWN
+ slow_step UP
+ slow_step LEFT
+ slow_step RIGHT
+
+FollowNotExact:
+ push bc
+ ld a, c
+ call CheckObjectVisibility
+ ld d, b
+ ld e, c
+ pop bc
+ ret c
+ ld a, b
+ call CheckObjectVisibility
+ ret c
+ ld hl, $10
+ add hl, bc
+ ld a, [hl]
+ ld hl, $11
+ add hl, bc
+ ld c, [hl]
+ ld b, a
+ ld hl, $10
+ add hl, de
+ ld a, [hl]
+ cp b
+ jr z, .asm_89b7
+ jr c, .asm_89b4
+ inc b
+ jr .asm_89c5
+
+.asm_89b4
+ dec b
+ jr .asm_89c5
+
+.asm_89b7
+ ld hl, $11
+ add hl, de
+ ld a, [hl]
+ cp c
+ jr z, .asm_89c5
+ jr c, .asm_89c4
+ inc c
+ jr .asm_89c5
+
+.asm_89c4
+ dec c
+.asm_89c5
+ ld hl, $10
+ add hl, de
+ ld [hl], b
+ ld a, b
+ ld hl, wXCoord
+ sub [hl]
+ and $f
+ swap a
+ ld hl, wce81
+ sub [hl]
+ ld hl, $17
+ add hl, de
+ ld [hl], a
+ ld hl, $11
+ add hl, de
+ ld [hl], c
+ ld a, c
+ ld hl, wYCoord
+ sub [hl]
+ and $f
+ swap a
+ ld hl, wce82
+ sub [hl]
+ ld hl, $18
+ add hl, de
+ ld [hl], a
+ ld a, [hObjectStructIndexBuffer]
+ ld hl, $20
+ add hl, de
+ ld [hl], a
+ ld hl, $3
+ add hl, de
+ ld [hl], $1a
+ ld hl, $9
+ add hl, de
+ ld [hl], $0
+ ret
+
+GetRelativeFacing:
+ ld a, d
+ call GetMapObject
+ ld hl, $0
+ add hl, bc
+ ld a, [hl]
+ cp $d
+ jr nc, .asm_8a27
+ ld d, a
+ ld a, e
+ call GetMapObject
+ ld hl, $0
+ add hl, bc
+ ld a, [hl]
+ cp $d
+ jr nc, .asm_8a27
+ ld e, a
+ call GetFacing_e_relativeto_d
+ ret
+
+.asm_8a27
+ scf
+ ret
+
+GetFacing_e_relativeto_d: ; 8a29 (2:4a29)
+ ld a, d
+ call GetObjectStruct
+ ld hl, $10
+ add hl, bc
+ ld a, [hl]
+ ld hl, $11
+ add hl, bc
+ ld c, [hl]
+ ld b, a
+ push bc
+ ld a, e
+ call GetObjectStruct
+ ld hl, $10
+ add hl, bc
+ ld d, [hl]
+ ld hl, $11
+ add hl, bc
+ ld e, [hl]
+ pop bc
+ ld a, b
+ sub d
+ jr z, .asm_8a5c
+ jr nc, .asm_8a50
+ cpl
+ inc a
+.asm_8a50
+ ld h, a
+ ld a, c
+ sub e
+ jr z, .asm_8a6a
+ jr nc, .asm_8a59
+ cpl
+ inc a
+.asm_8a59
+ sub h
+ jr c, .asm_8a6a
+.asm_8a5c
+ ld a, c
+ cp e
+ jr z, .asm_8a78
+ jr c, .asm_8a66
+ ld d, $0
+ and a
+ ret
+
+.asm_8a66
+ ld d, $1
+ and a
+ ret
+
+.asm_8a6a
+ ld a, b
+ cp d
+ jr z, .asm_8a78
+ jr c, .asm_8a74
+ ld d, $3
+ and a
+ ret
+
+.asm_8a74
+ ld d, $2
+ and a
+ ret
+
+.asm_8a78
+ scf
+ ret
+
+QueueFollowerFirstStep: ; 8a7a (2:4a7a)
+ call Function8a8d
+ jr c, .asm_8a87
+ ld [wFollowMovementQueue], a
+ xor a
+ ld [wFollowerMovementQueueLength], a
+ ret
+
+.asm_8a87
+ ld a, $ff
+ ld [wFollowerMovementQueueLength], a
+ ret
+
+Function8a8d: ; 8a8d (2:4a8d)
+ ld a, [wObjectFollow_Leader]
+ call GetObjectStruct
+ ld hl, $10
+ add hl, bc
+ ld d, [hl]
+ ld hl, $11
+ add hl, bc
+ ld e, [hl]
+ ld a, [wObjectFollow_Follower]
+ call GetObjectStruct
+ ld hl, $10
+ add hl, bc
+ ld a, d
+ cp [hl]
+ jr z, .asm_8ab5
+ jr c, .asm_8ab1
+ and a
+ ld a, $f
+ ret
+
+.asm_8ab1
+ and a
+ ld a, $e
+ ret
+
+.asm_8ab5
+ ld hl, $11
+ add hl, bc
+ ld a, e
+ cp [hl]
+ jr z, .asm_8ac7
+ jr c, .asm_8ac3
+ and a
+ ld a, $c
+ ret
+
+.asm_8ac3
+ and a
+ ld a, $d
+ ret
+
+.asm_8ac7
+ scf
+ ret
diff --git a/engine/specials.asm b/engine/specials.asm
index 09f9dfdb..d620c3bd 100755
--- a/engine/specials.asm
+++ b/engine/specials.asm
@@ -75,7 +75,7 @@ SpecialsPointers:
add_special PlayMapMusic
add_special RestartMapMusic
add_special Function126fd
- add_special Function8969
+ add_special Special_SurfStartStep
add_special Special_FindGreaterThanThatLevel
add_special Special_FindAtLeastThatHappy
add_special Special_FindThatSpecies
diff --git a/main.asm b/main.asm
index a555aa26..33cb1cb5 100644
--- a/main.asm
+++ b/main.asm
@@ -207,21 +207,117 @@ INCLUDE "event/special.asm"
SECTION "bank2", ROMX, BANK[$2]
SwapTextboxPalettes::
- dr $8000, $804f
-ScrollBGMapPalettes::
- dr $804f, $861a
-SpawnPlayer:
- dr $861a, $8653
-CopyDECoordsToMapObject:
- dr $8653, $86d7
-CopyObjectStruct_::
- dr $86d7, $8876
-CopyTempObjectToObjectStruct:
- dr $8876, $8969
-Function8969:
- dr $8969, $8a7a
-QueueFollowerFirstStep:
- dr $8a7a, $8ac9
+ ld hl, wTileMap
+ ld de, wAttrMap
+ ld b, $12
+.asm_8008
+ ld c, $14
+.asm_800a
+ ld a, [hli]
+ push hl
+ srl a
+ jr c, .asm_8024
+ ld hl, wTilesetPalettes
+ add [hl]
+ ld l, a
+ ld a, [wTilesetPalettes + 1]
+ adc $0
+ ld h, a
+ ld a, [hl]
+ and $f
+ bit 3, a
+ jr z, .asm_8045
+ jr .asm_8038
+
+.asm_8024
+ ld hl, wTilesetPalettes
+ add [hl]
+ ld l, a
+ ld a, [wTilesetPalettes + 1]
+ adc $0
+ ld h, a
+ ld a, [hl]
+ swap a
+ and $f
+ bit 3, a
+ jr z, .asm_8045
+.asm_8038
+ ld a, [wMapGroup]
+ dec a
+ ld hl, Unknown85d7
+ add l
+ ld l, a
+ jr nc, .asm_8044
+ inc h
+.asm_8044
+ ld a, [hl]
+.asm_8045
+ pop hl
+ ld [de], a
+ inc de
+ dec c
+ jr nz, .asm_800a
+ dec b
+ jr nz, .asm_8008
+ ret
+
+ScrollBGMapPalettes:: ; 804f (2:404f)
+ ld hl, wBGMapBuffer
+ ld de, wBGMapPalBuffer
+.asm_8055
+ ld a, [hli]
+ push hl
+ srl a
+ jr c, .asm_806f
+ ld hl, wTilesetPalettes
+ add [hl]
+ ld l, a
+ ld a, [wTilesetPalettes + 1]
+ adc $0
+ ld h, a
+ ld a, [hl]
+ and $f
+ bit 3, a
+ jr z, .asm_8090
+ jr .asm_8083
+
+.asm_806f
+ ld hl, wTilesetPalettes
+ add [hl]
+ ld l, a
+ ld a, [wTilesetPalettes + 1]
+ adc $0
+ ld h, a
+ ld a, [hl]
+ swap a
+ and $f
+ bit 3, a
+ jr z, .asm_8090
+.asm_8083
+ ld a, [wMapGroup]
+ dec a
+ ld hl, Unknown85d7
+ add l
+ ld l, a
+ jr nc, .asm_808f
+ inc h
+.asm_808f
+ ld a, [hl]
+.asm_8090
+ pop hl
+ ld [de], a
+ inc de
+ dec c
+ jr nz, .asm_8055
+ ret
+
+Unknown8097:
+ dr $8097, $85d7
+Unknown85d7:
+ dr $85d7, $85f1
+
+INCLUDE "engine/player_object.asm"
+
Sine_e::
dr $8ac9, $8b3b
diff --git a/wram.asm b/wram.asm
index ceabc749..ea2daa37 100644
--- a/wram.asm
+++ b/wram.asm
@@ -2518,8 +2518,7 @@ wd0cb:: ds 1 ; d0cb
wd0cc:: ds 1 ; d0cc
wd0cd:: ds 1 ; d0cd
wd0ce:: ds 1 ; d0ce
-wd0cf:: ds 1 ; d0cf
-wd0d0:: ds 1 ; d0d0
+wTilesetPalettes:: dw ; d0cf
wd0d1:: ds 1 ; d0d1
wd0d2:: ds 1 ; d0d2
wd0d3:: ds 1 ; d0d3