shithub: pokecrystal

Download patch

ref: e325210a6108dad76551264d01f811e722d7d1bc
parent: 3755584ac4f620566facd9e72c4ae0b9807caf69
parent: 63afd6dacd4425483a71cf4e6302a2d71829ca2a
author: yenatch <yenatch@gmail.com>
date: Thu Dec 11 18:25:30 EST 2014

Merge remote-tracking branch 'kanzure/master'

--- a/INSTALL.md
+++ b/INSTALL.md
@@ -1,3 +1,37 @@
+# Vagrant
+
+The simplest way to get pokecrystal to compile is to use Vagrant and
+VirtualBox. Follow these steps:
+
+* [Download and install Vagrant](http://www.vagrantup.com/downloads.html)
+* Follow the instructions to [download and install VirtualBox](http://docs-v1.vagrantup.com/v1/docs/getting-started/)
+* Run these commands:
+
+```
+	vagrant box add pokecrystal http://diyhpl.us/~bryan/irc/pokecrystal/pokecrystal.box
+	mkdir vagrantbox
+	cd vagrantbox
+	vagrant init pokecrystal
+	vagrant up
+	vagrant ssh -c "cd /vagrant && git clone git://github.com/kanzure/pokecrystal.git"
+	vagrant ssh -c "cd /vagrant/pokecrystal && git submodule init && git submodule update"
+	vagrant ssh
+```
+
+Running "vagrant ssh" will give you a shell to type commands into for compiling
+the source code. The the "virtualbox" directory on the host appears as a shared
+folder inside of the guest virtual machine at "/vagrant".
+
+To build the project, run these commands in the guest (that is, inside "vagrant
+ssh"):
+
+	cd /vagrant/pokecrystal
+	make
+
+To make the build work you will need to copy baserom.gbc into the "pokecrystal"
+directory inside the "virtualbox" directory on the host machine. Eventually
+this will not be required.
+
 # Linux
 
 Dependencies:
--- a/Makefile
+++ b/Makefile
@@ -43,7 +43,7 @@
 
 clean:
 	rm -f $(roms) $(all_obj)
-	find -iname '*.tx' -exec rm {} +
+	find . -iname '*.tx' -exec rm {} +
 
 baserom.gbc: ;
 	@echo "Wait! Need baserom.gbc first. Check README and INSTALL for details." && false
--- a/README.md
+++ b/README.md
@@ -12,8 +12,7 @@
 ## See also
 
 * Disassembly of [**Pokémon Red/Blue**][pokered]
-* irc: **nucleus.kafuka.org** [**#skeetendo**][irc]
+* irc: **irc.freenode.net** [**#pret**][irc]
 
 [pokered]: https://github.com/iimarckus/pokered
-[irc]: https://kiwiirc.com/client/irc.nolimitzone.com/?#skeetendo
-
+[irc]: https://kiwiirc.com/client/irc.freenode.net/?#pret
--- /dev/null
+++ b/Vagrantfile
@@ -1,0 +1,59 @@
+# -*- mode: ruby -*-
+# vi: set ft=ruby :
+
+# TODO: insert scripts to build the box instead of trusting the uploaded
+# version. The default should be to build the box when running "vagrant up",
+# rather than just downloading a pre-existing box.
+
+# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
+VAGRANTFILE_API_VERSION = "2"
+
+Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
+  # All Vagrant configuration is done here. The most common configuration
+  # options are documented and commented below. For a complete reference,
+  # please see the online documentation at vagrantup.com.
+
+  # Every Vagrant virtual environment requires a box to build off of.
+  config.vm.box = "pokecrystal"
+  config.vm.box_url = "http://diyhpl.us/~bryan/irc/pokecrystal/pokecrystal.box"
+
+  # Disable automatic box update checking. If you disable this, then
+  # boxes will only be checked for updates when the user runs
+  # `vagrant box outdated`. This is not recommended.
+  config.vm.box_check_update = false
+
+  # Create a forwarded port mapping which allows access to a specific port
+  # within the machine from a port on the host machine. In the example below,
+  # accessing "localhost:8080" will access port 80 on the guest machine.
+  config.vm.network "forwarded_port", guest: 80, host: 8650
+
+  # Create a private network, which allows host-only access to the machine
+  # using a specific IP.
+  # config.vm.network "private_network", ip: "192.168.33.10"
+
+  # Create a public network, which generally matched to bridged network.
+  # Bridged networks make the machine appear as another physical device on
+  # your network.
+  config.vm.network "public_network"
+
+  # If true, then any SSH connections made will enable agent forwarding.
+  # Default value: false
+  config.ssh.forward_agent = true
+
+  # Share an additional folder to the guest VM. The first argument is
+  # the path on the host to the actual folder. The second argument is
+  # the path on the guest to mount the folder. And the optional third
+  # argument is a set of non-required options.
+  config.vm.synced_folder "./", "/vagrant"
+
+  # Provider-specific configuration so you can fine-tune various
+  # backing providers for Vagrant. These expose provider-specific options.
+  # Example for VirtualBox:
+  config.vm.provider "virtualbox" do |vb|
+    # Don't boot with headless mode
+    vb.gui = false
+
+    # Use VBoxManage to customize the VM. For example to change memory:
+    vb.customize ["modifyvm", :id, "--memory", "1024"]
+  end
+end
--- a/battle/ai/scoring.asm
+++ b/battle/ai/scoring.asm
@@ -21,6 +21,9 @@
 	ld a, [wEnemyMoveStruct + MOVE_EFFECT]
 	ld c, a
 
+; Dismiss moves with special effects if they are
+; useless or not a good choice right now.
+; For example, healing moves, weather moves, Dream Eater...	
 	push hl
 	push de
 	push bc
@@ -30,6 +33,7 @@
 	pop hl
 	jr nz, .discourage
 
+; Dismiss status-only moves if the player can't be statused.	
 	ld a, [wEnemyMoveStruct + MOVE_EFFECT]
 	push hl
 	push de
@@ -47,6 +51,7 @@
 	and a
 	jr nz, .discourage
 
+; Dismiss Safeguard if it's already active.
 	ld a, [PlayerScreens]
 	bit SCREENS_SAFEGUARD, a
 	jr z, .checkmove
@@ -69,6 +74,10 @@
 AI_Setup: ; 385e0
 ; Use stat-modifying moves on turn 1.
 
+; 50% chance to greatly encourage stat-up moves during the first turn of enemy's Pokemon.
+; 50% chance to greatly encourage stat-down moves during the first turn of player's Pokemon.
+; Almost 90% chance to greatly discourage stat-modifying moves otherwise.
+
 	ld hl, Buffer1 - 1
 	ld de, EnemyMonMoves
 	ld b, EnemyMonMovesEnd - EnemyMonMoves + 1
@@ -140,7 +149,10 @@
 
 
 AI_Types: ; 38635
-; Use super-effective moves.
+; Dismiss any move that the player is immune to.
+; Encourage super-effective moves.
+; Discourage not very effective moves unless 
+; all damaging moves are of the same type.
 
 	ld hl, Buffer1 - 1
 	ld de, EnemyMonMoves
@@ -229,7 +241,7 @@
 
 
 AI_Offensive: ; 386a2
-; Discourage non-damaging moves.
+; Greatly discourage non-damaging moves.
 
 	ld hl, Buffer1 - 1
 	ld de, EnemyMonMoves
@@ -391,6 +403,9 @@
 
 
 AI_Smart_Sleep: ; 387e3
+; Greatly encourage sleep inducing moves if the enemy has either Dream Eater or Nightmare.
+; 50% chance to greatly encourage sleep inducing moves otherwise.
+
 	ld b, EFFECT_DREAM_EATER
 	call AIHasMoveEffect
 	jr c, .asm_387f0
@@ -415,14 +430,19 @@
 	callab Function347c8
 	pop hl
 
+; 60% chance to discourage this move if not very effective.
 	ld a, [$d265]
 	cp 10 ; 1.0
 	jr c, .asm_38815
+
+; Do nothing if effectiveness is neutral.
 	ret z
 
+; Do nothing if enemy's HP is full.
 	call AICheckEnemyMaxHP
 	ret c
 
+; 80% chance to encourage this move otherwise.
 	call AI_80_20
 	ret c
 
@@ -546,11 +566,15 @@
 
 
 AI_Smart_Explosion: ; 388a6
+; Selfdestruct, Explosion
+
+; Unless this is the enemy's last Pokemon...
 	push hl
 	callba CountEnemyAliveMons
 	pop hl
 	jr nc, .asm_388b7
 
+; ...greatly discourage this move unless this is the player's last Pokemon too.
 	push hl
 	call AICheckLastPlayerMon
 	pop hl
@@ -557,12 +581,16 @@
 	jr nz, .asm_388c6
 
 .asm_388b7
+; Greatly discourage this move if enemy's HP is above 50%.
 	call AICheckEnemyHalfHP
 	jr c, .asm_388c6
 
+; Do nothing if enemy's HP is below 25%.
 	call AICheckEnemyQuarterHP
 	ret nc
 
+; If enemy's HP is between 25% and 50%,
+; over 90% chance to greatly discourage this move.
 	call Random
 	cp 20
 	ret c
@@ -576,9 +604,11 @@
 
 
 AI_Smart_DreamEater: ; 388ca
+; 90% chance to greatly encourage this move.
+; The AI_Basic layer will make sure that
+; Dream Eater is only used against sleeping targets.
 	call Random
-
-	cp $19
+	cp 25
 	ret c
 	dec [hl]
 	dec [hl]
@@ -588,17 +618,22 @@
 
 
 AI_Smart_EvasionUp: ; 388d4
+
+; Dismiss this move if enemy's evasion can't raise anymore.
 	ld a, [EnemyEvaLevel]
 	cp $d
 	jp nc, AIDiscourageMove
 
+; If enemy's HP is full...
 	call AICheckEnemyMaxHP
 	jr nc, .asm_388f2
 
+; ...greatly encourage this move if player is badly poisoned.
 	ld a, [PlayerSubStatus5]
 	bit SUBSTATUS_TOXIC, a
 	jr nz, .asm_388ef
 
+; ...70% chance to greatly encourage this move if player is not badly poisoned.
 	call Random
 	cp $b2
 	jr nc, .asm_38911
@@ -609,21 +644,27 @@
 	ret
 
 .asm_388f2
+
+; Greatly discourage this move if enemy's HP is below 25%.
 	call AICheckEnemyQuarterHP
 	jr nc, .asm_3890f
 
+; If enemy's HP is above 25% but not full, 4% chance to greatly encourage this move.
 	call Random
 	cp $a
 	jr c, .asm_388ef
 
+; If enemy's HP is between 25% and 50%,...
 	call AICheckEnemyHalfHP
 	jr nc, .asm_3890a
 
+; If enemy's HP is above 50% but not full, 20% chance to greatly encourage this move.
 	call AI_80_20
 	jr c, .asm_388ef
 	jr .asm_38911
 
 .asm_3890a
+; ...50% chance to greatly discourage this move.
 	call AI_50_50
 	jr c, .asm_38911
 
@@ -631,6 +672,11 @@
 	inc [hl]
 	inc [hl]
 
+; 30% chance to end up here if enemy's HP is full and player is not badly poisoned.	
+; 77% chance to end up here if enemy's HP is above 50% but not full.
+; 96% chance to end up here if enemy's HP is between 25% and 50%.
+; 100% chance to end up here if enemy's HP is below 25%.
+; In other words, we only end up here if the move has not been encouraged or dismissed.
 .asm_38911
 	ld a, [PlayerSubStatus5]
 	bit SUBSTATUS_TOXIC, a
@@ -640,6 +686,7 @@
 	bit SUBSTATUS_LEECH_SEED, a
 	jr nz, .asm_38941
 
+; Discourage this move if enemy's evasion level is higher than player's accuracy level.
 	ld a, [EnemyEvaLevel]
 	ld b, a
 	ld a, [PlayerAccLevel]
@@ -646,6 +693,7 @@
 	cp b
 	jr c, .asm_38936
 
+; Greatly encourage this move if the player is in the middle of Fury Cutter or Rollout.
 	ld a, [PlayerFuryCutterCount]
 	and a
 	jr nz, .asm_388ef
@@ -659,6 +707,9 @@
 	inc [hl]
 	ret
 
+; Player is badly poisoned.
+; 80% chance to greatly encourage this move.
+; This would counter any previous discouragement.
 .asm_38938
 	call Random
 	cp $50
@@ -667,6 +718,9 @@
 	dec [hl]
 	ret
 
+; Player is seeded.
+; 50% chance to encourage this move.
+; This would partly counter any previous discouragement.
 .asm_38941
 	call AI_50_50
 	ret c
@@ -677,10 +731,14 @@
 
 
 AI_Smart_AlwaysHit: ; 38947
+; 80% chance to greatly encourage this move if either...
+
+; ...enemy's accuracy level has been lowered three or more stages
 	ld a, [EnemyAccLevel]
 	cp $5
 	jr c, .asm_38954
 
+; ...or player's evasion level has been raised three or more stages.
 	ld a, [PlayerEvaLevel]
 	cp $a
 	ret c
@@ -696,27 +754,37 @@
 
 
 AI_Smart_MirrorMove: ; 3895b
+
+; If the player did not use any move last turn...
 	ld a, [LastEnemyCounterMove]
 	and a
 	jr nz, .asm_38968
 
-	call AICompareSpeed
+; ...do nothing if enemy is slower than player
+	call AICompareSpeed	
 	ret nc
 
+; ...or dismiss this move if enemy is faster than player.
 	jp AIDiscourageMove
 
+; If the player did use a move last turn...
 .asm_38968
 	push hl
-	ld hl, GoodMoves
+	ld hl, UsefulMoves
 	ld de, 1
 	call IsInArray
 	pop hl
+	
+; ...do nothing if he didn't use a useful move.
 	ret nc
 
+; If he did, 50% chance to encourage this move...
 	call AI_50_50
 	ret c
 
 	dec [hl]
+
+; ...and 90% chance to encourage this move again if the enemy is faster.
 	call AICompareSpeed
 	ret nc
 
@@ -730,16 +798,21 @@
 
 
 AI_Smart_AccuracyDown: ; 38985
+
+; If player's HP is full...
 	call AICheckPlayerMaxHP
 	jr nc, .asm_389a0
 
+; ...and enemy's HP is above 50%...	
 	call AICheckEnemyHalfHP
 	jr nc, .asm_389a0
 
+; ...greatly encourage this move if player is badly poisoned.	
 	ld a, [PlayerSubStatus5]
 	bit SUBSTATUS_TOXIC, a
 	jr nz, .asm_3899d
 
+; ...70% chance to greatly encourage this move if player is not badly poisoned.
 	call Random
 	cp $b2
 	jr nc, .asm_389bf
@@ -750,20 +823,26 @@
 	ret
 
 .asm_389a0
+
+; Greatly discourage this move if player's HP is below 25%.
 	call AICheckPlayerQuarterHP
 	jr nc, .asm_389bd
 
+; If player's HP is above 25% but not full, 4% chance to greatly encourage this move.	
 	call Random
 	cp $a
 	jr c, .asm_3899d
 
+; If player's HP is between 25% and 50%,...	
 	call AICheckPlayerHalfHP
 	jr nc, .asm_389b8
 
+; If player's HP is above 50% but not full, 20% chance to greatly encourage this move.	
 	call AI_80_20
 	jr c, .asm_3899d
 	jr .asm_389bf
 
+; ...50% chance to greatly discourage this move.	
 .asm_389b8
 	call AI_50_50
 	jr c, .asm_389bf
@@ -772,6 +851,7 @@
 	inc [hl]
 	inc [hl]
 
+; We only end up here if the move has not been already encouraged.	
 .asm_389bf
 	ld a, [PlayerSubStatus5]
 	bit SUBSTATUS_TOXIC, a
@@ -781,6 +861,7 @@
 	bit SUBSTATUS_LEECH_SEED, a
 	jr nz, .asm_389ef
 
+; Discourage this move if enemy's evasion level is higher than player's accuracy level.	
 	ld a, [EnemyEvaLevel]
 	ld b, a
 	ld a, [PlayerAccLevel]
@@ -787,6 +868,7 @@
 	cp b
 	jr c, .asm_389e4
 
+; Greatly encourage this move if the player is in the middle of Fury Cutter or Rollout.	
 	ld a, [PlayerFuryCutterCount]
 	and a
 	jr nz, .asm_3899d
@@ -799,6 +881,9 @@
 	inc [hl]
 	ret
 
+; Player is badly poisoned.
+; 80% chance to greatly encourage this move.
+; This would counter any previous discouragement.	
 .asm_389e6
 	call Random
 	cp $50
@@ -807,6 +892,9 @@
 	dec [hl]
 	ret
 
+; Player is seeded.
+; 50% chance to encourage this move.
+; This would partly counter any previous discouragement.	
 .asm_389ef
 	call AI_50_50
 	ret c
@@ -817,6 +905,8 @@
 
 
 AI_Smart_Haze: ; 389f5
+
+; 85% chance to encourage this move if any of enemy's stat levels is lower than -2.
 	push hl
 	ld hl, EnemyAtkLevel
 	ld c, $8
@@ -828,6 +918,7 @@
 	jr c, .asm_38a12
 	jr .asm_389fb
 
+; 85% chance to encourage this move if any of player's stat levels is higher than +2.	
 .asm_38a05
 	ld hl, PlayerAtkLevel
 	ld c, $8
@@ -846,6 +937,9 @@
 	dec [hl]
 	ret
 
+; Discourage this move if neither:
+; Any of enemy's stat levels is	lower than -2.
+; Any of player's stat levels is higher than +2.
 .asm_38a1b
 	pop hl
 	inc [hl]
@@ -854,6 +948,8 @@
 
 
 AI_Smart_Bide: ; 38a1e
+; 90% chance to discourage this move unless enemy's HP is full.
+
 	call AICheckEnemyMaxHP
 	ret c
 	call Random
@@ -865,10 +961,16 @@
 
 
 AI_Smart_Whirlwind: ; 38a2a
+; Whirlwind, Roar.
+
+; Discourage this move if the player has not shown 
+; a super-effective move against the enemy.
+; Consider player's type(s) if its moves are unknown. 
+
 	push hl
 	callab Function3484e
 	ld a, [$c716]
-	cp $a
+	cp 10 ; neutral
 	pop hl
 	ret c
 	inc [hl]
@@ -880,6 +982,10 @@
 AI_Smart_MorningSun:
 AI_Smart_Synthesis:
 AI_Smart_Moonlight: ; 38a3a
+; 90% chance to greatly encourage this move if enemy's HP is below 25%.
+; Discourage this move if enemy's HP is higher than 50%.
+; Do nothing otherwise.
+
 	call AICheckEnemyQuarterHP
 	jr nc, .asm_38a45
 	call AICheckEnemyHalfHP
@@ -899,6 +1005,8 @@
 
 AI_Smart_Toxic:
 AI_Smart_LeechSeed: ; 38a4e
+; Discourage this move if player's HP is below 50%.
+
 	call AICheckPlayerHalfHP
 	ret c
 	inc [hl]
@@ -908,6 +1016,8 @@
 
 AI_Smart_LightScreen:
 AI_Smart_Reflect: ; 38a54
+; Over 90% chance to discourage this move unless enemy's HP is full.
+
 	call AICheckEnemyMaxHP
 	ret c
 	call Random
@@ -919,6 +1029,9 @@
 
 
 AI_Smart_Ohko: ; 38a60
+; Dismiss this move if player's level is higher than enemy's level.
+; Else, discourage this move is player's HP is below 50%.
+
 	ld a, [BattleMonLevel]
 	ld b, a
 	ld a, [EnemyMonLevel]
@@ -932,10 +1045,15 @@
 
 
 AI_Smart_Bind: ; 38a71
+; Bind, Wrap, Fire Spin, Clamp
+
+; 50% chance to discourage this move if the player is already trapped.
 	ld a, [$c730]
 	and a
 	jr nz, .asm_38a8b
 
+; 50% chance to greatly encourage this move if player is either
+; badly poisoned, in love, identified, stuck in Rollout, or has a Nightmare.
 	ld a, [PlayerSubStatus5]
 	bit SUBSTATUS_TOXIC, a
 	jr nz, .asm_38a91
@@ -944,10 +1062,12 @@
 	and 1<<SUBSTATUS_IN_LOVE | 1<<SUBSTATUS_ROLLOUT | 1<<SUBSTATUS_IDENTIFIED | 1<<SUBSTATUS_NIGHTMARE
 	jr nz, .asm_38a91
 
+; Else, 50% chance to greatly encourage this move if it's the player's Pokemon first turn.
 	ld a, [PlayerTurnsTaken]
 	and a
 	jr z, .asm_38a91
 
+; 50% chance to discourage this move otherwise.
 .asm_38a8b
 	call AI_50_50
 	ret c
@@ -1021,6 +1141,8 @@
 
 
 AI_Smart_Confuse: ; 38adb
+
+; 90% chance to discourage this move if player's HP is between 25% and 50%.
 	call AICheckPlayerHalfHP
 	ret c
 	call Random
@@ -1027,7 +1149,9 @@
 	cp $19
 	jr c, .asm_38ae7
 	inc [hl]
+	
 .asm_38ae7
+; Discourage again if player's HP is below 25%.
 	call AICheckPlayerQuarterHP
 	ret c
 	inc [hl]
@@ -1036,12 +1160,18 @@
 
 
 AI_Smart_SpDefenseUp2: ; 38aed
+
+; Discourage this move if enemy's HP is lower than 50%.
 	call AICheckEnemyHalfHP
 	jr nc, .asm_38b10
 
+; Discourage this move if enemy's special defense level is higher than +3.
 	ld a, [EnemySDefLevel]
 	cp $b
 	jr nc, .asm_38b10
+
+; 80% chance to greatly encourage this move if
+; enemy's Special Defense level is lower than +2, and the player is of a special type.
 	cp $9
 	ret nc
 
@@ -1066,11 +1196,18 @@
 
 
 AI_Smart_Fly: ; 38b12
+; Fly, Dig
+
+; Greatly encourage this move if the player is
+; flying or underground, and slower than the enemy.
+
 	ld a, [PlayerSubStatus3]
 	and 1 << SUBSTATUS_FLYING | 1 << SUBSTATUS_UNDERGROUND
 	ret z
+	
 	call AICompareSpeed
 	ret nc
+	
 	dec [hl]
 	dec [hl]
 	dec [hl]
@@ -1079,6 +1216,8 @@
 
 
 AI_Smart_SuperFang: ; 38b20
+; Discourage this move if player's HP is below 25%.
+
 	call AICheckPlayerQuarterHP
 	ret c
 	inc [hl]
@@ -1087,8 +1226,13 @@
 
 
 AI_Smart_Paralyze: ; 38b26
+
+; 50% chance to discourage this move if player's HP is below 25%.
 	call AICheckPlayerQuarterHP
 	jr nc, .asm_38b3a
+	
+; 80% chance to greatly encourage this move 
+; if enemy is slower than player and its HP is above 25%.	
 	call AICompareSpeed
 	ret c
 	call AICheckEnemyQuarterHP
@@ -1108,6 +1252,13 @@
 
 
 AI_Smart_SpeedDownHit: ; 38b40
+; Icy Wind
+
+; Almost 90% chance to greatly encourage this move if the following conditions all meet:
+; Enemy's HP is higher than 25%.
+; It's the first turn of player's Pokemon.
+; Player is faster than enemy.
+
 	ld a, [wEnemyMoveStruct + MOVE_ANIM]
 	cp ICY_WIND
 	ret nz
@@ -1128,6 +1279,8 @@
 
 
 AI_Smart_Substitute: ; 38b5c
+; Dismiss this move if enemy's HP is below 50%.
+
 	call AICheckEnemyHalfHP
 	ret c
 	jp AIDiscourageMove
@@ -1137,6 +1290,8 @@
 AI_Smart_HyperBeam: ; 38b63
 	call AICheckEnemyHalfHP
 	jr c, .asm_38b72
+	
+; 50% chance to encourage this move if enemy's HP is below 25%.	
 	call AICheckEnemyQuarterHP
 	ret c
 	call AI_50_50
@@ -1145,6 +1300,7 @@
 	ret
 
 .asm_38b72
+; If enemy's HP is above 50%, discourage this move at random
 	call Random
 	cp 40
 	ret c
@@ -1161,11 +1317,13 @@
 	bit SUBSTATUS_RAGE, a
 	jr z, .asm_38b9b
 
+; If enemy's Rage is building, 50% chance to encourage this move.	
 	call AI_50_50
 	jr c, .asm_38b8c
 
 	dec [hl]
 
+; Encourage this move based on Rage's counter.	
 .asm_38b8c
 	ld a, [$c72c]
 	cp $2
@@ -1178,9 +1336,11 @@
 	ret
 
 .asm_38b9b
+; If enemy's Rage is not building, discourage this move if enemy's HP is below 50%.
 	call AICheckEnemyHalfHP
 	jr nc, .asm_38ba6
 
+; 50% chance to encourage this move otherwise.
 	call AI_80_20
 	ret nc
 	dec [hl]
@@ -1222,7 +1382,7 @@
 .asm_38bd4
 	ld a, [LastEnemyCounterMove]
 	push hl
-	ld hl, GoodMoves
+	ld hl, UsefulMoves
 	ld de, 1
 	call IsInArray
 
@@ -1340,7 +1500,7 @@
 .asm_38c68
 	push hl
 	ld a, [LastEnemyCounterMove]
-	ld hl, .table_38c85
+	ld hl, .EncoreMoves
 	ld de, 1
 	call IsInArray
 	pop hl
@@ -1360,7 +1520,7 @@
 	inc [hl]
 	ret
 
-.table_38c85
+.EncoreMoves:
 	db SWORDS_DANCE
 	db WHIRLWIND
 	db LEER
@@ -1396,6 +1556,8 @@
 
 
 AI_Smart_PainSplit: ; 38ca4
+; Discourage this move if [enemy's current HP * 2 > player's current HP].
+
 	push hl
 	ld hl, EnemyMonHP
 	ld b, [hl]
@@ -1417,6 +1579,9 @@
 
 AI_Smart_Snore:
 AI_Smart_SleepTalk: ; 38cba
+; Greatly encourage this move if enemy is fast asleep.
+; Greatly discourage this move otherwise.
+
 	ld a, [EnemyMonStatus]
 	and $7
 	cp $1
@@ -1436,6 +1601,9 @@
 
 
 AI_Smart_DefrostOpponent: ; 38ccb
+; Greatly encourage this move if enemy is frozen.
+; No move has EFFECT_DEFROST_OPPONENT, so this layer is unused.
+
 	ld a, [EnemyMonStatus]
 	and $20
 	ret z
@@ -1512,6 +1680,8 @@
 AI_Smart_DestinyBond:
 AI_Smart_Reversal:
 AI_Smart_SkullBash: ; 38d19
+; Discourage this move if enemy's HP is above 25%.
+
 	call AICheckEnemyQuarterHP
 	ret nc
 	inc [hl]
@@ -1520,6 +1690,10 @@
 
 
 AI_Smart_HealBell: ; 38d1f
+; Dismiss this move if none of the opponent's Pokemon is statused.
+; Encourage this move if the enemy is statused.
+; 50% chance to greatly encourage this move if the enemy is fast asleep or frozen.
+
 	push hl
 	ld a, [OTPartyCount]
 	ld b, a
@@ -1533,6 +1707,7 @@
 	or [hl]
 	jr z, .next
 
+	; status
 	dec hl
 	dec hl
 	dec hl
@@ -1575,12 +1750,14 @@
 
 AI_Smart_PriorityHit: ; 38d5a
 	call AICompareSpeed
-
 	ret c
+
+; Dismiss this move if the player is flying or underground.	
 	ld a, [PlayerSubStatus3]
 	and 1 << SUBSTATUS_FLYING | 1 << SUBSTATUS_UNDERGROUND
 	jp nz, AIDiscourageMove
 
+; Greatly encourage this move if it will KO the player.	
 	ld a, $1
 	ld [hBattleTurn], a
 	push hl
@@ -1605,6 +1782,8 @@
 
 
 AI_Smart_Thief: ; 38d93
+; Don't use Thief unless it's the only move available.
+
 	ld a, [hl]
 	add $1e
 	ld [hl], a
@@ -1659,7 +1838,7 @@
 
 	push hl
 	ld a, [LastEnemyCounterMove]
-	ld hl, GoodMoves
+	ld hl, UsefulMoves
 	ld de, 1
 	call IsInArray
 
@@ -1695,18 +1874,22 @@
 	pop hl
 	jp z, AIDiscourageMove
 
+; 80% chance to greatly encourage this move if the enemy is badly poisoned (weird).  	
 	ld a, [EnemySubStatus5]
 	bit SUBSTATUS_TOXIC, a
 	jr nz, .asm_38e26
 
+; 80% chance to greatly encourage this move if the player is either 
+; in love, identified, stuck in Rollout, or has a Nightmare.	
 	ld a, [PlayerSubStatus1]
 	and 1<<SUBSTATUS_IN_LOVE | 1<<SUBSTATUS_ROLLOUT | 1<<SUBSTATUS_IDENTIFIED | 1<<SUBSTATUS_NIGHTMARE
 	jr nz, .asm_38e26
 
+; Otherwise, discourage this move unless the player only has not very effective moves against the enemy.	
 	push hl
 	callab Function3484e
 	ld a, [$c716]
-	cp $b
+	cp $b ; not very effective
 	pop hl
 	ret nc
 
@@ -1752,6 +1935,10 @@
 
 
 AI_Smart_Nightmare: ; 38e4a
+; 50% chance to encourage this move.
+; The AI_Basic layer will make sure that
+; Dream Eater is only used against sleeping targets.
+
 	call AI_50_50
 	ret c
 	dec [hl]
@@ -1760,6 +1947,8 @@
 
 
 AI_Smart_FlameWheel: ; 38e50
+; Use this move if the enemy is frozen.
+
 	ld a, [EnemyMonStatus]
 	bit FRZ, a
 	ret z
@@ -1953,7 +2142,7 @@
 
 	ld a, [PlayerSubStatus5]
 	bit SUBSTATUS_CANT_RUN, a
-	jr nz, .asm_38f6f
+	jr nz, .yes
 
 	push hl
 	callab Function3484e
@@ -1968,7 +2157,7 @@
 	inc [hl]
 	ret
 
-.asm_38f6f
+.yes
 	call AI_50_50
 	ret c
 
@@ -1984,6 +2173,8 @@
 
 
 AI_Smart_Sandstorm: ; 38f7a
+
+; Greatly discourage this move if the player is immune to Sandstorm damage.
 	ld a, [BattleMonType1]
 	push hl
 	ld hl, .SandstormImmuneTypes
@@ -2000,9 +2191,11 @@
 	pop hl
 	jr c, .asm_38fa5
 
+; Discourage this move if player's HP is below 50%.
 	call AICheckPlayerHalfHP
 	jr nc, .asm_38fa6
 
+; 50% chance to encourage this move otherwise.
 	call AI_50_50
 	ret c
 
@@ -2069,6 +2262,8 @@
 
 
 AI_Smart_FuryCutter: ; 38fdb
+; Encourage this move based on Fury Cutter's count.
+
 	ld a, [EnemyFuryCutterCount]
 	and a
 	jr z, .end
@@ -2092,6 +2287,9 @@
 
 
 AI_Smart_Rollout: ; 38fef
+; Rollout, Fury Cutter
+
+; 80% chance to discourage this move if the enemy is in love, confused, or paralyzed.
 	ld a, [EnemySubStatus1]
 	bit SUBSTATUS_IN_LOVE, a
 	jr nz, .asm_39020
@@ -2104,6 +2302,8 @@
 	bit PAR, a
 	jr nz, .asm_39020
 
+; 80% chance to discourage this move if the enemy's HP is below 25%,
+; or if accuracy or evasion modifiers favour the player.
 	call AICheckEnemyQuarterHP
 	jr nc, .asm_39020
 
@@ -2114,6 +2314,7 @@
 	cp 8
 	jr nc, .asm_39020
 
+; Otherwise, 80% chance to greatly encourage this move.
 	call Random
 	cp 200
 	ret nc
@@ -2131,6 +2332,9 @@
 
 AI_Smart_Swagger:
 AI_Smart_Attract: ; 39026
+; 80% chance to encourage this move during the first turn of player's Pokemon.
+; 80% chance to discourage this move otherwise.
+
 	ld a, [PlayerTurnsTaken]
 	and a
 	jr z, .first_turn
@@ -2150,6 +2354,8 @@
 
 
 AI_Smart_Safeguard: ; 3903a
+; 80% chance to discourage this move if player's HP is below 50%.
+
 	call AICheckPlayerHalfHP
 	ret c
 	call AI_80_20
@@ -2161,6 +2367,8 @@
 
 AI_Smart_Magnitude:
 AI_Smart_Earthquake: ; 39044
+
+; Greatly encourage this move if the player is underground and the enemy is faster.
 	ld a, [LastEnemyCounterMove]
 	cp DIG
 	ret nz
@@ -2176,12 +2384,15 @@
 	ret
 
 .could_dig
-	; Try to predict if the player
-	; will use Dig this turn.
+	; Try to predict if the player will use Dig this turn.
+
+	; 50% chance to encourage this move if the enemy is slower than the player.
 	call AICompareSpeed
 	ret c
+
 	call AI_50_50
 	ret c
+
 	dec [hl]
 	ret
 ; 39062
@@ -2188,10 +2399,13 @@
 
 
 AI_Smart_BatonPass: ; 39062
+; Discourage this move if the player hasn't shown super-effective moves against the enemy.
+; Consider player's type(s) if its moves are unknown.
+
 	push hl
 	callab Function3484e
 	ld a, [$c716]
-	cp 10 ; 1.0
+	cp 10 ; neutral
 	pop hl
 	ret c
 	inc [hl]
@@ -2200,6 +2414,9 @@
 
 
 AI_Smart_Pursuit: ; 39072
+; 50% chance to greatly encourage this move if player's HP is below 25%.
+; 80% chance to discourage this move otherwise.
+
 	call AICheckPlayerQuarterHP
 	jr nc, .asm_3907d
 	call AI_80_20
@@ -2217,6 +2434,9 @@
 
 
 AI_Smart_RapidSpin: ; 39084
+; 80% chance to greatly encourage this move if the enemy is
+; trapped (Bind effect), seeded, or scattered with spikes.
+
 	ld a, [$c731]
 	and a
 	jr nz, .asm_39097
@@ -2243,22 +2463,28 @@
 	push hl
 	ld a, 1
 	ld [hBattleTurn], a
+	
+; Calculate Hidden Power's type and base power based on enemy's DVs.
 	callab HiddenPowerDamage
 	callab Function347c8
 	pop hl
 
+; Discourage Hidden Power if not very effective.
 	ld a, [$d265]
 	cp 10
 	jr c, .bad
 
+; Discourage Hidden Power if its base power	is lower than 50.
 	ld a, d
 	cp 50
 	jr c, .bad
 
+; Encourage Hidden Power if super-effective.
 	ld a, [$d265]
 	cp 11
 	jr nc, .good
 
+; Encourage Hidden Power if its base power is 70.
 	ld a, d
 	cp 70
 	ret c
@@ -2274,6 +2500,9 @@
 
 
 AI_Smart_RainDance: ; 390cb
+
+; Greatly discourage this move if it would favour the player type-wise.
+; Particularly, if the player is a Water-type.
 	ld a, [BattleMonType1]
 	cp WATER
 	jr z, AIBadWeatherType
@@ -2308,6 +2537,9 @@
 
 
 AI_Smart_SunnyDay: ; 390f3
+
+; Greatly discourage this move if it would favour the player type-wise.
+; Particularly, if the player is a Fire-type.
 	ld a, [BattleMonType1]
 	cp FIRE
 	jr z, AIBadWeatherType
@@ -2328,13 +2560,19 @@
 
 
 AI_Smart_WeatherMove: ; 3910d
+; Rain Dance, Sunny Day
+
+; Greatly discourage this move if the enemy doesn't have
+; one of the useful Rain Dance or Sunny Day moves.
 	call AIHasMoveInArray
 	pop hl
 	jr nc, AIBadWeatherType
 
+; Greatly discourage this move if player's HP is below 50%.
 	call AICheckPlayerHalfHP
 	jr nc, AIBadWeatherType
 
+; 50% chance to encourage this move otherwise.
 	call AI_50_50
 	ret c
 
@@ -2350,13 +2588,19 @@
 ; 39122
 
 AIGoodWeatherType: ; 39122
+; Rain Dance, Sunny Day
+
+; Greatly encourage this move if it would disfavour the player type-wise and player's HP is above 50%...
 	call AICheckPlayerHalfHP
 	ret nc
 
+; ...as long as one of the following conditions meet:
+; It's the first turn of the player's Pokemon.
 	ld a, [PlayerTurnsTaken]
 	and a
 	jr z, .good
 
+; Or it's the first turn of the enemy's Pokemon.
 	ld a, [EnemyTurnsTaken]
 	and a
 	ret nz
@@ -2382,16 +2626,19 @@
 
 
 AI_Smart_BellyDrum: ; 3913d
+; Dismiss this move if enemy's attack is higher than +2 or if enemy's HP is below 50%.
+; Else, discourage this move if enemy's HP is not full.
+
 	ld a, [EnemyAtkLevel]
 	cp $a
 	jr nc, .asm_3914d
 
 	call AICheckEnemyMaxHP
-
 	ret c
+
 	inc [hl]
-	call AICheckEnemyHalfHP
 
+	call AICheckEnemyHalfHP
 	ret c
 
 .asm_3914d
@@ -2406,8 +2653,10 @@
 	push hl
 	ld hl, EnemyAtkLevel
 	ld b, $8
-	ld c, $64
+	ld c, 100
 
+; Calculate the sum of all enemy's stat level modifiers. Add 100 first to prevent underflow.
+; Put the result in c. c will range between 58 and 142.
 .asm_3915a
 	ld a, [hli]
 	sub $7
@@ -2416,9 +2665,11 @@
 	dec b
 	jr nz, .asm_3915a
 
+; Calculate the sum of all player's stat level modifiers. Add 100 first to prevent underflow.
+; Put the result in d. d will range between 58 and 142.	
 	ld hl, PlayerAtkLevel
 	ld b, $8
-	ld d, $64
+	ld d, 100
 
 .asm_39169
 	ld a, [hli]
@@ -2428,19 +2679,25 @@
 	dec b
 	jr nz, .asm_39169
 
+; Greatly discourage this move if enemy's stat levels are higher than player's (if c>=d).
 	ld a, c
 	sub d
 	pop hl
 	jr nc, .asm_39188
 
+; Else, 80% chance to encourage this move unless player's accuracy level is lower than -1...	
 	ld a, [PlayerAccLevel]
 	cp $6
 	ret c
+	
+; ...or enemy's evasion level is higher than +0.	
 	ld a, [EnemyEvaLevel]
 	cp $8
 	ret nc
+
 	call AI_80_20
 	ret c
+
 	dec [hl]
 	ret
 
@@ -2518,6 +2775,8 @@
 
 AI_Smart_Twister:
 AI_Smart_Gust: ; 391d5
+
+; Greatly encourage this move if the player is flying and the enemy is faster.
 	ld a, [LastEnemyCounterMove]
 	cp FLY
 	ret nz
@@ -2524,7 +2783,7 @@
 
 	ld a, [PlayerSubStatus3]
 	bit SUBSTATUS_FLYING, a
-	jr z, .asm_391e9
+	jr z, .couldFly
 
 	call AICompareSpeed
 	ret nc
@@ -2533,7 +2792,10 @@
 	dec [hl]
 	ret
 
-.asm_391e9
+; Try to predict if the player will use Fly this turn.	
+.couldFly
+
+; 50% chance to encourage this move if the enemy is slower than the player.
 	call AICompareSpeed
 	ret c
 	call AI_50_50
@@ -2544,6 +2806,9 @@
 
 
 AI_Smart_FutureSight: ; 391f3
+; Greatly encourage this move if the player is
+; flying or underground, and slower than the enemy.
+
 	call AICompareSpeed
 	ret nc
 
@@ -2558,6 +2823,8 @@
 
 
 AI_Smart_Stomp: ; 39200
+; 80% chance to encourage this move if the player has used Minimize.
+
 	ld a, [$c6fe]
 	and a
 	ret z
@@ -2571,6 +2838,9 @@
 
 
 AI_Smart_Solarbeam: ; 3920b
+; 80% chance to encourage this move when it's sunny.
+; 90% chance to discourage this move when it's raining.
+
 	ld a, [Weather]
 	cp WEATHER_SUN
 	jr z, .asm_3921e
@@ -2597,6 +2867,8 @@
 
 
 AI_Smart_Thunder: ; 39225
+; 90% chance to discourage this move when it's sunny.
+
 	ld a, [Weather]
 	cp WEATHER_SUN
 	ret nz
@@ -2611,6 +2883,8 @@
 
 
 AICompareSpeed: ; 39233
+; Return carry if enemy is faster than player.
+
 	push bc
 	ld a, [EnemyMonSpeed + 1]
 	ld b, a
@@ -2647,6 +2921,7 @@
 
 AICheckMaxHP: ; 3925a
 ; Return carry if hp at de matches max hp at hl.
+
 	ld a, [de]
 	inc de
 	cp [hl]
@@ -2762,6 +3037,7 @@
 
 AIHasMoveEffect: ; 392ca
 ; Return carry if the enemy has move b.
+
 	push hl
 	ld hl, EnemyMonMoves
 	ld c, EnemyMonMovesEnd - EnemyMonMoves
@@ -2827,7 +3103,7 @@
 ; 39301
 
 
-GoodMoves: ; 39301
+UsefulMoves: ; 39301
 ; Moves that are usable all-around.
 	db DOUBLE_EDGE
 	db SING
@@ -2853,14 +3129,17 @@
 
 
 AI_Opportunist: ; 39315
-; Don't use stall moves when the player's HP is low.
+; Discourage stall moves when the enemy's HP is low.
 
+; Do nothing if enemy's HP is above 50%.
 	call AICheckEnemyHalfHP
 	ret c
 
+; Discourage stall moves if enemy's HP is below 25%.	
 	call AICheckEnemyQuarterHP
 	jr nc, .asm_39322
-
+	
+; 50% chance to discourage stall moves if enemy's HP is between 25% and 50%.
 	call AI_50_50
 	ret c
 
@@ -2937,6 +3216,10 @@
 AI_Aggressive: ; 39369
 ; Use whatever does the most damage.
 
+; Discourage all damaging moves but the one that does the most damage.
+; If no damaging move deals damage to the player (immune),
+; no move will be discouraged
+
 ; Figure out which attack does the most damage and put it in c.
 	ld hl, EnemyMonMoves
 	ld bc, 0
@@ -2963,6 +3246,7 @@
 	pop de
 	pop hl
 
+; Update current move if damage is highest so far
 	ld a, [CurDamage + 1]
 	cp e
 	ld a, [CurDamage]
@@ -2998,6 +3282,7 @@
 	cp EnemyMonMovesEnd - EnemyMonMoves + 1
 	jr z, .done
 
+; Ignore this move if it is the highest damaging one.
 	cp c
 	ld a, [de]
 	inc de
@@ -3006,15 +3291,19 @@
 
 	call AIGetEnemyMove
 
+; Ignore this move if its power is 0 or 1.
+; Moves such as Seismic Toss, Hidden Power, 
+; Counter and Fissure have a base power of 1.	
 	ld a, [wEnemyMoveStruct + MOVE_POWER]
 	cp 2
 	jr c, .checkmove2
 
+; Ignore this move if it is reckless.	
 	push hl
 	push de
 	push bc
 	ld a, [wEnemyMoveStruct + MOVE_EFFECT]
-	ld hl, .aggressivemoves
+	ld hl, .RecklessMoves
 	ld de, 1
 	call IsInArray
 	pop bc
@@ -3022,6 +3311,7 @@
 	pop hl
 	jr c, .checkmove2
 
+; If we made it this far, discourage this move. 	
 	inc [hl]
 	jr .checkmove2
 
@@ -3028,7 +3318,7 @@
 .done
 	ret
 
-.aggressivemoves
+.RecklessMoves:
 	db EFFECT_EXPLOSION
 	db EFFECT_RAMPAGE
 	db EFFECT_MULTI_HIT
@@ -3064,7 +3354,7 @@
 
 
 AI_Cautious: ; 39418
-; Don't use moves with residual effects after turn 1.
+; 90% chance to discourage moves with residual effects after the first turn.
 
 	ld a, [EnemyTurnsTaken]
 	and a
@@ -3121,7 +3411,7 @@
 
 
 AI_Status: ; 39453
-; Don't use status moves that don't affect the player.
+; Dismiss status moves that don't affect the player.
 
 	ld hl, Buffer1 - 1
 	ld de, EnemyMonMoves
@@ -3185,7 +3475,8 @@
 
 
 AI_Risky: ; 394a9
-; Use any move that will KO the opponent.
+; Use any move that will KO the target.
+; Risky moves will often be an exception (see below).
 
 	ld hl, Buffer1 - 1
 	ld de, EnemyMonMoves
@@ -3212,7 +3503,7 @@
 ; Don't use risky moves at max hp.
 	ld a, [wEnemyMoveStruct + MOVE_EFFECT]
 	ld de, 1
-	ld hl, .riskymoves
+	ld hl, .RiskyMoves
 	call IsInArray
 	jr nc, .checkko
 
@@ -3219,6 +3510,7 @@
 	call AICheckEnemyMaxHP
 	jr c, .nextmove
 
+; Else, 80% chance to exclude them.	
 	call Random
 	cp 200 ; 1/5
 	jr c, .nextmove
@@ -3250,7 +3542,7 @@
 	pop de
 	jr .checkmove
 
-.riskymoves
+.RiskyMoves:
 	db EFFECT_EXPLOSION
 	db EFFECT_OHKO
 	db $ff
@@ -3272,6 +3564,8 @@
 
 
 AIGetEnemyMove: ; 39508
+; Load attributes of move a into ram
+
 	push hl
 	push de
 	push bc
--- a/items/item_effects.asm
+++ b/items/item_effects.asm
@@ -245,7 +245,7 @@
 	jp z, .asm_e99c
 	ld a, [CurItem]
 	ld c, a
-	ld hl, Table_0xec0a
+	ld hl, BallMultiplierFunctionTable
 
 .asm_e8f2
 	ld a, [hli]
@@ -329,19 +329,23 @@
 
 	ld a, [$ffb6]
 	and a
-	jr nz, .asm_e960
+	jr nz, .statuscheck
 	ld a, 1
-.asm_e960
+.statuscheck
+; This routine is buggy. It was intended that SLP and FRZ provide a higher
+; catch rate than BRN/PSN/PAR, which in turn provide a higher catch rate than
+; no status effect at all. But instead, it makes BRN/PSN/PAR provide no
+; benefit.
 	ld b, a
 	ld a, [EnemyMonStatus]
 	and 1 << FRZ | SLP
 	ld c, 10
-	jr nz, .asm_e971
+	jr nz, .addstatus
 	and a
 	ld c, 5
-	jr nz, .asm_e971
+	jr nz, .addstatus
 	ld c, 0
-.asm_e971
+.addstatus
 	ld a, b
 	add c
 	jr nc, .asm_e977
@@ -725,34 +729,32 @@
 ; ec0a
 
 
-Table_0xec0a: ; ec0a
-; Note: SAFARI_BALL does not exist.
-	dbw ULTRA_BALL,  UltraBallChance
-	dbw GREAT_BALL,  GreatBallChance
-	dbw SAFARI_BALL, SafariBallChance
-	dbw HEAVY_BALL,  HeavyBallChance
-	dbw LEVEL_BALL,  LevelBallChance
-	dbw LURE_BALL,   LureBallChance
-	dbw FAST_BALL,   FastBallChance
-	dbw MOON_BALL,   MoonBallChance
-	dbw LOVE_BALL,   LoveBallChance
-	dbw PARK_BALL,   ParkBallChance
+BallMultiplierFunctionTable:
+; table of routines that increase or decrease the catch rate based on
+; which ball is used in a certain situation.
+	dbw ULTRA_BALL, UltraBallMultiplier
+	dbw GREAT_BALL, GreatBallMultiplier
+	dbw 8,          SafariBallMultiplier ; Safari Ball, leftover from RBY
+	dbw HEAVY_BALL, HeavyBallMultiplier
+	dbw LEVEL_BALL, LevelBallMultiplier
+	dbw LURE_BALL,  LureBallMultiplier
+	dbw FAST_BALL,  FastBallMultiplier
+	dbw MOON_BALL,  MoonBallMultiplier
+	dbw LOVE_BALL,  LoveBallMultiplier
+	dbw PARK_BALL,  ParkBallMultiplier
 	db $ff
-; ec29
 
-
-UltraBallChance: ; ec29
-; x2
+UltraBallMultiplier:
+; multiply catch rate by 2
 	sla b
 	ret nc
 	ld b, $ff
 	ret
-; ec2f
 
-GreatBallChance: ; ec2f
-ParkBallChance:
-SafariBallChance:
-; x1.5
+SafariBallMultiplier:
+GreatBallMultiplier:
+ParkBallMultiplier:
+; multiply catch rate by 1.5
 	ld a, b
 	srl a
 	add b
@@ -760,10 +762,8 @@
 	ret nc
 	ld b, $ff
 	ret
-; ec38
 
-
-GetPokedexEntryBank: ; ec38
+GetPokedexEntryBank:
 	push hl
 	push de
 	ld a, [EnemyMonSpecies]
@@ -790,9 +790,13 @@
 	db BANK(PokedexEntries2)
 	db BANK(PokedexEntries3)
 	db BANK(PokedexEntries4)
-; ec50
 
-HeavyBallChance: ; ec50
+HeavyBallMultiplier:
+; subtract 20 from catch rate if weight < 102.4 kg
+; else add 0 to catch rate if weight < 204.8 kg
+; else add 20 to catch rate if weight < 307.2 kg
+; else add 30 to catch rate if weight < 409.6 kg
+; else add 40 to catch rate (never happens)
 	ld a, [EnemyMonSpecies]
 	ld hl, PokedexDataPointerTable
 	dec a
@@ -825,17 +829,18 @@
 	srl b
 	rr c
 	endr
-	call .asm_ec99
+	call .subbc
 
 	srl b
 	rr c
-	call .asm_ec99
+	call .subbc
 
 	ld a, h
 	pop bc
-	jr .asm_eca4
+	jr .compare
 
-.asm_ec99
+.subbc
+	; subtract bc from hl
 	push bc
 	ld a, b
 	cpl
@@ -848,21 +853,21 @@
 	pop bc
 	ret
 
-.asm_eca4
+.compare
 	ld c, a
-	cp $4
-	jr c, .asm_ecbc
+	cp 1024 >> 8 ; 102.4 kg
+	jr c, .lightmon
 
-	ld hl, .table_ecc4
-.asm_ecac
+	ld hl, .WeightsTable
+.lookup
 	ld a, c
 	cp [hl]
-	jr c, .asm_ecb4
+	jr c, .heavymon
 	inc hl
 	inc hl
-	jr .asm_ecac
+	jr .lookup
 
-.asm_ecb4
+.heavymon
 	inc hl
 	ld a, b
 	add [hl]
@@ -871,7 +876,7 @@
 	ld b, $ff
 	ret
 
-.asm_ecbc
+.lightmon
 	ld a, b
 	sub 20
 	ld b, a
@@ -879,15 +884,15 @@
 	ld b, $1
 	ret
 
-.table_ecc4
-	db   8,  0
-	db  12, 20
-	db  16, 30
-	db 255, 40
-; eccc
+.WeightsTable
+; weight factor, boost
+	db 2048 >> 8, 0
+	db 3072 >> 8, 20
+	db 4096 >> 8, 30
+	db 65280 >> 8, 40
 
-
-LureBallChance: ; eccc
+LureBallMultiplier:
+; multiply catch rate by 3 if this is a fishing rod battle
 	ld a, [BattleType]
 	cp BATTLETYPE_FISH
 	ret nz
@@ -903,11 +908,12 @@
 .done
 	ld b, a
 	ret
-; ecdd
 
+MoonBallMultiplier:
+; This function is buggy.
+; Intent:  multiply catch rate by 4 if mon evolves with moon stone
+; Reality: no boost
 
-MoonBallChance: ; ecdd
-
 GLOBAL EvosAttacks
 GLOBAL EvosAttacksPointers
 
@@ -934,13 +940,9 @@
 	inc hl
 	inc hl
 
-	; It appears that Moon Stone's
-	; constant from Pokémon Red is used.
-
-	; No Pokémon evolve with Burn Heal,
-	; so Moon Balls always have
-	; a catch rate of 1x.
-
+; Moon Stone's constant from Pokémon Red is used.
+; No Pokémon evolve with Burn Heal,
+; so Moon Balls always have a catch rate of 1×.
 	push bc
 	ld a, BANK(EvosAttacks)
 	call GetFarByte
@@ -956,10 +958,13 @@
 	ld b, $ff
 .done
 	ret
-; ed12
 
+LoveBallMultiplier:
+; This function is buggy.
+; Intent:  multiply catch rate by 8 if mons are of same species, different sex
+; Reality: multiply catch rate by 8 if mons are of same species, same sex
 
-LoveBallChance: ; ed12
+	; does species match?
 	ld a, [TempEnemyMonSpecies]
 	ld c, a
 	ld a, [TempBattleMonSpecies]
@@ -966,6 +971,7 @@
 	cp c
 	ret nz
 
+	; check player mon species
 	push bc
 	ld a, [TempBattleMonSpecies]
 	ld [CurPartySpecies], a
@@ -974,13 +980,14 @@
 	ld a, [CurBattleMon]
 	ld [CurPartyMon], a
 	callba GetGender
-	jr c, .asm_ed66
+	jr c, .done1 ; no effect on genderless
 
-	ld d, 0
-	jr nz, .asm_ed39
-	inc d
-.asm_ed39
+	ld d, 0 ; male
+	jr nz, .playermale
+	inc d   ; female
+.playermale
 
+	; check wild mon species
 	push de
 	ld a, [TempEnemyMonSpecies]
 	ld [CurPartySpecies], a
@@ -987,39 +994,42 @@
 	ld a, WILDMON
 	ld [MonType], a
 	callba GetGender
-	jr c, .asm_ed65
+	jr c, .done2 ; no effect on genderless
 
-	ld d, 0
-	jr nz, .asm_ed52
-	inc d
-.asm_ed52
+	ld d, 0 ; male
+	jr nz, .wildmale
+	inc d   ; female
+.wildmale
 
 	ld a, d
 	pop de
 	cp d
 	pop bc
-	ret nz
+	ret nz ; for the intended effect, this should be “ret z”
 
 	sla b
-	jr c, .asm_ed62
+	jr c, .max
 	sla b
-	jr c, .asm_ed62
+	jr c, .max
 	sla b
 	ret nc
-.asm_ed62
+.max
 	ld b, $ff
 	ret
 
-.asm_ed65
+.done2
 	pop de
 
-.asm_ed66
+.done1
 	pop bc
 	ret
-; ed68
 
-
-FastBallChance: ; ed68
+FastBallMultiplier:
+; This function is buggy.
+; Intent:  multiply catch rate by 4 if enemy mon is in one of the three
+;          FleeMons tables.
+; Reality: multiply catch rate by 4 if enemy mon is one of the first three in
+;          the first FleeMons table.
 	ld a, [TempEnemyMonSpecies]
 	ld c, a
 	ld hl, FleeMons
@@ -1033,7 +1043,7 @@
 	cp -1
 	jr z, .next
 	cp c
-	jr nz, .next
+	jr nz, .next ; for the intended effect, this should be “jr nz, .loop”
 	sla b
 	jr c, .max
 
@@ -1048,27 +1058,28 @@
 	dec d
 	jr nz, .loop
 	ret
-; ed8c
 
-
-LevelBallChance: ; ed8c
+LevelBallMultiplier:
+; multiply catch rate by 8 if player mon level / 4 > enemy mon level
+; multiply catch rate by 4 if player mon level / 2 > enemy mon level
+; multiply catch rate by 2 if player mon level > enemy mon level
 	ld a, [BattleMonLevel]
 	ld c, a
 	ld a, [EnemyMonLevel]
 	cp c
-	ret nc
+	ret nc ; if player is lower level, we're done here
 	sla b
 	jr c, .max
 
 	srl c
 	cp c
-	ret nc
+	ret nc ; if player/2 is lower level, we're done here
 	sla b
 	jr c, .max
 
 	srl c
 	cp c
-	ret nc
+	ret nc ; if player/4 is lower level, we're done here
 	sla b
 	ret nc
 
@@ -1075,8 +1086,6 @@
 .max
 	ld b, $ff
 	ret
-; edab
-
 
 UnknownText_0xedab: ; 0xedab
 	; It dodged the thrown BALL! This #MON can't be caught!
--- a/main.asm
+++ b/main.asm
@@ -41695,6 +41695,8 @@
 
 AI_Redundant: ; 2c41a
 ; Check if move effect c will fail because it's already been used.
+; Return z if the move is a good choice.
+; Return nz if the move is a bad choice.
 	ld a, c
 	ld de, 3
 	ld hl, .Moves
@@ -47162,7 +47164,7 @@
 
 	ld a, c
 	cp 16 ; up to 16 scoring layers
-	jr z, .asm_4415e
+	jr z, .DecrementScores
 
 	push bc
 	ld d, BANK(TrainerClassAttributes)
@@ -47191,28 +47193,36 @@
 
 	jr .CheckLayer
 
-.asm_4415e
+; Decrement the scores of all moves one by one until one reaches 0.
+.DecrementScores
 	ld hl, Buffer1
 	ld de, EnemyMonMoves
 	ld c, EnemyMonMovesEnd - EnemyMonMoves
-.asm_44166
+	
+.DecrementNextScore
 	; If the enemy has no moves, this will infinite.
 	ld a, [de]
 	inc de
 	and a
-	jr z, .asm_4415e
+	jr z, .DecrementScores
 
+	; We are done whenever a score reaches 0
 	dec [hl]
-	jr z, .asm_44174
+	jr z, .PickLowestScoreMoves
 
+	; If we just decremented the fourth move's score, go back to the first move
 	inc hl
 	dec c
-	jr z, .asm_4415e
+	jr z, .DecrementScores
 
-	jr .asm_44166
+	jr .DecrementNextScore
 
-.asm_44174
+; In order to avoid bias towards the moves located first in memory, increment the scores
+; that were decremented one more time than the rest (in case there was a tie).
+; This means that the minimum score will be 1.
+.PickLowestScoreMoves
 	ld a, c
+	
 .asm_44175
 	inc [hl]
 	dec hl
@@ -47223,11 +47233,15 @@
 	ld hl, Buffer1
 	ld de, EnemyMonMoves
 	ld c, NUM_MOVES
+	
+; Give a score of 0 to a blank move	
 .asm_44184
 	ld a, [de]
 	and a
 	jr nz, .asm_44189
-	ld [hl], a
+	ld [hl], a 
+
+; Disregard the move if its score is not 1	
 .asm_44189
 	ld a, [hl]
 	dec a
@@ -47235,6 +47249,7 @@
 	xor a
 	ld [hli], a
 	jr .asm_44193
+	
 .asm_44191
 	ld a, [de]
 	ld [hli], a
@@ -47243,7 +47258,8 @@
 	dec c
 	jr nz, .asm_44184
 
-.asm_44197
+; Randomly choose one of the moves with a score of 1 	
+.ChooseMove
 	ld hl, Buffer1
 	call Random
 	and 3
@@ -47252,7 +47268,7 @@
 	add hl, bc
 	ld a, [hl]
 	and a
-	jr z, .asm_44197
+	jr z, .ChooseMove
 
 	ld [CurEnemyMove], a
 	ld a, c
@@ -59426,11 +59442,13 @@
 
 
 GetGender: ; 50bdd
-; Return the gender of a given monster in a.
+; Return the gender of a given monster (CurPartyMon/CurOTMon/CurWildMon).
+; When calling this function, a should be set to an appropriate MonType value.
 
-; 1: male
-; 0: female
-; c: genderless
+; return values:
+; a = 1: f = nc|nz; male
+; a = 0: f = nc|z;  female
+;        f = c:  genderless
 
 ; This is determined by comparing the Attack and Speed DVs
 ; with the species' gender ratio.
--- a/maps/BlackthornCity.asm
+++ b/maps/BlackthornCity.asm
@@ -9,8 +9,7 @@
 
 	dbw 5, UnknownScript_0x1a46d8
 
-	dbw 2, UnknownScript_0x1a46dc
-; 0x1a46d8
+	dbw 2, SantosCallback
 
 UnknownScript_0x1a46d8: ; 0x1a46d8
 	setflag $004b
@@ -17,17 +16,15 @@
 	return
 ; 0x1a46dc
 
-UnknownScript_0x1a46dc: ; 0x1a46dc
+SantosCallback:
 	checkcode $b
-	if_equal SATURDAY, UnknownScript_0x1a46e5
+	if_equal SATURDAY, .SantosAppears
 	disappear $9
 	return
-; 0x1a46e5
 
-UnknownScript_0x1a46e5: ; 0x1a46e5
+.SantosAppears
 	appear $9
 	return
-; 0x1a46e8
 
 SuperNerdScript_0x1a46e8: ; 0x1a46e8
 	faceplayer
@@ -94,44 +91,41 @@
 	jumptextfaceplayer UnknownText_0x1a4b1e
 ; 0x1a472b
 
-YoungsterScript_0x1a472b: ; 0x1a472b
+SantosScript:
 	faceplayer
 	loadfont
 	checkevent EVENT_GOT_SPELL_TAG_FROM_SANTOS
-	iftrue UnknownScript_0x1a4759
+	iftrue SantosSaturdayScript
 	checkcode $b
-	if_not_equal SATURDAY, UnknownScript_0x1a475f
+	if_not_equal SATURDAY, SantosNotSaturdayScript
 	checkevent EVENT_MET_SANTOS_OF_SATURDAY
-	iftrue UnknownScript_0x1a4746
-	2writetext UnknownText_0x1a4a27
+	iftrue .MetSantos
+	2writetext MeetSantosText
 	keeptextopen
 	setevent EVENT_MET_SANTOS_OF_SATURDAY
-UnknownScript_0x1a4746: ; 0x1a4746
-	2writetext UnknownText_0x1a4a57
+.MetSantos
+	2writetext SantosGivesGiftText
 	keeptextopen
 	verbosegiveitem SPELL_TAG, 1
-	iffalse UnknownScript_0x1a475d
+	iffalse SantosDoneScript
 	setevent EVENT_GOT_SPELL_TAG_FROM_SANTOS
-	2writetext UnknownText_0x1a4a6b
+	2writetext SantosGaveGiftText
 	closetext
 	loadmovesprites
 	end
-; 0x1a4759
 
-UnknownScript_0x1a4759: ; 0x1a4759
-	2writetext UnknownText_0x1a4ab6
+SantosSaturdayScript:
+	2writetext SantosSaturdayText
 	closetext
-UnknownScript_0x1a475d: ; 0x1a475d
+SantosDoneScript:
 	loadmovesprites
 	end
-; 0x1a475f
 
-UnknownScript_0x1a475f: ; 0x1a475f
-	2writetext UnknownText_0x1a4b00
+SantosNotSaturdayScript:
+	2writetext SantosNotSaturdayText
 	closetext
 	loadmovesprites
 	end
-; 0x1a4765
 
 MapBlackthornCitySignpost0Script: ; 0x1a4765
 	jumptext UnknownText_0x1a4b67
@@ -252,7 +246,7 @@
 	done
 ; 0x1a4a27
 
-UnknownText_0x1a4a27: ; 0x1a4a27
+MeetSantosText:
 	text "SANTOS: …"
 
 	para "It's Saturday…"
@@ -260,14 +254,12 @@
 	para "I'm SANTOS of"
 	line "Saturday…"
 	done
-; 0x1a4a57
 
-UnknownText_0x1a4a57: ; 0x1a4a57
+SantosGivesGiftText:
 	text "You can have this…"
 	done
-; 0x1a4a6b
 
-UnknownText_0x1a4a6b: ; 0x1a4a6b
+SantosGaveGiftText:
 	text "SANTOS: …"
 
 	para "SPELL TAG…"
@@ -278,9 +270,8 @@
 	para "It will frighten"
 	line "you…"
 	done
-; 0x1a4ab6
 
-UnknownText_0x1a4ab6: ; 0x1a4ab6
+SantosSaturdayText:
 	text "SANTOS: …"
 
 	para "See you again on"
@@ -289,13 +280,11 @@
 	para "I won't have any"
 	line "more gifts…"
 	done
-; 0x1a4b00
 
-UnknownText_0x1a4b00: ; 0x1a4b00
+SantosNotSaturdayText:
 	text "SANTOS: Today's"
 	line "not Saturday…"
 	done
-; 0x1a4b1e
 
 UnknownText_0x1a4b1e: ; 0x1a4b1e
 	text "Wow, you came"
@@ -386,7 +375,5 @@
 	person_event SPRITE_BLACK_BELT, 35, 28, $5, $1, 255, 255, $90, 0, BlackBeltScript_0x1a470e, $ffff
 	person_event SPRITE_COOLTRAINER_F, 29, 13, $5, $2, 255, 255, $80, 0, CooltrainerFScript_0x1a4722, $ffff
 	person_event SPRITE_YOUNGSTER, 19, 17, $5, $1, 255, 255, $0, 0, YoungsterScript_0x1a4725, $ffff
-	person_event SPRITE_YOUNGSTER, 24, 26, $6, $0, 255, 255, $0, 0, YoungsterScript_0x1a472b, $075d
+	person_event SPRITE_YOUNGSTER, 24, 26, $6, $0, 255, 255, $0, 0, SantosScript, $075d
 	person_event SPRITE_COOLTRAINER_F, 23, 39, $7, $0, 255, 255, $a0, 0, CooltrainerFScript_0x1a4728, $ffff
-; 0x1a4d1d
-
--- a/maps/LakeofRage.asm
+++ b/maps/LakeofRage.asm
@@ -13,8 +13,7 @@
 
 	dbw 5, UnknownScript_0x70012
 
-	dbw 2, UnknownScript_0x70016
-; 0x70010
+	dbw 2, WesleyCallback
 
 UnknownScript_0x70010: ; 0x70010
 	end
@@ -29,17 +28,15 @@
 	return
 ; 0x70016
 
-UnknownScript_0x70016: ; 0x70016
+WesleyCallback:
 	checkcode $b
-	if_equal WEDNESDAY, UnknownScript_0x7001f
+	if_equal WEDNESDAY, .WesleyAppears
 	disappear $b
 	return
-; 0x7001f
 
-UnknownScript_0x7001f: ; 0x7001f
+.WesleyAppears
 	appear $b
 	return
-; 0x70022
 
 LanceScript_0x70022: ; 0x70022
 	checkevent EVENT_REFUSED_TO_HELP_LANCE_AT_LAKE_OF_RAGE
@@ -270,44 +267,41 @@
 	end
 ; 0x7010e
 
-SuperNerdScript_0x7010e: ; 0x7010e
+WesleyScript:
 	faceplayer
 	loadfont
 	checkevent EVENT_GOT_BLACKBELT_FROM_WESLEY
-	iftrue UnknownScript_0x7013c
+	iftrue WesleyWednesdayScript
 	checkcode $b
-	if_not_equal WEDNESDAY, UnknownScript_0x70142
+	if_not_equal WEDNESDAY, WesleyNotWednesdayScript
 	checkevent EVENT_MET_WESLEY_OF_WEDNESDAY
-	iftrue UnknownScript_0x70129
-	2writetext UnknownText_0x70784
+	iftrue .MetWesley
+	2writetext MeetWesleyText
 	keeptextopen
 	setevent EVENT_MET_WESLEY_OF_WEDNESDAY
-UnknownScript_0x70129: ; 0x70129
-	2writetext UnknownText_0x707dd
+.MetWesley
+	2writetext WesleyGivesGiftText
 	keeptextopen
 	verbosegiveitem BLACKBELT, 1
-	iffalse UnknownScript_0x70140
+	iffalse WesleyDoneScript
 	setevent EVENT_GOT_BLACKBELT_FROM_WESLEY
-	2writetext UnknownText_0x7080b
+	2writetext WesleyGaveGiftText
 	closetext
 	loadmovesprites
 	end
-; 0x7013c
 
-UnknownScript_0x7013c: ; 0x7013c
-	2writetext UnknownText_0x70844
+WesleyWednesdayScript:
+	2writetext WesleyWednesdayText
 	closetext
-UnknownScript_0x70140: ; 0x70140
+WesleyDoneScript:
 	loadmovesprites
 	end
-; 0x70142
 
-UnknownScript_0x70142: ; 0x70142
-	2writetext UnknownText_0x708a9
+WesleyNotWednesdayScript:
+	2writetext WesleyNotWednesdayText
 	closetext
 	loadmovesprites
 	end
-; 0x70148
 
 ItemFragment_0x70148: ; 0x70148
 	db ELIXER, 1
@@ -561,7 +555,7 @@
 	done
 ; 0x70784
 
-UnknownText_0x70784: ; 0x70784
+MeetWesleyText:
 	text "WESLEY: Well, how"
 	line "do you do?"
 
@@ -571,23 +565,20 @@
 	para "I'm WESLEY of"
 	line "Wednesday."
 	done
-; 0x707dd
 
-UnknownText_0x707dd: ; 0x707dd
+WesleyGivesGiftText:
 	text "Pleased to meet"
 	line "you. Please take a"
 	cont "souvenir."
 	done
-; 0x7080b
 
-UnknownText_0x7080b: ; 0x7080b
+WesleyGaveGiftText:
 	text "WESLEY: BLACKBELT"
 	line "beefs up the power"
 	cont "of fighting moves."
 	done
-; 0x70844
 
-UnknownText_0x70844: ; 0x70844
+WesleyWednesdayText:
 	text "WESLEY: Since you"
 	line "found me, you must"
 
@@ -597,14 +588,12 @@
 	para "Or did you just"
 	line "get lucky?"
 	done
-; 0x708a9
 
-UnknownText_0x708a9: ; 0x708a9
+WesleyNotWednesdayText:
 	text "WESLEY: Today's"
 	line "not Wednesday."
 	cont "That's too bad."
 	done
-; 0x708d7
 
 UnknownText_0x708d7: ; 0x708d7
 	text "LAKE OF RAGE,"
@@ -650,8 +639,6 @@
 	person_event SPRITE_COOLTRAINER_M, 19, 8, $9, $0, 255, 255, $82, 1, TrainerCooltrainermAaron, $0735
 	person_event SPRITE_COOLTRAINER_F, 11, 40, $8, $0, 255, 255, $82, 0, TrainerCooltrainerfLois, $0735
 	person_event SPRITE_GYARADOS, 26, 22, $16, $0, 255, 255, $80, 0, GyaradosScript_0x70063, $0751
-	person_event SPRITE_SUPER_NERD, 8, 8, $6, $0, 255, 255, $0, 0, SuperNerdScript_0x7010e, $075c
+	person_event SPRITE_SUPER_NERD, 8, 8, $6, $0, 255, 255, $0, 0, WesleyScript, $075c
 	person_event SPRITE_POKE_BALL, 14, 11, $1, $0, 255, 255, $1, 0, ItemFragment_0x70148, $0645
 	person_event SPRITE_POKE_BALL, 6, 39, $1, $0, 255, 255, $1, 0, ItemFragment_0x7014a, $0646
-; 0x709de
-
--- a/maps/Route29.asm
+++ b/maps/Route29.asm
@@ -11,8 +11,7 @@
 
 	; callbacks
 
-	dbw 2, UnknownScript_0x1a0f5b
-; 0x1a0f59
+	dbw 2, TuscanyCallback
 
 UnknownScript_0x1a0f59: ; 0x1a0f59
 	end
@@ -22,20 +21,19 @@
 	end
 ; 0x1a0f5b
 
-UnknownScript_0x1a0f5b: ; 0x1a0f5b
+TuscanyCallback:
 	checkflag $001b
-	iftrue UnknownScript_0x1a0f64
-UnknownScript_0x1a0f61: ; 0x1a0f61
+	iftrue .DoesTuscanyAppear
+
+.TuscanyDisappears
 	disappear $8
 	return
-; 0x1a0f64
 
-UnknownScript_0x1a0f64: ; 0x1a0f64
+.DoesTuscanyAppear
 	checkcode $b
-	if_not_equal TUESDAY, UnknownScript_0x1a0f61
+	if_not_equal TUESDAY, .TuscanyDisappears
 	appear $8
 	return
-; 0x1a0f6d
 
 UnknownScript_0x1a0f6d: ; 0x1a0f6d
 	spriteface $2, $1
@@ -177,44 +175,41 @@
 	end
 ; 0x1a1049
 
-TeacherScript_0x1a1049: ; 0x1a1049
+TuscanyScript:
 	faceplayer
 	loadfont
 	checkevent EVENT_GOT_PINK_BOW_FROM_TUSCANY
-	iftrue UnknownScript_0x1a1077
+	iftrue TuscanyTuesdayScript
 	checkcode $b
-	if_not_equal TUESDAY, UnknownScript_0x1a107d
+	if_not_equal TUESDAY, TuscanyNotTuesdayScript
 	checkevent EVENT_MET_TUSCANY_OF_TUESDAY
-	iftrue UnknownScript_0x1a1064
-	2writetext UnknownText_0x1a13b2
+	iftrue .MetTuscany
+	2writetext MeetTuscanyText
 	keeptextopen
 	setevent EVENT_MET_TUSCANY_OF_TUESDAY
-UnknownScript_0x1a1064: ; 0x1a1064
-	2writetext UnknownText_0x1a142f
+.MetTuscany
+	2writetext TuscanyGivesGiftText
 	keeptextopen
 	verbosegiveitem PINK_BOW, 1
-	iffalse UnknownScript_0x1a107b
+	iffalse TuscanyDoneScript
 	setevent EVENT_GOT_PINK_BOW_FROM_TUSCANY
-	2writetext UnknownText_0x1a146f
+	2writetext TuscanyGaveGiftText
 	closetext
 	loadmovesprites
 	end
-; 0x1a1077
 
-UnknownScript_0x1a1077: ; 0x1a1077
-	2writetext UnknownText_0x1a14e7
+TuscanyTuesdayScript:
+	2writetext TuscanyTuesdayText
 	closetext
-UnknownScript_0x1a107b: ; 0x1a107b
+TuscanyDoneScript:
 	loadmovesprites
 	end
-; 0x1a107d
 
-UnknownScript_0x1a107d: ; 0x1a107d
-	2writetext UnknownText_0x1a1559
+TuscanyNotTuesdayScript:
+	2writetext TuscanyNotTuesdayText
 	closetext
 	loadmovesprites
 	end
-; 0x1a1083
 
 MapRoute29Signpost0Script: ; 0x1a1083
 	jumptext UnknownText_0x1a158e
@@ -382,7 +377,7 @@
 	done
 ; 0x1a13b2
 
-UnknownText_0x1a13b2: ; 0x1a13b2
+MeetTuscanyText:
 	text "TUSCANY: I do be-"
 	line "lieve that this is"
 
@@ -395,9 +390,8 @@
 	para "I am TUSCANY of"
 	line "Tuesday."
 	done
-; 0x1a142f
 
-UnknownText_0x1a142f: ; 0x1a142f
+TuscanyGivesGiftText:
 	text "By way of intro-"
 	line "duction, please"
 
@@ -404,9 +398,8 @@
 	para "accept this gift,"
 	line "a PINK BOW."
 	done
-; 0x1a146f
 
-UnknownText_0x1a146f: ; 0x1a146f
+TuscanyGaveGiftText:
 	text "TUSCANY: Wouldn't"
 	line "you agree that it"
 	cont "is most adorable?"
@@ -417,9 +410,8 @@
 	para "I am certain it"
 	line "will be of use."
 	done
-; 0x1a14e7
 
-UnknownText_0x1a14e7: ; 0x1a14e7
+TuscanyTuesdayText:
 	text "TUSCANY: Have you"
 	line "met MONICA, my"
 	cont "older sister?"
@@ -430,14 +422,12 @@
 	para "I am the second of"
 	line "seven children."
 	done
-; 0x1a1559
 
-UnknownText_0x1a1559: ; 0x1a1559
+TuscanyNotTuesdayText:
 	text "TUSCANY: Today is"
 	line "not Tuesday. That"
 	cont "is unfortunate…"
 	done
-; 0x1a158e
 
 UnknownText_0x1a158e: ; 0x1a158e
 	text "ROUTE 29"
@@ -481,7 +471,5 @@
 	person_event SPRITE_FRUIT_TREE, 6, 16, $1, $0, 255, 255, $0, 0, FruitTreeScript_0x1a1089, $ffff
 	person_event SPRITE_FISHER, 7, 29, $7, $0, 255, 255, $90, 0, FisherScript_0x1a102e, $ffff
 	person_event SPRITE_COOLTRAINER_M, 8, 17, $6, $0, 255, 255, $80, 0, CooltrainerMScript_0x1a1031, $ffff
-	person_event SPRITE_TEACHER, 16, 33, $3, $0, 255, 255, $0, 0, TeacherScript_0x1a1049, $0759
+	person_event SPRITE_TEACHER, 16, 33, $3, $0, 255, 255, $0, 0, TuscanyScript, $0759
 	person_event SPRITE_POKE_BALL, 6, 52, $1, $0, 255, 255, $1, 0, ItemFragment_0x1a108b, $06ad
-; 0x1a1671
-
--- a/maps/Route32.asm
+++ b/maps/Route32.asm
@@ -12,8 +12,7 @@
 
 	; callbacks
 
-	dbw 2, UnknownScript_0x190463
-; 0x190460
+	dbw 2, FriedaCallback
 
 UnknownScript_0x190460: ; 0x190460
 	end
@@ -27,17 +26,15 @@
 	end
 ; 0x190463
 
-UnknownScript_0x190463: ; 0x190463
+FriedaCallback:
 	checkcode $b
-	if_equal FRIDAY, UnknownScript_0x19046c
+	if_equal FRIDAY, .FriedaAppears
 	disappear $e
 	return
-; 0x19046c
 
-UnknownScript_0x19046c: ; 0x19046c
+.FriedaAppears
 	appear $e
 	return
-; 0x19046f
 
 CooltrainerMScript_0x19046f: ; 0x19046f
 	faceplayer
@@ -627,44 +624,41 @@
 	end
 ; 0x190739
 
-LassScript_0x190739: ; 0x190739
+FriedaScript:
 	faceplayer
 	loadfont
 	checkevent EVENT_GOT_POISON_BARB_FROM_FRIEDA
-	iftrue UnknownScript_0x190767
+	iftrue FriedaFridayScript
 	checkcode $b
-	if_not_equal FRIDAY, UnknownScript_0x19076d
+	if_not_equal FRIDAY, FriedaNotFridayScript
 	checkevent EVENT_MET_FRIEDA_OF_FRIDAY
-	iftrue UnknownScript_0x190754
-	2writetext UnknownText_0x1911c1
+	iftrue .MetFrieda
+	2writetext MeetFriedaText
 	keeptextopen
 	setevent EVENT_MET_FRIEDA_OF_FRIDAY
-UnknownScript_0x190754: ; 0x190754
-	2writetext UnknownText_0x191204
+.MetFrieda
+	2writetext FriedaGivesGiftText
 	keeptextopen
 	verbosegiveitem POISON_BARB, 1
-	iffalse UnknownScript_0x19076b
+	iffalse FriedaDoneScript
 	setevent EVENT_GOT_POISON_BARB_FROM_FRIEDA
-	2writetext UnknownText_0x191222
+	2writetext FriedaGaveGiftText
 	closetext
 	loadmovesprites
 	end
-; 0x190767
 
-UnknownScript_0x190767: ; 0x190767
-	2writetext UnknownText_0x19129a
+FriedaFridayScript:
+	2writetext FriedaFridayText
 	closetext
-UnknownScript_0x19076b: ; 0x19076b
+FriedaDoneScript:
 	loadmovesprites
 	end
-; 0x19076d
 
-UnknownScript_0x19076d: ; 0x19076d
-	2writetext UnknownText_0x1912ff
+FriedaNotFridayScript:
+	2writetext FriedaNotFridayText
 	closetext
 	loadmovesprites
 	end
-; 0x190773
 
 ItemFragment_0x190773: ; 0x190773
 	db GREAT_BALL, 1
@@ -1100,7 +1094,7 @@
 	done
 ; 0x1911c1
 
-UnknownText_0x1911c1: ; 0x1911c1
+MeetFriedaText:
 	text "FRIEDA: Yahoo!"
 	line "It's Friday!"
 
@@ -1109,15 +1103,13 @@
 
 	para "Nice to meet you!"
 	done
-; 0x191204
 
-UnknownText_0x191204: ; 0x191204
+FriedaGivesGiftText:
 	text "Here's a POISON"
 	line "BARB for you!"
 	done
-; 0x191222
 
-UnknownText_0x191222: ; 0x191222
+FriedaGaveGiftText:
 	text "FRIEDA: Give it to"
 	line "a #MON that has"
 	cont "poison-type moves."
@@ -1130,9 +1122,8 @@
 	line "how good it makes"
 	cont "poison moves!"
 	done
-; 0x19129a
 
-UnknownText_0x19129a: ; 0x19129a
+FriedaFridayText:
 	text "FRIEDA: Hiya! What"
 	line "day do you like?"
 
@@ -1142,9 +1133,8 @@
 	para "Don't you think"
 	line "it's great too?"
 	done
-; 0x1912ff
 
-UnknownText_0x1912ff: ; 0x1912ff
+FriedaNotFridayText:
 	text "FRIEDA: Isn't it"
 	line "Friday today?"
 
@@ -1151,7 +1141,6 @@
 	para "It's so boring"
 	line "when it's not!"
 	done
-; 0x19133a
 
 UnknownText_0x19133a: ; 0x19133a
 	text "ROUTE 32"
@@ -1212,7 +1201,5 @@
 	person_event SPRITE_FISHER, 74, 11, $6, $0, 255, 255, $0, 0, FisherScript_0x1904f2, $06fc
 	person_event SPRITE_POKE_BALL, 57, 10, $1, $0, 255, 255, $1, 0, ItemFragment_0x190773, $06b0
 	person_event SPRITE_FISHER, 17, 19, $9, $0, 255, 255, $0, 0, FisherScript_0x1904ce, $ffff
-	person_event SPRITE_LASS, 71, 16, $8, $0, 255, 255, $0, 0, LassScript_0x190739, $0758
+	person_event SPRITE_LASS, 71, 16, $8, $0, 255, 255, $0, 0, FriedaScript, $0758
 	person_event SPRITE_POKE_BALL, 34, 7, $1, $0, 255, 255, $1, 0, ItemFragment_0x190775, $06b1
-; 0x19148b
-
--- a/maps/Route36.asm
+++ b/maps/Route36.asm
@@ -11,8 +11,7 @@
 
 	; callbacks
 
-	dbw 2, UnknownScript_0x19400f
-; 0x19400d
+	dbw 2, ArthurCallback
 
 UnknownScript_0x19400d: ; 0x19400d
 	end
@@ -22,17 +21,15 @@
 	end
 ; 0x19400f
 
-UnknownScript_0x19400f: ; 0x19400f
+ArthurCallback:
 	checkcode $b
-	if_equal THURSDAY, UnknownScript_0x194018
+	if_equal THURSDAY, .ArthurAppears
 	disappear $8
 	return
-; 0x194018
 
-UnknownScript_0x194018: ; 0x194018
+.ArthurAppears
 	appear $8
 	return
-; 0x19401b
 
 UnknownScript_0x19401b: ; 0x19401b
 	showemote $0, $0, 15
@@ -381,44 +378,41 @@
 	end
 ; 0x194201
 
-YoungsterScript_0x194201: ; 0x194201
+ArthurScript:
 	faceplayer
 	loadfont
 	checkevent EVENT_GOT_HARD_STONE_FROM_ARTHUR
-	iftrue UnknownScript_0x19422f
+	iftrue ArthurThursdayScript
 	checkcode $b
-	if_not_equal THURSDAY, UnknownScript_0x194235
+	if_not_equal THURSDAY, ArthurNotThursdayScript
 	checkevent EVENT_MET_ARTHUR_OF_THURSDAY
-	iftrue UnknownScript_0x19421c
-	2writetext UnknownText_0x194800
+	iftrue .MetArthur
+	2writetext MeetArthurText
 	keeptextopen
 	setevent EVENT_MET_ARTHUR_OF_THURSDAY
-UnknownScript_0x19421c: ; 0x19421c
-	2writetext UnknownText_0x19482d
+.MetArthur
+	2writetext ArthurGivesGiftText
 	keeptextopen
 	verbosegiveitem HARD_STONE, 1
-	iffalse UnknownScript_0x194233
+	iffalse ArthurDoneScript
 	setevent EVENT_GOT_HARD_STONE_FROM_ARTHUR
-	2writetext UnknownText_0x194847
+	2writetext ArthurGaveGiftText
 	closetext
 	loadmovesprites
 	end
-; 0x19422f
 
-UnknownScript_0x19422f: ; 0x19422f
-	2writetext UnknownText_0x1948aa
+ArthurThursdayScript:
+	2writetext ArthurThursdayText
 	closetext
-UnknownScript_0x194233: ; 0x194233
+ArthurDoneScript:
 	loadmovesprites
 	end
-; 0x194235
 
-UnknownScript_0x194235: ; 0x194235
-	2writetext UnknownText_0x1948f3
+ArthurNotThursdayScript:
+	2writetext ArthurNotThursdayText
 	closetext
 	loadmovesprites
 	end
-; 0x19423b
 
 MapRoute36Signpost2Script: ; 0x19423b
 	jumptext UnknownText_0x194924
@@ -678,7 +672,7 @@
 	done
 ; 0x194800
 
-UnknownText_0x194800: ; 0x194800
+MeetArthurText:
 	text "ARTHUR: Who are"
 	line "you?"
 
@@ -685,15 +679,13 @@
 	para "I'm ARTHUR of"
 	line "Thursday."
 	done
-; 0x19482d
 
-UnknownText_0x19482d: ; 0x19482d
+ArthurGivesGiftText:
 	text "Here. You can have"
 	line "this."
 	done
-; 0x194847
 
-UnknownText_0x194847: ; 0x194847
+ArthurGaveGiftText:
 	text "ARTHUR: A #MON"
 	line "that uses rock-"
 
@@ -703,9 +695,8 @@
 	para "It pumps up rock-"
 	line "type attacks."
 	done
-; 0x1948aa
 
-UnknownText_0x1948aa: ; 0x1948aa
+ArthurThursdayText:
 	text "ARTHUR: I'm ARTHUR"
 	line "of Thursday. I'm"
 
@@ -712,14 +703,12 @@
 	para "the second son out"
 	line "of seven children."
 	done
-; 0x1948f3
 
-UnknownText_0x1948f3: ; 0x1948f3
+ArthurNotThursdayText:
 	text "ARTHUR: Today's"
 	line "not Thursday. How"
 	cont "disappointing."
 	done
-; 0x194924
 
 UnknownText_0x194924: ; 0x194924
 	text "ROUTE 36"
@@ -796,8 +785,6 @@
 	person_event SPRITE_LASS, 12, 55, $5, $2, 255, 255, $0, 0, LassScript_0x1940e0, $ffff
 	person_event SPRITE_FISHER, 13, 48, $8, $0, 255, 255, $0, 0, FisherScript_0x1940b9, $ffff
 	person_event SPRITE_FRUIT_TREE, 8, 25, $1, $0, 255, 255, $0, 0, FruitTreeScript_0x194247, $ffff
-	person_event SPRITE_YOUNGSTER, 10, 50, $2, $11, 255, 255, $0, 0, YoungsterScript_0x194201, $075a
+	person_event SPRITE_YOUNGSTER, 10, 50, $2, $11, 255, 255, $0, 0, ArthurScript, $075a
 	person_event SPRITE_LASS, 16, 37, $6, $0, 255, 255, $90, 0, LassScript_0x19408c, $0769
 	person_event SPRITE_SUICUNE, 10, 25, $1, $0, 255, 255, $90, 0, ObjectEvent, $07b0
-; 0x194b19
-
--- a/maps/Route37.asm
+++ b/maps/Route37.asm
@@ -7,20 +7,17 @@
 
 	; callbacks
 
-	dbw 2, UnknownScript_0x1a8d77
-; 0x1a8d77
+	dbw 2, SunnyCallback
 
-UnknownScript_0x1a8d77: ; 0x1a8d77
+SunnyCallback:
 	checkcode $b
-	if_equal SUNDAY, UnknownScript_0x1a8d80
+	if_equal SUNDAY, .SunnyAppears
 	disappear $6
 	return
-; 0x1a8d80
 
-UnknownScript_0x1a8d80: ; 0x1a8d80
+.SunnyAppears
 	appear $6
 	return
-; 0x1a8d83
 
 TrainerTwinsAnnandanne1: ; 0x1a8d83
 	; bit/flag number
@@ -109,53 +106,48 @@
 	end
 ; 0x1a8dbf
 
-BugCatcherScript_0x1a8dbf: ; 0x1a8dbf
+SunnyScript:
 	faceplayer
 	loadfont
 	checkevent EVENT_GOT_MAGNET_FROM_SUNNY
-	iftrue UnknownScript_0x1a8dfa
+	iftrue SunnySundayScript
 	checkcode $b
-	if_not_equal SUNDAY, UnknownScript_0x1a8e00
+	if_not_equal SUNDAY, SunnyNotSundayScript
 	checkevent EVENT_MET_SUNNY_OF_SUNDAY
-	iftrue UnknownScript_0x1a8dda
-	2writetext UnknownText_0x1a8fc8
+	iftrue .MetSunny
+	2writetext MeetSunnyText
 	keeptextopen
 	setevent EVENT_MET_SUNNY_OF_SUNDAY
-UnknownScript_0x1a8dda: ; 0x1a8dda
+.MetSunny
 	checkflag $0063
-	iftrue UnknownScript_0x1a8de7
-	2writetext UnknownText_0x1a9004
+	iftrue .Kris
+	2writetext SunnyGivesGiftText1
 	keeptextopen
-	2jump UnknownScript_0x1a8deb
-; 0x1a8de7
-
-UnknownScript_0x1a8de7: ; 0x1a8de7
-	2writetext UnknownText_0x1a902f
+	2jump .next
+.Kris
+	2writetext SunnyGivesGiftText2
 	keeptextopen
-UnknownScript_0x1a8deb: ; 0x1a8deb
+.next
 	verbosegiveitem MAGNET, 1
-	iffalse UnknownScript_0x1a8dfe
+	iffalse SunnyDoneScript
 	setevent EVENT_GOT_MAGNET_FROM_SUNNY
-	2writetext UnknownText_0x1a905a
+	2writetext SunnyGaveGiftText
 	closetext
 	loadmovesprites
 	end
-; 0x1a8dfa
 
-UnknownScript_0x1a8dfa: ; 0x1a8dfa
-	2writetext UnknownText_0x1a90fc
+SunnySundayScript:
+	2writetext SunnySundayText
 	closetext
-UnknownScript_0x1a8dfe: ; 0x1a8dfe
+SunnyDoneScript:
 	loadmovesprites
 	end
-; 0x1a8e00
 
-UnknownScript_0x1a8e00: ; 0x1a8e00
-	2writetext UnknownText_0x1a916e
+SunnyNotSundayScript:
+	2writetext SunnyNotSundayText
 	closetext
 	loadmovesprites
 	end
-; 0x1a8e06
 
 MapRoute37Signpost0Script: ; 0x1a8e06
 	jumptext UnknownText_0x1a9197
@@ -245,7 +237,7 @@
 	done
 ; 0x1a8fc8
 
-UnknownText_0x1a8fc8: ; 0x1a8fc8
+MeetSunnyText:
 	text "SUNNY: Hi!"
 
 	para "I'm SUNNY of Sun-"
@@ -252,23 +244,20 @@
 	line "day, meaning it's"
 	cont "Sunday today!"
 	done
-; 0x1a9004
 
-UnknownText_0x1a9004: ; 0x1a9004
+SunnyGivesGiftText1:
 	text "I was told to give"
 	line "you this if I saw"
 	cont "you!"
 	done
-; 0x1a902f
 
-UnknownText_0x1a902f: ; 0x1a902f
+SunnyGivesGiftText2:
 	text "I was told to give"
 	line "you this if I saw"
 	cont "you!"
 	done
-; 0x1a905a
 
-UnknownText_0x1a905a: ; 0x1a905a
+SunnyGaveGiftText:
 	text "SUNNY: That thing…"
 
 	para "Um…"
@@ -290,9 +279,8 @@
 	line "it powers up"
 	cont "electric moves!"
 	done
-; 0x1a90fc
 
-UnknownText_0x1a90fc: ; 0x1a90fc
+SunnySundayText:
 	text "SUNNY: My sisters"
 	line "and brothers are"
 	cont "MONICA, TUSCANY,"
@@ -302,14 +290,12 @@
 	para "They're all older"
 	line "than me!"
 	done
-; 0x1a916e
 
-UnknownText_0x1a916e: ; 0x1a916e
+SunnyNotSundayText:
 	text "SUNNY: Isn't today"
 	line "Sunday?"
 	cont "Um… I forgot!"
 	done
-; 0x1a9197
 
 UnknownText_0x1a9197: ; 0x1a9197
 	text "ROUTE 37"
@@ -337,8 +323,6 @@
 	person_event SPRITE_WEIRD_TREE, 16, 11, $6, $0, 255, 255, $82, 1, TrainerTwinsAnnandanne2, $ffff
 	person_event SPRITE_YOUNGSTER, 10, 10, $a, $0, 255, 255, $92, 1, TrainerPsychicGreg, $ffff
 	person_event SPRITE_FRUIT_TREE, 9, 17, $1, $0, 255, 255, $0, 0, FruitTreeScript_0x1a8e09, $ffff
-	person_event SPRITE_BUG_CATCHER, 12, 20, $2, $11, 255, 255, $0, 0, BugCatcherScript_0x1a8dbf, $075b
+	person_event SPRITE_BUG_CATCHER, 12, 20, $2, $11, 255, 255, $0, 0, SunnyScript, $075b
 	person_event SPRITE_FRUIT_TREE, 9, 20, $1, $0, 255, 255, $0, 0, FruitTreeScript_0x1a8e0b, $ffff
 	person_event SPRITE_FRUIT_TREE, 11, 19, $1, $0, 255, 255, $0, 0, FruitTreeScript_0x1a8e0d, $ffff
-; 0x1a920c
-
--- a/maps/Route40.asm
+++ b/maps/Route40.asm
@@ -7,21 +7,18 @@
 
 	; callbacks
 
-	dbw 2, UnknownScript_0x1a6165
-; 0x1a6165
+	dbw 2, MonicaCallback
 
-UnknownScript_0x1a6165: ; 0x1a6165
+MonicaCallback:
 	clearevent $07cf
 	checkcode $b
-	if_equal MONDAY, UnknownScript_0x1a6171
+	if_equal MONDAY, .MonicaAppears
 	disappear $a
 	return
-; 0x1a6171
 
-UnknownScript_0x1a6171: ; 0x1a6171
+.MonicaAppears
 	appear $a
 	return
-; 0x1a6174
 
 TrainerSwimmerfElaine: ; 0x1a6174
 	; bit/flag number
@@ -161,44 +158,41 @@
 	jumptextfaceplayer UnknownText_0x1a6564
 ; 0x1a61d9
 
-BuenaScript_0x1a61d9: ; 0x1a61d9
+MonicaScript:
 	faceplayer
 	loadfont
 	checkevent EVENT_GOT_SHARP_BEAK_FROM_MONICA
-	iftrue UnknownScript_0x1a6207
+	iftrue MonicaMondayScript
 	checkcode $b
-	if_not_equal MONDAY, UnknownScript_0x1a620d
+	if_not_equal MONDAY, MonicaNotMondayScript
 	checkevent EVENT_MET_MONICA_OF_MONDAY
-	iftrue UnknownScript_0x1a61f4
-	2writetext UnknownText_0x1a6606
+	iftrue .MetMonica
+	2writetext MeetMonicaText
 	keeptextopen
 	setevent EVENT_MET_MONICA_OF_MONDAY
-UnknownScript_0x1a61f4: ; 0x1a61f4
-	2writetext UnknownText_0x1a6636
+.MetMonica
+	2writetext MonicaGivesGiftText
 	keeptextopen
 	verbosegiveitem SHARP_BEAK, 1
-	iffalse UnknownScript_0x1a620b
+	iffalse MonicaDoneScript
 	setevent EVENT_GOT_SHARP_BEAK_FROM_MONICA
-	2writetext UnknownText_0x1a666c
+	2writetext MonicaGaveGiftText
 	closetext
 	loadmovesprites
 	end
-; 0x1a6207
 
-UnknownScript_0x1a6207: ; 0x1a6207
-	2writetext UnknownText_0x1a66dc
+MonicaMondayScript:
+	2writetext MonicaMondayText
 	closetext
-UnknownScript_0x1a620b: ; 0x1a620b
+MonicaDoneScript:
 	loadmovesprites
 	end
-; 0x1a620d
 
-UnknownScript_0x1a620d: ; 0x1a620d
-	2writetext UnknownText_0x1a6737
+MonicaNotMondayScript:
+	2writetext MonicaNotMondayText
 	closetext
 	loadmovesprites
 	end
-; 0x1a6213
 
 MapRoute40Signpost0Script: ; 0x1a6213
 	jumptext UnknownText_0x1a6767
@@ -384,22 +378,20 @@
 	done
 ; 0x1a6606
 
-UnknownText_0x1a6606: ; 0x1a6606
+MeetMonicaText:
 	text "MONICA: Glad to"
 	line "meet you. I'm"
 
 	para "MONICA of Monday."
 	done
-; 0x1a6636
 
-UnknownText_0x1a6636: ; 0x1a6636
+MonicaGivesGiftText:
 	text "As a token of our"
 	line "friendship, I have"
 	cont "a gift for you!"
 	done
-; 0x1a666c
 
-UnknownText_0x1a666c: ; 0x1a666c
+MonicaGaveGiftText:
 	text "MONICA: It's an"
 	line "item that raises"
 
@@ -410,9 +402,8 @@
 	line "bird #MON with"
 	cont "that item."
 	done
-; 0x1a66dc
 
-UnknownText_0x1a66dc: ; 0x1a66dc
+MonicaMondayText:
 	text "MONICA: My broth-"
 	line "ers and sisters"
 
@@ -422,14 +413,12 @@
 	para "See if you could"
 	line "find them all!"
 	done
-; 0x1a6737
 
-UnknownText_0x1a6737: ; 0x1a6737
+MonicaNotMondayText:
 	text "MONICA: I don't"
 	line "think today is"
 	cont "Monday. How sad…"
 	done
-; 0x1a6767
 
 UnknownText_0x1a6767: ; 0x1a6767
 	text "ROUTE 40"
@@ -465,9 +454,7 @@
 	person_event SPRITE_ROCK, 13, 10, $18, $0, 255, 255, $0, 0, RockScript_0x1a6216, $ffff
 	person_event SPRITE_ROCK, 12, 11, $18, $0, 255, 255, $0, 0, RockScript_0x1a6216, $ffff
 	person_event SPRITE_LASS, 17, 15, $6, $0, 255, 255, $0, 0, LassScript_0x1a61c4, $ffff
-	person_event SPRITE_BUENA, 14, 12, $3, $0, 255, 255, $0, 0, BuenaScript_0x1a61d9, $075e
+	person_event SPRITE_BUENA, 14, 12, $3, $0, 255, 255, $0, 0, MonicaScript, $075e
 	person_event SPRITE_POKEFAN_M, 10, 11, $9, $0, 255, 255, $0, 0, PokefanMScript_0x1a61c7, $ffff
 	person_event SPRITE_LASS, 8, 17, $3, $0, 255, 255, $a0, 0, LassScript_0x1a61d3, $ffff
 	person_event SPRITE_STANDING_YOUNGSTER, 13, 20, $3, $0, 255, 255, $90, 0, StandingYoungsterScript_0x1a61d6, $07cf
-; 0x1a683f
-