Day 2

Todays goal is to get you guys working.

To this end I am going to talk briefly (< 20 minutes) and then we are all going to head over to the cs lab to install nebula and play around with stuff.

I will discuss the first project, and briefly go over the build systems (detailed instructions on this are below).

Finally we will talk about projects for you guys, help you pick a minor project and a major one.

Minor Project - Due the 14th.

Choice 1 - 3D othello.

This is an easy one to explain, build a 3d version of othello.

You can build the usual 2d board, or try a 3d version of the game but it must be displayed in 3d.

Use the keyboard to select where to move and try to follow atleast most of the rules of the game.

You do not need to implement an AI, this is just an exercise in displaying in 3d.

Choice 2 - Solar System

Model the solar system using gravity (no hard coding orbits).

Be COOL! add asteroids, comets with trails, solar flares, whatever!

The build system

To add classes to nebula you need to understand the nebula build system.

Instead of manually maintaining a makefile, they abstract it another level and use files that define how the makefile should be built.

It works quite simply actually (much better the using super complicated makefiles).

To further simply this there is a little gui to create the original source files for you which makes the process less error prone.

1) Create the source files.

go to nebula/code/templates

run wish classbuild.tcl

This will present a nice lil gui for adding classes.

The class to create is called nGravity.

It inherits from PhysicalAspect as it needs to interact with the physics aspect to apply the force of gravity.

This will create 3 files, ngravity.h, ngravity_main.cc, ngravity_cmds.cc

Next we need to add these files to the build system.

Under nebula/code/src there are a number of .pak files.

Each file contains information used to build the makefile.

To add a class go into vr.pak

There are two different sections in the file.

#--------------------------------------------------------------------
beginmodule ngravity
 setdir vr
 setfiles { ngravity_main ngravity_cmds } 
 setheaders ngravity
 endmodule
#-------------------------------------------------------------------- 

Each one of these blocks describes a module, which is essentially a class to compile.
The various lines describe the directory it is in, the name of the .cc files, and the name of the .h files

The second section describes how the classes are organized into dll's or libraries.

#-------------------------------------------------------------------- 
begintarget vr
  settype package
  setmods { ngravity }
  setdepends { nkernel nnebula opcode ncollide }
  setlibs_win32 { nkernel.lib nnebula.lib opcode.lib ncollide.lib }
  setlibs_unix { nkernel nnebula opcode ncollide }
  endtarget
#-------------------------------------------------------------------- 

Dont worry about most of this, just any time you add a module above, add its name into the setmods section here.

After this run tclsh updsrc.tcl, and it will run through these and produce makefiles. It does a nice job of parsing the files for you, and determing the dependencies.

After updsrc runs, run make (nebula/code/src) and it should build your new class.

The FIRST thing you should do is open up the game, and see if the class was actually added (try to call new ngravity gravity it).

It might throw an assertion (as its not the child of an ent), but that is fine just make sure it exists.

Today's goal is to get you all to choose a project, and give you the info to get started on it.

Doing a serious racing game raised too many problems to present feasible prjoects for you guys.

Too much time would have been spent tuning physics, without getting to anything interesting.

Project Outline

Feel free to not follow my instructions here, but they should be a nice outline of what to do.

3D Othello

Solar System

Two game ideas for the major Project.

Super Laura Kart - simple racing game with opponents + weapons.

threads

  1. improved physics
    1. better handling
    2. gears
    3. fuel
    4. throttle
  2. power ups
  3. weapons
    1. Red Shell
    2. Banana Peel
  4. courses - build and layout interesting places to play.
    1. actual courses
    2. scenery
  5. opponent ai
    1. when to use weapons
    2. how to drive

Home System - space battling game

  1. Physics
    1. more interesting handling
    2. gravity
    3. nebula
  2. playable aircraft
    1. player vs opponents
    2. powerups
  3. AI
    1. dogfighting = fighter - fighter ai
    2. strafing = fighter - capital ship ai
    swarm ai = fighting in groups
  4. damage models
    1. take more damage to rear, sides, specific areas. ? no idea how to implement, maybe multiple coll models
  5. advanced units
    1. carriers
    2. repairers
    3. builders - resource management (hard).
    AI for these - super hard
  6. interface
    1. selection
    2. group selection
    3. ordering, right click - action
    4. 3d placement
  7. graphical stuff
    1. modeling
      1. spacecraft
      2. weapons
      3. funky effects
    2. cool effects
      1. nebula
      2. blackholes
      3. rings
      4. skyboxes
      5. light effects
      6. spacecraft effects
        1. trails
        2. engine glow
        3. cool lighting
    3. different native objects
      1. planets
        1. ring world
        2. sphereworld
        3. planets with rings
      2. stars
      3. moons
      4. galaxy
      5. asteroids
      6. asteroid fields??
    4. system construction

Below I have sorted them on how difficult I expect them to be, and what kind of work will it mostly involve.

Easy

  1. HS system constuction
    1. placing simple objects to make nice systems
    2. would require some simple aspects to make things orbit nicely
  2. HS different native objects
    1. creating simple models
    2. making textures would be most of the work
    3. would tie in nicely with the above
  3. HS modeling
    1. creating different spacecraft.
    2. weapons
    3. possibly explosion pieces for the spacecraft.