natural_20 0.1.1 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/CHANGELOG.md +13 -0
- data/README.md +1 -0
- data/bin/nat20 +2 -1
- data/bin/nat20.cmd +0 -0
- data/char_classes/wizard.yml +89 -0
- data/characters/high_elf_mage.yml +27 -0
- data/fixtures/battle_sim_objects.yml +2 -2
- data/fixtures/high_elf_mage.yml +28 -0
- data/fixtures/large_map.yml +63 -0
- data/game.yml +2 -2
- data/items/equipment.yml +30 -0
- data/items/objects.yml +33 -29
- data/items/spells.yml +58 -0
- data/items/weapons.yml +78 -18
- data/lib/CHANGELOG.md +0 -0
- data/lib/natural_20.rb +9 -0
- data/lib/natural_20/actions/action.rb +2 -2
- data/lib/natural_20/actions/attack_action.rb +76 -67
- data/lib/natural_20/actions/concerns/action_damage.rb +3 -1
- data/lib/natural_20/actions/dash_action.rb +7 -10
- data/lib/natural_20/actions/disengage_action.rb +11 -12
- data/lib/natural_20/actions/dodge_action.rb +7 -8
- data/lib/natural_20/actions/escape_grapple_action.rb +16 -18
- data/lib/natural_20/actions/first_aid_action.rb +14 -16
- data/lib/natural_20/actions/grapple_action.rb +24 -28
- data/lib/natural_20/actions/ground_interact_action.rb +1 -3
- data/lib/natural_20/actions/help_action.rb +13 -16
- data/lib/natural_20/actions/hide_action.rb +7 -9
- data/lib/natural_20/actions/interact_action.rb +12 -14
- data/lib/natural_20/actions/look_action.rb +14 -15
- data/lib/natural_20/actions/move_action.rb +9 -9
- data/lib/natural_20/actions/multiattack_action.rb +8 -9
- data/lib/natural_20/actions/prone_action.rb +4 -6
- data/lib/natural_20/actions/short_rest_action.rb +7 -8
- data/lib/natural_20/actions/shove_action.rb +20 -24
- data/lib/natural_20/actions/spell_action.rb +89 -0
- data/lib/natural_20/actions/stand_action.rb +5 -7
- data/lib/natural_20/actions/use_item_action.rb +7 -9
- data/lib/natural_20/ai_controller/standard.rb +1 -1
- data/lib/natural_20/battle.rb +8 -3
- data/lib/natural_20/cli/action_ui.rb +180 -0
- data/lib/natural_20/cli/builder/fighter_builder.rb +1 -1
- data/lib/natural_20/cli/builder/rogue_builder.rb +10 -10
- data/lib/natural_20/cli/builder/wizard_builder.rb +77 -0
- data/lib/natural_20/cli/character_builder.rb +9 -4
- data/lib/natural_20/cli/commandline_ui.rb +55 -162
- data/lib/natural_20/cli/inventory_ui.rb +4 -0
- data/lib/natural_20/cli/map_renderer.rb +7 -1
- data/lib/natural_20/concerns/attack_helper.rb +53 -0
- data/lib/natural_20/concerns/entity.rb +170 -11
- data/lib/natural_20/concerns/fighter_actions/second_wind_action.rb +7 -9
- data/lib/natural_20/concerns/fighter_class.rb +2 -2
- data/lib/natural_20/concerns/spell_attack_helper.rb +33 -0
- data/lib/natural_20/concerns/wizard_class.rb +86 -0
- data/lib/natural_20/die_roll.rb +2 -2
- data/lib/natural_20/event_manager.rb +50 -44
- data/lib/natural_20/item_library/base_item.rb +1 -1
- data/lib/natural_20/npc.rb +4 -0
- data/lib/natural_20/player_character.rb +75 -12
- data/lib/natural_20/session.rb +14 -1
- data/lib/natural_20/spell_library/firebolt.rb +72 -0
- data/lib/natural_20/spell_library/mage_armor.rb +67 -0
- data/lib/natural_20/spell_library/mage_hand.rb +2 -0
- data/lib/natural_20/spell_library/magic_missile.rb +67 -0
- data/lib/natural_20/spell_library/shield.rb +69 -0
- data/lib/natural_20/spell_library/spell.rb +31 -0
- data/lib/natural_20/utils/weapons.rb +8 -6
- data/lib/natural_20/version.rb +1 -1
- data/locales/en.yml +44 -8
- data/maps/game_map.yml +12 -2
- metadata +22 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5950f7a0ac3d6dabc24e5bc22102607e62928f3d1f540ad5e7e9d972cf645261
|
4
|
+
data.tar.gz: 400ce63c4fa8f6ab2cf6587739558bb10fd1c14237b4d7eb918c27825efb03f0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0c5e8ec2abbcce7e71d3bf07508e3c0300a5a8254adec90199b4e9d7f74e31d919d5f0b722582af527441ec52225ca1f2abd2094973421005641991f0fa9eec9
|
7
|
+
data.tar.gz: 51a26d11e57ea3db3acd565d069f8a804408da02c35ae6a857462298aef6aec114f47e9f3c3679e729020e485faa55a647e5457e7ff60b126ee41d431f617d48
|
data/.gitignore
CHANGED
data/CHANGELOG.md
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
# Changelog
|
2
|
+
|
3
|
+
All notable changes to this project will be documented in this file.
|
4
|
+
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
7
|
+
|
8
|
+
## [0.2.0] - 2021-02-12
|
9
|
+
|
10
|
+
### Added
|
11
|
+
|
12
|
+
- Added support for the Wizard class
|
13
|
+
- Rudimentary support for spells
|
data/README.md
CHANGED
data/bin/nat20
CHANGED
@@ -16,7 +16,7 @@ require 'irb/completion'
|
|
16
16
|
Natural20::EventManager.standard_cli
|
17
17
|
|
18
18
|
def t(token, options = {})
|
19
|
-
I18n.t(token, options)
|
19
|
+
I18n.t(token, **options)
|
20
20
|
end
|
21
21
|
|
22
22
|
def training_dummy
|
@@ -78,6 +78,7 @@ end
|
|
78
78
|
|
79
79
|
def continue_game
|
80
80
|
battle = @session.load_save
|
81
|
+
Natural20::Session.set_session(battle.session)
|
81
82
|
command_line = CommandlineUI.new(battle, battle.map)
|
82
83
|
command_line.game_loop
|
83
84
|
end
|
data/bin/nat20.cmd
CHANGED
File without changes
|
@@ -0,0 +1,89 @@
|
|
1
|
+
---
|
2
|
+
hit_die: 1d6
|
3
|
+
weapon_proficiencies:
|
4
|
+
- dagger
|
5
|
+
- dart
|
6
|
+
- sling
|
7
|
+
- quarterstaff
|
8
|
+
- light_crossbow
|
9
|
+
saving_throw_proficiency:
|
10
|
+
- int
|
11
|
+
- wis
|
12
|
+
available_skills_choices: 2
|
13
|
+
available_skills:
|
14
|
+
- arcana
|
15
|
+
- history
|
16
|
+
- insight
|
17
|
+
- investigation
|
18
|
+
- medicine
|
19
|
+
- religion
|
20
|
+
spell_list:
|
21
|
+
cantrip:
|
22
|
+
- acid_splash
|
23
|
+
- blade_ward
|
24
|
+
- chill_touch
|
25
|
+
- dancing_lights
|
26
|
+
- firebolt
|
27
|
+
- friends
|
28
|
+
- light
|
29
|
+
- mage_hand
|
30
|
+
- mending
|
31
|
+
- message
|
32
|
+
- minor_illusion
|
33
|
+
- poison_spray
|
34
|
+
- prestidigitation
|
35
|
+
- ray_of_frost
|
36
|
+
- shocking_grasp
|
37
|
+
- true_strike
|
38
|
+
level_1:
|
39
|
+
- alarm
|
40
|
+
- burning_hands
|
41
|
+
- charm_person
|
42
|
+
- chromatic_orb
|
43
|
+
- color_spray
|
44
|
+
- comprehend_languages
|
45
|
+
- detect_magic
|
46
|
+
- disguise_self
|
47
|
+
- expeditious_retreat
|
48
|
+
- false_life
|
49
|
+
- feather_fall
|
50
|
+
- find_familiar
|
51
|
+
- fog_cloud
|
52
|
+
- grease
|
53
|
+
- identify
|
54
|
+
- illusory_script
|
55
|
+
- jump
|
56
|
+
- longstrider
|
57
|
+
- mage_armor
|
58
|
+
- magic_missile
|
59
|
+
- protect_from_evil_and_good
|
60
|
+
- ray_of_sickness
|
61
|
+
- shield
|
62
|
+
- silent_image
|
63
|
+
- sleep
|
64
|
+
- tasha_hideous_laughter
|
65
|
+
- tensers_floating_disk
|
66
|
+
- thunderwave
|
67
|
+
- unseen_servant
|
68
|
+
- witch_bolt
|
69
|
+
proficiency_bonuses:
|
70
|
+
- 2
|
71
|
+
- 2
|
72
|
+
- 2
|
73
|
+
- 2
|
74
|
+
- 3
|
75
|
+
- 3
|
76
|
+
- 3
|
77
|
+
- 3
|
78
|
+
- 4
|
79
|
+
- 4
|
80
|
+
- 4
|
81
|
+
- 4
|
82
|
+
- 5
|
83
|
+
- 5
|
84
|
+
- 5
|
85
|
+
- 5
|
86
|
+
- 6
|
87
|
+
- 6
|
88
|
+
- 6
|
89
|
+
- 6
|
@@ -0,0 +1,27 @@
|
|
1
|
+
---
|
2
|
+
name: Crysania
|
3
|
+
race: elf
|
4
|
+
subrace: high_elf
|
5
|
+
classes:
|
6
|
+
wizard: 1
|
7
|
+
description: A high elf mage with a mysterious noble background
|
8
|
+
level: 1
|
9
|
+
hit_die: inherit
|
10
|
+
max_hp: 6
|
11
|
+
ability:
|
12
|
+
str: 10
|
13
|
+
dex: 15
|
14
|
+
con: 14
|
15
|
+
int: 18
|
16
|
+
wis: 12
|
17
|
+
cha: 8
|
18
|
+
spellbook:
|
19
|
+
- firebolt
|
20
|
+
- mage_armor
|
21
|
+
- magic_missile
|
22
|
+
prepared_spells:
|
23
|
+
- firebolt
|
24
|
+
- mage_armor
|
25
|
+
- magic_missile
|
26
|
+
equipped:
|
27
|
+
- dagger
|
@@ -5,7 +5,7 @@ map:
|
|
5
5
|
- "########"
|
6
6
|
- "..wwww.#"
|
7
7
|
- "..wwww.#"
|
8
|
-
- "
|
8
|
+
- "#.#www.#"
|
9
9
|
- "#=######"
|
10
10
|
- "...wwww#"
|
11
11
|
- "..pw.ppw"
|
@@ -14,7 +14,7 @@ map:
|
|
14
14
|
- ........
|
15
15
|
- ........
|
16
16
|
- ..o.....
|
17
|
-
-
|
17
|
+
- .T......
|
18
18
|
- ........
|
19
19
|
- ........
|
20
20
|
- ........
|
@@ -0,0 +1,28 @@
|
|
1
|
+
---
|
2
|
+
name: Crysania
|
3
|
+
race: elf
|
4
|
+
subrace: high_elf
|
5
|
+
classes:
|
6
|
+
wizard: 1
|
7
|
+
description: A high elf mage
|
8
|
+
level: 1
|
9
|
+
hit_die: inherit
|
10
|
+
max_hp: 6
|
11
|
+
ability:
|
12
|
+
str: 10
|
13
|
+
dex: 15
|
14
|
+
con: 14
|
15
|
+
int: 18
|
16
|
+
wis: 12
|
17
|
+
cha: 8
|
18
|
+
spellbook:
|
19
|
+
- firebolt
|
20
|
+
- shield
|
21
|
+
- mage_armor
|
22
|
+
- magic_missile
|
23
|
+
prepared_spells:
|
24
|
+
- firebolt
|
25
|
+
- mage_armor
|
26
|
+
- magic_missile
|
27
|
+
- shield
|
28
|
+
- magic_missile
|
@@ -0,0 +1,63 @@
|
|
1
|
+
---
|
2
|
+
:name: goblin_ambush
|
3
|
+
:description: Map for goblin_ambush
|
4
|
+
:map:
|
5
|
+
:illumination: 1.0
|
6
|
+
:base:
|
7
|
+
- "...........TTTT....T....TTT..."
|
8
|
+
- "........TTTTTTTTT.....TTTT...."
|
9
|
+
- ".......TTTTTTTTTT....TTTT....."
|
10
|
+
- ".........TTTTTTT......TT......"
|
11
|
+
- "------------------------------"
|
12
|
+
- ".............................."
|
13
|
+
- ".............................."
|
14
|
+
- ".............................."
|
15
|
+
- "------------------------------"
|
16
|
+
- "............T................."
|
17
|
+
- "....T....TTTTTTT..T..TTTTTT..."
|
18
|
+
- "..........TTTTTT......TTTT...."
|
19
|
+
- "........TTTTTTT.....TTTTTTTT.."
|
20
|
+
- ".............................."
|
21
|
+
- ".............................."
|
22
|
+
- ".............................."
|
23
|
+
:meta:
|
24
|
+
- "..........................g..."
|
25
|
+
- ".............................."
|
26
|
+
- ".............................."
|
27
|
+
- "...........g.................."
|
28
|
+
- "?............................."
|
29
|
+
- ".1.2.........................."
|
30
|
+
- ".............................."
|
31
|
+
- ".3.4.........................."
|
32
|
+
- "?............................."
|
33
|
+
- ".............................."
|
34
|
+
- ".............................."
|
35
|
+
- ".............................."
|
36
|
+
- ".............................."
|
37
|
+
- "........g................g...."
|
38
|
+
- ".............................."
|
39
|
+
- ".............................."
|
40
|
+
:legend:
|
41
|
+
T:
|
42
|
+
:name: Woods
|
43
|
+
type: tree
|
44
|
+
:g:
|
45
|
+
:name: Stivnux
|
46
|
+
:type: npc
|
47
|
+
:sub_type: goblin
|
48
|
+
'-':
|
49
|
+
:name: Trail Marking
|
50
|
+
:type: ground
|
51
|
+
color: brown
|
52
|
+
'1':
|
53
|
+
:name: spawn_point_1
|
54
|
+
:type: spawn_point
|
55
|
+
'2':
|
56
|
+
:name: spawn_point_2
|
57
|
+
:type: spawn_point
|
58
|
+
'3':
|
59
|
+
:name: spawn_point_3
|
60
|
+
:type: spawn_point
|
61
|
+
'4':
|
62
|
+
:name: spawn_point_4
|
63
|
+
:type: spawn_point
|
data/game.yml
CHANGED
@@ -13,8 +13,8 @@ title:
|
|
13
13
|
- ░ ░ ░ ░ ░ ░
|
14
14
|
-
|
15
15
|
title_color: red
|
16
|
-
description: A sample hardcore dungeon crawl with a party of
|
16
|
+
description: A sample hardcore dungeon crawl with a party of 3 (DnD 5th Edition rules)
|
17
17
|
author: Joseph Emmanuel Dayo
|
18
|
-
players:
|
18
|
+
players: 3
|
19
19
|
starting_map: maps/game_map
|
20
20
|
player_profiles: characters
|
data/items/equipment.yml
CHANGED
@@ -24,11 +24,21 @@ chain_shirt:
|
|
24
24
|
subtype: light
|
25
25
|
type: armor
|
26
26
|
weight: 13
|
27
|
+
component_pouch:
|
28
|
+
cost: 25
|
29
|
+
name: Component Pouch
|
30
|
+
type: other
|
31
|
+
weight: 2
|
27
32
|
copper_piece:
|
28
33
|
cost: 0.01
|
29
34
|
name: Copper Piece (cp)
|
30
35
|
type: currency
|
31
36
|
weight: 0.02
|
37
|
+
crystal:
|
38
|
+
cost: 10
|
39
|
+
name: Crystal
|
40
|
+
type: arcane_focus
|
41
|
+
weight: 1
|
32
42
|
electronum:
|
33
43
|
cost: 0.5
|
34
44
|
name: Electronum (ep)
|
@@ -53,6 +63,11 @@ leather:
|
|
53
63
|
subtype: light
|
54
64
|
type: armor
|
55
65
|
weight: 10
|
66
|
+
orb:
|
67
|
+
cost: 20
|
68
|
+
name: Orb
|
69
|
+
type: arcane_focus
|
70
|
+
weight: 3
|
56
71
|
padded:
|
57
72
|
ac: 11
|
58
73
|
cost: 5
|
@@ -67,6 +82,11 @@ platinum:
|
|
67
82
|
name: platinum (pp)
|
68
83
|
type: currency
|
69
84
|
weight: 0.02
|
85
|
+
rod:
|
86
|
+
cost: 10
|
87
|
+
name: Rod
|
88
|
+
type: arcane_focus
|
89
|
+
weight: 2
|
70
90
|
ruby_gem:
|
71
91
|
cost: 5000
|
72
92
|
name: Ruby Gemstone
|
@@ -82,6 +102,11 @@ silver_piece:
|
|
82
102
|
name: Silver Piece (sp)
|
83
103
|
type: currency
|
84
104
|
weight: 0.02
|
105
|
+
staff:
|
106
|
+
cost: 5
|
107
|
+
name: Staff
|
108
|
+
type: arcane_focus
|
109
|
+
weight: 4
|
85
110
|
studded_leather:
|
86
111
|
ac: 12
|
87
112
|
cost: 45
|
@@ -94,6 +119,11 @@ thieves_tools:
|
|
94
119
|
name: Thieves Tools
|
95
120
|
type: tool
|
96
121
|
weight: 1
|
122
|
+
wand:
|
123
|
+
cost: 10
|
124
|
+
name: Wand
|
125
|
+
type: arcane_focus
|
126
|
+
weight: 1
|
97
127
|
wooden_door_key:
|
98
128
|
cost: 0.05
|
99
129
|
name: Wooden Door Key
|
data/items/objects.yml
CHANGED
@@ -20,24 +20,40 @@ bottomless_pit:
|
|
20
20
|
brazier:
|
21
21
|
color: yellow
|
22
22
|
default_ac: 17
|
23
|
-
max_hp: 27
|
24
|
-
passable: true
|
25
|
-
placeable: false
|
26
23
|
light:
|
27
24
|
bright: 20
|
28
25
|
dim: 10
|
26
|
+
max_hp: 27
|
27
|
+
passable: true
|
28
|
+
placeable: false
|
29
29
|
token:
|
30
30
|
- Ý
|
31
|
+
briar:
|
32
|
+
allow_hide: true
|
33
|
+
color: green
|
34
|
+
cover: half
|
35
|
+
default_ac: 10
|
36
|
+
hp_die: 1d4
|
37
|
+
max_hp: 4
|
38
|
+
movement_cost: 2
|
39
|
+
passable: true
|
40
|
+
placeable: true
|
41
|
+
token:
|
42
|
+
- ▓
|
31
43
|
chest:
|
32
44
|
color: yellow
|
33
|
-
item_class:
|
45
|
+
item_class: ItemLibrary::Chest
|
34
46
|
name: Treasure Chest
|
35
47
|
passable: true
|
36
48
|
placeable: false
|
49
|
+
ground:
|
50
|
+
passable: true
|
51
|
+
placeable: true
|
52
|
+
token: inherit
|
37
53
|
pit_trap:
|
38
54
|
damage_die: 1d10
|
39
55
|
damage_type: piercing
|
40
|
-
item_class:
|
56
|
+
item_class: ItemLibrary::PitTrap
|
41
57
|
name: Pit Trap
|
42
58
|
notes:
|
43
59
|
- highlight: true
|
@@ -46,7 +62,7 @@ pit_trap:
|
|
46
62
|
stone_wall:
|
47
63
|
color: light_magenta
|
48
64
|
default_ac: 17
|
49
|
-
item_class:
|
65
|
+
item_class: ItemLibrary::StoneWall
|
50
66
|
max_hp: 27
|
51
67
|
name: Stone Wall
|
52
68
|
opaque: true
|
@@ -54,42 +70,30 @@ stone_wall:
|
|
54
70
|
token:
|
55
71
|
- null
|
56
72
|
wall: true
|
57
|
-
water:
|
58
|
-
color: blue
|
59
|
-
movement_cost: 2
|
60
|
-
name: Water
|
61
|
-
passable: true
|
62
|
-
token:
|
63
|
-
- ^
|
64
|
-
briar:
|
65
|
-
color: green
|
66
|
-
passable: true
|
67
|
-
placeable: true
|
68
|
-
movement_cost: 2
|
69
|
-
cover: half
|
70
|
-
default_ac: 10
|
71
|
-
hp_die: 1d4
|
72
|
-
max_hp: 4
|
73
|
-
allow_hide: true
|
74
|
-
token:
|
75
|
-
- ▓
|
76
73
|
tree:
|
74
|
+
allow_hide: true
|
77
75
|
color: green
|
78
|
-
passable: true
|
79
|
-
placeable: true
|
80
76
|
cover: half
|
81
77
|
default_ac: 10
|
82
78
|
hp_die: 1d8
|
83
79
|
max_hp: 8
|
84
|
-
|
80
|
+
passable: true
|
81
|
+
placeable: true
|
85
82
|
token:
|
86
83
|
- '*'
|
84
|
+
water:
|
85
|
+
color: blue
|
86
|
+
movement_cost: 2
|
87
|
+
name: Water
|
88
|
+
passable: true
|
89
|
+
token:
|
90
|
+
- ^
|
87
91
|
wooden_door:
|
88
92
|
color: magenta
|
89
93
|
default_ac: 15
|
90
94
|
hp_die: 4d8
|
91
95
|
interactable: true
|
92
|
-
item_class:
|
96
|
+
item_class: ItemLibrary::DoorObject
|
93
97
|
max_hp: 18
|
94
98
|
name: Wooden Door
|
95
99
|
token:
|