Newsfeeds

Viking and Saxon Starters Available To Order For Hail Caesar

Tabletop Gaming News - 26 February 2018 - 8:00am
Warlord Games is coming out with a new supplement for Hail Caesar. It’s called Shield Wall and it takes us to the northern climes, where Vikings and Saxons fought over resources, engaged in bloody battles. Warlord has put together several starter bundles for both Vikings and Saxons, so you can get everything for a new […]
Categories: Game Theory & Design

Jeff Geerling's Blog: What do you use to build and develop Drupal sites?

Planet Drupal - 26 February 2018 - 7:28am

tl;dr: Go complete the Drupal Local Development Survey, and we'll present the results (among other things) at MidCamp in a couple weeks!

Local development for Drupal is a subject I've invested a lot of time into. At the start of my Drupal journey, I used to use MAMP, then MAMP Pro, then a native *AMP installation. Then when I learned about Vagrant I started building Vagrant-based environments with shell scripts. Then I learned Ansible and started using Vagrant and Ansible. And then I learned Docker and used Ansible, Docker, and sometimes Vagrant!

Everyone's journey is different—but one thing most of us can agree on is: it ain't easy finding a way to run Drupal on your local workstation if you've never done it before.

Should you use MAMP/WAMP/XAMPP? Should you use Acquia Dev Desktop? Should you use Docker or Vagrant and build your own environment? Should you use a packaged solution like Drupal VM or Lando? And then how will you manage your codebase? How will you build a theme?

Categories: Drupal

AM1: Amazing Engine System Guide

New RPG Product Reviews - 26 February 2018 - 7:21am
Publisher: Wizards of the Coast
Rating: 4
The book opens by trying to explain just what it is. Whilst it wasn't the first attempt at a generic ruleset, most people were publishing discrete games that included both rules and setting (or at least, genre) or they'd gone whole hog at the generic concept, put out some rules and left you to it. Amazing Engine was designed from the outset as a two-part system. You'd have the core rules (this book) and then you'd add the 'universe book' of your choice to make a complete game. These core rules contain all that's needed to create player characters and have those characters use skills, fight, and move. Hence, any character can be played in any universe, and experience from one can be applied to another.

The concepts of a 'player core' and a 'player character' are introduced to facilitate this. The idea is that this System Guide is used to create the player core, which is the framework from which player characters are built. The same player core is used from universe to universe. The player character is the actual collection of numbers, skills, and other abilities used to roleplay in a given universe. A player will have a different character in each universe, but these characters may all be generated from the same player core. It doesn't however mean that they're all the same character, just they share the core framework. That's fine if you like playing, say, sneaky and intelligent characters whatever sort of game you are playing... but may be a bit problematic if you prefer to fine-tune even the underlying nature of your character to the setting in which he will exist.

In the player core, you have to decide how much emphasis you want to put on four core aspects: physique, intellect, spirit and influence. Just how these are expressed will depend on the universe in which you will be playing. This is done by having two attributes associated with each aspect, and it is these, not the aspects, that are used to describe the player character - and can be quite different for each universe. You start by ranking the core aspects from 1 (the strongest) to 4 (the weakest). Then you begin in on your first player character by picking any four of the attributes - it doesn't matter which aspect they relate to at this point - and roll 4d10 and add them together to get a number. For the other four, roll 3d10. Then you add together the numbers for the two attributes belonging to each aspect - this becomes part of the player core and is used to create each subsequent player character (who are made slightly differently from the first one). It sounds a bit complex but the examples given and just getting some dice and playing around make it all come clear. As is often the case, rules really ought to be written by someone other than the person who created them - they understand how they work already and don't always explain them as well as someone who has had to learn them can!

Many other choices have to wait until you have decided on a universe in which to play. You cannot be an elf in a universe that doesn't have them, after all, nor can you wield magic unless you are in one where it works. Although your skills, too, will have to wait until you know about the universe you'll be playing in, the way tasks are resolved when you use them is standard, and is covered here - along with general notes on how they are chosen and so on. It's a slightly odd feeling trying to understand this in abstract, but again the examples are clear.

The next part of the book looks at experience: how to gain it (or award it if you're the GM) and what to do with it. This is when things get interesting - your player character's experience, gained in one universe, may be applied to your player core (and so benefit every player character you have across all the universes you play in... even though they are different people) or you may apply it to the player character who earned it. You also have the option of using them immediately to boost some ability temporarily as the situation dictates.

Other topics such as movement and the all-important combat are also covered here, again in fairly general terms. Whatever you are fighting with, the basics of how to resolve a hit are going to be the same, and the general overview of how combat works is constant. Finally, there's a note on magic, psionics and special powers. Mostly, it says that they are left to the universe books, which will determine what is possible there.

This isn't a game for shifting genres with the same character, yet it allows for some measure of continuity. That's particularly nice if you don't like starting from scratch every time you begin a new game in a different setting, or if you lose a character during play. More than that, it's a bit difficult to say - this is very much half of a game, I'll need to read a universe book to see how the whole hangs together... but that's a matter for another lunchtime! For now, this shows some promise.
Categories: Game Theory & Design

Autotrader CSV

New Drupal Modules - 26 February 2018 - 7:18am

This will be the new home of a simple module that creates CSVs on a regular basis in the format(s) required by Autotrader for uploading cars, automobiles, water crafts, and non-passenger vehicles (NPV) data to their FTP, ultimately for listing on the Autotrader website.

Categories: Drupal

Webform Ip Tracking

New Drupal Modules - 26 February 2018 - 7:15am

This module provides feature for sending location details such as city, state, country,etc through email, when a web form is submitted.

This is implemented using custom tokens.

Categories: Drupal

Fantasy Flight Previews 74-Z Speeder Bikes For Star Wars: Legion

Tabletop Gaming News - 26 February 2018 - 7:00am
For the longest time, the speeder bike chase on Endor was my favorite part of Star Wars (later usurped by the Battle of Hoth, because I’d seen Jedi about a dozen times before I’d seen Empire). Soon, we’ll be able to recreate that exciting battle on our tabletops with the 74-Z Speeder Bikes for Star […]
Categories: Game Theory & Design

2bits: Optimizing Drupal Views: Query Time and Rendering Time

Planet Drupal - 26 February 2018 - 6:56am

A recent client performance assessment consulting project showed that on their site, the main page that logged in users would browse is slow. Tuning the server for memory and disk throughput helped somewhat, but did not fully eliminate the issue.

Looking at the page, it was a view, and the total time was around 2.75 seconds.

The main query was not efficient, with lots of left joins, and lots of filtering criteria:

SELECT node.nid AS nid,
... AS ...
... AS ...
'node' AS field_data_field_aaa_node_entity_type,
'node' AS field_data_field_bbb_node_entity_type,
'node' AS field_data_field_ccc_node_entity_type,
... AS ...
FROM node
INNER JOIN ... ON node.uid = ...
LEFT JOIN ... ON ... = ...  AND ... = ...
LEFT JOIN ... ON ... = ... AND (... = '12'
OR ... = '11'
OR ... = '15'
OR ... = '24')
WHERE (( (node.status = '1')
AND (node.type IN ('something'))
AND (... <> '0')
AND ((... <> '1') )
AND ((... = '4'))
AND (... IS NULL ) ))
ORDER  BY  ... DESC
LIMIT  51   OFFSET 0

That caused the first pass to sift through over 24,000 rows, while using both file sort and temporary tables. Both operations are disk intensive.

*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: ...
   partitions: NULL
         type: range
possible_keys: PRIMARY,...
          key: rid
      key_len: 8
          ref: NULL
         rows: 24039
     filtered: 100.00
        Extra: Using where; Using index; Using temporary; Using filesort
*************************** 2. row ***************************
           id: 1
  select_type: SIMPLE
        table: ...
   partitions: NULL
         type: eq_ref
possible_keys: PRIMARY,status
          key: PRIMARY
      key_len: 4
          ref: test43....
         rows: 1
     filtered: 50.00
        Extra: Using where
*************************** 3. row ***************************
           id: 1
  select_type: SIMPLE
        table: node
   partitions: NULL
         type: ref
possible_keys: uid,status,type,node_status_type
          key: uid
      key_len: 4
          ref: test43....
         rows: 5
     filtered: 12.18
        Extra: Using index condition; Using where
*************************** 4. row ***************************
           id: 1
  select_type: SIMPLE
        table: ...
   partitions: NULL
         type: ref
possible_keys: PRIMARY,...
          key: PRIMARY
      key_len: 4
          ref: test43....
         rows: 2
     filtered: 54.50
        Extra: Using where; Not exists; Using index

But here is the puzzle: this query took 250 to 450 milliseconds at most.

Where did the rest of the 2,750 milliseconds go?

To find out, we use xhprof, the profiler for PHP.

In the screenshot below, you can see that the total page processing time (Total Inc. Wall Time, top right) is 2,732 milliseconds.

Out of that, 85% is in database queries (252 total queries, totaling 2,326 milliseconds, Excl.Wall Time).

What are these queries?

They are queries to other tables in the database to retrieve fields for each row.

For example, if you have a product view, with certain criteria, the result still has to get the product name, its price, its image, ...etc.

All these queries add up, specially when you are loading 50 of them. The time needed to retrieve each field, and rendering it for output is multiplied by the number of rows retrieved.

So, how do you mitigate that overhead? There are several ways:

  • Reduce the number of rows returned by the view. For example, instead of 50, make it 25. That would half the number of queries (and processing) needed to produce the page.
  • If the query is the same for all logged in users, then enable views caching (under Advanced when you edit the view), and enable both Query Result and Rendered Output caching. Use time based caching, for as long as practical to your site (e.g. if you add products or change prices only once a day, then you can cache the results for 20 hours or more).
  • Use a fast caching layer, such as the memcache module, instead of the default database caching, which will be slow for a site with many logged in users.
  • Use View Lite Pager to eliminate COUNT queries from being performed.
  • Consider alternate approaches to views, such as Apache Solr Faceted Search, which has much better performance than MySQL based solutions, because they do build an efficient index.

By implementing all the above for the client in question, except the last one, we were able to bring the view page from 2,730 milliseconds, down to 700-800 milliseconds of response time.

Scalability was much better, with the same server could handle more logged in users.

Contents: Tags: 
Categories: Drupal

Fast 2D shadows in Unity using 1D shadow mapping - by Rob Ware

Gamasutra.com Blogs - 26 February 2018 - 6:43am
In this article I explain how I adapted a traditional technique from 3D rendering to achieve fast 2D shadows for a large number of light sources in the Unity game engine.
Categories: Game Theory & Design

Make Peace, Not War | The AI of Total War (Part 4) - by Tommy Thompson

Gamasutra.com Blogs - 26 February 2018 - 6:42am
In part 4 of my series on Total War, I look at the innovations in campaign and diplomacy AI in 2015's Total War: Attila.
Categories: Game Theory & Design

How NOT to Run a Crowdfunding Campaign - by Hsiao Wei Chen

Gamasutra.com Blogs - 26 February 2018 - 6:40am
Based on Thomas Bidaux’s talk about crowdfunding at the latest PocketGamer Connects in London and our own insights, these are all the things we did wrong in our Indiegogo campaign for MuniReality.
Categories: Game Theory & Design

Twig Drupal Children Extension

New Drupal Modules - 26 February 2018 - 6:39am

Access children element from Twig.

Usage

Enable the module, then, in your Twig files, you'll be able to do:

{% for item in content.field_something|children %} {{ item.get('value').getValue() }} {% endfor %} Inspired from

#2776307

Categories: Drupal

Schemaless

New Drupal Modules - 26 February 2018 - 6:26am

Provides schemaless configuration management for developers

Categories: Drupal

Magician’s Choice: Using an Age-Old Conjuror’s Trick at the Table

Gnome Stew - 26 February 2018 - 6:08am

Today’s guest article, by Noah Lloyd, is about the illusion of choice and makes multiple references to the classic film Labyrinth, which hooked us from the beginning. – John “Hoggle is Bae” Arcadian

When Sarah encounters two doors, “one that always tells the truth, and one that always lies,” in the Labyrinth, why does she still wind up in the oubliette, even though her answer to the riddle seems sound? It’s not that Jareth is cruel, or that The Labyrinth is just a topsy-turvy place, but that the oubliette and the helping hands are more interesting to the story.

I’d like to propose that the riddle Sarah encounters at this point in the film is an example of a “magician’s choice.” Also called equivocation, “magician’s choice” refers to a technique by which a spectator believes that a choice (of a card, an image, etc.) is freely theirs to make. Risking exile from the halls of magicians the world over, allow me to give you some insight into this simple technique, and how we can incorporate it into our own roleplaying games.

How it Works

The long and the short of equivocation is that, no matter how much freedom a spectator believes they have, they wind up choosing the precise card the magician needs for the trick to continue. This can be accomplished in a few ways. In a classic example, the magician has contrived the situation so that a card you selected earlier in the trick is now card A:

For argument’s sake, let’s say you pick B. The magician might then say, “okay, interesting, we’ll remove that card from the table.” You now have three options. A, B, or D? You select C, and same thing, C’s taken off the table. But here comes the interesting part. When you next pick A, the magician tells you to leave your finger on the card. “So that’s your final choice…” they say, taking D off the table. And, magically, there’s your card, freely chosen.

Did you see what happened? When you selected A, instead of removing it from the table like they did with all the other choices, they removed D, changing the logic of the choice on the fly, brazen as anything. (Before you go saying, “Oh that’s so simple, that would never work…” trust me, it works.)

Do I even need to mention that if you select A as your first card, all the magician has to do is smile?

The Magician’s choice works because you don’t know what to expect at each step: when you select a card, the magician hasn’t told you beforehand that the card will be removed or stay, nor do they tell you if the rules will work the same on your next choice. Instead, they change the rules at will, depending on your selections.

What’s important here is that the spectator selects a card that’s necessary for the trick to continue. Because the card is important, the spectator feels empowered, or even magical. Similarly, we should use this technique in games when the result of the choice is going to advance the narrative, or prove important to the characters in some other way.

A few things are important for us to take away from this example. If we can meet these criteria, we’ll have accomplished our goal:

  • The spectator feels magical;
  • The card selected is important to the trick;
  • The spectator doesn’t realize that their selection was predetermined.
How it Looks to Players

The Magician’s choice works because you don’t know what to expect at each step  How, and why, should we adapt this to our GMing? The magician’s goal is to make the spectator feel magical (not the magician). The spectator should feel like they’ve selected their card by fair means, not been controlled by the magician. To players, a magician’s choice should look like the choice Sarah faces halfway through The Labyrinth (“She should never have made it as far as the oubliette!”). The choice is never arbitrary (not like our card selection example above), but behind a memorable challenge, like Sarah’s riddle.

As GMs, our jobs are even easier than the magician’s—we don’t have to change the rules anywhere along the way or remove any of the options the players ignored. Whatever road they take, whatever door they open, the helping hands (which we spent all morning prepping for) wait on the other side.



Presenting a Magician’s Choice

Always make the choice important to continuing the story. In The Labyrinth, Sarah’s encounter with the riddle marks a chokepoint in the film, and in the labyrinth itself, funneling the story from aboveground to belowground. It’s an important turning point in the film and in Sarah’s development. The result of the choice we craft for our players should have an impact on the rest of the adventure—there’s no going back.

The question, of course, is why bother? Why put two doors at the end of a hallway when you’ve only prepped one room? It’s all about, as a friend of mine put it, “the illusion of choice.” Significantly, the players (your spectators) should never realize what’s going on. And that’s the thing about illusions, they add depth to the world (“there were more doors you could have opened, more roads you could have taken”) without adding to a GM’s limited prep time.

This is essentially the classic advice that if your players decide not to go into a dungeon, don’t throw away your prep for that dungeon. This is equivocation, but temporally delayed instead of spatially. So long as the players go into a dungeon, someday in the future, they’ll always wind up in the selfsame crypt you prepped all those sessions ago.

For Sarah, and for anyone else watching The Labyrinth: what’s on the other side of the door Sarah didn’t pick? The answer is better than “we don’t know,” or even “certain death,” the answer is worlds of wonder we’ll never see.

The Railroad Accusation, or, Maintaining Consequences

 what’s on the other side of the door Sarah didn’t pick? The answer is… worlds of wonder we’ll never see. I can hear some of you shouting at your computer screens that this is simply another kind of railroad. But is it really? Players dislike railroads because they feel like they can’t affect the world. Unlike most railroads, this choice feels like it has consequence: that’s the real value of a magician’s choice. When the door locks behind the heroes, or vanishes altogether, the hallway stretching out before them, dripping with blood, feels ominous and consequential (even though the other door led to the same hall).

Note that I’ve said nothing about leading players to a magician’s choice, or about restricting their agency after making their choice. Their ability to influence the world on either side of the choice is deeply important to maintaining the illusion—another reason why we only use these choices around important moments.

A Recipe for Magical Equivocation
  • Make sure the result of the choice has a major impact on the story;
  • Place the choice behind a memorable challenge or obstacle;
  • Hide the choice behind other layers: these could be spatial, temporal, etc.;
  • Always create repercussions for the players’ choice. Even when multiple choices lead to the same scene, the choices themselves are different;
  • Eliminate their ability to go backward and explore other options (“A portcullis drops over the door! You’re trapped!”).

Try this out at your table sometime, like a wily old conjuror. And let me know how it goes…

Categories: Game Theory & Design

Daughters of Khaine Battletome and Minis Available to Order From Games Workshop

Tabletop Gaming News - 26 February 2018 - 6:00am
I have several women friends who would very easily kick your ass. One knows fencing. Another is in SCA and does heavy fighting. Another is 2nd Dan black belt in Aikido. Yeah, you don’t want to mess with them. I don’t think you’d want to mess with the Daughters of Khaine, either. They’ve got a […]
Categories: Game Theory & Design

Field Group as Class

New Drupal Modules - 26 February 2018 - 5:23am

Field Group as Class module is a formatter for field_group.

Description

This formatter get the node field value (list or list_string field_types)
to display it to the field_group class.

Categories: Drupal

DrupalEasy: DrupalEasy Podcast 206 - Heather Rodriguez - Previewing the "Being Human" track at DrupalCon Nashville

Planet Drupal - 26 February 2018 - 5:06am

Direct .mp3 file download.

Heather Rodriguez, (hrodrig), Solutions Analyst for Digital Services Georgia and track chair for DrupalCon Nashville's "Being Human" track joins Mike Anello to talk about some of the sessions accepted for the track, why the track is important, and heavy metal music.

Interview Drupal News DrupalEasy News Sponsors
  • Drupal Aid - Drupal support and maintenance services. Get unlimited support, monthly maintenance, and unlimited small jobs starting at $99/mo.
  • WebEnabled.com - devPanel.
Follow us on Twitter Subscribe

Subscribe to our podcast on iTunes, Google Play or Miro. Listen to our podcast on Stitcher.

If you'd like to leave us a voicemail, call 321-396-2340. Please keep in mind that we might play your voicemail during one of our future podcasts. Feel free to call in with suggestions, rants, questions, or corrections. If you'd rather just send us an email, please use our contact page.

Categories: Drupal

NTB import

New Drupal Modules - 26 February 2018 - 4:44am

Import articles from Norwegian News Agency (Norsk Telegrambyrå; abbreviated NTB, wikipedia page: https://en.wikipedia.org/wiki/Norwegian_News_Agency) to Drupal nodes.
You need an account in NTB in order to use this module.

Categories: Drupal

Commerce guest registration

New Drupal Modules - 26 February 2018 - 3:41am

The Commerce guest registration is an add-on module for the Commerce 2.x. The module won't have any configuration and permission implementations. This module help to create the user account in the system while they are placing orders as guest users. The user email id is considering the unique parameter to create the account.

Categories: Drupal

Tim Millwood: Deprecation fails when testing Drupal 8

Planet Drupal - 26 February 2018 - 12:57am
Deprecation fails when testing Drupal 8

With each release of Drupal 8 more and more things are being deprecated, which is awesome. It shows innovation, forward thinking, and a thought for backwards compatibility. However throwing notices or warnings when deprecated code is used can cause tests to fail. We already counter this a little by adding to phpunit.xml.dist in core.

To quote the Symfony documentation:

By using the weak_vendors value, deprecations that are triggered outside the vendors directory will make the test suite fail, while deprecations triggered from a library inside it will not, giving you the best of both worlds.

This shows that deprecations within Drupal will still cause test fails, to combat that simply update the SYMFONY_DEPRECATIONS_HELPER setting to "weak" or "disabled", which would ignore the deprecations or disable the deprecation helper.

However if you're testing with run-test.sh this will interfere with the settings in your phpunit.xml file and use always use weak_vendors unless you have the suppress-deprecations argument set. Therefore use run-tests.sh --suppress-deprecations and the SYMFONY_DEPRECATIONS_HELPER setting will be set to "disabled". See the simpletest_script_run_one_test() function in run-tests.sh for more context.

Hopefully this helps, we found this really useful when testing Drupal modules with Travis, where we needed tests passing for Drupal 8.4 and 8.5.

timmillwood Mon, 26/02/2018 - 08:57 Tags drupal planet drupal-planet drupal drupal8 drupal 8 testing drupal testing Add new comment
Categories: Drupal

Fuzzy Thinking: Gaming Truism #8

RPGNet - 26 February 2018 - 12:00am
There\'s a Cody in every group.
Categories: Game Theory & Design

Pages

Subscribe to As If Productions aggregator