Pokitto turn based strategy game.

Dependencies:   PokittoLib

Committer:
trelemar
Date:
Tue Dec 05 03:24:36 2017 +0000
Revision:
1:189e78ff65b1
Parent:
0:86d8ece873ca
Child:
2:af768faf5329
removed subfolder

Who changed what in which revision?

UserRevisionLine numberNew contents of line
trelemar 0:86d8ece873ca 1 #include "Pokitto.h"
trelemar 1:189e78ff65b1 2 #include "warsprites.h"
trelemar 1:189e78ff65b1 3 #include "warfont.cpp"
trelemar 0:86d8ece873ca 4 #include <vector>
trelemar 0:86d8ece873ca 5 #include <stdint.h>
trelemar 0:86d8ece873ca 6
trelemar 0:86d8ece873ca 7 float solids[64] {
trelemar 0:86d8ece873ca 8 0,1,1,1,1,0,0,0,
trelemar 0:86d8ece873ca 9 0,0,1,0,1,0,0,0,
trelemar 0:86d8ece873ca 10 0,0,1,1,1,0,0,0,
trelemar 0:86d8ece873ca 11 0,0,0,0,0,0,0,0,
trelemar 0:86d8ece873ca 12 0,0,0,0,0,0,0,0,
trelemar 0:86d8ece873ca 13 0,0,0,0,0,0,0,0,
trelemar 0:86d8ece873ca 14 0,0,0,0,0,0,0,0,
trelemar 0:86d8ece873ca 15 0,0,0,0,0,0,0,0,
trelemar 0:86d8ece873ca 16 };
trelemar 0:86d8ece873ca 17 //Sprite sheet:2x1
trelemar 0:86d8ece873ca 18 const uint8_t cursor_sprites [][244] ={
trelemar 0:86d8ece873ca 19 //[0] cell:0x0
trelemar 0:86d8ece873ca 20 {
trelemar 0:86d8ece873ca 21 22,22,
trelemar 0:86d8ece873ca 22 204,0,12,204,204,204,204,204,192,0,204,
trelemar 0:86d8ece873ca 23 192,255,240,204,204,204,204,204,15,255,12,
trelemar 0:86d8ece873ca 24 15,160,12,204,204,204,204,204,192,10,240,
trelemar 0:86d8ece873ca 25 15,12,204,204,204,204,204,204,204,192,240,
trelemar 0:86d8ece873ca 26 15,12,204,204,204,204,204,204,204,192,240,
trelemar 0:86d8ece873ca 27 192,204,204,204,204,204,204,204,204,204,12,
trelemar 0:86d8ece873ca 28 204,204,204,204,204,204,204,204,204,204,204,
trelemar 0:86d8ece873ca 29 204,204,204,204,204,204,204,204,204,204,204,
trelemar 0:86d8ece873ca 30 204,204,204,204,204,204,204,204,204,204,204,
trelemar 0:86d8ece873ca 31 204,204,204,204,204,204,204,204,204,204,204,
trelemar 0:86d8ece873ca 32 204,204,204,204,204,204,204,204,204,204,204,
trelemar 0:86d8ece873ca 33 204,204,204,204,204,204,204,204,204,204,204,
trelemar 0:86d8ece873ca 34 204,204,204,204,204,204,204,204,204,204,204,
trelemar 0:86d8ece873ca 35 204,204,204,204,204,204,204,204,204,204,204,
trelemar 0:86d8ece873ca 36 204,204,204,204,204,204,204,204,204,204,204,
trelemar 0:86d8ece873ca 37 204,204,204,204,204,204,204,204,204,204,204,
trelemar 0:86d8ece873ca 38 192,204,204,204,204,204,204,204,204,204,12,
trelemar 0:86d8ece873ca 39 15,12,204,204,204,204,204,204,204,192,240,
trelemar 0:86d8ece873ca 40 15,12,204,204,204,204,204,204,204,192,240,
trelemar 0:86d8ece873ca 41 15,160,12,204,204,204,204,204,192,10,240,
trelemar 0:86d8ece873ca 42 192,255,240,204,204,204,204,204,15,255,12,
trelemar 0:86d8ece873ca 43 204,0,12,204,204,204,204,204,192,0,204,
trelemar 0:86d8ece873ca 44 },
trelemar 0:86d8ece873ca 45 //[1] cell:1x0
trelemar 0:86d8ece873ca 46 {
trelemar 0:86d8ece873ca 47 22,22,
trelemar 0:86d8ece873ca 48 204,204,204,204,204,204,204,204,204,204,204,
trelemar 0:86d8ece873ca 49 204,192,0,204,204,204,204,204,0,12,204,
trelemar 0:86d8ece873ca 50 204,15,255,12,204,204,204,192,255,240,204,
trelemar 0:86d8ece873ca 51 192,250,0,204,204,204,204,204,0,175,12,
trelemar 0:86d8ece873ca 52 192,240,204,204,204,204,204,204,204,15,12,
trelemar 0:86d8ece873ca 53 192,240,204,204,204,204,204,204,204,15,12,
trelemar 0:86d8ece873ca 54 204,12,204,204,204,204,204,204,204,192,204,
trelemar 0:86d8ece873ca 55 204,204,204,204,204,204,204,204,204,204,204,
trelemar 0:86d8ece873ca 56 204,204,204,204,204,204,204,204,204,204,204,
trelemar 0:86d8ece873ca 57 204,204,204,204,204,204,204,204,204,204,204,
trelemar 0:86d8ece873ca 58 204,204,204,204,204,204,204,204,204,204,204,
trelemar 0:86d8ece873ca 59 204,204,204,204,204,204,204,204,204,204,204,
trelemar 0:86d8ece873ca 60 204,204,204,204,204,204,204,204,204,204,204,
trelemar 0:86d8ece873ca 61 204,204,204,204,204,204,204,204,204,204,204,
trelemar 0:86d8ece873ca 62 204,204,204,204,204,204,204,204,204,204,204,
trelemar 0:86d8ece873ca 63 204,12,204,204,204,204,204,204,204,192,204,
trelemar 0:86d8ece873ca 64 192,240,204,204,204,204,204,204,204,15,12,
trelemar 0:86d8ece873ca 65 192,240,204,204,204,204,204,204,204,15,12,
trelemar 0:86d8ece873ca 66 192,250,0,204,204,204,204,204,0,175,12,
trelemar 0:86d8ece873ca 67 204,15,255,12,204,204,204,192,255,240,204,
trelemar 0:86d8ece873ca 68 204,192,0,204,204,204,204,204,0,12,204,
trelemar 0:86d8ece873ca 69 204,204,204,204,204,204,204,204,204,204,204,
trelemar 0:86d8ece873ca 70 },
trelemar 0:86d8ece873ca 71 };
trelemar 0:86d8ece873ca 72
trelemar 0:86d8ece873ca 73 using namespace std;
trelemar 0:86d8ece873ca 74
trelemar 0:86d8ece873ca 75 int clamp(int low, int n, int high) {return min(max(low, n), high);}
trelemar 0:86d8ece873ca 76
trelemar 0:86d8ece873ca 77 float dist(int x1, int y1, int x2, int y2) {
trelemar 0:86d8ece873ca 78 int x = x1 - x2;
trelemar 0:86d8ece873ca 79 int y = y1 - y2;
trelemar 0:86d8ece873ca 80 float dist;
trelemar 0:86d8ece873ca 81 dist = pow((float)x,2)+pow((float)y,2);
trelemar 0:86d8ece873ca 82 dist = sqrt((float)dist);
trelemar 0:86d8ece873ca 83 return dist;
trelemar 0:86d8ece873ca 84 }
trelemar 0:86d8ece873ca 85
trelemar 0:86d8ece873ca 86 int lerp(int a, int b, float t) {
trelemar 0:86d8ece873ca 87 return (1-t)*a + t*b;
trelemar 0:86d8ece873ca 88 }
trelemar 0:86d8ece873ca 89
trelemar 1:189e78ff65b1 90 enum GameState {MAIN, PAUSE, MENU} State = MENU;
trelemar 0:86d8ece873ca 91
trelemar 0:86d8ece873ca 92 #define KEY_REPEAT 5
trelemar 0:86d8ece873ca 93
trelemar 0:86d8ece873ca 94 #define TASK_MOVE 0
trelemar 0:86d8ece873ca 95 #define TASK_ITEM 1
trelemar 0:86d8ece873ca 96 #define TASK_ATTACK 2
trelemar 0:86d8ece873ca 97 #define TASK_WAIT 3
trelemar 0:86d8ece873ca 98 #define TASK_NONE 4
trelemar 0:86d8ece873ca 99 #define TEAM_USER 0
trelemar 0:86d8ece873ca 100 #define TEAM_CPU 1
trelemar 0:86d8ece873ca 101
trelemar 0:86d8ece873ca 102 int current_team = TEAM_USER;
trelemar 0:86d8ece873ca 103 uint8_t selected_task = 0;
trelemar 0:86d8ece873ca 104 uint8_t current_task = TASK_NONE;
trelemar 0:86d8ece873ca 105 static char task_names[4][7] {
trelemar 0:86d8ece873ca 106 {"MOVE"},
trelemar 0:86d8ece873ca 107 {"ITEM"},
trelemar 0:86d8ece873ca 108 {"ATTACK"},
trelemar 0:86d8ece873ca 109 {"WAIT"},
trelemar 0:86d8ece873ca 110 };
trelemar 0:86d8ece873ca 111 int task_colors[4] {
trelemar 0:86d8ece873ca 112 11,9,6,8
trelemar 0:86d8ece873ca 113 };
trelemar 0:86d8ece873ca 114
trelemar 0:86d8ece873ca 115 Pokitto::Core game;
trelemar 0:86d8ece873ca 116 Pokitto::Display disp;
trelemar 0:86d8ece873ca 117 Pokitto::Buttons btn;
trelemar 0:86d8ece873ca 118
trelemar 0:86d8ece873ca 119 #define SW disp.width
trelemar 0:86d8ece873ca 120 #define SH disp.height
trelemar 0:86d8ece873ca 121
trelemar 0:86d8ece873ca 122 int map_x, map_y, cursor_x, cursor_y;
trelemar 0:86d8ece873ca 123
trelemar 0:86d8ece873ca 124 bool center_cursor = true;
trelemar 0:86d8ece873ca 125
trelemar 0:86d8ece873ca 126 void centerCursor() {
trelemar 0:86d8ece873ca 127 map_x = cursor_x - 3;
trelemar 0:86d8ece873ca 128 map_y = cursor_y - 2;
trelemar 0:86d8ece873ca 129 }
trelemar 0:86d8ece873ca 130
trelemar 0:86d8ece873ca 131 static void printb(int x, int y, int text) {
trelemar 0:86d8ece873ca 132 disp.setColor(0);
trelemar 0:86d8ece873ca 133 disp.print(x,y-1,text);
trelemar 0:86d8ece873ca 134 disp.print(x,y+1,text);
trelemar 0:86d8ece873ca 135 disp.print(x+1,y,text);
trelemar 0:86d8ece873ca 136 disp.print(x-1,y,text);
trelemar 0:86d8ece873ca 137 disp.setColor(15);
trelemar 0:86d8ece873ca 138 disp.print(x,y,text);
trelemar 0:86d8ece873ca 139 }
trelemar 0:86d8ece873ca 140 static void printb(int x, int y, char text[]) {
trelemar 0:86d8ece873ca 141 disp.setColor(0);
trelemar 0:86d8ece873ca 142 disp.print(x,y-1,text);
trelemar 0:86d8ece873ca 143 disp.print(x,y+1,text);
trelemar 0:86d8ece873ca 144 disp.print(x+1,y,text);
trelemar 0:86d8ece873ca 145 disp.print(x-1,y,text);
trelemar 0:86d8ece873ca 146 disp.setColor(15);
trelemar 0:86d8ece873ca 147 disp.print(x,y,text);
trelemar 0:86d8ece873ca 148 }
trelemar 0:86d8ece873ca 149
trelemar 0:86d8ece873ca 150 struct Dialog {
trelemar 0:86d8ece873ca 151 char text[20];
trelemar 0:86d8ece873ca 152 int start_time;
trelemar 0:86d8ece873ca 153 int position;
trelemar 0:86d8ece873ca 154 Dialog(char _text[20]) {
trelemar 0:86d8ece873ca 155 strcpy(text, _text);
trelemar 0:86d8ece873ca 156 position = 0;
trelemar 0:86d8ece873ca 157 start_time = game.frameCount;
trelemar 0:86d8ece873ca 158 };
trelemar 0:86d8ece873ca 159 void update() {
trelemar 0:86d8ece873ca 160 position = min(position + 1, 19);
trelemar 0:86d8ece873ca 161 };
trelemar 0:86d8ece873ca 162 void draw(int x, int y) {
trelemar 0:86d8ece873ca 163 disp.setCursor(x, y);
trelemar 0:86d8ece873ca 164 for (int p=0;p<position;p++) {
trelemar 0:86d8ece873ca 165 disp.print(text[p]);
trelemar 0:86d8ece873ca 166 }
trelemar 0:86d8ece873ca 167 };
trelemar 0:86d8ece873ca 168 };
trelemar 0:86d8ece873ca 169
trelemar 0:86d8ece873ca 170 struct Transition {
trelemar 0:86d8ece873ca 171 int on_val, off_val, val;
trelemar 0:86d8ece873ca 172 bool enabled;
trelemar 1:189e78ff65b1 173 Transition() {};
trelemar 0:86d8ece873ca 174 Transition(int _onv, int _offv, bool _enabled) {
trelemar 0:86d8ece873ca 175 on_val = _onv;
trelemar 0:86d8ece873ca 176 off_val = _offv;
trelemar 0:86d8ece873ca 177 enabled = _enabled;
trelemar 0:86d8ece873ca 178 if (enabled) val=on_val;
trelemar 0:86d8ece873ca 179 else val = off_val;
trelemar 0:86d8ece873ca 180 };
trelemar 0:86d8ece873ca 181 void toggle() {enabled=!enabled;};
trelemar 0:86d8ece873ca 182 void update() {
trelemar 0:86d8ece873ca 183 if (enabled) val = lerp(val, on_val, 0.2);
trelemar 0:86d8ece873ca 184 else val = lerp(val, off_val, 0.2);
trelemar 0:86d8ece873ca 185 };
trelemar 0:86d8ece873ca 186 };
trelemar 0:86d8ece873ca 187
trelemar 0:86d8ece873ca 188 struct Vec2 {
trelemar 0:86d8ece873ca 189 int x, y;
trelemar 0:86d8ece873ca 190 Vec2(int _x, int _y) {x=_x; y=_y;};
trelemar 0:86d8ece873ca 191 };
trelemar 0:86d8ece873ca 192
trelemar 0:86d8ece873ca 193 struct Item {
trelemar 0:86d8ece873ca 194 int id, x, y;
trelemar 0:86d8ece873ca 195 Item(int _id, int _x, int _y) {
trelemar 0:86d8ece873ca 196 id = _id;
trelemar 0:86d8ece873ca 197 x = _x;
trelemar 0:86d8ece873ca 198 y = _y;
trelemar 0:86d8ece873ca 199 };
trelemar 0:86d8ece873ca 200 void Draw() {
trelemar 0:86d8ece873ca 201 int dx = (x-map_x)*16;
trelemar 0:86d8ece873ca 202 int dy = (y-map_y)*16;
trelemar 0:86d8ece873ca 203 //disp.setColor(1);
trelemar 0:86d8ece873ca 204 //disp.fillRectangle(dx+4,dy+12,8,3);
trelemar 0:86d8ece873ca 205 //disp.drawBitmap(dx, dy+(sin(game.frameCount/4))*2, sprites[id]);
trelemar 0:86d8ece873ca 206 };
trelemar 0:86d8ece873ca 207 };
trelemar 0:86d8ece873ca 208
trelemar 1:189e78ff65b1 209 #define ID_SOLDIER 0
trelemar 1:189e78ff65b1 210 #define ID_ORC 1
trelemar 1:189e78ff65b1 211
trelemar 1:189e78ff65b1 212 char id_names[][8] {
trelemar 1:189e78ff65b1 213 {"SOLDIER"},
trelemar 1:189e78ff65b1 214 {"ORC"},
trelemar 1:189e78ff65b1 215 };
trelemar 1:189e78ff65b1 216
trelemar 0:86d8ece873ca 217 struct Hero {
trelemar 0:86d8ece873ca 218 unsigned int index, team, id, x, y;
trelemar 0:86d8ece873ca 219 uint8_t atk, def, hp, max_hp;
trelemar 0:86d8ece873ca 220 float range;
trelemar 0:86d8ece873ca 221 int spr;
trelemar 0:86d8ece873ca 222 int hurt_time;
trelemar 0:86d8ece873ca 223 bool tasks[4], flip;
trelemar 0:86d8ece873ca 224 Hero(int _x, int _y, int _id, int _team) {
trelemar 0:86d8ece873ca 225 x = _x; y = _y; flip = false;
trelemar 0:86d8ece873ca 226 id = _id; team = _team;
trelemar 0:86d8ece873ca 227 if (_team == TEAM_USER) {
trelemar 0:86d8ece873ca 228 spr = 32;
trelemar 0:86d8ece873ca 229 }
trelemar 1:189e78ff65b1 230 else {spr = 26; flip=true; id = ID_ORC;}
trelemar 0:86d8ece873ca 231 max_hp = 10;
trelemar 0:86d8ece873ca 232 hp = max_hp;
trelemar 0:86d8ece873ca 233 atk = random(4,6);
trelemar 0:86d8ece873ca 234 def = random(1,3);
trelemar 0:86d8ece873ca 235 range = 2.1;
trelemar 0:86d8ece873ca 236 NewTurn();
trelemar 0:86d8ece873ca 237 };
trelemar 0:86d8ece873ca 238 void NewTurn() {
trelemar 0:86d8ece873ca 239 for (int i=0;i<4;i++) {tasks[i]=true;}
trelemar 0:86d8ece873ca 240 };
trelemar 0:86d8ece873ca 241 void update(int i) {
trelemar 0:86d8ece873ca 242 index = i;
trelemar 0:86d8ece873ca 243 };
trelemar 0:86d8ece873ca 244 void Draw() {
trelemar 0:86d8ece873ca 245 int ox = 0;
trelemar 0:86d8ece873ca 246 int oy = 0;
trelemar 0:86d8ece873ca 247 int dx = (x-map_x)*16;
trelemar 0:86d8ece873ca 248 int dy = (y-map_y)*16;
trelemar 0:86d8ece873ca 249 bool draw = true;
trelemar 0:86d8ece873ca 250 if (game.frameCount-hurt_time<10) {
trelemar 0:86d8ece873ca 251 ox = random(-2,2);
trelemar 0:86d8ece873ca 252 oy = random(-2,2);
trelemar 0:86d8ece873ca 253 if (game.frameCount%2==0) {draw=false;}
trelemar 0:86d8ece873ca 254 }
trelemar 0:86d8ece873ca 255 int spr_id = spr + (game.frameCount/6)%2;
trelemar 0:86d8ece873ca 256 disp.invisiblecolor = 13;
trelemar 0:86d8ece873ca 257 if (draw) disp.drawBitmap((dx)+ox,(dy)+oy,sprites[spr_id], 0, flip);
trelemar 0:86d8ece873ca 258 disp.invisiblecolor = 12;
trelemar 0:86d8ece873ca 259 };
trelemar 0:86d8ece873ca 260 bool inRange(Hero * enemy) {
trelemar 0:86d8ece873ca 261 return (dist(x, y, enemy->x, enemy->y)<=range);
trelemar 0:86d8ece873ca 262 };
trelemar 0:86d8ece873ca 263 bool inRange(int dx, int dy) {
trelemar 0:86d8ece873ca 264 return (dist(x, y, dx, dy)<=range);
trelemar 0:86d8ece873ca 265 }
trelemar 0:86d8ece873ca 266 };
trelemar 0:86d8ece873ca 267
trelemar 0:86d8ece873ca 268 void DrawCursorHeroUI (Hero * h, int x, int y) {
trelemar 0:86d8ece873ca 269 int bw = 24;
trelemar 0:86d8ece873ca 270 int hw = (bw/h->max_hp) * h->hp;
trelemar 0:86d8ece873ca 271 disp.setColor(0);
trelemar 0:86d8ece873ca 272 disp.drawRoundRect(x-1,y-1,bw+2,5,2); //HEALTH BAR
trelemar 0:86d8ece873ca 273 disp.fillRoundRect(x-1, y+26,bw+2,7,2); //TEXT BG BOX
trelemar 0:86d8ece873ca 274 disp.setColor(6);
trelemar 0:86d8ece873ca 275 disp.fillRect(x, y, bw, 2);
trelemar 0:86d8ece873ca 276 disp.setColor(11);
trelemar 0:86d8ece873ca 277 disp.fillRect(x, y, hw+4, 2);
trelemar 0:86d8ece873ca 278 disp.setColor(11);
trelemar 0:86d8ece873ca 279 disp.print(x,y+27,"^");
trelemar 0:86d8ece873ca 280 disp.setColor(15);
trelemar 0:86d8ece873ca 281 disp.print((int)h->atk);
trelemar 0:86d8ece873ca 282 disp.setColor(6);
trelemar 0:86d8ece873ca 283 disp.print("n");
trelemar 0:86d8ece873ca 284 disp.setColor(15);
trelemar 0:86d8ece873ca 285 disp.print((int)h->def);
trelemar 0:86d8ece873ca 286 }
trelemar 0:86d8ece873ca 287
trelemar 0:86d8ece873ca 288 void DrawSelectedHeroUI(Hero * h, int y) {
trelemar 0:86d8ece873ca 289 disp.setColor(0);
trelemar 0:86d8ece873ca 290 //disp.fillRect(0,66,SW,88-66);
trelemar 0:86d8ece873ca 291 disp.fillRoundRect(1,y,SW-2,88-67,3);
trelemar 0:86d8ece873ca 292 //disp.setColor(15);
trelemar 0:86d8ece873ca 293 if (!h) return;
trelemar 0:86d8ece873ca 294 printb(3,y-3,id_names[h->id]);
trelemar 0:86d8ece873ca 295 disp.setColor(8);
trelemar 0:86d8ece873ca 296 disp.print(3,y+3,">");
trelemar 0:86d8ece873ca 297 disp.setColor(15);
trelemar 0:86d8ece873ca 298 disp.print((int)h->atk);
trelemar 0:86d8ece873ca 299 disp.print(" ATK");
trelemar 0:86d8ece873ca 300 disp.setColor(6);
trelemar 0:86d8ece873ca 301 disp.print(3,y+9,"n");
trelemar 0:86d8ece873ca 302 disp.setColor(15);
trelemar 0:86d8ece873ca 303 disp.print((int)h->def);
trelemar 0:86d8ece873ca 304 disp.print(" DEF");
trelemar 0:86d8ece873ca 305 disp.setColor(11);
trelemar 0:86d8ece873ca 306 disp.print(3,y+15,"^");
trelemar 0:86d8ece873ca 307 disp.setColor(15);
trelemar 0:86d8ece873ca 308 disp.print((int)h->range);
trelemar 0:86d8ece873ca 309 disp.print(" RNG");
trelemar 0:86d8ece873ca 310 printb(16,(-y)+68,task_names[selected_task]);
trelemar 0:86d8ece873ca 311
trelemar 0:86d8ece873ca 312 for (int i=0;i<4;i++) {
trelemar 0:86d8ece873ca 313 int spr = i+48;
trelemar 0:86d8ece873ca 314 if (!h->tasks[i]) spr-=8;
trelemar 0:86d8ece873ca 315 else if (selected_task==i) spr+=8;
trelemar 0:86d8ece873ca 316 disp.drawBitmap(44+(i*16), y+4, sprites[spr]);
trelemar 0:86d8ece873ca 317 }
trelemar 0:86d8ece873ca 318 int bw = 62;
trelemar 0:86d8ece873ca 319 int hw = (bw/h->max_hp) * h->hp;
trelemar 0:86d8ece873ca 320 disp.setColor(0);
trelemar 0:86d8ece873ca 321 disp.drawRoundRect(44,y-4,bw+2,7,3);
trelemar 0:86d8ece873ca 322 disp.setColor(6);
trelemar 0:86d8ece873ca 323 disp.fillRoundRect(45,y-3,bw,5,2);
trelemar 0:86d8ece873ca 324 disp.setColor(11);
trelemar 0:86d8ece873ca 325 disp.fillRoundRect(45,y-3,hw+2,5,2);
trelemar 0:86d8ece873ca 326 disp.setColor(15);
trelemar 0:86d8ece873ca 327 printb(50+(bw/2)-10,y-3,(int)h->hp);
trelemar 0:86d8ece873ca 328 }
trelemar 0:86d8ece873ca 329
trelemar 0:86d8ece873ca 330 void DrawItemList(Hero * h, int y) {
trelemar 0:86d8ece873ca 331 disp.setColor(0);
trelemar 0:86d8ece873ca 332 disp.fillRoundRect(32,y,SW-63,12,3);
trelemar 0:86d8ece873ca 333 disp.setColor(15);
trelemar 0:86d8ece873ca 334 for (int i = 0; i<4; i++) {
trelemar 0:86d8ece873ca 335 disp.drawRoundRect(34+(i*11),y+1,10,10,2);
trelemar 0:86d8ece873ca 336 }
trelemar 0:86d8ece873ca 337
trelemar 0:86d8ece873ca 338 }
trelemar 0:86d8ece873ca 339
trelemar 0:86d8ece873ca 340 void DrawTurnCounter(vector<Hero> &_heros) {
trelemar 0:86d8ece873ca 341 disp.invisiblecolor = 13;
trelemar 0:86d8ece873ca 342 int spr = 44;
trelemar 0:86d8ece873ca 343 if (current_team==TEAM_CPU) spr = 45;
trelemar 0:86d8ece873ca 344 disp.drawBitmap(0, 0, sprites[spr]);
trelemar 0:86d8ece873ca 345 disp.invisiblecolor = 12;
trelemar 0:86d8ece873ca 346 int count = 0;
trelemar 0:86d8ece873ca 347 for (int i=0; i<_heros.size();i++) {
trelemar 0:86d8ece873ca 348 if (_heros[i].team == current_team) count++;
trelemar 0:86d8ece873ca 349 }
trelemar 0:86d8ece873ca 350 printb(11,10,(int)count);
trelemar 0:86d8ece873ca 351 }
trelemar 0:86d8ece873ca 352
trelemar 0:86d8ece873ca 353 #define MAP_WIDTH 12
trelemar 0:86d8ece873ca 354 #define MAP_HEIGHT 12
trelemar 0:86d8ece873ca 355 int Map[MAP_HEIGHT][MAP_WIDTH];
trelemar 0:86d8ece873ca 356 void loadTileMap() {
trelemar 0:86d8ece873ca 357 fileOpen("file_out.war",FILE_MODE_BINARY);
trelemar 0:86d8ece873ca 358 for (int i = 0; i<144; i++) {
trelemar 0:86d8ece873ca 359 int x = i%MAP_WIDTH;
trelemar 0:86d8ece873ca 360 int y = (i-x)/MAP_WIDTH;
trelemar 0:86d8ece873ca 361 //fileSetPosition(i);
trelemar 0:86d8ece873ca 362 Map[y][x] = (int)filePeek(i);
trelemar 0:86d8ece873ca 363 }
trelemar 0:86d8ece873ca 364 //fileClose();
trelemar 0:86d8ece873ca 365 }
trelemar 0:86d8ece873ca 366
trelemar 0:86d8ece873ca 367 void saveTileMap() {
trelemar 0:86d8ece873ca 368
trelemar 0:86d8ece873ca 369 }
trelemar 0:86d8ece873ca 370
trelemar 0:86d8ece873ca 371 void DrawTileMap(int8_t x, int8_t y, Hero * hero) {
trelemar 0:86d8ece873ca 372 disp.setColor(15);
trelemar 0:86d8ece873ca 373 for (int map_x=0; map_x<7; map_x++) {
trelemar 0:86d8ece873ca 374 for (int map_y=0; map_y<6; map_y++) {
trelemar 0:86d8ece873ca 375 int spr;
trelemar 0:86d8ece873ca 376 if (map_x+x<0||x+map_x>MAP_WIDTH-1||y+map_y<0||y+map_y>MAP_HEIGHT-1) {
trelemar 0:86d8ece873ca 377 spr = 9;
trelemar 0:86d8ece873ca 378 }
trelemar 0:86d8ece873ca 379 else {
trelemar 0:86d8ece873ca 380 spr = Map[map_y+y][map_x+x];
trelemar 0:86d8ece873ca 381 }
trelemar 0:86d8ece873ca 382
trelemar 0:86d8ece873ca 383 float distance;
trelemar 0:86d8ece873ca 384
trelemar 0:86d8ece873ca 385 disp.drawBitmap((map_x*16), (map_y*16),sprites[spr]);
trelemar 0:86d8ece873ca 386
trelemar 0:86d8ece873ca 387 //RANGE BOXES
trelemar 0:86d8ece873ca 388 if (hero && (current_task == TASK_MOVE || current_task == TASK_ATTACK)) {
trelemar 0:86d8ece873ca 389 distance = dist(map_x+x, map_y+y, hero->x, hero->y);
trelemar 0:86d8ece873ca 390 if (distance<hero->range&&x+map_x<MAP_WIDTH&&y+map_y<MAP_HEIGHT) {
trelemar 0:86d8ece873ca 391 disp.setColor(8);
trelemar 0:86d8ece873ca 392 if (solids[Map[map_y+y][map_x+x]]) {disp.setColor(6);}
trelemar 0:86d8ece873ca 393 disp.drawRoundRect(map_x*16+2, map_y*16+2, 12, 12,3);
trelemar 0:86d8ece873ca 394 //disp.print(map_x*16,map_y*16,(float)distance);
trelemar 0:86d8ece873ca 395 }
trelemar 0:86d8ece873ca 396 }
trelemar 0:86d8ece873ca 397 }
trelemar 0:86d8ece873ca 398 }
trelemar 0:86d8ece873ca 399 }
trelemar 0:86d8ece873ca 400
trelemar 0:86d8ece873ca 401 void DrawCursor(int x, int y) {
trelemar 0:86d8ece873ca 402 //uint8_t spr = 52 + (game.frameCount/12)%2;
trelemar 0:86d8ece873ca 403 disp.drawBitmap(x*16-3, y*16-3,cursor_sprites[(game.frameCount/4)%2]);
trelemar 0:86d8ece873ca 404 }
trelemar 0:86d8ece873ca 405
trelemar 0:86d8ece873ca 406 Hero * getHeroAtCoords(int x, int y, vector<Hero> &herovect) {
trelemar 0:86d8ece873ca 407 Hero *h = NULL;
trelemar 0:86d8ece873ca 408 bool found = false;
trelemar 0:86d8ece873ca 409 for (int i=0;i<herovect.size();i++) {
trelemar 0:86d8ece873ca 410 if (herovect[i].x==x&&herovect[i].y==y) {
trelemar 0:86d8ece873ca 411 h = &herovect[i];
trelemar 0:86d8ece873ca 412 break;
trelemar 0:86d8ece873ca 413 }
trelemar 0:86d8ece873ca 414 }
trelemar 0:86d8ece873ca 415 return h;
trelemar 0:86d8ece873ca 416 }
trelemar 0:86d8ece873ca 417
trelemar 0:86d8ece873ca 418
trelemar 0:86d8ece873ca 419
trelemar 0:86d8ece873ca 420 void CursorInput() {
trelemar 0:86d8ece873ca 421 int last_x=cursor_x;
trelemar 0:86d8ece873ca 422 int last_y=cursor_y;
trelemar 0:86d8ece873ca 423 if (btn.repeat(BTN_UP,KEY_REPEAT)) {
trelemar 0:86d8ece873ca 424 if (cursor_y-map_y<=0) {
trelemar 0:86d8ece873ca 425 map_y=max(map_y-1,0);
trelemar 0:86d8ece873ca 426 }
trelemar 0:86d8ece873ca 427 cursor_y=max(cursor_y-1,0);
trelemar 0:86d8ece873ca 428 }
trelemar 0:86d8ece873ca 429 if (btn.repeat(BTN_DOWN,KEY_REPEAT)) {
trelemar 0:86d8ece873ca 430 if (cursor_y-map_y>=4) {
trelemar 0:86d8ece873ca 431 map_y=min(map_y+1,MAP_HEIGHT-6);
trelemar 0:86d8ece873ca 432 }
trelemar 0:86d8ece873ca 433 cursor_y=min(cursor_y+1,MAP_HEIGHT-1);
trelemar 0:86d8ece873ca 434
trelemar 0:86d8ece873ca 435 }
trelemar 0:86d8ece873ca 436 if (btn.repeat(BTN_LEFT,KEY_REPEAT)) {
trelemar 0:86d8ece873ca 437 if (cursor_x-map_x<=0) {
trelemar 0:86d8ece873ca 438 map_x=max(map_x-1,0);
trelemar 0:86d8ece873ca 439 }
trelemar 0:86d8ece873ca 440 cursor_x=max(cursor_x-1,0);
trelemar 0:86d8ece873ca 441 }
trelemar 0:86d8ece873ca 442 if (btn.repeat(BTN_RIGHT,KEY_REPEAT)) {
trelemar 0:86d8ece873ca 443 if (cursor_x-map_x>=6) {
trelemar 0:86d8ece873ca 444 map_x=min(map_x+1,MAP_WIDTH-7);
trelemar 0:86d8ece873ca 445 }
trelemar 0:86d8ece873ca 446 cursor_x=min(cursor_x+1,MAP_WIDTH-1);
trelemar 0:86d8ece873ca 447 }
trelemar 0:86d8ece873ca 448
trelemar 0:86d8ece873ca 449 if (center_cursor) {
trelemar 0:86d8ece873ca 450 centerCursor();
trelemar 0:86d8ece873ca 451 }
trelemar 0:86d8ece873ca 452 }
trelemar 0:86d8ece873ca 453
trelemar 1:189e78ff65b1 454 struct MainMenu {
trelemar 1:189e78ff65b1 455 struct Transition trans;
trelemar 1:189e78ff65b1 456 char items[3][10];
trelemar 1:189e78ff65b1 457 int selected_item;
trelemar 1:189e78ff65b1 458 MainMenu() {
trelemar 1:189e78ff65b1 459 trans.off_val=-16;
trelemar 1:189e78ff65b1 460 trans.on_val = 24;
trelemar 1:189e78ff65b1 461 trans.val=trans.off_val;
trelemar 1:189e78ff65b1 462 trans.enabled=true;
trelemar 1:189e78ff65b1 463 strcpy(items[0], "CAMPAIGN");
trelemar 1:189e78ff65b1 464 strcpy(items[1], "SKIRMISH");
trelemar 1:189e78ff65b1 465 strcpy(items[2], "OPTIONS");
trelemar 1:189e78ff65b1 466 selected_item = 0;
trelemar 1:189e78ff65b1 467 };
trelemar 1:189e78ff65b1 468 void update() {
trelemar 1:189e78ff65b1 469 if (btn.pressed(BTN_RIGHT)) {
trelemar 1:189e78ff65b1 470 selected_item = min(selected_item + 1, 2);
trelemar 1:189e78ff65b1 471 }
trelemar 1:189e78ff65b1 472 if (btn.pressed(BTN_LEFT)) {
trelemar 1:189e78ff65b1 473 selected_item = max(selected_item - 1, 0);
trelemar 1:189e78ff65b1 474 }
trelemar 1:189e78ff65b1 475
trelemar 1:189e78ff65b1 476 if (btn.pressed(BTN_A)) {
trelemar 1:189e78ff65b1 477 switch (selected_item){
trelemar 1:189e78ff65b1 478 case (0): //CAMPAIGN
trelemar 1:189e78ff65b1 479 break;
trelemar 1:189e78ff65b1 480 case (1): //SKIRMISH
trelemar 1:189e78ff65b1 481 disp.clear();
trelemar 1:189e78ff65b1 482 disp.print("LOADING");
trelemar 1:189e78ff65b1 483 pokInitSD();
trelemar 1:189e78ff65b1 484 loadTileMap();
trelemar 1:189e78ff65b1 485 State = MAIN;
trelemar 1:189e78ff65b1 486 break;
trelemar 1:189e78ff65b1 487 case (2): //OPTIONS
trelemar 1:189e78ff65b1 488 break;
trelemar 1:189e78ff65b1 489 }
trelemar 1:189e78ff65b1 490 }
trelemar 1:189e78ff65b1 491 };
trelemar 1:189e78ff65b1 492 void draw() {
trelemar 1:189e78ff65b1 493 disp.clear();
trelemar 1:189e78ff65b1 494 trans.update();
trelemar 1:189e78ff65b1 495 disp.setColor(15);
trelemar 1:189e78ff65b1 496 disp.print(2,trans.val,"POKIT WARS");
trelemar 1:189e78ff65b1 497 disp.print(2,SH/2, items[selected_item]);
trelemar 1:189e78ff65b1 498 };
trelemar 1:189e78ff65b1 499 };
trelemar 1:189e78ff65b1 500
trelemar 0:86d8ece873ca 501 int main() {
trelemar 1:189e78ff65b1 502 MainMenu main_menu;
trelemar 0:86d8ece873ca 503 Transition tTrans(66,96,false);
trelemar 0:86d8ece873ca 504 Transition itemlist(40,72,false);
trelemar 0:86d8ece873ca 505 game.begin();
trelemar 0:86d8ece873ca 506 game.setFrameRate(30);
trelemar 0:86d8ece873ca 507 disp.invisiblecolor = 12;
trelemar 0:86d8ece873ca 508 disp.bgcolor=12;
trelemar 0:86d8ece873ca 509 disp.persistence = 1;
trelemar 0:86d8ece873ca 510 disp.load565Palette(sprite_pal);
trelemar 0:86d8ece873ca 511 disp.setFont(fontWAR);
trelemar 0:86d8ece873ca 512 map_x=0;
trelemar 0:86d8ece873ca 513 map_y=0;
trelemar 0:86d8ece873ca 514 cursor_x=4;
trelemar 0:86d8ece873ca 515 cursor_y=6;
trelemar 0:86d8ece873ca 516 vector<Hero> heros;
trelemar 1:189e78ff65b1 517 pokInitSD();
trelemar 0:86d8ece873ca 518 loadTileMap();
trelemar 0:86d8ece873ca 519 /*
trelemar 0:86d8ece873ca 520 heros.push_back(Hero(4,5,ID_SOLDIER, TEAM_USER));
trelemar 0:86d8ece873ca 521 heros.push_back(Hero(5,6,ID_SOLDIER, TEAM_USER));
trelemar 0:86d8ece873ca 522 heros.push_back(Hero(3,8,ID_SOLDIER, TEAM_USER));
trelemar 0:86d8ece873ca 523 heros.push_back(Hero(8,5,ID_SOLDIER, TEAM_CPU));
trelemar 0:86d8ece873ca 524 heros.push_back(Hero(8,7,ID_SOLDIER, TEAM_CPU));
trelemar 0:86d8ece873ca 525 heros.push_back(Hero(6,9,ID_SOLDIER, TEAM_CPU));
trelemar 0:86d8ece873ca 526 */
trelemar 0:86d8ece873ca 527
trelemar 0:86d8ece873ca 528 for (int i=0;i<6;i++) {
trelemar 0:86d8ece873ca 529 int team = TEAM_USER;
trelemar 0:86d8ece873ca 530 if (i>2) team = TEAM_CPU;
trelemar 0:86d8ece873ca 531 heros.push_back(Hero(random(0,MAP_WIDTH-1),random(0,MAP_HEIGHT-1),ID_SOLDIER, team));
trelemar 0:86d8ece873ca 532 }
trelemar 0:86d8ece873ca 533
trelemar 0:86d8ece873ca 534 Hero * cursor_hero = NULL;
trelemar 0:86d8ece873ca 535 Hero * current_hero = NULL;
trelemar 0:86d8ece873ca 536 Item itest(52, 3, 3);
trelemar 0:86d8ece873ca 537
trelemar 0:86d8ece873ca 538 while (game.isRunning()) {
trelemar 0:86d8ece873ca 539 if (game.update()) {
trelemar 0:86d8ece873ca 540 switch (State) {
trelemar 1:189e78ff65b1 541 case MENU:
trelemar 1:189e78ff65b1 542 main_menu.update();
trelemar 1:189e78ff65b1 543 main_menu.draw();
trelemar 1:189e78ff65b1 544 break;
trelemar 0:86d8ece873ca 545 case MAIN:
trelemar 0:86d8ece873ca 546 tTrans.update();
trelemar 0:86d8ece873ca 547 itemlist.update();
trelemar 0:86d8ece873ca 548 //If no current hero or current task is to move our current hero, accept cursor movement.
trelemar 0:86d8ece873ca 549 if (!current_hero||current_task==TASK_MOVE||current_task==TASK_ATTACK) {
trelemar 0:86d8ece873ca 550 CursorInput();
trelemar 0:86d8ece873ca 551 cursor_hero = getHeroAtCoords(cursor_x,cursor_y, heros);
trelemar 0:86d8ece873ca 552 }
trelemar 0:86d8ece873ca 553 //This will call when there is a current hero and not in a current task
trelemar 0:86d8ece873ca 554 else if (current_hero) {
trelemar 0:86d8ece873ca 555 //TASK SELECTOR
trelemar 0:86d8ece873ca 556 int dir = 0;
trelemar 0:86d8ece873ca 557 if (btn.pressed(BTN_RIGHT)) {
trelemar 0:86d8ece873ca 558 selected_task=min(selected_task+1,3);
trelemar 0:86d8ece873ca 559 }
trelemar 0:86d8ece873ca 560 if (btn.pressed(BTN_LEFT)) {
trelemar 0:86d8ece873ca 561 selected_task=max(selected_task-1,0);
trelemar 0:86d8ece873ca 562 }
trelemar 0:86d8ece873ca 563 if (selected_task==TASK_ITEM) {
trelemar 0:86d8ece873ca 564 itemlist.enabled = true;
trelemar 0:86d8ece873ca 565 }
trelemar 0:86d8ece873ca 566 else itemlist.enabled = false;
trelemar 0:86d8ece873ca 567 //selected_task=selected_task%4;
trelemar 0:86d8ece873ca 568 }
trelemar 0:86d8ece873ca 569
trelemar 0:86d8ece873ca 570 DrawTileMap(map_x, map_y, current_hero);
trelemar 0:86d8ece873ca 571 for (int i = 0; i<heros.size(); i++) {
trelemar 0:86d8ece873ca 572 heros[i].Draw();
trelemar 0:86d8ece873ca 573 heros[i].update(i);
trelemar 0:86d8ece873ca 574 }
trelemar 0:86d8ece873ca 575 itest.Draw();
trelemar 0:86d8ece873ca 576 DrawCursor(cursor_x-map_x,cursor_y-map_y);
trelemar 0:86d8ece873ca 577 disp.setColor(15);
trelemar 0:86d8ece873ca 578
trelemar 0:86d8ece873ca 579 if (btn.pressed(BTN_A)) {
trelemar 0:86d8ece873ca 580 if (current_hero&&current_task!=TASK_NONE) {
trelemar 0:86d8ece873ca 581 //THIS IS WITHIN A TASK, EX: SELECTING A MOVE LOCATION OR ATTACK TARGET.
trelemar 0:86d8ece873ca 582 switch (current_task) {
trelemar 0:86d8ece873ca 583 case TASK_MOVE:
trelemar 0:86d8ece873ca 584 //MOVE HERO TO CURSOR, NO COLISSIONS YET.
trelemar 0:86d8ece873ca 585 //ONLY IF IN RANGE AND NOT SOLID
trelemar 0:86d8ece873ca 586 //FIX STACKABLE HEROS
trelemar 0:86d8ece873ca 587 if (current_hero->inRange(cursor_x, cursor_y)&&!getHeroAtCoords(cursor_x, cursor_y, heros)&&!solids[Map[cursor_y][cursor_x]]) {
trelemar 0:86d8ece873ca 588 if (cursor_x<current_hero->x) current_hero->flip=true;
trelemar 0:86d8ece873ca 589 else if (cursor_x>current_hero->x) current_hero->flip=false;
trelemar 0:86d8ece873ca 590 current_hero->x = cursor_x;
trelemar 0:86d8ece873ca 591 current_hero->y = cursor_y;
trelemar 0:86d8ece873ca 592
trelemar 0:86d8ece873ca 593 current_task = TASK_NONE;
trelemar 0:86d8ece873ca 594 current_hero->tasks[TASK_MOVE] = false;
trelemar 0:86d8ece873ca 595 }
trelemar 0:86d8ece873ca 596 break;
trelemar 0:86d8ece873ca 597 case TASK_ATTACK:
trelemar 0:86d8ece873ca 598 if (cursor_hero&&current_hero->inRange(cursor_hero)) {
trelemar 0:86d8ece873ca 599 //FOUND TARGET AT CURSOR.
trelemar 0:86d8ece873ca 600 cursor_x = current_hero->x;
trelemar 0:86d8ece873ca 601 cursor_y = current_hero->y;
trelemar 0:86d8ece873ca 602 int8_t result = cursor_hero->hp - (current_hero->atk-cursor_hero->def);
trelemar 0:86d8ece873ca 603 cursor_hero->hp = result;
trelemar 0:86d8ece873ca 604 cursor_hero->hurt_time=game.frameCount;
trelemar 0:86d8ece873ca 605 if (result<=0) {
trelemar 0:86d8ece873ca 606 heros.erase(heros.begin()+cursor_hero->index);
trelemar 0:86d8ece873ca 607 }
trelemar 0:86d8ece873ca 608
trelemar 0:86d8ece873ca 609 current_task = TASK_NONE;
trelemar 0:86d8ece873ca 610 current_hero->tasks[TASK_ATTACK] = false;
trelemar 0:86d8ece873ca 611 }
trelemar 0:86d8ece873ca 612 else {
trelemar 0:86d8ece873ca 613 //NO TARGET FOUND, ERROR SOUND SHOULD PLAY.
trelemar 0:86d8ece873ca 614 }
trelemar 0:86d8ece873ca 615 break;
trelemar 0:86d8ece873ca 616
trelemar 0:86d8ece873ca 617 //DUMMY CODE, THESE ARE CALLED BELOW. NOT HERE.
trelemar 0:86d8ece873ca 618 case TASK_ITEM:
trelemar 0:86d8ece873ca 619 current_task = TASK_NONE;
trelemar 0:86d8ece873ca 620 current_hero->tasks[TASK_ITEM] = false;
trelemar 0:86d8ece873ca 621 break;
trelemar 0:86d8ece873ca 622 case TASK_WAIT:
trelemar 0:86d8ece873ca 623 current_task = TASK_NONE;
trelemar 0:86d8ece873ca 624 current_hero->tasks[TASK_WAIT] = false;
trelemar 0:86d8ece873ca 625 break;
trelemar 0:86d8ece873ca 626 }
trelemar 0:86d8ece873ca 627 }
trelemar 0:86d8ece873ca 628 else if (current_hero&&current_hero->tasks[selected_task]==true) {
trelemar 0:86d8ece873ca 629 //TASK SWITCH HERE
trelemar 0:86d8ece873ca 630 //THIS HAPPENS DIRECTLY AFTER PRESSING BTN_A ON A NEW TASK.
trelemar 0:86d8ece873ca 631 current_task=selected_task;
trelemar 0:86d8ece873ca 632
trelemar 0:86d8ece873ca 633 switch (selected_task) {
trelemar 0:86d8ece873ca 634 case TASK_ITEM:
trelemar 0:86d8ece873ca 635 current_task = TASK_NONE;
trelemar 0:86d8ece873ca 636 current_hero->tasks[TASK_ITEM] = false;
trelemar 0:86d8ece873ca 637 break;
trelemar 0:86d8ece873ca 638 case TASK_WAIT:
trelemar 0:86d8ece873ca 639 current_task = TASK_NONE;
trelemar 0:86d8ece873ca 640 current_hero->tasks[TASK_WAIT] = false;
trelemar 0:86d8ece873ca 641 break;
trelemar 0:86d8ece873ca 642 }
trelemar 0:86d8ece873ca 643 }
trelemar 0:86d8ece873ca 644 else if (cursor_hero) {
trelemar 0:86d8ece873ca 645 //NO CURRENT HERO, SELECT A HERO ONLY IF IN CURSOR HERE.
trelemar 0:86d8ece873ca 646 if (cursor_hero->team == current_team) {
trelemar 0:86d8ece873ca 647 current_hero = cursor_hero;
trelemar 0:86d8ece873ca 648 selected_task = TASK_MOVE;
trelemar 0:86d8ece873ca 649 tTrans.enabled = true;
trelemar 0:86d8ece873ca 650 }
trelemar 0:86d8ece873ca 651 }
trelemar 0:86d8ece873ca 652 }
trelemar 0:86d8ece873ca 653 if (btn.pressed(BTN_B)) {
trelemar 0:86d8ece873ca 654 if (current_task!=TASK_NONE) {
trelemar 0:86d8ece873ca 655 //BACK OUT OF CURRENT TASK.
trelemar 0:86d8ece873ca 656 current_task=TASK_NONE;
trelemar 0:86d8ece873ca 657 cursor_x = current_hero->x;
trelemar 0:86d8ece873ca 658 cursor_y = current_hero->y;
trelemar 0:86d8ece873ca 659 }
trelemar 0:86d8ece873ca 660 else if (current_hero&&current_task==TASK_NONE) {
trelemar 0:86d8ece873ca 661 tTrans.enabled=false; current_hero = NULL; //UNSELECT HERO.
trelemar 0:86d8ece873ca 662 }
trelemar 0:86d8ece873ca 663 }
trelemar 0:86d8ece873ca 664 if (btn.pressed(BTN_C)&& !current_hero) {
trelemar 0:86d8ece873ca 665 //heros.push_back(Hero(cursor_x,cursor_y,0,0));
trelemar 0:86d8ece873ca 666 current_team=(current_team+1) % 2;
trelemar 0:86d8ece873ca 667 for (int i=0;i<heros.size();i++) heros[i].NewTurn();
trelemar 0:86d8ece873ca 668 State = PAUSE;
trelemar 1:189e78ff65b1 669 disp.print("PAUSED");
trelemar 0:86d8ece873ca 670 //tTrans.toggle();
trelemar 0:86d8ece873ca 671 }
trelemar 0:86d8ece873ca 672 if (cursor_hero&&cursor_hero!=current_hero&&current_task) {
trelemar 0:86d8ece873ca 673 DrawCursorHeroUI(cursor_hero, (cursor_hero->x-map_x)*16-4,(cursor_hero->y-map_y)*16-7);
trelemar 0:86d8ece873ca 674 }
trelemar 0:86d8ece873ca 675 if (tTrans.val==tTrans.on_val) {
trelemar 0:86d8ece873ca 676 DrawItemList(current_hero, itemlist.val);
trelemar 0:86d8ece873ca 677 }
trelemar 0:86d8ece873ca 678 DrawSelectedHeroUI(current_hero, tTrans.val);
trelemar 0:86d8ece873ca 679
trelemar 0:86d8ece873ca 680 disp.setCursor(0,0);
trelemar 0:86d8ece873ca 681 DrawTurnCounter(heros);
trelemar 0:86d8ece873ca 682 //disp.print(0,32,dtest.text);
trelemar 0:86d8ece873ca 683 //disp.print(1,SH-6,(int)game.battery.level);
trelemar 0:86d8ece873ca 684 //disp.print(" ");
trelemar 0:86d8ece873ca 685 break;
trelemar 0:86d8ece873ca 686 case PAUSE:
trelemar 0:86d8ece873ca 687 if (btn.pressed(BTN_C)) {
trelemar 0:86d8ece873ca 688 State = MAIN;
trelemar 0:86d8ece873ca 689 }
trelemar 0:86d8ece873ca 690 disp.print(isThisFileOpen("file_out.war"));
trelemar 0:86d8ece873ca 691 break;
trelemar 0:86d8ece873ca 692 }//GAME STATE SWITCH
trelemar 0:86d8ece873ca 693
trelemar 0:86d8ece873ca 694 }//UPDATE
trelemar 0:86d8ece873ca 695 }//IS RUNNING
trelemar 0:86d8ece873ca 696 return 1;
trelemar 0:86d8ece873ca 697 }