"Lost treasure of mBedungu" 100 level puzzle game for RETRO

Dependencies:   LCD_ST7735 RetroPlatform mbed

Into Level 0 Menu Level 99

Committer:
Architect
Date:
Sun Mar 01 05:32:06 2015 +0000
Revision:
1:dcea5500a32d
Parent:
0:f5f961973d01
Initial checkin

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Architect 1:dcea5500a32d 1 /*
Architect 1:dcea5500a32d 2 * (C) Copyright 2015 Valentin Ivanov. All rights reserved.
Architect 1:dcea5500a32d 3 *
Architect 1:dcea5500a32d 4 * This file is part of the "Lost treasure of mBedungu" game application for Retro
Architect 1:dcea5500a32d 5 *
Architect 1:dcea5500a32d 6 * The "Lost treasure of mBedungu" application is free software: you can redistribute it and/or modify
Architect 1:dcea5500a32d 7 * it under the terms of the GNU Lesser General Public License as published by
Architect 1:dcea5500a32d 8 * the Free Software Foundation, either version 3 of the License, or
Architect 1:dcea5500a32d 9 * (at your option) any later version.
Architect 1:dcea5500a32d 10 *
Architect 1:dcea5500a32d 11 * This program is distributed in the hope that it will be useful,
Architect 1:dcea5500a32d 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Architect 1:dcea5500a32d 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
Architect 1:dcea5500a32d 14 * GNU Lesser General Public License for more details.
Architect 1:dcea5500a32d 15 *
Architect 1:dcea5500a32d 16 * You should have received a copy of the GNU Lesser General Public License
Architect 1:dcea5500a32d 17 * along with this program. If not, see <http://www.gnu.org/licenses/>
Architect 1:dcea5500a32d 18 *
Architect 1:dcea5500a32d 19 */
Architect 1:dcea5500a32d 20
Architect 0:f5f961973d01 21 #include "mbed.h"
Architect 0:f5f961973d01 22 #include "IntroScreen.h"
Architect 0:f5f961973d01 23 #include "Sprites.h"
Architect 0:f5f961973d01 24
Architect 0:f5f961973d01 25 #include "Retro.h"
Architect 0:f5f961973d01 26
Architect 1:dcea5500a32d 27 const int letter_tick[8] = {
Architect 1:dcea5500a32d 28 0,1,57,0,0,0,7,1
Architect 1:dcea5500a32d 29 };
Architect 0:f5f961973d01 30
Architect 0:f5f961973d01 31 char title[] = {
Architect 0:f5f961973d01 32 "@SOMEWHERE@IN@SOUTH@\r\n" \
Architect 0:f5f961973d01 33 "@@@@@@@AMERICA@@@@@@"
Architect 0:f5f961973d01 34 };
Architect 0:f5f961973d01 35
Architect 0:f5f961973d01 36 char text1[] = {
Architect 0:f5f961973d01 37 "RICK@IS@ON@A@MISSION\r\n" \
Architect 0:f5f961973d01 38 "@@TO@FIND@100@LOST@@\r\n" \
Architect 0:f5f961973d01 39 "@@@@TOTEMS@OF@THE@@@\r\n" \
Architect 0:f5f961973d01 40 "@@@MBEDUNGU@TRIBE@@@"
Architect 0:f5f961973d01 41 };
Architect 0:f5f961973d01 42
Architect 0:f5f961973d01 43 char text2[] = {
Architect 1:dcea5500a32d 44 "@@LEGEND@SAYS@THAT@@\r\n" \
Architect 0:f5f961973d01 45 "@@@THE@TOTEMS@ARE@@@\r\n" \
Architect 0:f5f961973d01 46 "@@@@HIDDEN@IN@AN@@@@\r\n" \
Architect 0:f5f961973d01 47 "@@UNDERGROUND@MAZE@@"
Architect 0:f5f961973d01 48 };
Architect 0:f5f961973d01 49
Architect 0:f5f961973d01 50 char text3[] = {
Architect 0:f5f961973d01 51 "FINDING@THE@ENTRANCE\r\n" \
Architect 0:f5f961973d01 52 "TO@THE@MAZE@WAS@EASY\r\n" \
Architect 0:f5f961973d01 53 "@@@BUT@WHAT@AWAITS@@\r\n" \
Architect 0:f5f961973d01 54 "@@@@@@@AHEAD?@@@@@@@"
Architect 0:f5f961973d01 55 };
Architect 0:f5f961973d01 56
Architect 0:f5f961973d01 57 char * texts[] = {
Architect 0:f5f961973d01 58 text1,
Architect 0:f5f961973d01 59 text2,
Architect 0:f5f961973d01 60 text3
Architect 0:f5f961973d01 61 };
Architect 0:f5f961973d01 62
Architect 0:f5f961973d01 63 extern Retro retro;
Architect 0:f5f961973d01 64
Architect 0:f5f961973d01 65 IntroScreen::IntroScreen()
Architect 0:f5f961973d01 66 {
Architect 0:f5f961973d01 67 _state = 0;
Architect 0:f5f961973d01 68 }
Architect 0:f5f961973d01 69
Architect 0:f5f961973d01 70 char * pText = text1;
Architect 0:f5f961973d01 71 int curText = 0;
Architect 0:f5f961973d01 72 int y = 80;
Architect 0:f5f961973d01 73 int x = 0;
Architect 0:f5f961973d01 74 int frame = 0;
Architect 0:f5f961973d01 75 Screen IntroScreen::Update()
Architect 0:f5f961973d01 76 {
Architect 0:f5f961973d01 77 if( _state == 0 ) {
Architect 0:f5f961973d01 78 retro.display.clearScreen();
Architect 1:dcea5500a32d 79 drawString(0,0, title, palette);
Architect 0:f5f961973d01 80 _state = 1;
Architect 0:f5f961973d01 81 pText = text1;
Architect 0:f5f961973d01 82 curText = 0;
Architect 0:f5f961973d01 83 y=80;
Architect 0:f5f961973d01 84 x=0;
Architect 0:f5f961973d01 85 frame = 0;
Architect 0:f5f961973d01 86
Architect 1:dcea5500a32d 87 drawSprite(4,3,12);
Architect 1:dcea5500a32d 88 drawSprite(5,3,9);
Architect 1:dcea5500a32d 89
Architect 1:dcea5500a32d 90
Architect 0:f5f961973d01 91 retro.display.fillRect(0,80,159,127,0);
Architect 0:f5f961973d01 92
Architect 0:f5f961973d01 93 } else if( _state == 1 ) {
Architect 0:f5f961973d01 94 frame++;
Architect 0:f5f961973d01 95
Architect 1:dcea5500a32d 96 if( (frame % 3) == 0 ) {
Architect 1:dcea5500a32d 97 sprites[12].Mirrored = !sprites[12].Mirrored;
Architect 1:dcea5500a32d 98 drawSprite(4,3,12);
Architect 1:dcea5500a32d 99 }
Architect 1:dcea5500a32d 100
Architect 0:f5f961973d01 101 if( (frame % 2) == 0 ) {
Architect 0:f5f961973d01 102
Architect 1:dcea5500a32d 103 //frame = 0;
Architect 0:f5f961973d01 104
Architect 0:f5f961973d01 105 if( *pText != 0 ) {
Architect 0:f5f961973d01 106
Architect 1:dcea5500a32d 107 while( *pText == '@' ) {
Architect 1:dcea5500a32d 108 drawChar(x, y, *pText++, palette);
Architect 1:dcea5500a32d 109 x+=8;
Architect 1:dcea5500a32d 110 }
Architect 1:dcea5500a32d 111
Architect 1:dcea5500a32d 112
Architect 1:dcea5500a32d 113 if( *pText == 0 )
Architect 1:dcea5500a32d 114 _state = 2;
Architect 1:dcea5500a32d 115 else {
Architect 0:f5f961973d01 116
Architect 1:dcea5500a32d 117 if( *pText == 13 ) {
Architect 1:dcea5500a32d 118 x = 0;
Architect 1:dcea5500a32d 119 pText++;
Architect 1:dcea5500a32d 120 } else if( *pText == 10 ) {
Architect 1:dcea5500a32d 121 y += 8;
Architect 1:dcea5500a32d 122 pText++;
Architect 1:dcea5500a32d 123 } else {
Architect 1:dcea5500a32d 124 sfx(letter_tick,0);
Architect 1:dcea5500a32d 125
Architect 1:dcea5500a32d 126 drawChar(x, y, *pText++, palette);
Architect 1:dcea5500a32d 127 x+=8;
Architect 1:dcea5500a32d 128 }
Architect 0:f5f961973d01 129 }
Architect 0:f5f961973d01 130 } else
Architect 0:f5f961973d01 131 _state = 2;
Architect 0:f5f961973d01 132 }
Architect 0:f5f961973d01 133 }
Architect 0:f5f961973d01 134
Architect 1:dcea5500a32d 135 if(retro.pressed(BTN_ROBOT)) {
Architect 0:f5f961973d01 136 _state = 0;
Architect 0:f5f961973d01 137 return Game;
Architect 0:f5f961973d01 138
Architect 0:f5f961973d01 139 }
Architect 0:f5f961973d01 140
Architect 1:dcea5500a32d 141 if(retro.pressed(BTN_SHIP)) {
Architect 0:f5f961973d01 142 if( _state == 1 ) {
Architect 1:dcea5500a32d 143 drawString(0, 80, texts[curText], palette);
Architect 0:f5f961973d01 144 _state = 2;
Architect 0:f5f961973d01 145 } else if( _state == 2 ) {
Architect 0:f5f961973d01 146 if( curText < 2 ) {
Architect 0:f5f961973d01 147 curText++;
Architect 0:f5f961973d01 148 pText = texts[curText];
Architect 0:f5f961973d01 149 y=80;
Architect 0:f5f961973d01 150 x=0;
Architect 0:f5f961973d01 151 frame = 0;
Architect 0:f5f961973d01 152 _state = 1;
Architect 0:f5f961973d01 153 retro.display.fillRect(0,80,159,127,0);
Architect 0:f5f961973d01 154 } else {
Architect 0:f5f961973d01 155 _state = 0;
Architect 0:f5f961973d01 156 return Game;
Architect 0:f5f961973d01 157 }
Architect 0:f5f961973d01 158 }
Architect 0:f5f961973d01 159 }
Architect 0:f5f961973d01 160
Architect 0:f5f961973d01 161 return Intro;
Architect 0:f5f961973d01 162 }