Appnovation Technologies: Simple Website Approach Using a Headless CMS: Part 1

Planet Drupal - 6 February 2019 - 12:00am
Simple Website Approach Using a Headless CMS: Part 1 I strongly believe that the path for innovation requires a mix of experimentation, sweat, and failure. Without experimenting with new solutions, new technologies, new tools, we are limiting our ability to improve, arresting our potential to be better, to be faster, and sadly ensuring that we stay rooted in systems, processes and...
Categories: Drupal

Multi-Layered Encounter Tables

Gnome Stew - 12 hours 36 min ago

Table… layers… nothing?

Recently I was thinking my encounter tables seemed kind of dull. Taking some inspiration from this great article series from Justin Alexander, (specifically this part) I decided to add some layers to my encounter tables. This is accomplished pretty simply. By making a handful of themed tables that are rolled on simultaneously, it creates a more complicated set of results that are easy to work with and determine.

For my game I kept my standard encounter table as is, and just added another 2 layers: a table for interesting environmental features and a table for small treasures. By rolling on all three at once, I can create any combination of the three layers and make the result more interesting both because it has more interesting parts and because of interaction between the features. For example, if I roll some monsters and a small gem vein, maybe the monsters are trying to dig up the vein themselves. If I roll a water feature and a treasure maybe the treasure is corroded and lying at the bottom of the water, etc…

Here’s an example for exploring a ruined city area:

To check for an encounter, roll a d10 each of the three tables. On a 1-2 that component is present. on a 3-10 it is not. Then roll on the individual tables as needed.

Roll 2d4 Encounter 2 1d2 dust devils 3 1d6 worn skeletons with decayed weapons/armor 4 1d4 small rubble elementals (re-skinned earth elementals) 5 1d6 Treasure hunter NPCs 6 1d4 wild dogs 7 nest of 1d8 rats and 1d3 dire rats 8  giant hunting spider


Roll 2d4 Terrain feature 2 precariously balanced pile of rubble 3 Sinkhole hazard 4 Ruins with vantage point/platform 5 Water filled area (depression, fountain, basement etc…) 6 Overgrown scrub/grass may be edible variety 7 Bit of carving/plaque 8 small 5 room basement/lower level


Roll 2d4 Treasure 2 Map or note 3 piece of art or jewelry worth 10-80 gp 4 Misc interesting object* 5 3d10 lbs of bent and rusty metal salvage 6 Well preserved piece of gear 7 1d10 each loose cp, sp, gp, and pp 8 Dented lockbox with 3d4 small gems of 10-40 gp value each

So we might get any of the following encounters:

  • Nothing
  • The remains of an old garden. It is overgrown and thorny but a few bitter green melons can be harvested from it.
  • A group of 5 treasure hunters. They have recovered a misc interesting object.
  • 3 worn skeletons with ruined gear
  • etc…

A few notes:

  • Because we’re rolling for each table separately, it’s possible to have one or two of the components without the other(s) I don’t have a problem with that. If it doesn’t work for your game, feel free to change your roll method.
  • Also because we’re rolling separately, the chance of “something happens” isn’t .2 even though each table triggers on a 1-2. Instead the chance of “something happens” is 1-(chance of fail 1 * chance of fail 2 * chance of fail 3). In this case 1-(.8*.8*.8)=.488 If you don’t like that rate, change the base rates for the three tables. They also don’t all have to be the same. I used .2 each for simplicity, but you could decide that encounters have a .2 chance, features a .3 and treasures a .1 (which gives an overall chance of .496) or .2 .2 .05 (.392). Whatever works for you.
  • Hey, that’s a lot of rolling. If you like the old school approach, this is a great use for the die ten million. For me, I’ve got most of my notes in Google Docs anyway so I used Google Sheets and the randbetween, if, vlookup, and match functions to roll an entire day’s worth of encounters on every update. Easy-peasy.
  • Of course what tables you find useful and interesting are entirely up to you and depends on your game.

And a shout out:

  • You see the table above has a Misc Interesting object on it. On my tables, that’s just a link to the 100 Filched Items From Picked Pockets And Cut Purses PDF from Fishwife Games but you could just as well use the 5e DnD Trinkets table (Players Handbook page 160) or any other similar table you like. I just find it’s fun to have a big ol’ list of little interesting crap in my treasure tables.
Categories: Game Theory & Design

Fuzzy Thinking: The Neutron Vortex Plasma Rifle

RPGNet - 17 hours 37 min ago
Fuzzy mass.
Categories: Game Theory & Design

Video Game Deep Cuts: The Astro Genius, Redeemed

Social/Online Games - Gamasutra - 21 October 2018 - 7:16pm

This week's highlights include a rave for Astro Bot VR, why game devs aren't getting Genius Grants, and a delightful Red Dead Redemption recap, among others. ...

Categories: Game Theory & Design


New Drupal Modules - 21 October 2018 - 5:38pm
Paywall module has been moved to Github.

Paywall module allow node author set price to each node, and guide visitors to pay for full access.

By default, paywall module will hide the second half of content (see screenshot below). But if you want better control of it, you can use [$][/$] tags to define paid/hide areas manually.

Categories: Drupal

Views Math

New Drupal Modules - 20 October 2018 - 9:31pm

Different mathematical features for views.
The work is in progress.

Categories: Drupal

Video embed PeerTube

New Drupal Modules - 20 October 2018 - 5:59pm

This module provides PeerTube handler for Video Embed Field.
Users can add PeerTube videos to their site by pasting the video URL into a video embed field.

Video Embed Field

Categories: Drupal

Google Hire

New Drupal Modules - 20 October 2018 - 1:08pm

Google Hire is an applicant tracking and recruiting
system. This module provides integration between Drupal and the Google Hire API.

Categories: Drupal

Group Behavior

New Drupal Modules - 20 October 2018 - 12:14pm

THis module provides options to have a group content behave like a group, by creating, updating and deleting a group whenever content is created, updated, deleted. For the roadmap see #3008016: Add the option to have any entity behave as group.

Categories: Drupal


New Drupal Modules - 20 October 2018 - 11:18am

Netgíró clears payments through the payment module. When using this module with Drupal Commerce the Payment for Drupal Commerce.


Modifications inital development was sponsored by Netgíró

Categories: Drupal

Dynamic Asset

New Drupal Modules - 20 October 2018 - 6:40am

This module give you the ability to add dynamic css / js to your website.
After adding this module you can define dynamic options in your assets and define it's route to load them dynamically.

Categories: Drupal


New Drupal Modules - 20 October 2018 - 12:55am

The Calculated Rate field allows you to leverage token and other fields in a way to create calculated values that can show for content elements. For example what if you needed to calculate how much something cost based on a set of conditions? Currently, this requires a bit of custom code. This module aims to create a field that provides the ability to do something similar from the UI.

Categories: Drupal

Fast Token Browser

New Drupal Modules - 19 October 2018 - 11:31am

Fast Token Browser extends the Token module to provide an improved interface for browsing and inserting Tokens. It resolves the excessive memory usage and unresponsive interface when using the token browser on a site with a large number of tokens. It also allows the token browser to work with a very low PHP memory limit without needing to constrain the maximum token depth.

You do not need Token Tweaks if you install this module, though having both installed will not cause any conflicts.

Categories: Drupal

Devs air grievances with Steam reviews, regional pricing, and dev support

Social/Online Games - Gamasutra - 19 October 2018 - 11:12am

An insightful read from Polygon gathers feedback from several game devs about Steam†™s review system, regional pricing, and overall developer support. ...

Categories: Game Theory & Design

Splash Damage ends Dirty Bomb live development

Social/Online Games - Gamasutra - 19 October 2018 - 9:45am

According to a post from the company, Dirty Bomb looks to be another case of a live game with costs that started to outweigh its income, an unfortunate inevitability for most live free-to-play games.   ...

Categories: Game Theory & Design

Interactive widget for Recurring Dates Field

New Drupal Modules - 19 October 2018 - 7:09am

Interactive widget forked from Recurring Dates Field.

Categories: Drupal

Orbit Prediction For VR Dogfighting - by Mo Ga Blogs - 19 October 2018 - 6:49am
Another little step along the way. This is the second iteration of the orbit flight instrument for Orbital Dogfight. The video is just raw capture.
Categories: Game Theory & Design

Kliuless? Gaming Industry ICYMI #8 - by Kenneth Liu Blogs - 19 October 2018 - 6:48am
Each week I compile a gaming industry insights newsletter that I share with other Rioters, including Riot’s senior leadership. This edition is the public version that I publish broadly every week as well. Opinions are mine.
Categories: Game Theory & Design

Don’t Invest In Your Campaign…At First

Gnome Stew - 19 October 2018 - 5:00am

It is fair to say that I have run a number of campaigns. Some epic, some pretty good, and plenty that were meh or worse. Over time, I have gotten a good feel about if a campaign has what it takes to be worthwhile or not, but it takes a few sessions to be sure. Knowing that, I have made it a practice not to put too much detail or effort into an early campaign until I am sure that it is going somewhere.

The 50 Page Campaign

I did not always follow the advice above. There was a time when I would spend quite a bit of time working on campaign ideas, settings, plots, NPC’s, etc in order to prep for a new campaign. Some time back, at the turn of the century, I was setting up to run a Mutants & Masterminds campaign. I got really into creating this alternative history for the world, deriving all the changes in modern history and culture with the arrival of superheroes during World War II.

As settings go, it was easily one of my best ones, and it culminated with a 50-page alternative history that explained the whole setting. The campaign lasted about 4 sessions before the players lost interest. Truthfully the setting had some issues. It was plenty realistic…too realistic.

The point is that I spent way more hours working on the setting/campaign than getting to play the actual campaign. That for me was rock bottom. After that, I swore off investing too much in campaign prep.

The Campaign Prep Tightrope

There is a problem with not investing in campaign prep, and that is that the game may not be interesting enough to keep running unless you do some prep, and that by doing none you may have committed your game to failure. So you have to do some prep to make sure the game takes off, but not so much that if it fails you will regret the time spent. It’s a tightrope.

Depending on the game you play, what you need to prep for a campaign is going to differ. Some RPG’s — like many Powered by the Apocalypse games — do enough initial prep that just running the first session generates enough material to get going. Other games are not that helpful, and you wind up having to do some work to have enough to get the game started.

The Rule of Four Sessions

I have a rule about campaigns. I give them four sessions (defined as the time we sit down to play a game) before I ask my players if the game is worth continuing. Four sessions gives you a reasonable time to understand the mechanics, the setting, etc. Four sessions also gives the players enough time to figure out if their characters work, need tuning, etc.

 Here is the thing. I don’t save limping campaigns, I humanely put them down. Share1Tweet1+11Reddit1EmailHere is the thing. I don’t save limping campaigns, I humanely put them down. Either my players are positive and want to keep playing, or I take the next book off the massive stack of unplayed games I have collected via Kickstarter, and we play something else. A’s are passing in this class.

Just Enough Campaign Prep

Now we are getting somewhere. Knowing that in four sessions the fate of the game will be decided, your prep should be scaled appropriately. What does that mean? Here are a few tips:

  • Avoid deep conspiracies and plots. Those are a lot of work and need more than 4 sessions to complete. If the game takes off, you can build one of those starting in session 5.
  • Be evocative and vague. When you name and describe things, make sure that you are being evocative enough to capture the players’ attention, but at the same time be vague so that you don’t have to invest time in creating backstory. For instance: The God of Smiling Retribution.
  • Run a one-shot. Depending on how much material you can get through in four sessions, you may not need more than a one-shot (defined as a single story; start, middle, and end) to play through all your sessions. In many cases published material winds up being able to fill that time.
What If It Takes Off?

So after the fourth session, everyone is on board. Now is the time to ramp up your campaign prep, and get this campaign into full gear. Here are a few ways to make that happen:

  • Build an Arc. Plan out a multi-session story arc to be the first arc of the campaign.
  • Add depth to a few NPCs. Based on the NPCs that the players took interest in during the first four sessions, add some backstory and motivations to them.
  • Build your villains. Did the opposition in the first four sessions survive? If so, its time to get them ready for a campaign. Figure out who they work for, what other plans they have, and who works for them. If they did not survive, who is going to miss them and want revenge?
  • Retcon. If you made something in the first four sessions and your game survives, then you can retcon what that meant to the greater campaign world.
Know When To Hold ‘Em…Know When To Fold ‘Em

Starting a campaign can take some work, but don’t make it too much work for yourself until you know you have something good going on. A solid four sessions will let you know if you have a campaign or if you have been playing a slow one-shot. Make sure you prep enough to make the game interesting but no so much that you will regret if the game does not take off. Likewise, once a game takes off, dive in and build out that awesome campaign you envision.

What about you? Have you ever over-prepped on a campaign? Do you have a four-session rule? How do you know when a campaign is a hero or a zero?

Categories: Game Theory & Design

Redesigning a website using CSS Grid and Flexbox

Dries Buytaert - 18 October 2018 - 3:53pm

For the last 15 years, I've been using floats for laying out a web pages on This approach to layout involves a lot of trial and error, including hours of fiddling with widths, max-widths, margins, absolute positioning, and the occasional calc() function.

I recently decided it was time to redesign my site, and decided to go all-in on CSS Grid and Flexbox. I had never used them before but was surprised by how easy they were to use. After all these years, we finally have a good CSS layout system that eliminates all the trial-and-error.

I don't usually post tutorials on my blog, but decided to make an exception.

What is our basic design?

The overall layout of the homepage for is shown below. The page consists of two sections: a header and a main content area. For the header, I use CSS Flexbox to position the site name next to the navigation. For the main content area, I use CSS Grid Layout to lay out the article across 7 columns.

Creating a basic responsive header with Flexbox

Flexbox stands for the Flexible Box Module and allows you to manage "one-dimensional layouts". Let me further explain that by using an real example.

Defining a flex container

First, we define a simple page header in HTML:

Site title Navigation

To turn this in to a Flexbox layout, simply give the container the following CSS property:

#header { display: flex; }

By setting the display property to flex, the #header element becomes a flex container, and its direct children become flex items.

Setting the flex container's flow

The flex container can now determine how the items are laid out:

#header { display: flex; flex-direction: row; }

flex-direction: row; will place all the elements in a single row:

And flex-direction: column; will place all the elements in a single column:

This is what we mean with a "one-dimensional layout". We can lay things out horizontally (row) or vertically (column), but not both at the same time.

Aligning a flex item #header { display: flex; flex-direction: row; justify-content: space-between; }

Finally, the justify-content property is used to horizontally align or distribute the Flexbox items in their flex container. Different values exist but justify-content: space-between will maximize the space between the site name and navigation. Different values exist such as flex-start, space-between, center, and more.

Making a Flexbox container responsive

Thanks to Flexbox, making the navigation responsive is easy. We can change the flow of the items in the container using only a single line of CSS. To make the items flow differently, all we need to do is change or overwrite the flex-direction property.

To stack the navigation below the site name on a smaller device, simply change the direction of the flex container using a media query:

@media all and (max-width: 900px) { #header { flex-direction: column; } }

On devices that are less than 900 pixels wide, the menu will be rendered as follows:

Flexbox make it really easy to build responsive layouts. I hope you can see why I prefer using it over floats.

Laying out articles with CSS Grid

Flexbox deals with layouts in one dimension at the time ― either as a row or as a column. This is in contrast to CSS Grid Layout, which allows you to use rows and columns at the same time. In this next section, I'll explain how I use CSS Grid to make the layout of my articles more interesting.

For our example, we'll use the following HTML code:

Lorem ipsum dolor sit amet

Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium.

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.

Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.

Some meta data Some meta data Some meta data

Simply put, CSS Grid Layout allows you to define columns and rows. Those columns and rows make up a grid, much like an Excel spreadsheet or an HTML table. Elements can be placed onto the grid. You can place an element in a specific cell, or an element can span multiple cells across different rows and different columns.

We apply a grid layout to the entire article and give it 7 columns:

article { display: grid; grid-template-columns: 1fr 200px 10px minmax(320px, 640px) 10px 200px 1fr; }

The first statement, display: grid, sets the article to be a grid container.

The second statement grid-template-columns defines the different columns in our grid. In our example, we define a grid with seven columns. The middle column is defined as minmax(320px, 640px), and will hold the main content of the article. minmax(320px, 640px) means that the column can stretch from 320 pixels to 640 pixels, which helps to make it responsive.

On each side of the main content section there are three columns. Column 3 and column 5 provide a 10 pixel padding. Column 2 and columns 6 are defined to be 200 pixels wide and can be used for metadata or for allowing an image to extend beyond the width of the main content.

The outer columns are defined as 1fr, and act as margins as well. 1fr stands for fraction or fractional unit. The width of the factional units is computed by the browser. The browser will take the space that is left after what is taken by the fixed-width columns and divide it by the number of fractional units. In this case we defined two fractional units, one for each of the two outer columns. The two outer columns will be equal in size and make sure that the article is centered on the page. If the browser is 1440 pixels wide, the fixed columns will take up 1020 pixels (640 + 10 + 10 + 180 + 180). This means there is 420 pixels left (1440 - 1020). Because we defined two fractional units, column 1 and column 2 should be 210 pixels wide each (420 divided by 2).

While we have to explicitly declare the columns, we don't have to define the rows. The CSS Grid Layout system will automatically create a row for each direct sibling of our grid container article.

Now we have the grid defined, we have to assign content elements to their location in the grid. By default, the CSS Grid Layout system has a flow model; it will automatically assign content to the next open grid cell. Most likely, you'll want to explicitly define where the content goes:

article > * { grid-column: 4 / -4; }

The code snippet above makes sure that all elements that are a direct sibling of article start at the 4th column line of the grid and end at the 4th column line from the end. To understand that syntax, I have to explain you the concept of column lines or grid lines:

By using grid-column: 4 / -4, all elements will be displayed in the "main column" between column line 4 and -4.

However, we want to overwrite that default for some of the content elements. For example, we might want to show metadata next to the content or we might want images to be wider. This is where CSS Grid Layout really shines. To make our image take up the entire width we'll just tell it span from the first to the last column line:

article > figure { grid-column: 1 / -1; }

To put the metadata left from the main content, we write:

#main article > footer { grid-column: 2 / 3; grid-row: 2 / 4; }

I hope you enjoyed reading this tutorial and that you are encouraged to give Flexbox and Grid Layouts a try in your next project.

Categories: Drupal


Subscribe to As If Productions aggregator