Summer 2016 Innovate and Create Camp Week by Week Lesson Plan

Camp Website

Podcasts!

Camp will be 4 weeks long starting between June 1st and July 31st. We will have a week off in between each class to prepare for the next week.

Each day will be split into two blocks, one being taught by Victoria and one being taught by Bresdin. The girls will spend half of their day in one block and the second half in the other. This will also provide a way for new girls to be caught up on past objectives they missed in previous weeks with the other girls can advance.

Each girl will create a website / blog on the first day that will continue to be updated by them as the weeks go on. They will be virtual scrapbooks. During this time we will teach them internet safety and guidelines. Will need email signature forms for this

Objective:

To teach the girls how to work together as a team to complete a complex large goal such a creating a video game.

  • Storyboarding
  • Audio Mixing
  • Graphic Design
  • Website / Blogging
  • Internet Safety
  • Creating a board game
  • 3D printing
  • 3D modeling
  • Story Writing / Character creation
  • Scratch Programming
  • Processing (Java Programming)
  • Teamwork
  • Communication
  • Unity Development
  • (App Development?)
  • Game Jam

Week 1:

Objectives:

Learning various computer skills and art techniques that will help them in the coming weeks.

  1. (Graphic Design) Learning to clean up their drawings and photos on the computer.
    • Photoshop and Illustrator
      • This will be used later on when creating a board game and video game.
      • Using photoshop and illustrator to learn how to storyboard a story or scene.
      • Use to enhance their website
    • Drawing or painting
      • Learn how to storyboard a story or scene.
    • Typography and Color choices?
  2. Internet Safety and Culture
    • Safe Passwords
    • Malicious downloads
    • Internet predators and how to avoid this
    • Using search engines
    • ECT….
  3. Audio Mixing
    • Very important skill to use when creating a video game
    • Garageband
    • Little Bits
    • Sound recording
    • Will use in the following weeks many times
  4. Website building
    • Wix or wordpress
    • Blog format created by them personally
    • Will use skills each day to update and enhance website
    • Will be used to take notes and or publish the video game to later

Possible Guest Speakers:

Analisa or Jenna (Need to talk to Mariam)

Week 2:

Objectives:

Learning the elements to a game – Creating a board game individually and as a team.

  1. Playing and learning about different board games
  • This will help them learn the elements to games to create a video game on week 4
    • Defining what is a rule
    • creating characters
    • using cards
    • using pieces
    • Types of games – strategy, cards, chance ect
    • Themes
  • Writing and Storytelling
      • This will help when needing to come up with a video games storyline (If they choose to) Individually writing as well as group writing.
    • How to create characters / Creating heroes and heroines
    • Writing a plot line
    • Creating a theme
    • creating an experience
  • 3D Modeling
    • Will design 3D pieces for the board game
    • Tinkercad
    • Blender
  • 3D Printing
    • Will print pieces for the board game

Possible Guests

Jared Tarbel could lazer cut their board game design?

Chris McKillip sp-ent.com Makes and published aboard game. Local Video media company

Week 3:

Objective:

Teach programming and game development

  1. Scratch
    • Teach low level game design
  2. Processing
    • Teach low level programming
  3. Unity
    • Combine Scratch and processing
  4. 3D modeling and using in unity
    • Using their skills from previous weeks
  5. Turn board game into a video game
    • Turn previous weeks board game into video game to show how it is the same process
  6. Storyboarding
    • Continue to write and storyboard their games
  7. Testing and bug fixing
    • Learning how to make the game fun and get rid of pesky bugs in the game

Possible Guests:

Sean McCracken (If available – or might have him there next week)

Week 4:

Objective: Girl Scout Game Jam in Unity

Have the girls create a video game in one week as a team using communication and all previous skills picked up.

  1. All girls will work together to get different elements finished
    1. 3D modelers, writers, storyboarding, programming
  2. Come up with theme
  3. Create environments
  4. Create Characters

Unity 3D Level Design Tutorial for Innovate and Create

The following is the list I move through to introduce a workshop to Unity 3D:

Create a New Scene

>New Project

Give Name

Choose Desktop

3D is chosen

>Create Project

Objects

Hierarchy > Look at Main Camera, Directional Light

GameObject > 3 > Cube

Delete the light!!!

CTL + Z to get it back

GameObject > Light > Directional Light

Controls

Scroll Wheel – zoom in and out

Click and hold the scroll wheel – Grab scene left to right

Hold Right btn – Look Left to right

click CUBE to focus on cube

Click four directions btn > move cube

Click Turn button > rotate cube

Click Size btn > Change size

Click Morph btn > Change obj

click Hand to not do anything

Delete the cube

Add Terrain

GameObject > 3D Object > Terrain

Mesh to sculpt for terrain

Look in Assets

Moving about the scene

Scroll Wheel – zoom in and out

Click and hold the scroll wheel – Grab scene left to right

> Play

Move Camera

Create Controller

Look on desktop

Drag folder that says standard assets into unity

Wait

OR

Window > Asset Store > Unity Essentials > Asset Packs > Standard Assets > Download > Import(after download)

In unity:

Click Standard Assets > Characters > FirstPersoncontroller>Prefab

(a prefabricated Object.)

Drag onto scene

Unclick Main Camera

Play

OR

Assets> standard assets > characters > ThirdPersoncontroller > Prefabs

Take main camera and drag until you make it a part of the person.

Move the camera so that it looks at the person

Inspector

This will provide the tools to sculpt the terrain

Click on Terrain

Raise Terrain

choose brush and size and go

Lower Terrain

Hold shift and click

Smooth Height

smooth the terrain

Paint Textures

Edit Textures > add Texture > Paint

Keep adding textures

Detail Tree

AddTree > gameobject > choose tree > paint

Keep adding!

Paint details

Edit details

play with settings

Creating an application

Code for Exit button :

void Update() { if (Input.GetKey(KeyCode.Escape)) { Application.Quit(); } }

 

drag that script onto the camera

 

File > build settings > PC or Mac > Build.

this can be uploaded onto the drive and played at home.

Innovate and Create Camp – Girl Scouts

My Americorp Summer 2016 Internship is working for the Girl Scouts and helping to create and run the camp called Innovate and Create.

The following are links if you are interested in the lessons used during the camp:

Click here to view the Week by Week Lesson Plan –>

Click here to view a tutorial I created for Unity 3D level design –>

Click here to view a tutorial I created for Scratch Maze Video Game –>

Click here to view a tutorial for a Scratch Paddle Game created by Allie Burnquist –>

OpenGL

odysseusfrozenodie

I took an OpenGL class at Central New Mexico while getting my Associates in programming. The class was offered after multiple sessions of begging the professor for it. This class was not only challenging but the most fun I have ever had in the programming world at the time.

This pictures above are from a program I created called “Watcher & Creature” and was designed to build two characters out of shapes and have one object (Creature) run around the scene while the other’s eyes followed (Watcher) the Creature.

My partner was in charge of the Watcher and I was in charge of the Creature. We decided to have Odysseus fight Medusa for our scene.

Here is my code to create the Creature Object:

 


/*************************
* odysseus.h
*************************/

#ifndef ODYSSEUS_H
#define ODYSSEUS_H

//#include <windows.h>
//#include <gl/freeglut.h>
#include <GLUT/glut.h>
#include <OpenGL/gl.h>
#include <OpenGL/glu.h>
#include <math.h>
//#include <gl/glut.h>

class Odysseus
{
private:
  GLfloat x, y, z, size, X, Z, Yaw;
  GLUquadricObj *qobj1;
  GLfloat legSwing, legBend, RLegSwing, RLegBend;
  GLboolean LegForward, LegBendForward;
  GLuint index;

public:
  Odysseus();
  Odysseus(GLfloat x, GLfloat z, GLfloat yaw=0.0);
  void Render();
  void RenderFrozen();
  void DrawMe();
  void Bottom(bool stone);
  void Torso(bool stone);
  void HeadNeck(bool stone);
  void RightArm(bool stone);
  void LeftArm(bool stone);
  void LegUpper(bool stone);
  void LegLower(bool stone);
  void RotateLocalY(GLfloat angle);
  void FowardMove(GLfloat unit);
  void BackMove(GLfloat unit) {FowardMove(-unit);}
  void ObjectSize(GLfloat s){size = s;}
  void GetMyPos(GLfloat &rX, GLfloat &rY, GLfloat &rZ);
};

#endif

/*************************
* odysseus.cpp
*************************/
#include <GLUT/glut.h>
#include <OpenGL/gl.h>
#include <OpenGL/glu.h>
#include <math.h>
#include "bomOdysseus.h"

#define PI 3.14159265
#define ToRad(x) PI * x / 180.0f
#define ToDeg(x) 180.0f * x / PI

Odysseus::Odysseus()
{
  X = Z = 0.0f;

  Yaw = 0.0f;
  size = 5.0f;
}

Odysseus::Odysseus(GLfloat x, GLfloat z, GLfloat yaw)
{

  this->x = x;
  this->y = y;

  X = x;
  Z = z;

  Yaw = yaw;
  size = 5.0f;
  LegForward = true;
  LegBendForward = true;

}

void Odysseus::Render()
{
  glPushMatrix();

    glTranslatef(X, size, Z);
    glRotatef(Yaw, 0.0, 1.0, 0.0);
    glTranslatef(-50, 0, 0);
//--------------------------------------------- Drawing the head  
    
    glPushMatrix();
      glCallList(index);
    glPopMatrix();

//--------------------------------------------- Arms L&R

    glPushMatrix();
      glCallList(index + 1);
    glPopMatrix();

    glPushMatrix();
      glCallList(index + 2);
    glPopMatrix();

//--------------------------------------------- Torso

    glPushMatrix();
      glCallList(index + 3);
    glPopMatrix();

//--------------------------------------------- Bottom

    glPushMatrix();
      glCallList(index + 4);
    glPopMatrix();

//--------------------------------------------- Legs
    glPushMatrix();
      glTranslatef(55, 23, 0);
      glRotatef(legSwing, 1, 0, 0);
      glCallList(index + 5);
      glRotatef(legBend, 1, 0, 0);
      glCallList(index + 6);
    glPopMatrix();
    //------------- RIGHT LEG
    glPushMatrix();
      glTranslatef(47, 23, 0);
      glRotatef(RLegSwing, 1, 0, 0);
      glCallList(index + 7);
      glRotatef(-RLegBend, 1, 0, 0);
      glCallList(index + 8);
    glPopMatrix();

  glPopMatrix();
}

void Odysseus::RenderFrozen()
{
  glPushMatrix();

    glTranslatef(X, size, Z);
    glRotatef(Yaw, 0.0, 1.0, 0.0);
    glTranslatef(-50, 0, 0);
//--------------------------------------------- Drawing the head  
    
    glPushMatrix();
      glCallList(index + 9);
    glPopMatrix();

//--------------------------------------------- Arms L&R

    glPushMatrix();
      glCallList(index + 10);
    glPopMatrix();

    glPushMatrix();
      glCallList(index + 11);
    glPopMatrix();

//--------------------------------------------- Torso

    glPushMatrix();
      glCallList(index + 12);
    glPopMatrix();

//--------------------------------------------- Bottom

    glPushMatrix();
      glCallList(index + 13);
    glPopMatrix();

//--------------------------------------------- Legs
    glPushMatrix();
      glTranslatef(55, 23, 0);
      glRotatef(legSwing, 1, 0, 0);
      glCallList(index + 14);
      glRotatef(legBend, 1, 0, 0);
      glCallList(index + 15);
    glPopMatrix();
    //------------- RIGHT LEG
    glPushMatrix();
      glTranslatef(47, 23, 0);
      glRotatef(RLegSwing, 1, 0, 0);
      glCallList(index + 16);
      glRotatef(-RLegBend, 1, 0, 0);
      glCallList(index + 17);
    glPopMatrix();

  glPopMatrix();
}

void Odysseus::DrawMe()
{
  qobj1 = gluNewQuadric();
  index = glGenLists(18);
  
  //Regular Odysseus
  //--------------------------------------------- Drawing the head  
    
  glNewList(index, GL_COMPILE);
    HeadNeck(false);
  glEndList();

  //--------------------------------------------- Arms L&R

  glNewList(index + 1, GL_COMPILE);
    RightArm(false);
  glEndList();

  glNewList(index + 2, GL_COMPILE);
    LeftArm(false);
  glEndList();

  //--------------------------------------------- Torso

  glNewList(index + 3, GL_COMPILE);
    Torso(false);
  glEndList();

  //--------------------------------------------- Bottom

  glNewList(index + 4, GL_COMPILE);
    Bottom(false);
  glEndList();

  //--------------------------------------------- Legs
  glNewList(index + 5, GL_COMPILE);
    LegUpper(false);
  glEndList();

  glNewList(index + 6, GL_COMPILE);
    LegLower(false);
  glEndList();

  //------------- RIGHT LEG
  glNewList(index + 7, GL_COMPILE);
    LegUpper(false);
  glEndList();

  glNewList(index + 8, GL_COMPILE);
    LegLower(false);
  glEndList();

  //Stone Odysseus
  //--------------------------------------------- Drawing the head  
    
  glNewList(index + 9, GL_COMPILE);
    HeadNeck(true);
  glEndList();

  //--------------------------------------------- Arms L&R

  glNewList(index + 10, GL_COMPILE);
    RightArm(true);
  glEndList();

  glNewList(index + 11, GL_COMPILE);
    LeftArm(true);
  glEndList();

  //--------------------------------------------- Torso

  glNewList(index + 12, GL_COMPILE);
    Torso(true);
  glEndList();

  //--------------------------------------------- Bottom

  glNewList(index + 13, GL_COMPILE);
    Bottom(true);
  glEndList();

  //--------------------------------------------- Legs
  glNewList(index + 14, GL_COMPILE);
    LegUpper(true);
  glEndList();

  glNewList(index + 15, GL_COMPILE);
    LegLower(true);
  glEndList();

  //------------- RIGHT LEG
  glNewList(index + 16, GL_COMPILE);
    LegUpper(true);
  glEndList();

  glNewList(index + 17, GL_COMPILE);
    LegLower(true);
  glEndList();

  gluDeleteQuadric( qobj1);
}

void Odysseus::HeadNeck(bool stone)
{  
//-------------------------------------- Neck  
    glPushMatrix();
      if(stone)
        glColor3ub(200, 200, 200);
      else
        glColor3ub(255, 196, 147);
      glTranslatef(50, 48, 0);
      gluQuadricDrawStyle(qobj1, GLU_FILL); /* flat shaded */
      gluQuadricNormals(qobj1, GLU_FLAT);
      glRotatef(90.0f, 1.0f, 0.0f, 0.0f);
      gluCylinder(qobj1, 3.0, 3.0, 5.0, 10, 5);
    glPopMatrix();
  
    // --- GOLD -->
    if(stone)
      glColor3ub(200, 200, 200);
    else
      glColor3ub(255, 194, 52);

  //------------------ helmet 
    glPushMatrix();
      glTranslatef(50, 54, 0);
      glutSolidSphere(7, 15, 20);
    glPopMatrix();

    glPushMatrix();
      glTranslatef(50, 54, 0);
      gluQuadricDrawStyle(qobj1, GLU_FILL); /* flat shaded */
      gluQuadricNormals(qobj1, GLU_SMOOTH);
      glRotatef(80.0f, 1.0f, 0.0f, 0.0f);
      gluCylinder(qobj1, 7.1, 7.1, 7, 20, 5);
    glPopMatrix();

    //---------------------- front mask

    //------ BLACK -->
    if(stone)
      glColor3ub(120, 120, 120);
    else
      glColor3ub(0, 0, 0);
    glPushMatrix();
      glTranslatef(50, 53, 7.2);
      gluQuadricDrawStyle(qobj1, GLU_FILL);
      gluQuadricNormals(qobj1, GLU_SMOOTH);
      gluPartialDisk(qobj1, 0.0, 4.0, 20, 4, -90.0, 180.0);
    glPopMatrix();

    glPushMatrix();
      glTranslatef(50, 51.5, 7.3);
      gluQuadricDrawStyle(qobj1, GLU_FILL);
      gluQuadricNormals(qobj1, GLU_SMOOTH);
      glScalef(2, 4, 1);
      glutSolidCube(2);
    glPopMatrix();

    //--------------------------- Head deco
    glPushMatrix();
      if(stone)
        glColor3ub(200, 200, 200);
      else
        glColor3ub(176, 93, 30);
      glTranslatef(50, 60, 0);
      gluQuadricDrawStyle(qobj1, GLU_FILL);
      gluQuadricNormals(qobj1, GLU_SMOOTH);
      glScalef(2, 3, 2);
      glutSolidCube(2);
    glPopMatrix();

    glPushMatrix();
      if(stone)
        glColor3ub(200, 200, 200);
      else
        glColor3ub(176, 93, 30);
      glTranslatef(50, 59, -3);
      gluQuadricDrawStyle(qobj1, GLU_FILL);
      gluQuadricNormals(qobj1, GLU_SMOOTH);
      glScalef(2, 3, 2);
      glutSolidCube(2);
    glPopMatrix();

    glPushMatrix();
      if(stone)
        glColor3ub(200, 200, 200);
      else
        glColor3ub(176, 93, 30);
      glTranslatef(50, 57, -5);
      gluQuadricDrawStyle(qobj1, GLU_FILL);
      gluQuadricNormals(qobj1, GLU_SMOOTH);
      glScalef(2, 3, 2);
      glutSolidCube(2);
    glPopMatrix();

    //-------- red
    if(stone)
      glColor3ub(200, 200, 200);
    else
      glColor3ub(255, 0, 0);

    glPushMatrix();
      glTranslatef(50, 65, 2);
      glutSolidSphere(3, 15, 20);
    glPopMatrix();

    glPushMatrix();
      glTranslatef(50, 65, 0);
      glutSolidSphere(3, 15, 20);
    glPopMatrix();

    glPushMatrix();
      glTranslatef(50, 65, -2);
      glutSolidSphere(3, 15, 20);
    glPopMatrix();

    glPushMatrix();
      glTranslatef(50, 64, -4);
      glutSolidSphere(3, 15, 20);
    glPopMatrix();

    glPushMatrix();
      glTranslatef(50, 62, -6);
      glutSolidSphere(3, 15, 20);
    glPopMatrix();

    glPushMatrix();
      glTranslatef(50, 60, -8);
      glutSolidSphere(3, 15, 20);
    glPopMatrix();

    glPushMatrix();
      glTranslatef(50, 58, -9);
      glutSolidSphere(3, 15, 20);
    glPopMatrix();

}
void Odysseus::RightArm(bool stone)
{
//------------- Right 
  //--------- Quad
  glPushMatrix();
    if(stone)
      glColor3ub(200, 200, 200);
    else
      glColor3ub(255, 196, 147);
    glTranslatef(62, 39, 0);
    gluQuadricDrawStyle(qobj1, GLU_FILL); /* flat shaded */
    gluQuadricNormals(qobj1, GLU_FLAT);
    glRotatef(80.0f, 1.0f, 0.0f, 0.0f);
    gluCylinder(qobj1, 2, 2, 8.0, 20, 5);
  glPopMatrix();

  //-------------- Right joint
  glPushMatrix();
    glTranslatef(62, 30, 1.5);
    glutSolidSphere(2.5, 15, 15);
  glPopMatrix();

  //------------- lower
  glPushMatrix();
    glTranslatef(62, 30, 2);
    gluQuadricDrawStyle(qobj1, GLU_FILL); /* flat shaded */
    gluQuadricNormals(qobj1, GLU_FLAT);
    gluCylinder(qobj1, 2, 2, 8.0, 20, 5);
  glPopMatrix();

  //-------------- Right hand
  glPushMatrix();
    glTranslatef(62, 30, 10);
    glutSolidSphere(2.5, 15, 15);
  glPopMatrix();

  //-------------------------------------- Shield
    glPushMatrix();
      if(stone)
        glColor3ub(200, 200, 200);
      else
        glColor3ub(255, 194, 52);
      glTranslatef(61, 30, 12.5);
      gluQuadricDrawStyle(qobj1, GLU_FILL); /* flat shaded */
      gluQuadricNormals(qobj1, GLU_SMOOTH);
      gluDisk(qobj1, 0, 10, 20, 4);
    glPopMatrix();
    
    //--------------- decorations
    glPushMatrix();
      if(stone)
        glColor3ub(120, 120, 120);
      else
        glColor3ub(0, 0, 0);
      glTranslatef(61, 30, 12.6);
      gluQuadricDrawStyle(qobj1, GLU_LINE); /* flat shaded */
      gluQuadricNormals(qobj1, GLU_NONE);
      gluDisk(qobj1, 0, 10, 20, 4);
    glPopMatrix();

    glPushMatrix();
      if(stone)
        glColor3ub(120, 120, 120);
      else
        glColor3ub(0, 0, 0);
      glTranslatef(61, 30, 12.7);
      gluQuadricDrawStyle(qobj1, GLU_FILL); /* flat shaded */
      gluQuadricNormals(qobj1, GLU_SMOOTH);
      gluDisk(qobj1, 0, 8, 20, 4);
    glPopMatrix();

    glPushMatrix();
      if(stone)
        glColor3ub(200, 200, 200);
      else
        glColor3ub(255, 194, 52);
      glTranslatef(61, 30, 12.8);
      gluQuadricDrawStyle(qobj1, GLU_FILL); /* flat shaded */
      gluQuadricNormals(qobj1, GLU_SMOOTH);
      gluDisk(qobj1, 0, 6, 20, 4);
    glPopMatrix();

      glPushMatrix();
      if(stone)
        glColor3ub(120, 120, 120);
      else
        glColor3ub(0, 0, 0);
      glTranslatef(61, 30, 12.9);
      gluQuadricDrawStyle(qobj1, GLU_FILL); /* flat shaded */
      gluQuadricNormals(qobj1, GLU_SMOOTH);
      gluDisk(qobj1, 0, 4, 20, 4);
    glPopMatrix();

    glPushMatrix();
      if(stone)
        glColor3ub(200, 200, 200);
      else
        glColor3ub(255, 194, 52);
      glTranslatef(61, 30, 13);
      gluQuadricDrawStyle(qobj1, GLU_FILL); /* flat shaded */
      gluQuadricNormals(qobj1, GLU_SMOOTH);
      gluDisk(qobj1, 0, 2, 20, 4);
    glPopMatrix();
    //---------- end wire circle
    glPushMatrix();
      if(stone)
        glColor3ub(120, 120, 120);
      else
        glColor3ub(0, 0, 0);
      glTranslatef(61, 30, 13.1);
      gluQuadricDrawStyle(qobj1, GLU_LINE); /* flat shaded */
      gluQuadricNormals(qobj1, GLU_NONE);
      gluDisk(qobj1, 0, 2, 5, 4);
    glPopMatrix();
    
}

void Odysseus::LeftArm(bool stone)
{
  if(stone)
    glColor3ub(200, 200, 200);
  else
    glColor3ub(255, 196, 147); //skin color
//--------------------- LEft arm if looking directly at him
  glPushMatrix();
    glTranslatef(39, 40, 0);
    gluQuadricDrawStyle(qobj1, GLU_FILL); /* flat shaded */
    gluQuadricNormals(qobj1, GLU_FLAT);
    glRotatef(-90.0f, 0.0f, 1.0f, 0.0f);
    glRotatef(-30.0f, 1.0f, 0.0f, 0.0f);
    gluCylinder(qobj1, 2, 2, 8.0, 20, 5);
  glPopMatrix();

  //-------------- Left joint
  glPushMatrix();
    glTranslatef(32, 44, 0);
    glutSolidSphere(2.5, 15, 15);
  glPopMatrix();

  //---------------- Lower joint
  glPushMatrix();
    glTranslatef(32, 44, 0);
    gluQuadricDrawStyle(qobj1, GLU_FILL); /* flat shaded */
    gluQuadricNormals(qobj1, GLU_FLAT);
    glRotatef(-90.0f, 0.0f, 1.0f, 0.0f);
    glRotatef(-110.0f, 1.0f, 0.0f, 0.0f);
    gluCylinder(qobj1, 2, 2, 8.0, 20, 5);
  glPopMatrix();

  //-------------- Left Hand
  glPushMatrix();
    glTranslatef(35, 52, 0);
    glutSolidSphere(2.5, 15, 15);
  glPopMatrix();

  //--------------- Sword
  if(stone)
    glColor3ub(200, 200, 200);
  else
    glColor3ub(176, 93, 30);
  //-------- HILT
  glPushMatrix();
    glTranslatef(36, 54, 0);
    glRotatef(-23.0f, 0.0f, 0.0f, 1.0f);
    glScalef(3, 0, 3);
    glutSolidSphere(1.5, 15, 15);
  glPopMatrix();

  glPushMatrix();  
    glTranslatef(35, 52, 0);
    gluQuadricDrawStyle(qobj1, GLU_FILL); /* flat shaded */
    gluQuadricNormals(qobj1, GLU_FLAT);
    glRotatef(-90.0f, 0.0f, 1.0f, 0.0f);
    glRotatef(-110.0f, 1.0f, 0.0f, 0.0f);
    gluCylinder(qobj1, 1.2, 1.2, 3.0, 20, 5);
  glPopMatrix();

  //------------- blade
  glPushMatrix();
    if(stone)
      glColor3ub(200, 200, 200);
    else
      glColor3ub(176, 175, 173);
    glTranslatef(36, 54.5, 0);
    gluQuadricDrawStyle(qobj1, GLU_FILL); /* flat shaded */
    gluQuadricNormals(qobj1, GLU_FLAT);
    glRotatef(-90.0f, 0.0f, 1.0f, 0.0f);
    glRotatef(-110.0f, 1.0f, 0.0f, 0.0f);
    gluCylinder(qobj1, 1, 0, 20.0, 20, 5);
  glPopMatrix();
  
}
void Odysseus::Torso(bool stone)
{
//--------------------------------------------- Drawing the Torso  
    if(stone)
      glColor3ub(200, 200, 200);
    else
      glColor3ub(255, 196, 147);
    //-------------- Right Shoulder when looking at him
    glPushMatrix();
      glTranslatef(61, 40, 0);
      glutSolidSphere(3, 15, 15);
    glPopMatrix();

    //---------------- Left SHoulder
    glPushMatrix();
      glTranslatef(39, 40, 0);
      glutSolidSphere(3, 15, 15);
    glPopMatrix();

    
//--------------------------------------------- chest 
    //------- right 
    glPushMatrix();
      if(stone)
        glColor3ub(200, 200, 200);
      else
        glColor3ub(255, 255, 255);
      glTranslatef(50, 40, 0);
      gluQuadricDrawStyle(qobj1, GLU_FILL); /* flat shaded */
      gluQuadricNormals(qobj1, GLU_FLAT);
      glRotatef(90.0f, 0.0f, 1.0f, 0.0f);
      gluCylinder(qobj1, 6.0, 3.0, 10.0, 10, 5);
    glPopMatrix();
    //----------------- left
    glPushMatrix();
      glTranslatef(50, 40, 0);
      gluQuadricDrawStyle(qobj1, GLU_FILL); /* flat shaded */
      gluQuadricNormals(qobj1, GLU_FLAT);
      glRotatef(-90.0f, 0.0f, 1.0f, 0.0f);
      gluCylinder(qobj1, 6.0, 3.0, 10.0, 10, 5);
    glPopMatrix();

    glPushMatrix();
      glTranslatef(50, 40, 0);
      gluQuadricDrawStyle(qobj1, GLU_FILL); /* flat shaded */
      gluQuadricNormals(qobj1, GLU_FLAT);
      glRotatef(90.0f, 1.0f, 0.0f, 0.0f);
      gluCylinder(qobj1, 6.0, 7.0, 15.0, 10, 5);
    glPopMatrix();

    //-------------------------------------- Belt
    
}

void Odysseus::Bottom(bool stone)
{
//--------------------------------------------- Drawing the bottom
    glPushMatrix();
      if(stone)
        glColor3ub(200, 200, 200);
      else
        glColor3ub(255, 255, 255);
      glTranslatef(50, 25, 0);
      gluQuadricDrawStyle(qobj1, GLU_FILL); /* flat shaded */
      gluQuadricNormals(qobj1, GLU_FLAT);
      glRotatef(90.0f, 1.0f, 0.0f, 0.0f);
      gluCylinder(qobj1, 7.0, 10.0, 10.0, 10, 5);
    glPopMatrix();

    //-------------------------------------- Belt
    glPushMatrix();
      if(stone)
        glColor3ub(200, 200, 200);
      else
        glColor3ub(255, 194, 52);
      glTranslatef(50, 26, 0);
      gluQuadricDrawStyle(qobj1, GLU_FILL); /* flat shaded */
      gluQuadricNormals(qobj1, GLU_FLAT);
      glRotatef(90.0f, 1.0f, 0.0f, 0.0f);
      gluCylinder(qobj1, 7.2, 7.2, 3.0, 10, 5);
    glPopMatrix();

    //-------------------------------------- Flat disk

    glPushMatrix();
      if(stone)
        glColor3ub(200, 200, 200);
      else
        glColor3ub(255, 194, 52);
      glTranslatef(50, 25, 8);
      gluQuadricDrawStyle(qobj1, GLU_FILL); /* flat shaded */
      gluQuadricNormals(qobj1, GLU_FLAT);
      gluDisk(qobj1, 0.0, 3.0, 20, 4);
    glPopMatrix();

    glPushMatrix();
      if(stone)
        glColor3ub(120, 120, 120);
      else
        glColor3ub(0, 0, 0);
      glTranslatef(50, 25, 8.1);
      gluQuadricDrawStyle(qobj1, GLU_FILL); /* flat shaded */
      gluQuadricNormals(qobj1, GLU_FLAT);
      gluDisk(qobj1, 0.0, 2.0, 20, 4);
    glPopMatrix();

    glPushMatrix();
      if(stone)
        glColor3ub(200, 200, 200);
      else
        glColor3ub(255, 194, 52);
      glTranslatef(50, 25, 8.2);
      gluQuadricDrawStyle(qobj1, GLU_FILL); /* flat shaded */
      gluQuadricNormals(qobj1, GLU_FLAT);
      gluDisk(qobj1, 0.0, 1.0, 20, 4);
    glPopMatrix();
}

void Odysseus::LegUpper(bool stone)
{
  if(stone)
    glColor3ub(200, 200, 200);
  else
    glColor3ub(255, 196, 147);
  glPushMatrix();
    glTranslatef(0, 0, 0);
    gluQuadricDrawStyle(qobj1, GLU_FILL); /* flat shaded */
    gluQuadricNormals(qobj1, GLU_FLAT);
    glRotatef(80.0f, 1.0f, 0.0f, 0.0f);
    gluCylinder(qobj1, 2, 2, 15.0, 20, 5);

  glPushMatrix();
  glTranslatef(0, 0, 15);
    glutSolidSphere(3, 15, 15);

}

void Odysseus::LegLower(bool stone)
{
  if(stone)
    glColor3ub(200, 200, 200);
  else
    glColor3ub(176, 93, 30);
//------------- lower
  glPushMatrix();
    glTranslatef(0, 0, 2);
    gluQuadricDrawStyle(qobj1, GLU_FILL); /* flat shaded */
    gluQuadricNormals(qobj1, GLU_FLAT);
    gluCylinder(qobj1, 2, 2, 10.0, 20, 5);

  glPushMatrix();
    glTranslatef(0, 2, 10);
    glScalef(1, 2, 1);
    glutSolidSphere(3, 15, 15);
  glPopMatrix();
  glPopMatrix();
  glPopMatrix();
  glPopMatrix();
}

void Odysseus::RotateLocalY(GLfloat angle)
{
  Yaw += angle;

  if(Yaw > 360.0f)
    Yaw -= 360.0f;
  else if(Yaw < 0.0f)
    Yaw += 360.0f;
}

void Odysseus::FowardMove(GLfloat unit)
{
  X += sin(ToRad(Yaw)) * unit;
  Z += cos(ToRad(Yaw)) * unit;

  if(unit > 0)
  {
    //-------------------------------------
    //If LegBendFOrward is true then the right leg is "false"
    if(legSwing >= 20)
    {
      LegBendForward = true;
    }
    else if(legBend >= 60)
    {
      LegBendForward = false;  
    }

    if(legSwing >= 30)
    {
      LegForward = false;
    }
    else if(legSwing <= -30)
    {
      LegForward = true;
    }

  }
  else if(unit < 0)
  {
    if(legSwing >= 20)
    {
      LegBendForward = false;
    }
    else if(legBend >= 60)
    {
      LegBendForward = true;
    }

    if(legSwing >= 30)
    {
      LegForward = true;
    }
    else if(legSwing <= -30)
    {
      LegForward = false;
    }
  }

  //------------------- Left Leg move
  switch(LegForward)
  {
    case true:
      legSwing += unit * 5;
      RLegSwing -= unit * 5;
      break;
    case false:
      legSwing -= unit * 5;
      RLegSwing += unit * 5;
      break;
  }
  switch(LegBendForward)
  {
    case true: 
      legBend += unit * 4;
      RLegBend -= unit * 4;
      break;
    case false:
      legBend -= unit * 4;
      RLegBend += unit * 4;
      break;
  }
  
  if(sqrt(pow(X, 2) + pow(Z,2)) < 50)
  {
    X -= sin(ToRad(Yaw)) * unit;
    Z -= cos(ToRad(Yaw)) * unit;
  }
}

void Odysseus::GetMyPos(GLfloat &rX, GLfloat &rY, GLfloat &rZ)
{
  rX = X;
  rY = size;
  rZ = Z;
}


 

Coronado Historic Site

As an Americorp recruit in 2015, I worked for the Coronado Historic Site to create a flyover site map / archaeological dig interactive on a touchscreen surface detailing the pueblo as it once was found before the site was covered in dirt for preservation.

This is being used as a learning tool for the docents as well as a wonderful way to detail the many artifacts found on site that are too delicate or precious to be put on display.

This project became very close to my heart as I learned in depth Unity development as well as Blender Modeling to fulfill the requirements. I learned how important it is to have a team to design a game at this magnitude as I was alone for all aspects of this.

This game is on exhibit at the Coronado Historic Site in Bernalillo, New Mexico along with many other student designed exhibits.

potsherdlrg
Blender Created Shard
coronado
Touch Screen GUI controls
grandopening
Opening Day of the Exhibit

 

4_ground

How could a historic site benefit from technology?

Kuaua has decided to take the leap and merge video games into the exhibit. The hope is to enhance the exhibit while providing a new educational tool for historic sites throughout New Mexico and bring a new perspective to the term “video game.”

grandopeningMy name is Bresdin O’Malley and I am an undergraduate student at New Mexico Highlands University (NMHU). My goal is to graduate with a Bachelors in System Driven Software Design. I enjoy programming and modeling and hope to enhance my skills in this area while studying at NMHU. I believe strongly in the educational benefit of video games and hope to spend my young adult life help change the social perspective of video games while providing a service to historic sites in New Mexico.

The Coronado Historic Site has recruited the students from NMHU to help bring technology and enhancement to their exhibits. They have transformed the exhibits and helped remodel the glory of this incredible historic site with everything from new graphic posters to updated videography.

As a recruit myself, my summer Americorp internship in 2015, will be working for the Coronado Historic Site to create a flyover site map / archaeological dig detailing the pueblo as it once was found before the site was covered in dirt for preservation. This will be a learning tool for the rangers as well as a wonderful way to detail the many artifacts found on site that are too delicate or precious to be put on display.

I will use the following to complete my project:

  • C# using Unity 5.0 design softwareCOR Photo 01
  • Blender 2.7 + for modeling
  • A touch screen monitor
  • Coronado Artifact Pictures and Data
  • CAD drawings of the pueblo
  • Photos of the pueblo when discovered
  • Tumblr for documentation
  • Trello for iteration organization
  • Google Drive for storage and sharing

The overall design of the site will give users and visitors to the site an idea of what it was like to be an archaeologist and discover different artifacts within the site. After the artifacts were extracted from the site, the walls were filled in with dirt to  preserve them because an alternative method did not exist. A visit to this site will show a dirt path and the visitor must speak with a docent to learn the fascinating history. My project will provide a visual to go along with the stories. Another goal for the site will be to provide visitors who are disabled and can not traverse the site to be able to experience it without leaving the visitors center.

May 30th marked the 75th anniversary of the Coronado Historic Site and the grand opening of the students work including an Alpha (very early stage of development) version of the game. This was a very successful event with over 850 visitors to the site. I took the opportunity to observe the public interact with the game to help give me a clear understanding to reaching all generations of visitors with this project.

One young girl played the game for over an hour even though there were no objectives and the environment very limited. Her face beamed pure joy when her grandparents finally made her leave the game behind. I was so surprised to see someone enjoy my game so much, especially after I was so nervous to show off such an early version on the site.

This was incredibly inspiring to me and a great learning tool to see how children interact with a simulated world. My next goal is to create an interface that will entice all generations to be unafraid to explore and use this learning tool.

As this project progresses through the summer, I will be giving public presentations on its development and progress. Please feel free to attend and test the newest version between the months of June and July. Just ask a Coronado ranger for the details and I look forward to your curiosity and engagement into this project!