Newsfeeds

Exteneded Fiction in Game Deisgn: Hotline Miami, Spec Ops: The Line, and Bioshock - by Austin Anderson

Gamasutra.com Blogs - 5 June 2019 - 7:50am
This is the final section of my honors thesis on extended fiction in game design, it discusses games that utilize ludoethical tension in a different and darker manner than previously discussed. It also contains the conclusion to my thesis.
Categories: Game Theory & Design

Things to Know About Creating a Turn-Based Strategy Game - by Chris Fernholz

Gamasutra.com Blogs - 5 June 2019 - 7:44am
Some tips and tricks when developing an RTS game. This article will give you an overview of some key factors for development, design, and gameplay mechanics.
Categories: Game Theory & Design

Evolving Achievements with Trophy Room Design - by Josh Bycer

Gamasutra.com Blogs - 5 June 2019 - 7:43am
Today's post looks at the use of achievements and how there are ways to evolve their use in games.
Categories: Game Theory & Design

Sell our souls to the devil. The risk of debt for equity deals. - by Simon Bailey

Gamasutra.com Blogs - 5 June 2019 - 7:42am
We all love ‘Diablo’ but would we sell our souls him?... Last week my colleague Anthony and I gave a presentation of our latest game to a potential funder. We managed to get the opportunity and the game USP across well.
Categories: Game Theory & Design

Gambling in GTA - more than an afterthought - by Lauri Ronkainen

Gamasutra.com Blogs - 5 June 2019 - 7:36am
Rockstar Games - the company behind GTA and RDR game series - has included some elements of gambling in most of their hit games. Let's take a look at all the options to make an easy buck in the entire Grand Theft Auto Saga.
Categories: Game Theory & Design

Exclusiv Access

New Drupal Modules - 5 June 2019 - 7:28am
About

This module provide a light access control solution.

There is not a "global access control" or a "access security solution" but a "content-by-content" solution

Categories: Drupal

Drudesk: Simple ways to rewrite the output of Drupal 8 Views fields

Planet Drupal - 5 June 2019 - 6:34am

The unique Drupal Views module allows you to pull the data from the database and display it in any way you wish. As an example, we discussed creating photo galleries with Drupal 8 Views. Drupal’s flexibility is unlimited, so it offers additional ways to customize the content display and meet the customer’s precise requirements. One of them is to rewrite the output of Drupal Views fields. Let’s explore it a little bit in the simplest of cases.

Categories: Drupal

The Indie Game Shelf: Legacy: Life Among the Ruins (Second Edition)

Gnome Stew - 5 June 2019 - 5:00am


Welcome to The Indie Game Shelf! Each article in this series will highlight a different small press roleplaying game to showcase the wide variety of games available. Whether you’re a veteran gamer looking for something new or brand new to the hobby and wanting to explore what’s out there, I hope The Indie Game Shelf always holds something fun and new for you to enjoy!

Legacy: Life Among the Ruins (Second Edition)

Legacy: Life Among the Ruins from UFO Press and Modiphius Entertainment is a Powered by the Apocalypse game designed for one Game Master (GM) and 2-5 players to tell the epic, era-spanning tale of rebuilding society after a cataclysmic fall. Apocalypse World, the progenitor of the Powered by the Apocalypse movement, is a game about surviving the harsh post-apocalyptic wasteland. In its wake arose an army of games based on similar design principles but exploring different settings and themes from classic fantasy like Dungeon World to imaginative futurism like Headspace. When Legacy first emerged in 2015, a game about surviving the harsh post-apocalyptic wasteland, I mused that we’d come full circle with a Powered by the Apocalypse game that was once again about…well, the apocalypse.

Legacy is a different game from Apocalypse World, though, with a different focus and a very different style. In this edition of The Indie Game Shelf, I’ll be focusing on the second edition of Legacy, published in 2018. The second edition is an update of the first, as opposed to it being a different set of rules. The core of the game remains, but gameplay is improved and material expanded by the second edition, so I recommend the second edition over the first.

The Story

Legacy is a game squarely set in the post-apocalypse genre, but where the game differs from most others is in the scope of the narrative. The stories told in this game span generations, truly living up to the game’s premise of world-building. Players in this game do control characters as in other RPGs, but the main interface between players and the game world are the Family playbooks, which represent whole groups of people across the duration of the world’s development. The framing of the game’s fiction zooms in and out between the two perspectives, with some stories being personal to Characters and others taking a wider, more epic view of the activities and relationships of Families. In this context, a Family is not necessarily a group of people related biologically; they can be united by ideology, culture, circumstance, or anything that forges a bond of loyalty between people. Families grow and change, are driven by various purposes, have relationships with each other, face threats, and can pursue grand, world-changing events in the game called Wonders.

Like in many Powered by the Apocalypse games, the rules present a style of play more than a detailed setting. There is assumed to have previously occurred some great disaster that tore civilization down, and the game’s story is meant to take place in the aftermath, but the details of the world and its history are left to each game group to decide. However, Legacy provides rules for determining these details through playbook choice and configuration. The selection of a playbook can describe aspects of the game’s world, but the choices made within that playbook refine the setting’s history.

 The game mechanics of Legacy drive toward changing the in-fiction world during play, from character death to the mechanics of Wonders, both of which create huge narrative and mechanical changes to the game which are felt for the rest of the campaign. Share1Tweet1Reddit1EmailFor example, choosing the Family playbook “The Order of the Titan,” which describes a group dedicated to hunting, fighting, or scavenging gigantic alien beasts called Behemoths, means that you now know that Behemoths are a part of your game world. Once a playbook is chosen, however, then a stat line must be selected, and the choice of stat line might dictate “your studies woke the Behemoths and set them loose” or “the Behemoths brought the Fall to the world.” In this way, Family and Character setup also result in setting up the world, not only historically but also geographically with the building of a collaborative world map. (I love games that use collaborative map-building!)

In addition to a Family playbook, players also begin by selecting a Character playbook to represent an exceptional member of the Family who will serve as one of the protagonists of the story. These playbooks start with an archetype (the Elder, the Scavenger, the Firebrand, etc.) and are customized from there. A campaign of Legacy spans generations, so Characters come and go as the game progresses. While players control one Family to usher through the rebuilding of the world, they’ll get the chance to play many different Characters over the course of the campaign.

The focus of the stories of Legacy lie in the building of the world. This is only partially due to the pre-game or start-of-game “worldbuilding” as I use the term in discussing other games. The game mechanics of Legacy drive toward changing the in-fiction world during play, from character death to the mechanics of Wonders, both of which create huge narrative and mechanical changes to the game which are felt for the rest of the campaign.

The Game

As a Powered by the Apocalypse (PbtA) game, Legacy sports core mechanics familiar to anyone who plays Apocalypse World or any other games of that design family. Playbooks have stats which modify 2d6 rolls triggered by the fiction and resulting in different outcomes defined by rule packets called moves. Legacy also adds an advantage/disadvantage mechanic to die rolls (replacing the usual +1 or -1 forward or ongoing), but the biggest structural difference from other PbtA games is the concurrent use of multiple playbooks by each player.

Players in Legacy control two different playbooks at any given time: a Family and a Character. The Family is the focus of the “zoomed out” epic view of the world’s story, and a player will generally control and evolve a single Family over the course of a campaign. Characters, however, both advance and retire at a faster pace, starring in the “zoomed in” views of the fiction, telling their stories and then moving on to be replaced. Families have one set of basic moves for their fictions, and Characters draw from a separate set.

Family playbooks have stats and playbook moves. They also have Traditions, which is basically like the Looks section of other PbtA playbooks, the relationship mechanic is a currency called “Treaty” (as opposed to things like “Hx,” “Bonds,” or “Strings” in other games), Doctrine and Lifestyle provide mechanical tweaks based on a Family’s ideology or attitude and their population’s geographical arrangement, and Resources and Assets decide what a Family needs to survive, what they have to offer, and what special equipment they can offer their Characters. Each Family playbook also comes with an Alliance Move governing how they gain Treaty, and Inheritance, which confers benefits to that Family’s Characters and also contributes to quick character creation, a valuable tool for adding side characters to many stories.

Character playbooks similarly have stats and playbook moves. They have Looks and Backstory as well, but it bears mentioning that there is no Character relationship mechanic as there is for Families. Characters also have a Role which broadly describes their place in their Family’s society. A Character’s Role changes during the game and serves as both a character advancement marker (in place of XP) as well as a source of additional mechanics. The Harm track contains descriptors and mechanical effects unique to each Character playbook, and finally the Death Move describes how the Character leaving play affects the world after they’re gone.

The overall story of the campaign is divided into Ages. At the end of each Age, a time-passing move is triggered which describes affects to each Family, the world map gets updated, and Family playbooks are updated to suit the new fiction. During play, Families also have the option of devoting their surplus Resources toward Wonders, world-changing events on a massive scale. When a Family completes a Wonder, it is a special kind of advancing an Age, and it guarantees at the very least a change in the world map and mechanical effects felt by every Family in the game. A variable amount of fictional time passing between Ages means that the world can have changed very little or quite a lot before the next Age begins. The game allows tremendous opportunity for the complete exploration of the rise (and perhaps fall) of an entire world.

The Shelf

The second edition of Legacy: Life Among the Ruins is available for purchase in print and PDF. You can also check out Titanomachy (free PDF download or purchasable print-on-demand softcover), the quickstart for Legacy which contains core rules, pregenerated characters, and a setting starter so you can jump right into playing. If you’re looking for expansions, the Worlds of Legacy collection offers a variety of alternate settings and new playbooks and moves you can bring to the game, like the political sci-fi of a new planet colony in Worldfall or the evolution of sentient species at the dawn of time in Primal Pathways.

If you’re looking for similar games, there’s certainly no shortage of post-apocalyptic RPGs to be found, from classics like Gamma World (all 30+ years and seven editions of it) to more recent offerings like INDE’s dark fantasy-style Shattered or Hebanon Games’ intersection of zombies and economics, Red Markets. The big noise is, of course, Apocalypse World, and Legacy is solidly rooted in the Apocalypse World Engine, so if you’re looking for games with similar rules, you can have your pick of the Powered by the Apocalypse catalog. If you’re more interested in the zooming-in and zooming-out style of play, definitely check out the story game Microscope from Lame Mage Productions. If you’re particularly interested in the society-building aspect, Lame Mage also offers the game Kingdom, and you could also take a look at Ziapelta Games’ Wrath of the Autarch.

If you’ve got something on your shelf you want to recommend as well, let us know in the comments section below. Let’s fill our shelves together!

Categories: Game Theory & Design

Language switcher enhanced

New Drupal Modules - 5 June 2019 - 3:54am
Categories: Drupal

Morpht: Debugging Guzzle HTTP request errors in Drupal

Planet Drupal - 5 June 2019 - 3:24am

Guzzle makes HTTP requests easy. When they work, it's like magic. However, as with all coding, getting something to work requires debugging, and this is where the Drupal implementation of Guzzle has a major usability problem - any returned messages are truncated, meaning that with the default settings, error messages that can help debug an issue are not accessible to the developer. This article will show developers how they can re-structure their Guzzle queries to log the full error to the Drupal log, instead of a truncated error that does not help fix the issue.

Standard Methodology

Generally, when making a Guzzle request, it is made using a try/catch paradigm, so that the site does not crash in the case of an error. When not using try/catch, a Guzzle error will result in a WSOD, which is as bad as it gets for usability. So let's take a look at an example of how Guzzle would request a page using a standard try/catch:

try {
  $client = \Drupal::httpClient();
  $result = $client->request('GET', 'https://www.google.com');
}
catch (\Exception $error) {
  $logger = \Drupal::logger('HTTP Client error');
  $logger->error($error->getMessage());
}

This code will request the results of www.google.com, and place them in the $result variable. In the case that the request failed for some reason, the system logs the result of $error->getMessage() to the Drupal log.

The problem, as mentioned in the intro, is that the value returned from $error->getMessage() contains a truncated version of the response returned from the remote website. If the developer is lucky, the text shown will contain enough information to debug the problem, but rarely is that the case. Often the error message will look something along the lines of:

Client error: `POST https://exaxmple.com/3.0/users` resulted in a `400 Bad Request` response: {"type":"http://developer.example.com/documentation/guides/error-glossary/","title":"Invalid Resource","stat (truncated...)

As can be seen, the full response is not shown. The actual details of the problem, and any suggestions as to a solution are not able to be seen. What we want to happen is that the full response details are logged, so we can get some accurate information as to what happened with the request.

Debugging Guzzle Errors

In the code shown above, we used the catch statement to catch \Exception. Generally developers will create a class that extends \Exception, allowing users to catch specific errors, finally catching \Exception as a generic default fallback.

When Guzzle hits an error, it throws the exception GuzzleHttp\Exception\GuzzleException. This allows us to catch this exception first to create our own log that contains the full response from the remote server.

We can do this, because GuzzleException provides the response object from the original request, which we can use to get the actual response body the remote server sent with the error. We then log that response body to the Drupal log.

use Drupal\Component\Render\FormattableMarkup;
use GuzzleHttp\Exception\GuzzleException;

try {
  $response = $client->request($method, $endpoint, $options);
}

// First try to catch the GuzzleException. This indicates a failed response from the remote API.
catch (GuzzleException $error) {

  // Get the original response
  $response = $error->getResponse();

  // Get the info returned from the remote server.
  $response_info = $response->getBody()->getContents();

  // Using FormattableMarkup allows for the use of tags, giving a more readable log item.
  $message = new FormattableMarkup('API connection error. Error details are as follows:@response', ['@response' => print_r(json_decode($response_info), TRUE)]);

  // Log the error
  watchdog_exception('Remote API Connection', $error, $message);
}

// A non-Guzzle error occurred. The type of exception is unknown, so a generic log item is created.
catch (\Exception $error) {
  // Log the error.
  watchdog_exception('Remote API Connection', $error, t('An unknown error occurred while trying to connect to the remote API. This is not a Guzzle error, nor an error in the remote API, rather a generic local error ocurred. The reported error was @error', ['@error' => $error->getMessage()));
}

With this code, we have caught the Guzzle exception, and logged the actual content of the response from the remote server to the Drupal log. If the exception thrown was any other kind of exception than GuzzleException, we are catching the generic \Exception class, and logging the given error message.

By logging the response details, our log entry will now look something like this:

Remote API connection error. Error details are as follows:

stdClass Object (
  [title] => Invalid Resource
  [status] => 400
  [detail] => The resource submitted could not be validated. For field-specific details, see the 'errors' array.
  [errors] => Array (
    [0] => stdClass Object (
      [field] => some_field
      [message] => Data presented is not one of the accepted values: 'Something', 'something else', or another thing'
    )
  )
)

* Note that this is just an example, and that each API will give its own response structure.

This is a much more valuable debug message than the original truncated message, which left us understanding that there had been an error, but without the information required to fix it.

Summary

Drupal 8 ships with Guzzle, an excellent HTTP client for making requests to other servers. However, the standard debugging method doesn't provide a helpful log message from Guzzle. This article shows how to catch Guzzle errors, so that the full response can be logged, making debugging of connection to remote servers and APIs much easier.

Happy Drupaling!

Image credit: Marco Verch https://www.flickr.com/photos/30478819@N08/35337269544
Categories: Drupal

Active Directory Integration / LDAP Integration - NTLM & Kerberos Login

New Drupal Modules - 5 June 2019 - 2:24am

Active Directory Integration / LDAP Integration for Intranet sites plugin provides login to Drupal using credentials stored in your LDAP Server . It allows users to authenticate against various LDAP implementations like Microsoft Active Directory , OpenLDAP and other directory systems as well as perform authentication using NTLM and Kerberos. We support user management features such as creating users not present in Drupal from LDAP Server, adding users, editing users and so on. User information is in sync with the information in LDAP.

Categories: Drupal

Traffic Light Rating

New Drupal Modules - 5 June 2019 - 2:20am

Provides a field type for the traffic light rating system which displays information on the fat, saturated fat, sugar and salt content of food and drink products. For more information on the Traffic Light Rating system visit: https://en.wikipedia.org/wiki/Traffic_light_rating_system

Categories: Drupal

Agiledrop.com Blog: Our blog posts from May 2019

Planet Drupal - 5 June 2019 - 1:47am

We’ve prepared a short overview of the blog posts we wrote in May. Give it a read and check out what we had to say.

READ MORE
Categories: Drupal

Commerce Atos SIPS

New Drupal Modules - 5 June 2019 - 1:05am

This module provides support for Atos SIPS payment gateway.

Categories: Drupal

Neibers

New Drupal Modules - 4 June 2019 - 8:04pm

Reconstruct from Neibrs
重新构造Neibrs
# Get the code
1. composer
> composer require drupal/neibers
2. download the code to modules directory
> wget 'https://ftp.drupal.org/files/projects/neibers-8.x-1.0.tar.gz'

Categories: Drupal

BADCamp 2019: Amalgamate with us in the fall!!

Planet Drupal - 4 June 2019 - 2:53pm
Amalgamate with us in the fall!! volkswagenchick Tue, 06/04/2019 - 21:53
Categories: Drupal

PSA: Tomorrow's your last day to save by registering early for XRDC!

Social/Online Games - Gamasutra - 4 June 2019 - 2:31pm

Heads up: The deadline to register for premier AR/VR/MR dev event XRDC at a discount is tomorrow, Wednesday June 5th, at 11:59 PM PT! ...

Categories: Game Theory & Design

Programmatically - Examples and code snippets

New Drupal Modules - 4 June 2019 - 2:10pm

Tired of always typing the same things in your search engine?

Looking for example of how to programmatically do things in Drupal?

This module is made for you :)

Purpose

It's a collection of helpful example for developers meant to improve productivity while coding. You'll no longer need to get out of your code editor to find a code snippet.

It includes this kind of answer/example:

Categories: Drupal

The Institute of Play is winding down after 11 years

Social/Online Games - Gamasutra - 4 June 2019 - 12:47pm

After over a decade of supporting programs that use video games as tools for education and social development, the Institute of Play is winding down operations. ...

Categories: Game Theory & Design

Webform Edit Element

New Drupal Modules - 4 June 2019 - 12:02pm

Simple module for embedding a webform submission edit form as a render element. Webform has this functionality built in for Webform creation forms, but I did not see a way to do it for editing a submission.

Usage:
($sid is the webform submission id)

$form['webform_editor']=[ '#type' => 'webform_edit', '#sid'=>$sid, ];
Categories: Drupal

Pages

Subscribe to As If Productions aggregator