"Lost treasure of mBedungu" 100 level puzzle game for RETRO
Dependencies: LCD_ST7735 RetroPlatform mbed
Game/IntroScreen.cpp@1:dcea5500a32d, 2015-03-01 (annotated)
- 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?
User | Revision | Line number | New 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 | } |