1
2 /**
3 IMPORTANT !!!
4
5 DO NOT EDIT THIS FILE. IT IS GENERATED FROM approriate xml file in xmlresources/gbinfomessages BY
6 THE JavaClassesGenerator.xslt. MODIFY THESE FILES INSTEAD OF THIS ONE.
7
8 IMPORTANT END !!!
9 */
10 package
11 cz.cuni.amis.pogamut.udk.communication.messages.gbinfomessages;
12 import java.util.*;
13 import javax.vecmath.*;
14 import cz.cuni.amis.pogamut.base.communication.messages.*;
15 import cz.cuni.amis.pogamut.base.communication.worldview.*;
16 import cz.cuni.amis.pogamut.base.communication.worldview.event.*;
17 import cz.cuni.amis.pogamut.base.communication.worldview.object.*;
18 import cz.cuni.amis.pogamut.base.communication.translator.event.*;
19 import cz.cuni.amis.pogamut.base3d.worldview.object.*;
20 import cz.cuni.amis.pogamut.base3d.worldview.object.event.*;
21 import cz.cuni.amis.pogamut.unreal.communication.messages.UnrealId;
22 import cz.cuni.amis.pogamut.udk.communication.messages.*;
23 import cz.cuni.amis.pogamut.udk.communication.worldview.objects.*;
24 import cz.cuni.amis.pogamut.udk.communication.translator.itemdescriptor.*;
25 import cz.cuni.amis.pogamut.udk.communication.messages.ItemType.Category;
26 import cz.cuni.amis.utils.exception.*;
27 import cz.cuni.amis.pogamut.base.communication.translator.event.IWorldObjectUpdateResult.Result;
28 import cz.cuni.amis.utils.SafeEquals;
29 import cz.cuni.amis.pogamut.multi.communication.worldview.object.*;
30
31
32 /**
33
34 Asynchronous message. Sent after succesfull init command (so usually just once).
35 Holds many attributes of the bots like speed, id starting and max health, etc.
36 Some attributes are not used due to GameBots mechanics.
37
38 Corresponding GameBots message is
39 INITED.
40
41 */
42
43 public class
44 InitedMessage
45 extends GBObjectUpdate
46
47 implements IGBWorldObjectEvent, IWorldObject
48
49 {
50
51 /**
52 Creates new instance of command InitedMessage.
53
54 Asynchronous message. Sent after succesfull init command (so usually just once).
55 Holds many attributes of the bots like speed, id starting and max health, etc.
56 Some attributes are not used due to GameBots mechanics.
57 Corresponding GameBots message for this command is
58 .
59 @param BotId
60 A unique unreal Id of the new bot.
61
62 @param HealthStart
63 Bot will always start with this health amount (usually 100).
64
65 @param HealthFull
66 Full health of the bot (usually 100).
67
68 @param HealthMax
69 Maximum health of the bot (default 199).
70
71 @param AdrenalineStart
72 Amount of adrenaline at the start. Usually 0.
73
74 @param AdrenalineMax
75 Maxium amount of the adrenaline. Usually 100 (this can trigger the combos).
76
77 @param ShieldStrengthStart
78 Starting strength of the bot armor (usually 0).
79
80 @param ShieldStrengthMax
81 Maximum strength of the bot armor (usually 150).
82
83 @param MaxMultiJump
84 Maximum amount of succesing jumps. Currently limited to double jump in GB.
85
86 @param DamageScaling
87 Damage scaling for this bot. (he will deal reduced damage depending on the setting).
88
89 @param GroundSpeed
90 Groundspeed of the bot (on the ground). Default 440.
91
92 @param WaterSpeed
93 Waterspeed of the bot (in the water).
94
95 @param AirSpeed
96 AirSpeed of the bot (in the air).
97
98 @param LadderSpeed
99 Ladderspeed of the bot (on the ladder).
100
101 @param AccelRate
102 Accelartion rate of this bot. How fast he accelerates.
103
104 @param JumpZ
105 Bot Jump's Z boost.
106
107 @param MultiJumpBoost
108 Not used in GB.
109
110 @param MaxFallSpeed
111 Max fall speed of the bot.
112
113 @param DodgeSpeedFactor
114 Dodge speed factor.
115
116 @param DodgeSpeedZ
117 Dodge jump Z boost of the bot.
118
119 @param AirControl
120 How well can be the bot controlled in the air (ranges from 0 to 1).
121
122 */
123 public InitedMessage(
124 UnrealId BotId, int HealthStart, int HealthFull, int HealthMax, double AdrenalineStart, double AdrenalineMax, int ShieldStrengthStart, int ShieldStrengthMax, int MaxMultiJump, double DamageScaling, double GroundSpeed, double WaterSpeed, double AirSpeed, double LadderSpeed, double AccelRate, double JumpZ, double MultiJumpBoost, double MaxFallSpeed, double DodgeSpeedFactor, double DodgeSpeedZ, double AirControl) {
125
126 this.BotId = BotId;
127
128 this.HealthStart = HealthStart;
129
130 this.HealthFull = HealthFull;
131
132 this.HealthMax = HealthMax;
133
134 this.AdrenalineStart = AdrenalineStart;
135
136 this.AdrenalineMax = AdrenalineMax;
137
138 this.ShieldStrengthStart = ShieldStrengthStart;
139
140 this.ShieldStrengthMax = ShieldStrengthMax;
141
142 this.MaxMultiJump = MaxMultiJump;
143
144 this.DamageScaling = DamageScaling;
145
146 this.GroundSpeed = GroundSpeed;
147
148 this.WaterSpeed = WaterSpeed;
149
150 this.AirSpeed = AirSpeed;
151
152 this.LadderSpeed = LadderSpeed;
153
154 this.AccelRate = AccelRate;
155
156 this.JumpZ = JumpZ;
157
158 this.MultiJumpBoost = MultiJumpBoost;
159
160 this.MaxFallSpeed = MaxFallSpeed;
161
162 this.DodgeSpeedFactor = DodgeSpeedFactor;
163
164 this.DodgeSpeedZ = DodgeSpeedZ;
165
166 this.AirControl = AirControl;
167
168 }
169
170
171 /** Example how the message looks like - used during parser tests. */
172 public static final String PROTOTYPE =
173 "INITED {BotId unreal_id} {HealthStart 0} {HealthFull 0} {HealthMax 0} {AdrenalineStart 0} {AdrenalineMax 0} {ShieldStrengthStart 0} {ShieldStrengthMax 0} {MaxMultiJump 0} {DamageScaling 0} {GroundSpeed 0} {WaterSpeed 0} {AirSpeed 0} {LadderSpeed 0} {AccelRate 0} {JumpZ 0} {MultiJumpBoost 0} {MaxFallSpeed 0} {DodgeSpeedFactor 0} {DodgeSpeedZ 0} {AirControl 0}";
174
175
176 /////// Properties BEGIN
177
178 /**
179
180 A unique unreal Id of the new bot.
181 */
182 protected
183 UnrealId BotId =
184 null;
185
186
187 /**
188
189 A unique unreal Id of the new bot.
190 */
191 public
192 UnrealId getBotId() {
193 return
194 BotId;
195 }
196
197
198
199 /**
200
201 Bot will always start with this health amount (usually 100).
202 */
203 protected
204 int HealthStart =
205 0;
206
207
208 /**
209
210 Bot will always start with this health amount (usually 100).
211 */
212 public
213 int getHealthStart() {
214 return
215 HealthStart;
216 }
217
218
219
220 /**
221
222 Full health of the bot (usually 100).
223 */
224 protected
225 int HealthFull =
226 0;
227
228
229 /**
230
231 Full health of the bot (usually 100).
232 */
233 public
234 int getHealthFull() {
235 return
236 HealthFull;
237 }
238
239
240
241 /**
242
243 Maximum health of the bot (default 199).
244 */
245 protected
246 int HealthMax =
247 0;
248
249
250 /**
251
252 Maximum health of the bot (default 199).
253 */
254 public
255 int getHealthMax() {
256 return
257 HealthMax;
258 }
259
260
261
262 /**
263
264 Amount of adrenaline at the start. Usually 0.
265 */
266 protected
267 double AdrenalineStart =
268 0;
269
270
271 /**
272
273 Amount of adrenaline at the start. Usually 0.
274 */
275 public
276 double getAdrenalineStart() {
277 return
278 AdrenalineStart;
279 }
280
281
282
283 /**
284
285 Maxium amount of the adrenaline. Usually 100 (this can trigger the combos).
286 */
287 protected
288 double AdrenalineMax =
289 0;
290
291
292 /**
293
294 Maxium amount of the adrenaline. Usually 100 (this can trigger the combos).
295 */
296 public
297 double getAdrenalineMax() {
298 return
299 AdrenalineMax;
300 }
301
302
303
304 /**
305
306 Starting strength of the bot armor (usually 0).
307 */
308 protected
309 int ShieldStrengthStart =
310 0;
311
312
313 /**
314
315 Starting strength of the bot armor (usually 0).
316 */
317 public
318 int getShieldStrengthStart() {
319 return
320 ShieldStrengthStart;
321 }
322
323
324
325 /**
326
327 Maximum strength of the bot armor (usually 150).
328 */
329 protected
330 int ShieldStrengthMax =
331 0;
332
333
334 /**
335
336 Maximum strength of the bot armor (usually 150).
337 */
338 public
339 int getShieldStrengthMax() {
340 return
341 ShieldStrengthMax;
342 }
343
344
345
346 /**
347
348 Maximum amount of succesing jumps. Currently limited to double jump in GB.
349 */
350 protected
351 int MaxMultiJump =
352 0;
353
354
355 /**
356
357 Maximum amount of succesing jumps. Currently limited to double jump in GB.
358 */
359 public
360 int getMaxMultiJump() {
361 return
362 MaxMultiJump;
363 }
364
365
366
367 /**
368
369 Damage scaling for this bot. (he will deal reduced damage depending on the setting).
370 */
371 protected
372 double DamageScaling =
373 0;
374
375
376 /**
377
378 Damage scaling for this bot. (he will deal reduced damage depending on the setting).
379 */
380 public
381 double getDamageScaling() {
382 return
383 DamageScaling;
384 }
385
386
387
388 /**
389
390 Groundspeed of the bot (on the ground). Default 440.
391 */
392 protected
393 double GroundSpeed =
394 0;
395
396
397 /**
398
399 Groundspeed of the bot (on the ground). Default 440.
400 */
401 public
402 double getGroundSpeed() {
403 return
404 GroundSpeed;
405 }
406
407
408
409 /**
410
411 Waterspeed of the bot (in the water).
412 */
413 protected
414 double WaterSpeed =
415 0;
416
417
418 /**
419
420 Waterspeed of the bot (in the water).
421 */
422 public
423 double getWaterSpeed() {
424 return
425 WaterSpeed;
426 }
427
428
429
430 /**
431
432 AirSpeed of the bot (in the air).
433 */
434 protected
435 double AirSpeed =
436 0;
437
438
439 /**
440
441 AirSpeed of the bot (in the air).
442 */
443 public
444 double getAirSpeed() {
445 return
446 AirSpeed;
447 }
448
449
450
451 /**
452
453 Ladderspeed of the bot (on the ladder).
454 */
455 protected
456 double LadderSpeed =
457 0;
458
459
460 /**
461
462 Ladderspeed of the bot (on the ladder).
463 */
464 public
465 double getLadderSpeed() {
466 return
467 LadderSpeed;
468 }
469
470
471
472 /**
473
474 Accelartion rate of this bot. How fast he accelerates.
475 */
476 protected
477 double AccelRate =
478 0;
479
480
481 /**
482
483 Accelartion rate of this bot. How fast he accelerates.
484 */
485 public
486 double getAccelRate() {
487 return
488 AccelRate;
489 }
490
491
492
493 /**
494
495 Bot Jump's Z boost.
496 */
497 protected
498 double JumpZ =
499 0;
500
501
502 /**
503
504 Bot Jump's Z boost.
505 */
506 public
507 double getJumpZ() {
508 return
509 JumpZ;
510 }
511
512
513
514 /**
515
516 Not used in GB.
517 */
518 protected
519 double MultiJumpBoost =
520 0;
521
522
523 /**
524
525 Not used in GB.
526 */
527 public
528 double getMultiJumpBoost() {
529 return
530 MultiJumpBoost;
531 }
532
533
534
535 /**
536
537 Max fall speed of the bot.
538 */
539 protected
540 double MaxFallSpeed =
541 0;
542
543
544 /**
545
546 Max fall speed of the bot.
547 */
548 public
549 double getMaxFallSpeed() {
550 return
551 MaxFallSpeed;
552 }
553
554
555
556 /**
557
558 Dodge speed factor.
559 */
560 protected
561 double DodgeSpeedFactor =
562 0;
563
564
565 /**
566
567 Dodge speed factor.
568 */
569 public
570 double getDodgeSpeedFactor() {
571 return
572 DodgeSpeedFactor;
573 }
574
575
576
577 /**
578
579 Dodge jump Z boost of the bot.
580 */
581 protected
582 double DodgeSpeedZ =
583 0;
584
585
586 /**
587
588 Dodge jump Z boost of the bot.
589 */
590 public
591 double getDodgeSpeedZ() {
592 return
593 DodgeSpeedZ;
594 }
595
596
597
598 /**
599
600 How well can be the bot controlled in the air (ranges from 0 to 1).
601 */
602 protected
603 double AirControl =
604 0;
605
606
607 /**
608
609 How well can be the bot controlled in the air (ranges from 0 to 1).
610 */
611 public
612 double getAirControl() {
613 return
614 AirControl;
615 }
616
617
618
619 /////// Properties END
620
621 /////// Extra Java code BEGIN
622
623 /////// Additional code from xslt BEGIN
624
625 public static final UnrealId InitedMessageId = UnrealId.get("InitedMessageId");
626
627 public UnrealId getId() {
628 return InitedMessageId;
629 }
630
631 protected double Time = 0;
632
633 protected double getTime() {
634 return Time;
635 }
636
637 protected void setTime(double time) {
638 this.Time = time;
639 }
640
641 public double getLastSeenTime() {
642 return Time;
643 }
644
645
646 public ILocalWorldObject getLocal() {
647 return null;
648 }
649
650 public ISharedWorldObject getShared() {
651 return null;
652 }
653
654 public IStaticWorldObject getStatic() {
655 return null;
656 }
657
658 @Override
659 public long getSimTime() {
660 return (long)getLastSeenTime();
661 }
662
663 public boolean equals(Object obj) {
664 if (!(obj instanceof InitedMessage)) return false;
665 InitedMessage cast = (InitedMessage)obj;
666 if (this.getId() != null) return this.getId().equals(cast.getId());
667 else return cast.getId() == null;
668 }
669
670 public int hashCode() {
671 if (getId() != null) return getId().hashCode();
672 return 0;
673 }
674
675
676
677
678 /////// Additional code from xslt END
679
680 /////// Extra Java from XML BEGIN
681
682 /////// Extra Java from XML END
683
684 /////// Extra Java code END
685
686
687
688 /**
689 * Cloning constructor.
690 */
691 public InitedMessage(InitedMessage original) {
692
693 this.BotId=original.BotId;
694
695 this.HealthStart=original.HealthStart;
696
697 this.HealthFull=original.HealthFull;
698
699 this.HealthMax=original.HealthMax;
700
701 this.AdrenalineStart=original.AdrenalineStart;
702
703 this.AdrenalineMax=original.AdrenalineMax;
704
705 this.ShieldStrengthStart=original.ShieldStrengthStart;
706
707 this.ShieldStrengthMax=original.ShieldStrengthMax;
708
709 this.MaxMultiJump=original.MaxMultiJump;
710
711 this.DamageScaling=original.DamageScaling;
712
713 this.GroundSpeed=original.GroundSpeed;
714
715 this.WaterSpeed=original.WaterSpeed;
716
717 this.AirSpeed=original.AirSpeed;
718
719 this.LadderSpeed=original.LadderSpeed;
720
721 this.AccelRate=original.AccelRate;
722
723 this.JumpZ=original.JumpZ;
724
725 this.MultiJumpBoost=original.MultiJumpBoost;
726
727 this.MaxFallSpeed=original.MaxFallSpeed;
728
729 this.DodgeSpeedFactor=original.DodgeSpeedFactor;
730
731 this.DodgeSpeedZ=original.DodgeSpeedZ;
732
733 this.AirControl=original.AirControl;
734
735 }
736
737
738 /**
739 * Used by Yylex to create empty message then to fill it's protected fields (Yylex is in the same package).
740 */
741 public InitedMessage() {
742 }
743
744
745 /**
746 * Here we save the original object for which this object is an update.
747 */
748 private IWorldObject orig = null;
749
750 public IWorldObjectUpdateResult update(IWorldObject obj) {
751 if(obj == null) {
752 orig = this;
753 return new IWorldObjectUpdateResult.WorldObjectUpdateResult(cz.cuni.amis.pogamut.base.communication.translator.event.IWorldObjectUpdateResult.Result.CREATED, this);
754 }
755 orig = obj;
756 // typecast
757 InitedMessage o = (InitedMessage)obj;
758
759 boolean updated = false;
760
761
762 if (o.HealthStart != HealthStart) {
763 o.HealthStart=HealthStart;
764 updated = true;
765 }
766
767 if (o.HealthFull != HealthFull) {
768 o.HealthFull=HealthFull;
769 updated = true;
770 }
771
772 if (o.HealthMax != HealthMax) {
773 o.HealthMax=HealthMax;
774 updated = true;
775 }
776
777 if (o.AdrenalineStart != AdrenalineStart) {
778 o.AdrenalineStart=AdrenalineStart;
779 updated = true;
780 }
781
782 if (o.AdrenalineMax != AdrenalineMax) {
783 o.AdrenalineMax=AdrenalineMax;
784 updated = true;
785 }
786
787 if (o.ShieldStrengthStart != ShieldStrengthStart) {
788 o.ShieldStrengthStart=ShieldStrengthStart;
789 updated = true;
790 }
791
792 if (o.ShieldStrengthMax != ShieldStrengthMax) {
793 o.ShieldStrengthMax=ShieldStrengthMax;
794 updated = true;
795 }
796
797 if (o.MaxMultiJump != MaxMultiJump) {
798 o.MaxMultiJump=MaxMultiJump;
799 updated = true;
800 }
801
802 if (o.DamageScaling != DamageScaling) {
803 o.DamageScaling=DamageScaling;
804 updated = true;
805 }
806
807 if (o.GroundSpeed != GroundSpeed) {
808 o.GroundSpeed=GroundSpeed;
809 updated = true;
810 }
811
812 if (o.WaterSpeed != WaterSpeed) {
813 o.WaterSpeed=WaterSpeed;
814 updated = true;
815 }
816
817 if (o.AirSpeed != AirSpeed) {
818 o.AirSpeed=AirSpeed;
819 updated = true;
820 }
821
822 if (o.LadderSpeed != LadderSpeed) {
823 o.LadderSpeed=LadderSpeed;
824 updated = true;
825 }
826
827 if (o.AccelRate != AccelRate) {
828 o.AccelRate=AccelRate;
829 updated = true;
830 }
831
832 if (o.JumpZ != JumpZ) {
833 o.JumpZ=JumpZ;
834 updated = true;
835 }
836
837 if (o.MultiJumpBoost != MultiJumpBoost) {
838 o.MultiJumpBoost=MultiJumpBoost;
839 updated = true;
840 }
841
842 if (o.MaxFallSpeed != MaxFallSpeed) {
843 o.MaxFallSpeed=MaxFallSpeed;
844 updated = true;
845 }
846
847 if (o.DodgeSpeedFactor != DodgeSpeedFactor) {
848 o.DodgeSpeedFactor=DodgeSpeedFactor;
849 updated = true;
850 }
851
852 if (o.DodgeSpeedZ != DodgeSpeedZ) {
853 o.DodgeSpeedZ=DodgeSpeedZ;
854 updated = true;
855 }
856
857 if (o.AirControl != AirControl) {
858 o.AirControl=AirControl;
859 updated = true;
860 }
861
862 o.Time = Time;
863
864
865 if (updated) {
866 return new IWorldObjectUpdateResult.WorldObjectUpdateResult(cz.cuni.amis.pogamut.base.communication.translator.event.IWorldObjectUpdateResult.Result.UPDATED, o);
867 } else {
868 return new IWorldObjectUpdateResult.WorldObjectUpdateResult(cz.cuni.amis.pogamut.base.communication.translator.event.IWorldObjectUpdateResult.Result.SAME, o);
869 }
870 }
871
872 /**
873 * Returns original object (if method update() has already been called, for bot-programmer that is always true
874 * as the original object is updated and then the event is propagated).
875 */
876 public IWorldObject getObject() {
877 if (orig == null) return this;
878 return orig;
879 }
880
881
882
883 public String toString() {
884 return
885
886 super.toString() + " | " +
887
888 "BotId = " +
889 String.valueOf(BotId) + " | " +
890
891 "HealthStart = " +
892 String.valueOf(HealthStart) + " | " +
893
894 "HealthFull = " +
895 String.valueOf(HealthFull) + " | " +
896
897 "HealthMax = " +
898 String.valueOf(HealthMax) + " | " +
899
900 "AdrenalineStart = " +
901 String.valueOf(AdrenalineStart) + " | " +
902
903 "AdrenalineMax = " +
904 String.valueOf(AdrenalineMax) + " | " +
905
906 "ShieldStrengthStart = " +
907 String.valueOf(ShieldStrengthStart) + " | " +
908
909 "ShieldStrengthMax = " +
910 String.valueOf(ShieldStrengthMax) + " | " +
911
912 "MaxMultiJump = " +
913 String.valueOf(MaxMultiJump) + " | " +
914
915 "DamageScaling = " +
916 String.valueOf(DamageScaling) + " | " +
917
918 "GroundSpeed = " +
919 String.valueOf(GroundSpeed) + " | " +
920
921 "WaterSpeed = " +
922 String.valueOf(WaterSpeed) + " | " +
923
924 "AirSpeed = " +
925 String.valueOf(AirSpeed) + " | " +
926
927 "LadderSpeed = " +
928 String.valueOf(LadderSpeed) + " | " +
929
930 "AccelRate = " +
931 String.valueOf(AccelRate) + " | " +
932
933 "JumpZ = " +
934 String.valueOf(JumpZ) + " | " +
935
936 "MultiJumpBoost = " +
937 String.valueOf(MultiJumpBoost) + " | " +
938
939 "MaxFallSpeed = " +
940 String.valueOf(MaxFallSpeed) + " | " +
941
942 "DodgeSpeedFactor = " +
943 String.valueOf(DodgeSpeedFactor) + " | " +
944
945 "DodgeSpeedZ = " +
946 String.valueOf(DodgeSpeedZ) + " | " +
947
948 "AirControl = " +
949 String.valueOf(AirControl) + " | " +
950 "";
951
952 }
953
954 public String toHtmlString() {
955 return super.toString() +
956
957 "<b>BotId</b> : " +
958 String.valueOf(BotId) +
959 " <br/> " +
960
961 "<b>HealthStart</b> : " +
962 String.valueOf(HealthStart) +
963 " <br/> " +
964
965 "<b>HealthFull</b> : " +
966 String.valueOf(HealthFull) +
967 " <br/> " +
968
969 "<b>HealthMax</b> : " +
970 String.valueOf(HealthMax) +
971 " <br/> " +
972
973 "<b>AdrenalineStart</b> : " +
974 String.valueOf(AdrenalineStart) +
975 " <br/> " +
976
977 "<b>AdrenalineMax</b> : " +
978 String.valueOf(AdrenalineMax) +
979 " <br/> " +
980
981 "<b>ShieldStrengthStart</b> : " +
982 String.valueOf(ShieldStrengthStart) +
983 " <br/> " +
984
985 "<b>ShieldStrengthMax</b> : " +
986 String.valueOf(ShieldStrengthMax) +
987 " <br/> " +
988
989 "<b>MaxMultiJump</b> : " +
990 String.valueOf(MaxMultiJump) +
991 " <br/> " +
992
993 "<b>DamageScaling</b> : " +
994 String.valueOf(DamageScaling) +
995 " <br/> " +
996
997 "<b>GroundSpeed</b> : " +
998 String.valueOf(GroundSpeed) +
999 " <br/> " +
1000
1001 "<b>WaterSpeed</b> : " +
1002 String.valueOf(WaterSpeed) +
1003 " <br/> " +
1004
1005 "<b>AirSpeed</b> : " +
1006 String.valueOf(AirSpeed) +
1007 " <br/> " +
1008
1009 "<b>LadderSpeed</b> : " +
1010 String.valueOf(LadderSpeed) +
1011 " <br/> " +
1012
1013 "<b>AccelRate</b> : " +
1014 String.valueOf(AccelRate) +
1015 " <br/> " +
1016
1017 "<b>JumpZ</b> : " +
1018 String.valueOf(JumpZ) +
1019 " <br/> " +
1020
1021 "<b>MultiJumpBoost</b> : " +
1022 String.valueOf(MultiJumpBoost) +
1023 " <br/> " +
1024
1025 "<b>MaxFallSpeed</b> : " +
1026 String.valueOf(MaxFallSpeed) +
1027 " <br/> " +
1028
1029 "<b>DodgeSpeedFactor</b> : " +
1030 String.valueOf(DodgeSpeedFactor) +
1031 " <br/> " +
1032
1033 "<b>DodgeSpeedZ</b> : " +
1034 String.valueOf(DodgeSpeedZ) +
1035 " <br/> " +
1036
1037 "<b>AirControl</b> : " +
1038 String.valueOf(AirControl) +
1039 " <br/> " +
1040 "";
1041 }
1042
1043
1044
1045 }
1046
1047