summary refs log tree commit diff stats
path: root/Classes/TutorialMode.m
diff options
context:
space:
mode:
Diffstat (limited to 'Classes/TutorialMode.m')
-rw-r--r--Classes/TutorialMode.m114
1 files changed, 82 insertions, 32 deletions
diff --git a/Classes/TutorialMode.m b/Classes/TutorialMode.m index 3c70a46..3f37505 100644 --- a/Classes/TutorialMode.m +++ b/Classes/TutorialMode.m
@@ -8,11 +8,10 @@
8 8
9#import "TutorialMode.h" 9#import "TutorialMode.h"
10#import "FallingObject.h" 10#import "FallingObject.h"
11#import "Cherry.h"
12#import "Bottle.h"
13#import "OneUp.h"
14#import "Rock.h"
15#import "GameModeSelectionLayer.h" 11#import "GameModeSelectionLayer.h"
12#import "SimpleAudioEngine.h"
13#import "ClassicGameMode.h"
14#import "JumpGameMode.h"
16 15
17// Item tags: 16// Item tags:
18// 2000 - first dropped item 17// 2000 - first dropped item
@@ -22,10 +21,35 @@
22// 2009 - rock 21// 2009 - rock
23// 2010 - random item dropped after death from first rock 22// 2010 - random item dropped after death from first rock
24 23
24typedef enum {
25 kCherryObject = 0,
26 kEnergyDrinkObject,
27 kOneUpObject,
28 kRockObject
29} FallingObjects;
30
25@implementation TutorialMode 31@implementation TutorialMode
26 32
27@synthesize currentTutorial; 33@synthesize currentTutorial;
28 34
35static GameModeInfo* info;
36
37+ (GameModeInfo*)info
38{
39 if (info == nil)
40 {
41 info = [[GameModeInfo alloc] initWithName:@"Tutorial"
42 location:@"Florence"
43 numOfStars:0
44 imageFilename:[[NSBundle mainBundle] pathForResource:@"florence" ofType:@"png"]
45 unlocked:YES
46 gameClass:[TutorialMode class]
47 globalHighscoreKey:nil];
48 }
49
50 return info;
51}
52
29- (id)init 53- (id)init
30{ 54{
31 self = [super init]; 55 self = [super init];
@@ -38,6 +62,11 @@
38 62
39 showedDeathBubble = NO; 63 showedDeathBubble = NO;
40 randomItemsDropped = 0; 64 randomItemsDropped = 0;
65
66 [objectFactory createRecipeWithIdentifier:kCherryObject spriteFilename:@"cherry.png" weight:5];
67 [objectFactory createRecipeWithIdentifier:kEnergyDrinkObject spriteFilename:@"bottle.png" weight:6];
68 [objectFactory createRecipeWithIdentifier:kOneUpObject spriteFilename:@"oneup.png" weight:10];
69 [objectFactory createRecipeWithIdentifier:kRockObject spriteFilename:@"rock.png" weight:7];
41 } 70 }
42 71
43 return self; 72 return self;
@@ -79,6 +108,24 @@
79 108
80- (void)didCatchItem:(FallingObject *)item 109- (void)didCatchItem:(FallingObject *)item
81{ 110{
111 if (item.objectType == kCherryObject)
112 {
113 [[SimpleAudioEngine sharedEngine] playEffect:[[NSBundle mainBundle] pathForResource:@"Item1" ofType:@"wav"]];
114 self.score += 10;
115 } else if (item.objectType == kEnergyDrinkObject)
116 {
117 [[SimpleAudioEngine sharedEngine] playEffect:[[NSBundle mainBundle] pathForResource:@"Item1" ofType:@"wav"]];
118 self.score += 25;
119 } else if (item.objectType == kOneUpObject)
120 {
121 [[SimpleAudioEngine sharedEngine] playEffect:[[NSBundle mainBundle] pathForResource:@"1up" ofType:@"wav"]];
122 self.lives++;
123 } else if (item.objectType == kRockObject)
124 {
125 [[SimpleAudioEngine sharedEngine] playEffect:[[NSBundle mainBundle] pathForResource:@"Damage1" ofType:@"wav"]];
126 self.lives--;
127 }
128
82 if (item.sprite.tag == 2000) 129 if (item.sprite.tag == 2000)
83 { 130 {
84 TutorialBubble* bubble = [[TutorialBubble alloc] initWithText:@"Congratulations! If you look at your score, you'll see it increased. Catching items is good. Now, let's see what happens when you don't catch an item." name:@"caught-first"]; 131 TutorialBubble* bubble = [[TutorialBubble alloc] initWithText:@"Congratulations! If you look at your score, you'll see it increased. Catching items is good. Now, let's see what happens when you don't catch an item." name:@"caught-first"];
@@ -94,6 +141,12 @@
94 141
95- (void)didMissItem:(FallingObject *)item 142- (void)didMissItem:(FallingObject *)item
96{ 143{
144 if ((item.objectType == kCherryObject) || (item.objectType == kEnergyDrinkObject))
145 {
146 [[SimpleAudioEngine sharedEngine] playEffect:[[NSBundle mainBundle] pathForResource:@"Damage1" ofType:@"wav"]];
147 self.lives--;
148 }
149
97 if (item.sprite.tag == 2000) 150 if (item.sprite.tag == 2000)
98 { 151 {
99 TutorialBubble* bubble = [[TutorialBubble alloc] initWithText:@"Whoops, you missed it! Look at your lives counter--you lost one! If you lose all of your lives, you lose the game. Try catching the item again." name:@"missed-first"]; 152 TutorialBubble* bubble = [[TutorialBubble alloc] initWithText:@"Whoops, you missed it! Look at your lives counter--you lost one! If you lose all of your lives, you lose the game. Try catching the item again." name:@"missed-first"];
@@ -111,7 +164,6 @@
111 [self scheduleDelayedAction:^{ 164 [self scheduleDelayedAction:^{
112 FallingObject* object = [self dropRandomItem]; 165 FallingObject* object = [self dropRandomItem];
113 object.sprite.tag = 2002; 166 object.sprite.tag = 2002;
114 [object release];
115 } delay:1.0f]; 167 } delay:1.0f];
116 } 168 }
117} 169}
@@ -181,7 +233,6 @@
181 [self scheduleDelayedAction:^{ 233 [self scheduleDelayedAction:^{
182 FallingObject* object = [self dropRandomItem]; 234 FallingObject* object = [self dropRandomItem];
183 object.sprite.tag = 2000; 235 object.sprite.tag = 2000;
184 [object release];
185 } delay:3.0f]; 236 } delay:3.0f];
186 } else if ([currentTutorial.name isEqual:@"caught-first"]) 237 } else if ([currentTutorial.name isEqual:@"caught-first"])
187 { 238 {
@@ -198,29 +249,24 @@
198 } 249 }
199 250
200 object.sprite.tag = 2001; 251 object.sprite.tag = 2001;
201
202 [object release];
203 } delay:1.0f]; 252 } delay:1.0f];
204 } else if ([currentTutorial.name isEqual:@"missed-first"]) 253 } else if ([currentTutorial.name isEqual:@"missed-first"])
205 { 254 {
206 [self scheduleDelayedAction:^{ 255 [self scheduleDelayedAction:^{
207 FallingObject* object = [self dropRandomItem]; 256 FallingObject* object = [self dropRandomItem];
208 object.sprite.tag = 2002; 257 object.sprite.tag = 2002;
209 [object release];
210 } delay:1.0f]; 258 } delay:1.0f];
211 } else if (([currentTutorial.name isEqual:@"caught-second"]) || ([currentTutorial.name isEqual:@"missed-second"])) 259 } else if (([currentTutorial.name isEqual:@"caught-second"]) || ([currentTutorial.name isEqual:@"missed-second"]))
212 { 260 {
213 [self scheduleDelayedAction:^{ 261 [self scheduleDelayedAction:^{
214 FallingObject* object = [self dropSpecificItem:[[OneUp alloc] init]]; 262 FallingObject* object = [self dropSpecificItem:kOneUpObject];
215 object.sprite.tag = 2003; 263 object.sprite.tag = 2003;
216 [object release];
217 } delay:2.0f]; 264 } delay:2.0f];
218 } else if ([currentTutorial.name isEqual:@"gameover-rock"]) 265 } else if ([currentTutorial.name isEqual:@"gameover-rock"])
219 { 266 {
220 [self scheduleDelayedAction:^{ 267 [self scheduleDelayedAction:^{
221 FallingObject* object = [self dropRandomItem]; 268 FallingObject* object = [self dropRandomItem];
222 object.sprite.tag = 2010; 269 object.sprite.tag = 2010;
223 [object release];
224 } delay:1.0f]; 270 } delay:1.0f];
225 } else if ([currentTutorial.name isEqual:@"intense"]) 271 } else if ([currentTutorial.name isEqual:@"intense"])
226 { 272 {
@@ -254,8 +300,9 @@
254 } 300 }
255} 301}
256 302
257- (FallingObject*)dropSpecificItem:(FallingObject*)object 303- (FallingObject*)dropSpecificItem:(int)objectType
258{ 304{
305 FallingObject* object = [[objectFactory buildFallingObjectWithRecipeIdentifier:objectType] retain];
259 int objectX = arc4random()%448+16; 306 int objectX = arc4random()%448+16;
260 object.sprite.position = ccp(objectX, 360); 307 object.sprite.position = ccp(objectX, 360);
261 object.sprite.scale = 1; 308 object.sprite.scale = 1;
@@ -265,27 +312,27 @@
265 312
266 [objects addObject:object]; 313 [objects addObject:object];
267 314
268 return object; 315 return [object autorelease];
269} 316}
270 317
271- (FallingObject*)dropRandomItem 318- (FallingObject*)dropRandomItem
272{ 319{
273 FallingObject* object;
274 int randomval = arc4random()%100; 320 int randomval = arc4random()%100;
321 int recipeIdentifier;
275 322
276 if (randomval < 65) 323 if (randomval < 65)
277 { 324 {
278 object = [[Cherry alloc] init]; 325 recipeIdentifier = kCherryObject;
279 } else { 326 } else {
280 object = [[Bottle alloc] init]; 327 recipeIdentifier = kEnergyDrinkObject;
281 } 328 }
282 329
283 return [self dropSpecificItem:object]; 330 return [self dropSpecificItem:recipeIdentifier];
284} 331}
285 332
286- (void)randomlyAddObject:(ccTime)dt 333- (void)randomlyAddObject:(ccTime)dt
287{ 334{
288 FallingObject* object; 335 int recipeIdentifier;
289 336
290 if (randomItemsDropped < 5) 337 if (randomItemsDropped < 5)
291 { 338 {
@@ -293,17 +340,16 @@
293 340
294 if (randomval < 65) 341 if (randomval < 65)
295 { 342 {
296 object = [[Cherry alloc] init]; 343 recipeIdentifier = kCherryObject;
297 } else if (randomval < 98) 344 } else if (randomval < 98)
298 { 345 {
299 object = [[Bottle alloc] init]; 346 recipeIdentifier = kEnergyDrinkObject;
300 } else { 347 } else {
301 object = [[OneUp alloc] init]; 348 recipeIdentifier = kOneUpObject;
302 } 349 }
303 } else if (randomItemsDropped == 5) 350 } else if (randomItemsDropped == 5)
304 { 351 {
305 object = [[Rock alloc] init]; 352 recipeIdentifier = kRockObject;
306 object.sprite.tag = 2009;
307 353
308 [self unschedule:@selector(randomlyAddObject:)]; 354 [self unschedule:@selector(randomlyAddObject:)];
309 } else if (randomItemsDropped < 15) { 355 } else if (randomItemsDropped < 15) {
@@ -311,15 +357,15 @@
311 357
312 if (randomval < 40) 358 if (randomval < 40)
313 { 359 {
314 object = [[Cherry alloc] init]; 360 recipeIdentifier = kCherryObject;
315 } else if (randomval < 70) 361 } else if (randomval < 70)
316 { 362 {
317 object = [[Rock alloc] init]; 363 recipeIdentifier = kRockObject;
318 } else if (randomval < 98) 364 } else if (randomval < 98)
319 { 365 {
320 object = [[Bottle alloc] init]; 366 recipeIdentifier = kEnergyDrinkObject;
321 } else { 367 } else {
322 object = [[OneUp alloc] init]; 368 recipeIdentifier = kOneUpObject;
323 } 369 }
324 } else if (randomItemsDropped == 15) 370 } else if (randomItemsDropped == 15)
325 { 371 {
@@ -331,8 +377,8 @@
331 377
332 [self unschedule:@selector(randomlyAddObject:)]; 378 [self unschedule:@selector(randomlyAddObject:)];
333 379
334 NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults]; 380 [[ClassicGameMode info] unlock];
335 [defaults setBool:YES forKey:@"hasDoneTutorial"]; 381 [[JumpGameMode info] unlock];
336 382
337 return; 383 return;
338 } else { 384 } else {
@@ -341,8 +387,12 @@
341 return; 387 return;
342 } 388 }
343 389
344 [self dropSpecificItem:object]; 390 FallingObject* object = [self dropSpecificItem:recipeIdentifier];
345 [object release]; 391
392 if (randomItemsDropped == 5)
393 {
394 object.sprite.tag = 2009;
395 }
346 396
347 randomItemsDropped++; 397 randomItemsDropped++;
348} 398}