aboutsummaryrefslogtreecommitdiff
path: root/map/utils.gbasm
blob: 64b2de786559871d6b77c46a4ec6caf919845286 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
Pick_Random_Room_Avoid_A: ; input A = room to avoid (or FF if none), output A = chosen room idx
	PUSH BC
	CP $FF
	JR Z, =.All_rooms_allowed
	LD B, A
	.Skip_bunny_room:
		LD A, $mem_number_of_rooms
		CP $01
		JR Z, =.All_rooms_allowed

		DEC A
		CALL =RNG_Bound
		INC A
		LD C, A
		LD A, B
		CP C
		LD A, C
		JR C, =.Room_restriction.end
		DEC A

		JR =.Room_restriction.end

	.All_rooms_allowed:
		LD A, $mem_number_of_rooms
		CALL =RNG_Bound
	.Room_restriction.end:
	POP BC
	RET

Pick_Room_Position_Avoid_A:; input A = room to avoid (or FF if none), output BC = XY position
	CALL =Pick_Random_Room_Avoid_A
Pick_Room_position: ; input A = room to spawn in, output BC = XY position
	PUSH HL
	PUSH DE
	SLA A
	SLA A
	ADD low($mem_room_list)
	LD C, A

	LD B, high($mem_room_list)

	; X
	LD A, (BC)
	LD D, A
	INC BC
	LD A, (BC)
	INC A
	CALL =RNG_Bound
	ADD D

	LD H, A

	INC BC

	; Y
	LD A, (BC)
	LD D, A
	INC BC
	LD A, (BC)
	INC A
	CALL =RNG_Bound
	ADD D
	LD L, A

	LD B, H
	LD C, L

	POP DE
	POP HL
	RET