oakdex-battle 0.0.1 → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/README.md +15 -0
- data/lib/oakdex/battle.rb +1 -0
- data/lib/oakdex/battle/breeding.rb +109 -0
- data/lib/oakdex/battle/pokemon.rb +5 -0
- data/lib/oakdex/battle/pokemon_factory.rb +16 -4
- data/lib/oakdex/battle/version.rb +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: a1d0972ff95da713b2117cf6f642ac45edc48daa
|
4
|
+
data.tar.gz: 9d71621683079bebffd2703b7c448a3df79873ca
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '08b23d0d4936817b5a93f044fd69af58ee74b534e973e97d143555d9f0f6b2af9b23a95c910833aa689bd13e794dcf4a37d383f09173906c4d632ffcd2613acd'
|
7
|
+
data.tar.gz: 25f79543b12fde79d5777cc6857a65b08aaee38bca10a11fa9c32b2bb259b50634d2f01a6502221432d786c04edcc9bd86bfc673846b47921ffc5f3c39d07ee0
|
data/README.md
CHANGED
@@ -90,10 +90,25 @@ battle = Oakdex::Battle.new([trainer1], [trainer2], pokemon_per_side: 3)
|
|
90
90
|
battle = Oakdex::Battle.new([trainer1, trainer3], [trainer2, trainer4])
|
91
91
|
```
|
92
92
|
|
93
|
+
|
94
|
+
### Breeding
|
95
|
+
|
96
|
+
```ruby
|
97
|
+
pok1 = Oakdex::Battle::Pokemon.create('Ditto', level: 20)
|
98
|
+
pok2 = Oakdex::Battle::Pokemon.create('Pikachu', level: 20, gender: 'female')
|
99
|
+
|
100
|
+
Oakdex::Battle::Breeding.compatible?(pok1, pok2) # => true
|
101
|
+
Oakdex::Battle::Breeding.chance_in_percentage(pok1, pok2) # => 20
|
102
|
+
Oakdex::Battle::Breeding.breed(pok1, pok2) #=> Oakdex::Battle::Pokemon Pichu
|
103
|
+
```
|
104
|
+
|
105
|
+
|
93
106
|
## Contributing
|
94
107
|
|
95
108
|
I would be happy if you want to add your contribution to the project. In order to contribute, you just have to fork this repository.
|
96
109
|
|
110
|
+
Please respect the [Code of Conduct](//github.com/jalyna/oakdex-battle/blob/master/CODE_OF_CONDUCT.md).
|
111
|
+
|
97
112
|
## License
|
98
113
|
|
99
114
|
MIT License. See the included MIT-LICENSE file.
|
data/lib/oakdex/battle.rb
CHANGED
@@ -0,0 +1,109 @@
|
|
1
|
+
module Oakdex
|
2
|
+
class Battle
|
3
|
+
# Pokemon Breeding
|
4
|
+
class Breeding
|
5
|
+
class << self
|
6
|
+
def compatible?(pokemon1, pokemon2)
|
7
|
+
new(pokemon1, pokemon2).compatible?
|
8
|
+
end
|
9
|
+
|
10
|
+
def chance_in_percentage(pokemon1, pokemon2)
|
11
|
+
new(pokemon1, pokemon2).chance_in_percentage
|
12
|
+
end
|
13
|
+
|
14
|
+
def breed(pokemon1, pokemon2)
|
15
|
+
new(pokemon1, pokemon2).child
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def initialize(pokemon1, pokemon2)
|
20
|
+
@female = pokemon1.gender == 'female' ? pokemon1 : pokemon2
|
21
|
+
@male = ([pokemon1, pokemon2] - [@female]).first
|
22
|
+
end
|
23
|
+
|
24
|
+
def compatible?
|
25
|
+
(opposite_gender? && same_egg_group? && !any_undiscovered?) ||
|
26
|
+
(exactly_one_is_ditto? && non_ditto_is_discovered?)
|
27
|
+
end
|
28
|
+
|
29
|
+
def chance_in_percentage
|
30
|
+
return 0 unless compatible?
|
31
|
+
return 50 if same_species?
|
32
|
+
20
|
33
|
+
end
|
34
|
+
|
35
|
+
def child
|
36
|
+
return unless compatible?
|
37
|
+
Oakdex::Battle::Pokemon.create(child_species.name,
|
38
|
+
level: 1,
|
39
|
+
additional_moves: enabled_egg_moves
|
40
|
+
)
|
41
|
+
end
|
42
|
+
|
43
|
+
private
|
44
|
+
|
45
|
+
def child_species
|
46
|
+
@child_species ||=
|
47
|
+
lowest_in_evolutionary_chain(non_ditto_or_female.species)
|
48
|
+
end
|
49
|
+
|
50
|
+
def enabled_egg_moves
|
51
|
+
egg_moves & parent_moves
|
52
|
+
end
|
53
|
+
|
54
|
+
def parent_moves
|
55
|
+
@female.moves.map(&:name) + @male.moves.map(&:name)
|
56
|
+
end
|
57
|
+
|
58
|
+
def egg_moves
|
59
|
+
child_species.learnset
|
60
|
+
.map { |l| l['egg_move'] ? l['move'] : nil }
|
61
|
+
.compact
|
62
|
+
end
|
63
|
+
|
64
|
+
def lowest_in_evolutionary_chain(species)
|
65
|
+
# TODO: take incenses into account
|
66
|
+
lowest_species = species
|
67
|
+
while lowest_species.evolution_from
|
68
|
+
lowest_species = Oakdex::Pokedex::Pokemon
|
69
|
+
.find!(lowest_species.evolution_from)
|
70
|
+
end
|
71
|
+
lowest_species
|
72
|
+
end
|
73
|
+
|
74
|
+
def exactly_one_is_ditto?
|
75
|
+
(@female.name == 'Ditto') ^ (@male.name == 'Ditto')
|
76
|
+
end
|
77
|
+
|
78
|
+
def non_ditto_is_discovered?
|
79
|
+
!non_ditto.species.egg_groups.include?('Undiscovered')
|
80
|
+
end
|
81
|
+
|
82
|
+
def non_ditto
|
83
|
+
return unless exactly_one_is_ditto?
|
84
|
+
@female.name == 'Ditto' ? @male : @female
|
85
|
+
end
|
86
|
+
|
87
|
+
def non_ditto_or_female
|
88
|
+
non_ditto || @female
|
89
|
+
end
|
90
|
+
|
91
|
+
def opposite_gender?
|
92
|
+
@female.gender == 'female' && @male.gender == 'male'
|
93
|
+
end
|
94
|
+
|
95
|
+
def same_egg_group?
|
96
|
+
!(@female.species.egg_groups & @male.species.egg_groups).empty?
|
97
|
+
end
|
98
|
+
|
99
|
+
def any_undiscovered?
|
100
|
+
(@female.species.egg_groups + @male.species.egg_groups)
|
101
|
+
.include?('Undiscovered')
|
102
|
+
end
|
103
|
+
|
104
|
+
def same_species?
|
105
|
+
@female.name == @male.name
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
@@ -24,6 +24,7 @@ module Oakdex
|
|
24
24
|
def_delegators :@species, :types
|
25
25
|
|
26
26
|
attr_accessor :trainer
|
27
|
+
attr_reader :species
|
27
28
|
|
28
29
|
def self.create(species_name, options = {})
|
29
30
|
species = Oakdex::Pokedex::Pokemon.find!(species_name)
|
@@ -41,6 +42,10 @@ module Oakdex
|
|
41
42
|
@species.names['en']
|
42
43
|
end
|
43
44
|
|
45
|
+
def gender
|
46
|
+
@attributes[:gender]
|
47
|
+
end
|
48
|
+
|
44
49
|
def moves
|
45
50
|
@attributes[:moves]
|
46
51
|
end
|
@@ -31,10 +31,22 @@ module Oakdex
|
|
31
31
|
)
|
32
32
|
end
|
33
33
|
else
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
34
|
+
(generate_available_moves + additional_moves).take(4)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def generate_available_moves
|
39
|
+
available_moves.sample(4).map do |move_name|
|
40
|
+
move_type = Oakdex::Pokedex::Move.find!(move_name)
|
41
|
+
Move.new(move_type, move_type.pp, move_type.pp)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def additional_moves
|
46
|
+
return [] unless @options[:additional_moves]
|
47
|
+
@options[:additional_moves].map do |move_name|
|
48
|
+
move_type = Oakdex::Pokedex::Move.find!(move_name)
|
49
|
+
Move.new(move_type, move_type.pp, move_type.pp)
|
38
50
|
end
|
39
51
|
end
|
40
52
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: oakdex-battle
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jalyna Schroeder
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-01-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: oakdex-pokedex
|
@@ -34,6 +34,7 @@ files:
|
|
34
34
|
- lib/oakdex.rb
|
35
35
|
- lib/oakdex/battle.rb
|
36
36
|
- lib/oakdex/battle/action.rb
|
37
|
+
- lib/oakdex/battle/breeding.rb
|
37
38
|
- lib/oakdex/battle/damage.rb
|
38
39
|
- lib/oakdex/battle/in_battle_pokemon.rb
|
39
40
|
- lib/oakdex/battle/move.rb
|
@@ -75,7 +76,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
75
76
|
version: '0'
|
76
77
|
requirements: []
|
77
78
|
rubyforge_project:
|
78
|
-
rubygems_version: 2.
|
79
|
+
rubygems_version: 2.5.2
|
79
80
|
signing_key:
|
80
81
|
specification_version: 4
|
81
82
|
summary: Pokémon Battle Engine in Ruby
|