update dice demo following changes in `unique`
[scilab.git] / scilab / modules / gui / demos / uicontrol_dice_game.dem.sce
1 function idle_gui()
2     global idle;
3     f = fullfile(SCIHOME, "idle.sod")
4     if isfile(f) then
5         load(f);
6         e = getdate("s");
7         elaps = etime(getdate(e), getdate(idle.time));
8         rolls = floor(elaps / 5);
9
10         if rolls > 0 then
11             dice = 0;
12             for i = 1:idle.dice
13                 if idle.dices(i).enable
14                     dice = dice + 1;
15                 end
16             end
17
18             r = int(rand(rolls, dice) * 6) + 1;
19
20             gain = 0;
21             for j = 1:rolls
22                 [g, msg] = idle_roll_gain(r(j, :))
23                 s = 0;
24                 for i = 1:idle.dice
25                     if idle.dices(i).enable then
26                         s1 = idle.dices(i).mult * r(j, i);
27                         s = s + s1;
28                     end
29                 end
30
31                 gain = gain + g * s;
32             end
33
34
35             msg = sprintf("During your absence you earned %s", formatEng(gain));
36             messagebox(msg, "Game of Dice", "info", "modal");
37
38             idle.gain = idle.gain + gain;
39         end
40     else
41         //init rand
42         rand("seed", getdate("s"))
43         idle.first_run = %t;
44         idle.path = get_absolute_file_path("uicontrol_dice_game.dem.sce");
45         idle.cumul_gain = 0;
46         idle.gain = 0;
47         idle.autoroll = %f;
48         idle.quit = %f;
49         idle.reset = %f;
50         idle.action.type = [];
51         idle.history = [];
52
53         idle.colors = [0.8666667   0.4666667   0.4313725
54                        0.8784314   0.5058824   0.427451
55                        0.8862745   0.5333333   0.4235294
56                        0.8980392   0.572549    0.4196078
57                        0.9058824   0.6039216   0.4117647
58                        0.9137255   0.6352941   0.4078431
59                        0.9254902   0.6745098   0.4039216
60                        0.9019608   0.6784314   0.3803922
61                        0.9137255   0.7215686   0.3803922
62                        0.9529412   0.772549    0.3882353
63                        0.9607843   0.8078431   0.3843137
64                        0.8862745   0.7882353   0.3960784
65                        0.8313725   0.7843137   0.4156863
66                        0.7686275   0.772549    0.427451
67                        0.6901961   0.745098    0.4313725
68                        0.6431373   0.7529412   0.4509804
69                        0.5803922   0.7411765   0.4666667
70                        0.5176471   0.7333333   0.4823529
71                        0.4509804   0.7215686   0.4941176
72                        0.3882353   0.7137255   0.5098039
73                        0.3411765   0.7333333   0.5411765]
74
75         idle.dice = 1;
76         idle.dices = [];
77         idle.dices($ + 1) = struct(...
78             "base", 10 / 1.08, ...
79             "cost", 1.08, ...
80             "mult", 1, ...
81             "multCoef", 1, ...
82             "enable", %t, ...
83             "level", 1);
84
85         idle.dices($ + 1) = struct(...
86             "base", 100, ...
87             "cost", 1.08, ...
88             "mult", 2, ...
89             "multCoef", 2, ...
90             "enable", %f, ...
91             "level", 0);
92
93         idle.dices($ + 1) = struct(...
94             "base", 1000 * 1.08, ...
95             "cost", 1.08, ...
96             "mult", 4, ...
97             "multCoef", 4, ...
98             "enable", %f, ...
99             "level", 0);
100
101         idle.dices($ + 1) = struct(...
102             "base", 10000 * 1.08, ...
103             "cost", 1.08, ...
104             "mult", 8, ...
105             "multCoef", 8, ...
106             "enable", %f, ...
107             "level", 0);
108
109         idle.dices($ + 1) = struct(...
110             "base", 100000 * 1.08, ...
111             "cost", 1.08, ...
112             "mult", 16, ...
113             "multCoef", 16, ...
114             "enable", %f, ...
115             "level", 0);
116     end
117
118     //always at startup
119     idle.multiplier = 1;
120
121     f = figure(...
122         "dockable", "off", ...
123         "position", [10 250 800 600], ...
124         "infobar_visible", "off", ...
125         "toolbar", "none", ...
126         "menubar_visible", "on", ...
127         "menubar", "none", ...
128         "default_axes", "off", ...
129         "resize", "off", ...
130         "layout", "border", ...
131         "figure_name", "Game of Dice", ...
132         "background", -2, ...
133         "visible", "off", ...
134         "closerequestfcn", "global idle;idle.quit = %t;", ...
135         "tag", "idle_fig");
136
137     fr = uicontrol(f, ...
138         "style", "frame", ...
139         "backgroundcolor", [1 1 1], ...
140         "tag", "idle_top", ...
141         "constraints", createConstraints("border", "top", [0 50]));
142
143     uicontrol(fr, ...
144         "style", "text", ...
145         "fontsize", 40, ...
146         "fontweight", "bold", ...
147         "string", formatEng(idle.gain), ...
148         "horizontalalignment", "center", ...
149         "backgroundcolor", [1 1 1], ...
150         "tag", "idle_total", ...
151         "position", [100 5 600 40])
152
153     u = idle_create_button(fr, "idle_help", [10 10 30 30]);
154     set(u, "icon", "help-browser");
155     set(u, "fontsize", 16);
156     set(u, "fontweight", "bold");
157     set(u, "callback", "global idle;idle.action.type = ""help"";");
158     set(u, "callback_type", 10);
159
160     fr = uicontrol(f, ...
161         "style", "frame", ...
162         "backgroundcolor", [1 1 1], ...
163         "tag", "idle_bottom", ...
164         "constraints", createConstraints("border", "bottom", [0 50]));
165
166     u = idle_create_button(fr, "idle_roll", [350 10 100 30]);
167     set(u, "string", "Roll !");
168     set(u, "fontsize", 16);
169     set(u, "fontweight", "bold");
170     set(u, "callback", "global idle;idle.action.type = ""roll"";");
171     set(u, "callback_type", 10);
172
173     u = idle_create_button(fr, "idle_btn_history", [690 10 100 30]);
174     set(u, "string", "History");
175     set(u, "fontsize", 16);
176     set(u, "callback", "global idle;idle.action.type = ""history"";");
177     set(u, "callback_type", 10);
178
179     u = idle_create_button(fr, "idle_btn_multi", [150 10 100 30]);
180     set(u, "string", sprintf("x %d", idle.multiplier));
181     set(u, "fontsize", 16);
182     set(u, "callback", "global idle;idle.action.type = ""multiplier"";");
183     set(u, "callback_type", 10);
184
185     uicontrol(fr, ...
186             "style", "text", ...
187             "horizontalalignment", "center", ...
188             "fontweight", "bold", ...
189             "string", "Inspired by", ...
190             "backgroundcolor", [1 1 1], ...
191             "position", [10 20 80 20]);
192
193     uicontrol(fr, ...
194         "style", "text", ...
195         "horizontalalignment", "center", ...
196         "string", "<html><a href=""https://luts91.github.io/idle-dices"">Idle Dice</a></html>", ...
197         "backgroundcolor", [1 1 1], ...
198         "position", [10 0 80 20]);
199
200     v = "off";
201     if  idle.autoroll then
202         v = "on";
203     end
204
205     fr1 = uicontrol(fr, ...
206         "style", "frame", ...
207         "visible", v, ...
208         "border", createBorder("line", "#000000", 1), ...
209         "backgroundcolor", [1 1 1], ...
210         "tag", "idle_autoroll", ...
211         "position", [350 13 104 24]);
212
213     uicontrol(fr1, ...
214         "style", "frame", ...
215         "tag", "idle_progress", ...
216         "position", [2 2 0 20]);
217
218     fr = uicontrol(f, ...
219         "style", "frame", ...
220         "backgroundcolor", [1 1 1], ...
221         "tag", "idle_center");
222
223     uicontrol(fr, ...
224         "style", "text", ...
225         "string", "", ...
226         "relief", "default", ...
227         "horizontalalignment", "center", ...
228         "fontsize", 32, ...
229         "backgroundcolor", [1 1 1], ...
230         "fontweight", "bold", ...
231         "tag", "roll_msg", ...
232         "position", [200 400 400 75]);
233
234     uicontrol(fr, ...
235         "style", "text", ...
236         "string", "", ...
237         "horizontalalignment", "center", ...
238         "fontsize", 32, ...
239         "backgroundcolor", [1 1 1], ...
240         "fontweight", "bold", ...
241         "tag", "roll_gain", ...
242         "position", [200 350 400 50]);
243
244     for i = 1:idle.dice
245         idle_dice_gui(i);
246     end
247
248     if idle.dices(1).level > 1 then
249         idle_show_autoroll();
250     end
251
252     set("idle_fig", "visible", "on");
253 endfunction
254
255 function u = idle_create_button(parent, tag, pos)
256
257     fr = uicontrol(parent, ...
258         "style", "frame", ...
259         "position", pos, ...
260         "border", createBorder("etched", "raised", "#d0d0d0", "#202020"), ...
261         "backgroundcolor", [1 1 1], ...
262         "tag", sprintf("%s_frame", tag));
263
264     u = uicontrol(fr, ...
265         "style", "pushbutton", ...
266         "tag", tag, ...
267         "backgroundcolor", [1 1 1], ...
268         "position", [1 1 pos(3:4) - 2]);
269 endfunction
270
271 function idle_show_history()
272
273     if get("idle_history") == [] then
274         f = get("idle_fig");
275
276         fr = uicontrol(f, ...
277             "style", "frame", ...
278             "backgroundcolor", [1 1 1], ...
279             "constraints", createConstraints("border", "right", [200 0]), ...
280             "tag", "idle_history");
281
282         uicontrol(fr, ...
283             "style", "listbox", ...
284             "position", [0 0 200 500], ...
285             "fontname", "consolas", ...
286             "string", string((1:100)'), ...
287             "visible", "off", ...
288             "tag", "idle_history_list");
289
290             pos = get("idle_fig", "position");
291             pos(3) = 1000;
292             set("idle_fig", "position", pos);
293     else
294         delete(get("idle_history"));
295         pos = get("idle_fig", "position");
296         pos(3) = 800;
297         set("idle_fig", "position", pos);
298         return;
299     end
300 endfunction
301
302 function idle_refresh_history()
303     global idle;
304
305     if get("idle_history_list") == [] then
306         return;
307     end
308
309     set("idle_history_list", "visible", "off");
310     history_str = [];
311     history = idle.history;
312     h = history(:, 1:5);
313
314     for i = 1:size(h, "r")
315         hi = h(i, :);
316         hi = hi(hi <> 0);
317         s = strcat(string(hi), " - ");
318         s = s + " => " + string(history(i, 6));
319         history_str($ + 1) = s;
320     end
321
322     set("idle_history_list", "string", history_str);
323     set("idle_history_list", "listboxtop", size(history_str, "r"));
324     set("idle_history_list", "visible", "on");
325 endfunction
326
327 function idle_show_autoroll()
328     global idle;
329     idle.autoroll = %t;
330
331     set("idle_roll_frame", "position", [460 10 100 30]);
332     set("idle_autoroll", "visible", "on");
333     tic(); //start timer
334 endfunction
335
336 function idle_dice_gui(i)
337     global idle;
338     x = idle.dice
339     st = idle.dices(i);
340
341     offset = (800 - (x * 110))/ 2;
342     f = get("idle_center");
343
344     if get(sprintf("dice_%d", i)) <> [] then
345         delete(get(sprintf("dice_%d", i)));
346     end
347
348     //frame
349     fr = uicontrol(f, ...
350         "style", "frame", ...
351         "relief", "default", ...
352         "tag", sprintf("dice_%d", i), ...
353         "backgroundcolor", [1 1 1], ...
354         "position", [offset + ((i - 1)*110), 150 110 200]);
355
356     u = idle_create_button(fr, sprintf("btn_%d", i), [0 10 100 30]);
357     set(u, "enable", "off");
358     set(u, "string", formatEng(st.base * st.cost ^ (st.level)));
359     set(u, "foregroundcolor", [0.75 0 0]);
360     set(u, "callback", sprintf("global idle;idle.action.type = ""upgrade"";idle.action.dice = %d", i));
361     set(u, "callback_type", 10);
362
363     //text 1
364     uicontrol(fr, ...
365         "style", "text", ...
366         "horizontalalignment", "center", ...
367         "backgroundcolor", [1 1 1], ...
368         "tag", sprintf("label_1_%d", i), ...
369         "position", [10 40 80 15]);
370
371     //text 2
372     uicontrol(fr, ...
373         "style", "text", ...
374         "horizontalalignment", "center", ...
375         "backgroundcolor", [1 1 1], ...
376         "tag", sprintf("label_2_%d", i), ...
377         "position", [5 55 90 15]);
378
379     //visible only if enable
380     v = "off";
381     if st.enable then
382         v = "on";
383     end
384
385     //image
386     uicontrol(fr, ...
387         "style", "image", ...
388         "string", fullfile(idle.path, "images", "dice-1.png"), ...
389         "position", [10 80 80 80], ...
390         "backgroundcolor", [1 1 1], ...
391         "tag", sprintf("image_%d", i), ...
392         "horizontalalignment", "center", ...
393         "visible", v, ...
394         "verticalalignment", "middle");
395
396     //text 3
397     uicontrol(fr, ...
398         "style", "text", ...
399         "string", "0", ...
400         "horizontalalignment", "center", ...
401         "backgroundcolor", [1 1 1], ...
402         "tag", sprintf("label_3_%d", i), ...
403         "fontsize", 16, ...
404         "visible", v, ...
405         "position", [10 170 80 20]);
406
407     idle_update_dice(i);
408 endfunction
409
410 function idle_move_dice()
411     global idle;
412     dice = idle.dice;
413
414     oldOff = (800 - (dice * 110)) / 2;
415     newOff = (800 - ((dice + 1) * 110)) / 2;
416
417     posX = [];
418     for i = 1:dice
419         posX($ + 1, 1)  = get(sprintf("dice_%i", i), "position")(1);
420         posX($    , 2)  = newOff + ((i - 1) * 110);
421     end
422
423     offsets = linspace(posX(:, 1), posX(:, 2), 10);
424
425     for off = 1:size(offsets, "c")
426         for i = 1:dice
427             d = sprintf("dice_%i", i);
428             pos = get(d, "position");
429             pos(1) = offsets(i, off);
430             set(d, "position", pos);
431         end
432
433         sleep(100);
434     end
435
436 endfunction
437
438 function idle_buy(x)
439     global idle;
440
441     //reduce money
442     cost = idle_dice_upgrade_cost(x);
443     if cost > idle.gain then
444         return;
445     end
446     idle.gain = idle.gain - cost;
447     set("idle_total", "string", formatEng(idle.gain));
448
449     //upgrade dice
450     idle.dices(x).level = min(idle.dices(x).level + idle.multiplier, 100);
451     idle.dices(x).mult = idle.dices(x).level * idle.dices(x).multCoef;
452
453     //enable autoroll after 1st upgrade of 1st dice
454     if idle.autoroll == %f && x == 1 && idle.dices(x).level > 1 then
455         idle_show_autoroll();
456     end
457
458     idle_update_dice(x);
459
460     if x < 5 && x == idle.dice && idle.dices(x + 1).enable == %f && idle.dices(x).level >= 10 then
461         idle_move_dice();
462         idle.dice = idle.dice + 1;
463         idle_dice_gui(x + 1);
464     end
465
466     victory = and(list2vec(idle.dices.level) == 100);
467     if victory then
468         msg = ["Victory !";
469                "";
470                "Do you want to reset progression?"];
471         answer = messagebox(msg, "Game of Dice", "question", ["Yes", "No"], "modal");
472         if answer == 1 then
473             idle.reset = %t;
474             idle.quit = %t;
475         end
476     end
477 endfunction
478
479 function c = idle_dice_upgrade_cost(x)
480     global idle;
481
482     m = idle.multiplier;
483     d = idle.dices(x);
484
485     //propagation of the round error is voluntary
486     c = sum(round(d.base * d.cost ** (d.level : min(d.level + m-1, 100))));
487 endfunction
488
489 function idle_update_dice(x)
490     global idle;
491
492     if idle.dices(x).enable == %f && idle.dices(x).level > 0 then
493         idle.dices(x).enable = %t;
494         //show image and 3rd label
495         set(sprintf("image_%d", x), "visible", "on");
496         set(sprintf("label_3_%d", x), "visible", "on");
497     end
498
499     idle_update_dices_price();
500
501     set(sprintf("label_1_%d", x), "string", sprintf("Level: %d", idle.dices(x).level));
502     set(sprintf("label_2_%d", x), "string", sprintf("Mult: %d", idle.dices(x).mult));
503
504     idle_check_dice_price();
505 endfunction
506
507 function idle_update_dices_price()
508     global idle;
509
510     set("idle_btn_multi", "string", sprintf("x %d", idle.multiplier));
511
512     for i = 1:idle.dice
513         st = idle.dices(i);
514         tag = sprintf("btn_%d", i);
515         if get(tag) <> [] then
516             if st.level >= 100 then
517                 set(sprintf("btn_%d", i), "string", "MAX");
518             else
519                 //update price to new level
520                 price = idle_dice_upgrade_cost(i);
521                 set(sprintf("btn_%d", i), "string", formatEng(price));
522             end
523         end
524     end
525 endfunction
526
527 function str = formatEng(x)
528     if x == 0 then
529         str = "0";
530         return;
531     end
532
533     e = 6 * floor(log10(x) / 6);
534     if e then
535         y = x / (10 ^ e);
536         str = sprintf("%.3fe%d", y, e)
537     else
538         str = sprintf("%0.f", x);
539     end
540 endfunction
541
542 function [g, msg] = idle_roll_gain(r)
543     g = 1;
544     rsort = gsort(r, "c", "i");
545     [a, b, ?, c] = unique(rsort);
546     c = gsort(c);
547     s = length(rsort);
548
549     if s >= 5 && c(1) == 5 then
550         g = 500;
551         msg = "FIVE !"
552     elseif s >= 4 && c(1) == 4 then
553         g = 100;
554         msg = "Four"
555     elseif s == 5 && c(1) == 3 && c(2) == 2 then
556         g = 50;
557         msg = "Fullhouse"
558     elseif s == 5 && (and(rsort == 1:5) || and(rsort == 2:6)) then
559         g = 40;
560         msg = "Straight"
561     elseif s >= 3 && c(1) == 3 then
562         g = 20;
563         msg = "Three"
564     elseif s >= 4 && c(1) == 2 && c(2) == 2 then
565         g = 10;
566         msg = "Two pair"
567     elseif s >= 2 && c(1) == 2 then
568         g = 5;
569         msg = "One pair"
570     else
571         g = 1;
572         msg = ""
573     end
574
575     msg = sprintf("%s x%d", msg, g);
576 endfunction
577
578 function idle_check_dice_price()
579     global idle;
580     for i = 1:idle.dice
581         tag = sprintf("btn_%d", i);
582         if get(tag) == [] then
583             return;
584         end
585         if idle.dices(i).level >= 100 then
586             set(tag, "foregroundcolor", [0 0.5 0]);
587             set(tag, "backgroundcolor", [0.95 0.95 0.95]);
588                 set(tag, "fontweight", "bold");
589             set(tag, "enable", "off");
590         else
591             if idle.gain >= idle_dice_upgrade_cost(i) then
592                 set(tag, "foregroundcolor", [0 0.5 0]);
593                 set(tag, "backgroundcolor", [1 1 1]);
594                 set(tag, "fontweight", "bold");
595                 set(tag, "enable", "on");
596             else
597                 set(tag, "foregroundcolor", [0.75 0 0]);
598                 set(tag, "backgroundcolor", [0.95 0.95 0.95]);
599                 set(tag, "fontweight", "normal");
600                 set(tag, "enable", "off");
601             end
602         end
603     end
604 endfunction
605
606 function idle_roll()
607     global idle;
608
609     set("idle_roll", "enable", "off");
610     set("roll_msg", "string", "");
611     set("roll_gain", "string", "");
612
613     dice = 0;
614     for i = 1:idle.dice
615         if idle.dices(i).enable
616             set(sprintf("label_3_%d", i), "string", "");
617             dice = dice + 1;
618         end
619     end
620
621     global idle;
622     roll_image = 6;
623     r = int(rand(roll_image, dice) * 6) + 1;
624
625     for i = 1:roll_image
626         for j = 1:idle.dice
627             if idle.dices(j).enable then
628                 set(sprintf("image_%d", j), "string", fullfile(idle.path, "images", sprintf("dice-%d.png", r(i, j))));
629             end
630         end
631
632         sleep(50);
633     end
634
635     //keep only last roll
636     r = r($, :);
637     [gain, msg] = idle_roll_gain(r);
638     set("roll_msg", "string", msg);
639
640     s = 0;
641     for i = 1:idle.dice
642         if idle.dices(i).enable then
643             s1 = idle.dices(i).mult * r(i);
644             set(sprintf("label_3_%d", i), "string", formatEng(s1));
645             s = s + s1;
646         end
647     end
648
649     total = s * gain;
650     msg_gain = sprintf("%s x %d = %s", formatEng(s), gain, formatEng(total));
651     set("roll_gain", "string", msg_gain);
652     set("idle_roll", "enable", "on");
653
654     idle.gain = idle.gain + total;
655     idle.cumul_gain = idle.cumul_gain + total;
656
657     idle_add_history(r, total);
658     set("idle_total", "string", formatEng(idle.gain));
659
660     idle_check_dice_price();
661 endfunction
662
663 function idle_add_history(h, val)
664     global idle;
665
666     if length(h) < 5 then
667         h(5) = 0;
668     end
669
670     h($+1) = val;
671
672     idle.history($ + 1, :) = h;
673     //keep the 100 last entries
674     idle.history(1:$-100, :) = [];
675 endfunction
676
677 function idle_show_help()
678     msg = ["Welcome in ""Game of Dice""";
679            ""
680            "This demo is used to show the capabilities of";
681            "`uicontrols` and their callbacks";
682            ""
683            "Goal: ";
684            "-  Reach level 100 for each of the 5 dices";
685            ""
686            "Info: ";
687            "After the first purchase, the game can roll alone.";
688            "but you can anticipate the draw by clicking on ""Roll !""";
689            ];
690
691     messagebox(msg, "Game of Dice", "info", "modal");
692 endfunction
693
694 //almost like a game event loop
695 //manage events from callback or timer
696 function idle_event_loop()
697     global idle;
698
699     printf("\nThe Scilab console cannot be used during the game.\n");
700
701     while idle.quit == %f
702         action = idle.action;
703         idle.action = struct("type", []);
704
705         select(action.type)
706         case "roll"
707             set("idle_progress", "position", [2 2 0 20]);
708             idle_roll();
709
710             idle_refresh_history();
711             tic();
712         case "upgrade"
713             dice = action.dice;
714             idle_buy(dice);
715         case "history"
716             idle_show_history();
717             idle_refresh_history();
718         case "multiplier"
719             select(idle.multiplier)
720             case 1
721                 idle.multiplier = 10;
722             case 10
723                 idle.multiplier = 100;
724             case 100
725                 idle.multiplier = 1;
726             end
727
728             idle_update_dices_price();
729             idle_check_dice_price();
730         case "help"
731             idle_show_help();
732         end
733
734         if idle.autoroll then
735             t = toc();
736             p = round((t / 5) * 100);
737             if p >= 100 then
738                 idle.action.type = "roll";
739                 set("idle_progress", "position", [2 2 0 20]);
740                 set("idle_progress", "backgroundcolor", idle.colors(1, :));
741                 tic();
742             else
743                 set("idle_progress", "position", [2 2 p 20]);
744                 set("idle_progress", "backgroundcolor", idle.colors(round(p / 5)+1, :));
745             end
746         end
747
748         //relax CPU
749         sleep(10);
750     end
751
752     idle.time = getdate("s");
753     //to allow restart
754     idle.quit = %f;
755     //close window
756     close(get("idle_fig"));
757 endfunction
758
759 function idle_save()
760     global idle;
761     save(fullfile(SCIHOME, "idle.sod"), "idle");
762 endfunction
763
764 function idle_hardreset()
765     deletefile(fullfile(SCIHOME, "idle.sod"));
766 endfunction
767
768 clc;
769 global idle;
770 idle_gui();
771 if idle.first_run then
772     idle_show_help();
773     idle.first_run = %f;
774 end
775
776 idle_event_loop();
777
778 global idle;
779 if idle.reset == %t then
780     idle_hardreset();
781 else
782     idle_save();
783 end
784
785 clearglobal idle;
786 clear idle;
787 clear idle_create_button;
788 clear idle_show_history;
789 clear idle_refresh_history;
790 clear idle_show_autoroll;
791 clear idle_dice_gui;
792 clear idle_move_dice;
793 clear idle_buy;
794 clear idle_update_dice;
795 clear idle_dice_upgrade_cost;
796 clear idle_update_dices_price;
797 clear formatEng;
798 clear idle_roll_gain;
799 clear idle_check_dice_price;
800 clear idle_roll;
801 clear idle_add_history;
802 clear idle_event_loop;
803 clear idle_save;
804 clear idle_gui;
805 clear idle_show_help;
806 clear idle_hardreset;