@@ -18,6 +18,14 @@ var pxspeed = 7;
18
18
var sx = 50 ;
19
19
var sy = 50 ;
20
20
21
+ //Player life points
22
+ var plifep = 3 ;
23
+ //True if player can't get damage
24
+ //False if player can get damage
25
+ var nodamage = false ;
26
+ //No damage counter
27
+ var ndcounter = 0 ;
28
+
21
29
var onair = false ;
22
30
23
31
//True if player rise
@@ -37,6 +45,7 @@ var spos = 0;
37
45
var grav = 7 ;
38
46
39
47
var direction = [ ] ;
48
+ direction [ 0 ] = true ;
40
49
41
50
//Bullets size
42
51
var bsize = 20 ;
@@ -116,6 +125,8 @@ enemies[0][2] = 650;
116
125
enemies [ 0 ] [ 3 ] = 810 ;
117
126
enemies [ 0 ] [ 4 ] = true ;
118
127
enemies [ 0 ] [ 5 ] = 0 ;
128
+ enemies [ 0 ] [ 6 ] = - 1 ;
129
+ enemies [ 0 ] [ 7 ] = 3 ;
119
130
120
131
enemies [ 1 ] [ 0 ] = 4690 ;
121
132
enemies [ 1 ] [ 1 ] = 280 ;
@@ -124,6 +135,7 @@ enemies[1][3] = 4810;
124
135
enemies [ 1 ] [ 4 ] = true ;
125
136
enemies [ 1 ] [ 5 ] = 1 ;
126
137
enemies [ 1 ] [ 6 ] = 0 ;
138
+ enemies [ 1 ] [ 7 ] = 2 ;
127
139
128
140
var enemyimg ;
129
141
var enemyimg2 ;
@@ -215,14 +227,18 @@ function keyTyped() {
215
227
}
216
228
217
229
function drawObjects ( ) {
218
- //Draw Player
219
- rect ( px , py , sx , sy ) ;
230
+ drawPlayer ( ) ;
220
231
drawPlatforms ( ) ;
221
232
drawEnemies ( ) ;
222
233
drawSpikes ( ) ;
223
234
drawBullets ( ) ;
224
235
}
225
236
237
+ function drawPlayer ( ) {
238
+ if ( ! nodamage ) rect ( px , py , sx , sy ) ;
239
+ else noDamage ( ) ;
240
+ }
241
+
226
242
function drawPlatforms ( ) {
227
243
fill ( '#0000FF' ) ;
228
244
i = Math . max ( rstart - 1 , 0 ) ;
@@ -258,22 +274,9 @@ function collision() {
258
274
259
275
var xmaxid = - 1 ;
260
276
261
-
262
277
minx = 0 ;
263
278
var xminid = - 1 ;
264
279
265
- var bmaxx = [ ] ;
266
- var bminx = [ ] ;
267
- var bmaxy = [ ] ;
268
- var bminy = [ ] ;
269
-
270
- for ( i = 0 ; i < bmax ; i ++ ) {
271
- bmaxx [ i ] = 999999 ;
272
- bminx [ i ] = 0 ;
273
- bmaxy [ i ] = 999999 ;
274
- bminy [ i ] = 0 ;
275
- }
276
-
277
280
i = max ( cstart - 1 , 0 ) ;
278
281
// console.log(i, maxp[stageid]);
279
282
do {
@@ -318,38 +321,6 @@ function collision() {
318
321
}
319
322
}
320
323
}
321
-
322
- for ( j = 0 ; j < bmax ; j ++ ) {
323
- if ( bullets [ j ] [ 5 ] ) {
324
-
325
- if ( bullets [ j ] [ 0 ] >= platforms [ stageid ] [ i ] [ 0 ] && bullets [ j ] [ 0 ] <= platforms [ stageid ] [ i ] [ 0 ] + platforms [ stageid ] [ i ] [ 2 ] ) {
326
- if ( platforms [ stageid ] [ i ] [ 1 ] >= bullets [ j ] [ 1 ] ) {
327
- if ( platforms [ stageid ] [ i ] [ 1 ] <= bmaxx [ j ] ) {
328
- bmaxx [ j ] = platforms [ stageid ] [ i ] [ 1 ] ;
329
- }
330
- }
331
- if ( platforms [ stageid ] [ i ] [ 1 ] + platforms [ stageid ] [ i ] [ 3 ] <= bullets [ j ] [ 1 ] ) {
332
- if ( platforms [ stageid ] [ i ] [ 1 ] + platforms [ stageid ] [ i ] [ 3 ] >= bminx [ j ] ) {
333
- bminx [ j ] = platforms [ stageid ] [ i ] [ 1 ] + platforms [ stageid ] [ i ] [ 3 ] ;
334
- }
335
- }
336
- }
337
-
338
- if ( bullets [ j ] [ 1 ] >= platforms [ stageid ] [ i ] [ 1 ] - bullets [ j ] [ 2 ] / 2 && bullets [ j ] [ 1 ] <= platforms [ stageid ] [ i ] [ 1 ] + platforms [ stageid ] [ i ] [ 3 ] ) {
339
- if ( platforms [ stageid ] [ i ] [ 0 ] >= bullets [ j ] [ 0 ] ) {
340
- if ( platforms [ stageid ] [ i ] [ 0 ] <= bmaxy [ j ] ) {
341
- bmaxy [ j ] = platforms [ stageid ] [ i ] [ 0 ] ;
342
- }
343
- }
344
- if ( platforms [ stageid ] [ i ] [ 0 ] + platforms [ stageid ] [ i ] [ 2 ] <= bullets [ j ] [ 0 ] ) {
345
- if ( platforms [ stageid ] [ i ] [ 0 ] >= bminy [ j ] ) {
346
- bminy [ j ] = platforms [ stageid ] [ i ] [ 0 ] + platforms [ stageid ] [ i ] [ 2 ] ;
347
- }
348
- }
349
- }
350
- if ( bmaxx [ j ] <= bullets [ j ] [ 1 ] + bullets [ j ] [ 2 ] / 2 || bminx [ j ] >= bullets [ j ] [ 1 ] - bullets [ j ] [ 2 ] / 2 || bmaxy [ j ] <= bullets [ j ] [ 0 ] + bullets [ j ] [ 2 ] / 2 || bminy [ j ] >= bullets [ j ] [ 0 ] - bullets [ j ] [ 2 ] / 2 ) bullets [ j ] [ 5 ] = false ;
351
- }
352
- }
353
324
i ++ ;
354
325
} while ( i <= maxp [ stageid ] && pposx + resx / 4 >= platforms [ stageid ] [ i ] [ 0 ] ) ;
355
326
@@ -358,12 +329,26 @@ function collision() {
358
329
gravity ( maxy ) ;
359
330
air ( maxy ) ;
360
331
if ( jumped ) jump ( ) ;
332
+ bulletsCollision ( ) ;
361
333
moveEnemies ( ) ;
362
- enemiesDamage ( ) ;
334
+ damage ( ) ;
363
335
spikesCollision ( ) ;
364
336
checkIfUnderScreen ( ) ;
365
337
}
366
338
339
+ function bulletsCollision ( ) {
340
+ for ( h = 0 ; h < maxp [ stageid ] ; h ++ ) {
341
+ for ( j = 0 ; j < bmax ; j ++ ) {
342
+ if ( bullets [ j ] [ 5 ] ) {
343
+ if ( bullets [ j ] [ 1 ] <= platforms [ stageid ] [ h ] [ 1 ] + platforms [ stageid ] [ h ] [ 3 ] + bullets [ j ] [ 2 ] * 0.75 && bullets [ j ] [ 1 ] >= platforms [ stageid ] [ h ] [ 1 ] - bullets [ j ] [ 2 ] * 0.75 ) {
344
+ if ( bullets [ j ] [ 0 ] >= platforms [ stageid ] [ h ] [ 0 ] - bullets [ j ] [ 2 ] * 0.75 && bullets [ j ] [ 0 ] <= platforms [ stageid ] [ h ] [ 0 ] + platforms [ stageid ] [ h ] [ 2 ] + bullets [ j ] [ 2 ] * 0.75 ) {
345
+ bullets [ j ] [ 5 ] = false ;
346
+ }
347
+ }
348
+ }
349
+ }
350
+ }
351
+ }
367
352
368
353
function debugcollision ( maxid , minid , xmaxid , xminid ) {
369
354
fill ( 'red' ) ;
@@ -503,12 +488,12 @@ function newBullet(enumber) {
503
488
}
504
489
bullets [ i ] [ 6 ] = false ;
505
490
} else {
506
- var x = enemies [ enumber ] [ 0 ] + ( esize / 2 ) - px - spos ;
507
- var y = enemies [ enumber ] [ 1 ] - py ;
508
- var z = Math . pow ( x , 2 ) + Math . pow ( y , 2 ) ;
509
- var a = z / bspeed ;
510
- bullets [ i ] [ 7 ] = Math . sqrt ( Math . pow ( x , 2 ) / a ) * 3 ;
511
- bullets [ i ] [ 8 ] = Math . sqrt ( Math . pow ( y , 2 ) / a ) * 3 ;
491
+ var a = enemies [ enumber ] [ 0 ] + ( esize / 2 ) - px - spos ;
492
+ var b = enemies [ enumber ] [ 1 ] - py ;
493
+ var c = Math . pow ( a , 2 ) + Math . pow ( b , 2 ) ;
494
+ var d = c / bspeed ;
495
+ bullets [ i ] [ 7 ] = Math . sqrt ( Math . pow ( a , 2 ) / d ) * 3 ;
496
+ bullets [ i ] [ 8 ] = Math . sqrt ( Math . pow ( b , 2 ) / d ) * 3 ;
512
497
513
498
if ( enemies [ enumber ] [ 0 ] + ( esize / 2 ) - px - spos > 0 && enemies [ enumber ] [ 1 ] - py > 0 ) bullets [ i ] [ 3 ] = 6 ;
514
499
else if ( enemies [ enumber ] [ 0 ] + ( esize / 2 ) - px - spos > 0 && enemies [ enumber ] [ 1 ] - py <= 0 ) bullets [ i ] [ 3 ] = 7 ;
@@ -552,30 +537,40 @@ function restartGame() {
552
537
rstart = 0 ;
553
538
cstart = 0 ;
554
539
paused = true ;
555
-
540
+ plifep = 3 ;
541
+ nodamage = false ;
542
+ ndcounter = 0 ;
543
+ for ( j = 0 ; j < enumber ; j ++ ) {
544
+ if ( enemies [ j ] [ 5 ] === 0 ) enemies [ j ] [ 7 ] = 3 ;
545
+ else enemies [ j ] [ 7 ] = 2 ;
546
+ }
547
+ for ( j = 0 ; j < bmax ; j ++ ) bullets [ j ] [ 5 ] = 0 ;
556
548
}
557
549
558
550
559
551
function moveEnemies ( ) {
560
552
for ( i = 0 ; i < enumber ; i ++ ) {
553
+ if ( enemies [ i ] [ 7 ] > 0 ) {
561
554
//Check enemy direction
562
- if ( enemies [ i ] [ 4 ] ) {
555
+ if ( enemies [ i ] [ 4 ] ) {
563
556
//Right--->
564
- if ( enemies [ i ] [ 3 ] - enemies [ i ] [ 0 ] - esize <= espeed ) {
565
- enemies [ i ] [ 0 ] = enemies [ i ] [ 3 ] - esize ;
566
- enemies [ i ] [ 4 ] = false ;
567
- } else {
568
- enemies [ i ] [ 0 ] += espeed ;
557
+ if ( enemies [ i ] [ 3 ] - enemies [ i ] [ 0 ] - esize <= espeed ) {
558
+ enemies [ i ] [ 0 ] = enemies [ i ] [ 3 ] - esize ;
559
+ enemies [ i ] [ 4 ] = false ;
560
+ } else {
561
+ enemies [ i ] [ 0 ] += espeed ;
562
+ }
563
+
569
564
}
565
+ else {
566
+ //Left <---
567
+ if ( enemies [ i ] [ 0 ] - enemies [ i ] [ 2 ] <= espeed ) {
568
+ enemies [ i ] [ 0 ] = enemies [ i ] [ 2 ] ;
569
+ enemies [ i ] [ 4 ] = true ;
570
+ } else {
571
+ enemies [ i ] [ 0 ] -= espeed ;
572
+ }
570
573
571
- }
572
- else {
573
- //Left <---
574
- if ( enemies [ i ] [ 0 ] - enemies [ i ] [ 2 ] <= espeed ) {
575
- enemies [ i ] [ 0 ] = enemies [ i ] [ 2 ] ;
576
- enemies [ i ] [ 4 ] = true ;
577
- } else {
578
- enemies [ i ] [ 0 ] -= espeed ;
579
574
}
580
575
581
576
}
@@ -587,24 +582,78 @@ function moveEnemies() {
587
582
function drawEnemies ( ) {
588
583
fill ( 'gold' ) ;
589
584
for ( i = 0 ; i < enumber ; i ++ ) {
590
- if ( enemies [ i ] [ 5 ] === 0 ) image ( enemyimg , enemies [ i ] [ 0 ] - spos , enemies [ i ] [ 1 ] ) ;
591
- else image ( enemyimg2 , enemies [ i ] [ 0 ] - spos , enemies [ i ] [ 1 ] ) ;
585
+ if ( enemies [ i ] [ 7 ] > 0 ) {
586
+ if ( enemies [ i ] [ 5 ] === 0 ) image ( enemyimg , enemies [ i ] [ 0 ] - spos , enemies [ i ] [ 1 ] ) ;
587
+ else image ( enemyimg2 , enemies [ i ] [ 0 ] - spos , enemies [ i ] [ 1 ] ) ;
588
+ }
592
589
}
593
590
fill ( '#FFFFFF' ) ;
594
591
}
595
592
596
- function enemiesDamage ( ) {
597
- for ( i = 0 ; i < enumber ; i ++ ) {
598
- if ( enemies [ i ] [ 5 ] === 1 ) {
599
- if ( px + spos >= enemies [ i ] [ 0 ] - 500 && px + spos <= enemies [ i ] [ 0 ] + 500 && enemies [ i ] [ 6 ] === 0 ) {
600
- enemies [ i ] [ 6 ] ++ ;
601
- newBullet ( i ) ;
602
- } else if ( enemies [ i ] [ 6 ] > 0 && enemies [ i ] [ 6 ] < 60 * ttshot + 1 ) enemies [ i ] [ 6 ] ++ ;
603
- else if ( enemies [ i ] [ 6 ] === 60 * ttshot + 1 ) enemies [ i ] [ 6 ] = 0 ;
593
+ function damage ( ) {
594
+ for ( l = 0 ; l < enumber ; l ++ ) {
595
+ if ( enemies [ l ] [ 5 ] === 1 && enemies [ l ] [ 7 ] > 0 ) {
596
+ if ( px + spos >= enemies [ l ] [ 0 ] - 500 && px + spos <= enemies [ l ] [ 0 ] + 500 && enemies [ l ] [ 6 ] === 0 ) {
597
+ enemies [ l ] [ 6 ] ++ ;
598
+ newBullet ( l ) ;
599
+ } else if ( enemies [ l ] [ 6 ] > 0 && enemies [ l ] [ 6 ] < 60 * ttshot + 1 ) enemies [ l ] [ 6 ] ++ ;
600
+ else if ( enemies [ l ] [ 6 ] === 60 * ttshot + 1 ) enemies [ l ] [ 6 ] = 0 ;
601
+ }
602
+ if ( enemies [ l ] [ 7 ] > 0 ) {
603
+ if ( py <= enemies [ l ] [ 1 ] + esize - sy && py >= enemies [ l ] [ 1 ] - sy ) {
604
+ if ( px >= enemies [ l ] [ 0 ] - spos - sx && px <= enemies [ l ] [ 0 ] + esize - spos ) {
605
+ lifePoints ( - 1 , - 1 ) ;
606
+ }
607
+ }
608
+ }
609
+ for ( j = 0 ; j < bmax ; j ++ ) {
610
+ if ( enemies [ l ] [ 7 ] > 0 ) {
611
+ if ( bullets [ j ] [ 5 ] ) {
612
+ if ( ! bullets [ j ] [ 6 ] ) {
613
+ if ( bullets [ j ] [ 1 ] <= enemies [ l ] [ 1 ] + esize + bullets [ j ] [ 2 ] / 2 && bullets [ j ] [ 1 ] >= enemies [ l ] [ 1 ] - bullets [ j ] [ 2 ] / 2 ) {
614
+ if ( bullets [ j ] [ 0 ] >= enemies [ l ] [ 0 ] - bullets [ j ] [ 2 ] / 2 && bullets [ j ] [ 0 ] <= enemies [ l ] [ 0 ] + esize + bullets [ j ] [ 2 ] / 2 ) {
615
+ bullets [ j ] [ 5 ] = false ;
616
+ lifePoints ( l , - 1 ) ;
617
+ }
618
+ }
619
+ }
620
+ }
621
+ }
622
+ }
623
+ }
624
+ for ( j = 0 ; j < bmax ; j ++ ) {
625
+ if ( bullets [ j ] [ 6 ] ) {
626
+ if ( bullets [ j ] [ 5 ] ) {
627
+ if ( bullets [ j ] [ 1 ] <= py + sy + bullets [ j ] [ 2 ] / 2 && bullets [ j ] [ 1 ] >= py - bullets [ j ] [ 2 ] / 2 ) {
628
+ if ( bullets [ j ] [ 0 ] >= px + spos - bullets [ j ] [ 2 ] / 2 && bullets [ j ] [ 0 ] <= px + spos + sx + bullets [ j ] [ 2 ] / 2 ) {
629
+ bullets [ j ] [ 5 ] = false ;
630
+ lifePoints ( - 1 , - 1 ) ;
631
+ }
632
+ }
633
+ }
604
634
}
605
635
}
606
636
}
607
637
638
+ function lifePoints ( id , number ) {
639
+ if ( id === - 1 && ! nodamage ) {
640
+ plifep += number ;
641
+ nodamage = true ;
642
+ } else if ( id >= 0 ) {
643
+ enemies [ id ] [ 7 ] += number ;
644
+ }
645
+ if ( plifep === 0 ) lose ( ) ;
646
+ }
647
+
648
+ function noDamage ( ) {
649
+ ndcounter ++ ;
650
+ if ( ndcounter % 10 === 0 ) rect ( px , py , sx , sy ) ;
651
+ if ( ndcounter === 60 * 1.5 ) {
652
+ nodamage = false ;
653
+ ndcounter = 0 ;
654
+ }
655
+ }
656
+
608
657
function drawSpikes ( ) {
609
658
for ( i = 0 ; i < maxs [ stageid ] ; i ++ ) {
610
659
//DOWN
@@ -626,10 +675,10 @@ function spikesCollision() {
626
675
for ( i = 0 ; i < maxs [ stageid ] ; i ++ ) {
627
676
//Spikes UP AND DOWN
628
677
if ( pposx >= spikes [ stageid ] [ i ] [ 0 ] - swidth - sx && pposx <= spikes [ stageid ] [ i ] [ 0 ] + swidth )
629
- if ( ( spikes [ stageid ] [ i ] [ 2 ] === 0 && py >= spikes [ stageid ] [ i ] [ 1 ] && py <= spikes [ stageid ] [ i ] [ 1 ] + sheight ) || ( spikes [ stageid ] [ i ] [ 2 ] === 1 && py >= spikes [ stageid ] [ i ] [ 1 ] - sheight && py <= spikes [ stageid ] [ i ] [ 1 ] ) ) lose ( ) ;
678
+ if ( ( spikes [ stageid ] [ i ] [ 2 ] === 0 && py >= spikes [ stageid ] [ i ] [ 1 ] && py <= spikes [ stageid ] [ i ] [ 1 ] + sheight ) || ( spikes [ stageid ] [ i ] [ 2 ] === 1 && py >= spikes [ stageid ] [ i ] [ 1 ] - sheight && py <= spikes [ stageid ] [ i ] [ 1 ] ) ) lifePoints ( - 1 , - 1 ) ;
630
679
631
680
//Spikes LEFT AND RIGHT
632
681
if ( py >= spikes [ stageid ] [ i ] [ 1 ] - swidth && py <= spikes [ stageid ] [ i ] [ 1 ] + swidth )
633
- if ( ( spikes [ stageid ] [ i ] [ 2 ] === 2 && pposx >= spikes [ stageid ] [ i ] [ 0 ] - sheight - sx / 3 && pposx <= spikes [ stageid ] [ i ] [ 0 ] + sx ) || ( spikes [ stageid ] [ i ] [ 2 ] === 3 && pposx >= spikes [ stageid ] [ i ] [ 0 ] && pposx <= spikes [ stageid ] [ i ] [ 0 ] + sheight ) ) lose ( ) ;
682
+ if ( ( spikes [ stageid ] [ i ] [ 2 ] === 2 && pposx >= spikes [ stageid ] [ i ] [ 0 ] - sheight - sx / 3 && pposx <= spikes [ stageid ] [ i ] [ 0 ] + sx ) || ( spikes [ stageid ] [ i ] [ 2 ] === 3 && pposx >= spikes [ stageid ] [ i ] [ 0 ] && pposx <= spikes [ stageid ] [ i ] [ 0 ] + sheight ) ) lifePoints ( - 1 , - 1 ) ;
634
683
}
635
684
}
0 commit comments