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
|
||||
|
||||
Dependencies:
|
||||
|
2
Makefile
2
Makefile
@ -43,7 +43,7 @@ crystal: pokecrystal.gbc
|
||||
|
||||
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
|
||||
|
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
38
main.asm
38
main.asm
@ -41695,6 +41695,8 @@ TrainerClassNames:: ; 2c1ef
|
||||
|
||||
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 @@ AIChooseMove: ; 440ce
|
||||
|
||||
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 @@ AIChooseMove: ; 440ce
|
||||
|
||||
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 @@ AIChooseMove: ; 440ce
|
||||
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 @@ AIChooseMove: ; 440ce
|
||||
xor a
|
||||
ld [hli], a
|
||||
jr .asm_44193
|
||||
|
||||
.asm_44191
|
||||
ld a, [de]
|
||||
ld [hli], a
|
||||
@ -47243,7 +47258,8 @@ AIChooseMove: ; 440ce
|
||||
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 @@ AIChooseMove: ; 440ce
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
and a
|
||||
jr z, .asm_44197
|
||||
jr z, .ChooseMove
|
||||
|
||||
ld [CurEnemyMove], a
|
||||
ld a, c
|
||||
|
Loading…
Reference in New Issue
Block a user