-
Notifications
You must be signed in to change notification settings - Fork 0
/
game_airis.js
1056 lines (1046 loc) · 46.2 KB
/
game_airis.js
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
function setup() {
new Canvas(360, 480);
}
let img_title;
let img_temp = [];
let img_card = [];
let img_end;
let song;
function preload() {
img_title = loadImage('./img/title.png');
img_temp[1] = loadImage('./img/001_maria.png');
img_temp[2] = loadImage('./img/002_enal.png');
img_temp[3] = loadImage('./img/003_sarna.png');
img_temp[4] = loadImage('./img/004_black_cat.png');
img_temp[5] = loadImage('./img/005_white_cat.png');
img_temp[6] = loadImage('./img/006_orange_cat.png');
img_temp[7] = loadImage('./img/007_orange_dog.png');
img_temp[8] = loadImage('./img/008_white_dog.png');
img_temp[9] = loadImage('./img/009_alice.png');
img_temp[10] = loadImage('./img/010_boy.png');
img_temp[11] = loadImage('./img/011_girl.png');
img_temp[12] = loadImage('./img/012_guy.png');
img_temp[13] = loadImage('./img/013_scarecrow.png');
img_temp[14] = loadImage('./img/014_target.png');
img_temp[15] = loadImage('./img/015_miena.png');
img_temp[16] = loadImage('./img/016_garbage.png');
img_temp[17] = loadImage('./img/017_wooden_box.png');
img_temp[18] = loadImage('./img/018_bottle.png');
img_temp[40] = loadImage('./img/040_apple.png');
img_temp[41] = loadImage('./img/041_golden_apple.png');
img_temp[42] = loadImage('./img/042_present_box.png');
img_temp[50] = loadImage('./img/050_grass.png');
img_temp[51] = loadImage('./img/051_harb.png');
img_temp[52] = loadImage('./img/052_portion.png');
img_temp[53] = img_temp[52];
img_temp[54] = img_temp[52];
img_temp[55] = loadImage('./img/055_thunderbolt.png');
img_temp[56] = loadImage('./img/056_ice_ball.png');
img_temp[57] = loadImage('./img/057_fire_ball.png');
img_temp[58] = loadImage('./img/058_clear_coin.png');
img_temp[60] = loadImage('./img/060_green_orge.png');
img_temp[61] = loadImage('./img/061_wolf.png');
img_temp[62] = loadImage('./img/062_deer.png');
img_temp[63] = loadImage('./img/063_bear.png');
img_temp[64] = loadImage('./img/064_slime.png');
img_temp[65] = loadImage('./img/065_rabbit.png');
img_temp[66] = loadImage('./img/066_snake.png');
img_temp[67] = loadImage('./img/067_ghost.png');
img_temp[68] = loadImage('./img/068_jack_o_lantern.png');
img_temp[69] = loadImage('./img/069_mummy.png');
img_temp[70] = loadImage('./img/070_skeleton.png');
img_temp[71] = loadImage('./img/071_santa.png');
img_temp[72] = loadImage('./img/072_breadman.png');
img_temp[73] = loadImage('./img/073_snowman.png');
img_card[0] = loadImage('./img/card_base_green.png');
img_card[1] = loadImage('./img/card_base_red.png');
song = [];
song[1] = loadSound('./music/m01_rpg_title.mp3');
song[2] = loadSound('./music/m02_battle1.mp3');
song[3] = loadSound('./music/m03_christmas.mp3');
song[4] = loadSound('./music/m04_battle2.mp3');
song[5] = loadSound('./music/m05_you_win.mp3');
song[6] = loadSound('./music/m06_battle3.mp3');
}
let img_bg;
const bgimgs = [
[2, './img/bk01_house.png'],
[2, './img/bk01_house.png'],
[2, './img/bk01_house.png'],
[4, './img/bk02_town.png'],
[4, './img/bk02_town.png'],
[4, './img/bk02_town.png'],
[6, './img/bk07_town2.png'],
[6, './img/bk07_town2.png'],
[6, './img/bk07_town2.png'],
[2, './img/bk05_grass.png'],
[2, './img/bk05_grass.png'],
[2, './img/bk05_grass.png'],
[4, './img/bk03_forest.png'],
[4, './img/bk03_forest.png'],
[4, './img/bk03_forest.png'],
[2, './img/bk08_training.png'],
[2, './img/bk08_training.png'],
[6, './img/bk04_forest2.png'],
[6, './img/bk04_forest2.png'],
[6, './img/bk04_forest2.png'],
[3, './img/bk19_town3.png'],
];
const reward = [
[1, 1],
[2, -2, [2, 2, 2, 2, 2, 2, 2, 1, 9]],
[3, -1, ['エルナ', 2, 2], 0],
[4, -2, [2, 2, 2, 2, 2, 6, 6, 10]],
[5, -2, [2, 6, 7, 8]],
[6, -1, ['サーナ', 3, 3], 0],
[7, -2, [3, 6, 7, 8]],
[8, -2, [3, 6, 7, 8]],
[9, 9],
[7, -2, [3, 6, 7, 8]],
[8, -2, [3, 6, 7, 8]],
[9, -2, [3, 6, 7, 8, 9, 10]],
[10, -2, [3, 6, 7, 8]],
[11, -2, [3, 6, 7, 8]],
[12, -1, ['アリス', 9, 4], 0],
[13, -2, [3, 6, 7, 8]],
[14, -2, [3, 6, 7, 8]],
[15, -2, [3, 6, 7, 8]],
[16, -2, [3, 6, 7, 8]],
[17, -2, [0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 5]],
[18, 11],
];
const card_base = [
// ★rank name, img, _hp, at, def,hit agi skill
[],
['★5 マリア・ファイアランス', 1, 200, 80, 30, 30, 10, ['2回攻撃'], 'スキル:2回攻撃\n剣士の冒険者。\nパーティー「レッドキャッツ」のリー\nダーを務める。', ['2回攻撃、えいやっ!!', '2回攻撃、いっけぇ!!', '2回攻撃、そりゃぁ!']],
['★5 エナル・ブルーサファイア', 2, 150, 100, 15, 30, 10, ['ファイアボール'], '魔法使いの冒険者。\nパーティー「レッドキャッツ」のメン\nバー。【青髪の魔女】の二つ名を持つ。', ['ファイア・アロー', 'アイス・ミサイル', 'エア・スラッシュ']],
['★5 サーナ・ゴールドラッシュ', 3, 180, 90, 20, 30, 10, ['アロー'], '弓使いの冒険者。\nパーティー「レッドキャッツ」の\nポーター。\n【期待の猫娘】と呼ばれている。', ['弓をくらえにゃ!', '攻撃するにゃ', 'どんどんにゃ']],
['★1 黒猫', 4, 110, 80, 15, 20, 20, ['爪攻撃'], '黒い猫ちゃんだ。かわいい。\n裏路地を歩き回っているうちの一匹。\nみんなで餌をあげる地域猫だ。', ['にゃぁん', 'にゃんにゃん', 'にゃほーん']],
['★1 白猫', 5, 100, 70, 15, 20, 20, ['爪攻撃'], '白い猫ちゃんだ。かわいい。\n裏路地を歩き回っているうちの一匹。\nみんなで餌をあげる地域猫だ。', ['にゃぁん', 'にゃんにゃん', 'にゃうん']],
['★1 トラ猫', 6, 100, 70, 25, 20, 20, ['爪攻撃'], 'トラ猫ちゃんだ。かわいい。\n裏路地を歩き回っているうちの一匹。\nみんなで餌をあげる地域猫だ。', ['にゃぁん', 'にゃんにゃん', 'にゃう']],
['★1 茶犬', 7, 110, 70, 25, 15, 15, ['爪攻撃'], '茶色いワンちゃんだ。かわいい。\n裏路地を歩き回っているうちの一匹。\n誰かの飼い犬らしい。', ['ワン!!', 'ワンワン!', 'ワウーン!']],
['★1 白犬', 8, 120, 70, 25, 15, 15, ['爪攻撃'], '白いワンちゃんだ。かわいい。\n裏路地を歩き回っているうちの一匹。\n誰かの飼い犬らしい。', ['ワン!!', 'ワンワン!', 'ワウーン!']],
['★5 アリス・リッテンマイア', 9, 190, 70, 35, 20, 10, ['2回攻撃'], 'スキル:2回攻撃\n姫騎士【王国の秘宝】。\nエアイズ王国第一王女。\n美しく聡明な姫様。\n冒険者としても活動している。', ['2回攻撃、いきますっ', '2回攻撃、今度こそ!', '2回攻撃、やります!']],
['★2 スリ男子', 10, 120, 60, 15, 20, 20, ['スリ'], 'スラムの男の子。\nいつもお腹を空かせている。\nスリの常習犯。\n悪いことはしちゃダメ。', ['ちっ', 'ちぇっ', 'ふんっ']],
['★2 スリ女子', 11, 110, 65, 20, 20, 20, ['スリ'], 'スラムの女の子。\nいつもお腹を空かせている。\nスリの常習犯。\n悪いことはしちゃダメ。', ['きゃっ', 'もうっ', 'ちょっとっ']],
['★3 スリ男', 12, 150, 70, 25, 25, 25, ['スリ'], 'スラムの男。\nいつもお腹を空かせている。\nスリの常習犯。\n悪いことはしちゃダメ。\n子供にスリを教えている。', ['なんだ手前', '何見てるっ', 'あっち行けよ']],
['★1 カカシ', 13, 180, 50, 20, 100, 10, ['沈黙'], '冒険者ギルドの「カカシ」。\n人型の的。\n訓練場に設置されている。\nよく剣術訓練に使用される。', ['………', '……', '…']],
['★1 的(まと)', 14, 200, 50, 30, 100, 10, ['沈黙'], '冒険者ギルドの「的」。\n円形の的だ。\n訓練場に設置されている。\nよく魔法訓練に使用される。', ['………', '……', '…']],
['★4 ミーナ・ロバーツ', 15, 250, 100, 25, 25, 25, ['計算'], '美人受付嬢。\n冒険者ギルドの受付嬢。\n特技は素早い事務処理に素材の目利き。\n冒険者に人気だ。\nしかし彼氏の噂は全然聞かない。\n実は凄腕の冒険者でもあり模擬戦も\nこなす。', ['手加減してますよ', '掛かってきなさいっ', '実力を見せてください']],
['★1 ゴミ袋', 16, 150, 50, 20, 20, 20, ['沈黙'], '路地に放置されたゴミ袋。\n思ったより重い。\n変な臭いがする。\nはやく片付けよう。', ['……', '……', '……']],
['★1 木箱', 17, 180, 60, 60, 20, 20, ['沈黙'], '路地に放置された木箱。\nいろいろな不要物が入っている。\n思ったより重い。\n変な臭いがする。\nはやく片付けよう。', ['……', '……', '……']],
['★1 空きビン', 18, 120, 65, 20, 20, 20, ['沈黙'], '路地に放置されたビン。\n思ったより重い。\n変な臭いがする。\nはやく片付けよう。\nリサイクルできる。', ['……', '……', '……']],
[],[],
[],[],[],[],[],[],[],[],[],[],
[],[],[],[],[],[],[],[],[],[],
[],[],[],[],[],[],[],[],[],
['★0 雑草', 50, 60, 70, 20, 10, 10, ['沈黙'], 'どこにでも生えてくる雑草だ。\n雑草だけにすぐ伸びる。\n草採りをしよう。', ['(サワサワ)…', '(そよそよ)…', '……']],
['★1 薬草', 51, 100, 80, 15, 10, 10, ['沈黙'], 'ポーションの材料になる薬草だ。\n薬草も強くすぐ伸びる。\n草採りをしよう。', ['(ザワザワ)…', '(ゆらゆら)…', '……']],
[],[],[],[],[],[],[],[],
['★5 グリーン・オーガ', 60, 250, 80, 40, 40, 10, ['咆哮'], '中級モンスター大鬼だ。\n防御力やHPが高くなかなか手ごわい。', ['ウオオオオオ', 'グォオオ', 'グアアア']],
['★3 フォレスト・ウルフ', 61, 150, 70, 10, 30, 10, ['咆哮'], '魔獣の一種、狼だ。\n攻撃力が高くなかなか手ごわい。', ['ワオーン', 'キャンキャン', 'グルルル']],
['★2 ホーン・ディア', 62, 100, 60, 10, 10, 40, ['回避'], '魔獣の一種、鹿だ。\n回避能力が高くなかなか手ごわい。', ['キャン', 'キャンキャン', 'キャンッ']],
['★4 イビル・ベア', 63, 200, 100, 30, 100, 10, ['必中'], '魔獣の一種、熊だ。\n巨体による強力な攻撃力だ。', ['グワアア', 'ウオオオオ', 'オオオオ']],
['★1 ブルー・スライム', 64, 90, 60, 30, 20, 50, ['回避'], '初級モンスターだ。\n小さく回避力が高い。\nあらゆる場所に住んでいる。', ['ピュピュ', 'ミュムム', 'ポムポム']],
['★2 グラス・ラビット', 65, 140, 70, 10, 30, 30, ['回避'], '魔獣の一種、兎だ。\n小さいわりに攻撃力もある。\n草原に多く生息している。', ['ピチュ', 'ピッピッ', 'ピィィ']],
['★3 ポイズン・スネーク', 66, 210, 85, 10, 35, 20, ['巻きつく'], '魔獣の一種、蛇だ。\nその巨体は圧巻だ。\n森林に多く生息している。', ['ギャア', 'グギャ', 'ギイイ']],
['★3 ゴースト', 67, 150, 75, 10, 35, 20, [''], 'アンデッドの一種、幽霊。\nアンデッドの森に生息する。', ['(シューン)', '(ぽわぽわ)', '(シュッシュ)']],
['★3 ジャック・オ。ランタン', 68, 160, 70, 20, 35, 20, [''], 'アンデッドの一種、カボチャのお化け。\nその巨体は圧巻だ。\nアンデッドの森に生息する。', ['クワァ', 'カカカ', 'ワッハハ']],
['★4 マミー', 69, 170, 75, 15, 35, 20, [''], 'アンデッドの一種、ミイラ。\n包帯巻きの死体。\nアンデッドの森に生息する。', ['', 'グギャ', 'ギイイ']],
['★4 スケルトン', 70, 180, 90, 10, 35, 20, [''], 'アンデッドの一種、骸骨(がいこつ)。\nアンデッドの森に生息する。', ['ガガガガ', 'ギャギャ', 'カタカタカタ']],
['★5 サンタ・クロース', 71, 250, 100, 30, 40, 20, ['2回攻撃'], 'クリスマスに発生する。\n闇に落ちたサンタ。\nクリスマス箱を持ってくる。', ['ひゃほううう', 'メリー、クリスマス', 'いい子にしていたかな?']],
['★4 ジンジャー・ブレッドマン', 72, 210, 90, 20, 35, 20, [''], 'クリスマスに発生する。\n人型のクッキーだ。', ['美味しいよ', '甘いよ', '食べないでぇ']],
['★4 スノーマン', 73, 220, 80, 20, 40, 30, [''], '雪ダルマ。\n冬になるとやってくる。\n寒い、寒いよう。', ['ほっほっほー', 'ひっひっひー', 'らっらっらー']],
];
const battle_map_cards = [
['1-1.エルナ邸の裏庭(1)', ['薬草', 51],['雑草A', 50], ['雑草B', 50], ['雑草C', 50]],
['1-2.エルナ邸の裏庭(2)', ['薬草A', 51], ['薬草B', 51], ['雑草A', 50], ['雑草B', 50]],
['1-3.エルナ邸の裏庭(3)', ['エルナ', 2], ['薬草A', 51], ['薬草B', 51], ['薬草C', 51]],
['2-1.サーナ捜索(1)', ['木箱', 17], ['ゴミ袋A', 16], ['ゴミ袋B', 16], ['雑草', 50]],
['2-2.サーナ捜索(2)', ['木箱A', 17], ['木箱B', 17], ['ゴミ袋', 16], ['空きビン', 18]],
['2-3.サーナ捜索(3)', ['サーナ', 3], ['木箱', 17], ['ゴミ袋', 16], ['空きビン', 18]],
['3-1.裏路地(1)', ['スリ男子', 10], ['木箱', 17], ['ゴミ袋', 16], ['空きビン', 18]],
['3-2.裏路地(2)', ['スリ男子', 10], ['スリ女子', 11], ['茶犬', 7], ['白犬', 8]],
['3-3.裏路地(3)', ['スリ男', 12], ['スリ男子', 10], ['スリ女子', 11], ['白犬', 8]],
['4-1.草原探索(1)', ['スライムA', 64], ['スライムB', 64], ['スライムC', 64], ['スライムD', 64]],
['4-2.草原探索(2)', ['ラビットA', 65], ['ラビットB', 65], ['スライムA', 64], ['スライムB', 64]],
['4-3.草原探索(3)', ['ウルフ', 61], ['ラビットA', 65], ['ラビットB', 65], ['スライム', 64]],
['5-1.森探索(1)', ['ディアA', 62], ['ディアB', 62], ['ディアC', 62], ['ディアD', 62]],
['5-2.森探索(2)', ['ウルフA', 61], ['ウルフB', 61], ['ディアA', 62], ['ディアB', 62]],
['5-3.森探索(3)', ['オーガ', 60], ['ウルフA', 61], ['ウルフB', 61], ['ウルフC', 61]],
['6-1.ギルドの訓練', ['カカシA', 13], ['カカシB', 13], ['的A', 14], ['的B', 14]],
['6-2.ギルドの模擬戦', ['ミーナ', 15], ['カカシA', 13], ['カカシB', 13], ['的', 14]],
['7-1.アンデッドの森(1)', ['ゴースト', 67], ['ジャック', 68], ['マミー', 69], ['スネーク', 66]],
['7-2.アンデッドの森(2)', ['スケルトン', 70], ['ゴースト', 67], ['マミー', 69], ['ベア', 63]],
['7-3.ドッペルゲンガーの森', ['Dマリア', 1], ['Dエルナ', 2], ['Dサーナ', 3], ['ベア', 63]],
['8.クリスマス(終)', ['サンタ', 71], ['ディア', 62], ['ブレッドマン', 72], ['スノーマン', 73]],
];
const battle_map_chat = [
/*'1-1.エルナ邸の裏庭(1)',*/ ['./img/end_1_1.png', 'ここはエアイズ王国冒険者の国だ。\n私は「マリア」冒険者の剣士だよ。\nエルナちゃんちの裏庭の雑草抜きに\n参加した。\n中には薬草も生えている。\nちゃんと仕事ができたら冒険者の\nことも手伝ってくれるって。'],
/*'1-2.エルナ邸の裏庭(2)',*/ [null, '思ったより雑草が多い。\n薬草は薬草で分けて採取していく。\nエルナお嬢様のおうちは豪邸で\n裏庭もけっこうな広さだ。\nなかなかの重労働だ。\nはやくエルナちゃんと仲良くしたい。'],
/*'1-3.エルナ邸の裏庭(3)',*/ ['./img/end_1_3.png', '魔法使いのエルナちゃんが仲間に\nなった!\nこれで猫ちゃん以外一人のときより\n多くの仕事ができる。\n\nマリア「よろしく、エルナちゃん」\nエルナ「よろしくお願いします」'],
/*'2-1.サーナ捜索(1)',*/ [null, '猫獣人のポーター、サーナちゃんを\n王都のストリートで探している。\nなかなか見つからない\nそこの猫ちゃん知らない?\nそれにしてもゴミでいっぱいだ。\n少しは片付けないと。'],
/*'2-2.サーナ捜索(2)',*/ [null, 'ストリートには猫ちゃんワンちゃんが\nたくさん住んでいる。\nワンちゃんはちょっと怖い。\nゴミばっかりで大変だ。\nサーナちゃんはどこかな?\n\nエルナ「サーナ、どこですか?」\nマリア「サーナちゃーん」'],
/*'2-3.サーナ捜索(3)',*/ ['./img/end_2_3.png', 'ついにストリートでサーナちゃんを\n発見した。\n仲間に加わったよ。\n\nマリア「サーナちゃんもよろしく」\nサーナ「よろしくにゃ!」'],
/*'3-1.王都裏路地(1)',*/ [null, '裏路地を探索している。\nこの辺りは治安が悪いようだ。\nよくよく注意しよう。\n町の警備も冒険者の仕事だ。\n\nマリア「悪い子はいないかな」'],
/*'3-2.王都裏路地(2)',*/ [null, 'スリの子供たちをよく見る。\n彼らはお腹を空かせている。\n背に腹は代えられぬ。\nでもダメなものはダメ。\n\nサーナ「めっですにゃ、めっ」'],
/*'3-3.王都裏路地(3)',*/ ['./img/end_3_3.png', 'スリを指導する男を発見。\n厳重注意をした。\n少しは治安がよくなればいいけれど。\n警備の仕事はひとまず終わり。\nお肉を食べに行こう。\nお肉お肉……。\n\nマリア「はやく、はやく」'],
/*'4-1.草原探索(1)',*/ [null, '三人揃ったところで、まずは\n草原探索をする。\nスライムがたくさんいるね。\nすばしっこくて少し苦戦したかも。\nスライムは最初の敵として有名だ。'],
/*'4-2.草原探索(2)',*/ [null, '草原にはラビットも出てくる。\n白いウサギさんだ。\nお肉が美味しいよ。\nシチューにすると絶品だね。\nじゅるり……。'],
/*'4-3.草原探索(3)',*/ ['./img/end_4_3.png', '草原では稀にウルフもでる。\n攻撃力が強いから注意だよ。\n彼らは普段は森にいるんだ。\n町中の露店ではウルフ肉の串焼き\nなんかも売ってるね。'],
/*'5-1.西の森探索(1)',*/ [null, '西の森でディアの群れと遭遇。\nキノコや薬草などもたくさん生えて\nいるよ。\n危険な魔物もいるんだ。\n森探索でも注意しよう。'],
/*'5-2.西の森探索(2)',*/ [null, '西の森でウルフとディアに遭遇。\nちょっと敵も強くなってきた。\n気合を入れて進もう。'],
/*'5-3.西の森探索(3)',*/ ['./img/end_5_3.png', '西の森のボス「オーガ」と戦闘。\n怖い顔をしているね。\n体力が多くてびっくり。\n倒すことができてよかった。\nアリス姫も一緒に活動してくれる。'],
/*'6-1.ギルドの訓練',*/ [null, '冒険者ギルドで訓練をした。\nカカシと的を相手に戦闘だ。\n設置物だけど練習にはなる。\nいい汗をかいた。\nあとでお肉を食べて飲み食いしよう。'],
/*'6-2.ギルドの模擬戦',*/ ['./img/end_6_2.png', '冒険者ギルドで模擬戦をした。\n受付嬢のミーナさんが相手をして\nくれた。\nとても強くてびっくりだ。\nなんとか勝てたからよかった。\nこの人には逆らわないようにしよう。\nさぁ今度こそお肉だお肉。'],
/*'7-1.アンデッドの森',*/ [null, 'アンデッドの森で探索だ。\nなんだか怪しい雰囲気がしている。\n怖いモンスターは早く倒そう。'],
/*'7-2.アンデッドの森',*/ [null, 'ハロウィンは楽しいけど、\nお化けは怖いよね。\nアンデッドの森を抜けて\nさらに奥へ進もう。'],
/*'7-3.ドッペルゲンガーの森',*/ [null, '私たちの「ドッペルゲンガー」を\n倒した。\nそろそろ潮時だね。町へ戻ろう。'],
/*'8.クリスマス(終)',*/ ['./img/end.png', 'メリー、クリスマス!!\n\nCongratulations!!\nおめでとうございます。\n第一章はこれでおしまいです。\n継続すると第一話に戻ります。'],
];
let battele_data = {
teki: [],
mikata: []
};
const items_data = [
['★3 記念コイン', 58, ['なし', 0], 'クリア記念コイン。\nおめでとうございます。\nなにかいいことがありそう。\nヨハン16世即位記念金貨。'],
['★0 雑草', 50, ['回復', 40], 'HPを40回復する。\n戦闘不能時には効果がない。\nその辺に生えている葉っぱだ。'],
['★1 薬草', 51, ['回復', 80], 'HPを80回復する。\n戦闘不能時には効果がない。\n少し苦い葉っぱ。煎じて飲む。'],
['★2 低級ポーション', 52, ['回復', 120], 'HPを120回復する。\n戦闘不能時には効果がない。\n薬草を精製したもの。'],
['★3 中級ポーション', 53, ['回復', 160], 'HPを160回復する。\n戦闘不能時には効果がない。\n薬草をさらに精製したもの。'],
['★4 上級ポーション', 54, ['回復', 200], 'HPを200回復する。\n戦闘不能時には効果がない。\n特別な薬草を精製したもの。'],
['★2 巻物【雷】', 55, ['全体攻撃', 40], '40固定全体ダメージ。\n神の怒り雷撃を撃つ。\n「サンダー・バースト」'],
['★3 巻物【氷】', 56, ['全体攻撃', 80], '80固定全体ダメージ。\n絶対零度の氷結攻撃。\n「アイス・ストーム」'],
['★4 巻物【火】', 57, ['全体攻撃', 120], '120固定全体ダメージ。\n紅蓮の炎で焼き尽くす。\n「フレイム・インフェルノ」'],
['★1 リンゴ', 40, ['回復', 60], 'HPを60回復する。\n赤く熟しているリンゴ。\n美味しそうな、いい匂い。'],
['★5 黄金リンゴ', 41, ['蘇生', 100], 'HPを100回復する。\n戦闘不能から復帰する。\n見た目は普通だが珍しい黄金のリンゴ。'],
['★5 クリスマス箱', 42, ['蘇生', 120], 'HPを120回復する。\n戦闘不能から復帰する。\nメリー、クリスマス。\nクリスマス・ボックスだ。\nサンタさんからのプレゼント。'],
];
let click_on = -1;
let click_off = -1;
let click_x = 0;
let click_y = 0;
let seen_select = 0;
let sprites = [];
function draw() {
background(240);
fill(0);
if (mouse.presses()) {
if (0 <= mouse.x && mouse.x < width && 0 <= mouse.y && mouse.y < height) {
if (-1 < click_off) {
click_on = 0;
click_off = -1;
click_x = mouse.x;
click_y = mouse.y;
}
}
} else {
click_off++;
if (0 <= click_on) {
click_off = 0;
click_x = -1;
click_y = -1;
}
}
if (seen_select === 0) {
if (0 < click_on && 59 <= click_on) {
seen_select = 1;
}
draw_logo();
} else if (seen_select === 1) {
if (0 < click_on && 59 <= click_on) {
seen_select = 2;
setup_map();
}
draw_title();
} else if (seen_select === 2) {
draw_battle();
}
if (0 <= click_on) {
click_on++;
if (60 <= click_on) {
click_on = -1;
click_x = -1;
click_y = -1;
}
}
fill(240);
strokeWeight(1);
rect(0, 0, width, 20);
rect(0, height - 20, width, 20);
strokeWeight(0);
fill(0);
textSize(12);
textAlign(LEFT);
text('エアイズ王国:カードバトル v0.09.20240603', 30, 14);
textAlign(CENTER);
text('copyright 2023 syuribox, Aipictors', width / 2, height - 8);
}
let logo_count = 0;
let img_logo;
function draw_logo() {
background(0);
logo_count++;
const unit = 255;
if (logo_count <= unit / 2) {
if (logo_count == 1) {
img_logo = loadImage('./img/sd_maria.png');
}
fill(logo_count * 2);
textSize(20);
textAlign(CENTER);
text('syuribox', width / 2, height / 2 - 30);
} else if (logo_count <= unit) {
} else if (logo_count <= unit * 3 / 2) {
let d = (logo_count - unit) * 2;
let e = parseInt(Math.min(255, d));
fill(e);
textSize(20);
text('by Aipictors', width / 2, height / 2 + 30);
} else if (logo_count <= unit * 3 / 2 + 60) {
} else {
image(img_logo, (width / 2) - 100, (height / 2) - 100 - 50, 200, 200, 0, 0, img_logo.width, img_logo.height);
// image(img_logo, 100, 100, 200, 200, 0, 0, img_logo.width, img_logo.height);
fill(255);
textSize(15);
if (logo_count <= unit * 3 / 2 + 90) {
text('please click ', width / 2, height / 2 + 100);
} else if (logo_count <= unit * 3 / 2 + 120) {
text('please click. ', width / 2, height / 2 + 100);
} else if (logo_count <= unit * 3 / 2 + 150) {
text('please click.. ', width / 2, height / 2 + 100);
} else if (logo_count <= unit * 3 / 2 + 180) {
text('please click...', width / 2, height / 2 + 100);
} else {
logo_count = unit * 3 / 2 + 60;
}
}
}
let set_music = false;
let draw_title_count = 0;
function draw_title() {
if (!set_music) {
pre_song = 1;
song[pre_song].loop();
set_music = true;
}
textSize(35);
textAlign(CENTER);
let pos = 0;
draw_title_count++;
const move = 880;
const t = draw_title_count / 8;
if (t < move) {
pos = t;
} else if (t < move*2) {
pos = move - (t - move);
} else {
draw_title_count = 0;
}
const height_per = height / img_title.height;
image(img_title, 0, 0, width, height, pos, 0, img_title.width * height_per, img_title.height, CONTAIN);
const w = width / 2;
const h = height / 2;
fill(0);
stroke(255);
strokeWeight(6);
strokeJoin(ROUND);
const title_text = 'エアイズ王国 \n :カードバトル';
fill(0);
text(title_text, w, h);
textSize(18);
strokeWeight(3);
text('[新規開始⇒⇒⇒]', width / 2, height - 120);
text('※データは保存されません。', width / 2, height - 120 + 20);
strokeWeight(0);
stroke(0);
}
let mikata_data = ['', ['マリア', 1], ['黒猫', 4], ['白猫', 5], ['トラ猫', 6]];
let items = [[2, 3], [6, 1], [8, 1]];
let battle_map = 0;
let battle_mode = 0;
let battle_count = 0;
let battle_count2 = 0;
let turn_mode = true;
let effect_on = -1;
let effect_x = 0;
let effect_y = 0;
let hit_damages = [];
let attacker_old = -1
let att_count = 0;
let is_win = false;
let battle_text = '';
let item_scroll = 0;
let item_use_index = -1;
let item_mode = 0;
let mode_card_index = -1;
let pre_song = -1;
function setup_map() {
battle_mode = 0;
battle_count = 0;
turn_mode = true;
effect_on = -1;
effect_x = 0;
effect_y = 0;
hit_damages = [];
attacker_old = -1;
att_count = 0;
is_win = false;
battle_text = '';
item_scroll = 0;
item_use_index = -1;
item_mode = 0;
mode_card_index = -1;
let load_char = function (array) {
const name = array[0];
const cardid = array[1];
return {
name: name,
imgid: card_base[cardid][1],
max_hp: card_base[cardid][2],
hp: card_base[cardid][2],
attack: card_base[cardid][3],
def: card_base[cardid][4],
hit: card_base[cardid][5],
agi: card_base[cardid][6],
skill: card_base[cardid][7],
add_y: 0,
org: cardid
};
}
let b = battle_map_cards[battle_map];
battele_data.teki = [load_char(b[1]), load_char(b[2]), load_char(b[3]), load_char(b[4])];
let m = mikata_data;
battele_data.mikata = [load_char(m[1]), load_char(m[2]), load_char(m[3]), load_char(m[4])];
img_bg = loadImage(bgimgs[battle_map][1]);
if (0 < pre_song) {
song[pre_song].stop();
}
pre_song = bgimgs[battle_map][0];
song[pre_song].loop();
if (battle_map_chat[battle_map][0] != null){
img_end = loadImage(battle_map_chat[battle_map][0]);
} else {
img_end = null;
}
}
function draw_battle() {
let d = battele_data;
let if_rect = function (x, y, width, height) {
return (x <= click_x && click_x < x + width && y <= click_y && click_y < y + height);
}
image(img_bg, 0, 0, width, height);
textSize(20);
textAlign(LEFT);
fill(0);
text('■' + battle_map_cards[battle_map][0], 10, 40);
if (battle_mode != 100) {
textSize(15);
let draw_battele_card = function (card, x, y, hp) {
const y_ = y + card.add_y;
const size = (width - 20 - 2 * 3) / 4;
textAlign(CENTER);
text(card.name, x + size / 2, y);
textAlign(LEFT);
if (card.hp <= 0) {
fill('red');
} else {
fill(0);
}
textSize(15);
text('' + card.hp + '/' + card.max_hp, x, y + 20);
fill(0);
image(img_temp[card.imgid], x, y_ + 30, size, size);
if (battle_mode == 0) {
if (if_rect(x - 15, y_ + 30, size, size)) {
mode_card_index = card.org;
item_use_index = card.org;
battle_mode = 7;
click_on = -1;
click_x = -1;
click_y = -1;
}
}
}
for (let i = 0; i < 4; i++) {
let x_ = 10 + ((width - 20) / 4) * i;
draw_battele_card(d.teki[i], x_, 60);
draw_battele_card(d.mikata[i], x_, 200);
}
}
if (battle_mode == 0) {
textSize(16);
textAlign(CENTER);
fill(color(150, 170, 255));
strokeWeight(1);
const bw = ((width - 30) / 2);
const bh = 45;
const top1 = 360;
const left2 = 10 + bw + 10;
const top2 = top1 + bh + 5;
rect(10, top1, bw, bh);
rect(left2, top1, bw, bh);
fill(color(150, 170, 255));
rect(10, top2, bw, bh);
fill(color(150, 170, 200));
// rect(left2, top2, bw, bh);
strokeWeight(0);
fill(50);
text('[戦う]', width / 4, 385);
text('[オート]', width / 4 * 3, 385);
text('[アイテム]', width / 4, 435);
// text('[逃げる(未)]', width / 4 * 3, 570);
const w = (width - 60) / 2;
const h = 45;
if (if_rect(10, top1, w, h)) {
battle_mode = 1;
battle_count2 = -1;
}
if (if_rect(left2, top1, w, h)) {
battle_mode = 2;
}
if (if_rect(10, top2, w, h)) {
click_on = -1;
click_x = -1;
click_y = -1;
battle_mode = 4;
}
if (if_rect(left2, top2, w, h)) {
// battle_mode = 5;
}
}
if (battle_mode == 99) {
if (0 == battle_count) {
if (0 < pre_song) {
song[pre_song].stop();
}
if (is_win) {
pre_song = 5; // you_win
song[pre_song].loop();
} else {
pre_song = -1;
}
}
if (0 <= battle_count) {
battle_count++;
}
if (is_win && battle_count == 60) {
if (reward[battle_map][1] == -1) {
let z = reward[battle_map][2];
let char_name = z[0];
let card_idx = z[1];
let char_idx = z[2];
if (mikata_data[char_idx][1] != card_idx) {
mikata_data[char_idx] = [char_name, card_idx];
item_use_index = card_idx;
mode_card_index = card_idx;
battle_mode = 8;
} else {
let item_index = reward[battle_map][3];
add_item(item_index);
item_use_index = item_index;
mode_card_index = items_data[item_index][1];
battle_mode = 9;
}
} else if (reward[battle_map][1] == -2) {
let item_index = random(reward[battle_map][2]);
add_item(item_index);
item_use_index = item_index;
mode_card_index = items_data[item_index][1];
battle_mode = 9;
} else {
let item_index = reward[battle_map][1];
add_item(item_index);
item_use_index = item_index;
mode_card_index = items_data[item_index][1];
battle_mode = 9;
}
}
if (60 < battle_count) {
battle_count = 9999;
}
if (battle_count == 9999) {
textSize(20);
textAlign(CENTER);
fill(color(150, 170, 255));
strokeWeight(1);
rect(30, 370, width - 60, 70);
strokeWeight(0);
fill(50);
text(is_win ? '[次へ]' : '[再戦]', width / 2, 410);
if (if_rect(30, 370, width - 60, 70)) {
click_on = -1;
click_x = -1;
click_y = -1;
if (is_win) {
if (0 < pre_song) {
song[pre_song].stop();
}
pre_song = bgimgs[battle_map][0];
song[pre_song].loop();
battle_mode = 100;
}else{
battle_mode = 0;
setup_map();
}
battle_count = 0;
}
}
} else if (battle_mode == 100) {
if (battle_count < 30) {
battle_count++;
} else {
if (0 <= click_on) {
battle_map++;
if (battle_map == battle_map_cards.length) { // 最後の面
battle_map = 0; // とりあえずループ
}
battle_mode = 0;
setup_map();
}
}
}
if (battle_mode == 1 || battle_mode == 2) {
const turn_time = 60;
let next = battle_count % turn_time;
battle_count++;
if (battle_mode == 1 && next == 0) {
if (battle_count2 == -1) {
battle_count2 = 0;
} else if (!turn_mode && battle_count2 == 0) {
battle_count2 = 1;
} else if (turn_mode && battle_count2 == 1) {
battle_mode = 0;
next = -1;
}
}
if (next == 0) {
let have_skill = function (skill_list, name) {
for (let i = 0; i < skill_list.length; i++) {
if (skill_list[i] == name) {
return true;
}
}
return false;
}
let seme = turn_mode ? d.mikata : d.teki;
let uke = turn_mode ? d.teki : d.mikata;
let attacker = attacker_old;
if (attacker == -1 || att_count == 0) {
attacker = parseInt(random(0, 4));
att_count = 1;
if (have_skill(seme[attacker].skill, '2回攻撃')) {
att_count = 2;
}
}
while (seme[attacker].hp <= 0) {
attacker = parseInt(random(0, 4));
if (have_skill(seme[attacker].skill, '2回攻撃')) {
att_count = 2;
}
}
let kougeki = function () {
let target = parseInt(random(0, 4));
while (uke[target].hp <= 0) {
target = parseInt(random(0, 4));
}
let a = seme[attacker];
let t = uke[target];
a.add_y = -10;
t.add_y = 10;
effect_on = 0;
effect_x = 10 + (target + 1) * ((width - 20 - 6) / 4);
effect_y = turn_mode ? 140 - 30 : 290 - 30;
let damage = parseInt(Math.max(5, a.attack - t.def));
let hit_base = 60 + (a.hit - t.agi);
let hit_per = Math.max(10, Math.min(95, hit_base));
let hit = parseInt(random(0, 100));
let text_;
let colors;
if (hit < hit_per) {
let hit_point = damage;
if (hit <= 5) {
// クリティカル
hit_point *= 2;
}
t.hp = parseInt(Math.max(0, t.hp - hit_point));
text_ = '-' + hit_point;
colors = 'red';
battle_text = a.name + 'の攻撃。\n';
battle_text += '「' + random(card_base[a.org][9]) + '」\n';
battle_text += t.name + 'に' + hit_point + 'のダメージ。\n';
if (t.hp <= 0) {
battle_text += t.name;
if (turn_mode) {
battle_text += 'を倒した。';
} else {
battle_text += 'は戦闘不能になった。';
}
}
} else {
text_ = 'miss';
colors = '#bbb';
battle_text = a.name + 'の攻撃。\n';
battle_text += '「' + random(card_base[a.org][9]) + '」\n';
battle_text += t.name + 'は回避した。\n';
}
let hit_anime = {
x: (15 + ((width - 20) / 4) * target),
y: turn_mode ? 140 : 290,
text: text_,
color: colors,
countdown: 55
};
hit_damages.push(hit_anime);
let seizon = false;
for (let i = 0; i < uke.length; i++) {
if (0 < uke[i].hp) {
seizon = true;
break;
}
}
if (seizon == false) {
return false;
}
return true;
}
if (kougeki()) {
attacker_old = attacker;
att_count--;
if (att_count == 0) {
turn_mode = !turn_mode;
}
} else {
is_win = turn_mode;
battle_mode = 99;
battle_count = 0;
}
} else if (next == turn_time - 1) {
battle_text = '';
for (let i = 0; i < 4; i++) {
d.teki[i].add_y = 0;
d.mikata[i].add_y = 0;
}
}
textSize(20);
textAlign(LEFT);
text(battle_text, 40, 350);
} else if (battle_mode == 4) {
// アイテム
const view_limit = 4;
if (item_mode == 0) {
for (let i = 0; i < view_limit + 3; i++) {
let text_str = ' ▲';
let count_str = '';
let index = -1;
let card_id = -1;
if (i == 0) {
if (item_scroll == 0) {
fill(color(150, 170, 200));
} else {
fill(color(150, 170, 255));
}
} else if (i == view_limit + 1) {
text_str = ' ▼ (' + (item_scroll + 1) + ')';
if ((item_scroll + 1) * view_limit < items.length) {
fill(color(150, 170, 255));
} else {
fill(color(150, 170, 200));
}
} else if (i == view_limit + 2) {
fill(color(150, 170, 255));
text_str = ' キャンセル';
} else {
let count = item_scroll * view_limit + i - 1;
if (count < items.length) {
fill(color(150, 170, 255));
index = items[count][0];
text_str = items_data[index][0];
count_str = '' + items[count][1];
card_id = items_data[index][1];
} else {
index = -1;
fill(color(150, 170, 200));
text_str = '';
}
}
let margin_x = 40;
let margin_y = 40;
let imgsize = 50;
let height = imgsize + 6;
let text_y = margin_x + height * i + height / 2
strokeWeight(1);
rect(margin_x, margin_y + height * i, width - margin_y * 2, height - 3);
strokeWeight(0);
fill(0);
textAlign(LEFT);
textSize(15);
text(text_str, margin_y + imgsize + 5, text_y);
textAlign(RIGHT);
text(count_str, width - margin_y - 5, text_y);
if (0 <= card_id) {
image(img_temp[card_id], margin_x + 3, margin_y + height * i + 2, imgsize, imgsize);
}
let mode_card_view = false;
let menu_index = -1;
if (if_rect(margin_x, margin_y + height * i + 2, imgsize, imgsize)) {
menu_index = i;
if (0 <= index) {
item_use_index = index;
mode_card_index = card_id;
mode_card_view = true;
}
} else if (if_rect(margin_x + imgsize + 4, margin_y + height * i, width - margin_y * 2, height)) {
menu_index = i;
if (0 <= index) {
item_use_index = index;
item_mode = 1; // アイテム選択
battle_count = 0;
}
}
if (menu_index == 0) {
if (0 < item_scroll) {
item_scroll--;
}
} else if (menu_index == view_limit + 1) {
if ((item_scroll + 1) * view_limit < items.length) {
item_scroll++;
}
} else if (menu_index == view_limit + 2) {
// キャンセル
battle_mode = 0;
item_scroll = 0;
item_use_index = -1;
item_mode == 0;
} else if (mode_card_view) {
battle_mode = 6;
click_on = -1;
click_x = -1;
click_y = -1;
}
}
} else if (item_mode == 1) {
battle_count++;
if (battle_count == 1) {
for (let i = 0; i < items.length; i++) {
if (items[i][0] == item_use_index) {
items[i][1]--;
if (items[i][1] <= 0) {
items.splice(i, 1);
break;
}
}
}
let item = items_data[item_use_index];
let is_teki = false;
let colors = 'green';
let text_ = '';
for (let target = 0; target < 4; target++) {
if (item[2][0] == '回復') {
text_ = '+' + item[2][1];
if (0 < d.mikata[target].hp) {
d.mikata[target].hp = parseInt(Math.min(d.mikata[target].max_hp, d.mikata[target].hp + item[2][1]));
} else {
continue;
}
} else if (item[2][0] == '蘇生') {
text_ = '+' + item[2][1];
d.mikata[target].hp = parseInt(Math.min(d.mikata[target].max_hp, d.mikata[target].hp + item[2][1]));
} else if (item[2][0] == '全体攻撃') {
is_teki = true;
colors = 'red';
text_ = '-' + item[2][1];
if (0 < d.teki[target].hp) {
d.teki[target].hp = parseInt(Math.max(0, d.teki[target].hp - item[2][1]));
} else {
continue;
}
} else {
break;
}
let hit_anime = {
x: (15 + ((width - 20) / 4) * target),
y: is_teki ? 140 : 290,
text: text_,
color: colors,
countdown: 55
};
hit_damages.push(hit_anime);
}
}
textSize(20);
textAlign(LEFT);
text(battle_text, 40, 350);
if (70 < battle_count) {
let hantei = function (turn_mode) {
let uke = turn_mode ? d.teki : d.mikata;
let seizon = false;
for (let i = 0; i < uke.length; i++) {
if (0 < uke[i].hp) {
seizon = true;
break;
}
}
return seizon;
}
if (false == hantei(true)) {
battle_mode = 99;
is_win = true;
} else if (false == hantei(false)) {
battle_mode = 99;
is_win = false;
} else {
battle_mode = 0;
}
battle_count = 0;
item_mode = 0;
}
}
} else if (6 <= battle_mode && battle_mode <= 9) {
// カード閲覧
if (mode_card_index < 0) {
if (battle_mode == 6) {
battle_mode = 4;
} else if (battle_mode == 7) {
battle_mode = 0;
} else {
battle_mode = 99;
}
} else {
let card_type = 0;
if (battle_mode == 6) {
card_type = 0;
} else if (battle_mode == 7) {
card_type = 1;
} else if (battle_mode == 8) {
card_type = 1;
} else if (battle_mode == 9) {
card_type = 0;
}
const base_h = height - 50;
const base_w = parseInt(base_h / 1.5);
const ratio = base_w / 640;
const base_x = (width - base_w) / 2;
const base_y = (height - base_h) / 2;
image(img_card[card_type], base_x, base_y, base_w, base_h);
image(img_temp[mode_card_index], base_x + 62 * ratio, base_y + 105 * ratio, 512 * ratio, 512 * ratio);
let title = '';
if (card_type == 0) {
title = items_data[item_use_index][0];
caption = items_data[item_use_index][3];
} else {
title = card_base[item_use_index][0];
caption = card_base[item_use_index][8];
}
fill(0);
textAlign(LEFT);
textSize(13);
text(title, base_x + 70 * ratio, base_y + 67 * ratio);
textSize(12);
text(caption, base_x + 70 * ratio, base_y + 668 * ratio);
}
if (0 <= click_on) {
if (battle_mode == 6) {
battle_mode = 4;
menu_index = -1;
mode_card_index = -1;
item_use_index = -1;
} else if (battle_mode == 7) {
battle_mode = 0;
} else {
battle_mode = 99;
}
}
} else if (battle_mode == 99) {
textSize(80);
textAlign(CENTER);
let text_win;
let text_fill;
if (is_win) {
text_fill = 'red';
text_win = 'WIN!';
} else {
text_fill = '#777';
text_win = 'LOSE!';
}
text_futi(text_win, width / 2, height / 2, text_fill, 0, 4);
} else if (battle_mode == 100) {
if (img_end != null) {
image(img_end, 0, (height / 2), width, height / 2, 0, 0, img_end.width, img_end.height, CONTAIN);
}
textSize(15);
textAlign(LEFT);
text_futi(battle_map_chat[battle_map][1], (width / 2) - 120, 85, 0, 255, 2);
}
draw_battle_splite();
}
function add_item(item_no) {
for (let i = 0; i < items.length; i++) {
if (items[i][0] == item_no) {
items[i][1]++;
return;
}
}
items.push([item_no, 1]);
}
function draw_battle_splite() {
if (effect_on === 0) {
new_damege_effect(0, effect_x, effect_y, 10);
}
if (effect_on === 2) {
new_damege_effect(1, effect_x, effect_y, 8);
}