Powered By Blogger

الثلاثاء، 22 سبتمبر 2020

Another One Bites The Dust

What's going on everyone!?


Today for the #2019gameaday challenge I played a solo game of Ticket to Ride and yet again lost, lol!

I've also been a bit busy with a huge life goal of ours so please excuse the short post as I'm honestly drained from a long day. 


As always, thank you for reading and don't forget to stop and smell the meeples! :)

-Tim

الاثنين، 21 سبتمبر 2020

Exploring Monster Taming Mechanics In Final Fantasy XIII-2: Viewing Data

Rails apps are built on an MVC (Model, View, Controller) architecture. In the last few articles of this miniseries, we've focused exclusively on the model component of MVC, building tables in the database, building corresponding models in Rails, and importing the data through Rails models into the database. Now that we have a bunch of monster taming data in the database, we want to be able to look at that data and browse through it in a simple way. We want a view of that data. In order to get that view, we'll need to request data from the model and make it available to the view for display, and that is done through the controller. The view and controller are tightly coupled, so that we can't have a view without the controller to handle the data. We also need to be able to navigate to the view in a browser, which means we'll need to briefly cover routes as well. Since that's quite a bit of stuff to cover, we'll start with the simpler monster material model as a vehicle for explanation.

Final Fantasy XIII-2 Battle Scene

Create All The Things

Before we create the view for the monster material model, we'll want to create an index page that will have links to all of the views and different analyses we'll be creating. This index will be a simple, static page so it's an even better place to start than the material view. To create the controller and view for an index page, we enter this in the shell:
$ rails g controller Home index
This command creates a bunch of files, but most importantly for this discussion it creates app/controllers/home_controller.rb and app/views/home/index.erb. If you haven't guessed by the names, these are our home controller and view for the index page, respectively. The command also creates an entry in config/routes.rb for the route to the index page. We want to add an entry to this file so that going to the root of our website will also take us to the index:
Rails.application.routes.draw do
get 'home/index'
root 'home#index'
end
These routes are simple. The first one says if we go to our website (which will be at http://localhost:3000/ when we start up the server in a minute), and go to http://localhost:3000/home/index, the HTML in app/views/home/index.erb will be rendered to the browser. The next line says if we go to http://localhost:3000/, that same HTML will be rendered. Currently, that page will show a simple header with the name of the controller and action associated with the page, and the file path to the view:
<h1>Home#index</h1>
<p>Find me in app/views/home/index.html.erb</p>
Let's change that to something closer to what we're aiming for:
<h1>Final Fantasy XIII-2 Monster Taming</h1>
<%= link_to 'Monster Materials', '#' %>
That second line with the link is created with a special line of code using the '<%= ... %>' designation. This file is not pure HTML, but HAML, an HTML templating language. The '<%= … %>' tag  actually means that whatever's inside it should be executed as code and the output is put in its place as HTML. The link_to function is a Rails function that creates the HTML for a link with the given parameters. Now we have a proper title and the first link to a table of data that doesn't exist. That's why I used the '#' character for the link. It tells Rails that there should be a link here, but we don't know what it is, yet. More precisely, Rails will ignore the '#' at the end of a URL, so the link will show up, but it won't do anything when it's clicked. Now let's build the page that will fill in the endpoint for that link.

Create a Monster Materials Page

Notice that for the index page we created a controller, but we didn't do anything with it. The boilerplate code created by Rails was sufficient to display the page that we created. For the materials page we'll need to do a little more work because we're going to be displaying data from the material table in the database, and the controller will need to make that data available to the view for display. First thing's first, we need to create the controller in the shell:
$ rails g controller Material index
This command is identical to the last Rails command, and it creates all of the same files for a material controller and view and adds an entry in config/routes.rb for the new page:
Rails.application.routes.draw do
get 'material/index'
get 'home/index'
root 'home#index'
end
In both cases we're creating a controller with only one action, but a Rails controller can have many different actions for creating, reading, updating, and deleting objects from a model. These are referred to as CRUD actions. Since we're only going to be viewing this data, not changing it in any way, we just need the read actions, and more specifically the index action because we're only going to look at the table, not individual records. Therefore, we specified the 'index' action in the generate command so the others wouldn't be created. Now it's time to do something useful with that action in app/controllers/material_controller.rb:
class MaterialController < ApplicationController
def index
@materials = Material.all
end
end
All we had to do was add that one line in the index action, and we've made all of the material model data available to the view. The view has access to any instance variables that are assigned in the controller, so @materials contains all the data we need to build a view of the material table. The HTML code to render the view is a bit more complex, but still pretty simple:
<h1>Monster Materials</h1>

<table>
<tr>
<th>Name</th>
<th>Grade</th>
<th>Type</th>
</tr>

<% @materials.each do |material| %>
<tr>
<td><%= material.name %></td>
<td><%= material.grade %></td>
<td><%= material.material_type %></td>
</tr>
<% end %>
</table>
The first half of this code is normal HTML with the start of a table and a header defined. The rows of table data are done with a little HAML to iterate through every material that we have available in the @materials variable. The line with '<% ... %>' just executes what's within the brackets without outputting anything to render. The lines that specify the table data for each cell with '<%= ... %>' will send whatever output happens—in this case the values of the material properties—to the renderer. We could even create dynamic HTML tags in this embedded code to send to the renderer, if we needed to. Here we were able to create the 40 rows of this table in seven lines of code by looping through each material and sending out the property values to the table. This tool is simple, but powerful.

Now we have another page with a table of monster materials, but we can only reach it by typing the correct path into the address bar. We need to update the link on our index page:
<h1>Final Fantasy XIII-2 Monster Taming</h1>
<%= link_to 'Monster Materials', material_index_path %>
It's as simple as using the provided helper function for that route! Rails creates variables for every route defined in config/routes.rb along with a bunch of default routes for other things that we won't get into. We can see these routes by running "rails routes" in the shell, or navigating to /routes on the website. Actually, trying to navigate to any route that doesn't exist will show the routes and their helper functions, which is what happens when we try to get to /routes, too. How convenient. Now we can get to the monster material table from the main index, and amazingly, the table is sorted the same way it was when we imported it. It's pretty plain, though.

Adding Some Polish

The material table view is functional, but it would be nicer to look at if it wasn't so...boring. We can add some polish with the popular front-end library, Bootstrap. There are numerous other more fully featured, more complicated front-end libraries out there, but Bootstrap is clean and easy so that's what we're using. We're going to need to install a few gems and make some other changes to config files to get everything set up. To make matters more complicated, the instructions on the GitHub Bootstrap Ruby Gem page are for Rails 5 using Bundler, but Rails 6 uses Webpacker, which works a bit differently. I'll quickly summarize the steps to run through to get Bootstrap installed in Rails 6 from this nice tutorial.

First, use yarn to install Bootstrap, jQuery, and Popper.js:
$ yarn add bootstrap jquery popper.js
Next, add Bootstrap to the Rails environment by adding the middle section of the following snippet to config/webpack/environment.js between the existing top and bottom lines:
const { environment } = require('@rails/webpacker')

const webpack = require('webpack')
environment.plugins.append('Provide',
new webpack.ProvidePlugin({
$: 'jquery',
jQuery: 'jquery',
Popper: ['popper.js', 'default']
})
)

module.exports = environment
Then, set up Bootstrap to start with Rails in app/javascript/packs/application.js by adding this snippet after the require statements:
import "bootstrap";
import "../stylesheets/application";

document.addEventListener("turbolinks:load", () => {
$('[data-toggle="tooltip"]').tooltip()
$('[data-toggle="popover"]').popover()
})
We may never need the tooltip and popover event listeners, but we'll add them just in case. As for that second import statement, we need to create that file under app/javascript/stylesheets/application.scss with this lonely line:
@import "~bootstrap/scss/bootstrap";
Finally, we need to add a line to app/views/layouts/application.html.erb for a stylesheet_pack_tag:
<!DOCTYPE html>
<html>
<head>
<title>Bootstrapper</title>
<%= csrf_meta_tags %>
<%= csp_meta_tag %>

<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
<%= stylesheet_pack_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
<%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %>
</head>

<body>
<%= yield %>
</body>
</html>
Whew. Now, we can restart the Rails server, reload the Monster Material page…and see that all that really happened was the fonts changed a little.


Still boring. That's okay. It's time to start experimenting with Bootstrap classes so we can prettify this table. Bootstrap has some incredibly clear documentation for us to select the look that we want. All we have to do is add classes to various elements in app/views/material/index.html.erb. The .table class is a must, and I also like the dark header row, the striped table, and the smaller rows, so let's add those classes to the table and thead elements:
<h1>Monster Materials</h1>

<table id="material-table" class="table table-striped table-sm">
<thead class="thead-dark">
<tr>
<th scope="col">Name</th>
<th scope="col">Grade</th>
<th scope="col">Type</th>
</tr>
</thead>
I added an id to the table as well so that we can specify additional properties in app/assets/stylesheets/material.scss because as it is, Bootstrap stretches this table all the way across the page. We can fix that by specifying a width in the .scss file using the new id, and since we're in there, why don't we add a bit of margin for the header and table, too:
h1 {
margin-left: 5px;
}

#material-table {
width: 350px;
margin-left: 5px;
}
We end up with a nice, clean table to look at:


Isn't that slick? In fairly short order, we were able to set up an index page and our first table page view of monster materials, and we made the table look fairly decent. We have five more tables to go, and some of them are a bit more complicated than this one, to say the least. Our site navigation is also somewhere between clunky and non-existent. We'll make progress on both tables and navigation next time.

السبت، 12 سبتمبر 2020

Train Busting

Thursday night I watched a 1951 Civil War drama called "Drums in the Deep South". Typical stuff, best friends from West Point now on opposite sides, girl in the middle. However,  one aspect of the movie caught my imagination. The Reb officer has dragged a battery up onto a vertical sided, rocky, hill overlooking a train track feeding Sherman's army, his old Yankee friend of course, is the one given the task of claring him out.

Well, since I now have just such a rocky outcrop, a train, and some toy soldiers.....




Still working out the final details of my scenario. It won't have much in common with the movie beyond the battery on the rocky outcrop and a train, but should be fun or at least a change from my usual scenarios. 

Suzy Cube Update: May 25, 2018

#SuzyCube #gamedev #indiedev #madewithunity @NoodlecakeGames 
My apologies! The day just flew right by and I only realized I forgot to write an update about three hour ago! Another packed week, but mostly bug fixes, so let's dive in!
Read more »

الجمعة، 4 سبتمبر 2020

Missed Classic: Hollywood Hijinx - Won! And Final Rating

Written by Joe Pranevich



Welcome back to Hollywood Hijinx. When I started this series ages ago, I intended to play and document each game in three posts, with an allowance that I would let fun or important games breathe more. I rarely managed this, especially as I got into the groove of doing research and describing the puzzles. Hollywood Hijinx joins this exclusive club of three-posters with my victory today and I'm glad to get it behind me. I had hoped to reach Beyond Zork by Christmas, but that seems unlikely now, especially with the detours and interesting things that crop up. Still, it is the journey and not the destination and I am just glad that I haven't bored you all to pieces with the twenty-somethingth Infocom game.

When we left off last week, I was stuck. I found eight of the ten "treasures" but two others were elusive. I have only three more items on my "unsolved puzzles" list: the underwater passage, mysterious hatch, and the computer. I was unable to find either a waterproof light source or the final punch card to solve two of those, and I have no leads on how to open the hatch. To make matters worse, it's just now 7:00 AM and I have only two hours left to find them all and win the game. I can restore or start over to play faster, but I'd rather not. (I already saw the "losing" scene last week when I tried to wait out the candles burning.) One of the things I detested about early text adventures was the "do it again, but faster" mechanic. That is not the kind of retro charm this game needs.

After much screwing around and searching, I needed to take a hint. The answer was a doozy: I needed to waterproof a match by dripping wax on it. I had never considered that this was possible, no doubt because I never made it beyond Cub Scouts as a kid. With that solution in hand, I'm back to the grotto to try again.



Isn't "see-saw" one of the strangest words in the English language?

Working my way through the grotto with the match isn't difficult, although I do have an "oops" moment when I dropped the flashlight on the beach before remembering that I could not return to get it later. I stash everything off at the house, ski down the stairs, and swim through the tunnel. Just like last time, I emerge into a dark room. I'm stymied immediately because you cannot light the match while swimming, but I discover that we can climb out onto the bank in the dark and then light it. That reveals a tunnel to the north. I start my way up, but the match goes out immediately, I realize that I'm still carrying the candle so I restore and light it before coming up the tunnel.

On the other end is a bomb shelter and one of the more blatantly complex ones that we have seen so far. It looks like something out of Looney Tunes:
Bomb Shelter
With its concrete walls and floor, this room looks like it could be a bomb shelter. A heavy-duty sawhorse has a heavy wooden plank across it. Suspended above the left end of the plank by a rope is a safe. The rope stretches from the safe, through a pulley in the ceiling, to the floor where it's tied to a pipe running along the wall. In the ceiling above the right end of the plank, there is a closed hatch. A long chain hangs down from the hatch. Just beneath the hatch, there is a pair of heavy-duty metal hooks protruding from the wall. There is a doorway leading south.
There is a ton going on, but the end result is obvious: we have a catapult that will be triggered by the safe dropping onto the left side of the plank. Just above the right side is a hatch; presumably we'll be able to fire someone or something up through the hatch by cutting the rope and releasing the safe. This takes some trial and error, but I pull the chain to open the hatch, prime the catapult by pushing down the hatch-end, use the candle to slowly burn through the rope, and then stand on the "down" side to rocket myself up and out of the shelter. We emerge on the cliff at the northern edge of the property where we saw the closed hatch and ladder earlier. The hatch is no longer closed. I climb back down into the bomb shelter and hang the ladder on the hooks so I can come and go as I please.


Upper Sandusky, Ohio Circa 1900-1910.

I hoped that the safe would break open when it crash landed, but that was not to be. It is a combination lock again, but not the same combo as before. The safe has a cute plaque which appears to be a Leather Goddesses of Phobos in-joke:

LEVY, REGAN, LEBLING
SAFE COMPANY
UPPER SANDUSKY, OHIO
1936

I'm sure that this isn't a hard puzzle if you are in the right state of mind, but I spent too much time thinking that the plaque was just a clever nod to a previous game rather than something important to this one. I recognized two of the three names as people critical to Infocom: Jim Levy was the CEO of Activision when the company was purchased and Dave Lebling was one of the founders, but I had to dig to work out who "Regan" was. He appears to be Harry Regan, the "Division Controller" (finance person) for Infocom under Activision, although a fun enough guy that he participated in some of Dave Anderson's antics according to his mentions in The Status Line. Players in 1987 are unlikely to be as intimately familiar with Infocom history as we are now.

I took another hint and I'd like your opinion on whether the puzzle was "fair" or not. The solution is that the three names make up the combination. They begin with "R" and "L" so we know it's to turn the dial left or right, but we can work out how far to turn by counting up the letters. Levy is four, for example. That makes the final combination left four, right five, then left seven. I pop open the safe and am rewarded with another treasure: a film copy of A Corpse Line, Uncle Buddy's final film that had been mentioned several times in the game and the manual. Apparently, he died while working on it and the print disappeared. Fortunately, we have a screening room in the house!


This doesn't look so bad… (or very good)

I head to the home theater and pop in the film, expecting to learn of another puzzle. What happens next is something else entirely. I don't think I can do anything but quote it in its entirety:
Immediately the projector begins to roll. The film starts to run through the projector and a stream of colored light shoots out of the lens onto the screen in the screening room.

Your eyes are immediately drawn to the screen. You quickly realize why "A Corpse Line" could never be released: From the back of a large theatre the camera slowly pans in. The camera moves forward and you are able to make out a dozen or more figures lying side-by-side on the stage in glittering top hats. Then the music starts and the figures rise to their feet. The camera is now close enough to see more detail. The figures are corpses, some badly decayed, clad in top hats. They begin to dance in unison as the music swells. For a moment you forget they are corpses and begin to enjoy their mastery of the art.

Then the horror begins, just as it must have for Uncle Buddy. The line does a kick, and several legs fly into the audience. You feel your heart pounding as never before. The corpses, gripping each other's shoulders, turn at the same time and a half-dozen arms are pulled from their sockets. You can't seem to catch your breath. It's as if a pile of bricks were stacked on your chest. As the number ends, the corpses (what's left of them) remove their hats to take a bow. The camera moves in close as they bend over and you see the tops of their heads have been removed. You begin to shake uncontrollably, then you feel what seems like an explosion in your chest. The last thing you see is the corpses' brains plop onto the stage as they take their bow. You collapse.

Fade to black:
**** You have died ****

Well… that was something. I restore and drop off the film in the Foyer with the rest of the junk.


Like this, but in Technicolor. 

It's now 7:40 AM and I still need to find the last punch card. There's not much time, so I ignore the clock and search the house, restoring back any time I get close to 9:00 AM. I poke in all of the crannies, prod all of the described objects in each room, and generally make a nuisance of myself. I eventually locate the missing card in the piano! I insert the cards into the computer slot in rainbow order and get the same phone number as before: 576-3140, except now I can read the bottom row. I use the upstairs phone to learn that it's Aunt Hildegard's answering machine where she sweetly tells us that she cannot come to the phone right now because she is dead. She also reminds me to "look in the hopper".

The hopper? I head back to the computer and see Uncle Buddy's toupee in a hopper on top of the computer, plus a wooden peg and a note. The note says to "come downstairs" for a surprise. I board the elevator and put in the final wooden peg, eager to claim my reward.

You put the chipped peg in the hole and the closet door slams shut. Without warning, the floor drops out from under you! You fall for several seconds then land with a bone-crunching thud, dropping everything you're holding. You slide down a twisting, slippery slide and are dumped into a room filled with props.

You look around the room and cannot believe what your eyes are seeing. There is Aunt Hildegard! She's tied to a conveyor belt of a whirring buzz saw and a man is standing over her. Aunt Hildegard sees you and screams. The man turns and you immediately recognize your childhood nemesis: Cousin Herman.


Herman doesn't seem like a monster yet...

We have reached the endgame! What follows is a battle of wits between two unarmed men. There are numerous props from Buddy's films scattered across the room. It seems that he even made a low-budget Zork movie, judging by the "elvish sword of great antiquity" included in the junk. There are also guns, a mop, and many other things. It seems that every turn, both I and Cousin Herman select an item at random and attack the other with it. Inevitably, we both learn that the weapon is "only a prop" and it breaks to bits rather than hurting either of us. Whether it's luck or designed this way, I eventually grab a prop that is "real" and knock Herman aside, allowing us to rescue Aunt Hilda. (Could he have grabbed it before I did? Is the ending just a roll of the dice?) Herman escapes and the game is over.
The conveyor belt stops and the buzz saw's blade begins to slow. As you untie your Aunt Hildegarde, Herman races toward the chute and jumps inside, disappearing. You hear his squeaky laugh trail off in the distance. Aunt Hildegarde gets up from the buzz saw rubbing the back of her head. Though a bit shaken, she explains she had been watching you while you searched for the "treasures."

"As I followed your progress I began to realize you and I were not the only ones on the estate. My suspicions were confirmed when I received a rap on the skull. The next thing I knew I was being tied to this buzz saw by your Cousin Herman," says Aunt Hildegarde. "I guess he couldn't stand to see you inherit the family fortune. Well, it's all yours now. I knew you could do it," says Aunt Hildegarde with satisfaction.

"I'm sorry I put you through all this, Pumpkin, but your Uncle Buddy and I had to be sure that whoever inherited the estate and the studio would be clever enough to handle it all. The only way I could be sure the stipulations in my will would be carried out would be to oversee it myself, so I faked my death," says Aunt Hildegarde, hugging you so tight she squeezes the air out of your lungs. "Tomorrow we'll go see my lawyer and he'll take care of all the paper work. I know you'll take good care of Hildebud and the studio. As for me, I'm sure it won't be long before the press discovers I'm alive. I plan to go to the south of France for a rest while the story leaks out. It will be great publicity for the studio," says Aunt Hildegarde. Then she adds, "And let's hope we've seen the last of your Cousin Herman."
Time played: 1 hr 30 min
Total time: 7 hr 30 min



Cutting Room Floor

Before I move onto the final rating, I'd like to take a quick detour into the source code. I didn't peek until after I won the game, but I discovered that Hollywood Hijinx (like Moonmist) has plenty of dead code and commented-out bits that describe a game that is a bit different than the one that we have played. There are no grand revelations, but these hints give us an idea how the editing process worked and what puzzles they made harder or easier as the game progressed. Of course, we only have one snapshot of the final source and there are certainly many revisions and details that are lost to us now. I'll do my best to recount what I find, but keep in mind that I have limited information and it is possible that I will jump to an incorrect conclusion. Caveat emptor, as they say.

The first thing I notice is the changed name: in nearly every file, the game is referred to as Anthill, short for Aunt Hildegard's Secret. Why they changed it, I can't say. People just liked it better that way? By this point, the Infocom rule of single word titles (for everyone not Steven Meretzky) had been long broken, but there's no trace in the code as to how or when the final "Hollywood" name was chosen.

The game also includes blocks of code or items copied verbatim from (at least) Enchanter, Sorcerer, Suspect, and Seastalker. I'm going to ignore these in my analysis because I don't see how "Belboz's Spellbook", the dungeon from Enchanter, or the exterior of the house from Suspect would factor into this one.


Impressive for ants, but it is unlikely to help copies fly off the shelf. 

Cousin Herman's Dark Adventure

Much like Trinity, we are fortunate to have one of the game's original design/pitch documents intact. This gives us a view into an earlier stage of the game which is notably much darker in tone than what we played. The design document starts with this set of quotes which nicely summarizes that Anderson knew that he was building something less "deep" from the start:
"If you were to wade into this plot's deepest complications, you would only get wet up to your ankles."
-- Aunt Hildegard
Analysis of Mid-eighties text adventure games
"So what, that's what they said about Suspended!"
-- Naked South American Indian Girl
on the postcard in Hollywood's office
The game would have begun just as our final version did, with our aunt's death, and the command to find ten treasures to claim her fortune. The text is explicit that "evil" Cousin Herman is next in line and that Aunt Hildegard isn't really dead (yet). Just like in the final version, this is all just a test to see if we deserve to inherit her fortune… until Herman shows up.

I'll quote the document for what happens next:
At first his plan is to simply scare you out of the house. Then really kill Aunt Hildegard (making it look like she died by accident setting up a puzzle for you). Or make it look like you did it. But if you aren't easily scared, by the middle (?) of the game things heat up and he tries to kill you. (Things that were harmless in the beginning of the game change, with some type of warning, and are now deadly.)
Herman kills our aunt and turns her cute little collection of puzzles into a House of Horrors where we will be lucky to escape with our lives. The document ends with Anderson not yet having decided whether the lawyer is on Herman's side, whether it is possible for you to save Aunt Hildegard (such as "trying to free her from a buzz saw"), and whether or not Herman will be dead by the end of the game.

This scenario is more menacing than the game we played, but perhaps too ambitious. If Anderson needed to build two versions of every puzzle for this twist, I doubt the game would have fit into memory. In a way, this reminds me of the light vs dark worlds in Wishbringer, but we will never know what was really planned. It could have been fun!


"A palatial palace, that was my home."

Editing the Game

Anderson appears to have massaged the opening text of the game several times as multiple versions appear in the code. None of the changes are significant, but two at least are fun: in one version, the lawyer's name is "Bob Jones", the real-life husband of co-designer Liz Cyr-Jones; in another, we find out that the house is "haunted". Given that Moonmist just did a haunted house, it seems best that was left on the cutting room floor.

It also appears as if the game would have started earlier in the day. The current version starts at 9:00 PM, when it is already dark, and ends at 9:00 AM. However, multiple sections of code have logic for handling sunset, such as having a room be lit at first and then turn dark as it gets later into the evening. We also would have had a message when sunset fell. The implications of this are that we could begin exploring the house in the daylight, with one of the actions potentially being to locate a light source before nightfall. Could this have connected to the "Evil Herman" plot from the design document, such as having the traps become deadlier after dark? Possibly, but there's also no evidence for it. This feature may have been excised simply to keep the number of descriptions down as it meant that they would not need to write daylight and night logic for everything.

As for the remainder of the puzzles, almost every one has some little nip or tuck that we can find in the source. Some puzzles became a bit easier and some became a bit harder. I found these changes:
  • Elevator/Bucket Puzzle - An original version of the puzzle was a bit easier as water was still turned on in the house. This meant that you could fill your bucket in the sink rather than having to discover the pond. There were even lawn sprinklers outside!
  • Projection Room Puzzle - We do not have all of the pieces, but an earlier version required you to assemble the film using a film splicer, probably requiring it to be done in the correct order. The final version was simplified and the 3-second loop of film is already in the screening room.
  • Grotto Puzzle - An earlier version of the grotto was larger (by at least one room) and had skeletons in the water. One engineer left a note in the comments that the skeletons may have been a bit much, plus wasn't the water supposed to be dark?
  • Maze Puzzle - Getting the yellowed paper to find the maze map was at one point much more difficult. The paper was hidden in a chandelier in the dining room, but there was no way to fish it out. We would have had to take a fireplace poker (from the "Living Room") and use a harp (found someplace) to fire it like a bow and arrow. If we did so, we could knock down the chandelier and retrieve the paper. Considering that we could just throw the poker to have the same effect, I can see why this one might have not passed the test.
  • Computer Puzzle - The computer puzzle was mostly the same, but there is code that would have made the call to the answering machine quite different. A code block for the phone includes the "ask about" logic that was used in the previous mystery games. From what I could tell, the idea was that you could get someone on the phone and ask them questions. That was changed to just an answering machine message. As an easter egg, there are also code snippets for calling many of the phone numbers from previous Infocom adventures, such as the costume shop from Suspect.
  • Tokyo Puzzle - One small adjustment to the Tokyo model puzzle was that the buttons may have initially been labeled for easier understanding. The final version requires you to work it out by trial and error.
There is only one "new" puzzle that I discovered in the source, but the data is fragmentary enough that I'm not clear what was going on and it may have been nothing. There would have been a suit of armor in the Foyer, plus a collection of movie posters elsewhere in the house. The only poster that this version of the game details is for a movie called Melts in Your Mouth. Here is the synopsis:
Scientists discover that people who crave chocolate can actually get more pleasure from human flesh, but the acne is much worse. Soon the word leaks out and one brave chocoholic takes a bite out of her brother. The next ninety minutes are a frenzy of munching while scientists and candy makers race to find a cure. Morticians, sensing they are sitting on a gold mine, begin to market bizarre products like [??]. Soon the forces of good rally, with the aid of chainmail armor, rounding up the mis-guided flesh eaters along with anyone with a bad complexion.
Does that make any sense to you? It's possible that the armor relates to a puzzle involved in that movie or perhaps is one of the props itself. It may also be a coincidence. Other posters mentioned in the code (without descriptions) include Grapefruit Diet from Planet 9, and Plan 9 from Marketing. I'm not sure what either of those would have entailed. I also found a reference to an additional Aunt Hilda note with a "magic number" on it, but I do not find a clue where the note or number would have been used.


That looks painful.

I'm not on completely solid ground, but reading the code I have a feeling that the endgame with Cousin Herman and the buzzsaw was added relatively late to the process. My evidence is flimsy, but there is a significant amount of code in there for an endgame sequence where we drop off the treasures in the Living Room. The lawyer comes and counts them up, with different messages depending on how many you found, whether you found them but didn't leave them in the living room, and whether you were somewhere where the lawyer could find you at 9:00 AM. There is a lot of code for this, none of which most players would ever see because they would follow the instructions in the note and head downstairs. None of this is commented out and you can still trigger it by simply waiting around until 9:00 AM, although even if you "win" this way he scolds you for not following the note's instructions. I admit that it may be a stretch to conclude that just because this section was well-written, that it was intended to be the original end. It could just as easily have been that (like in Zork), a new path would open up to Aunt Hildegard only after the treasures were collected.

Enough spelunking! Let's rate this thing.


But wait, there's more!

Final Rating


Judging by the discussion on the introductory post, I expect that there is some disagreement as to where this game will land. I have second guessed myself more than once! Our rating system is not perfectly objective, but I will do my best.

Puzzles and Solvability - Hollywood Hijinx lives and dies by its puzzles. The "Atomic Chihuahua" sequence is utterly fantastic. It is not particularly difficult, but I cannot help but to keep thinking about it with a smile on my face. I'm smiling now! Other puzzles ranged from "good" to "okay" with the grotto having two of the worst puzzles strung together right in a row, plus the maze was a near-complete waste of time. My score: 5.

Interface and Inventory - This game sports the usual Infocom parser with no issues. It uses more ASCII art than most previous games, but not enough to change the score. My score: 4.

Story and Setting - Anderson was correct about the plot "only going up to your ankles", but it works as an old-fashioned scavenger hunt. The backstory that was revealed about Cousin Herman makes more sense in retrospect and I almost want to replay the game just to see the times that he was mentioned again with full context. The setting is fine but we've explored a lot of mansions in Infocom games and this one doesn't feel special. My score: 4.

Sound and Graphics - No sound or graphics. The game's limited ASCII art does not warrant a point here. My score: 0.

Environment and Atmosphere - The grounds were fun to explore, but I never felt scared or tense or even came to understand why our character loves this house so much. It all comes across as superficial, no matter how many celebrities are name-dropped as living nearby. My score: 3.

Dialog and Acting - Really great writing for much of the game, including the lovely-written Cousin Herman interludes and the amazing Atomic Chihuahua. I wish Cousin Herman had been a more interesting or well-rounded character in the end, but this game had fun prose. My score: 5.

Let's add that up: (5+4+4+0+3+5)/.6 = 35 points!



This score puts the game in line with Seastalker and a bit above Infidel and Cutthroats, but still in the bottom half of the canon. (It's also the same score as Zork I which I look back on now with some disappointment. I should have scored that game higher just based on how well it did what it did, but playing it immediately after the mainframe version was a bit of a letdown.) Looking over the scores, this game just succeeded in being a consistent game with some good puzzles and not being spectacular. But it is good and those who thought that this is one of the worst games in the set may be surprised by my answer.

Your average score guess was 35 so I'd say that the wisdom of the crowds was successful this time. Andy_Panthro guessed 36 and is our winner. Congratulations!

I'm currently doing research for Bureaucracy, but I might need a gap week to get that sorted out to get the history portion of the post in decent shape. Happy adventuring!