Fenhethyr

As I am learning more about digital art and building my skills around coloring and drawing maps, I decided to upgrade some of my hand drawn maps to full color. For this one I used Inkarnate.

The hand drawn one is just a couple of different pencils, and that is a raw scan off my printer.

Fenhethyr, one of several major islands on Athoas.

When it came to figuring out the terrain, one of my favorite resources for islands is too look at a chart that has 100 of the worlds largest islands for reference. Look for a similar landmass to what I have in mind, and then work from there.

I figured out that it was going to be somewhere between Honshu and Tu Waipounamu (Southern Island of NZ) in size after I fleshed out the land mass.

I knew in advance that I wanted the major settlements to be Bastion, High Horn, and Thorne, and as I roughed in some details for the landmass I decided there should also be some elven settlements and a dwarven settlement in the mountains.

For the mountains I started with a trace line that was somewhat jagged, then filled them in, then put in lines for foothills out for a distance from each edge of the range.

For the forests I traced out the brush and scrubland around them, then did infill with the trees. If you look closely you can see some of the original lines that didn’t get too smudged from being drawn over.

Then I drew in the mountains and hills, then the trees, then the rivers and lakes. Most of the map is left blank because I had a story to tell for the campaign, but wanted to leave room for expansion.

I have a version of it somewhat cleaned up in photoshop, but the colorized versions are essentially traceovers of the hand drawn version in Inkarnate. I imported the scan as a stamp, dropped the opacity of it to 50%, and lowered to layer -5, then masked out the land masses.

I marked in each of the mountains and roughed in some of the forests and major settlements. I placed most of the lakes and rivers, and started to texture in the terrain.

After that I waffled between painting the rivers and lakes in foreground or having them as background features. I settled on background, and then wasn’t satisfied with the position or layout of the forests, so I tweaked them a bit. The lowlands north west of High Horn turned into a swamp, and I added a bunch more forest since it made sense that there would be after looking at similar sized land masses.

I decided that I wanted the major inlet near Bastion to be comprised of a number of islands.

I also started filling out and painting over the ocean areas, and added a couple of stamps.

Finally, I decided to apply a few filters to get the final product, and added a label to the map. The filters I used for this one are Faded, Paper Tear (intensity turned way down), and Parchment.

The Temple of Lozixhil

The Temple of Lozixhil is the continuation of a storyline in my ongoing campaign, and a followup to The Lost Tower of the Mad Mage of Nesme (not yet published), and several other adventures along the way. Since I decided to start writing up and designing my own maps, I decided that spending some time to prep this to be reusable by others would be worthwhile. As usual, you can find the full resolution maps here, and download a copy.

The Temple of Lozixhil

Near the centre of the city there is a small unassuming temple, the Ebon Kindness, dedicated to those who worship Nepenthe, the eater of sorrows. In addition to providing healing and blessings, the followers of Nepenthe offer solace from painful memories and regret.

Nikoleta, the leader of Nepenthe’s followers at this shrine is a kind, elderly human who tends to and cultivates the sweet smelling flowers that give the temple it’s name. By sharing a tea, the draught of final remembrance, made with these flowers, the followers of Nepenthe seek to erase the pain brought into this world by helping those suffering forget their sorrows.

After the first draught, most people will want another, each time giving up a memory, and sleeping their time between doses. Eventually these people will consume enough to forget who they are, and when they do, Nikoleta will comfort them and offer them a path to find new meaining, showing them the Temple to Lozoxihl below.

In reality, Nikoleta is an acolyte of Lozoxihl, but not a very powerful one. She is a faithful servant who seeks to help others, through her ministrations as a healer, but for those who are… troubled… by their memories she offers first an escape, by sharing the tea, and then for those who are left empty by repeatedly taking the tea, something to fill the void, by inducting them into the service of Lozoxihl.

Getting Here

There are many ways to consider getting the party to visit the Ebon Kindness, some may involve having the party come to think of Nikoleta and the Shrine to Nepenthes be an ally

  • The party seeks healing or help for an injured member
  • The party is tracking down information that one of the slumbering people present can provide
  • When researching the black flowers they have found a clue that lead them here
  • One of the commoners present here is currently infected by a Slaad Tadpole, but has forgotten

The Ebon Kindness

A small temple with no windows and a stone door, this building looks more like a mausoleum than a welcoming building. On either side of the stone doors are two fenced in areas where many unusual flowering plants grow. As you approach the sweet smell of the flowers at the end of the long stemmed plants wafts as they tremble lightly as though blown by a gentle breeze even in the calm air. The black leaves and stems of the flowers are notable enough, but they are a stark contrast to the bulbs that have a soft glow, almost like a tea-light about to flicker out at the centre of it’s thorn rimmed flower. On the stone door you see a simple handcarved sign “The Ebon Kindness”, and just below that “All are welcome”.

The Ebon Kindness, a gentle place.

As you open the door you can see the temple is softly illuminated by pale purple light coming from two braziers. The air is comfortably cool and you can see several rows of pews with sleeping people on them leading toward an altar with a brazier that has a kettle sitting above it. In the alcoves you can see stone sculptures that show larger versions of the plants growing outside, their thick stalks seeming to undulate in the shadows of the pale, flickering light.

You see a kind looking elderly woman working several types of dried flowers with a mortar and pestle as she briefly looks up when you enter.

“Come in, come in! Please respect the rest of those who are sleeping. I am Nikoleta, and may the peace of Nepenthe be upon you!”.

Nikoleta is a Priest 1 who will offer any who want it regular tea, and can provide basic healing services via her spell list below market rates – even free, and asks only for a small contribution to the temple in return.

She will also offer any who seek it a Draught of Final Remembrance, below, to any who seek it, and will speak freely of the effects it grants of removing memories, creating a feeling of lightness, but also tiring out those who drink it. She won’t mention the dreams of the alien citiy.

Alternatively a DC 15 insight check will reveal that Nikoleta is concealing something. She is extremely hard to provoke, but will only reveal the temple below if her life is threatened, in which case she will flee down to the basement, warning Andrianos that people are attacking the temple.

One of the tendrils of the plant to the right of the altar is a hidden lever, which when activated will cause a portion of the tiled floor to slide away revealing a staircase into the hidden basement.

The Hidden Temple

Descending down the staircase, you begin to hear a soft chanting in a strange language and as you near the bottom of the stairs you see a burst of harsh green light. If any player has been witness to Naxh’Dhritl, read the section related to that below.

This section should be played as a cut scene until the acolyte points out that the party is present

As the characters step down the last stair the passage opens to a large chamber where you see a tall, thin, impossibly old man (Master Andrianos, a Warlock of the Great Old One 2) wearing dark robes standing before a great hole in space that fills an arch along the northern wall. “Lozixhil the many, we beseech you to grant our brethren your blessing and find them worthy! Accept our sacrifice that we may be serve and be spared when Naxh’dhritl ends his slumber and consumes all the worlds.”, and a great beast (The Presence of Lozoxihl) with many eyes, and flayed, nearly human hands reaches through the portal.

As the dark robed man finishes his prayer, the brown robed acolyte kneeling before the many-eyed horror reaching through the portal stands and walks toward the grasping hands – “I give myself willingly Lozixhil, the sacrifice is worth your blessing!”, and there is a green flare as a tentacle reaches through the portal, dragging the acolyte through the gate. Another acolyte hesitantly rises from the benches and begins walking to the same spot, when he looks, and catches your eye — “Master, I thought the ritual couldn’t be interrupted?”

At this point Master Andrianos looks to the party and is briefly outraged, but composes himself and invites the party to join the trials. If any players choose to, they may perform the Trial of Worthiness. If they decline, or start asking questions that reveal that they are not “empty vessels” created by over use of the draught of final remembrance, he will become enraged and attack. In this battle, The Presence of Lozoxihl will attack anyone in range, but will focus on whatever attracts it’s attention.

Among the pews are seven Empty Vessel minions, and two Cultists who will help Master Adrianos to overcome the party. Neither the Empty Vessels or the Cultists realize that Lozixhil will attack or consume them if they get too close. Proceed to The Presence of Lozixhil.


For a reference for this scene, consider “Eldritch Summoning” by Lochlan Page.

The Trial of Worthiness


If one of the players decides to take the Trial of Worthiness, they must complete the following challenges to survive.

As the tentacles of The Presence of Lozoxihl wrap around you, it’s presence invades your mind, scouring it of memories that could be a danger to it’s master.

Trial of Scholars Make a DC 15 Intelligence save to preserve your memories. If you fail this save, any memories of Lozoxihl or Naxh’dritl are erased from your mind. If you succeed on this saving throw, you may increase your Intelligence by one, to a maximum of 20.

Trial of Sense Make a DC 15 Wisdom save to preserve your sense of right and wrong. If you fail this save, your alignment shifts one step toward Chaotic on the law/chaos spectrum, and one step toward Neutral on the good/evil spectrum. If you succeed this saving throw, you may increase your Wisdom by one, to a maximum of 20.

Trial of Self Make a DC 15 Charisma save to preserve your personality. If you fail this saving throw, you become obsessed with feeding Lozoxihl to survive the coming doom, and gain an Indefinite Madness3 (“Achieving my goal is the only thing of interest to me, and I’ll ignore everything else to pursue it.”). If you succeed you may increase your Charisma by, one to a maximum of 20.

Once the trials are complete, you gain immunity to the draught of final remembrance. If you succeed on two of these saving throws, Lozoxihl will accept you as a Warlock of the Old One, scouring away your past level of experience, and converting it to Warlock (if you are already a Warlock, you lose your current Patron, and Lozoxihl becomes your Patron). If you refuse this gift, or fail more than one saving throw, the Presence of Lozoxihl drags you into the Mouth of Naxh’dhritl.

The Presence of Lozixhil

The great Beast making it’s way through the portal is merely a facet of Lozoxihl, who seeks to drag prey into the Mouth of Naxh’dhritl. The Presence is immobile, but it’s tentacles can reach anywhere into the main chamber that Lozixhil is in. Each round it will make two tentacle attacks, and if it successfully grabs a target, it will drag it into the Mouth. Cultists in the Mouth will become confused (per the confusion spell). This cannot be dispelled or cured, and cultists that enter the mouth will continue to act under that spell until they die; nothing can help them recover short of a Wish spell.

If Master Andrianos is killed, Lozoxihl will recede into the portal, allowing others to pass through it. The portal will remain open for an hour, until the strange fuel that feeds the purple fires burns down. If The Presence of Lozoxihl is defeated, it will slouch backwards through the portal, allowing passage through the portal from either direction.

The Mouth of Naxh’dhritl

“It’s horrible in here…” – Evolution

This is a terrible space that is within one of the many mouths of Naxh’dhritl. Within each the countless mouths of Naxh’dhritl resides an aspect of Lozixhil, that waits to flay the body and soul of it’s prey to feed it’s great master.

While the Presence of Lozixhil is alive, the portal is sealed by a part of Lozixhil bulk, and creatures within cannot escape. Once the Presence of Lozixhil is defeated on the other side of the portal, or Lozixhil is defeated on this side of the portal, it is possible to move freely through it until the ritual powering the portal concludes. Any creature in the Mouth when the portal closes is consumed body and soul by Naxh’dhritl, and is lost forever.

This horrific environment is a demiplane that appears to follow all of the normal rules of physics, but anyone within the Mouth will take 1d4 acid damage at the start of their turn.

Aftermath

When either the Presence of Lozixhil is defeated the portal will begin to collapse, when the ritual fires burn out if just the Presence is defeated, or within 1d10+5 turns if Lozixhil, The Harvester is defeated. If either happens, the cultists – including Master Andrianos and Nikoleta, remaining in the temple will fight to the death, their only sense of purpose lost to them. Any abberations spawned from the Mouth of Naxh’dhritl will immediately flee from the temple, and take any steps necessary to escape or evade combat – their goal is to spread the will of Naxh’dhritl, not to fight the party or attack townspeople!

In the private quarters to the south east, detailed instructions for preparing the draught of final remembrance
can be found, as well as ancient texts written in Deep Speech that detail the rituals needed to open a portal to a mouth of Lozixhil.

A book titled The Hunger of Dreams details what the wizard Agelmar Margaster had learned of Lozixhil and Naxh’dhritl, and their unending hunger and desire to devour everything that lives. Among the pages are notes and missives from The Cult of Lozixhil and the Church of Nepenthes that indicate a loose, cell based structure of organizations that worship these horrific and otherworldly creatures. Clues to the next steps include

  • Two missives, one from Waterdeep, requesting Nepenthe seeds from someone named Valmarin, who seeks to start a new temple. The second is from a place called Stormreach, written by Hupnam the Servitor, stating that the experiment was successful and he was able to be both consumed by Lozixhil and transfer himself to his new form.
  • A packet of Nepenthe seeds with instructions to care for them, and strict instructions not to touch the thorns.
  • A strange nut that looks much like an acorn but has shadowy tendrils that are growing from it. It is contained in a small glass jar, with a very cryptic label containing only a question mark. This is a seed that when planted on the Prime Material plane will grow over 8 hours into one of the twisted portals of The Ways. It emanates powerful conjuration and necromancy magic, and is felt by anyone sensitive to evil or aberrations.

In addition to the details above, the earnings of the temple are contained within a lockbox underneath the bed, 400 gp, 250 cp, and two potions of superior healing, a wand of secrets, a small forked metal rod, and a scroll of Plane Shift.

Witness to Naxh’dhritl

If one of the characters present has borne witness to Naxh’dhritl, read the following as they enter the room:

You step into the chamber you catch a glimpse of the many eyed beast reaching through the brilliant viridescent portal, and a memory consumes you:

As you gaze through the aperture of the portal, your eye catches on the strange texture of the ground that appears far beneath you. The mottled purple and grey terrain trembles, and a large crevasse slowly forms across the surface – what you first think are tears in the turf bridging the gaps quickly form into tendrils of viscous liquid as the ground separates.

Revealed in the depths of that crevasse is a golden and glassy surface that quickly expands revealing a massive black smear across, which you quickly realize is a pupil as it shifts to centre on you. As the pupil focuses, it reshapes into an indescribable form that tugs at the deepest recesses of your mind, and the golden surface suddenly erupts into dozens of enormous tendrils reaching and striving toward you. It is only then that you realize the vastness of the scale of the eye that is gazing at you through the portal.
You can see the tentacles streaming toward you through the horrible void, and get a sense of the distance they are traversing to reach toward you; as they grow closer you can see the tips of the undulating arms forming massive blisters that erupt into open, tooth filled maws. You stare into the portal as though transfixed by the images you see, and as the limbs strain towards the portal, within the mouth stretching open, you see the hideous form of a many eyed beast with its twisted, nearly human hands gripping the awful interior of that mouth as it’s eager eyes lock on yours and the wicked tentacles on its back flicker toward you. The silent screams of those gaping maws echo across the void into your mind and you instinctively recoil, breaking contact with the control pillar, and the portal winks momentarily out, then re-appears, once again showing you the calm silver clouds of the Astral Sea.

The character will take 3d6 psychic damage, DC 15 Wisdom save for half. That character feels the words “I SEE YOU” slam into their mind as The Presence of Lozixhil targets them for the next round.

Draught of Final Remembrance


adventuring gear (potion)

This sweet smelling but bitter flavored tea seems to be vaguely illuminated from within. When consumed, you immediately feel drowsy and tired, and begin to slip into a deep trance that lasts 1d4+4 hours, nothing short of a lesser restoration spell will awaken you before that time passes. When you awaken you have lost all memory or recollection of a painful memory, and while you have a vague recollection of having lost something, for the next 24 hours you have advantage on Charisma based skill checks for persuasion and performance. In addition, you gain all of the benefits of a long rest, even if you have taken one in the last 24 hours. Finally, if you are suffering from any type of Madness3At the end of that 24 hours you gain a level of exhaustion. When you next awaken you have a recollection of a bizarre city with unusual geometry that seems to shift and a great cyclopean tower that seems to have been watching you.

After accruing 7 levels of exhaustion from consuming the tea, you lose all of your memories, and your will and motivation. You become an Empty Vessel, and seek guidance and instruction from whoever was providing you the tea, following their instructions.

The draught can be made into a potion, but loses it’s potency after 24 hours.

New Monsters

The Cult of Lozoxihl

In addition to Master Andrianos and Nikoleta, there are several cultists and servants of Lozixhil that occupy the temple.

Empty Vessels

Empty vessels are humanoids of any race or size that have drank too frequently of the draught of final remebrance. Barely concious automatons that seek only to serve and protect their master, in combat they will mob anyone attacking their master, acting as human shields. They act without regard for their own safety and are unaware of their own frailty.

Cultist of Lozixhil

Not all of the Empty Vessels are consumed, some of them pass the Trial of Worthiness and become a Warlock of Lozoxihl, serving their master in body and spirit.

In battle the Cultists will first attempt to use their Hold Person spell to ensnare their assailants, and then will either cast True Strike to help their master, or cast Eldritch Blast on opponents that are attacking them directly. If they are hit, they will use Hellish Rebuke.

The Presence of Lozixhil

A hideous beast with nearly human arms, several tentacles, and countless eyes that bubble up, focus and then rupture, the Presence of Lozixhil is blocks the portal to the Mouth until it is defeated. Note that the Tentacle attacks come from the within the portal, not from The Presence of Lozixhil.

Lozixhil, The Harvester

Lozixhil, The Harvester are the many facets of the hunger of Naxh’dhritl. Each of Naxh’dhritls mouths holds an aspect of Lozixhil, and when destroyed, that mouth will collapse in on itself (the portal closing in 1d10+5 turns). Lozixhil acts with no sense of self-preservation for it knows that its many facets will live on to consume endless souls to feed its master.

Each round Lozixhil will use it’s Corrupting Gaze to try to infect a target, then target the same target as well as another in order to create new abberations. These abberations may squeeze through the portal, allowed by Lozixhil to escape.

Maps

The Temple of Lozixhil

You can download the full resolution maps and cutouts from the gallery here.

Note that the cut out in the bottom right can be extracted using any image editor and used to reveal the secret door under the top left statue at the appropriate time! The gallery above also contains cutouts.

The Temple of Lozixhil

Credits and Inspiration

The inspiration for Draught of Final Remembrance, the flowers and the name of the Ebon Kindness, and the are taken from A Cosmology of Horrors by Shaun Hamill. The appearance of the temple and the form of Lozixhil are inspired by “Eldritch Summoning” by Lochlan Page.

Story and maps © Yvan Boily, @ygjb, https://boily.me

The Jubilant Gazelle

This article is available as a download, and can be edited on Homebrewery as well.

Shipwrecks and sunken boats are a common enough site along the shores, but not when traveling down a road more than 100 miles from the nearest body of water!

A Giff, as seen in Mordenkainen’s Tome of Foes

The Jubilant Gazelle was traveling from a world beyond this one to bring a shipment of gunpowder and cannons to a Gnome community (if you are playing in the Forgotten Realms, you can use Gnomengard, has been trying to deal with a White Dragon), when it was set upon by a dragon. While they were able to drive off the dragon, the ship was damaged and crashed.

Most of the Giff were killed on impact, but a small squad of them has scavenged what they could and have camped out on the ridge to the south-east.

Set along a road in a plain or lightly wooded location, this encounter is a drop-in ready random encounter, or can be a part of a quest to rescue or recover the goods the Giff were transporting.

The Crash Site

Nearly 60 feet long, the Jubilant Gazelle featured a single mast with an Ethereal sail that allowd it to navigate in virtually any environment, and until it crashed, it’s enchanted hull granted it a maximum speed of 175 ft (~2 mph). The remains of the ethereal sail, tattered and torn, flutter and flail as though under a strong wind, even though there isn’t much wind when the party arrives.

Both the aft and the forward deck are completely caved in and collapsed from the impact, and clearly the forward deck continued sliding forward digging deep ruts and scraping away the turf.

Scattered among the wreckage are a number of crates and barrels, mostly broken open and the goods within are ruined.

Positioned near the wreckage at the aft deck, and the foreward deck, the Giff survivors have placed a barrel of gunpowder, intending to fire at it if anyone tries to loot the wreckage, preferring to destroy their remaining cargo instead of allowing it to be salvaged.

A DC 15 investigation check will yield signs of tracks that have been clearly disguised leading to the south east ridge, and signs of some large objects being dragged.

The Survivors

Hidden on the ridge line to the south east is an encampment of Giff survivors, comprised of Captain Hayden Cunningham, who is a Giff (Mordenkainen’s Tome of Foes), a Giff Sharpshooter, and 3 Giff Crewmen.

The survivors are hostile to anyone who attempts to salvage anything from the ship, holding until the right opportunity. If one or more intruders are within 10 feet of either the gunpowder kegs, the sharpshooter will fire on the keg, causing it to ignore and start to burn. The next round, the keg will explode (30′ radius, 7d6 fire damage, DC 12 Dexterity save for half damage). Afterwards Captain Cunningham will offer Parlay and request that their wreck be left alone. Captain Cunningham would like to hire the group to bring back several wagons to transport the salvage, and his crew to the gnome community, but will also fight to the death to defend them. If the party returns with two wagons, Captain Cunningham will give them 250gp, and a letter of credit for an additional 250gp drawn on the Fraternity of Order, Sigil Headquarters. If pressed, he will provide the name of Aldin Haverschmidt, a Lawful Neutral Human Mage in Baldur’s Gate who will honour the letter of credit (and is also secretly from Sigil, and a member of the Fraternity of Order)

In addition to the remaining survivors here, Captain Cunningham sent an expedition to the gnome community seeking help to haul their remaining cargo. This expedition is comprised of a Giff Sharpshooter, and two Giff Crewmen, and left three days ago.

If you don’t have Mordenkainen’s Tome of Foes, it turns out the Captain Cunningham didn’t make it; in his place there is an additional Giff Sharpshooter, Alexis Harrison, and two more Giff Crewmen. Alexis is the ranking crew member, and will use the same tactics as Captain Cunningham

Salvage

With a DC 15 investigation check of the wreckage, they can find a satchel containing a contract with the gnomish community to deliver two cannons, 200 rounds of cannon shot, and 10 kegs of gunpowder. The contract contains details about the community. Bringing the damaged, but repairable cannons and the shot to them would yeild a reward of 500gp, and make the gnomes of the community friendly to the group.

In addition to the firearms the crew has, and the remaining 3 kegs of gunpowder, and approximately 300 rounds of shot, the party find provisions to last several weeks, a small chest containing 300gp, 100 sp, and two books Navigating the Phlogiston, and Atlas of the Crystal Spheres. With access to either of these two books, a player who is making an Arcana check related to the planes can choose to spend an hour researching to gain advantage on the check. The books are work 150gp each if they can find the right buyer, but even trying to sell them may attract interest the adventurers may not want…

Giff Crew

In addition to the Giff from Mordenkainen’s Tome of Foes, there are two other types of Giff presented below.

The Giff Crewman is the rank and file crew member of a Giff ship; less skilled and experienced in direct combat, they are still effective, and their knowledge of firearms can make them dangerous opponents. In combat they will often fall back to find cover to make ranged attacks, but once they are in hand to hand combat will work together to flank their opponents.

Giff Sharpshooters are skilled musketmen that prefer to use stealth and range to take out their opponents. Extremely skilled marksmen, they are fond of setting traps, or using Crewmen to lure out targets.

Maps

The full resolution maps can be found here

The Jubilant Gazelle (Day time)

The Jubilant Gazelle (Night time)

Infestations – Touched by the Far Realms

One of my recent campaigns involved the players investigating the tower of a mad arcanist investigating the Far Realms who clearly went to far and began to experiment with the powers they found there. These rules introduce a new spell, and rules for both afflicting an Infestation, and allowing players to recover from them.

In addition to finding the rules here, they can also be found on Homebrewery or downloaded as a PDF here.

Infestations

An Infestation is an unnatural infection from the Far Realms that slowly transforms it’s victim. Infestations bypass disease and poison immunities, but cannot infect aberrations, constructs, undead, or creatures without a corporeal form.

Why afflicted by an Infestation, a creature may not remove levels of exhaustion, except through Greater Restoration (restoring a single level), or a more powerful healing spell. and once a day must make a DC 15 Constitution saving throw, or gain a level of exhaustion. The DC of this saving throw increases by 1 for each level of exhaustion the victim has.

To remove the Infestation, a character must use a Greater Restoration spell while not having any levels of exhaustion, or a Wish.

New Spell: Affliction from Beyond

Affliction from Beyond

5th-level conjuration

Casting Time: 1 action
Range: touch
Components:VS
Duration: Permanent, until healed


Your touch inflicts a disease from another place. Make a melee spell attack against a creature within your reach. On a hit, the target becomes infested with your choice of Gibbering Madness, Cyclopian Visage, or Tyrants Limbs. Aberrations, constructs, undead, and creatures without a corporeal form are unaffected by this spell.

Gibbering Madness

The creature’s body develops blisters that look like mouths and eyes and cause extreme pain. The creature has disadvantage on Wisdom checks and Wisdom saving throws, and may use take the Blinding Spittle action

If the creature dies while afflicted with Gibbering Madness, they become a gibbering mouther at the start of their next turn, with their memories, but none of their abilities intact. They also suffer from Madness (per the rules in the DMG), and are unable to distinguish one living creature from another in their unending hunger.

Blinding Spittle: One of the blisters pops, casting forth a glob of fluid at a creature you can see within 15 feet. The glob explodes in a blinding flash of light on impact. Each creature within 5 feet of the flash must succeed on a DC 13 Dexterity saving throw or be blinded until the end of their next turn.

Cyclopian Visage

The creature is wracked with pain as their eyes turn green and cat like, while their skin turns thick and spiky. They have disadvantage on perception checks based on sight. They may also take the rotting gaze action.

If the creature dies while afflicted with Cyclopian Visage, they become a nothic at the start of their next turn, with their memories, but none of their abilities intact. They also suffer from Madness (per the rules in the DMG), and blame their former friends and allies for their transformation.

Rotting Gaze: The creature makes a DC 13 constitution save, or takes 1d8 necrotic damage as they visibly age (the visible effects pass within the hour).

Tyrants Limbs

A fleshy appendage with an eyeball at the end of it emerges from somewhere on the head of the creature, or on the “top” of the body if they lack a head. The creature can take the Forceful Sight action.

If the creature dies while afflicted withTyrants Limbs, they become a Gauth with their memories, but none of their abilities intact. They also suffer from Madness (per the rules in the DMG), and believe that anyone trying to help them is attempting to harm or kill them.

Forceful Sight: The targeted creature must succeed on a DC 13 Strength saving throw or be pushed up to 15 feet directly away from the gauth and have its speed halved until the start of the gauth’s next turn.

The Lord of the Forest

Hunter who tracks outside of time
Guardian lord of ancient rhyme
Brother stag in the musky glen
And consort of the Goddess in her woodland den
We call you forth as we make our way
Walking in your power every day
Guide us true in our hunt this night

One of the many allies the party encountered during the Ways campaign was the Lord of the Forest – an Actaeon, who made it’s home in the Black Forest to the north east of Lunima. While this particular Actaeon was male, Actaeons can be male or female.

This creature is partially inspired by the original creatures from Mystara, but also by some lyrics from the song “Hymn to Herne” by S.J. Tucker, and performed by Alexander James Adams. As usual, you can find The Lord of the Forest on Homebrewery or download a PDF.

There are many who look to the forests as a wilderness to be explored, or to be hunted for food, or to be cut for resources, but there are many creatures that make the forest their home. Those who reside in the Black Forest look to the Lord of the Forest for protection.

Peaceful Protectors

The Lords of the Forest are fey creatures that trancend boundaries between the planes, and seek to protect and heal the forests the frequent. When they can, they prefer to avoid confrontation but if they aren’t afraid to fight.

Allies of Nature Often responding to the calls of those who would deal with threats to their forests, they can provide healing, guidance, and protection. In rare cases, the Lord of the Forest may also transform their allies to transport them across great distances, but such a journey can be unsettling and have lasting impacts.

Roaming the planes Any single Lord of the Forest will usually protect forests across worlds, travelling between them when there is need. They will usually bring favored animals with them, or if they have transformed an opponent, they will bring them to another world, stranding them away from the forests where they will not be able to cause harm.

Implacable Hunters While the Actaeons are generally kind, and benevolent creatures, they love to hunt. When they mark their prey, they will run it to ground over any distance. Actaeons only hunt when hungry or seeking vengeance against a tresspaser who has despoiled the wilderness they protect.

Thouls of the Black Wind

When I was looking for a powerful enemy to supplement the goblins that are touched by the Black Wind (a malign, otherworldly force heavily inspired by The Black Wind from the Wheel of Time series by Robert Jordan), Thouls seemed like a natural fit. As usual, you can find a copy of this on the Homebrewery, or download a PDF!

Thouls are a foul mystical blending of hobgoblins with trolls and ghouls, originally from the Mystara campaign setting from TSR. Whatever mystical grafting processing was used to combine them left Thouls as living, but necrotic creatures whose foul touch is poisonous to all living things. Stinking of decay, and having the pallour of death, Thouls appear to be grey skinned, grey haired hobgoblins with long fingers that taper into wicked claws. While the first thouls were created by mystical means, they breed naturally with other goblinoids, with only a fraction of the offspring resulting in a thoul.

Shock troops. Thouls often form the front line of a goblinoid force – their poisonous touch can disable their adversaries, and their healing abilities make them more resilient than their allies.

Scavengers and Outcasts. Thouls don’t usually mix socially with other goblinoids – outside of a warband, or the few shamans and warlocks that set themselves apart from common thouls, they are very unpopular, reminding others of the hideous experimentation that other races often perform on goblin-kind.

Chosen of Elder Evils. While goblinoids are not usually the first choice when seeking minions, some thouls are smarter, wiser, or stronger then their kin, and this makes them attractive to gain a fast foothold in an area. Shamans and Warlocks that swear themselves to dark powers often rise to positions of power commanding warbands and tribes.

Voices of the Black Wind

Several tribes of goblinoids have been taken over by the Cult of the Black Wind, and of them, several thouls have been taught by the Seers to act as shamans. These Voices of the Black Wind answer to The Faceless and the Seers, and often lead warbands. The Voices of the Black Wind usually wear bonemail armor crafted from the remains of victims of the Black Wind.

Thoul Voice of the Wind Statblock; see the Homebrewery page for full text.

Hands of the Seers

Some of the thouls who are even more capable than those who are raised as shamans are offered the chance to trade their souls for more power, and become warlocks dedicated to the Black Wind. Lured by the false promise of the chance to become seers themselves, they give up aspects of themselves to become Hands of the Seers with the knowledge that, like all who serve the Black Wind, those who fail will be flayed and transformed into the Faceless.

https://homebrewery.naturalcrit.com/share/1Kgv_ILSwQV2ujEZO6nyW7gX5N714QLIMrzMz_pUNQAEz
Black Wind Bonemail Armour

The Servants of the Black wind can often be found wearing armour made from the bones of sacrifices to the Black Wind. Bonemail Armour comes in two varieties – bonemail shirts, and bonemail armour. Regardless of the type of armour, all bonemail grants disadvantage and diplomacy checks, but advantage on intimidation checks against intelligent, living creatures due to the hideous sound and visage the armour grants.

AmourCostArmor ClassWeight
Bonemail Shirt75 gp13 + Dex modifier15 lb
Bonemail Armour100 gp15 + Dex modifier25 l b

WeBePirates Tutorial (Part One)

This is the first of a 3 part series on building a local multiplayer arena game in Unity using Physics2D and Cinemachine. The first part will walk through creating the core mechanics of the game, including creating pirate ships, shooting cannons, and destroying ships. The second part will cover creating the core game loop, and the third will add User Interface elements and audio.

Once I have posted all three of the tutorial parts, I will record and put up a video illustrating the tutorial step by step on Youtube!

This tutorial assumes basic knowledge of using the Unity editor – you need to know how to import assets, create a scene, and should be familiar with the absolute basics. If you don’t have Unity installed, check out this video for a quick tutorial to get started.

The tutorial uses free resources from the following:

I recommend supporting the artists that are doing awesome work creating music and art for us to use in your games (or else this would all have been done with in mspaint and sound recorder!). You can download the bundled assets here.

Finally, if you need a copy of the completed code (for example, if you weren’t able to complete one of the steps, or ran into any issues), you can download the completed code for part one of the project here.

So lets get to it!

1.      Set up your project

  • Open Unity and start a new 2D project.
  • Unzip and copy the assets into your project. If you aren’t familiar with this, take a moment to watch the Unity user interface tutorial above – it will greatly help your understanding of the tutorial!

2.      Create a player ship

The first step is to create a ship that we can sail around and shoot cannonballs, and to do that we need to start with a fresh scene.  We are going to start with creating a ship with different components,

  1. Create a new scene, and save it (I called mine “DevelopmentScene”)
  2. Create a new game object
    1. Reset the Transform component
    1. Rename it to “PlayerShip”
  3. Drag hullSmall (1) from Ship Parts onto the game object
    1. Rename it to “Hull”
    1. Reset the Transform component
    1. Add a PolygonCollider component
      1. Check “Used by Composite” (ignore the error message that pops up, it will go away in step 5!)
  4. Drag sailLarge(12) from Ship Parts onto the Hull game object
    1. Rename it to “Sail”
  5. Select the “PlayerShip” Object
    1. Add a RigidBody2D component
    1. Add a CompositeCollider2D
      1. Change the Geometry type to “Polygons”
    1. Add a New Script called “ShipController”

A couple of notes about what we have done here – we have created two separate sprites that are children of a GameObject, added a couple of colliders to make sure that we have collision detection in the game engine, and added a RigidBody2D component to enable 2D physics for the game object. Just this step has unlocked a significant amount of functionality, including the ability to easily change the sprites for the hull and sails (important for showing damage to the hull, and for swapping the sails for the correct color for each player).

Your editor should look something like this at this point

At this point we are ready to start writing some code!  Open up the ShipController script, and lets get started!

a)      Basics of the Ship Controller

The ship will use Physics2D, and we will move the ship around by adjusting the Rigidbody2D component.  At the top of the class definition, and add the following code:       

     // Cached Rigidbody2D reference
     Rigidbody2D rb;
     [Header("Input")]
     // Input Map
     public string HorizontalInput = "Horizontal";
     public string VerticalInput = "Vertical";
     public string FireCannonsButton = "Fire1";
     public bool ControlsEnabled = true;
     [Header("Movement")]
     // Movement Variables 
     public float shipSpeed = 8;
     public float shipTurnSpeed = 180;        
     float movement;
     float turn; 

Find the “Start” medthod, and change it so that it has the following code in it:

     void Start()
     {
         rb = GetComponent<Rigidbody2D>();    
     } 

This will look up the Rigidbody2D component we added in section 5.a above, and make it available to the script.  The next step is to implement controls – go down to the “Update” method, and add a new method with the following code below:

     private void FixedUpdate()
     {
         if (ControlsEnabled)
         {
             movement = Input.GetAxis(VerticalInput);
             turn = Input.GetAxis(HorizontalInput);            
         }
         else
         {
             movement = 0f;
             turn = 0f;
         }
         Vector3 delta = movement * shipSpeed * transform.up * Time.fixedDeltaTime;
         rb.MovePosition(rb.position + (Vector2)delta);
         rb.MoveRotation(rb.rotation + turn * shipTurnSpeed * Time.fixedDeltaTime * -1);
     } 

Note that we have two methods with the name Update in them – the Update() method, and the FixedUpdate() method – these are named because they are called at different times.  There is a great explanation of what the difference between the two are, but for our purposes it’s enough to know that since we are using the Physics system, we want to place our physics related code in the FixedUpdate().  If you want to know more, you can head over to the Unity Learning site to watch this video about it!

In the code above we first check to see if controls are enabled – if they are, we retrieve the vertical axis for forward movement, and the horizontal axis input for ship rotation – in this case we are using the Unity default controls, so the left stick on a Direct3D controller, or WASD, or the Arrows on a keyboard.   If the controls aren’t enabled, we simply set the movement and turn values to 0, which will negate any movement.  Then we calculate how much the ship has moved by taking the movement  input and multiplying it by our ship speed, and then multiplying it into a matrix for 2D movement we use transform.up, which is a Vector2 that specifies (0,1), or movement in the Y axis.  We then multiply this by the Time.fixedDeltaTime value so that we slice up ship movement so we don’t try to move the whole ship speed in a single physics update.  Finally we use the Rigidbody2D object that we got earlier to update the position by adding the delta to the current position.

The next line does a similar thing for ship rotation by taking the turn input, multiplying it by the turn speed, and multiplying that by the fixed time interval,  again to tie ship rotation to the physics update – note that we multiply the rotation by -1, this just reverses the direction of the rotation, and makes sense for our control scheme.  We then use the MoveRotation method to rotate the ship by the turn amount.

There is an important point here – because we are using Rigidbody2D and leveraging the Unity Physics2D system, we shouldn’t just move the game object by updating it’s transform, that is why we are using the MoveRotation and MovePosition methods – these update the physics model.

At this point, save your script, and save your scene.  Press the “Play” button, and move your ship around!  If something doesn’t work, review each of the sections of code to make sure you entered them correctly, and take a look at the completed code from the zip at the top of this page. Finally, if you get really stuck, post a question here, or on the EastVanGameJam web page!

Great!  One odd thing – the ship slowly drifts down to the bottom of the screen!  That’s because we haven’t configured the Physics engine yet!  Each Unity Project has a wide range of settings, and in this tutorial we will configure both Physics, and Input.  Go to the “Edit” menu and select “Project Settings”, then click on “Physics 2D” – you will see a bunch of physics options that can be tweaked – the Unity documentation covers each one, but we are only concerned with the Gravity option – we want to change the Y value to “0”.  This is a top down game, and we don’t need gravity for that.

Click play again, and you should see that the ship isn’t drifting anymore!

Create a new folder in the project pane called Prefabs, then drag the “PlayerShip” object to the prefabs folder to create a prefab.  Prefabs are objects that can be easily instantiated from code, duplicated, configured, etc.  The Unity manual on prefabs has more information, including the new prefab editing mode, so as usual you can find more information on the Unity site! Save your scene, and project.

b)      Create a cannon ball!

Lets create a cannon ball! But before we do, one quick note… you will things like “In the Transform object, Set the position to {0, 3, 0} – if you see that it relates to a field in Unity that takes multiple values. In this case you would look for the Transform object in the Inspector, and see the row that says position, and enter the values in the order provided there.

  1. First, move the player ship so that we can make our cannon ball hit something!
    1. Select the Playership object and edit the Transform Object
      1. Set the position to { 0, 3, 0 }
      1. Set the Rotation to { 0, 0, 90 }
  2. Optional Step: Select the “Main Camera” object – make the background a neutral color to make things more visible; the rest of the tutorial will assume you did this, but if you don’t need to do this to see the cannonball clearly, it won’t affect anything!
    1. Click the Background color (probably a Dark blue, depending on your defaults), and change the R, G, B values to 250
  3. In the Ship Parts folder, find the “cannonball” asset, and drag it into the hierarchy.
    1. Rename the object to “Cannonball”
    1. Reset the transform.
    1. Add a Rigidbody2D
    1. Add a CircleCollider2D
    1. Add a new script called “CannonballController”

Now we are ready to write the CannonballController code!  There are a few simple things we want to accomplish – first, we want the cannonball to travel at a certain speed, and the cannonball to disappear after a certain distance.  Because this game is using physics, we will use the Rigidbody2D again.

Open the Cannonball controller script, and add the following code at the top of the class:

    public float speed = 10f;
    public float range = 1f;
    Rigidbody2D rb;

Delete the “Update” method, and update the class to include the following code:

void Start()
    {
        rb = GetComponent<Rigidbody2D>();
        Destroy(gameObject, Range);
    }

    // Update is called once per frame
    void FixedUpdate()
    {
        Vector3 delta = transform.up * Speed * Time.fixedDeltaTime;
        rb.MovePosition(rb.position + (Vector2) delta);
    }

The code in the start method does two things, again, it gets access to the Rigidbody2D component to update physics, and second, it schedules the destruction of the game object.  The Destroy() function allows you to clean up a gameobject, and also allows you to pass a time parameter.  If we were going to be fancy, we could actually calculate the range of the cannonball, but for simplicity we will simply say that the cannonball will fly for Range seconds, then be destroyed.  The FixedUpdate function works much the same as the ship controller, but doesn’t take any input.  Save your scene, and press play, and you should see your cannonball fly and knock the ship offscreen!  Keep an eye on the hierarchy pane – you will see the cannonball vanish after a second.

This code also contains one of our first game balance decisions – ships have a movement of 8, and cannonballs have a movement of 10 – that means that ships can’t outrun cannons, but that might not actually be the value we use in the end.  By configuring them as variables we can adjust these things through the development lifecyle and see how the game plays.

Lets jump back into the code, and add support for hitting things… underneath the FixedUpdate method, add the following code:

void OnCollisionEnter2D(Collision2D collision)
    {      
        Destroy(gameObject);
    }

At some point we will want to add sound, and explosion graphics.  We will also want to make the ship take damage, but first we need to get the ship firing.

Select the Cannonball object in the hierarchy and drag it into the prefabs folder.  Once that is done, delete the cannonball prefab, and the player ship from the scene.

c)      Adding Cannons

The next step is to add Cannons to the ship.  One cannon isn’t enough for a ship – lets go with four!

Double click on the prefab called “PlayerShip”, this will open it up in the Prefab Mode, which is a sort of sub-scene in Unity.  We are going to add Cannons to the ship, which will take several steps.

  1. Select the “Sail” object in the hierarchy
    1. Uncheck the box by the name in the Inspector – this will disable it, and get it out of the way for the next steps.
  2. Go back to our “Ship Parts” folder” and find the “cannonLoose” sprite.  Drag that onto the Hull object and set the transform values to the numbers below.
    1. Rename the object to “Cannon (1)”
    1. Set the Position to { -0.16, 0.02, 0}
    1. Set the Rotation to { 0, 0, 180 }
    1. Right click on Cannon (1), and select “Create Empty” and rename it to “Port”
    1. Drag the “Cannonball” prefab onto the “Port” game object.
    1. Now select the Port object again, and using the mouse, grab the little red arrow in the editor, and drag it out til the cannon ball is good distance away from the cannon.
      1. If you don’t know what a good distance is, set the Port transform to {0.16, 0, 0}
    1. Delete the Cannonball prefab from the Port object in the hierarchy
  3. Highlight Cannon (1) in the hierarchy then select the “Edit” menu, then “Duplicate” three times.  You should now have four Cannons.
  4. Select each of the cannons in order, and set them up as below:
    1. Cannon (2): Position to {0.16, -0.02, 0}, Rotation {0, 0, 0}
    1. Cannon (3): Position to {-0.16, 0.16, 0}, Rotation {0,0,180}
    1. Cannon (4): Position to {0.16, 0.16, 0}, Rotation {0,0,0}
  5. Re-enable the Sail object by clicking it, then checking the box by it’s name.

Oh no!  that doesn’t look good at all!  The cannons can be seen over the sail!  Lets set some sprite sorting orders. 

  1. Click on the Hull, and find the SpriteRenderer in the inspector, and set the Order in Layer to 1.
  2. Click on each of the Cannons (you can select them all at once, or do them one at a time).  Set the Order in Layer to 2.
  3. Click on the Sail and set the Order in Layer to 3

In the Scene pane, click on “Scenes” beside “PlayerShip” and you will be returned to your scene.  Drag the PlayerShip prefab back into the hierarchy, reset it’s transform and save your scene.

Now that we have added Cannons, we need to make them shoot!  So lets take a moment and make some game balance decisions – do we want to allow Auto-fire?  How fast do we want to let the player shoot their cannons?  I am going to say no to autofire, I want the players to do more than just steer around blasting away, and lets say it takes the crew two seconds to reload.

Lets pop open the ShipController script again and add some code.

First, find the Header(“Movement”) line and add the following code beneath that section:

    // Simple Fire Control System
    [Header("Fire Control")]
    // when the last time the ship fired
    float NextFire;
    public float FireDelay = 2f;
    public Transform CannonballPrefab;
    public Transform[] GunPorts;

The NextFire is used to determine when the next time the ship can fire is, and FireDelay is the amount of time the player has to wait to fire again after firing their cannons.  The CannonballPrefab variable will provide a reference to the Cannonballs we will shoot, and the Gunports array will track where the cannonballs come from.

Second, go down below the FixedUpdate method, and add the following code:

void FireCannons()
    {
        if (Time.time > NextFire)
        {
            foreach (Transform port in GunPorts)
            {
                Instantiate(CannonballPrefab, port.position, port.rotation, null);

            }
            NextFire = Time.time + FireDelay;
        }
    }

This code does a couple of really useful things: it checks to see if the current time is greater than the time allowed to fire – if the player hasn’t fired yet, NextFire will be 0, so it will always be later.  If the time is greater, then it runs through the array of gunport Transforms that we declared and creates a Cannonball at each location using the Instantiate() method.  Then, we update NextFire to be FireDelay seconds in the future.

Now that we have a way to fire our Cannons, we need to actually call that.  Lets go back up to the FixedUpdate() function, and find the If (ControlsEnabled) block.  Update it so that it looks like this ( you only need to add the highlighted lines, don’t change anything else!):

      if (ControlsEnabled)
        {
            movement = Input.GetAxis(VerticalInput);
            turn = Input.GetAxis(HorizontalInput);  
            
            if (Input.GetButtonDown(FireCannonsButton))
            {
                FireCannons();
            }
        } 

Save your script, and switch back to the Scene.  Double click the “PlayerShip” prefab to enter prefab mode, and make the following changes:

  1. Look at the ShipController component in the inspector.
    1. Set the FireDelay to 2 (it should be this already)
    1. Drag the “Cannonball” from the Prefab folder onto the CannonballPrefab field
    1. Expand Gunports
      1. Set size to 4
      1. One at a time, select the Port object from each Cannon and drag it to the Element slot that was created under GunPorts.

Save your scene. Press play, and then sail your ship around and press the Fire1 button (Left Control, Right mouse button, or the joystick button).

Don’t forget to save your scene. Make it a habit – it will save sadness and tears and googling how to attach a debugger to Unity to step in and break out of looks after you realize you hadn’t saved your scene after hours of work. Trust me, it’s good habit to get into 😀

d)      Another Player Has Entered the Game!

Now we need to add another ship to shoot at!  This is where we will learn the power of prefabs…

  1. Select the “PlayerShip” object in the scene hierarchy
    1. Rename the ship in your scene to “Player1Ship”. 
    1. In the ShipController change HorizontalInput to Horizontal1
    1. In the ShipController change VerticalInput to Vertical1
    1. Change the Transform position to { 4, 4, 0 }
    1. Change the Transform rotataion to {0, 0, 45}
  • Drag a copy of the PlayerShip prefab into the scene
    • Rename the ship in your scene to “Player2Ship”. 
    • In the ShipController change HorizontalInput to Horizontal2
    • In the ShipController change VerticalInput to Vertical2
    • Change the Transform position to { -4,- 4, 0 }
    • Change the Transform rotataion to {0, 0, 45}
    • Expand the object in the Scene Hierarchy so that you can find the Sail object, and click the circle select icon by the Sprite entry in the SpriteRenderer component, and select a different color sail — I used sailLarge (10).

Now we need to configure up the Input for the game.  Go into Edit, then Project Settings, then select the Input line in the left pane.  This is the input configuration for Unity.  If it’s not expanded, click on the triangle besides Axes to expand it.

  1. Right click on Horizontal and select “Duplicate Array Element”
  2. Select the top Horizontal
    1. Rename it to “Horizontal1”
    1. Delete “a” from Alt Negative Button
    1. Delete “d” from Alt Positive Button
    1. Click the little triangle to hide “Horizontal1”’s properties.
  3. Expand the next Horizontal
    1. Rename it to “Horizontal2”
    1. Replace “left” with “a” from Negative Button
    1. Replace “right” with “d” from Positive Button
    1. Delete “a” from Alt Negative Button
    1. Delete “d” from Alt Positive Button
    1. Click the little triangle to hide “Horizontal2”’s properties.
  4. Right click on Vertical and select “Duplicate Array Element”
  5. Select the top Vertical
    1. Rename it to “Vertical1”
    1. Delete “s” from Alt Negative Button
    1. Delete “w” from Alt Positive Button
    1. Click the little triangle to hide “Vertical1”’s properties.
  6. Expand the next Vertical
    1. Rename it to “Vertical2”
    1. Replace “down” with “s” from Negative Button
    1. Replace “right” with “w” from Positive Button
    1. Delete “s” from Alt Negative Button
    1. Delete “w” from Alt Positive Button
    1. Click the little triangle to hide “Vertical2”’s properties.
  7. Expand Fire1
    1. Change Positive Button to “right ctrl”
  8. Expand Fire2
    1. Change Positive Button to “left ctrl”
Once this is done you should have a two entries for Horizontal, Vertical, and Fire that are set up to allow two keyboard users.

If this doesn’t work out for you, you can simply download this InputManager.asset file, and place it in the ProjectSettings directory for your Unity project.  This will overwrite the settings with my copy of the file, and should get you working. If you don’t know where to find that, refer back to the path you set for your project when you created, in my example image at the beginning, I would put this file in D:\Tutorials\WeBePiratesTutorial\ProjectSettings

Close the Project Settings window, save your scene, and run your game.  At this point, your WASD, and Left controls should work for one ship, and the Arrows and Right controls should work for the other ship.

Once you have the ships working properly,  Drag each of the Player1Ship and Player2Ship objects into the prefab folder, and make sure you specify they are PrefabVariants.  This allows them to remain rooted to the PlayerShip prefab.

The next step is to get the ships taking damage when they get hit!

e)      Dealing Damage

In the game we want the ships be able to take a number of hits before they are destroyed – so lets give each ship a pool of hitpoints.  Back to the game balance — I think it’s fair to say that each ship needs to be hit by 10 cannonballs to be destroyed.  So lets say 100 hit points, and 10 damage.  In reality, that is only 5 shots if a skilled player can score a hit with two cannons at the same time.

Lets start by making Cannonballs have a property that says how much damage they do.  Click on the Cannonball prefab (not double click).  Then click Add Component to add a new Script called “DamageSource”.  Then open the script in your editor.

Delete the Update and Start methods, and then edit the file so it looks like this:

public class DamageSource : MonoBehaviour
{
    public float DamageAmount = 10;
}

Save the script, and then open the ShipController script.

Under the Fire Control section, add the following code:

    [Header("Health System")]
    public float health = 100;
    bool isDead = false; 

Then, lets add a function that we can call when we should take damage to make sure that we update Health, and check for all of the things related to taking damage.

void TakeDamage(float damage)
    {     
        health = health - damage;
        if (health <= 0)
        {
            isDead = true;
        }
    }

Now we need to actually do something to make sure that when we are dead, the ship doesn’t stick around!  After the TakeDamage method, lets add the following two functions.

    void Die()
    {
        // Do death stuff..
        Destroy(gameObject, 1f);
    }

    void Update()
    {
        if (isDead)
            Die();
    }

This does two things, one – it allows us to have a single place to add death related stuff – the Die function (we might want to play a sound, do an animation, etc), as well as destroying the ship.  We also add the Update function, which is a regular, non-physics update that simply checks if our isDead variable is set, and if so, it invokes Die(). 

Now – press play, pick a ship, sail it over to your enemy and DESTROY THEM!

The End of Part One

This is the conclusion of the first part of the tutorial – in the next section we will build the game loops and start in on the user interface elements to support player selection, and part 3 will conclude with fleshing out the user interface and adding Audio.

If at any point you need to compare where you are with the actual source code for this portion of the tutorial, you can find the completed code for this section in the downloads at the top of this page! If you enjoyed working through this tutorial, consider participating in the EastVanGameJam on August 16th to 19th! Register for the GameJam here!

Breathing Freely Update #1

“A goal without a plan is just a wish”

Thanks for taking a look at our second update to the fundraiser!  If you can, please visit the GoFundMe page to share it on social media, or make a donation if you can!

A special shout out to the folks who have donated since the fundraiser started:
Allison Waithe, Joshua Bixby, and the other 3 anonymous donors!  Thank you for your generous donations!

Last week I reached out to a few folks to find out if there was interest in distributing respiration masks to folks in Vancouver, and there was, so this week I sourced some low-cost respirator masks, decided on a funding platform, and launched a GoFundMe campaign to raise money. I have posted on the social media platforms I used, bugged coworkers, friends, and colleagues, and we are now over 50% of the way to our initial $1,000 goal!

Along the way I have spoken to a few other organizations that will help out with distributing the masks we get, but I have also learned a fair bit more about the effectiveness and limitations of the types of disposable masks we aim to hand out. One of the folks I have been discussing this plan with also shared Preparing for Extreme Heat and Poor Air Quality Events, an information seminar on how BC and Vancouver are preparing for this years, and future extreme weather events. The video is below, but the link to the BCNPHA above has more details about who and what the session entails.

The whole video is exceptionally informative, and worth watching, especially if you work with people who are at risk, and to know what resources are available in your neighbourhood. The information in this session was so valuable that it has resulted in a material change to how we will distribute the masks, and there will be more information on that later in this post! In the Question and Answer session at the end, the question came up around the effectiveness of respirator masks, and Dr. Sarah Henderson from the BC Centre for Disease control provided some great guidance on the effectiveness of masks. Overall, the simple question about masks made me question the value and efficacy of donating these masks, and so I reached out to Dr. Henderson for some more information, and she took the time to have a very informative discussion with me. Based on that discussion, I have a few key take-aways to make sure the distribution of these masks is a net positive for protecting at-risk and homeless folks.

  • N95 Masks may provide a false sense of security
  • N95 Respirator Masks are not a first line of defense
  • N95 masks provide protection when properly used
  • The best protection is to remain indoors

False Sense of Security

A key point that Dr. Henderson raises is that using a mask may present a false sense of security and encourage folks who are wearing one to do things they might not otherwise do – the example she uses is wearing a mask and going for a jog, when the same person might choose to jog indoors on a treadmill instead. Dr. Henderson also discussed in brief the protection that an N95 mask provides – protection against particulate matter, but not gases and volatile organics. This one hits close to home as folks with asthma are often more susceptible to the effects of those gases.

Over and above the risks that masks can’t protect against, the masks themselves may introduce a risk – worn properly they make breathing more difficult and could prove more of a hindrance to people with respiratory problems than the actual smoke the mask would protect against.

Not a First Line of Defense

Dr. Henderson (and really, all of the awesome folks involved in the seminar) drive home that the first line of defense are making sure that people have access to cool environments, clean air, and water as a way to cope with extreme weather events. At no point in all of the efforts that the City of Vancouver, BC Housing, and the BC CDC discussed in the session were masks raised – it was brought up in question at the end of the session from one of the delegates! Overall, this portion of the Q&A period made me question the value and efficacy of donating these masks. Based on discussions with other folks in community outreach, the focus on distributing these masks is to folks who are at-risk, and those poepolmay not have access to shelter or indoor locations with clean air. In order to make sure these donations are effective, I am revising the goal to providing the masks with the information at-risks folks need to able to get to and use first-line defenses discussed in the session above.

Properly using an N95 Mask for protection

Both Dr. Henderson and Dr. Schwandt talk about the effectiveness of using masks, and there are a couple of items that came up. First – for masks to be effective, they have to be N95 masks, regular dust masks, surgical masks, and clothing carry all of the negatives of wearing a mask without any of the benefits. Second, once you have an N95 mask, the key variable is fit. The masks are only effective if they are worn properly, and for that to happen they have to fit correctly, and this varies with face shape, size, and features such as facial hair, etc. In order to make sure distribution of masks, we are going to get at least three different types of masks. In addition, we have reached out to the folks who are going to help distribute the masks to figure out how to deliver training on helping the recipients to effectively wear the masks for good fit.

Remaining Indoors with clean air is the best defense

A repeated refrain for all extreme weather conditions is that staying indoors is the best way to protect yourself from wildfire smoke, and this year the City of Vancouver is expanding on the availability of Cooling centres and water fountains by also providing Clean Air centres that will feature locations that have air filters deployed to make sure folks who need to have a place with clean air they can go to. In order to make sure that mask recipients are aware of this, each mask will include an card with more information. So far the goal is to include:

  • a map feature Cooling & Clean Air centres, and water fountains
  • information about self-care during extreme weather
  • details about the benefits and risks of using the masks
  • instructions on how to wear the masks properly and care for them

Updated plan and pricing:

Practically speaking? Not much! I set out with the initial goal of raising $1,000 to provide masks for homeless people, with the goal of providing 1000 masks. The good news is that based on the estimated cost of getting the cards printed is approximately $150 from the first two estimates I got. Ideally, I should be able to find better pricing on the printing. The good news is that I have been able to find reasonable pricing for masks, and even though we are ordering 3 different types of masks, we should be able to find volume savings that that allow us to bring the cost for the masks low enough to cover the cost of printing the cards. At the absolute worst case scenario, we will provide approximately 850 kits rather than the goal of 1000, but

The goal is to have the design work for the information cards done this weekend, and to work with the community outreach groups distributing the kits (since it’s more than a mask now) to make sure that they have awareness of the issues with using the masks.

Our next update will probably be on Monday!

Breathing Freely

Thanks for checking out my brand new blog, I will be incorporating content from previous versions of my blog soon, but this post was more important and has a call to action - if you can, please donate to my GoFundMe campaign to get respirator masks to at-risk folks before we have more days with poor air quality.
Thanks!
Yvan Boily

As a person who suffers from Asthma, I have been to the emergency room several times due to air quality, so this summer Monique and I decided we were going to get respiration masks for the four of us. As I was looking at them I realized that four masks at $40 each is a small price to pay to make sure we can breath for a few weeks a year, but it’s unachievable for alot of people who are living with the affordability crisis in Vancouver. There are cheaper, disposable options, but even those can be too expensive or not enough of a priority for at-risk and homeless folks.

Inspired by posts like this one I decided that I wanted to make sure that homeless and at-risk folks have access to masks in my community. Every bit counts, but when I looked at how much I could personally commit to this, and the cost of buying masks, I realized that there had to be a better way to help out. Having seen so many crowdfunding campaigns, and buying products through them on Kickstarter and other platforms, and donating to several over the years, I decided to explore the different platforms and run a campaign to raise money. While researching this, I realized it wasn’t enough to get money to buy a large volume of masks, there are logistical challenges to getting them to a large number of at-risk folks, and especially making sure that the folks who need them can get them each day that they need them. I could hand out a few masks, but getting them to people consistently isn’t something I can do myself. I reached out to homeless shelters, and to neighborhood outreach groups, and started to build a small network of people who can help to distribute them – it turns out there is a recognized need for this, with just one group expressing a need for 200 masks to help the folks they will work with over the summer.

I did some research and found a bunch of options for acquiring low cost, single use, vented respirators, and depending on volume can get the price down to as low as $1.10 (the price goes lower, but that’s at the 10K plus units). I settled on the 3M 8511 N95 masks, but may choose a comparable product based on funds raised, and community needs to make sure we help as many people as possible.

A picture of a single use 3M N95 respirator mask

While the idea of buying a pile of single use, mostly synthetic disposable products is not ideal for the environment, they make sense for the folks who will receive them:

  • Low cost, so it is easy to replace them if they are lost, damaged, or stolen
  • Can be used more than once (I have used similar masks for contracting and home renovations)
  • Light, small, and somewhat durable if they need to be stuck in a pocket
  • Vented masks are cooler, which is important during the heat waves that are often the driver for the forest fires causing the problem

Now that I have a way to distribute them, and the means to get the product I need your help – I decided to use GoFundMe as a platform to raise the funds I need to help these people. GoFundMe allows me to withdraw money over the course of the fundraiser rather than a Kickstarter style approach that only allows us to get the money if the campaign is succesful. As of this morning we have raised over $200, which means that the first masks will be ordered in the next couple of days! c, but if you can’t donate there are other ways you can help:

  • Share the campaign on social media sites like Twitter, Facebook, and LinkedIn
  • Tell your friends and colleagues about it, especially those who are socially minded
  • Ask me about how you can get involved in starting your own, similar campaign in your own community if people face similar challenges!
  • Work to reduce your carbon footprint and encourage others to be more aware!

Finally, this campaign will be running through the whole summer, and to make sure that these funds go to good use, any extra funds at the end of the campaign will be distributed to the charitable organizations that help out with mask distribution – I will be posting regular updates on the GoFundMe page to provide more information about who these are on that site once we get the masks out to folks!

Thank you so much for your time and effort in helping to promote and raise awareness of this cause!