Come to GDC 2017 and learn to design great reward systems for games

Social/Online Games - Gamasutra - 31 January 2017 - 9:35am

Forget everything you've heard about "dopamine" -- Epic Games' Ben-Lewis Evans is giving a great, well-informed talk at GDC 2017 that will empower you to build better game reward systems. ...

Categories: Game Theory & Design

Yonder: The Cloud Catcher Chronicles An Episodic Audio Journal Episode One: Risky Beginnings - by Stephan Schutze Blogs - 31 January 2017 - 7:05am
A multi part development journal that will discuss the dynamic music and SFX for the open world of Yonder: The Cloud Catcher Chronicles and examine the risks and challenges encountered.
Categories: Game Theory & Design

Getting motivated and becoming part of the VR community - by Christopher Guzman Blogs - 31 January 2017 - 7:05am
Some knowledge I gained from reading Virtual Reality Insider by Sky Nite and Entering the Metaverse: A Guide to Joining the Virtual Reality Industry by Liv Erickson
Categories: Game Theory & Design

Pricing a Roguelike - by Josh Ge Blogs - 31 January 2017 - 7:04am
Explaining how Cogmind's price points were determined, the effects of tiered pricing and price changes, and what funding can do for roguelikes.
Categories: Game Theory & Design

Azkend 2 and Match-3 Games on Consoles - by Stanislav Costiuc Blogs - 31 January 2017 - 7:04am
I examine why Match-3 games feel good to play on tablets and PC and why this is a challenge for consoles.
Categories: Game Theory & Design

Free the Frog Post Mortem - by Levi Smith Blogs - 31 January 2017 - 7:04am
Free the Frog is the game that I developed for the Ludum Dare game development competition in December 2016. In this article, I explain the process I used for developing the game.
Categories: Game Theory & Design DIY Drupal hosting: Aegir

Planet Drupal - 31 January 2017 - 6:23am

I had started this series with a post about what features will be evaluated when selecting DIY Drupal hosting solutions. We shall start with the most simplest and earliest solution of them all, Aegir. First, the nomenclature. Aegir is the God of seas and oceans in Norse folklore, much like Varuna in the Hindu pantheon.

Categories: Drupal

CiviCRM Message Templates, Features Export

New Drupal Modules - 31 January 2017 - 5:05am

Integrates CiviCRM's Message Templates with the Features module. After this module is enabled, you will see a new "CiviCRM Message Templates" section in the Features UI that lists the available templates.

Categories: Drupal Default Search API Sorts Per View in Drupal 7

Planet Drupal - 31 January 2017 - 2:24am

It's been a while since I've written a post here (especially, Drupal-related). But today I have something interesting to share.

There's a module called Search API sorts ( that provides custom sorts and a global sort block for Search API. The module itself is ok, but ...

Read now

Categories: Drupal

5e NPCs: Bullies and Brutes

New RPG Product Reviews - 31 January 2017 - 1:38am
Publisher: Dire Rugrat Publishing
Rating: 5
An review

This collection of NPCs clocks in at 44 pages, 1 page front cover, 1 page editorial, 1 page ToC (including challenge ratings), 1 page SRD, 1 page advertisement, 1 page back cover, leaving us with 38 pages of content, so let's take a look!

This review was moved up in my review-queue as a prioritized review at the behest of my patreons.

The pdf covers a total of 18 characters, ready to be inserted into your game, which range from CR 1/2 to CR 18. Fans of the Tangible Taverns/Tavern Tales product-lines will notice some overlap regarding the NPCs, as for example Pie-Eating Pete or Tuffy Brokehaft make a reappearance herein - which can be considered to be a slight detriment for some - personally, I would have preferred an all-new cast, but considering that the vast majority of NPCs is new, I can live with that.

Speaking of which - in case you are not familiar with Dire Rugrat's 5e-character design philosophy: Instead of making just numbers and replicating pre-existing abilities, one of the charming peculiarities in their books would be that characters do actually receive special, unique abilities. Beyond these, the characters each come not only with a statblock, but also with their own artwork - these either are hand-drawn or stock. Most, but not all characters herein also feature a word of advice in a small box on how to best use them.

Now, what type of characters can we find herein? Well, for one, e.g. Pie-eating Pete or Jaiblik Nibork would represent two characters best describes as, bingo, bullies - Pete's signature ability, for example, lets him consume insane amounts of food, while Mr. Nibork is known for his incessant cursing and rambling, which can be pretty distracting for assailants.

These guys and a particularly cantankerous lady would be more on the semi-social side of things, but they are not the only characters herein - if you're looking for an instant-villain, you'll find the like herein. Take Lockjaw, the half-orc cannibal who can initiate grapples with his bite and who receives temporary hit points for biting foes. More ambiguous in use would be Butcher Bill, the dwarven headhunter, whose prickly spiked armor and expertise at shoving foes deserves mention.

Need a slaver? Hesssk Ta'Vaoren and his two worgs deliver just that -and there is more to the trio than meets the eye, for Hesssk not only is a master of the whip, he maintains also quasi-telepathic contact with them, making surprising them pretty hard. There would be a half-orc, wondering of what may have been and his fellow she-devil with a sword. There also is an enchantress-information broker with a mega-powerful way of maintaining control over dominated foes. There is also a corrupt guard captain (ironically named "shill") and a half-elven, humans hating eco-terrorist ready to shed blood.

There would be a halfling enforcer with a fear-inducing reaction stare, who may not only break legs - her cold fury is something to witness. That being said, the ability diverges a bit from how 5e usually handles the like, providing a 3/day hard cap, instead of tying it to long rests, analogue to the barbarian's rage feature. The powerful drow evoker Vreix Azztelle may pinpoint AoE spells to instead affect single targets and is pretty cool - however, if you're very picky about this kind of thing, the character is missing the drow magic feature the race usually has. Aforementioned half-orc cad also does not have the usual relentless endurance feature. Now, it is pretty evident that such features were exchanged for others that fit the characters better, but depending on your stance on NPCs and racial features, it still is worth mentioning. In dubio pro reo - I will not hold that against the pdf.

However, where things become ever so slightly annoying from a reviewer's perspective would be with the per se pretty cool Kel, the Blessed - a tiefling underboss with several nice, luck-themed abilities, whose hellish rebuke is noted as innate spellcasting, which does not include the note at what spell-level the spell is cast - a mostly cosmetic hiccup, but a blemish in one of the coolest characters herein. Seriously a nice character, though -and yes, I am nitpicking hard here.

Speaking of cool characters: Urden Shalespear, the dwarven herald of entropy, pretty much looks like the NPC-version of a class/archetype I have recently written and gets some cool tricks: Beyond an aura that brings desiccation and destruction, he is reborn in a bleak phoenix-like burst when slain---but pays a hafty price for this power. Oh, and he can tear open a devastating gate into nothingness, duplicating a new 9th-level spell featured herein. Slight complaint: The spell does not note for which classes it is appropriate. A suggestion would have been nice to see.

The final character herein, Lady Davia Belcouer, would be a powerful champion of the hells: With a sword of wounding, a powerful magical armor and the ability to behead foes with discernible heads, she also has no less than 3 legendary actions to negate crits or use Charisma-saves instead of others, making her a viable campaign-endgame adversary.


Editing and formatting are very good - I noticed no significant hiccups in the rules-language and the pdf is similarly well put together in the formal department. Layout adheres to a pretty printer-friendly two-column b/w-standard and the pdf sports a solid piece of full-color artwork for each NPC - some are stock, but most are actual pieces drawn by the authors. The older pieces here do show that they have refined their crafted compared to the newer ones. Still, nice to see. The pdf comes fully bookmarked for your convenience.

Kelly and Ken Pawlik's collection of 5e adversaries is a pdf worth getting, let's get that right out of the way. The price-point is pretty fair and the characters feel like actual characters. The lengths to which I needed to go to nitpick some aspects here should tell you something about this pdf, namely that it is a neat, well-made collection. The only truly relevant gripe I can field against this economically-priced, inexpensive collection would be the inclusion of previously-featured characters. Even if you take these away, the bang to buck ratio is still pretty neat, though - which is why my final verdict will clock in at 5 stars.

Endzeitgeist out.
Categories: Game Theory & Design

Web Omelette: Advanced techniques for route access control in Drupal 8

Planet Drupal - 31 January 2017 - 12:00am

Drupal 8 is very flexible when it comes to controlling access to your routes. It inherits quite a bit from the Symfony routing system, but adds its own flavour on top of that. In this article we are going to look at an example of a complex access requirement. In doing so, we won't cover the simpler use cases which are already described in the docs, but we will sure make use of some of them.

The requirement

So let's imagine this scenario: we have two types of users (employees and managers) whose persona is not determined by a user role. Let's say their "role" is determined on the fly as a result of an API call or some dynamic thing.

Now, let's say we have 3 routes: Route A (accessible for employees only), Route B (accessible for managers only) and Route C (accessible for both).

Finally, imagine we have a service called UserType which we can ask what type of person the current user is.


One of the cool things about the Route access control in Drupal 8 is the ability, as the docs show, to delegate the access checking to a service. So a basic implementation for Route A and Route C can be something like this.

my_module.route_a: path: 'route-a' defaults: _controller: '\Drupal\my_module\Controller\DefaultController::buildRouteA' _title: 'Route A' requirements: _company_access_check_employee: 'true'

This is the route definition. As you can see, as per the docs, we have a requirement for the company_access_check access service to return the access result. So let's quickly see that service:

my_module.company_access_check: class: Drupal\my_module\Access\CompanyAccessCheck arguments: ['@user_type'] tags: - { name: access_check, applies_to: _company_access_check_employee }

A simple tagged service definition with a dependency to our fictitious UserType service that tells us the type of person the current user is. Additionally, we specify that this access checking service should be applied to all routes with the requirement _company_access_check_employee.

I am not going to show you this class because an example is already covered in the docs. However, it has one method called access() which by default gets passed the AccountInterface of the current user. So with the help of our UserType service we can determine whether the current user is an employee. Then we can return either AccessResult::forbidden() or AccessResult::allowed().

For managers, we do the same: create a new service and apply it to Route C.

So where does the complication come? Well, you guessed it: Route B which requires both. If we add two requirements to the route, let's say something like this:

my_module.route_b: path: 'route-b' defaults: _controller: '\Drupal\my_module\Controller\DefaultController::buildRouteB' _title: 'Route B' requirements: _company_access_check_employee: 'true' _company_access_check_manager: 'true'

It will check for both but grant access only if both return positive. So in our case this won't be very helpful since we need to check if the user is either. For the purposes of this article, please forgive the implication that managers are not also employees.

The solution

What we can do is create another access service called something like company_access_check_both which is responsible for determining if the current user is of one of the user roles. This is fine if our requirements are as simple as we described them. But what happens when we have multiple user types and a bunch of different routes where we have to mix and match the user types which have access to them? Creating a service for all these different types of combinations is not very efficient.

So instead, let's create a generic service called company_access_check_multiple AND specify in the route the type of user that has access to it in the form of a custom option. For example, the route definition can be something like this:

my_module.route_b: path: 'route-b' defaults: _controller: '\Drupal\my_module\Controller\DefaultController::buildRouteB' _title: 'Route B' requirements: _company_access_check_multiple: 'true' options: _company_access_users: - Employee - Manager

In this route we created a custom option called _company_access_users in which we list the types of users that should have access to it.

But how can we make use of this inside our service? Well, the Route object can be inspected and the list of allowed user types can be retrieved:

$types = $route->getOption('_company_access_users');

So if the route has that option, $types will tell us what type the current user needs to be in order to have access.

However, where do we get the Route object? As we know, the access() method of the service only receives the user account as a parameter. We might be tempted to inject the current route match service into our own. This does the trick, but only when the route in question is being checked upon a user actually going to it. It will miserably fail when a given route is being checked for access from another one (for example when building menu links).

If we dig deep and look closely, before our access() method is called, an arguments resolver is employed via the AccessArgumentsResolverFactory. This allows for the current user account to be passed to the access() method. But what not many people know is that if we type hint our access() method with either Route, RouteMatchInterface or Request, we will be getting those parameters as well. And in this case, the Route object is that of the route being checked for access rather than the current route.

So something like this:

public function access(AccountInterface $account, Route $route) { $types = $route->getOption('_company_access_users'); // etc }

So there you have it. A neat little trick that opens the door to some complex access restriction rules on your routes.

Categories: Drupal

The RPGnet Newsletter: RPGnet Newsletter #86

RPGNet - 31 January 2017 - 12:00am
Fate Core, Cortex, and (as usual) more.
Categories: Game Theory & Design

Sandy's Soapbox: Science as an RPG: Level 20 Theory

RPGNet - 31 January 2017 - 12:00am
Leveling up scientific theories.
Categories: Game Theory & Design Blog: AGILEDROP: Virtual Drupal Camps

Planet Drupal - 30 January 2017 - 11:41pm
Drupal events have a lot of positive things for Drupal users. We highlighted them in the previous blog post. But there are many Drupalistas around the world, who can't attend such events, due to the expenses, time, work responsibilities, and many other reasons including the fact that many don't live near any of the available Drupal Camps. With that, they are automatically deprived for knowledge about Drupal. And that knowledge may come in hand for them, especially if they professionally work with Drupal. Luckily, organizers came up with one of the solutions. It's online or virtual Drupal Camp… READ MORE
Categories: Drupal

An object at rest

Adventures in Interactive FIction - 17 May 2008 - 2:03pm

So obviously, the pendulum of progress stopped swinging on my game.  As much as I tried to prevent it, pressing obligations just wouldn’t take a back seat (nor would the burglars who, a few weeks ago, stole 90% of my wardrobe and who last week stole my monitor).  So after a string of hectic weekends and even crazier weeks, this weekend has been pretty wide open for doing whatever I want to do.  And not a moment too soon!

So after doing all the other things I try to do with my weekends, I finally loaded up the ol’ Inform 7 IDE and started working on my game.  To get me back in the swing of things, so to speak, I started reading through what I’d already written.  It was an interesting experience.

Strangely, what impressed me most was stuff I had done that I have since forgotten I learned how to do.  Silly little things, like actions I defined that actually worked, that had I tried to write them today, probably would have had me stumped for a while.  Go me!  Except, erm, I seem to have forgotten more than I’ve retained.

I also realized the importance of commenting my own code.  For instance, there’s this snippet:

A thing can be attached or unattached. A thing is usually unattached. A thing that is a part of something is attached.

The problem is, I have no idea why I put it in there – it doesn’t seem relevant to anything already in the game, so I can only imagine that I had some stroke of genius that told me I was going to need it “shortly” (I probably figured I’d be writing the code the next night).  So now, there’s that lonely little line, just waiting for its purpose.  I’m sure I’ll come across it some day; for now, I’ve stuck in a comment to remind myself to stick in a comment when I do remember.

It reminds me of all the writing I did when I was younger.  I was just bursting with creativity when I was a kid, constantly writing the first few pages of what I was sure was going to be a killer story.  And then I’d misplace the notebook or get sidetracked by something else, or do any of the million other things that my easily distracted self tends to do.  Some time later, I’d come across the notebook, read the stuff I’d written and think, “Wow, this is great stuff!  Now… where was I going with it?”  And I’d never remember, or I’d remember and re-forget.  Either way, in my mother’s attic there are piles and piles of notebooks with half-formed thoughts that teem with potential never to be fulfilled.

This situation – that of wanting to resume progress but fumbling to pick up the threads of where I left off –  has me scouring my memory for a term I read in Jack London’s Call of the Wild.  There was a part in the book where Buck’s owner (it’s late, his name has escaped me) has been challenged to some sort of competition to see if Buck can get the sled moving from a dead stop.  I seem to remember that the runners were frozen to the ground.  I thought the term was “fast break” or “break fast” or something to that effect, but diligent (does 45 seconds count as diligent?) searching has not confirmed this or provided me with the right term.  Anyway, that’s how it feels tonight – I feel as if I’m trying to heave a frozen sled free from its moorings.

The upside is, I am still pleased with what I have so far.  That’s good because it means I’m very likely to continue, rather than scrap it altogether and pretend that I’ll come up with a new idea tomorrow.  In the meantime, I’ll be looking for some SnoMelt and a trusty St. Bernard to get things moving again.


Time enough (to write) at last…

Adventures in Interactive FIction - 14 April 2008 - 3:24pm

So I didn’t get as much coding done over the weekend as I had hoped, mainly because the telephone company *finally* installed my DSL line, which meant I was up til 5:30 Saturday am catching up on the new episodes of Lost.  That, in turn, meant that most of the weekend was spent wishing I hadn’t stayed up until such an ungodly hour, and concentration just wasn’t in the cards.

However, I did get some stuff done, which is good.  Even the tiniest bit of progress counts as momentum, which is crucial for me.  If the pendulum stops swinging, it will be very hard for me to get it moving again.

So the other day, as I was going over the blog (which really is as much a tool for me as it is a way for me to share my thoughts with others), I realized I had overlooked a very basic thing when coding the whole “automatically return the frog to the fuschia” bit…

As the code stood, if the player managed to carry the frog to another room before searching it, the frog would get magically returned to the fuschia.  This was fairly simple to resolve, in the end – I just coded it so that the game moves (and reports) the frog back to fuschia before leaving the room.  I also decided to add in a different way of getting the key out of the frog – in essence, rewarding different approaches to the same problem with success.

Which brings me to the main thrust of today’s post.  I have such exacting standards for the games I play.  I love thorough implementation.  My favorite games are those that build me a cool gameworld and let me tinker and explore, poking at the shadows and pulling on the edges to see how well it holds up.  A sign of a good game is one that I will reopen not to actually play through again, but to just wander around the world, taking in my surroundings.  I’ve long lamented the fact that relatively few games make this a rewarding experience – even in the best games, even slight digging tends to turn up empty, unimplemented spots.

What I am coming to appreciate is just how much work is involved in the kind of implementation I look for.  Every time I pass through a room’s description, or add in scenery objects, I realize just how easy it is to find things to drill down into.  Where there’s a hanging plant, there’s a pot, dirt, leaves, stems, wires to hang from, hooks to hang on, etc.  Obviously, unless I had all the time in the world, I couldn’t implement each of these separately, so I take what I believe to be the accepted approach and have all of the refer to the same thing.  Which, in my opinion, is fine.  I don’t mind if a game has the same responses for the stems as it does for the plant as a whole, as long as it has some sort of relevant response.  Even so, this takes a lot of work.  It might be the obsessive part of me, but I can’t help but think “What else would a person think of when looking at a hanging plant?”

Or, as I’ve come to think of it:  WWBTD?

What Would Beta Testers Do?

I’ve taken to looking at a “fully” implemented room and wondering what a player might reasonably (and in some cases unreasonably) be expected to do.  This is a bit of a challenging process for me – I already know how my mind works, so trying to step outside of my viewpoint and see it from a blind eye is hard.   I should stop for a second to note that I fully intend to have my game beta tested once it reaches that point, but the fewer obvious things there are for testers to trip over, the more time and energy they’ll have for really digging in and trying to expose the weaknesses I can’t think of.

I’ve found one resource that is both entertaining and highly informative to me:  ClubFloyd transcripts.  ClubFloyd, for the uninitiated (a group among which I count myself, of course) is a sort of cooperative gaming experience — if anyone who knows better reads this and cares to correct what may well be a horrible description, by all means!– where people get together on the IFMud and play through an IF title.  The transcripts are both amusing and revealing.  I recently read the Lost Pig transcript and it was quite interesting.  The things people will attempt to do are both astonishing and eye-opening.  In the case of Lost Pig (which, fortunately, I had already played before reading the transcript), what was even more amazing was the depth of the game itself.  I mean, people were doing some crazy ass stuff – eating the pole, lighting pants on fire, and so on.  And it *worked*.  Not only did it work, it was reversible.  You obviously need the pole, so there’s a way to get it back if, in a fit of orc-like passion, you decide to shove it in down Grunk’s throat.

Anyway, my point is, the transcripts gave me a unique perspective on the things people will try, whether in an effort to actually play the game, to amuse themselves, or to amuse others.  Definitely good stuff to keep in mind when trying to decide, say, the different ways people will try to interact with my little porcelain frog.

Other Stuff I Accomplished

So I coded in an alternate way to deal with the frog that didn’t conflict with the “standard” approach.  I also implemented a few more scenery objects.  Over the course of the next few days, I’m going to try to at least finish the descriptions of the remaining rooms so that I can wander around a bit and start really getting to the meat of it all.  I also want to work on revising the intro text a bit.  In an effort to avoid the infodumps that I so passionately hate, I think I went a little too far and came away with something a bit too terse and uninformative.  But that’s the really fun part of all of this – writing and re-writing, polishing the prose and making it all come together.

Whattaya know.  Midnight again.  I think I’m picking up on a trend here.


Day Nothing – *shakes fist at real life*

Adventures in Interactive FIction - 8 April 2008 - 12:13pm

Grrr… I’ve been so bogged down in work and client emergencies that progress on the game is at a temporary (no, really!  Only temporary) standstill.  I’ve managed to flesh out a few more room and scenery descriptions, but have not accomplished anything noteworthy in a few days.  Hopefully after this week most of the fires on the work front will be extinguished, and I’ll have time to dive into the game this weekend.

(She says to no one, since there’s been one hit on this blog since… it started.)



Subscribe to As If Productions aggregator