diff --git a/charges/agnusDei.svg b/charges/agnusDei.svg index 52f55f24..9e9fd1e0 100644 --- a/charges/agnusDei.svg +++ b/charges/agnusDei.svg @@ -1,27 +1,27 @@ - + - + - + - - - - - - + + + + + + - - - + + + @@ -132,4 +132,4 @@ - \ No newline at end of file + diff --git a/charges/anchor.svg b/charges/anchor.svg index 86ffa85e..59678314 100644 --- a/charges/anchor.svg +++ b/charges/anchor.svg @@ -1 +1,9 @@ - \ No newline at end of file + + + + + + + + + diff --git a/charges/angel.svg b/charges/angel.svg index 5dd03384..e6f3ba3e 100644 --- a/charges/angel.svg +++ b/charges/angel.svg @@ -1,22 +1,22 @@ - - + + - + - - + + - + diff --git a/charges/annulet.svg b/charges/annulet.svg index 2e9b28f2..b3dad13d 100644 --- a/charges/annulet.svg +++ b/charges/annulet.svg @@ -1 +1,6 @@ - \ No newline at end of file + + + + + + diff --git a/charges/apple.svg b/charges/apple.svg index 551cb1ea..6679428d 100644 --- a/charges/apple.svg +++ b/charges/apple.svg @@ -1 +1,8 @@ - \ No newline at end of file + + + + + + + + diff --git a/charges/arbalest.svg b/charges/arbalest.svg new file mode 100644 index 00000000..79cf4950 --- /dev/null +++ b/charges/arbalest.svg @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/arrow.svg b/charges/arrow.svg index 2b650a9e..dca5f47e 100644 --- a/charges/arrow.svg +++ b/charges/arrow.svg @@ -1 +1,10 @@ - \ No newline at end of file + + + + + + + + + + diff --git a/charges/arrowsSheaf.svg b/charges/arrowsSheaf.svg index 01cb6e8d..47d8b925 100644 --- a/charges/arrowsSheaf.svg +++ b/charges/arrowsSheaf.svg @@ -1 +1,27 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/attire.svg b/charges/attire.svg index 200dce16..99427a60 100644 --- a/charges/attire.svg +++ b/charges/attire.svg @@ -1 +1,18 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + + + diff --git a/charges/axe.svg b/charges/axe.svg index ff842a97..e1608145 100644 --- a/charges/axe.svg +++ b/charges/axe.svg @@ -1 +1,16 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + diff --git a/charges/badgerStatant.svg b/charges/badgerStatant.svg new file mode 100644 index 00000000..02de9b22 --- /dev/null +++ b/charges/badgerStatant.svg @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/banner.svg b/charges/banner.svg new file mode 100644 index 00000000..80ca0f4f --- /dev/null +++ b/charges/banner.svg @@ -0,0 +1,35 @@ + + + + diff --git a/charges/basilisk.svg b/charges/basilisk.svg index e73d2a4c..b2755dff 100644 --- a/charges/basilisk.svg +++ b/charges/basilisk.svg @@ -1 +1,220 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/bearPassant.svg b/charges/bearPassant.svg index 98e2c416..847ea7bd 100644 --- a/charges/bearPassant.svg +++ b/charges/bearPassant.svg @@ -1 +1,142 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/bearRampant.svg b/charges/bearRampant.svg index f7c240c1..418d6fb3 100644 --- a/charges/bearRampant.svg +++ b/charges/bearRampant.svg @@ -1 +1,129 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/bee.svg b/charges/bee.svg new file mode 100644 index 00000000..db5b48b4 --- /dev/null +++ b/charges/bee.svg @@ -0,0 +1,116 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/bell.svg b/charges/bell.svg index 22db9957..307b6493 100644 --- a/charges/bell.svg +++ b/charges/bell.svg @@ -1 +1,18 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + + + diff --git a/charges/billet.svg b/charges/billet.svg index 197064ff..9482f5a7 100644 --- a/charges/billet.svg +++ b/charges/billet.svg @@ -1 +1,6 @@ - \ No newline at end of file + + + + + + diff --git a/charges/boarHeadErased.svg b/charges/boarHeadErased.svg new file mode 100644 index 00000000..6c28ab2b --- /dev/null +++ b/charges/boarHeadErased.svg @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/boarRampant.svg b/charges/boarRampant.svg index efdb9bd6..436fb439 100644 --- a/charges/boarRampant.svg +++ b/charges/boarRampant.svg @@ -1 +1,26 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/boat.svg b/charges/boat.svg index 72f9c5cf..b50f6194 100644 --- a/charges/boat.svg +++ b/charges/boat.svg @@ -1 +1,19 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + + + + diff --git a/charges/boat2.svg b/charges/boat2.svg index 9eac5afa..f3e37a5b 100644 --- a/charges/boat2.svg +++ b/charges/boat2.svg @@ -1 +1,45 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/bookClosed.svg b/charges/bookClosed.svg new file mode 100644 index 00000000..f50006a1 --- /dev/null +++ b/charges/bookClosed.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/charges/bookOpen.svg b/charges/bookOpen.svg new file mode 100644 index 00000000..6a760e51 --- /dev/null +++ b/charges/bookOpen.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/bow.svg b/charges/bow.svg index 6f047535..b1f2c8ec 100644 --- a/charges/bow.svg +++ b/charges/bow.svg @@ -1 +1,8 @@ - \ No newline at end of file + + + + + + + + diff --git a/charges/bowWithArrow.svg b/charges/bowWithArrow.svg index 8caf84c4..ad2e4502 100644 --- a/charges/bowWithArrow.svg +++ b/charges/bowWithArrow.svg @@ -1 +1,15 @@ - \ No newline at end of file + + + + + + + + + + + + + + + diff --git a/charges/bridge.svg b/charges/bridge.svg new file mode 100644 index 00000000..41261f98 --- /dev/null +++ b/charges/bridge.svg @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/bucket.svg b/charges/bucket.svg index 6357b0c7..399aa92c 100644 --- a/charges/bucket.svg +++ b/charges/bucket.svg @@ -1 +1,20 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + diff --git a/charges/buckle.svg b/charges/buckle.svg index 8bb54df3..b83ba97d 100644 --- a/charges/buckle.svg +++ b/charges/buckle.svg @@ -1 +1,8 @@ - \ No newline at end of file + + + + + + + + diff --git a/charges/bugleHorn.svg b/charges/bugleHorn.svg index d0ee8107..a7985ca6 100644 --- a/charges/bugleHorn.svg +++ b/charges/bugleHorn.svg @@ -1 +1,18 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + + + diff --git a/charges/bugleHorn2.svg b/charges/bugleHorn2.svg index 4ce25830..cf5bcaa7 100644 --- a/charges/bugleHorn2.svg +++ b/charges/bugleHorn2.svg @@ -1 +1,16 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + diff --git a/charges/bullHeadCaboshed.svg b/charges/bullHeadCaboshed.svg index af7eb064..d3ddeccc 100644 --- a/charges/bullHeadCaboshed.svg +++ b/charges/bullHeadCaboshed.svg @@ -1 +1,17 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + + diff --git a/charges/bullPassant.svg b/charges/bullPassant.svg index 8e78550f..24143bb3 100644 --- a/charges/bullPassant.svg +++ b/charges/bullPassant.svg @@ -1 +1,21 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/butterfly.svg b/charges/butterfly.svg new file mode 100644 index 00000000..e956195c --- /dev/null +++ b/charges/butterfly.svg @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/camel.svg b/charges/camel.svg index 12ca27ec..e2dd8bb9 100644 --- a/charges/camel.svg +++ b/charges/camel.svg @@ -1,16 +1,16 @@ - - + + - - + + - - - - + + + + diff --git a/charges/cancer.svg b/charges/cancer.svg index 0287d16c..a8bf102c 100644 --- a/charges/cancer.svg +++ b/charges/cancer.svg @@ -1 +1,20 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + diff --git a/charges/cannon.svg b/charges/cannon.svg index 08b90b6b..a110c596 100644 --- a/charges/cannon.svg +++ b/charges/cannon.svg @@ -1 +1,68 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/caravel.svg b/charges/caravel.svg new file mode 100644 index 00000000..39f8fd86 --- /dev/null +++ b/charges/caravel.svg @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/carreau.svg b/charges/carreau.svg index cbc379bb..bfeeb049 100644 --- a/charges/carreau.svg +++ b/charges/carreau.svg @@ -1 +1,6 @@ - \ No newline at end of file + + + + + + diff --git a/charges/castle.svg b/charges/castle.svg index 91106986..43a2fa38 100644 --- a/charges/castle.svg +++ b/charges/castle.svg @@ -1 +1,24 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/catPassantGuardant.svg b/charges/catPassantGuardant.svg new file mode 100644 index 00000000..5a556e4e --- /dev/null +++ b/charges/catPassantGuardant.svg @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/cavalier.svg b/charges/cavalier.svg index 89d441d0..8e9d9b43 100644 --- a/charges/cavalier.svg +++ b/charges/cavalier.svg @@ -1 +1,8 @@ - \ No newline at end of file + + + + + + + + diff --git a/charges/chalice.svg b/charges/chalice.svg index f4d96917..2a8f7845 100644 --- a/charges/chalice.svg +++ b/charges/chalice.svg @@ -1 +1,13 @@ - \ No newline at end of file + + + + + + + + + + + + + diff --git a/charges/cinquefoil.svg b/charges/cinquefoil.svg index e3914397..3e957d99 100644 --- a/charges/cinquefoil.svg +++ b/charges/cinquefoil.svg @@ -1 +1,15 @@ - \ No newline at end of file + + + + + + + + + + + + + + + diff --git a/charges/cock.svg b/charges/cock.svg index 995d06f5..4b100034 100644 --- a/charges/cock.svg +++ b/charges/cock.svg @@ -1 +1,34 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/column.svg b/charges/column.svg new file mode 100644 index 00000000..80067505 --- /dev/null +++ b/charges/column.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/charges/compassRose.svg b/charges/compassRose.svg index eada7308..dec495cc 100644 --- a/charges/compassRose.svg +++ b/charges/compassRose.svg @@ -1 +1,7 @@ - \ No newline at end of file + + + + + + + diff --git a/charges/cowHorns.svg b/charges/cowHorns.svg index e482a9a2..74378210 100644 --- a/charges/cowHorns.svg +++ b/charges/cowHorns.svg @@ -1 +1,10 @@ - \ No newline at end of file + + + + + + + + + + diff --git a/charges/cowStatant.svg b/charges/cowStatant.svg new file mode 100644 index 00000000..f28e58e0 --- /dev/null +++ b/charges/cowStatant.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/crescent.svg b/charges/crescent.svg index c3d85186..9181995b 100644 --- a/charges/crescent.svg +++ b/charges/crescent.svg @@ -1 +1,7 @@ - \ No newline at end of file + + + + + + + diff --git a/charges/crocodile.svg b/charges/crocodile.svg new file mode 100644 index 00000000..b44032f7 --- /dev/null +++ b/charges/crocodile.svg @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/crosier.svg b/charges/crosier.svg index 631ef998..5eb26576 100644 --- a/charges/crosier.svg +++ b/charges/crosier.svg @@ -1 +1,16 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + diff --git a/charges/crossAnkh.svg b/charges/crossAnkh.svg index 1f5693c5..6bbac70e 100644 --- a/charges/crossAnkh.svg +++ b/charges/crossAnkh.svg @@ -1 +1,6 @@ - \ No newline at end of file + + + + + + diff --git a/charges/crossArrowed.svg b/charges/crossArrowed.svg index c78608aa..ff4b6c02 100644 --- a/charges/crossArrowed.svg +++ b/charges/crossArrowed.svg @@ -1 +1,6 @@ - \ No newline at end of file + + + + + + \ No newline at end of file diff --git a/charges/crossAvellane.svg b/charges/crossAvellane.svg index f2625d07..303e7f72 100644 --- a/charges/crossAvellane.svg +++ b/charges/crossAvellane.svg @@ -1 +1,6 @@ - \ No newline at end of file + + + + + + \ No newline at end of file diff --git a/charges/crossBiparted.svg b/charges/crossBiparted.svg index 8cd951a9..0e6ac5f8 100644 --- a/charges/crossBiparted.svg +++ b/charges/crossBiparted.svg @@ -1 +1,6 @@ - \ No newline at end of file + + + + + + diff --git a/charges/crossBottony.svg b/charges/crossBottony.svg index 1f739c6b..2d246b29 100644 --- a/charges/crossBottony.svg +++ b/charges/crossBottony.svg @@ -1 +1,6 @@ - \ No newline at end of file + + + + + + diff --git a/charges/crossBurgundy.svg b/charges/crossBurgundy.svg index e253555f..cb681714 100644 --- a/charges/crossBurgundy.svg +++ b/charges/crossBurgundy.svg @@ -1 +1,6 @@ - \ No newline at end of file + + + + + + diff --git a/charges/crossCalvary.svg b/charges/crossCalvary.svg index dd0447b5..493579f9 100644 --- a/charges/crossCalvary.svg +++ b/charges/crossCalvary.svg @@ -1 +1,6 @@ - \ No newline at end of file + + + + + + diff --git a/charges/crossCarolingian.svg b/charges/crossCarolingian.svg index 3390b7e4..761464a7 100644 --- a/charges/crossCarolingian.svg +++ b/charges/crossCarolingian.svg @@ -1 +1,38 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/crossCeltic.svg b/charges/crossCeltic.svg index 5de3f305..6abe10fe 100644 --- a/charges/crossCeltic.svg +++ b/charges/crossCeltic.svg @@ -1 +1,6 @@ - \ No newline at end of file + + + + + + diff --git a/charges/crossCeltic2.svg b/charges/crossCeltic2.svg index 2b6ab9f6..84628911 100644 --- a/charges/crossCeltic2.svg +++ b/charges/crossCeltic2.svg @@ -1 +1,6 @@ - \ No newline at end of file + + + + + + diff --git a/charges/crossCercelee.svg b/charges/crossCercelee.svg index f037ea98..2b8bff16 100644 --- a/charges/crossCercelee.svg +++ b/charges/crossCercelee.svg @@ -1 +1,6 @@ - \ No newline at end of file + + + + + + diff --git a/charges/crossClechy.svg b/charges/crossClechy.svg index a0028fad..c246534e 100644 --- a/charges/crossClechy.svg +++ b/charges/crossClechy.svg @@ -1 +1,6 @@ - \ No newline at end of file + + + + + + diff --git a/charges/crossDouble.svg b/charges/crossDouble.svg index 1a0e4bc8..2176c0e3 100644 --- a/charges/crossDouble.svg +++ b/charges/crossDouble.svg @@ -1 +1,6 @@ - \ No newline at end of file + + + + + + diff --git a/charges/crossErminee.svg b/charges/crossErminee.svg index 2e03019d..1def3830 100644 --- a/charges/crossErminee.svg +++ b/charges/crossErminee.svg @@ -1 +1,6 @@ - \ No newline at end of file + + + + + + diff --git a/charges/crossFitchy.svg b/charges/crossFitchy.svg index 4730bc89..954b8e70 100644 --- a/charges/crossFitchy.svg +++ b/charges/crossFitchy.svg @@ -1 +1,6 @@ - \ No newline at end of file + + + + + + diff --git a/charges/crossFleury.svg b/charges/crossFleury.svg index 80ed83e2..d617a15d 100644 --- a/charges/crossFleury.svg +++ b/charges/crossFleury.svg @@ -1 +1,6 @@ - \ No newline at end of file + + + + + + diff --git a/charges/crossFormee.svg b/charges/crossFormee.svg index d66de827..efef99d4 100644 --- a/charges/crossFormee.svg +++ b/charges/crossFormee.svg @@ -1 +1,6 @@ - \ No newline at end of file + + + + + + diff --git a/charges/crossFormee2.svg b/charges/crossFormee2.svg index 66ef6602..2309e494 100644 --- a/charges/crossFormee2.svg +++ b/charges/crossFormee2.svg @@ -1 +1,6 @@ - \ No newline at end of file + + + + + + diff --git a/charges/crossGamma.svg b/charges/crossGamma.svg index 377976f9..d2da6490 100644 --- a/charges/crossGamma.svg +++ b/charges/crossGamma.svg @@ -1 +1,6 @@ - \ No newline at end of file + + + + + + diff --git a/charges/crossHummetty.svg b/charges/crossHummetty.svg index e530d384..e2676ab2 100644 --- a/charges/crossHummetty.svg +++ b/charges/crossHummetty.svg @@ -1 +1,6 @@ - \ No newline at end of file + + + + + + diff --git a/charges/crossJerusalem.svg b/charges/crossJerusalem.svg index b5d5000c..54ba95dc 100644 --- a/charges/crossJerusalem.svg +++ b/charges/crossJerusalem.svg @@ -1 +1,6 @@ - \ No newline at end of file + + + + + + diff --git a/charges/crossLatin.svg b/charges/crossLatin.svg index 1f3776a3..16f60138 100644 --- a/charges/crossLatin.svg +++ b/charges/crossLatin.svg @@ -1 +1,6 @@ - \ No newline at end of file + + + + + + diff --git a/charges/crossMaltese.svg b/charges/crossMaltese.svg index e0eb8dd7..5718dacf 100644 --- a/charges/crossMaltese.svg +++ b/charges/crossMaltese.svg @@ -1 +1,6 @@ - \ No newline at end of file + + + + + + diff --git a/charges/crossMoline.svg b/charges/crossMoline.svg index 4784ef8d..97f3b918 100644 --- a/charges/crossMoline.svg +++ b/charges/crossMoline.svg @@ -1 +1,6 @@ - \ No newline at end of file + + + + + + diff --git a/charges/crossOccitan.svg b/charges/crossOccitan.svg index 83b5fabb..15fe7587 100644 --- a/charges/crossOccitan.svg +++ b/charges/crossOccitan.svg @@ -1 +1,6 @@ - \ No newline at end of file + + + + + + diff --git a/charges/crossOrthodox.svg b/charges/crossOrthodox.svg index 122df4ca..9519f84d 100644 --- a/charges/crossOrthodox.svg +++ b/charges/crossOrthodox.svg @@ -1 +1,6 @@ - \ No newline at end of file + + + + + + diff --git a/charges/crossPattee.svg b/charges/crossPattee.svg index 8c3d3c0c..1c3bf761 100644 --- a/charges/crossPattee.svg +++ b/charges/crossPattee.svg @@ -1 +1,6 @@ - \ No newline at end of file + + + + + + diff --git a/charges/crossPatteeAlisee.svg b/charges/crossPatteeAlisee.svg index 5625cdb4..801e7113 100644 --- a/charges/crossPatteeAlisee.svg +++ b/charges/crossPatteeAlisee.svg @@ -1 +1,6 @@ - \ No newline at end of file + + + + + + diff --git a/charges/crossPommy.svg b/charges/crossPommy.svg index 9bc765fe..da002347 100644 --- a/charges/crossPommy.svg +++ b/charges/crossPommy.svg @@ -1 +1,6 @@ - \ No newline at end of file + + + + + + diff --git a/charges/crossPotent.svg b/charges/crossPotent.svg index 330e830f..cc3bb92f 100644 --- a/charges/crossPotent.svg +++ b/charges/crossPotent.svg @@ -1 +1,6 @@ - \ No newline at end of file + + + + + + diff --git a/charges/crossSantiago.svg b/charges/crossSantiago.svg index 7e510a90..d6b30109 100644 --- a/charges/crossSantiago.svg +++ b/charges/crossSantiago.svg @@ -1 +1,6 @@ - \ No newline at end of file + + + + + + diff --git a/charges/crossTemplar.svg b/charges/crossTemplar.svg index 855989b4..9c33613c 100644 --- a/charges/crossTemplar.svg +++ b/charges/crossTemplar.svg @@ -1 +1,6 @@ - \ No newline at end of file + + + + + + diff --git a/charges/crossTriquetra.svg b/charges/crossTriquetra.svg index 1f2b4ce9..024225c1 100644 --- a/charges/crossTriquetra.svg +++ b/charges/crossTriquetra.svg @@ -1 +1,9 @@ - \ No newline at end of file + + + + + + + + + diff --git a/charges/crossVoided.svg b/charges/crossVoided.svg index 02f98d27..0fa95bd7 100644 --- a/charges/crossVoided.svg +++ b/charges/crossVoided.svg @@ -1 +1,6 @@ - \ No newline at end of file + + + + + + diff --git a/charges/crosslet.svg b/charges/crosslet.svg index 645b68a3..3dc8b517 100644 --- a/charges/crosslet.svg +++ b/charges/crosslet.svg @@ -1 +1,6 @@ - \ No newline at end of file + + + + + + diff --git a/charges/crown.svg b/charges/crown.svg index 5501bf57..00dbbacf 100644 --- a/charges/crown.svg +++ b/charges/crown.svg @@ -1 +1,14 @@ - \ No newline at end of file + + + + + + + + + + + + + + diff --git a/charges/crown2.svg b/charges/crown2.svg index ce3a5a2b..4be76b88 100644 --- a/charges/crown2.svg +++ b/charges/crown2.svg @@ -1 +1,73 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/deerHeadCaboshed.svg b/charges/deerHeadCaboshed.svg index 7a83f136..aca87f99 100644 --- a/charges/deerHeadCaboshed.svg +++ b/charges/deerHeadCaboshed.svg @@ -1 +1,25 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/delf.svg b/charges/delf.svg index b05eab68..227bd04f 100644 --- a/charges/delf.svg +++ b/charges/delf.svg @@ -1 +1,6 @@ - \ No newline at end of file + + + + + + diff --git a/charges/dolphin.svg b/charges/dolphin.svg index 4632a120..fdc49f07 100644 --- a/charges/dolphin.svg +++ b/charges/dolphin.svg @@ -1,14 +1,14 @@ - - - - - - + + + + + + - + diff --git a/charges/donkeyHeadCaboshed.svg b/charges/donkeyHeadCaboshed.svg new file mode 100644 index 00000000..c9533d82 --- /dev/null +++ b/charges/donkeyHeadCaboshed.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/dove.svg b/charges/dove.svg new file mode 100644 index 00000000..860ff7f5 --- /dev/null +++ b/charges/dove.svg @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/doveDisplayed.svg b/charges/doveDisplayed.svg new file mode 100644 index 00000000..d3a24ea1 --- /dev/null +++ b/charges/doveDisplayed.svg @@ -0,0 +1,112 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/dragonPassant.svg b/charges/dragonPassant.svg index 5d177cbe..b8fbc58e 100644 --- a/charges/dragonPassant.svg +++ b/charges/dragonPassant.svg @@ -1,30 +1,38 @@ - + - - + + + + - - - + + + + + - - + + + + + - - + + + - + diff --git a/charges/dragonRampant.svg b/charges/dragonRampant.svg index d1b14d0a..016d4711 100644 --- a/charges/dragonRampant.svg +++ b/charges/dragonRampant.svg @@ -1,35 +1,42 @@ - - - - - + + + + + + + - - - - - - + + + + + + + + - + + + - - - - + + + + + - - + + diff --git a/charges/drum.svg b/charges/drum.svg new file mode 100644 index 00000000..d80386d4 --- /dev/null +++ b/charges/drum.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/charges/duck.svg b/charges/duck.svg new file mode 100644 index 00000000..440b93fd --- /dev/null +++ b/charges/duck.svg @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/eagle.svg b/charges/eagle.svg index d8c478ca..c52fd495 100644 --- a/charges/eagle.svg +++ b/charges/eagle.svg @@ -1 +1,91 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/eagleTwoHeads.svg b/charges/eagleTwoHeads.svg new file mode 100644 index 00000000..d556d380 --- /dev/null +++ b/charges/eagleTwoHeads.svg @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/eagleTwoHeards.svg b/charges/eagleTwoHeards.svg deleted file mode 100644 index 8492a718..00000000 --- a/charges/eagleTwoHeards.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/charges/elephant.svg b/charges/elephant.svg index 6f580587..fed4c13f 100644 --- a/charges/elephant.svg +++ b/charges/elephant.svg @@ -1 +1,17 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + + diff --git a/charges/elephantHeadErased.svg b/charges/elephantHeadErased.svg new file mode 100644 index 00000000..cb7acccc --- /dev/null +++ b/charges/elephantHeadErased.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/escallop.svg b/charges/escallop.svg index 2b2da7ab..d5803037 100644 --- a/charges/escallop.svg +++ b/charges/escallop.svg @@ -1 +1,19 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + + + + diff --git a/charges/estoile.svg b/charges/estoile.svg index dbcd4e81..6966ccbc 100644 --- a/charges/estoile.svg +++ b/charges/estoile.svg @@ -1 +1,20 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + diff --git a/charges/falchion.svg b/charges/falchion.svg index 6bb3b0ec..dc28b164 100644 --- a/charges/falchion.svg +++ b/charges/falchion.svg @@ -1,10 +1,10 @@ - + - \ No newline at end of file + diff --git a/charges/falcon.svg b/charges/falcon.svg new file mode 100644 index 00000000..66d15b9d --- /dev/null +++ b/charges/falcon.svg @@ -0,0 +1,223 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/fasces.svg b/charges/fasces.svg index ed22053b..71e27285 100644 --- a/charges/fasces.svg +++ b/charges/fasces.svg @@ -1 +1,34 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/fleurDeLis.svg b/charges/fleurDeLis.svg index b26c1c21..2583e48f 100644 --- a/charges/fleurDeLis.svg +++ b/charges/fleurDeLis.svg @@ -1 +1,10 @@ - \ No newline at end of file + + + + + + + + + + diff --git a/charges/fly.svg b/charges/fly.svg new file mode 100644 index 00000000..08c07a8c --- /dev/null +++ b/charges/fly.svg @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/foot.svg b/charges/foot.svg index c9988d9b..dc354c02 100644 --- a/charges/foot.svg +++ b/charges/foot.svg @@ -1,14 +1,14 @@ - - - - - - - - - - - \ No newline at end of file + + + + + + + + + + + diff --git a/charges/fountain.svg b/charges/fountain.svg index 38ae6e71..1ed8ac67 100644 --- a/charges/fountain.svg +++ b/charges/fountain.svg @@ -1 +1,11 @@ - \ No newline at end of file + + + + + + + + + + + diff --git a/charges/frog.svg b/charges/frog.svg new file mode 100644 index 00000000..6f6f2c1f --- /dev/null +++ b/charges/frog.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/fusil.svg b/charges/fusil.svg index 797caeef..eac10ed4 100644 --- a/charges/fusil.svg +++ b/charges/fusil.svg @@ -1 +1,6 @@ - \ No newline at end of file + + + + + + diff --git a/charges/garb.svg b/charges/garb.svg index 002fa1d0..3bd53140 100644 --- a/charges/garb.svg +++ b/charges/garb.svg @@ -139,8 +139,8 @@ - - + + diff --git a/charges/gauntlet.svg b/charges/gauntlet.svg new file mode 100644 index 00000000..5bbd9e55 --- /dev/null +++ b/charges/gauntlet.svg @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/goat.svg b/charges/goat.svg index a3249e72..721c3f15 100644 --- a/charges/goat.svg +++ b/charges/goat.svg @@ -1 +1,21 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/goutte.svg b/charges/goutte.svg index a6e15386..40f23183 100644 --- a/charges/goutte.svg +++ b/charges/goutte.svg @@ -1 +1,6 @@ - \ No newline at end of file + + + + + + diff --git a/charges/grapeBunch.svg b/charges/grapeBunch.svg new file mode 100644 index 00000000..d25c92b8 --- /dev/null +++ b/charges/grapeBunch.svg @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/greyhoundCourant.svg b/charges/greyhoundCourant.svg index 7d4cc410..75f0476f 100644 --- a/charges/greyhoundCourant.svg +++ b/charges/greyhoundCourant.svg @@ -1 +1,31 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/greyhoundRampant.svg b/charges/greyhoundRampant.svg new file mode 100644 index 00000000..73ae1448 --- /dev/null +++ b/charges/greyhoundRampant.svg @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/greyhoundSejant.svg b/charges/greyhoundSejant.svg index 4a1c1667..09efa81c 100644 --- a/charges/greyhoundSejant.svg +++ b/charges/greyhoundSejant.svg @@ -1 +1,108 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/griffinPassant.svg b/charges/griffinPassant.svg index c978d591..4ff9c011 100644 --- a/charges/griffinPassant.svg +++ b/charges/griffinPassant.svg @@ -1 +1,59 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/griffinRampant.svg b/charges/griffinRampant.svg index bf9eb24a..c17552c3 100644 --- a/charges/griffinRampant.svg +++ b/charges/griffinRampant.svg @@ -1 +1,115 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/hand.svg b/charges/hand.svg index 42195678..4da98b9a 100644 --- a/charges/hand.svg +++ b/charges/hand.svg @@ -1 +1,14 @@ - \ No newline at end of file + + + + + + + + + + + + + + diff --git a/charges/harp.svg b/charges/harp.svg index b2c19a36..6047a0b5 100644 --- a/charges/harp.svg +++ b/charges/harp.svg @@ -1 +1,30 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/hatchet.svg b/charges/hatchet.svg index bd479e2e..37052556 100644 --- a/charges/hatchet.svg +++ b/charges/hatchet.svg @@ -1 +1,8 @@ - \ No newline at end of file + + + + + + + + diff --git a/charges/head.svg b/charges/head.svg index fa458631..a7f6198d 100644 --- a/charges/head.svg +++ b/charges/head.svg @@ -2,10 +2,10 @@ - + - + diff --git a/charges/headWreathed.svg b/charges/headWreathed.svg index 85b38ddf..b6dafc64 100644 --- a/charges/headWreathed.svg +++ b/charges/headWreathed.svg @@ -1 +1,28 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/heart.svg b/charges/heart.svg index 57b9cd99..56d0940c 100644 --- a/charges/heart.svg +++ b/charges/heart.svg @@ -1 +1,6 @@ - \ No newline at end of file + + + + + + diff --git a/charges/hedgehog.svg b/charges/hedgehog.svg new file mode 100644 index 00000000..d591cc02 --- /dev/null +++ b/charges/hedgehog.svg @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/helmet.svg b/charges/helmet.svg index 86e9a77b..9099c7c3 100644 --- a/charges/helmet.svg +++ b/charges/helmet.svg @@ -1 +1,14 @@ - \ No newline at end of file + + + + + + + + + + + + + + diff --git a/charges/heron.svg b/charges/heron.svg index 017d962e..86d121b0 100644 --- a/charges/heron.svg +++ b/charges/heron.svg @@ -1 +1,28 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/hindStatant.svg b/charges/hindStatant.svg new file mode 100644 index 00000000..0c2aae31 --- /dev/null +++ b/charges/hindStatant.svg @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/horseHeadCouped.svg b/charges/horseHeadCouped.svg new file mode 100644 index 00000000..712a273d --- /dev/null +++ b/charges/horseHeadCouped.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/horsePassant.svg b/charges/horsePassant.svg index f235ce7e..f4d2de5b 100644 --- a/charges/horsePassant.svg +++ b/charges/horsePassant.svg @@ -1,119 +1,119 @@ - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/horseRampant.svg b/charges/horseRampant.svg index 54845fe6..d2f2544a 100644 --- a/charges/horseRampant.svg +++ b/charges/horseRampant.svg @@ -1 +1,26 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/horseSalient.svg b/charges/horseSalient.svg index 16728061..65bd744f 100644 --- a/charges/horseSalient.svg +++ b/charges/horseSalient.svg @@ -1 +1,24 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/ladder.svg b/charges/ladder.svg new file mode 100644 index 00000000..b15d2f4a --- /dev/null +++ b/charges/ladder.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/charges/lamb.svg b/charges/lamb.svg index e3459362..8d4e161a 100644 --- a/charges/lamb.svg +++ b/charges/lamb.svg @@ -1 +1,18 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + + + diff --git a/charges/lambPassantReguardant.svg b/charges/lambPassantReguardant.svg index 4d90b210..b348c41d 100644 --- a/charges/lambPassantReguardant.svg +++ b/charges/lambPassantReguardant.svg @@ -1,11 +1,11 @@ - + - + - - - + + + @@ -116,4 +116,4 @@ - \ No newline at end of file + diff --git a/charges/laurelWreath.svg b/charges/laurelWreath.svg new file mode 100644 index 00000000..74162f57 --- /dev/null +++ b/charges/laurelWreath.svg @@ -0,0 +1,263 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/lionHeadCaboshed.svg b/charges/lionHeadCaboshed.svg index b7065322..63022fc0 100644 --- a/charges/lionHeadCaboshed.svg +++ b/charges/lionHeadCaboshed.svg @@ -1 +1,107 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/lionHeadErased.svg b/charges/lionHeadErased.svg new file mode 100644 index 00000000..e8221630 --- /dev/null +++ b/charges/lionHeadErased.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/lionPassant.svg b/charges/lionPassant.svg index 721b3bfe..10dcb448 100644 --- a/charges/lionPassant.svg +++ b/charges/lionPassant.svg @@ -1 +1,183 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/lionPassantGuardant.svg b/charges/lionPassantGuardant.svg index 1652a5ac..9aa594fa 100644 --- a/charges/lionPassantGuardant.svg +++ b/charges/lionPassantGuardant.svg @@ -1 +1,243 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/lionRampant.svg b/charges/lionRampant.svg index 1160bf62..d5f6bdad 100644 --- a/charges/lionRampant.svg +++ b/charges/lionRampant.svg @@ -4,7 +4,9 @@ - + + + diff --git a/charges/lionSejant.svg b/charges/lionSejant.svg new file mode 100644 index 00000000..6fe1efae --- /dev/null +++ b/charges/lionSejant.svg @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/lizard.svg b/charges/lizard.svg new file mode 100644 index 00000000..306e99e9 --- /dev/null +++ b/charges/lizard.svg @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/lochaberAxe.svg b/charges/lochaberAxe.svg index bcf31775..cf09c61e 100644 --- a/charges/lochaberAxe.svg +++ b/charges/lochaberAxe.svg @@ -1 +1,9 @@ - \ No newline at end of file + + + + + + + + + diff --git a/charges/log.svg b/charges/log.svg index 0136afc0..387fad44 100644 --- a/charges/log.svg +++ b/charges/log.svg @@ -1 +1,8 @@ - \ No newline at end of file + + + + + + + + diff --git a/charges/lozengeFaceted.svg b/charges/lozengeFaceted.svg index 8d9cc76a..63a575e3 100644 --- a/charges/lozengeFaceted.svg +++ b/charges/lozengeFaceted.svg @@ -1 +1,11 @@ - \ No newline at end of file + + + + + + + + + + + diff --git a/charges/lute.svg b/charges/lute.svg index 1ce3d6bc..195c62cf 100644 --- a/charges/lute.svg +++ b/charges/lute.svg @@ -1 +1,15 @@ - \ No newline at end of file + + + + + + + + + + + + + + + diff --git a/charges/lymphad.svg b/charges/lymphad.svg index ca0aab51..7e547eaf 100644 --- a/charges/lymphad.svg +++ b/charges/lymphad.svg @@ -9,22 +9,22 @@ - + - - - + + + - + - + diff --git a/charges/mallet.svg b/charges/mallet.svg index 1a6655f4..381d172d 100644 --- a/charges/mallet.svg +++ b/charges/mallet.svg @@ -1 +1,8 @@ - \ No newline at end of file + + + + + + + + diff --git a/charges/mapleLeaf.svg b/charges/mapleLeaf.svg new file mode 100644 index 00000000..414a9797 --- /dev/null +++ b/charges/mapleLeaf.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/charges/martenCourant.svg b/charges/martenCourant.svg new file mode 100644 index 00000000..5efac23b --- /dev/null +++ b/charges/martenCourant.svg @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/mascle.svg b/charges/mascle.svg index bc8c3411..b867e47a 100644 --- a/charges/mascle.svg +++ b/charges/mascle.svg @@ -1 +1,6 @@ - \ No newline at end of file + + + + + + diff --git a/charges/mastiffStatant.svg b/charges/mastiffStatant.svg index 83947142..4f3d3744 100644 --- a/charges/mastiffStatant.svg +++ b/charges/mastiffStatant.svg @@ -1,157 +1,157 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/mitre.svg b/charges/mitre.svg new file mode 100644 index 00000000..bba5d163 --- /dev/null +++ b/charges/mitre.svg @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/monk.svg b/charges/monk.svg index af0cb69a..8ede0359 100644 --- a/charges/monk.svg +++ b/charges/monk.svg @@ -1 +1,139 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/moonInCrescent.svg b/charges/moonInCrescent.svg new file mode 100644 index 00000000..f0da801d --- /dev/null +++ b/charges/moonInCrescent.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/mullet.svg b/charges/mullet.svg index 556f1ebd..2658e971 100644 --- a/charges/mullet.svg +++ b/charges/mullet.svg @@ -1 +1,6 @@ - \ No newline at end of file + + + + + + diff --git a/charges/mullet4.svg b/charges/mullet4.svg index aea310ce..37242f99 100644 --- a/charges/mullet4.svg +++ b/charges/mullet4.svg @@ -1 +1,6 @@ - \ No newline at end of file + + + + + + diff --git a/charges/mullet6.svg b/charges/mullet6.svg index a712d695..1a1972aa 100644 --- a/charges/mullet6.svg +++ b/charges/mullet6.svg @@ -1 +1,6 @@ - \ No newline at end of file + + + + + + diff --git a/charges/mullet6Faceted.svg b/charges/mullet6Faceted.svg index 13364f15..1ca0c335 100644 --- a/charges/mullet6Faceted.svg +++ b/charges/mullet6Faceted.svg @@ -1 +1,7 @@ - \ No newline at end of file + + + + + + + diff --git a/charges/mullet6Pierced.svg b/charges/mullet6Pierced.svg index 955c6501..96d6f279 100644 --- a/charges/mullet6Pierced.svg +++ b/charges/mullet6Pierced.svg @@ -1 +1,6 @@ - \ No newline at end of file + + + + + + diff --git a/charges/mullet7.svg b/charges/mullet7.svg index 6b78d873..53321978 100644 --- a/charges/mullet7.svg +++ b/charges/mullet7.svg @@ -1 +1,6 @@ - \ No newline at end of file + + + + + + diff --git a/charges/mullet8.svg b/charges/mullet8.svg index 66c84ce8..0239a883 100644 --- a/charges/mullet8.svg +++ b/charges/mullet8.svg @@ -1 +1,6 @@ - \ No newline at end of file + + + + + + diff --git a/charges/mulletFaceted.svg b/charges/mulletFaceted.svg index 49836d0f..a43fe26e 100644 --- a/charges/mulletFaceted.svg +++ b/charges/mulletFaceted.svg @@ -1 +1,7 @@ - \ No newline at end of file + + + + + + + diff --git a/charges/oak.svg b/charges/oak.svg index aa208e4a..aa877960 100644 --- a/charges/oak.svg +++ b/charges/oak.svg @@ -19,7 +19,7 @@ - + @@ -157,12 +157,12 @@ - - - - - - + + + + + + @@ -200,8 +200,8 @@ - - + + @@ -224,8 +224,8 @@ - - + + @@ -248,8 +248,8 @@ - - + + @@ -272,8 +272,8 @@ - - + + @@ -296,8 +296,8 @@ - - + + @@ -320,8 +320,8 @@ - - + + diff --git a/charges/orb.svg b/charges/orb.svg index c228bcff..af898083 100644 --- a/charges/orb.svg +++ b/charges/orb.svg @@ -1 +1,25 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/owl.svg b/charges/owl.svg index 5ec6f37b..015a7f81 100644 --- a/charges/owl.svg +++ b/charges/owl.svg @@ -1 +1,139 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/owlDisplayed.svg b/charges/owlDisplayed.svg new file mode 100644 index 00000000..c49d8b27 --- /dev/null +++ b/charges/owlDisplayed.svg @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/palmTree.svg b/charges/palmTree.svg new file mode 100644 index 00000000..40264f80 --- /dev/null +++ b/charges/palmTree.svg @@ -0,0 +1,156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/parrot.svg b/charges/parrot.svg index d854d0fd..92d7dd10 100644 --- a/charges/parrot.svg +++ b/charges/parrot.svg @@ -1 +1,27 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/peacock.svg b/charges/peacock.svg new file mode 100644 index 00000000..0ae12f99 --- /dev/null +++ b/charges/peacock.svg @@ -0,0 +1,167 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/peacockInPride.svg b/charges/peacockInPride.svg new file mode 100644 index 00000000..c235a40a --- /dev/null +++ b/charges/peacockInPride.svg @@ -0,0 +1,216 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/pear.svg b/charges/pear.svg new file mode 100644 index 00000000..f1f01c0f --- /dev/null +++ b/charges/pear.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/pegasus.svg b/charges/pegasus.svg index e4382800..2583831d 100644 --- a/charges/pegasus.svg +++ b/charges/pegasus.svg @@ -1 +1,43 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/pike.svg b/charges/pike.svg index 7edd6aff..812002b7 100644 --- a/charges/pike.svg +++ b/charges/pike.svg @@ -1 +1,19 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + + + + diff --git a/charges/pineCone.svg b/charges/pineCone.svg new file mode 100644 index 00000000..2e5c4e66 --- /dev/null +++ b/charges/pineCone.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/pineTree.svg b/charges/pineTree.svg new file mode 100644 index 00000000..7d1aa006 --- /dev/null +++ b/charges/pineTree.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/charges/pique.svg b/charges/pique.svg index 4383d3ea..06c5836e 100644 --- a/charges/pique.svg +++ b/charges/pique.svg @@ -1 +1,6 @@ - \ No newline at end of file + + + + + + diff --git a/charges/plaice.svg b/charges/plaice.svg new file mode 100644 index 00000000..c1e66df1 --- /dev/null +++ b/charges/plaice.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/plough.svg b/charges/plough.svg index b1534bc5..d31e4287 100644 --- a/charges/plough.svg +++ b/charges/plough.svg @@ -1 +1,16 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + diff --git a/charges/porcupine.svg b/charges/porcupine.svg index 92d095bc..bdc53081 100644 --- a/charges/porcupine.svg +++ b/charges/porcupine.svg @@ -1 +1,137 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/pot.svg b/charges/pot.svg index db4e0eec..64cc0ff6 100644 --- a/charges/pot.svg +++ b/charges/pot.svg @@ -1 +1,10 @@ - \ No newline at end of file + + + + + + + + + + diff --git a/charges/quatrefoil.svg b/charges/quatrefoil.svg new file mode 100644 index 00000000..cc7b9a33 --- /dev/null +++ b/charges/quatrefoil.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/charges/rabbitSejant.svg b/charges/rabbitSejant.svg new file mode 100644 index 00000000..7bbc22e8 --- /dev/null +++ b/charges/rabbitSejant.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/rake.svg b/charges/rake.svg index d0a2ff2d..2b76bc51 100644 --- a/charges/rake.svg +++ b/charges/rake.svg @@ -1 +1,26 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/ramHeadErased.svg b/charges/ramHeadErased.svg new file mode 100644 index 00000000..6ece24a6 --- /dev/null +++ b/charges/ramHeadErased.svg @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/ramPassant.svg b/charges/ramPassant.svg new file mode 100644 index 00000000..6ce7da7e --- /dev/null +++ b/charges/ramPassant.svg @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/ramsHorn.svg b/charges/ramsHorn.svg index ce66c26d..26585cc9 100644 --- a/charges/ramsHorn.svg +++ b/charges/ramsHorn.svg @@ -1 +1,28 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/ratRampant.svg b/charges/ratRampant.svg new file mode 100644 index 00000000..7e1cb3d6 --- /dev/null +++ b/charges/ratRampant.svg @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/raven.svg b/charges/raven.svg index 10ae2b99..83eb8912 100644 --- a/charges/raven.svg +++ b/charges/raven.svg @@ -1 +1,24 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/rhinoceros.svg b/charges/rhinoceros.svg new file mode 100644 index 00000000..4b6304cd --- /dev/null +++ b/charges/rhinoceros.svg @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/rose.svg b/charges/rose.svg index 1b61758c..7ce11665 100644 --- a/charges/rose.svg +++ b/charges/rose.svg @@ -1 +1,12 @@ - \ No newline at end of file + + + + + + + + + + + + diff --git a/charges/roundel.svg b/charges/roundel.svg index b2d22c8d..344991ed 100644 --- a/charges/roundel.svg +++ b/charges/roundel.svg @@ -1 +1,6 @@ - \ No newline at end of file + + + + + + diff --git a/charges/roundel2.svg b/charges/roundel2.svg index fffa7ad4..79e2f6ec 100644 --- a/charges/roundel2.svg +++ b/charges/roundel2.svg @@ -1 +1,7 @@ - \ No newline at end of file + + + + + + + diff --git a/charges/rustre.svg b/charges/rustre.svg index da45eb58..60c253a1 100644 --- a/charges/rustre.svg +++ b/charges/rustre.svg @@ -1 +1,6 @@ - \ No newline at end of file + + + + + + diff --git a/charges/sabre.svg b/charges/sabre.svg index 8b339a0f..765fdb0b 100644 --- a/charges/sabre.svg +++ b/charges/sabre.svg @@ -1,7 +1,7 @@ - + @@ -17,4 +17,4 @@ - \ No newline at end of file + diff --git a/charges/sabre2.svg b/charges/sabre2.svg index e16c45fe..44f810c0 100644 --- a/charges/sabre2.svg +++ b/charges/sabre2.svg @@ -1,7 +1,7 @@ - + @@ -12,4 +12,4 @@ - \ No newline at end of file + diff --git a/charges/sabresCrossed.svg b/charges/sabresCrossed.svg index 21ddc0e7..16136577 100644 --- a/charges/sabresCrossed.svg +++ b/charges/sabresCrossed.svg @@ -2,7 +2,7 @@ - + @@ -20,7 +20,7 @@ - + @@ -37,4 +37,4 @@ - \ No newline at end of file + diff --git a/charges/sagittarius.svg b/charges/sagittarius.svg new file mode 100644 index 00000000..074a134a --- /dev/null +++ b/charges/sagittarius.svg @@ -0,0 +1,136 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/salmon.svg b/charges/salmon.svg new file mode 100644 index 00000000..a3dc8e86 --- /dev/null +++ b/charges/salmon.svg @@ -0,0 +1,127 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/sceptre.svg b/charges/sceptre.svg new file mode 100644 index 00000000..0d060330 --- /dev/null +++ b/charges/sceptre.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/scissors.svg b/charges/scissors.svg new file mode 100644 index 00000000..ebc0df99 --- /dev/null +++ b/charges/scissors.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/charges/scorpion.svg b/charges/scorpion.svg new file mode 100644 index 00000000..3155f3b9 --- /dev/null +++ b/charges/scorpion.svg @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/scythe.svg b/charges/scythe.svg new file mode 100644 index 00000000..62a52520 --- /dev/null +++ b/charges/scythe.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/charges/serpent.svg b/charges/serpent.svg index 67a7bccd..e12c9570 100644 --- a/charges/serpent.svg +++ b/charges/serpent.svg @@ -1 +1,24 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/sextifoil.svg b/charges/sextifoil.svg new file mode 100644 index 00000000..cf8b918d --- /dev/null +++ b/charges/sextifoil.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/charges/shield.svg b/charges/shield.svg new file mode 100644 index 00000000..10f6652f --- /dev/null +++ b/charges/shield.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/sickle.svg b/charges/sickle.svg new file mode 100644 index 00000000..dcf6dd44 --- /dev/null +++ b/charges/sickle.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/charges/skull.svg b/charges/skull.svg new file mode 100644 index 00000000..4ee33d1c --- /dev/null +++ b/charges/skull.svg @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/snake.svg b/charges/snake.svg index bb00fbf8..532f2c0c 100644 --- a/charges/snake.svg +++ b/charges/snake.svg @@ -1 +1,74 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/spear.svg b/charges/spear.svg new file mode 100644 index 00000000..036318d7 --- /dev/null +++ b/charges/spear.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/charges/squirrel.svg b/charges/squirrel.svg new file mode 100644 index 00000000..0db644c0 --- /dev/null +++ b/charges/squirrel.svg @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/stagPassant.svg b/charges/stagPassant.svg new file mode 100644 index 00000000..51fd94d3 --- /dev/null +++ b/charges/stagPassant.svg @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/stagsAttires.svg b/charges/stagsAttires.svg index 85792750..c8b3692b 100644 --- a/charges/stagsAttires.svg +++ b/charges/stagsAttires.svg @@ -1 +1,14 @@ - \ No newline at end of file + + + + + + + + + + + + + + diff --git a/charges/stirrup.svg b/charges/stirrup.svg new file mode 100644 index 00000000..7d77eacb --- /dev/null +++ b/charges/stirrup.svg @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/sun.svg b/charges/sun.svg index ec82b8d4..6d58a55c 100644 --- a/charges/sun.svg +++ b/charges/sun.svg @@ -1 +1,6 @@ - \ No newline at end of file + + + + + + diff --git a/charges/sunInSplendour.svg b/charges/sunInSplendour.svg index b5c64b94..4de9c571 100644 --- a/charges/sunInSplendour.svg +++ b/charges/sunInSplendour.svg @@ -1 +1,15 @@ - \ No newline at end of file + + + + + + + + + + + + + + + diff --git a/charges/sunInSplendour2.svg b/charges/sunInSplendour2.svg new file mode 100644 index 00000000..5fee6fcf --- /dev/null +++ b/charges/sunInSplendour2.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/swallow.svg b/charges/swallow.svg new file mode 100644 index 00000000..da94f53a --- /dev/null +++ b/charges/swallow.svg @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/swan.svg b/charges/swan.svg index 8c1df8c3..01893692 100644 --- a/charges/swan.svg +++ b/charges/swan.svg @@ -1 +1,27 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/swanErased.svg b/charges/swanErased.svg index 243565db..510c380a 100644 --- a/charges/swanErased.svg +++ b/charges/swanErased.svg @@ -1,8 +1,8 @@ - - + + diff --git a/charges/sword.svg b/charges/sword.svg index e9b29caa..cdf8853b 100644 --- a/charges/sword.svg +++ b/charges/sword.svg @@ -1 +1,14 @@ - \ No newline at end of file + + + + + + + + + + + + + + diff --git a/charges/talbotPassant.svg b/charges/talbotPassant.svg new file mode 100644 index 00000000..de6649b9 --- /dev/null +++ b/charges/talbotPassant.svg @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/talbotSejant.svg b/charges/talbotSejant.svg new file mode 100644 index 00000000..0cb80127 --- /dev/null +++ b/charges/talbotSejant.svg @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/template.svg b/charges/template.svg index 5594bc12..cad51295 100644 --- a/charges/template.svg +++ b/charges/template.svg @@ -1 +1,22 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/tower.svg b/charges/tower.svg index 0370f8c9..9e3f64ac 100644 --- a/charges/tower.svg +++ b/charges/tower.svg @@ -7,11 +7,11 @@ - - - - + + + + - + - \ No newline at end of file + diff --git a/charges/trefle.svg b/charges/trefle.svg index fce4a3f1..8180526b 100644 --- a/charges/trefle.svg +++ b/charges/trefle.svg @@ -1 +1,6 @@ - \ No newline at end of file + + + + + + diff --git a/charges/trefoil.svg b/charges/trefoil.svg new file mode 100644 index 00000000..83a4a036 --- /dev/null +++ b/charges/trefoil.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/charges/triangle.svg b/charges/triangle.svg index ff02c150..0a06d67c 100644 --- a/charges/triangle.svg +++ b/charges/triangle.svg @@ -1 +1,6 @@ - \ No newline at end of file + + + + + + diff --git a/charges/trianglePierced.svg b/charges/trianglePierced.svg index 55d7783f..6bbe2fc2 100644 --- a/charges/trianglePierced.svg +++ b/charges/trianglePierced.svg @@ -1 +1,6 @@ - \ No newline at end of file + + + + + + diff --git a/charges/unicornRampant.svg b/charges/unicornRampant.svg index f8c86fb5..4eef4dba 100644 --- a/charges/unicornRampant.svg +++ b/charges/unicornRampant.svg @@ -1 +1,29 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/wheatStalk.svg b/charges/wheatStalk.svg new file mode 100644 index 00000000..229783fb --- /dev/null +++ b/charges/wheatStalk.svg @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/wing.svg b/charges/wing.svg index 4f85c9c6..d38622f2 100644 --- a/charges/wing.svg +++ b/charges/wing.svg @@ -1 +1,34 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/wingSword.svg b/charges/wingSword.svg index f37cbde9..75c2f80e 100644 --- a/charges/wingSword.svg +++ b/charges/wingSword.svg @@ -1 +1,23 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/wolfHeadErased.svg b/charges/wolfHeadErased.svg index f3c8bb12..518ea83f 100644 --- a/charges/wolfHeadErased.svg +++ b/charges/wolfHeadErased.svg @@ -1 +1,20 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + diff --git a/charges/wolfPassant.svg b/charges/wolfPassant.svg index 4ec0eb77..06f8761a 100644 --- a/charges/wolfPassant.svg +++ b/charges/wolfPassant.svg @@ -1 +1,34 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/wolfRampant.svg b/charges/wolfRampant.svg index 7375d688..f5c7f57c 100644 --- a/charges/wolfRampant.svg +++ b/charges/wolfRampant.svg @@ -1 +1,30 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/wolfStatant.svg b/charges/wolfStatant.svg index 2ff7766b..297390ec 100644 --- a/charges/wolfStatant.svg +++ b/charges/wolfStatant.svg @@ -1,25 +1,25 @@ - - - - - - - - - + + + + + + + + + - - - - + + + + - + diff --git a/charges/wyvern.svg b/charges/wyvern.svg index 3c4a05a6..92c5de2b 100644 --- a/charges/wyvern.svg +++ b/charges/wyvern.svg @@ -1 +1,69 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charges/wyvernWithWingsDisplayed.svg b/charges/wyvernWithWingsDisplayed.svg index a4cf5563..d3aef9b4 100644 --- a/charges/wyvernWithWingsDisplayed.svg +++ b/charges/wyvernWithWingsDisplayed.svg @@ -1 +1,46 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/index.css b/index.css index 01b41f67..b4ec49ce 100644 --- a/index.css +++ b/index.css @@ -263,7 +263,7 @@ i.icon-lock { } #labels { - text-anchor: start; + text-anchor: middle; dominant-baseline: central; cursor: pointer; } @@ -2077,7 +2077,6 @@ div.textual span, } #notesBody > iframe { - pointer-events: none; user-select: none; } @@ -2357,6 +2356,41 @@ svg.button { opacity: 0.8; } +#markerTypeSelector { + font-size: 0.85em; +} + +#markerTypeSelectorWrapper { + position: relative; +} + +#markerTypeSelectMenu { + display: none; +} + +#markerTypeSelectMenu.visible { + display: block; + position: absolute; + height: 250px; + width: 170px; + overflow-y: scroll; + background: inherit; + bottom: 100%; + left: 0; + background: white; +} + +#markerTypeSelectMenu > button { + display: block; + width: 100%; + border: 1px solid #ddd; + margin-bottom: 1px; +} + +#markerTypeSelectMenu > button:hover { + background: #ccc; +} + @media print { div, canvas { diff --git a/index.html b/index.html index 6920ed4c..72f64979 100644 --- a/index.html +++ b/index.html @@ -30,6 +30,16 @@ /> + + + @@ -128,7 +138,7 @@ } - + @@ -365,7 +375,7 @@
Azgaar's
Fantasy Map Generator
-
+
‎ ‎

LOADING...

@@ -855,7 +865,7 @@ Image + + + + + + + Speaker voice @@ -2197,8 +2219,8 @@ open source - tool which procedurally generates fantasy maps. You may use auto-generated maps as they are, edit them or - even create a new map from scratch. Check out the + tool by Azgaar. You may use auto-generated maps as they are, edit them or even create a new map from + scratch. Check out the Quick start, Q&A, @@ -2276,6 +2298,18 @@ --> +
+

Check out our other projects:

+
+ • Armoria: a tool for creating heraldic + coats of arms +
+
+ • Deorum: a vast gallery of customizable fantasy + characters +
+
+ + +

Check out our other projects: +

    +
  • ${Armoria}: a tool for creating heraldic coats of arms
  • +
  • ${Deorum}: a vast gallery of customizable fantasy characters
  • +
+

`; $("#alert").dialog({ resizable: false, diff --git a/modules/ui/heightmap-editor.js b/modules/ui/heightmap-editor.js index bd41cefe..40bc55fb 100644 --- a/modules/ui/heightmap-editor.js +++ b/modules/ui/heightmap-editor.js @@ -28,7 +28,7 @@ function editHeightmap(options) {

Erase mode also allows you Convert an Image into a heightmap or use Template Editor.

You can keep the data, but you won't be able to change the coastline.

Try risk mode to change the coastline and keep the data. The data will be restored as much as possible, but it can cause unpredictable errors.

-

Please save the map before editing the heightmap!

+

Please save the map before editing the heightmap!

Check out ${link( "https://github.com/Azgaar/Fantasy-Map-Generator/wiki/Heightmap-customization", "wiki" @@ -192,11 +192,14 @@ function editHeightmap(options) { document .getElementById("mapLayers") .querySelectorAll("li") - .forEach(function (e) { - if (editHeightmap.layers.includes(e.id) && !layerIsOn(e.id)) e.click(); - // turn on - else if (!editHeightmap.layers.includes(e.id) && layerIsOn(e.id)) e.click(); // turn off + .forEach(e => { + const wasOn = editHeightmap.layers.includes(e.id); + if ((wasOn && !layerIsOn(e.id)) || (!wasOn && layerIsOn(e.id))) e.click(); }); + if (!layerIsOn("toggleBorders")) borders.selectAll("path").remove(); + if (!layerIsOn("toggleStates")) regions.selectAll("path").remove(); + if (!layerIsOn("toggleRivers")) rivers.selectAll("*").remove(); + getCurrentPreset(); } @@ -236,7 +239,7 @@ function editHeightmap(options) { drawRivers(); Lakes.defineGroup(); - defineBiomes(); + Biomes.define(); rankCells(); Cultures.generate(); @@ -250,7 +253,7 @@ function editHeightmap(options) { drawStates(); drawBorders(); - BurgsAndStates.drawStateLabels(); + drawStateLabels(); Rivers.specify(); Lakes.generateName(); @@ -370,10 +373,6 @@ function editHeightmap(options) { const g = pack.cells.g[i]; const isLand = pack.cells.h[i] >= 20; - // check biome - pack.cells.biome[i] = - isLand && biome[g] ? biome[g] : getBiomeId(grid.cells.prec[g], grid.cells.temp[g], pack.cells.h[i]); - // rivers data if (!erosionAllowed) { pack.cells.r[i] = r[g]; @@ -381,6 +380,12 @@ function editHeightmap(options) { pack.cells.fl[i] = fl[g]; } + // check biome + pack.cells.biome[i] = + isLand && biome[g] + ? biome[g] + : Biomes.getId(grid.cells.prec[g], grid.cells.temp[g], pack.cells.h[i], Boolean(pack.cells.r[i])); + if (!isLand) continue; pack.cells.culture[i] = culture[g]; pack.cells.pop[i] = pop[g]; @@ -437,7 +442,7 @@ function editHeightmap(options) { c.center = findCell(c.x, c.y); } - BurgsAndStates.drawStateLabels(); + drawStateLabels(); drawStates(); drawBorders(); diff --git a/modules/ui/hotkeys.js b/modules/ui/hotkeys.js index f7443469..4543d187 100644 --- a/modules/ui/hotkeys.js +++ b/modules/ui/hotkeys.js @@ -25,15 +25,15 @@ function handleKeyup(event) { if (code === "F1") showInfo(); else if (code === "F2") regeneratePrompt(); - else if (code === "F6") quickSave(); + else if (code === "F6") saveMap("storage"); else if (code === "F9") quickLoad(); else if (code === "Tab") toggleOptions(event); else if (code === "Escape") closeAllDialogs(); else if (code === "Delete") removeElementOnKey(); else if (code === "KeyO" && document.getElementById("canvas3d")) toggle3dOptions(); else if (ctrl && code === "KeyQ") toggleSaveReminder(); - else if (ctrl && code === "KeyS") dowloadMap(); - else if (ctrl && code === "KeyC") saveToDropbox(); + else if (ctrl && code === "KeyS") saveMap("machine"); + else if (ctrl && code === "KeyC") saveMap("dropbox"); else if (ctrl && code === "KeyZ" && undo?.offsetParent) undo.click(); else if (ctrl && code === "KeyY" && redo?.offsetParent) redo.click(); else if (shift && code === "KeyH") editHeightmap(); diff --git a/modules/ui/labels-editor.js b/modules/ui/labels-editor.js index 8bd04cdd..d19de7ae 100644 --- a/modules/ui/labels-editor.js +++ b/modules/ui/labels-editor.js @@ -78,7 +78,9 @@ function editLabel() { } function updateValues(textPath) { - document.getElementById("labelText").value = [...textPath.querySelectorAll("tspan")].map(tspan => tspan.textContent).join("|"); + document.getElementById("labelText").value = [...textPath.querySelectorAll("tspan")] + .map(tspan => tspan.textContent) + .join("|"); document.getElementById("labelStartOffset").value = parseFloat(textPath.getAttribute("startOffset")); document.getElementById("labelRelativeSize").value = parseFloat(textPath.getAttribute("font-size")); } @@ -298,22 +300,15 @@ function editLabel() { function changeText() { const input = document.getElementById("labelText").value; const el = elSelected.select("textPath").node(); - const example = d3.select(elSelected.node().parentNode).append("text").attr("x", 0).attr("x", 0).attr("font-size", el.getAttribute("font-size")).node(); const lines = input.split("|"); - const top = (lines.length - 1) / -2; // y offset - const inner = lines - .map((l, d) => { - example.innerHTML = l; - const left = example.getBBox().width / -2; // x offset - return `${l}`; - }) - .join(""); + if (lines.length > 1) { + const top = (lines.length - 1) / -2; // y offset + el.innerHTML = lines.map((line, index) => `${line}`).join(""); + } else el.innerHTML = `${lines}`; - el.innerHTML = inner; - example.remove(); - - if (elSelected.attr("id").slice(0, 10) === "stateLabel") tip("Use States Editor to change an actual state name, not just a label", false, "warning"); + if (elSelected.attr("id").slice(0, 10) === "stateLabel") + tip("Use States Editor to change an actual state name, not just a label", false, "warning"); } function generateRandomName() { diff --git a/modules/ui/layers.js b/modules/ui/layers.js index ed17de37..be8ea995 100644 --- a/modules/ui/layers.js +++ b/modules/ui/layers.js @@ -1517,27 +1517,15 @@ function toggleRelief(event) { function toggleTexture(event) { if (!layerIsOn("toggleTexture")) { turnButtonOn("toggleTexture"); - // append default texture image selected by default. Don't append on load to not harm performance - if (!texture.selectAll("*").size()) { - const x = +styleTextureShiftX.value; - const y = +styleTextureShiftY.value; - const image = texture - .append("image") - .attr("id", "textureImage") - .attr("x", x) - .attr("y", y) - .attr("width", graphWidth - x) - .attr("height", graphHeight - y) - .attr("preserveAspectRatio", "xMidYMid slice"); - getBase64(styleTextureInput.value, base64 => image.attr("xlink:href", base64)); - } - $("#texture").fadeIn(); - zoom.scaleBy(svg, 1.00001); // enforce browser re-draw + // href is not set directly to avoid image loading when layer is off + const textureImage = byId("textureImage"); + if (textureImage) textureImage.setAttribute("href", textureImage.getAttribute("src")); + if (event && isCtrlClick(event)) editStyle("texture"); } else { if (event && isCtrlClick(event)) return editStyle("texture"); - $("#texture").fadeOut(); turnButtonOff("toggleTexture"); + texture.select("image").attr("href", null); } } @@ -1762,9 +1750,9 @@ function drawEmblems() { TIME && console.time("drawEmblems"); const {states, provinces, burgs} = pack; - const validStates = states.filter(s => s.i && !s.removed && s.coa && s.coaSize != 0); - const validProvinces = provinces.filter(p => p.i && !p.removed && p.coa && p.coaSize != 0); - const validBurgs = burgs.filter(b => b.i && !b.removed && b.coa && b.coaSize != 0); + const validStates = states.filter(s => s.i && !s.removed && s.coa && s.coa.size !== 0); + const validProvinces = provinces.filter(p => p.i && !p.removed && p.coa && p.coa.size !== 0); + const validBurgs = burgs.filter(b => b.i && !b.removed && b.coa && b.coa.size !== 0); const getStateEmblemsSize = () => { const startSize = minmax((graphHeight + graphWidth) / 40, 10, 100); @@ -1790,26 +1778,26 @@ function drawEmblems() { const sizeBurgs = getBurgEmblemSize(); const burgCOAs = validBurgs.map(burg => { const {x, y} = burg; - const size = burg.coaSize || 1; + const size = burg.coa.size || 1; const shift = (sizeBurgs * size) / 2; - return {type: "burg", i: burg.i, x, y, size, shift}; + return {type: "burg", i: burg.i, x: burg.coa.x || x, y: burg.coa.y || y, size, shift}; }); const sizeProvinces = getProvinceEmblemsSize(); const provinceCOAs = validProvinces.map(province => { if (!province.pole) getProvincesVertices(); const [x, y] = province.pole || pack.cells.p[province.center]; - const size = province.coaSize || 1; + const size = province.coa.size || 1; const shift = (sizeProvinces * size) / 2; - return {type: "province", i: province.i, x, y, size, shift}; + return {type: "province", i: province.i, x: province.coa.x || x, y: province.coa.y || y, size, shift}; }); const sizeStates = getStateEmblemsSize(); const stateCOAs = validStates.map(state => { const [x, y] = state.pole || pack.cells.p[state.center]; - const size = state.coaSize || 1; + const size = state.coa.size || 1; const shift = (sizeStates * size) / 2; - return {type: "state", i: state.i, x, y, size, shift}; + return {type: "state", i: state.i, x: state.coa.x || x, y: state.coa.y || y, size, shift}; }); const nodes = burgCOAs.concat(provinceCOAs).concat(stateCOAs); diff --git a/modules/ui/markers-overview.js b/modules/ui/markers-overview.js index e0909278..af0cc11f 100644 --- a/modules/ui/markers-overview.js +++ b/modules/ui/markers-overview.js @@ -14,6 +14,8 @@ function overviewMarkers() { const markersGenerationConfig = document.getElementById("markersGenerationConfig"); const markersRemoveAll = document.getElementById("markersRemoveAll"); const markersExport = document.getElementById("markersExport"); + const markerTypeInput = document.getElementById("addedMarkerType"); + const markerTypeSelector = document.getElementById("markerTypeSelector"); addLines(); @@ -33,9 +35,26 @@ function overviewMarkers() { listen(markersAddFromOverview, "click", toggleAddMarker), listen(markersGenerationConfig, "click", configMarkersGeneration), listen(markersRemoveAll, "click", triggerRemoveAll), - listen(markersExport, "click", exportMarkers) + listen(markersExport, "click", exportMarkers), + listen(markerTypeSelector, "click", toggleMarkerTypeMenu) ]; + const types = [{type: "empty", icon: "❓"}, ...Markers.getConfig()]; + types.forEach(({icon, type}) => { + const option = document.createElement("button"); + option.textContent = `${icon} ${type}`; + markerTypeSelectMenu.appendChild(option); + + listeners.push( + listen(option, "click", () => { + markerTypeSelector.textContent = icon; + markerTypeInput.value = type; + changeMarkerType(); + toggleMarkerTypeMenu(); + }) + ); + }); + function handleLineClick(ev) { const el = ev.target; const i = +el.parentNode.dataset.i; @@ -139,11 +158,21 @@ function overviewMarkers() { }); } + function toggleMarkerTypeMenu() { + document.getElementById("markerTypeSelectMenu").classList.toggle("visible"); + } + function toggleAddMarker() { markersAddFromOverview.classList.toggle("pressed"); addMarker.click(); } + function changeMarkerType() { + if (!markersAddFromOverview.classList.contains("pressed")) { + toggleAddMarker(); + } + } + function removeMarker(i) { notes = notes.filter(note => note.id !== `marker${i}`); pack.markers = pack.markers.filter(marker => marker.i !== i); diff --git a/modules/ui/options.js b/modules/ui/options.js index 960e3090..dde2e176 100644 --- a/modules/ui/options.js +++ b/modules/ui/options.js @@ -76,7 +76,7 @@ document // show popup with a list of Patreon supportes (updated manually) async function showSupporters() { - const {supporters} = await import("../dynamic/supporters.js?v=1.89.15"); + const {supporters} = await import("../dynamic/supporters.js?v=1.93.03"); const list = supporters.split("\n").sort(); const columns = window.innerWidth < 800 ? 2 : 5; @@ -381,7 +381,7 @@ function changeEmblemShape(emblemShape) { }; pack.states.forEach(state => { - if (!state.i || state.removed || !state.coa || state.coa === "custom") return; + if (!state.i || state.removed || !state.coa || state.coa.custom) return; const newShield = specificShape || COA.getShield(state.culture, null); if (newShield === state.coa.shield) return; state.coa.shield = newShield; @@ -389,7 +389,7 @@ function changeEmblemShape(emblemShape) { }); pack.provinces.forEach(province => { - if (!province.i || province.removed || !province.coa || province.coa === "custom") return; + if (!province.i || province.removed || !province.coa || province.coa.custom) return; const culture = pack.cells.culture[province.center]; const newShield = specificShape || COA.getShield(culture, province.state); if (newShield === province.coa.shield) return; @@ -398,7 +398,7 @@ function changeEmblemShape(emblemShape) { }); pack.burgs.forEach(burg => { - if (!burg.i || burg.removed || !burg.coa || burg.coa === "custom") return; + if (!burg.i || burg.removed || !burg.coa || burg.coa.custom) return; const newShield = specificShape || COA.getShield(burg.culture, burg.state); if (newShield === burg.coa.shield) return; burg.coa.shield = newShield; @@ -559,11 +559,10 @@ function applyStoredOptions() { if (key.slice(0, 5) === "style") applyOption(stylePreset, key, key.slice(5)); } - if (stored("winds")) - options.winds = localStorage - .getItem("winds") - .split(",") - .map(w => +w); + if (stored("winds")) options.winds = localStorage.getItem("winds").split(",").map(Number); + if (stored("temperatureEquator")) options.temperatureEquator = +localStorage.getItem("temperatureEquator"); + if (stored("temperatureNorthPole")) options.temperatureNorthPole = +localStorage.getItem("temperatureNorthPole"); + if (stored("temperatureSouthPole")) options.temperatureSouthPole = +localStorage.getItem("temperatureSouthPole"); if (stored("military")) options.military = JSON.parse(stored("military")); if (stored("tooltipSize")) changeTooltipSize(stored("tooltipSize")); @@ -607,13 +606,10 @@ function randomizeOptions() { if (randomize || !locked("culturesSet")) randomizeCultureSet(); // 'Configure World' settings + if (randomize || !locked("temperatureEquator")) options.temperatureEquator = gauss(25, 7, 20, 35, 0); + if (randomize || !locked("temperatureNorthPole")) options.temperatureNorthPole = gauss(-25, 7, -40, 10, 0); + if (randomize || !locked("temperatureSouthPole")) options.temperatureSouthPole = gauss(-15, 7, -40, 10, 0); if (randomize || !locked("prec")) precInput.value = precOutput.value = gauss(100, 40, 5, 500); - const tMax = 30, - tMin = -30; // temperature extremes - if (randomize || !locked("temperatureEquator")) - temperatureEquatorOutput.value = temperatureEquatorInput.value = rand(tMax - 10, tMax); - if (randomize || !locked("temperaturePole")) - temperaturePoleOutput.value = temperaturePoleInput.value = rand(tMin, tMin + 30); // 'Units Editor' settings const US = navigator.language === "en-US"; @@ -789,7 +785,7 @@ function showExportPane() { } async function exportToJson(type) { - const {exportToJson} = await import("../dynamic/export-json.js"); + const {exportToJson} = await import("../dynamic/export-json.js?v=1.93.03"); exportToJson(type); } @@ -797,7 +793,7 @@ async function showLoadPane() { $("#loadMapData").dialog({ title: "Load map", resizable: false, - width: "24em", + width: "auto", position: {my: "center", at: "center", of: "svg"}, buttons: { Close: function () { @@ -848,7 +844,7 @@ async function connectToDropbox() { function loadURL() { const pattern = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/; - const inner = `Provide URL to a .map file: + const inner = `Provide URL to map file:
Please note server should allow CORS for file to be loaded. If CORS is not allowed, save file to Dropbox and provide a direct link`; alertMessage.innerHTML = inner; @@ -1060,6 +1056,7 @@ function toggle3dOptions() { document.getElementById("options3dSunX").addEventListener("change", changeSunPosition); document.getElementById("options3dSunY").addEventListener("change", changeSunPosition); document.getElementById("options3dSunZ").addEventListener("change", changeSunPosition); + document.getElementById("options3dMeshSkinResolution").addEventListener("change", changeResolutionScale); document.getElementById("options3dMeshRotationRange").addEventListener("input", changeRotation); document.getElementById("options3dMeshRotationNumber").addEventListener("change", changeRotation); document.getElementById("options3dGlobeRotationRange").addEventListener("input", changeRotation); @@ -1069,6 +1066,9 @@ function toggle3dOptions() { document.getElementById("options3dMeshSky").addEventListener("input", changeColors); document.getElementById("options3dMeshWater").addEventListener("input", changeColors); document.getElementById("options3dGlobeResolution").addEventListener("change", changeResolution); + // document.getElementById("options3dMeshWireframeMode").addEventListener("change",toggleWireframe3d); + document.getElementById("options3dSunColor").addEventListener("input", changeSunColor); + document.getElementById("options3dSubdivide").addEventListener("change", toggle3dSubdivision); function updateValues() { const globe = document.getElementById("canvas3d").dataset.type === "viewGlobe"; @@ -1081,6 +1081,7 @@ function toggle3dOptions() { options3dSunY.value = ThreeD.options.sun.y; options3dSunZ.value = ThreeD.options.sun.z; options3dMeshRotationRange.value = options3dMeshRotationNumber.value = ThreeD.options.rotateMesh; + options3dMeshSkinResolution.value = ThreeD.options.resolutionScale; options3dGlobeRotationRange.value = options3dGlobeRotationNumber.value = ThreeD.options.rotateGlobe; options3dMeshLabels3d.value = ThreeD.options.labels3d; options3dMeshSkyMode.value = ThreeD.options.extendedWater; @@ -1088,6 +1089,8 @@ function toggle3dOptions() { options3dMeshSky.value = ThreeD.options.skyColor; options3dMeshWater.value = ThreeD.options.waterColor; options3dGlobeResolution.value = ThreeD.options.resolution; + options3dSunColor.value = ThreeD.options.sunColor; + options3dSubdivide.value = ThreeD.options.subdivide; } function changeHeightScale() { @@ -1095,11 +1098,20 @@ function toggle3dOptions() { ThreeD.setScale(+this.value); } + function changeResolutionScale() { + options3dMeshSkinResolution.value = this.value; + ThreeD.setResolutionScale(+this.value); + } + function changeLightness() { options3dLightnessRange.value = options3dLightnessNumber.value = this.value; ThreeD.setLightness(this.value / 100); } + function changeSunColor() { + ThreeD.setSunColor(options3dSunColor.value); + } + function changeSunPosition() { const x = +options3dSunX.value; const y = +options3dSunY.value; @@ -1117,6 +1129,14 @@ function toggle3dOptions() { ThreeD.toggleLabels(); } + function toggle3dSubdivision() { + ThreeD.toggle3dSubdivision(); + } + + // function toggleWireframe3d() { + // ThreeD.toggleWireframe(); + // } + function toggleSkyMode() { const hide = ThreeD.options.extendedWater; options3dColorSection.style.display = hide ? "none" : "block"; diff --git a/modules/ui/provinces-editor.js b/modules/ui/provinces-editor.js index f3c7660f..07ee522d 100644 --- a/modules/ui/provinces-editor.js +++ b/modules/ui/provinces-editor.js @@ -124,7 +124,9 @@ function editProvinces() { const rural = p.rural * populationRate; const urban = p.urban * populationRate * urbanization; const population = rn(rural + urban); - const populationTip = `Total population: ${si(population)}; Rural population: ${si(rural)}; Urban population: ${si(urban)}`; + const populationTip = `Total population: ${si(population)}; Rural population: ${si( + rural + )}; Urban population: ${si(urban)}`; totalPopulation += population; const stateName = pack.states[p.state].name; @@ -145,9 +147,15 @@ function editProvinces() { > - - - + + + Urban: - -

Total population: ${l(total)} ⇒ ${l(total)} (100%)

`; + +

Total population: ${l(total)} ⇒ ${l( + total + )} (100%)

`; const update = function () { const totalNew = ruralPop.valueAsNumber + urbanPop.valueAsNumber; @@ -694,7 +715,13 @@ function editProvinces() { function updateChart() { const value = - this.value === "area" ? d => d.area : this.value === "rural" ? d => d.rural : this.value === "urban" ? d => d.urban : d => d.rural + d.urban; + this.value === "area" + ? d => d.area + : this.value === "rural" + ? d => d.rural + : this.value === "urban" + ? d => d.urban + : d => d.rural + d.urban; root.sum(value); node.data(treeLayout(root).leaves()); @@ -776,7 +803,13 @@ function editProvinces() { customization = 11; provs.select("g#provincesBody").append("g").attr("id", "temp"); - provs.select("g#provincesBody").append("g").attr("id", "centers").attr("fill", "none").attr("stroke", "#ff0000").attr("stroke-width", 1); + provs + .select("g#provincesBody") + .append("g") + .attr("id", "centers") + .attr("fill", "none") + .attr("stroke", "#ff0000") + .attr("stroke-width", 1); document.querySelectorAll("#provincesBottom > *").forEach(el => (el.style.display = "none")); document.getElementById("provincesManuallyButtons").style.display = "inline-block"; @@ -788,7 +821,11 @@ function editProvinces() { $("#provincesEditor").dialog({position: {my: "right top", at: "right-10 top+10", of: "svg", collision: "fit"}}); tip("Click on a province to select, drag the circle to change province", true); - viewbox.style("cursor", "crosshair").on("click", selectProvinceOnMapClick).call(d3.drag().on("start", dragBrush)).on("touchmove mousemove", moveBrush); + viewbox + .style("cursor", "crosshair") + .on("click", selectProvinceOnMapClick) + .call(d3.drag().on("start", dragBrush)) + .on("touchmove mousemove", moveBrush); body.querySelector("div").classList.add("selected"); selectProvince(+body.querySelector("div").dataset.id); @@ -859,7 +896,11 @@ function editProvinces() { if (i === pack.provinces[provinceOld].center) { const center = centers.select("polygon[data-center='" + i + "']"); if (!center.size()) centers.append("polygon").attr("data-center", i).attr("points", getPackPolygon(i)); - tip("Province center cannot be assigned to a different region. Please remove the province first", false, "error"); + tip( + "Province center cannot be assigned to a different region. Please remove the province first", + false, + "error" + ); return; } @@ -921,7 +962,8 @@ function editProvinces() { provincesHeader.querySelector("div[data-sortby='state']").style.left = "22em"; provincesFooter.style.display = "block"; body.querySelectorAll("div > input, select, span, svg").forEach(e => (e.style.pointerEvents = "all")); - if (!close) $("#provincesEditor").dialog({position: {my: "right top", at: "right-10 top+10", of: "svg", collision: "fit"}}); + if (!close) + $("#provincesEditor").dialog({position: {my: "right top", at: "right-10 top+10", of: "svg", collision: "fit"}}); restoreDefaultEvents(); clearMainTip(); @@ -943,14 +985,20 @@ function editProvinces() { const {cells, provinces} = pack; const point = d3.mouse(this); const center = findCell(point[0], point[1]); - if (cells.h[center] < 20) return tip("You cannot place province into the water. Please click on a land cell", false, "error"); + if (cells.h[center] < 20) + return tip("You cannot place province into the water. Please click on a land cell", false, "error"); const oldProvince = cells.province[center]; if (oldProvince && provinces[oldProvince].center === center) return tip("The cell is already a center of a different province. Select other cell", false, "error"); const state = cells.state[center]; - if (!state) return tip("You cannot create a province in neutral lands. Please assign this land to a state first", false, "error"); + if (!state) + return tip( + "You cannot create a province in neutral lands. Please assign this land to a state first", + false, + "error" + ); if (d3.event.shiftKey === false) exitAddProvinceMode(); @@ -1016,7 +1064,10 @@ function editProvinces() { function downloadProvincesData() { const unit = areaUnit.value === "square" ? distanceUnitInput.value + "2" : areaUnit.value; - let data = "Id,Province,Full Name,Form,State,Color,Capital,Area " + unit + ",Total Population,Rural Population,Urban Population\n"; // headers + let data = + "Id,Province,Full Name,Form,State,Color,Capital,Area " + + unit + + ",Total Population,Rural Population,Urban Population\n"; // headers body.querySelectorAll(":scope > div").forEach(function (el) { const key = parseInt(el.dataset.id); diff --git a/modules/ui/style.js b/modules/ui/style.js index b0f092fc..94331a11 100644 --- a/modules/ui/style.js +++ b/modules/ui/style.js @@ -76,9 +76,22 @@ function selectStyleElement() { // stroke color and width if ( - ["armies", "routes", "lakes", "borders", "cults", "relig", "cells", "coastline", "prec", "ice", "icons", "coordinates", "zones", "gridOverlay"].includes( - sel - ) + [ + "armies", + "routes", + "lakes", + "borders", + "cults", + "relig", + "cells", + "coastline", + "prec", + "ice", + "icons", + "coordinates", + "zones", + "gridOverlay" + ].includes(sel) ) { styleStroke.style.display = "block"; styleStrokeInput.value = styleStrokeOutput.value = el.attr("stroke"); @@ -87,14 +100,29 @@ function selectStyleElement() { } // stroke dash - if (["routes", "borders", "temperature", "legend", "population", "coordinates", "zones", "gridOverlay"].includes(sel)) { + if ( + ["routes", "borders", "temperature", "legend", "population", "coordinates", "zones", "gridOverlay"].includes(sel) + ) { styleStrokeDash.style.display = "block"; styleStrokeDasharrayInput.value = el.attr("stroke-dasharray") || ""; styleStrokeLinecapInput.value = el.attr("stroke-linecap") || "inherit"; } // clipping - if (["cells", "gridOverlay", "coordinates", "compass", "terrain", "temperature", "routes", "texture", "biomes", "zones"].includes(sel)) { + if ( + [ + "cells", + "gridOverlay", + "coordinates", + "compass", + "terrain", + "temperature", + "routes", + "texture", + "biomes", + "zones" + ].includes(sel) + ) { styleClipping.style.display = "block"; styleClippingInput.value = el.attr("mask") || ""; } @@ -142,8 +170,12 @@ function selectStyleElement() { if (sel === "population") { stylePopulation.style.display = "block"; - stylePopulationRuralStrokeInput.value = stylePopulationRuralStrokeOutput.value = population.select("#rural").attr("stroke"); - stylePopulationUrbanStrokeInput.value = stylePopulationUrbanStrokeOutput.value = population.select("#urban").attr("stroke"); + stylePopulationRuralStrokeInput.value = stylePopulationRuralStrokeOutput.value = population + .select("#rural") + .attr("stroke"); + stylePopulationUrbanStrokeInput.value = stylePopulationUrbanStrokeOutput.value = population + .select("#urban") + .attr("stroke"); styleStrokeWidth.style.display = "block"; styleStrokeWidthInput.value = styleStrokeWidthOutput.value = el.attr("stroke-width") || ""; } @@ -233,7 +265,8 @@ function selectStyleElement() { styleOcean.style.display = "block"; styleOceanFill.value = styleOceanFillOutput.value = oceanLayers.select("#oceanBase").attr("fill"); styleOceanPattern.value = document.getElementById("oceanicPattern")?.getAttribute("href"); - styleOceanPatternOpacity.value = styleOceanPatternOpacityOutput.value = document.getElementById("oceanicPattern").getAttribute("opacity") || 1; + styleOceanPatternOpacity.value = styleOceanPatternOpacityOutput.value = + document.getElementById("oceanicPattern").getAttribute("opacity") || 1; outlineLayers.value = oceanLayers.attr("layers"); } @@ -334,8 +367,9 @@ styleFilterInput.addEventListener("change", function () { }); styleTextureInput.addEventListener("change", function () { - if (this.value === "none") texture.select("image").attr("xlink:href", ""); - else getBase64(this.value, base64 => texture.select("image").attr("xlink:href", base64)); + texture.select("image").attr("src", this.value); + if (layerIsOn("toggleTexture")) texture.select("image").attr("href", this.value); + zoom.scaleBy(svg, 1.00001); }); styleTextureShiftX.addEventListener("input", function () { @@ -551,7 +585,10 @@ styleFontAdd.addEventListener("click", function () { if (!family) return tip("Please provide a font name", false, "error"); - const existingFont = method === "fontURL" ? fonts.find(font => font.family === family && font.src === src) : fonts.find(font => font.family === family); + const existingFont = + method === "fontURL" + ? fonts.find(font => font.family === family && font.src === src) + : fonts.find(font => font.family === family); if (existingFont) return tip("The font is already added", false, "error"); if (method === "fontURL") addWebFont(family, src); @@ -726,17 +763,17 @@ function textureProvideURL() { buttons: { Apply: function () { const name = textureURL.value.split("/").pop(); - if (!name || name === "") { - tip("Please provide a valid URL", false, "error"); - return; - } + if (!name || name === "") return tip("Please provide a valid URL", false, "error"); + const opt = document.createElement("option"); opt.value = textureURL.value; opt.text = name.slice(0, 20); styleTextureInput.add(opt); styleTextureInput.value = textureURL.value; - getBase64(textureURL.value, base64 => texture.select("image").attr("xlink:href", base64)); - zoom.scaleBy(svg, 1.00001); // enforce browser re-draw + + const image = texture.select("image"); + image.attr("src", textureURL.value); + if (layerIsOn("toggleTexture")) image.attr("href", textureURL.value); $(this).dialog("close"); }, Cancel: function () { diff --git a/modules/ui/stylePresets.js b/modules/ui/stylePresets.js index 20e1612c..c0d32af7 100644 --- a/modules/ui/stylePresets.js +++ b/modules/ui/stylePresets.js @@ -89,6 +89,10 @@ function applyStyle(style) { } else { el.setAttribute(attribute, value); } + + if (layerIsOn("toggleTexture") && selector === "#textureImage" && attribute === "src") { + el.setAttribute("href", value); + } } } } @@ -225,7 +229,7 @@ function addStylePreset() { "#ice": ["opacity", "fill", "stroke", "stroke-width", "filter"], "#emblems": ["opacity", "stroke-width", "filter"], "#texture": ["opacity", "filter", "mask"], - "#textureImage": ["x", "y"], + "#textureImage": ["x", "y", "src"], "#zones": ["opacity", "stroke", "stroke-width", "stroke-dasharray", "stroke-linecap", "filter", "mask"], "#oceanLayers": ["filter", "layers"], "#oceanBase": ["fill"], diff --git a/modules/ui/temperature-graph.js b/modules/ui/temperature-graph.js index 0b3ea567..c025b700 100644 --- a/modules/ui/temperature-graph.js +++ b/modules/ui/temperature-graph.js @@ -48,7 +48,10 @@ function showBurgTemperatureGraph(id) { // Standard deviation for average temperature for the year from [0, 1] to [min, max] const yearSig = lstOut[0] * 62.9466411977018 + 0.28613807855649165; // Standard deviation for the difference between the minimum and maximum temperatures for the year - const yearDelTmpSig = lstOut[1] * 13.541688670361175 + 0.1414213562373084 > yearSig ? yearSig : lstOut[1] * 13.541688670361175 + 0.1414213562373084; + const yearDelTmpSig = + lstOut[1] * 13.541688670361175 + 0.1414213562373084 > yearSig + ? yearSig + : lstOut[1] * 13.541688670361175 + 0.1414213562373084; // Expected value for the difference between the minimum and maximum temperatures for the year const yearDelTmpMu = lstOut[2] * 15.266666666666667 + 0.6416666666666663; @@ -67,7 +70,20 @@ function showBurgTemperatureGraph(id) { const year = new Date().getFullYear(); // use current year const startDate = new Date(year, 0, 1); const endDate = new Date(year, 11, 31); - const months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]; + const months = [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ]; const xscale = d3.scaleTime().domain([startDate, endDate]).range([0, chartWidth]); const yscale = d3.scaleLinear().domain([minT, maxT]).range([chartHeight, 0]); @@ -91,7 +107,11 @@ function showBurgTemperatureGraph(id) { }); drawGraph(); - $("#alert").dialog({title: "Annual temperature in " + b.name, width: "auto", position: {my: "center", at: "center", of: "svg"}}); + $("#alert").dialog({ + title: "Annual temperature in " + b.name, + width: "auto", + position: {my: "center", at: "center", of: "svg"} + }); function drawGraph() { alertMessage.innerHTML = ""; @@ -109,11 +129,26 @@ function showBurgTemperatureGraph(id) { const legendX = n => (chartWidth * n) / 4; const legendTextX = n => legendX(n) + 10; legend.append("circle").attr("cx", legendX(1)).attr("cy", legendY).attr("r", 4).style("fill", "red"); - legend.append("text").attr("x", legendTextX(1)).attr("y", legendY).attr("alignment-baseline", "central").text("Day temperature"); + legend + .append("text") + .attr("x", legendTextX(1)) + .attr("y", legendY) + .attr("alignment-baseline", "central") + .text("Day temperature"); legend.append("circle").attr("cx", legendX(2)).attr("cy", legendY).attr("r", 4).style("fill", "orange"); - legend.append("text").attr("x", legendTextX(2)).attr("y", legendY).attr("alignment-baseline", "central").text("Mean temperature"); + legend + .append("text") + .attr("x", legendTextX(2)) + .attr("y", legendY) + .attr("alignment-baseline", "central") + .text("Mean temperature"); legend.append("circle").attr("cx", legendX(3)).attr("cy", legendY).attr("r", 4).style("fill", "blue"); - legend.append("text").attr("x", legendTextX(3)).attr("y", legendY).attr("alignment-baseline", "central").text("Night temperature"); + legend + .append("text") + .attr("x", legendTextX(3)) + .attr("y", legendY) + .attr("alignment-baseline", "central") + .text("Night temperature"); const xGrid = d3.axisBottom(xscale).ticks().tickSize(-chartHeight); const yGrid = d3.axisLeft(yscale).ticks(5).tickSize(-chartWidth); @@ -135,7 +170,10 @@ function showBurgTemperatureGraph(id) { } const xAxis = d3.axisBottom(xscale).ticks().tickFormat(d3.timeFormat("%B")); - const yAxis = d3.axisLeft(yscale).ticks(5).tickFormat(convertTemperature); + const yAxis = d3 + .axisLeft(yscale) + .ticks(5) + .tickFormat(v => convertTemperature(v)); const axis = chart.append("g"); axis @@ -146,9 +184,24 @@ function showBurgTemperatureGraph(id) { axis.select("path.domain").attr("d", `M0.5,0.5 H${chartWidth + 0.5}`); const curves = chart.append("g").attr("fill", "none").style("stroke-width", 2.5); - curves.append("path").attr("d", getCurve(tempMean)).attr("data-type", "daily").attr("stroke", "orange").on("mousemove", printVal); - curves.append("path").attr("d", getCurve(tempMin)).attr("data-type", "night").attr("stroke", "blue").on("mousemove", printVal); - curves.append("path").attr("d", getCurve(tempMax)).attr("data-type", "day").attr("stroke", "red").on("mousemove", printVal); + curves + .append("path") + .attr("d", getCurve(tempMean)) + .attr("data-type", "daily") + .attr("stroke", "orange") + .on("mousemove", printVal); + curves + .append("path") + .attr("d", getCurve(tempMin)) + .attr("data-type", "night") + .attr("stroke", "blue") + .on("mousemove", printVal); + curves + .append("path") + .attr("d", getCurve(tempMax)) + .attr("data-type", "day") + .attr("stroke", "red") + .on("mousemove", printVal); function printVal() { const [x, y] = d3.mouse(this); diff --git a/modules/ui/tools.js b/modules/ui/tools.js index b4884c8b..e1d554da 100644 --- a/modules/ui/tools.js +++ b/modules/ui/tools.js @@ -74,7 +74,7 @@ toolsContent.addEventListener("click", function (event) { }); function processFeatureRegeneration(event, button) { - if (button === "regenerateStateLabels") BurgsAndStates.drawStateLabels(); + if (button === "regenerateStateLabels") drawStateLabels(); else if (button === "regenerateReliefIcons") { ReliefIcons(); if (!layerIsOn("toggleRelief")) toggleRelief(); @@ -154,7 +154,7 @@ function regenerateStates() { layerIsOn("toggleBorders") ? drawBorders() : toggleBorders(); if (layerIsOn("toggleProvinces")) drawProvinces(); - BurgsAndStates.drawStateLabels(); + drawStateLabels(); Military.generate(); if (layerIsOn("toggleEmblems")) drawEmblems(); @@ -570,9 +570,8 @@ function addLabelOnClick() { .attr("data-size", 18) .attr("filter", null); - const example = group.append("text").attr("x", 0).attr("x", 0).text(name); + const example = group.append("text").attr("x", 0).attr("y", 0).text(name); const width = example.node().getBBox().width; - const x = width / -2; // x offset; example.remove(); group.classed("hidden", false); @@ -584,7 +583,7 @@ function addLabelOnClick() { .attr("startOffset", "50%") .attr("font-size", "100%") .append("tspan") - .attr("x", x) + .attr("x", 0) .text(name); defs @@ -828,9 +827,17 @@ function addMarkerOnClick() { // Find the currently selected marker to use as a base const isMarkerSelected = markers.length && elSelected?.node()?.parentElement?.id === "markers"; const selectedMarker = isMarkerSelected ? markers.find(marker => marker.i === +elSelected.attr("id").slice(6)) : null; - const baseMarker = selectedMarker || {icon: "❓"}; + + const selectedType = document.getElementById("addedMarkerType").value; + const selectedConfig = Markers.getConfig().find(({type}) => type === selectedType); + + const baseMarker = selectedMarker || selectedConfig || {icon: "❓"}; const marker = Markers.add({...baseMarker, x, y, cell}); + if (selectedConfig && selectedConfig.add) { + selectedConfig.add("marker" + marker.i, cell); + } + const markersElement = document.getElementById("markers"); const rescale = +markersElement.getAttribute("rescale"); markersElement.insertAdjacentHTML("beforeend", drawMarker(marker, rescale)); diff --git a/modules/ui/world-configurator.js b/modules/ui/world-configurator.js index 73a3621e..c47beaca 100644 --- a/modules/ui/world-configurator.js +++ b/modules/ui/world-configurator.js @@ -1,5 +1,6 @@ function editWorld() { if (customization) return; + $("#worldConfigurator").dialog({ title: "Configure World", resizable: false, @@ -8,8 +9,7 @@ function editWorld() { "Whole World": () => applyWorldPreset(100, 50), Northern: () => applyWorldPreset(33, 25), Tropical: () => applyWorldPreset(33, 50), - Southern: () => applyWorldPreset(33, 75), - "Restore Winds": restoreDefaultWinds + Southern: () => applyWorldPreset(33, 75) }, open: function () { const buttons = $(this).dialog("widget").find(".ui-dialog-buttonset > button"); @@ -17,7 +17,6 @@ function editWorld() { buttons[1].addEventListener("mousemove", () => tip("Click to set map size to cover the Northern latitudes")); buttons[2].addEventListener("mousemove", () => tip("Click to set map size to cover the Tropical latitudes")); buttons[3].addEventListener("mousemove", () => tip("Click to set map size to cover the Southern latitudes")); - buttons[4].addEventListener("mousemove", () => tip("Click to restore default wind directions")); }, close: function () { $(this).dialog("destroy"); @@ -25,28 +24,56 @@ function editWorld() { }); const globe = d3.select("#globe"); - const clr = d3.scaleSequential(d3.interpolateSpectral); - const tMax = 30, - tMin = -25; // temperature extremes const projection = d3.geoOrthographic().translate([100, 100]).scale(100); const path = d3.geoPath(projection); + updateInputValues(); updateGlobeTemperature(); updateGlobePosition(); if (modules.editWorld) return; modules.editWorld = true; - document.getElementById("worldControls").addEventListener("input", e => updateWorld(e.target)); + byId("worldControls").addEventListener("input", e => updateWorld(e.target)); globe.select("#globeWindArrows").on("click", changeWind); globe.select("#globeGraticule").attr("d", round(path(d3.geoGraticule()()))); // globe graticule updateWindDirections(); + byId("restoreWinds").addEventListener("click", restoreDefaultWinds); + + function updateInputValues() { + byId("temperatureEquatorInput").value = options.temperatureEquator; + byId("temperatureEquatorOutput").value = options.temperatureEquator; + byId("temperatureEquatorF").innerText = convertTemperature(options.temperatureEquator, "°F"); + + byId("temperatureNorthPoleInput").value = options.temperatureNorthPole; + byId("temperatureNorthPoleOutput").value = options.temperatureNorthPole; + byId("temperatureNorthPoleF").innerText = convertTemperature(options.temperatureNorthPole, "°F"); + + byId("temperatureSouthPoleInput").value = options.temperatureSouthPole; + byId("temperatureSouthPoleOutput").value = options.temperatureSouthPole; + byId("temperatureSouthPoleF").innerText = convertTemperature(options.temperatureSouthPole, "°F"); + } + function updateWorld(el) { - if (el) { - document.getElementById(el.dataset.stored + "Input").value = el.value; - document.getElementById(el.dataset.stored + "Output").value = el.value; - if (el.dataset.stored) lock(el.dataset.stored); + if (el?.dataset.stored) { + const stored = el.dataset.stored; + byId(stored + "Input").value = el.value; + byId(stored + "Output").value = el.value; + lock(el.dataset.stored); + + if (stored === "temperatureEquator") { + options.temperatureEquator = Number(el.value); + byId("temperatureEquatorF").innerText = convertTemperature(options.temperatureEquator, "°F"); + } + if (stored === "temperatureNorthPole") { + options.temperatureNorthPole = Number(el.value); + byId("temperatureNorthPoleF").innerText = convertTemperature(options.temperatureNorthPole, "°F"); + } + if (stored === "temperatureSouthPole") { + options.temperatureSouthPole = Number(el.value); + byId("temperatureSouthPoleF").innerText = convertTemperature(options.temperatureSouthPole, "°F"); + } } updateGlobeTemperature(); @@ -58,18 +85,18 @@ function editWorld() { Lakes.defineGroup(); Rivers.specify(); pack.cells.h = new Float32Array(heights); - defineBiomes(); + Biomes.define(); if (layerIsOn("toggleTemp")) drawTemp(); if (layerIsOn("togglePrec")) drawPrec(); if (layerIsOn("toggleBiomes")) drawBiomes(); if (layerIsOn("toggleCoordinates")) drawCoordinates(); if (layerIsOn("toggleRivers")) drawRivers(); - if (document.getElementById("canvas3d")) setTimeout(ThreeD.update(), 500); + if (byId("canvas3d")) setTimeout(ThreeD.update(), 500); } function updateGlobePosition() { - const size = +document.getElementById("mapSizeOutput").value; + const size = +byId("mapSizeOutput").value; const eqD = ((graphHeight / 2) * 100) / size; calculateMapCoordinates(); @@ -77,12 +104,12 @@ function editWorld() { const scale = +distanceScaleInput.value; const unit = distanceUnitInput.value; const meridian = toKilometer(eqD * 2 * scale); - document.getElementById("mapSize").innerHTML = `${graphWidth}x${graphHeight}`; - document.getElementById("mapSizeFriendly").innerHTML = `${rn(graphWidth * scale)}x${rn(graphHeight * scale)} ${unit}`; - document.getElementById("meridianLength").innerHTML = rn(eqD * 2); - document.getElementById("meridianLengthFriendly").innerHTML = `${rn(eqD * 2 * scale)} ${unit}`; - document.getElementById("meridianLengthEarth").innerHTML = meridian ? " = " + rn(meridian / 200) + "%🌏" : ""; - document.getElementById("mapCoordinates").innerHTML = `${lat(mc.latN)} ${Math.abs(rn(mc.lonW))}°W; ${lat(mc.latS)} ${rn(mc.lonE)}°E`; + byId("mapSize").innerHTML = `${graphWidth}x${graphHeight}`; + byId("mapSizeFriendly").innerHTML = `${rn(graphWidth * scale)}x${rn(graphHeight * scale)} ${unit}`; + byId("meridianLength").innerHTML = rn(eqD * 2); + byId("meridianLengthFriendly").innerHTML = `${rn(eqD * 2 * scale)} ${unit}`; + byId("meridianLengthEarth").innerHTML = meridian ? " = " + rn(meridian / 200) + "%🌏" : ""; + byId("mapCoordinates").innerHTML = `${lat(mc.latN)} ${Math.abs(rn(mc.lonW))}°W; ${lat(mc.latS)} ${rn(mc.lonE)}°E`; function toKilometer(v) { if (unit === "km") return v; @@ -104,15 +131,24 @@ function editWorld() { globe.select("#globeArea").attr("d", round(path(area.outline()))); // map area } + // update temperatures on globe (visual-only) function updateGlobeTemperature() { - const tEq = +document.getElementById("temperatureEquatorOutput").value; - document.getElementById("temperatureEquatorF").innerHTML = rn((tEq * 9) / 5 + 32); - const tPole = +document.getElementById("temperaturePoleOutput").value; - document.getElementById("temperaturePoleF").innerHTML = rn((tPole * 9) / 5 + 32); - globe.selectAll(".tempGradient90").attr("stop-color", clr(1 - (tPole - tMin) / (tMax - tMin))); - globe.selectAll(".tempGradient60").attr("stop-color", clr(1 - (tEq - ((tEq - tPole) * 2) / 3 - tMin) / (tMax - tMin))); - globe.selectAll(".tempGradient30").attr("stop-color", clr(1 - (tEq - ((tEq - tPole) * 1) / 3 - tMin) / (tMax - tMin))); - globe.select(".tempGradient0").attr("stop-color", clr(1 - (tEq - tMin) / (tMax - tMin))); + const tEq = options.temperatureEquator; + const tNP = options.temperatureNorthPole; + const tSP = options.temperatureSouthPole; + + const scale = d3.scaleSequential(d3.interpolateSpectral); + const getColor = value => scale(1 - value); + const [tMin, tMax] = [-25, 30]; // temperature extremes + const tDelta = tMax - tMin; + + globe.select("#grad90").attr("stop-color", getColor((tNP - tMin) / tDelta)); + globe.select("#grad60").attr("stop-color", getColor((tEq - ((tEq - tNP) * 2) / 3 - tMin) / tDelta)); + globe.select("#grad30").attr("stop-color", getColor((tEq - ((tEq - tNP) * 1) / 4 - tMin) / tDelta)); + globe.select("#grad0").attr("stop-color", getColor((tEq - tMin) / tDelta)); + globe.select("#grad-30").attr("stop-color", getColor((tEq - ((tEq - tSP) * 1) / 4 - tMin) / tDelta)); + globe.select("#grad-60").attr("stop-color", getColor((tEq - ((tEq - tSP) * 2) / 3 - tMin) / tDelta)); + globe.select("#grad-90").attr("stop-color", getColor((tSP - tMin) / tDelta)); } function updateWindDirections() { @@ -146,8 +182,8 @@ function editWorld() { } function applyWorldPreset(size, lat) { - document.getElementById("mapSizeInput").value = document.getElementById("mapSizeOutput").value = size; - document.getElementById("latitudeInput").value = document.getElementById("latitudeOutput").value = lat; + byId("mapSizeInput").value = byId("mapSizeOutput").value = size; + byId("latitudeInput").value = byId("latitudeOutput").value = lat; lock("mapSize"); lock("latitude"); updateWorld(); diff --git a/styles/ancient.json b/styles/ancient.json index 09704553..6bacb0d5 100644 --- a/styles/ancient.json +++ b/styles/ancient.json @@ -97,7 +97,7 @@ "#markers": { "opacity": null, "rescale": 1, - "filter": "" + "filter": null }, "#prec": { "opacity": null, @@ -265,7 +265,8 @@ }, "#textureImage": { "x": 0, - "y": 0 + "y": 0, + "src": "https://i2.wp.com/azgaar.files.wordpress.com/2019/07/antique-small.jpg" }, "#zones": { "opacity": 0.6, diff --git a/styles/atlas.json b/styles/atlas.json index c26848a0..72a31027 100644 --- a/styles/atlas.json +++ b/styles/atlas.json @@ -97,7 +97,7 @@ "#markers": { "opacity": null, "rescale": 1, - "filter": "url(#dropShadow01)" + "filter": null }, "#prec": { "opacity": null, @@ -259,10 +259,15 @@ "filter": null }, "#texture": { - "opacity": null, + "opacity": 0.2, "filter": null, "mask": "url(#land)" }, + "#textureImage": { + "x": 0, + "y": 0, + "src": "https://i2.wp.com/azgaar.files.wordpress.com/2021/10/plaster.jpg" + }, "#zones": { "opacity": 0.6, "stroke": "#333333", diff --git a/styles/clean.json b/styles/clean.json index fd00c5ad..a65beffb 100644 --- a/styles/clean.json +++ b/styles/clean.json @@ -98,7 +98,7 @@ "#markers": { "opacity": null, "rescale": null, - "filter": "url(#dropShadow01)" + "filter": null }, "#prec": { "opacity": null, @@ -261,11 +261,15 @@ "filter": null }, "#texture": { - "opacity": null, + "opacity": 0.2, "filter": null, "mask": "url(#land)" }, - "#textureImage": {}, + "#textureImage": { + "x": 0, + "y": 0, + "src": "https://i2.wp.com/azgaar.files.wordpress.com/2021/10/plaster.jpg" + }, "#zones": { "opacity": 0.7, "stroke": "#ff6262", diff --git a/styles/cyberpunk.json b/styles/cyberpunk.json index 579d093b..02b815e3 100644 --- a/styles/cyberpunk.json +++ b/styles/cyberpunk.json @@ -97,7 +97,7 @@ "#markers": { "opacity": 0.8, "rescale": 1, - "filter": "url(#dropShadow05)" + "filter": null }, "#prec": { "opacity": null, @@ -259,10 +259,15 @@ "filter": "" }, "#texture": { - "opacity": 0.14, + "opacity": 0.2, "filter": null, "mask": "url(#water)" }, + "#textureImage": { + "x": 0, + "y": 0, + "src": "https://i2.wp.com/azgaar.files.wordpress.com/2019/07/mercury-small.jpg" + }, "#zones": { "opacity": 0.7, "stroke": "#ffffff", diff --git a/styles/default.json b/styles/default.json index 29ea166a..b68d2474 100644 --- a/styles/default.json +++ b/styles/default.json @@ -97,7 +97,7 @@ "#markers": { "opacity": null, "rescale": 1, - "filter": "url(#dropShadow01)" + "filter": null }, "#prec": { "opacity": null, @@ -263,6 +263,11 @@ "filter": null, "mask": "url(#land)" }, + "#textureImage": { + "x": 0, + "y": 0, + "src": "https://i2.wp.com/azgaar.files.wordpress.com/2021/10/marble-big.jpg" + }, "#zones": { "opacity": 0.6, "stroke": "#333333", diff --git a/styles/gloom.json b/styles/gloom.json index 91b5e0fe..5dde229f 100644 --- a/styles/gloom.json +++ b/styles/gloom.json @@ -98,7 +98,7 @@ "#markers": { "opacity": 0.8, "rescale": 1, - "filter": "url(#dropShadow05)" + "filter": null }, "#prec": { "opacity": null, @@ -261,13 +261,14 @@ "filter": null }, "#texture": { - "opacity": null, + "opacity": 0.8, "filter": null, "mask": "url(#land)" }, "#textureImage": { "x": 0, - "y": 0 + "y": 0, + "src": "https://i2.wp.com/azgaar.files.wordpress.com/2019/07/iran-small.jpg" }, "#zones": { "opacity": 0.5, diff --git a/styles/light.json b/styles/light.json index fb9b838c..358f3315 100644 --- a/styles/light.json +++ b/styles/light.json @@ -259,10 +259,15 @@ "filter": null }, "#texture": { - "opacity": 0.39, + "opacity": 0.4, "filter": null, "mask": "" }, + "#textureImage": { + "x": 0, + "y": 0, + "src": "https://i2.wp.com/azgaar.files.wordpress.com/2021/10/plaster.jpg" + }, "#zones": { "opacity": 0.6, "stroke": "#333333", diff --git a/styles/monochrome.json b/styles/monochrome.json index e94f5a7b..a4273144 100644 --- a/styles/monochrome.json +++ b/styles/monochrome.json @@ -98,7 +98,7 @@ "#markers": { "opacity": null, "rescale": 1, - "filter": "url(#dropShadow01)" + "filter": null }, "#prec": { "opacity": null, @@ -249,16 +249,20 @@ "filter": "url(#dropShadow05)" }, "#texture": { - "opacity": 1, + "opacity": 0.2, "filter": null, "mask": "url(#land)" }, + "#textureImage": { + "x": 0, + "y": 0, + "src": "https://i2.wp.com/azgaar.files.wordpress.com/2021/10/plaster.jpg" + }, "#emblems": { "opacity": 0.5, "stroke-width": 0.5, "filter": null }, - "#textureImage": {}, "#zones": { "opacity": 0.6, "stroke": "#333333", diff --git a/styles/pale.json b/styles/pale.json index e6acdafd..a0c444e1 100644 --- a/styles/pale.json +++ b/styles/pale.json @@ -259,13 +259,14 @@ "filter": null }, "#texture": { - "opacity": 0.39, + "opacity": 0.4, "filter": null, "mask": "url(#land)" }, "#textureImage": { "x": 0, - "y": 0 + "y": 0, + "src": "https://i2.wp.com/azgaar.files.wordpress.com/2021/10/plaster.jpg" }, "#zones": { "opacity": 0.6, diff --git a/styles/watercolor.json b/styles/watercolor.json index 729df648..b0bda134 100644 --- a/styles/watercolor.json +++ b/styles/watercolor.json @@ -97,7 +97,7 @@ "#markers": { "opacity": null, "rescale": 1, - "filter": "url(#dropShadow01)" + "filter": null }, "#prec": { "opacity": null, @@ -263,6 +263,11 @@ "filter": null, "mask": "url(#land)" }, + "#textureImage": { + "x": 0, + "y": 0, + "src": "https://i2.wp.com/azgaar.files.wordpress.com/2021/10/plaster.jpg" + }, "#zones": { "opacity": 0.6, "stroke": "#333333", diff --git a/utils/graphUtils.js b/utils/graphUtils.js index c6315088..780dc931 100644 --- a/utils/graphUtils.js +++ b/utils/graphUtils.js @@ -137,6 +137,7 @@ function find(x, y, radius = Infinity) { // return closest cell index function findCell(x, y, radius = Infinity) { + if (!pack.cells?.q) return; const found = pack.cells.q.find(x, y, radius); return found ? found[2] : undefined; } diff --git a/utils/polyfills.js b/utils/polyfills.js index 369e647f..667d81ab 100644 --- a/utils/polyfills.js +++ b/utils/polyfills.js @@ -14,3 +14,19 @@ if (Array.prototype.flat === undefined) { return this.reduce((acc, val) => (Array.isArray(val) ? acc.concat(val.flat()) : acc.concat(val)), []); }; } + +// readable stream iterator: https://bugs.chromium.org/p/chromium/issues/detail?id=929585#c10 +if (ReadableStream.prototype[Symbol.asyncIterator] === undefined) { + ReadableStream.prototype[Symbol.asyncIterator] = async function* () { + const reader = this.getReader(); + try { + while (true) { + const {done, value} = await reader.read(); + if (done) return; + yield value; + } + } finally { + reader.releaseLock(); + } + }; +} diff --git a/utils/unitUtils.js b/utils/unitUtils.js index a9a933df..d940e349 100644 --- a/utils/unitUtils.js +++ b/utils/unitUtils.js @@ -13,8 +13,7 @@ const temperatureConversionMap = { "°Rø": temp => rn((temp * 21) / 40 + 7.5) + "°Rø" }; -function convertTemperature(temp) { - const scale = temperatureScale.value || "°C"; +function convertTemperature(temp, scale = temperatureScale.value || "°C") { return temperatureConversionMap[scale](temp); } diff --git a/versioning.js b/versioning.js index b4c896a2..564a69b2 100644 --- a/versioning.js +++ b/versioning.js @@ -1,7 +1,7 @@ "use strict"; // version and caching control -const version = "1.89.35"; // generator version, update each time +const version = "1.93.04"; // generator version, update each time { document.title += " v" + version; @@ -23,19 +23,22 @@ const version = "1.89.35"; // generator version, update each time const discord = "https://discordapp.com/invite/X7E84HU"; const patreon = "https://www.patreon.com/azgaar"; - alertMessage.innerHTML = /* html */ `The Fantasy Map Generator is updated up to version ${version}. This version is compatible with previous versions, loaded .map files will be auto-updated. + alertMessage.innerHTML = /* html */ `The Fantasy Map Generator is updated up to version ${version}. This version is compatible with previous versions, loaded save files will be auto-updated. ${storedVersion ? "Reload the page to fetch fresh code." : ""}
    Latest changes: +
  • Random encounter markers (integration with Deorum)
  • +
  • Auto-load of the last saved map is now optional (see Onload behavior in Options)
  • +
  • New label placement algorithm for states
  • +
  • North and South Poles temperature can be set independently
  • +
  • More than 70 new heraldic charges
  • +
  • Multi-color heraldic charges support
  • +
  • New 3D scene options and improvements
  • Autosave feature (in Options)
  • Google translation support (in Options)
  • Religions can be edited and redrawn like cultures
  • Lock states, provinces, cultures, and religions from regeneration
  • -
  • Heightmap brushes: linear edit option
  • -
  • Data Charts screen
  • -
  • Сultures and religions can have multiple parents in hierarchy tree
  • -
  • Heightmap selection screen

Join our Discord server and Reddit community to ask questions, share maps, discuss the Generator and Worlbuilding, report bugs and propose new features.