natural_20 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +14 -0
- data/.rspec +3 -0
- data/.travis.yml +6 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/Gemfile +7 -0
- data/LICENSE.txt +21 -0
- data/README.md +99 -0
- data/Rakefile +6 -0
- data/bin/compute_lights +19 -0
- data/bin/console +19 -0
- data/bin/nat20 +135 -0
- data/bin/nat20.cmd +3 -0
- data/bin/nat20author +104 -0
- data/bin/setup +8 -0
- data/char_classes/fighter.yml +45 -0
- data/char_classes/rogue.yml +54 -0
- data/characters/halfling_rogue.yml +46 -0
- data/characters/high_elf_fighter.yml +49 -0
- data/fixtures/battle_sim.yml +58 -0
- data/fixtures/battle_sim_2.yml +30 -0
- data/fixtures/battle_sim_3.yml +26 -0
- data/fixtures/battle_sim_4.yml +26 -0
- data/fixtures/battle_sim_objects.yml +101 -0
- data/fixtures/corridors.yml +24 -0
- data/fixtures/elf_rogue.yml +39 -0
- data/fixtures/halfling_rogue.yml +41 -0
- data/fixtures/high_elf_fighter.yml +49 -0
- data/fixtures/human_fighter.yml +48 -0
- data/fixtures/path_finding_test.yml +11 -0
- data/fixtures/path_finding_test_2.yml +15 -0
- data/fixtures/path_finding_test_3.yml +26 -0
- data/fixtures/thin_walls.yml +53 -0
- data/fixtures/traps.yml +25 -0
- data/game.yml +20 -0
- data/items/equipment.yml +101 -0
- data/items/objects.yml +73 -0
- data/items/weapons.yml +297 -0
- data/lib/natural_20.rb +68 -0
- data/lib/natural_20/actions/action.rb +40 -0
- data/lib/natural_20/actions/attack_action.rb +372 -0
- data/lib/natural_20/actions/concerns/action_damage.rb +14 -0
- data/lib/natural_20/actions/dash_action.rb +46 -0
- data/lib/natural_20/actions/disengage_action.rb +53 -0
- data/lib/natural_20/actions/dodge_action.rb +45 -0
- data/lib/natural_20/actions/escape_grapple_action.rb +97 -0
- data/lib/natural_20/actions/first_aid_action.rb +109 -0
- data/lib/natural_20/actions/grapple_action.rb +185 -0
- data/lib/natural_20/actions/ground_interact_action.rb +74 -0
- data/lib/natural_20/actions/help_action.rb +56 -0
- data/lib/natural_20/actions/hide_action.rb +53 -0
- data/lib/natural_20/actions/interact_action.rb +91 -0
- data/lib/natural_20/actions/inventory_action.rb +23 -0
- data/lib/natural_20/actions/look_action.rb +63 -0
- data/lib/natural_20/actions/move_action.rb +254 -0
- data/lib/natural_20/actions/multiattack_action.rb +41 -0
- data/lib/natural_20/actions/prone_action.rb +38 -0
- data/lib/natural_20/actions/short_rest_action.rb +53 -0
- data/lib/natural_20/actions/shove_action.rb +142 -0
- data/lib/natural_20/actions/stand_action.rb +47 -0
- data/lib/natural_20/actions/use_item_action.rb +57 -0
- data/lib/natural_20/ai_controller/path_compute.rb +140 -0
- data/lib/natural_20/ai_controller/standard.rb +288 -0
- data/lib/natural_20/battle.rb +544 -0
- data/lib/natural_20/battle_map.rb +843 -0
- data/lib/natural_20/cli/builder/fighter_builder.rb +104 -0
- data/lib/natural_20/cli/builder/rogue_builder.rb +62 -0
- data/lib/natural_20/cli/character_builder.rb +210 -0
- data/lib/natural_20/cli/commandline_ui.rb +612 -0
- data/lib/natural_20/cli/inventory_ui.rb +136 -0
- data/lib/natural_20/cli/map_renderer.rb +165 -0
- data/lib/natural_20/concerns/container.rb +32 -0
- data/lib/natural_20/concerns/entity.rb +1213 -0
- data/lib/natural_20/concerns/evaluator/entity_state_evaluator.rb +59 -0
- data/lib/natural_20/concerns/fighter_actions/second_wind_action.rb +51 -0
- data/lib/natural_20/concerns/fighter_class.rb +35 -0
- data/lib/natural_20/concerns/health_flavor.rb +27 -0
- data/lib/natural_20/concerns/lootable.rb +94 -0
- data/lib/natural_20/concerns/movement_helper.rb +195 -0
- data/lib/natural_20/concerns/multiattack.rb +54 -0
- data/lib/natural_20/concerns/navigation.rb +87 -0
- data/lib/natural_20/concerns/notable.rb +37 -0
- data/lib/natural_20/concerns/rogue_class.rb +26 -0
- data/lib/natural_20/controller.rb +11 -0
- data/lib/natural_20/die_roll.rb +331 -0
- data/lib/natural_20/event_manager.rb +288 -0
- data/lib/natural_20/item_library/base_item.rb +27 -0
- data/lib/natural_20/item_library/chest.rb +230 -0
- data/lib/natural_20/item_library/door_object.rb +189 -0
- data/lib/natural_20/item_library/ground.rb +124 -0
- data/lib/natural_20/item_library/healing_potion.rb +51 -0
- data/lib/natural_20/item_library/object.rb +153 -0
- data/lib/natural_20/item_library/pit_trap.rb +69 -0
- data/lib/natural_20/item_library/stone_wall.rb +18 -0
- data/lib/natural_20/npc.rb +173 -0
- data/lib/natural_20/player_character.rb +414 -0
- data/lib/natural_20/session.rb +168 -0
- data/lib/natural_20/utils/cover.rb +35 -0
- data/lib/natural_20/utils/ray_tracer.rb +90 -0
- data/lib/natural_20/utils/static_light_builder.rb +72 -0
- data/lib/natural_20/utils/weapons.rb +78 -0
- data/lib/natural_20/version.rb +4 -0
- data/locales/en.yml +304 -0
- data/maps/game_map.yml +168 -0
- data/natural_20.gemspec +46 -0
- data/npcs/goblin.yml +64 -0
- data/npcs/human_guard.yml +48 -0
- data/npcs/ogre.yml +61 -0
- data/npcs/owlbear.yml +55 -0
- data/npcs/wolf.yml +46 -0
- data/races/elf.yml +44 -0
- data/races/halfling.yml +22 -0
- data/races/human.yml +13 -0
- metadata +373 -0
data/bin/setup
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
---
|
2
|
+
hit_die: 1d10
|
3
|
+
weapon_proficiencies:
|
4
|
+
- light_armor
|
5
|
+
- medium_armor
|
6
|
+
- heavy_armor
|
7
|
+
- shields
|
8
|
+
- simple
|
9
|
+
- martial
|
10
|
+
saving_throw_proficiency:
|
11
|
+
- str
|
12
|
+
- con
|
13
|
+
available_skills_choices: 2
|
14
|
+
available_skills:
|
15
|
+
- acrobatics
|
16
|
+
- animal_handling
|
17
|
+
- athletics
|
18
|
+
- history
|
19
|
+
- insight
|
20
|
+
- intimidation
|
21
|
+
- perception
|
22
|
+
- survival
|
23
|
+
class_features:
|
24
|
+
- second_wind
|
25
|
+
proficiency_bonuses:
|
26
|
+
- 2
|
27
|
+
- 2
|
28
|
+
- 2
|
29
|
+
- 2
|
30
|
+
- 3
|
31
|
+
- 3
|
32
|
+
- 3
|
33
|
+
- 3
|
34
|
+
- 4
|
35
|
+
- 4
|
36
|
+
- 4
|
37
|
+
- 4
|
38
|
+
- 5
|
39
|
+
- 5
|
40
|
+
- 5
|
41
|
+
- 5
|
42
|
+
- 6
|
43
|
+
- 6
|
44
|
+
- 6
|
45
|
+
- 6
|
@@ -0,0 +1,54 @@
|
|
1
|
+
---
|
2
|
+
available_skills_choices: 4
|
3
|
+
available_skills:
|
4
|
+
- acrobatics
|
5
|
+
- athletics
|
6
|
+
- deception
|
7
|
+
- insight
|
8
|
+
- intimidation
|
9
|
+
- investigation
|
10
|
+
- perception
|
11
|
+
- performance
|
12
|
+
- persuasion
|
13
|
+
- sleight_of_hand
|
14
|
+
- stealth
|
15
|
+
class_features:
|
16
|
+
- sneak_attack
|
17
|
+
hit_die: 1d8
|
18
|
+
languages:
|
19
|
+
- thieves_cant
|
20
|
+
proficiency_bonuses:
|
21
|
+
- 2
|
22
|
+
- 2
|
23
|
+
- 2
|
24
|
+
- 2
|
25
|
+
- 3
|
26
|
+
- 3
|
27
|
+
- 3
|
28
|
+
- 3
|
29
|
+
- 4
|
30
|
+
- 4
|
31
|
+
- 4
|
32
|
+
- 4
|
33
|
+
- 5
|
34
|
+
- 5
|
35
|
+
- 5
|
36
|
+
- 5
|
37
|
+
- 6
|
38
|
+
- 6
|
39
|
+
- 6
|
40
|
+
- 6
|
41
|
+
progression:
|
42
|
+
level_2:
|
43
|
+
class_features:
|
44
|
+
- cunning_action
|
45
|
+
saving_throw_proficiency:
|
46
|
+
- dex
|
47
|
+
- int
|
48
|
+
weapon_proficiencies:
|
49
|
+
- light_armor
|
50
|
+
- longsword
|
51
|
+
- simple
|
52
|
+
- hand_crossbow
|
53
|
+
- rapier
|
54
|
+
- shortsword
|
@@ -0,0 +1,46 @@
|
|
1
|
+
---
|
2
|
+
name: RumbleBelly
|
3
|
+
race: halfling
|
4
|
+
subrace: lightfoot
|
5
|
+
classes:
|
6
|
+
rogue: 1
|
7
|
+
description: A halfling rogue with a dark past
|
8
|
+
level: 1
|
9
|
+
hit_die: inherit
|
10
|
+
max_hp: 8
|
11
|
+
ability:
|
12
|
+
str: 11
|
13
|
+
dex: 20
|
14
|
+
con: 16
|
15
|
+
int: 11
|
16
|
+
wis: 12
|
17
|
+
cha: 17
|
18
|
+
skills:
|
19
|
+
- acrobatics
|
20
|
+
- arcana
|
21
|
+
- athletics
|
22
|
+
- history
|
23
|
+
- perception
|
24
|
+
token:
|
25
|
+
- R
|
26
|
+
tools:
|
27
|
+
- thieves_tools
|
28
|
+
- carpenters_tools
|
29
|
+
weapon_proficiencies:
|
30
|
+
- martial
|
31
|
+
- simple
|
32
|
+
equipped:
|
33
|
+
- dagger
|
34
|
+
- torch
|
35
|
+
- leather
|
36
|
+
inventory:
|
37
|
+
- type: shortbow
|
38
|
+
qty: 1
|
39
|
+
- type: dagger
|
40
|
+
qty: 1
|
41
|
+
- type: arrows
|
42
|
+
qty: 20
|
43
|
+
- type: thieves_tools
|
44
|
+
qty: 1
|
45
|
+
- type: healing_potion
|
46
|
+
qty: 1
|
@@ -0,0 +1,49 @@
|
|
1
|
+
---
|
2
|
+
name: Gomerin
|
3
|
+
race: elf
|
4
|
+
subrace: high_elf
|
5
|
+
classes:
|
6
|
+
fighter: 1
|
7
|
+
description: A high elf fighter seeking for glory
|
8
|
+
level: 1
|
9
|
+
hit_die: inherit
|
10
|
+
max_hp: 10
|
11
|
+
ability:
|
12
|
+
str: 12
|
13
|
+
dex: 20
|
14
|
+
con: 16
|
15
|
+
int: 16
|
16
|
+
wis: 12
|
17
|
+
cha: 11
|
18
|
+
saving_throw_proficiencies:
|
19
|
+
- strength
|
20
|
+
- constitution
|
21
|
+
attributes:
|
22
|
+
- dueling
|
23
|
+
skills:
|
24
|
+
- acrobatics
|
25
|
+
- arcana
|
26
|
+
- athletics
|
27
|
+
- history
|
28
|
+
- perception
|
29
|
+
weapon_proficiencies:
|
30
|
+
- martial
|
31
|
+
- simple
|
32
|
+
languages:
|
33
|
+
- abyssal
|
34
|
+
- celestial
|
35
|
+
- goblin
|
36
|
+
token:
|
37
|
+
- G
|
38
|
+
equipped:
|
39
|
+
- rapier
|
40
|
+
- longbow
|
41
|
+
- leather
|
42
|
+
- shield
|
43
|
+
inventory:
|
44
|
+
- type: spear
|
45
|
+
qty: 1
|
46
|
+
- type: arrows
|
47
|
+
qty: 20
|
48
|
+
- type: healing_potion
|
49
|
+
qty: 1
|
@@ -0,0 +1,58 @@
|
|
1
|
+
name: Natural20::Battle Sim
|
2
|
+
description: Map for Natural20::Battle Sim
|
3
|
+
map:
|
4
|
+
illumination: 0.0
|
5
|
+
base:
|
6
|
+
- ....#.
|
7
|
+
- ...##.
|
8
|
+
- ....#.
|
9
|
+
- ......
|
10
|
+
- .##oo.
|
11
|
+
- ......
|
12
|
+
- ......
|
13
|
+
light:
|
14
|
+
- ......
|
15
|
+
- ..A...
|
16
|
+
- ......
|
17
|
+
- ......
|
18
|
+
- ......
|
19
|
+
- ..A...
|
20
|
+
- ......
|
21
|
+
meta:
|
22
|
+
- g....C
|
23
|
+
- ......
|
24
|
+
- ......
|
25
|
+
- ..A..D
|
26
|
+
- ......
|
27
|
+
- .B...$
|
28
|
+
- ......
|
29
|
+
lights:
|
30
|
+
A:
|
31
|
+
bright: 10
|
32
|
+
dim: 5
|
33
|
+
legend:
|
34
|
+
A:
|
35
|
+
name: spawn_point_1
|
36
|
+
type: spawn_point
|
37
|
+
B:
|
38
|
+
name: spawn_point_2
|
39
|
+
type: spawn_point
|
40
|
+
C:
|
41
|
+
name: spawn_point_3
|
42
|
+
type: spawn_point
|
43
|
+
D:
|
44
|
+
name: spawn_point_4
|
45
|
+
type: spawn_point
|
46
|
+
o:
|
47
|
+
name: barrel
|
48
|
+
type: barrel
|
49
|
+
$:
|
50
|
+
name: Guard
|
51
|
+
type: npc
|
52
|
+
sub_type: human_guard
|
53
|
+
g:
|
54
|
+
name: Krizzit
|
55
|
+
type: npc
|
56
|
+
sub_type: goblin
|
57
|
+
overrides:
|
58
|
+
hp: 40
|
@@ -0,0 +1,30 @@
|
|
1
|
+
name: Natural20::Battle Sim
|
2
|
+
description: Map for Natural20::Battle Sim
|
3
|
+
map:
|
4
|
+
base:
|
5
|
+
- ......
|
6
|
+
- ......
|
7
|
+
- ......
|
8
|
+
- ......
|
9
|
+
- ......
|
10
|
+
- ......
|
11
|
+
meta:
|
12
|
+
- ....C.
|
13
|
+
- ......
|
14
|
+
- ......
|
15
|
+
- ..AD..
|
16
|
+
- ......
|
17
|
+
- .B....
|
18
|
+
legend:
|
19
|
+
A:
|
20
|
+
name: spawn_point_1
|
21
|
+
type: spawn_point
|
22
|
+
B:
|
23
|
+
name: spawn_point_2
|
24
|
+
type: spawn_point
|
25
|
+
C:
|
26
|
+
name: spawn_point_3
|
27
|
+
type: spawn_point
|
28
|
+
D:
|
29
|
+
name: spawn_point_4
|
30
|
+
type: spawn_point
|
@@ -0,0 +1,26 @@
|
|
1
|
+
name: Ogre Den
|
2
|
+
description: Map for Natural20::Battle Sim
|
3
|
+
map:
|
4
|
+
base:
|
5
|
+
- '#######'
|
6
|
+
- '......#'
|
7
|
+
- '......#'
|
8
|
+
- '####..#'
|
9
|
+
- '......#'
|
10
|
+
- '......#'
|
11
|
+
- '.......'
|
12
|
+
meta:
|
13
|
+
- .......
|
14
|
+
- A......
|
15
|
+
- .......
|
16
|
+
- .......
|
17
|
+
- .......
|
18
|
+
- B......
|
19
|
+
- .......
|
20
|
+
legend:
|
21
|
+
A:
|
22
|
+
name: spawn_point_1
|
23
|
+
type: spawn_point
|
24
|
+
B:
|
25
|
+
name: spawn_point_2
|
26
|
+
type: spawn_point
|
@@ -0,0 +1,26 @@
|
|
1
|
+
name: Ogre Den
|
2
|
+
description: Map for Natural20::Battle Sim
|
3
|
+
map:
|
4
|
+
base:
|
5
|
+
- '#######'
|
6
|
+
- '......#'
|
7
|
+
- '......#'
|
8
|
+
- '#######'
|
9
|
+
- '......#'
|
10
|
+
- '......#'
|
11
|
+
- '#######'
|
12
|
+
meta:
|
13
|
+
- .......
|
14
|
+
- A......
|
15
|
+
- .......
|
16
|
+
- .......
|
17
|
+
- .......
|
18
|
+
- B......
|
19
|
+
- .......
|
20
|
+
legend:
|
21
|
+
A:
|
22
|
+
name: spawn_point_1
|
23
|
+
type: spawn_point
|
24
|
+
B:
|
25
|
+
name: spawn_point_2
|
26
|
+
type: spawn_point
|
@@ -0,0 +1,101 @@
|
|
1
|
+
name: Warehouse
|
2
|
+
description: Warehouse
|
3
|
+
map:
|
4
|
+
base:
|
5
|
+
- "########"
|
6
|
+
- "..wwww.#"
|
7
|
+
- "..wwww.#"
|
8
|
+
- "#T#www.#"
|
9
|
+
- "#=######"
|
10
|
+
- "...wwww#"
|
11
|
+
- "..pw.ppw"
|
12
|
+
- "########"
|
13
|
+
base_1:
|
14
|
+
- ........
|
15
|
+
- ........
|
16
|
+
- ..o.....
|
17
|
+
- ........
|
18
|
+
- ........
|
19
|
+
- ........
|
20
|
+
- ........
|
21
|
+
- ........
|
22
|
+
meta:
|
23
|
+
- ........
|
24
|
+
- A....C..
|
25
|
+
- ........
|
26
|
+
- ........
|
27
|
+
- ........
|
28
|
+
- Bg...e#.
|
29
|
+
- ........
|
30
|
+
- ........
|
31
|
+
notes:
|
32
|
+
- type: point
|
33
|
+
positions:
|
34
|
+
- [3, 5]
|
35
|
+
- [4, 5]
|
36
|
+
- [5, 5]
|
37
|
+
notes:
|
38
|
+
- note: A pool of stinky water
|
39
|
+
- type: rectangle
|
40
|
+
positions:
|
41
|
+
- [0, 5, 6, 5]
|
42
|
+
notes:
|
43
|
+
- note: A vile stench fills this room
|
44
|
+
legend:
|
45
|
+
=:
|
46
|
+
name: front_door
|
47
|
+
type: wooden_door
|
48
|
+
state: closed
|
49
|
+
T:
|
50
|
+
name: pit_trap
|
51
|
+
type: pit_trap
|
52
|
+
perception_dc: 20
|
53
|
+
p:
|
54
|
+
name: pit
|
55
|
+
type: bottomless_pit
|
56
|
+
w:
|
57
|
+
name: Pool of water
|
58
|
+
type: water
|
59
|
+
o:
|
60
|
+
name: barrel
|
61
|
+
type: barrel
|
62
|
+
A:
|
63
|
+
name: spawn_point_1
|
64
|
+
type: spawn_point
|
65
|
+
B:
|
66
|
+
name: spawn_point_2
|
67
|
+
type: spawn_point
|
68
|
+
C:
|
69
|
+
name: spawn_point_3
|
70
|
+
type: spawn_point
|
71
|
+
e:
|
72
|
+
name: Frenabs
|
73
|
+
type: npc
|
74
|
+
sub_type: goblin
|
75
|
+
overrides:
|
76
|
+
battle_defaults:
|
77
|
+
statuses:
|
78
|
+
- hiding
|
79
|
+
stealth: 1d20+6
|
80
|
+
g:
|
81
|
+
name: dead_goblin
|
82
|
+
type: npc
|
83
|
+
sub_type: goblin
|
84
|
+
overrides:
|
85
|
+
hp: 0
|
86
|
+
notes:
|
87
|
+
- note: Dead Goblin!
|
88
|
+
highlight: true
|
89
|
+
perception_dc: 10
|
90
|
+
- if: inventory:wooden_door_key
|
91
|
+
note: In his hand is a wooden door key.
|
92
|
+
perception_dc: 10
|
93
|
+
- note: Remnants of a dead goblin, corpse is still fresh
|
94
|
+
- note: Stay away this goblin is a traitor
|
95
|
+
language: goblin
|
96
|
+
statuses:
|
97
|
+
- dead
|
98
|
+
inventory:
|
99
|
+
- type: wooden_door_key
|
100
|
+
label: Key to a wooden door
|
101
|
+
qty: 1
|