-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathindex.html
1541 lines (1490 loc) · 69.7 KB
/
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<!doctype html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<link rel="stylesheet" href="index.css" type="text/css" />
</head>
<body>
<div id="res" class="hidden">
<img id="title01s" src="res/title01s.png" />
<img id="player0L" src="res/player0.png" />
<canvas id="player0R" from="player0L 0 48 256 48"
transform="mirror:x"></canvas>
<canvas id="bullet0" from="player0L 128 0 16 16"
transform="rotate:{{range(180, 0, 10)}}"></canvas>
<canvas id="bullet1" from="player0L 144 0 16 16"
transform="rotate:{{range(90, 0, 15)}}"></canvas>
<canvas id="onmyou" from="player0L 128 16 16 16"
transform="rotate:{{range(360, 0, 20)}}"></canvas>
<img id="etama2" src="res/etama2.png" />
<img id="etama3" src="res/etama3.png" />
<canvas id="lasers" from="etama3 0 16 256 16"
transform="mirror:{{array(50)}}" stack="y"></canvas>
<img id="etama4" src="res/etama4.png" />
<img id="eff00" src="res/eff00.png" />
<canvas id="effboss" from="eff00 16 48 16 16"
transform="rotate:{{range(180, 0, 10)}}"></canvas>
<canvas id="effbullet" from="player0L 128 32 16 16"
transform="rotate:{{range(360, 0, 60)}}"></canvas>
<canvas id="pslow" from="etama2 0 112 64 64"
transform="rotate:{{range(90, 0, 6)}}"></canvas>
<img id="stg1enm" src="res/stg1enm.png" />
<img id="stg1enm2" src="res/stg1enm2.png" />
<canvas id="stg1enm2R" from="stg1enm2 0 48 96 48" transform="mirror:x"></canvas>
<img id="stg1bg" src="res/stg1bg.png" />
<img id="stg2enm" src="res/stg2enm.png" />
<canvas id="enm2a" from="stg2enm 128 96 32 32"
transform="rotate:{{range(360, 0, 60)}}"></canvas>
<img id="stg2enm2" src="res/stg2enm2.png" />
<canvas id="stg2enm2R" from="stg2enm2 32 0 48 64" transform="mirror:x"></canvas>
<img id="stg2bg" src="res/stg2bg.png" />
<img id="stg3enm" src="res/stg3enm.png" />
<img id="front" src="res/front.png" />
<canvas id="dotmeiling" from="stg3enm 144 208 48 48" transform="scale:1 0.5"></canvas>
<canvas id="effmeiling" from="dotmeiling" transform="rotate:{{range(180, 0, 30)}}"></canvas>
<canvas id="bombs" from="player0L 0 97 63 64"
transform="colormask:White,DeepPink,DodgerBlue,SpringGreen,Black"></canvas>
<!-- use these patterns as background -->
<canvas id="mainbg_patt" from="front 0 224 32 32" bg-css=".play"></canvas>
<canvas id="scbg1" from="front 80 224 16 16" bg-css=".scbg1"></canvas>
<canvas id="scbg2" from="front 96 224 16 16" bg-css=".scbg2"></canvas>
<canvas id="logo_patt" from="front 128 128 128 128" bg-css=".logo"></canvas>
<!-- stg1 bg -->
<canvas id="tree_pattL" from="stg1bg 0 48 64 128"
transform="mirror:0,y" stack="y"></canvas>
<canvas id="tree_pattR" from="tree_pattL"
transform="mirror:x"></canvas>
<script id="gen_treebg">
(function(RES) {
var cv = $e('stg1cv2'),
dc = getCanvasDC(cv);
cv.width = parseInt($style(cv, 'width'));
cv.height = parseInt($style(cv, 'height'));
ieach([RES.tree_pattL, RES.tree_pattR], function mkRepeatTexture(i, patt) {
var sw = patt.width,
h = patt.height / 2,
f = random(1),
x = i == 0 ? 10 : cv.width - patt.width - 10,
y = 0;
while (y < cv.height) {
var g = random(1);
sy = (g > f ? f : 2 - f) * h,
sh = Math.abs(g - f) * h;
dc.drawImage(patt, 0, sy, sw, sh, x, y, sw, sh);
f = g;
y += sh;
}
});
var rh = parseInt($style('.game', 'height'));
dc.repeatSelf(0, cv.height - rh, cv.width, rh, 0, 0);
})
</script>
<canvas id="ground_patt" from="stg1bg 0 0 64 32"></canvas>
<canvas id="ground_pattX" class="ground_patt" from="stg1bg 64 0 16 16"></canvas>
<canvas id="ground_patt0" class="ground_patt" from="stg1bg 64 0 16 16"></canvas>
<canvas id="ground_patt1" class="ground_patt" from="stg1bg 80 0 16 16"></canvas>
<canvas id="ground_patt2" class="ground_patt" from="stg1bg 96 0 32 16"></canvas>
<canvas id="ground_patt3" class="ground_patt" from="stg1bg 64 16 16 16"></canvas>
<canvas id="ground_patt4" class="ground_patt" from="stg1bg 80 16 28 16"></canvas>
<canvas id="ground_patt5" class="ground_patt" from="stg1bg 108 16 20 16"></canvas>
<canvas id="ground_tileB" from="stg1bg 128 0 64 18"></canvas>
<canvas id="ground_tileT" from="ground_tileB" transform="rotate:180"></canvas>
<canvas id="ground_brush0" from="stg1bg 208 48 48 16" transform="0,0"></canvas>
<canvas id="ground_brush1" from="ground_brush0" transform="offset:0 0,16 0" stack="y"></canvas>
<canvas id="ground_brush2" from="ground_brush1 0 0 48 32"></canvas>
<script id="gen_groundbg">
(function(RES) {
var cv = $e('stg1cv1'),
dc = getCanvasDC(cv),
patt = RES.ground_patt;
cv.width = parseInt($style(cv, 'width'));
cv.height = parseInt($style(cv, 'height'));
dc.fillWith(dc.createPattern(patt, 'repeat'));
for (var y = 0; y < cv.height; y += patt.height) {
var cx = random(0.3, 0.7) * cv.width,
cy = random(patt.height) + y;
sc = randin($('canvas.ground_patt'));
dc.drawImage(sc, cx, cy);
}
var sc = RES.ground_tileT,
brA = 'rgb(57, 49, 94)',
brB = dc.createPattern(RES.ground_brush2, 'repeat'),
py = 800, ph = 200;
for (var x = 0, y = py; x < cv.width; x += sc.width, y -= sc.height) {
dc.clearRect(x, y, sc.width, ph);
dc.fillStyle = brA;
dc.fillRect(x, y, sc.width, ph);
dc.fillStyle = brB;
dc.fillRect(x, y, sc.width, ph);
dc.drawImage(RES.ground_tileT, x, y);
dc.drawImage(RES.ground_tileB, x, y + ph - sc.height);
}
var bg = $e('stg1cv2'),
hw = bg.width / 2,
dw = bg.width * 0.1;
dc.globalAlpha = 0.4;
dc.drawImage(bg, 0, 0, hw, bg.height, dw, cv.height - bg.height, hw, bg.height);
dc.drawImage(bg, hw, 0, hw, bg.height, hw-dw, cv.height - bg.height, hw, bg.height);
dc.globalAlpha = 1;
var rh = parseInt($style('.game', 'height'));
dc.repeatSelf(0, cv.height - rh, cv.width, rh, 0, 0);
})
</script>
<!-- stg3 bg -->
<img id="stg3bg" src="res/stg3bg.png" />
<canvas id="stg3_gnd1" scale="2" from="stg3bg 48 0 34 34"></canvas>
<canvas id="stg3_gnd2" scale="2" from="stg3bg 96 0 34 34"></canvas>
<canvas id="stg3_gnd3" scale="2" from="stg3bg 144 0 34 34"></canvas>
<canvas id="stg3_gnd4" scale="2" from="stg3bg 0 0 34 34"></canvas>
<canvas id="stg3_gnd2_pad" from="stg3bg 128 48 48 16"></canvas>
<canvas id="stg3_gnd3_pad" from="stg3bg 64 48 48 16"></canvas>
<canvas id="stg3_gnd_ring" from="stg3bg 0 48 32 32"></canvas>
<canvas id="stg3_gnd_dot" from="stg3bg 32 48 32 32"></canvas>
<script id="gen_stg3bg">
(function(RES) {
var cv = $e('stg3cv'),
dc = getCanvasDC(cv);
cv.width = parseInt($style(cv, 'width'));
cv.height = parseInt($style(cv, 'height'));
var y = cv.height;
ieach([
[600, RES.stg3_gnd1],
[400, RES.stg3_gnd2, RES.stg3_gnd2_pad],
[400, RES.stg3_gnd3, RES.stg3_gnd3_pad],
], function (i, v) {
var h = v[0],
r = v[1],
p = v[2];
dc.fillStyle = dc.createPattern(r, 'repeat');
dc.fillRect(0, y -= h, cv.width, h);
if (p) {
dc.fillStyle = dc.createPattern(p, 'repeat');
range(cv.width + p.width, 0, p.width, function(x) {
dc.drawImage(p, x, y+h-p.height/2);
})
}
})
dc.fillStyle = dc.createPattern(RES.stg3_gnd4, 'repeat');
dc.fillRect(0, 0, cv.width, y);
cv.towers = [];
range(y, 0, 128, function(y) {
var c = cv.width/2,
f = RES.stg3_gnd_ring,
w = f.width/2,
h = f.height/2;
dc.drawImage(f, c-w-96, y-h);
dc.drawImage(f, c-w+96, y-h);
array(6, function(i) {
cv.towers.push({ px:c-96, py:y, pz:10+i*20, r:24-i*3 });
cv.towers.push({ px:c+96, py:y, pz:10+i*20, r:24-i*3 });
})
})
})
</script>
<!-- stg4 bg -->
<img id="stg4bg" src="res/stg4bg.png" />
<canvas id="stg4_block_front0" from="stg4bg 16 64 240 160" transform=";"></canvas>
<canvas id="stg4_block_front1" from="stg4_block_front0 190 0 240 160" bg-css=".block .face-b"></canvas>
<canvas id="stg4_block_side" from="stg4bg 16 16 64 32" bg-css=".block .face-f, .block .face-l, .block .face-r"></canvas>
<script id="gen_stg4bg">
(function(RES) {
function newBlock(x, y, cx, cy, cz) {
var e = $new('div', {
className: 'block',
});
keach({
position: 'relative',
left: x+'px',
top: y+'px',
'transform-style': 'preserve-3d',
}, function(k, v) {
$style(e, k, v);
})
e.appendChild(newFace('f', cx, cy, cz));
e.appendChild(newFace('b', cx, cy, cz));
e.appendChild(newFace('l', cx, cy, cz));
e.appendChild(newFace('r', cx, cy, cz));
return e;
}
function newFace(d, cx, cy, cz) {
var i = 'fstblr'.indexOf(d),
w = [cx, cx, cx, cx, cz, cz][i],
h = [cy, cy, cz, cz, cy, cy][i],
t = [cz, cz, cy, cy, cx, cx][i];
var e = $new('div', {
className: 'face-'+d,
});
keach({
position: 'absolute',
width: w+'px',
height: h+'px',
left: (-w/2)+'px',
top: (-h/2)+'px',
transform: {
f: '',
s: 'rotateX(180deg) ',
t: 'rotateX( 90deg) ',
b: 'rotateX(-90deg) ',
l: 'rotateY( 90deg) ',
r: 'rotateY(-90deg) ',
}[d] + 'translateZ('+(t/2)+'px)',
}, function(k, v) {
$style(e, k, v);
})
return e;
}
var bg = $i('#stg4gnd');
$style(bg.parentNode, 'perspective', '1000px');
$style(bg, 'transform-style', 'preserve-3d');
$style(bg, 'transform-origin', 'center top');
var th = parseInt($style(bg, 'height')),
rh = parseInt($attr(bg, 'bg-repeat')),
ps = [];
range(th - rh, 0, 300, function(y) {
var x = random(400);
bg.appendChild(newBlock(x, y, 242, 50, 160));
if (y < rh) ps.push({ x:x, y:th-rh+y });
})
ieach(ps, function(i, v) {
bg.appendChild(newBlock(v.x, v.y, 242, 50, 160));
})
})
</script>
<img id="stg4enm" src="res/stg4enm.png" />
<canvas id="stg4enmR" from="stg4enm 96 202 144 54" transform="mirror:x"></canvas>
<script id="stg4frs">
(function(RES) {
return {
Circle: newFrame('stg4enm', 0, 96, 64, 64),
EnemySq: newFrame('stg4enm', 160, 96, 32, 32),
EnemySr: newFrame('stg4enm', 192, 96, 32, 32),
}
})
</script>
<!-- stg5 -->
<img id="stg5enm2" src="res/stg5enm2.png" />
<canvas id="stg5enmR" from="stg5enm2 128 0 108 64" transform="mirror:x"></canvas>
<img id="stg5bg" src="res/stg5bg.png" />
<canvas id="stg5gnd_patt" from="stg5bg 16 16 64 32"></canvas>
<canvas id="stg5gnd_wnd" from="stg5bg 92 0 72 64" scale="1.5"></canvas>
<canvas id="stg5gnd_wall" from="stg5bg 162 0 64 64" transform="rotate:90" scale="1.5"></canvas>
<script id="gen_stg5bg">
(function(RES) {
var bg = $i('#stg5gnd');
$style(bg.parentNode, 'perspective', '500px');
$style(bg, 'transform-style', 'preserve-3d');
$style(bg, 'transform-origin', 'center top');
var w = parseInt($style(bg, 'width')),
h = parseInt($style(bg, 'height'));
ieach($('canvas.bg-stg5'), function(i, e) {
var p = RES.stg5gnd_wall,
dc = e.getContext('2d');
$style(e, 'width', (e.width = w)+'px');
$style(e, 'height', (e.height = h)+'px');
if (i == 0) {
var dc = getCanvasDC(e);
dc.fillWith(dc.createPattern(RES.stg5gnd_patt, 'repeat'))
var j = 0,
blend = dc.globalCompositeOperation;
dc.globalAlpha = 0.8;
dc.globalCompositeOperation = 'lighter';
range(e.height, 0, RES.stg5gnd_wnd.height, function(y) {
if (j ++ % 3) dc.drawImage(RES.stg5gnd_wnd, 210, y);
})
dc.globalAlpha = 1;
dc.globalCompositeOperation = blend;
var rh = parseInt($style('.game', 'height'));
dc.repeatSelf(0, e.height - rh, e.width, rh, 0, 0);
}
$style(e, 'transform', 'translateZ('+(i*25)+'px)');
ieach([0, w-p.width], function(i, x) {
range(h+p.height, 0, p.height, function(y) {
dc.drawImage(p, x, y);
})
})
})
})
</script>
<!-- stg6 -->
<img id="stg6enm2" src="res/stg6enm2.png" />
<canvas id="stg6enmR" from="stg6enm2 64 0 128 80" transform="mirror:x"></canvas>
<img id="stg6bg" src="res/stg6bg.png" />
<canvas id="stg6bg_wall" from="stg6bg 0 0 256 128" transform="mirror:0,x" stack="y" scale="1.5"></canvas>
<canvas id="stg6bg_wall2" from="stg6bg 0 0 128 128" scale="2"></canvas>
<canvas id="stg6bg_moon" from="stg6bg 0 128 128 128" scale="2"></canvas>
<script id="gen_stg6bg">
(function(RES) {
function newWall(w, h, s) {
var e = $new('canvas', {
style: 'position:absolute;width:'+w+'px;height:'+h+'px;',
width: w+'px',
height: h+'px',
});
keach(s, function(k, v) {
$style(e, k, v)
})
var dc = getCanvasDC(e);
dc.fillWith(dc.createPattern(RES.stg6bg_wall, 'repeat'));
return e;
}
function cloneCanvas(cv) {
var e = $new('canvas', {
style: 'width:'+$style(cv, 'width')+';height:'+$style(cv, 'height')+';',
width: cv.width,
height: cv.height,
})
var dc = getCanvasDC(e);
dc.drawImage(cv, 0, 0);
return e;
}
var bg = $i('#stg6gnd');
$style(bg.parentNode, 'perspective', '500px');
$style(bg, 'transform-style', 'preserve-3d');
$style(bg, 'transform-origin', 'center top');
var w = parseInt($style(bg, 'width')),
h = parseInt($style(bg, 'height'));
var top = $new('div', {
style: 'width:'+w+'px;margin:64px',
});
top.appendChild(cloneCanvas(RES.stg6bg_moon ));
top.appendChild(cloneCanvas(RES.stg6bg_wall2));
top.appendChild(cloneCanvas(RES.stg6bg_wall2));
top.appendChild(cloneCanvas(RES.stg6bg_wall2));
bg.appendChild(top)
bg.appendChild(newWall(w, h, {}));
bg.appendChild(newWall(w, h, {
'transform': 'translateX(-'+w+'px) rotateY(-30deg)',
'transform-origin': '100% center',
}));
bg.appendChild(newWall(w, h, {
'transform': 'translateX('+w+'px) rotateY(30deg)',
'transform-origin': '0 center',
}));
})
</script>
<!-- font images -->
<img id="ascii" src="res/ascii.png" />
<canvas id="ascii_yellow" from="ascii"
transform="colormap:l->rgb(255,255,64)"></canvas>
<canvas id="ascii_cyan" from="ascii"
transform="colormap:l->rgb(192,240,240)" bg-css=".char-cyan .char"></canvas>
<canvas id="powerup" from="ascii 80 0 50 8"
transform="colormap:l->rgb(96,136,188)"></canvas>
<!-- number fonts -->
<canvas id="num" from="ascii 0 48 256 16"></canvas>
<canvas id="num0" from="num"
transform="colormap:l->rgb(123,192,249)"></canvas>
<canvas id="num1" from="num"
transform="colormap:l->rgb(155,120,240)"></canvas>
<canvas id="num2" from="num"
transform="colormap:l->rgb(224,128,192)"></canvas>
<canvas id="num3" from="num"
transform="colormap:l->rgb(255,64,64)"></canvas>
<!-- creating background css with toDataUrl -->
<script id="gen_bgcss">
(function(RES) {
/*
* canvas.toDataURL() will not work in chrome when the html file is opened in a local disk
* see http://stackoverflow.com/questions/10187306/canvas-todataurl-throws-security-exception-despite-image-being-local
*/
ieach($('canvas[bg-css]'), function(i, cv, ss) {
var s = $attr(cv, 'bg-css'),
r = 'background-image: url(' + cv.toDataURL() + ')';
$addCssRule(s, r);
});
})
</script>
<!-- fill some canvas -->
<script id="gen_fill">
(function(RES) {
ieach($('canvas[fill-with]'), function(i, cv) {
var dc = getCanvasDC(cv),
patt = RES[$attr(cv, 'fill-with')];
if (patt) {
cv.width = parseInt($style(cv, 'width'));
cv.height = parseInt($style(cv, 'height'));
dc.fillWith(dc.createPattern(patt, 'repeat'));
}
})
})
</script>
<!-- predefined frames -->
<script id="frames">
(function(RES) {
var _t = {};
_t.Player0 = array(4, function(i) {
return extend({ res:'player0L', sy: 0, sw:32, sh:48, w:32, h:48 }, { sx:32*i });
});
lastOfArray(_t.Player0).next = 0;
_t.PlayerL = array(7, function(i) {
return extend({ res:'player0L', sy:48, sw:32, sh:48, w:32, h:48 }, { sx:32*i });
});
lastOfArray(_t.PlayerL).next = 4;
_t.PlayerR = array(7, function(i) {
return extend({ res:'player0R', sy:0, sw:32, sh:48, w:32, h:48 }, { sx:255-32*(i+1) });
});
lastOfArray(_t.PlayerR).next = 4;
ieach([_t.PlayerL, _t.PlayerR], function(i, ls, ls0) {
ls.reset_index = ls0.length;
ieach(range(3).reverse(), function(x, i) {
ls0.push(extend({}, ls[i]));
});
lastOfArray(ls0).next = 0;
}, _t.Player0);
_t.Bullet0 = array(RES.bullet0.width/16, function(i) {
return extend({ res:'bullet0', sy:0, sw:16, sh:16, w:16, h:16 }, { sx:16*i });
});
_t.Bullet1 = array(RES.bullet1.width/16, function(i) {
return extend({ res:'bullet1', sy:0, sw:16, sh:16, w:16, h:16 }, { sx:16*i });
});
_t.BulletD = [
{ res:'player0L', sx:160, sy: 0, sw:16, sh:16, w:16, h:16 },
{ res:'player0L', sx:176, sy: 0, sw:16, sh:16, w:16, h:16 },
];
_t.Onmyou = array(RES.onmyou.width/16, function(i) {
return extend({ res:'onmyou', sy:0, sw:16, sh:16, w:16, h:16 }, { sx:16*i });
});
_t.OnmyouR = array(RES.onmyou.width/16, function(i) {
return extend({ res:'onmyou', sy:0, sw:16, sh:16, w:16, h:16 }, { sx:RES.onmyou.width-16-16*i });
});
_t.PSlow = array(RES.pslow.width/64, function(i) {
return extend({ res:'pslow', sy:0, sw:64, sh:64, w:64, h:64 }, { sx:64*i });
});
_t.Shield = array(RES.bombs.width/63, function(i) {
return extend({ res:'bombs', sy:0, sw:60, sh:60, w:120, h:120 }, { sx:63*i });
});
ieach(['Drops', 'Lasers', 'TamaA', 'TamaB', 'LongA', 'LongB', 'LongC'], function(i, k) {
_t[k] = array(16, function(j) {
return { res:'etama3', sx:16*j, sy:i*16, sw:16, sh:16, w:16, h:16,
rotate:k.indexOf('Long')==0 ? 'speed' : 0, rotate_list:360, }
});
});
_t.TamaSmall = array(5, function(i) {
return { res:'etama3', sx:16*(i+4), sy:112, sw:16, sh:16, w:16, h:16 }
})
_t.TamaDead = array(5, function(i) {
return { res:'etama3', sx:16*(i+9), sy:112, sw:16, sh:16, w:16, h:16 }
})
_t.TamaLarge = array(8, function(i) {
return { res:'etama3', sx:32*i, sy:128, sw:32, sh:32, w:32, h:32 }
});
_t.Knife = array(8, function(i) {
return { res:'etama3', sx:32*i, sy:160, sw:32, sh:32, w:32, h:32, rotate:true }
});
_t.TamaMini = arrcat(
array(8, function(i) {
return { res:'etama3', sx:8*i+128, sy:208, sw:8, sh:8, w:8, h:8 }
}), array(8, function(i) {
return { res:'etama3', sx:8*i+128, sy:208+8, sw:8, sh:8, w:8, h:8 }
})
);
_t.TamaMedium = array(8, function(i) {
return { res:'etama3', sx:32*i, sy:257-32, sw:32, sh:32, w:32, h:32 }
});
_t.TamaColorNew = {
k: _t.TamaMedium[0],
r: _t.TamaMedium[1],
m: _t.TamaMedium[2],
b: _t.TamaMedium[3],
c: _t.TamaMedium[4],
g: _t.TamaMedium[5],
y: _t.TamaMedium[6],
o: _t.TamaMedium[6],
w: _t.TamaMedium[7],
};
_t.TamaColorDead = {
k: _t.TamaDead[0],
r: _t.TamaDead[1],
m: _t.TamaDead[1],
b: _t.TamaDead[2],
c: _t.TamaDead[2],
g: _t.TamaDead[3],
y: _t.TamaDead[4],
o: _t.TamaDead[4],
w: _t.TamaDead[0],
}
_t.LaserLong = array(16, function(j) {
return { res:'lasers', sx:16*j, sy:0, sw:16, sh:RES.lasers.height, w:16, h:RES.lasers.height };
});
_t.TamaMax = array(4, function(i) {
return { res:'etama4', sx:64*i, sy:0, sw:64, sh:64, w:64, h:64 }
});
ieach([0, 128], function(i, x) {
ieach([0, 32, 64], function(j, y) {
_t['Enemy'+i+j] = array(4, function(i) {
return extend({ res:'stg1enm', sy:y, sw:32, sh:32, w:32, h:32 }, { sx:x+32*i });
});
});
});
_t.EnemyX = array(8, function(i) {
return extend({ res:'stg1enm', sy:255-48, sw:32, sh:48, w:32, h:48 }, { sx:32*i });
});
_t.Enemy2A = array(RES.enm2a.width / 32, function(i) {
return extend({ res:'enm2a', sy:0, sw:32, sh:32, w:32, h:32 }, { sx:32*i });
});
_t.Enemy2B = array(4, function(i) {
return extend({ res:'stg2enm', sy:128, sw:32, sh:32, w:32, h:32 }, { sx:32*i });
});
_t.Enemy2C = array(4, function(i) {
return extend({ res:'stg2enm', sy:96, sw:32, sh:32, w:32, h:32 }, { sx:32*i });
});
_t.Boss = [
{ res:'stg1enm2', sx:128, sy:0, sw:32, sh:48, w:32, h:48 }
];
lastOfArray(_t.Boss).next = 0;
_t.Boss.reset_index = _t.Boss.length;
array(5, function(i) {
_t.Boss.push(extend({ res:'stg1enm2', sy:0, sw:32, sh:48, w:32, h:48 }, { sx:128-32*i }));
});
array(5, function(i) {
_t.Boss.push(extend({ res:'stg1enm2', sy:0, sw:32, sh:48, w:32, h:48 }, { sx:32*i }));
});
lastOfArray(_t.Boss).next = 0;
_t.BossL = array(3, function(i) {
return extend({ res:'stg1enm2', sy:48, sw:32, sh:48, w:32, h:48 }, { sx:32*i });
});
_t.BossL.unshift({ res:'stg1enm2', sx:160, sy:0, sw:32, sh:48, w:32, h:48 });
_t.BossR = array(3, function(i) {
return extend({ res:'stg1enm2R', sy:0, sw:32, sh:48, w:32, h:48 }, { sx:32*i });
});
_t.BossR.push({ res:'stg1enm2', sx:192, sy:0, sw:32, sh:48, w:32, h:48 });
_t.Boss2A = [
{ res:'stg2enm', sx: 0, sy:256-48, sw:48, sh:48, w:48, h:48 },
{ res:'stg2enm', sx:48, sy:256-48, sw:48, sh:48, w:48, h:48 },
];
_t.Chiruno = [
{ res:'stg2enm2', sx:0, sy:0, sw:32, sh:64, w:32, h:64 },
];
lastOfArray(_t.Chiruno).next = 0;
_t.Chiruno.reset_index = _t.Chiruno.length;
_t.Chiruno.push({ res:'stg2enm2', sx: 80, sy: 0, sw:48, sh:64, w:48, h:64 });
_t.Chiruno.push({ res:'stg2enm2', sx:128, sy: 0, sw:48, sh:64, w:48, h:64 });
_t.Chiruno.push({ res:'stg2enm2', sx:176, sy: 0, sw:48, sh:64, w:48, h:64 });
_t.Chiruno.push({ res:'stg2enm2', sx: 0, sy:64, sw:48, sh:64, w:48, h:64 });
lastOfArray(_t.Chiruno).next = 0;
_t.ChirunoL = [
{ res:'stg2enm2', sx:32, sy:0, sw:48, sh:64, w:48, h:64 },
];
_t.ChirunoR = [
{ res:'stg2enm2R', sx: 0, sy:0, sw:48, sh:64, w:48, h:64 },
];
_t.EffBullet = array(RES.effbullet.width/16, function(i) {
return { res:'effbullet', sx:i*16, sy:0, sw:16, sh:16, w:16, h:16 };
});
_t.EffBoss = array(RES.effboss.width/16, function(i) {
return { res:'effboss', sx:i*16, sy:0, sw:16, sh:16, w:16, h:16 };
});
_t.EffEnemy = ieach([32,42,52,62,60,58,56,54,52,50,48,46,44,42,40,38,36,34,32,30,28,26], function(i, d, ls) {
ls.push(extend({ res:'eff00', sx:32, sy:0, sw:32, sh:32, rotate:-i*0.5 }, { w:d, h:d }));
}, []);
stayLastFrame(_t.EffEnemy);
_t.EffEnemy2 = ieach([32,42,52,62,60,58,56,54,52,50,48,46,44,42,40,38,36,34,32,30,28,26], function(i, d, ls) {
ls.push(extend({ res:'eff00', sx:64, sy:0, sw:32, sh:32 }, { w:d, h:d }));
}, []);
stayLastFrame(_t.EffEnemy2);
_t.EffPlayer = ieach([32,42,52,62,67,72,76,80,83,86,89,92,95,98,101,104,107,110,113,116,119,122], function(i, d, ls) {
ls.push(extend({ res:'eff00', sx:0, sy:0, sw:32, sh:32 }, { w:d*1.5, h:d*1.5 }));
}, []);
stayLastFrame(_t.EffPlayer);
ieach(['EffPiece', 'EffPieceR', 'EffPieceG', 'EffPieceB'], function(i, k) {
_t[k] = array(4, function(j) {
return { res:'eff00', sx:i*64+j*16, sy:32, sw:16, sh:16, w:16, h:16 };
});
});
_t.PowerUp = [
{ res:'powerup', sx:0, sy:0, sw:50, sh:8, w:50, h:8 },
];
_t.Cloud1 = [
{ res:'stg3bg', sx:0, sy:81, sw:148, sh:48, w:148, h:48 },
]
_t.Cloud2 = [
{ res:'stg3bg', sx:148, sy:80, sw:108, sh:32, w:108, h:32 },
]
_t.Enemy3A = array(4, function(i) {
return extend({ res:'stg3enm', sy:160, sw:32, sh:32, w:32, h:32 }, { sx:32*i });
})
_t.Enemy3B = array(4, function(i) {
return extend({ res:'stg3enm', sy:160, sw:32, sh:32, w:32, h:32 }, { sx:128+32*i });
})
_t.Meiling = [
{ res:'stg3enm', sx:0, sy:208, sw:48, sh:48, w:48, h:48 },
]
_t.EffMeiling = array(RES.effmeiling.width/48, function(i) {
return { res:'effmeiling', sx:i*48, sy:0, sw:48, sh:48, w:48, h:48 };
});
_t.Koakuma = newFrame('stg4enm', 0, 202, 32, 54);
function newBossFrame(name, fr_normal, fr_fire, fr_left, fr_right) {
var fs = fr_normal;
lastOfArray(fs).next = 0;
fs.reset_index = fs.length;
ieach(fr_fire, function(i, f) {
fs.push(f)
})
_t[name] = fs;
_t[name + 'L'] = fr_left;
_t[name + 'R'] = fr_right;
}
newBossFrame('Patchouli', [
newFrame('stg4enm', 32, 202, 32, 54),
], [
newFrame('stg4enm', 64, 202, 32, 54),
], [
newFrame('stg4enm', 96, 202, 48, 54),
newFrame('stg4enm', 144, 202, 48, 54),
newFrame('stg4enm', 192, 202, 48, 54),
], [
newFrame('stg4enmR', 0, 0, 48, 54),
newFrame('stg4enmR', 48, 0, 48, 54),
newFrame('stg4enmR', 96, 0, 48, 54),
])
newBossFrame('Sakuya', [
newFrame('stg5enm2', 0, 0, 32, 64),
newFrame('stg5enm2', 32, 0, 32, 64),
newFrame('stg5enm2', 64, 0, 32, 64),
], [
newFrame('stg5enm2', 96, 0, 32, 64),
], [
newFrame('stg5enm2', 128, 0, 32, 64),
newFrame('stg5enm2', 160, 0, 36, 64),
newFrame('stg5enm2', 196, 0, 40, 64),
], [
newFrame('stg5enmR', 0, 0, 40, 64),
newFrame('stg5enmR', 40, 0, 36, 64),
newFrame('stg5enmR', 76, 0, 32, 64),
])
newBossFrame('Remilia', [
newFrame('stg6enm2', 0, 0, 64, 80),
], [
newFrame('stg6enm2', 0, 0, 64, 80),
], [
newFrame('stg6enm2', 64, 0, 64, 80),
newFrame('stg6enm2', 128, 0, 64, 80),
], [
newFrame('stg6enmR', 0, 0, 64, 80),
newFrame('stg6enmR', 64, 0, 64, 80),
])
_t.Fire = array(4, function(i) {
return newFrame('etama3', i*32, 192, 32, 32, 0, 0, { rotate:true })
})
_t.Bat = array(4, function(i) {
return newFrame('stg6enm2', i*64, 80, 64, 32)
})
return _t;
})
</script>
<!-- path data -->
<script id="path">
(function(RES) {
// use curve fitter from http://jsfiddle.net/Gsz2a/
function pathFromBezier(bezs, speed) {
// bezs: array of [x1, y1, cx1, cy1, cx2, cy2, x2, y2, n]
return ieach(bezs, function(i, v, d) {
var n = Math.abs(v[8]);
array(n, function(i) {
var f = v[8] < 0 ? 1-i/n : i/n;
var x = bezier([v[0], v[2], v[4], v[6]], f),
y = bezier([v[1], v[3], v[5], v[7]], f);
d.push({ x:x-32, y:y-16, v:speed });
})
// object will not stop at the last point
if (!bezs[i+1])
d.push({ v:Inf })
}, [])
}
function pathFromTwoPoints(sfx, sfy, dfx, dfy, speed) {
return [
{ fx:sfx, fy:sfy, v:speed, },
{ fx:dfx, fy:dfy, },
{ v:Inf, },
]
}
function pathFlipFrom(pth) {
return ieach(pth, function(i, v, d) {
d.push({ x:GAME.rect.r+GAME.rect.l-v.x, y:v.y, v:v.v });
}, []);
}
var _t = {};
_t.s0A1 = pathFromBezier([
[300, 12, 342, 116, 289, 163, 223, 137, 10],
[223, 137, 134, 100, 36, 191, 81, 304, 10],
[81, 304, 120, 451, 130, 476, 167, 581, 10],
], 0.12);
_t.s0A2 = pathFlipFrom(_t.s0A1);
_t.s3A1 = pathFromBezier([
[12, 71, 73, 129, 165, 193, 207, 123, 10],
[100, 36, 128, -10, 248, 35, 207, 123, -10],
[99, 141, 74, 100, 73, 72, 100, 36, -10],
[99, 141, 153, 270, 236, 456, 295, 582, 10],
], 0.2);
_t.s3A2 = pathFlipFrom(_t.s3A1);
_t.s3A3 = pathFromBezier([
[28, 142, 83, 51, 184, -2, 257, 106, 10],
[257, 106, 280, 144, 440, 424, 508, 555, 20],
], 0.2);
_t.s3A4 = pathFlipFrom(_t.s3A3);
_t.s4A1 = pathFromBezier([
[26, 229, 192, 191, 292, 110, -1, -19, 10],
], 0.2);
_t.s4A2 = pathFlipFrom(_t.s4A1);
_t.s4A3 = pathFromBezier([
[29, 109, 140, 26, 101, 25, 207, 124, 10],
[207, 124, 237, 161, 279, 118, 252, 92, 10],
[252, 92, 229, 60, 184, 87, 207, 124, 10],
[207, 124, 237, 161, 279, 118, 252, 92, 10],
[252, 92, 218, 46, 219, 53, 181, 6, 10],
], 0.2);
_t.s4A4 = pathFlipFrom(_t.s4A3);
ieach(_t.s4AL = [
pathFromTwoPoints(0.2, 0, 0.2, 1, 0.3),
pathFromTwoPoints(0.5, 0, 0.5, 1, 0.3),
pathFromTwoPoints(0, 0.2, 1, 0.2, 0.3),
pathFromTwoPoints(1,0.25, 0,0.25, 0.3),
pathFromTwoPoints(0.8, 0, 0.8, 1, 0.3),
pathFromTwoPoints(0.5, 0, 0.5, 1, 0.3),
pathFromTwoPoints(1, 0.1, 0, 0.1, 0.3),
pathFromTwoPoints(0, 0.2, 1, 0.2, 0.3),
], function(i, pth) {
_t['s4AL' + i] = pth;
})
_t.s5A1 = pathFromTwoPoints(0, 0.30, 1, 0.25);
_t.s5A2 = pathFromTwoPoints(1, 0.25, 0, 0.20);
_t.s5A3 = pathFromTwoPoints(0, 0.20, 1, 0.15);
_t.s5A4 = pathFromTwoPoints(1, 0.35, 0, 0.30);
return _t;
})
</script>
<!-- fonts -->
<script id="fontmap">
(function(RES) {
var _t = {
cw: 16,
ch: 16,
}
ieach([
' !"#$%&\'()*+,-./',
'0123456789:;<=>?',
'@ABCDEFGHIJKLMNO',
'PQRSTUVWXYZ[`]`_',
' abcdefghijklmno',
'pqrstuvwxyz(|)~`',
], function(i, s) {
ieach(s, function(j, c) {
_t[c] = {
x: j * _t.cw,
y: i * _t.ch + 32,
};
if ('ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 '.indexOf(c) >= 0)
$addCssRule('.char-'+c,
'display:block;float:left;width:14px;height:16px;'+
'background-position:-'+(_t[c].x+1)+'px -'+_t[c].y+'px;')
});
});
return _t;
})
</script>
<script id="nummap">
(function(RES) {
var _t = {
cw: 16,
ch: 16,
}
ieach('0123456789', function(j, c) {
_t[c] = {
x: j * _t.cw,
y: 0,
};
});
return _t;
})
</script>
<script id="nummap_small">
(function(RES) {
var _t = {
cw: 8,
ch: 8,
}
ieach('0123456789', function(j, c) {
_t[c] = {
x: j * _t.cw,
y: 0,
};
});
return _t;
})
</script>
<!-- strings -->
<script type="text/html" id="st_ask_continue"><strong>注意:</strong>以下不是红魔乡的内容<br />
继续玩可能出现节操过量流失或者弹幕过敏症状,作者不对产生的后果负任何责任。<br />
同意请解除暂停继续,不同意请回到标题画面</script>
<script type="text/html" id="st_bomb_sc">灵符「梦想封印」</script>
<!-- stage 1 -->
<script type="text/html" id="st_stg1_title">梦幻夜行绘卷 ~ Mystic Flier</script>
<script type="text/html" id="st_stg1_sc0">夜符「月光」</script>
<script type="text/html" id="st_stg1_sc1">夜符「夜雀」</script>
<script type="text/html" id="st_stg1_sc2">闇符「境界线」</script>
<script type="text/html" id="st_stg1_sc_ex1">闇符「镜界限」</script>
<script type="text/html" id="st_stg1_sc_ex2">闇符「铁十字军」</script>
<script type="text/html" id="st_stg1_sc_ex3">闇符「恶灵缠身」</script>
<script type="text/html" id="st_stg1_diag1">感觉真不错呢</script>
<script type="text/html" id="st_stg1_diag2">每次都在白天出来所以妖怪很少见<br />所以,这次才试着在夜里出来的……</script>
<script type="text/html" id="st_stg1_diag3">不过该往哪边走都搞不清楚了<br />这么暗</script>
<script type="text/html" id="st_stg1_diag4">但是……</script>
<script type="text/html" id="st_stg1_diag5">夜里的境内还真够浪漫呢<br />(←轻松状)</script>
<script type="text/html" id="st_stg1_diag6">说的就是嘛~<br />还会出现妖怪,真是受不了啊</script>
<script type="text/html" id="st_stg1_diag7">呃,<br />你谁啊?</script>
<script type="text/html" id="st_stg1_diag8">刚刚不是见过了吗<br />你难不成是鸟目吗?</script>
<script type="text/html" id="st_stg1_diag9">人类在一片漆黑的地方<br />当然看不清东西啊</script>
<script type="text/html" id="st_stg1_diag10">是吗?我感觉好像看到了<br />只在夜里才活动的人呢</script>
<script type="text/html" id="st_stg1_diag11">那种人你就算抓住吃了也<br />无所谓啊</script>
<script type="text/html" id="st_stg1_diag12">是—这样吗—</script>
<script type="text/html" id="st_stg1_diag13">不过,你很碍事呢</script>
<script type="text/html" id="st_stg1_diag14">在我眼前的就是吃了也没关系的人类?</script>
<script type="text/html" id="st_stg1_diag15">良药苦口<br />这句话你有没有听过?</script>
<script type="text/html" id="st_stg1_diag16">不过就算是良药<br >如果不喝了试试的话谁又知道效果呢</script>
<script type="text/html" id="st_stg1_diag17">...</script>
<script type="text/html" id="st_stg1_diag18">咦,你不是被打倒退场了吗?</script>
<script type="text/html" id="st_stg1_diag19">是—这样吗—</script>
<script type="text/html" id="st_stg1_diag20">真是麻烦...还想早点回去喝茶呢(←抬头望向右上角)</script>
<script type="text/html" id="st_stg1_diag21">嫌麻烦的话,点那个红叉好像没错呢</script>
<script type="text/html" id="st_stg1_diag22">哈?</script>
<script type="text/html" id="st_stg1_diag23">今天虽然身体有点迟钝,阴阳玉也不顺手,退治你还是没问题的</script>
<script type="text/html" id="st_stg1_diag24">把我退治掉,就没人陪你玩了<br />听说人类都是很怕寂寞的,所以...</script>
<script type="text/html" id="st_stg1_diag25">还是让我吃掉,和我变成一心同体吧!</script>
<script type="text/html" id="st_stg1_diag26">想和我一心同体的妖怪,从神社门口开始排,轮到你大概要到人间之里了</script>
<script type="text/html" id="st_stg1_diag27">不过如果给赛钱的话,是可以走特殊通道的呢</script>
<script type="text/html" id="st_stg1_diag28">不用排队的啦,都说了这个世(you)界(xi)只有我和你两个角色而已...</script>
<script type="text/html" id="st_stg1_diag29">在说梦话吗?我出门的时候可是还看到魔里沙的</script>
<script type="text/html" id="st_stg1_diag30">那个魔法使啊,就是个立绘而已哦<br />连对话都没有...</script>
<script type="text/html" id="st_stg1_diag31">说起来确实没有打招呼呢...</script>
<script type="text/html" id="st_stg1_diag32">不管了,那种事情还是先把你打倒,然后再去确认吧</script>
<script type="text/html" id="st_stg1_diag33">后悔药什么的,即使是竹林里的那家店也是没有卖的哦</script>
<!-- stage 2 -->
<script type="text/html" id="st_stg2_title">湖上的妖精 ~ Water Magus</script>
<script type="text/html" id="st_stg2_sc1">雹符「冰雹暴风」</script>
<script type="text/html" id="st_stg2_sc2">冻符「完美冻结」</script>
<script type="text/html" id="st_stg2_sc3">雪符「钻石风暴」</script>
<script type="text/html" id="st_stg2_sc_ex1">冻符「一日之寒」</script>
<script type="text/html" id="st_stg2_sc_ex2">雪符「冻空雷暴」</script>
<script type="text/html" id="st_stg2_sc_ex3">雪符「冰牢残雪」</script>
<script type="text/html" id="st_stg2_diag1">这座湖原来是如此宽广的吗?</script>
<script type="text/html" id="st_stg2_diag2">浓雾遮天视野不良啊。</script>
<script type="text/html" id="st_stg2_diag3">难不成我是路痴?</script>
<script type="text/html" id="st_stg2_diag4">如果迷路,定是妖精所为</script>
<script type="text/html" id="st_stg2_diag5">啊啦是吗?那么,带个路吧?<br />这附近有岛对不对?</script>
<script type="text/html" id="st_stg2_diag6">你啊,听了不要吓一大跳<br />在你面前可是有个强敌呢。</script>
<script type="text/html" id="st_stg2_diag7">靶子?<br />这还真是令人吃惊啊</script>
<script type="text/html" id="st_stg2_diag8">开什么玩笑啊~</script>
<script type="text/html" id="st_stg2_diag9">像你这样的话,就让我把你和<br />英吉利牛肉一起冰冻冷藏起来吧!!</script>
<script type="text/html" id="st_stg2_diag10">啊啊,可真是冷呢<br />这样会得空调病的啊</script>
<script type="text/html" id="st_stg2_diag11">这些妖精一只又一只的,没完没了了呢</script>
<script type="text/html" id="st_stg2_diag12">老娘是最强的!</script>
<script type="text/html" id="st_stg2_diag13">啊啊,这是第几只来着?(←记不清了)</script>
<script type="text/html" id="st_stg2_diag14">呃...一,二,九...</script>
<script type="text/html" id="st_stg2_diag15">总之是最强的那只!</script>
<script type="text/html" id="st_stg2_diag16">哦,是吗...</script>
<script type="text/html" id="st_stg2_diag17">我觉得一开始那只大妖精也很强的说</script>
<script type="text/html" id="st_stg2_diag18">大酱是我的!</script>
<script type="text/html" id="st_stg2_diag19">因为老娘是最强的!</script>
<script type="text/html" id="st_stg2_diag20">咦,妖精的社会已经发展到了这种程度了吗?<br />(果然人类不抓紧点不行了呢)</script>
<script type="text/html" id="st_stg2_diag21">所以说打倒你之后就不会有更强的妖精挡道了对吧?</script>
<script type="text/html" id="st_stg2_diag22">老娘挡道的本事也是最强的!</script>
<script type="text/html" id="st_stg2_diag23">这个妖精,其实是吃不好的牛肉吃坏脑子了吧</script>
<script type="text/html" id="st_stg2_diag24">总之,挡路的话还是要处理掉呢</script>
<!-- stage 3 -->
<script type="text/html" id="st_stg3_title">红色之境 ~ Scalet Land</script>
<script type="text/html" id="st_stg3_sc0">华符「卷柏 9」</script>
<script type="text/html" id="st_stg3_sc1">虹符「彩虹的风铃」</script>
<script type="text/html" id="st_stg3_sc2">幻符「华想梦葛」</script>
<script type="text/html" id="st_stg3_sc3">彩符「彩光乱舞」</script>
<script type="text/html" id="st_stg3_sc4">彩符「极彩台风」</script>
<script type="text/html" id="st_stg3_diag1">可恶,背水阵!</script>
<script type="text/html" id="st_stg3_diag2">你一个人也算是「阵」吗?</script>
<script type="text/html" id="st_stg3_diag3">你不要跟过来啊~</script>
<script type="text/html" id="st_stg3_diag4">谢谢你带路了~</script>
<script type="text/html" id="st_stg3_diag5">啊啦,就算你跟着我过来<br />这边也是什么都没有的啊?</script>
<script type="text/html" id="st_stg3_diag6">你是不会往啥都没有的地方逃的对吧?</script>
<script type="text/html" id="st_stg3_diag7">嗯——我要是逃的时候就只想着<br />逃的事情了</script>
<script type="text/html" id="st_stg3_diag8">顺便问下,你是什么人?</script>
<script type="text/html" id="st_stg3_diag9">哎—普通人哟</script>
<script type="text/html" id="st_stg3_diag10">刚才是你对我动手的吧?</script>
<script type="text/html" id="st_stg3_diag11">那个是普通地攻击一下的<br />但是,是你先做攻击的啊</script>
<script type="text/html" id="st_stg3_diag12">你是普通之外的存在</script>
<script type="text/html" id="st_stg3_diag13">我只是个当巫女的普通人来着啊</script>
<script type="text/html" id="st_stg3_diag14">那可真是太好了<br />确实有...</script>
<script type="text/html" id="st_stg3_diag15">巫女是吃了也没问题的人类<br />这种话在流传呢...</script>
<script type="text/html" id="st_stg3_diag16">什么传言啊!</script>
<script type="text/html" id="st_stg3_diag17">那么,领路就拜托你了哦</script>
<script type="text/html" id="st_stg3_diag18">对不起,大小姐~</script>
<!-- stage 4 -->
<script type="text/html" id="st_stg4_title">暗闇之馆 ~ Save the mind</script>
<script type="text/html" id="st_stg4_sc1">火符「火神之光 上级」</script>
<script type="text/html" id="st_stg4_sc2">土符「三石牌坊的震动」</script>
<script type="text/html" id="st_stg4_sc3">火&土符「环状熔岩带」</script>
<script type="text/html" id="st_stg4_sc4">金&水符「水银之毒」</script>
<script type="text/html" id="st_stg4_sc5">木&火符「森林大火」</script>
<script type="text/html" id="st_stg4_diag1">这家人屋里都不安窗户的吗?</script>
<script type="text/html" id="st_stg4_diag2">而且从外面看的时候<br />没感觉有这么大啊?</script>
<script type="text/html" id="st_stg4_diag3">那边的红白!</script>
<script type="text/html" id="st_stg4_diag4">不准在我的书房里撒泼</script>
<script type="text/html" id="st_stg4_diag5">书房?(红白?)</script>
<script type="text/html" id="st_stg4_diag6">这里的书价值能比得上你家神社<br />5年份的香火钱呢</script>
<script type="text/html" id="st_stg4_diag7">我那里就算年中无休也一个参拜客也没有哦</script>
<script type="text/html" id="st_stg4_diag8">嘛反正也就是有那种程度的价值了</script>
<script type="text/html" id="st_stg4_diag9">说起来在这么暗的屋子里<br />能读书吗?</script>
<script type="text/html" id="st_stg4_diag10">我可不是像你一样的鸟目<br />患者</script>
<script type="text/html" id="st_stg4_diag11">所以说~我才不是鸟目<br />呃</script>
<script type="text/html" id="st_stg4_diag12">切,才不是想说这个呢<br />你就是这里的主人吗?</script>
<script type="text/html" id="st_stg4_diag13">你找大小姐有什么事?</script>
<script type="text/html" id="st_stg4_diag14">放出的雾太多了,很令人为难</script>
<script type="text/html" id="st_stg4_diag15">那么,就绝对不可以让你<br />去见大小姐了</script>
<script type="text/html" id="st_stg4_diag16">不许碍事</script>
<script type="text/html" id="st_stg4_diag17">...话说回来,你是谁?</script>
<script type="text/html" id="st_stg4_diag18">说起来这个馆,从外面看<br />有这么宽敞么?</script>
<script type="text/html" id="st_stg4_diag19">因为家里有个喜欢摆弄空间的人<br />在啊</script>
<!-- stage 5 -->
<script type="text/html" id="st_stg5_title">红月之下那潇洒的随从</script>
<script type="text/html" id="st_stg5_sc0">幻在「钟表的遗骸」</script>
<script type="text/html" id="st_stg5_sc1">幻幽「迷幻的杰克」</script>
<script type="text/html" id="st_stg5_sc2">幻世「The World」</script>