Skip to content

Commit de03a40

Browse files
committed
v0.3.0 release
This required a number of changes to bring the ingester into compliance with some last-minute alterations on the sheets.
1 parent 0bf4b25 commit de03a40

File tree

11 files changed

+158
-99
lines changed

11 files changed

+158
-99
lines changed

CHANGELOG.md

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
## 0.3.0
44

5-
## Changes
5+
### Changes
66

77
* Full migration to Foundry v10.
88
* Updated the system to Mythic 6.0, with the following adjustments:
@@ -14,7 +14,7 @@
1414
* Updated the rules for calculating carry, lift, and push weight.
1515
* Changed the "Double AGI Mod to Run/Charge" field to "AGI Bonus for Run/Charge."
1616
* This is to support the new rule for Hunters, where they were changed from doubling their AGI mod for figuring Charge and Run to instead gain a +3 bonus to their AGI mod when calculating those movement speeds. This field can take a number input, which will allow players to use either the new or old rules, as well as for use in like abilities, both for homebrew content and possible future official content.
17-
* Updated a number of system terms that have been changed for 5.1.
17+
* Updated a number of system terms that have been changed for 6.0
1818
* Fixed wound calculation to now be accurate for both Named Characters and Bestiary.
1919
* Updated rate of melee attacks.
2020
* Updated armor hardpoints.
@@ -39,7 +39,18 @@
3939
* Perceptive Range is now tracked and modifiable.
4040
* Weapons have a Scope Magnification value, and display their effective minimum and maximum ranges with that magnification factored in.
4141
* Attacks that deal Special Damage now indicate this by displaying a bullseye.
42-
* Equipment Item Compendia are now available.
42+
* Several Compendia are now available:
43+
* Abilities
44+
* Armor - Banished
45+
* Armor - Covenant
46+
* Armor - Forerunner
47+
* Armor - UNSC
48+
* Armor Permutations - UNSC
49+
* Equipment - Covenant
50+
* Equipment - Forerunner
51+
* Equipment - UNSC
52+
* Melee Weapons
53+
* Ranged Weapons
4354
* Field added to melee weapons to indicate the number of extra attacks it grants on an Attack action.
4455
* Field added to thrown weapons to indicate a flat range bonus granted by the weapon.
4556
* Equipment and Weapon Items can now provide shields and characteristic adjustments like Armor can.
@@ -52,13 +63,13 @@
5263
* Vehicle Actors introduced.
5364
* Vehicles are better suited to serve their role in the game as Actors than as Items. So, while there is no way to represent "ownership" of a Vehicle in the system, the benefits far exceed this downside.
5465
* Perhaps the most notable feature unique to Vehicles is Role Assignment, which allows users to provide an Actor ID for the character at a particular vehicle post. These roles can then be "assigned" to jobs or weapons, and the relevant Test(s) will be using that Actor's stats.
55-
* Two primary types: Walkers (using "Legs" propulsion type), and all others.
66+
* Three primary types: Walkers (using "Legs" propulsion type), Stationary Turrets (using "Stationary" propulsion type), and all others.
5667
* Walkers are expected to have a Stomp and Punch weapon added (if relevant).
5768
* Vehicles can post their doom state detonation to chat, along with make Splatter or Trample attacks as appropriate. Non-walkers can also post the damage dealt on a Wreck to chat.
5869
* The Slow special rule now halves melee rate of attacks.
5970
* Introduction of the Linked special rule for weapons, which multiplies the number of damages for an attack by the number of linked weapons.
6071

61-
## Bug Fixes
72+
### Bug Fixes
6273

6374
* Weapon Item sheet tabs for Settings and Notes are now displaying properly.
6475
* Fixed an instance where Armor that held values for Shields or Characteristics modifiers, but had those fields not checked as "has," were still applying those values to the Actor.
@@ -72,13 +83,13 @@
7283

7384
## 0.2.4
7485

75-
## Changes
86+
### Changes
7687

7788
* Removes incomplete magazine count feature. This will require a different, more involved re-implementation and this removal will prevent the current buggy implementation from breaking the update for those that want to use it.
7889

7990
## 0.2.3
8091

81-
## Changes
92+
### Changes
8293

8394
* Known languages can now be removed from a character simply by clicking on them.
8495
* The following were given post-to-chat functionality:
@@ -95,7 +106,7 @@
95106
* Scatter arrows are now rotated into the proper direction rather than using differing numbers of arrows.
96107
* A value to track how many loaded magazines are carried for a weapon was added to the Special Ammo tab on the Weapon Item sheet. This value is automatically decremented with each reload, and blocks reloads when the character has run out of loaded magazines for the weapon.
97108

98-
## Bug Fixes
109+
### Bug Fixes
99110

100111
* Fixes the Explode and Explode Once alternate settings for Special Damage to use the correct weapon "Crits On" value.
101112
* Fixes the broken Scatter link for weapon chat dialogs.

README.md

Lines changed: 8 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
An unofficial system implementation for playing the fan-made [Mythic](https://www.reddit.com/r/HaloMythic/) tabletop roleplaying game on [Foundry Virtual Tabletop](https://foundryvtt.com/).
44

5-
<!-- ![Foundry Version Supported](https://img.shields.io/endpoint?url=https%3A%2F%2Ffoundryshields.com%2Fversion%3Fstyle%3Dfor-the-badge%26url%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2FAugmenTab%2Fmythic%2Fmain%2Fsystem.json) -->
5+
![Foundry Version Supported](https://img.shields.io/endpoint?url=https%3A%2F%2Ffoundryshields.com%2Fversion%3Fstyle%3Dfor-the-badge%26url%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2FAugmenTab%2Fmythic%2Fmain%2Fsystem.json)
66
![License](https://img.shields.io/github/license/AugmenTab/mythic?style=for-the-badge)
77
![Downloads](https://img.shields.io/github/downloads/AugmenTab/mythic/total?style=for-the-badge)
88
![Downloads - Latest Release](https://img.shields.io/github/downloads/AugmenTab/mythic/latest/total?style=for-the-badge)
@@ -48,7 +48,7 @@ All available Item types in this system.
4848

4949
### Compendia
5050

51-
All of the compendia that come included with this system. **Development on some Compendia will rely on as-of-yet unimplemented features or bug fixes, and thus won't be introduced until those dependencies are resolved.**
51+
All of the compendia that come included with this system.
5252

5353
Available Compendium Packs:
5454
* Item
@@ -61,19 +61,13 @@ Available Compendium Packs:
6161
* Equipment - Covenant
6262
* Equipment - Forerunner
6363
* Equipment - UNSC
64-
* Melee Weapons - Banished
65-
* Melee Weapons - Covenant
66-
* Melee Weapons - Forerunner
67-
* Melee Weapons - UNSC
68-
* Ranged Weapons - Banished
69-
* Ranged Weapons - Covenant
70-
* Ranged Weapons - Forerunner
71-
* Ranged Weapons - UNSC
72-
* The Flood
73-
74-
Planned Compendium Packs:
64+
* Melee Weapons
65+
* Ranged Weapons
66+
67+
Upcoming Compendium Packs:
7568
* Actor
7669
* *Bestiary*
70+
* *The Flood*
7771
* *Vehicles - Banished*
7872
* *Vehicles - Covenant*
7973
* *Vehicles - Forerunner*
@@ -96,11 +90,4 @@ The software component of this system is distributed under the GNUv3 license.
9690
For a real-time record of what I'm working on, you can check the project's [Trello board](https://trello.com/b/y80KFteH/mythic-for-foundry).
9791

9892
* Fully functioning Medical page to handle Special Damage.
99-
* Special ammo builder for weapons, with stats and cost automatically applied to the weapon.
100-
* Compendia as laid out above.
101-
* Tooltips for everything.
102-
* A supporting API to handle weapon stat and price calculation using the [Mythic and 100DOS Community Development Tools](https://docs.google.com/spreadsheets/d/1e5gepoZg_IZvupVw-rCKNMz42xMxGlF--oJluaa9Ljo/edit?usp=sharing).
103-
* Add called shots, Clear Target, and Precision Strike.
104-
* Add dual wielding.
105-
* Lock nav bar & inventory bar at the top of the Actor Sheet.
106-
* Ability to add custom skills.
93+
* Special ammo builder for weapons.

domain/app/Main.hs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ main = do
3030
Async.forConcurrently sheets $ uncurry $ \subject sheetData -> do
3131
let subjectTxt = Request.sheetSubjectText subject
3232

33-
IO.putStrLn $ "Fetching " <> subjectTxt <> "..."
3433
resp <- HTTP.httpLbs (Request.setSheetQueryStrings sheetData req) mgr
3534

3635
IO.putStrLn $ "Converting " <> subjectTxt <> "..."

domain/src/Data/Types/Foundry.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -309,7 +309,7 @@ mkFloodToken flood =
309309
data Weapon =
310310
Weapon
311311
{ weaponName :: Name
312-
, weaponFaction :: Faction
312+
, weaponFaction :: Maybe Faction
313313
, weaponDescription :: Description
314314
, weaponPrice :: ItemPrice
315315
, weaponBreakpoints :: Breakpoints

domain/src/Data/Types/Ingest.hs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -172,11 +172,11 @@ data RawMeleeBase =
172172

173173
data RawMeleeWeapon =
174174
RawMeleeWeapon
175-
{ rawMeleeName :: T.Text
176-
, rawMeleeBases :: NE.NonEmpty RawMeleeBase
177-
, rawMeleeFaction :: T.Text
178-
, rawMeleeWeight :: Double
179-
, rawMeleePrice :: Int
175+
{ rawMeleeName :: T.Text
176+
, rawMeleeBases :: NE.NonEmpty RawMeleeBase
177+
, rawMeleeFaction :: T.Text
178+
, rawMeleeWeight :: Double
179+
, rawMeleePrice :: Int
180180
}
181181

182182
instance CSV.FromNamedRecord RawMeleeWeapon where
@@ -186,7 +186,7 @@ instance CSV.FromNamedRecord RawMeleeWeapon where
186186
<$> m .: ("Comp_name[" <> n <> "]")
187187
<*> m .: ("COMP_type[" <> n <> "]")
188188
<*> m .: ("COMP_attribute[" <> n <> "]")
189-
<*> m .: ("COMP_range[" <> n <> "]")
189+
<*> (defaultZero <$> m .: ("COMP_range[" <> n <> "]"))
190190
<*> m .: ("COMP_damage_roll[" <> n <> "]")
191191
<*> m .: ("COMP_damage_base[" <> n <> "]")
192192
<*> m .: ("COMP_pierce[" <> n <> "]")

domain/src/Data/Types/Prelude.hs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -749,19 +749,19 @@ mkItemPrice n =
749749
data ItemTrainings =
750750
ItemTrainings
751751
{ itemTrainingsEquipment :: Maybe EquipmentTraining
752-
, itemTrainingsFaction :: FactionTraining
752+
, itemTrainingsFaction :: Maybe FactionTraining
753753
}
754754

755755
instance ToJSON ItemTrainings where
756756
toJSON t =
757-
let defTraining = maybe "" equipmentTrainingText $ itemTrainingsEquipment t
758-
in object [ "equipment" .= defTraining
759-
, "faction" .= itemTrainingsFaction t
760-
]
757+
object
758+
[ "equipment" .= maybe "" equipmentTrainingText (itemTrainingsEquipment t)
759+
, "faction" .= maybe "" factionTrainingText (itemTrainingsFaction t)
760+
]
761761

762-
mkItemTrainings :: Faction -> Maybe EquipmentTraining -> ItemTrainings
762+
mkItemTrainings :: Maybe Faction -> Maybe EquipmentTraining -> ItemTrainings
763763
mkItemTrainings faction mbEquipmentTraining =
764-
ItemTrainings mbEquipmentTraining $ factionTrainingFor faction
764+
ItemTrainings mbEquipmentTraining $ factionTrainingFor <$> faction
765765

766766
data ItemType
767767
= ItemAbility

domain/src/Domain/Convert/Foundry.hs

Lines changed: 16 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import Domain.Helpers (tryParseInt)
88

99
import qualified Data.Bool as B
1010
import qualified Data.Char as C
11-
import Data.Either.Extra (maybeToEither)
11+
import Data.Either.Extra (eitherToMaybe, maybeToEither)
1212
import qualified Data.List as L
1313
import qualified Data.List.Extra as L
1414
import qualified Data.List.NonEmpty as NE
@@ -34,7 +34,7 @@ mkFoundry (faction, _) rawData =
3434
ArmorData a -> fmap L.singleton $ mkArmor faction a
3535
EquipmentData e -> fmap L.singleton $ mkEquipment faction e
3636
FloodData f -> fmap L.singleton $ mkFlood f
37-
MeleeData m -> mkMeleeWeapons faction m
37+
MeleeData m -> mkMeleeWeapons m
3838
PermutationData p -> fmap L.singleton $ mkPermutation faction p
3939
RangedData r -> mkRangedWeapons faction r
4040

@@ -114,7 +114,7 @@ mkArmor mbFaction raw = do
114114
, armorFaction = faction
115115
, armorPrice = mkItemPrice $ rawArmorPrice raw
116116
, armorBreakpoints = mkBreakpoints 0
117-
, armorTrainings = mkItemTrainings faction Nothing
117+
, armorTrainings = mkItemTrainings (Just faction) Nothing
118118
, armorWeight = weight
119119
, armorStats = stats
120120
, armorHardpoints = emptyHardpoints
@@ -152,7 +152,7 @@ mkEquipment mbFaction raw = do
152152
, equipmentFaction = faction
153153
, equipmentPrice = mkItemPrice $ rawEquipmentPrice raw
154154
, equipmentBreakpoints = mkBreakpoints 0
155-
, equipmentTrainings = mkItemTrainings faction Nothing
155+
, equipmentTrainings = mkItemTrainings (Just faction) Nothing
156156
, equipmentWeight = weight
157157
, equipmentDescription = mkDescription desc
158158
, equipmentShields = findShieldsIn desc
@@ -228,24 +228,13 @@ mkFlood raw = do
228228
, floodItems = abilities
229229
}
230230

231-
mkMeleeWeapons :: Maybe Faction -> RawMeleeWeapon -> Either T.Text [FoundryData]
232-
mkMeleeWeapons mbFaction raw =
233-
traverse (mkMelee mbFaction raw) . NE.toList $ rawMeleeBases raw
231+
mkMeleeWeapons :: RawMeleeWeapon -> Either T.Text [FoundryData]
232+
mkMeleeWeapons raw = traverse (mkMelee raw) . NE.toList $ rawMeleeBases raw
234233

235-
mkMelee :: Maybe Faction
236-
-> RawMeleeWeapon
237-
-> RawMeleeBase
238-
-> Either T.Text FoundryData
239-
mkMelee mbFaction raw rawBase = do
240-
faction <-
241-
flip maybeToEither mbFaction
242-
$ T.unwords
243-
[ "Cannot build Melee Weapon "
244-
, rawMeleeName raw <> ":"
245-
, "no faction could be parsed."
246-
]
247-
248-
let weaponType = rawMeleeBaseType rawBase
234+
mkMelee :: RawMeleeWeapon -> RawMeleeBase -> Either T.Text FoundryData
235+
mkMelee raw rawBase = do
236+
let mbFaction = eitherToMaybe . factionFromText $ rawMeleeFaction raw
237+
weaponType = rawMeleeBaseType rawBase
249238
weaponDetails = Map.lookup (T.toUpper weaponType) weaponDetailsMap
250239
fireModeMap = Map.singleton NoFireMode $ mkFireRate 0
251240
weight =
@@ -282,11 +271,11 @@ mkMelee mbFaction raw rawBase = do
282271
. FoundryWeapon
283272
$ Weapon
284273
{ weaponName = mkName $ rawMeleeBaseName rawBase
285-
, weaponFaction = faction
274+
, weaponFaction = mbFaction
286275
, weaponDescription = description
287276
, weaponPrice = mkItemPrice $ rawMeleePrice raw
288277
, weaponBreakpoints = mkBreakpoints 0
289-
, weaponTrainings = mkItemTrainings faction $ fst <$> weaponDetails
278+
, weaponTrainings = mkItemTrainings mbFaction $ fst <$> weaponDetails
290279
, weaponWeight = weight
291280
, weaponGroup = fromMaybe MeleeGroup $ snd <$> weaponDetails
292281
, weaponTags = buildWeaponTags weaponTags
@@ -334,7 +323,7 @@ mkPermutation mbFaction raw = do
334323
, equipmentFaction = faction
335324
, equipmentPrice = mkItemPrice $ rawPermutationPrice raw
336325
, equipmentBreakpoints = mkBreakpoints 0
337-
, equipmentTrainings = mkItemTrainings faction Nothing
326+
, equipmentTrainings = mkItemTrainings (Just faction) Nothing
338327
, equipmentWeight = emptyWeight
339328
, equipmentDescription = mkDescription desc
340329
, equipmentShields = Nothing
@@ -356,15 +345,8 @@ mkRanged :: Maybe Faction
356345
-> RawRangedBase
357346
-> Either T.Text FoundryData
358347
mkRanged mbFaction raw rawBase = do
359-
faction <-
360-
flip maybeToEither mbFaction
361-
$ T.unwords
362-
[ "Cannot build Ranged Weapon"
363-
, rawRangedName raw <> ":"
364-
, "no faction could be parsed."
365-
]
366-
367-
let (name, nickname) = mkNameAndNickname $ rawRangedName raw
348+
let faction = eitherToMaybe . factionFromText $ rawRangedName raw
349+
(name, nickname) = mkNameAndNickname $ rawRangedName raw
368350
weaponType = rawRangedBaseType rawBase
369351
weaponDetails = Map.lookup (T.toUpper weaponType) weaponDetailsMap
370352
weight =
@@ -408,7 +390,7 @@ mkRanged mbFaction raw rawBase = do
408390
. FoundryWeapon
409391
$ Weapon
410392
{ weaponName = name
411-
, weaponFaction = faction
393+
, weaponFaction = mbFaction
412394
, weaponDescription = description
413395
, weaponPrice = mkItemPrice $ rawRangedPrice raw
414396
, weaponBreakpoints = mkBreakpoints 0

domain/src/Domain/Convert/Ingest.hs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,12 +49,12 @@ mkCompendiumMapEntry subject rawData = do
4949
. factionFromText
5050
$ case rawData of
5151
AbilityData _ -> "factionless_ability"
52-
ArmorData raw -> rawArmorFaction raw
53-
EquipmentData raw -> rawEquipmentFaction raw
52+
ArmorData raw -> rawArmorFaction raw
53+
EquipmentData raw -> rawEquipmentFaction raw
5454
FloodData _ -> "factionless_flood"
55-
MeleeData raw -> rawMeleeFaction raw
55+
MeleeData _ -> "factionless_melee"
5656
PermutationData raw -> rawPermutationFaction raw
57-
RangedData raw -> rawRangedFaction raw
57+
RangedData _ -> "factionless_ranged"
5858

5959
pure ( (faction, mkCompendiumDetails $ Request.sheetSubjectTitle subject)
6060
, [ rawData ]

domain/src/Domain/Persist.hs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ mythicAuthor =
9797
{ name = "Tyler Baum"
9898
, website = Just "https://github.com/AugmenTab"
9999
, email = Nothing
100-
, discord = Just "∀ugmenTab#5063"
100+
, discord = Just "augmentab"
101101
}
102102

103103
data Language =
@@ -156,14 +156,14 @@ mythicManifest :: [Compendium FoundryData] -> Manifest
156156
mythicManifest compendia =
157157
let mythicDescription =
158158
T.unwords [ "An unofficial system implementation for playing the"
159-
, "fan-made Halo: Mythic game on Foundry Virtual Tabletop."
159+
, "fan-made Mythic game on Foundry Virtual Tabletop."
160160
]
161161

162162
in Manifest
163163
{ systemId = "mythic"
164164
, title = "Mythic"
165165
, description = mythicDescription
166-
, version = "0.2.4"
166+
, version = "0.3.0"
167167
, authors = [ mythicAuthor ]
168168
, esmodules = [ "mythic.js" ]
169169
, styles = [ "mythic.css" ]

domain/src/Domain/Request.hs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -62,13 +62,13 @@ type SheetData = (GID, Range)
6262
sheetDataMap :: Map.Map SheetSubject SheetData
6363
sheetDataMap =
6464
Map.fromList
65-
-- [ ( AbilitySheet , (GID "1007822165", Range "A2:F96") )
66-
-- , ( ArmorSheet , (GID "226189720" , Range "A2:P199") )
67-
-- , ( EquipmentSheet , (GID "515202982" , Range "A2:F607") )
68-
[ ( FloodSheet , (GID "1809814064", Range "A2:AA381") )
69-
-- , ( MeleeWeaponSheet , (GID "346860164" , Range "A2:AG53") )
70-
-- , ( PermutationSheet , (GID "80923077" , Range "A2:F74") )
71-
-- , ( RangedWeaponSheet, (GID "430796362" , Range "A2:AE397") )
65+
[ ( AbilitySheet , (GID "1007822165", Range "A2:F96") )
66+
, ( ArmorSheet , (GID "226189720" , Range "A2:P199") )
67+
, ( EquipmentSheet , (GID "515202982" , Range "A2:F607") )
68+
-- , ( FloodSheet , (GID "1809814064", Range "A2:AA381") )
69+
, ( MeleeWeaponSheet , (GID "346860164" , Range "A2:AH63") )
70+
, ( PermutationSheet , (GID "80923077" , Range "A2:F74") )
71+
, ( RangedWeaponSheet, (GID "1510373161", Range "B2:AF397") )
7272
]
7373

7474
makeSheetRequest :: Either T.Text HTTP.Request

0 commit comments

Comments
 (0)