New Drupal Modules - 1 June 2018 - 10:26am
Categories: Drupal

New Previews Up From Battlefront For Team Yankee

Tabletop Gaming News - 1 June 2018 - 10:00am
The folks over at Battlefront have a lot going on in this update. First off, with Free Nations coming out next weekend, they’ve got various previews up for that. Then, they also have a look at an updated version of the Bishop, with new cards so you can add them to your Flames of War […]
Categories: Game Theory & Design

Paizo Releases Blood of the Ancients for Pathfinder

Tabletop Gaming News - 1 June 2018 - 9:00am
Where you come from can tell you a lot about where you’re going. While certainly not beholden to any particular genealogical path, one’s bloodline can certainly have an effect on your current life. In Blood of the Ancients, that is even more evident. The new book for Pathfinder from Paizo, it gives players a chance […]
Categories: Game Theory & Design

JSON Form Editor

New Drupal Modules - 1 June 2018 - 8:33am

"Imagine if you could create Drupal content types with ..well now you can!"

This module uses json-editor to produce flexible input elements with a simple form display configuration.
When the form is submitted the resulting values saved in to database using JSON datatype so that the individual user inputted values can be queried over even indexed.

Categories: Drupal

Onna-bugeisha of Asakura Available to Pre-Order For Test of Honour

Tabletop Gaming News - 1 June 2018 - 8:00am
In Japan, it wasn’t just the men who could train in martial arts and learn the Samurai ways. Women were able to do that as well, and many noblewomen did just that. They were called the Onna-Bugeisha, and if you’d like to add these kick-ass warrior women to your Test of Honour collections, you can […]
Categories: Game Theory & Design

The unexpectedly long tail of a shmup called AQUA KITTY. - by Dugan Jackson Blogs - 1 June 2018 - 7:36am
In game development things do not always go to plan, and sometimes in a good way! In this blog post we track the long tail of a small shmup, featuring cats in submarines.
Categories: Game Theory & Design

Trail Graph

New Drupal Modules - 1 June 2018 - 7:33am
Categories: Drupal

Unlimited Power Now Available For Star Wars RPG

Tabletop Gaming News - 1 June 2018 - 7:00am
With great power comes great responsibility. With Unlimited Power, then, comes a whole bunch of new options for your Star Wars RPG character as well as new items for your GM to use in the game. Yes, the latest book is now available. As one would imagine, it revolves around the Force, the mystic… well… […]
Categories: Game Theory & Design

Indie Game Marketing: The Value of Fans - by Telly Lee Blogs - 1 June 2018 - 6:36am
Do fans matter? That’s the question I asked myself after catching up with some fellow indie developers that I had exhibited with at a recent B2C event. It depends on how you valuate your fans...
Categories: Game Theory & Design

The Surreal Philosophy of Hollow Knight - by Zachery Wolf Blogs - 1 June 2018 - 6:34am
A textual analysis of Hollow Knight. I look at surrealism and argue that the game pulls from it in highly effective ways.
Categories: Game Theory & Design

Alpha Legion Primarch, Squads, and Doors Available to Order From Forge World

Tabletop Gaming News - 1 June 2018 - 6:00am
*leans in close to everyone’s ear and whispers* “Hail Hydra…” Ok, so that’s a different franchise, but it works in this particular instance, since Forge World has started taking orders for new Alpha Legion figures (their symbol is the hydra, if you didn’t know). The new kits include Alpharius, the Primarch of the chapter, as […]
Categories: Game Theory & Design Rebranding ComputerMinds - Part 5: Development

Planet Drupal - 1 June 2018 - 5:01am

Let's have a quick look through our development process on this project and pick out some of the more interesting bits. As briefly mentioned in the last article we are using a composer set up and all code is version controlled using git on github. All pretty standard stuff.


In the previous article I briefly discussed how we set up Pattern Lab. Before getting stuck in to the components that would make up the pages of the site, we first needed to set up some global variables and grid. Variables allow us to reuse common values throughout the SCSS and if we need to make a change we can do so centrally. After adding variables for each of the colours and also a colour palette mapping which would allow to loop through all colours if we needed to throughout the project, we added variables for padding that would be used throughout and also font styles, after importing from Google Fonts.


CSS Grid

Although still relatively new, CSS Grid is a web standard and works in all modern browsers. So much simpler than using grid libraries like Susy we were keen to start using it on our projects and this was the perfect one on which to try it out. Set up was simple, partly due to the simple grid in the designs but mostly due to the simplicity of CSS Grid itself. A few lines of SCSS and the grid wrapper was set up:

.grid { display: grid; grid-auto-rows: auto; grid-gap: 20px; grid-column-gap: 20px; grid-template-rows: minmax(0, auto); }

This declares the grid, sets a consistent gap of 20px and sets a broad size range for the rows. As well as adding the .grid class to the wrapper of where we'd like a grid, we also need to add another class to define how many columns that grid should have. Defining, in SCSS, a simple mapping allowed me to create a loop to generate the column classes we needed:

// Column mapping $columns: ( one: 1, two: 2, three: 3, four: 4, five: 5, six: 6, ); // Generate column classes @each $alpha, $numeric in $columns { .grid--columns-#{$numeric} { grid-template-columns: repeat(#{$numeric}, 1fr); @include to-large { grid-template-columns: repeat(1, 1fr); } } }

This loop generates a class for each of the potential number of columns we might need. The last @include in the above code simply resets the column definition, making all columns full width on smaller screens. Now, all we needed to do was add 2 classes and we'd have a grid!

Occasionally, we'd have a need for grid items to to span more than one column. Using the same mapping as before, I created a simple loop that would generate classes to define different column spans. These classes could then be applied to the immediate children of the grid wrapper.

.grid__item { @include from-large { @each $alpha, $numeric in $columns { &--span-#{$alpha} { grid-column: auto / span #{$numeric}; } } } }

Now we have complete control over our grid. Here's a example of how it's used.

First item Second item spanning two columns Third item spanning three columns


Pattern Lab

In the previous article I mentioned the setup of Pattern Lab and Emulsify but didn't look in to the actual development, so let's do that now! Although we're used to coding SCSS in a modular way here at CM, with Pattern Lab's stand alone components essentially working like modules we actually don't need to take too much care to produce nice clean code. Each SCSS file is only catering for a small component on the page and as such is usually small and specific.

But, as well as including our pattern specific code within each component's directory we needed to ensure that we also considered working in a SMACSSy way to reduce the CSS we were generating. We didn't want multiple classes applying the same styling, so any rules that would be reused and consistent, like padding, were placed inside the Base folder in a Base SCSS file.

Of course, once we had defined our classes we needed to get them in to the Pattern Lab Twig templates. As components will have variations we can't just hard code the classes in to the templates, we need to pass them in as variables. Passing variables to Twig files is super simple and with Emulsify 2.x there's now even Drupal Attributes support with the addition of the BEM Twig extension. As we are likely wanting to pass multiple classes to the same element we can pass in a simple array of modifiers and render it out in the Twig template. So in a Drupal preprocess we can prepare some modifiers (we'll look at passing these on to the Pattern Lab Twig files later):

$variables['heading_modifiers'] = ['centered', 'no-space'];

And then in our Twig file we pass this through the BEM function:

{% set heading_base_class = heading_base_class|default('h' ~ heading_level) %} {{ heading }}

Which renders the markup as:




The beauty of using Pattern Lab is the ability to work simultaneously on frontend and backend development. Before bringing more hands on deck I was able to begin the backend of the site before getting even close to completing the frontend. As mentioned earlier, the codebase was set up before the Front End work began so we could jump straight in to the Emulsify theme. Using composer allowed us to quickly get Drupal 8 and a bunch of contrib modules we needed so when we were ready to start on the backend we could jump straight in.

This site required nothing too complex in terms of backend development and the work was more a task of building content types and views to display content as per the designs. That said, we did utilise the Paragraphs module allowing us to create reusable entities, or tiles as we're used to calling them, as they are used extensively throughout the designs.



Something that hasn't been standard in our Drupal 8 builds since the release is configuration. Gone are the days of bundling settings in to features, Drupal 8 Core comes with configuration management tools. In the early days, one of our senior developers created cm_config_tools - a module to give developers precise control over what config to export. Drupal 8 has progressed since then and the timing of this project allowed us to use a new module, Configuration Split.

Configuration Split builds on Drupal Core's configuration management ability to export a whole set of a site's configuration by allowing us to define sets of configuration to be exported to separate directories. It's then possible to define in settings.php which directories to include when importing/exporting. As we were committing settings.php to git we could include the main config directory here and then have a local.settings.php (not committed to git) to define the database and any other config directories to include:

## Enable config split settings $config['config_split.config_split.local_dev']['status'] = TRUE; $config['config_split.config_split.local_overrides']['status'] = TRUE;

This means we can have configuration solely for use when developing (things like Devel and Field_UI). It's also possible to override settings that are included in the main config export, locally. This allows us to run local environments without fear of interfering with live functionality, like affecting comments by changing the Disqus Domain, for example.

Importing and exporting works the same way as Core's configuration management, by using Drush commands:

Drush cim Drush cex



In a normal Drupal project, the markup (Twig files) would be within Drupal's templating system with prepared variables being rendered out where they were needed to be. With our component based Pattern Lab, all of our markup was within the Patten Lab structure, away from Drupal's /templates directory. Fortunately, including them is simple enough. First we needed to download and install the Components Libraries module. This allowed us to specify a different directory for our Twig files and also register Twig namespaces for those files. We do this in the theme's .info file:

component-libraries: base: paths: - components/_patterns/00-base atoms: paths: - components/_patterns/01-atoms molecules: paths: - components/_patterns/02-molecules organisms: paths: - components/_patterns/03-organisms templates: paths: - components/_patterns/04-templates pages: paths: - components/_patterns/05-pages

Now our Pattern Lab Twig files were included, we could begin to link them up to Drupal's templating system. Linking them is as simple as choosing which components you want to display and then calling that Twig file from your Drupal template. When you call the component's Twig file you just need to pass in the variables from Drupal.

So if we wanted to display a page title as an H1, within page-title.html.twig inside Drupal's template directory we would call our Pattern Lab's heading component passing in the title and heading level:

{{ title_prefix }} {% if title %} {% include "@atoms/02-text/00-headings/_heading.twig" with { "heading": title, "heading_level": 1, } %} {% endif %} {{ title_suffix }}

If we wanted to change the style of the heading we could pass in an array of modifiers, as shown in the example further up the page, too. For more complex page components we can also pass in an array to be looped over inside the component's Twig file. For example, if we wanted a listing of cards we could pass an array to a listing component Twig template and within that loop through the array each time calling another component's Twig template:

{% for item in content_array %} {% include "@molecules/card/01-card.twig" with { "card_img_src": item.image, "card_title": item.title, "card_body": item.body, "card_button_content": item.button_text, "card_button_url": item.button_url, "card_button_modifiers": item.button_mods, "card_url": item.url, "card_img_alt": item.image_alt, } %} {% endfor %}

This is just a brief overview and a look at some interesting parts, there was obviously a lot more work that went in to the site build! Now, as this website was being built to replace our old site, we needed the content from old site to be moved over. In the next article Christian is going to talk through this process.

Categories: Drupal

Third & Grove: A Year Later and Drupal Commerce is Still in Existential Crisis

Planet Drupal - 1 June 2018 - 5:00am
A Year Later and Drupal Commerce is Still in Existential Crisis justin Fri, 06/01/2018 - 08:00
Categories: Drupal

Floating Menu

New Drupal Modules - 1 June 2018 - 4:07am

Floating Menu module creates a configurable block, that by default floats to the right side of the view and opens up with hover. Floating Menu has been designed to be multilingual from the get-go.

Categories: Drupal

JSON API Aliases

New Drupal Modules - 1 June 2018 - 2:24am

Use drupal path aliases for JSON API requests.

Better description to follow.

Categories: Drupal

Firebase Cloud Message

New Drupal Modules - 1 June 2018 - 12:21am

Firebase Cloud Messaging (FCM) provides a reliable and battery-efficient connection between your server and devices that allows you to deliver and receive messages and notifications on iOS, Android, and the web at no cost.

Categories: Drupal

Mafia 3's World Fabric - by Nathan Cheever Blogs - 1 June 2018 - 12:20am
Creating the city inspired by New Orleans had dozens of revisions with dozens of systems playing in the background. Here's some of its history with a few things that didn't make it.
Categories: Game Theory & Design

Life is Too Short

Gnome Stew - 1 June 2018 - 12:00am

My gaming bucket list involves gaming with ALL the awesome people I can find.

I had a Monday afternoon game that recently died a sad and ignoble death. Over the course of about a year, myself and a few other folks played a couple of different one shots and three short campaigns before things became untenable and the group died. As much as we all wanted to game, it became apparent that we weren’t looking for the same things in our gaming. As sad as I am that it’s over, I’m also relieved. Life is too short to play games with the wrong people.

The easiest type of ‘wrong people’ are the trolls and jerks. We gamers are pretty good at picking those out of a crowd and avoiding them. Ask almost any gamer and they’ll have a story of some troll that ruined a game or a campaign for them. Seriously, just ask. Gamers love their gaming war stories.

A friend of mine moved across the country to a new state last year and had to find new people to play with. Eventually he found a group that seemed okay and he was happy to be gaming regularly again. One player was a little annoying, with some attention-hog type of behavior, but that player was also the host and had a nice house with a good gaming space. In the beginning, it seemed worth putting up with. Over time, though, that player’s behavior became a bit more odious and he became passive aggressive with snide comments about gaming sessions that he didn’t enjoy. Eventually the passive aggressive behavior turned into full on aggressive and my friend decided enough was enough. There was a bit of a blow up, but no matter how nice his house was, the guy wasn’t worth gaming with any longer. My friend walked. Luckily in this case, the rest of the group walked away with him and they simply found an alternative place to play at.

Sometimes you can like the person but something about what you both want out of gaming doesn’t click and the enjoyment of the game starts to suffer. Share1Tweet1+11Reddit1Email

Thing is, wrong people doesn’t always mean bad people. Sometimes you can like the person but something about what you both want out of gaming doesn’t click and the enjoyment of the game starts to suffer.

In the case of my Monday game, GMing mostly fell to myself and one other player. This player and I ended up butting heads throughout the course of the year, but he wasn’t someone I disliked. I appreciated his enthusiasm for gaming and I respected his efforts to organize and keep things moving, but it became apparent that we had very different styles and expectations. When he was GM, he felt that we players weren’t proactive enough and our reactions to his NPCs never quite went the way he expected. When it was my turn to GM, he felt I wasn’t pushing the rules hard enough or that I wasn’t offering what he expected as a challenge. Even though we liked the same types of games, it was obvious we were looking for different things out of them.

Of course, we were both too stubborn to give up. It took a very rough session and another player announcing he was done to make us admit that it was time to lay the group to rest. When the player that left announced his decision, it was a weight off my shoulders. I didn’t want to acknowledge how stressed I was trying to run for this group, knowing one player was dissatisfied with my GMing. I also didn’t really want to admit that I didn’t enjoy his GMing. Dissolving the group was the right thing to do, even if it feels like a failure.

What if the person you’re having problems with is someone you care about deeply beyond your gaming life?

I have at least two friends who separately had to stop gaming with someone they cared about because gaming was starting to cause a strain on the relationship. Both situations were very different, but they realized they needed to stop gaming with someone if they wanted to preserve their relationship with that person. They never stopped caring for the person but realized that gaming wasn’t the activity they should share. Neither case was an easy separation, but it needed to be done.

We can put up with a lot to keep gaming in our lives. It’s easy to find articles discussing finding the right game to play, but it’s just as important to make sure you’re gaming with the right people. The stress that can come from gaming with someone who is incompatible to your gaming needs is not to be taken lightly. Cultivate the people you enjoy gaming with and build around that. Thankfully, the rise of gaming over the internet has helped quite a bit in this area, taking distance out of the equation.

One important caveat to all of this. It’s important to protect yourself, but it’s equally important to keep the doors of the hobby open to new people. I’m a huge fan of convention gaming and finding amazing players I’d never met before. There’s such a thrill to sitting down at a table and finding out that stranger across the table is freaking awesome. When cultivating the group you want to game with, tread carefully when closing the door to other players.

Have you ever made the decision to stop gaming with someone because it just wasn’t a good fit? I’d be interested to hear your stories.

Categories: Game Theory & Design Blog: AGILEDROP: Top Drupal blog posts from May

Planet Drupal - 1 June 2018 - 12:00am
Each month, we revisit out top Drupal blog posts of the month, giving you the chance to check out some of our favourites. This month was all about decoupled Drupal and JavaScript, check it out!   First one on the list is Nightwatch in Drupal Core by Sally Young from Lullabot. In this blog post, she introduces us to Nightwatch, a functional testing framework, that has been integrated into Drupal, so we can test JavaScript with JavaScript itself. She explains what are the features and how you can try it out.  We continue our list with Working toward a JavaScript-driven Drupal administration… READ MORE
Categories: Drupal

Weekly Jobs Roundup: Telltale, Sucker Punch, and more are hiring now!

Social/Online Games - Gamasutra - 31 May 2018 - 1:18pm

Whether you're just starting out, looking for something new, or just seeing what's out there, the Gamasutra Job Board is the place where game developers move ahead in their careers. ...

Categories: Game Theory & Design


Subscribe to As If Productions aggregator