Digital Games Project – The OCADU Code Hunt

digigames-intro

Project Title :

The OCADU Code Hunt

Project Logline :

The OCADU Code Hunt explores the Grad Studies building through hidden clues, and riddles found along the hallways of OCADU!

Photo Documentation : Finished Product

Project Mandate

The OCADU Code Hunt lets players learn snippets of stories and history behind the room associated to the riddles. This game enhances the players knowledge about where to go when certain context about the room are provided to the them.

Project Description

The OCADU Code Hunt is a scavenger hunt type of game where players look for the QR Codes in the hallways of the OCADU Graduate Building. Clues may be found in the form of riddles found on the OCADU Code Hunt website.

In this game, you could break a code by solving the riddles associated with each letter of the given code. You may only be able to get the letter of the riddle by actually going to the room and find the QR Code placed in that room. Once the QR Code has been scanned, it gives you a phrase which you could then input to the OCADU Code Hunt website to solve the riddle. The riddle provides you with a letter that can help you break the entire code.And once you have finally broken the code, you are eligible to upload a photo or take a photo, and be included in the OCADU Code Hunt’s Hall of Fame!

The goal of this game is to help students and faculty learn more about the OCADU Graduate Building through little history and prominent quirks that make each room unique. Through imparting knowledge about certain rooms in forms of riddles,  players would be able to identify where to go when other students talk about the space but can not find the name of the space.

Alpha Testing :

The initial prototype can be found at : http://www.ruzette.com/digigames

It is still in its early stages as I had not taken into account the consequence of working in local server and transferring it into a web server. But alas, that is slightly working and apologies for minor setbacks you will experience along the way.

Development Notes and Photos :

Paper Prototyping

One thing that I found very challenging is to actually decide what to put into the game. To figure that out, I used an intensively interactive paper prototype that simulates the possible layout and functionalities of the game. By doing so, I was able to identify the logic flaws which needs to be addressed, as well as determining which functionalities would be highlighted to be prototyped.

This slideshow requires JavaScript.

Writing out the Database Schema and Working out the Process flows

After determining the front-end through the paper prototypes, I laid out all the data which needs to be stored in the database. I also created the pseudo codes on paper because I firmly believe in the traditional way of solving problems.

Since traditions are meant to be slow-paced and thorough, I took me longer to figure out how to address certain problems like: how I could retrieve the data through SQL, how do I show the data such that the layout does not look empty,  what kind of interaction would I want to let the players experience, etc.

Web Development

I wrote it using the Codeigniter framework which is almost basic as writing your code in pure PHP (not a good solution for a time-constraint related project). I figured that I am somewhat familiar with Codeigniter that I can use it to develop the game and include it to my skills and portfolio.

WordPress and its plugins also seem more probable while making the game. But I later figured that in a 3-week development project, I would rather be stuck in my code while customizing my things than be stuck with someone else’s code snippets and trying to find the underlying problem that their plugin is experiencing.

Next is that I tried putting layout and design through simple CSS and Javascript . For awhile, I had difficulty in incorporating jQuery UI in the website. I would sometimes fail to include the script tag. Or have the document ready function included in the javascript file at all times. And the javascript happens before page refresh and I would always refresh the page even before the onclick is triggered.

Riddles and Codes

The biggest and most important component of this game are the riddles that the player would solve in order to get which locations they would go to and get the QR Code “gems.” Since this project was in a very tight schedule and deadline, I had to pool my inner knowledge of what I knew about the OCADU Graduate Building.

I wonder if you would be able to guess where these are. If you do, brownie points for you!

To tell you the truth, I have no clue.
No one really knows about what they do.
But they’ve gotten more space than they should’ve have had.
And I think the next door neighbor don’t think them grand.

Familiar? How about this?

This may sound like the other research lab.
But it’s filled with Webb’s innovative slab.
All mobile and media, combined into one.
The technology’s growing, it’s far from being done.

No idea?

The trick to these riddles is to actually find some phrases that resembles the room that it relates to. Take for instance, the riddle found below :

I think I have never seen
As busy as this room could ever be.
I’ve seen them work like needle and thread.
Like marvelous pairs, they wear it proud or bare.

Key phrases would be :

  • Busy room
  • Work like needle and thread
  • Wearing it proud or bare

If you’ve searched long and hard, this room will always be full of people from daytime to nighttime. Next key phrase would also indicate that they are working with threads and needles so it must mean that they always work with fabrics. And the last key phrase, wearing it proud or bare, would indicate that at some point you would see them wear their own masterpiece, or have some “bare” entity like a mannequin wear it while they sew. 

Have you guessed where it is now? Walk around each floors and you will find this nifty room.

Setting up the QR Codes

Future Directions :

At this point, the game is far from complete. From the web development side :

  • I have to fix the bugs that the players will encounter while testing the game. Everything is currently too exposed and may be susceptible to getting hacked. One of my tasks to develop the security with my database so it is not prone to getting looked into.
  • Next up would be to design the overall aesthetics with more visually appealing and more inviting graphics to the website. I would like to play with inviting colors which could help in the overall engagement of the game.
  • Continue working on the Hall of Fame component, where the users can view every who has finished their codes and a little bit description about themselves.
  • Maybe include a community-type or collaborative component where players can join forces into answering one code with multiple riddles than solving on their own.
  • May include a 3D model of the whole graduate studies building in web form (like Google Street Maps but inside the building). That way, players could play the game remotely. This type of functionality would greatly help the international students in finding their way around the building before even coming to OCAD
  • Make the website camera-accessible for QR Code Scanning, Hall of Fame Screenshots, AR tags, etc.

From the physical space side :

  • Create physical prototypes that would be incorporated into the rooms without the cleaners, students, faculty removing these codes. Awhile back, I had a QR Code placed in the IAMD (6th floor) room. When I came and look for it yesterday, I could not find the QR code anymore. It would mean that (a) Someone removed it, or (b) I must have forgotten where I placed it.

From the writing side :

  • I honestly admit that I know just a quarter of the Graduate Studies building. I would still continue writing different riddles and codes that I know which are related to the space.
  • I may ask my peers and the faculty about what they think about a specific room and what they know about it.
  • Or, I could create a community-driven, create-your-riddle-related-to-your-workspace area. This list would be endless!

From the commercial side :

  • I have to come up with a good elevator pitch that this game could be used for the OCADU Graduate Orientation. So instead of visiting the places and get lost without any information on it, they could use this game to encourage collaboration with peers and quickly introduce themselves to the OCADU grounds in a more enjoyable way.
  • Talk with the person-in-charge to pitch this idea and how this could be introduced as a new concept for future uses.

Team Information :

This game was an individual project for the Digital Games 2 class. I am solely responsible for designing the theme, creating the database schema, creating the riddles and the codes, setting up the QR codes, and the overall web development work in jQuery, CSS, HTML, PHP and MySQL for the OCADU Code Hunt website.

Although I would greatly credit the:

  • CodeIgniter User Guide for the libraries and helpers that I used,
  • W3Schools for the quick tutorials of how I can use CSS and jQuery properly,
  • jQuery UI website for the demos on how I can include simple animations that enhance the Look and Feel of the website,
  • PHP manual and references,
  • Google for helping search out keywords and texts when I get stuck somewhere, and lastly,
  • StackOverflow for answering most of the questions that I needed to be answered.

Adjustable Book Stand

A couple of days ago, I was reading my usual book(Learning Python by Mark Lutz) on my bed. It later became difficult to concentrate on my book because I kept shifting reading positions which led to continuously adjusting the book stand’s back support.

DING! And an idea came to mind. What if I make an adjustable book stand so I don’t have to adjust it manually from behind?

Hmm… And it seemed like a pretty feasible idea.

The Adjustable Book Stand

So I made an adjustable book stand that uses Servo motors to control the book stand angle. The controls are two button switches that adjust to the user’s preferred reading angle.

Materials Used:

  • 1 Arduino Uno
  • 2 Analog Servo Motors
  • 2 Momentary Switch
  • 2 LEDs (Green and Red)
  • Tons of wires
  • Corrugated Board
  • Masking Tape
  • Basswood

The Challenges:

Without having a decent design and hardware-creation background, I was struggling to determine which materials work best in this scenario. So I had been a frequent visitor at the AboveGround Art Supplies and Curry’s Art Supplies Stores for days, continuously checking to see how each material would fit in my (1) budget, and (2) the book stand.

Another intriguing challenge was building the book stand from scratch! It was the first time  that I have used a saw and a drill gun without adult supervision. Well, my grandparents checked up on me for a while, just to (1) tease me about the mess in my room, and (2) checking if all my appendages are still intact. But yay! I was and will continue to be proud of myself for that.

While closing the enclosure for the controls, one of my momentary switches broke apart. So I had to cut the wires for the broken part, resolder a new switch and reconnect the wires. It was a good thing that I had a backup switch then, else I would’ve ran from my place to the nearest electronic shop for that.

Future Iterations:

I would probably work on finding better design solutions to the book stand so it can be a portable and nifty gadget. Also, since the Servo motors couldn’t handle heavy weights, I may look into designing better gear design solutions so I could change it into a DC motor or any similar motor which uses gears and belts.

Source Code: 

/*
*  @date 10/11/12
*  @author Ruzette Tanyag
*  @version Book Stand Source version 1.3
*  @description:
*      Source code for adjustable book stand. It uses two Servo motors to
*      adjust the angle of the stand. User interacts by pushing either two of
*      the momentary switches to determine the desired angle of the book stand.
*  @link
*  @license
*      This program is free software: you can redistribute it and/or modify
*      it under the terms of the GNU General Public License as published by
*      the Free Software Foundation, either version 3 of the License, or
*      (at your option) any later version.
*      This program is distributed in the hope that it will be useful,
*      but WITHOUT ANY WARRANTY; without even the implied warranty of
*      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
*      GNU General Public License for more details.
*
*      You should have received a copy of the GNU General Public License
*      along with this program.  If not, see <http://www.gnu.org/licenses/>.
*
*/

#include <Servo.h>

#define LEFT_SERVO_PIN 3
#define RIGHT_SERVO_PIN 5

#define DOWN_CTRL_MOMSWITCH_PIN 8
#define UP_CTRL_MOMSWITCH_PIN 9

#define DOWN_CTRL_LED_PIN 6
#define UP_CTRL_LED_PIN 7

/*
 *  Servo declarations
 */
Servo leftCtrlServo;
Servo rightCtrlServo;

/*
 *  Stores angle activity to pushed to the Servo motors.
 */
int rotateCtr;

  /*
   *  Arduino Constructor
   */
  void setup(){
    initPinMode();
    initNumbers();
  }

  /*
   *  Arduino Loop
   *
   *  Reads momentary switches activity. If either one is turned on, it lights the
   *  corresponding LED, increments/decrements the rotateCtr by 2 and pushes the value
   *  to the Servo motors.
   *
   */
  void loop(){
    int downCtrlRead = digitalRead(DOWN_CTRL_MOMSWITCH_PIN);
    int upCtrlRead = digitalRead(UP_CTRL_MOMSWITCH_PIN);

    if((downCtrlRead == HIGH) && (upCtrlRead == LOW)){
      digitalWrite(DOWN_CTRL_LED_PIN, HIGH);
      if(rotateCtr >= 0){
        rotateCtr -= 2;
        servoWrite(rotateCtr);
      }
    }else if((downCtrlRead == LOW) && (upCtrlRead == HIGH)){
      digitalWrite(UP_CTRL_LED_PIN, HIGH);
      if (rotateCtr <= 90){
        rotateCtr += 2;
        servoWrite(rotateCtr);
      }
    }else{
      digitalWrite(DOWN_CTRL_LED_PIN, LOW);
      digitalWrite(UP_CTRL_LED_PIN, LOW);
    }
    delay(20);
  }

  /*
   * Initializes pins on the Arduino board.
   */
  void initPinMode(){

    leftCtrlServo.attach(LEFT_SERVO_PIN);
    rightCtrlServo.attach(RIGHT_SERVO_PIN);

    pinMode(DOWN_CTRL_MOMSWITCH_PIN, INPUT);                            // Set INPUT on Down Control Momentary Switch
    pinMode(UP_CTRL_MOMSWITCH_PIN, INPUT);                              // Set INPUT on Up Control Momentary Switch

    pinMode(DOWN_CTRL_LED_PIN, OUTPUT);                                 // Set OUTPUT on Down Control LED
    pinMode(UP_CTRL_LED_PIN, OUTPUT);                                   // Set OUTPUT on Up Control LED
  }

  /*
   *  Initializes counters for counter increments and debugging purposes.
   */
  void initNumbers(){
    Serial.begin(9600);                                                 // Initializing Serial class for debugging purposes
    rotateCtr = 0;                                                      // Initialize rotateCtr var
  }

  /*
   *  Writes value to both Servo motors
   */
  void servoWrite(int ctr){
    int temp = map(ctr, 0, 179, 179, 0);
    leftCtrlServo.write(temp);
    rightCtrlServo.write(ctr);
  }

Living Room WIP : Models

I think I’m done…

Living Room WIP Update

It surprises me how I’m enjoying modelling this living room scene since I’ve only modelled separate household objects on a per-assignment basis. And it’s been a challenge putting them all together.

Nevertheless, I learn different techniques and tricks as I go along. And I love every bit of it. It also helps me kill time when I playblast my FX shots.

What I intend to do is make this room feel as cozy as possible. I still have to put some chairs, lamps and other smaller accessories before it’s finished. My classmates have already taken photos of themselves for the photo frames as a contribution to my living room scene. :P

WIP : Living Room Scene

3 – 2 – 1… And… I’m back!

This is one of the WIPs that I’ve been doing recently. I’m modelling a living room for a Bungalow type of house. I started this project 2-3 weeks ago and I try to finish modelling 1-2 furniture pieces once a week. There are also accessories and furnitures which needed to be modelled before I start lighting and texturing it.

Until then! :P

2011 in review

The WordPress.com stats helper monkeys prepared a 2011 annual report for this blog.

Here’s an excerpt:

The concert hall at the Syndey Opera House holds 2,700 people. This blog was viewed about 11,000 times in 2011. If it were a concert at Sydney Opera House, it would take about 4 sold-out performances for that many people to see it.

Click here to see the complete report.

Resizing Window Problem with Ubuntu 11.10

I started using Ubuntu 11.10 (Upgraded from 11.04) lately because my 2-yr old Macbook White has been experiencing kernel panics which deems unusable at the moment. So far, I am very much liking Ubuntu and would probably keep using it for work and quick hacks. However, one problem that arises with my Ubuntu is that it blanks out when resized.

To fix this :

  • Go to System Settings -> Additional Drivers
  • Activate NVIDIA accelerated graphics driver (version 173)
  • Reboot your computer

A more graphical how-to can be seen at http://askubuntu.com/questions/66652/windows-go-blank-when-resizing. Credits to the guy who was able to solve this!

Follow

Get every new post delivered to your Inbox.