mirror of
https://gitlab.com/xCrystal/pokecrystal-board.git
synced 2024-11-16 11:27:33 -08:00
Merge remote-tracking branch 'xcrystal/master' into master
Conflicts: battle/ai/scoring.asm main.asm
This commit is contained in:
commit
81e2a3f0cf
32
INSTALL.md
32
INSTALL.md
@ -1,3 +1,35 @@
|
|||||||
|
# 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
|
# Linux
|
||||||
|
|
||||||
Dependencies:
|
Dependencies:
|
||||||
|
2
Makefile
2
Makefile
@ -43,7 +43,7 @@ crystal: pokecrystal.gbc
|
|||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -f $(roms) $(all_obj)
|
rm -f $(roms) $(all_obj)
|
||||||
find -iname '*.tx' -exec rm {} +
|
find . -iname '*.tx' -exec rm {} +
|
||||||
|
|
||||||
baserom.gbc: ;
|
baserom.gbc: ;
|
||||||
@echo "Wait! Need baserom.gbc first. Check README and INSTALL for details." && false
|
@echo "Wait! Need baserom.gbc first. Check README and INSTALL for details." && false
|
||||||
|
59
Vagrantfile
vendored
Normal file
59
Vagrantfile
vendored
Normal file
@ -0,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
|
File diff suppressed because it is too large
Load Diff
36
main.asm
36
main.asm
@ -41695,6 +41695,8 @@ TrainerClassNames:: ; 2c1ef
|
|||||||
|
|
||||||
AI_Redundant: ; 2c41a
|
AI_Redundant: ; 2c41a
|
||||||
; Check if move effect c will fail because it's already been used.
|
; 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 a, c
|
||||||
ld de, 3
|
ld de, 3
|
||||||
ld hl, .Moves
|
ld hl, .Moves
|
||||||
@ -47162,7 +47164,7 @@ AIChooseMove: ; 440ce
|
|||||||
|
|
||||||
ld a, c
|
ld a, c
|
||||||
cp 16 ; up to 16 scoring layers
|
cp 16 ; up to 16 scoring layers
|
||||||
jr z, .asm_4415e
|
jr z, .DecrementScores
|
||||||
|
|
||||||
push bc
|
push bc
|
||||||
ld d, BANK(TrainerClassAttributes)
|
ld d, BANK(TrainerClassAttributes)
|
||||||
@ -47191,28 +47193,36 @@ AIChooseMove: ; 440ce
|
|||||||
|
|
||||||
jr .CheckLayer
|
jr .CheckLayer
|
||||||
|
|
||||||
.asm_4415e
|
; Decrement the scores of all moves one by one until one reaches 0.
|
||||||
|
.DecrementScores
|
||||||
ld hl, Buffer1
|
ld hl, Buffer1
|
||||||
ld de, EnemyMonMoves
|
ld de, EnemyMonMoves
|
||||||
ld c, EnemyMonMovesEnd - EnemyMonMoves
|
ld c, EnemyMonMovesEnd - EnemyMonMoves
|
||||||
.asm_44166
|
|
||||||
|
.DecrementNextScore
|
||||||
; If the enemy has no moves, this will infinite.
|
; If the enemy has no moves, this will infinite.
|
||||||
ld a, [de]
|
ld a, [de]
|
||||||
inc de
|
inc de
|
||||||
and a
|
and a
|
||||||
jr z, .asm_4415e
|
jr z, .DecrementScores
|
||||||
|
|
||||||
|
; We are done whenever a score reaches 0
|
||||||
dec [hl]
|
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
|
inc hl
|
||||||
dec c
|
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
|
ld a, c
|
||||||
|
|
||||||
.asm_44175
|
.asm_44175
|
||||||
inc [hl]
|
inc [hl]
|
||||||
dec hl
|
dec hl
|
||||||
@ -47223,11 +47233,15 @@ AIChooseMove: ; 440ce
|
|||||||
ld hl, Buffer1
|
ld hl, Buffer1
|
||||||
ld de, EnemyMonMoves
|
ld de, EnemyMonMoves
|
||||||
ld c, NUM_MOVES
|
ld c, NUM_MOVES
|
||||||
|
|
||||||
|
; Give a score of 0 to a blank move
|
||||||
.asm_44184
|
.asm_44184
|
||||||
ld a, [de]
|
ld a, [de]
|
||||||
and a
|
and a
|
||||||
jr nz, .asm_44189
|
jr nz, .asm_44189
|
||||||
ld [hl], a
|
ld [hl], a
|
||||||
|
|
||||||
|
; Disregard the move if its score is not 1
|
||||||
.asm_44189
|
.asm_44189
|
||||||
ld a, [hl]
|
ld a, [hl]
|
||||||
dec a
|
dec a
|
||||||
@ -47235,6 +47249,7 @@ AIChooseMove: ; 440ce
|
|||||||
xor a
|
xor a
|
||||||
ld [hli], a
|
ld [hli], a
|
||||||
jr .asm_44193
|
jr .asm_44193
|
||||||
|
|
||||||
.asm_44191
|
.asm_44191
|
||||||
ld a, [de]
|
ld a, [de]
|
||||||
ld [hli], a
|
ld [hli], a
|
||||||
@ -47243,7 +47258,8 @@ AIChooseMove: ; 440ce
|
|||||||
dec c
|
dec c
|
||||||
jr nz, .asm_44184
|
jr nz, .asm_44184
|
||||||
|
|
||||||
.asm_44197
|
; Randomly choose one of the moves with a score of 1
|
||||||
|
.ChooseMove
|
||||||
ld hl, Buffer1
|
ld hl, Buffer1
|
||||||
call Random
|
call Random
|
||||||
and 3
|
and 3
|
||||||
@ -47252,7 +47268,7 @@ AIChooseMove: ; 440ce
|
|||||||
add hl, bc
|
add hl, bc
|
||||||
ld a, [hl]
|
ld a, [hl]
|
||||||
and a
|
and a
|
||||||
jr z, .asm_44197
|
jr z, .ChooseMove
|
||||||
|
|
||||||
ld [CurEnemyMove], a
|
ld [CurEnemyMove], a
|
||||||
ld a, c
|
ld a, c
|
||||||
|
Loading…
Reference in New Issue
Block a user