George Sykes ELEC2645 project

Dependencies:   mbed

https://os.mbed.com/media/uploads/el18gs/pixil-frame-0.png

GHOST HUNTER

In a world of ghostly horrors there is much money to be made in underground ghost fighting rings. You've managed to get hold of a Ghostbuster, a special piece of equipment that allows you to catch, train and fight ghosts.

Instructions

Below you will find the instructions for the game. Please note that due to COVID-19 a large part of the game (fighting ghosts) could not be added as it would have required access to a second gamepad which i could not acquire.

Welcome screen

When first started you will be presented with a welcome screen

  • Pot 1 to adjust the contrast on the screen
  • Press A to continue.

Main menu

You have three options, catch ghosts (add ghosts to your inventory), inventory (sell ghosts) or settings(adjust the games settings).

  • Press X and B to move the selection up and down respectively
  • Press A to enter the selected submenu

Catch Ghost

Will now be presented with two challenges. In the first you need to find a ghost, in the second you catch it. Theses stages will start automatically.

Find ghost

Rotate the gamepad on its roll and pitch axis until all the LED's turn on. The ones on the left indicate roll and the right pitch.

  • Rotate the gamepad on it roll and pitch to light up the LED's

Catch ghost

Return the gamepad to a comfortable position and use the joystick to move the crosshairs onto the ghost sprite. When ready press the A button to catch the ghost. You will be told what kind of ghost you have captured and it will be added to your inventory.

  • Press A to catch the ghost
  • Move the joystick to move the crosshairs

Inventory

The inventory allows you to view your ghosts and sell them.

  • Use Pot 1 to scroll through the ghosts
  • Pot 2 to scroll up and down the details of the individual ghosts
  • Press X to prepare to sell a ghost and press again to confirm, if you don't press again the sale screen will disappear after 5 seconds
  • Press Start to return to the main menu

Settings

This menu allows you to adjust some of the settings of the game.

  • Press X to go up one option
  • Press B to go down one option
  • Press A to enter the selected submenu
  • Press Start to return to the main menu

Contrast

Set the contrast of the LCD screen, the contrast will adjust on this screen so you can see the effect (contrast is bounded between 0.4 and 0.6).

  • Pot 1 to increase or decrease the contrast
  • Press A to set the contrast

Button Delay

Set the minimum time between button presses; if this is too low the game will detect two button presses when there was only one, too high and the buttons will seem unresponsive. So as to ensure these issues do not occur while changing the setting button X temporarily operates on the new delay but none of the others will until A is pressed.

  • Pot 1 to increase or decrease the delay
  • Press X to test the new delay, this will toggle the small circle to be filled in or unfilled
  • Press A to save the setting
Committer:
el18gs
Date:
Tue May 26 13:37:32 2020 +0000
Revision:
17:3ebcf7bba112
Parent:
2:eaf245af2aae
Final Submission. I have read and agreed with Statement of Academic Integrity.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
el18gs 2:eaf245af2aae 1 /* mbed Microcontroller Library - MemFileSystem
el18gs 2:eaf245af2aae 2 * Copyright (c) 2008, sford
el18gs 2:eaf245af2aae 3 */
el18gs 2:eaf245af2aae 4
el18gs 2:eaf245af2aae 5
el18gs 2:eaf245af2aae 6 #ifndef MBED_MEMFILESYSTEM_H
el18gs 2:eaf245af2aae 7 #define MBED_MEMFILESYSTEM_H
el18gs 2:eaf245af2aae 8
el18gs 2:eaf245af2aae 9 #include "FATFileSystem.h"
el18gs 2:eaf245af2aae 10
el18gs 2:eaf245af2aae 11 namespace mbed
el18gs 2:eaf245af2aae 12 {
el18gs 2:eaf245af2aae 13
el18gs 2:eaf245af2aae 14 class MemFileSystem : public FATFileSystem
el18gs 2:eaf245af2aae 15 {
el18gs 2:eaf245af2aae 16 public:
el18gs 2:eaf245af2aae 17
el18gs 2:eaf245af2aae 18 // 2000 sectors, each 512 bytes (malloced as required)
el18gs 2:eaf245af2aae 19 char *sectors[2000];
el18gs 2:eaf245af2aae 20
el18gs 2:eaf245af2aae 21 MemFileSystem(const char* name) : FATFileSystem(name) {
el18gs 2:eaf245af2aae 22 memset(sectors, 0, sizeof(sectors));
el18gs 2:eaf245af2aae 23 }
el18gs 2:eaf245af2aae 24
el18gs 2:eaf245af2aae 25 virtual ~MemFileSystem() {
el18gs 2:eaf245af2aae 26 for(int i = 0; i < 2000; i++) {
el18gs 2:eaf245af2aae 27 if(sectors[i]) {
el18gs 2:eaf245af2aae 28 free(sectors[i]);
el18gs 2:eaf245af2aae 29 }
el18gs 2:eaf245af2aae 30 }
el18gs 2:eaf245af2aae 31 }
el18gs 2:eaf245af2aae 32
el18gs 2:eaf245af2aae 33 // read a sector in to the buffer, return 0 if ok
el18gs 2:eaf245af2aae 34 virtual int disk_read(char *buffer, int sector) {
el18gs 2:eaf245af2aae 35 if(sectors[sector] == 0) {
el18gs 2:eaf245af2aae 36 // nothing allocated means sector is empty
el18gs 2:eaf245af2aae 37 memset(buffer, 0, 512);
el18gs 2:eaf245af2aae 38 } else {
el18gs 2:eaf245af2aae 39 memcpy(buffer, sectors[sector], 512);
el18gs 2:eaf245af2aae 40 }
el18gs 2:eaf245af2aae 41 return 0;
el18gs 2:eaf245af2aae 42 }
el18gs 2:eaf245af2aae 43
el18gs 2:eaf245af2aae 44 // write a sector from the buffer, return 0 if ok
el18gs 2:eaf245af2aae 45 virtual int disk_write(const char *buffer, int sector) {
el18gs 2:eaf245af2aae 46 // if buffer is zero deallocate sector
el18gs 2:eaf245af2aae 47 char zero[512];
el18gs 2:eaf245af2aae 48 memset(zero, 0, 512);
el18gs 2:eaf245af2aae 49 if(memcmp(zero, buffer, 512)==0) {
el18gs 2:eaf245af2aae 50 if(sectors[sector] != 0) {
el18gs 2:eaf245af2aae 51 free(sectors[sector]);
el18gs 2:eaf245af2aae 52 sectors[sector] = 0;
el18gs 2:eaf245af2aae 53 }
el18gs 2:eaf245af2aae 54 return 0;
el18gs 2:eaf245af2aae 55 }
el18gs 2:eaf245af2aae 56 // else allocate a sector if needed, and write
el18gs 2:eaf245af2aae 57 if(sectors[sector] == 0) {
el18gs 2:eaf245af2aae 58 char *sec = (char*)malloc(512);
el18gs 2:eaf245af2aae 59 if(sec==0) {
el18gs 2:eaf245af2aae 60 return 1; // out of memory
el18gs 2:eaf245af2aae 61 }
el18gs 2:eaf245af2aae 62 sectors[sector] = sec;
el18gs 2:eaf245af2aae 63 }
el18gs 2:eaf245af2aae 64 memcpy(sectors[sector], buffer, 512);
el18gs 2:eaf245af2aae 65 return 0;
el18gs 2:eaf245af2aae 66 }
el18gs 2:eaf245af2aae 67
el18gs 2:eaf245af2aae 68 // return the number of sectors
el18gs 2:eaf245af2aae 69 virtual int disk_sectors() {
el18gs 2:eaf245af2aae 70 return sizeof(sectors)/sizeof(sectors[0]);
el18gs 2:eaf245af2aae 71 }
el18gs 2:eaf245af2aae 72
el18gs 2:eaf245af2aae 73 };
el18gs 2:eaf245af2aae 74
el18gs 2:eaf245af2aae 75 }
el18gs 2:eaf245af2aae 76
el18gs 2:eaf245af2aae 77 #endif