diff --git a/chef-adventure/data/Map004.json b/chef-adventure/data/Map004.json index 6ad38b4b..e16a2e84 100644 --- a/chef-adventure/data/Map004.json +++ b/chef-adventure/data/Map004.json @@ -3,15 +3,15 @@ "data":[7616,7616,7616,7620,7654,2832,2816,2816,2816,2816,2840,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,8006,2832,2816,2816,2816,2816,2840,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7620,7654,8012,2832,2816,2816,2816,2816,2840,7656,7624,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,8006,2850,2817,2816,2816,2816,2816,2818,2852,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7650,7636,7636,7636,7617,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,8012,2832,2816,2816,2816,2816,2816,2816,2840,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,2851,2845,2824,2816,2816,2816,2816,2816,2840,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7650,7636,7636,7636,7636,7636,7617,7620,7644,7644,7644,7624,7616,7616,7616,7616,7616,7616,7616,7616,7640,2848,1624,2832,2816,2816,2816,2816,2820,2854,7656,7624,7616,7616,7650,7636,7636,7636,7636,7636,7617,7616,7616,7616,7620,7644,7644,7654,8002,8002,8002,7632,7616,7616,7616,7616,7616,7616,7616,7616,7640,2857,2838,2817,2816,2816,2816,2816,2840,1624,2858,7656,7624,7616,7632,7620,7644,7644,7644,7644,7644,7644,7644,7624,7640,8002,8002,8006,8008,8008,8008,7632,7616,7616,7616,7616,7616,7616,7616,7616,7618,7652,2856,2844,2824,2816,2816,2816,2818,2836,2819,2852,7656,7644,7656,7654,8002,8002,8002,8002,8002,8002,8002,7656,7654,8008,8008,8012,2859,2838,2852,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7618,7652,1624,2856,2824,2816,2820,2844,2844,2824,2818,2836,2852,8003,8006,8008,8008,8008,8008,8008,8008,8008,8003,8006,2850,2836,2852,1624,2832,2840,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7618,7636,7652,2856,2828,2854,7650,7652,2856,2844,2824,2840,8009,8012,2851,2849,2838,2836,2836,2836,2852,8009,8012,2832,2816,2818,2836,2817,2840,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7618,7652,2848,7650,7617,7618,7636,7652,2856,2846,2849,2849,2855,1624,2832,2816,2816,2816,2818,2837,2849,2829,2844,2844,2844,2844,2854,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,2848,7632,7616,7616,7616,7618,7636,7636,7636,7636,7636,7652,2856,2844,2844,2844,2844,2854,1624,2860,7650,7636,7636,7636,7636,7617,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,2860,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7618,7636,7636,7636,7636,7636,7636,7636,7636,7617,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7618,7636,7617,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,0,0,0,0,0,0,3576,3544,3536,3560,0,3024,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3552,3536,3560,0,3024,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3552,3540,3574,0,3048,3016,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3570,3537,3560,0,0,0,3024,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3576,3544,3560,0,0,0,3024,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3552,3560,0,0,0,3024,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3570,3537,3560,0,0,0,3048,3016,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3579,3545,3536,3560,0,0,0,0,3048,3016,3012,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3576,3544,3542,3581,0,0,0,0,3048,3046,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3576,3561,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3568,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3568,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3568,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3580,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,72,0,0,0,0,0,0,56,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,156,0,0,0,0,0,0,0,0,0,0,0,0,56,48,0,0,0,0,0,0,0,56,0,64,0,0,0,0,0,155,0,0,0,0,0,163,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,72,0,0,0,16,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,48,0,0,0,0,0,0,72,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], "events":[ null, -{"id":1,"name":"story: introduction","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":223,"indent":0,"parameters":[[-68,-68,0,68],1,true]},{"code":102,"indent":0,"parameters":[["See intro","Skip it."],1,0,2,0]},{"code":402,"indent":0,"parameters":[0,"See intro"]},{"code":205,"indent":1,"parameters":[-1,{"list":[{"code":4,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":1,"parameters":[{"code":4,"indent":null}]},{"code":121,"indent":1,"parameters":[1,1,0]},{"code":205,"indent":1,"parameters":[8,{"list":[{"code":2,"indent":null},{"code":19,"indent":null},{"code":0}],"repeat":false,"skippable":true,"wait":true}]},{"code":505,"indent":1,"parameters":[{"code":2,"indent":null}]},{"code":505,"indent":1,"parameters":[{"code":19,"indent":null}]},{"code":230,"indent":1,"parameters":[30]},{"code":101,"indent":1,"parameters":["face_je",1,0,0,"\\N[1]"]},{"code":401,"indent":1,"parameters":["\\pop[a1]We finally made it!"]},{"code":101,"indent":1,"parameters":["face_rp",1,0,2,"\\N[2]"]},{"code":401,"indent":1,"parameters":["\\pop[e8]Phew,\\. it's about time."]},{"code":101,"indent":1,"parameters":["face_rp",4,0,2,"\\N[2]"]},{"code":401,"indent":1,"parameters":["\\pop[e8]I didn't think it'd be so dark."]},{"code":101,"indent":1,"parameters":["face_je",3,0,0,"\\N[1]"]},{"code":401,"indent":1,"parameters":["\\pop[a1]Yeah\\..\\..\\.."]},{"code":101,"indent":1,"parameters":["face_je",1,0,0,"\\N[1]"]},{"code":401,"indent":1,"parameters":["\\pop[a1]But that \\Item[241] we need for the \\Item[518]"]},{"code":401,"indent":1,"parameters":["is within our grasp!"]},{"code":101,"indent":1,"parameters":["face_rp",0,0,2,"\\N[2]"]},{"code":401,"indent":1,"parameters":["\\pop[e8]I hope this is worth it."]},{"code":101,"indent":1,"parameters":["face_je",1,0,0,"\\N[1]"]},{"code":401,"indent":1,"parameters":["\\pop[a1]No worries!\\. It'll be great,\\. I promise!\\.\\."]},{"code":401,"indent":1,"parameters":["Now let's get started.\\."]},{"code":401,"indent":1,"parameters":["With the entrance behind us,\\. the only way forward is\\..\\..\\.."]},{"code":401,"indent":1,"parameters":["forward!"]},{"code":101,"indent":1,"parameters":["face_je",7,0,0,"\\N[1]"]},{"code":401,"indent":1,"parameters":["\\pop[a1]Onward!"]},{"code":205,"indent":1,"parameters":[8,{"list":[{"code":3,"indent":null},{"code":16,"indent":null},{"code":0}],"repeat":false,"skippable":true,"wait":true}]},{"code":505,"indent":1,"parameters":[{"code":3,"indent":null}]},{"code":505,"indent":1,"parameters":[{"code":16,"indent":null}]},{"code":121,"indent":1,"parameters":[1,1,1]},{"code":0,"indent":1,"parameters":[]},{"code":402,"indent":0,"parameters":[1,"Skip it."]},{"code":0,"indent":1,"parameters":[]},{"code":404,"indent":0,"parameters":[]},{"code":108,"indent":0,"parameters":["unlock the first main story quest."]},{"code":357,"indent":0,"parameters":["j/omni/ext/J-OMNI-Quests","unlock-quests","Unlock Quest(s)",{"keys":"[\"main-000\"]"}]},{"code":657,"indent":0,"parameters":["keys = [\"main-000\"]"]},{"code":123,"indent":0,"parameters":["A",0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":3,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":true,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":7,"y":14}, +{"id":1,"name":"story: introduction","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":102,"indent":0,"parameters":[["See intro","Skip it."],1,0,2,0]},{"code":402,"indent":0,"parameters":[0,"See intro"]},{"code":205,"indent":1,"parameters":[-1,{"list":[{"code":4,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":1,"parameters":[{"code":4,"indent":null}]},{"code":121,"indent":1,"parameters":[1,1,0]},{"code":205,"indent":1,"parameters":[8,{"list":[{"code":2,"indent":null},{"code":19,"indent":null},{"code":0}],"repeat":false,"skippable":true,"wait":true}]},{"code":505,"indent":1,"parameters":[{"code":2,"indent":null}]},{"code":505,"indent":1,"parameters":[{"code":19,"indent":null}]},{"code":230,"indent":1,"parameters":[30]},{"code":101,"indent":1,"parameters":["face_je",1,0,0,"\\N[1]"]},{"code":401,"indent":1,"parameters":["\\pop[a1]We finally made it!"]},{"code":101,"indent":1,"parameters":["face_rp",1,0,2,"\\N[2]"]},{"code":401,"indent":1,"parameters":["\\pop[e8]Phew,\\. it's about time."]},{"code":101,"indent":1,"parameters":["face_rp",4,0,2,"\\N[2]"]},{"code":401,"indent":1,"parameters":["\\pop[e8]I didn't think it'd be so dark."]},{"code":101,"indent":1,"parameters":["face_je",3,0,0,"\\N[1]"]},{"code":401,"indent":1,"parameters":["\\pop[a1]Yeah\\..\\..\\.."]},{"code":101,"indent":1,"parameters":["face_je",1,0,0,"\\N[1]"]},{"code":401,"indent":1,"parameters":["\\pop[a1]But that \\Item[241] we need for the \\Item[518]"]},{"code":401,"indent":1,"parameters":["is within our grasp!"]},{"code":101,"indent":1,"parameters":["face_rp",0,0,2,"\\N[2]"]},{"code":401,"indent":1,"parameters":["\\pop[e8]I hope this is worth it."]},{"code":101,"indent":1,"parameters":["face_je",1,0,0,"\\N[1]"]},{"code":401,"indent":1,"parameters":["\\pop[a1]No worries!\\. It'll be great,\\. I promise!\\.\\."]},{"code":401,"indent":1,"parameters":["Now let's get started.\\."]},{"code":401,"indent":1,"parameters":["With the entrance behind us,\\. the only way forward is\\..\\..\\.."]},{"code":401,"indent":1,"parameters":["forward!"]},{"code":101,"indent":1,"parameters":["face_je",7,0,0,"\\N[1]"]},{"code":401,"indent":1,"parameters":["\\pop[a1]Onward!"]},{"code":205,"indent":1,"parameters":[8,{"list":[{"code":3,"indent":null},{"code":16,"indent":null},{"code":0}],"repeat":false,"skippable":true,"wait":true}]},{"code":505,"indent":1,"parameters":[{"code":3,"indent":null}]},{"code":505,"indent":1,"parameters":[{"code":16,"indent":null}]},{"code":121,"indent":1,"parameters":[1,1,1]},{"code":0,"indent":1,"parameters":[]},{"code":402,"indent":0,"parameters":[1,"Skip it."]},{"code":0,"indent":1,"parameters":[]},{"code":404,"indent":0,"parameters":[]},{"code":108,"indent":0,"parameters":["unlock the first main story quest."]},{"code":357,"indent":0,"parameters":["j/omni/ext/J-OMNI-Quests","unlock-quests","Unlock Quest(s)",{"keys":"[\"main-000\"]"}]},{"code":657,"indent":0,"parameters":["keys = [\"main-000\"]"]},{"code":123,"indent":0,"parameters":["A",0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":3,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":true,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":7,"y":14}, {"id":2,"name":"teleport to depths","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":4,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":23,"characterName":"","characterIndex":0,"direction":2,"pattern":0},"list":[{"code":201,"indent":0,"parameters":[0,15,5,5,2,0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":31,"y":8}, -{"id":3,"name":"teleport to outside","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":117,"indent":0,"parameters":[5]},{"code":242,"indent":0,"parameters":[2]},{"code":221,"indent":0,"parameters":[]},{"code":250,"indent":0,"parameters":[{"name":"Move1","volume":90,"pitch":100,"pan":0}]},{"code":129,"indent":0,"parameters":[2,0,false]},{"code":201,"indent":0,"parameters":[0,14,49,29,2,0]},{"code":230,"indent":0,"parameters":[90]},{"code":223,"indent":0,"parameters":[[0,0,0,0],1,true]},{"code":224,"indent":0,"parameters":[[255,255,255,170],30,false]},{"code":222,"indent":0,"parameters":[]},{"code":357,"indent":0,"parameters":["j/hud/J-HUD","showAllies","Show Allies",{}]},{"code":117,"indent":0,"parameters":[6]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":8,"y":13}, +{"id":3,"name":"teleport to outside","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":117,"indent":0,"parameters":[5]},{"code":242,"indent":0,"parameters":[2]},{"code":221,"indent":0,"parameters":[]},{"code":250,"indent":0,"parameters":[{"name":"Move1","volume":90,"pitch":100,"pan":0}]},{"code":129,"indent":0,"parameters":[2,0,false]},{"code":201,"indent":0,"parameters":[0,14,49,29,2,0]},{"code":230,"indent":0,"parameters":[90]},{"code":224,"indent":0,"parameters":[[255,255,255,170],30,false]},{"code":222,"indent":0,"parameters":[]},{"code":357,"indent":0,"parameters":["j/hud/J-HUD","showAllies","Show Allies",{}]},{"code":117,"indent":0,"parameters":[6]},{"code":123,"indent":0,"parameters":["A",0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":221,"indent":0,"parameters":[]},{"code":250,"indent":0,"parameters":[{"name":"Move1","volume":90,"pitch":100,"pan":0}]},{"code":201,"indent":0,"parameters":[0,14,49,29,2,0]},{"code":222,"indent":0,"parameters":[]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":8,"y":13}, {"id":4,"name":"torch","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":true,"image":{"tileId":0,"characterName":"!Other2","direction":2,"pattern":1,"characterIndex":7},"list":[{"code":108,"indent":0,"parameters":[""]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":2,"moveType":0,"priorityType":1,"stepAnime":true,"through":false,"trigger":0,"walkAnime":true}],"x":11,"y":4}, {"id":5,"name":"torch","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":true,"image":{"tileId":0,"characterName":"!Other2","direction":2,"pattern":1,"characterIndex":7},"list":[{"code":108,"indent":0,"parameters":[""]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":2,"moveType":0,"priorityType":1,"stepAnime":true,"through":false,"trigger":0,"walkAnime":true}],"x":4,"y":4}, {"id":6,"name":"torch","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":true,"image":{"tileId":0,"characterName":"!Other2","direction":2,"pattern":1,"characterIndex":7},"list":[{"code":108,"indent":0,"parameters":[""]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":2,"moveType":0,"priorityType":1,"stepAnime":true,"through":false,"trigger":0,"walkAnime":true}],"x":32,"y":11}, {"id":7,"name":"teleport to inner","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":108,"indent":0,"parameters":[""]},{"code":250,"indent":0,"parameters":[{"name":"Move1","volume":90,"pitch":100,"pan":0}]},{"code":201,"indent":0,"parameters":[0,5,8,33,8,0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":4,"y":0}, {"id":8,"name":"partner","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"chara_rp","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":4,"moveType":0,"priorityType":1,"stepAnime":false,"through":true,"trigger":0,"walkAnime":true}],"x":8,"y":10}, -{"id":9,"name":"don't leave yet","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":101,"indent":0,"parameters":["face_je",3,0,0,"\\N[1]"]},{"code":401,"indent":0,"parameters":["\\pop[a1]This is not where the gelatin is!"]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":4,"indent":null},{"code":4,"indent":null},{"code":4,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":4,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":4,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":4,"indent":null}]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":4,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":117,"indent":0,"parameters":[5]},{"code":101,"indent":0,"parameters":["face_je",4,0,0,"\\N[1]"]},{"code":401,"indent":0,"parameters":["\\pop[a1]Hey \\N[2],\\. where did you say that town was again?"]},{"code":101,"indent":0,"parameters":["face_rp",4,0,2,"\\N[2]"]},{"code":401,"indent":0,"parameters":["\\pop[a2]\\C[2]Just over to the West a ways\\C[0]."]},{"code":101,"indent":0,"parameters":["face_rp",1,0,2,"\\N[2]"]},{"code":401,"indent":0,"parameters":["\\pop[a2]We gotta be ready out here too,\\. there are tons of mindless"]},{"code":401,"indent":0,"parameters":["mobs to burn to a crisp!"]},{"code":101,"indent":0,"parameters":["face_je",7,0,0,"\\N[1]"]},{"code":401,"indent":0,"parameters":["\\pop[a1]Let's do this."]},{"code":250,"indent":0,"parameters":[{"name":"Darkness5","volume":50,"pitch":70,"pan":0}]},{"code":230,"indent":0,"parameters":[30]},{"code":213,"indent":0,"parameters":[-1,1,false]},{"code":230,"indent":0,"parameters":[60]},{"code":101,"indent":0,"parameters":["face_je",4,0,0,"\\N[1]"]},{"code":401,"indent":0,"parameters":["\\pop[a1]Wait,\\. what was that?!"]},{"code":101,"indent":0,"parameters":["face_rp",4,0,2,"\\N[2]"]},{"code":401,"indent":0,"parameters":["\\pop[a2]No idea,\\. \\N[1].\\."]},{"code":401,"indent":0,"parameters":["Sounded like some sort of... roar?\\."]},{"code":401,"indent":0,"parameters":["It came from back up there probably about two maps in."]},{"code":101,"indent":0,"parameters":["face_je",2,0,0,"\\N[1]"]},{"code":401,"indent":0,"parameters":["\\pop[a1]Unusually precise.\\|\\^"]},{"code":101,"indent":0,"parameters":["face_je",1,0,0,"\\N[1]"]},{"code":401,"indent":0,"parameters":["\\pop[a1]Maybe we should go check it out?"]},{"code":101,"indent":0,"parameters":["face_rp",1,0,2,"\\N[2]"]},{"code":401,"indent":0,"parameters":["\\pop[a2]Maybe some \\C[2]rare monster\\C[0] spawned?"]},{"code":101,"indent":0,"parameters":["face_rp",4,0,2,"\\N[2]"]},{"code":401,"indent":0,"parameters":["\\pop[a2]Let's be sure to save before we double back"]},{"code":401,"indent":0,"parameters":["if we do."]},{"code":212,"indent":0,"parameters":[10,121,true]},{"code":117,"indent":0,"parameters":[6]},{"code":123,"indent":0,"parameters":["A",0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":true,"switch1Id":4,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":8,"y":12}, +{"id":9,"name":"don't leave yet","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":101,"indent":0,"parameters":["face_je",3,0,0,"\\N[1]"]},{"code":401,"indent":0,"parameters":["\\pop[a1]This is not where the gelatin is!"]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":4,"indent":null},{"code":4,"indent":null},{"code":4,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":4,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":4,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":4,"indent":null}]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":4,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":117,"indent":0,"parameters":[5]},{"code":101,"indent":0,"parameters":["face_je",4,0,2,"\\N[1]"]},{"code":401,"indent":0,"parameters":["\\pop[a1]Hey \\N[2],\\. where did you say that town was again?"]},{"code":101,"indent":0,"parameters":["face_rp",4,0,0,"\\N[2]"]},{"code":401,"indent":0,"parameters":["\\pop[a2]\\C[2]Just over to the West a ways\\C[0]."]},{"code":101,"indent":0,"parameters":["face_rp",1,0,0,"\\N[2]"]},{"code":401,"indent":0,"parameters":["\\pop[a2]We gotta be ready out here too,\\. there are tons of mindless"]},{"code":401,"indent":0,"parameters":["mobs to burn to a crisp!"]},{"code":101,"indent":0,"parameters":["face_je",7,0,2,"\\N[1]"]},{"code":401,"indent":0,"parameters":["\\pop[a1]Let's do this."]},{"code":250,"indent":0,"parameters":[{"name":"Darkness5","volume":50,"pitch":70,"pan":0}]},{"code":230,"indent":0,"parameters":[30]},{"code":213,"indent":0,"parameters":[-1,1,false]},{"code":230,"indent":0,"parameters":[60]},{"code":101,"indent":0,"parameters":["face_je",4,0,2,"\\N[1]"]},{"code":401,"indent":0,"parameters":["\\pop[a1]Wait,\\. what was that?!"]},{"code":101,"indent":0,"parameters":["face_rp",4,0,0,"\\N[2]"]},{"code":401,"indent":0,"parameters":["\\pop[a2]No idea,\\. \\N[1].\\."]},{"code":401,"indent":0,"parameters":["Sounded like some sort of... roar?\\."]},{"code":401,"indent":0,"parameters":["It came from back up there probably about two maps in."]},{"code":101,"indent":0,"parameters":["face_je",2,0,2,"\\N[1]"]},{"code":401,"indent":0,"parameters":["\\pop[a1]Unusually precise.\\|\\^"]},{"code":101,"indent":0,"parameters":["face_je",1,0,2,"\\N[1]"]},{"code":401,"indent":0,"parameters":["\\pop[a1]Maybe we should go check it out?"]},{"code":101,"indent":0,"parameters":["face_rp",1,0,0,"\\N[2]"]},{"code":401,"indent":0,"parameters":["\\pop[a2]Maybe some \\C[2]rare monster\\C[0] spawned?"]},{"code":101,"indent":0,"parameters":["face_rp",4,0,0,"\\N[2]"]},{"code":401,"indent":0,"parameters":["\\pop[a2]Let's be sure to save before we double back"]},{"code":401,"indent":0,"parameters":["if we do."]},{"code":212,"indent":0,"parameters":[10,121,true]},{"code":117,"indent":0,"parameters":[6]},{"code":123,"indent":0,"parameters":["A",0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":true,"switch1Id":4,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":8,"y":12}, {"id":10,"name":"Save Platform","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":4,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"!SF_Door2","direction":2,"pattern":1,"characterIndex":7},"list":[{"code":108,"indent":0,"parameters":[""]},{"code":408,"indent":0,"parameters":[""]},{"code":408,"indent":0,"parameters":[""]},{"code":408,"indent":0,"parameters":[""]},{"code":117,"indent":0,"parameters":[4]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":5,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":3,"priorityType":0,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":4,"y":6}, {"id":11,"name":"torch","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":true,"image":{"tileId":0,"characterName":"!Other2","direction":2,"pattern":1,"characterIndex":7},"list":[{"code":108,"indent":0,"parameters":[""]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":2,"moveType":0,"priorityType":1,"stepAnime":true,"through":false,"trigger":0,"walkAnime":true}],"x":6,"y":9}, null, diff --git a/chef-adventure/data/Map005.json b/chef-adventure/data/Map005.json index a000fe9c..e2df6a5a 100644 --- a/chef-adventure/data/Map005.json +++ b/chef-adventure/data/Map005.json @@ -1,6 +1,6 @@ { -"autoplayBgm":true,"autoplayBgs":false,"battleback1Name":"","battleback2Name":"","bgm":{"name":"_DKC2_BramblesLikeBubbles","pan":0,"pitch":100,"volume":100},"bgs":{"name":"","pan":0,"pitch":100,"volume":90},"disableDashing":false,"displayName":"Aggressive Cavery","encounterList":[],"encounterStep":30,"height":35,"note":"\n","parallaxLoopX":false,"parallaxLoopY":false,"parallaxName":"","parallaxShow":true,"parallaxSx":0,"parallaxSy":0,"scrollType":0,"specifyBattleback":false,"tilesetId":14,"width":32, -"data":[7616,7616,7616,7616,7616,7616,7616,7640,2856,2824,2816,2840,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,1624,2832,2816,2840,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,2850,2817,2820,2854,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,2832,2816,2840,1624,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,2832,2816,2818,2852,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,2832,2820,2844,2841,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,2832,2840,1624,2848,7656,7644,7644,7644,7644,7644,7644,7624,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,2856,2846,2849,2847,2838,2836,2836,2836,2836,2836,2852,7656,7644,7624,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7618,7636,7636,7637,7661,2832,2816,2816,2816,2816,2816,2818,2836,2852,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7620,7644,7654,8006,2832,2816,2816,2816,2816,2816,2816,2816,2840,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,8002,8006,8012,2832,2816,2816,2816,2816,2816,2816,2816,2840,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,8008,8012,2850,2817,2816,2816,2816,2816,2816,2820,2844,2841,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7620,7654,2850,2836,2817,2816,2816,2816,2816,2816,2816,2840,1624,2848,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7620,7644,7644,7654,8006,2856,2824,2816,2816,2816,2816,2816,2816,2816,2818,2836,2842,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,8002,8002,8006,8012,1624,2832,2816,2816,2816,2816,2816,2816,2816,2816,2816,2840,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7620,7654,8008,8008,8012,2850,2836,2817,2816,2816,2816,2816,2816,2816,2816,2816,2820,2854,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7620,7644,7654,8006,2850,2836,2836,2817,2816,2816,2816,2816,2816,2816,2816,2820,2844,2824,2840,7650,7617,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,8002,8006,8012,2832,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2840,1624,2832,2840,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,8008,8012,2850,2821,2844,2844,2824,2816,2816,2820,2844,2824,2816,2816,2818,2836,2817,2840,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,2850,2836,2817,2840,7659,7653,2856,2824,2816,2840,1624,2832,2816,2816,2816,2816,2816,2840,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,2832,2816,2816,2840,8003,7657,7661,2832,2816,2818,2836,2817,2816,2816,2816,2816,2820,2854,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,2856,2844,2824,2840,8009,8003,8006,2832,2816,2816,2816,2816,2816,2816,2816,2816,2840,7650,7617,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7618,7652,1624,2832,2818,2852,8009,8012,2832,2816,2816,2816,2816,2816,2816,2816,2820,2854,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7618,7652,2832,2816,2818,2836,2836,2817,2816,2816,2820,2844,2844,2844,2828,2854,7650,7617,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,2856,2844,2844,2844,2844,2844,2828,2844,2854,7651,7649,7661,2848,7650,7617,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7618,7636,7637,7649,7649,7649,7661,2848,7659,7649,7655,8002,8006,2848,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7620,7654,8003,8002,8002,8006,2848,8003,8002,8002,8008,8012,2860,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,8006,8008,8008,8008,8012,2848,8009,8008,8012,7650,7636,7636,7617,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,8012,2850,2836,2852,1624,2833,2836,2852,7650,7617,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,2850,2817,2816,2818,2836,2817,2820,2854,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,2832,2816,2816,2816,2816,2816,2840,7650,7617,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,2832,2816,2816,2816,2816,2820,2854,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,2832,2816,2816,2816,2816,2840,7650,7617,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,2832,2816,2816,2816,2816,2840,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,2832,2816,2816,2816,2816,2840,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,0,0,0,0,0,0,0,0,0,0,0,0,3024,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,3024,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,3024,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,3024,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,3024,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,3024,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,3048,3036,3036,3036,3036,3036,3036,3016,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3048,3036,3016,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3024,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3024,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3024,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3024,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3024,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3024,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3024,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3024,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3042,3009,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3024,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3024,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3024,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3024,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3042,3009,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3024,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3042,3009,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,3578,0,0,0,0,0,0,3042,3009,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,3568,0,0,0,0,0,0,3024,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,3568,0,0,0,0,0,0,3024,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,3568,0,0,0,3042,3028,3028,3009,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,3568,0,0,3042,3009,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,3570,3556,3562,0,0,3024,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,3570,3537,3540,3574,0,3042,3009,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,3552,3540,3574,0,0,3024,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,3552,3560,0,0,3042,3009,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,3552,3560,0,0,3024,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,3570,3537,3538,3572,0,3024,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,72,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,72,72,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,72,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,56,72,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,72,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,155,0,0,0,0,0,0,0,56,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,72,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,163,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,56,0,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,72,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,64,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,64,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,72,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,72,56,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,56,0,0,48,0,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], +"autoplayBgm":true,"autoplayBgs":false,"battleback1Name":"","battleback2Name":"","bgm":{"name":"_DKC2_BramblesLikeBubbles","pan":0,"pitch":100,"volume":100},"bgs":{"name":"","pan":0,"pitch":100,"volume":90},"disableDashing":false,"displayName":"Aggressive Cavery","encounterList":[],"encounterStep":30,"height":35,"note":"\n","parallaxLoopX":false,"parallaxLoopY":false,"parallaxName":"","parallaxShow":true,"parallaxSx":0,"parallaxSy":0,"scrollType":0,"specifyBattleback":false,"tilesetId":14,"width":40, +"data":[7616,7616,7616,7616,7616,7616,7616,7640,2856,2824,2816,2840,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,1624,2832,2816,2840,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,2850,2817,2820,2854,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,2832,2816,2840,1624,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,2832,2816,2818,2852,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,2832,2820,2844,2841,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,2832,2840,1624,2848,7656,7644,7644,7644,7644,7644,7644,7624,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,2856,2846,2849,2847,2838,2836,2836,2836,2836,2836,2852,7656,7644,7624,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7618,7636,7636,7637,7661,2832,2816,2816,2816,2816,2816,2818,2836,2852,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7620,7644,7654,8006,2832,2816,2816,2816,2816,2816,2816,2816,2840,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,8002,8006,8012,2832,2816,2816,2816,2816,2816,2816,2816,2840,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,8008,8012,2850,2817,2816,2816,2816,2816,2816,2820,2844,2841,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7620,7654,2850,2836,2817,2816,2816,2816,2816,2816,2816,2840,1624,2848,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7620,7644,7644,7654,8006,2856,2824,2816,2816,2816,2816,2816,2816,2816,2818,2836,2842,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,8002,8002,8006,8012,1624,2832,2816,2816,2816,2816,2816,2816,2816,2816,2816,2840,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7620,7654,8008,8008,8012,2850,2836,2817,2816,2816,2816,2816,2816,2816,2816,2816,2820,2854,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7620,7644,7654,8006,2850,2836,2836,2817,2816,2816,2816,2816,2816,2816,2816,2820,2844,2824,2840,7650,7617,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,8002,8006,8012,2832,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2840,1624,2832,2840,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,8008,8012,2850,2821,2844,2844,2824,2816,2816,2820,2844,2824,2816,2816,2818,2836,2817,2840,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,2850,2836,2817,2840,7659,7653,2856,2824,2816,2840,1624,2832,2816,2816,2816,2816,2816,2840,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,2832,2816,2816,2840,8003,7657,7661,2832,2816,2818,2836,2817,2816,2816,2816,2816,2820,2854,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,2856,2844,2824,2840,8009,8003,8006,2832,2816,2816,2816,2816,2816,2816,2816,2816,2840,7650,7617,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7618,7652,1624,2832,2818,2852,8009,8012,2832,2816,2816,2816,2816,2816,2816,2816,2820,2854,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7618,7652,2832,2816,2818,2836,2836,2817,2816,2816,2820,2844,2844,2844,2828,2854,7650,7617,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,2856,2844,2844,2844,2844,2844,2828,2844,2854,7651,7649,7661,2848,7650,7617,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7618,7636,7637,7649,7649,7649,7661,2848,7659,7649,7655,8002,8006,2848,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7620,7654,8003,8002,8002,8006,2848,8003,8002,8002,8008,8012,2860,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,8006,8008,8008,8008,8012,2848,8009,8008,8012,7650,7636,7636,7617,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,8012,2850,2836,2852,1624,2833,2836,2852,7650,7617,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,2850,2817,2816,2818,2836,2817,2820,2854,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,2832,2816,2816,2816,2816,2816,2840,7650,7617,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,2832,2816,2816,2816,2816,2820,2854,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,2832,2816,2816,2816,2816,2840,7650,7617,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,2832,2816,2816,2816,2816,2840,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,2832,2816,2816,2816,2816,2840,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,0,0,0,0,0,0,0,0,0,0,0,0,3024,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,3024,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,3024,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,3024,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,3024,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,3024,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,3048,3036,3036,3036,3036,3036,3036,3016,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3048,3036,3016,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3024,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3024,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3024,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3024,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3024,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3024,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3024,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3024,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3042,3009,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3024,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3024,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3024,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3024,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3042,3009,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3024,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3042,3009,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,3578,0,0,0,0,0,0,3042,3009,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,3568,0,0,0,0,0,0,3024,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,3568,0,0,0,0,0,0,3024,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,3568,0,0,0,3042,3028,3028,3009,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,3568,0,0,3042,3009,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,3570,3556,3562,0,0,3024,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,3570,3537,3540,3574,0,3042,3009,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,3552,3540,3574,0,0,3024,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,3552,3560,0,0,3042,3009,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,3552,3560,0,0,3024,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,3570,3537,3538,3572,0,3024,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,72,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,72,72,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,72,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,56,72,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,72,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,155,0,0,0,0,0,0,0,56,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,72,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,163,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,56,0,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,72,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,64,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,64,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,72,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,72,56,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,56,0,0,48,0,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], "events":[ null, {"id":1,"name":"torch","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":true,"image":{"tileId":0,"characterName":"!Other2","direction":2,"pattern":1,"characterIndex":7},"list":[{"code":108,"indent":0,"parameters":[""]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":2,"moveType":0,"priorityType":1,"stepAnime":true,"through":false,"trigger":0,"walkAnime":true}],"x":8,"y":28}, diff --git a/chef-adventure/data/Map006.json b/chef-adventure/data/Map006.json index cb2e26f8..3e02b028 100644 --- a/chef-adventure/data/Map006.json +++ b/chef-adventure/data/Map006.json @@ -1,6 +1,6 @@ { -"autoplayBgm":false,"autoplayBgs":false,"battleback1Name":"","battleback2Name":"","bgm":{"name":"","pan":0,"pitch":100,"volume":90},"bgs":{"name":"","pan":0,"pitch":100,"volume":90},"disableDashing":false,"displayName":"Hasty Sensation","encounterList":[],"encounterStep":30,"height":30,"note":"\n","parallaxLoopX":false,"parallaxLoopY":false,"parallaxName":"","parallaxShow":true,"parallaxSx":0,"parallaxSy":0,"scrollType":0,"specifyBattleback":false,"tilesetId":14,"width":32, -"data":[7616,7616,7616,7616,7616,7616,7616,7640,2832,2840,1624,2848,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,2856,2826,2836,2842,7656,7644,7644,7644,7644,7644,7644,7624,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7618,7652,2856,2844,2846,2849,2838,2836,2836,2836,2836,2852,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7618,7636,7636,7636,7652,2856,2844,2844,2844,2824,2840,7656,7644,7644,7644,7644,7644,7644,7644,7624,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7618,7636,7636,7652,1624,2832,2818,2836,2836,2836,2836,2836,2836,2836,2852,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,2859,2825,2816,2816,2816,2816,2816,2816,2816,2816,2840,7656,7624,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7618,7652,2832,2816,2816,2816,2816,2816,2820,2844,2844,2846,2853,7656,7644,7624,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,2856,2844,2844,2844,2844,2844,2854,7650,7636,7652,2833,2836,2852,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7618,7636,7636,7652,1624,7650,7636,7636,7617,7620,7654,2832,2816,2840,7656,7624,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7618,7636,7621,7644,7644,7644,7654,8006,2832,2816,2818,2852,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,8002,8002,8002,8006,8012,2832,2816,2816,2840,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7620,7644,7654,8008,8008,8008,8012,2850,2817,2816,2816,2840,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,8002,8006,2850,2836,2836,2836,2817,2816,2816,2816,2840,7632,7616,7616,7616,7620,7644,7644,7644,7644,7644,7624,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,8008,8012,2832,2820,2844,2824,2816,2816,2816,2816,2840,7632,7616,7616,7616,7640,8002,8002,8002,8002,8002,7656,7644,7644,7624,7616,7616,7616,7616,7616,7616,7640,2850,2836,2817,2840,1624,2832,2816,2816,2816,2816,2840,7632,7616,7616,7616,7640,8008,8008,8008,8008,8008,8003,8002,8002,7656,7624,7616,7616,7616,7616,7616,7640,2832,2816,2816,2818,2836,2817,2816,2820,2844,2824,2840,7632,7616,7620,7644,7654,2850,2836,2836,2836,2852,8009,8008,8008,8003,7632,7616,7616,7616,7616,7616,7640,2832,2816,2816,2816,2816,2816,2816,2840,1624,2834,2854,7632,7616,7640,8002,8006,2832,2816,2816,2816,2818,2836,2836,2852,8009,7656,7644,7624,7616,7616,7616,7640,2856,2844,2824,2816,2816,2816,2816,2818,2836,2842,7650,7617,7616,7640,8008,8012,2832,2816,2816,2820,2844,2824,2820,2846,2853,8003,8002,7656,7624,7616,7616,7618,7636,7652,2856,2844,2844,2824,2816,2816,2816,2840,7632,7616,7616,7640,2850,2836,2817,2816,2816,2840,1624,2832,2840,1624,2848,8009,8008,8003,7656,7644,7644,7644,7624,7618,7636,7636,7652,2832,2816,2816,2816,2840,7632,7616,7620,7654,2832,2816,2816,2820,2844,2826,2836,2817,2818,2836,2819,2836,2852,8009,8003,8002,8002,8002,7656,7644,7644,7644,7654,2832,2820,2844,2828,2854,7632,7616,7640,8006,2832,2816,2816,2840,1624,2856,2844,2824,2816,2816,2816,2816,2818,2852,8009,8008,8008,8008,8003,8002,8002,8002,8006,2834,2854,1624,2860,7650,7617,7616,7640,8012,2832,2816,2816,2840,7650,7636,7652,2832,2816,2816,2816,2816,2816,2818,2836,2836,2836,2852,8009,8008,8008,8008,8012,2848,7650,7636,7636,7617,7616,7616,7640,2850,2817,2816,2816,2840,7632,7616,7640,2856,2824,2816,2816,2816,2816,2816,2816,2816,2816,2818,2836,2836,2836,2836,2836,2842,7632,7616,7616,7616,7616,7616,7640,2832,2816,2820,2844,2854,7632,7616,7618,7652,2832,2816,2816,2816,2816,2820,2844,2824,2816,2816,2816,2816,2816,2816,2816,2840,7632,7616,7616,7616,7616,7616,7640,2832,2816,2840,7650,7636,7617,7616,7616,7640,2832,2816,2816,2816,2816,2840,1624,2832,2816,2816,2816,2816,2816,2816,2820,2854,7632,7616,7616,7616,7616,7616,7640,2832,2820,2854,7632,7616,7616,7616,7616,7640,2856,2844,2844,2824,2816,2818,2836,2817,2816,2816,2816,2816,2816,2820,2854,7650,7617,7616,7616,7616,7616,7616,7640,2832,2840,1624,7632,7616,7616,7616,7616,7618,7636,7636,7652,2856,2844,2844,2844,2844,2844,2824,2816,2820,2844,2841,7650,7617,7616,7616,7616,7616,7616,7616,7640,2832,2818,2852,7632,7616,7616,7616,7616,7616,7616,7616,7618,7636,7636,7636,7636,7636,7652,2856,2844,2854,1624,2860,7632,7616,7616,7616,7616,7616,7616,7616,7640,2832,2816,2840,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7618,7636,7636,7636,7636,7636,7617,7616,7616,7616,7616,7616,7616,7616,0,0,0,0,0,0,0,0,0,0,0,0,3024,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,3048,3036,3036,3036,3036,3036,3036,3016,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3024,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3048,3036,3036,3036,3036,3036,3036,3036,3016,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3024,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3048,3016,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3048,3036,3016,3008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3024,3008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3048,3016,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3024,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3024,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3024,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3024,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3024,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3024,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3024,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3024,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3042,3009,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3024,3008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3024,3008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3024,3008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3042,3009,3008,0,0,0,0,0,0,3042,3028,3044,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3042,3028,3028,3009,3008,3008,0,0,0,0,0,0,3024,3008,3032,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3024,3008,3008,3008,3008,3008,0,0,0,0,0,0,3024,3008,3010,3044,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3024,3008,3008,3008,3008,3008,0,0,0,0,3042,3028,3009,3008,3008,3032,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3024,3008,3008,3008,3008,3008,0,0,0,0,3024,3008,3008,3008,3008,3032,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3042,3009,3008,3008,3008,3008,3008,0,0,0,0,3024,3008,3008,3008,3008,3010,3028,3028,3044,0,0,0,0,0,0,0,0,0,0,0,3042,3009,3008,3008,3008,3008,3008,3008,0,0,0,0,3024,3008,3008,3008,3008,3008,3008,3008,3010,3028,3028,3028,3028,3028,3044,0,0,0,0,0,3024,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,3024,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3010,3028,3028,3028,3028,3028,3009,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,0,0,56,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,152,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,160,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,155,0,72,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,155,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,152,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,0,0,0,160,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,0,48,0,72,0,0,0,0,0,0,0,0,0,48,0,56,0,0,0,0,0,0,0,0,0,0,0,0,0,0,56,0,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,0,0,0,17,0,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], +"autoplayBgm":false,"autoplayBgs":false,"battleback1Name":"","battleback2Name":"","bgm":{"name":"","pan":0,"pitch":100,"volume":90},"bgs":{"name":"","pan":0,"pitch":100,"volume":90},"disableDashing":false,"displayName":"Hasty Sensation","encounterList":[],"encounterStep":30,"height":30,"note":"\n","parallaxLoopX":false,"parallaxLoopY":false,"parallaxName":"","parallaxShow":true,"parallaxSx":0,"parallaxSy":0,"scrollType":0,"specifyBattleback":false,"tilesetId":14,"width":40, +"data":[7616,7616,7616,7616,7616,7616,7616,7640,2832,2840,1624,2848,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,2856,2826,2836,2842,7656,7644,7644,7644,7644,7644,7644,7624,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7618,7652,2856,2844,2846,2849,2838,2836,2836,2836,2836,2852,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7618,7636,7636,7636,7652,2856,2844,2844,2844,2824,2840,7656,7644,7644,7644,7644,7644,7644,7644,7624,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7618,7636,7636,7652,1624,2832,2818,2836,2836,2836,2836,2836,2836,2836,2852,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,2859,2825,2816,2816,2816,2816,2816,2816,2816,2816,2840,7656,7624,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7618,7652,2832,2816,2816,2816,2816,2816,2820,2844,2844,2846,2853,7656,7644,7624,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,2856,2844,2844,2844,2844,2844,2854,7650,7636,7652,2833,2836,2852,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7618,7636,7636,7652,1624,7650,7636,7636,7617,7620,7654,2832,2816,2840,7656,7624,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7618,7636,7621,7644,7644,7644,7654,8006,2832,2816,2818,2852,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,8002,8002,8002,8006,8012,2832,2816,2816,2840,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7620,7644,7654,8008,8008,8008,8012,2850,2817,2816,2816,2840,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,8002,8006,2850,2836,2836,2836,2817,2816,2816,2816,2840,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7620,7644,7644,7644,7644,7644,7624,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,8008,8012,2832,2820,2844,2824,2816,2816,2816,2816,2840,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,8002,8002,8002,8002,8002,7656,7644,7644,7624,7616,7616,7616,7616,7616,7616,7640,2850,2836,2817,2840,1624,2832,2816,2816,2816,2816,2840,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,8008,8008,8008,8008,8008,8003,8002,8002,7656,7624,7616,7616,7616,7616,7616,7640,2832,2816,2816,2818,2836,2817,2816,2820,2844,2824,2840,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7620,7644,7654,2850,2836,2836,2836,2852,8009,8008,8008,8003,7632,7616,7616,7616,7616,7616,7640,2832,2816,2816,2816,2816,2816,2816,2840,1624,2834,2854,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,8002,8006,2832,2816,2816,2816,2818,2836,2836,2852,8009,7656,7644,7624,7616,7616,7616,7640,2856,2844,2824,2816,2816,2816,2816,2818,2836,2842,7650,7617,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,8008,8012,2832,2816,2816,2820,2844,2824,2820,2846,2853,8003,8002,7656,7624,7616,7616,7618,7636,7652,2856,2844,2844,2824,2816,2816,2816,2840,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,2850,2836,2817,2816,2816,2840,1624,2832,2840,1624,2848,8009,8008,8003,7656,7644,7644,7644,7624,7618,7636,7636,7652,2832,2816,2816,2816,2840,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7620,7654,2832,2816,2816,2820,2844,2826,2836,2817,2818,2836,2819,2836,2852,8009,8003,8002,8002,8002,7656,7644,7644,7644,7654,2832,2820,2844,2828,2854,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,8006,2832,2816,2816,2840,1624,2856,2844,2824,2816,2816,2816,2816,2818,2852,8009,8008,8008,8008,8003,8002,8002,8002,8006,2834,2854,1624,2860,7650,7617,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,8012,2832,2816,2816,2840,7650,7636,7652,2832,2816,2816,2816,2816,2816,2818,2836,2836,2836,2852,8009,8008,8008,8008,8012,2848,7650,7636,7636,7617,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,2850,2817,2816,2816,2840,7632,7616,7640,2856,2824,2816,2816,2816,2816,2816,2816,2816,2816,2818,2836,2836,2836,2836,2836,2842,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,2832,2816,2820,2844,2854,7632,7616,7618,7652,2832,2816,2816,2816,2816,2820,2844,2824,2816,2816,2816,2816,2816,2816,2816,2840,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,2832,2816,2840,7650,7636,7617,7616,7616,7640,2832,2816,2816,2816,2816,2840,1624,2832,2816,2816,2816,2816,2816,2816,2820,2854,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,2832,2820,2854,7632,7616,7616,7616,7616,7640,2856,2844,2844,2824,2816,2818,2836,2817,2816,2816,2816,2816,2816,2820,2854,7650,7617,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,2832,2840,1624,7632,7616,7616,7616,7616,7618,7636,7636,7652,2856,2844,2844,2844,2844,2844,2824,2816,2820,2844,2841,7650,7617,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,2832,2818,2852,7632,7616,7616,7616,7616,7616,7616,7616,7618,7636,7636,7636,7636,7636,7652,2856,2844,2854,1624,2860,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,2832,2816,2840,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7618,7636,7636,7636,7636,7636,7617,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,0,0,0,0,0,0,0,0,0,0,0,0,3024,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,3048,3036,3036,3036,3036,3036,3036,3016,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3024,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3048,3036,3036,3036,3036,3036,3036,3036,3016,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3024,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3048,3016,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3048,3036,3016,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3024,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3048,3016,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3024,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3024,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3024,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3024,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3024,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3024,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3024,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3024,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3042,3009,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3024,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3024,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3024,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3042,3009,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,3042,3028,3044,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3042,3028,3028,3009,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,3024,3008,3032,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3024,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,3024,3008,3010,3044,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3024,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,3042,3028,3009,3008,3008,3032,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3024,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,3024,3008,3008,3008,3008,3032,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3042,3009,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,3024,3008,3008,3008,3008,3010,3028,3028,3044,0,0,0,0,0,0,0,0,0,0,0,3042,3009,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,3024,3008,3008,3008,3008,3008,3008,3008,3010,3028,3028,3028,3028,3028,3044,0,0,0,0,0,3024,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,3024,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3010,3028,3028,3028,3028,3028,3009,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,0,0,56,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,152,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,160,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,155,0,72,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,155,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,152,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,0,0,0,160,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,0,48,0,72,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,0,56,0,0,0,0,0,0,0,0,0,0,0,0,0,0,56,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,0,0,0,17,0,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], "events":[ null, {"id":1,"name":"ghosty","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"Ghost","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":108,"indent":0,"parameters":[""]},{"code":408,"indent":0,"parameters":[""]},{"code":108,"indent":0,"parameters":[""]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":5,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":4,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":8,"y":17}, @@ -21,7 +21,7 @@ null, {"id":16,"name":"torch","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":true,"image":{"tileId":0,"characterName":"!Other2","direction":2,"pattern":1,"characterIndex":7},"list":[{"code":108,"indent":0,"parameters":[""]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":2,"moveType":0,"priorityType":1,"stepAnime":true,"through":false,"trigger":0,"walkAnime":true}],"x":20,"y":14}, {"id":17,"name":"torch","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":true,"image":{"tileId":0,"characterName":"!Other2","direction":2,"pattern":1,"characterIndex":7},"list":[{"code":108,"indent":0,"parameters":[""]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":2,"moveType":0,"priorityType":1,"stepAnime":true,"through":false,"trigger":0,"walkAnime":true}],"x":30,"y":16}, {"id":18,"name":"learn: combat - skills","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":102,"indent":0,"parameters":[["Refresh on Offhand Skills","Nvm."],1,0,2,0]},{"code":402,"indent":0,"parameters":[0,"Refresh on Offhand Skills"]},{"code":101,"indent":1,"parameters":["face_je",1,0,0,"\\N[1]"]},{"code":401,"indent":1,"parameters":["\\pop[a1]Look at all the ghostys to chop up!"]},{"code":101,"indent":1,"parameters":["face_rp",1,0,2,"\\N[2]"]},{"code":401,"indent":1,"parameters":["\\pop[a1]Yeah!"]},{"code":101,"indent":1,"parameters":["face_rp",4,0,2,"\\N[2]"]},{"code":401,"indent":1,"parameters":["\\pop[a1]\\N[1],\\. how about your \\C[1]offhand skills\\C[0]?"]},{"code":101,"indent":1,"parameters":["face_je",2,0,0,"\\N[1]"]},{"code":401,"indent":1,"parameters":["\\pop[a1]\\..\\..\\.."]},{"code":213,"indent":1,"parameters":[-1,9,false]},{"code":250,"indent":1,"parameters":[{"name":"Chime1","volume":100,"pitch":100,"pan":0}]},{"code":230,"indent":1,"parameters":[30]},{"code":101,"indent":1,"parameters":["face_je",4,0,0,"\\N[1]"]},{"code":401,"indent":1,"parameters":["\\pop[a1]Oh yeah!"]},{"code":101,"indent":1,"parameters":["face_je",1,0,0,"\\N[1]"]},{"code":401,"indent":1,"parameters":["\\pop[a1]Easy!"]},{"code":101,"indent":1,"parameters":["face_je",1,0,0,"\\N[1]"]},{"code":401,"indent":1,"parameters":["\\pop[a1]Just mash that \\I[2449] button,\\."]},{"code":401,"indent":1,"parameters":["it'll do something more amazing than the basic hit."]},{"code":101,"indent":1,"parameters":["face_je",3,0,0,"\\N[1]"]},{"code":401,"indent":1,"parameters":["\\pop[a1](Though there is no offhand skill available for"]},{"code":401,"indent":1,"parameters":["my glaive...)"]},{"code":101,"indent":1,"parameters":["face_je",4,0,0,"\\N[1]"]},{"code":401,"indent":1,"parameters":["\\pop[a1]\\C[1]Offhand skills\\C[0] add variety to the"]},{"code":401,"indent":1,"parameters":["way we slice and bash foes to bits and usually don't"]},{"code":401,"indent":1,"parameters":["cost anything but a cooldown!"]},{"code":0,"indent":1,"parameters":[]},{"code":402,"indent":0,"parameters":[1,"Nvm."]},{"code":0,"indent":1,"parameters":[]},{"code":404,"indent":0,"parameters":[]},{"code":357,"indent":0,"parameters":["j/log/J-Log","showActionLog","Show Action Log Window",{}]},{"code":123,"indent":0,"parameters":["A",0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":3,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":true,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":5,"y":28}, -{"id":19,"name":"learn: named enemies","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":4,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":117,"indent":0,"parameters":[5]},{"code":102,"indent":0,"parameters":[["Learn about named monsters.","Skip it."],1,0,2,0]},{"code":402,"indent":0,"parameters":[0,"Learn about named monsters."]},{"code":101,"indent":1,"parameters":["face_rp",4,0,2,"\\N[2]"]},{"code":401,"indent":1,"parameters":["\\pop[a1]Whoa \\N[1]!\\. Look at that!\\."]},{"code":401,"indent":1,"parameters":["This ghosty looks a bit different from the others."]},{"code":213,"indent":1,"parameters":[-1,8,true]},{"code":101,"indent":1,"parameters":["face_je",4,0,0,"\\N[1]"]},{"code":401,"indent":1,"parameters":["\\pop[a1]Oh.\\. Yeah it is, what with it being a \\C[2]black ghosty\\C[0]"]},{"code":401,"indent":1,"parameters":["instead of \\C[3]white like all the rest\\C[0].\\.\\. And it has"]},{"code":401,"indent":1,"parameters":["an exclamation point in its name!"]},{"code":101,"indent":1,"parameters":["face_rp",4,0,2,"\\N[2]"]},{"code":401,"indent":1,"parameters":["\\pop[a1]\\Enemy[103]...\\."]},{"code":401,"indent":1,"parameters":["How spoopy."]},{"code":101,"indent":1,"parameters":["face_je",1,0,0,"\\N[1]"]},{"code":401,"indent":1,"parameters":["\\pop[a1]Did you forget,\\. \\N[2]?\\."]},{"code":401,"indent":1,"parameters":["\\C[2]Named monsters are rare\\C[0]!\\."]},{"code":401,"indent":1,"parameters":["They get a few extra perks for having a name!"]},{"code":101,"indent":1,"parameters":["face_rp",3,0,2,"\\N[2]"]},{"code":401,"indent":1,"parameters":["\\pop[a1]I do not remember."]},{"code":101,"indent":1,"parameters":["face_rp",1,0,2,"\\N[2]"]},{"code":401,"indent":1,"parameters":["\\pop[a1]Tell me more!"]},{"code":101,"indent":1,"parameters":["face_je",1,0,0,"\\N[1]"]},{"code":401,"indent":1,"parameters":["\\pop[a1]We should take a bit of extra caution around them!\\."]},{"code":401,"indent":1,"parameters":["they are known to be \\C[2]much stronger than their generic-named"]},{"code":401,"indent":1,"parameters":["counterparts\\C[0]!"]},{"code":101,"indent":1,"parameters":["face_rp",6,0,2,"\\N[2]"]},{"code":401,"indent":1,"parameters":["\\pop[a1]Honestly, sounds like a waste of our time if they are"]},{"code":401,"indent":1,"parameters":["not only \\C[2]stronger\\C[0], but do nothing extra for us."]},{"code":101,"indent":1,"parameters":["face_je",4,0,0,"\\N[1]"]},{"code":401,"indent":1,"parameters":["\\pop[a1]On the contrary, \\N[2]!"]},{"code":101,"indent":1,"parameters":["face_je",1,0,0,"\\N[1]"]},{"code":401,"indent":1,"parameters":["\\pop[a1]To compensate for their rarity,\\. \\C[2]named monsters also"]},{"code":401,"indent":1,"parameters":["have dramatically improved loot drops,\\. and more of it\\C[0]!"]},{"code":230,"indent":1,"parameters":[60]},{"code":101,"indent":1,"parameters":["face_rp",4,0,2,"\\N[2]"]},{"code":401,"indent":1,"parameters":["\\pop[a1]\\..\\..\\.."]},{"code":101,"indent":1,"parameters":["face_rp",1,0,2,"\\N[2]"]},{"code":401,"indent":1,"parameters":["\\pop[a1]So we should spank \\Enemy[103] here and keep"]},{"code":401,"indent":1,"parameters":["our eyes peeled for \\C[2]unusually colored/looking monsters\\C[0] elsewhere?"]},{"code":213,"indent":1,"parameters":[-1,3,true]},{"code":101,"indent":1,"parameters":["face_je",7,0,0,"\\N[1]"]},{"code":401,"indent":1,"parameters":["\\pop[a1]Absolutely."]},{"code":0,"indent":1,"parameters":[]},{"code":402,"indent":0,"parameters":[1,"Skip it."]},{"code":0,"indent":1,"parameters":[]},{"code":404,"indent":0,"parameters":[]},{"code":117,"indent":0,"parameters":[6]},{"code":123,"indent":0,"parameters":["A",0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":true,"trigger":1,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":true,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":25,"y":23}, +{"id":19,"name":"learn: named enemies","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":4,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":117,"indent":0,"parameters":[5]},{"code":102,"indent":0,"parameters":[["Learn about named monsters.","Skip it."],1,0,2,0]},{"code":402,"indent":0,"parameters":[0,"Learn about named monsters."]},{"code":101,"indent":1,"parameters":["face_rp",4,0,2,"\\N[2]"]},{"code":401,"indent":1,"parameters":["\\pop[a2]Whoa \\N[1]!\\. Look at that!\\."]},{"code":401,"indent":1,"parameters":["This ghosty looks a bit different from the others."]},{"code":213,"indent":1,"parameters":[-1,8,true]},{"code":101,"indent":1,"parameters":["face_je",4,0,0,"\\N[1]"]},{"code":401,"indent":1,"parameters":["\\pop[a1]Oh.\\. Yeah it is, what with it being a \\C[2]black ghosty\\C[0]"]},{"code":401,"indent":1,"parameters":["instead of \\C[3]white like all the rest\\C[0].\\.\\. And it has"]},{"code":401,"indent":1,"parameters":["an exclamation point in its name!"]},{"code":101,"indent":1,"parameters":["face_rp",4,0,2,"\\N[2]"]},{"code":401,"indent":1,"parameters":["\\pop[a2]\\Enemy[110]...\\."]},{"code":401,"indent":1,"parameters":["How spoopy."]},{"code":101,"indent":1,"parameters":["face_je",1,0,0,"\\N[1]"]},{"code":401,"indent":1,"parameters":["\\pop[a1]Did you forget,\\. \\N[2]?\\."]},{"code":401,"indent":1,"parameters":["\\C[2]Named monsters are rare\\C[0]!\\."]},{"code":401,"indent":1,"parameters":["They get a few extra perks for having a name!"]},{"code":101,"indent":1,"parameters":["face_rp",3,0,2,"\\N[2]"]},{"code":401,"indent":1,"parameters":["\\pop[a2]I do not remember."]},{"code":101,"indent":1,"parameters":["face_rp",1,0,2,"\\N[2]"]},{"code":401,"indent":1,"parameters":["\\pop[a2]Tell me more!"]},{"code":101,"indent":1,"parameters":["face_je",1,0,0,"\\N[1]"]},{"code":401,"indent":1,"parameters":["\\pop[a1]We should take a bit of extra caution around them!\\."]},{"code":401,"indent":1,"parameters":["they are known to be \\C[2]much stronger than their generic-named"]},{"code":401,"indent":1,"parameters":["counterparts\\C[0]!"]},{"code":101,"indent":1,"parameters":["face_rp",6,0,2,"\\N[2]"]},{"code":401,"indent":1,"parameters":["\\pop[a2]Honestly, sounds like a waste of our time if they are"]},{"code":401,"indent":1,"parameters":["not only \\C[2]stronger\\C[0], but do nothing extra for us."]},{"code":101,"indent":1,"parameters":["face_je",4,0,0,"\\N[1]"]},{"code":401,"indent":1,"parameters":["\\pop[a1]On the contrary, \\N[2]!"]},{"code":101,"indent":1,"parameters":["face_je",1,0,0,"\\N[1]"]},{"code":401,"indent":1,"parameters":["\\pop[a1]To compensate for their rarity,\\. \\C[2]named monsters also"]},{"code":401,"indent":1,"parameters":["have dramatically improved loot drops,\\. and more of it\\C[0]!"]},{"code":230,"indent":1,"parameters":[60]},{"code":101,"indent":1,"parameters":["face_rp",4,0,2,"\\N[2]"]},{"code":401,"indent":1,"parameters":["\\pop[a2]\\..\\..\\.."]},{"code":101,"indent":1,"parameters":["face_rp",1,0,2,"\\N[2]"]},{"code":401,"indent":1,"parameters":["\\pop[a2]So we should spank \\Enemy[110] here and keep"]},{"code":401,"indent":1,"parameters":["our eyes peeled for \\C[2]unusually colored/looking monsters\\C[0] elsewhere?"]},{"code":213,"indent":1,"parameters":[-1,3,true]},{"code":101,"indent":1,"parameters":["face_je",7,0,0,"\\N[1]"]},{"code":401,"indent":1,"parameters":["\\pop[a1]Absolutely."]},{"code":0,"indent":1,"parameters":[]},{"code":402,"indent":0,"parameters":[1,"Skip it."]},{"code":0,"indent":1,"parameters":[]},{"code":404,"indent":0,"parameters":[]},{"code":117,"indent":0,"parameters":[6]},{"code":123,"indent":0,"parameters":["A",0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":true,"trigger":1,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":true,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":25,"y":23}, {"id":20,"name":"torch","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":true,"image":{"tileId":0,"characterName":"!Other2","direction":2,"pattern":1,"characterIndex":7},"list":[{"code":108,"indent":0,"parameters":[""]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":2,"moveType":0,"priorityType":1,"stepAnime":true,"through":false,"trigger":0,"walkAnime":true}],"x":26,"y":21}, {"id":21,"name":"torch","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":true,"image":{"tileId":0,"characterName":"!Other2","direction":2,"pattern":1,"characterIndex":7},"list":[{"code":108,"indent":0,"parameters":[""]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":2,"moveType":0,"priorityType":1,"stepAnime":true,"through":false,"trigger":0,"walkAnime":true}],"x":20,"y":8}, {"id":22,"name":"torch","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":true,"image":{"tileId":0,"characterName":"!Other2","direction":2,"pattern":1,"characterIndex":7},"list":[{"code":108,"indent":0,"parameters":[""]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":2,"moveType":0,"priorityType":1,"stepAnime":true,"through":false,"trigger":0,"walkAnime":true}],"x":8,"y":1} diff --git a/chef-adventure/data/Map011.json b/chef-adventure/data/Map011.json index ab4a5f5c..b984ef1e 100644 --- a/chef-adventure/data/Map011.json +++ b/chef-adventure/data/Map011.json @@ -3,9 +3,9 @@ "data":[7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,8002,8002,8002,8002,8002,7656,7644,7644,7644,7624,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,8008,8008,8008,8008,8008,8003,8002,8002,8002,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7620,7644,7644,7644,7644,7644,7644,7624,7616,7616,7616,7616,7616,7616,7616,7616,7616,7620,7654,2850,2836,2836,2836,2852,8009,8008,8008,8008,7656,7624,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,8002,8002,8002,8002,8002,8002,7632,7616,7616,7616,7616,7616,7620,7644,7644,7644,7654,8006,2832,2816,2816,2816,2822,2849,2838,2836,2852,8003,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,8008,8008,8008,8008,8008,8008,7656,7644,7644,7644,7644,7644,7654,8002,8002,8002,8006,8012,2832,2820,2844,2844,2841,1624,2832,2816,2840,8009,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,2850,2836,2836,2836,2836,2852,8003,8002,8002,8002,8002,8002,8006,8008,8008,8008,8012,2851,2845,2841,7659,7653,2857,2849,2845,2824,2818,2852,7656,7624,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,2832,2816,2816,2816,2816,2840,8009,8008,8008,8008,8008,8008,8012,2850,2836,2836,2836,2842,1624,2848,8003,7657,7649,7649,7661,2832,2816,2840,8003,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,2856,2824,2820,2844,2824,2818,2836,2836,2836,2836,2836,2836,2836,2817,2816,2816,2816,2818,2836,2842,8009,8003,8002,8002,8006,2832,2816,2840,8009,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7618,7652,2832,2840,1624,2834,2844,2844,2844,2844,2844,2844,2824,2820,2844,2824,2816,2816,2816,2816,2818,2852,8009,8008,8008,8012,2832,2816,2818,2852,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,2832,2818,2837,2855,7650,7636,7636,7636,7636,7652,2832,2840,1624,2832,2816,2816,2816,2816,2816,2818,2836,2836,2836,2836,2817,2816,2816,2840,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,2832,2816,2840,7650,7621,7644,7644,7644,7644,7654,2832,2818,2836,2817,2820,2844,2844,2824,2816,2816,2816,2816,2816,2816,2816,2820,2844,2841,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7640,2832,2816,2840,7656,7654,2850,2836,2836,2836,2836,2817,2816,2816,2816,2840,7650,7652,2856,2824,2816,2816,2816,2816,2816,2816,2840,1624,2848,7632,7616,7616,7616,7616,7616,7616,7616,7616,7616,7620,7654,2832,2816,2818,2836,2836,2817,2820,2844,2824,2816,2816,2816,2816,2816,2840,7632,7618,7652,2832,2816,2816,2816,2816,2816,2820,2846,2849,2855,7632,7616,7616,7616,7616,7616,7616,7644,7644,7644,7654,8006,2832,2816,2816,2816,2816,2816,2840,1624,2832,2816,2816,2820,2844,2844,2854,7632,7616,7640,2832,2816,2816,2816,2816,2816,2840,7650,7636,7636,7617,7616,7616,7616,7616,7616,7616,8002,8002,8002,8006,8012,2832,2816,2816,2816,2816,2816,2818,2836,2817,2816,2816,2840,7659,7649,7649,7645,7644,7654,2832,2816,2816,2816,2816,2816,2840,7656,7644,7644,7644,7644,7644,7644,7644,7644,7644,8008,8008,8008,8012,2859,2845,2844,2844,2844,2844,2824,2816,2816,2816,2816,2816,2818,2836,2837,2849,2849,2838,2836,2817,2816,2820,2844,2824,2816,2840,8003,8002,8002,8002,8002,8002,8002,8002,8002,8006,7636,7636,7636,7636,7636,7636,7636,7636,7652,1624,2856,2844,2844,2844,2844,2844,2844,2844,2854,7650,7652,2856,2844,2844,2844,2854,1624,2856,2844,2854,8009,8008,8008,8008,8008,8008,8008,8008,8008,8012,7616,7616,7616,7616,7616,7616,7616,7616,7618,7636,7636,7636,7636,7636,7636,7636,7636,7636,7636,7617,7618,7636,7636,7636,7636,7636,7636,7636,7636,7636,7636,7636,7636,7636,7636,7636,7636,7636,7636,7636,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,7616,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3042,3028,3028,3028,3028,3044,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3042,3013,3036,3036,3036,3036,3046,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3048,3046,0,0,0,0,0,0,0,0,0,0,3042,3044,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3024,3010,3044,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3024,3008,3032,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3051,3041,3041,3037,3036,3046,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3028,3028,3028,3028,3028,3028,3028,3028,3044,0,0,0,0,0,0,0,0,0,0,3042,3044,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3008,3008,3008,3008,3008,3008,3008,3008,3010,3028,3028,3028,3028,3028,3028,3028,3028,3028,3028,3009,3010,3028,3028,3028,3028,3028,3028,3028,3028,3028,3028,3028,3028,3028,3028,3028,3028,3028,3028,3028,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,3008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,72,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,72,0,0,0,0,0,0,0,0,0,16,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,56,48,0,0,0,48,0,17,0,0,0,0,72,0,0,48,0,0,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,48,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,56,0,0,0,0,0,0,0,0,0,0,0,0,0,0,72,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,56,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,72,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], "events":[ null, -{"id":1,"name":"story: Defeat Erocian Slime","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":243,"indent":0,"parameters":[]},{"code":242,"indent":0,"parameters":[2]},{"code":101,"indent":0,"parameters":["face_je",6,0,0,"\\N[1]"]},{"code":401,"indent":0,"parameters":["\\pop[a1]Holy shit what was that?!"]},{"code":101,"indent":0,"parameters":["face_rp",5,0,2,"\\N[2]"]},{"code":401,"indent":0,"parameters":["\\pop[a2]No time for whining,\\. \\N[1]!\\."]},{"code":401,"indent":0,"parameters":["The slime is right over there!"]},{"code":101,"indent":0,"parameters":["face_rp",5,0,2,"\\N[2]"]},{"code":401,"indent":0,"parameters":["\\pop[a2]Kill it!"]},{"code":122,"indent":0,"parameters":[1,1,0,0,0]},{"code":117,"indent":0,"parameters":[11]},{"code":122,"indent":0,"parameters":[25,25,0,0,2]},{"code":117,"indent":0,"parameters":[103]},{"code":117,"indent":0,"parameters":[16]},{"code":117,"indent":0,"parameters":[6]},{"code":108,"indent":0,"parameters":["progress to the \"defeat 1x erocian slime\" objective."]},{"code":357,"indent":0,"parameters":["j/omni/ext/J-OMNI-Quests","progress-quest","Progress Quest",{"key":"main-000"}]},{"code":657,"indent":0,"parameters":["key = main-000"]},{"code":123,"indent":0,"parameters":["A",0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":3,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":true,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":18,"y":18}, -{"id":2,"name":"BOSS: Syrup","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"m_slimes","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":205,"indent":0,"parameters":[0,{"list":[{"code":39,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":39,"indent":null}]},{"code":122,"indent":0,"parameters":[1,1,1,0,1]},{"code":108,"indent":0,"parameters":[""]},{"code":408,"indent":0,"parameters":[""]},{"code":408,"indent":0,"parameters":[""]},{"code":108,"indent":0,"parameters":[""]},{"code":108,"indent":0,"parameters":[""]},{"code":108,"indent":0,"parameters":[""]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":11,"y":12}, -{"id":3,"name":"enemy tracker","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":true,"variableValue":1},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":117,"indent":0,"parameters":[104]},{"code":117,"indent":0,"parameters":[12]},{"code":117,"indent":0,"parameters":[14]},{"code":250,"indent":0,"parameters":[{"name":"Computer","volume":100,"pitch":100,"pan":0}]},{"code":230,"indent":0,"parameters":[60]},{"code":212,"indent":0,"parameters":[4,77,true]},{"code":121,"indent":0,"parameters":[4,4,0]},{"code":122,"indent":0,"parameters":[1,1,0,0,0]},{"code":244,"indent":0,"parameters":[]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":3,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":4,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":221,"indent":0,"parameters":[]},{"code":117,"indent":0,"parameters":[5]},{"code":117,"indent":0,"parameters":[13]},{"code":117,"indent":0,"parameters":[8]},{"code":126,"indent":0,"parameters":[241,0,0,2]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":36,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":36,"indent":null}]},{"code":201,"indent":0,"parameters":[0,11,18,12,4,2]},{"code":121,"indent":0,"parameters":[1,1,0]},{"code":222,"indent":0,"parameters":[]},{"code":101,"indent":0,"parameters":["face_je",1,0,2,"\\N[1]"]},{"code":401,"indent":0,"parameters":["\\pop[a1]That wasn't so hard!"]},{"code":101,"indent":0,"parameters":["face_rp",4,0,0,"\\N[2]"]},{"code":401,"indent":0,"parameters":["\\pop[e7]It was pretty easy\\..\\..\\.."]},{"code":213,"indent":0,"parameters":[7,6,false]},{"code":101,"indent":0,"parameters":["face_rp",6,0,0,"\\N[2]"]},{"code":401,"indent":0,"parameters":["\\pop[e7]Slimes just aren't as strong as they used to be anymore"]},{"code":401,"indent":0,"parameters":["I guess."]},{"code":101,"indent":0,"parameters":["face_je",4,0,2,"\\N[1]"]},{"code":401,"indent":0,"parameters":["\\pop[a1]Nope!\\."]},{"code":401,"indent":0,"parameters":["And thats fine,\\. because we got the \\Item[241] so"]},{"code":401,"indent":0,"parameters":["we can make the \\Item[518]!"]},{"code":101,"indent":0,"parameters":["face_je",0,0,2,"\\N[1]"]},{"code":401,"indent":0,"parameters":["\\pop[a1]I wonder where the nearest town is that we can cook up"]},{"code":401,"indent":0,"parameters":["this recipe..."]},{"code":101,"indent":0,"parameters":["face_rp",1,0,1,"\\N[2]"]},{"code":401,"indent":0,"parameters":["\\pop[e7]There was one not too far \\C[2]West of this cave\\C[0].\\."]},{"code":401,"indent":0,"parameters":["I saw it while I was scouting last night on the way here."]},{"code":101,"indent":0,"parameters":["face_je",1,0,2,"\\N[1]"]},{"code":401,"indent":0,"parameters":["\\pop[a1]Fuck yeah."]},{"code":101,"indent":0,"parameters":["face_je",3,0,2,"\\N[1]"]},{"code":401,"indent":0,"parameters":["\\pop[a1]Let's get out of this dank cave and cook up that pudding."]},{"code":205,"indent":0,"parameters":[7,{"list":[{"code":3,"indent":null},{"code":3,"indent":null},{"code":3,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":3,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":3,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":3,"indent":null}]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":16,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":16,"indent":null}]},{"code":213,"indent":0,"parameters":[-1,2,true]},{"code":101,"indent":0,"parameters":["face_je",4,0,2,"\\N[1]"]},{"code":401,"indent":0,"parameters":["\\pop[a1]Looks like a vine fell down when we slapped that slime."]},{"code":101,"indent":0,"parameters":["face_je",1,0,2,"\\N[1]"]},{"code":401,"indent":0,"parameters":["\\pop[a1]I bet that will most certainly return us conveniently to the"]},{"code":401,"indent":0,"parameters":["entrance of this shit hole."]},{"code":121,"indent":0,"parameters":[1,1,1]},{"code":123,"indent":0,"parameters":["A",0]},{"code":244,"indent":0,"parameters":[]},{"code":216,"indent":0,"parameters":[0]},{"code":129,"indent":0,"parameters":[2,0,false]},{"code":121,"indent":0,"parameters":[101,101,0]},{"code":357,"indent":0,"parameters":["j/hud/J-HUD","showAllies","Show Allies",{}]},{"code":357,"indent":0,"parameters":["j/abs/J-ABS","Enable Party Rotation","Enable Party Rotation",{}]},{"code":117,"indent":0,"parameters":[6]},{"code":108,"indent":0,"parameters":["unlock the next main story quest."]},{"code":357,"indent":0,"parameters":["j/omni/ext/J-OMNI-Quests","unlock-quests","Unlock Quest(s)",{"keys":"[\"main-001\"]"}]},{"code":657,"indent":0,"parameters":["keys = [\"main-001\"]"]},{"code":108,"indent":0,"parameters":["switch tracking to the next quest."]},{"code":357,"indent":0,"parameters":["j/omni/ext/J-OMNI-Quests","set-quest-tracking","Set Quest Tracking",{"key":"main-000","trackingState":"false"}]},{"code":657,"indent":0,"parameters":["key = main-000"]},{"code":657,"indent":0,"parameters":["trackingState = false"]},{"code":357,"indent":0,"parameters":["j/omni/ext/J-OMNI-Quests","set-quest-tracking","Set Quest Tracking",{"key":"main-001","trackingState":"true"}]},{"code":657,"indent":0,"parameters":["key = main-001"]},{"code":657,"indent":0,"parameters":["trackingState = true"]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":3,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":true,"switch1Id":4,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":19,"y":18}, +{"id":1,"name":"story: Defeat Erocian Slime","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":243,"indent":0,"parameters":[]},{"code":242,"indent":0,"parameters":[2]},{"code":216,"indent":0,"parameters":[0]},{"code":101,"indent":0,"parameters":["face_je",6,0,0,"\\N[1]"]},{"code":401,"indent":0,"parameters":["\\pop[a1]Holy shit what was that?!"]},{"code":101,"indent":0,"parameters":["face_rp",5,0,2,"\\N[2]"]},{"code":401,"indent":0,"parameters":["\\pop[a2]No time for whining,\\. \\N[1]!\\."]},{"code":401,"indent":0,"parameters":["The slime is right over there!"]},{"code":101,"indent":0,"parameters":["face_rp",5,0,2,"\\N[2]"]},{"code":401,"indent":0,"parameters":["\\pop[a2]Kill it!"]},{"code":122,"indent":0,"parameters":[1,1,0,0,0]},{"code":117,"indent":0,"parameters":[11]},{"code":122,"indent":0,"parameters":[25,25,0,0,2]},{"code":117,"indent":0,"parameters":[103]},{"code":117,"indent":0,"parameters":[16]},{"code":117,"indent":0,"parameters":[6]},{"code":108,"indent":0,"parameters":["progress to the \"defeat 1x erocian slime\" objective."]},{"code":357,"indent":0,"parameters":["j/omni/ext/J-OMNI-Quests","progress-quest","Progress Quest",{"key":"main-000"}]},{"code":657,"indent":0,"parameters":["key = main-000"]},{"code":123,"indent":0,"parameters":["A",0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":3,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":true,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":18,"y":18}, +{"id":2,"name":"BOSS: Syrup","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"m_slimes","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":205,"indent":0,"parameters":[0,{"list":[{"code":39,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":39,"indent":null}]},{"code":122,"indent":0,"parameters":[1,1,1,0,1]},{"code":108,"indent":0,"parameters":[""]},{"code":408,"indent":0,"parameters":[""]},{"code":408,"indent":0,"parameters":[""]},{"code":108,"indent":0,"parameters":[""]},{"code":108,"indent":0,"parameters":[""]},{"code":108,"indent":0,"parameters":[""]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":11,"y":12}, +{"id":3,"name":"enemy tracker","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":true,"variableValue":1},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":117,"indent":0,"parameters":[104]},{"code":117,"indent":0,"parameters":[12]},{"code":117,"indent":0,"parameters":[14]},{"code":250,"indent":0,"parameters":[{"name":"Computer","volume":100,"pitch":100,"pan":0}]},{"code":230,"indent":0,"parameters":[60]},{"code":212,"indent":0,"parameters":[4,77,true]},{"code":121,"indent":0,"parameters":[4,4,0]},{"code":122,"indent":0,"parameters":[1,1,0,0,0]},{"code":244,"indent":0,"parameters":[]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":3,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":4,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":221,"indent":0,"parameters":[]},{"code":216,"indent":0,"parameters":[1]},{"code":117,"indent":0,"parameters":[5]},{"code":117,"indent":0,"parameters":[13]},{"code":117,"indent":0,"parameters":[8]},{"code":126,"indent":0,"parameters":[241,0,0,2]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":36,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":36,"indent":null}]},{"code":201,"indent":0,"parameters":[0,11,18,12,4,2]},{"code":121,"indent":0,"parameters":[1,1,0]},{"code":222,"indent":0,"parameters":[]},{"code":101,"indent":0,"parameters":["face_je",1,0,2,"\\N[1]"]},{"code":401,"indent":0,"parameters":["\\pop[a1]That wasn't so hard!"]},{"code":101,"indent":0,"parameters":["face_rp",4,0,0,"\\N[2]"]},{"code":401,"indent":0,"parameters":["\\pop[e7]It was pretty easy\\..\\..\\.."]},{"code":213,"indent":0,"parameters":[7,6,false]},{"code":101,"indent":0,"parameters":["face_rp",6,0,0,"\\N[2]"]},{"code":401,"indent":0,"parameters":["\\pop[e7]Slimes just aren't as strong as they used to be anymore"]},{"code":401,"indent":0,"parameters":["I guess."]},{"code":101,"indent":0,"parameters":["face_je",4,0,2,"\\N[1]"]},{"code":401,"indent":0,"parameters":["\\pop[a1]Nope!\\."]},{"code":401,"indent":0,"parameters":["And thats fine,\\. because we got the \\Item[241] so"]},{"code":401,"indent":0,"parameters":["we can make the \\Item[518]!"]},{"code":101,"indent":0,"parameters":["face_je",0,0,2,"\\N[1]"]},{"code":401,"indent":0,"parameters":["\\pop[a1]I wonder where the nearest town is that we can cook up"]},{"code":401,"indent":0,"parameters":["this recipe..."]},{"code":101,"indent":0,"parameters":["face_rp",1,0,1,"\\N[2]"]},{"code":401,"indent":0,"parameters":["\\pop[e7]There was one not too far \\C[2]West of this cave\\C[0].\\."]},{"code":401,"indent":0,"parameters":["I saw it while I was scouting last night on the way here."]},{"code":101,"indent":0,"parameters":["face_je",1,0,2,"\\N[1]"]},{"code":401,"indent":0,"parameters":["\\pop[a1]Fuck yeah."]},{"code":101,"indent":0,"parameters":["face_je",3,0,2,"\\N[1]"]},{"code":401,"indent":0,"parameters":["\\pop[a1]Let's get out of this dank cave and cook up that pudding."]},{"code":205,"indent":0,"parameters":[7,{"list":[{"code":3,"indent":null},{"code":3,"indent":null},{"code":3,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":3,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":3,"indent":null}]},{"code":505,"indent":0,"parameters":[{"code":3,"indent":null}]},{"code":205,"indent":0,"parameters":[-1,{"list":[{"code":16,"indent":null},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":16,"indent":null}]},{"code":213,"indent":0,"parameters":[-1,2,true]},{"code":101,"indent":0,"parameters":["face_je",4,0,2,"\\N[1]"]},{"code":401,"indent":0,"parameters":["\\pop[a1]Looks like a vine fell down when we slapped that slime."]},{"code":101,"indent":0,"parameters":["face_je",1,0,2,"\\N[1]"]},{"code":401,"indent":0,"parameters":["\\pop[a1]I bet that will most certainly return us conveniently to the"]},{"code":401,"indent":0,"parameters":["entrance of this shit hole."]},{"code":121,"indent":0,"parameters":[1,1,1]},{"code":123,"indent":0,"parameters":["A",0]},{"code":244,"indent":0,"parameters":[]},{"code":216,"indent":0,"parameters":[0]},{"code":121,"indent":0,"parameters":[101,101,0]},{"code":357,"indent":0,"parameters":["j/hud/J-HUD","showAllies","Show Allies",{}]},{"code":357,"indent":0,"parameters":["j/abs/J-ABS","Enable Party Rotation","Enable Party Rotation",{}]},{"code":117,"indent":0,"parameters":[6]},{"code":108,"indent":0,"parameters":["unlock the next main story quest."]},{"code":357,"indent":0,"parameters":["j/omni/ext/J-OMNI-Quests","unlock-quests","Unlock Quest(s)",{"keys":"[\"main-001\"]"}]},{"code":657,"indent":0,"parameters":["keys = [\"main-001\"]"]},{"code":108,"indent":0,"parameters":["switch tracking to the next quest."]},{"code":357,"indent":0,"parameters":["j/omni/ext/J-OMNI-Quests","set-quest-tracking","Set Quest Tracking",{"key":"main-000","trackingState":"false"}]},{"code":657,"indent":0,"parameters":["key = main-000"]},{"code":657,"indent":0,"parameters":["trackingState = false"]},{"code":357,"indent":0,"parameters":["j/omni/ext/J-OMNI-Quests","set-quest-tracking","Set Quest Tracking",{"key":"main-001","trackingState":"true"}]},{"code":657,"indent":0,"parameters":["key = main-001"]},{"code":657,"indent":0,"parameters":["trackingState = true"]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":3,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":true,"switch1Id":4,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":19,"y":18}, {"id":4,"name":"vine bottom","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":4,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":15,"characterName":"","characterIndex":0,"direction":2,"pattern":0},"list":[{"code":201,"indent":0,"parameters":[0,4,31,9,2,0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":5,"y":5}, {"id":5,"name":"vine middle section","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":4,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":7,"characterName":"","characterIndex":0,"direction":2,"pattern":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":5,"y":4}, {"id":6,"name":"vine middle section","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":4,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":7,"characterName":"","characterIndex":0,"direction":2,"pattern":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":5,"y":3}, diff --git a/chef-adventure/data/Map014.json b/chef-adventure/data/Map014.json index 7285bade..4bc0fa6a 100644 --- a/chef-adventure/data/Map014.json +++ b/chef-adventure/data/Map014.json @@ -3,7 +3,7 @@ "data":[7424,7424,7424,7424,7424,7424,7424,7424,7424,7424,7424,7424,7424,7424,7424,7424,7424,7424,7424,7424,7424,7424,7424,7424,7424,7428,7462,2834,2844,2854,2882,2902,2832,2840,7464,7452,7452,7432,7424,7424,7424,7424,7424,7424,7424,7424,7424,7424,7424,7424,7424,7424,7424,7424,7424,7424,7424,7424,7424,7424,7424,7424,7424,7424,7424,7424,7424,7424,7424,7424,7424,7424,7424,7424,7424,7424,7428,7452,7452,7452,7462,7815,2848,2907,2897,2891,2859,2825,2840,7811,7810,7810,7464,7452,7452,7452,7452,7452,7452,7452,7452,7452,7432,7424,7424,7424,7424,7424,7424,7424,7424,7428,7452,7452,7452,7452,7452,7432,7424,7424,7424,7424,7424,7424,7424,7424,7424,7424,7424,7424,7428,7462,7810,7810,7810,7814,7813,2833,2836,2852,2905,2901,2832,2840,7809,7808,7808,7811,7810,7810,7810,7810,7810,7810,7810,7810,7810,7440,7424,7424,7424,7424,7424,7424,7424,7452,7462,7810,7810,7810,7810,7810,7464,7452,7452,7452,7452,7452,7452,7452,7452,7452,7452,7452,7452,7462,7814,7808,7808,7808,7808,7812,2832,2816,2818,2852,2896,2832,2840,7809,7808,7808,7809,7808,7808,7808,7808,7808,7808,7808,7808,7808,7464,7452,7452,7452,7452,7452,7452,7452,7811,7814,7808,7808,7808,7808,7808,7811,7810,7810,7810,7810,7810,7810,7810,7810,7810,7810,7810,7810,7814,7812,7808,7808,7808,7812,7820,2832,2816,2816,2840,2896,2832,2840,7817,7816,7816,7809,7808,7808,7808,7808,7808,7808,7808,7808,7808,7811,7810,7810,7810,7810,7810,7810,7810,7809,7812,7809,7808,7808,7808,7808,7809,7808,7808,7808,7808,7808,7808,7808,7808,7808,7808,7808,7808,7808,7812,7816,7816,7816,7820,2850,2817,2816,2820,2854,2896,2832,2818,2836,2836,2852,7817,7816,7816,7816,7816,7816,7816,7816,7816,7816,7809,7808,7808,7808,7808,7808,7808,7808,7809,7812,7817,7816,7816,7816,7816,7809,7808,7808,7808,7808,7808,7808,7808,7808,7808,7808,7808,7808,7812,7820,2850,2836,2836,2836,2817,2816,2816,2840,2898,2890,2856,2824,2816,2816,2818,2836,2836,2836,2836,2836,2836,2836,2836,2836,2852,7809,7808,7808,7808,7808,7808,7808,7808,7817,7820,2850,2836,2836,2836,2852,7817,7816,7816,7816,7816,7816,7816,7816,7816,7816,7816,7816,7816,7820,2850,2817,2816,2816,2816,2816,2816,2816,2840,2880,2866,2900,2832,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2840,7817,7816,7816,7816,7816,7816,7816,7816,2836,2836,2817,2816,2816,2816,2818,2836,2836,2836,2836,2836,2836,2836,2836,2836,2836,2836,2836,2836,2836,2817,2816,2816,2816,2816,2816,2816,2816,2840,2904,2872,2888,2832,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2818,2836,2836,2836,2836,2836,2836,2836,2836,2844,2844,2844,2844,2844,2844,2844,2844,2844,2844,2844,2844,2844,2844,2844,2844,2844,2844,2844,2844,2844,2844,2844,2844,2844,2844,2844,2844,2844,2846,2861,2904,2902,2856,2844,2844,2844,2844,2844,2844,2844,2844,2844,2844,2844,2844,2844,2844,2844,2844,2844,2844,2844,2844,2844,2980,2980,2980,2980,2980,2980,2980,2980,2980,2980,2980,2980,2980,2980,2980,2980,2980,2980,2980,2980,2980,2980,2980,2980,2980,2980,2980,2980,2980,2980,2980,2980,2980,2980,2980,2980,2980,2980,2980,2980,2980,2980,2980,2980,2980,2980,2980,2980,2980,2980,2980,2980,2980,2980,2980,2960,2960,2960,2960,2960,2960,2960,2960,2960,2960,2960,2960,2960,2960,2960,2960,2960,2960,2960,2960,2960,2960,2960,2960,2960,2960,2960,2960,2960,2960,2960,2960,2960,2960,2960,2960,2960,2960,2960,2960,2960,2960,2960,2960,2960,2960,2960,2960,2960,2960,2960,2960,2960,2960,2960,2988,2988,2988,2988,2988,2988,2988,2988,2988,2988,2988,2988,2988,2988,2988,2988,2988,2988,2988,2988,2988,2988,2988,2988,2988,2988,2988,2988,2988,2988,2988,2988,2988,2988,2988,2988,2988,2988,2988,2988,2988,2988,2988,2988,2988,2988,2988,2988,2988,2988,2988,2988,2988,2988,2988,2836,2836,2836,2836,2836,2836,2836,2836,2836,2836,2836,2836,2836,2836,2836,2836,2836,2836,2836,2836,2836,2836,2836,2836,2852,1552,2850,2836,2836,2852,2898,2884,2900,2859,2838,2836,2836,2836,2836,2836,2836,2836,2836,2836,2836,2836,2836,2836,2836,2836,2836,2836,2836,2837,2849,2816,2816,2816,2820,2844,2844,2844,2844,2844,2844,2844,2824,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2818,2836,2817,2816,2816,2840,2904,2892,2874,2900,2832,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2840,7458,2816,2816,2820,2854,7458,7444,7444,7444,7444,7444,7460,2856,2844,2844,2824,2816,2816,2816,2816,2820,2844,2844,2844,2824,2816,2816,2816,2816,2816,2822,2849,2853,2882,2902,2832,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2820,2844,2854,7440,2820,2844,2854,7458,7425,7424,7424,7424,7424,7424,7426,7444,7444,7460,2856,2844,2844,2844,2844,2854,7458,7444,7460,2856,2844,2824,2816,2816,2816,2840,1552,2848,2896,2851,2845,2824,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2840,7458,7444,7425,2854,7458,7444,7425,7424,7424,7428,7452,7452,7452,7432,7424,7424,7426,7444,7445,7457,7457,7446,7444,7425,7424,7426,7444,7460,2856,2824,2816,2816,2818,2837,2855,2896,2848,1552,2832,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2840,7440,7424,7424,7444,7425,7428,7452,7452,7452,7462,7810,7810,7810,7464,7452,7452,7452,7452,7462,7810,7810,7464,7452,7432,7424,7424,7424,7426,7460,2832,2816,2816,2816,2840,2907,2891,2857,2838,2817,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2840,7440,7424,7424,7424,7424,7448,7810,7810,7810,7814,7809,7808,7812,7811,7810,7810,7810,7810,7814,7808,7808,7811,7810,7440,7424,7424,7424,7424,7448,2832,2816,2816,2816,2818,2852,2905,2901,2832,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2820,2844,2844,2844,2844,2854,7440,7424,7424,7424,7424,7448,7808,7808,7808,7812,7809,7808,7812,7809,7808,7808,7808,7808,7812,7808,7808,7809,7808,7464,7452,7452,7452,7452,7449,2856,2824,2816,2816,2816,2822,2861,2896,2832,2816,2816,2820,2844,2844,2844,2824,2816,2816,2816,2816,2840,7458,7444,7444,7444,7444,7425,7424,7424,7424,7424,7448,7808,7808,7808,7812,7816,7816,7816,7809,7808,7808,7808,7808,7812,7816,7816,7809,7808,7811,7810,7810,7810,7810,7441,7460,2856,2824,2816,2816,2840,2898,2890,2832,2816,2816,2840,7458,7444,7460,2856,2844,2844,2844,2844,2854,7440,7424,7424,7424,7424,7424,7424,7424,7424,7424,7448,7816,7816,7816,7820,2850,2836,2852,7817,7816,7816,7816,7816,7820,2850,2852,7817,7816,7809,7808,7808,7808,7808,7464,7454,7469,2834,2844,2844,2854,2880,2888,2832,2816,2816,2840,7440,7424,7426,7444,7444,7444,7444,7444,7444,7425,7424,7424,7424,7424,7424,7424,7424,7424,7424,7448,2850,2836,2836,2836,2817,2820,2846,2839,2849,2838,2836,2836,2836,2817,2818,2836,2852,7809,7808,7808,7808,7808,7811,7810,7814,2848,1552,2907,2897,2877,2902,2832,2820,2844,2854,7440,7424,7424,7424,7424,7424,7424,7424,7424,7424,7424,7424,7424,7424,7424,7424,7424,7424,7424,7448,2832,2816,2816,2816,2816,2840,2910,2860,1552,2832,2816,2816,2816,2816,2816,2816,2840,7817,7816,7816,7816,7816,7809,7808,7812,2833,2836,2837,2861,2896,2859,2825,2840,7467,7457,7453,7452,7452,7452,7432,7424,7424,7424,7424,7428,7452,7452,7452,7432,7424,7424,7424,7424,7424,7448,2832,2816,2816,2816,2816,2818,2852,2910,2859,2845,2824,2816,2816,2816,2816,2816,2840,1552,2850,2836,2836,2852,7809,7808,7812,2832,2816,2840,2898,2871,2909,2832,2840,7811,7810,7810,7810,7810,7810,7464,7436,7452,7452,7452,7462,7810,7810,7810,7464,7432,7424,7424,7424,7424,7448,2856,2844,2844,2824,2816,2816,2818,2852,2907,2909,2856,2824,2816,2816,2816,2816,2818,2836,2817,2816,2820,2854,7817,7816,7820,2856,2844,2854,2882,2902,2850,2817,2840,7809,7808,7808,7808,7808,7808,7815,7468,7811,7810,7810,7814,7808,7808,7808,7811,7464,7452,7432,7424,7424,7426,7444,7444,7460,2832,2816,2816,2816,2818,2836,2852,2910,2856,2844,2844,2844,2844,2844,2844,2844,2828,2854,2899,2897,2897,2897,2897,2886,2884,2890,2850,2817,2820,2854,7809,7808,7808,7808,7808,7808,7813,7815,7809,7808,7808,7812,7808,7808,7808,7809,7811,7810,7440,7424,7424,7424,7424,7424,7448,2856,2824,2816,2816,2816,2816,2818,2852,2907,2897,2897,2886,2884,2885,2897,2909,2848,2907,2903,7459,7457,7469,2858,2904,2872,2888,2856,2824,2840,1552,7817,7816,7816,7816,7816,7816,7813,7813,7809,7808,7808,7812,7816,7816,7816,7809,7809,7808,7440,7424,7424,7424,7424,7424,7426,7460,2832,2816,2816,2816,2816,2816,2840,1552,2859,2853,2882,2892,2902,2850,2837,2847,2861,7458,7450,7810,7814,2833,2852,2882,2894,2901,2856,2826,2836,2836,2836,2837,2849,2861,1552,7817,7813,7816,7816,7816,7820,2898,2885,2909,7817,7809,7808,7440,7424,7424,7424,7424,7424,7424,7448,2856,2844,2844,2824,2820,2844,2841,2898,2900,2860,2896,1552,2850,2817,2840,7458,7444,7425,7448,7808,7812,2856,2841,2908,2858,2905,2901,2856,2844,2844,2844,2854,2899,2909,2859,2861,7821,2859,2849,2861,1552,2904,2889,2859,2853,7817,7816,7440,7424,7424,7424,7424,7424,7424,7426,7444,7444,7460,2856,2854,1552,2848,2904,2874,2885,2903,2850,2817,2820,2854,7440,7424,7424,7448,7808,7812,2910,2833,2836,2819,2852,2905,2897,2897,2897,2897,2897,2903,2858,2907,2897,2897,2897,2897,2886,2900,2858,2883,2909,2848,1552,2858,7440,7424,7424,7424,7424,7424,7424,7424,7424,7424,7426,7444,7460,2850,2819,2852,2880,2888,2850,2817,2816,2840,7458,7425,7424,7424,7448,7816,7820,2850,2817,2820,2844,2846,2849,2849,2849,2849,2849,2849,2849,2847,2849,2861,7466,2851,2861,2904,2902,2848,2908,2850,2819,2837,2855,7440,7424,7424,7424,7424,7424,7424,7424,7424,7424,7424,7424,7448,2832,2820,2854,2880,2888,2856,2824,2820,2854,7440,7424,7424,7424,7448,2859,2849,2845,2844,2854,7458,7444,7444,7444,7444,7444,7444,7444,7444,7444,7444,7444,7450,2860,1552,2859,2849,2847,2849,2845,2844,2854,7458,7425,7424,7424,7424,7424,7424,7424,7424,7424,7424,7424,7424,7448,2832,2840,2898,2865,2866,2900,2832,2840,7458,7425,7424,7424,7424,7426,7444,7444,7444,7444,7444,7425,7424,7424,7424,7424,7424,7424,7424,7424,7424,7424,7424,7426,7444,7444,7444,7444,7444,7444,7444,7444,7444,7425,7424,0,0,0,0,0,0,3048,3036,3036,3036,3016,3008,3008,3008,3008,3008,3008,3008,3012,3046,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3048,3036,3036,3036,3036,3046,0,0,0,0,3048,3016,3032,0,0,0,0,0,0,0,0,0,0,0,0,3048,3016,3008,3008,3008,3008,3008,3012,3046,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3048,3046,0,0,0,0,0,0,0,0,0,0,0,0,0,3048,3036,3036,3036,3036,3036,3046,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3051,3045,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3049,3030,3044,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3051,3053,0,0,0,0,0,0,3048,3038,3030,3028,3028,3029,3041,3041,3045,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3042,3044,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3054,0,0,0,0,0,0,0,0,0,0,3048,3036,3036,3046,0,0,3049,3053,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3043,3037,3038,3041,3041,3030,3028,3028,3028,3028,3028,3028,3028,3028,3028,3044,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3051,3041,3041,3045,0,0,0,0,0,0,0,0,0,0,3052,0,0,0,0,3048,3036,3036,3036,3036,3036,3036,3036,3036,3036,3038,3053,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3049,3053,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3042,3044,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3051,3041,3041,3041,3037,3038,3041,3053,0,0,3050,0,0,0,3051,3053,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3043,3041,3045,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3049,3041,3041,3053,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3043,3047,0,3040,0,0,0,0,0,0,0,0,0,0,3051,3041,3041,3053,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3050,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3043,3047,0,3043,3047,0,0,0,0,0,0,3051,3053,0,3054,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3054,0,3050,0,0,0,0,3049,3045,0,0,0,0,0,0,0,0,0,0,0,0,0,3051,3041,3041,3041,3035,0,0,3052,0,0,0,0,0,0,3050,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3042,3011,3044,0,0,0,0,3052,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3049,3041,3053,0,0,0,0,0,0,3028,3034,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3048,3020,3046,0,0,0,0,0,3054,0,0,0,0,0,0,0,3050,0,0,0,0,0,3051,3041,3053,0,0,0,0,0,0,0,0,3042,3008,3032,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3052,0,0,0,0,0,0,0,3054,0,0,0,0,0,3042,3015,3041,3041,3053,0,0,0,0,0,0,0,0,0,3042,3044,0,0,3048,3036,3022,3053,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3024,3032,0,0,0,0,0,0,0,0,0,0,0,0,3048,3038,3031,3053,0,0,3052,0,0,0,0,0,3042,3044,0,0,0,0,0,0,0,0,3050,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3042,3009,3032,0,0,0,0,0,0,0,0,0,0,3051,3053,0,0,3052,0,0,0,0,0,3042,3028,3028,3028,3013,3038,3041,3041,3041,3041,3045,0,3042,3028,3015,3053,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3026,3036,3046,0,0,0,0,0,0,0,0,0,3054,0,0,0,0,0,3050,0,0,0,0,3024,3008,3008,3008,3032,0,0,0,0,0,3049,3041,3037,3016,3032,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3040,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3049,3030,3044,0,0,3024,3008,3008,3008,3010,3044,0,0,0,0,0,0,0,3048,3033,0,0,0,3051,3041,3053,0,0,0,0,0,0,0,0,0,0,0,3040,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3048,3032,0,0,3048,3036,3036,3016,3008,3010,3044,0,0,0,0,3051,3053,0,3049,3041,3041,3053,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3052,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3032,0,0,0,0,0,3024,3008,3008,3010,3044,0,3043,3053,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3032,0,0,0,0,0,3048,3016,3008,3008,3010,3028,3034,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3038,3041,3041,3041,3045,0,0,3048,3016,3008,3008,3012,3046,0,0,0,0,0,0,0,3051,3041,3053,0,0,0,0,0,0,0,0,0,0,0,0,0,3042,3028,3044,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3040,0,0,0,3048,3036,3020,3046,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3048,3036,3046,0,0,3051,3053,0,3054,0,0,0,0,0,0,0,0,0,0,0,0,0,3051,3019,3044,0,0,0,0,3052,0,0,0,0,0,0,0,3054,0,0,0,0,0,0,0,0,0,0,0,3042,3044,0,0,0,0,0,0,0,0,3050,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3024,3010,3044,0,0,0,0,0,0,0,0,0,0,0,0,3051,3053,0,0,0,0,0,0,0,3042,3028,3013,3038,3041,3041,3041,3041,3041,3041,3041,3041,3047,0,0,0,0,0,0,0,0,0,0,3042,3029,3053,0,0,0,0,0,3048,3036,3018,3028,3044,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3051,3041,3037,3036,3046,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3051,3041,3037,3046,0,0,0,0,0,0,0,0,3024,3008,3010,3044,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3042,3028,3044,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,531,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,121,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,523,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,531,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,101,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,101,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,523,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,101,0,0,0,0,0,0,0,0,0,0,0,0,0,0,531,532,0,0,0,0,0,0,0,523,524,532,0,0,531,532,0,0,0,93,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,112,113,0,0,515,516,0,0,0,0,0,0,0,0,0,0,0,0,0,531,532,0,0,103,0,0,0,91,0,101,0,102,102,0,0,0,0,0,0,0,0,0,0,0,0,0,0,102,0,0,102,0,0,0,0,120,93,93,0,523,524,91,0,0,91,0,102,0,102,102,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,195,0,101,101,0,531,532,0,0,102,0,0,0,0,0,0,0,0,0,0,102,0,102,0,0,0,0,0,102,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,195,0,0,0,0,0,0,0,0,102,102,0,0,0,102,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,93,0,0,0,0,0,0,0,0,0,93,0,0,0,0,0,0,515,516,194,0,0,0,0,0,0,0,0,0,0,0,515,516,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,515,516,0,93,93,101,0,88,0,0,0,0,0,0,0,101,0,0,0,0,203,0,523,524,202,194,0,0,0,0,0,0,0,0,0,0,523,524,0,192,93,0,0,0,0,0,0,0,0,192,0,0,0,0,515,516,524,0,101,101,0,0,0,0,0,0,0,0,0,0,0,0,90,0,0,0,103,531,532,0,0,0,0,0,0,0,0,0,0,0,0,531,532,0,0,101,93,0,0,0,0,203,0,0,200,0,0,0,0,523,524,532,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,88,0,0,0,0,0,0,0,93,93,93,0,0,0,0,0,0,0,0,0,0,102,101,0,0,0,0,0,0,0,90,0,0,103,0,531,532,102,0,0,88,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,101,93,101,0,0,0,0,0,0,0,0,0,0,0,0,0,103,0,91,0,0,0,0,0,88,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,101,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,515,516,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,91,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,515,516,0,523,524,0,0,0,0,88,0,0,0,0,0,0,0,0,88,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,102,0,0,0,523,0,0,531,532,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,91,0,0,515,516,0,0,0,0,0,0,91,0,0,0,0,0,0,0,0,0,0,0,0,0,515,516,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,523,0,0,0,0,0,0,0,0,0,0,0,102,102,0,0,0,0,0,0,102,0,0,0,0,0,0,0,112,113,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,102,0,0,0,531,0,0,0,0,0,0,102,0,102,0,0,0,0,0,102,0,0,102,0,0,0,0,102,0,0,0,0,120,121,0,0,0,88,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,102,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,102,0,102,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,0,0,112,113,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,102,102,0,102,0,0,93,0,0,0,0,0,0,0,0,0,0,0,0,0,515,516,0,0,0,0,0,120,121,0,0,0,0,0,0,0,0,0,0,0,0,0,0,193,93,0,0,193,0,0,0,93,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,88,0,0,0,523,524,515,516,0,0,93,0,0,0,0,103,0,0,0,0,0,0,0,203,0,0,0,0,101,0,193,201,0,194,0,101,0,0,0,0,0,195,0,0,0,102,0,0,0,0,0,0,0,0,0,0,0,102,0,531,532,0,0,0,0,0,0,0,0,0,0,0,0,112,0,0,0,0,0,90,0,0,0,0,0,0,0,0,0,0,0,102,0,515,516,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,88,0,0,0,0,0,0,0,0,120,0,0,0,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,523,524,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,102,0,0,91,0,0,0,0,0,102,102,0,0,88,0,0,0,0,0,0,91,0,0,0,0,0,0,0,0,88,0,0,0,0,0,531,532,0,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,102,0,102,0,0,0,0,0,0,0,0,0,112,113,0,103,0,0,0,0,0,0,0,0,0,0,0,88,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,120,121,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,194,0,0,0,0,0,0,0,0,0,374,0,0,0,0,0,0,0,0,515,516,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,202,0,0,0,0,0,0,0,0,0,382,0,0,0,195,0,0,0,0,523,524,0,0,0,0,88,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,91,0,102,0,0,0,203,0,0,0,0,0,0,0,0,0,0,0,0,0,531,532,0,0,93,102,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,88,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,91,0,0,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,102,0,0,0,103,0,0,112,113,0,0,93,92,0,515,516,0,0,0,0,0,90,0,0,0,0,0,0,0,0,0,0,0,515,516,0,0,0,0,0,0,0,0,0,88,0,0,0,0,0,102,0,0,0,0,0,0,0,0,0,0,0,120,121,0,0,93,0,93,523,524,0,0,0,0,0,515,516,0,0,0,0,0,112,113,0,0,515,516,524,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,112,113,0,88,0,0,515,516,0,0,93,93,93,93,101,0,0,0,0,0,0,0,523,524,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], "events":[ null, -{"id":1,"name":"teleport to intro dungeon","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":250,"indent":0,"parameters":[{"name":"Move1","volume":90,"pitch":100,"pan":0}]},{"code":117,"indent":0,"parameters":[5]},{"code":242,"indent":0,"parameters":[2]},{"code":221,"indent":0,"parameters":[]},{"code":250,"indent":0,"parameters":[{"name":"Move1","volume":90,"pitch":100,"pan":0}]},{"code":201,"indent":0,"parameters":[0,4,8,11,8,0]},{"code":230,"indent":0,"parameters":[90]},{"code":223,"indent":0,"parameters":[[-68,-68,-68,0],1,true]},{"code":224,"indent":0,"parameters":[[85,0,255,68],30,false]},{"code":222,"indent":0,"parameters":[]},{"code":117,"indent":0,"parameters":[6]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":49,"y":28,"meta":{}}, +{"id":1,"name":"teleport to intro dungeon","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":250,"indent":0,"parameters":[{"name":"Move1","volume":90,"pitch":100,"pan":0}]},{"code":117,"indent":0,"parameters":[5]},{"code":242,"indent":0,"parameters":[2]},{"code":221,"indent":0,"parameters":[]},{"code":250,"indent":0,"parameters":[{"name":"Move1","volume":90,"pitch":100,"pan":0}]},{"code":201,"indent":0,"parameters":[0,4,8,11,8,0]},{"code":230,"indent":0,"parameters":[90]},{"code":224,"indent":0,"parameters":[[85,0,255,68],30,false]},{"code":222,"indent":0,"parameters":[]},{"code":117,"indent":0,"parameters":[6]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":49,"y":28,"meta":{}}, {"id":2,"name":"learn: cycling party & tools","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":117,"indent":0,"parameters":[5]},{"code":101,"indent":0,"parameters":["face_rp",0,0,0,"\\N[2]"]},{"code":401,"indent":0,"parameters":["\\pop[a1]So in case you forgot what direction \\C[2]West\\C[0] is,\\. \\N[1],\\."]},{"code":401,"indent":0,"parameters":["our developer was kind enough to make sure this was true:\\."]},{"code":401,"indent":0,"parameters":["\\C[1]North\\C[0] is always \\C[1]Up\\C[0]... if you get whatever that means."]},{"code":101,"indent":0,"parameters":["face_rp",0,0,0,"\\N[2]"]},{"code":401,"indent":0,"parameters":["\\pop[a1]This means \\C[2]West\\C[0] should be to the \\C[2]Left\\C[0]."]},{"code":118,"indent":0,"parameters":["CHOICE"]},{"code":102,"indent":0,"parameters":[["Refresh on party cycling.","Refresh on equipping non-gear.","Onward!"],2,0,1,0]},{"code":402,"indent":0,"parameters":[0,"Refresh on party cycling."]},{"code":101,"indent":1,"parameters":["face_je",1,0,0,"\\N[1]"]},{"code":401,"indent":1,"parameters":["\\pop[a1]So,\\. \\N[2],\\. since we're both out here and clearly hangin'"]},{"code":401,"indent":1,"parameters":["out together,\\. why don't we refresh on what party cycling is?"]},{"code":101,"indent":1,"parameters":["face_rp",1,0,2,"\\N[2]"]},{"code":401,"indent":1,"parameters":["\\pop[a1]Aww yeah!"]},{"code":101,"indent":1,"parameters":["face_je",1,0,0,"\\N[1]"]},{"code":401,"indent":1,"parameters":["\\pop[a1]Great."]},{"code":101,"indent":1,"parameters":["face_je",4,0,0,"\\N[1]"]},{"code":401,"indent":1,"parameters":["\\pop[a1]Party cycling is deciding who you,\\. the \\C[11]Player\\C[0],\\. controls."]},{"code":101,"indent":1,"parameters":["face_je",4,0,0,"\\N[1]"]},{"code":401,"indent":1,"parameters":["\\pop[a1]If you want me to switch and leave it to \\N[2],"]},{"code":401,"indent":1,"parameters":["then just let me know."]},{"code":101,"indent":1,"parameters":["face_je",1,0,0,"\\N[1]"]},{"code":401,"indent":1,"parameters":["\\pop[a1]Its good stuff since there is a lot of shit he can do that I can't,\\."]},{"code":401,"indent":1,"parameters":["and vice versa."]},{"code":101,"indent":1,"parameters":["face_rp",4,0,2,"\\N[2]"]},{"code":401,"indent":1,"parameters":["\\pop[a1]Yep,\\. if you need to keep your distance from a foe,\\. or"]},{"code":401,"indent":1,"parameters":["they look heavily armed,\\. just switch to me and I'll take a"]},{"code":401,"indent":1,"parameters":["stab at it with my magic and shit."]},{"code":101,"indent":1,"parameters":["face_je",7,0,0,"\\N[1]"]},{"code":401,"indent":1,"parameters":["\\pop[a1]And if you need someone to slap their heads off with a"]},{"code":401,"indent":1,"parameters":["swing of the axe,\\. or give something a good shove,\\. then"]},{"code":401,"indent":1,"parameters":["switch to me."]},{"code":101,"indent":1,"parameters":["face_je",1,0,0,"\\N[1]"]},{"code":401,"indent":1,"parameters":["\\pop[a1]And all ya gotta do is push the \\I[2457] button!"]},{"code":119,"indent":1,"parameters":["CHOICE"]},{"code":0,"indent":1,"parameters":[]},{"code":402,"indent":0,"parameters":[1,"Refresh on equipping non-gear."]},{"code":101,"indent":1,"parameters":["face_je",3,0,2,"\\N[1]"]},{"code":401,"indent":1,"parameters":["\\pop[a1]More tutorials?"]},{"code":101,"indent":1,"parameters":["face_rp",1,0,0,"\\N[2]"]},{"code":401,"indent":1,"parameters":["\\pop[a1]This one is easy and important!"]},{"code":101,"indent":1,"parameters":["face_rp",4,0,0,"\\N[2]"]},{"code":401,"indent":1,"parameters":["\\pop[a1]First, bring up the menu by pushing the"]},{"code":401,"indent":1,"parameters":["\\I[2456] button."]},{"code":101,"indent":1,"parameters":["face_rp",4,0,0,"\\N[2]"]},{"code":401,"indent":1,"parameters":["\\pop[a1]Then choose the \\C[2]Loadout\\C[0] option."]},{"code":101,"indent":1,"parameters":["face_rp",4,0,0,"\\N[2]"]},{"code":401,"indent":1,"parameters":["\\pop[a1]Then,\\. pick your slot and pick your choice!"]},{"code":101,"indent":1,"parameters":["face_rp",6,0,0,"\\N[2]"]},{"code":401,"indent":1,"parameters":["\\pop[a1]Oh, and tools are used by pressing the \\I[2451] button,"]},{"code":401,"indent":1,"parameters":["while usable items are used by pressing the \\I[2455] button."]},{"code":101,"indent":1,"parameters":["face_rp",1,0,0,"\\N[2]"]},{"code":401,"indent":1,"parameters":["\\pop[a1]For your convenience,\\. I'll contribute a few potions.\\."]},{"code":401,"indent":1,"parameters":["You should bring up the menu and check it out!\\."]},{"code":401,"indent":1,"parameters":["It is very important."]},{"code":101,"indent":1,"parameters":["face_je",1,0,2,"\\N[1]"]},{"code":401,"indent":1,"parameters":["\\pop[a1]Super important indeed!"]},{"code":101,"indent":1,"parameters":["face_je",4,0,2,"\\N[1]"]},{"code":401,"indent":1,"parameters":["\\pop[a1]Hey,\\. what is this funny star-shaped potion thing?\\."]},{"code":401,"indent":1,"parameters":["The \\Item[7]?"]},{"code":101,"indent":1,"parameters":["face_rp",1,0,0,"\\N[2]"]},{"code":401,"indent":1,"parameters":["\\pop[a1]Ahh that!\\."]},{"code":401,"indent":1,"parameters":["That is a special elixir I brewed for us before setting"]},{"code":401,"indent":1,"parameters":["out on this food-centric hack and slash adventure!"]},{"code":101,"indent":1,"parameters":["face_je",0,0,2,"\\N[1]"]},{"code":401,"indent":1,"parameters":["\\pop[a1]Yeah but what does it do?"]},{"code":101,"indent":1,"parameters":["face_rp",6,0,0,"\\N[2]"]},{"code":401,"indent":1,"parameters":["\\pop[a1]It is a \\C[1]reusable revival item\\C[0].\\."]},{"code":401,"indent":1,"parameters":["It has a mighty lengthy cooldown,\\. but that is because"]},{"code":401,"indent":1,"parameters":["it takes a while to self-regenerate the concoction."]},{"code":101,"indent":1,"parameters":["face_je",4,0,2,"\\N[1]"]},{"code":401,"indent":1,"parameters":["\\pop[a1]Wow that is pretty impressive!\\."]},{"code":401,"indent":1,"parameters":["Permanent revival item?!"]},{"code":101,"indent":1,"parameters":["face_rp",3,0,0,"\\N[2]"]},{"code":401,"indent":1,"parameters":["\\pop[a1]The cooldown is VERY long though...\\."]},{"code":401,"indent":1,"parameters":["\\C[2]and you can't use any other items while it is on cooldown..."]},{"code":101,"indent":1,"parameters":["face_je",3,0,2,"\\N[1]"]},{"code":401,"indent":1,"parameters":["\\pop[a1]Lets just try not to die."]},{"code":101,"indent":1,"parameters":["face_rp",1,0,0,"\\N[2]"]},{"code":401,"indent":1,"parameters":["\\pop[a1]That is the optimal choice!"]},{"code":101,"indent":1,"parameters":["face_je",4,0,2,"\\N[1]"]},{"code":401,"indent":1,"parameters":["\\pop[a1]Oh yeah, and to reiterate..."]},{"code":101,"indent":1,"parameters":["face_je",1,0,2,"\\N[1]"]},{"code":401,"indent":1,"parameters":["\\pop[a1]You can also equip combat skills from"]},{"code":401,"indent":1,"parameters":["the same menu!"]},{"code":101,"indent":1,"parameters":["face_je",4,0,2,"\\N[1]"]},{"code":401,"indent":1,"parameters":["\\pop[a1]Both \\N[2] and I have different combat skills,\\."]},{"code":401,"indent":1,"parameters":["and \\C[2]we won't equip them without your consent\\C[0],"]},{"code":401,"indent":1,"parameters":["so be sure to take a moment and equip them when"]},{"code":401,"indent":1,"parameters":["swapping back and forth."]},{"code":119,"indent":1,"parameters":["CHOICE"]},{"code":0,"indent":1,"parameters":[]},{"code":402,"indent":0,"parameters":[2,"Onward!"]},{"code":101,"indent":1,"parameters":["face_rp",6,0,2,"\\N[2]"]},{"code":401,"indent":1,"parameters":["\\pop[a2]Don't forget that if the monsters are dangerous,\\. definitely"]},{"code":401,"indent":1,"parameters":["fight them anyway,\\. but be sure to eat the potions."]},{"code":0,"indent":1,"parameters":[]},{"code":404,"indent":0,"parameters":[]},{"code":101,"indent":0,"parameters":["",0,1,1,""]},{"code":401,"indent":0,"parameters":["Laid claim to \\N[2]'s:"]},{"code":401,"indent":0,"parameters":["- 10x\\Item[5]s "]},{"code":401,"indent":0,"parameters":["- 10x\\Item[6]s"]},{"code":401,"indent":0,"parameters":["- 1x \\Item[7]"]},{"code":126,"indent":0,"parameters":[5,0,0,10]},{"code":126,"indent":0,"parameters":[6,0,0,10]},{"code":126,"indent":0,"parameters":[7,0,0,1]},{"code":357,"indent":0,"parameters":["j/abs/J-ABS","Set JABS Skill","Assign a JABS skill",{"actorId":"1","skillId":"0","itemId":"5","slot":"UsableItem","locked":"false"}]},{"code":657,"indent":0,"parameters":["Choose Actor = 1"]},{"code":657,"indent":0,"parameters":["Choose Skill = 0"]},{"code":657,"indent":0,"parameters":["Choose Item = 5"]},{"code":657,"indent":0,"parameters":["Choose Slot = UsableItem"]},{"code":657,"indent":0,"parameters":["locked = false"]},{"code":357,"indent":0,"parameters":["j/abs/J-ABS","Set JABS Skill","Assign a JABS skill",{"actorId":"2","skillId":"0","itemId":"5","slot":"UsableItem","locked":"false"}]},{"code":657,"indent":0,"parameters":["Choose Actor = 2"]},{"code":657,"indent":0,"parameters":["Choose Skill = 0"]},{"code":657,"indent":0,"parameters":["Choose Item = 5"]},{"code":657,"indent":0,"parameters":["Choose Slot = UsableItem"]},{"code":657,"indent":0,"parameters":["locked = false"]},{"code":101,"indent":0,"parameters":["face_je",7,0,0,"\\N[1]"]},{"code":401,"indent":0,"parameters":["\\pop[a1]\\C[2]Now lets chop up some mobs.\\C[0]"]},{"code":121,"indent":0,"parameters":[110,110,0]},{"code":123,"indent":0,"parameters":["A",0]},{"code":117,"indent":0,"parameters":[6]},{"code":108,"indent":0,"parameters":["progress to the \"travel to raevula\" objective."]},{"code":357,"indent":0,"parameters":["j/omni/ext/J-OMNI-Quests","progress-quest","Progress Quest",{"key":"main-001"}]},{"code":657,"indent":0,"parameters":["key = main-001"]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":3,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":true,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":49,"y":26,"meta":{}}, {"id":3,"name":"grass","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"$o_grass","direction":8,"pattern":1,"characterIndex":0},"list":[{"code":108,"indent":0,"parameters":[""]},{"code":108,"indent":0,"parameters":[""]},{"code":408,"indent":0,"parameters":[""]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":true,"trigger":0,"walkAnime":true}],"x":35,"y":5,"meta":{}}, {"id":4,"name":"wolftrap","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"$m_vineMonster","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":108,"indent":0,"parameters":[""]},{"code":108,"indent":0,"parameters":[""]},{"code":108,"indent":0,"parameters":[""]},{"code":408,"indent":0,"parameters":[""]},{"code":408,"indent":0,"parameters":[""]},{"code":408,"indent":0,"parameters":[""]},{"code":408,"indent":0,"parameters":[""]},{"code":108,"indent":0,"parameters":[""]},{"code":408,"indent":0,"parameters":[""]},{"code":408,"indent":0,"parameters":[""]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":44,"switch1Valid":true,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"m_monsters2","direction":2,"pattern":1,"characterIndex":5},"list":[{"code":108,"indent":0,"parameters":[""]},{"code":108,"indent":0,"parameters":[""]},{"code":108,"indent":0,"parameters":[""]},{"code":408,"indent":0,"parameters":[""]},{"code":408,"indent":0,"parameters":[""]},{"code":408,"indent":0,"parameters":[""]},{"code":408,"indent":0,"parameters":[""]},{"code":108,"indent":0,"parameters":[""]},{"code":408,"indent":0,"parameters":[""]},{"code":408,"indent":0,"parameters":[""]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":19,"y":23,"meta":{}}, diff --git a/chef-adventure/data/MapInfos.json b/chef-adventure/data/MapInfos.json index 205333b8..06d21f09 100644 --- a/chef-adventure/data/MapInfos.json +++ b/chef-adventure/data/MapInfos.json @@ -3,17 +3,17 @@ null, {"id":1,"expanded":false,"name":"Test Oasis","order":5,"parentId":0,"scrollX":1454,"scrollY":1131,"quick":true}, {"id":2,"expanded":false,"name":"_ActionMap","order":1,"parentId":0,"scrollX":1101,"scrollY":754}, {"id":3,"expanded":true,"name":"DUNGEON: Intro","order":271,"parentId":14,"scrollX":1101,"scrollY":754}, -{"id":4,"expanded":false,"name":"Cave - 1 - START","order":272,"parentId":3,"scrollX":1101,"scrollY":746,"quick":true}, -{"id":5,"expanded":true,"name":"Cave - 2 - attacking","order":273,"parentId":3,"scrollX":1109,"scrollY":926}, +{"id":4,"expanded":false,"name":"Cave - 1 - START","order":272,"parentId":3,"scrollX":1138,"scrollY":796.5,"quick":true}, +{"id":5,"expanded":true,"name":"Cave - 2 - attacking","order":273,"parentId":3,"scrollX":1138,"scrollY":875.5}, {"id":6,"expanded":false,"name":"Cave - 3 - skills","order":274,"parentId":3,"scrollX":1101,"scrollY":701.5}, -{"id":7,"expanded":false,"name":"Cave - 4 - guarding","order":275,"parentId":3,"scrollX":1104,"scrollY":816}, +{"id":7,"expanded":false,"name":"Cave - 4 - guarding","order":275,"parentId":3,"scrollX":1138,"scrollY":804.5}, {"id":8,"expanded":false,"name":"Cave - 5 - battle","order":276,"parentId":3,"scrollX":1101,"scrollY":738.5}, {"id":9,"expanded":true,"name":"Cave - 6a - ranged","order":277,"parentId":3,"scrollX":816,"scrollY":800}, {"id":10,"expanded":false,"name":"Cave - 7","order":279,"parentId":3,"scrollX":1101,"scrollY":754}, {"id":11,"expanded":true,"name":"Cave - 8a","order":280,"parentId":3,"scrollX":1101,"scrollY":754}, -{"id":12,"expanded":true,"name":"Map","order":35,"parentId":0,"scrollX":1679,"scrollY":1269}, -{"id":13,"expanded":true,"name":"REGION: Western Erocia","order":61,"parentId":12,"scrollX":1101,"scrollY":746}, -{"id":14,"expanded":false,"name":"Crossroads","order":270,"parentId":333,"scrollX":1333,"scrollY":895}, +{"id":12,"expanded":true,"name":"Map","order":35,"parentId":0,"scrollX":1254,"scrollY":1269.5}, +{"id":13,"expanded":false,"name":"REGION: Western Erocia","order":61,"parentId":12,"scrollX":1138,"scrollY":796.5}, +{"id":14,"expanded":true,"name":"Crossroads","order":270,"parentId":333,"scrollX":1333,"scrollY":875.5}, {"id":15,"expanded":false,"name":"Cave - 8b","order":281,"parentId":11,"scrollX":1510,"scrollY":1104}, {"id":16,"expanded":false,"name":"Riverside Stroll","order":180,"parentId":119,"scrollX":1792,"scrollY":816}, {"id":17,"expanded":false,"name":"Stone's Throw","order":183,"parentId":119,"scrollX":1014,"scrollY":729}, @@ -332,13 +332,13 @@ null, {"id":330,"expanded":false,"name":"Entrance from Path","order":312,"parentId":291,"scrollX":1163.3999999999999,"scrollY":892.1999999999999,"quick":false}, {"id":331,"expanded":false,"name":"Entrance from Mines","order":147,"parentId":290,"scrollX":0,"scrollY":0,"quick":false}, {"id":332,"expanded":false,"name":"Shortcut to Subterranean","order":123,"parentId":54,"scrollX":1471.2,"scrollY":1222.8,"quick":false}, -{"id":333,"expanded":false,"name":"REGION: Central Erocia","order":269,"parentId":12,"scrollX":698,"scrollY":530,"quick":false}, +{"id":333,"expanded":true,"name":"REGION: Central Erocia","order":269,"parentId":12,"scrollX":698,"scrollY":530,"quick":false}, {"id":334,"expanded":false,"name":"REGION: Omnidimensional","order":36,"parentId":12,"scrollX":1101,"scrollY":701.5,"quick":false}, {"id":335,"expanded":false,"name":"North Section","order":76,"parentId":19,"scrollX":1101,"scrollY":978.5,"quick":false}, {"id":336,"expanded":false,"name":"South Section","order":87,"parentId":19,"scrollX":1104,"scrollY":1056,"quick":false}, -{"id":337,"expanded":true,"name":"Tons of Grass","order":188,"parentId":119,"scrollX":1458,"scrollY":2455.2,"quick":false}, -{"id":338,"expanded":false,"name":"Green Greenery","order":190,"parentId":119,"scrollX":1342.8,"scrollY":981.5999999999999,"quick":false}, -{"id":339,"expanded":true,"name":"Way to the Forest","order":191,"parentId":119,"scrollX":2341.2,"scrollY":972,"quick":false}, +{"id":337,"expanded":true,"name":"Tons of Grass","order":188,"parentId":119,"scrollX":1458,"scrollY":2455.5,"quick":false}, +{"id":338,"expanded":false,"name":"Green Greenery","order":190,"parentId":119,"scrollX":1343,"scrollY":981.5,"quick":false}, +{"id":339,"expanded":true,"name":"Way to the Forest","order":191,"parentId":119,"scrollX":2341,"scrollY":972.5,"quick":false}, {"id":340,"expanded":false,"name":"Northwestern Entrance","order":192,"parentId":339,"scrollX":1333.2,"scrollY":895.1999999999999,"quick":false}, {"id":341,"expanded":false,"name":"Path to the Mines","order":189,"parentId":337,"scrollX":1333.2,"scrollY":895.1999999999999,"quick":false}, {"id":342,"expanded":true,"name":"FLOOR: Ground Level","order":94,"parentId":45,"scrollX":960.5,"scrollY":743.5,"quick":false}, diff --git a/chef-adventure/data/Skills.json b/chef-adventure/data/Skills.json index fa797a49..55857e9d 100644 --- a/chef-adventure/data/Skills.json +++ b/chef-adventure/data/Skills.json @@ -140,8 +140,8 @@ null, {"id":138,"name":"Trifurcation","note":"\n\n","description":"Enhances \\skill[131], \\skill[132], and \\skill[133].\nNow fires more(+2) projectiles.","iconIndex":25,"animationId":0,"damage":{"critical":false,"elementId":0,"formula":"0","type":0,"variance":20},"effects":[],"hitType":0,"occasion":3,"repeats":1,"scope":0,"speed":0,"successRate":100,"tpGain":0,"message1":"","message2":"","messageType":1,"mpCost":0,"requiredWtypeId1":14,"requiredWtypeId2":0,"stypeId":7,"tpCost":0}, {"id":139,"name":"Alienation","note":"\n\n","description":"Enhances \\skill[131], \\skill[132], and \\skill[133].\nAttacks now are \\element[11], \\element[19], \\element[20], \\element[24].","iconIndex":25,"animationId":0,"damage":{"critical":false,"elementId":0,"formula":"0","type":0,"variance":20},"effects":[],"hitType":0,"occasion":3,"repeats":1,"scope":0,"speed":0,"successRate":100,"tpGain":0,"message1":"","message2":"","messageType":1,"mpCost":0,"requiredWtypeId1":14,"requiredWtypeId2":0,"stypeId":7,"tpCost":0}, {"id":140,"name":"Quadfurcation","note":"\n\n","description":"Enhances \\skill[131], \\skill[132], and \\skill[133].\nNow fires more(+3) projectiles.","iconIndex":25,"animationId":0,"damage":{"critical":false,"elementId":0,"formula":"0","type":0,"variance":20},"effects":[],"hitType":0,"occasion":3,"repeats":1,"scope":0,"speed":0,"successRate":100,"tpGain":0,"message1":"","message2":"","messageType":1,"mpCost":0,"requiredWtypeId1":14,"requiredWtypeId2":0,"stypeId":7,"tpCost":0}, -{"id":141,"name":"Scathe","note":"\n\n\n\n\n\n\n\n\n\n","description":"A tome technique.\nThe starter of any tome combo.","iconIndex":2063,"animationId":-1,"damage":{"critical":true,"elementId":-1,"formula":"(a.mat*2 + a.mmp*0.10) - (b.mdf*1)","type":1,"variance":0},"effects":[{"code":21,"dataId":47,"value1":1,"value2":0}],"hitType":2,"occasion":1,"repeats":1,"scope":1,"speed":0,"successRate":100,"tpGain":0,"message1":"","message2":"","messageType":1,"mpCost":0,"requiredWtypeId1":15,"requiredWtypeId2":2,"stypeId":7,"tpCost":0}, -{"id":142,"name":"Condemn","note":"\n\n\n\n\n\n\n\n\n\n","description":"A tome technique.\nA spell that condemns the target to suffering of eternal boredom.","iconIndex":2063,"animationId":-1,"damage":{"critical":true,"elementId":-1,"formula":"(a.mat*2.5 + a.mmp*0.20) - (b.mdf*1)","type":1,"variance":0},"effects":[{"code":21,"dataId":0,"value1":1,"value2":0}],"hitType":2,"occasion":1,"repeats":1,"scope":2,"speed":0,"successRate":100,"tpGain":0,"message1":"","message2":"","messageType":1,"mpCost":0,"requiredWtypeId1":15,"requiredWtypeId2":0,"stypeId":7,"tpCost":0}, +{"id":141,"name":"Scathe","note":"\n\n\n\n\n\n\n\n\n\n","description":"A tome technique.\nThe starter of any tome combo.","iconIndex":2063,"animationId":-1,"damage":{"critical":true,"elementId":-1,"formula":"(a.mat*2 + a.mmp*0.05) - (b.mdf*1)","type":1,"variance":0},"effects":[{"code":21,"dataId":47,"value1":1,"value2":0}],"hitType":2,"occasion":1,"repeats":1,"scope":1,"speed":0,"successRate":100,"tpGain":0,"message1":"","message2":"","messageType":1,"mpCost":0,"requiredWtypeId1":15,"requiredWtypeId2":2,"stypeId":7,"tpCost":0}, +{"id":142,"name":"Condemn","note":"\n\n\n\n\n\n\n\n\n\n","description":"A tome technique.\nA spell that condemns the target to suffering of eternal boredom.","iconIndex":2063,"animationId":-1,"damage":{"critical":true,"elementId":-1,"formula":"(a.mat*2.5 + a.mmp*0.10) - (b.mdf*1)","type":1,"variance":0},"effects":[{"code":21,"dataId":0,"value1":1,"value2":0}],"hitType":2,"occasion":1,"repeats":1,"scope":2,"speed":0,"successRate":100,"tpGain":0,"message1":"","message2":"","messageType":1,"mpCost":0,"requiredWtypeId1":15,"requiredWtypeId2":0,"stypeId":7,"tpCost":0}, {"id":143,"name":"Wordplay","note":"\n\n","description":"A tome technique.\nAbbreviate all linguistics, applying \\state[48] to self.","iconIndex":2063,"animationId":0,"damage":{"critical":false,"elementId":0,"formula":"0","type":0,"variance":20},"effects":[],"hitType":1,"occasion":1,"repeats":1,"scope":2,"speed":0,"successRate":100,"tpGain":0,"message1":"","message2":"","messageType":1,"mpCost":0,"requiredWtypeId1":15,"requiredWtypeId2":0,"stypeId":7,"tpCost":0}, {"id":144,"name":"Cursed Language","note":"\n","description":"Enhances \\skill[141] and \\skill[142].\nApplies \\state[49] to foes, causing their skills to cost Life to execute.","iconIndex":25,"animationId":0,"damage":{"critical":false,"elementId":0,"formula":"0","type":0,"variance":20},"effects":[{"code":21,"dataId":49,"value1":1,"value2":0}],"hitType":0,"occasion":3,"repeats":1,"scope":0,"speed":0,"successRate":100,"tpGain":0,"message1":"","message2":"","messageType":1,"mpCost":0,"requiredWtypeId1":15,"requiredWtypeId2":0,"stypeId":7,"tpCost":0}, {"id":145,"name":"Booming Voice","note":"\n\n","description":"Enhances \\skill[141] and \\skill[142].\nNow has(1.5) a splash radius, causing nearby foes to hear your boring lectures, too.","iconIndex":25,"animationId":0,"damage":{"critical":false,"elementId":0,"formula":"0","type":0,"variance":20},"effects":[],"hitType":0,"occasion":3,"repeats":1,"scope":0,"speed":0,"successRate":100,"tpGain":0,"message1":"","message2":"","messageType":1,"mpCost":0,"requiredWtypeId1":15,"requiredWtypeId2":0,"stypeId":7,"tpCost":0}, diff --git a/chef-adventure/data/States.json b/chef-adventure/data/States.json index c28f8d26..980c65eb 100644 --- a/chef-adventure/data/States.json +++ b/chef-adventure/data/States.json @@ -46,7 +46,7 @@ null, {"id":44,"name":"Shield Aura","note":"\n\n","description":"","iconIndex":38,"traits":[],"autoRemovalTiming":0,"chanceByDamage":100,"minTurns":1,"maxTurns":1,"message1":"","message2":"","message3":"","message4":"","motion":0,"overlay":0,"priority":50,"restriction":0,"removeAtBattleEnd":false,"removeByDamage":false,"removeByRestriction":false,"removeByWalking":false,"stepsToRemove":100,"messageType":1}, {"id":45,"name":"Saturation","note":"\n\n","description":"","iconIndex":37,"traits":[{"code":21,"dataId":4,"value":1.25}],"autoRemovalTiming":0,"chanceByDamage":100,"minTurns":1,"maxTurns":1,"message1":"","message2":"","message3":"","message4":"","motion":0,"overlay":0,"priority":50,"restriction":0,"removeAtBattleEnd":false,"removeByDamage":false,"removeByRestriction":false,"removeByWalking":false,"stepsToRemove":100,"messageType":1}, {"id":46,"name":"Supersaturation","note":"\n","description":"","iconIndex":25,"traits":[],"autoRemovalTiming":0,"chanceByDamage":100,"minTurns":1,"maxTurns":1,"message1":"","message2":"","message3":"","message4":"","motion":0,"overlay":0,"priority":50,"restriction":0,"removeAtBattleEnd":false,"removeByDamage":false,"removeByRestriction":false,"removeByWalking":false,"stepsToRemove":100,"messageType":1}, -{"id":47,"name":"Being Reviewed","note":"","description":"","iconIndex":189,"traits":[],"autoRemovalTiming":0,"chanceByDamage":100,"minTurns":1,"maxTurns":1,"message1":"","message2":"","message3":"","message4":"","motion":0,"overlay":9,"priority":50,"restriction":0,"removeAtBattleEnd":false,"removeByDamage":false,"removeByRestriction":false,"removeByWalking":false,"stepsToRemove":1,"messageType":1}, +{"id":47,"name":"Being Reviewed","note":"\n","description":"","iconIndex":189,"traits":[],"autoRemovalTiming":0,"chanceByDamage":100,"minTurns":1,"maxTurns":1,"message1":"","message2":"","message3":"","message4":"","motion":0,"overlay":9,"priority":50,"restriction":0,"removeAtBattleEnd":false,"removeByDamage":false,"removeByRestriction":false,"removeByWalking":false,"stepsToRemove":1,"messageType":1}, {"id":48,"name":"Abbreviation","note":"\n","description":"","iconIndex":2061,"traits":[],"autoRemovalTiming":0,"chanceByDamage":100,"minTurns":1,"maxTurns":1,"message1":"","message2":"","message3":"","message4":"","motion":0,"overlay":0,"priority":50,"restriction":0,"removeAtBattleEnd":false,"removeByDamage":false,"removeByRestriction":false,"removeByWalking":false,"stepsToRemove":100,"messageType":1}, {"id":49,"name":"Cursed","note":"\n","description":"","iconIndex":21,"traits":[],"autoRemovalTiming":0,"chanceByDamage":100,"minTurns":1,"maxTurns":1,"message1":"","message2":"","message3":"","message4":"","motion":0,"overlay":0,"priority":50,"restriction":0,"removeAtBattleEnd":false,"removeByDamage":false,"removeByRestriction":false,"removeByWalking":false,"stepsToRemove":100,"messageType":1}, {"id":50,"name":"Expound","note":"\n\n\n","description":"","iconIndex":2060,"traits":[{"code":21,"dataId":4,"value":1.5},{"code":21,"dataId":5,"value":1.5}],"autoRemovalTiming":0,"chanceByDamage":100,"minTurns":1,"maxTurns":1,"message1":"","message2":"","message3":"","message4":"","motion":0,"overlay":0,"priority":50,"restriction":0,"removeAtBattleEnd":false,"removeByDamage":false,"removeByRestriction":false,"removeByWalking":false,"stepsToRemove":100,"messageType":1}, @@ -300,11 +300,11 @@ null, {"id":298,"name":"","note":"","description":"","iconIndex":0,"traits":[],"autoRemovalTiming":0,"chanceByDamage":100,"minTurns":1,"maxTurns":1,"message1":"","message2":"","message3":"","message4":"","motion":0,"overlay":0,"priority":50,"restriction":0,"removeAtBattleEnd":false,"removeByDamage":false,"removeByRestriction":false,"removeByWalking":false,"stepsToRemove":0,"messageType":1}, {"id":299,"name":"","note":"","description":"","iconIndex":0,"traits":[],"autoRemovalTiming":0,"chanceByDamage":100,"minTurns":1,"maxTurns":1,"message1":"","message2":"","message3":"","message4":"","motion":0,"overlay":0,"priority":50,"restriction":0,"removeAtBattleEnd":false,"removeByDamage":false,"removeByRestriction":false,"removeByWalking":false,"stepsToRemove":0,"messageType":1}, {"id":300,"name":"","note":"","description":"","iconIndex":0,"traits":[],"autoRemovalTiming":0,"chanceByDamage":100,"minTurns":1,"maxTurns":1,"message1":"","message2":"","message3":"","message4":"","motion":0,"overlay":0,"priority":50,"restriction":0,"removeAtBattleEnd":false,"removeByDamage":false,"removeByRestriction":false,"removeByWalking":false,"stepsToRemove":0,"messageType":1}, -{"id":301,"name":"Origin","note":"\n\n\n\n\n\n\n\n\n\n\n","description":"","iconIndex":89,"traits":[{"code":21,"dataId":0,"value":2},{"code":21,"dataId":1,"value":2},{"code":21,"dataId":2,"value":1.1},{"code":21,"dataId":3,"value":1.1},{"code":21,"dataId":4,"value":1.1},{"code":21,"dataId":5,"value":1.1},{"code":21,"dataId":6,"value":1.1},{"code":21,"dataId":7,"value":1.1}],"autoRemovalTiming":0,"chanceByDamage":100,"minTurns":1,"maxTurns":1,"message1":"","message2":"","message3":"","message4":"","motion":0,"overlay":0,"priority":50,"restriction":0,"removeAtBattleEnd":false,"removeByDamage":false,"removeByRestriction":false,"removeByWalking":false,"stepsToRemove":0,"messageType":1}, -{"id":302,"name":"Vintage","note":"\n\n\n\n\n\n\n\n\n\n\n","description":"","iconIndex":89,"traits":[{"code":21,"dataId":0,"value":4},{"code":21,"dataId":1,"value":4},{"code":21,"dataId":2,"value":1.2},{"code":21,"dataId":3,"value":1.2},{"code":21,"dataId":4,"value":1.2},{"code":21,"dataId":5,"value":1.2},{"code":21,"dataId":6,"value":1.2},{"code":21,"dataId":7,"value":1.2}],"autoRemovalTiming":0,"chanceByDamage":100,"minTurns":1,"maxTurns":1,"message1":"","message2":"","message3":"","message4":"","motion":0,"overlay":0,"priority":50,"restriction":0,"removeAtBattleEnd":false,"removeByDamage":false,"removeByRestriction":false,"removeByWalking":false,"stepsToRemove":0,"messageType":1}, -{"id":303,"name":"Prime","note":"\n\n\n\n\n\n\n\n\n\n\n","description":"","iconIndex":88,"traits":[{"code":21,"dataId":0,"value":10},{"code":21,"dataId":1,"value":10},{"code":21,"dataId":2,"value":1.3},{"code":21,"dataId":3,"value":1.3},{"code":21,"dataId":4,"value":1.3},{"code":21,"dataId":5,"value":1.3},{"code":21,"dataId":6,"value":1.3},{"code":21,"dataId":7,"value":1.3}],"autoRemovalTiming":0,"chanceByDamage":100,"minTurns":1,"maxTurns":1,"message1":"","message2":"","message3":"","message4":"","motion":0,"overlay":0,"priority":50,"restriction":0,"removeAtBattleEnd":false,"removeByDamage":false,"removeByRestriction":false,"removeByWalking":false,"stepsToRemove":0,"messageType":1}, -{"id":304,"name":"Grand","note":"\n\n\n\n\n\n\n\n\n\n\n","description":"","iconIndex":88,"traits":[{"code":21,"dataId":0,"value":20},{"code":21,"dataId":1,"value":20},{"code":21,"dataId":2,"value":1.4},{"code":21,"dataId":3,"value":1.4},{"code":21,"dataId":4,"value":1.4},{"code":21,"dataId":5,"value":1.4},{"code":21,"dataId":6,"value":1.4},{"code":21,"dataId":7,"value":1.4}],"autoRemovalTiming":0,"chanceByDamage":100,"minTurns":1,"maxTurns":1,"message1":"","message2":"","message3":"","message4":"","motion":0,"overlay":0,"priority":50,"restriction":0,"removeAtBattleEnd":false,"removeByDamage":false,"removeByRestriction":false,"removeByWalking":false,"stepsToRemove":0,"messageType":1}, -{"id":305,"name":"Elysian","note":"\n\n\n\n\n\n\n\n\n\n\n","description":"","iconIndex":87,"traits":[{"code":21,"dataId":0,"value":50},{"code":21,"dataId":1,"value":50},{"code":21,"dataId":2,"value":1.5},{"code":21,"dataId":3,"value":1.5},{"code":21,"dataId":4,"value":1.5},{"code":21,"dataId":5,"value":1.5},{"code":21,"dataId":6,"value":1.5},{"code":21,"dataId":7,"value":1.5}],"autoRemovalTiming":0,"chanceByDamage":100,"minTurns":1,"maxTurns":1,"message1":"","message2":"","message3":"","message4":"","motion":0,"overlay":0,"priority":50,"restriction":0,"removeAtBattleEnd":false,"removeByDamage":false,"removeByRestriction":false,"removeByWalking":false,"stepsToRemove":0,"messageType":1}, +{"id":301,"name":"Origin","note":"\n\n\n\n\n\n\n\n\n\n\n","description":"","iconIndex":89,"traits":[{"code":21,"dataId":0,"value":2},{"code":21,"dataId":1,"value":2},{"code":21,"dataId":2,"value":1.1},{"code":21,"dataId":3,"value":1.1},{"code":21,"dataId":4,"value":1.1},{"code":21,"dataId":5,"value":1.1},{"code":21,"dataId":6,"value":1.1},{"code":21,"dataId":7,"value":1.1}],"autoRemovalTiming":0,"chanceByDamage":100,"minTurns":1,"maxTurns":1,"message1":"","message2":"","message3":"","message4":"","motion":0,"overlay":0,"priority":50,"restriction":0,"removeAtBattleEnd":false,"removeByDamage":false,"removeByRestriction":false,"removeByWalking":false,"stepsToRemove":1,"messageType":1}, +{"id":302,"name":"Vintage","note":"\n\n\n\n\n\n\n\n\n\n\n\n","description":"","iconIndex":89,"traits":[{"code":21,"dataId":0,"value":4},{"code":21,"dataId":1,"value":4},{"code":21,"dataId":2,"value":1.2},{"code":21,"dataId":3,"value":1.2},{"code":21,"dataId":4,"value":1.2},{"code":21,"dataId":5,"value":1.2},{"code":21,"dataId":6,"value":1.2},{"code":21,"dataId":7,"value":1.2}],"autoRemovalTiming":0,"chanceByDamage":100,"minTurns":1,"maxTurns":1,"message1":"","message2":"","message3":"","message4":"","motion":0,"overlay":0,"priority":50,"restriction":0,"removeAtBattleEnd":false,"removeByDamage":false,"removeByRestriction":false,"removeByWalking":false,"stepsToRemove":0,"messageType":1}, +{"id":303,"name":"Prime","note":"\n\n\n\n\n\n\n\n\n\n\n\n","description":"","iconIndex":88,"traits":[{"code":21,"dataId":0,"value":10},{"code":21,"dataId":1,"value":10},{"code":21,"dataId":2,"value":1.3},{"code":21,"dataId":3,"value":1.3},{"code":21,"dataId":4,"value":1.3},{"code":21,"dataId":5,"value":1.3},{"code":21,"dataId":6,"value":1.3},{"code":21,"dataId":7,"value":1.3}],"autoRemovalTiming":0,"chanceByDamage":100,"minTurns":1,"maxTurns":1,"message1":"","message2":"","message3":"","message4":"","motion":0,"overlay":0,"priority":50,"restriction":0,"removeAtBattleEnd":false,"removeByDamage":false,"removeByRestriction":false,"removeByWalking":false,"stepsToRemove":0,"messageType":1}, +{"id":304,"name":"Grand","note":"\n\n\n\n\n\n\n\n\n\n\n\n","description":"","iconIndex":88,"traits":[{"code":21,"dataId":0,"value":20},{"code":21,"dataId":1,"value":20},{"code":21,"dataId":2,"value":1.4},{"code":21,"dataId":3,"value":1.4},{"code":21,"dataId":4,"value":1.4},{"code":21,"dataId":5,"value":1.4},{"code":21,"dataId":6,"value":1.4},{"code":21,"dataId":7,"value":1.4}],"autoRemovalTiming":0,"chanceByDamage":100,"minTurns":1,"maxTurns":1,"message1":"","message2":"","message3":"","message4":"","motion":0,"overlay":0,"priority":50,"restriction":0,"removeAtBattleEnd":false,"removeByDamage":false,"removeByRestriction":false,"removeByWalking":false,"stepsToRemove":0,"messageType":1}, +{"id":305,"name":"Elysian","note":"\n\n\n\n\n\n\n\n\n\n\n\n","description":"","iconIndex":87,"traits":[{"code":21,"dataId":0,"value":50},{"code":21,"dataId":1,"value":50},{"code":21,"dataId":2,"value":1.5},{"code":21,"dataId":3,"value":1.5},{"code":21,"dataId":4,"value":1.5},{"code":21,"dataId":5,"value":1.5},{"code":21,"dataId":6,"value":1.5},{"code":21,"dataId":7,"value":1.5}],"autoRemovalTiming":0,"chanceByDamage":100,"minTurns":1,"maxTurns":1,"message1":"","message2":"","message3":"","message4":"","motion":0,"overlay":0,"priority":50,"restriction":0,"removeAtBattleEnd":false,"removeByDamage":false,"removeByRestriction":false,"removeByWalking":false,"stepsToRemove":0,"messageType":1}, {"id":306,"name":"","note":"","description":"","iconIndex":0,"traits":[],"autoRemovalTiming":0,"chanceByDamage":100,"minTurns":1,"maxTurns":1,"message1":"","message2":"","message3":"","message4":"","motion":0,"overlay":0,"priority":50,"restriction":0,"removeAtBattleEnd":false,"removeByDamage":false,"removeByRestriction":false,"removeByWalking":false,"stepsToRemove":0,"messageType":1}, {"id":307,"name":"","note":"","description":"","iconIndex":0,"traits":[],"autoRemovalTiming":0,"chanceByDamage":100,"minTurns":1,"maxTurns":1,"message1":"","message2":"","message3":"","message4":"","motion":0,"overlay":0,"priority":50,"restriction":0,"removeAtBattleEnd":false,"removeByDamage":false,"removeByRestriction":false,"removeByWalking":false,"stepsToRemove":0,"messageType":1}, {"id":308,"name":"","note":"","description":"","iconIndex":0,"traits":[],"autoRemovalTiming":0,"chanceByDamage":100,"minTurns":1,"maxTurns":1,"message1":"","message2":"","message3":"","message4":"","motion":0,"overlay":0,"priority":50,"restriction":0,"removeAtBattleEnd":false,"removeByDamage":false,"removeByRestriction":false,"removeByWalking":false,"stepsToRemove":0,"messageType":1}, diff --git a/chef-adventure/data/System.json b/chef-adventure/data/System.json index 0d28dc3d..47a3c105 100644 --- a/chef-adventure/data/System.json +++ b/chef-adventure/data/System.json @@ -1 +1 @@ -{"advanced":{"gameId":52400363,"screenWidth":1920,"screenHeight":1080,"uiAreaWidth":1920,"uiAreaHeight":1080,"numberFontFilename":"PixelOperator.ttf","fallbackFonts":"'Inconsolata ExtraCondensed Light', Verdana, sans-serif","fontSize":24,"mainFontFilename":"VictorMono-Regular.ttf","windowOpacity":255,"screenScale":1,"picturesUpperLimit":100},"airship":{"bgm":{"name":"","pan":0,"pitch":100,"volume":90},"characterIndex":3,"characterName":"Vehicle","startMapId":0,"startX":0,"startY":0},"armorTypes":["","Universal","Relic","Gauntlet","Shield","Cloth","Mail","Armor","- Material -"],"attackMotions":[{"type":0,"weaponImageId":0},{"type":1,"weaponImageId":2},{"type":1,"weaponImageId":13},{"type":1,"weaponImageId":4},{"type":0,"weaponImageId":12},{"type":1,"weaponImageId":5},{"type":1,"weaponImageId":6},{"type":2,"weaponImageId":7},{"type":2,"weaponImageId":8},{"type":2,"weaponImageId":9},{"type":0,"weaponImageId":10},{"type":0,"weaponImageId":11},{"type":0,"weaponImageId":12}],"battleBgm":{"name":"_SO3_Battle1","pan":0,"pitch":100,"volume":100},"battleSystem":1,"battleback1Name":"DirtCave","battleback2Name":"DirtCave","battlerHue":0,"battlerName":"Succubus","boat":{"bgm":{"name":"","pan":0,"pitch":100,"volume":90},"characterIndex":0,"characterName":"Vehicle","startMapId":0,"startX":0,"startY":0},"currencyUnit":"G","defeatMe":{"name":"","pan":0,"pitch":100,"volume":100},"editMapId":17,"editor":{"messageWidth1":60,"messageWidth2":47,"jsonFormatLevel":1},"elements":["","Cut","Poke","Blunt","Heat","Liquid","Air","Ground","Energy","Void","Typeless","vs Undead","vs Reptile","vs Aquatic","vs Slime","vs Plant","vs Beast","vs Insect","vs Humanoid","vs Construct","vs Deity","x Weaponry","x Flying","x Shields","x Aura","tool-shatter","tool-crush","tool-ignite","tool-overload","tool-launcher"],"equipTypes":["","Weapon","Offhand","Body","Feet","Accessory"],"faceSize":144,"gameTitle":"Chef Adventure","gameoverMe":{"name":"Gag","pan":0,"pitch":100,"volume":90},"iconSize":32,"itemCategories":[true,true,true,true],"locale":"en_US","magicSkills":[],"menuCommands":[true,true,true,true,false,false],"optAutosave":false,"optDisplayTp":true,"optDrawTitle":true,"optExtraExp":true,"optFloorDeath":false,"optFollowers":false,"optKeyItemsNumber":false,"optMessageSkip":true,"optSideView":false,"optSlipDeath":false,"optSplashScreen":false,"optTransparent":false,"partyMembers":[1,2],"ship":{"bgm":{"name":"","pan":0,"pitch":100,"volume":90},"characterIndex":1,"characterName":"Vehicle","startMapId":0,"startX":0,"startY":0},"skillTypes":["","Dodging","Guarding","Techniques","Magecraft","Panelogy","Tool Skills","Weapon Skills","Superlatives"],"sounds":[{"name":"Cursor1","pan":0,"pitch":100,"volume":50},{"name":"Decision2","pan":0,"pitch":100,"volume":25},{"name":"Cancel2","pan":0,"pitch":100,"volume":50},{"name":"Buzzer1","pan":0,"pitch":100,"volume":75},{"name":"Equip2","pan":0,"pitch":100,"volume":100},{"name":"Save1","pan":0,"pitch":100,"volume":80},{"name":"Decision4","pan":0,"pitch":100,"volume":100},{"name":"Battle1","pan":0,"pitch":100,"volume":90},{"name":"_MGS_Alert","pan":0,"pitch":100,"volume":35},{"name":"Attack2","pan":0,"pitch":100,"volume":100},{"name":"Damage2","pan":0,"pitch":100,"volume":100},{"name":"Collapse1","pan":0,"pitch":100,"volume":100},{"name":"Collapse2","pan":0,"pitch":100,"volume":100},{"name":"Collapse3","pan":0,"pitch":100,"volume":100},{"name":"Damage5","pan":0,"pitch":120,"volume":90},{"name":"Collapse4","pan":0,"pitch":120,"volume":90},{"name":"Recovery","pan":0,"pitch":120,"volume":100},{"name":"Evasion1","pan":0,"pitch":120,"volume":90},{"name":"Evasion1","pan":0,"pitch":120,"volume":90},{"name":"Evasion2","pan":0,"pitch":130,"volume":90},{"name":"Reflection","pan":0,"pitch":100,"volume":100},{"name":"Shop1","pan":0,"pitch":100,"volume":100},{"name":"Item1","pan":0,"pitch":120,"volume":100},{"name":"Skill1","pan":0,"pitch":100,"volume":90}],"startMapId":383,"startX":16,"startY":10,"switches":["","partner-visible","intro-alert1","intro-alert2","intro-boss-defeated","enable SDP","hunting bearcats","enable COOKING","go find the smith","found the smith","enable SMITHING","made the pudding","to the west wing","broke the wall","statue moved","looking for a way out","mines warning","escaped mines","start fallen heroes","end fallen heroes","go away bearcats forreal","enable \"survival\"","initiated academy","mayor is a wolfy!","mayor wolf defeated.","defeated named ghosty","defeated named kappa","defeated named wraith","defeated named faerie","alchemy stories?","hippie knows de way","cliffs are south","tutorial weapons done","tutorial skills done","tutorial combat done","concluded academy","basin-alert1","basin-alert2","basin-creator-note","basin-pudding dead","alchemist saved","got-named-axe-2h","got-named-sword-1h","defeated named wisp","fork upgrade","back to fork","search for magicfox","access: earthen layer","el - switch 1A","el - switch 2A","el - switch 2B","el - switch 2C","el - layer 3 alert","el - switch 3A","el - switch 4w boulder","el - switch 4west","el - switch 4e boulder","el - switch 4east","el - switch 4s boulder","el - switch 4south","el - switch 4n boulder","el - switch 4north","el - gate open","el - switch 5left","el - switch 5right","el - unseal earthie","earthie joined","","","defeated named goobat","enable JAFTING-refine","enable \"alchemy\"","read alchemy note","start journal hunt","suspicious castle","enable \"bombs\"","aqualock boss start","aqualock boss midfight","aqualock boss final","aqualock defeated","earthie-visible","aqualock cleansed","aqualock joined","aqualock-visible","tp-basin-active","trainer lord the host","chapter 3 begins","erocia isthmus open","erocia isthmus done","viskra sells t2","enable: difficulty","flux drive: crimson","flux drive: saffron","tp-volcanis-active","learn: J&R history","bellows locked","bellows phases active","enable \"snake rope\"","bellows boss hit 66%","bellows boss hit 33%","bellows boss hit 10%","show ally ai command","show omni command","show omni-mon command","show sdp command","show crafting command","show quest command","show aptitude command","show passives command","show slots command","show loadout command","show omni-stats command","allow rng affixes","","","","","","","","","cynder defeated","treis-visible","cynder joined","tp-castle-active","warning: deadly knight","","","material mastery OK","\"ingots\" enabled","\"papers\" enabled","north to the kingdom","enter the castle","into the courtyard","into the storage","got rouge technodisk","observed jail hole","into the tower","castle boss up next","cynder-visible","king? is a vampire!","vampire phases active","vampire boss 80%","vampire boss 60%","vampire boss 40%","vampire boss 20%","vampire boss defeated","after the vampire","enable: anomalies","check guard station","spelunking into icy caves","mountain post 1","mountain post 2","tp-peaks-active","trial-of-swift won","trial-of-swift ACTIVE","garuda phases active","garuda boss 66%","garuda boss 20%","garuda boss defeated","into the peaks","skye phases active","skye boss 75%","skye boss 50%","skye boss 25%","skye boss defeated","post skye boss story","skye-visible","skye joined","need more keys","converted prof?","pride sacrifice room","pride sacrifice book","tp-nimbus-active","first time reflection","","","","","","","","","","","","","","","","","","","","","","","","","","","got-named-1h-sword","got-named-2h-sword","got-named-dualswords","got-named-spear","got-named-javelin","got-named-basher","got-named-pistol","got-named-shotgun","got-named-taser","got-named-1h-axe","got-named-2h-axe","got-named-doubleaxe","got-named-wand","got-named-staff","got-named-tome","got-named-fist","got-named-claw","got-named-arm","","","flux drive: crimson","flux drive: saffron","flux drive: lemon","flux drive: viridian","flux drive: aqua","flux drive: royal","","","","","","","","","","","","","","","anomaly kappa dead","anomaly wraith dead","anomaly faerie dead","anomaly wave 1 done","anomaly wisp dead","anomaly goobat dead","anomaly cobra dead","anomaly wave 2 done","anomaly bandit dead","anomaly crab dead","anomaly bear dead","anomaly wave 3 done","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"terms":{"basic":["Level","LV","Life","LP","Magi","MP","Tech","TP","EXP","EXP"],"commands":["Fight","Escape","Attack","Guard","Inventory","Abilities","Equipment","Status","Party","Save","Exit","Options","Weapon","Armor","Key Item","Equip","Auto-Equip","Remove All","Start Anew","Resume","","To Title","Back","","Purchase","Sell"],"params":["Max Life","Max Magi","Power","Endurance","Force","Resist","Speed","Luck","Accuracy","Evasion"],"messages":{"actionFailure":"There was no effect on %1!","actorDamage":"%1 took %2 damage!","actorDrain":"%1 was drained of %2 %3!","actorGain":"%1 gained %2 %3!","actorLoss":"%1 lost %2 %3!","actorNoDamage":"%1 took no damage!","actorNoHit":"Miss! %1 took no damage!","actorRecovery":"%1 recovered %2 %3!","alwaysDash":"Always Dash","autosave":"Autosave","bgmVolume":"BGM Volume","bgsVolume":"BGS Volume","buffAdd":"%1’s %2 went up!","buffRemove":"%1’s %2 returned to normal!","commandRemember":"Command Remember","counterAttack":"%1 made a counterattack!","criticalToActor":"A painful blow!!","criticalToEnemy":"An excellent hit!!","debuffAdd":"%1’s %2 went down!","defeat":"%1 was defeated.","emerge":"%1 emerged!","enemyDamage":"%1 took %2 damage!","enemyDrain":"%1 was drained of %2 %3!","enemyGain":"%1 gained %2 %3!","enemyLoss":"%1 lost %2 %3!","enemyNoDamage":"%1 took no damage!","enemyNoHit":"Miss! %1 took no damage!","enemyRecovery":"%1 recovered %2 %3!","escapeFailure":"However, it was unable to escape!","escapeStart":"%1 has started to escape!","evasion":"%1 evaded the attack!","expNext":"To Next %1","expTotal":"Current %1","file":"File","levelUp":"%1 is now %2 %3!","loadMessage":"Which file would you like to load?","magicEvasion":"%1 nullified the magic!","magicReflection":"%1 reflected the magic!","meVolume":"ME Volume","obtainExp":"%1 %2 received!","obtainGold":"%1\\G found!","obtainItem":"%1 found!","obtainSkill":"%1 learned!","partyName":"%1’s Party","possession":"Owned","preemptive":"%1 got the upper hand!","saveMessage":"Which file would you like to save to?","seVolume":"SE Volume","substitute":"%1 protected %2!","surprise":"%1 was surprised!","touchUI":"Touch UI","useItem":"%1 uses %2!","victory":"%1 was victorious!"}},"testBattlers":[{"actorId":1,"level":1,"equips":[1,1,41,81,0]},{"actorId":2,"level":1,"equips":[81,21,61,81]},{"actorId":3,"level":24,"equips":[121,101,41,83,101]},{"actorId":6,"level":32,"equips":[151,131,41,83,101]}],"testTroopId":1,"tileSize":48,"title1Name":"Night","title2Name":"","titleBgm":{"name":"","pan":0,"pitch":100,"volume":100},"titleCommandWindow":{"offsetX":0,"offsetY":0,"background":0},"variables":["","Enemies Defeated","Bearcats Cleaned up","Bearcat Cleanup left","proficiency converted","rng frames","heroes found","heroes left","rng","immediate storage","teleport: mapId","teleport: x","teleport: y","named rng","moveable: x","moveable: y","target: x","target: y","named monster id","named monster name","flux drives scanned","target distance","player X","player Y","actual distance","boss event id","region id tracker","swiftness record","swiftness seconds","last swiftness","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Enemies defeated","Destructibles destroyed","Allies downed","Number of deaths","Total damage dealt","Highest damage dealt","Critical hits dealt","Biggest critical dealt","Attacks evaded by enemies","Total damage taken","Highest damage taken","Critical hits taken","Biggest critical taken","Parries (all kinds)","Precise parries","Glancing blows","Guarded hits","Attacks evaded by party","Damage prevented by guarding","Mainhand skill usage","Offhand skill usage","Assigned skill usage","Dodge skill usage","Guard activations","Tool usage","Usable item usage","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","TIME: seconds","TIME: minutes","TIME: hours","TIME: days","TIME: months","TIME: years","TIME: timeOfDay id","TIME: timeOfDay name","TIME: season id","TIME: season name","WEATHER: type","WEATHER: intensity","","","","","","","","","LEVEL: actor balancer","LEVEL: enemy balancer","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"versionId":63084332,"victoryMe":{"name":"_RSM_Victory","pan":0,"pitch":100,"volume":100},"weaponTypes":["","Sword","Claymore","Edge","Pike","Warstaff","Javelin","Handgun","Taser","Boomstick","Hatchet","Glaive","Mace","Cane","Rod","Tome","Gloves","Claws","Arm","Only-Earthie","Only-Aqualock","Only-Cynder","Only-Skye"],"windowTone":[-255,-255,-255,0]} \ No newline at end of file +{"advanced":{"gameId":52400363,"screenWidth":1920,"screenHeight":1080,"uiAreaWidth":1920,"uiAreaHeight":1080,"numberFontFilename":"PixelOperator.ttf","fallbackFonts":"'Inconsolata ExtraCondensed Light', Verdana, sans-serif","fontSize":24,"mainFontFilename":"VictorMono-Regular.ttf","windowOpacity":255,"screenScale":1,"picturesUpperLimit":100},"airship":{"bgm":{"name":"","pan":0,"pitch":100,"volume":90},"characterIndex":3,"characterName":"Vehicle","startMapId":0,"startX":0,"startY":0},"armorTypes":["","Universal","Relic","Gauntlet","Shield","Cloth","Mail","Armor","- Material -"],"attackMotions":[{"type":0,"weaponImageId":0},{"type":1,"weaponImageId":2},{"type":1,"weaponImageId":13},{"type":1,"weaponImageId":4},{"type":0,"weaponImageId":12},{"type":1,"weaponImageId":5},{"type":1,"weaponImageId":6},{"type":2,"weaponImageId":7},{"type":2,"weaponImageId":8},{"type":2,"weaponImageId":9},{"type":0,"weaponImageId":10},{"type":0,"weaponImageId":11},{"type":0,"weaponImageId":12}],"battleBgm":{"name":"_SO3_Battle1","pan":0,"pitch":100,"volume":100},"battleSystem":1,"battleback1Name":"DirtCave","battleback2Name":"DirtCave","battlerHue":0,"battlerName":"Succubus","boat":{"bgm":{"name":"","pan":0,"pitch":100,"volume":90},"characterIndex":0,"characterName":"Vehicle","startMapId":0,"startX":0,"startY":0},"currencyUnit":"G","defeatMe":{"name":"","pan":0,"pitch":100,"volume":100},"editMapId":4,"editor":{"messageWidth1":60,"messageWidth2":47,"jsonFormatLevel":1},"elements":["","Cut","Poke","Blunt","Heat","Liquid","Air","Ground","Energy","Void","Typeless","vs Undead","vs Reptile","vs Aquatic","vs Slime","vs Plant","vs Beast","vs Insect","vs Humanoid","vs Construct","vs Deity","x Weaponry","x Flying","x Shields","x Aura","tool-shatter","tool-crush","tool-ignite","tool-overload","tool-launcher"],"equipTypes":["","Weapon","Offhand","Body","Feet","Accessory"],"faceSize":144,"gameTitle":"Chef Adventure","gameoverMe":{"name":"Gag","pan":0,"pitch":100,"volume":90},"iconSize":32,"itemCategories":[true,true,true,true],"locale":"en_US","magicSkills":[],"menuCommands":[true,true,true,true,false,false],"optAutosave":false,"optDisplayTp":true,"optDrawTitle":true,"optExtraExp":true,"optFloorDeath":false,"optFollowers":false,"optKeyItemsNumber":false,"optMessageSkip":true,"optSideView":false,"optSlipDeath":false,"optSplashScreen":false,"optTransparent":false,"partyMembers":[1,2],"ship":{"bgm":{"name":"","pan":0,"pitch":100,"volume":90},"characterIndex":1,"characterName":"Vehicle","startMapId":0,"startX":0,"startY":0},"skillTypes":["","Dodging","Guarding","Techniques","Magecraft","Panelogy","Tool Skills","Weapon Skills","Superlatives"],"sounds":[{"name":"Cursor1","pan":0,"pitch":100,"volume":50},{"name":"Decision2","pan":0,"pitch":100,"volume":25},{"name":"Cancel2","pan":0,"pitch":100,"volume":50},{"name":"Buzzer1","pan":0,"pitch":100,"volume":75},{"name":"Equip2","pan":0,"pitch":100,"volume":100},{"name":"Save1","pan":0,"pitch":100,"volume":80},{"name":"Decision4","pan":0,"pitch":100,"volume":100},{"name":"Battle1","pan":0,"pitch":100,"volume":90},{"name":"_MGS_Alert","pan":0,"pitch":100,"volume":35},{"name":"Attack2","pan":0,"pitch":100,"volume":100},{"name":"Damage2","pan":0,"pitch":100,"volume":100},{"name":"Collapse1","pan":0,"pitch":100,"volume":100},{"name":"Collapse2","pan":0,"pitch":100,"volume":100},{"name":"Collapse3","pan":0,"pitch":100,"volume":100},{"name":"Damage5","pan":0,"pitch":120,"volume":90},{"name":"Collapse4","pan":0,"pitch":120,"volume":90},{"name":"Recovery","pan":0,"pitch":120,"volume":100},{"name":"Evasion1","pan":0,"pitch":120,"volume":90},{"name":"Evasion1","pan":0,"pitch":120,"volume":90},{"name":"Evasion2","pan":0,"pitch":130,"volume":90},{"name":"Reflection","pan":0,"pitch":100,"volume":100},{"name":"Shop1","pan":0,"pitch":100,"volume":100},{"name":"Item1","pan":0,"pitch":120,"volume":100},{"name":"Skill1","pan":0,"pitch":100,"volume":90}],"startMapId":4,"startX":8,"startY":11,"switches":["","partner-visible","intro-alert1","intro-alert2","intro-boss-defeated","enable SDP","hunting bearcats","enable COOKING","go find the smith","found the smith","enable SMITHING","made the pudding","to the west wing","broke the wall","statue moved","looking for a way out","mines warning","escaped mines","start fallen heroes","end fallen heroes","go away bearcats forreal","enable \"survival\"","initiated academy","mayor is a wolfy!","mayor wolf defeated.","defeated named ghosty","defeated named kappa","defeated named wraith","defeated named faerie","alchemy stories?","hippie knows de way","cliffs are south","tutorial weapons done","tutorial skills done","tutorial combat done","concluded academy","basin-alert1","basin-alert2","basin-creator-note","basin-pudding dead","alchemist saved","got-named-axe-2h","got-named-sword-1h","defeated named wisp","fork upgrade","back to fork","search for magicfox","access: earthen layer","el - switch 1A","el - switch 2A","el - switch 2B","el - switch 2C","el - layer 3 alert","el - switch 3A","el - switch 4w boulder","el - switch 4west","el - switch 4e boulder","el - switch 4east","el - switch 4s boulder","el - switch 4south","el - switch 4n boulder","el - switch 4north","el - gate open","el - switch 5left","el - switch 5right","el - unseal earthie","earthie joined","","","defeated named goobat","enable JAFTING-refine","enable \"alchemy\"","read alchemy note","start journal hunt","suspicious castle","enable \"bombs\"","aqualock boss start","aqualock boss midfight","aqualock boss final","aqualock defeated","earthie-visible","aqualock cleansed","aqualock joined","aqualock-visible","tp-basin-active","trainer lord the host","chapter 3 begins","erocia isthmus open","erocia isthmus done","viskra sells t2","enable: difficulty","flux drive: crimson","flux drive: saffron","tp-volcanis-active","learn: J&R history","bellows locked","bellows phases active","enable \"snake rope\"","bellows boss hit 66%","bellows boss hit 33%","bellows boss hit 10%","show ally ai command","show omni command","show omni-mon command","show sdp command","show crafting command","show quest command","show aptitude command","show passives command","show slots command","show loadout command","show omni-stats command","allow rng affixes","","","","","","","","","cynder defeated","treis-visible","cynder joined","tp-castle-active","warning: deadly knight","","","material mastery OK","\"ingots\" enabled","\"papers\" enabled","north to the kingdom","enter the castle","into the courtyard","into the storage","got rouge technodisk","observed jail hole","into the tower","castle boss up next","cynder-visible","king? is a vampire!","vampire phases active","vampire boss 80%","vampire boss 60%","vampire boss 40%","vampire boss 20%","vampire boss defeated","after the vampire","enable: anomalies","check guard station","spelunking into icy caves","mountain post 1","mountain post 2","tp-peaks-active","trial-of-swift won","trial-of-swift ACTIVE","garuda phases active","garuda boss 66%","garuda boss 20%","garuda boss defeated","into the peaks","skye phases active","skye boss 75%","skye boss 50%","skye boss 25%","skye boss defeated","post skye boss story","skye-visible","skye joined","need more keys","converted prof?","pride sacrifice room","pride sacrifice book","tp-nimbus-active","first time reflection","","","","","","","","","","","","","","","","","","","","","","","","","","","got-named-1h-sword","got-named-2h-sword","got-named-dualswords","got-named-spear","got-named-javelin","got-named-basher","got-named-pistol","got-named-shotgun","got-named-taser","got-named-1h-axe","got-named-2h-axe","got-named-doubleaxe","got-named-wand","got-named-staff","got-named-tome","got-named-fist","got-named-claw","got-named-arm","","","flux drive: crimson","flux drive: saffron","flux drive: lemon","flux drive: viridian","flux drive: aqua","flux drive: royal","","","","","","","","","","","","","","","anomaly kappa dead","anomaly wraith dead","anomaly faerie dead","anomaly wave 1 done","anomaly wisp dead","anomaly goobat dead","anomaly cobra dead","anomaly wave 2 done","anomaly bandit dead","anomaly crab dead","anomaly bear dead","anomaly wave 3 done","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"terms":{"basic":["Level","LV","Life","LP","Magi","MP","Tech","TP","EXP","EXP"],"commands":["Fight","Escape","Attack","Guard","Inventory","Abilities","Equipment","Status","Party","Save","Exit","Options","Weapon","Armor","Key Item","Equip","Auto-Equip","Remove All","Start Anew","Resume","","To Title","Back","","Purchase","Sell"],"params":["Max Life","Max Magi","Power","Endurance","Force","Resist","Speed","Luck","Accuracy","Evasion"],"messages":{"actionFailure":"There was no effect on %1!","actorDamage":"%1 took %2 damage!","actorDrain":"%1 was drained of %2 %3!","actorGain":"%1 gained %2 %3!","actorLoss":"%1 lost %2 %3!","actorNoDamage":"%1 took no damage!","actorNoHit":"Miss! %1 took no damage!","actorRecovery":"%1 recovered %2 %3!","alwaysDash":"Always Dash","autosave":"Autosave","bgmVolume":"BGM Volume","bgsVolume":"BGS Volume","buffAdd":"%1’s %2 went up!","buffRemove":"%1’s %2 returned to normal!","commandRemember":"Command Remember","counterAttack":"%1 made a counterattack!","criticalToActor":"A painful blow!!","criticalToEnemy":"An excellent hit!!","debuffAdd":"%1’s %2 went down!","defeat":"%1 was defeated.","emerge":"%1 emerged!","enemyDamage":"%1 took %2 damage!","enemyDrain":"%1 was drained of %2 %3!","enemyGain":"%1 gained %2 %3!","enemyLoss":"%1 lost %2 %3!","enemyNoDamage":"%1 took no damage!","enemyNoHit":"Miss! %1 took no damage!","enemyRecovery":"%1 recovered %2 %3!","escapeFailure":"However, it was unable to escape!","escapeStart":"%1 has started to escape!","evasion":"%1 evaded the attack!","expNext":"To Next %1","expTotal":"Current %1","file":"File","levelUp":"%1 is now %2 %3!","loadMessage":"Which file would you like to load?","magicEvasion":"%1 nullified the magic!","magicReflection":"%1 reflected the magic!","meVolume":"ME Volume","obtainExp":"%1 %2 received!","obtainGold":"%1\\G found!","obtainItem":"%1 found!","obtainSkill":"%1 learned!","partyName":"%1’s Party","possession":"Owned","preemptive":"%1 got the upper hand!","saveMessage":"Which file would you like to save to?","seVolume":"SE Volume","substitute":"%1 protected %2!","surprise":"%1 was surprised!","touchUI":"Touch UI","useItem":"%1 uses %2!","victory":"%1 was victorious!"}},"testBattlers":[{"actorId":1,"level":1,"equips":[1,1,41,81,0]},{"actorId":2,"level":1,"equips":[81,21,61,81]},{"actorId":3,"level":24,"equips":[121,101,41,83,101]},{"actorId":6,"level":32,"equips":[151,131,41,83,101]}],"testTroopId":1,"tileSize":48,"title1Name":"Night","title2Name":"","titleBgm":{"name":"","pan":0,"pitch":100,"volume":100},"titleCommandWindow":{"offsetX":0,"offsetY":0,"background":0},"variables":["","Enemies Defeated","Bearcats Cleaned up","Bearcat Cleanup left","proficiency converted","rng frames","heroes found","heroes left","rng","immediate storage","teleport: mapId","teleport: x","teleport: y","named rng","moveable: x","moveable: y","target: x","target: y","named monster id","named monster name","flux drives scanned","target distance","player X","player Y","actual distance","boss event id","region id tracker","swiftness record","swiftness seconds","last swiftness","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Enemies defeated","Destructibles destroyed","Allies downed","Number of deaths","Total damage dealt","Highest damage dealt","Critical hits dealt","Biggest critical dealt","Attacks evaded by enemies","Total damage taken","Highest damage taken","Critical hits taken","Biggest critical taken","Parries (all kinds)","Precise parries","Glancing blows","Guarded hits","Attacks evaded by party","Damage prevented by guarding","Mainhand skill usage","Offhand skill usage","Assigned skill usage","Dodge skill usage","Guard activations","Tool usage","Usable item usage","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","TIME: seconds","TIME: minutes","TIME: hours","TIME: days","TIME: months","TIME: years","TIME: timeOfDay id","TIME: timeOfDay name","TIME: season id","TIME: season name","WEATHER: type","WEATHER: intensity","","","","","","","","","LEVEL: actor balancer","LEVEL: enemy balancer","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"versionId":53622762,"victoryMe":{"name":"_RSM_Victory","pan":0,"pitch":100,"volume":100},"weaponTypes":["","Sword","Claymore","Edge","Pike","Warstaff","Javelin","Handgun","Taser","Boomstick","Hatchet","Glaive","Mace","Cane","Rod","Tome","Gloves","Claws","Arm","Only-Earthie","Only-Aqualock","Only-Cynder","Only-Skye"],"windowTone":[-255,-255,-255,0]} \ No newline at end of file diff --git a/chef-adventure/data/config.motion.json b/chef-adventure/data/config.motion.json index 5daca88b..6561ef3c 100644 --- a/chef-adventure/data/config.motion.json +++ b/chef-adventure/data/config.motion.json @@ -18,6 +18,8 @@ "hue": { "degrees": 180, "duration": 30 }, "tint": { "color": "#ffa0a0", "duration": 30 }, "collapse": { "style": "swift", "duration": 30 }, + "fold": { "duration": 30 }, + "unfold": { "duration": 30 }, "death": { "defaultStyle": "swift", "durations": { "swift": 30, "moderate": 60, "slow": 120 } @@ -26,5 +28,9 @@ "expiryWarnFrames": 300, "expiryFadeFrames": 120, "flicker": { "min": 0.2, "max": 1.0, "interval": 8 } + }, + "presence": { + "arrivalDuration": 30, + "departureDuration": 30 } } \ No newline at end of file diff --git a/chef-adventure/js/plugins.js b/chef-adventure/js/plugins.js index a0828975..27371621 100644 --- a/chef-adventure/js/plugins.js +++ b/chef-adventure/js/plugins.js @@ -48,7 +48,7 @@ var $plugins = {"name":"==========================","status":false,"description":"================================================================","parameters":{}}, {"name":"j/hud/J-HUD","status":true,"description":"[v2.2.0 HUD] Provides core functionality for this HUD system.","parameters":{}}, {"name":"j/hud/ext/J-HUD-PartyFrame","status":true,"description":"[v1.3.1 HUD-PARTY] A HUD frame that displays your party's data.","parameters":{}}, -{"name":"j/hud/ext/J-HUD-TargetFrame","status":true,"description":"[v1.1.0 HUD-TARGET] A HUD frame that displays your battle target.","parameters":{"targetFrameData":"","targetFrameX":"600","targetFrameY":"20","targetFrameWidth":"600","targetFrameHeight":"220","targetFrameGauge":"","backgroundGauge":"","backgroundImageFilename":"img/hud/target-gauge-background","backgroundGaugeImageX":"0","backgroundGaugeImageY":"0","middlegroundGauge":"","middlegroundGaugeImageX":"2","middlegroundGaugeImageY":"2","foregroundGauge":"","foregroundImageFilename":"img/hud/target-gauge-foreground","foregroundGaugeImageX":"2","foregroundGaugeImageY":"3","settings":"","hpSettings":"","enableHp":"true","hpGaugeScaleX":"4.00","hpGaugeScaleY":"1.00","hpGaugeRotation":"0","mpSettings":"","enableMp":"true","mpGaugeScaleX":"4.00","mpGaugeScaleY":"0.50","mpGaugeRotation":"0","tpSettings":"","enableTp":"true","tpGaugeScaleX":"0.30","tpGaugeScaleY":"0.40","tpGaugeRotation":"270"}}, +{"name":"j/hud/ext/J-HUD-TargetFrame","status":true,"description":"[v1.1.0 HUD-TARGET] A HUD frame that displays your battle target.","parameters":{"targetFrameData":"","targetFrameX":"848","targetFrameY":"20","targetFrameWidth":"440","targetFrameHeight":"120","targetFrameGauge":"","backgroundGauge":"","backgroundImageFilename":"img/hud/target-gauge-background","backgroundGaugeImageX":"0","backgroundGaugeImageY":"0","middlegroundGauge":"","middlegroundGaugeImageX":"2","middlegroundGaugeImageY":"2","foregroundGauge":"","foregroundImageFilename":"img/hud/target-gauge-foreground","foregroundGaugeImageX":"2","foregroundGaugeImageY":"3","settings":"","hpSettings":"","enableHp":"true","hpGaugeScaleX":"2.00","hpGaugeScaleY":"1.00","hpGaugeRotation":"0","mpSettings":"","enableMp":"false","mpGaugeScaleX":"4.00","mpGaugeScaleY":"0.50","mpGaugeRotation":"0","tpSettings":"","enableTp":"false","tpGaugeScaleX":"0.30","tpGaugeScaleY":"0.40","tpGaugeRotation":"270"}}, {"name":"j/hud/ext/J-HUD-BossFrame","status":true,"description":"[v1.0.2 HUD-BOSS] A HUD frame that displays a single target, like a boss.","parameters":{}}, {"name":"j/hud/ext/J-HUD-InputFrame","status":true,"description":"[v1.2.0 HUD-INPUT] A HUD frame that displays your leader's buttons data.","parameters":{"cooldownOverlayIconIndex":"90"}}, {"name":"j/hud/ext/J-HUD-Food","status":true,"description":"[v1.0.2 HUD-FOOD] A J-HUD extension that displays the current food chain status on screen.","parameters":{"windowX":"1700","windowY":"500","windowWidth":"220","windowHeight":"350","windowOpacity":"0"}}, @@ -113,7 +113,7 @@ var $plugins = {"name":"j/omni/ext/J-OMNI-Quests","status":true,"description":"[v2.0.3 OMNI-QUEST] Extends the Omnipedia with a Questopedia entry.","parameters":{"parentConfig":"","menu-switch":"101"}}, {"name":"j/hud/ext/J-HUD-QuestFrame","status":true,"description":"[v1.0.1 HUD-QUEST] A HUD frame that displays quest objective information.","parameters":{}}, {"name":"--------------------------","status":false,"description":"----------------------------------------------------------------","parameters":{}}, -{"name":"j/time/J-TIME","status":true,"description":"[v1.2.1 TIME] A system for tracking time- real or artificial.","parameters":{"BASEconfigs":"","timeWindowX":"1556","timeWindowY":"0","clockIcon":"220","startVisible":"true","startActivated":"true","useRealTime":"false","useVariableAssignment":"true","VARIABLEconfigs":"","secondsVariable":"121","minutesVariable":"122","hoursVariable":"123","daysVariable":"124","monthsVariable":"125","yearsVariable":"126","timeOfDayIdVariable":"127","timeOfDayNameVariable":"128","seasonOfYearIdVariable":"129","seasonOfYearNameVariable":"130","ARTIFICIALconfigs":"","framesPerTick":"60","startingSecond":"0","startingMinute":"0","startingHour":"9","startingDay":"29","startingMonth":"5","startingYear":"2021","secondsPerIncrement":"10","minutesPerIncrement":"1","hoursPerIncrement":"1","daysPerIncrement":"1","monthsPerIncrement":"1","yearsPerIncrement":"1"}}, +{"name":"j/time/J-TIME","status":true,"description":"[v2.1.0 TIME] A system for tracking time- real or artificial.","parameters":{"BASEconfigs":"","timeWindowX":"1556","timeWindowY":"0","clockIcon":"220","startVisible":"true","startActivated":"true","useRealTime":"false","useVariableAssignment":"true","VARIABLEconfigs":"","secondsVariable":"121","minutesVariable":"122","hoursVariable":"123","daysVariable":"124","monthsVariable":"125","yearsVariable":"126","timeOfDayIdVariable":"127","timeOfDayNameVariable":"128","seasonOfYearIdVariable":"129","seasonOfYearNameVariable":"130","ARTIFICIALconfigs":"","framesPerTick":"60","startingSecond":"0","startingMinute":"0","startingHour":"14","startingDay":"16","startingMonth":"12","startingYear":"2026","secondsPerIncrement":"30","minutesPerIncrement":"1","hoursPerIncrement":"1","daysPerIncrement":"1","monthsPerIncrement":"1","yearsPerIncrement":"1"}}, {"name":"j/abs/ext/J-ABS-Time","status":true,"description":"[v1.1.0 ABS-TIME] Calendar-based respawn methods for JABS.","parameters":{}}, {"name":"j/lighting/J-Lighting","status":true,"description":"[v1.0.0 LIGHTING] Declarative darkness and light sources for the map.","parameters":{}}, {"name":"j/lighting/ext/J-Lighting-Time","status":true,"description":"[v1.0.0 LIGHTING-TIME] The day and night cycle, as colour and as darkness.","parameters":{}}, diff --git a/chef-adventure/js/plugins/j/abs/J-ABS.js b/chef-adventure/js/plugins/j/abs/J-ABS.js index d6acb38b..1bdeb852 100644 --- a/chef-adventure/js/plugins/j/abs/J-ABS.js +++ b/chef-adventure/js/plugins/j/abs/J-ABS.js @@ -2,7 +2,7 @@ /*: * @target MZ * @plugindesc - * [v4.24.0 ABS] Enables combat to be carried out on the map. + * [v4.25.0 ABS] Enables combat to be carried out on the map. * @author JE * @url https://github.com/je-can-code/rmmz-plugins * @base J-Base @@ -48,6 +48,10 @@ * for JABS lives at the top instead of the bottom. * * CHANGELOG: + * - 4.25.0 + * An event whose page stops applying now forgets the battler that page described, + * rather than still reading as one. Added hooks for holding a page change back and + * for hearing when one lands. * - 4.24.0 * Action events keep the event id they were built with, so an action can find its * own data for its whole life rather than only while being constructed. @@ -4578,7 +4582,7 @@ J.ABS.Helpers.loadExternalConfig = (configPath = "data/config.jabs.json") => { /** * The metadata associated with this plugin. */ -J.ABS.Metadata = new J_AbsPluginMetadata("J-ABS", "4.24.0"); +J.ABS.Metadata = new J_AbsPluginMetadata("J-ABS", "4.25.0"); J.ABS.Helpers.loadExternalConfig(); /** * The various default values across the engine. Often configurable. @@ -19472,8 +19476,7 @@ var JABS_Engine = class JABS_Engine { processRespawnAnimation(freshEvent) { const jabsBattler = freshEvent.getJabsBattler(); if (!jabsBattler) return; - const enemy = jabsBattler.getBattler(); - const animationId = freshEvent.getRespawnAnimationOverrides() ?? enemy.respawnAnimationId(); + const animationId = freshEvent.respawnAnimationId(); if (animationId === 0) return; setTimeout(() => freshEvent.requestAnimation(animationId), 50); } @@ -20672,9 +20675,13 @@ var JABS_Engine = class JABS_Engine { /** * Generates an enemy and transplants it in the place of the corresponding index * of the eventId on the battle map. + * + * Hands back the new event, or undefined when the clone id names no event on the enemy clone map- + * which is reported as an error before returning. * @param {number} x The x coordinate of where to place the enemy on the map. * @param {number} y The y coordinate of where to place the enemy on the map. * @param {number} enemyCloneEventId The eventId from the enemy clone map identifying the enemy to clone. + * @returns {Game_Event|undefined} */ addEnemyToMap(x, y, enemyCloneEventId) { if (!JABS_Engine.#isEnemyMapInitialized()) { @@ -24714,6 +24721,15 @@ var StateAfflictionBattlerIdentity = class StateAfflictionBattlerIdentity { buildStackKey(stateId) { return `affliction-stack-${stateId}-${this.uuid}`; } + /** + * Builds the backing sprite cache key for a state id.
+ * The backing is the colored square some layouts draw behind an icon to mark it a debuff or a buff. + * @param {number} stateId The database state id. + * @returns {string} + */ + buildBackingKey(stateId) { + return `affliction-backing-${stateId}-${this.uuid}`; + } }; //#endregion @@ -24856,7 +24872,7 @@ var StateAfflictionProvider = class StateAfflictionProvider { //#endregion //#region src/plugins/abs/core/_metadata/meta.js var PLUGIN_NAME = "J-ABS"; -var PLUGIN_VERSION = "4.24.0"; +var PLUGIN_VERSION = "4.25.0"; var PLUGIN_DESC_TAG = "ABS"; //#endregion @@ -31789,12 +31805,36 @@ Game_Event.prototype.jabsEventRefresh = function() { if (this.isJabsLoot()) return; const newPageIndex = this.isErased() ? -1 : this.findProperPageIndex(); if (this.pageIndex() !== newPageIndex) { + if (this.deferPageChange(newPageIndex) === true) return; + const previousPageIndex = this.pageIndex(); this.setPageIndex(newPageIndex); this.setupPage(); this.transformBattler(); + this.onPageChanged(previousPageIndex); } }; /** +* Decides whether a page change this event is about to make should be held back for now. +* +* A seam for extensions. J-ABS itself has no reason to delay a page, so a change always goes ahead +* here. An extension that does hold one back takes on seeing it through: nothing re-enters this +* refresh on its own, so it must refresh the event again once it is ready for the change to land. +* @param {number} newPageIndex The page this event's conditions now call for. +* @returns {boolean} True when the change was held back and must not be applied now. +*/ +Game_Event.prototype.deferPageChange = function(newPageIndex) { + return false; +}; +/** +* Announces that this event has moved to a new page and its battler has been rebuilt to match. +* +* A seam for extensions, and empty here on purpose. A previous page index of -2 is vanilla's value +* for an event that has never had a page, which means this change is the event being built as the +* map loads rather than anything happening on a map already in play. +* @param {number} previousPageIndex The page this event was on before the change. +*/ +Game_Event.prototype.onPageChanged = function(previousPageIndex) {}; +/** * Extends this method to accommodate for the possibility of that one * error propping up where an attempt to update an event that is no longer * available for updating causing the game to crash. @@ -31835,6 +31875,24 @@ Game_Event.prototype.setupPageSettings = function() { this.parseEnemyComments(); }; /** +* Extends {@link #clearPageSettings}.
+* Also forgets the battler that the lost page described. +* +* An event whose conditions stop matching every one of its pages is left with no page at all- +* a switch turning off, or a time range like `` closing. Vanilla blanks +* the graphic and makes it passable, but it knows nothing of the battler data parsed off the page +* that just went away. Left in place, that data still reads as a battler, and the refresh that +* follows builds a fresh one from it: invisible, walk-through, full health, and still fightable. +* +* This is the mirror of {@link #setupPageSettings} parsing that data in, so a page that leaves +* takes its battler with it. +*/ +J.ABS.Aliased.Game_Event.set("clearPageSettings", Game_Event.prototype.clearPageSettings); +Game_Event.prototype.clearPageSettings = function() { + J.ABS.Aliased.Game_Event.get("clearPageSettings").call(this); + this.initializeCoreData(null); +}; +/** * Parses the comments of this event to extract battler core data if available. * * JABS parameters are prioritized in this order: @@ -32027,6 +32085,22 @@ Game_Event.prototype.getRespawnAnimationOverrides = function() { return respawnAnimationId; }; /** +* The animation this event's battler announces itself with. +* +* Resolved by the usual ladder: a comment on the event's page outranks the enemy's own note, which in +* turn falls back to the plugin's default. Named for respawning because that is where it began, but it +* is the one flourish a battler has for appearing on the map at all, so anything bringing a battler into +* view- or taking one out of it- may play it. Only meaningful while a battler stands on this event, since +* the enemy's note is read off that battler. +* @returns {number} The animation id, where 0 means nobody wants one. +*/ +Game_Event.prototype.respawnAnimationId = function() { + const override = this.getRespawnAnimationOverrides(); + if (override !== null) return override; + const enemy = this.getJabsBattler().getBattler(); + return enemy.respawnAnimationId(); +}; +/** * Parses out the alerted sight boost from a list of event commands. * @returns {number|null} The found alerted sight boost range, or null if not found. */ diff --git a/chef-adventure/js/plugins/j/base/J-Base.js b/chef-adventure/js/plugins/j/base/J-Base.js index f9ba7f59..c211913b 100644 --- a/chef-adventure/js/plugins/j/base/J-Base.js +++ b/chef-adventure/js/plugins/j/base/J-Base.js @@ -2,7 +2,7 @@ /*: * @target MZ * @plugindesc - * [v3.19.0 BASE] The base class for all J plugins. + * [v3.20.0 BASE] The base class for all J plugins. * @author JE * @url https://github.com/je-can-code/rmmz-plugins * @help @@ -157,6 +157,9 @@ * * ============================================================================ * CHANGELOG: + * - 3.20.0 + * Map gauges now leave a trail. A loss leaves the lost amount behind in red to + * drain away, and a gain shows in green ahead of the bar as it fills in. * - 3.19.0 * Added natural growth bindings to the parameter registry, so any plugin can * offer growth tags for its own parameters. @@ -2059,7 +2062,7 @@ J.BASE.EXT = {}; */ J.BASE.Metadata = {}; J.BASE.Metadata.Name = "J-Base"; -J.BASE.Metadata.Version = "3.19.0"; +J.BASE.Metadata.Version = "3.20.0"; /** * The actual `plugin parameters` extracted from RMMZ. */ @@ -4903,6 +4906,210 @@ var GaugeOptionsBuilder = class { } }; +//#endregion +//#region src/plugins/_base/core/models/GaugeTrail.js +/** +* The trail that shows recent change on a gauge, the way many action games show it: a loss snaps the bar down +* and leaves a chunk of the old amount behind that drains away, and a gain puts a chunk of the new amount up +* ahead of the bar that the bar then fills into.
+* It is the numbers only- where the bar's fill ends, where the trail ends, and which way things are going. The +* gauge that owns it decides how to draw that. +*/ +var GaugeTrail = class GaugeTrail { + /** + * Which way the gauge is moving, which decides the trail's color. + */ + static Trends = { + /** + * Nothing to show: the fill and the trail agree. + */ + Steady: "steady", + /** + * The value dropped: the fill already sits at it, and the trail drains down after it. + */ + Loss: "loss", + /** + * The value rose: the trail already sits at it, and the fill grows up into it. + */ + Gain: "gain" + }; + /** + * How much of the remaining gap the moving end closes each frame- one tenth, so it closes fast at first and + * eases in at the end. + * @type {number} + */ + static CatchUpDivisor = 10; + /** + * How small the gap has to get, as a fraction of the gauge's max, before the trail settles. A tenth of a + * percent of the bar is under a pixel on all but the widest gauges, so settling there is never seen as a jump. + * @type {number} + */ + static SettleFraction = .001; + /** + * The latest true value the gauge was given. + * @type {number} + */ + #value = 0; + /** + * Where the gauge's fill ends. + * @type {number} + */ + #fill = 0; + /** + * Where the trail ends. Never short of the fill. + * @type {number} + */ + #trail = 0; + /** + * The gauge's max. Not a number until the first value arrives, which is how a cleared trail knows to take + * its first value as it is instead of animating toward it. + * @type {number} + */ + #max = NaN; + /** + * Which way the gauge is moving. + * @type {string} + */ + #trend = GaugeTrail.Trends.Steady; + /** + * Forgets everything, so the next value the trail is given is taken as it is, with nothing to animate.
+ * A gauge does this when it starts showing a different battler- that battler's value was never on the bar, + * so there is no change to show. + */ + clear() { + this.#value = 0; + this.#fill = 0; + this.#trail = 0; + this.#max = NaN; + this.#trend = GaugeTrail.Trends.Steady; + } + /** + * Gives the trail the gauge's value for this frame, then moves the trail one frame along.
+ * Meant to be called once per frame with whatever the gauge currently holds; a value that has not changed + * just lets the trail keep moving. + * @param {number} value The gauge's current value. + * @param {number} max The gauge's current max. + */ + track(value, max) { + if (!this.hasObserved()) { + this.#adopt(value, max); + return; + } + this.#max = max; + if (value !== this.#value) { + this.#observe(value); + } + this.#step(); + } + /** + * Takes a value as it is, with nothing to animate. + * @param {number} value The value to adopt. + * @param {number} max The max to adopt. + */ + #adopt(value, max) { + this.#value = value; + this.#fill = value; + this.#trail = value; + this.#max = max; + this.#trend = GaugeTrail.Trends.Steady; + } + /** + * Moves the ends to show a new value. + * @param {number} value The new value. + */ + #observe(value) { + if (value < this.#fill) { + this.#observeLoss(value); + } else { + this.#observeGain(value); + } + this.#value = value; + } + /** + * Shows a loss: the fill drops straight to the new value, and the trail marks what was on the bar before it. + * @param {number} value The new, lower value. + */ + #observeLoss(value) { + if (this.#trend === GaugeTrail.Trends.Gain) { + this.#trail = this.#fill; + } + this.#fill = value; + this.#trend = GaugeTrail.Trends.Loss; + } + /** + * Shows a gain: the trail jumps straight to the new value, and the fill grows up into it. + * @param {number} value The new value, at or above the fill. + */ + #observeGain(value) { + this.#trail = value; + this.#trend = value > this.#fill ? GaugeTrail.Trends.Gain : GaugeTrail.Trends.Steady; + } + /** + * Moves the trail one frame along: whichever end is moving closes part of the gap, and the two settle + * together once the gap is too small to see. + */ + #step() { + if (this.#trend === GaugeTrail.Trends.Steady) return; + const catchUp = (this.#trail - this.#fill) / GaugeTrail.CatchUpDivisor; + if (this.#trend === GaugeTrail.Trends.Loss) { + this.#trail -= catchUp; + } else { + this.#fill += catchUp; + } + const settleGap = this.#max * GaugeTrail.SettleFraction; + if (this.#trail - this.#fill <= settleGap) { + this.#fill = this.#value; + this.#trail = this.#value; + this.#trend = GaugeTrail.Trends.Steady; + } + } + /** + * Whether the trail has been given a value since it was made or last cleared. + * @returns {boolean} + */ + hasObserved() { + return !Number.isNaN(this.#max); + } + /** + * Whether the fill and the trail agree, with nothing left to show. + * @returns {boolean} + */ + isSettled() { + return this.#trend === GaugeTrail.Trends.Steady; + } + /** + * Which way the gauge is moving. + * @returns {string} + */ + trend() { + return this.#trend; + } + /** + * How far along the gauge its fill reaches, from 0 to 1. + * @returns {number} + */ + fillRate() { + return this.#rateOf(this.#fill); + } + /** + * How far along the gauge its trail reaches, from 0 to 1. + * @returns {number} + */ + trailRate() { + return this.#rateOf(this.#trail); + } + /** + * How far along the gauge an amount reaches, from 0 to 1.
+ * A gauge without a max to measure against- nothing given yet, or a max of 0- reaches nowhere. + * @param {number} amount The amount to measure. + * @returns {number} + */ + #rateOf(amount) { + if (this.#max > 0) return amount / this.#max; + return 0; + } +}; + //#endregion //#region src/plugins/_base/core/models/J_EventEmitter.js /** @@ -15494,16 +15701,36 @@ var Sprite_Icon = class extends Sprite { /** * The sprite for displaying a gauge on a character's sprite. */ -var Sprite_MapGauge = class extends Sprite_Gauge { +var Sprite_MapGauge = class Sprite_MapGauge extends Sprite_Gauge { + /** + * The resources whose gauges show recent change with a trail: a red chunk draining after a loss, a green + * chunk filling in after a gain. These are the ones that get spent and restored- a gauge that only ever + * fills, like a cast or a charge, has no change worth showing.
+ * An extension whose gauge should trail too adds its status type here. + * @type {string[]} + */ + static TrailingStatusTypes = [ + "hp", + "mp", + "tp" + ]; /** * Gets the gauge. * @returns {{_bitmapWidth: number, _bitmapHeight: number, _gaugeHeight: number, _label: string, - * _value: number|null, _iconIndex: number, _iconSprite: Sprite|null, _activated: boolean}} The gauge. + * _value: number|null, _iconIndex: number, _iconSprite: Sprite|null, _activated: boolean, + * _trail: GaugeTrail}} The gauge. */ gauge() { return this._gauge; } /** + * Gets the trail that shows recent change on this gauge. + * @returns {GaugeTrail} + */ + gaugeTrail() { + return this.gauge()._trail; + } + /** * Constructor. * @param {number} bitmapWidth - The width of the gauge bitmap. * @param {number} bitmapHeight - The height of the gauge bitmap. @@ -15583,6 +15810,11 @@ var Sprite_MapGauge = class extends Sprite_Gauge { * @type {boolean} */ this._gauge._activated = true; + /** + * The trail that shows recent change on this gauge, for the gauges that show it. + * @type {GaugeTrail} + */ + this._gauge._trail = new GaugeTrail(); } /** * Gets the battler associated with this gauge. @@ -15767,6 +15999,81 @@ var Sprite_MapGauge = class extends Sprite_Gauge { if (this.isGaugeActive() === false) return; super.update(); } + /** + * Whether this gauge shows recent change with a trail. See {@link Sprite_MapGauge.TrailingStatusTypes}. + * @returns {boolean} + */ + usesTrail() { + return Sprite_MapGauge.TrailingStatusTypes.includes(this.getStatusType()); + } + /** + * Extends {@link Sprite_Gauge#setup}.
+ * A different battler or resource is a fresh gauge, so its trail starts over from whatever it first shows. + * The same pair again is not: the target frame asks for it on every hit, and a trail cleared each time would + * never get to drain. The engine's setup ends by updating the bitmap, so the trail is cleared ahead of it. + * @param {Game_Battler} battler The battler to show. + * @param {string} statusType The resource to show, such as "hp". + */ + setup(battler, statusType) { + const isFreshGauge = battler !== this.getBattler() || statusType !== this.getStatusType(); + if (isFreshGauge) { + this.gaugeTrail().clear(); + } + super.setup(battler, statusType); + if (isFreshGauge) { + this.redraw(); + } + } + /** + * Extends {@link Sprite_Gauge#updateBitmap}.
+ * A gauge that trails leaves the engine's easing behind entirely: its trail decides what the bar shows. + */ + updateBitmap() { + if (!this.usesTrail()) { + super.updateBitmap(); + return; + } + this.updateTrail(); + } + /** + * Feeds the trail this frame's value and redraws whenever there is something new to see. + */ + updateTrail() { + const value = this.currentValue(); + if (isNaN(value)) return; + const maxValue = this.currentMaxValue(); + const hasChanged = value !== this.value() || maxValue !== this.maxValue(); + const wasMoving = !this.gaugeTrail().isSettled(); + this.setValue(value); + this.setMaxValue(maxValue); + this.gaugeTrail().track(value, maxValue); + if (hasChanged || wasMoving) { + this.redraw(); + } + } + /** + * The color of the trail right now: the gain color while a gain fills in, and the loss color otherwise. + * @returns {string} + */ + trailColor() { + const trend = this.gaugeTrail().trend(); + if (trend === GaugeTrail.Trends.Gain) return this.trailGainColor(); + return this.trailLossColor(); + } + /** + * The color a loss drains in: the engine's power-down red, the same red a debuff's square uses. + * @returns {string} + */ + trailLossColor() { + return ColorManager.powerDownColor(); + } + /** + * The color a gain fills in with: the engine's power-up green, the same green a buff's square uses. + * @returns {string} + */ + trailGainColor() { + return ColorManager.powerUpColor(); + } drawIcon() { if (this.iconIndex() >= 0) { if (!this.gauge()._iconSprite) { @@ -15816,6 +16123,50 @@ var Sprite_MapGauge = class extends Sprite_Gauge { } } /** + * Extends {@link Sprite_Gauge#drawGaugeRect}.
+ * A gauge that trails draws its trail between the backdrop and the fill; any other gauge draws as the engine + * does. + * @param {number} x The x coordinate. + * @param {number} y The y coordinate. + * @param {number} width The width of the gauge. + * @param {number} height The height of the gauge. + */ + drawGaugeRect(x, y, width, height) { + if (!this.usesTrail()) { + super.drawGaugeRect(x, y, width, height); + return; + } + this.drawTrailingGaugeRect(x, y, width, height); + } + /** + * Draws a trailing gauge: the backdrop, then the chunk of recent change from the fill's edge out to the + * trail's, then the fill over the top. Loss or gain, the chunk sits between the two ends- only its color says + * which it is. + * @param {number} x The x coordinate. + * @param {number} y The y coordinate. + * @param {number} width The width of the gauge. + * @param {number} height The height of the gauge. + */ + drawTrailingGaugeRect(x, y, width, height) { + const trail = this.gaugeTrail(); + const isShown = this.isValid(); + const fillRate = isShown ? trail.fillRate() : 0; + const trailRate = isShown ? trail.trailRate() : 0; + const innerWidth = width - 2; + const innerHeight = height - 2; + const fillWidth = Math.floor(innerWidth * fillRate); + const trailWidth = Math.floor(innerWidth * trailRate); + const backColor = this.gaugeBackColor(); + this.bitmap.fillRect(x, y, width, height, backColor); + if (trailWidth > fillWidth) { + const trailColor = this.trailColor(); + this.bitmap.fillRect(x + 1 + fillWidth, y + 1, trailWidth - fillWidth, innerHeight, trailColor); + } + const fillColor1 = this.gaugeColor1(); + const fillColor2 = this.gaugeColor2(); + this.bitmap.gradientFillRect(x + 1, y + 1, fillWidth, innerHeight, fillColor1, fillColor2); + } + /** * Overwrites {@link #measureLabelWidth}.
* Measure the actual custom label for this map gauge. If no label is set, * return 0 so HUD gauges (which are unlabeled) render with the same width. diff --git a/chef-adventure/js/plugins/j/hud/J-HUD.js b/chef-adventure/js/plugins/j/hud/J-HUD.js index 2501fd2f..c1d940aa 100644 --- a/chef-adventure/js/plugins/j/hud/J-HUD.js +++ b/chef-adventure/js/plugins/j/hud/J-HUD.js @@ -2,7 +2,7 @@ /*: * @target MZ * @plugindesc - * [v2.3.0 HUD] Provides core functionality for this HUD system. + * [v2.4.0 HUD] Provides core functionality for this HUD system. * @author JE * @url https://github.com/je-can-code/rmmz-plugins * @base J-Base @@ -75,6 +75,9 @@ * plugin-command driven. * ============================================================================ * CHANGELOG: + * - 2.4.0 + * Afflictions can now sit on one shared row of smaller icons, each on a colored + * square that marks it a buff or a debuff, for frames that are short on room. * - 2.3.0 * Added HudInterferenceResolver, which decides how far a frame fades while the * player is standing on top of it. The geometry belongs to the family rather than @@ -149,7 +152,7 @@ globalThis.J ||= {}; if (hasBaseRequirement === false) { throw new Error(`Either missing J-Base or has a lower version than the required: ${requiredBaseVersion}`); } - const requiredAbsVersion = "4.0.0"; + const requiredAbsVersion = "4.25.0"; const hasAbsRequirement = J.ABS && J.BASE.Helpers.satisfies(J.ABS.Metadata.version.version(), requiredAbsVersion); if (hasAbsRequirement === false) { throw new Error(`Either missing J-ABS or has a lower version than the required: ${requiredAbsVersion}`); @@ -167,7 +170,7 @@ J.HUD.EXT = {}; * The `metadata` associated with this plugin, such as version. * @type {JHud_PluginMetadata} */ -J.HUD.Metadata = new JHud_PluginMetadata("J-HUD", "2.3.0"); +J.HUD.Metadata = new JHud_PluginMetadata("J-HUD", "2.4.0"); /** * A collection of all aliased methods for this plugin. */ @@ -874,7 +877,7 @@ var Window_Frame = class extends Window_Base { /** * The cached collection of sprites. * @type {Map} + * Sprite_Icon|Sprite_BaseText|Sprite_SkillCost|Sprite_CooldownGauge|Sprite_ActorValue|Sprite_MapGauge|Sprite_Gauge|Sprite_Face|Sprite>} */ this._j._spriteCache = new Map(); } @@ -977,7 +980,10 @@ Scene_Map.prototype.refreshHud = function() {}; //#endregion //#region src/plugins/hud/core/models/StateAfflictionHudLayoutSpec.js /** -* Layout coordinates for the dual-row HUD affliction presenter. +* Layout coordinates for the HUD affliction presenter.
+* The defaults describe two rows of full-size icons- debuffs over buffs. A host that is short on room turns +* on the compact settings instead: one shared row, smaller icons, and a colored square behind each icon to +* say which side of the ledger it is on. */ var StateAfflictionHudLayoutSpec = class { /** @@ -1001,6 +1007,49 @@ var StateAfflictionHudLayoutSpec = class { */ rowGap = 8; /** + * Whether buffs continue along the debuff row rather than starting a second row beneath it.
+ * One row keeps a frame short; two rows keep debuffs and buffs apart without needing a color to do it. + * @type {boolean} + */ + singleRow = false; + /** + * The scale each state icon is drawn at, where 1 is the iconset's own size. + * @type {number} + */ + iconScale = 1; + /** + * Whether each icon sits on a square colored by which side it is on- red for a debuff, green for a + * buff. Once debuffs and buffs share a row, this is what tells them apart. + * @type {boolean} + */ + polarityBacking = false; + /** + * How far the colored square reaches past its icon on every side. + * @type {number} + */ + backingPadding = 2; + /** + * How opaque the colored square is, from 0 to 255.
+ * Short of solid, so the square reads as a tint behind the icon rather than a tile the icon sits on. + * @type {number} + */ + backingOpacity = 192; + /** + * How far below the top of its icon a timer is placed. + * @type {number} + */ + timerOffsetY = 20; + /** + * How much smaller than the main font the timers are drawn. + * @type {number} + */ + timerFontSizeReduction = 6; + /** + * How much smaller than the main font the stack counts are drawn. + * @type {number} + */ + stackFontSizeReduction = 4; + /** * The y coordinate for the negative row. * @returns {number} */ @@ -1012,7 +1061,8 @@ var StateAfflictionHudLayoutSpec = class { * @returns {number} */ positiveRowY() { - return this.originY + ImageManager.iconHeight + this.rowGap; + if (this.singleRow === true) return this.negativeRowY(); + return this.originY + this.scaledIconHeight() + this.rowGap; } /** * The x coordinate for a slot at the given index. @@ -1022,12 +1072,56 @@ var StateAfflictionHudLayoutSpec = class { slotX(index) { return this.originX + index * this.iconPitch; } + /** + * The x coordinate for the buff at the given index.
+ * On a shared row the buffs pick up where the debuffs leave off, so their position depends on how many + * debuffs came before them. + * @param {number} index The buff's index among the buffs. + * @param {number} negativeCount How many debuffs lead the row. + * @returns {number} + */ + positiveSlotX(index, negativeCount) { + if (this.singleRow === true) return this.slotX(negativeCount + index); + return this.slotX(index); + } + /** + * The width a state icon is drawn at. + * @returns {number} + */ + scaledIconWidth() { + return ImageManager.iconWidth * this.iconScale; + } + /** + * The height a state icon is drawn at. + * @returns {number} + */ + scaledIconHeight() { + return ImageManager.iconHeight * this.iconScale; + } + /** + * The x coordinate of the center of the icon in a slot.
+ * The timer and stack count are centered on this, so they stay under their icon however large it is drawn. + * @param {number} slotX The x coordinate of the slot. + * @returns {number} + */ + slotCenterX(slotX) { + return slotX + this.scaledIconWidth() / 2; + } + /** + * The width and height of the colored square behind an icon. + * @returns {number} + */ + backingSize() { + return this.scaledIconWidth() + this.backingPadding * 2; + } }; //#endregion //#region src/plugins/hud/core/presenters/StateAfflictionHudPresenter.js /** -* Renders dual-row HUD afflictions with icons, timers, and stack counts. +* Renders HUD afflictions with icons, timers, and stack counts.
+* Where each piece lands- two rows or one, full-size icons or smaller ones on colored squares- is decided +* by the {@link StateAfflictionHudLayoutSpec} the host window hands over each frame. */ var StateAfflictionHudPresenter = class StateAfflictionHudPresenter { /** @@ -1073,13 +1167,13 @@ var StateAfflictionHudPresenter = class StateAfflictionHudPresenter { const viewModel = collection.negative[index]; const x = layoutSpec.slotX(index); const y = layoutSpec.negativeRowY(); - this.renderSlot(battler, viewModel, x, y); + this.renderSlot(battler, viewModel, x, y, layoutSpec); } for (let index = 0; index < collection.positive.length; index++) { const viewModel = collection.positive[index]; - const x = layoutSpec.slotX(index); + const x = layoutSpec.positiveSlotX(index, collection.negative.length); const y = layoutSpec.positiveRowY(); - this.renderSlot(battler, viewModel, x, y); + this.renderSlot(battler, viewModel, x, y, layoutSpec); } } /** @@ -1139,7 +1233,8 @@ var StateAfflictionHudPresenter = class StateAfflictionHudPresenter { const prefixes = [ "affliction-icon-", "affliction-timer-", - "affliction-stack-" + "affliction-stack-", + "affliction-backing-" ]; let matchedPrefix = null; for (const prefix of prefixes) { @@ -1167,27 +1262,33 @@ var StateAfflictionHudPresenter = class StateAfflictionHudPresenter { * @param {StateAfflictionViewModel} viewModel The row to render. * @param {number} ox The origin x coordinate. * @param {number} y The origin y coordinate. + * @param {StateAfflictionHudLayoutSpec} layoutSpec The layout the slot is drawn to. */ - renderSlot(battler, viewModel, ox, y) { + renderSlot(battler, viewModel, ox, y, layoutSpec) { const state = battler.state(viewModel.stateId); const iconIndex = state ? state.iconIndex : 0; - const timerSprite = this.getOrCreateTimerSprite(battler, viewModel.stateId); + const timerSprite = this.getOrCreateTimerSprite(battler, viewModel.stateId, layoutSpec); + const centerX = layoutSpec.slotCenterX(ox); if (viewModel.isEternal === false) { const seconds = (viewModel.durationFrames / 60).toFixed(1); timerSprite.setText(seconds); - timerSprite.move(ox, y + 20); + timerSprite.move(centerX, y + layoutSpec.timerOffsetY); timerSprite.show(); } else { timerSprite.setText(String.empty); timerSprite.hide(); } + this.renderSlotBacking(battler, viewModel, ox, y, layoutSpec); const iconSprite = this.getOrCreateIconSprite(battler, viewModel.stateId, iconIndex); + iconSprite.scale.x = layoutSpec.iconScale; + iconSprite.scale.y = layoutSpec.iconScale; iconSprite.move(ox, y); iconSprite.show(); - const stackSprite = this.getOrCreateStackSprite(battler, viewModel.stateId); + const stackSprite = this.getOrCreateStackSprite(battler, viewModel.stateId, layoutSpec); if (viewModel.stackCount > 1) { + const stackY = y - layoutSpec.scaledIconHeight(); stackSprite.setText(`x${viewModel.stackCount}`); - stackSprite.move(ox, y - ImageManager.iconHeight); + stackSprite.move(centerX, stackY); stackSprite.show(); } else { stackSprite.setText(String.empty); @@ -1195,17 +1296,36 @@ var StateAfflictionHudPresenter = class StateAfflictionHudPresenter { } } /** - * Hides the icon, timer, and stack sprites for one state id. + * Places the colored square behind a slot's icon, when the layout draws one. + * @param {Game_Battler} battler The afflicted battler. + * @param {StateAfflictionViewModel} viewModel The row the square belongs to. + * @param {number} ox The origin x coordinate of the slot. + * @param {number} y The origin y coordinate of the slot. + * @param {StateAfflictionHudLayoutSpec} layoutSpec The layout the slot is drawn to. + */ + renderSlotBacking(battler, viewModel, ox, y, layoutSpec) { + if (layoutSpec.polarityBacking === false) return; + const backingSprite = this.getOrCreateBackingSprite(battler, viewModel, layoutSpec); + const { backingPadding } = layoutSpec; + backingSprite.move(ox - backingPadding, y - backingPadding); + backingSprite.show(); + } + /** + * Hides the icon, backing, timer, and stack sprites for one state id. * @param {StateAfflictionBattlerIdentity} identity The battler cache identity. * @param {number} stateId The database state id. */ hideSlotSprites(identity, stateId) { const iconKey = identity.buildIconKey(stateId); + const backingKey = identity.buildBackingKey(stateId); const timerKey = identity.buildTimerKey(stateId); const stackKey = identity.buildStackKey(stateId); if (this.#spriteCache.has(iconKey) === true) { this.#spriteCache.get(iconKey).hide(); } + if (this.#spriteCache.has(backingKey) === true) { + this.#spriteCache.get(backingKey).hide(); + } if (this.#spriteCache.has(timerKey) === true) { const timerSprite = this.#spriteCache.get(timerKey); timerSprite.setText(String.empty); @@ -1242,9 +1362,10 @@ var StateAfflictionHudPresenter = class StateAfflictionHudPresenter { * Creates or retrieves the timer sprite for a state. * @param {Game_Battler} battler The afflicted battler. * @param {number} stateId The database state id. + * @param {StateAfflictionHudLayoutSpec} layoutSpec The layout the timer is drawn to. * @returns {Sprite_BaseText} */ - getOrCreateTimerSprite(battler, stateId) { + getOrCreateTimerSprite(battler, stateId, layoutSpec) { const identity = StateAfflictionBattlerIdentity.fromBattler(battler); const key = identity.buildTimerKey(stateId); if (this.#spriteCache.has(key) === true) { @@ -1252,9 +1373,10 @@ var StateAfflictionHudPresenter = class StateAfflictionHudPresenter { } const spriteText = new Sprite_BaseText(); spriteText.setFontFace($gameSystem.numberFontFace()); - spriteText.setFontSize($gameSystem.mainFontSize() - 6); + spriteText.setFontSize($gameSystem.mainFontSize() - layoutSpec.timerFontSizeReduction); spriteText.setAlignment(Sprite_BaseText.Alignments.Center); - spriteText.setMinWidth(ImageManager.iconWidth); + spriteText.setMinWidth(layoutSpec.scaledIconWidth()); + spriteText.anchor.x = .5; this.#spriteCache.set(key, spriteText); spriteText.hide(); this.#hostWindow.addChild(spriteText); @@ -1264,9 +1386,10 @@ var StateAfflictionHudPresenter = class StateAfflictionHudPresenter { * Creates or retrieves the stack sprite for a state. * @param {Game_Battler} battler The afflicted battler. * @param {number} stateId The database state id. + * @param {StateAfflictionHudLayoutSpec} layoutSpec The layout the stack count is drawn to. * @returns {Sprite_BaseText} */ - getOrCreateStackSprite(battler, stateId) { + getOrCreateStackSprite(battler, stateId, layoutSpec) { const identity = StateAfflictionBattlerIdentity.fromBattler(battler); const key = identity.buildStackKey(stateId); if (this.#spriteCache.has(key) === true) { @@ -1274,14 +1397,51 @@ var StateAfflictionHudPresenter = class StateAfflictionHudPresenter { } const spriteText = new Sprite_BaseText(); spriteText.setFontFace($gameSystem.numberFontFace()); - spriteText.setFontSize($gameSystem.mainFontSize() - 4); + spriteText.setFontSize($gameSystem.mainFontSize() - layoutSpec.stackFontSizeReduction); spriteText.setAlignment(Sprite_BaseText.Alignments.Center); - spriteText.setMinWidth(ImageManager.iconWidth); + spriteText.setMinWidth(layoutSpec.scaledIconWidth()); + spriteText.anchor.x = .5; this.#spriteCache.set(key, spriteText); spriteText.hide(); this.#hostWindow.addChild(spriteText); return spriteText; } + /** + * Creates or retrieves the colored square drawn behind a state's icon.
+ * The square is painted once, when it is created. Its color follows the state's polarity, and a state + * on a given battler is a debuff or a buff for as long as it is on them. + * @param {Game_Battler} battler The afflicted battler. + * @param {StateAfflictionViewModel} viewModel The row the square belongs to. + * @param {StateAfflictionHudLayoutSpec} layoutSpec The layout the square is drawn to. + * @returns {Sprite} + */ + getOrCreateBackingSprite(battler, viewModel, layoutSpec) { + const identity = StateAfflictionBattlerIdentity.fromBattler(battler); + const key = identity.buildBackingKey(viewModel.stateId); + if (this.#spriteCache.has(key) === true) { + return this.#spriteCache.get(key); + } + const size = layoutSpec.backingSize(); + const bitmap = new Bitmap(size, size); + const color = StateAfflictionHudPresenter.backingColor(viewModel); + bitmap.paintOpacity = layoutSpec.backingOpacity; + bitmap.fillAll(color); + const sprite = new Sprite(bitmap); + this.#spriteCache.set(key, sprite); + sprite.hide(); + this.#hostWindow.addChild(sprite); + return sprite; + } + /** + * The color of the square behind an affliction's icon: the engine's power-down color for a debuff, + * and its power-up color for a buff- the same pair the engine uses for stats going down and up. + * @param {StateAfflictionViewModel} viewModel The row being colored. + * @returns {string} + */ + static backingColor(viewModel) { + if (viewModel.polarity === "positive") return ColorManager.powerUpColor(); + return ColorManager.powerDownColor(); + } }; //#endregion diff --git a/chef-adventure/js/plugins/j/hud/ext/J-HUD-BossFrame.js b/chef-adventure/js/plugins/j/hud/ext/J-HUD-BossFrame.js index b034e179..f0c6adee 100644 --- a/chef-adventure/js/plugins/j/hud/ext/J-HUD-BossFrame.js +++ b/chef-adventure/js/plugins/j/hud/ext/J-HUD-BossFrame.js @@ -2,7 +2,7 @@ /*: * @target MZ * @plugindesc - * [v1.0.2 HUD-BOSS] A HUD frame that displays a single target, like a boss. + * [v1.1.0 HUD-BOSS] A HUD frame that displays a single target, like a boss. * @author JE * @url https://github.com/je-can-code/rmmz-plugins * @base J-Base @@ -25,6 +25,10 @@ * the player's current target, not a specially-tagged "boss". * ============================================================================ * CHANGELOG: + * - 1.1.0 + * The boss frame now has a wide gauge centered under the boss's name, with its + * level above and its afflictions below. While it is up, the target frame waits + * beneath it, and never opens for the boss itself. * - 1.0.2 * Routed the boss-creation failure through J-Base's new Diagnostics, so it * names J-HUD-BossFrame in the console. @@ -67,6 +71,12 @@ globalThis.J ||= {}; if (hasHudRequirement === false) { throw new Error(`Either missing J-HUD or has a lower version than the required: ${requiredHudVersion}`); } + const requiredTargetFrameVersion = "2.0.0"; + const targetFrameVersion = J.HUD.EXT.TARGET.Metadata.version.version(); + const hasTargetFrameRequirement = J.BASE.Helpers.satisfies(targetFrameVersion, requiredTargetFrameVersion); + if (hasTargetFrameRequirement === false) { + throw new Error(`Either missing J-HUD-TargetFrame or has a lower version than the required: ${requiredTargetFrameVersion}`); + } })(); /** * The plugin umbrella that governs all things related to this extension plugin. @@ -76,12 +86,13 @@ J.HUD.EXT.BOSS = {}; * The `metadata` associated with this plugin, such as version. * @type {JHudBoss_PluginMetadata} */ -J.HUD.EXT.BOSS.Metadata = new JHudBoss_PluginMetadata("J-HUD-BossFrame", "1.0.2"); +J.HUD.EXT.BOSS.Metadata = new JHudBoss_PluginMetadata("J-HUD-BossFrame", "1.1.0"); /** * A collection of all aliased methods for this plugin. */ J.HUD.EXT.BOSS.Aliased = {}; J.HUD.EXT.BOSS.Aliased.Hud_Manager = new Map(); +J.HUD.EXT.BOSS.Aliased.JABS_Battler = new Map(); J.HUD.EXT.BOSS.Aliased.Scene_Map = new Map(); //#endregion @@ -108,6 +119,13 @@ var BossFrameManager = class { */ static #showBossRequest = false; /** + * Whether the boss frame is meant to be on screen: shown by the last request, and not hidden since.
+ * Unlike the requests, which clear the moment the frame acts on them, this holds for as long as the boss + * frame stays up. + * @type {boolean} + */ + static #bossFrameActive = false; + /** * Gets the current boss. * @returns {FramedTarget|null} */ @@ -227,6 +245,7 @@ var BossFrameManager = class { */ static requestHideBossFrame() { this.#hideBossRequest = true; + this.#bossFrameActive = false; } /** * Acknowledges the request for the boss frame to be concealed. @@ -246,6 +265,7 @@ var BossFrameManager = class { */ static requestShowBossFrame() { this.#showBossRequest = true; + this.#bossFrameActive = true; } /** * Acknowledges the request for the boss frame to be revealed. @@ -254,6 +274,38 @@ var BossFrameManager = class { this.#showBossRequest = false; } /** + * Whether the boss frame is meant to be on screen right now. + * @returns {boolean} + */ + static isBossFrameActive() { + return this.#bossFrameActive; + } + /** + * Whether the boss frame is up and showing the given battler.
+ * The target frame asks this before opening for a battler: the boss frame already shows that battler's + * name, level, health, and afflictions, and a second frame opened for them would only stack on top of it. + * @param {JABS_Battler} jabsBattler The battler being asked about. + * @returns {boolean} + */ + static isFramingBattler(jabsBattler) { + if (!this.isBossFrameActive()) return false; + const bossBattler = this.getBossGameBattler(); + if (!bossBattler) return false; + return bossBattler.getUuid() === jabsBattler.getUuid(); + } + /** + * Where the target frame should sit, given where it usually rests and where the boss frame ends.
+ * Both frames want the top of the screen, so while the boss frame is up, the target frame drops to just + * below it rather than covering it. + * @param {number} restingY The y the target frame sits at when no boss is framed. + * @param {number} bossFrameBottom The y of the boss frame's bottom edge. + * @returns {number} + */ + static targetFrameY(restingY, bossFrameBottom) { + if (this.isBossFrameActive()) return bossFrameBottom; + return restingY; + } + /** * Creates a {@link FramedTarget} based on the data that resides in the event * of the given eventId. * @param {number} eventId The event id to generate a boss from. @@ -268,6 +320,7 @@ var BossFrameManager = class { const bossBattler = bossJabsBattler.getBattler(); const framedTargetConfiguration = new FramedTargetConfiguration(); const framedTarget = new FramedTarget(bossBattler.name(), String.empty, 14, bossBattler, framedTargetConfiguration); + bossJabsBattler.decorateFramedTarget(framedTarget, bossJabsBattler); return framedTarget; } /** @@ -284,9 +337,33 @@ var BossFrameManager = class { } }; +//#endregion +//#region src/plugins/hud/ext/boss/_models/JABS_Battler.js +/** +* Extends {@link #canShowTargetFrame}.
+* The boss in the boss frame never opens the target frame as well. The boss frame already shows that +* battler's name, level, health, and afflictions, and a second frame opened for them would only stack on +* top of it. Anyone else struck mid-fight- an add, a stray slime- still opens the target frame as usual. +* @returns {boolean} +*/ +J.HUD.EXT.BOSS.Aliased.JABS_Battler.set("canShowTargetFrame", JABS_Battler.prototype.canShowTargetFrame); +JABS_Battler.prototype.canShowTargetFrame = function() { + if (BossFrameManager.isFramingBattler(this)) return false; + return J.HUD.EXT.BOSS.Aliased.JABS_Battler.get("canShowTargetFrame").call(this); +}; + //#endregion //#region src/plugins/hud/ext/boss/windows/Window_BossFrame.js -var Window_BossFrame = class extends Window_TargetFrame { +var Window_BossFrame = class Window_BossFrame extends Window_TargetFrame { + /** + * The size of the boss's hp gauge, in pixels: far wider than a regular target's, and a touch taller. Its bar + * fills its whole bitmap, so the height is both. + * @type {{width: number, height: number}} + */ + static HpGaugeSize = { + width: 1e3, + height: 16 + }; constructor(rect) { super(rect); } @@ -347,21 +424,11 @@ var Window_BossFrame = class extends Window_TargetFrame { this.getOrCreateTargetHpGaugeSprite(); } /** - * Creates an target gauge sprite for this window and caches it. - * @returns {Sprite_FlowingGauge} The gauge sprite of the target. + * Creates the boss's hp gauge sprite for this window and caches it. + * @returns {Sprite_MapGauge} The gauge sprite of the boss. */ getOrCreateTargetHpGaugeSprite() { - const key = `bossframe-enemy-hp-gauge`; - if (this.j()._spriteCache.has(key)) { - return this.j()._spriteCache.get(key); - } - const sprite = new Sprite_FlowingGauge(); - this.j()._spriteCache.set(key, sprite); - sprite.hide(); - sprite.scale.x = 10; - sprite.scale.y = 1; - this.addChild(sprite); - return sprite; + return this.getOrCreateGaugeSprite("bossframe-enemy-hp-gauge", Window_BossFrame.HpGaugeSize); } handleInactivity() {} update() { @@ -401,18 +468,101 @@ var Window_BossFrame = class extends Window_TargetFrame { } } /** - * Draws the target's name in the window. + * Lays out the boss frame. Where the target frame runs its icons, level, and name along one row, the + * boss frame centers its icons and name across the whole frame, rides the level small and centered along the + * top directly above them, and centers its gauge beneath.
+ * Everything below the level drops by one level row to make room for it. + * @param {number} x The x coordinate. + * @param {number} y The y coordinate. + */ + drawContent(x, y) { + this.drawTargetLevel(x, y); + const bodyY = y + this.bossLevelRowHeight(); + this.drawTargetName(x, bodyY); + this.drawTargetExtra(x, bodyY + 24); + this.drawTargetBattlerInfo(x, y); + } + /** + * Centers the boss's gauge across the frame, under the centered name.
+ * The gauge is a child of the window rather than of its contents, so it centers on the window's own width. + * The affliction strip starts from this same value, so it lines up under the gauge's left end. + * @returns {number} + */ + targetBattlerGaugesX() { + return (this.width - Window_BossFrame.HpGaugeSize.width) / 2; + } + /** + * How far below the top of the gauges the afflictions start.
+ * The boss frame only ever draws its hp gauge, so the afflictions only have to clear it, and a small gap. + * @returns {number} + */ + targetGaugeStackHeight() { + return Window_BossFrame.HpGaugeSize.height + 4; + } + /** + * The vertical room reserved along the top of the frame for the level.
+ * Nothing is reserved when there is no level to draw, so a frame without one keeps its name and + * gauges where they would otherwise sit. + * @returns {number} + */ + bossLevelRowHeight() { + if (!this.canDrawTargetLevel()) return 0; + return 16; + } + /** + * Drops the gauges by the level row, so they stay below the name as it moves down to make room for + * the level.
+ * The affliction rows are positioned from this same value, which keeps them moving with the gauges. + * @returns {number} + */ + targetBattlerGaugesY() { + const baseGaugesY = super.targetBattlerGaugesY(); + return baseGaugesY + this.bossLevelRowHeight(); + } + /** + * Draws the target's name in the window.
+ * A boss's name reads larger than a regular target's, and is centered across the frame- led by the same + * icons the target frame leads its name with (the boss's own, then any an extension set), and in whatever + * color the name hook settles on. * @param {number} x The x coordinate. * @param {number} y The y coordinate. */ drawTargetName(x, y) { - let name = `\\FS[24]${this.targetName()}`; + const iconCodes = this.targetRowIconIndices().map((iconIndex) => `\\I[${iconIndex}]`).join(String.empty); + let name = `\\FS[24]${iconCodes}${this.targetName()}`; if (J.MESSAGE) { - name = `\\*` + name; + name = `\\*${name}`; } - const textWidth = this.textWidth(name); - const centerX = this.contentsWidth() / 2 - textWidth / 2; - this.drawTextEx(name, centerX, y, textWidth); + const color = this.targetNameColor(); + this.drawCenteredTextEx(name, y, color); + } + /** + * Draws the level small and centered across the top of the frame, directly above the name.
+ * On a frame this wide, anywhere measured from an edge would sit out under the rest of the HUD- so the + * given x is not used here. + * @param {string} levelString The level text, escape codes included. + * @param {number} x The x coordinate; unused, since the level is centered. + * @param {number} y The y coordinate. + * @returns {number} The width the level took. + */ + drawTargetLevelText(levelString, x, y) { + const color = this.targetLevelColor(); + return this.drawCenteredTextEx(levelString, y, color); + } + /** + * Draws a line of text centered across the frame, and reports how wide it drew.
+ * Measures with {@link Window_Base#textSizeEx} rather than {@link Window_Base#textWidth}: the latter + * measures the raw string, so escape codes like `\FS[24]` count as printed characters, and the extra + * width drags the line left of center. + * @param {string} text The text to draw, escape codes included. + * @param {number} y The y coordinate. + * @param {string} color The color the text starts in. + * @returns {number} + */ + drawCenteredTextEx(text, y, color) { + const { width } = this.textSizeEx(text); + const centerX = (this.contentsWidth() - width) / 2; + return this.drawTextExInColor(text, centerX, y, width, color); } /** * Draws the target's various gauges. @@ -505,6 +655,7 @@ Scene_Map.prototype.updateHudFrames = function() { J.HUD.EXT.BOSS.Aliased.Scene_Map.get("updateHudFrames").call(this); this.handleAssignBoss(); this.handleBossFrameVisibility(); + this.handleTargetFramePlacement(); }; /** * Handles incoming requests to assign a boss to the boss frame. @@ -527,7 +678,19 @@ Scene_Map.prototype.handleHideBossFrame = function() { Scene_Map.prototype.handleShowBossFrame = function() { if (!BossFrameManager.needsBossFrameShowing()) return; this.getBossFrameWindow().requestShowBossFrame(); - BossFrameManager.acknowledgeBossFrameHidden(); + BossFrameManager.acknowledgeBossFrameShown(); +}; +/** +* Keeps the target frame out from under the boss frame.
+* Both frames want the top of the screen, so while the boss frame is up, the target frame waits just below +* it- and goes back to its usual place once the boss frame is hidden. +*/ +Scene_Map.prototype.handleTargetFramePlacement = function() { + const targetFrame = this.getTargetFrameWindow(); + const bossFrame = this.getBossFrameWindow(); + const bossFrameBottom = bossFrame.y + bossFrame.height; + const restingY = J.HUD.EXT.TARGET.Metadata.TargetFrameY; + targetFrame.y = BossFrameManager.targetFrameY(restingY, bossFrameBottom); }; //#endregion diff --git a/chef-adventure/js/plugins/j/hud/ext/J-HUD-TargetFrame.js b/chef-adventure/js/plugins/j/hud/ext/J-HUD-TargetFrame.js index f2ddb911..4d754205 100644 --- a/chef-adventure/js/plugins/j/hud/ext/J-HUD-TargetFrame.js +++ b/chef-adventure/js/plugins/j/hud/ext/J-HUD-TargetFrame.js @@ -2,7 +2,7 @@ /*: * @target MZ * @plugindesc - * [v1.2.0 HUD-TARGET] A HUD frame that displays your battle target. + * [v2.0.0 HUD-TARGET] A HUD frame that displays your battle target. * @author JE * @url https://github.com/je-can-code/rmmz-plugins * @base J-ABS @@ -28,32 +28,10 @@ * ============================================================================ * SETUP: * This plugin creates a window, which contains gauges representing the target - * that is currently set. These gauges are not default window gauges, but - * images loaded from disk instead. You must add two images matching these file - * names into a new directory called "hud" inside your images directory: - * /img/hud/target-gauge-background.png - * /img/hud/target-gauge-foreground.png - * ============================================================================ - * ABOUT THE IMAGES: - * As mentioned above, there are two images required to construct the gauges in - * the target frame. - * - * FIRST IMAGE: - * The first image, the background image, is typically a darker image that is - * drawn as a backdrop to the gauge. - * - * SECOND IMAGE: - * The second image makes up the middleground and foreground of the gauge. - * The format is two horizontal gauges of equal height stacked ontop of - * eachother. The top of these two gauges is the "foreground", representing - * the actual value of the gauge. The bottom of these two gauges is the - * "middleground", representing the "current" value of the gauge. This spends - * time in-transition a lot, and typically isn't ever fully displayed. - * - * In both images' cases, you can swap out the images to whatever other gauge - * imagery you would like, though you'll likely need to fiddle with the x:y - * plugin parameters of the various gauges to get it just right. You only need - * to make sure that the file names remain the same, as those are hard-coded. + * that is currently set. No images are needed: the gauges are drawn the same + * way as the rest of the HUD's gauges, trail and all- when the target loses + * some of a gauge, the lost amount turns red and drains away, and when it + * gains some back, the gained amount shows in green and the gauge fills in. * ============================================================================ * TARGET FRAME TEXT: * Have you ever wanted your JABS battlers to have an extra line of text that @@ -97,9 +75,8 @@ * ignored. * * NOTE 2: - * If no target frame icon is available, the gauges will automatically move to - * the left to fill the empty space that would've been left otherwise by the - * missing icon. + * The icon leads the target's name. If no target frame icon is available, the + * name simply starts where the icon would have been. * * TAG USAGE: * - Enemies @@ -111,7 +88,7 @@ * TAG EXAMPLE: * * When this enemy is struck on the map, the target frame will display an icon - * that matches the icon index of 25 to the left of the gauges (if applicable). + * that matches the icon index of 25 ahead of the enemy's name. * ============================================================================ * HIDING DATA: * Have you ever wanted to hide certain data points for some enemies, but not @@ -175,83 +152,6 @@ * @desc The height in pixels of the target frame window. * @default 180 * - * @param targetFrameGauge - * @text Target Frame Gauge - * - * @param backgroundGauge - * @parent targetFrameGauge - * @text Background Settings - * - * @param backgroundImageFilename - * @parent backgroundGauge - * @type file - * @text Background Image File - * @desc The file that represents the background image; see plugin description for details. - * @default img/hud/target-gauge-background - * - * @param backgroundGaugeImageX - * @parent backgroundGauge - * @type number - * @min 0 - * @text Background Image X - * @desc The x coordinate correction of the backdrop gauge image, aka the background. - * @default 0 - * - * @param backgroundGaugeImageY - * @parent backgroundGauge - * @type number - * @min 0 - * @text Background Image Y - * @desc The y coordinate correction of the backdrop gauge image, aka the background. - * @default 0 - * - * @param middlegroundGauge - * @parent targetFrameGauge - * @text Middleground Settings - * - * @param middlegroundGaugeImageX - * @parent middlegroundGauge - * @type number - * @min 0 - * @text Middleground Image X - * @desc Horizontal position is set from the measured backdrop trough at runtime so HP/MP stay aligned; Y still uses this block. - * @default 2 - * - * @param middlegroundGaugeImageY - * @parent middlegroundGauge - * @type number - * @min 0 - * @text Middleground Image Y - * @desc The y coordinate correction of the "current" gauge image, aka the middleground. - * @default 2 - * - * @param foregroundGauge - * @parent targetFrameGauge - * @text Foreground Settings - * - * @param foregroundImageFilename - * @parent foregroundGauge - * @type file - * @text Background Image File - * @desc The file that represents the foreground image; see plugin description for details. - * @default img/hud/target-gauge-foreground - * - * @param foregroundGaugeImageX - * @parent foregroundGauge - * @type number - * @min 0 - * @text Foreground Image X - * @desc Horizontal position is set from the measured backdrop trough at runtime so HP/MP stay aligned; Y still uses this block. - * @default 2 - * - * @param foregroundGaugeImageY - * @parent foregroundGauge - * @type number - * @min 0 - * @text Foreground Image Y - * @desc The y coordinate correction of the "current" gauge image, aka the foreground. - * @default 3 - * * @param settings * @text Target Settings * @@ -268,35 +168,6 @@ * @on Enable HP Gauge * @off Disable HP Gauge * - * @param hpGaugeScaleX - * @parent hpSettings - * @type number - * @decimals 2 - * @min -10.00 - * @max 10.00 - * @text Horizontal Scaling - * @desc The scaling for how wide the HP gauge is. - * @default 2.00 - * - * @param hpGaugeScaleY - * @parent hpSettings - * @type number - * @decimals 2 - * @min -10.00 - * @max 10.00 - * @text Vertical Scaling - * @desc The scaling for how tall the HP gauge is. - * @default 1.00 - * - * @param hpGaugeRotation - * @parent hpSettings - * @type number - * @min -360 - * @max 360 - * @text Rotation - * @desc The degree of rotation for the HP gauge. Between -360 and 360. - * @default 0 - * * @param mpSettings * @parent settings * @text For MP: @@ -310,35 +181,6 @@ * @on Enable MP Gauge * @off Disable MP Gauge * - * @param mpGaugeScaleX - * @parent mpSettings - * @type number - * @decimals 2 - * @min -10.00 - * @max 10.00 - * @text Horizontal Scaling - * @desc The scaling for how wide the MP gauge is. - * @default 1.00 - * - * @param mpGaugeScaleY - * @parent mpSettings - * @type number - * @decimals 2 - * @min -10.00 - * @max 10.00 - * @text Vertical Scaling - * @desc The scaling for how tall the MP gauge is. - * @default 0.50 - * - * @param mpGaugeRotation - * @parent mpSettings - * @type number - * @min -360 - * @max 360 - * @text Rotation - * @desc The degree of rotation for the MP gauge. Between -360 and 360. - * @default 0 - * * @param tpSettings * @parent settings * @text For TP: @@ -352,26 +194,6 @@ * @on Enable TP Gauge * @off Disable TP Gauge * - * @param tpGaugeScaleX - * @parent tpSettings - * @type number - * @decimals 2 - * @min -10.00 - * @max 10.00 - * @text Horizontal Scaling - * @desc The scaling for how wide the TP gauge is. - * @default 0.30 - * - * @param tpGaugeScaleY - * @parent tpSettings - * @type number - * @decimals 2 - * @min -10.00 - * @max 10.00 - * @text Vertical Scaling - * @desc The scaling for how tall the TP gauge is. - * @default 0.40 - * * @param tpGaugeRotation * @parent tpSettings * @type number @@ -383,6 +205,10 @@ * * ============================================================================ * CHANGELOG: + * - 2.0.0 + * The target frame no longer needs gauge images. Its gauges draw like the rest of + * the HUD's, trail and all, its afflictions share one compact row, and icons now + * lead the target's name. The image gauge parameters are gone. * - 1.2.0 * The target frame fades while the player is standing on top of it, through the * shared resolver in J-HUD. This rides on top of the inactivity fade rather than @@ -442,46 +268,6 @@ var JHudTarget_PluginMetadata = class extends PluginMetadata { */ this.TargetFrameHeight = Number(this.parsedPluginParameters["targetFrameHeight"]); /** - * The x coordinate of the background gauge image. - * @type {number} - */ - this.BackgroundGaugeImageX = Number(this.parsedPluginParameters["backgroundGaugeImageX"]); - /** - * The y coordinate of the background gauge image. - * @type {number} - */ - this.BackgroundGaugeImageY = Number(this.parsedPluginParameters["backgroundGaugeImageY"]); - /** - * The x coordinate of the middleground gauge image. - * @type {number} - */ - this.MiddlegroundGaugeImageX = Number(this.parsedPluginParameters["middlegroundGaugeImageX"]); - /** - * The y coordinate of the middleground gauge image. - * @type {number} - */ - this.MiddlegroundGaugeImageY = Number(this.parsedPluginParameters["middlegroundGaugeImageY"]); - /** - * The x coordinate of the foreground gauge image. - * @type {number} - */ - this.ForegroundGaugeImageX = Number(this.parsedPluginParameters["foregroundGaugeImageX"]); - /** - * The y coordinate of the foreground gauge image. - * @type {number} - */ - this.ForegroundGaugeImageY = Number(this.parsedPluginParameters["foregroundGaugeImageY"]); - /** - * The filename of the background gauge image. - * @type {string} - */ - this.BackgroundFilename = this.parsedPluginParameters["backgroundImageFilename"]; - /** - * The filename of the foreground gauge image. - * @type {string} - */ - this.ForegroundFilename = this.parsedPluginParameters["foregroundImageFilename"]; - /** * Whether or not the hp gauge is enabled by default. * @type {boolean} */ @@ -497,1112 +283,174 @@ var JHudTarget_PluginMetadata = class extends PluginMetadata { */ this.EnableTP = this.parsedPluginParameters["enableTp"] === "true"; /** - * The x scale of the hp gauge sprite. - * @type {number} - */ - this.HpGaugeScaleX = Number(this.parsedPluginParameters["hpGaugeScaleX"]); - /** - * The y scale of the hp gauge sprite. - * @type {number} - */ - this.HpGaugeScaleY = Number(this.parsedPluginParameters["hpGaugeScaleY"]); - /** - * The rotation of the hp gauge sprite in degrees. - * @type {number} - */ - this.HpGaugeRotation = Number(this.parsedPluginParameters["hpGaugeRotation"]); - /** - * The x scale of the mp gauge sprite. - * @type {number} - */ - this.MpGaugeScaleX = Number(this.parsedPluginParameters["mpGaugeScaleX"]); - /** - * The y scale of the mp gauge sprite. - * @type {number} - */ - this.MpGaugeScaleY = Number(this.parsedPluginParameters["mpGaugeScaleY"]); - /** - * The rotation of the mp gauge sprite in degrees. - * @type {number} - */ - this.MpGaugeRotation = Number(this.parsedPluginParameters["mpGaugeRotation"]); - /** - * The x scale of the tp gauge sprite. - * @type {number} - */ - this.TpGaugeScaleX = Number(this.parsedPluginParameters["tpGaugeScaleX"]); - /** - * The y scale of the tp gauge sprite. - * @type {number} - */ - this.TpGaugeScaleY = Number(this.parsedPluginParameters["tpGaugeScaleY"]); - /** * The rotation of the tp gauge sprite in degrees. * @type {number} */ this.TpGaugeRotation = Number(this.parsedPluginParameters["tpGaugeRotation"]); } }; - -//#endregion -//#region src/plugins/hud/ext/target/_metadata/initialization.js -/** -* The core where all of my extensions live: in the `J` object. -*/ -globalThis.J ||= {}; -(() => { - const requiredBaseVersion = "3.2.0"; - const hasBaseRequirement = J.BASE.Helpers.satisfies(J.BASE.Metadata.Version, requiredBaseVersion); - if (hasBaseRequirement === false) { - throw new Error(`Either missing J-Base or has a lower version than the required: ${requiredBaseVersion}`); - } - const requiredHudVersion = "2.0.0"; - const hasHudRequirement = J.BASE.Helpers.satisfies(J.HUD.Metadata.version.version(), requiredHudVersion); - if (hasHudRequirement === false) { - throw new Error(`Either missing J-HUD or has a lower version than the required: ${requiredHudVersion}`); - } -})(); -/** -* The plugin umbrella that governs all things related to this extension plugin. -*/ -J.HUD.EXT.TARGET = {}; -/** -* The `metadata` associated with this plugin, such as version. -* @type {JHudTarget_PluginMetadata} -*/ -J.HUD.EXT.TARGET.Metadata = new JHudTarget_PluginMetadata("J-HUD-TargetFrame", "1.2.0"); -/** -* A collection of all aliased methods for this plugin. -*/ -J.HUD.EXT.TARGET.Aliased = { - Game_System: new Map(), - Hud_Manager: new Map(), - JABS_Battler: new Map(), - Scene_Map: new Map(), - Window_TargetFrame: new Map() -}; -/** -* All regular expressions used by this plugin. -*/ -J.HUD.EXT.TARGET.RegExp = { - TargetFrameText: //i, - TargetFrameIcon: //i, - HideTargetFrame: //i, - HideTargetText: //i, - HideTargetHP: //i, - HideTargetMP: //i, - HideTargetTP: //i -}; - -//#endregion -//#region src/plugins/hud/ext/target/_models/FramedTargetConfiguration.js -/** -* A configuration object for whether to show/hide various target data points. -*/ -var FramedTargetConfiguration = class { - /** - * Whether or not to show the target's name. - * @type {boolean} - */ - showName = true; - /** - * Whether or not to show the target's HP. - * @type {boolean} - */ - showHp = true; - /** - * Whether or not to show the target's MP. - * @type {boolean} - */ - showMp = true; - /** - * Whether or not to show the target's TP. - * @type {boolean} - */ - showTp = true; - /** - * Whether or not to show the target text. - * @type {boolean} - */ - showText = true; - /** - * Constructor. - * @param {boolean} showName Whether or not to show the name. - * @param {boolean} showText Whether or not to show the name. - * @param {boolean} showHp Whether or not to show the name. - * @param {boolean} showMp Whether or not to show the name. - * @param {boolean} showTp Whether or not to show the name. - */ - constructor(showName = true, showText = true, showHp = J.HUD.EXT.TARGET.Metadata.EnableHP, showMp = J.HUD.EXT.TARGET.Metadata.EnableMP, showTp = J.HUD.EXT.TARGET.Metadata.EnableTP) { - this.showName = showName; - this.showText = showText; - this.showHp = showHp; - this.showMp = showMp; - this.showTp = showTp; - } -}; - -//#endregion -//#region src/plugins/hud/ext/target/_models/FramedTarget.js -/** -* The shape of a target for the target frame. -*/ -var FramedTarget = class { - /** - * The name of the target. - * @type {string|String.empty} - */ - name = String.empty; - /** - * The additional text of the target. - * @type {string|String.empty} - */ - text = String.empty; - /** - * The icon to place on the target. - * @type {number} - */ - icon = 0; - /** - * The battler data of the target. - * @type {Game_Enemy|null} - */ - battler = null; - /** - * The configuration of this target. - * @type {FramedTargetConfiguration|null} - */ - configuration = null; - /** - * Optional `#RRGGBB` for the name row; a passive extension may set this so the HUD tints the target name. - * Empty means use the window default text color. - * @type {string|String.empty} - */ - nameColorHex = String.empty; - /** - * Constructor. - * @param {string} name The name of the target. - * @param {string=} text The additional text for the target; defaults to an empty string. - * @param {number=} icon The icon to place on this target; defaults to 0. - * @param {Game_Enemy=} battler The battler data of the target; defaults to null. - * @param {FramedTargetConfiguration=} configuration The configuration of this target; defaults to null. - * @param {string=} nameColorHex Optional hex tint for {@link #drawTargetName}; defaults to empty (no override). - */ - constructor(name, text = String.empty, icon = 0, battler = null, configuration = null, nameColorHex = String.empty) { - this.name = name; - this.text = text; - this.icon = icon; - this.battler = battler; - this.configuration = configuration; - this.nameColorHex = nameColorHex; - } -}; - -//#endregion -//#region src/plugins/hud/ext/target/sprites/Sprite_FlowingGauge.js -/** -* A gauge that acts like a regular `Sprite_Gauge` that is instead based -* on images and also "flows". -*/ -var Sprite_FlowingGauge = class Sprite_FlowingGauge extends Sprite { - /** - * Gets the background bitmap. - * @returns {Bitmap|null} The backgroundBitmap. - */ - backgroundBitmap() { - return this._backgroundBitmap; - } - /** - * Sets the is ready. - * @param {boolean} newIsReady The new isReady. - */ - setIsReady(newIsReady) { - this._isReady = newIsReady; - } - /** - * Gets the gauge bitmap. - * @returns {Bitmap|null} The gaugeBitmap. - */ - gaugeBitmap() { - return this._gaugeBitmap; - } - /** - * Sets the gauge bitmap. - * @param {Bitmap|null} newGaugeBitmap The new gaugeBitmap. - */ - setGaugeBitmap(newGaugeBitmap) { - this._gaugeBitmap = newGaugeBitmap; - } - /** - * Gets the gauge background. - * @returns {Sprite} The gaugeBackground. - */ - gaugeBackground() { - return this._gaugeBackground; - } - /** - * Sets the gauge background. - * @param {Sprite} newGaugeBackground The new gaugeBackground. - */ - setGaugeBackground(newGaugeBackground) { - this._gaugeBackground = newGaugeBackground; - } - /** - * Gets the gauge current sprite. - * @returns {Sprite} The gaugeCurrentSprite. - */ - gaugeCurrentSprite() { - return this._gaugeCurrentSprite; - } - /** - * Sets the gauge current sprite. - * @param {Sprite} newGaugeCurrentSprite The new gaugeCurrentSprite. - */ - setGaugeCurrentSprite(newGaugeCurrentSprite) { - this._gaugeCurrentSprite = newGaugeCurrentSprite; - } - /** - * Gets the gauge actual sprite. - * @returns {Sprite} The gaugeActualSprite. - */ - gaugeActualSprite() { - return this._gaugeActualSprite; - } - /** - * Sets the gauge actual sprite. - * @param {Sprite} newGaugeActualSprite The new gaugeActualSprite. - */ - setGaugeActualSprite(newGaugeActualSprite) { - this._gaugeActualSprite = newGaugeActualSprite; - } - /** - * Gets the gauge current. - * @returns {number} The gaugeCurrent. - */ - gaugeCurrent() { - return this._gaugeCurrent; - } - /** - * Sets the gauge current. - * @param {number} newGaugeCurrent The new gaugeCurrent. - */ - setGaugeCurrent(newGaugeCurrent) { - this._gaugeCurrent = newGaugeCurrent; - } - /** - * Gets the gauge target. - * @returns {number} The gaugeTarget. - */ - gaugeTarget() { - return this._gaugeTarget; - } - /** - * Sets the gauge target. - * @param {number} newGaugeTarget The new gaugeTarget. - */ - setGaugeTarget(newGaugeTarget) { - this._gaugeTarget = newGaugeTarget; - } - /** - * Gets the gauge max. - * @returns {number} The gaugeMax. - */ - gaugeMax() { - return this._gaugeMax; - } - /** - * Sets the gauge max. - * @param {number} newGaugeMax The new gaugeMax. - */ - setGaugeMax(newGaugeMax) { - this._gaugeMax = newGaugeMax; - } - /** - * Gets the battler. - * @returns {Game_Enemy|null} The battler. - */ - battler() { - return this._battler; - } - /** - * Sets the battler. - * @param {Game_Enemy|null} newBattler The new battler. - */ - setBattler(newBattler) { - this._battler = newBattler; - } - /** - * Gets the gauge type. - * @returns {Sprite_FlowingGauge.Types} The gaugeType. - */ - gaugeType() { - return this._gaugeType; - } - /** - * Sets the gauge type. - * @param {Sprite_FlowingGauge.Types} newGaugeType The new gaugeType. - */ - setGaugeType(newGaugeType) { - this._gaugeType = newGaugeType; - } - /** - * Gets the gauge slice fill min x. - * @returns {number} The gaugeSliceFillMinX. - */ - gaugeSliceFillMinX() { - return this._gaugeSliceFillMinX; - } - /** - * Sets the gauge slice fill min x. - * @param {number} newGaugeSliceFillMinX The new gaugeSliceFillMinX. - */ - setGaugeSliceFillMinX(newGaugeSliceFillMinX) { - this._gaugeSliceFillMinX = newGaugeSliceFillMinX; - } - /** - * Gets the gauge slice fill inner width. - * @returns {number} The gaugeSliceFillInnerWidth. - */ - gaugeSliceFillInnerWidth() { - return this._gaugeSliceFillInnerWidth; - } - /** - * Sets the gauge slice fill inner width. - * @param {number} newGaugeSliceFillInnerWidth The new gaugeSliceFillInnerWidth. - */ - setGaugeSliceFillInnerWidth(newGaugeSliceFillInnerWidth) { - this._gaugeSliceFillInnerWidth = newGaugeSliceFillInnerWidth; - } - /** - * Gets the gauge actual flow limit. - * @returns {number} The gaugeActualFlowLimit. - */ - gaugeActualFlowLimit() { - return this._gaugeActualFlowLimit; - } - /** - * Sets the gauge actual flow limit. - * @param {number} newGaugeActualFlowLimit The new gaugeActualFlowLimit. - */ - setGaugeActualFlowLimit(newGaugeActualFlowLimit) { - this._gaugeActualFlowLimit = newGaugeActualFlowLimit; - } - /** - * Gets the gauge actual flow current. - * @returns {number} The gaugeActualFlowCurrent. - */ - gaugeActualFlowCurrent() { - return this._gaugeActualFlowCurrent; - } - /** - * Sets the gauge actual flow current. - * @param {number} newGaugeActualFlowCurrent The new gaugeActualFlowCurrent. - */ - setGaugeActualFlowCurrent(newGaugeActualFlowCurrent) { - this._gaugeActualFlowCurrent = newGaugeActualFlowCurrent; - } - /** - * Gets the gauge background track min x. - * @returns {number} The gaugeBackgroundTrackMinX. - */ - gaugeBackgroundTrackMinX() { - return this._gaugeBackgroundTrackMinX; - } - /** - * Sets the gauge background track min x. - * @param {number} newGaugeBackgroundTrackMinX The new gaugeBackgroundTrackMinX. - */ - setGaugeBackgroundTrackMinX(newGaugeBackgroundTrackMinX) { - this._gaugeBackgroundTrackMinX = newGaugeBackgroundTrackMinX; - } - /** - * Gets the gauge background track inner width. - * @returns {number} The gaugeBackgroundTrackInnerWidth. - */ - gaugeBackgroundTrackInnerWidth() { - return this._gaugeBackgroundTrackInnerWidth; - } - /** - * Sets the gauge background track inner width. - * @param {number} newGaugeBackgroundTrackInnerWidth The new gaugeBackgroundTrackInnerWidth. - */ - setGaugeBackgroundTrackInnerWidth(newGaugeBackgroundTrackInnerWidth) { - this._gaugeBackgroundTrackInnerWidth = newGaugeBackgroundTrackInnerWidth; - } - static Types = { - HP: "hp", - MP: "mp", - TP: "tp" - }; - /** - * The bitmap for the background sprite. - * @type {Bitmap|null} - * @private - */ - _backgroundBitmap = null; - /** - * The sprite background of this gauge. - * @type {Sprite} - */ - _gaugeBackground = null; - /** - * The bitmap of the file that makes up this gauge. - * It is expected to be a pair of horizontal gauges equal in height. - * @type {Bitmap|null} - */ - _gaugeBitmap = null; - /** - * The sprite representing the "current" value of this gauge. - * It slides gradually over a couple seconds to the target value. - * @type {Sprite} - */ - _gaugeCurrentSprite = null; - /** - * The sprite representing the "actual" value of this gauge. - * It does not slide, it is instantly changed. - * @type {Sprite} - */ - _gaugeActualSprite = null; - /** - * The battler this gauge is representing when in use. - * @type {Game_Enemy|null} - */ - _battler = null; - /** - * The "current" value of the gauge in numeric form. - * @type {number} - */ - _gaugeCurrent = 0; - /** - * The "target" value of the gauge in numeric form. - * @type {number} - */ - _gaugeTarget = 0; - /** - * The "max" value of the gauge in numeric form. - * @type {number} - */ - _gaugeMax = 0; - /** - * The type of gauge this is, such as HP, MP, or TP. - * @type {Sprite_FlowingGauge.Types} - */ - _gaugeType = String.empty; - /** - * Whether or not this gauge is setup and ready to be drawn. - * @type {boolean} - */ - _isReady = false; - /** - * Left edge (in texture pixels) of the painted fill inside one gauge slice. - * @type {number} - */ - _gaugeSliceFillMinX = 0; - /** - * Width (in texture pixels) of the painted fill inside one gauge slice. - * @type {number} - */ - _gaugeSliceFillInnerWidth = 0; - /** - * Left edge (in texture pixels) of the background track interior. - * @type {number} - */ - _gaugeBackgroundTrackMinX = 0; - /** - * Width (in texture pixels) of the background track interior. - * @type {number} - */ - _gaugeBackgroundTrackInnerWidth = 0; - /** - * Initializes all properties of this class. - */ - initialize(bitmap) { - super.initialize(bitmap); - this.initializeGauges(); - } - /** - * Initializes the gauges based on bitmaps loaded from file. - */ - initializeGauges() { - this.resetValues(); - const backgroundFilename = this.extractFileName(J.HUD.EXT.TARGET.Metadata.BackgroundFilename); - const backgroundPromise = ImageManager.loadHudBitmap(backgroundFilename); - backgroundPromise.then((bitmap) => this.setBackgroundBitmap(bitmap)).catch(() => { - throw new Error("background bitmap failed to load."); - }); - const foregroundFilename = this.extractFileName(J.HUD.EXT.TARGET.Metadata.ForegroundFilename); - const foregroundPromise = ImageManager.loadHudBitmap(foregroundFilename); - foregroundPromise.then((bitmap) => this.setForegroundBitmap(bitmap)).catch(() => { - throw new Error("background bitmap failed to load."); - }); - Promise.all([backgroundPromise, foregroundPromise]).then(() => this.onReady()); - } - /** - * Extracts the filename out of the extended path. - * @param {string} longFileName The filename with the path in it. - * @returns {string} Just the filename. - */ - extractFileName(longFileName) { - const lastSlash = longFileName.lastIndexOf("/") + 1; - return longFileName.substring(lastSlash); - } - /** - * Sets the background bitmap to the given value. - * @param {Bitmap} bitmap The bitmap to set to the background. - */ - setBackgroundBitmap(bitmap) { - this._backgroundBitmap = bitmap; - } - /** - * Sets the foreground bitmap to the given value. - * @param {Bitmap} bitmap The bitmap to set to the foreground. - */ - setForegroundBitmap(bitmap) { - this.setGaugeBitmap(bitmap); - } - /** - * Creates gauge's background sprite. - */ - createGaugeBackground() { - this.setGaugeBackground(new Sprite(this.backgroundBitmap())); - this.gaugeBackground().x = J.HUD.EXT.TARGET.Metadata.BackgroundGaugeImageX; - this.gaugeBackground().y = J.HUD.EXT.TARGET.Metadata.BackgroundGaugeImageY; - this.addChild(this.gaugeBackground()); - } - /** - * Creates gauge's foreground sprite. - */ - createGaugeForeground() { - this.setGaugeCurrentSprite(new Sprite(this.gaugeBitmap())); - this.gaugeCurrentSprite().x = J.HUD.EXT.TARGET.Metadata.MiddlegroundGaugeImageX; - this.gaugeCurrentSprite().y = J.HUD.EXT.TARGET.Metadata.MiddlegroundGaugeImageY; - this.addChild(this.gaugeCurrentSprite()); - this.setGaugeActualSprite(new Sprite(this.gaugeBitmap())); - this.gaugeActualSprite().x = J.HUD.EXT.TARGET.Metadata.ForegroundGaugeImageX; - this.gaugeActualSprite().y = J.HUD.EXT.TARGET.Metadata.ForegroundGaugeImageY; - this.addChild(this.gaugeActualSprite()); - } - /** - * Resets all gauge values to 0. - */ - resetValues() { - this.setGaugeCurrent(0); - this.setGaugeTarget(0); - this.setGaugeMax(0); - } - /** - * Clears the battler of this gauge. - */ - clearBattler() { - this.setBattler(null); - } - /** - * The "current" value of the gauge. - * This is spends a lot of time in flux due to gradual change for visual enjoyment. - * If you need the real current value, use `.target()`. - * @returns {number} - */ - current() { - return this.gaugeCurrent(); - } - /** - * The "target" value of the gauge. - * This is what the "current" is striving to reach. - * @returns {number} - */ - target() { - if (this.battler()) { - return this.#targetByType(); - } else { - return 0; - } - } - /** - * Gets the target value for this gauge by its gauge type. - * @returns {number} - */ - #targetByType() { - switch (this.gaugeType()) { - case Sprite_FlowingGauge.Types.HP: return this.battler().hp; - case Sprite_FlowingGauge.Types.MP: return this.battler().mp; - case Sprite_FlowingGauge.Types.TP: return this.battler().tp; - default: return 0; - } - } - /** - * The "max" value of the gauge. - * This is simply the maximum amount that the gauge represents when full. - * @returns {number} - */ - max() { - if (this.battler()) { - return this.#maxByType(); - } else { - return 0; - } - } - /** - * Gets the max value for this gauge by its gauge type. - * @returns {number} - */ - #maxByType() { - switch (this.gaugeType()) { - case Sprite_FlowingGauge.Types.HP: return this.battler().mhp; - case Sprite_FlowingGauge.Types.MP: return this.battler().mmp; - case Sprite_FlowingGauge.Types.TP: return this.battler().maxTp(); - default: return 0; - } - } - /** - * Sets up this gauge with the given enemy battler. - * @param {Game_Enemy} battler The enemy battler. - * @param {Sprite_FlowingGauge.Types} gaugeType The type of gauge this is. - */ - setup(battler, gaugeType = Sprite_FlowingGauge.Types.HP) { - this.setBattler(battler); - this.setGaugeType(gaugeType); - this.setupGaugeByType(); - this.show(); - } - /** - * Sets up the gauge based on the gauge type. - */ - setupGaugeByType() { - this.gaugeCurrentSprite().setColorTone(this.greyTone()); - switch (this.gaugeType()) { - case Sprite_FlowingGauge.Types.HP: - this.setupGaugeAsHp(); - break; - case Sprite_FlowingGauge.Types.MP: - this.setupGaugeAsMp(); - break; - case Sprite_FlowingGauge.Types.TP: - this.setupGaugeAsTp(); - break; - } - } - /** - * Sets up the gauge as an hp gauge. - */ - setupGaugeAsHp() { - this.setGaugeCurrent(this.battler().hp); - this.setGaugeTarget(this.battler().hp); - this.setGaugeMax(this.battler().mhp); - this.gaugeActualSprite().setHue(this.hpGaugeHue()); - } - hpGaugeHue() { - return 0; - } - /** - * Sets up the gauge as an mp gauge. - */ - setupGaugeAsMp() { - this.setGaugeCurrent(this.battler().mp); - this.setGaugeTarget(this.battler().mp); - this.setGaugeMax(this.battler().mmp); - this.gaugeActualSprite().setHue(this.mpGaugeHue()); - } - mpGaugeHue() { - return -180; - } - /** - * Sets up the gauge as a tp gauge. - */ - setupGaugeAsTp() { - this.setGaugeCurrent(this.battler().tp); - this.setGaugeTarget(this.battler().tp); - const maxTp = this.battler().maxTp(); - this.setGaugeMax(maxTp); - this.gaugeActualSprite().setHue(this.tpGaugeHue()); - } - tpGaugeHue() { - return 80; - } - /** - * Refresh this gauge by redrawing it. - */ - refresh() { - this.drawGauge(); - } - /** - * The update loop of this gauge. - */ - update() { - super.update(); - if (!this.isReady()) return; - this.updateCurrent(); - this.updateFlow(); - this.drawGauge(); - } - /** - * Checks if this gauge is ready for drawing. - * If it is not, then updating will not take place. - * @returns {boolean} True if this gauge is ready, false otherwise. - */ - isReady() { - return this._isReady; - } - /** - * Executes one-time actions once the gauge is ready. - */ - onReady() { - this.createGaugeBackground(); - this.createGaugeForeground(); - this.measureGaugeArtExtents(); - this.alignGaugeForegroundToBackgroundTrack(); - this.updateFlowMax(); - this.setIsReady(true); - } - /** - * Updates the current and max values of the flow effect. - */ - updateFlowMax() { - const sliceW = this.gaugeWidth(); - const maxFlow = sliceW - this.gaugeSliceFillMinX() - this.gaugeSliceFillInnerWidth(); - this.setGaugeActualFlowLimit(Math.max(1, maxFlow)); - this.setGaugeActualFlowCurrent(Math.floor(Math.random() * this.gaugeActualFlowLimit())); - } - /** - * Updates the current value of the fore-most gauge. - * This is the background gauge that is a bit slower. - */ - updateCurrent() { - if (!this.canUpdateCurrent()) return; - if (this.isHpGaugeEmpty()) { - this.onDefeat(); - return; - } - if (this.current() !== this.target()) { - this.handleCurrentValueUpdate(); - } else { - this.handleCurrentValueUnchanged(); - } - } - /** - * Handles the update to the "current" value while it is changing either up or down. - */ - handleCurrentValueUpdate() { - const changeRate = this.changeRate(); - if (this.target() < this.current()) { - this.processCurrentValueIncrease(changeRate); - } else if (this.target() > this.current()) { - this.processCurrentValueDecrease(changeRate); - } - } - /** - * Processes the decrease of the current value and changes the tone. - */ - processCurrentValueIncrease(changeRate) { - this.setGaugeCurrent(this.gaugeCurrent() - changeRate); - if (this.current() < this.target()) { - this.setGaugeCurrent(this.gaugeTarget()); - } - this.gaugeCurrentSprite().setColorTone(this.downTone()); - } - /** - * Processes the increase of the current value and changes the tone. - */ - processCurrentValueDecrease(changeRate) { - this.setGaugeCurrent(this.gaugeCurrent() + changeRate); - if (this.current() > this.target()) { - this.setGaugeCurrent(this.gaugeTarget()); - } - this.gaugeCurrentSprite().setColorTone(this.upTone()); + +//#endregion +//#region src/plugins/hud/ext/target/_metadata/initialization.js +/** +* The core where all of my extensions live: in the `J` object. +*/ +globalThis.J ||= {}; +(() => { + const requiredBaseVersion = "3.2.0"; + const hasBaseRequirement = J.BASE.Helpers.satisfies(J.BASE.Metadata.Version, requiredBaseVersion); + if (hasBaseRequirement === false) { + throw new Error(`Either missing J-Base or has a lower version than the required: ${requiredBaseVersion}`); } - /** - * Handles the update to the "current" value while it is unchanging. - */ - handleCurrentValueUnchanged() { - this.gaugeCurrentSprite().setColorTone(this.greyTone()); + const requiredHudVersion = "2.4.0"; + const hasHudRequirement = J.BASE.Helpers.satisfies(J.HUD.Metadata.version.version(), requiredHudVersion); + if (hasHudRequirement === false) { + throw new Error(`Either missing J-HUD or has a lower version than the required: ${requiredHudVersion}`); } +})(); +/** +* The plugin umbrella that governs all things related to this extension plugin. +*/ +J.HUD.EXT.TARGET = {}; +/** +* The `metadata` associated with this plugin, such as version. +* @type {JHudTarget_PluginMetadata} +*/ +J.HUD.EXT.TARGET.Metadata = new JHudTarget_PluginMetadata("J-HUD-TargetFrame", "2.0.0"); +/** +* A collection of all aliased methods for this plugin. +*/ +J.HUD.EXT.TARGET.Aliased = { + Game_System: new Map(), + Hud_Manager: new Map(), + JABS_Battler: new Map(), + Scene_Map: new Map(), + Window_TargetFrame: new Map() +}; +/** +* All regular expressions used by this plugin. +*/ +J.HUD.EXT.TARGET.RegExp = { + TargetFrameText: //i, + TargetFrameIcon: //i, + HideTargetFrame: //i, + HideTargetText: //i, + HideTargetHP: //i, + HideTargetMP: //i, + HideTargetTP: //i +}; + +//#endregion +//#region src/plugins/hud/ext/target/_models/FramedTargetConfiguration.js +/** +* A configuration object for whether to show/hide various target data points. +*/ +var FramedTargetConfiguration = class { /** - * Whether or not we can update the - * @returns {boolean} + * Whether or not to show the target's name. + * @type {boolean} */ - canUpdateCurrent() { - if (!this.battler()) return false; - return true; - } + showName = true; /** - * Whether or not this HP gauge is empty. - * Not applicable to non-HP gauges. - * @returns {boolean} True if the HP gauge target is 0, false if not HP gauge or not 0. + * Whether or not to show the target's HP. + * @type {boolean} */ - isHpGaugeEmpty() { - if (this.gaugeType() !== Sprite_FlowingGauge.Types.HP) return false; - if (this.target() !== 0) return false; - return true; - } + showHp = true; /** - * Logic to execute when this target is defeated. + * Whether or not to show the target's MP. + * @type {boolean} */ - onDefeat() { - this.clearBattler(); - this.resetValues(); - } + showMp = true; /** - * The hue to alter the image by when the middleground gauge is going up. - * The gauge goes up when you're healing, so this defaults to green. - * @returns {[number, number, number, number]} The color tone: [red, green, blue, grey]. + * Whether or not to show the target's TP. + * @type {boolean} */ - upTone() { - return [ - 0, - 255, - 0, - 128 - ]; - } + showTp = true; /** - * The hue to alter the image by when the middleground gauge is going down. - * @returns {[number, number, number, number]} The color tone: [red, green, blue, grey]. + * Whether or not to show the target text. + * @type {boolean} */ - downTone() { - return [ - 255, - 0, - 0, - 0 - ]; - } + showText = true; /** - * The color tone to turn the sprite greyscale. - * @returns {[number, number, number, number]} The color tone: [red, green, blue, grey]. + * Constructor. + * @param {boolean} showName Whether or not to show the name. + * @param {boolean} showText Whether or not to show the name. + * @param {boolean} showHp Whether or not to show the name. + * @param {boolean} showMp Whether or not to show the name. + * @param {boolean} showTp Whether or not to show the name. */ - greyTone() { - return [ - 0, - 0, - 0, - 255 - ]; + constructor(showName = true, showText = true, showHp = J.HUD.EXT.TARGET.Metadata.EnableHP, showMp = J.HUD.EXT.TARGET.Metadata.EnableMP, showTp = J.HUD.EXT.TARGET.Metadata.EnableTP) { + this.showName = showName; + this.showText = showText; + this.showHp = showHp; + this.showMp = showMp; + this.showTp = showTp; } +}; + +//#endregion +//#region src/plugins/hud/ext/target/_models/FramedTarget.js +/** +* The shape of a target for the target frame. +*/ +var FramedTarget = class { /** - * Calculates the rate of which to increment/decrement the current gauge. - * The gauge goes down when they are hurting, so this defaults to red. - * @returns {number} + * The name of the target. + * @type {string|String.empty} */ - changeRate() { - const divisor = 10; - const rate = Math.abs((this.target() - this.current()) / divisor); - return rate; - } + name = String.empty; /** - * Update the flow meter to give the flowy aesthetic. + * The additional text of the target. + * @type {string|String.empty} */ - updateFlow() { - this.setGaugeActualFlowCurrent(this.gaugeActualFlowCurrent() + .3); - if (this.gaugeActualFlowCurrent() > this.gaugeActualFlowLimit()) { - this.setGaugeActualFlowCurrent(0); - } - } + text = String.empty; /** - * Draws this gauge. + * The icon to place on the target. + * @type {number} */ - drawGauge() { - this.drawCurrentGauge(); - this.drawActualGauge(); - } + icon = 0; /** - * Draws the "current" gauge, the gauge drawn in the middleground that - * represents the amount that the enemy looks like they have. This extra - * bar is drawn mostly for effect, and will spend a lot of time in-flux. + * Icons an extension wants shown ahead of the target's name, drawn after {@link #icon}.
+ * Held apart from {@link #name} so the frame decides where they go- and what goes between them and the + * name- rather than finding them baked into the name's text. + * @type {number[]} */ - drawCurrentGauge() { - const gaugeHeight = this.gaugeHeight(); - const factor = this.current() / this.max() * this.gaugeSliceFillInnerWidth(); - const frameX = this.gaugeActualFlowCurrent() + this.gaugeSliceFillMinX(); - this.gaugeCurrentSprite().setFrame(frameX, gaugeHeight, factor, gaugeHeight); - } + nameIconIndices = []; /** - * Draws the "actual" gauge, the gauge drawn in the foremost-ground that - * represents the amount that the enemy currently has. + * The battler data of the target. + * @type {Game_Enemy|null} */ - drawActualGauge() { - const gaugeHeight = this.gaugeHeight(); - const factor = this.target() / this.max() * this.gaugeSliceFillInnerWidth(); - const frameX = this.gaugeActualFlowCurrent() + this.gaugeSliceFillMinX(); - this.gaugeActualSprite().setFrame(frameX, 0, factor, gaugeHeight); - } + battler = null; /** - * The width of the gauge. - * @returns {number} + * The configuration of this target. + * @type {FramedTargetConfiguration|null} */ - gaugeWidth() { - return Math.floor(this.gaugeBitmap().width / 3); - } + configuration = null; /** - * The height of the gauge. - * @returns {number} + * Optional `#RRGGBB` for the name row; a passive extension may set this so the HUD tints the target name. + * Empty means use the window default text color. + * @type {string|String.empty} */ - gaugeHeight() { - return Math.floor(this.gaugeBitmap().height / 2); - } - /** - * Measures the interior track on the background and the interior fill band on the foreground slice. - * This keeps HP/MP bars inside the frame art when `scale.x` is cranked up. - */ - measureGaugeArtExtents() { - this.setGaugeSliceFillMinX(0); - this.setGaugeSliceFillInnerWidth(1); - this.setGaugeBackgroundTrackMinX(0); - this.setGaugeBackgroundTrackInnerWidth(1); - if (!this.gaugeBitmap()) return; - const sliceW = this.gaugeWidth(); - const sliceH = this.gaugeHeight(); - if (sliceW === 0 || sliceH === 0) return; - this.setGaugeSliceFillInnerWidth(sliceW); - this.setGaugeBackgroundTrackInnerWidth(this.backgroundBitmap() ? this.backgroundBitmap().width : sliceW); - if (!this.backgroundBitmap()) return; - const bgTrack = this.measureLongestOpaqueDarkHorizontalRun(this.backgroundBitmap(), 0, 0, this.backgroundBitmap().width, this.backgroundBitmap().height, 80); - const topTrack = this.measureBrightHorizontalExtent(this.gaugeBitmap(), 0, 0, sliceW, sliceH, 24); - const bottomTrack = this.measureBrightHorizontalExtent(this.gaugeBitmap(), 0, sliceH, sliceW, sliceH, 24); - const fillMinX = Math.min(topTrack.minX, bottomTrack.minX); - const fillMaxX = Math.max(topTrack.maxX, bottomTrack.maxX); - const fillInnerW = Math.max(1, fillMaxX - fillMinX + 1); - const trackInnerW = Math.max(1, bgTrack.maxX - bgTrack.minX + 1); - this.setGaugeSliceFillMinX(fillMinX); - this.setGaugeSliceFillInnerWidth(fillInnerW); - this.setGaugeBackgroundTrackMinX(bgTrack.minX); - this.setGaugeBackgroundTrackInnerWidth(trackInnerW); - } - /** - * Positions and scales the bar sprites so the measured fill maps onto the measured background track. - */ - alignGaugeForegroundToBackgroundTrack() { - if (!this.gaugeCurrentSprite() || !this.gaugeActualSprite()) return; - if (this.gaugeSliceFillInnerWidth() <= 0 || this.gaugeBackgroundTrackInnerWidth() <= 0) return; - const bgX = J.HUD.EXT.TARGET.Metadata.BackgroundGaugeImageX; - const fillLeftX = bgX + this.gaugeBackgroundTrackMinX(); - const troughRightExclusive = bgX + this.gaugeBackgroundTrackMinX() + this.gaugeBackgroundTrackInnerWidth(); - const effectiveBarWidth = Math.max(1, Math.min(this.gaugeBackgroundTrackInnerWidth(), troughRightExclusive - fillLeftX)); - const ratio = effectiveBarWidth / this.gaugeSliceFillInnerWidth(); - this.gaugeCurrentSprite().scale.x = ratio; - this.gaugeActualSprite().scale.x = ratio; - this.gaugeCurrentSprite().x = fillLeftX; - this.gaugeActualSprite().x = fillLeftX; - } - /** - * Finds the horizontal span of "bright enough" pixels inside a bitmap rectangle. - * Used to ignore near-black border pixels that are still opaque. - * @param {Bitmap} bitmap The bitmap to scan. - * @param {number} rectX The left of the scan rectangle. - * @param {number} rectY The top of the scan rectangle. - * @param {number} rectW The width of the scan rectangle. - * @param {number} rectH The height of the scan rectangle. - * @param {number} minBrightSum Minimum r+g+b sum to count as interior content. - * @returns {{minX:number,maxX:number}} - */ - measureBrightHorizontalExtent(bitmap, rectX, rectY, rectW, rectH, minBrightSum) { - let minX = rectW; - let maxX = -1; - for (let y = 0; y < rectH; y++) { - for (let x = 0; x < rectW; x++) { - const px = rectX + x; - const py = rectY + y; - if (bitmap.getAlphaPixel(px, py) < 8) continue; - const hex = bitmap.getPixel(px, py); - const bright = this.sumRgbFromHexString(hex); - if (bright <= minBrightSum) continue; - minX = Math.min(minX, x); - maxX = Math.max(maxX, x); - } - } - if (maxX < 0) { - return { - minX: 0, - maxX: rectW - 1 - }; - } - return { - minX, - maxX - }; - } - /** - * Finds the longest horizontal run of opaque "dark" pixels in a rectangle (row by row). - * Used for capsule-style gauge frames where the playable trough is darker than the end caps. - * @param {Bitmap} bitmap The bitmap to scan. - * @param {number} rectX The left of the scan rectangle. - * @param {number} rectY The top of the scan rectangle. - * @param {number} rectW The width of the scan rectangle. - * @param {number} rectH The height of the scan rectangle. - * @param {number} maxDarkSum Inclusive ceiling on r+g+b for a pixel to count as trough (caps sit above this). - * @returns {{minX:number,maxX:number}} Inclusive span of the best run in the same local x space as - * {@link measureBrightHorizontalExtent}. - */ - measureLongestOpaqueDarkHorizontalRun(bitmap, rectX, rectY, rectW, rectH, maxDarkSum) { - let bestMinX = 0; - let bestMaxX = rectW - 1; - let bestLen = 0; - for (let y = 0; y < rectH; y++) { - const py = rectY + y; - let runStart = -1; - for (let x = 0; x <= rectW; x++) { - const atEnd = x === rectW; - let isDark = false; - if (atEnd === false) { - const px = rectX + x; - if (bitmap.getAlphaPixel(px, py) < 8) { - isDark = false; - } else { - const sum = this.sumRgbFromHexString(bitmap.getPixel(px, py)); - isDark = sum <= maxDarkSum; - } - } - if (isDark && runStart < 0) { - runStart = x; - } - if ((isDark === false || atEnd) && runStart >= 0) { - const runEnd = x - 1; - const len = runEnd - runStart + 1; - if (len > bestLen) { - bestLen = len; - bestMinX = runStart; - bestMaxX = runEnd; - } - runStart = -1; - } - } - } - if (bestLen === 0) { - return { - minX: 0, - maxX: rectW - 1 - }; - } - return { - minX: bestMinX, - maxX: bestMaxX - }; - } + nameColorHex = String.empty; /** - * Parses `#RRGGBB` from {@link Bitmap#getPixel} and sums the channels. - * @param {string} hex The color string. - * @returns {number} + * Constructor. + * @param {string} name The name of the target. + * @param {string=} text The additional text for the target; defaults to an empty string. + * @param {number=} icon The icon to place on this target; defaults to 0. + * @param {Game_Enemy=} battler The battler data of the target; defaults to null. + * @param {FramedTargetConfiguration=} configuration The configuration of this target; defaults to null. + * @param {string=} nameColorHex Optional hex tint for {@link #drawTargetName}; defaults to empty (no override). */ - sumRgbFromHexString(hex) { - if (!hex || hex.length < 7) return 0; - const r = parseInt(hex.slice(1, 3), 16); - const g = parseInt(hex.slice(3, 5), 16); - const b = parseInt(hex.slice(5, 7), 16); - return r + g + b; + constructor(name, text = String.empty, icon = 0, battler = null, configuration = null, nameColorHex = String.empty) { + this.name = name; + this.text = text; + this.icon = icon; + this.battler = battler; + this.configuration = configuration; + this.nameColorHex = nameColorHex; } }; -//#endregion -//#region src/plugins/hud/ext/target/managers/ImageManager.js -/** -* Generates a promise based on the resolution of the bitmap.
-* If the promise resolves successfully, it'll contain the bitmap.
-* If the promise rejects, then it is up to the handler how to deal with that.
-* @param {string} filename The name of the file without the file extension. -* @returns {Promise} -*/ -ImageManager.loadHudBitmap = function(filename) { - return this.loadBitmapPromise(filename, "img/hud/"); -}; - //#endregion //#region src/plugins/hud/ext/target/objects/Game_Enemy.js /** @@ -1832,9 +680,19 @@ JABS_Battler.prototype.buildFramedTarget = function(battlerLastHit) { const targetFrameText = battlerLastHit.getTargetFrameText(); const targetFrameIcon = battlerLastHit.getTargetFrameIcon(); const targetConfiguration = battlerLastHit.buildFramedTargetConfiguration(); - return new FramedTarget(battlerName, targetFrameText, targetFrameIcon, battlerLastHit.getBattler(), targetConfiguration, String.empty); + const framedTarget = new FramedTarget(battlerName, targetFrameText, targetFrameIcon, battlerLastHit.getBattler(), targetConfiguration, String.empty); + this.decorateFramedTarget(framedTarget, battlerLastHit); + return framedTarget; }; /** +* Decorates a framed target once it is built: the hook extensions alias to add to how a target is shown. +* J-Passive-Affix adds a tier's name, icons, and color here. The boss frame runs its boss through this same +* hook, so whatever an extension adds shows up on the boss frame as well as the target frame. +* @param {FramedTarget} _framedTarget The framed target to decorate in place. +* @param {JABS_Battler} _framedBattler The battler the framed target shows. +*/ +JABS_Battler.prototype.decorateFramedTarget = function(_framedTarget, _framedBattler) {}; +/** * Determines whether or not the target frame will show for the given target. * @returns {boolean} True if we should show the target frame, false otherwise. */ @@ -1963,6 +821,26 @@ var Window_TargetFrame = class Window_TargetFrame extends Window_Base { */ static MaxDuration = 180; /** + * The size of each of the frame's gauges, in pixels. Each gauge's bar fills its whole bitmap, so the height is + * both. + * @type {{hp: {width: number, height: number}, mp: {width: number, height: number}, + * tp: {width: number, height: number}}} + */ + static GaugeSizes = { + hp: { + width: 200, + height: 12 + }, + mp: { + width: 200, + height: 6 + }, + tp: { + width: 30, + height: 6 + } + }; + /** * Constructor. * @param {Rectangle} rect The shape of this window. */ @@ -2018,6 +896,11 @@ var Window_TargetFrame = class Window_TargetFrame extends Window_Base { */ this._j._icon = 0; /** + * Icons an extension placed ahead of the target's name, drawn after the target's own icon. + * @type {number[]} + */ + this._j._nameIconIndices = []; + /** * The battler of the target. * @type {Game_Actor|Game_Enemy} */ @@ -2036,7 +919,7 @@ var Window_TargetFrame = class Window_TargetFrame extends Window_Base { /** * Gets the j. * @returns {{_spriteCache: Map, _name: string, _nameColorHex: string, _text: string, - * _icon: number, _battler: Game_Battler|null, _requestTargetRefresh: boolean, + * _icon: number, _nameIconIndices: number[], _battler: Game_Battler|null, _requestTargetRefresh: boolean, * _inactivityTimer: number}} The j. */ j() { @@ -2072,54 +955,44 @@ var Window_TargetFrame = class Window_TargetFrame extends Window_Base { this.getOrCreateTargetTpGaugeSprite(); } /** - * Creates an target gauge sprite for this window and caches it. - * @returns {Sprite_FlowingGauge} The gauge sprite of the target. + * Creates the target's hp gauge sprite for this window and caches it. + * @returns {Sprite_MapGauge} The gauge sprite of the target. */ getOrCreateTargetHpGaugeSprite() { - const key = `targetframe-enemy-hp-gauge`; - if (this.j()._spriteCache.has(key)) { - return this.j()._spriteCache.get(key); - } - const sprite = new Sprite_FlowingGauge(); - this.j()._spriteCache.set(key, sprite); - sprite.hide(); - sprite.scale.x = J.HUD.EXT.TARGET.Metadata.HpGaugeScaleX; - sprite.scale.y = J.HUD.EXT.TARGET.Metadata.HpGaugeScaleY; - this.addChild(sprite); - return sprite; + return this.getOrCreateGaugeSprite("targetframe-enemy-hp-gauge", Window_TargetFrame.GaugeSizes.hp); } /** - * Creates an target gauge sprite for this window and caches it. - * @returns {Sprite_FlowingGauge} The gauge sprite of the target. + * Creates the target's mp gauge sprite for this window and caches it. + * @returns {Sprite_MapGauge} The gauge sprite of the target. */ getOrCreateTargetMpGaugeSprite() { - const key = `targetframe-enemy-mp-gauge`; - if (this.j()._spriteCache.has(key)) { - return this.j()._spriteCache.get(key); - } - const sprite = new Sprite_FlowingGauge(); - this.j()._spriteCache.set(key, sprite); - sprite.hide(); - sprite.scale.x = J.HUD.EXT.TARGET.Metadata.MpGaugeScaleX; - sprite.scale.y = J.HUD.EXT.TARGET.Metadata.MpGaugeScaleY; - this.addChild(sprite); - return sprite; + return this.getOrCreateGaugeSprite("targetframe-enemy-mp-gauge", Window_TargetFrame.GaugeSizes.mp); } /** - * Creates an target gauge sprite for this window and caches it. - * @returns {Sprite_FlowingGauge} The gauge sprite of the target. + * Creates the target's tp gauge sprite for this window and caches it.
+ * The tp gauge stands on end beside the others, turned however far the plugin settings say. + * @returns {Sprite_MapGauge} The gauge sprite of the target. */ getOrCreateTargetTpGaugeSprite() { - const key = `targetframe-enemy-tp-gauge`; + const sprite = this.getOrCreateGaugeSprite("targetframe-enemy-tp-gauge", Window_TargetFrame.GaugeSizes.tp); + sprite.rotation = J.HUD.EXT.TARGET.Metadata.TpGaugeRotation * (Math.PI / 180); + return sprite; + } + /** + * Creates a gauge sprite of the given size for this window and caches it under the given key- or hands back + * the one already cached there. + * @param {string} key The key the gauge is cached under. + * @param {{width: number, height: number}} size The size of the gauge, in pixels. + * @returns {Sprite_MapGauge} + */ + getOrCreateGaugeSprite(key, size) { if (this.j()._spriteCache.has(key)) { return this.j()._spriteCache.get(key); } - const sprite = new Sprite_FlowingGauge(); + const { width, height } = size; + const sprite = new Sprite_MapGauge(width, height, height); this.j()._spriteCache.set(key, sprite); sprite.hide(); - sprite.rotation = J.HUD.EXT.TARGET.Metadata.TpGaugeRotation * (Math.PI / 180); - sprite.scale.x = J.HUD.EXT.TARGET.Metadata.TpGaugeScaleX; - sprite.scale.y = J.HUD.EXT.TARGET.Metadata.TpGaugeScaleY; this.addChild(sprite); return sprite; } @@ -2132,6 +1005,7 @@ var Window_TargetFrame = class Window_TargetFrame extends Window_Base { this.j()._nameColorHex = target.nameColorHex; this.j()._text = target.text; this.j()._icon = target.icon; + this.j()._nameIconIndices = target.nameIconIndices; this.j()._battler = target.battler; this.j()._configuration = target.configuration; this.refresh(); @@ -2177,6 +1051,13 @@ var Window_TargetFrame = class Window_TargetFrame extends Window_Base { return this.j()._icon; } /** + * Gets the icons an extension placed ahead of the current target's name. + * @returns {number[]} + */ + targetNameIconIndices() { + return this.j()._nameIconIndices; + } + /** * Gets the configuration of the current target. * @returns {FramedTargetConfiguration|null} */ @@ -2223,42 +1104,61 @@ var Window_TargetFrame = class Window_TargetFrame extends Window_Base { } } /** - * Pixel width reserved for the level column (Lv.xxx). + * Max width for subtext lines that span the window body. * @returns {number} */ - targetFrameLevelColumnWidth() { - return 96; + targetFrameBodyTextWidth() { + return Math.max(200, this.contentsWidth() - 8); } /** - * Max draw width for the name row so the level column does not overlap long tier names. - * @returns {number} + * Lays out the target frame, top to bottom: a name row of icons, level, and name; the target's extra + * text beneath that, when it has any; then the gauges. + * @param {number} x The x coordinate. + * @param {number} y The y coordinate. */ - targetFrameNameLineInnerWidth() { - const gap = 8; - const w = this.contentsWidth() - this.targetFrameLevelColumnWidth() - gap; - return Math.max(200, w); + drawContent(x, y) { + this.drawTargetNameRow(x, y); + this.drawTargetExtra(x, y + 24); + this.drawTargetBattlerInfo(x, y); } /** - * X offset for the level text (right-hand column after the name). - * @param {number} baseX Content-relative base x. - * @returns {number} + * Draws the name row: the target's icons, then its level, then its name, left to right.
+ * Each piece is drawn on its own, so each keeps its own size and color, and each is centered on the + * name's line- the name being the tallest thing on it. + * @param {number} x The x coordinate. + * @param {number} y The y coordinate. */ - targetFrameLevelDrawX(baseX) { - return baseX + this.targetFrameNameLineInnerWidth() + 4; + drawTargetNameRow(x, y) { + const iconsWidth = this.drawTargetRowIcons(x, y); + const levelX = x + iconsWidth; + const levelWidth = this.drawTargetLevel(levelX, y + 5); + const levelSpan = levelWidth > 0 ? levelWidth + 6 : 0; + this.drawTargetName(levelX + levelSpan, y); } /** - * Max width for subtext lines that span the window body. - * @returns {number} - */ - targetFrameBodyTextWidth() { - return Math.max(200, this.contentsWidth() - 8); + * Draws the icons that lead the name row: the target's own icon, then any an extension set ahead of + * its name. + * @param {number} x The x coordinate. + * @param {number} y The y coordinate of the row. + * @returns {number} The width the icons took, including the gap after them; 0 when there were none. + */ + drawTargetRowIcons(x, y) { + const iconIndices = this.targetRowIconIndices(); + if (iconIndices.length === 0) return 0; + const iconY = y + 1; + const pitch = ImageManager.iconWidth + 2; + iconIndices.forEach((iconIndex, index) => { + this.drawIcon(iconIndex, x + index * pitch, iconY); + }); + return iconIndices.length * pitch + 4; } - drawContent(x, y) { - this.drawTargetName(x, y); - this.drawTargetLevel(this.targetFrameLevelDrawX(x), y); - this.drawTargetExtra(x, y + 24); - this.drawTargetIcon(x, y + 48); - this.drawTargetBattlerInfo(x + 32, y); + /** + * The icon indices that lead the name row, in the order they are drawn. + * @returns {number[]} + */ + targetRowIconIndices() { + const ownIcons = this.hasTargetIcon() ? [this.targetIcon()] : []; + return [...ownIcons, ...this.targetNameIconIndices()]; } /** * Handles inactivity of this window. @@ -2273,20 +1173,19 @@ var Window_TargetFrame = class Window_TargetFrame extends Window_Base { } } /** - * Fades out the target frame window along with all sprites and content. + * Fades out the target frame's contents and sprites.
+ * The frame floats over the map with no window drawn behind it, so there is no window frame or background + * to fade- {@link #configure} hid those for good. */ fadeOutWindow() { - this.opacity -= 10; - this.backOpacity -= 10; this.contentsOpacity -= 10; this.j()._spriteCache.forEach((sprite, _) => sprite.opacity -= 10); } /** - * Fades in the target frame window along with all sprites and content. + * Fades in the target frame's contents and sprites.
+ * Only those two- the window frame and background stay hidden, so the frame keeps floating. */ fadeInWindow() { - this.opacity += 40; - this.backOpacity += 40; this.contentsOpacity += 40; this.j()._spriteCache.forEach((sprite, _) => sprite.opacity += 40); } @@ -2306,35 +1205,79 @@ var Window_TargetFrame = class Window_TargetFrame extends Window_Base { drawTargetName(x, y) { let name = `\\FS[24]${this.targetName()}`; if (J.MESSAGE) { - name = `\\*` + name; + name = `\\*${name}`; } + const color = this.targetNameColor(); + const width = this.contentsWidth() - x; + this.drawTextExInColor(name, x, y, width, color); + } + /** + * The color the target's name is drawn in.
+ * The color an extension asked for on the framed target, when it asked for one- J-Passive-Affix asks for a + * tier's color- and the normal text color otherwise. + * @returns {string} + */ + targetNameColor() { const hex = this.j()._nameColorHex; - const useHex = hex !== String.empty && hex.length > 0; - const w = this.targetFrameNameLineInnerWidth(); - this.contents.fontFace = $gameSystem.mainFontFace(); - this.contents.fontSize = $gameSystem.mainFontSize(); - if (useHex) { - this.changeTextColor(hex); - this.changeOutlineColor(ColorManager.outlineColor()); - } else { - this.resetFontSettings(); - } - const textState = this.createTextState(name, x, y, w); + if (hex !== String.empty) return hex; + return ColorManager.normalColor(); + } + /** + * Draws text-coded text starting in the given color, and reports how wide it drew.
+ * {@link Window_Base#drawTextEx} opens by resetting the font, and that reset returns the text color to + * normal- so a color set before calling it never survives into the draw. This takes the same steps with + * the color applied after the reset instead. + * @param {string} text The text to draw, escape codes included. + * @param {number} x The x coordinate. + * @param {number} y The y coordinate. + * @param {number} width The width the text may take. + * @param {string} color The color the text starts in. + * @returns {number} + */ + drawTextExInColor(text, x, y, width, color) { + this.resetFontSettings(); + this.changeTextColor(color); + const textState = this.createTextState(text, x, y, width); this.processAllText(textState); this.resetTextColor(); + return textState.outputWidth; } /** * Draws the target's level in the window. * @param {number} x The x coordinate. * @param {number} y The y coordinate. + * @returns {number} The width the level took; 0 when there was no level to draw. */ drawTargetLevel(x, y) { - if (!this.canDrawTargetLevel()) return; + if (!this.canDrawTargetLevel()) return 0; const { level } = this.j()._battler; - if (level) { - const levelString = `\\FS[14]Lv.${level.padZero(3)}`; - this.drawTextEx(levelString, x, y, this.targetFrameLevelColumnWidth()); - } + if (!level) return 0; + const levelString = `\\FS[14]Lv.${level.padZero(3)}`; + return this.drawTargetLevelText(levelString, x, y); + } + /** + * Draws the already-built level string at the given spot, in the level's color.
+ * Kept apart from {@link #drawTargetLevel} so a frame with a different layout can decide where the + * level goes without re-deciding whether there is a level to draw at all. + * @param {string} levelString The level text, escape codes included. + * @param {number} x The x coordinate. + * @param {number} y The y coordinate. + * @returns {number} The width the level took. + */ + drawTargetLevelText(levelString, x, y) { + const color = this.targetLevelColor(); + const width = this.contentsWidth() - x; + return this.drawTextExInColor(levelString, x, y, width, color); + } + /** + * The color the target's level is drawn in.
+ * The normal text color by default. This is the hook for extensions that have something to say about a + * level- J-Level-Sync marks a synced level in its own color- so they can color the level without building + * or drawing it themselves. + * @returns {string} + */ + targetLevelColor() { + return ColorManager.normalColor(); } /** * Determines whether or not we can draw the level of the target. @@ -2363,15 +1306,6 @@ var Window_TargetFrame = class Window_TargetFrame extends Window_Base { return true; } /** - * Draws the target's icon in the window. - * @param {number} x The x coordinate. - * @param {number} y The y coordinate. - */ - drawTargetIcon(x, y) { - if (!this.hasTargetIcon()) return; - this.drawIcon(this.targetIcon(), x, y + 4); - } - /** * Determines whether or not we have an icon to draw for the current target. * @returns {boolean} */ @@ -2394,14 +1328,13 @@ var Window_TargetFrame = class Window_TargetFrame extends Window_Base { } } /** - * Calculate the X coordinate for gauges. + * Calculate the X coordinate for gauges.
+ * The gauges are children of the window rather than of its contents, and the contents start the window's + * padding in from its edge- so shifting by the padding is what lines the gauges up with the name row. * @returns {number} */ targetBattlerGaugesX() { - if (this.hasTargetIcon()) { - return ImageManager.iconWidth; - } - return -8; + return this.padding; } /** * Calculate the Y coordinate for gauges. @@ -2414,49 +1347,75 @@ var Window_TargetFrame = class Window_TargetFrame extends Window_Base { return 44; } /** + * How far below the top of the gauges the afflictions start.
+ * The mp gauge hangs beneath the hp gauge when it is shown, so the gauges run deeper with it than without. + * @returns {number} + */ + targetGaugeStackHeight() { + const { hp, mp } = Window_TargetFrame.GaugeSizes; + if (this.targetConfiguration().showMp) return hp.height + 2 + mp.height + 4; + return hp.height + 4; + } + /** * Draws the target's various gauges. * @param {number} x The x coordinate. * @param {number} y The y coordinate. */ drawTargetBattlerGauges(x, y) { + const mpY = y + Window_TargetFrame.GaugeSizes.hp.height + 2; this.drawTargetHpGauge(x, y); - this.drawTargetMpGauge(x, y + 22); + this.drawTargetMpGauge(x, mpY); this.drawTargetTpGauge(x - 10, y + 32); } /** * Draws the hp gauge of the target. + * @param {number} x The x coordinate. + * @param {number} y The y coordinate. */ drawTargetHpGauge(x, y) { const gauge = this.getOrCreateTargetHpGaugeSprite(); - if (!this.targetConfiguration().showHp) { - gauge.hide(); - return; - } - gauge.setup(this.j()._battler, Sprite_FlowingGauge.Types.HP); - gauge.move(x, y); + const { showHp } = this.targetConfiguration(); + this.placeTargetGauge(gauge, "hp", showHp, x, y); } /** * Draws the mp gauge of the target. + * @param {number} x The x coordinate. + * @param {number} y The y coordinate. */ drawTargetMpGauge(x, y) { const gauge = this.getOrCreateTargetMpGaugeSprite(); - if (!this.targetConfiguration().showMp) { - gauge.hide(); - return; - } - gauge.setup(this.j()._battler, Sprite_FlowingGauge.Types.MP); - gauge.move(x, y); + const { showMp } = this.targetConfiguration(); + this.placeTargetGauge(gauge, "mp", showMp, x, y); } /** * Draws the tp gauge of the target. + * @param {number} x The x coordinate. + * @param {number} y The y coordinate. */ drawTargetTpGauge(x, y) { const gauge = this.getOrCreateTargetTpGaugeSprite(); - if (!this.targetConfiguration().showTp) { + const { showTp } = this.targetConfiguration(); + this.placeTargetGauge(gauge, "tp", showTp, x, y); + } + /** + * Points one of the target's gauges at the framed battler and puts it on screen- or hides it, when the target + * does not show that gauge.
+ * A map gauge that has been hidden also stops updating, and showing it again does not start it back up, so + * both happen here explicitly. Without that, the gauge would draw once and then freeze. + * @param {Sprite_MapGauge} gauge The gauge to place. + * @param {string} statusType The resource the gauge shows, such as "hp". + * @param {boolean} isShown Whether the target shows this gauge at all. + * @param {number} x The x coordinate. + * @param {number} y The y coordinate. + */ + placeTargetGauge(gauge, statusType, isShown, x, y) { + if (!isShown) { gauge.hide(); return; } - gauge.setup(this.j()._battler, Sprite_FlowingGauge.Types.TP); + gauge.setup(this.j()._battler, statusType); + gauge.show(); + gauge.activateGauge(); gauge.move(x, y); } }; @@ -2479,17 +1438,22 @@ if (J.HUD && J.HUD.EXT.TARGET) { this._afflictionPresenter = new StateAfflictionHudPresenter(this, this._j._spriteCache); }; /** - * Builds the layout spec for target frame affliction rows. + * Builds the layout spec for the target frame's affliction strip.
+ * The frame keeps it compact: one row shared by debuffs and buffs, half-size icons, and a colored square + * behind each icon to tell the two apart. * @returns {StateAfflictionHudLayoutSpec} */ Window_TargetFrame.prototype.targetAfflictionLayoutSpec = function() { const layout = new StateAfflictionHudLayoutSpec(); - layout.originX = 32; - if (this.hasTargetIcon()) { - layout.originX += ImageManager.iconWidth; - } - layout.originY = this.targetBattlerGaugesY() + 44; - layout.rowGap = 24; + layout.originX = this.targetBattlerGaugesX(); + layout.originY = this.targetBattlerGaugesY() + this.targetGaugeStackHeight(); + layout.singleRow = true; + layout.iconScale = .5; + layout.polarityBacking = true; + layout.iconPitch = 30; + layout.timerOffsetY = 5; + layout.timerFontSizeReduction = 12; + layout.stackFontSizeReduction = 12; return layout; }; /** diff --git a/chef-adventure/js/plugins/j/level/ext/J-Level-Sync.js b/chef-adventure/js/plugins/j/level/ext/J-Level-Sync.js index 1fb606c8..e745141a 100644 --- a/chef-adventure/js/plugins/j/level/ext/J-Level-Sync.js +++ b/chef-adventure/js/plugins/j/level/ext/J-Level-Sync.js @@ -1,7 +1,7 @@ //region annotations /*: * @target MZ - * @plugindesc [v1.1.0 LEVEL-SYNC] Content level sync for dungeons and trials. + * @plugindesc [v1.1.1 LEVEL-SYNC] Content level sync for dungeons and trials. * @author JE * @url https://github.com/je-can-code/rmmz-plugins * @base J-Base @@ -117,6 +117,9 @@ * * ============================================================================ * CHANGELOG: + * - 1.1.1 + * A content-synced target's level reads in light blue on the rebuilt target + * frame from J-HUD-TargetFrame 2.0.0. * - 1.1.0 * Routed the _levelSync namespace into its own save section, so an active * sync session lands in systems/level-sync.json rather than in the system @@ -220,7 +223,7 @@ J.LEVEL.EXT.SYNC = {}; /** * The metadata associated with this plugin. */ -J.LEVEL.EXT.SYNC.Metadata = new JLevelSync_PluginMetadata("J-Level-Sync", "1.1.0"); +J.LEVEL.EXT.SYNC.Metadata = new JLevelSync_PluginMetadata("J-Level-Sync", "1.1.1"); /** * A collection of all aliased methods for this plugin. */ @@ -590,23 +593,16 @@ Window_StatusBase.prototype.drawActorLevel = function(actor, x, y) { //#region src/plugins/level/ext/sync/windows/Window_TargetFrame.js if (J.HUD && J.HUD.EXT && J.HUD.EXT.TARGET) { /** - * Extends {@link #drawTargetLevel}.
- * Colorizes the level text and prepends the sync icon when the target is a - * content-synced actor. - * @param {number} x The x coordinate. - * @param {number} y The y coordinate. + * Extends {@link #targetLevelColor}.
+ * A content-synced target's level reads in light blue, so the player can tell at a glance that the level on + * show is the synced one rather than the real one. + * @returns {string} */ - J.LEVEL.EXT.SYNC.Aliased.Window_TargetFrame.set("drawTargetLevel", Window_TargetFrame.prototype.drawTargetLevel); - Window_TargetFrame.prototype.drawTargetLevel = function(x, y) { - if (!this.canDrawTargetLevel()) return; - const { _battler: battler } = this._j; - if (!battler.level) return; - const isSynced = battler.isActor() && battler.isContentSynced(); - const iconIndex = J.LEVEL.EXT.SYNC.Metadata.syncIndicatorIconIndex; - const colorCode = isSynced ? "\\C[6]" : ""; - const iconPrefix = isSynced && iconIndex > 0 ? `\\I[${iconIndex}]` : ""; - const levelString = `\\FS[14]${colorCode}${iconPrefix}Lv.${battler.level.padZero(3)}`; - this.drawTextEx(levelString, x, y, this.targetFrameLevelColumnWidth()); + J.LEVEL.EXT.SYNC.Aliased.Window_TargetFrame.set("targetLevelColor", Window_TargetFrame.prototype.targetLevelColor); + Window_TargetFrame.prototype.targetLevelColor = function() { + const { _battler: battler } = this.j(); + if (battler.isActor() && battler.isContentSynced()) return "#80c0ff"; + return J.LEVEL.EXT.SYNC.Aliased.Window_TargetFrame.get("targetLevelColor").call(this); }; } diff --git a/chef-adventure/js/plugins/j/manifest.json b/chef-adventure/js/plugins/j/manifest.json index 1b72dfdf..642d0ce0 100644 --- a/chef-adventure/js/plugins/j/manifest.json +++ b/chef-adventure/js/plugins/j/manifest.json @@ -2,7 +2,7 @@ "formatVersion": 1, "generatedBy": "rmmz-plugins src/build-tools/generate-manifest.js - generated, never edit by hand", "files": { - "abs/J-ABS.js": "aa9b0ff60bfb1a7ed73651c37e17176351b7f34df883049c4107fbc1e8c7fdd3", + "abs/J-ABS.js": "c534a325bb540f6144cacaf237c6c1b4610175536c6dd78c5dac3ef4d8b6d2f5", "abs/ext/J-ABS-AllyAI.js": "213bdb7ea60af3042c24c4e10f0a8cabb8326994d9b521527f870d4491b5b7e7", "abs/ext/J-ABS-Boss.js": "bdce8ea264182d90385faf2c106874f9c8645bc1c90842512fc0f9c38e8320ca", "abs/ext/J-ABS-Charge.js": "5206f0ef7b974c3a4e123018a9f9bb3588133b8d159bbb3c9445a482def21102", @@ -26,7 +26,7 @@ "abs/ext/J-ABS-Tools.js": "620ebd0f71450cb8fa2a286c2dad50d210b1f3e7e721ef1a1d73985405bdfa88", "apt/J-Aptitude-Typed.js": "d8316df2f800dbf7c970edff8112224f83b68b341ed9c3d751978c1abc013ac2", "apt/J-Aptitude.js": "a6c32ec14e0063abcfd0e0d5a05eaa9f9e2a6909db428a471110fa8e651ced2e", - "base/J-Base.js": "11cbbb7daf767d5a63329094eb2c1c2c395ab373d7d6072d369ee72f50c56f3a", + "base/J-Base.js": "fa6bc0370307f7de71911b573b48a938680334ef5ca2766d99bd79e8c4b03cb9", "base/ext/J-Base-Save.js": "e9a387a79f23c5e89a1949a0f7703daa620f45d3c784cfa0f7603a3ef74ba94c", "ca-mods/J-CA-Mods.js": "9535f3dcdbeb678c19c7afc352de43fe71d081d6d9f2d5808a139892de5bf8b7", "cms/core/J-CMS.js": "2313bbfd2763a1e22e5fbdf4381a34e9f233df6c05b10eeddf42c72f852e0fb0", @@ -42,29 +42,29 @@ "extend/J-Extend.js": "997743e61907b3ca4a8d35c63dcfe91587a812631387513c52c8a63d41c64f08", "extend/ext/J-Extend-ABS.js": "2e7c366781f77fb8ef4e389f0ef3d9e983410c642acc619cf6e808944b35fc1e", "extend/ext/J-Extend-SKS.js": "1f81936cf8d536f6fce2d574e6fc71893daaa19e5c80ccfbeb3c5667e9ffaa46", - "hud/J-HUD.js": "5af77bae8d88a4247a15a9a2b4e0e01d7609fdfb63e00a8195142330df70faa2", - "hud/ext/J-HUD-BossFrame.js": "8afbd64ae9b709579828621089504b4d98fb780659787f46d148c66fdfa45621", + "hud/J-HUD.js": "967a124c66b9f048075a01357526328af99fe671f45275fb286ab514b7aed478", + "hud/ext/J-HUD-BossFrame.js": "09f6ed48d5283f6c8913a38dcb9d7ebc03bb623edfaf6a076f6737382f348774", "hud/ext/J-HUD-Dps.js": "5c85f13db6f75562080260a8f76d690183141f78efb6741d781187feb8c04042", "hud/ext/J-HUD-Food.js": "1f187745e09dcfa7d5092c98235d3375ceaab3ab9fd64dd045da44e5c8cb30b4", "hud/ext/J-HUD-InputFrame.js": "ceedb22c0c8c90580fa711c6f9cc23d4445a0581e0d12cc812b8903caef9d05a", "hud/ext/J-HUD-PartyFrame.js": "79c86fb6a86478f7341855ea782f13ae6220ebd13ef1f08316f3ccb7433af093", "hud/ext/J-HUD-QuestFrame.js": "c001581fbc263f0946aad17a76e7af0e6e8ecaa2075401d477f6a3bbb4a7a376", - "hud/ext/J-HUD-TargetFrame.js": "06d219c4585823ba0cdbb1a89f35e0f04e6bfd303ef0746fb094c866a1544e85", + "hud/ext/J-HUD-TargetFrame.js": "c9b8fecba5fddb4b5b46099d62fcf05b031d14f6767666f424bd0a73526ddb24", "jafting/J-JAFTING.js": "001e02669239ddc6ac9dec0d29a4976fff1bb71a5180d28134e8783cd1fe1341", "jafting/ext/J-JAFTING-Creation.js": "1e83319b4d53ee2488fbb9b418020e78ebb5dbd4280815d09f0f56884a56bb37", "jafting/ext/J-JAFTING-Refinement.js": "f8a4bf0029c0a6fbdba72aa8b2ec08ac48abd7861db85ef8b555838cc1b00523", "level/J-LevelMaster.js": "09c1b85c2b15be9c2819d718571115bce0524a7e8a731fe85dc32300172830c5", "level/ext/J-Level-Flat.js": "18ccaf7552d88d8a407b4e841f266362111fb3f1e264037fd5fd50e10fe94ec6", - "level/ext/J-Level-Sync.js": "11376c23bc71056a47151cd3121ee21054b22c4af2dc8545536ff2234e9c879f", + "level/ext/J-Level-Sync.js": "7029722c3fad16dd6b45f950badd3bb29600a94a3e836a086f7996211c9744e5", "lighting/J-Lighting.js": "5c3d86f3874244908ab6e470b462588cd0df16c1e46d2caa52edbbdceed29d8b", "lighting/ext/J-Lighting-Time.js": "e4f765b5936b5e35b4786c55901b4facb105f51192cb6582b0a55b39484ba3a6", "log/J-Log.js": "45d7fc8b5bf39604077c4b3a1faa18d600dc28ab515c2f18e32ac2f7187feea3", "map/J-Map.js": "5db60da98f22252f0740b4292c665fec143c63789c6d1c26e587670de4f49acb", - "message/J-Message.js": "81384ba78407a3039eded4c979a539b297aa9ae4195e6930ba074c65040c2491", + "message/J-Message.js": "b5e734f980ffa10d8c92d47c65d9046dca542b2ba827a755def4815ace555aa5", "message/ext/J-Message-Bubbles.js": "31560bfefa7f40842eab41c22aa4f654ef0fd8e6eb63bd23c30453eb19ebbba5", "message/ext/J-Message-Chatter.js": "1ec53db1eb8c0d7cb4bd62f5e3531a0141db133b664dd977b1d90b87f6518008", "motion/J-Motion.js": "615d56000f4b5552cd2191d99872a41fa8adab999f20bf8b0fa2740123bf0ba7", - "motion/ext/J-Motion-ABS.js": "2cd14cdbbea5a32565ffc0f60ac06e6bbff634b6de91aefe77711bc2062a4231", + "motion/ext/J-Motion-ABS.js": "3f2313f57dd2b3dd82e7faa51f6f9d1a67b79d283c0ebdd7f338a2dc8c2461ba", "motion/ext/J-Motion-Passive.js": "75944e66e3881443be330bc45e8a7cbec8d91db72f309951e49dc6f3646e8d28", "natural/J-NaturalGrowth.js": "47aad21b41ec9200d39866a6ad9bcfdd307632211518776ed45a41e87bc73944", "omni/J-Omnipedia.js": "ca7c6ff1676e305edc19a80b1e3cf83a8bae30ffda1897552961e83403be0575", @@ -72,7 +72,7 @@ "omni/ext/J-OMNI-Quests.js": "806359da5267e67ad5e44fe7dbbdb5acd36338dfc4c20b3bfbd93c6e2ae8c5ef", "omni/ext/J-OMNI-Stats.js": "050639c5c7d11096005bf0e69d384a35d9fb798d7554742bf7c4bd75002b8577", "passive/J-Passive.js": "00e29c043f28811b40a622c9972498924377e16195080d187f4fcb71b8eb573a", - "passive/ext/J-Passive-Affix.js": "44a47f84ad6ae8d22dfcb72eec03eeb7007c397ee1ddfb0a6e5117ce6629eace", + "passive/ext/J-Passive-Affix.js": "e07bf199eb4bfb90a252988196919fd35d8759037643b3a66ca938501a35b380", "passive/ext/J-Passive-Conditional.js": "f3c72a250187ba2cd24e503c3e895b7b3ffa0734baf06a0918441585507b3df9", "passive/ext/J-Passive-OTIB.js": "d7a3fdabb42fcd58b7b05a653b5ed266d78ae2373e53d38a3d695ddd5ed524ad", "passive/ext/J-Passive-SKS.js": "cd7016667b4e5e0138e108987f29d53b127257f96a458ba64d52d7a67b01b734", diff --git a/chef-adventure/js/plugins/j/message/J-Message.js b/chef-adventure/js/plugins/j/message/J-Message.js index deeeb4fd..18ecb92b 100644 --- a/chef-adventure/js/plugins/j/message/J-Message.js +++ b/chef-adventure/js/plugins/j/message/J-Message.js @@ -1,7 +1,7 @@ //region Introduction /*: * @target MZ - * @plugindesc [v2.1.0 MESSAGE] Gives access to more message window functionality. + * @plugindesc [v2.1.1 MESSAGE] Gives access to more message window functionality. * @author JE * @url https://github.com/je-can-code/rmmz-plugins * @base J-Base @@ -251,6 +251,9 @@ * * ============================================================================ * CHANGELOG: + * - 2.1.1 + * A Show Choices, Input Number or Select Item with no Show Text above it no + * longer flashes an empty message box as it closes. * - 2.1.0 * Added the \more text code, which welds a message onto the one written * after it. The box grows to hold whatever they add up to. @@ -658,7 +661,7 @@ J.MESSAGE = {}; /** * The `metadata` associated with this plugin, such as version. */ -J.MESSAGE.Metadata = new J_MessagePluginMetadata("J-Message", "2.1.0"); +J.MESSAGE.Metadata = new J_MessagePluginMetadata("J-Message", "2.1.1"); /** * A collection of all base aliases. */ @@ -3587,8 +3590,17 @@ Window_Message.prototype.isFadingMessage = function() { * letter with it. So the collapse is undone here and replaced with a fade: the window is held fully * open and made progressively transparent instead, which is the only way the text is still on screen * to leave with it. +* +* A window that was never opened declines the fade, because it has nothing on screen to fade. A Show +* Choices, Input Number or Select Item written without a Show Text above it starts with this window +* still shut, and still ends by terminating it - so fading from there would throw the empty box fully +* open for the whole length of the fade just to dissolve it again. */ Window_Message.prototype.beginMessageFade = function() { + if (this.isClosed() === true) { + this.finishMessageFade(); + return; + } const frames = MessageFade.frames(); this.setFadeFrames(frames); this.setFadeElapsed(0); diff --git a/chef-adventure/js/plugins/j/motion/ext/J-Motion-ABS.js b/chef-adventure/js/plugins/j/motion/ext/J-Motion-ABS.js index e98cd3ad..a70c4e11 100644 --- a/chef-adventure/js/plugins/j/motion/ext/J-Motion-ABS.js +++ b/chef-adventure/js/plugins/j/motion/ext/J-Motion-ABS.js @@ -2,7 +2,7 @@ /*: * @target MZ * @plugindesc - * [v1.1.0 MOTION-ABS] Combat-driven motion: state effects and death animations. + * [v1.2.0 MOTION-ABS] Combat-driven motion: state effects, deaths, arrivals and departures. * @author JE * @url https://github.com/je-can-code/rmmz-plugins * @base J-Base @@ -16,11 +16,13 @@ * OVERVIEW * J-Motion gives map characters motion. This extension lets combat drive it. * - * Two things live here, and both exist because a battler and a character are - * different objects that only J-ABS holds together at the same time: + * Three things live here, and all of them exist because a battler and a + * character are different objects that only J-ABS holds together at once: * * - STATES can declare motions. A bleeding creature pulses, an elite swells. * - DEATHS are animated. Enemies collapse instead of vanishing mid-frame. + * - ARRIVALS and DEPARTURES are animated. An enemy whose event page brings it + * onto the map or takes it off again turns into view or away from it. * * Integrates with others of mine plugins: * - J-Base; to be honest this is just required for all my plugins. @@ -48,6 +50,42 @@ * Rewards and loot still drop the moment the enemy is defeated, so gold and * items appear while the body is still coming apart. * + * ARRIVALS AND DEPARTURES + * Every enemy gets these too, without being asked. An enemy event whose page + * stops applying - a closing, a switch turning off, an Erase + * Event command - used to vanish on the spot, and one whose page started + * applying used to pop into existence. Now both are animated. + * + * The shape is a fold: the sprite turns on its vertical axis like a paper + * cutout, edge-on when it is absent and facing the player when it is present. + * A departing enemy turns away and is gone; an arriving one turns to face you. + * No death looks like this, so an enemy leaving at the end of its hours is + * never mistaken for one that was just killed with no loot to show for it. + * + * While it folds away, an enemy cannot be hit and does not act, and its page is + * held back until the fold has finished. While it unfolds, it can be hit but + * does not act until it is fully facing you. + * + * Both begin with the enemy's respawn animation, the very one it plays when it + * returns after being defeated, chosen the same way: on + * the event, then the enemy's note, then J-ABS's default. An id of 0 turns it + * off here too, and the fold still plays without it. + * + * Any page change on a living enemy counts, including one that swaps it for a + * different enemy on the event's next page: J-ABS builds that as a brand new + * battler at full health anyway, so it folds out and the new one folds in. + * + * Enemies that respawn after being defeated, and enemies brought in by the + * Spawn Enemy command, unfold into view too, beneath whatever animation they + * already play - so every way an enemy appears looks the same. + * + * Enemies already on a map when you arrive there do not unfold; that is a map + * loading, not an entrance. Enemies that are dying leave through their death + * animation instead. + * + * Both motions are also ordinary J-Motion types, `fold` and `unfold`, taking a + * single DURATION parameter, and can be declared anywhere a motion can. + * * ============================================================================ * DEATH MOTION: * There are three styles, and they are speeds as much as shapes: @@ -126,8 +164,23 @@ * * Collection is deliberately not animated. A collected drop arrives at the * player and goes there, which is already a moment with a visible cause. + * + * ---------------------------------------------------------------------------- + * Arrival and departure pacing lives in the same file, under `presence`: + * + * "presence": { + * "arrivalDuration": 30, + * "departureDuration": 30 + * } + * + * Both are in frames. A duration of 0 turns that half off, and the enemy + * appears or vanishes on the frame its page changes, as it used to. * ============================================================================ * CHANGELOG: + * - 1.2.0 + * Enemies now fold into view when their page brings them onto the map, and fold + * away when it takes them off, instead of popping in and out. A folding enemy + * can't be hit on the way out, and doesn't act until it is facing you. * - 1.1.0 * A loot drop about to expire now blinks, then dissolves over its closing frames, * so it stops vanishing without warning. Loot being drawn toward somebody is @@ -142,10 +195,11 @@ /** * The metadata for J-Motion-ABS. * -* Death and loot pacing are read from the same external config J-Motion core uses, under their own -* `death` and `loot` sections. Keeping them there rather than in plugin parameters means the speed -* at which everything in the game dies or fades away is one file a designer can open, which is the -* sort of thing that gets retuned by feel rather than by reasoning. +* Death, loot, and presence pacing are read from the same external config J-Motion core uses, under +* their own `death`, `loot`, and `presence` sections. Keeping them there rather than in plugin +* parameters means the speed at which everything in the game dies, fades away, arrives, or leaves is +* one file a designer can open, which is the sort of thing that gets retuned by feel rather than by +* reasoning. */ var J_MOTION_ABS_PluginMetadata = class J_MOTION_ABS_PluginMetadata extends PluginMetadata { /** @@ -191,14 +245,27 @@ var J_MOTION_ABS_PluginMetadata = class J_MOTION_ABS_PluginMetadata extends Plug } }; /** + * The arrival and departure pacing used when the config says nothing at all. + * + * Frames, and the same numbers the shipped config carries. Half a second each way: long enough to + * read as a battler turning to face the player or turning away, short enough that nobody is left + * waiting on it. + * @type {{arrivalDuration: number, departureDuration: number}} + */ + static FALLBACK_PRESENCE = { + arrivalDuration: 30, + departureDuration: 30 + }; + /** * Extends {@link #postInitialize}.
- * Reads the death and loot pacing out of the shared motion configuration. + * Reads the death, loot, and presence pacing out of the shared motion configuration. */ postInitialize() { super.postInitialize(); const parsedConfiguration = this.loadMotionConfiguration(); this.initializeDeathMetadata(parsedConfiguration); this.initializeLootMetadata(parsedConfiguration); + this.initializePresenceMetadata(parsedConfiguration); } /** * Reads the shared motion configuration off disk. @@ -255,6 +322,27 @@ var J_MOTION_ABS_PluginMetadata = class J_MOTION_ABS_PluginMetadata extends Plug }; } /** + * Reads how long a battler takes to arrive on the map and to leave it when its page changes. + * + * A duration of zero turns that half off entirely, and the battler appears or vanishes on the + * frame its page changes, the way it did before either animation existed. + * @param {Object} parsedConfiguration The parsed motion configuration root. + */ + initializePresenceMetadata(parsedConfiguration) { + const presenceConfiguration = parsedConfiguration.presence ?? {}; + const fallback = J_MOTION_ABS_PluginMetadata.FALLBACK_PRESENCE; + /** + * How many frames a battler takes to unfold into view when its page brings it onto the map. + * @type {number} + */ + this.arrivalDuration = presenceConfiguration.arrivalDuration ?? fallback.arrivalDuration; + /** + * How many frames a battler takes to fold out of view before its page takes it off the map. + * @type {number} + */ + this.departureDuration = presenceConfiguration.departureDuration ?? fallback.departureDuration; + } + /** * How long a death style runs for, in frames. * * An unrecognised style is a typo in somebody's notetag rather than a reason to stop the game, so @@ -294,7 +382,7 @@ globalThis.J ||= {}; if (hasMotionRequirement === false) { throw new Error(`Either missing J-Motion or has a lower version than the required: ${requiredMotionVersion}`); } - const requiredJabsVersion = "4.16.0"; + const requiredJabsVersion = "4.25.0"; const hasJabsRequirement = J.BASE.Helpers.satisfies(J.ABS.Metadata.version.version(), requiredJabsVersion); if (hasJabsRequirement === false) { throw new Error(`Either missing J-ABS or has a lower version than the required: ${requiredJabsVersion}`); @@ -307,12 +395,13 @@ J.MOTION.EXT.ABS = {}; /** * The metadata associated with this plugin. */ -J.MOTION.EXT.ABS.Metadata = new J_MOTION_ABS_PluginMetadata("J-Motion-ABS", "1.1.0"); +J.MOTION.EXT.ABS.Metadata = new J_MOTION_ABS_PluginMetadata("J-Motion-ABS", "1.2.0"); /** * A collection of all aliased methods for this plugin. */ J.MOTION.EXT.ABS.Aliased = {}; J.MOTION.EXT.ABS.Aliased.Game_Battler = new Map(); +J.MOTION.EXT.ABS.Aliased.Game_Event = new Map(); J.MOTION.EXT.ABS.Aliased.JABS_Engine = new Map(); J.MOTION.EXT.ABS.Aliased.Sprite_Character = new Map(); /** @@ -511,6 +600,89 @@ var CollapseMotionEffect = class CollapseMotionEffect extends MotionEffect { } }; +//#endregion +//#region src/plugins/motion/ext/abs/models/FoldMotionEffect.js +/** +* How a battler arrives on the map and leaves it when nobody killed it. +* +* A battler whose page appears or disappears used to do so on a single frame, which reads as a +* rendering fault rather than as something happening. This gives both moments a shape: the sprite +* turns on its vertical axis like a paper cutout, edge-on when it is not there and facing the player +* when it is. Folding turns it away; unfolding turns it back. +* +* The shape was chosen against J-Motion-ABS's own collapses rather than on its own merits. Every +* death squashes, topples, or sinks, and all of those move a body vertically or tip it over. A fold +* is the one thing none of them do — the height never changes — so a battler leaving at the end of +* its hours can never be mistaken for one that was just killed with no loot to show for it. +* +* The two directions are one effect because each is exactly the other played backwards, and keeping +* them together is what guarantees they stay that way when either one is retuned. +* +* `MotionEffect`, `MotionChannels` and `MotionEasing` are reached as globals rather than imports: +* they ship inside J-Motion's bundle and are hoisted by the time this one loads. +*/ +var FoldMotionEffect = class FoldMotionEffect extends MotionEffect { + /** + * The motion type that turns a sprite away until it is edge-on and gone. + * @type {string} + */ + static FOLD = "fold"; + /** + * The motion type that turns a sprite from edge-on to facing the player. + * @type {string} + */ + static UNFOLD = "unfold"; + /** + * The channels a fold takes exclusive ownership of while it runs. + * + * Width and opacity are the whole of the fold, so nothing ambient may fight it for them: a + * ghosting enemy would otherwise pulse back into view halfway through leaving. Everything else is + * left to compose, so a floating enemy still bobs as it turns and a large one is still large. + * @returns {string[]} + */ + claims() { + return [MotionChannels.SCALE_X, MotionChannels.OPACITY]; + } + /** + * How far through the fold this frame is, from 0 to 1. + * @returns {number} + */ + progress() { + const { duration } = this.parameters(); + return MotionEasing.normalize(this.elapsedFrames() / duration); + } + /** + * How far the sprite is turned away from the player this frame, from 0 (facing) to 1 (edge-on). + * + * Folding turns away as it progresses; unfolding starts turned away and comes back. Answering the + * question in these terms is what lets one drawing serve both directions. + * @returns {number} + */ + turnedAway() { + const progress = this.progress(); + const motionType = this.declaration().type(); + if (motionType === FoldMotionEffect.UNFOLD) return 1 - progress; + return progress; + } + /** + * Writes this frame of the fold into the composition. + * + * The width is the cosine of the turn, which is exactly how wide a flat card looks at that angle — + * so a turn at a steady pace starts slowly and hurries as it goes edge-on, and unfolding does the + * reverse. The opacity falls away with the square of the turn, so the sprite stays solid while it + * is still recognisably turning and is gone by the time it is edge-on. + * @param {MotionComposition} composition The composition being built for this character. + */ + applyTo(composition) { + const turnedAway = this.turnedAway(); + const quarterTurn = Math.PI / 2; + const width = Math.cos(turnedAway * quarterTurn); + const opacity = 1 - turnedAway * turnedAway; + composition.contribute(this, MotionChannels.SCALE_X, width); + composition.contribute(this, MotionChannels.OPACITY, opacity); + } +}; + //#endregion //#region src/plugins/motion/ext/abs/core/registerCollapseMotionType.js /** @@ -534,6 +706,28 @@ MotionTypeRegistry.register("collapse", { phaseSpan: () => 0 }); +//#endregion +//#region src/plugins/motion/ext/abs/core/registerFoldMotionTypes.js +/** +* Teaches J-Motion how a battler arrives and leaves. +* +* Two types sharing one implementation, the same way J-Motion core's transitions share one: the +* effect reads which of the two it was declared as. Like the collapse, anything that can declare a +* motion can declare these, even though the only thing that routinely does is a battler's page +* bringing it onto the map or taking it off again. +* +* There is no phase offset: an entrance or an exit happens when it happens, and starting one halfway +* through would be nonsense. +*/ +[FoldMotionEffect.FOLD, FoldMotionEffect.UNFOLD].forEach((motionType) => { + MotionTypeRegistry.register(motionType, { + implementation: FoldMotionEffect, + parameterNames: ["duration"], + defaults: { duration: 30 }, + phaseSpan: () => 0 + }); +}); + //#endregion //#region src/plugins/motion/ext/abs/core/DeathMotionResolver.js /** @@ -856,6 +1050,254 @@ var LootMotionCoordinator = class LootMotionCoordinator { } }; +//#endregion +//#region src/plugins/motion/ext/abs/managers/PresenceMotionCoordinator.js +/** +* Gives a battler an entrance and an exit when its event's page brings it onto the map or takes it +* off again, rather than letting it blink into or out of existence. +* +* Arriving is the easy half. By the time anybody hears about a page change it has already happened, +* and the battler the new page brought simply unfolds into view. Leaving is the hard half, because +* the page change is itself what blanks the graphic: by the time a departure could be announced +* there is nothing left on screen to animate. So a departure holds the page change back instead. +* The battler keeps its page, folds away, and only then is the change let through. That hold is the +* only state this class keeps. +* +* Like {@link BattlerMotionCoordinator}, this translates what is happening to a battler into motion +* declarations, plus the battler's own respawn animation as the one flourish every coming and going +* shares, and draws nothing itself. How a fold looks is {@link FoldMotionEffect}'s business. +*/ +var PresenceMotionCoordinator = class PresenceMotionCoordinator { + /** + * The source key arrivals and departures are both declared under. + * + * One key for both, because they are the two ends of one thing. An arrival declared over a + * departure that is still folding replaces the fold outright rather than composing with it. + * @type {string} + */ + static PRESENCE_SOURCE_KEY = "combat:presence"; + /** + * The page index vanilla gives an event that has never been set up. + * + * An event only ever leaves this value while it is being built, which happens for every event on + * a map at once as the map loads. + * @type {number} + */ + static UNBUILT_PAGE_INDEX = -2; + /** + * Every event currently folding out of view, and what seeing its departure through will need. + * + * Kept here rather than on the event for the same reason J-Motion keeps motion off characters: a + * departure is half a second of presentation, and a `WeakMap` gives it no field for a savefile to + * find. Saving mid-fold simply loses the rest of the fold. The page change is still pending when + * the save loads, so the next refresh starts a fresh one. + * @type {WeakMap} + */ + static #departures = new WeakMap(); + /** + * Determines whether an event is partway through folding out of view. + * @param {Game_Event} event The event to check. + * @returns {boolean} + */ + static isDeparting(event) { + return PresenceMotionCoordinator.#departures.has(event); + } + /** + * Holds back a page change that would take a live battler off the map, and starts it folding away. + * + * Every page change on an event holding a battler comes through here, whether the new page is + * empty, a plain event, or another battler entirely. That last case matters. J-ABS rebuilds a + * battler from scratch whenever its page changes, so a creature swapping for the one on its next + * page is a new creature at full health, and it should look like one leaving and another arriving. + * @param {Game_Event} event The event about to change page. + * @returns {boolean} True when the change must wait for the fold to finish. + */ + static holdPageChange(event) { + if (PresenceMotionCoordinator.isDeparting(event) === true) { + return PresenceMotionCoordinator.#isReleasing(event) === false; + } + if (event.hasJabsBattler() === false) return false; + const jabsBattler = event.getJabsBattler(); + if (PresenceMotionCoordinator.canDepart(jabsBattler) === false) return false; + PresenceMotionCoordinator.beginDeparture(event, jabsBattler); + return true; + } + /** + * Determines whether a battler may fold out of view rather than vanish on the spot. + * @param {JABS_Battler} jabsBattler The battler whose page is about to change. + * @returns {boolean} + */ + static canDepart(jabsBattler) { + if (J.MOTION.EXT.ABS.Metadata.departureDuration <= 0) return false; + if (jabsBattler.isDying() === true) return false; + if (jabsBattler.isDead() === true) return false; + return true; + } + /** + * Starts a battler folding out of view, and holds its page until it has finished. + * @param {Game_Event} event The event whose page is being held. + * @param {JABS_Battler} jabsBattler The battler that is leaving. + */ + static beginDeparture(event, jabsBattler) { + const duration = J.MOTION.EXT.ABS.Metadata.departureDuration; + const sourceKey = PresenceMotionCoordinator.PRESENCE_SOURCE_KEY; + PresenceMotionCoordinator.#departures.set(event, { + framesRemaining: duration, + departingUuid: event.getJabsBattlerUuid(), + wasInvincible: jabsBattler.isInvincible(), + isReleasing: false + }); + jabsBattler.setInvincible(true); + jabsBattler.setWaitCountdown(duration); + const declaration = new MotionDeclaration(FoldMotionEffect.FOLD, [duration], sourceKey); + CharacterMotionComposer.declare(event, sourceKey, [declaration]); + PresenceMotionCoordinator.#playPresenceAnimation(event); + } + /** + * Counts a departure down by one frame, and lets its page change through once the fold is done. + * + * Reached from every event's update, the one per-frame heartbeat an event is guaranteed to have + * while it is on the map. Nothing else would ever finish a departure: the refresh that started it + * does not come round again on its own. + * @param {Game_Event} event The event being updated. + */ + static updateDeparture(event) { + if (PresenceMotionCoordinator.isDeparting(event) === false) return; + const departure = PresenceMotionCoordinator.#departures.get(event); + const framesRemaining = departure.framesRemaining - 1; + if (framesRemaining > 0) { + PresenceMotionCoordinator.#departures.set(event, { + ...departure, + framesRemaining + }); + return; + } + PresenceMotionCoordinator.completeDeparture(event, departure); + } + /** + * Lets a finished departure's page change through, and settles whatever that leaves behind. + * + * The fold is withdrawn before the page moves rather than after. All of this happens inside one + * update, before the sprite next draws, so nothing pops back into view in between. Whatever comes + * next then starts from a clean slate: an empty page shows nothing, and a battler arriving in its + * place begins its own unfold without a finished fold still claiming the sprite. + * @param {Game_Event} event The event that has finished folding. + * @param {Object} departure What was recorded when the departure began. + */ + static completeDeparture(event, departure) { + CharacterMotionComposer.removeDeclarations(event, PresenceMotionCoordinator.PRESENCE_SOURCE_KEY); + PresenceMotionCoordinator.#releasePage(event, departure); + if (event.getJabsBattlerUuid() === departure.departingUuid) { + PresenceMotionCoordinator.#returnFromDeparture(event, departure); + } + } + /** + * Lets the page change a departure was holding back go through. + * @param {Game_Event} event The event whose page was held. + * @param {Object} departure What was recorded when the departure began. + */ + static #releasePage(event, departure) { + PresenceMotionCoordinator.#departures.set(event, { + ...departure, + isReleasing: true + }); + event.refresh(); + PresenceMotionCoordinator.#departures.delete(event); + } + /** + * Determines whether a departure is in the middle of letting its own page change through. + * @param {Game_Event} event The departing event. + * @returns {boolean} + */ + static #isReleasing(event) { + const departure = PresenceMotionCoordinator.#departures.get(event); + return departure.isReleasing; + } + /** + * Puts back a battler whose page came back before it had finished leaving. + * @param {Game_Event} event The event that kept its page. + * @param {Object} departure What was recorded when the departure began. + */ + static #returnFromDeparture(event, departure) { + const jabsBattler = event.getJabsBattler(); + jabsBattler.setInvincible(departure.wasInvincible); + PresenceMotionCoordinator.beginArrival(event); + } + /** + * Unfolds a battler into view when a page change has just brought one onto the map. + * @param {Game_Event} event The event that changed page. + * @param {number} previousPageIndex The page it was on before the change. + */ + static welcomeArrival(event, previousPageIndex) { + if (previousPageIndex === PresenceMotionCoordinator.UNBUILT_PAGE_INDEX) return; + if (event.hasJabsBattler() === false) return; + PresenceMotionCoordinator.beginArrival(event); + } + /** + * Starts a battler unfolding into view with its respawn animation, as a page change brings it in. + * @param {Game_Event} event The event whose battler is arriving. + */ + static beginArrival(event) { + if (PresenceMotionCoordinator.#hasArrivals() === false) return; + PresenceMotionCoordinator.#unfoldIntoView(event); + PresenceMotionCoordinator.#playPresenceAnimation(event); + } + /** + * Unfolds a battler that has just been created on the map, rather than one a page change revealed. + * + * Two things create a battler outright: a respawn, which rebuilds a defeated battler's event from + * scratch, and the Spawn Enemy command, which clones one in. Both happen on a brand new event, whose + * first page is set up as it is built and so never counts as an arrival on its own. Both also play + * an animation of their own choosing already, which is why this adds only the unfold - a second + * flourish on top would play the same stars twice. + * + * The new event has no sprite yet, and needs none: the unfold is declared against the event, and + * simply starts on the first frame its sprite draws. + * @param {Game_Event} event The event that was just created. + */ + static welcomeNewBattler(event) { + if (PresenceMotionCoordinator.#hasArrivals() === false) return; + if (event.hasJabsBattler() === false) return; + PresenceMotionCoordinator.#unfoldIntoView(event); + } + /** + * Determines whether arrivals are configured to take any time at all. + * @returns {boolean} + */ + static #hasArrivals() { + return J.MOTION.EXT.ABS.Metadata.arrivalDuration > 0; + } + /** + * Turns a battler to face the player from edge-on, and keeps it from acting until it has. + * @param {Game_Event} event The event whose battler is arriving. + */ + static #unfoldIntoView(event) { + const duration = J.MOTION.EXT.ABS.Metadata.arrivalDuration; + const sourceKey = PresenceMotionCoordinator.PRESENCE_SOURCE_KEY; + const jabsBattler = event.getJabsBattler(); + jabsBattler.setWaitCountdown(duration); + const declaration = new MotionDeclaration(FoldMotionEffect.UNFOLD, [duration], sourceKey); + CharacterMotionComposer.declare(event, sourceKey, [declaration], duration); + } + /** + * Plays a battler's respawn animation on its event, as a fold into or out of existence begins. + * + * The very same animation a battler comes back from the dead with, resolved by J-ABS's own ladder, + * so a creature appearing at the start of its hours, leaving at the end of them, and respawning after + * a death all share one flourish. An event or enemy that asks for animation 0 gets none of it, here or + * on a respawn. + * + * Unlike a respawn this needs no delay before asking: a respawned event is built fresh and has no + * sprite until the next spriteset update, but an event changing page has had its sprite all along. + * @param {Game_Event} event The event whose battler is arriving or leaving. + */ + static #playPresenceAnimation(event) { + const animationId = event.respawnAnimationId(); + if (animationId === 0) return; + event.requestAnimation(animationId); + } +}; + //#endregion //#region src/plugins/motion/ext/abs/objects/Game_Battler.js /** @@ -877,6 +1319,41 @@ Game_Battler.prototype.removeState = function(stateId) { BattlerMotionCoordinator.removeStateMotions(this, stateId); }; +//#endregion +//#region src/plugins/motion/ext/abs/objects/Game_Event.js +/** +* Extends {@link #deferPageChange}.
+* Also holds a live battler's page back long enough for it to fold out of view. +* +* Without this a battler whose page stops applying - a time window closing, a switch turning off - +* vanishes on the frame the page changes, because that change is what blanks its graphic. Holding +* the change back is the only way to give it anything to animate on the way out. +*/ +J.MOTION.EXT.ABS.Aliased.Game_Event.set("deferPageChange", Game_Event.prototype.deferPageChange); +Game_Event.prototype.deferPageChange = function(newPageIndex) { + const deferred = J.MOTION.EXT.ABS.Aliased.Game_Event.get("deferPageChange").call(this, newPageIndex); + if (deferred === true) return true; + return PresenceMotionCoordinator.holdPageChange(this); +}; +/** +* Extends {@link #onPageChanged}.
+* Also unfolds whatever battler the new page brought onto the map. +*/ +J.MOTION.EXT.ABS.Aliased.Game_Event.set("onPageChanged", Game_Event.prototype.onPageChanged); +Game_Event.prototype.onPageChanged = function(previousPageIndex) { + J.MOTION.EXT.ABS.Aliased.Game_Event.get("onPageChanged").call(this, previousPageIndex); + PresenceMotionCoordinator.welcomeArrival(this, previousPageIndex); +}; +/** +* Extends {@link #update}.
+* Also counts down a departure, and lets its held page change through once the fold is done. +*/ +J.MOTION.EXT.ABS.Aliased.Game_Event.set("update", Game_Event.prototype.update); +Game_Event.prototype.update = function() { + J.MOTION.EXT.ABS.Aliased.Game_Event.get("update").call(this); + PresenceMotionCoordinator.updateDeparture(this); +}; + //#endregion //#region src/plugins/motion/ext/abs/managers/JABS_Engine.js /** @@ -919,6 +1396,33 @@ JABS_Engine.prototype.postPartyCycling = function() { J.MOTION.EXT.ABS.Aliased.JABS_Engine.get("postPartyCycling").call(this); BattlerMotionCoordinator.refreshLeaderStateMotions(); }; +/** +* Extends {@link #processRespawnAnimation}.
+* Also unfolds the returning battler into view, the same way a battler its page brings in does. +* +* J-ABS still plays the respawn animation itself, a beat later once the new sprite exists. This only +* adds the unfold beneath it, so a creature returning from the dead and one appearing at the start +* of its hours look like one thing. +*/ +J.MOTION.EXT.ABS.Aliased.JABS_Engine.set("processRespawnAnimation", JABS_Engine.prototype.processRespawnAnimation); +JABS_Engine.prototype.processRespawnAnimation = function(freshEvent) { + J.MOTION.EXT.ABS.Aliased.JABS_Engine.get("processRespawnAnimation").call(this, freshEvent); + PresenceMotionCoordinator.welcomeNewBattler(freshEvent); +}; +/** +* Extends {@link #addEnemyToMap}.
+* Also unfolds an enemy spawned onto the map into view. +* +* The Spawn Enemy command plays whatever animation it was given on its own, so like a respawn this +* only adds the unfold, and a spawned wave arrives the same way everything else does. +*/ +J.MOTION.EXT.ABS.Aliased.JABS_Engine.set("addEnemyToMap", JABS_Engine.prototype.addEnemyToMap); +JABS_Engine.prototype.addEnemyToMap = function(x, y, enemyCloneEventId) { + const addedEnemy = J.MOTION.EXT.ABS.Aliased.JABS_Engine.get("addEnemyToMap").call(this, x, y, enemyCloneEventId); + if (addedEnemy === undefined) return addedEnemy; + PresenceMotionCoordinator.welcomeNewBattler(addedEnemy); + return addedEnemy; +}; //#endregion //#region src/plugins/motion/ext/abs/sprites/Sprite_Character.js diff --git a/chef-adventure/js/plugins/j/passive/ext/J-Passive-Affix.js b/chef-adventure/js/plugins/j/passive/ext/J-Passive-Affix.js index 5433707e..b411b235 100644 --- a/chef-adventure/js/plugins/j/passive/ext/J-Passive-Affix.js +++ b/chef-adventure/js/plugins/j/passive/ext/J-Passive-Affix.js @@ -2,7 +2,7 @@ /*: * @target MZ * @plugindesc - * [v1.2.1 PASSIVE-AFFIX] Random passive affixes + tier presentation for JABS enemies. + * [v1.2.2 PASSIVE-AFFIX] Random passive affixes + tier presentation for JABS enemies. * @author JE * @url https://github.com/je-can-code/rmmz-plugins * @base J-Base @@ -267,6 +267,9 @@ * * ============================================================================ * CHANGELOG: + * - 1.2.2 + * Affix tier icons now reach the target frame as icons, so they lead the enemy's + * name on the rebuilt frame from J-HUD-TargetFrame 2.0.0. * - 1.2.1 * Renamed the declared dependency on J-MessageTextCodes to J-Message, which * is what that plugin's file is called now. @@ -456,7 +459,7 @@ J.PASSIVE.EXT.AFFIX = {}; /** * The metadata associated with this plugin. */ -J.PASSIVE.EXT.AFFIX.Metadata = new JPassiveAffix_PluginMetadata("J-Passive-Affix", "1.2.1"); +J.PASSIVE.EXT.AFFIX.Metadata = new JPassiveAffix_PluginMetadata("J-Passive-Affix", "1.2.2"); /** * A collection of all aliased methods for this plugin. */ @@ -732,27 +735,30 @@ JABS_AiManager.postConvertMutate = function(battler, jabsBattler) { //#endregion //#region src/plugins/passive/ext/affix/managers/JABS_Battler.js /** -* With {@link J.HUD.EXT.TARGET}, wraps {@link JABS_Battler#buildFramedTarget}: tier prefix/suffix text, icons, -* optional {@link Window_Base#colorizeText} (same passive id bands as the map stripe). +* With {@link J.HUD.EXT.TARGET}, extends {@link JABS_Battler#decorateFramedTarget}: tier prefix/suffix text, the +* tier icons that lead the name, and the tier color (same passive id bands as the map stripe). The target frame +* and the boss frame both decorate through that hook, so a tiered enemy reads the same in either. */ if (J.HUD && J.HUD.EXT.TARGET) { /** - * Builds {@link FramedTarget} for the HUD, then applies tier label text, icons, and optional color. - * @param {JABS_Battler} battlerLastHit Last-hit target for this frame. - * @returns {FramedTarget} + * Extends {@link #decorateFramedTarget}.
+ * Applies tier label text, icons, and color to a framed target. + * @param {FramedTarget} framedTarget The framed target to decorate in place. + * @param {JABS_Battler} framedBattler The battler the framed target shows. */ - J.PASSIVE.EXT.AFFIX.Aliased.JABS_Battler.set("buildFramedTarget", JABS_Battler.prototype.buildFramedTarget); - JABS_Battler.prototype.buildFramedTarget = function(battlerLastHit) { - const framedTarget = J.PASSIVE.EXT.AFFIX.Aliased.JABS_Battler.get("buildFramedTarget").call(this, battlerLastHit); - this.applyPassiveTierTargetFrameDecoration(framedTarget, battlerLastHit); - const tierStripeHex = J.PASSIVE.EXT.AFFIX.Helpers.resolvePassiveTierStripeColorHex(battlerLastHit.getBattler()); + J.PASSIVE.EXT.AFFIX.Aliased.JABS_Battler.set("decorateFramedTarget", JABS_Battler.prototype.decorateFramedTarget); + JABS_Battler.prototype.decorateFramedTarget = function(framedTarget, framedBattler) { + J.PASSIVE.EXT.AFFIX.Aliased.JABS_Battler.get("decorateFramedTarget").call(this, framedTarget, framedBattler); + this.applyPassiveTierTargetFrameDecoration(framedTarget, framedBattler); + const tierStripeHex = J.PASSIVE.EXT.AFFIX.Helpers.resolvePassiveTierStripeColorHex(framedBattler.getBattler()); if (ColorManager.isValidHexColor(tierStripeHex)) { framedTarget.nameColorHex = tierStripeHex; } - return framedTarget; }; /** - * Mutates {@link FramedTarget#name}: tier words, up to two `\\I` escapes, optional {@link Window_Base#colorizeText}. + * Mutates {@link FramedTarget#name} and {@link FramedTarget#nameIconIndices}: tier words on the name, and up + * to two tier icons ahead of it. The tier's color is not applied here- it rides on + * {@link FramedTarget#nameColorHex}, set by {@link #decorateFramedTarget}. * @param {FramedTarget} framedTarget HUD row to update in place. * @param {JABS_Battler} battlerLastHit Source for passive state ids. */ @@ -771,7 +777,6 @@ if (J.HUD && J.HUD.EXT.TARGET) { let foundSuffix = false; let prefixIconIndex = null; let suffixIconIndex = null; - let prefixTierHudMessageColorIndex = null; let displayName = framedTarget.name; for (const passiveStateId of passiveStatesIds) { const state = battler.state(passiveStateId); @@ -779,9 +784,6 @@ if (J.HUD && J.HUD.EXT.TARGET) { if (state.isEnemyPrefix === true && foundPrefix === false) { displayName = `${state.name} ${displayName}`; prefixIconIndex = state.iconIndex; - if (state.tierColorHex) { - prefixTierHudMessageColorIndex = ColorManager.colorIndexFromHex(state.tierColorHex); - } foundPrefix = true; } if (state.isEnemySuffix === true && foundSuffix === false) { @@ -791,18 +793,15 @@ if (J.HUD && J.HUD.EXT.TARGET) { } if (foundPrefix === true && foundSuffix === true) break; } - let iconEscapes = String.empty; + const nameIconIndices = []; if (prefixIconIndex !== null) { - iconEscapes += `\\I[${prefixIconIndex}]`; + nameIconIndices.push(prefixIconIndex); } if (suffixIconIndex !== null) { - iconEscapes += `\\I[${suffixIconIndex}]`; + nameIconIndices.push(suffixIconIndex); } - let labeledBody = displayName; - if (J.MESSAGE && prefixTierHudMessageColorIndex !== null) { - labeledBody = Window_Base.prototype.colorizeText(prefixTierHudMessageColorIndex, displayName); - } - framedTarget.name = `${iconEscapes}${labeledBody}`; + framedTarget.name = displayName; + framedTarget.nameIconIndices = nameIconIndices; }; } diff --git a/chef-adventure/save/config.json b/chef-adventure/save/config.json index 81ded2a6..978e80dd 100644 --- a/chef-adventure/save/config.json +++ b/chef-adventure/save/config.json @@ -2,10 +2,10 @@ "alwaysDash": false, "commandRemember": false, "touchUI": true, - "bgmVolume": 0, - "bgsVolume": 0, - "meVolume": 0, - "seVolume": 0, + "bgmVolume": 100, + "bgsVolume": 100, + "meVolume": 100, + "seVolume": 100, "jabsInputMappings": { "player1": { "Menu": [